@akanjs/cli 3.0.0-beta.8 → 3.0.0

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.
Files changed (224) hide show
  1. package/.build-stamp +1 -1
  2. package/CodeAgent-2vmp9qe0.js +9 -0
  3. package/CodeAgentRpcHost-p7h6n2hp.js +7 -0
  4. package/CodeAgentRpcListener-7p7z5dd7.js +97 -0
  5. package/CodeTui-5ed6bg2a.js +1457 -0
  6. package/README.ko.md +83 -28
  7. package/README.md +70 -27
  8. package/TunnelShare-cwh9ezsm.js +9 -0
  9. package/{agent.command-0q17pnrs.js → agent.command-gn73rhe7.js} +8 -9
  10. package/akanCode.js +102 -0
  11. package/application.command-e968t0hw.js +246 -0
  12. package/{applicationBuildRunner-kxwbssgn.js → applicationBuildRunner-64taxseg.js} +121 -77
  13. package/buildBatch.proc.js +120 -32
  14. package/cloud.command-0jm301rr.js +95 -0
  15. package/cloud.script-nemnzjpv.js +20 -0
  16. package/code.command-18kcm7hq.js +154 -0
  17. package/commandManifest.json +1 -1
  18. package/consoleToStderr-h5bryj94.js +7 -0
  19. package/context.command-trd9bn18.js +48 -0
  20. package/context.runner-y5hwh673.js +21 -0
  21. package/{dependencyScanner-shs82ynp.js → dependencyScanner-06z2dmrr.js} +2 -2
  22. package/{devTui-m1atgkc9.js → devTui-q7k7bakd.js} +122 -40
  23. package/fileSys-wzzrntkw.js +9 -0
  24. package/guideline.command-bdmdn2de.js +42 -0
  25. package/guidelines/agentRule/agentRule.instruction.md +154 -26
  26. package/guidelines/conventions/conventions.instruction.md +134 -48
  27. package/guidelines/mcpRule/mcpRule.instruction.md +7 -5
  28. package/guidelines/queryRule/queryRule.instruction.md +21 -7
  29. package/guidelines/runtimeRule/runtimeRule.instruction.md +291 -6
  30. package/guidelines/ssrRule/ssrRule.instruction.md +4 -2
  31. package/guidelines/transportRule/transportRule.instruction.md +10 -8
  32. package/guidelines/workspaceOnboarding/workspaceOnboarding.instruction.md +20 -0
  33. package/guidelines/workspaceRecipes/workspaceRecipes.instruction.md +66 -3
  34. package/incrementalBuilder.proc.js +564 -109
  35. package/index-0wpybxtr.js +2729 -0
  36. package/{index-kcxmv48c.js → index-2ahj896a.js} +45 -79
  37. package/index-2wc41k5w.js +49 -0
  38. package/index-3hx1z96c.js +87 -0
  39. package/{index-2tv3fdx4.js → index-3w94e7n3.js} +1228 -1458
  40. package/{index-hwkygn9s.js → index-48k96p55.js} +325 -36
  41. package/index-4npz05nm.js +187 -0
  42. package/{index-q0y2jq9j.js → index-52w0fvh8.js} +21 -4
  43. package/index-6he6gvfg.js +4300 -0
  44. package/index-7md2g9vw.js +6 -0
  45. package/{index-04bk599g.js → index-93j60em0.js} +10 -17
  46. package/index-94s080qm.js +266 -0
  47. package/index-9dp031by.js +12 -0
  48. package/{index-ktb5njgy.js → index-9z771ptz.js} +49 -99
  49. package/{index-y6n8nmny.js → index-abxpehf8.js} +75 -203
  50. package/{index-3d9y066c.js → index-bjwxs904.js} +9 -8
  51. package/{index-9077wzd2.js → index-by9pxkr0.js} +43 -26
  52. package/index-c6eggbee.js +123 -0
  53. package/index-d2242ksy.js +99 -0
  54. package/index-drehwpdt.js +1119 -0
  55. package/{index-92zztqy1.js → index-dy0jx9ay.js} +2 -17
  56. package/{index-ffvk10zz.js → index-f3c78nd6.js} +107 -241
  57. package/index-gbggbqcp.js +1058 -0
  58. package/{index-by5gpp8x.js → index-hj6w4ka1.js} +2 -1
  59. package/index-hsmtysz4.js +53 -0
  60. package/{index-j9yhg404.js → index-jmrn54tt.js} +4 -7
  61. package/{index-a64esmtb.js → index-kcdj1z5v.js} +523 -1022
  62. package/{index-d43r08tf.js → index-kqabytj7.js} +77 -150
  63. package/{index-vyvre9en.js → index-mbxbhay5.js} +6 -2
  64. package/{index-vxtad5bd.js → index-mgxpx3f2.js} +5 -8
  65. package/index-p6pbz9n5.js +25 -0
  66. package/{index-sj5vxr8f.js → index-p993efkq.js} +981 -897
  67. package/{index-2xp0kfkt.js → index-pmhqttv3.js} +37 -25
  68. package/index-tqm7jjcn.js +700 -0
  69. package/{index-0g7r8xz3.js → index-vpj42xwt.js} +114 -232
  70. package/index-wa5jbxj1.js +760 -0
  71. package/{index-k2j1hc4r.js → index-wprnsjms.js} +12 -12
  72. package/{index-gyd220p2.js → index-y3mphr1m.js} +554 -577
  73. package/index-yg7jhz8x.js +69 -0
  74. package/{index-h7yw2z9n.js → index-zzvvc845.js} +8 -14
  75. package/index.js +23 -22
  76. package/{library.command-qzzbj6d8.js → library.command-9h749a1x.js} +4 -5
  77. package/{localRegistry.command-vyrgg4xw.js → localRegistry.command-2bqqhxyz.js} +23 -43
  78. package/{module.command-rq5hq3ax.js → module.command-nv8nzgft.js} +8 -12
  79. package/{package.command-d9hd6v9n.js → package.command-mq4bggp6.js} +6 -7
  80. package/package.json +15 -7
  81. package/{page.command-126d56te.js → page.command-j639n707.js} +4 -5
  82. package/{primitive.command-taxd1538.js → primitive.command-kz6849th.js} +9 -23
  83. package/prompter-76k56b37.js +8 -0
  84. package/{quality.command-6gsna0a3.js → quality.command-4hyabwkb.js} +205 -377
  85. package/{recipeScanner-fpagtgc1.js → recipeScanner-4b69ybe0.js} +1 -1
  86. package/{repair.command-tq2dgy72.js → repair.command-a9awpbqr.js} +11 -35
  87. package/{routeSourceValidator-apyqw7wk.js → routeSourceValidator-7ycnfz0e.js} +0 -6
  88. package/{scalar.command-3bcmrrkv.js → scalar.command-ma4fpm9m.js} +7 -11
  89. package/skills/akan-code/SKILL.md +130 -0
  90. package/skills/akan-debug/SKILL.md +42 -0
  91. package/skills/akan-deps/SKILL.md +50 -0
  92. package/skills/akan-err/SKILL.md +39 -0
  93. package/skills/akan-module/SKILL.md +45 -0
  94. package/skills/akan-scaffold/SKILL.md +76 -0
  95. package/skills/akan-scalar/SKILL.md +52 -0
  96. package/skills/akan-service/SKILL.md +34 -0
  97. package/skills/akan-store/SKILL.md +67 -0
  98. package/skills/akan-ui/SKILL.md +63 -0
  99. package/skills/akan-validate/SKILL.md +44 -0
  100. package/{subspace.command-eddzqpx3.js → subspace.command-3k2pmrs4.js} +53 -62
  101. package/templates/__scalar/__model__/__model__.abstract.md.template +8 -0
  102. package/templates/app/page/_index.tsx +257 -258
  103. package/templates/app/page/_layout.tsx +5 -1
  104. package/templates/app/page/_overrides.tsx +12 -0
  105. package/templates/app/page/styles.css.template +316 -14
  106. package/templates/app/public/apple-touch-icon.png +0 -0
  107. package/templates/app/public/favicon.ico +0 -0
  108. package/templates/app/public/jelly/cloud.webp +0 -0
  109. package/templates/app/public/jelly/comet.webp +0 -0
  110. package/templates/app/public/jelly/moon.webp +0 -0
  111. package/templates/app/public/jelly/planet.webp +0 -0
  112. package/templates/app/public/jelly/rocket.webp +0 -0
  113. package/templates/app/public/jelly/star.webp +0 -0
  114. package/templates/app/public/jelly/sugar.webp +0 -0
  115. package/templates/app/public/logo.png +0 -0
  116. package/templates/app/ui/Recipe/index.ts +9 -0
  117. package/templates/app/ui/Recipe/jellyButton.ts +63 -0
  118. package/templates/appSample/lib/__scalar/workHistory/workHistory.abstract.ts +8 -39
  119. package/templates/appSample/lib/_noti/noti.abstract.ts +6 -29
  120. package/templates/appSample/lib/task/Task.Unit.tsx +1 -1
  121. package/templates/appSample/lib/task/Task.Util.tsx +10 -13
  122. package/templates/appSample/lib/task/Task.View.tsx +2 -2
  123. package/templates/appSample/lib/task/Task.Zone.tsx +5 -2
  124. package/templates/appSample/lib/task/task.abstract.ts +12 -32
  125. package/templates/appSample/lib/task/task.signal.spec.ts +1 -15
  126. package/templates/appSample/lib/task/task.signal.test.ts +15 -1
  127. package/templates/appSample/lib/task/task.signal.ts +10 -8
  128. package/templates/appSample/page/task/[taskId]/_index.tsx +6 -6
  129. package/templates/appSample/page/task/[taskId]/edit.tsx +5 -4
  130. package/templates/appSample/page/task/_index.tsx +4 -3
  131. package/templates/appSample/page/task/_layout.tsx +1 -1
  132. package/templates/appSample/page/task/new.tsx +5 -4
  133. package/templates/appSample/srvkit/{AuthGuard.ts → guards.ts} +7 -4
  134. package/templates/appSample/srvkit/{SessionInternalArg.ts → internalArgs.ts} +6 -4
  135. package/templates/appSample/ui/GlobalLoading.tsx +2 -1
  136. package/templates/appSample/ui/QuantityControl.tsx +3 -3
  137. package/templates/client.ts +7 -30
  138. package/templates/crudPages/[__model__Id]/edit/page.tsx +2 -1
  139. package/templates/crudPages/[__model__Id]/page.tsx +2 -1
  140. package/templates/crudPages/new/page.tsx +2 -1
  141. package/templates/crudPages/page.tsx +2 -1
  142. package/templates/crudSinglePage/page.tsx +2 -1
  143. package/templates/lib/__lib/lib.dictionary.ts +0 -2
  144. package/templates/lib/__lib/lib.document.ts +0 -2
  145. package/templates/lib/sig.ts +8 -30
  146. package/templates/localDev/docker-compose.yaml.template +3 -14
  147. package/templates/module/__model__.signal.ts +12 -4
  148. package/templates/pkgRoot/tsconfig.json.template +2 -7
  149. package/templates/server.ts +1 -3
  150. package/templates/service/__model__.abstract.md.template +8 -0
  151. package/templates/workspaceRoot/.gitignore.template +0 -1
  152. package/templates/workspaceRoot/AGENTS.md.template +6 -0
  153. package/templates/workspaceRoot/package.json.template +1 -3
  154. package/tunnel.command-xwr46b66.js +129 -0
  155. package/{typeChecker-3xgrzc2v.js → typeChecker-px49mezc.js} +1 -1
  156. package/typecheck.proc.js +1 -1
  157. package/workflow.command-t7wqe4h7.js +79 -0
  158. package/{workspace.command-06wvstgr.js → workspace.command-4derhzrh.js} +79 -109
  159. package/abstractCompactor-gmkc0z8j.js +0 -102
  160. package/application.command-18y0s485.js +0 -204
  161. package/applicationReleasePackager-4yasxwv9.js +0 -244
  162. package/capacitorApp-36rbr858.js +0 -12
  163. package/cloud.command-av97ndh6.js +0 -94
  164. package/cloud.script-cm11xjdz.js +0 -20
  165. package/context.command-5v37ef3n.js +0 -81
  166. package/devTuiView-0hc2emhe.js +0 -9
  167. package/getDirname-dr3jz1xg.js +0 -7
  168. package/guideline.command-4pz9g1rt.js +0 -360
  169. package/guidelines/agentRule/agentRule.generate.json +0 -31
  170. package/guidelines/componentRule/componentRule.generate.json +0 -31
  171. package/guidelines/conventions/conventions.generate.json +0 -25
  172. package/guidelines/cssRule/cssRule.generate.json +0 -31
  173. package/guidelines/docPageRule/docPageRule.generate.json +0 -31
  174. package/guidelines/docPageRule/docPageRule.instruction.md +0 -25
  175. package/guidelines/docSyncRule/docSyncRule.generate.json +0 -31
  176. package/guidelines/docSyncRule/docSyncRule.instruction.md +0 -25
  177. package/guidelines/enumConstant/enumConstant.generate.json +0 -31
  178. package/guidelines/enumConstant/enumConstant.instruction.md +0 -28
  179. package/guidelines/fieldRule/fieldRule.generate.json +0 -31
  180. package/guidelines/framework/framework.generate.json +0 -32
  181. package/guidelines/mcpRule/mcpRule.generate.json +0 -35
  182. package/guidelines/modelConstant/modelConstant.generate.json +0 -32
  183. package/guidelines/modelDictionary/modelDictionary.generate.json +0 -32
  184. package/guidelines/modelDocument/modelDocument.generate.json +0 -31
  185. package/guidelines/modelService/modelService.generate.json +0 -31
  186. package/guidelines/modelSignal/modelSignal.generate.json +0 -31
  187. package/guidelines/modelStore/modelStore.generate.json +0 -31
  188. package/guidelines/modelTemplate/modelTemplate.generate.json +0 -31
  189. package/guidelines/modelUnit/modelUnit.generate.json +0 -31
  190. package/guidelines/modelUtil/modelUtil.generate.json +0 -31
  191. package/guidelines/modelView/modelView.generate.json +0 -31
  192. package/guidelines/modelZone/modelZone.generate.json +0 -31
  193. package/guidelines/moduleCodegen/moduleCodegen.generate.json +0 -31
  194. package/guidelines/moduleCodegen/moduleCodegen.instruction.md +0 -28
  195. package/guidelines/moduleOverview/moduleOverview.generate.json +0 -31
  196. package/guidelines/queryRule/queryRule.generate.json +0 -31
  197. package/guidelines/recipeRule/recipeRule.generate.json +0 -31
  198. package/guidelines/runtimeRule/runtimeRule.generate.json +0 -25
  199. package/guidelines/scalarConstant/scalarConstant.generate.json +0 -32
  200. package/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -32
  201. package/guidelines/scalarModule/scalarModule.generate.json +0 -31
  202. package/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -31
  203. package/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -25
  204. package/guidelines/ssrRule/ssrRule.generate.json +0 -31
  205. package/guidelines/transportRule/transportRule.generate.json +0 -31
  206. package/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -31
  207. package/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -25
  208. package/guidelines/workspaceOnboarding/workspaceOnboarding.generate.json +0 -24
  209. package/guidelines/workspaceRecipes/workspaceRecipes.generate.json +0 -33
  210. package/index-47pj3aee.js +0 -76
  211. package/index-5ystnsd5.js +0 -841
  212. package/index-6wwzs1bc.js +0 -7
  213. package/index-a17x49vg.js +0 -229
  214. package/index-m0xccmmm.js +0 -228
  215. package/index-meh558jy.js +0 -65
  216. package/index-rtxxan88.js +0 -471
  217. package/index-te54x9zm.js +0 -338
  218. package/index-w8kmx1b6.js +0 -2176
  219. package/index-wt7qrtd4.js +0 -1516
  220. package/templates/__scalar/__model__/__model__.abstract.md +0 -28
  221. package/templates/module/__model__.abstract.md +0 -28
  222. package/templates/service/__model__.abstract.md +0 -28
  223. package/templates/workspaceRoot/patches/react-dom@19.2.7.patch.template +0 -62
  224. package/workflow.command-gtdnzvbz.js +0 -108
@@ -1,23 +1,25 @@
1
1
  // @bun
2
2
  import {
3
3
  script
4
- } from "./index-0g7r8xz3.js";
4
+ } from "./index-vpj42xwt.js";
5
5
  import {
6
6
  AppExecutor,
7
7
  LibExecutor,
8
8
  ModuleExecutor
9
- } from "./index-2tv3fdx4.js";
9
+ } from "./index-3w94e7n3.js";
10
10
  import {
11
+ workflowStatus,
11
12
  compactDiagnostics,
12
- createPrimitiveWriteReport,
13
13
  sourceFile,
14
14
  moduleComponentName,
15
15
  moduleSourcePaths,
16
16
  generatedFilesForSync,
17
17
  validationCommandsForTarget,
18
18
  nextActionsForTarget,
19
- lowerlize,
19
+ createPrimitiveWriteReport,
20
20
  normalizeFieldType,
21
+ ensureNamedImport,
22
+ ensureBaseImport,
21
23
  ensureBaseTypeImport,
22
24
  coerceFieldDefault,
23
25
  fieldExpression,
@@ -39,13 +41,13 @@ import {
39
41
  hasSignalFactoryEntry,
40
42
  insertSignalFactoryEntry,
41
43
  addFieldUiPolicyForType
42
- } from "./index-gyd220p2.js";
44
+ } from "./index-y3mphr1m.js";
43
45
  import {
44
46
  ModuleScript
45
- } from "./index-5ystnsd5.js";
47
+ } from "./index-4npz05nm.js";
46
48
 
47
49
  // pkgs/@akanjs/cli/primitive/primitive.script.ts
48
- import { capitalize } from "akanjs/common";
50
+ import { capitalize, lowerlize } from "akanjs/common";
49
51
  class PrimitiveScript extends script("primitive", [ModuleScript]) {
50
52
  async resolveSys(workspace, target) {
51
53
  if (!target)
@@ -59,28 +61,11 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
59
61
  }
60
62
  async createUi(workspace, input) {
61
63
  const sys = await this.resolveSys(workspace, input.app);
62
- if (!sys || !input.module) {
63
- return createPrimitiveWriteReport({
64
- command: "create-ui",
65
- changedFiles: [],
66
- generatedFiles: [],
67
- validationCommands: [],
68
- diagnostics: compactDiagnostics([
69
- !sys && {
70
- severity: "error",
71
- code: "primitive-target-missing",
72
- message: "Target app or library was not found."
73
- },
74
- !input.module && {
75
- severity: "error",
76
- code: "primitive-input-missing",
77
- message: "Module is required.",
78
- input: "module"
79
- }
80
- ]),
81
- nextActions: []
82
- });
83
- }
64
+ if (!sys || !input.module)
65
+ return PrimitiveScript.#refuse("create-ui", compactDiagnostics([
66
+ !sys && PrimitiveScript.#targetMissing(),
67
+ !input.module && PrimitiveScript.#inputMissing("module")
68
+ ]));
84
69
  const mod = ModuleExecutor.from(sys, input.module);
85
70
  if (input.surface === "view")
86
71
  return await this.moduleScript.createView(mod);
@@ -96,30 +81,16 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
96
81
  return await this.addFieldToSources(workspace, { ...input, type: `${capitalize(input.field ?? "")}` }, { enumValues: values });
97
82
  }
98
83
  async addFieldToSources(workspace, input, { enumValues }) {
84
+ const command = enumValues ? "add-enum-field" : "add-field";
99
85
  const sys = await this.resolveSys(workspace, input.app);
100
86
  const ambiguousNumberTypes = new Set(["number", "numeric"]);
101
87
  const normalizedType = input.type ? normalizeFieldType(input.type) : null;
102
88
  const diagnostics = compactDiagnostics([
103
- !sys && { severity: "error", code: "primitive-target-missing", message: "Target app or library was not found." },
104
- !input.module && {
105
- severity: "error",
106
- code: "primitive-input-missing",
107
- message: "Module is required.",
108
- input: "module"
109
- },
110
- !input.field && {
111
- severity: "error",
112
- code: "primitive-input-missing",
113
- message: "Field is required.",
114
- input: "field"
115
- },
116
- !input.type && {
117
- severity: "error",
118
- code: "primitive-input-missing",
119
- message: "Type is required.",
120
- input: "type"
121
- },
122
- enumValues && enumValues.length === 0 ? { severity: "error", code: "primitive-input-missing", message: "Enum values are required.", input: "values" } : null,
89
+ !sys && PrimitiveScript.#targetMissing(),
90
+ !input.module && PrimitiveScript.#inputMissing("module"),
91
+ !input.field && PrimitiveScript.#inputMissing("field"),
92
+ !input.type && PrimitiveScript.#inputMissing("type"),
93
+ enumValues?.length === 0 && PrimitiveScript.#inputMissing("values", "Enum values are required."),
123
94
  input.type && ambiguousNumberTypes.has(input.type.toLowerCase()) ? {
124
95
  severity: "error",
125
96
  code: "primitive-field-type-unsupported",
@@ -133,16 +104,8 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
133
104
  input: "type"
134
105
  } : null
135
106
  ]);
136
- if (!sys || !input.module || !input.field || !input.type || diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
137
- return createPrimitiveWriteReport({
138
- command: enumValues ? "add-enum-field" : "add-field",
139
- changedFiles: [],
140
- generatedFiles: [],
141
- validationCommands: [],
142
- diagnostics,
143
- nextActions: []
144
- });
145
- }
107
+ if (!sys || !input.module || !input.field || !input.type || workflowStatus(diagnostics) === "failed")
108
+ return PrimitiveScript.#refuse(command, diagnostics);
146
109
  const moduleClassName = moduleComponentName(input.module);
147
110
  const inputClassName = `${moduleClassName}Input`;
148
111
  const paths = moduleSourcePaths(input.module);
@@ -150,32 +113,13 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
150
113
  const dictionaryPath = paths.dictionary;
151
114
  const templatePath = paths.template;
152
115
  const changedFiles = [];
153
- const generatedFiles = generatedFilesForSync(sys);
154
116
  const [hasConstant, hasDictionary] = await Promise.all([sys.exists(constantPath), sys.exists(dictionaryPath)]);
155
- if (!hasConstant) {
156
- diagnostics.push({
157
- severity: "error",
158
- code: "primitive-source-missing",
159
- message: `Constant source file was not found: ${constantPath}.`
160
- });
161
- }
162
- if (!hasDictionary) {
163
- diagnostics.push({
164
- severity: "error",
165
- code: "primitive-source-missing",
166
- message: `Dictionary source file was not found: ${dictionaryPath}.`
167
- });
168
- }
169
- if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
170
- return createPrimitiveWriteReport({
171
- command: enumValues ? "add-enum-field" : "add-field",
172
- changedFiles,
173
- generatedFiles,
174
- validationCommands: validationCommandsForTarget(sys.name),
175
- diagnostics,
176
- nextActions: nextActionsForTarget(sys.name)
177
- });
178
- }
117
+ if (!hasConstant)
118
+ diagnostics.push(PrimitiveScript.#sourceMissing("Constant", constantPath));
119
+ if (!hasDictionary)
120
+ diagnostics.push(PrimitiveScript.#sourceMissing("Dictionary", dictionaryPath));
121
+ if (workflowStatus(diagnostics) === "failed")
122
+ return PrimitiveScript.#report(command, sys, changedFiles, diagnostics);
179
123
  let constantContent = await sys.readFile(constantPath);
180
124
  let dictionaryContent = await sys.readFile(dictionaryPath);
181
125
  const fieldBuilderName = viaBuilderParameterName(constantContent, inputClassName) ?? "field";
@@ -210,6 +154,8 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
210
154
  if (defaultCoercion.diagnostic)
211
155
  diagnostics.push(defaultCoercion.diagnostic);
212
156
  constantContent = ensureBaseTypeImport(constantContent, input.type);
157
+ if (input.type === "Date" && defaultCoercion.expression)
158
+ constantContent = ensureBaseImport(constantContent, "dayjs");
213
159
  }
214
160
  if (enumValues) {
215
161
  const defaultCoercion = coerceFieldDefault("enum", input.defaultValue, { enumValues });
@@ -311,7 +257,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
311
257
  }
312
258
  }
313
259
  }
314
- if (!diagnostics.some((diagnostic) => diagnostic.severity === "error") && nextConstantContentWithLight && nextDictionaryContent) {
260
+ if (workflowStatus(diagnostics) === "passed" && nextConstantContentWithLight && nextDictionaryContent) {
315
261
  await sys.writeFile(constantPath, nextConstantContentWithLight);
316
262
  await sys.writeFile(dictionaryPath, nextDictionaryContent);
317
263
  changedFiles.push(sourceFile(sys, constantPath, "modify", "Field source shape was updated."), sourceFile(sys, dictionaryPath, "modify", "Field dictionary labels were updated."));
@@ -320,14 +266,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
320
266
  changedFiles.push(sourceFile(sys, templatePath, "modify", "Template field surface was updated."));
321
267
  }
322
268
  }
323
- return createPrimitiveWriteReport({
324
- command: enumValues ? "add-enum-field" : "add-field",
325
- changedFiles,
326
- generatedFiles,
327
- validationCommands: validationCommandsForTarget(sys.name),
328
- diagnostics,
329
- nextActions: nextActionsForTarget(sys.name)
330
- });
269
+ return PrimitiveScript.#report(command, sys, changedFiles, diagnostics);
331
270
  }
332
271
  async addMutation(workspace, input) {
333
272
  const moduleClassName = input.module ? moduleComponentName(input.module) : "";
@@ -353,7 +292,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
353
292
  signal: name ? {
354
293
  className: `${moduleClassName}Endpoint`,
355
294
  entryLine: [
356
- `${name}: mutation(Boolean)`,
295
+ `${name}: mutation(Boolean, { guards: [None] })`,
357
296
  ` .exec(async function () {`,
358
297
  ` return await this.${serviceRef}Service.${name}();`,
359
298
  ` }),`
@@ -388,7 +327,7 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
388
327
  signal: name && queryName ? {
389
328
  className: `${moduleClassName}Slice`,
390
329
  entryLine: [
391
- `${name}: init()`,
330
+ `${name}: init({ guards: [None] })`,
392
331
  ` .exec(function () {`,
393
332
  ` return this.${serviceRef}Service.${queryName}();`,
394
333
  ` }),`
@@ -401,60 +340,21 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
401
340
  async#writeServiceSignalEntry(workspace, spec) {
402
341
  const sys = await this.resolveSys(workspace, spec.app);
403
342
  const diagnostics = compactDiagnostics([
404
- !sys && { severity: "error", code: "primitive-target-missing", message: "Target app or library was not found." },
405
- !spec.module && {
406
- severity: "error",
407
- code: "primitive-input-missing",
408
- message: "Module is required.",
409
- input: "module"
410
- },
411
- !spec.entryName && {
412
- severity: "error",
413
- code: "primitive-input-missing",
414
- message: `${capitalize(spec.requiredInput)} name is required.`,
415
- input: spec.requiredInput
416
- }
343
+ !sys && PrimitiveScript.#targetMissing(),
344
+ !spec.module && PrimitiveScript.#inputMissing("module"),
345
+ !spec.entryName && PrimitiveScript.#inputMissing(spec.requiredInput, `${capitalize(spec.requiredInput)} name is required.`)
417
346
  ]);
418
- if (!sys || !spec.module || !spec.entryName || !spec.serviceMethod || !spec.signal) {
419
- return createPrimitiveWriteReport({
420
- command: spec.command,
421
- changedFiles: [],
422
- generatedFiles: [],
423
- validationCommands: [],
424
- diagnostics,
425
- nextActions: []
426
- });
427
- }
428
- const paths = moduleSourcePaths(spec.module);
429
- const servicePath = paths.service;
430
- const signalPath = paths.signal;
347
+ if (!sys || !spec.module || !spec.entryName || !spec.serviceMethod || !spec.signal)
348
+ return PrimitiveScript.#refuse(spec.command, diagnostics);
349
+ const { service: servicePath, signal: signalPath } = moduleSourcePaths(spec.module);
431
350
  const changedFiles = [];
432
- const generatedFiles = generatedFilesForSync(sys);
433
351
  const [hasServiceFile, hasSignalFile] = await Promise.all([sys.exists(servicePath), sys.exists(signalPath)]);
434
- if (!hasServiceFile) {
435
- diagnostics.push({
436
- severity: "error",
437
- code: "primitive-source-missing",
438
- message: `Service source file was not found: ${servicePath}.`
439
- });
440
- }
441
- if (!hasSignalFile) {
442
- diagnostics.push({
443
- severity: "error",
444
- code: "primitive-source-missing",
445
- message: `Signal source file was not found: ${signalPath}.`
446
- });
447
- }
448
- if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
449
- return createPrimitiveWriteReport({
450
- command: spec.command,
451
- changedFiles,
452
- generatedFiles,
453
- validationCommands: validationCommandsForTarget(sys.name),
454
- diagnostics,
455
- nextActions: nextActionsForTarget(sys.name)
456
- });
457
- }
352
+ if (!hasServiceFile)
353
+ diagnostics.push(PrimitiveScript.#sourceMissing("Service", servicePath));
354
+ if (!hasSignalFile)
355
+ diagnostics.push(PrimitiveScript.#sourceMissing("Signal", signalPath));
356
+ if (workflowStatus(diagnostics) === "failed")
357
+ return PrimitiveScript.#report(spec.command, sys, changedFiles, diagnostics);
458
358
  const serviceClassName = `${moduleComponentName(spec.module)}Service`;
459
359
  const serviceContent = await sys.readFile(servicePath);
460
360
  const signalContent = await sys.readFile(signalPath);
@@ -476,7 +376,8 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
476
376
  });
477
377
  }
478
378
  const nextServiceContent = serviceMethodExists ? serviceContent : insertClassMethod(serviceContent, serviceClassName, spec.serviceMethod.block);
479
- const nextSignalContent = insertSignalFactoryEntry(signalContent, spec.signal.className, spec.entryName, spec.signal.entryLine, spec.signal.param);
379
+ const insertedSignalContent = insertSignalFactoryEntry(signalContent, spec.signal.className, spec.entryName, spec.signal.entryLine, spec.signal.param);
380
+ const nextSignalContent = insertedSignalContent ? ensureNamedImport(insertedSignalContent, "akanjs/signal", "None") : insertedSignalContent;
480
381
  if (!nextServiceContent) {
481
382
  diagnostics.push({
482
383
  severity: "error",
@@ -515,20 +416,46 @@ class PrimitiveScript extends script("primitive", [ModuleScript]) {
515
416
  message: `Edited ${signalPath} did not contain entry "${spec.entryName}" in ${spec.signal.className}.`
516
417
  });
517
418
  }
518
- if (!diagnostics.some((diagnostic) => diagnostic.severity === "error") && nextServiceContent && nextSignalContent) {
419
+ if (workflowStatus(diagnostics) === "passed" && nextServiceContent && nextSignalContent) {
519
420
  await sys.writeFile(servicePath, nextServiceContent);
520
421
  await sys.writeFile(signalPath, nextSignalContent);
521
422
  changedFiles.push(sourceFile(sys, servicePath, "modify", `Service ${spec.entryKind} was added.`), sourceFile(sys, signalPath, "modify", `Signal ${spec.entryKind} was added.`));
522
423
  }
424
+ return PrimitiveScript.#report(spec.command, sys, changedFiles, diagnostics);
425
+ }
426
+ static #refuse(command, diagnostics) {
427
+ return createPrimitiveWriteReport({
428
+ command,
429
+ changedFiles: [],
430
+ generatedFiles: [],
431
+ validationCommands: [],
432
+ diagnostics,
433
+ nextActions: []
434
+ });
435
+ }
436
+ static #report(command, sys, changedFiles, diagnostics) {
523
437
  return createPrimitiveWriteReport({
524
- command: spec.command,
438
+ command,
525
439
  changedFiles,
526
- generatedFiles,
440
+ generatedFiles: generatedFilesForSync(sys),
527
441
  validationCommands: validationCommandsForTarget(sys.name),
528
442
  diagnostics,
529
443
  nextActions: nextActionsForTarget(sys.name)
530
444
  });
531
445
  }
446
+ static #targetMissing() {
447
+ return { severity: "error", code: "primitive-target-missing", message: "Target app or library was not found." };
448
+ }
449
+ static #inputMissing(input, message = `${capitalize(input)} is required.`) {
450
+ return { severity: "error", code: "primitive-input-missing", message, input };
451
+ }
452
+ static #sourceMissing(kind, path) {
453
+ return {
454
+ severity: "error",
455
+ code: "primitive-source-missing",
456
+ message: `${kind} source file was not found: ${path}.`
457
+ };
458
+ }
532
459
  }
533
460
 
534
461
  export { PrimitiveScript };
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-0g7r8xz3.js";
5
+ } from "./index-vpj42xwt.js";
6
6
 
7
7
  // pkgs/@akanjs/cli/page/page.runner.ts
8
8
  class PageRunner extends runner("page") {
@@ -10,7 +10,11 @@ class PageRunner extends runner("page") {
10
10
  await app.applyTemplate({
11
11
  basePath: basePath ?? `page/(${app.name})/(public)/${module.name}`,
12
12
  template: single ? "crudSinglePage" : "crudPages",
13
- dict: { model: module.name, appName: module.sys.name }
13
+ dict: {
14
+ model: module.name,
15
+ appName: module.sys.name,
16
+ clientPath: `@${module.sys.type}s/${module.sys.name}/client`
17
+ }
14
18
  });
15
19
  }
16
20
  }
@@ -2,23 +2,21 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-0g7r8xz3.js";
5
+ } from "./index-vpj42xwt.js";
6
6
  import {
7
7
  LibExecutor
8
- } from "./index-2tv3fdx4.js";
8
+ } from "./index-3w94e7n3.js";
9
9
  import {
10
10
  LibSource,
11
11
  formatLibStatuses
12
- } from "./index-3d9y066c.js";
12
+ } from "./index-bjwxs904.js";
13
13
 
14
14
  // pkgs/@akanjs/cli/library/library.script.ts
15
15
  import { Logger } from "akanjs/common";
16
16
 
17
17
  // pkgs/@akanjs/devkit/semver.ts
18
18
  var stripRangeOperator = (version) => version.replace(/^[\s^~>=<v]+/, "").trim();
19
- var parseVersion = (version) => {
20
- return version.replace(/^[^\d]*/, "").split(/[.-]/).map((part) => Number.parseInt(part, 10)).map((part) => Number.isFinite(part) ? part : 0);
21
- };
19
+ var parseVersion = (version) => version.replace(/^[^\d]*/, "").split(/[.-]/).map((part) => Number.parseInt(part, 10)).map((part) => Number.isFinite(part) ? part : 0);
22
20
  var compareNumeric = (a, b) => {
23
21
  const left = parseVersion(a);
24
22
  const right = parseVersion(b);
@@ -44,8 +42,7 @@ class LibraryRunner extends runner("library") {
44
42
  async createLibrary(libName, workspace) {
45
43
  await workspace.mkdir(`libs/${libName}`);
46
44
  await workspace.applyTemplate({ basePath: `libs/${libName}`, template: "libRoot", dict: { libName } });
47
- const lib = LibExecutor.from(workspace, libName);
48
- return lib;
45
+ return LibExecutor.from(workspace, libName);
49
46
  }
50
47
  async removeLibrary(lib) {
51
48
  await lib.workspace.removeDir(`libs/${lib.name}`);
@@ -0,0 +1,25 @@
1
+ // @bun
2
+ // pkgs/@akanjs/cli/clipboard.ts
3
+ var clipboardCommands = () => {
4
+ if (process.platform === "darwin")
5
+ return [["pbcopy"]];
6
+ if (process.platform === "win32")
7
+ return [["clip"]];
8
+ return [["wl-copy"], ["xclip", "-selection", "clipboard"], ["xsel", "--clipboard", "--input"]];
9
+ };
10
+ var writeClipboard = async (text) => {
11
+ for (const command of clipboardCommands()) {
12
+ try {
13
+ const proc = Bun.spawn(command, {
14
+ stdin: new TextEncoder().encode(text),
15
+ stdout: "ignore",
16
+ stderr: "ignore"
17
+ });
18
+ if (await proc.exited === 0)
19
+ return true;
20
+ } catch {}
21
+ }
22
+ return false;
23
+ };
24
+
25
+ export { writeClipboard };