@akanjs/cli 3.0.0-alpha.9 → 3.0.0-alpha.90
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/.build-stamp +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/{abstractCompactor-e5yq60qz.js → abstractCompactor-cefxzggj.js} +3 -5
- package/{agent.command-f0gqkfgz.js → agent.command-r93wmq7m.js} +11 -13
- package/{application.command-x903m2qq.js → application.command-5nqfqgdn.js} +62 -38
- package/{applicationBuildRunner-ha3y8ew8.js → applicationBuildRunner-b21m07fs.js} +23 -20
- package/{applicationReleasePackager-gg8ccbeh.js → applicationReleasePackager-3wh58n2m.js} +8 -9
- package/buildBatch.proc.js +12 -14
- package/capacitorApp-gzcx6txb.js +12 -0
- package/{cloud.command-zs6kyf83.js → cloud.command-g0pk0k60.js} +15 -18
- package/commandManifest.json +1 -1
- package/{context.command-fmepgjzg.js → context.command-qd8kqrnh.js} +19 -23
- package/dependencyScanner-shs82ynp.js +8 -0
- package/devTui-2xf0meaq.js +552 -0
- package/devTuiView-7jy8f30g.js +9 -0
- package/getDirname-dr3jz1xg.js +7 -0
- package/{guideline.command-n6sw0a0c.js → guideline.command-f38x8jhw.js} +16 -18
- package/guidelines/agentRule/agentRule.generate.json +31 -0
- package/guidelines/agentRule/agentRule.instruction.md +533 -0
- package/guidelines/conventions/conventions.instruction.md +406 -197
- package/guidelines/cssRule/cssRule.instruction.md +7 -0
- package/guidelines/framework/framework.generate.json +3 -2
- package/guidelines/framework/framework.instruction.md +1 -9
- package/guidelines/mcpRule/mcpRule.generate.json +25 -0
- package/guidelines/mcpRule/mcpRule.instruction.md +217 -0
- package/guidelines/modelStore/modelStore.instruction.md +12 -0
- package/guidelines/modelTemplate/modelTemplate.instruction.md +5 -0
- package/guidelines/queryRule/queryRule.generate.json +31 -0
- package/guidelines/queryRule/queryRule.instruction.md +143 -0
- package/guidelines/runtimeRule/runtimeRule.generate.json +25 -0
- package/guidelines/runtimeRule/runtimeRule.instruction.md +213 -0
- package/guidelines/ssrRule/ssrRule.instruction.md +49 -5
- package/guidelines/transportRule/transportRule.generate.json +31 -0
- package/guidelines/transportRule/transportRule.instruction.md +60 -0
- package/guidelines/workspaceOnboarding/workspaceOnboarding.instruction.md +51 -760
- package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +33 -0
- package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +402 -0
- package/incrementalBuilder.proc.js +26 -25
- package/{index-774gcx29.js → index-0emb9eat.js} +41 -34
- package/index-3d9y066c.js +76 -0
- package/{index-3vta1tqa.js → index-3vvbv974.js} +32 -32
- package/{index-76rn3g2c.js → index-47pj3aee.js} +4 -4
- package/{index-y4vkyhvv.js → index-5xdqxbn9.js} +14 -14
- package/{index-1577bej2.js → index-6wwzs1bc.js} +2 -2
- package/{index-wnp7hwq7.js → index-92zztqy1.js} +7 -7
- package/{index-jhpa13zj.js → index-9bwhxrqf.js} +57 -57
- package/{index-bjpxzr6s.js → index-9wtbw98m.js} +6 -3
- package/{index-fgc8r6dj.js → index-a5vmm6x4.js} +3 -1
- package/{index-xys926f2.js → index-by5gpp8x.js} +4 -4
- package/{index-kdh76j26.js → index-cezy7yb3.js} +100 -32
- package/{index-62955kn5.js → index-d61rcfa2.js} +758 -127
- package/{index-82jrh4hj.js → index-deekbtkj.js} +13 -13
- package/{index-rxkpk7n4.js → index-e82dyeqy.js} +4 -4
- package/{index-qzdjd4ct.js → index-h759vjfa.js} +18 -18
- package/{index-j37qq1f2.js → index-h7yw2z9n.js} +7 -7
- package/{index-qb61h0k7.js → index-jydtyzva.js} +1098 -1360
- package/{index-46tjzh6s.js → index-kcxmv48c.js} +29 -29
- package/{index-4m0bphac.js → index-kfnr6c19.js} +31 -30
- package/{index-xmmzf150.js → index-mpmyqm1y.js} +1 -1
- package/{index-xjd3rqzj.js → index-n68jx79w.js} +6 -15
- package/{index-0cj2zxbm.js → index-n85fer99.js} +12 -11
- package/{index-779ske1y.js → index-pgsswppj.js} +27 -27
- package/index-pvb4vdwr.js +159 -0
- package/{index-67546d0j.js → index-q0y2jq9j.js} +14 -2
- package/{index-z8ptfkzv.js → index-q8sn827n.js} +969 -240
- package/{index-5sn5w2mt.js → index-r50qen0z.js} +94 -61
- package/{index-eyyf2149.js → index-rntcdss1.js} +36 -37
- package/{index-gcv8ncfh.js → index-sjak5v5b.js} +16 -12
- package/{index-j9cxndc0.js → index-w8kmx1b6.js} +20 -11
- package/{index-jf2ya7r2.js → index-y74k5anj.js} +8 -8
- package/{index-d43t8af2.js → index-zkvpaggp.js} +58 -25
- package/index.js +22 -25
- package/{library.command-cv9gdbmg.js → library.command-em103wtn.js} +11 -10
- package/{localRegistry.command-d8fg36zc.js → localRegistry.command-gz8apn4y.js} +20 -23
- package/{module.command-qyr1s9cn.js → module.command-451pztkc.js} +13 -16
- package/{package.command-wsjx0k47.js → package.command-rfhyf38t.js} +8 -10
- package/package.json +5 -7
- package/{page.command-rdzg65rm.js → page.command-kt19da5g.js} +7 -9
- package/{primitive.command-89g38b53.js → primitive.command-pgy69ere.js} +13 -16
- package/{quality.command-0cs2z92d.js → quality.command-gpe2vqb5.js} +226 -105
- package/recipeScanner-fpagtgc1.js +11 -0
- package/{repair.command-6fphxfwj.js → repair.command-2sbrz187.js} +12 -14
- package/{routeSourceValidator-e4jmbfcx.js → routeSourceValidator-ze6x894c.js} +0 -2
- package/{scalar.command-xfer69s6.js → scalar.command-jcf4e5sv.js} +11 -14
- package/subspace.command-kqzqtk0p.js +755 -0
- package/templates/app/env/env.client.debug.ts.template +1 -5
- package/templates/app/env/env.client.develop.ts.template +1 -5
- package/templates/app/env/env.client.local.ts.template +1 -5
- package/templates/app/env/env.client.main.ts.template +1 -5
- package/templates/app/env/env.client.testing.ts.template +1 -5
- package/templates/app/env/env.client.type.ts +2 -6
- package/templates/app/env/env.server.debug.ts.template +1 -5
- package/templates/app/env/env.server.develop.ts.template +1 -5
- package/templates/app/env/env.server.local.ts.template +1 -5
- package/templates/app/env/env.server.main.ts.template +1 -5
- package/templates/app/main.ts +3 -1
- package/templates/appSample/lib/task/task.signal.ts +11 -6
- package/templates/appSample/srvkit/AuthGuard.ts +9 -5
- package/templates/appSample/srvkit/SessionInternalArg.ts +4 -3
- package/templates/crudPages/[__model__Id]/edit/page.tsx +5 -5
- package/templates/crudPages/[__model__Id]/page.tsx +10 -13
- package/templates/crudPages/new/page.tsx +5 -5
- package/templates/crudPages/page.tsx +9 -9
- package/templates/crudSinglePage/page.tsx +11 -7
- package/templates/env/_env.server.type.ts +7 -5
- package/templates/lib/db.ts +1 -1
- package/templates/lib/dict.ts +1 -1
- package/templates/lib/sig.ts +1 -1
- package/templates/lib/srv.ts +6 -2
- package/templates/module/__model__.dictionary.ts +4 -1
- package/templates/module/__model__.signal.ts +2 -3
- package/templates/module/__model__.store.ts +1 -2
- package/templates/workspaceRoot/.gitignore.template +0 -1
- package/templates/workspaceRoot/.husky/pre-commit.template +16 -0
- package/templates/workspaceRoot/.vscode/settings.json.template +1 -1
- package/templates/workspaceRoot/AGENTS.md.template +4 -0
- package/templates/workspaceRoot/CLAUDE.md.template +19 -0
- package/templates/workspaceRoot/biome.json.template +2 -1
- package/templates/workspaceRoot/docs/AI-DEVELOPMENT.md.template +10 -14
- package/templates/workspaceRoot/docs/GENERATED.md.template +12 -10
- package/templates/workspaceRoot/package.json.template +2 -4
- package/typeChecker-3xgrzc2v.js +7 -0
- package/typecheck.proc.js +4 -5
- package/{workflow.command-2ygfqt4f.js → workflow.command-m4z25a2p.js} +22 -25
- package/{workspace.command-88m0zs64.js → workspace.command-dqgj9zbk.js} +96 -81
- package/capacitorApp-9xswcgx7.js +0 -61
- package/dependencyScanner-f6grrep3.js +0 -9
- package/getDirname-m9s0cmhq.js +0 -8
- package/index-mxvakhsm.js +0 -66
- package/index-r24hmh0q.js +0 -4
- package/recipeScanner-tghkzrrt.js +0 -12
- package/typeChecker-kravn7ns.js +0 -8
- /package/{index-0wae5ebk.js → index-meh558jy.js} +0 -0
- /package/{index-ss469dec.js → index-nz8prx9g.js} +0 -0
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
FileSys
|
|
4
|
+
} from "./index-q0y2jq9j.js";
|
|
5
|
+
import {
|
|
4
6
|
Executor,
|
|
7
|
+
WorkspaceExecutor,
|
|
8
|
+
AppExecutor,
|
|
5
9
|
LibExecutor,
|
|
6
|
-
ModuleExecutor,
|
|
7
10
|
PkgExecutor,
|
|
8
|
-
|
|
9
|
-
} from "./index-
|
|
10
|
-
import {
|
|
11
|
-
getDirname
|
|
12
|
-
} from "./index-1577bej2.js";
|
|
13
|
-
import {
|
|
14
|
-
FileSys
|
|
15
|
-
} from "./index-67546d0j.js";
|
|
11
|
+
ModuleExecutor
|
|
12
|
+
} from "./index-q8sn827n.js";
|
|
16
13
|
import {
|
|
17
|
-
|
|
18
|
-
} from "./index-
|
|
14
|
+
getDirname2
|
|
15
|
+
} from "./index-6wwzs1bc.js";
|
|
19
16
|
|
|
20
17
|
// pkgs/@akanjs/devkit/commandDecorators/targetMeta.ts
|
|
21
18
|
var COMMAND_META = Symbol("akan.command.meta");
|
|
@@ -54,6 +51,7 @@ var normalizePrimitiveArgType = (type) => {
|
|
|
54
51
|
throw new Error(`Invalid primitive argument type: ${type}`);
|
|
55
52
|
};
|
|
56
53
|
var App = createInternalArgToken("App");
|
|
54
|
+
var Apps = createInternalArgToken("Apps");
|
|
57
55
|
var Lib = createInternalArgToken("Lib");
|
|
58
56
|
var Sys = createInternalArgToken("Sys");
|
|
59
57
|
var Exec = createInternalArgToken("Exec");
|
|
@@ -62,11 +60,29 @@ var Module = createInternalArgToken("Module");
|
|
|
62
60
|
var Workspace = createInternalArgToken("Workspace");
|
|
63
61
|
|
|
64
62
|
// pkgs/@akanjs/devkit/commandDecorators/command.ts
|
|
65
|
-
import
|
|
63
|
+
import path2 from "path";
|
|
66
64
|
import { Logger } from "akanjs/common";
|
|
67
65
|
import chalk2 from "chalk";
|
|
68
66
|
import { program } from "commander";
|
|
69
67
|
|
|
68
|
+
// pkgs/@akanjs/devkit/appSelectionMemory.ts
|
|
69
|
+
import path from "path";
|
|
70
|
+
class AppSelectionMemory {
|
|
71
|
+
static pathIn(workspaceRoot) {
|
|
72
|
+
return path.join(workspaceRoot, "local", ".akan", "lastStart.json");
|
|
73
|
+
}
|
|
74
|
+
static async read(workspaceRoot) {
|
|
75
|
+
const stored = await Bun.file(AppSelectionMemory.pathIn(workspaceRoot)).json().catch(() => null);
|
|
76
|
+
const apps = stored?.apps;
|
|
77
|
+
return Array.isArray(apps) ? apps.filter((name) => typeof name === "string") : [];
|
|
78
|
+
}
|
|
79
|
+
static async write(workspaceRoot, apps) {
|
|
80
|
+
await FileSys.writeJson(AppSelectionMemory.pathIn(workspaceRoot), { apps }).catch(() => {
|
|
81
|
+
return;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
70
86
|
// pkgs/@akanjs/devkit/commandDecorators/dependencyBuilder.ts
|
|
71
87
|
var capitalize = (value) => value.slice(0, 1).toUpperCase() + value.slice(1);
|
|
72
88
|
var createDependencyKey = (refName, kind) => `${refName}${capitalize(kind)}`;
|
|
@@ -264,6 +280,8 @@ var formatCommandHelp = (command, key) => {
|
|
|
264
280
|
return "";
|
|
265
281
|
if (arg.type === "Module")
|
|
266
282
|
return "[sys:module]";
|
|
283
|
+
if (arg.type === "Apps")
|
|
284
|
+
return "[apps...]";
|
|
267
285
|
if (arg.type === "Argument") {
|
|
268
286
|
return `[${camelToKebabCase2(arg.name)}]`;
|
|
269
287
|
}
|
|
@@ -290,6 +308,9 @@ var formatCommandHelp = (command, key) => {
|
|
|
290
308
|
} else if (arg.type === "Module") {
|
|
291
309
|
argName = "sys:module";
|
|
292
310
|
argDesc = "Module in format: app-name:module-name or lib-name:module-name";
|
|
311
|
+
} else if (arg.type === "Apps") {
|
|
312
|
+
argName = "apps...";
|
|
313
|
+
argDesc = "App names, space- or comma-separated, or all. Omit to pick them interactively";
|
|
293
314
|
} else {
|
|
294
315
|
argName = arg.type.toLowerCase();
|
|
295
316
|
argDesc = `${arg.type} name in this workspace`;
|
|
@@ -383,6 +404,17 @@ var prompts = async () => await import("@inquirer/prompts");
|
|
|
383
404
|
var select = (config, context) => prompts().then((m) => m.select(config, context));
|
|
384
405
|
var confirm = (config, context) => prompts().then((m) => m.confirm(config, context));
|
|
385
406
|
var input = (config, context) => prompts().then((m) => m.input(config, context));
|
|
407
|
+
var checkbox = (config, context) => prompts().then((m) => m.checkbox(config, context));
|
|
408
|
+
var assertEnumChoice = (argMeta, value) => {
|
|
409
|
+
const enumChoices = argMeta.argsOption.enum;
|
|
410
|
+
if (!enumChoices || typeof enumChoices === "function")
|
|
411
|
+
return;
|
|
412
|
+
const choices = normalizeEnumChoices(enumChoices);
|
|
413
|
+
if (choices.some((choice) => String(choice.value) === String(value)))
|
|
414
|
+
return;
|
|
415
|
+
const label = argMeta.type === "Option" ? `option '--${camelToKebabCase3(argMeta.name)}'` : `argument '${argMeta.name}'`;
|
|
416
|
+
throw new Error(`${label} argument '${String(value)}' is invalid. Allowed choices are ${choices.map((choice) => choice.name).join(", ")}.`);
|
|
417
|
+
};
|
|
386
418
|
var resolveEnumChoices = async (argMeta, context) => {
|
|
387
419
|
const enumChoices = argMeta.argsOption.enum;
|
|
388
420
|
if (!enumChoices)
|
|
@@ -396,9 +428,10 @@ var getOptionValue = async (argMeta, opt, context) => {
|
|
|
396
428
|
name,
|
|
397
429
|
argsOption: { enum: enumChoices, default: defaultValue, type, desc, nullable, example, ask }
|
|
398
430
|
} = argMeta;
|
|
399
|
-
if (opt[argMeta.name] !== undefined)
|
|
431
|
+
if (opt[argMeta.name] !== undefined) {
|
|
432
|
+
assertEnumChoice(argMeta, opt[argMeta.name]);
|
|
400
433
|
return convertArgValue(opt[argMeta.name], type ?? "string");
|
|
401
|
-
else if (defaultValue !== undefined)
|
|
434
|
+
} else if (defaultValue !== undefined)
|
|
402
435
|
return defaultValue;
|
|
403
436
|
if (enumChoices) {
|
|
404
437
|
const choices = normalizeEnumChoices(await resolveEnumChoices(argMeta, context) ?? []);
|
|
@@ -424,9 +457,10 @@ var getArgumentValue = async (argMeta, value) => {
|
|
|
424
457
|
name,
|
|
425
458
|
argsOption: { default: defaultValue, type, desc, nullable, example, ask }
|
|
426
459
|
} = argMeta;
|
|
427
|
-
if (value !== undefined)
|
|
460
|
+
if (value !== undefined) {
|
|
461
|
+
assertEnumChoice(argMeta, value);
|
|
428
462
|
return convertArgValue(value, type ?? "string");
|
|
429
|
-
else if (defaultValue !== undefined)
|
|
463
|
+
} else if (defaultValue !== undefined)
|
|
430
464
|
return defaultValue;
|
|
431
465
|
else if (nullable)
|
|
432
466
|
return null;
|
|
@@ -465,6 +499,31 @@ var assertCurrentDirectoryIsWorkspaceRoot = async () => {
|
|
|
465
499
|
].join(`
|
|
466
500
|
`));
|
|
467
501
|
};
|
|
502
|
+
var parseAppNameList = (value) => (Array.isArray(value) ? value : value === undefined ? [] : [value]).flatMap((entry) => entry.split(",")).map((entry) => entry.trim()).filter(Boolean);
|
|
503
|
+
var getAppsArgumentValue = async (value, workspace) => {
|
|
504
|
+
const appNames = await workspace.getApps();
|
|
505
|
+
if (appNames.length === 0)
|
|
506
|
+
throw new Error("No apps found in this workspace (apps/<appName>/akan.config.ts)");
|
|
507
|
+
const requested = parseAppNameList(value);
|
|
508
|
+
if (requested.includes("all"))
|
|
509
|
+
return appNames.map((name) => AppExecutor.from(workspace, name));
|
|
510
|
+
if (requested.length) {
|
|
511
|
+
const unknown = requested.filter((name) => !appNames.includes(name));
|
|
512
|
+
if (unknown.length)
|
|
513
|
+
throw new Error(`Unknown app${unknown.length > 1 ? "s" : ""}: ${unknown.join(", ")}. Available: ${appNames.join(", ")}, all`);
|
|
514
|
+
return [...new Set(requested)].map((name) => AppExecutor.from(workspace, name));
|
|
515
|
+
}
|
|
516
|
+
if (appNames.length === 1 && appNames[0])
|
|
517
|
+
return [AppExecutor.from(workspace, appNames[0])];
|
|
518
|
+
const remembered = new Set(await AppSelectionMemory.read(workspace.workspaceRoot));
|
|
519
|
+
const picked = await checkbox({
|
|
520
|
+
message: "Select the apps to run (space to toggle, enter to confirm)",
|
|
521
|
+
choices: appNames.map((name) => ({ name, value: name, checked: remembered.has(name) })),
|
|
522
|
+
required: true
|
|
523
|
+
});
|
|
524
|
+
await AppSelectionMemory.write(workspace.workspaceRoot, picked);
|
|
525
|
+
return picked.map((name) => AppExecutor.from(workspace, name));
|
|
526
|
+
};
|
|
468
527
|
var getInternalArgumentValue = async (argMeta, value, workspace) => {
|
|
469
528
|
if (argMeta.type === "Workspace")
|
|
470
529
|
return workspace;
|
|
@@ -528,36 +587,36 @@ var getInternalArgumentValue = async (argMeta, value, workspace) => {
|
|
|
528
587
|
return PkgExecutor.from(workspace, pkgName);
|
|
529
588
|
} else if (sysType === "module") {
|
|
530
589
|
if (value) {
|
|
531
|
-
const [sysName,
|
|
532
|
-
if (!sysName || !
|
|
590
|
+
const [sysName, moduleName] = value.split(":");
|
|
591
|
+
if (!sysName || !moduleName)
|
|
533
592
|
throw new Error(`Invalid module name: ${value}`);
|
|
534
593
|
if (appNames.includes(sysName)) {
|
|
535
594
|
const app = AppExecutor.from(workspace, sysName);
|
|
536
|
-
const
|
|
537
|
-
if (
|
|
538
|
-
return ModuleExecutor.from(app,
|
|
595
|
+
const modules = await app.getModules();
|
|
596
|
+
if (modules.includes(moduleName))
|
|
597
|
+
return ModuleExecutor.from(app, moduleName);
|
|
539
598
|
else
|
|
540
|
-
throw new Error(`Invalid module name: ${
|
|
599
|
+
throw new Error(`Invalid module name: ${moduleName}`);
|
|
541
600
|
} else if (libNames.includes(sysName)) {
|
|
542
601
|
const lib = LibExecutor.from(workspace, sysName);
|
|
543
|
-
const
|
|
544
|
-
if (
|
|
545
|
-
return ModuleExecutor.from(lib,
|
|
602
|
+
const modules = await lib.getModules();
|
|
603
|
+
if (modules.includes(moduleName))
|
|
604
|
+
return ModuleExecutor.from(lib, moduleName);
|
|
546
605
|
} else
|
|
547
606
|
throw new Error(`Invalid system name: ${sysName}`);
|
|
548
607
|
}
|
|
549
608
|
const { type, name } = await select({
|
|
550
609
|
message: `select the App or Lib name`,
|
|
551
610
|
choices: [
|
|
552
|
-
...appNames.map((
|
|
553
|
-
...libNames.map((
|
|
611
|
+
...appNames.map((name) => ({ name, value: { type: "app", name } })),
|
|
612
|
+
...libNames.map((name) => ({ name, value: { type: "lib", name } }))
|
|
554
613
|
]
|
|
555
614
|
});
|
|
556
615
|
const executor = type === "app" ? AppExecutor.from(workspace, name) : LibExecutor.from(workspace, name);
|
|
557
616
|
const modules = await executor.getModules();
|
|
558
617
|
const moduleName = await select({
|
|
559
618
|
message: `Select the module name`,
|
|
560
|
-
choices: modules.map((
|
|
619
|
+
choices: modules.map((name) => ({ name: `${executor.name}:${name}`, value: name }))
|
|
561
620
|
});
|
|
562
621
|
return ModuleExecutor.from(executor, moduleName);
|
|
563
622
|
} else
|
|
@@ -568,8 +627,8 @@ var runCommands = async (...commands) => {
|
|
|
568
627
|
printCliError(error);
|
|
569
628
|
process.exit(1);
|
|
570
629
|
});
|
|
571
|
-
const __dirname2 =
|
|
572
|
-
const packageJsonCandidates = [`${
|
|
630
|
+
const __dirname2 = getDirname2(import.meta.url);
|
|
631
|
+
const packageJsonCandidates = [`${path2.dirname(Bun.main)}/package.json`, `${__dirname2}/../package.json`];
|
|
573
632
|
let cliPackageJson = null;
|
|
574
633
|
for (const packageJsonPath of packageJsonCandidates) {
|
|
575
634
|
if (!await FileSys.fileExists(packageJsonPath))
|
|
@@ -616,6 +675,8 @@ It may cause unexpected behavior. Run \`akan update\` to update latest akanjs.`)
|
|
|
616
675
|
continue;
|
|
617
676
|
else if (argMeta.type === "Module") {
|
|
618
677
|
programCommand = programCommand.argument(`[sys-name:module-name]`, `${argMeta.type} in this workspace (apps|libs)/<sys-name>/lib/<module-name>`);
|
|
678
|
+
} else if (argMeta.type === "Apps") {
|
|
679
|
+
programCommand = programCommand.argument(`[apps...]`, `apps in this workspace apps/<appName>, or all (space- or comma-separated; omit to pick interactively)`);
|
|
619
680
|
} else {
|
|
620
681
|
const sysType = argMeta.type.toLowerCase();
|
|
621
682
|
programCommand = programCommand.argument(`[${sysType}]`, `${sysType} in this workspace ${sysType}s/<${sysType}Name>`);
|
|
@@ -640,10 +701,17 @@ It may cause unexpected behavior. Run \`akan update\` to update latest akanjs.`)
|
|
|
640
701
|
commandArgs[argMeta.idx] = await getOptionValue(argMeta, opt, commandContext);
|
|
641
702
|
else if (argMeta.type === "Argument")
|
|
642
703
|
commandArgs[argMeta.idx] = await getArgumentValue(argMeta, cmdArgs[argMeta.idx]);
|
|
704
|
+
else if (argMeta.type === "Apps")
|
|
705
|
+
commandArgs[argMeta.idx] = await getAppsArgumentValue(cmdArgs[argMeta.idx], workspace);
|
|
643
706
|
else
|
|
644
707
|
commandArgs[argMeta.idx] = await getInternalArgumentValue(argMeta, cmdArgs[argMeta.idx], workspace);
|
|
645
708
|
if (commandArgs[argMeta.idx] instanceof AppExecutor)
|
|
646
709
|
process.env.AKAN_PUBLIC_APP_NAME = commandArgs[argMeta.idx].name;
|
|
710
|
+
else if (Array.isArray(commandArgs[argMeta.idx])) {
|
|
711
|
+
const apps = commandArgs[argMeta.idx];
|
|
712
|
+
if (apps.length === 1 && apps[0])
|
|
713
|
+
process.env.AKAN_PUBLIC_APP_NAME = apps[0].name;
|
|
714
|
+
}
|
|
647
715
|
assignCommandContext(commandContext, argMeta, commandArgs[argMeta.idx]);
|
|
648
716
|
if (opt.verbose)
|
|
649
717
|
Executor.setVerbose(true);
|
|
@@ -763,4 +831,4 @@ function command(refName, depsOrBuilder, builder) {
|
|
|
763
831
|
}
|
|
764
832
|
return CommandBase;
|
|
765
833
|
}
|
|
766
|
-
export { getTargetMetas, getTargetCommandNames, App, Lib, Sys, Exec, Pkg, Module, Workspace, CommandContainer, runner, script, runCommands, command };
|
|
834
|
+
export { getTargetMetas, getTargetCommandNames, App, Apps, Lib, Sys, Exec, Pkg, Module, Workspace, CommandContainer, runner, script, runCommands, command };
|