🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@kabeep/forex-cli

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@kabeep/forex-cli - npm Package Compare versions

Comparing version
0.3.1
to
0.4.0
+106
-53
dist/cli.js
#!/usr/bin/env node
import { readFileSync } from 'node:fs';
import fs, { readFileSync as readFileSync$1 } from 'node:fs';
import process from 'node:process';

@@ -9,2 +9,3 @@ import updateNotifier from 'update-notifier';

import ora from 'ora';
import envPaths from 'env-paths';
import { osLocaleSync } from 'os-locale';

@@ -15,2 +16,3 @@ import confirm from '@inquirer/confirm';

import translate from '@kabeep/node-translate';
import path from 'node:path';
import { isDate } from 'node:util/types';

@@ -21,2 +23,3 @@ import clipboard from 'clipboardy';

var LOCALE_CODE = osLocaleSync();
var cacheDirectory = envPaths("@kabeep/forex-cli").cache;

@@ -59,3 +62,5 @@ // src/locale/en-US.ts

CMD_ERR_INVALID_DATE: "Invalid date, please check --date parameter",
CMD_ERR_INVALID_AMOUNT: '"{{amount}}" is not a valid amount. Please enter a valid amount, such as "1000", "1,000", "1e3" or "1k"',
CMD_ERR_INVALID_AMOUNT: '"{{amount}}" \u4E0D\u662F\u6709\u6548\u91D1\u989D, \u8BF7\u8F93\u5165\u6709\u6548\u91D1\u989D, \u4F8B\u5982 "1000" \u6216 "1e3", \u518D\u6BD4\u5982 "101,001,001.01" \u6216 "1b1m1k1.01"',
CMD_ERR_CREATE_CACHE_DIR: "The cache directory cannot be created, please check CLI permissions",
CMD_ERR_WRITE_CACHE_FILE: "Unable to write cached files, please check CLI permissions",
CMD_ERR_TIMEOUT_CURRENCIES: "Request for list of available currencies timed out",

@@ -111,2 +116,4 @@ CMD_ERR_CLIPBOARD_WRITE: "Clipboard writing failed",

CMD_ERR_INVALID_AMOUNT: '"{{amount}}" \u4E0D\u662F\u6709\u6548\u91D1\u989D, \u8BF7\u8F93\u5165\u6709\u6548\u91D1\u989D, \u4F8B\u5982 "1000" \u6216 "1e3", \u518D\u6BD4\u5982 "101,001,001.01" \u6216 "1b1m1k1.01"',
CMD_ERR_CREATE_CACHE_DIR: "\u65E0\u6CD5\u521B\u5EFA\u7F13\u5B58\u76EE\u5F55, \u8BF7\u68C0\u67E5 CLI \u6743\u9650",
CMD_ERR_WRITE_CACHE_FILE: "\u65E0\u6CD5\u5199\u5165\u7F13\u5B58\u6587\u4EF6, \u8BF7\u68C0\u67E5 CLI \u6743\u9650",
CMD_ERR_TIMEOUT_CURRENCIES: "\u8BF7\u6C42\u53EF\u7528\u8D27\u5E01\u5217\u8868\u8D85\u65F6",

@@ -117,5 +124,5 @@ CMD_ERR_CLIPBOARD_WRITE: "\u5199\u5165\u526A\u8D34\u677F\u5931\u8D25",

CMD_ERR_INVALID_TO: "\u65E0\u6548\u7684\u76EE\u6807\u8D27\u5E01\u6216\u533A\u57DF\u4EE3\u7801",
CMD_ERR_TIMEOUT_RATE: "\u8BF7\u6C42\u8D27\u5E01\u6C47\u7387\u8D85\u65F6",
CMD_ERR_TIMEOUT_RATE: "\u83B7\u53D6\u8D27\u5E01\u6C47\u7387\u8D85\u65F6",
CMD_ERR_INVALID_RATE: "\u5728\u6307\u5B9A\u65E5\u671F\u4E0D\u53EF\u7528\u7684\u8D27\u5E01\u4EE3\u7801",
CMD_ERR_TIMEOUT_CONVERT: "\u8BF7\u6C42\u5151\u6362\u91D1\u989D\u8D85\u65F6",
CMD_ERR_TIMEOUT_CONVERT: "\u83B7\u53D6\u5151\u6362\u91D1\u989D\u8D85\u65F6",
CMD_ERR_INVALID_CONVERT: "\u5728\u6307\u5B9A\u65E5\u671F\u4E0D\u53D7\u53EF\u7528\u7684\u8D27\u5E01\u4EE3\u7801",

@@ -167,10 +174,10 @@ CMD_ERR_INVALID_COUNTRY: "\u5C1A\u672A\u652F\u6301\u7528\u7684\u56FD\u5BB6\u6216\u5730\u533A\u540D\u79F0",

}
t(path, variables, defaultValue) {
const value = this.get(this.dictionary, path);
t(path2, variables, defaultValue) {
const value = this.get(this.dictionary, path2);
if (typeof value === "object")
return this.t(`${path}.DEFAULT`, variables, defaultValue);
return typeof value === "string" ? this.compiled(value, variables) : defaultValue || path;
return this.t(`${path2}.DEFAULT`, variables, defaultValue);
return typeof value === "string" ? this.compiled(value, variables) : defaultValue || path2;
}
get(obj, path) {
return path.split(".").reduce(
get(obj, path2) {
return path2.split(".").reduce(
(acc, key) => {

@@ -180,3 +187,3 @@ if (acc && typeof acc === "object" && key in acc) {

}
return undefined;
return void 0;
},

@@ -295,5 +302,5 @@ obj

const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
return [parsedError, void 0];
}
return [err, undefined];
return [err, void 0];
});

@@ -413,3 +420,66 @@ }

var get_code_name_default = getCodeName;
function pathExist(filepath) {
try {
fs.accessSync(filepath, fs.constants.R_OK);
return true;
} catch {
return false;
}
}
var path_exist_default = pathExist;
// src/helper/_internal/ensure-directory.ts
function ensureDirectory(directoryPath) {
if (path_exist_default(directoryPath)) return;
try {
fs.mkdirSync(directoryPath, { recursive: true });
return;
} catch (err) {
return err;
}
}
var ensure_directory_default = ensureDirectory;
function readFileSync(filepath) {
const result = fs.readFileSync(filepath, { encoding: "utf8" });
try {
return JSON.parse(result);
} catch {
return result;
}
}
var read_file_sync_default = readFileSync;
function writeFileSync(filepath, content) {
try {
fs.writeFileSync(filepath, JSON.stringify(content), "utf8");
} catch (err) {
return err;
}
}
var write_file_sync_default = writeFileSync;
// src/helper/get-currencies.ts
async function getCurrencies(client) {
const unexpected = ensure_directory_default(cacheDirectory);
if (unexpected) throw new Error("CREATE_CACHE_DIR");
const date = /* @__PURE__ */ new Date();
const formatDateString = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const cachePath = path.join(cacheDirectory, "currencies.json");
const isExisted = path_exist_default(cachePath);
if (isExisted) {
const { date: date2, currencies } = read_file_sync_default(cachePath);
const isExpired = date2 !== formatDateString;
if (!isExpired) return currencies;
}
const [err, result] = await to_default(client.getCurrencies(date));
ensure_default(!err, "TIMEOUT_CURRENCIES");
ensure_default(result.data?.length, "INVALID_CURRENCIES");
const disabled = write_file_sync_default(cachePath, {
date: formatDateString,
currencies: result.data
});
if (disabled) throw new Error("WRITE_CACHE_DIR");
return result.data;
}
var get_currencies_default = getCurrencies;
// src/helper/is-valid-code.ts

@@ -491,14 +561,14 @@ function isValidCode(code, currencies) {

// src/helper/_internal/craete-palette.ts
// src/helper/_internal/create-palette.ts
function createPalette(open, close) {
return (text) => `\x1B[${open}m${text}\x1B[${close}m`;
}
var craete_palette_default = createPalette;
var create_palette_default = createPalette;
// src/helper/palette.ts
var colorful = (code) => craete_palette_default(code, 39);
var colorful = (code) => create_palette_default(code, 39);
var palette = Object.assign(
(open, close) => craete_palette_default(open, close),
(open, close) => create_palette_default(open, close),
{
dim: craete_palette_default(2, 22),
dim: create_palette_default(2, 22),
black: colorful(30),

@@ -598,10 +668,5 @@ red: colorful(31),

"CMD_MSG_FETCH_CURRENCIES",
async () => {
const [err, result] = await to_default(client.getCurrencies(date));
ensure_default(!err, "TIMEOUT_CURRENCIES");
ensure_default(result.data?.length, "INVALID_CURRENCIES");
return result.data;
},
() => get_currencies_default(client),
{ date: formatDateString },
verbose ? spinner : undefined
verbose ? spinner : void 0
);

@@ -611,11 +676,9 @@ ensure_default(is_valid_code_default(code, currencies), "INVALID_FROM");

"CMD_MSG_FETCH_TRANSLATION",
() => {
return get_code_name_default(code, currencies, translate2, timeout);
},
() => get_code_name_default(code, currencies, translate2, timeout),
{ date: formatDateString },
verbose && translate2 ? spinner : undefined
verbose && translate2 ? spinner : void 0
);
clipboard2 && await use_clipboard_default(
`${name} (${code})`,
verbose ? spinner : undefined
verbose ? spinner : void 0
);

@@ -645,10 +708,5 @@ return `${palette_default.yellow(name)} (${palette_default.blue(code)})`;

"CMD_MSG_FETCH_CURRENCIES",
async () => {
const [err, result] = await to_default(client.getCurrencies(date));
ensure_default(!err, "TIMEOUT_CURRENCIES");
ensure_default(result.data?.length, "INVALID_CURRENCIES");
return result.data;
},
() => get_currencies_default(client),
{ date: formatDateString },
verbose ? spinner : undefined
verbose ? spinner : void 0
);

@@ -675,3 +733,3 @@ ensure_default(is_valid_code_default(baseCode, currencies), "INVALID_FROM");

{ date: formatDateString },
verbose && translate2 ? spinner : undefined
verbose && translate2 ? spinner : void 0
);

@@ -700,5 +758,5 @@ const print = create_message_default(

},
verbose ? spinner : undefined
verbose ? spinner : void 0
);
clipboard2 && await use_clipboard_default(rate, verbose ? spinner : undefined);
clipboard2 && await use_clipboard_default(rate, verbose ? spinner : void 0);
return print(palette_default.yellow(use_statistic_default(rate)));

@@ -723,5 +781,5 @@ }

},
verbose ? spinner : undefined
verbose ? spinner : void 0
);
clipboard2 && await use_clipboard_default(resultData, verbose ? spinner : undefined);
clipboard2 && await use_clipboard_default(resultData, verbose ? spinner : void 0);
return print(

@@ -748,10 +806,5 @@ palette_default.yellow(use_statistic_default(numericAmount, { precision: 2 })),

"CMD_MSG_FETCH_CURRENCIES",
async () => {
const [err, result] = await to_default(client.getCurrencies(date));
ensure_default(!err, "TIMEOUT_CURRENCIES");
ensure_default(result.data?.length, "INVALID_CURRENCIES");
return result.data;
},
() => get_currencies_default(client),
{ date: formatDateString },
verbose ? spinner : undefined
verbose ? spinner : void 0
);

@@ -766,7 +819,7 @@ const translation = await use_handler_default(

)
) : [undefined, undefined];
) : [void 0, void 0];
return result;
},
{ date: formatDateString },
verbose && translate2 ? spinner : undefined
verbose && translate2 ? spinner : void 0
);

@@ -777,3 +830,3 @@ clipboard2 && await use_clipboard_default(

).join("\n"),
verbose ? spinner : undefined
verbose ? spinner : void 0
);

@@ -814,3 +867,3 @@ if (!pretty) {

var pkg = JSON.parse(
readFileSync(new URL("../package.json", import.meta.url)).toString("utf8")
readFileSync$1(new URL("../package.json", import.meta.url)).toString("utf8")
);

@@ -817,0 +870,0 @@ updateNotifier({ pkg }).notify({ isGlobal: true });

{
"name": "@kabeep/forex-cli",
"description": "A Node.js Library to convert foreign exchange in terminal",
"version": "0.3.1",
"version": "0.4.0",
"type": "module",

@@ -31,2 +31,3 @@ "main": "./dist/cli.js",

"clipboardy": "^4.0.0",
"env-paths": "^3.0.0",
"iso-3166-1": "^2.1.1",

@@ -52,3 +53,3 @@ "ora": "^8.1.1",

"typescript": "^5.7.2",
"vitest": "^2.1.8"
"vitest": "^3.0.8"
},

@@ -55,0 +56,0 @@ "author": "Zhang Zixin (kabeep)",