@illumiarq/lumis 1.2.10 → 1.2.11
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/bridges/project-bridge.d.ts +2 -0
- package/dist/bridges/project-bridge.d.ts.map +1 -0
- package/dist/bridges/project-bridge.js +174 -0
- package/dist/bridges/project-bridge.js.map +1 -0
- package/dist/cli.d.ts +1 -16
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +538 -170
- package/dist/cli.js.map +1 -1
- package/dist/commands/app/cache-workflows.d.ts +7 -0
- package/dist/commands/app/cache-workflows.d.ts.map +1 -0
- package/dist/commands/app/cache-workflows.js +139 -0
- package/dist/commands/app/cache-workflows.js.map +1 -0
- package/dist/commands/app/command-runtime.d.ts +11 -0
- package/dist/commands/app/command-runtime.d.ts.map +1 -0
- package/dist/commands/app/command-runtime.js +41 -0
- package/dist/commands/app/command-runtime.js.map +1 -0
- package/dist/commands/app/config-cache.d.ts +3 -0
- package/dist/commands/app/config-cache.d.ts.map +1 -0
- package/dist/commands/app/config-cache.js +75 -0
- package/dist/commands/app/config-cache.js.map +1 -0
- package/dist/commands/app/config-publish.d.ts +2 -0
- package/dist/commands/app/config-publish.d.ts.map +1 -0
- package/dist/commands/app/config-publish.js +68 -0
- package/dist/commands/app/config-publish.js.map +1 -0
- package/dist/commands/app/config-stubs.d.ts +3 -0
- package/dist/commands/app/config-stubs.d.ts.map +1 -0
- package/dist/commands/app/config-stubs.js +154 -0
- package/dist/commands/app/config-stubs.js.map +1 -0
- package/dist/commands/app/database.d.ts +3 -0
- package/dist/commands/app/database.d.ts.map +1 -0
- package/dist/commands/app/database.js +221 -0
- package/dist/commands/app/database.js.map +1 -0
- package/dist/commands/app/docs.d.ts +7 -0
- package/dist/commands/app/docs.d.ts.map +1 -0
- package/dist/commands/app/docs.js +61 -0
- package/dist/commands/app/docs.js.map +1 -0
- package/dist/commands/app/routes.d.ts +5 -0
- package/dist/commands/app/routes.d.ts.map +1 -0
- package/dist/commands/app/routes.js +95 -0
- package/dist/commands/app/routes.js.map +1 -0
- package/dist/commands/app/security.d.ts +3 -0
- package/dist/commands/app/security.d.ts.map +1 -0
- package/dist/commands/app/security.js +15 -0
- package/dist/commands/app/security.js.map +1 -0
- package/dist/commands/app/worker-schedule.d.ts +5 -0
- package/dist/commands/app/worker-schedule.d.ts.map +1 -0
- package/dist/commands/app/worker-schedule.js +94 -0
- package/dist/commands/app/worker-schedule.js.map +1 -0
- package/dist/commands/app-commands.d.ts +19 -0
- package/dist/commands/app-commands.d.ts.map +1 -0
- package/dist/commands/app-commands.js +77 -0
- package/dist/commands/app-commands.js.map +1 -0
- package/dist/commands/build-vercel-fn.d.ts +9 -0
- package/dist/commands/build-vercel-fn.d.ts.map +1 -0
- package/dist/commands/build-vercel-fn.js +32 -0
- package/dist/commands/build-vercel-fn.js.map +1 -0
- package/dist/commands/build.d.ts +14 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +24 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/info.d.ts +9 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +41 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +60 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/maintenance.d.ts +9 -0
- package/dist/commands/maintenance.d.ts.map +1 -0
- package/dist/commands/maintenance.js +38 -0
- package/dist/commands/maintenance.js.map +1 -0
- package/dist/commands/module-list.d.ts +2 -0
- package/dist/commands/module-list.d.ts.map +1 -0
- package/dist/commands/module-list.js +27 -0
- package/dist/commands/module-list.js.map +1 -0
- package/dist/commands/preview.d.ts +14 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +49 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/serve.d.ts +16 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +61 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/{output/ansi.d.ts → console.d.ts} +8 -4
- package/dist/console.d.ts.map +1 -0
- package/dist/{output/ansi.js → console.js} +12 -4
- package/dist/console.js.map +1 -0
- package/dist/index.d.ts +15 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +26 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +83 -0
- package/dist/paths.js.map +1 -0
- package/dist/server-wrapper.d.ts +12 -0
- package/dist/server-wrapper.d.ts.map +1 -0
- package/dist/server-wrapper.js +63 -0
- package/dist/server-wrapper.js.map +1 -0
- package/dist/vercel-wrapper.d.ts +6 -0
- package/dist/vercel-wrapper.d.ts.map +1 -0
- package/dist/vercel-wrapper.js +50 -0
- package/dist/vercel-wrapper.js.map +1 -0
- package/package.json +19 -37
- package/README.md +0 -38
- package/dist/adapter-loader.d.ts +0 -67
- package/dist/adapter-loader.d.ts.map +0 -1
- package/dist/adapter-loader.js +0 -273
- package/dist/adapter-loader.js.map +0 -1
- package/dist/commands/commands.command.d.ts +0 -38
- package/dist/commands/commands.command.d.ts.map +0 -1
- package/dist/commands/commands.command.js +0 -176
- package/dist/commands/commands.command.js.map +0 -1
- package/dist/commands/doctor.command.d.ts +0 -9
- package/dist/commands/doctor.command.d.ts.map +0 -1
- package/dist/commands/doctor.command.js +0 -922
- package/dist/commands/doctor.command.js.map +0 -1
- package/dist/commands/init.command.d.ts +0 -9
- package/dist/commands/init.command.d.ts.map +0 -1
- package/dist/commands/init.command.js +0 -135
- package/dist/commands/init.command.js.map +0 -1
- package/dist/commands/intent.command.d.ts +0 -26
- package/dist/commands/intent.command.d.ts.map +0 -1
- package/dist/commands/intent.command.js +0 -211
- package/dist/commands/intent.command.js.map +0 -1
- package/dist/commands/ir-rebuild.command.d.ts +0 -9
- package/dist/commands/ir-rebuild.command.d.ts.map +0 -1
- package/dist/commands/ir-rebuild.command.js +0 -36
- package/dist/commands/ir-rebuild.command.js.map +0 -1
- package/dist/commands/ir-show.command.d.ts +0 -9
- package/dist/commands/ir-show.command.d.ts.map +0 -1
- package/dist/commands/ir-show.command.js +0 -32
- package/dist/commands/ir-show.command.js.map +0 -1
- package/dist/commands/make.command.d.ts +0 -9
- package/dist/commands/make.command.d.ts.map +0 -1
- package/dist/commands/make.command.js +0 -93
- package/dist/commands/make.command.js.map +0 -1
- package/dist/commands/pack.command.d.ts +0 -16
- package/dist/commands/pack.command.d.ts.map +0 -1
- package/dist/commands/pack.command.js +0 -44
- package/dist/commands/pack.command.js.map +0 -1
- package/dist/commands/runtime.command.d.ts +0 -6
- package/dist/commands/runtime.command.d.ts.map +0 -1
- package/dist/commands/runtime.command.js +0 -379
- package/dist/commands/runtime.command.js.map +0 -1
- package/dist/commands/runtime.d.ts +0 -45
- package/dist/commands/runtime.d.ts.map +0 -1
- package/dist/commands/runtime.js +0 -66
- package/dist/commands/runtime.js.map +0 -1
- package/dist/commands/tinker-agent-plan.d.ts +0 -26
- package/dist/commands/tinker-agent-plan.d.ts.map +0 -1
- package/dist/commands/tinker-agent-plan.js +0 -115
- package/dist/commands/tinker-agent-plan.js.map +0 -1
- package/dist/commands/tinker-chat-commands.d.ts +0 -19
- package/dist/commands/tinker-chat-commands.d.ts.map +0 -1
- package/dist/commands/tinker-chat-commands.js +0 -263
- package/dist/commands/tinker-chat-commands.js.map +0 -1
- package/dist/commands/tinker-chat-runtime.d.ts +0 -30
- package/dist/commands/tinker-chat-runtime.d.ts.map +0 -1
- package/dist/commands/tinker-chat-runtime.js +0 -227
- package/dist/commands/tinker-chat-runtime.js.map +0 -1
- package/dist/commands/tinker-classic-mode.d.ts +0 -15
- package/dist/commands/tinker-classic-mode.d.ts.map +0 -1
- package/dist/commands/tinker-classic-mode.js +0 -160
- package/dist/commands/tinker-classic-mode.js.map +0 -1
- package/dist/commands/tinker-eval.command.d.ts +0 -3
- package/dist/commands/tinker-eval.command.d.ts.map +0 -1
- package/dist/commands/tinker-eval.command.js +0 -151
- package/dist/commands/tinker-eval.command.js.map +0 -1
- package/dist/commands/tinker-repl-display.d.ts +0 -15
- package/dist/commands/tinker-repl-display.d.ts.map +0 -1
- package/dist/commands/tinker-repl-display.js +0 -147
- package/dist/commands/tinker-repl-display.js.map +0 -1
- package/dist/commands/tinker-session-runtime.d.ts +0 -27
- package/dist/commands/tinker-session-runtime.d.ts.map +0 -1
- package/dist/commands/tinker-session-runtime.js +0 -196
- package/dist/commands/tinker-session-runtime.js.map +0 -1
- package/dist/commands/tinker.command.d.ts +0 -9
- package/dist/commands/tinker.command.d.ts.map +0 -1
- package/dist/commands/tinker.command.js +0 -142
- package/dist/commands/tinker.command.js.map +0 -1
- package/dist/commands/use.command.d.ts +0 -10
- package/dist/commands/use.command.d.ts.map +0 -1
- package/dist/commands/use.command.js +0 -69
- package/dist/commands/use.command.js.map +0 -1
- package/dist/config-loader.d.ts +0 -110
- package/dist/config-loader.d.ts.map +0 -1
- package/dist/config-loader.js +0 -119
- package/dist/config-loader.js.map +0 -1
- package/dist/launcher.d.ts +0 -16
- package/dist/launcher.d.ts.map +0 -1
- package/dist/launcher.js +0 -301
- package/dist/launcher.js.map +0 -1
- package/dist/lib/file-scanner.d.ts +0 -8
- package/dist/lib/file-scanner.d.ts.map +0 -1
- package/dist/lib/file-scanner.js +0 -70
- package/dist/lib/file-scanner.js.map +0 -1
- package/dist/lib/tinker-memory.d.ts +0 -19
- package/dist/lib/tinker-memory.d.ts.map +0 -1
- package/dist/lib/tinker-memory.js +0 -107
- package/dist/lib/tinker-memory.js.map +0 -1
- package/dist/lib/tinker-observer.d.ts +0 -47
- package/dist/lib/tinker-observer.d.ts.map +0 -1
- package/dist/lib/tinker-observer.js +0 -77
- package/dist/lib/tinker-observer.js.map +0 -1
- package/dist/lib/tinker-policy.d.ts +0 -21
- package/dist/lib/tinker-policy.d.ts.map +0 -1
- package/dist/lib/tinker-policy.js +0 -102
- package/dist/lib/tinker-policy.js.map +0 -1
- package/dist/lib/tinker-replay.d.ts +0 -51
- package/dist/lib/tinker-replay.d.ts.map +0 -1
- package/dist/lib/tinker-replay.js +0 -123
- package/dist/lib/tinker-replay.js.map +0 -1
- package/dist/output/ansi.d.ts.map +0 -1
- package/dist/output/ansi.js.map +0 -1
- package/dist/output/plan-display.d.ts +0 -4
- package/dist/output/plan-display.d.ts.map +0 -1
- package/dist/output/plan-display.js +0 -49
- package/dist/output/plan-display.js.map +0 -1
- package/dist/output/result-display.d.ts +0 -5
- package/dist/output/result-display.d.ts.map +0 -1
- package/dist/output/result-display.js +0 -17
- package/dist/output/result-display.js.map +0 -1
- package/dist/plugins/tinker-plugin.d.ts +0 -86
- package/dist/plugins/tinker-plugin.d.ts.map +0 -1
- package/dist/plugins/tinker-plugin.js +0 -42
- package/dist/plugins/tinker-plugin.js.map +0 -1
- package/dist/router-preferences.d.ts +0 -5
- package/dist/router-preferences.d.ts.map +0 -1
- package/dist/router-preferences.js +0 -22
- package/dist/router-preferences.js.map +0 -1
- package/dist/runtime/executor.d.ts +0 -33
- package/dist/runtime/executor.d.ts.map +0 -1
- package/dist/runtime/executor.js +0 -180
- package/dist/runtime/executor.js.map +0 -1
- package/dist/runtime/orchestration.d.ts +0 -43
- package/dist/runtime/orchestration.d.ts.map +0 -1
- package/dist/runtime/orchestration.js +0 -209
- package/dist/runtime/orchestration.js.map +0 -1
- package/dist/runtime/policy.d.ts +0 -49
- package/dist/runtime/policy.d.ts.map +0 -1
- package/dist/runtime/policy.js +0 -78
- package/dist/runtime/policy.js.map +0 -1
- package/dist/runtime/profiles.d.ts +0 -15
- package/dist/runtime/profiles.d.ts.map +0 -1
- package/dist/runtime/profiles.js +0 -131
- package/dist/runtime/profiles.js.map +0 -1
- package/dist/runtime/transcripts.d.ts +0 -59
- package/dist/runtime/transcripts.d.ts.map +0 -1
- package/dist/runtime/transcripts.js +0 -172
- package/dist/runtime/transcripts.js.map +0 -1
- package/dist/tools/git-diff.d.ts +0 -3
- package/dist/tools/git-diff.d.ts.map +0 -1
- package/dist/tools/git-diff.js +0 -16
- package/dist/tools/git-diff.js.map +0 -1
- package/dist/tools/index.d.ts +0 -24
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -88
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/lint.d.ts +0 -3
- package/dist/tools/lint.d.ts.map +0 -1
- package/dist/tools/lint.js +0 -35
- package/dist/tools/lint.js.map +0 -1
- package/dist/tools/read-file.d.ts +0 -3
- package/dist/tools/read-file.d.ts.map +0 -1
- package/dist/tools/read-file.js +0 -47
- package/dist/tools/read-file.js.map +0 -1
- package/dist/tools/run-command.d.ts +0 -3
- package/dist/tools/run-command.d.ts.map +0 -1
- package/dist/tools/run-command.js +0 -71
- package/dist/tools/run-command.js.map +0 -1
- package/dist/tools/run-tests.d.ts +0 -3
- package/dist/tools/run-tests.d.ts.map +0 -1
- package/dist/tools/run-tests.js +0 -49
- package/dist/tools/run-tests.js.map +0 -1
- package/dist/tools/tool-dispatch.d.ts +0 -32
- package/dist/tools/tool-dispatch.d.ts.map +0 -1
- package/dist/tools/tool-dispatch.js +0 -120
- package/dist/tools/tool-dispatch.js.map +0 -1
- package/dist/tools/typecheck.d.ts +0 -3
- package/dist/tools/typecheck.d.ts.map +0 -1
- package/dist/tools/typecheck.js +0 -48
- package/dist/tools/typecheck.js.map +0 -1
- package/dist/tools/types.d.ts +0 -62
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -7
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/write-file.d.ts +0 -15
- package/dist/tools/write-file.d.ts.map +0 -1
- package/dist/tools/write-file.js +0 -52
- package/dist/tools/write-file.js.map +0 -1
- package/dist/tracing/types.d.ts +0 -10
- package/dist/tracing/types.d.ts.map +0 -1
- package/dist/tracing/types.js +0 -2
- package/dist/tracing/types.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, relative } from 'node:path';
|
|
3
|
+
import { generateAuthModule, generateAuthUI, generateIAMModule, generateLangFile, generateUserModule, publishAuthStubs, publishIAMStubs, } from '@illumiarq/auth-starter';
|
|
4
|
+
import { ui, writeError, writeLine } from '../console.js';
|
|
5
|
+
import { runBridge } from './app/command-runtime.js';
|
|
6
|
+
import { cacheSearchIndex, cacheViews, clearOptimizationCaches, clearSearchIndex, clearViews, optimizeForProduction, } from './app/cache-workflows.js';
|
|
7
|
+
import { cacheConfig, clearConfigCache } from './app/config-cache.js';
|
|
8
|
+
import { pingDatabaseConnection, runDatabaseCommand } from './app/database.js';
|
|
9
|
+
import { publishConfig } from './app/config-publish.js';
|
|
10
|
+
import { cacheRoutes, checkRoutes, clearRouteCache, listRoutes } from './app/routes.js';
|
|
11
|
+
import { ensureParentDir, resolvePathWithinRoot } from './app/security.js';
|
|
12
|
+
import { scheduleList, scheduleRun, workerList, workerStart } from './app/worker-schedule.js';
|
|
13
|
+
export { cacheConfig, cacheRoutes, cacheSearchIndex, cacheViews, clearConfigCache, clearOptimizationCaches, checkRoutes, clearRouteCache, clearSearchIndex, clearViews, listRoutes, optimizeForProduction, pingDatabaseConnection, publishConfig, runDatabaseCommand, scheduleList, scheduleRun, workerList, workerStart, };
|
|
14
|
+
function writeGeneratedFiles(cwd, files) {
|
|
15
|
+
let created = 0;
|
|
16
|
+
let skipped = 0;
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
const target = resolvePathWithinRoot(cwd, file.path);
|
|
19
|
+
ensureParentDir(target);
|
|
20
|
+
if (existsSync(target) && file.path !== 'lang/en.json') {
|
|
21
|
+
skipped += 1;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
writeFileSync(target, file.content, 'utf8');
|
|
25
|
+
created += 1;
|
|
26
|
+
}
|
|
27
|
+
return { created, skipped };
|
|
28
|
+
}
|
|
29
|
+
export function showResolvedConfig(configName, cwd = process.cwd()) {
|
|
30
|
+
const result = runBridge(['config:show', cwd, configName], cwd);
|
|
31
|
+
if (result.status !== 0) {
|
|
32
|
+
writeError(ui.fail(result.stderr.trim() || `Unable to load config/${configName}.ts`));
|
|
33
|
+
return result.status;
|
|
34
|
+
}
|
|
35
|
+
const parsed = JSON.parse(result.stdout);
|
|
36
|
+
writeLine();
|
|
37
|
+
writeLine(ui.section(`Config ${configName}`));
|
|
38
|
+
writeLine(JSON.stringify(parsed.config, null, 2));
|
|
39
|
+
writeLine();
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
export function publishStubs(options = {}, cwd = process.cwd()) {
|
|
43
|
+
if (options.all || !options.iam) {
|
|
44
|
+
publishAuthStubs(cwd);
|
|
45
|
+
}
|
|
46
|
+
if (options.all || options.iam) {
|
|
47
|
+
publishIAMStubs(cwd);
|
|
48
|
+
}
|
|
49
|
+
writeLine();
|
|
50
|
+
writeLine(ui.section('Stub Publish'));
|
|
51
|
+
writeLine(` ${ui.ok(`Published stubs into ${relative(cwd, join(cwd, 'stubs')) || 'stubs'}`)}`);
|
|
52
|
+
writeLine();
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
export function installAuth(options = {}, cwd = process.cwd()) {
|
|
56
|
+
const generated = options.iam
|
|
57
|
+
? generateIAMModule()
|
|
58
|
+
: [...generateAuthModule(), ...generateUserModule()];
|
|
59
|
+
const uiFiles = options.ui ? generateAuthUI(options.ui) : [];
|
|
60
|
+
const langFile = generateLangFile(cwd);
|
|
61
|
+
const result = writeGeneratedFiles(cwd, [...generated, ...uiFiles, langFile]);
|
|
62
|
+
writeLine();
|
|
63
|
+
writeLine(ui.section('Auth Install'));
|
|
64
|
+
writeLine(` ${ui.ok(`Created ${result.created} files`)}`);
|
|
65
|
+
if (result.skipped > 0) {
|
|
66
|
+
writeLine(` ${ui.warn(`Skipped ${result.skipped} existing files`)}`);
|
|
67
|
+
}
|
|
68
|
+
if (options.ui) {
|
|
69
|
+
writeLine(` ${ui.bullet(`UI scaffold: ${options.ui}`)}`);
|
|
70
|
+
}
|
|
71
|
+
if (options.iam) {
|
|
72
|
+
writeLine(` ${ui.bullet('Installed IAM module scaffold')}`);
|
|
73
|
+
}
|
|
74
|
+
writeLine();
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=app-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-commands.js","sourceRoot":"","sources":["../../src/commands/app-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lumis build:vercel-fn` — build a Vercel-compatible serverless entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* Steps:
|
|
5
|
+
* 1. Build .arc/node/app.js (project-owned build:node script)
|
|
6
|
+
* 2. Write api/index.js wrapper using hono/vercel handle()
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildVercelFunction(cwd?: string): number;
|
|
9
|
+
//# sourceMappingURL=build-vercel-fn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-vercel-fn.d.ts","sourceRoot":"","sources":["../../src/commands/build-vercel-fn.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAwB/D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { buildApp } from './build.js';
|
|
3
|
+
import { ui, writeError, writeLine } from '../console.js';
|
|
4
|
+
import { arcNodeApp } from '../paths.js';
|
|
5
|
+
import { writeVercelFunctionWrapper } from '../vercel-wrapper.js';
|
|
6
|
+
/**
|
|
7
|
+
* `lumis build:vercel-fn` — build a Vercel-compatible serverless entrypoint.
|
|
8
|
+
*
|
|
9
|
+
* Steps:
|
|
10
|
+
* 1. Build .arc/node/app.js (project-owned build:node script)
|
|
11
|
+
* 2. Write api/index.js wrapper using hono/vercel handle()
|
|
12
|
+
*/
|
|
13
|
+
export function buildVercelFunction(cwd = process.cwd()) {
|
|
14
|
+
writeLine();
|
|
15
|
+
writeLine(ui.section('Vercel Function Build'));
|
|
16
|
+
const buildExit = buildApp({ target: 'node' }, cwd);
|
|
17
|
+
if (buildExit !== 0) {
|
|
18
|
+
writeError(ui.fail('Build failed while producing .arc/node/app.js'));
|
|
19
|
+
return buildExit;
|
|
20
|
+
}
|
|
21
|
+
if (!existsSync(arcNodeApp(cwd))) {
|
|
22
|
+
writeError(ui.fail('Expected .arc/node/app.js after build:node, but file is missing.'));
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
const wrapperPath = writeVercelFunctionWrapper(cwd);
|
|
26
|
+
writeLine(` ${ui.ok('Generated Vercel entrypoint')}`);
|
|
27
|
+
writeLine(` ${ui.bullet(wrapperPath)}`);
|
|
28
|
+
writeLine(` ${ui.dim('Add vercel.json rewrite: { "source": "/(.*)", "destination": "/api/index" }')}`);
|
|
29
|
+
writeLine();
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=build-vercel-fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-vercel-fn.js","sourceRoot":"","sources":["../../src/commands/build-vercel-fn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACrD,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IACvD,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzC,SAAS,CACP,KAAK,EAAE,CAAC,GAAG,CAAC,6EAA6E,CAAC,EAAE,CAC7F,CAAC;IACF,SAAS,EAAE,CAAC;IAEZ,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BuildOptions {
|
|
2
|
+
/** Target to build. Omit for full project build script. */
|
|
3
|
+
target?: 'node' | 'static' | 'cloudflare' | 'vercel';
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* `lumis build` — build the LumiARQ application.
|
|
7
|
+
*
|
|
8
|
+
* Delegates to the project's own `build`, `build:node`, or `build:web`
|
|
9
|
+
* pnpm scripts so each app controls its own build pipeline.
|
|
10
|
+
*
|
|
11
|
+
* @returns Exit code.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildApp(options?: BuildOptions, cwd?: string): number;
|
|
14
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,YAAiB,EAAE,GAAG,SAAgB,GAAG,MAAM,CAgBhF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { buildVercelFunction } from './build-vercel-fn.js';
|
|
3
|
+
/**
|
|
4
|
+
* `lumis build` — build the LumiARQ application.
|
|
5
|
+
*
|
|
6
|
+
* Delegates to the project's own `build`, `build:node`, or `build:web`
|
|
7
|
+
* pnpm scripts so each app controls its own build pipeline.
|
|
8
|
+
*
|
|
9
|
+
* @returns Exit code.
|
|
10
|
+
*/
|
|
11
|
+
export function buildApp(options = {}, cwd = process.cwd()) {
|
|
12
|
+
const target = options.target;
|
|
13
|
+
if (target === 'vercel') {
|
|
14
|
+
return buildVercelFunction(cwd);
|
|
15
|
+
}
|
|
16
|
+
const script = target ? `build:${target}` : 'build';
|
|
17
|
+
const result = spawnSync('pnpm', ['run', script], {
|
|
18
|
+
cwd,
|
|
19
|
+
stdio: 'inherit',
|
|
20
|
+
env: { ...process.env, NODE_ENV: 'production' },
|
|
21
|
+
});
|
|
22
|
+
return result.status ?? 1;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAO3D;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,UAAwB,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;QAChD,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE;KAChD,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAsBA,wBAAgB,QAAQ,CAAC,GAAG,SAAgB,GAAG,MAAM,CAqBpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG;IACtD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAUA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { ui, writeLine } from '../console.js';
|
|
4
|
+
const ROOT_CONFIG_PATTERN = /^(?:eslint\.config\.[cm]?[jt]s|postcss\.config\.[cm]?[jt]s|playwright\.config\.[cm]?[jt]s|vitest\.config\.[cm]?[jt]s|components\.json|next\.config\.[cm]?[jt]s|vercel\.json|tsconfig(?:\.build)?\.json)$/;
|
|
5
|
+
function readPackageJson(cwd) {
|
|
6
|
+
const packageJsonPath = join(cwd, 'package.json');
|
|
7
|
+
if (!existsSync(packageJsonPath)) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
11
|
+
}
|
|
12
|
+
export function showInfo(cwd = process.cwd()) {
|
|
13
|
+
const packageJson = readPackageJson(cwd);
|
|
14
|
+
const scripts = Object.keys(packageJson?.scripts ?? {});
|
|
15
|
+
const layout = readProjectLayout(cwd);
|
|
16
|
+
writeLine();
|
|
17
|
+
writeLine(ui.section('Project Info'));
|
|
18
|
+
writeLine(` ${ui.bold('root')} ${cwd}`);
|
|
19
|
+
writeLine(` ${ui.bold('package')} ${packageJson?.name ?? '(unknown)'}`);
|
|
20
|
+
writeLine(` ${ui.bold('node')} ${process.version}`);
|
|
21
|
+
writeLine(` ${ui.bold('bootstrap')} ${layout.bootstrap ? 'bootstrap/' : 'missing'}`);
|
|
22
|
+
writeLine(` ${ui.bold('config')} ${layout.config ? 'config/' : 'missing'}`);
|
|
23
|
+
writeLine(` ${ui.bold('entry')} ${layout.entry ? 'entry/' : 'missing'}`);
|
|
24
|
+
writeLine(` ${ui.bold('modules')} ${layout.modules ? 'src/modules' : 'missing'}`);
|
|
25
|
+
writeLine(` ${ui.bold('root-configs')} ${layout.rootConfigs.length > 0 ? `${layout.rootConfigs.length} (${layout.rootConfigs.join(', ')})` : 'none'}`);
|
|
26
|
+
writeLine(` ${ui.bold('scripts')} ${scripts.length > 0 ? scripts.join(', ') : '(none)'}`);
|
|
27
|
+
writeLine();
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
export function readProjectLayout(cwd = process.cwd()) {
|
|
31
|
+
return {
|
|
32
|
+
bootstrap: existsSync(join(cwd, 'bootstrap')),
|
|
33
|
+
config: existsSync(join(cwd, 'src', 'config')),
|
|
34
|
+
entry: existsSync(join(cwd, 'entry')),
|
|
35
|
+
modules: existsSync(join(cwd, 'src', 'modules')),
|
|
36
|
+
rootConfigs: readdirSync(cwd)
|
|
37
|
+
.filter((name) => ROOT_CONFIG_PATTERN.test(name))
|
|
38
|
+
.sort(),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAgEA,wBAAgB,YAAY,CAAC,GAAG,SAAgB,GAAG,MAAM,CAExD;AAED,wBAAgB,UAAU,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { generateKeyPairSync, randomBytes } from 'node:crypto';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { ui, writeLine } from '../console.js';
|
|
5
|
+
function parseEnvFile(raw) {
|
|
6
|
+
const entries = new Map();
|
|
7
|
+
for (const line of raw.split(/\r?\n/g)) {
|
|
8
|
+
if (!line || line.trim().startsWith('#'))
|
|
9
|
+
continue;
|
|
10
|
+
const equalsIndex = line.indexOf('=');
|
|
11
|
+
if (equalsIndex <= 0)
|
|
12
|
+
continue;
|
|
13
|
+
const key = line.slice(0, equalsIndex).trim();
|
|
14
|
+
const value = line.slice(equalsIndex + 1);
|
|
15
|
+
entries.set(key, value);
|
|
16
|
+
}
|
|
17
|
+
return entries;
|
|
18
|
+
}
|
|
19
|
+
function serializeEnv(entries) {
|
|
20
|
+
const lines = [...entries.entries()].map(([key, value]) => `${key}=${value}`);
|
|
21
|
+
return `${lines.join('\n')}\n`;
|
|
22
|
+
}
|
|
23
|
+
function buildSecrets() {
|
|
24
|
+
const { privateKey, publicKey } = generateKeyPairSync('rsa', {
|
|
25
|
+
modulusLength: 4096,
|
|
26
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
|
|
27
|
+
publicKeyEncoding: { type: 'spki', format: 'pem' },
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
privateKey: JSON.stringify(privateKey).slice(1, -1),
|
|
31
|
+
publicKey: JSON.stringify(publicKey).slice(1, -1),
|
|
32
|
+
sessionSecret: randomBytes(32).toString('hex'),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function writeSecrets(cwd, mode) {
|
|
36
|
+
const envPath = join(cwd, '.env');
|
|
37
|
+
const current = existsSync(envPath)
|
|
38
|
+
? parseEnvFile(readFileSync(envPath, 'utf8'))
|
|
39
|
+
: new Map();
|
|
40
|
+
const secrets = buildSecrets();
|
|
41
|
+
current.set('JWT_PRIVATE_KEY', secrets.privateKey);
|
|
42
|
+
current.set('JWT_PUBLIC_KEY', secrets.publicKey);
|
|
43
|
+
current.set('SESSION_SECRET', secrets.sessionSecret);
|
|
44
|
+
writeFileSync(envPath, serializeEnv(current), 'utf8');
|
|
45
|
+
writeLine();
|
|
46
|
+
writeLine(ui.section(mode === 'generate' ? 'Key Generate' : 'Key Rotate'));
|
|
47
|
+
writeLine(` ${ui.ok(`Updated ${envPath}`)}`);
|
|
48
|
+
writeLine(` ${ui.bullet('JWT_PRIVATE_KEY refreshed')}`);
|
|
49
|
+
writeLine(` ${ui.bullet('JWT_PUBLIC_KEY refreshed')}`);
|
|
50
|
+
writeLine(` ${ui.bullet('SESSION_SECRET refreshed')}`);
|
|
51
|
+
writeLine();
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
export function generateKeys(cwd = process.cwd()) {
|
|
55
|
+
return writeSecrets(cwd, 'generate');
|
|
56
|
+
}
|
|
57
|
+
export function rotateKeys(cwd = process.cwd()) {
|
|
58
|
+
return writeSecrets(cwd, 'rotate');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type MaintenanceOptions = {
|
|
2
|
+
message?: string;
|
|
3
|
+
secret?: string;
|
|
4
|
+
allowedIps?: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare function enableMaintenanceMode(options?: MaintenanceOptions, cwd?: string): number;
|
|
7
|
+
export declare function disableMaintenanceMode(cwd?: string): number;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=maintenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/commands/maintenance.ts"],"names":[],"mappings":"AAKA,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,kBAAuB,EAChC,GAAG,SAAgB,GAClB,MAAM,CAyBR;AAED,wBAAgB,sBAAsB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAYlE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { existsSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { ui, writeLine } from '../console.js';
|
|
4
|
+
export function enableMaintenanceMode(options = {}, cwd = process.cwd()) {
|
|
5
|
+
const targetPath = join(cwd, '.maintenance');
|
|
6
|
+
const payload = {
|
|
7
|
+
...(options.message ? { message: options.message } : {}),
|
|
8
|
+
...(options.secret ? { secret: options.secret } : {}),
|
|
9
|
+
...(options.allowedIps && options.allowedIps.length > 0
|
|
10
|
+
? { allowedIps: options.allowedIps }
|
|
11
|
+
: {}),
|
|
12
|
+
downAt: new Date().toISOString(),
|
|
13
|
+
};
|
|
14
|
+
writeFileSync(targetPath, `${JSON.stringify(payload, null, 2)}\n`, 'utf8');
|
|
15
|
+
writeLine();
|
|
16
|
+
writeLine(ui.section('Maintenance Down'));
|
|
17
|
+
writeLine(` ${ui.ok(`Wrote ${targetPath}`)}`);
|
|
18
|
+
if (options.message) {
|
|
19
|
+
writeLine(` ${ui.bullet(`message: ${options.message}`)}`);
|
|
20
|
+
}
|
|
21
|
+
if (options.allowedIps && options.allowedIps.length > 0) {
|
|
22
|
+
writeLine(` ${ui.bullet(`allow: ${options.allowedIps.join(', ')}`)}`);
|
|
23
|
+
}
|
|
24
|
+
writeLine();
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
export function disableMaintenanceMode(cwd = process.cwd()) {
|
|
28
|
+
const targetPath = join(cwd, '.maintenance');
|
|
29
|
+
if (existsSync(targetPath)) {
|
|
30
|
+
rmSync(targetPath, { force: true });
|
|
31
|
+
}
|
|
32
|
+
writeLine();
|
|
33
|
+
writeLine(ui.section('Maintenance Up'));
|
|
34
|
+
writeLine(` ${ui.ok(`Removed ${targetPath}`)}`);
|
|
35
|
+
writeLine();
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=maintenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/commands/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAQ9C,MAAM,UAAU,qBAAqB,CACnC,UAA8B,EAAE,EAChC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YACrD,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACjC,CAAC;IAEF,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE3E,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1C,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,SAAS,EAAE,CAAC;IAEZ,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,WAAW,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC;IAEZ,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-list.d.ts","sourceRoot":"","sources":["../../src/commands/module-list.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,GAAG,SAAgB,GAAG,MAAM,CAyBvD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { ui, writeLine } from '../console.js';
|
|
4
|
+
export function listModules(cwd = process.cwd()) {
|
|
5
|
+
const modulesDir = join(cwd, 'src', 'modules');
|
|
6
|
+
if (!existsSync(modulesDir)) {
|
|
7
|
+
writeLine();
|
|
8
|
+
writeLine(ui.fail('No src/modules directory found.'));
|
|
9
|
+
writeLine();
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
const modules = readdirSync(modulesDir, { withFileTypes: true })
|
|
13
|
+
.filter((entry) => entry.isDirectory())
|
|
14
|
+
.map((entry) => entry.name)
|
|
15
|
+
.sort((left, right) => left.localeCompare(right));
|
|
16
|
+
writeLine();
|
|
17
|
+
writeLine(ui.section(`Modules (${modules.length})`));
|
|
18
|
+
if (modules.length === 0) {
|
|
19
|
+
writeLine(` ${ui.dim('No modules discovered.')}`);
|
|
20
|
+
}
|
|
21
|
+
for (const moduleName of modules) {
|
|
22
|
+
writeLine(` ${ui.bullet(moduleName)}`);
|
|
23
|
+
}
|
|
24
|
+
writeLine();
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=module-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-list.js","sourceRoot":"","sources":["../../src/commands/module-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACtD,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpD,SAAS,EAAE,CAAC;IACZ,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,SAAS,EAAE,CAAC;IAEZ,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PreviewOptions {
|
|
2
|
+
port?: number;
|
|
3
|
+
target?: 'node' | 'static' | 'cloudflare';
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* `lumis preview` — preview the production build locally.
|
|
7
|
+
*
|
|
8
|
+
* Auto-builds if `.arc/node/app.js` is absent, then writes
|
|
9
|
+
* `.arc/.server.mjs` and starts `node` (no --watch).
|
|
10
|
+
*
|
|
11
|
+
* @returns Exit code.
|
|
12
|
+
*/
|
|
13
|
+
export declare function previewApp(options?: PreviewOptions, cwd?: string): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,cAAmB,EAC5B,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import { buildApp } from './build.js';
|
|
5
|
+
import { writeServerWrapper } from '../server-wrapper.js';
|
|
6
|
+
import { arcNodeApp, appEnvFile } from '../paths.js';
|
|
7
|
+
/**
|
|
8
|
+
* `lumis preview` — preview the production build locally.
|
|
9
|
+
*
|
|
10
|
+
* Auto-builds if `.arc/node/app.js` is absent, then writes
|
|
11
|
+
* `.arc/.server.mjs` and starts `node` (no --watch).
|
|
12
|
+
*
|
|
13
|
+
* @returns Exit code.
|
|
14
|
+
*/
|
|
15
|
+
export async function previewApp(options = {}, cwd = process.cwd()) {
|
|
16
|
+
const target = options.target ?? 'node';
|
|
17
|
+
const port = options.port ?? parseInt(process.env['PORT'] ?? '4000', 10);
|
|
18
|
+
if (target !== 'node') {
|
|
19
|
+
const script = `preview:${target}`;
|
|
20
|
+
const result = spawnSync('pnpm', ['run', script], {
|
|
21
|
+
cwd,
|
|
22
|
+
stdio: 'inherit',
|
|
23
|
+
env: { ...process.env, PORT: String(port) },
|
|
24
|
+
});
|
|
25
|
+
return result.status ?? 1;
|
|
26
|
+
}
|
|
27
|
+
// Auto-build if bundle is missing
|
|
28
|
+
if (!existsSync(arcNodeApp(cwd))) {
|
|
29
|
+
console.log('\n No bundle found — building first...\n');
|
|
30
|
+
const code = buildApp({ target: 'node' }, cwd);
|
|
31
|
+
if (code !== 0) {
|
|
32
|
+
console.error('\n Build failed.\n');
|
|
33
|
+
return code;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const wrapperPath = writeServerWrapper(port, cwd);
|
|
37
|
+
console.log(`\n LumiARQ Preview http://localhost:${port}\n`);
|
|
38
|
+
const envPath = appEnvFile(cwd);
|
|
39
|
+
const envFileArg = existsSync(envPath) ? [`--env-file=${envPath}`] : [];
|
|
40
|
+
const server = spawn('node', [...envFileArg, wrapperPath], {
|
|
41
|
+
cwd,
|
|
42
|
+
stdio: 'inherit',
|
|
43
|
+
env: { ...process.env, NODE_ENV: 'production', PORT: String(port) },
|
|
44
|
+
});
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
server.on('close', (code) => resolve(code ?? 0));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOrD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAA0B,EAAE,EAC5B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEzE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,WAAW,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YAChD,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;SAC5C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,IAAI,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,WAAW,CAAC,EAAE;QACzD,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;KACpE,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ServeOptions {
|
|
2
|
+
port?: number;
|
|
3
|
+
host?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* `lumis serve` — LumiARQ development server.
|
|
7
|
+
*
|
|
8
|
+
* Steps:
|
|
9
|
+
* 1. Run `pnpm run build:node` to produce `.arc/node/app.js`
|
|
10
|
+
* 2. Write `.arc/.server.mjs` (bundles @illumiarq/adapters/node inline)
|
|
11
|
+
* 3. Start `node --watch .arc/.server.mjs` — auto-restarts on changes
|
|
12
|
+
*
|
|
13
|
+
* @returns Exit code (0 on clean shutdown, non-zero on error).
|
|
14
|
+
*/
|
|
15
|
+
export declare function serveApp(options?: ServeOptions, cwd?: string): Promise<number>;
|
|
16
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,EAAE,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD/F"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { writeServerWrapper } from '../server-wrapper.js';
|
|
4
|
+
import { appEnvFile } from '../paths.js';
|
|
5
|
+
/**
|
|
6
|
+
* `lumis serve` — LumiARQ development server.
|
|
7
|
+
*
|
|
8
|
+
* Steps:
|
|
9
|
+
* 1. Run `pnpm run build:node` to produce `.arc/node/app.js`
|
|
10
|
+
* 2. Write `.arc/.server.mjs` (bundles @illumiarq/adapters/node inline)
|
|
11
|
+
* 3. Start `node --watch .arc/.server.mjs` — auto-restarts on changes
|
|
12
|
+
*
|
|
13
|
+
* @returns Exit code (0 on clean shutdown, non-zero on error).
|
|
14
|
+
*/
|
|
15
|
+
export async function serveApp(options = {}, cwd = process.cwd()) {
|
|
16
|
+
const port = options.port ?? parseInt(process.env['PORT'] ?? '4000', 10);
|
|
17
|
+
const host = options.host ?? '0.0.0.0';
|
|
18
|
+
// ── Step 1: Build node bundle ──────────────────────────────────────────────
|
|
19
|
+
process.stdout.write('\n Bundling app...');
|
|
20
|
+
const build = spawnSync('pnpm', ['run', 'build:node'], {
|
|
21
|
+
cwd,
|
|
22
|
+
stdio: 'pipe',
|
|
23
|
+
encoding: 'utf8',
|
|
24
|
+
env: {
|
|
25
|
+
...process.env,
|
|
26
|
+
NODE_ENV: 'development',
|
|
27
|
+
APP_ENV: process.env['APP_ENV'] ?? 'local',
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
if (build.status !== 0) {
|
|
31
|
+
console.error(' failed.\n');
|
|
32
|
+
if (build.stdout)
|
|
33
|
+
process.stdout.write(build.stdout);
|
|
34
|
+
if (build.stderr)
|
|
35
|
+
process.stderr.write(build.stderr);
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
console.log(' done.');
|
|
39
|
+
// ── Step 2: Write server wrapper ───────────────────────────────────────────
|
|
40
|
+
const wrapperPath = writeServerWrapper(port, cwd);
|
|
41
|
+
// ── Step 3: Start with --watch ─────────────────────────────────────────────
|
|
42
|
+
console.log(`\n LumiARQ http://${host}:${port}`);
|
|
43
|
+
console.log(` Watching .arc/ for changes...\n`);
|
|
44
|
+
const envPath = appEnvFile(cwd);
|
|
45
|
+
const envFileArg = existsSync(envPath) ? [`--env-file=${envPath}`] : [];
|
|
46
|
+
const server = spawn('node', [...envFileArg, '--watch', wrapperPath], {
|
|
47
|
+
cwd,
|
|
48
|
+
stdio: 'inherit',
|
|
49
|
+
env: {
|
|
50
|
+
...process.env,
|
|
51
|
+
NODE_ENV: 'development',
|
|
52
|
+
APP_ENV: process.env['APP_ENV'] ?? 'local',
|
|
53
|
+
HOST: host,
|
|
54
|
+
PORT: String(port),
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
server.on('close', (code) => resolve(code ?? 0));
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAOrD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAwB,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IAEvC,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;QACrD,GAAG;QACH,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,8EAA8E;IAC9E,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE;QACpE,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO;YAC1C,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;SACnB;KACF,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const ui: {
|
|
2
2
|
bold: (value: string) => string;
|
|
3
3
|
dim: (value: string) => string;
|
|
4
4
|
red: (value: string) => string;
|
|
5
5
|
green: (value: string) => string;
|
|
6
6
|
yellow: (value: string) => string;
|
|
7
|
-
|
|
7
|
+
blue: (value: string) => string;
|
|
8
8
|
magenta: (value: string) => string;
|
|
9
|
+
cyan: (value: string) => string;
|
|
9
10
|
gray: (value: string) => string;
|
|
10
|
-
|
|
11
|
+
section: (label: string) => string;
|
|
11
12
|
ok: (value: string) => string;
|
|
12
13
|
warn: (value: string) => string;
|
|
13
14
|
fail: (value: string) => string;
|
|
15
|
+
bullet: (value: string) => string;
|
|
14
16
|
};
|
|
15
|
-
|
|
17
|
+
export declare function writeLine(message?: string): void;
|
|
18
|
+
export declare function writeError(message: string): void;
|
|
19
|
+
//# sourceMappingURL=console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,EAAE;kBACC,MAAM,KAAG,MAAM;iBAChB,MAAM,KAAG,MAAM;iBACf,MAAM,KAAG,MAAM;mBACb,MAAM,KAAG,MAAM;oBACd,MAAM,KAAG,MAAM;kBACjB,MAAM,KAAG,MAAM;qBACZ,MAAM,KAAG,MAAM;kBAClB,MAAM,KAAG,MAAM;kBACf,MAAM,KAAG,MAAM;qBACZ,MAAM,KAAG,MAAM;gBAEpB,MAAM,KAAG,MAAM;kBACb,MAAM,KAAG,MAAM;kBACf,MAAM,KAAG,MAAM;oBACb,MAAM,KAAG,MAAM;CAChC,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,SAAK,GAAG,IAAI,CAE5C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD"}
|