@akanjs/cli 3.0.0-beta.17 → 3.0.0-beta.19
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/{CodeAgent-gjqnc2mg.js → CodeAgent-6cm97kay.js} +2 -2
- package/{CodeAgentRpcHost-qvwfv0n9.js → CodeAgentRpcHost-p7h6n2hp.js} +1 -1
- package/CodeAgentRpcListener-7p7z5dd7.js +97 -0
- package/{CodeTui-nd9hqvrw.js → CodeTui-za4jsm41.js} +205 -34
- package/{TunnelShare-r5tc2qk5.js → TunnelShare-2j6s511d.js} +2 -2
- package/{agent.command-n664dtcv.js → agent.command-e0wpbbyg.js} +6 -6
- package/akanCode.js +7 -5
- package/{application.command-t5542jte.js → application.command-8wyxqc8q.js} +28 -15
- package/{applicationBuildRunner-x4gbfn7y.js → applicationBuildRunner-n9gzaxd0.js} +35 -10
- package/{applicationReleasePackager-z61ep017.js → applicationReleasePackager-vpggfqgq.js} +1 -1
- package/buildBatch.proc.js +3 -3
- package/{capacitorApp-shv3ajh5.js → capacitorApp-q3z0qht0.js} +2 -2
- package/{cloud.command-dk5tj39k.js → cloud.command-4zwa5dsx.js} +34 -12
- package/cloud.script-fwx3vb34.js +20 -0
- package/{code.command-88sebgnn.js → code.command-468c9d7s.js} +41 -19
- package/commandManifest.json +1 -1
- package/{context.command-pqsm5jrk.js → context.command-dsnw0jby.js} +14 -14
- package/context.runner-rs4rj15d.js +22 -0
- package/{dependencyScanner-shs82ynp.js → dependencyScanner-0z2h2tks.js} +1 -1
- package/{devTui-gy6mendg.js → devTui-ffjsarqa.js} +3 -3
- package/{devTuiView-y1548wy6.js → devTuiView-1q1mdgrv.js} +1 -1
- package/{guideline.command-rpc2emw8.js → guideline.command-vhw13pqr.js} +8 -13
- package/guidelines/agentRule/agentRule.instruction.md +27 -10
- package/guidelines/conventions/conventions.instruction.md +53 -26
- package/guidelines/queryRule/queryRule.instruction.md +17 -7
- package/guidelines/runtimeRule/runtimeRule.instruction.md +74 -0
- package/guidelines/ssrRule/ssrRule.instruction.md +4 -2
- package/guidelines/transportRule/transportRule.instruction.md +10 -8
- package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +4 -3
- package/incrementalBuilder.proc.js +3 -2
- package/{index-4n4821gp.js → index-10dkrrww.js} +4 -4
- package/{index-bzakk0c2.js → index-14zrtgfa.js} +5 -3
- package/{index-v17gj504.js → index-18zybgkc.js} +2 -2
- package/{index-qh7brn20.js → index-22xtgmhn.js} +6 -2
- package/{index-qhtj9y6j.js → index-2446k7b4.js} +74 -21
- package/{index-g9zghs4h.js → index-3jrp517k.js} +12 -12
- package/{index-vpx68e4x.js → index-4m929vvn.js} +2 -2
- package/{index-4cvpzkq6.js → index-53176s7j.js} +3 -3
- package/{index-jwrpsrg3.js → index-667w0yah.js} +1 -1
- package/{index-3mg4h788.js → index-7ep8qtvp.js} +2 -2
- package/{index-w8kmx1b6.js → index-89hy31kf.js} +30 -7
- package/index-9d6nvkz2.js +656 -0
- package/index-9dp031by.js +12 -0
- package/{index-zn8qgeqx.js → index-a1w6934z.js} +3 -3
- package/{index-p0tew3fq.js → index-ab0c38ea.js} +10 -5
- package/index-bc88j1ry.js +1166 -0
- package/{index-ns128c4q.js → index-bftkz6cp.js} +280 -73
- package/{index-kcxmv48c.js → index-bhtmj233.js} +4 -1
- package/{index-kvzjda3v.js → index-bwf965h6.js} +5 -5
- package/{index-p4p9t45x.js → index-crmeqnmf.js} +56 -44
- package/{index-8k16atqy.js → index-d2242ksy.js} +23 -6
- package/{index-2sq06vv0.js → index-e4v6vhxq.js} +417 -105
- package/{index-xjc7gg65.js → index-esk82rvk.js} +23 -33
- package/{index-sn7dnzq4.js → index-kwaq3n9n.js} +1 -1
- package/{index-gm76f0qb.js → index-n3cv0tm4.js} +1 -1
- package/{index-6na0sd2b.js → index-qdgzsnhg.js} +5 -2
- package/{index-twq9p2sp.js → index-s5rhm04y.js} +0 -6
- package/{index-n8kt2wh6.js → index-sq2dzkzm.js} +35 -10
- package/{index-myj01w9r.js → index-srmay5jw.js} +15 -2
- package/{index-2pm1j01n.js → index-txr7dj2g.js} +4 -4
- package/{index-3cymrzsb.js → index-vqx8bdxz.js} +17 -3
- package/{index-te0y1c0m.js → index-zqgj2rt2.js} +12 -7
- package/index.js +21 -21
- package/{library.command-m8p2r1dh.js → library.command-cqr175dy.js} +3 -3
- package/{localRegistry.command-yppdqrxv.js → localRegistry.command-49z55qqz.js} +9 -9
- package/{module.command-mfzvqt0n.js → module.command-9p8mm3b0.js} +5 -5
- package/{package.command-cgp2p2v5.js → package.command-wxyz909t.js} +5 -5
- package/package.json +2 -2
- package/{page.command-taenb02b.js → page.command-gsrsfqqs.js} +3 -3
- package/{primitive.command-7kpncmkk.js → primitive.command-ns1mptje.js} +6 -6
- package/{prompter-9mn3kp36.js → prompter-1f8d9pcc.js} +1 -1
- package/{quality.command-1ar94hrw.js → quality.command-e76k2q9k.js} +18 -17
- package/{repair.command-n08t6j8p.js → repair.command-pkrsm3cw.js} +5 -5
- package/{routeSourceValidator-apyqw7wk.js → routeSourceValidator-7ycnfz0e.js} +0 -6
- package/{scalar.command-mq8qfp4t.js → scalar.command-0cpt3fc8.js} +4 -4
- package/skills/akan-code/SKILL.md +122 -0
- package/skills/akan-module/SKILL.md +2 -2
- package/skills/akan-store/SKILL.md +6 -2
- package/{subspace.command-jqv5n79w.js → subspace.command-fktpwp0g.js} +20 -10
- package/templates/__scalar/__model__/__model__.abstract.md.template +8 -0
- package/templates/appSample/lib/__scalar/workHistory/workHistory.abstract.ts +8 -39
- package/templates/appSample/lib/_noti/noti.abstract.ts +6 -29
- package/templates/appSample/lib/task/task.abstract.ts +12 -32
- package/templates/appSample/lib/task/task.signal.spec.ts +15 -18
- package/templates/appSample/lib/task/task.signal.test.ts +15 -1
- package/templates/appSample/lib/task/task.signal.ts +1 -1
- package/templates/appSample/srvkit/AuthGuard.ts +4 -1
- package/templates/appSample/srvkit/SessionInternalArg.ts +3 -1
- package/templates/crudPages/[__model__Id]/edit/page.tsx +2 -1
- package/templates/crudPages/[__model__Id]/page.tsx +2 -1
- package/templates/crudPages/new/page.tsx +2 -1
- package/templates/crudPages/page.tsx +2 -1
- package/templates/crudSinglePage/page.tsx +2 -1
- package/templates/localDev/docker-compose.yaml.template +3 -14
- package/templates/module/__model__.signal.ts +12 -4
- package/templates/pkgRoot/tsconfig.json.template +2 -7
- package/templates/service/__model__.abstract.md.template +8 -0
- package/{tunnel.command-ht2es78c.js → tunnel.command-d5jy9gk8.js} +4 -4
- package/{workflow.command-tvz4nm9n.js → workflow.command-6tkcysmx.js} +9 -9
- package/{workspace.command-txv1yv5e.js → workspace.command-gv84eh1p.js} +25 -24
- package/cloud.script-ch3xrw3s.js +0 -20
- package/context.runner-bys6ykcp.js +0 -22
- package/guidelines/agentRule/agentRule.generate.json +0 -31
- package/guidelines/componentRule/componentRule.generate.json +0 -31
- package/guidelines/conventions/conventions.generate.json +0 -25
- package/guidelines/cssRule/cssRule.generate.json +0 -31
- package/guidelines/docPageRule/docPageRule.generate.json +0 -31
- package/guidelines/docPageRule/docPageRule.instruction.md +0 -25
- package/guidelines/docSyncRule/docSyncRule.generate.json +0 -31
- package/guidelines/docSyncRule/docSyncRule.instruction.md +0 -25
- package/guidelines/enumConstant/enumConstant.generate.json +0 -31
- package/guidelines/enumConstant/enumConstant.instruction.md +0 -28
- package/guidelines/fieldRule/fieldRule.generate.json +0 -31
- package/guidelines/framework/framework.generate.json +0 -32
- package/guidelines/mcpRule/mcpRule.generate.json +0 -35
- package/guidelines/modelConstant/modelConstant.generate.json +0 -32
- package/guidelines/modelDictionary/modelDictionary.generate.json +0 -32
- package/guidelines/modelDocument/modelDocument.generate.json +0 -31
- package/guidelines/modelService/modelService.generate.json +0 -31
- package/guidelines/modelSignal/modelSignal.generate.json +0 -31
- package/guidelines/modelStore/modelStore.generate.json +0 -31
- package/guidelines/modelTemplate/modelTemplate.generate.json +0 -31
- package/guidelines/modelUnit/modelUnit.generate.json +0 -31
- package/guidelines/modelUtil/modelUtil.generate.json +0 -31
- package/guidelines/modelView/modelView.generate.json +0 -31
- package/guidelines/modelZone/modelZone.generate.json +0 -31
- package/guidelines/moduleCodegen/moduleCodegen.generate.json +0 -31
- package/guidelines/moduleCodegen/moduleCodegen.instruction.md +0 -28
- package/guidelines/moduleOverview/moduleOverview.generate.json +0 -31
- package/guidelines/queryRule/queryRule.generate.json +0 -31
- package/guidelines/recipeRule/recipeRule.generate.json +0 -31
- package/guidelines/runtimeRule/runtimeRule.generate.json +0 -25
- package/guidelines/scalarConstant/scalarConstant.generate.json +0 -32
- package/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -32
- package/guidelines/scalarModule/scalarModule.generate.json +0 -31
- package/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -31
- package/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -25
- package/guidelines/ssrRule/ssrRule.generate.json +0 -31
- package/guidelines/transportRule/transportRule.generate.json +0 -31
- package/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -31
- package/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -25
- package/guidelines/workspaceOnboarding/workspaceOnboarding.generate.json +0 -24
- package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +0 -34
- package/index-57p9p179.js +0 -461
- package/index-qt8dqgnf.js +0 -250
- package/templates/__scalar/__model__/__model__.abstract.md +0 -28
- package/templates/module/__model__.abstract.md +0 -28
- package/templates/service/__model__.abstract.md +0 -28
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
runner,
|
|
4
4
|
script
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-qdgzsnhg.js";
|
|
6
6
|
import {
|
|
7
7
|
ModuleExecutor
|
|
8
|
-
} from "./index-
|
|
8
|
+
} from "./index-crmeqnmf.js";
|
|
9
9
|
import {
|
|
10
10
|
sourceFile,
|
|
11
11
|
moduleSourcePaths,
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
createPassedPrimitiveReport,
|
|
14
14
|
bilingualLabelForField,
|
|
15
15
|
bilingualDescriptionForField
|
|
16
|
-
} from "./index-
|
|
16
|
+
} from "./index-2446k7b4.js";
|
|
17
17
|
import {
|
|
18
18
|
PageScript
|
|
19
|
-
} from "./index-
|
|
19
|
+
} from "./index-22xtgmhn.js";
|
|
20
20
|
import {
|
|
21
21
|
pluralizeName
|
|
22
22
|
} from "./index-nz8prx9g.js";
|
|
@@ -31,37 +31,17 @@ var purposeByModule = {
|
|
|
31
31
|
project: "Project represents a project workspace or business initiative managed by the app.",
|
|
32
32
|
task: "Task represents work items that move through the app workflow."
|
|
33
33
|
};
|
|
34
|
-
var moduleAbstractContent = (moduleName) => {
|
|
34
|
+
var moduleAbstractContent = (moduleName, sharedGuards) => {
|
|
35
35
|
const title = capitalize(moduleName);
|
|
36
|
-
const
|
|
37
|
-
const purpose = purposeByModule[moduleName] ?? `${title} represents ${
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Purpose
|
|
41
|
-
|
|
36
|
+
const noun = bilingualLabelForField(moduleName).en.toLowerCase();
|
|
37
|
+
const purpose = purposeByModule[moduleName] ?? `${title} represents ${noun} records managed by the app.`;
|
|
38
|
+
const writeRule = sharedGuards ? `Anyone may read a ${noun}; only an admin creates, updates or removes one.` : `Anyone may read a ${noun}; nobody creates, updates or removes one until the slice names a guard.`;
|
|
39
|
+
return `# ${moduleName} Abstract
|
|
42
40
|
${purpose}
|
|
43
41
|
|
|
44
|
-
##
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
## Data Meaning
|
|
49
|
-
|
|
50
|
-
${label.en} (${label.ko}) is the primary business concept for this module.
|
|
51
|
-
|
|
52
|
-
## Workflows
|
|
53
|
-
|
|
54
|
-
No lifecycle workflow yet.
|
|
55
|
-
|
|
56
|
-
## Agent Notes
|
|
57
|
-
|
|
58
|
-
- Read this abstract before changing the module.
|
|
59
|
-
- Update this file when business invariants, workflows, or public behavior change.
|
|
60
|
-
- Do not update this file for formatting-only, import-only, or style-only changes.
|
|
61
|
-
|
|
62
|
-
## Related Modules
|
|
63
|
-
|
|
64
|
-
- None yet.
|
|
42
|
+
## Rules
|
|
43
|
+
- ${writeRule}
|
|
44
|
+
- Removal is soft: a removed ${noun} keeps its row with \`removedAt\` set.
|
|
65
45
|
`;
|
|
66
46
|
};
|
|
67
47
|
var localModuleFilename = (moduleName, pathKey) => moduleSourcePaths(moduleName)[pathKey].replace(`lib/${moduleName}/`, "");
|
|
@@ -92,6 +72,14 @@ class ModuleRunner extends runner("module") {
|
|
|
92
72
|
async removeModule(module) {
|
|
93
73
|
await module.sys.removeDir(`lib/${module.name}`);
|
|
94
74
|
}
|
|
75
|
+
async#hasSharedGuards(module) {
|
|
76
|
+
const { sys } = module;
|
|
77
|
+
if (sys.type === "lib" && sys.name === "shared")
|
|
78
|
+
return true;
|
|
79
|
+
if (!await sys.exists("lib/srv.ts"))
|
|
80
|
+
return false;
|
|
81
|
+
return (await sys.readFile("lib/srv.ts")).includes('"@libs/shared/lib/srv"');
|
|
82
|
+
}
|
|
95
83
|
async createComponentTemplate(module, type) {
|
|
96
84
|
await module.sys.applyTemplate({
|
|
97
85
|
basePath: `./lib/${module.name}`,
|
|
@@ -122,9 +110,11 @@ class ModuleRunner extends runner("module") {
|
|
|
122
110
|
zone: localModuleFilename(module.name, "zone"),
|
|
123
111
|
util: localModuleFilename(module.name, "util")
|
|
124
112
|
};
|
|
113
|
+
const sharedGuards = await this.#hasSharedGuards(module);
|
|
125
114
|
await module.applyTemplate({
|
|
126
115
|
basePath: `.`,
|
|
127
116
|
template: "module",
|
|
117
|
+
options: { sharedGuards },
|
|
128
118
|
dict: {
|
|
129
119
|
model: module.name,
|
|
130
120
|
models: names,
|
|
@@ -136,7 +126,7 @@ class ModuleRunner extends runner("module") {
|
|
|
136
126
|
modelDescKo: modelDescription.ko
|
|
137
127
|
}
|
|
138
128
|
});
|
|
139
|
-
await module.writeFile(filenames.abstract, moduleAbstractContent(module.name));
|
|
129
|
+
await module.writeFile(filenames.abstract, moduleAbstractContent(module.name, sharedGuards));
|
|
140
130
|
const [
|
|
141
131
|
abstractContent,
|
|
142
132
|
constantContent,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
LibExecutor,
|
|
10
10
|
PkgExecutor,
|
|
11
11
|
ModuleExecutor
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-crmeqnmf.js";
|
|
13
13
|
import {
|
|
14
14
|
getDirname2
|
|
15
15
|
} from "./index-6wwzs1bc.js";
|
|
@@ -327,7 +327,8 @@ var formatCommandHelp = (command, key) => {
|
|
|
327
327
|
const opt = arg.argsOption;
|
|
328
328
|
const flag = opt.flag ? `-${opt.flag}, ` : "";
|
|
329
329
|
const kebabName = camelToKebabCase2(arg.name);
|
|
330
|
-
const
|
|
330
|
+
const negation = opt.type === "boolean" && opt.default === true ? `, --no-${kebabName}` : "";
|
|
331
|
+
const optName = `${flag}--${kebabName}${negation}`;
|
|
331
332
|
const optDesc = opt.desc ?? "";
|
|
332
333
|
const defaultVal = opt.default !== undefined ? chalk.gray(` [default: ${String(opt.default)}]`) : "";
|
|
333
334
|
const choices = opt.enum ? chalk.gray(typeof opt.enum === "function" ? " ([dynamic choices])" : ` (${opt.enum.map(formatChoice).join(", ")})`) : "";
|
|
@@ -384,6 +385,8 @@ var handleOption = (programCommand, argMeta) => {
|
|
|
384
385
|
const kebabName = camelToKebabCase3(argMeta.name);
|
|
385
386
|
const choices = enumChoices && typeof enumChoices !== "function" ? normalizeEnumChoices(enumChoices) : null;
|
|
386
387
|
programCommand.option(`-${flag}, --${kebabName}${type === "boolean" ? " [boolean]" : ` <${kebabName}>`}`, `${desc}${ask ? ` (${ask})` : ""}${example ? ` (example: ${example})` : ""}${choices ? ` (choices: ${choices.map((choice) => choice.name).join(", ")})` : ""}`);
|
|
388
|
+
if (type === "boolean" && argMeta.argsOption.default === true)
|
|
389
|
+
programCommand.option(`--no-${kebabName}`, `turn off --${kebabName}`);
|
|
387
390
|
return programCommand;
|
|
388
391
|
};
|
|
389
392
|
var handleArgument = (programCommand, argMeta) => {
|
|
@@ -29,12 +29,6 @@ class Prompter2 {
|
|
|
29
29
|
const guidelineRoot = await Prompter2.#getGuidelineRoot();
|
|
30
30
|
return (await fsPromise.readdir(guidelineRoot)).filter((name) => !name.startsWith("_")).sort();
|
|
31
31
|
}
|
|
32
|
-
static async getGuideJson(guideName) {
|
|
33
|
-
const guidelineRoot = await Prompter2.#getGuidelineRoot();
|
|
34
|
-
const filePath = `${guidelineRoot}/${guideName}/${guideName}.generate.json`;
|
|
35
|
-
const guideJson = await fsPromise.readFile(filePath, "utf-8");
|
|
36
|
-
return JSON.parse(guideJson);
|
|
37
|
-
}
|
|
38
32
|
static async getInstruction(guideName) {
|
|
39
33
|
const guideNames = await Prompter2.listGuidelines();
|
|
40
34
|
if (!guideNames.includes(guideName))
|
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
import {
|
|
3
3
|
GlobalConfig,
|
|
4
4
|
CloudApi
|
|
5
|
-
} from "./index-
|
|
5
|
+
} from "./index-srmay5jw.js";
|
|
6
6
|
import {
|
|
7
7
|
script
|
|
8
|
-
} from "./index-
|
|
8
|
+
} from "./index-qdgzsnhg.js";
|
|
9
9
|
import {
|
|
10
10
|
PkgExecutor
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-crmeqnmf.js";
|
|
12
12
|
import {
|
|
13
13
|
ApplicationScript
|
|
14
|
-
} from "./index-
|
|
14
|
+
} from "./index-bftkz6cp.js";
|
|
15
15
|
import {
|
|
16
16
|
PackageScript
|
|
17
|
-
} from "./index-
|
|
17
|
+
} from "./index-ab0c38ea.js";
|
|
18
18
|
import {
|
|
19
19
|
CloudRunner
|
|
20
|
-
} from "./index-
|
|
20
|
+
} from "./index-bc88j1ry.js";
|
|
21
21
|
|
|
22
22
|
// pkgs/@akanjs/cli/cloud/cloud.script.ts
|
|
23
23
|
import { Logger } from "akanjs/common";
|
|
@@ -55,18 +55,43 @@ class CloudScript2 extends script("cloud", [CloudRunner, ApplicationScript, Pack
|
|
|
55
55
|
await this.cloudRunner.uploadEnvByScp(workspace, path);
|
|
56
56
|
return { workspaceId: null, files };
|
|
57
57
|
}
|
|
58
|
-
async deployAkan(workspace, {
|
|
58
|
+
async deployAkan(workspace, {
|
|
59
|
+
test = true,
|
|
60
|
+
registryUrl,
|
|
61
|
+
platforms = []
|
|
62
|
+
} = {}) {
|
|
59
63
|
const akanPkgs = await this.cloudRunner.getAkanPkgs(workspace);
|
|
60
64
|
await this.packageScript.updateWorskpaceRootPackageJson(workspace);
|
|
61
65
|
const pkgs = akanPkgs.map((pkgName) => PkgExecutor.from(workspace, pkgName));
|
|
62
|
-
if (test)
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
if (test) {
|
|
67
|
+
const platformRun = platforms.length ? await this.cloudRunner.startPlatformTests(workspace, platforms, akanPkgs) : null;
|
|
68
|
+
let localFailure = null;
|
|
69
|
+
try {
|
|
70
|
+
for (const pkg of pkgs)
|
|
71
|
+
await this.applicationScript.test(pkg);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
localFailure = error;
|
|
74
|
+
}
|
|
75
|
+
if (platformRun)
|
|
76
|
+
await this.cloudRunner.settlePlatformTests(platformRun, {
|
|
77
|
+
interactive: !localFailure,
|
|
78
|
+
recordStreaks: !localFailure,
|
|
79
|
+
checkDrift: true
|
|
80
|
+
});
|
|
81
|
+
if (localFailure)
|
|
82
|
+
throw localFailure;
|
|
83
|
+
}
|
|
65
84
|
for (const pkg of pkgs)
|
|
66
85
|
await this.packageScript.buildPackage(pkg);
|
|
67
86
|
await this.packageScript.verifyAkanPublishPackages(workspace);
|
|
68
87
|
await this.cloudRunner.deployAkan(workspace, akanPkgs, { registryUrl });
|
|
69
88
|
}
|
|
89
|
+
async testPlatforms(workspace, { platforms, pkgs }) {
|
|
90
|
+
if (!platforms.length)
|
|
91
|
+
throw new Error("No platform to test on \u2014 pass --platforms linux,windows");
|
|
92
|
+
const run = await this.cloudRunner.startPlatformTests(workspace, platforms, pkgs ?? await this.cloudRunner.getAkanPkgs(workspace));
|
|
93
|
+
await this.cloudRunner.settlePlatformTests(run, { interactive: false, recordStreaks: false, checkDrift: false });
|
|
94
|
+
}
|
|
70
95
|
async update(workspace, tag = "latest", { registryUrl } = {}) {
|
|
71
96
|
const spinner = workspace.spinning("Updating Akan.js packages and CLI...");
|
|
72
97
|
await this.cloudRunner.update(workspace, tag, { registryUrl });
|
|
@@ -13,7 +13,8 @@ var configPath = `${basePath}/config.json`;
|
|
|
13
13
|
var getDefaultHostConfig = (host = GlobalConfig.akanCloudHost) => ({ host });
|
|
14
14
|
var defaultAkanGlobalConfig = {
|
|
15
15
|
cloudHost: {},
|
|
16
|
-
remoteEnvServers: {}
|
|
16
|
+
remoteEnvServers: {},
|
|
17
|
+
testTargets: {}
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
// pkgs/@akanjs/devkit/cloud/globalConfig.ts
|
|
@@ -26,7 +27,8 @@ class GlobalConfig {
|
|
|
26
27
|
...defaultAkanGlobalConfig,
|
|
27
28
|
...akanConfig,
|
|
28
29
|
cloudHost: akanConfig.cloudHost ?? defaultAkanGlobalConfig.cloudHost,
|
|
29
|
-
remoteEnvServers: akanConfig.remoteEnvServers ?? defaultAkanGlobalConfig.remoteEnvServers
|
|
30
|
+
remoteEnvServers: akanConfig.remoteEnvServers ?? defaultAkanGlobalConfig.remoteEnvServers,
|
|
31
|
+
testTargets: akanConfig.testTargets ?? defaultAkanGlobalConfig.testTargets
|
|
30
32
|
};
|
|
31
33
|
}
|
|
32
34
|
static async#setAkanGlobalConfig(akanConfig) {
|
|
@@ -65,6 +67,17 @@ class GlobalConfig {
|
|
|
65
67
|
remoteEnvServers
|
|
66
68
|
});
|
|
67
69
|
}
|
|
70
|
+
static async getTestTargets() {
|
|
71
|
+
const akanConfig = await GlobalConfig.#getAkanGlobalConfig();
|
|
72
|
+
return akanConfig.testTargets;
|
|
73
|
+
}
|
|
74
|
+
static async setTestTargets(testTargets) {
|
|
75
|
+
const akanConfig = await GlobalConfig.#getAkanGlobalConfig();
|
|
76
|
+
await GlobalConfig.#setAkanGlobalConfig({
|
|
77
|
+
...akanConfig,
|
|
78
|
+
testTargets: { ...akanConfig.testTargets, ...testTargets }
|
|
79
|
+
});
|
|
80
|
+
}
|
|
68
81
|
static needRefreshToken(accessToken) {
|
|
69
82
|
return !!accessToken?.expiresAt?.isBefore(dayjs().add(1, "hour"));
|
|
70
83
|
}
|
|
@@ -20,13 +20,13 @@ import {
|
|
|
20
20
|
renderWorkflowApply,
|
|
21
21
|
renderWorkflowValidation,
|
|
22
22
|
renderWorkflowRunArtifact
|
|
23
|
-
} from "./index-
|
|
23
|
+
} from "./index-2446k7b4.js";
|
|
24
24
|
import {
|
|
25
25
|
AkanContextAnalyzer
|
|
26
|
-
} from "./index-
|
|
26
|
+
} from "./index-18zybgkc.js";
|
|
27
27
|
import {
|
|
28
28
|
runner
|
|
29
|
-
} from "./index-
|
|
29
|
+
} from "./index-qdgzsnhg.js";
|
|
30
30
|
|
|
31
31
|
// pkgs/@akanjs/cli/workflow/workflow.runner.ts
|
|
32
32
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
@@ -146,7 +146,7 @@ var addFieldWorkflowSpec = {
|
|
|
146
146
|
values: { type: "string-list", description: "Comma-separated enum values when type is enum." },
|
|
147
147
|
default: {
|
|
148
148
|
type: "string",
|
|
149
|
-
description: "Optional default value. plan/apply coerce by field type: Int/Float to numeric literals, Boolean to true/false, Date to
|
|
149
|
+
description: "Optional default value. plan/apply coerce by field type: Int/Float to numeric literals, Boolean to true/false, Date (now, a timestamp, or a date string) to a () => dayjs(...) thunk, String/scalar to string literals, and enum only when the value is in values."
|
|
150
150
|
},
|
|
151
151
|
surfaces: {
|
|
152
152
|
type: "string-list",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
CommandExecutionError
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-crmeqnmf.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveMobilePath,
|
|
7
7
|
targetHtmlFilename
|
|
@@ -450,7 +450,7 @@ function classifyIosRunFailure(log) {
|
|
|
450
450
|
return {
|
|
451
451
|
kind: "unknown",
|
|
452
452
|
title: "iOS native run failed.",
|
|
453
|
-
detail: "Review the xcodebuild/devicectl output above. You can retry with --
|
|
453
|
+
detail: "Review the xcodebuild/devicectl output above. You can retry with --no-allow-provisioning-updates to use the conservative path."
|
|
454
454
|
};
|
|
455
455
|
}
|
|
456
456
|
function formatIosRunFailureMessage(input) {
|
|
@@ -528,6 +528,20 @@ function raiseGradleMinSdkVersion(content, floor = ANDROID_MIN_SDK_VERSION) {
|
|
|
528
528
|
return null;
|
|
529
529
|
return content.replace(/(minSdkVersion\s*=\s*)\d+/, `$1${floor}`);
|
|
530
530
|
}
|
|
531
|
+
var iosUsageDescriptionKeys = {
|
|
532
|
+
cameraUsageDescription: ["NSCameraUsageDescription"],
|
|
533
|
+
photoAddUsageDescription: ["NSPhotoLibraryAddUsageDescription"],
|
|
534
|
+
photoUsageDescription: ["NSPhotoLibraryUsageDescription"],
|
|
535
|
+
contactsUsageDescription: ["NSContactsUsageDescription"],
|
|
536
|
+
locationAlwaysUsageDescription: ["NSLocationAlwaysAndWhenInUseUsageDescription", "NSLocationAlwaysUsageDescription"],
|
|
537
|
+
locationWhenInUseUsageDescription: ["NSLocationWhenInUseUsageDescription"],
|
|
538
|
+
microphoneUsageDescription: ["NSMicrophoneUsageDescription"],
|
|
539
|
+
speechRecognitionUsageDescription: ["NSSpeechRecognitionUsageDescription"]
|
|
540
|
+
};
|
|
541
|
+
var toIosInfoPlistUsageDescriptions = (descriptions) => Object.fromEntries(Object.entries(descriptions).flatMap(([key, value]) => {
|
|
542
|
+
const plistKeys = Object.hasOwn(iosUsageDescriptionKeys, key) ? iosUsageDescriptionKeys[key] : [`NS${capitalize(key)}`];
|
|
543
|
+
return plistKeys.map((plistKey) => [plistKey, value]);
|
|
544
|
+
}));
|
|
531
545
|
var mergeAllowNavigation = (configured, localIp) => {
|
|
532
546
|
const values = Array.isArray(configured) ? configured.filter((value) => typeof value === "string") : [];
|
|
533
547
|
if (localIp)
|
|
@@ -1329,7 +1343,7 @@ ${error.message}`;
|
|
|
1329
1343
|
await editor.setContent(next).save();
|
|
1330
1344
|
}
|
|
1331
1345
|
async#setPermissionInIos(permissions) {
|
|
1332
|
-
const updateNs =
|
|
1346
|
+
const updateNs = toIosInfoPlistUsageDescriptions(permissions);
|
|
1333
1347
|
await Promise.all([
|
|
1334
1348
|
this.project.ios.updateInfoPlist(this.iosTargetName, "Debug", updateNs),
|
|
1335
1349
|
this.project.ios.updateInfoPlist(this.iosTargetName, "Release", updateNs)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
script
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-qdgzsnhg.js";
|
|
5
5
|
import {
|
|
6
6
|
AppExecutor,
|
|
7
7
|
LibExecutor,
|
|
8
8
|
ModuleExecutor
|
|
9
|
-
} from "./index-
|
|
9
|
+
} from "./index-crmeqnmf.js";
|
|
10
10
|
import {
|
|
11
11
|
compactDiagnostics,
|
|
12
12
|
createPrimitiveWriteReport,
|
|
@@ -18,6 +18,8 @@ import {
|
|
|
18
18
|
nextActionsForTarget,
|
|
19
19
|
lowerlize,
|
|
20
20
|
normalizeFieldType,
|
|
21
|
+
ensureNamedImport,
|
|
22
|
+
ensureBaseImport,
|
|
21
23
|
ensureBaseTypeImport,
|
|
22
24
|
coerceFieldDefault,
|
|
23
25
|
fieldExpression,
|
|
@@ -39,10 +41,10 @@ import {
|
|
|
39
41
|
hasSignalFactoryEntry,
|
|
40
42
|
insertSignalFactoryEntry,
|
|
41
43
|
addFieldUiPolicyForType
|
|
42
|
-
} from "./index-
|
|
44
|
+
} from "./index-2446k7b4.js";
|
|
43
45
|
import {
|
|
44
46
|
ModuleScript
|
|
45
|
-
} from "./index-
|
|
47
|
+
} from "./index-esk82rvk.js";
|
|
46
48
|
|
|
47
49
|
// pkgs/@akanjs/cli/primitive/primitive.script.ts
|
|
48
50
|
import { capitalize } from "akanjs/common";
|
|
@@ -210,6 +212,8 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
|
|
|
210
212
|
if (defaultCoercion.diagnostic)
|
|
211
213
|
diagnostics.push(defaultCoercion.diagnostic);
|
|
212
214
|
constantContent = ensureBaseTypeImport(constantContent, input.type);
|
|
215
|
+
if (input.type === "Date" && defaultCoercion.expression)
|
|
216
|
+
constantContent = ensureBaseImport(constantContent, "dayjs");
|
|
213
217
|
}
|
|
214
218
|
if (enumValues) {
|
|
215
219
|
const defaultCoercion = coerceFieldDefault("enum", input.defaultValue, { enumValues });
|
|
@@ -353,7 +357,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
|
|
|
353
357
|
signal: name ? {
|
|
354
358
|
className: `${moduleClassName}Endpoint`,
|
|
355
359
|
entryLine: [
|
|
356
|
-
`${name}: mutation(Boolean)`,
|
|
360
|
+
`${name}: mutation(Boolean, { guards: [None] })`,
|
|
357
361
|
` .exec(async function () {`,
|
|
358
362
|
` return await this.${serviceRef}Service.${name}();`,
|
|
359
363
|
` }),`
|
|
@@ -388,7 +392,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
|
|
|
388
392
|
signal: name && queryName ? {
|
|
389
393
|
className: `${moduleClassName}Slice`,
|
|
390
394
|
entryLine: [
|
|
391
|
-
`${name}: init()`,
|
|
395
|
+
`${name}: init({ guards: [None] })`,
|
|
392
396
|
` .exec(function () {`,
|
|
393
397
|
` return this.${serviceRef}Service.${queryName}();`,
|
|
394
398
|
` }),`
|
|
@@ -476,7 +480,8 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
|
|
|
476
480
|
});
|
|
477
481
|
}
|
|
478
482
|
const nextServiceContent = serviceMethodExists ? serviceContent : insertClassMethod(serviceContent, serviceClassName, spec.serviceMethod.block);
|
|
479
|
-
const
|
|
483
|
+
const insertedSignalContent = insertSignalFactoryEntry(signalContent, spec.signal.className, spec.entryName, spec.signal.entryLine, spec.signal.param);
|
|
484
|
+
const nextSignalContent = insertedSignalContent ? ensureNamedImport(insertedSignalContent, "akanjs/signal", "None") : insertedSignalContent;
|
|
480
485
|
if (!nextServiceContent) {
|
|
481
486
|
diagnostics.push({
|
|
482
487
|
severity: "error",
|
package/index.js
CHANGED
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
getTargetMetas,
|
|
5
5
|
getTargetCommandNames,
|
|
6
6
|
runCommands
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-qdgzsnhg.js";
|
|
8
8
|
import"./index-q0y2jq9j.js";
|
|
9
|
-
import"./index-
|
|
9
|
+
import"./index-crmeqnmf.js";
|
|
10
10
|
import"./index-6wwzs1bc.js";
|
|
11
11
|
|
|
12
12
|
// pkgs/@akanjs/cli/commandManifest.ts
|
|
@@ -14,25 +14,25 @@ import path from "path";
|
|
|
14
14
|
|
|
15
15
|
// pkgs/@akanjs/cli/commandModules.ts
|
|
16
16
|
var commandModules = {
|
|
17
|
-
workspace: async () => (await import("./workspace.command-
|
|
18
|
-
agent: async () => (await import("./agent.command-
|
|
19
|
-
code: async () => (await import("./code.command-
|
|
20
|
-
application: async () => (await import("./application.command-
|
|
21
|
-
library: async () => (await import("./library.command-
|
|
22
|
-
localRegistry: async () => (await import("./localRegistry.command-
|
|
23
|
-
package: async () => (await import("./package.command-
|
|
24
|
-
module: async () => (await import("./module.command-
|
|
25
|
-
page: async () => (await import("./page.command-
|
|
26
|
-
context: async () => (await import("./context.command-
|
|
27
|
-
cloud: async () => (await import("./cloud.command-
|
|
28
|
-
subspace: async () => (await import("./subspace.command-
|
|
29
|
-
guideline: async () => (await import("./guideline.command-
|
|
30
|
-
scalar: async () => (await import("./scalar.command-
|
|
31
|
-
primitive: async () => (await import("./primitive.command-
|
|
32
|
-
quality: async () => (await import("./quality.command-
|
|
33
|
-
repair: async () => (await import("./repair.command-
|
|
34
|
-
workflow: async () => (await import("./workflow.command-
|
|
35
|
-
tunnel: async () => (await import("./tunnel.command-
|
|
17
|
+
workspace: async () => (await import("./workspace.command-gv84eh1p.js")).WorkspaceCommand,
|
|
18
|
+
agent: async () => (await import("./agent.command-e0wpbbyg.js")).AgentCommand,
|
|
19
|
+
code: async () => (await import("./code.command-468c9d7s.js")).CodeCommand,
|
|
20
|
+
application: async () => (await import("./application.command-8wyxqc8q.js")).ApplicationCommand,
|
|
21
|
+
library: async () => (await import("./library.command-cqr175dy.js")).LibraryCommand,
|
|
22
|
+
localRegistry: async () => (await import("./localRegistry.command-49z55qqz.js")).LocalRegistryCommand,
|
|
23
|
+
package: async () => (await import("./package.command-wxyz909t.js")).PackageCommand,
|
|
24
|
+
module: async () => (await import("./module.command-9p8mm3b0.js")).ModuleCommand,
|
|
25
|
+
page: async () => (await import("./page.command-gsrsfqqs.js")).PageCommand,
|
|
26
|
+
context: async () => (await import("./context.command-dsnw0jby.js")).ContextCommand,
|
|
27
|
+
cloud: async () => (await import("./cloud.command-4zwa5dsx.js")).CloudCommand,
|
|
28
|
+
subspace: async () => (await import("./subspace.command-fktpwp0g.js")).SubspaceCommand,
|
|
29
|
+
guideline: async () => (await import("./guideline.command-vhw13pqr.js")).GuidelineCommand,
|
|
30
|
+
scalar: async () => (await import("./scalar.command-0cpt3fc8.js")).ScalarCommand,
|
|
31
|
+
primitive: async () => (await import("./primitive.command-ns1mptje.js")).PrimitiveCommand,
|
|
32
|
+
quality: async () => (await import("./quality.command-e76k2q9k.js")).QualityCommand,
|
|
33
|
+
repair: async () => (await import("./repair.command-pkrsm3cw.js")).RepairCommand,
|
|
34
|
+
workflow: async () => (await import("./workflow.command-6tkcysmx.js")).WorkflowCommand,
|
|
35
|
+
tunnel: async () => (await import("./tunnel.command-d5jy9gk8.js")).TunnelCommand
|
|
36
36
|
};
|
|
37
37
|
var commandModuleIds = Object.keys(commandModules);
|
|
38
38
|
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
Lib,
|
|
4
4
|
Workspace,
|
|
5
5
|
command
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-qdgzsnhg.js";
|
|
7
7
|
import"./index-q0y2jq9j.js";
|
|
8
|
-
import"./index-
|
|
8
|
+
import"./index-crmeqnmf.js";
|
|
9
9
|
import"./index-6wwzs1bc.js";
|
|
10
10
|
import {
|
|
11
11
|
LibraryScript
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-7ep8qtvp.js";
|
|
13
13
|
|
|
14
14
|
// pkgs/@akanjs/cli/library/library.command.ts
|
|
15
15
|
class LibraryCommand extends command("library", [LibraryScript], ({ public: target }) => ({
|
|
@@ -4,28 +4,28 @@ import {
|
|
|
4
4
|
runner,
|
|
5
5
|
script,
|
|
6
6
|
command
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-qdgzsnhg.js";
|
|
8
8
|
import"./index-q0y2jq9j.js";
|
|
9
9
|
import {
|
|
10
10
|
PkgExecutor
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-crmeqnmf.js";
|
|
12
12
|
import"./index-6wwzs1bc.js";
|
|
13
13
|
import {
|
|
14
14
|
ApplicationScript
|
|
15
|
-
} from "./index-
|
|
16
|
-
import"./index-
|
|
15
|
+
} from "./index-bftkz6cp.js";
|
|
16
|
+
import"./index-7ep8qtvp.js";
|
|
17
17
|
import"./index-hwkygn9s.js";
|
|
18
18
|
import"./index-7md2g9vw.js";
|
|
19
|
-
import"./index-
|
|
19
|
+
import"./index-srmay5jw.js";
|
|
20
20
|
import {
|
|
21
21
|
getNpmRegistryUrl,
|
|
22
22
|
CloudRunner
|
|
23
|
-
} from "./index-
|
|
24
|
-
import"./index-
|
|
23
|
+
} from "./index-bc88j1ry.js";
|
|
24
|
+
import"./index-bhtmj233.js";
|
|
25
25
|
import {
|
|
26
26
|
PackageScript
|
|
27
|
-
} from "./index-
|
|
28
|
-
import"./index-
|
|
27
|
+
} from "./index-ab0c38ea.js";
|
|
28
|
+
import"./index-kwaq3n9n.js";
|
|
29
29
|
|
|
30
30
|
// pkgs/@akanjs/cli/localRegistry/localRegistry.runner.ts
|
|
31
31
|
import { mkdir, rm } from "fs/promises";
|
|
@@ -3,17 +3,17 @@ import {
|
|
|
3
3
|
Sys,
|
|
4
4
|
Module,
|
|
5
5
|
command
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-qdgzsnhg.js";
|
|
7
7
|
import"./index-q0y2jq9j.js";
|
|
8
|
-
import"./index-
|
|
8
|
+
import"./index-crmeqnmf.js";
|
|
9
9
|
import"./index-6wwzs1bc.js";
|
|
10
10
|
import {
|
|
11
11
|
renderPrimitiveReport
|
|
12
|
-
} from "./index-
|
|
13
|
-
import"./index-
|
|
12
|
+
} from "./index-2446k7b4.js";
|
|
13
|
+
import"./index-22xtgmhn.js";
|
|
14
14
|
import {
|
|
15
15
|
ModuleScript
|
|
16
|
-
} from "./index-
|
|
16
|
+
} from "./index-esk82rvk.js";
|
|
17
17
|
|
|
18
18
|
// pkgs/@akanjs/cli/module/module.command.ts
|
|
19
19
|
import { Logger, lowerlize } from "akanjs/common";
|
|
@@ -3,21 +3,21 @@ import {
|
|
|
3
3
|
Pkg,
|
|
4
4
|
Workspace,
|
|
5
5
|
command
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-qdgzsnhg.js";
|
|
7
7
|
import"./index-q0y2jq9j.js";
|
|
8
|
-
import"./index-
|
|
8
|
+
import"./index-crmeqnmf.js";
|
|
9
9
|
import"./index-6wwzs1bc.js";
|
|
10
|
-
import"./index-
|
|
10
|
+
import"./index-bhtmj233.js";
|
|
11
11
|
import {
|
|
12
12
|
PackageScript
|
|
13
|
-
} from "./index-
|
|
13
|
+
} from "./index-ab0c38ea.js";
|
|
14
14
|
|
|
15
15
|
// pkgs/@akanjs/cli/package/package.command.ts
|
|
16
16
|
class PackageCommand extends command("package", [PackageScript], ({ public: target }) => ({
|
|
17
17
|
version: target({ desc: "Show version information for all packages" }).with(Workspace).exec(async function(workspace) {
|
|
18
18
|
await this.packageScript.version(workspace);
|
|
19
19
|
}),
|
|
20
|
-
createPackage: target({ desc: "Create a new package in pkgs
|
|
20
|
+
createPackage: target({ desc: "Create a new package in pkgs/<name>/" }).option("name", String, { desc: "name of package" }).with(Workspace).exec(async function(name, workspace) {
|
|
21
21
|
await this.packageScript.createPackage(workspace, name.toLowerCase().replace(/ /g, "-"));
|
|
22
22
|
}),
|
|
23
23
|
removePackage: target({ desc: "Remove a package from the workspace" }).with(Pkg).exec(async function(pkg) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akanjs/cli",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.19",
|
|
4
4
|
"sourceType": "module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@inquirer/prompts": "^8.4.3",
|
|
41
41
|
"@tailwindcss/node": "^4.3.0",
|
|
42
42
|
"@trapezedev/project": "^7.1.4",
|
|
43
|
-
"akanjs": "3.0.0-beta.
|
|
43
|
+
"akanjs": "3.0.0-beta.19",
|
|
44
44
|
"chalk": "^5.6.2",
|
|
45
45
|
"commander": "^14.0.3",
|
|
46
46
|
"dayjs": "^1.11.20",
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
App,
|
|
4
4
|
Module,
|
|
5
5
|
command
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-qdgzsnhg.js";
|
|
7
7
|
import"./index-q0y2jq9j.js";
|
|
8
|
-
import"./index-
|
|
8
|
+
import"./index-crmeqnmf.js";
|
|
9
9
|
import"./index-6wwzs1bc.js";
|
|
10
10
|
import {
|
|
11
11
|
PageScript
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-22xtgmhn.js";
|
|
13
13
|
|
|
14
14
|
// pkgs/@akanjs/cli/page/page.command.ts
|
|
15
15
|
class PageCommand extends command("page", [PageScript], ({ public: target }) => ({
|