Skip to content

Commit

Permalink
Implement consola
Browse files Browse the repository at this point in the history
  • Loading branch information
AgustinSilverfin committed Sep 12, 2023
1 parent bbde12b commit 47cc638
Show file tree
Hide file tree
Showing 20 changed files with 265 additions and 191 deletions.
22 changes: 13 additions & 9 deletions bin/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,19 @@ const devMode = require("../lib/cli/devMode");
const { firmCredentials } = require("../lib/api/firmCredentials");
const SF = require("../lib/api/sfApi");
const path = require("path");
const { consola } = require("consola");

let firmIdDefault = cliUtils.loadDefaultFirmId();
cliUtils.handleUncaughtErrors();

// Name & Version
program.name("silverfin");
if (pkg.version) {
program.version(pkg.version);
}
pkg.version ? program.version(pkg.version) : undefined;
// Verbose Option
program.option("-v, --verbose", "Verbose output");
program.on("option:verbose", () => {
consola.level = "debug"; // default: "info"
});

// READ reconciliations
program
Expand Down Expand Up @@ -482,21 +486,21 @@ program
if (options.setFirm) {
firmCredentials.setDefaultFirmId(options.setFirm);
const currentDirectory = path.basename(process.cwd());
console.log(`${currentDirectory}: firm id set to ${options.setFirm}`);
consola.success(`${currentDirectory}: firm id set to ${options.setFirm}`);
}
if (options.getFirm) {
const storedFirmId = firmCredentials.getDefaultFirmId();
if (storedFirmId) {
console.log(`Firm id previously stored: ${storedFirmId}`);
consola.info(`Firm id previously stored: ${storedFirmId}`);
} else {
console.log("There is no firm id previously stored");
consola.info("There is no firm id previously stored");
}
}
if (options.listAll) {
const ids = firmCredentials.listStoredIds() || [];
if (ids) {
console.log("List of authorized firms");
ids.forEach((element) => console.log("- " + element));
const bullets = "\n - " + ids.join("\n - ");
consola.info("List of authorized firms:", bullets);
}
}
});
Expand Down Expand Up @@ -637,5 +641,5 @@ if (pkg.repository && pkg.repository.url) {
(async function () {
// Check if there is a new version available
await cliUpdates.checkVersions();
program.parse();
await program.parseAsync();
})();
122 changes: 78 additions & 44 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ const errorUtils = require("./lib/utils/errorUtils");
const { ReconciliationText } = require("./lib/reconciliationText");
const { SharedPart } = require("./lib/sharedPart");
const { ExportFile } = require("./lib/exportFile");
const { consola } = require("consola");

async function fetchReconciliationByHandle(firmId, handle) {
const template = await SF.findReconciliationTextByHandle(firmId, handle);
if (!template) {
throw `Reconciliation ${handle} wasn't found`;
consola.error(`Reconciliation "${handle}" wasn't found`);
process.exit(1);
}
ReconciliationText.save(firmId, template);
consola.success(`Reconciliation "${handle}" imported`);
}

async function fetchReconciliationById(firmId, id) {
Expand All @@ -29,7 +32,7 @@ async function fetchAllReconciliations(firmId, page = 1) {
const templates = await SF.readReconciliationTexts(firmId, page);
if (templates.length == 0) {
if (page == 1) {
console.log("No reconciliations found");
consola.error(`No reconciliations found in firm ${firmId}`);
}
return;
}
Expand All @@ -47,19 +50,28 @@ async function publishReconciliationByHandle(
try {
const templateConfig = fsUtils.readConfig("reconciliationText", handle);
if (!templateConfig || !templateConfig.id[firmId]) {
console.log(`Reconciliation ${handle}: ID is missing. Aborted`);
console.log(
`Try running: ${chalk.bold(
`silverfin get-reconciliation-id --handle ${handle}`
)} or ${chalk.bold(`silverfin get-reconciliation-id --all`)}`
const updatedId = await getTemplateId(
firmId,
"reconciliationText",
handle
);
process.exit(1);
if (!updatedId) {
consola.error(`Reconciliation ${handle}: ID is missing. Aborted`);
process.exit(1);
}
}
let templateId = templateConfig.id[firmId];
console.log(`Updating ${handle}...`);
consola.debug(`Updating ${handle}...`);
const template = await ReconciliationText.read(handle);
template.version_comment = message;
await SF.updateReconciliationText(firmId, templateId, template);
const response = await SF.updateReconciliationText(
firmId,
templateId,
template
);
if (response.status == 201) {
consola.success(`Reconciliation "${handle}" updated`);
}
} catch (error) {
errorUtils.errorHandler(error);
}
Expand Down Expand Up @@ -87,8 +99,8 @@ async function newReconciliation(
handle
);
if (existingTemplate) {
console.log(
`Reconciliation ${handle} already exists. Skipping its creation`
consola.info(
`Reconciliation "${handle}" already exists. Skipping its creation`
);
return;
}
Expand All @@ -99,6 +111,7 @@ async function newReconciliation(
// Store new id
if (response && response.status == 201) {
ReconciliationText.updateTemplateId(firmId, handle, response.data.id);
consola.success(`Reconciliation "${handle}" created`);
}
} catch (error) {
errorUtils.errorHandler(error);
Expand All @@ -118,24 +131,28 @@ async function newAllReconciliations(
async function fetchExportFileByHandle(firmId, name) {
const template = await SF.findExportFileByName(firmId, name);
if (!template) {
throw `Export file ${name} wasn't found`;
consola.error(`Export file "${name}" wasn't found`);
process.exit(1);
}
ExportFile.save(firmId, template);
consola.success(`Export file "${name}" imported`);
}

async function fetchExportFileById(firmId, id) {
const template = await SF.readExportFileById(firmId, id);
if (!template) {
throw `Export file with id ${id} wasn't found`;
consola.error(`Export file with id ${id} wasn't found`);
process.exit(1);
}
ExportFile.save(firmId, template);
consola.success(`Export file "${template.name}" imported`);
}

async function fetchAllExportFiles(firmId, page = 1) {
const templates = await SF.readExportFiles(firmId, page);
if (templates.length == 0) {
if (page == 1) {
console.log("No export files found");
consola.error(`No export files found in firm ${firmId}`);
}
return;
}
Expand All @@ -153,14 +170,20 @@ async function publishExportFileByName(
try {
const templateConfig = fsUtils.readConfig("exportFile", name);
if (!templateConfig || !templateConfig.id[firmId]) {
console.log(`Export file ${name}: ID is missing. Aborted`);
process.exit(1);
const updatedId = await getTemplateId(firmId, "exportfile", handle);
if (!updatedId) {
consola.error(`Export file ${name}: ID is missing. Aborted`);
process.exit(1);
}
}
let templateId = templateConfig.id[firmId];
console.log(`Updating ${name}...`);
consola.debug(`Updating ${name}...`);
const template = await ExportFile.read(name);
template.version_comment = message;
await SF.updateExportFile(firmId, templateId, template);
const response = await SF.updateExportFile(firmId, templateId, template);
if (response.status == 201) {
consola.success(`Export file "${name}" updated`);
}
} catch (error) {
errorUtils.errorHandler(error);
}
Expand All @@ -185,8 +208,8 @@ async function newExportFile(
try {
const existingTemplate = await SF.findExportFileByName(firmId, name);
if (existingTemplate) {
console.log(
`Reconciliation ${name} already exists. Skipping its creation`
consola.info(
`Export file "${name}" already exists. Skipping its creation`
);
return;
}
Expand All @@ -197,6 +220,7 @@ async function newExportFile(
// Store new id
if (response && response.status == 201) {
ExportFile.updateTemplateId(firmId, name, response.data.id);
consola.success(`Export file "${name}" created`);
}
} catch (error) {
errorUtils.errorHandler(error);
Expand All @@ -222,15 +246,17 @@ async function importExistingSharedPartById(firmId, id) {
const sharedPart = await SF.readSharedPartById(firmId, id);

if (!sharedPart) {
throw `Shared part ${id} wasn't found.`;
consola.error(`Shared part ${id} wasn't found.`);
process.exit(1);
}
await SharedPart.save(firmId, sharedPart.data);
consola.success(`Shared part "${sharedPart.data.name}" imported`);
}

async function fetchSharedPartByName(firmId, name) {
const sharedPartByName = await SF.findSharedPartByName(firmId, name);
if (!sharedPartByName) {
throw `Shared part with name ${name} wasn't found.`;
consola.error(`Shared part "${name}" wasn't found.`);
}
return importExistingSharedPartById(firmId, sharedPartByName.id);
}
Expand All @@ -240,7 +266,7 @@ async function fetchAllSharedParts(firmId, page = 1) {
const sharedParts = response.data;
if (sharedParts.length == 0) {
if (page == 1) {
console.log(`No shared parts found`);
consola.error(`No shared parts found in firm ${firmId}`);
}
return;
}
Expand All @@ -258,18 +284,23 @@ async function publishSharedPartByName(
try {
const templateConfig = fsUtils.readConfig("sharedPart", name);
if (!templateConfig || !templateConfig.id[firmId]) {
console.log(`Shared part ${name}: ID is missing. Aborted`);
console.log(
`Try running: ${chalk.bold(
`silverfin get-shared-part-id --shared-part ${name}`
)} or ${chalk.bold(`silverfin get-shared-part-id --all`)}`
);
process.exit(1);
const updatedId = await getTemplateId(firmId, "sharedPart", handle);
if (!updatedId) {
consola.error(`Shared part ${name}: ID is missing. Aborted`);
process.exit(1);
}
}
console.log(`Updating shared part ${name}...`);
consola.debug(`Updating shared part ${name}...`);
const template = await SharedPart.read(name);
template.version_comment = message;
await SF.updateSharedPart(firmId, templateConfig.id[firmId], template);
const response = await SF.updateSharedPart(
firmId,
templateConfig.id[firmId],
template
);
if (response.status == 201) {
consola.success(`Shared part "${name}" updated`);
}
} catch (error) {
errorUtils.errorHandler(error);
}
Expand All @@ -294,7 +325,9 @@ async function newSharedPart(
try {
const existingSharedPart = await SF.findSharedPartByName(firmId, name);
if (existingSharedPart) {
console.log(`Shared part ${name} already exists. Skipping its creation`);
consola.info(
`Shared part "${name}" already exists. Skipping its creation`
);
return;
}
const template = await SharedPart.read(name);
Expand All @@ -304,6 +337,7 @@ async function newSharedPart(
// Store new firm id
if (response && response.status == 201) {
SharedPart.updateTemplateId(firmId, name, response.data.id);
consola.success(`Shared part "${name}" created`);
}
} catch (error) {
errorUtils.errorHandler(error);
Expand Down Expand Up @@ -347,7 +381,7 @@ async function addSharedPartToReconciliation(
reconciliationHandle
);
if (!updated) {
console.error(`Reconciliation ${reconciliationHandle}: ID not found.`);
consola.error(`Reconciliation ${reconciliationHandle}: ID not found.`);
return false;
}
configReconciliation = await fsUtils.readConfig(
Expand All @@ -364,7 +398,7 @@ async function addSharedPartToReconciliation(
sharedPartHandle
);
if (!updated) {
console.error(`Shared part ${sharedPartHandle}: ID not found.`);
consola.error(`Shared part ${sharedPartHandle}: ID not found.`);
return false;
}
configSharedPart = await fsUtils.readConfig(
Expand All @@ -381,12 +415,12 @@ async function addSharedPartToReconciliation(
);

if (!response || !response.status || !response.status === 201) {
console.log(
consola.warn(
`Adding shared part "${sharedPartHandle}" to "${reconciliationHandle}" reconciliation text failed.`
);
return false;
}
console.log(
consola.success(
`Shared part "${sharedPartHandle}" added to "${reconciliationHandle}" reconciliation text.`
);

Expand Down Expand Up @@ -442,11 +476,11 @@ async function addAllSharedPartsToAllReconciliation(firmId) {
let configSharedPart = fsUtils.readConfig("sharedPart", sharedPartName);
for (let reconciliation of configSharedPart.used_in) {
if (!reconciliation.handle) {
console.log(`Reconciliation has no handle. Skipping.`);
consola.warn(`Reconciliation has no handle. Skipping.`);
continue;
}
if (!fs.existsSync(`./reconciliation_texts/${reconciliation.handle}`)) {
console.log(
consola.warn(
`Reconciliation ${reconciliation.handle} not found. Skipping.`
);
continue;
Expand Down Expand Up @@ -478,7 +512,7 @@ async function removeSharedPartFromReconciliation(
configReconciliation.id[firmId]
);
if (response.status === 200) {
console.log(
consola.success(
`Shared part "${sharedPartHandle}" removed from "${reconciliationHandle}" reconciliation text.`
);
}
Expand All @@ -505,6 +539,7 @@ async function removeSharedPartFromReconciliation(
// Look for the template in Silverfin with the handle/name and get it's ID
// Type has to be either "reconciliationText", "exportFile" or "sharedPart"
async function getTemplateId(firmId, type, handle) {
consola.debug(`Getting ID for ${handle}...`);
let templateText;
switch (type) {
case "reconciliationText":
Expand All @@ -518,7 +553,7 @@ async function getTemplateId(firmId, type, handle) {
break;
}
if (!templateText) {
console.log(`${handle} wasn't found`);
consola.debug(`${handle} wasn't found`);
return false;
}
const config = fsUtils.readConfig(type, handle);
Expand All @@ -527,7 +562,7 @@ async function getTemplateId(firmId, type, handle) {
}
config.id[firmId] = templateText.id;
fsUtils.writeConfig(type, handle, config);
console.log(`${handle}: ID updated`);
consola.debug(`${handle}: ID updated`);
return true;
}

Expand All @@ -541,7 +576,6 @@ async function getAllTemplatesId(firmId, type) {
if (!handle) {
continue;
}
console.log(`Getting ID for ${handle}...`);
await getTemplateId(firmId, type, handle);
}
} catch (error) {
Expand Down
Loading

0 comments on commit 47cc638

Please sign in to comment.