@timecell/cli 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -15
- package/dist/index.js.map +1 -1
- package/dist/wizard.d.ts +9 -0
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +76 -23
- package/dist/wizard.js.map +1 -1
- package/package.json +6 -4
package/dist/index.js
CHANGED
|
@@ -2,30 +2,44 @@
|
|
|
2
2
|
import { buildServer } from "@timecell/api";
|
|
3
3
|
import open from "open";
|
|
4
4
|
import { runWizard } from "./wizard.js";
|
|
5
|
-
const
|
|
5
|
+
const DEFAULT_PORT = 3737;
|
|
6
|
+
const MAX_PORT_ATTEMPTS = 10;
|
|
6
7
|
function printBanner() {
|
|
7
8
|
console.log("─────────────────────────────────────────────");
|
|
8
9
|
console.log(" TimeCell v0.1.0 — Crash Survival Calculator");
|
|
9
10
|
console.log("─────────────────────────────────────────────");
|
|
10
11
|
}
|
|
12
|
+
async function findAvailablePort(server, startPort) {
|
|
13
|
+
for (let port = startPort; port < startPort + MAX_PORT_ATTEMPTS; port++) {
|
|
14
|
+
try {
|
|
15
|
+
await server.listen({ port, host: "0.0.0.0" });
|
|
16
|
+
return port;
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
if (err.code === "EADDRINUSE") {
|
|
20
|
+
if (port === startPort) {
|
|
21
|
+
console.log(` Port ${port} in use, trying next...`);
|
|
22
|
+
}
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`No available port found (tried ${startPort}-${startPort + MAX_PORT_ATTEMPTS - 1})`);
|
|
29
|
+
}
|
|
11
30
|
async function main() {
|
|
12
31
|
printBanner();
|
|
13
32
|
await runWizard();
|
|
14
|
-
console.log("\nStarting TimeCell
|
|
33
|
+
console.log("\nStarting TimeCell server...");
|
|
15
34
|
const server = await buildServer();
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
console.log(`\nTimeCell is running at ${APP_URL}`);
|
|
24
|
-
console.log("Opening browser...\n");
|
|
25
|
-
await open(APP_URL);
|
|
26
|
-
console.log("Press Ctrl+C to stop.\n");
|
|
35
|
+
const port = await findAvailablePort(server, DEFAULT_PORT);
|
|
36
|
+
const url = `http://localhost:${port}`;
|
|
37
|
+
console.log(`\n TimeCell is running at ${url}`);
|
|
38
|
+
console.log(" Opening browser...\n");
|
|
39
|
+
await open(url);
|
|
40
|
+
console.log(" Press Ctrl+C to stop.\n");
|
|
27
41
|
const shutdown = async () => {
|
|
28
|
-
console.log("\
|
|
42
|
+
console.log("\n Shutting down TimeCell...");
|
|
29
43
|
await server.close();
|
|
30
44
|
process.exit(0);
|
|
31
45
|
};
|
|
@@ -33,7 +47,7 @@ async function main() {
|
|
|
33
47
|
process.on("SIGTERM", shutdown);
|
|
34
48
|
}
|
|
35
49
|
main().catch((err) => {
|
|
36
|
-
console.error("
|
|
50
|
+
console.error("Error:", err.message || err);
|
|
37
51
|
process.exit(1);
|
|
38
52
|
});
|
|
39
53
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAW,EAAE,SAAiB;IAC7D,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,yBAAyB,CAAC,CAAC;gBACvD,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,IAAI,SAAS,GAAG,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC;AACvG,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,WAAW,EAAE,CAAC;IAEd,MAAM,SAAS,EAAE,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/wizard.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { PortfolioInput } from "@timecell/engine";
|
|
2
|
+
export interface CurrencyOption {
|
|
3
|
+
code: string;
|
|
4
|
+
symbol: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
2
7
|
export interface WizardResult {
|
|
3
8
|
portfolio: PortfolioInput;
|
|
9
|
+
currency: {
|
|
10
|
+
code: string;
|
|
11
|
+
symbol: string;
|
|
12
|
+
};
|
|
4
13
|
}
|
|
5
14
|
export declare function runWizard(): Promise<WizardResult>;
|
|
6
15
|
//# sourceMappingURL=wizard.d.ts.map
|
package/dist/wizard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AA0DD,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAyCvD"}
|
package/dist/wizard.js
CHANGED
|
@@ -1,46 +1,99 @@
|
|
|
1
|
-
import { number } from "@inquirer/prompts";
|
|
1
|
+
import { input, number, select } from "@inquirer/prompts";
|
|
2
2
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
const CONFIG_DIR = join(homedir(), ".timecell");
|
|
6
6
|
const PORTFOLIO_PATH = join(CONFIG_DIR, "portfolio.json");
|
|
7
|
+
const CURRENCIES = [
|
|
8
|
+
{ code: "USD", symbol: "$", name: "USD ($)" },
|
|
9
|
+
{ code: "INR", symbol: "\u20B9", name: "INR (\u20B9)" },
|
|
10
|
+
{ code: "EUR", symbol: "\u20AC", name: "EUR (\u20AC)" },
|
|
11
|
+
{ code: "GBP", symbol: "\u00A3", name: "GBP (\u00A3)" },
|
|
12
|
+
{ code: "SGD", symbol: "S$", name: "SGD (S$)" },
|
|
13
|
+
];
|
|
14
|
+
const SUFFIX_MULTIPLIERS = {
|
|
15
|
+
k: 1_000,
|
|
16
|
+
m: 1_000_000,
|
|
17
|
+
b: 1_000_000_000,
|
|
18
|
+
cr: 10_000_000,
|
|
19
|
+
lk: 100_000,
|
|
20
|
+
l: 100_000,
|
|
21
|
+
};
|
|
22
|
+
// Matches optional number (with decimals) followed by optional suffix
|
|
23
|
+
const SHORTHAND_RE = /^([0-9]*\.?[0-9]+)\s*(k|m|b|cr|lk|l)$/i;
|
|
24
|
+
function parseNumber(raw) {
|
|
25
|
+
// Strip commas, currency symbols, whitespace (but preserve suffix letters)
|
|
26
|
+
const cleaned = raw.replace(/[$\u20B9\u20AC\u00A3,\s]|S\$/g, "");
|
|
27
|
+
if (cleaned === "")
|
|
28
|
+
return undefined;
|
|
29
|
+
// Try shorthand suffix match first (e.g. "5m", "25k", "1.5b", "50cr", "10l")
|
|
30
|
+
const match = cleaned.match(SHORTHAND_RE);
|
|
31
|
+
if (match) {
|
|
32
|
+
const num = Number.parseFloat(match[1]);
|
|
33
|
+
const suffix = match[2].toLowerCase();
|
|
34
|
+
const multiplier = SUFFIX_MULTIPLIERS[suffix];
|
|
35
|
+
if (Number.isNaN(num) || !multiplier)
|
|
36
|
+
return undefined;
|
|
37
|
+
return num * multiplier;
|
|
38
|
+
}
|
|
39
|
+
// Fall back to standard number parsing
|
|
40
|
+
const num = Number(cleaned);
|
|
41
|
+
return Number.isNaN(num) ? undefined : num;
|
|
42
|
+
}
|
|
43
|
+
async function askAmount(message, defaultVal, currencySymbol) {
|
|
44
|
+
const formatted = defaultVal.toLocaleString("en-US");
|
|
45
|
+
const raw = await input({
|
|
46
|
+
message,
|
|
47
|
+
default: formatted,
|
|
48
|
+
validate: (v) => {
|
|
49
|
+
const num = parseNumber(v);
|
|
50
|
+
if (num === undefined || num <= 0)
|
|
51
|
+
return `Enter a positive number (e.g. ${currencySymbol}5,000,000 or 5m or 50cr)`;
|
|
52
|
+
return true;
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
return parseNumber(raw);
|
|
56
|
+
}
|
|
57
|
+
async function fetchBtcPrice() {
|
|
58
|
+
try {
|
|
59
|
+
const res = await fetch("https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd");
|
|
60
|
+
const data = await res.json();
|
|
61
|
+
return Math.round(data.bitcoin.usd);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return 84_000; // fallback
|
|
65
|
+
}
|
|
66
|
+
}
|
|
7
67
|
export async function runWizard() {
|
|
8
68
|
console.log("\nLet's configure your portfolio.\n");
|
|
9
|
-
const
|
|
10
|
-
message: "
|
|
11
|
-
|
|
12
|
-
|
|
69
|
+
const currencyCode = await select({
|
|
70
|
+
message: "Select your currency:",
|
|
71
|
+
choices: CURRENCIES.map((c) => ({ name: c.name, value: c.code })),
|
|
72
|
+
default: "USD",
|
|
13
73
|
});
|
|
74
|
+
const currency = CURRENCIES.find((c) => c.code === currencyCode);
|
|
75
|
+
const sym = currency.symbol;
|
|
76
|
+
console.log(`\n Your data stays local (~/.timecell/).\n`);
|
|
77
|
+
const btcPrice = await fetchBtcPrice();
|
|
78
|
+
console.log(` Current BTC price: ${sym}${btcPrice.toLocaleString("en-US")} (live)\n`);
|
|
79
|
+
const totalValueUsd = await askAmount(`Total portfolio value (${currency.code}):`, 5_000_000, sym);
|
|
14
80
|
const btcPercentage = await number({
|
|
15
81
|
message: "Bitcoin allocation (%):",
|
|
16
82
|
default: 35,
|
|
17
83
|
validate: (v) => (v !== undefined && v >= 0 && v <= 100 ? true : "Must be between 0 and 100"),
|
|
18
84
|
});
|
|
19
|
-
const monthlyBurnUsd = await
|
|
20
|
-
|
|
21
|
-
default: 25_000,
|
|
22
|
-
validate: (v) => (v !== undefined && v > 0 ? true : "Must be a positive number"),
|
|
23
|
-
});
|
|
24
|
-
const liquidReserveUsd = await number({
|
|
25
|
-
message: "Liquid reserve (USD):",
|
|
26
|
-
default: 600_000,
|
|
27
|
-
validate: (v) => (v !== undefined && v >= 0 ? true : "Must be a non-negative number"),
|
|
28
|
-
});
|
|
29
|
-
const btcPriceUsd = await number({
|
|
30
|
-
message: "Current BTC price (USD):",
|
|
31
|
-
default: 84_000,
|
|
32
|
-
validate: (v) => (v !== undefined && v > 0 ? true : "Must be a positive number"),
|
|
33
|
-
});
|
|
85
|
+
const monthlyBurnUsd = await askAmount(`Monthly burn rate (${currency.code}):`, 25_000, sym);
|
|
86
|
+
const liquidReserveUsd = await askAmount(`Liquid reserve (${currency.code}):`, 600_000, sym);
|
|
34
87
|
const portfolio = {
|
|
35
88
|
totalValueUsd,
|
|
36
89
|
btcPercentage,
|
|
37
90
|
monthlyBurnUsd,
|
|
38
91
|
liquidReserveUsd,
|
|
39
|
-
btcPriceUsd,
|
|
92
|
+
btcPriceUsd: btcPrice,
|
|
40
93
|
};
|
|
41
94
|
await mkdir(CONFIG_DIR, { recursive: true });
|
|
42
|
-
await writeFile(PORTFOLIO_PATH, JSON.stringify({ portfolio }, null, 2));
|
|
95
|
+
await writeFile(PORTFOLIO_PATH, JSON.stringify({ portfolio, currency: { code: currency.code, symbol: sym } }, null, 2));
|
|
43
96
|
console.log(`\nPortfolio saved to ${PORTFOLIO_PATH}`);
|
|
44
|
-
return { portfolio };
|
|
97
|
+
return { portfolio, currency: { code: currency.code, symbol: sym } };
|
|
45
98
|
}
|
|
46
99
|
//# sourceMappingURL=wizard.js.map
|
package/dist/wizard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timecell/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "TimeCell CLI — Crash Survival Calculator",
|
|
6
6
|
"bin": {
|
|
7
7
|
"timecell": "dist/index.js"
|
|
8
8
|
},
|
|
9
|
-
"files": [
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
10
12
|
"publishConfig": {
|
|
11
13
|
"access": "public"
|
|
12
14
|
},
|
|
@@ -16,8 +18,8 @@
|
|
|
16
18
|
},
|
|
17
19
|
"dependencies": {
|
|
18
20
|
"@inquirer/prompts": "^7",
|
|
19
|
-
"@timecell/api": "0.1.
|
|
20
|
-
"@timecell/engine": "0.1.
|
|
21
|
+
"@timecell/api": "0.1.1",
|
|
22
|
+
"@timecell/engine": "0.1.1",
|
|
21
23
|
"open": "^10"
|
|
22
24
|
},
|
|
23
25
|
"devDependencies": {
|