locadex 1.0.170 → 1.0.172
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/CHANGELOG.md +14 -0
- package/dist/cli.js +29 -27
- package/dist/cli.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/logging/console.js +101 -110
- package/dist/logging/console.js.map +1 -1
- package/dist/logging/logger.js +129 -164
- package/dist/logging/logger.js.map +1 -1
- package/dist/utils/getPaths.js +17 -16
- package/dist/utils/getPaths.js.map +1 -1
- package/dist/utils/shutdown.js +44 -48
- package/dist/utils/shutdown.js.map +1 -1
- package/package.json +6 -3
- package/dist/index.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# locadex
|
|
2
2
|
|
|
3
|
+
## 1.0.172
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`a5e6975`](https://github.com/generaltranslation/gt/commit/a5e697561776466763ee1d6cae1f4b905eed581d)]:
|
|
8
|
+
- gt@2.14.37
|
|
9
|
+
|
|
10
|
+
## 1.0.171
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Updated dependencies [[`6a0e55b`](https://github.com/generaltranslation/gt/commit/6a0e55b6787b8e05f6c1fef7796e1b8b68f6d87b), [`a877a2a`](https://github.com/generaltranslation/gt/commit/a877a2a5bd5ca47b199c6caf53a6d60d96e3a300), [`347cb48`](https://github.com/generaltranslation/gt/commit/347cb4844bba2007c7942f3f0e6a2ede4a1aa73e)]:
|
|
15
|
+
- gt@2.14.36
|
|
16
|
+
|
|
3
17
|
## 1.0.170
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/cli.js
CHANGED
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
dotenv
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
import { fromPackageRoot } from "./utils/getPaths.js";
|
|
3
|
+
import { displayHeader, logMessage } from "./logging/console.js";
|
|
4
|
+
import "./utils/shutdown.js";
|
|
5
|
+
import dotenv from "dotenv";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { readFileSync } from "node:fs";
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
import { main } from "gt";
|
|
10
|
+
import { GT_DASHBOARD_URL } from "gt/utils/constants";
|
|
11
|
+
//#region src/cli.ts
|
|
12
|
+
dotenv.config({ path: ".env" });
|
|
13
|
+
dotenv.config({
|
|
14
|
+
path: ".env.local",
|
|
15
|
+
override: true
|
|
16
|
+
});
|
|
17
|
+
dotenv.config({
|
|
18
|
+
path: ".env.production",
|
|
19
|
+
override: true
|
|
20
|
+
});
|
|
21
|
+
const packageJson = JSON.parse(readFileSync(fromPackageRoot("package.json"), "utf8"));
|
|
15
22
|
const program = new Command();
|
|
16
|
-
program
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.description('Get started with Locadex')
|
|
23
|
-
.action(async () => {
|
|
24
|
-
displayHeader();
|
|
25
|
-
const urlToOpen = `${GT_DASHBOARD_URL}/locadex`;
|
|
26
|
-
await import('open').then((open) => open.default(urlToOpen, {
|
|
27
|
-
wait: false,
|
|
28
|
-
}));
|
|
29
|
-
logMessage(`${chalk.dim(`If the browser window didn't open automatically, please open the following link:`)}\n\n${chalk.cyan(urlToOpen)}`);
|
|
23
|
+
program.name("locadex").description("AI agent for internationalization").version(packageJson.version);
|
|
24
|
+
program.command("start").description("Get started with Locadex").action(async () => {
|
|
25
|
+
displayHeader();
|
|
26
|
+
const urlToOpen = `${GT_DASHBOARD_URL}/locadex`;
|
|
27
|
+
await import("open").then((open) => open.default(urlToOpen, { wait: false }));
|
|
28
|
+
logMessage(`${chalk.dim(`If the browser window didn't open automatically, please open the following link:`)}\n\n${chalk.cyan(urlToOpen)}`);
|
|
30
29
|
});
|
|
31
30
|
main(program);
|
|
32
31
|
program.parse();
|
|
32
|
+
//#endregion
|
|
33
|
+
export {};
|
|
34
|
+
|
|
33
35
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","
|
|
1
|
+
{"version":3,"file":"cli.js","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport dotenv from 'dotenv';\n\ndotenv.config({ path: '.env' });\ndotenv.config({ path: '.env.local', override: true });\ndotenv.config({ path: '.env.production', override: true });\n\nimport './utils/shutdown.js';\nimport { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { fromPackageRoot } from './utils/getPaths.js';\nimport { main } from 'gt';\nimport { GT_DASHBOARD_URL } from 'gt/utils/constants';\nimport chalk from 'chalk';\nimport { displayHeader, logMessage } from './logging/console.js';\n\nconst packageJson = JSON.parse(\n readFileSync(fromPackageRoot('package.json'), 'utf8')\n);\n\nconst program = new Command();\n\nprogram\n .name('locadex')\n .description('AI agent for internationalization')\n .version(packageJson.version);\n\nprogram\n .command('start')\n .description('Get started with Locadex')\n .action(async () => {\n displayHeader();\n\n const urlToOpen = `${GT_DASHBOARD_URL}/locadex`;\n await import('open').then((open) =>\n open.default(urlToOpen, {\n wait: false,\n })\n );\n logMessage(\n `${chalk.dim(\n `If the browser window didn't open automatically, please open the following link:`\n )}\\n\\n${chalk.cyan(urlToOpen)}`\n );\n });\n\nmain(program);\n\nprogram.parse();\n"],"mappings":";;;;;;;;;;;AAIA,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,OAAO;CAAE,MAAM;CAAc,UAAU;CAAM,CAAC;AACrD,OAAO,OAAO;CAAE,MAAM;CAAmB,UAAU;CAAM,CAAC;AAW1D,MAAM,cAAc,KAAK,MACvB,aAAa,gBAAgB,eAAe,EAAE,OAAO,CACtD;AAED,MAAM,UAAU,IAAI,SAAS;AAE7B,QACG,KAAK,UAAU,CACf,YAAY,oCAAoC,CAChD,QAAQ,YAAY,QAAQ;AAE/B,QACG,QAAQ,QAAQ,CAChB,YAAY,2BAA2B,CACvC,OAAO,YAAY;AAClB,gBAAe;CAEf,MAAM,YAAY,GAAG,iBAAiB;AACtC,OAAM,OAAO,QAAQ,MAAM,SACzB,KAAK,QAAQ,WAAW,EACtB,MAAM,OACP,CAAC,CACH;AACD,YACE,GAAG,MAAM,IACP,mFACD,CAAC,MAAM,MAAM,KAAK,UAAU,GAC9B;EACD;AAEJ,KAAK,QAAQ;AAEb,QAAQ,OAAO"}
|
package/dist/index.js
CHANGED
package/dist/logging/console.js
CHANGED
|
@@ -1,46 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { getLocadexVersion } from "../utils/getPaths.js";
|
|
2
|
+
import { exit } from "../utils/shutdown.js";
|
|
3
|
+
import { cancel, confirm, intro, isCancel, log, multiselect, outro, progress, select, spinner, taskLog, text } from "@clack/prompts";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
//#region src/logging/console.ts
|
|
6
|
+
function logInfo(message) {
|
|
7
|
+
log.info(message);
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
function logWarning(message) {
|
|
10
|
+
log.warn(message);
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
function logError(message) {
|
|
13
|
+
log.error(message);
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
function logSuccess(message) {
|
|
16
|
+
log.success(message);
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
function logStep(message) {
|
|
19
|
+
log.step(message);
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
function logMessage(message) {
|
|
22
|
+
log.message(message, { symbol: chalk.cyan("~") });
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
async function logErrorAndExit(message) {
|
|
25
|
+
log.error(message);
|
|
26
|
+
await exit(1);
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
intro(chalk.cyan(message));
|
|
28
|
+
function startCommand(message) {
|
|
29
|
+
intro(chalk.cyan(message));
|
|
31
30
|
}
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
function endCommand(message) {
|
|
32
|
+
outro(chalk.cyan(message));
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
startCommand(chalk.cyan(`Locadex v${getLocadexVersion()}`));
|
|
34
|
+
function displayHeader() {
|
|
35
|
+
displayAsciiTitle();
|
|
36
|
+
displayInitializingText();
|
|
37
|
+
startCommand(chalk.cyan(`Locadex v${getLocadexVersion()}`));
|
|
40
38
|
}
|
|
41
39
|
function displayAsciiTitle() {
|
|
42
|
-
|
|
43
|
-
console.log(chalk.cyan(`\n ,ad8888ba, 888888888888
|
|
40
|
+
console.log(chalk.cyan(`\n ,ad8888ba, 888888888888
|
|
44
41
|
d8"' \`"8b 88
|
|
45
42
|
d8' 88
|
|
46
43
|
88 88
|
|
@@ -50,86 +47,80 @@ Y8, 88 88
|
|
|
50
47
|
\`"Y88888P" 88 `));
|
|
51
48
|
}
|
|
52
49
|
function displayInitializingText() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
${chalk.dim('https://generaltranslation.com/docs')}
|
|
50
|
+
console.log(`\n${chalk.bold.blue("General Translation, Inc.")}
|
|
51
|
+
${chalk.dim("https://generaltranslation.com/docs")}
|
|
56
52
|
|
|
57
53
|
Locadex is in research preview and may make mistakes. Report any bugs or issues to https://github.com/generaltranslation/gt/issues.
|
|
58
54
|
`);
|
|
59
55
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return result;
|
|
131
|
-
}
|
|
132
|
-
export function createTaskLogger(message) {
|
|
133
|
-
return taskLog({ title: message });
|
|
134
|
-
}
|
|
56
|
+
function createSpinner(indicator = "timer") {
|
|
57
|
+
return spinner({ indicator });
|
|
58
|
+
}
|
|
59
|
+
function createProgressBar(total) {
|
|
60
|
+
return progress({ max: total });
|
|
61
|
+
}
|
|
62
|
+
async function promptText({ message, defaultValue, validate }) {
|
|
63
|
+
const result = await text({
|
|
64
|
+
message,
|
|
65
|
+
placeholder: defaultValue,
|
|
66
|
+
validate: validate ? (value) => {
|
|
67
|
+
const validation = validate(value || "");
|
|
68
|
+
return validation === true ? void 0 : validation.toString();
|
|
69
|
+
} : void 0
|
|
70
|
+
});
|
|
71
|
+
if (isCancel(result)) {
|
|
72
|
+
cancel("Operation cancelled");
|
|
73
|
+
await exit(0);
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
async function promptSelect({ message, options, defaultValue }) {
|
|
78
|
+
const result = await select({
|
|
79
|
+
message,
|
|
80
|
+
options: options.map((opt) => ({
|
|
81
|
+
value: opt.value,
|
|
82
|
+
label: opt.label,
|
|
83
|
+
hint: opt.hint
|
|
84
|
+
})),
|
|
85
|
+
initialValue: defaultValue
|
|
86
|
+
});
|
|
87
|
+
if (isCancel(result)) {
|
|
88
|
+
cancel("Operation cancelled");
|
|
89
|
+
await exit(0);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
async function promptMultiSelect({ message, options, required = true }) {
|
|
94
|
+
const result = await multiselect({
|
|
95
|
+
message,
|
|
96
|
+
options: options.map((opt) => ({
|
|
97
|
+
value: opt.value,
|
|
98
|
+
label: opt.label,
|
|
99
|
+
hint: opt.hint
|
|
100
|
+
})),
|
|
101
|
+
required
|
|
102
|
+
});
|
|
103
|
+
if (isCancel(result)) {
|
|
104
|
+
cancel("Operation cancelled");
|
|
105
|
+
await exit(0);
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
async function promptConfirm({ message, defaultValue = true, cancelMessage = "Operation cancelled" }) {
|
|
110
|
+
const result = await confirm({
|
|
111
|
+
message,
|
|
112
|
+
initialValue: defaultValue
|
|
113
|
+
});
|
|
114
|
+
if (isCancel(result)) {
|
|
115
|
+
cancel(cancelMessage);
|
|
116
|
+
await exit(0);
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
function createTaskLogger(message) {
|
|
121
|
+
return taskLog({ title: message });
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
export { createProgressBar, createSpinner, createTaskLogger, displayHeader, endCommand, logError, logErrorAndExit, logInfo, logMessage, logStep, logSuccess, logWarning, promptConfirm, promptMultiSelect, promptSelect, promptText, startCommand };
|
|
125
|
+
|
|
135
126
|
//# sourceMappingURL=console.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","
|
|
1
|
+
{"version":3,"file":"console.js","names":[],"sources":["../../src/logging/console.ts"],"sourcesContent":["import {\n log,\n spinner,\n intro,\n outro,\n text,\n select,\n confirm,\n isCancel,\n cancel,\n multiselect,\n taskLog,\n progress,\n} from '@clack/prompts';\nimport type { Option } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getLocadexVersion } from '../utils/getPaths.js';\nimport { exit } from '../utils/shutdown.js';\n\n// Basic logging functions\nexport function logInfo(message: string) {\n log.info(message);\n}\nexport function logWarning(message: string) {\n log.warn(message);\n}\nexport function logError(message: string) {\n log.error(message);\n}\nexport function logSuccess(message: string) {\n log.success(message);\n}\nexport function logStep(message: string) {\n log.step(message);\n}\nexport function logMessage(message: string) {\n log.message(message, { symbol: chalk.cyan('~') });\n}\n\nexport async function logErrorAndExit(message: string) {\n log.error(message);\n await exit(1);\n}\n\n// Clack prompts\nexport function startCommand(message: string) {\n intro(chalk.cyan(message));\n}\nexport function endCommand(message: string) {\n outro(chalk.cyan(message));\n}\n\n// GT specific logging\nexport function displayHeader() {\n displayAsciiTitle();\n displayInitializingText();\n startCommand(chalk.cyan(`Locadex v${getLocadexVersion()}`));\n}\n\nfunction displayAsciiTitle() {\n // eslint-disable-next-line no-console\n console.log(\n chalk.cyan(\n `\\n ,ad8888ba, 888888888888 \n d8\"' \\`\"8b 88 \nd8' 88 \n88 88 \n88 88888 88 \nY8, 88 88 \n Y8a. .a88 88 \n \\`\"Y88888P\" 88 `\n )\n );\n}\n\nfunction displayInitializingText() {\n // eslint-disable-next-line no-console\n console.log(\n `\\n${chalk.bold.blue('General Translation, Inc.')}\n${chalk.dim('https://generaltranslation.com/docs')}\n\nLocadex is in research preview and may make mistakes. Report any bugs or issues to https://github.com/generaltranslation/gt/issues.\n`\n );\n}\n\n// Spinner functionality\nexport function createSpinner(indicator: 'dots' | 'timer' = 'timer') {\n return spinner({ indicator });\n}\n\nexport function createProgressBar(total: number) {\n return progress({ max: total });\n}\n\n// Input prompts\nexport async function promptText({\n message,\n defaultValue,\n validate,\n}: {\n message: string;\n defaultValue?: string;\n validate?: (value: string) => boolean | string;\n}) {\n const result = await text({\n message,\n placeholder: defaultValue,\n validate: validate\n ? (value) => {\n const validation = validate(value || '');\n return validation === true ? undefined : validation.toString();\n }\n : undefined,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n await exit(0);\n }\n\n return result;\n}\n\nexport async function promptSelect<T>({\n message,\n options,\n defaultValue,\n}: {\n message: string;\n options: Array<{ value: T; label: string; hint?: string }>;\n defaultValue?: T;\n}) {\n // Convert options to the format expected by clack\n const clackOptions = options.map((opt) => ({\n value: opt.value,\n label: opt.label,\n hint: opt.hint,\n })) as Option<T>[];\n\n const result = await select({\n message,\n options: clackOptions,\n initialValue: defaultValue,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n await exit(0);\n }\n\n return result as T;\n}\n\nexport async function promptMultiSelect<T extends string>({\n message,\n options,\n required = true,\n}: {\n message: string;\n options: Array<{ value: T; label: string; hint?: string }>;\n required?: boolean;\n}) {\n // Convert options to the format expected by clack\n const clackOptions = options.map((opt) => ({\n value: opt.value,\n label: opt.label,\n hint: opt.hint,\n })) as Option<T>[];\n\n const result = await multiselect({\n message,\n options: clackOptions,\n required,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n await exit(0);\n }\n\n return result as Array<T>;\n}\n\nexport async function promptConfirm({\n message,\n defaultValue = true,\n cancelMessage = 'Operation cancelled',\n}: {\n message: string;\n defaultValue?: boolean;\n cancelMessage?: string;\n}) {\n const result = await confirm({\n message,\n initialValue: defaultValue,\n });\n\n if (isCancel(result)) {\n cancel(cancelMessage);\n await exit(0);\n }\n\n return result;\n}\n\nexport function createTaskLogger(message: string) {\n return taskLog({ title: message });\n}\n"],"mappings":";;;;;AAoBA,SAAgB,QAAQ,SAAiB;AACvC,KAAI,KAAK,QAAQ;;AAEnB,SAAgB,WAAW,SAAiB;AAC1C,KAAI,KAAK,QAAQ;;AAEnB,SAAgB,SAAS,SAAiB;AACxC,KAAI,MAAM,QAAQ;;AAEpB,SAAgB,WAAW,SAAiB;AAC1C,KAAI,QAAQ,QAAQ;;AAEtB,SAAgB,QAAQ,SAAiB;AACvC,KAAI,KAAK,QAAQ;;AAEnB,SAAgB,WAAW,SAAiB;AAC1C,KAAI,QAAQ,SAAS,EAAE,QAAQ,MAAM,KAAK,IAAI,EAAE,CAAC;;AAGnD,eAAsB,gBAAgB,SAAiB;AACrD,KAAI,MAAM,QAAQ;AAClB,OAAM,KAAK,EAAE;;AAIf,SAAgB,aAAa,SAAiB;AAC5C,OAAM,MAAM,KAAK,QAAQ,CAAC;;AAE5B,SAAgB,WAAW,SAAiB;AAC1C,OAAM,MAAM,KAAK,QAAQ,CAAC;;AAI5B,SAAgB,gBAAgB;AAC9B,oBAAmB;AACnB,0BAAyB;AACzB,cAAa,MAAM,KAAK,YAAY,mBAAmB,GAAG,CAAC;;AAG7D,SAAS,oBAAoB;AAE3B,SAAQ,IACN,MAAM,KACJ;;;;;;;+BAQD,CACF;;AAGH,SAAS,0BAA0B;AAEjC,SAAQ,IACN,KAAK,MAAM,KAAK,KAAK,4BAA4B,CAAC;EACpD,MAAM,IAAI,sCAAsC,CAAC;;;EAIhD;;AAIH,SAAgB,cAAc,YAA8B,SAAS;AACnE,QAAO,QAAQ,EAAE,WAAW,CAAC;;AAG/B,SAAgB,kBAAkB,OAAe;AAC/C,QAAO,SAAS,EAAE,KAAK,OAAO,CAAC;;AAIjC,eAAsB,WAAW,EAC/B,SACA,cACA,YAKC;CACD,MAAM,SAAS,MAAM,KAAK;EACxB;EACA,aAAa;EACb,UAAU,YACL,UAAU;GACT,MAAM,aAAa,SAAS,SAAS,GAAG;AACxC,UAAO,eAAe,OAAO,KAAA,IAAY,WAAW,UAAU;MAEhE,KAAA;EACL,CAAC;AAEF,KAAI,SAAS,OAAO,EAAE;AACpB,SAAO,sBAAsB;AAC7B,QAAM,KAAK,EAAE;;AAGf,QAAO;;AAGT,eAAsB,aAAgB,EACpC,SACA,SACA,gBAKC;CAQD,MAAM,SAAS,MAAM,OAAO;EAC1B;EACA,SARmB,QAAQ,KAAK,SAAS;GACzC,OAAO,IAAI;GACX,OAAO,IAAI;GACX,MAAM,IAAI;GACX,EAIsB;EACrB,cAAc;EACf,CAAC;AAEF,KAAI,SAAS,OAAO,EAAE;AACpB,SAAO,sBAAsB;AAC7B,QAAM,KAAK,EAAE;;AAGf,QAAO;;AAGT,eAAsB,kBAAoC,EACxD,SACA,SACA,WAAW,QAKV;CAQD,MAAM,SAAS,MAAM,YAAY;EAC/B;EACA,SARmB,QAAQ,KAAK,SAAS;GACzC,OAAO,IAAI;GACX,OAAO,IAAI;GACX,MAAM,IAAI;GACX,EAIsB;EACrB;EACD,CAAC;AAEF,KAAI,SAAS,OAAO,EAAE;AACpB,SAAO,sBAAsB;AAC7B,QAAM,KAAK,EAAE;;AAGf,QAAO;;AAGT,eAAsB,cAAc,EAClC,SACA,eAAe,MACf,gBAAgB,yBAKf;CACD,MAAM,SAAS,MAAM,QAAQ;EAC3B;EACA,cAAc;EACf,CAAC;AAEF,KAAI,SAAS,OAAO,EAAE;AACpB,SAAO,cAAc;AACrB,QAAM,KAAK,EAAE;;AAGf,QAAO;;AAGT,SAAgB,iBAAiB,SAAiB;AAChD,QAAO,QAAQ,EAAE,OAAO,SAAS,CAAC"}
|
package/dist/logging/logger.js
CHANGED
|
@@ -1,165 +1,130 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { appendFileSync } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
this.log(message);
|
|
131
|
-
if (this._verbose) {
|
|
132
|
-
logMessage(message);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
debugMessage(message) {
|
|
136
|
-
this.log(message);
|
|
137
|
-
if (this._debug) {
|
|
138
|
-
logMessage(message);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
log(message) {
|
|
142
|
-
if (this.logFile) {
|
|
143
|
-
const timestamp = new Date().toISOString();
|
|
144
|
-
appendFileSync(this.logFile, `[${timestamp}] ${message}\n`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
initializeProgressBar(total) {
|
|
148
|
-
if (!this._verbose && !this._debug) {
|
|
149
|
-
this.progressBar.init(total);
|
|
150
|
-
}
|
|
151
|
-
if (this.logFile) {
|
|
152
|
-
appendFileSync(this.logFile, `Initializing progress bar with total: ${total}\n`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
initializeSpinner() {
|
|
156
|
-
if (!this._verbose && !this._debug) {
|
|
157
|
-
this.spinner.init();
|
|
158
|
-
}
|
|
159
|
-
if (this.logFile) {
|
|
160
|
-
appendFileSync(this.logFile, `Initializing spinner\n`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
export const logger = Logger.getInstance();
|
|
1
|
+
import { createProgressBar, createSpinner, logError, logErrorAndExit, logInfo, logMessage, logStep, logSuccess, logWarning } from "./console.js";
|
|
2
|
+
import { appendFileSync } from "node:fs";
|
|
3
|
+
//#region src/logging/logger.ts
|
|
4
|
+
var ProgressBar = class {
|
|
5
|
+
progressBar;
|
|
6
|
+
constructor() {}
|
|
7
|
+
init(total) {
|
|
8
|
+
if (!this.progressBar) this.progressBar = createProgressBar(total);
|
|
9
|
+
}
|
|
10
|
+
start(message) {
|
|
11
|
+
if (this.progressBar) this.progressBar.start(message);
|
|
12
|
+
}
|
|
13
|
+
advance(amount, message) {
|
|
14
|
+
if (this.progressBar) this.progressBar.advance(amount, message);
|
|
15
|
+
}
|
|
16
|
+
stop(message) {
|
|
17
|
+
if (this.progressBar) try {
|
|
18
|
+
this.progressBar.stop(message);
|
|
19
|
+
this.progressBar = void 0;
|
|
20
|
+
} catch {
|
|
21
|
+
this.progressBar = void 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var Spinner = class {
|
|
26
|
+
spinner;
|
|
27
|
+
constructor() {}
|
|
28
|
+
init() {
|
|
29
|
+
if (!this.spinner) this.spinner = createSpinner();
|
|
30
|
+
}
|
|
31
|
+
start(message) {
|
|
32
|
+
if (this.spinner) this.spinner.start(message);
|
|
33
|
+
}
|
|
34
|
+
update(message) {
|
|
35
|
+
if (this.spinner) this.spinner.message(message);
|
|
36
|
+
}
|
|
37
|
+
stop(message) {
|
|
38
|
+
if (this.spinner) try {
|
|
39
|
+
this.spinner.stop(message);
|
|
40
|
+
this.spinner = void 0;
|
|
41
|
+
} catch {
|
|
42
|
+
this.spinner = void 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const logger = class Logger {
|
|
47
|
+
static instance;
|
|
48
|
+
_verbose = false;
|
|
49
|
+
_debug = false;
|
|
50
|
+
logFile;
|
|
51
|
+
progressBar = new ProgressBar();
|
|
52
|
+
spinner = new Spinner();
|
|
53
|
+
constructor() {}
|
|
54
|
+
static getInstance() {
|
|
55
|
+
if (!Logger.instance) Logger.instance = new Logger();
|
|
56
|
+
return Logger.instance;
|
|
57
|
+
}
|
|
58
|
+
initialize(options, logFile) {
|
|
59
|
+
if (options.debug) {
|
|
60
|
+
this._debug = true;
|
|
61
|
+
this._verbose = true;
|
|
62
|
+
}
|
|
63
|
+
if (options.verbose) this._verbose = true;
|
|
64
|
+
if (logFile) this.logFile = logFile;
|
|
65
|
+
}
|
|
66
|
+
get verbose() {
|
|
67
|
+
return this._verbose;
|
|
68
|
+
}
|
|
69
|
+
get debug() {
|
|
70
|
+
return this._debug;
|
|
71
|
+
}
|
|
72
|
+
reset() {
|
|
73
|
+
this._verbose = false;
|
|
74
|
+
this._debug = false;
|
|
75
|
+
}
|
|
76
|
+
info(message) {
|
|
77
|
+
this.log(message);
|
|
78
|
+
logInfo(message);
|
|
79
|
+
}
|
|
80
|
+
warning(message) {
|
|
81
|
+
this.log(message);
|
|
82
|
+
logWarning(message);
|
|
83
|
+
}
|
|
84
|
+
error(message) {
|
|
85
|
+
this.log(message);
|
|
86
|
+
logError(message);
|
|
87
|
+
}
|
|
88
|
+
success(message) {
|
|
89
|
+
this.log(message);
|
|
90
|
+
logSuccess(message);
|
|
91
|
+
}
|
|
92
|
+
step(message) {
|
|
93
|
+
this.log(message);
|
|
94
|
+
logStep(message);
|
|
95
|
+
}
|
|
96
|
+
message(message) {
|
|
97
|
+
this.log(message);
|
|
98
|
+
logMessage(message);
|
|
99
|
+
}
|
|
100
|
+
async errorAndExit(message) {
|
|
101
|
+
this.log(message);
|
|
102
|
+
await logErrorAndExit(message);
|
|
103
|
+
}
|
|
104
|
+
verboseMessage(message) {
|
|
105
|
+
this.log(message);
|
|
106
|
+
if (this._verbose) logMessage(message);
|
|
107
|
+
}
|
|
108
|
+
debugMessage(message) {
|
|
109
|
+
this.log(message);
|
|
110
|
+
if (this._debug) logMessage(message);
|
|
111
|
+
}
|
|
112
|
+
log(message) {
|
|
113
|
+
if (this.logFile) {
|
|
114
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
115
|
+
appendFileSync(this.logFile, `[${timestamp}] ${message}\n`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
initializeProgressBar(total) {
|
|
119
|
+
if (!this._verbose && !this._debug) this.progressBar.init(total);
|
|
120
|
+
if (this.logFile) appendFileSync(this.logFile, `Initializing progress bar with total: ${total}\n`);
|
|
121
|
+
}
|
|
122
|
+
initializeSpinner() {
|
|
123
|
+
if (!this._verbose && !this._debug) this.spinner.init();
|
|
124
|
+
if (this.logFile) appendFileSync(this.logFile, `Initializing spinner\n`);
|
|
125
|
+
}
|
|
126
|
+
}.getInstance();
|
|
127
|
+
//#endregion
|
|
128
|
+
export { logger };
|
|
129
|
+
|
|
165
130
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","
|
|
1
|
+
{"version":3,"file":"logger.js","names":[],"sources":["../../src/logging/logger.ts"],"sourcesContent":["import { ProgressResult, SpinnerResult } from '@clack/prompts';\nimport {\n logInfo,\n logWarning,\n logError,\n logSuccess,\n logStep,\n logMessage,\n logErrorAndExit,\n createProgressBar,\n createSpinner,\n} from './console.js';\nimport { appendFileSync } from 'node:fs';\n\nclass ProgressBar {\n private progressBar: ProgressResult | undefined;\n constructor() {}\n\n init(total: number): void {\n if (!this.progressBar) {\n this.progressBar = createProgressBar(total);\n }\n }\n\n start(message?: string): void {\n if (this.progressBar) {\n this.progressBar.start(message);\n }\n }\n\n advance(amount: number, message?: string): void {\n if (this.progressBar) {\n this.progressBar.advance(amount, message);\n }\n }\n\n stop(message?: string): void {\n if (this.progressBar) {\n try {\n this.progressBar.stop(message);\n this.progressBar = undefined;\n } catch {\n this.progressBar = undefined;\n }\n }\n }\n}\n\nclass Spinner {\n private spinner: SpinnerResult | undefined;\n constructor() {}\n\n init(): void {\n if (!this.spinner) {\n this.spinner = createSpinner();\n }\n }\n\n start(message?: string): void {\n if (this.spinner) {\n this.spinner.start(message);\n }\n }\n\n update(message?: string): void {\n if (this.spinner) {\n this.spinner.message(message);\n }\n }\n\n stop(message?: string): void {\n if (this.spinner) {\n try {\n this.spinner.stop(message);\n this.spinner = undefined;\n } catch {\n this.spinner = undefined;\n }\n }\n }\n}\n\nclass Logger {\n private static instance: Logger;\n private _verbose: boolean = false;\n private _debug: boolean = false;\n private logFile: string | undefined;\n progressBar: ProgressBar = new ProgressBar();\n spinner: Spinner = new Spinner();\n private constructor() {}\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n initialize(\n options: { verbose?: boolean; debug?: boolean },\n logFile?: string\n ): void {\n if (options.debug) {\n this._debug = true;\n this._verbose = true;\n }\n if (options.verbose) {\n this._verbose = true;\n }\n if (logFile) {\n this.logFile = logFile;\n }\n }\n\n get verbose(): boolean {\n return this._verbose;\n }\n\n get debug(): boolean {\n return this._debug;\n }\n\n reset(): void {\n this._verbose = false;\n this._debug = false;\n }\n\n // Basic logging methods using existing console functions\n info(message: string): void {\n this.log(message);\n logInfo(message);\n }\n\n warning(message: string): void {\n this.log(message);\n logWarning(message);\n }\n\n error(message: string): void {\n this.log(message);\n logError(message);\n }\n\n success(message: string): void {\n this.log(message);\n logSuccess(message);\n }\n\n step(message: string): void {\n this.log(message);\n logStep(message);\n }\n\n message(message: string): void {\n this.log(message);\n logMessage(message);\n }\n\n async errorAndExit(message: string) {\n this.log(message);\n await logErrorAndExit(message);\n }\n\n // Conditional logging methods\n verboseMessage(message: string): void {\n this.log(message);\n if (this._verbose) {\n logMessage(message);\n }\n }\n\n debugMessage(message: string): void {\n this.log(message);\n if (this._debug) {\n logMessage(message);\n }\n }\n\n log(message: string): void {\n if (this.logFile) {\n const timestamp = new Date().toISOString();\n appendFileSync(this.logFile, `[${timestamp}] ${message}\\n`);\n }\n }\n\n initializeProgressBar(total: number): void {\n if (!this._verbose && !this._debug) {\n this.progressBar.init(total);\n }\n if (this.logFile) {\n appendFileSync(\n this.logFile,\n `Initializing progress bar with total: ${total}\\n`\n );\n }\n }\n initializeSpinner(): void {\n if (!this._verbose && !this._debug) {\n this.spinner.init();\n }\n if (this.logFile) {\n appendFileSync(this.logFile, `Initializing spinner\\n`);\n }\n }\n}\n\nexport const logger = Logger.getInstance();\n"],"mappings":"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"}
|
package/dist/utils/getPaths.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import path, { dirname } from
|
|
2
|
-
import { fileURLToPath } from
|
|
3
|
-
import fs from
|
|
1
|
+
import path, { dirname } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
//#region src/utils/getPaths.ts
|
|
4
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
function fromPackageRoot(relative) {
|
|
7
|
+
return path.resolve(__dirname, `../../`, relative);
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
catch {
|
|
17
|
-
return 'unknown';
|
|
18
|
-
}
|
|
9
|
+
function getLocadexVersion() {
|
|
10
|
+
const packageJsonPath = fromPackageRoot("package.json");
|
|
11
|
+
if (!fs.existsSync(packageJsonPath)) return "unknown";
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8")).version;
|
|
14
|
+
} catch {
|
|
15
|
+
return "unknown";
|
|
16
|
+
}
|
|
19
17
|
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { fromPackageRoot, getLocadexVersion };
|
|
20
|
+
|
|
20
21
|
//# sourceMappingURL=getPaths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPaths.js","
|
|
1
|
+
{"version":3,"file":"getPaths.js","names":[],"sources":["../../src/utils/getPaths.ts"],"sourcesContent":["import path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport fs from 'node:fs';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function fromPackageRoot(relative: string) {\n return path.resolve(__dirname, `../../`, relative);\n}\n\nexport function getLocadexVersion(): string {\n const packageJsonPath = fromPackageRoot('package.json');\n\n if (!fs.existsSync(packageJsonPath)) {\n return 'unknown';\n }\n try {\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).version;\n } catch {\n return 'unknown';\n }\n}\n"],"mappings":";;;;AAIA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAEzD,SAAgB,gBAAgB,UAAkB;AAChD,QAAO,KAAK,QAAQ,WAAW,UAAU,SAAS;;AAGpD,SAAgB,oBAA4B;CAC1C,MAAM,kBAAkB,gBAAgB,eAAe;AAEvD,KAAI,CAAC,GAAG,WAAW,gBAAgB,CACjC,QAAO;AAET,KAAI;AACF,SAAO,KAAK,MAAM,GAAG,aAAa,iBAAiB,OAAO,CAAC,CAAC;SACtD;AACN,SAAO"}
|
package/dist/utils/shutdown.js
CHANGED
|
@@ -1,50 +1,46 @@
|
|
|
1
|
-
import { logger } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Export singleton instance
|
|
45
|
-
export const gracefulShutdown = new GracefulShutdown();
|
|
46
|
-
// Export convenience function for backward compatibility
|
|
47
|
-
export function exit(code = 0) {
|
|
48
|
-
return gracefulShutdown.shutdown(code);
|
|
1
|
+
import { logger } from "../logging/logger.js";
|
|
2
|
+
//#region src/utils/shutdown.ts
|
|
3
|
+
var GracefulShutdown = class {
|
|
4
|
+
shutdownHandlers = [];
|
|
5
|
+
isShuttingDown = false;
|
|
6
|
+
exitCode = 0;
|
|
7
|
+
constructor() {
|
|
8
|
+
process.on("SIGINT", () => this.handleSignal("SIGINT"));
|
|
9
|
+
process.on("SIGTERM", () => this.handleSignal("SIGTERM"));
|
|
10
|
+
process.on("SIGUSR2", () => this.handleSignal("SIGUSR2"));
|
|
11
|
+
process.on("exit", () => this.handleSignal("exit"));
|
|
12
|
+
}
|
|
13
|
+
async handleSignal(signal) {
|
|
14
|
+
logger.debugMessage(`Received ${signal}, initiating graceful shutdown with exit code 0...`);
|
|
15
|
+
await this.shutdown(0);
|
|
16
|
+
}
|
|
17
|
+
addHandler(handler) {
|
|
18
|
+
this.shutdownHandlers.push(handler);
|
|
19
|
+
}
|
|
20
|
+
async shutdown(exitCode = 0) {
|
|
21
|
+
if (this.isShuttingDown) return;
|
|
22
|
+
this.isShuttingDown = true;
|
|
23
|
+
this.exitCode = exitCode;
|
|
24
|
+
const handlers = [...this.shutdownHandlers].reverse();
|
|
25
|
+
for (const { name, handler, timeout = 5e3 } of handlers) try {
|
|
26
|
+
logger.debugMessage(`Executing shutdown handler: ${name}`);
|
|
27
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
28
|
+
global.setTimeout(() => reject(/* @__PURE__ */ new Error(`Timeout: ${name}`)), timeout);
|
|
29
|
+
});
|
|
30
|
+
await Promise.race([Promise.resolve(handler()), timeoutPromise]);
|
|
31
|
+
logger.debugMessage(`Completed shutdown handler: ${name}`);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
logger.error(`Error in shutdown handler ${name}: ${error}`);
|
|
34
|
+
}
|
|
35
|
+
logger.debugMessage("Graceful shutdown complete");
|
|
36
|
+
process.exit(this.exitCode);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const gracefulShutdown = new GracefulShutdown();
|
|
40
|
+
function exit(code = 0) {
|
|
41
|
+
return gracefulShutdown.shutdown(code);
|
|
49
42
|
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { exit, gracefulShutdown };
|
|
45
|
+
|
|
50
46
|
//# sourceMappingURL=shutdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","
|
|
1
|
+
{"version":3,"file":"shutdown.js","names":[],"sources":["../../src/utils/shutdown.ts"],"sourcesContent":["import { logger } from '../logging/logger.js';\n\nexport type ExitCode = 0 | 1;\n\ninterface ShutdownHandler {\n name: string;\n handler: () => Promise<void> | void;\n timeout?: number;\n}\n\nclass GracefulShutdown {\n private shutdownHandlers: ShutdownHandler[] = [];\n private isShuttingDown = false;\n private exitCode: ExitCode = 0;\n\n constructor() {\n process.on('SIGINT', () => this.handleSignal('SIGINT'));\n process.on('SIGTERM', () => this.handleSignal('SIGTERM'));\n process.on('SIGUSR2', () => this.handleSignal('SIGUSR2')); // nodemon restart\n process.on('exit', () => this.handleSignal('exit')); // in case other libraries override the signal handlers such as @clack/prompts\n }\n\n async handleSignal(signal: string) {\n logger.debugMessage(\n `Received ${signal}, initiating graceful shutdown with exit code 0...`\n );\n await this.shutdown(0);\n }\n\n addHandler(handler: ShutdownHandler) {\n this.shutdownHandlers.push(handler);\n }\n\n async shutdown(exitCode: ExitCode = 0) {\n if (this.isShuttingDown) {\n return;\n }\n\n this.isShuttingDown = true;\n this.exitCode = exitCode;\n\n // Execute shutdown handlers in reverse order (LIFO)\n const handlers = [...this.shutdownHandlers].reverse();\n\n for (const { name, handler, timeout = 5000 } of handlers) {\n try {\n logger.debugMessage(`Executing shutdown handler: ${name}`);\n\n const timeoutPromise = new Promise<void>((_, reject) => {\n global.setTimeout(\n () => reject(new Error(`Timeout: ${name}`)),\n timeout\n );\n });\n\n await Promise.race([Promise.resolve(handler()), timeoutPromise]);\n\n logger.debugMessage(`Completed shutdown handler: ${name}`);\n } catch (error) {\n logger.error(`Error in shutdown handler ${name}: ${error}`);\n }\n }\n\n logger.debugMessage('Graceful shutdown complete');\n process.exit(this.exitCode);\n }\n}\n\n// Export singleton instance\nexport const gracefulShutdown = new GracefulShutdown();\n\n// Export convenience function for backward compatibility\nexport function exit(code: ExitCode = 0): Promise<never> {\n return gracefulShutdown.shutdown(code) as Promise<never>;\n}\n"],"mappings":";;AAUA,IAAM,mBAAN,MAAuB;CACrB,mBAA8C,EAAE;CAChD,iBAAyB;CACzB,WAA6B;CAE7B,cAAc;AACZ,UAAQ,GAAG,gBAAgB,KAAK,aAAa,SAAS,CAAC;AACvD,UAAQ,GAAG,iBAAiB,KAAK,aAAa,UAAU,CAAC;AACzD,UAAQ,GAAG,iBAAiB,KAAK,aAAa,UAAU,CAAC;AACzD,UAAQ,GAAG,cAAc,KAAK,aAAa,OAAO,CAAC;;CAGrD,MAAM,aAAa,QAAgB;AACjC,SAAO,aACL,YAAY,OAAO,oDACpB;AACD,QAAM,KAAK,SAAS,EAAE;;CAGxB,WAAW,SAA0B;AACnC,OAAK,iBAAiB,KAAK,QAAQ;;CAGrC,MAAM,SAAS,WAAqB,GAAG;AACrC,MAAI,KAAK,eACP;AAGF,OAAK,iBAAiB;AACtB,OAAK,WAAW;EAGhB,MAAM,WAAW,CAAC,GAAG,KAAK,iBAAiB,CAAC,SAAS;AAErD,OAAK,MAAM,EAAE,MAAM,SAAS,UAAU,SAAU,SAC9C,KAAI;AACF,UAAO,aAAa,+BAA+B,OAAO;GAE1D,MAAM,iBAAiB,IAAI,SAAe,GAAG,WAAW;AACtD,WAAO,iBACC,uBAAO,IAAI,MAAM,YAAY,OAAO,CAAC,EAC3C,QACD;KACD;AAEF,SAAM,QAAQ,KAAK,CAAC,QAAQ,QAAQ,SAAS,CAAC,EAAE,eAAe,CAAC;AAEhE,UAAO,aAAa,+BAA+B,OAAO;WACnD,OAAO;AACd,UAAO,MAAM,6BAA6B,KAAK,IAAI,QAAQ;;AAI/D,SAAO,aAAa,6BAA6B;AACjD,UAAQ,KAAK,KAAK,SAAS;;;AAK/B,MAAa,mBAAmB,IAAI,kBAAkB;AAGtD,SAAgB,KAAK,OAAiB,GAAmB;AACvD,QAAO,iBAAiB,SAAS,KAAK"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "locadex",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.172",
|
|
4
4
|
"description": "An AI agent for internationalization",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
"commander": "^12.1.0",
|
|
18
18
|
"dotenv": "^16.4.5",
|
|
19
19
|
"open": "^10.1.1",
|
|
20
|
-
"gt": "2.14.
|
|
20
|
+
"gt": "2.14.37"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@types/jest": "^29.5.14",
|
|
24
24
|
"@types/micromatch": "^4.0.9",
|
|
25
25
|
"@types/node": "^22.13.5",
|
|
26
|
+
"tsdown": "^0.21.10",
|
|
26
27
|
"tsx": "^4.16.5",
|
|
27
28
|
"typescript": "^5.9.2"
|
|
28
29
|
},
|
|
@@ -50,7 +51,9 @@
|
|
|
50
51
|
],
|
|
51
52
|
"scripts": {
|
|
52
53
|
"patch": "pnpm version patch",
|
|
53
|
-
"
|
|
54
|
+
"emit-types": "sh ../../scripts/emit-types.sh",
|
|
55
|
+
"transpile": "tsdown && pnpm run emit-types",
|
|
56
|
+
"build": "pnpm run transpile",
|
|
54
57
|
"build:release": "pnpm run build:clean",
|
|
55
58
|
"build:clean": "sh ../../scripts/clean.sh && pnpm run build",
|
|
56
59
|
"dev": "pnpm run build && node dist/index.js",
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["index.ts"],"names":[],"mappings":"","sourcesContent":["export {};\n"]}
|