@contractspec/module.workspace 1.56.1 → 1.58.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 (248) hide show
  1. package/dist/ai/code-generation.d.ts +25 -0
  2. package/dist/ai/code-generation.d.ts.map +1 -0
  3. package/dist/ai/index.d.ts +5 -0
  4. package/dist/ai/index.d.ts.map +1 -0
  5. package/dist/ai/prompts/code-generation.d.ts +5 -8
  6. package/dist/ai/prompts/code-generation.d.ts.map +1 -1
  7. package/dist/ai/prompts/index.d.ts +3 -0
  8. package/dist/ai/prompts/index.d.ts.map +1 -0
  9. package/dist/ai/prompts/spec-creation.d.ts +7 -12
  10. package/dist/ai/prompts/spec-creation.d.ts.map +1 -1
  11. package/dist/ai/spec-creation.d.ts +27 -0
  12. package/dist/ai/spec-creation.d.ts.map +1 -0
  13. package/dist/analysis/deps/graph.d.ts +14 -14
  14. package/dist/analysis/deps/graph.d.ts.map +1 -1
  15. package/dist/analysis/deps/index.d.ts +6 -0
  16. package/dist/analysis/deps/index.d.ts.map +1 -0
  17. package/dist/analysis/deps/parse-imports.d.ts +1 -4
  18. package/dist/analysis/deps/parse-imports.d.ts.map +1 -1
  19. package/dist/analysis/diff/deep-diff.d.ts +17 -16
  20. package/dist/analysis/diff/deep-diff.d.ts.map +1 -1
  21. package/dist/analysis/diff/deep-diff.test.d.ts +5 -0
  22. package/dist/analysis/diff/deep-diff.test.d.ts.map +1 -0
  23. package/dist/analysis/diff/index.d.ts +6 -0
  24. package/dist/analysis/diff/index.d.ts.map +1 -0
  25. package/dist/analysis/diff/semantic.d.ts +6 -7
  26. package/dist/analysis/diff/semantic.d.ts.map +1 -1
  27. package/dist/analysis/example-scan.d.ts +3 -8
  28. package/dist/analysis/example-scan.d.ts.map +1 -1
  29. package/dist/analysis/example-scan.test.d.ts +7 -0
  30. package/dist/analysis/example-scan.test.d.ts.map +1 -0
  31. package/dist/analysis/feature-extractor.d.ts +25 -0
  32. package/dist/analysis/feature-extractor.d.ts.map +1 -0
  33. package/dist/analysis/feature-scan.d.ts +3 -8
  34. package/dist/analysis/feature-scan.d.ts.map +1 -1
  35. package/dist/analysis/feature-scan.test.d.ts +2 -0
  36. package/dist/analysis/feature-scan.test.d.ts.map +1 -0
  37. package/dist/analysis/grouping.d.ts +41 -42
  38. package/dist/analysis/grouping.d.ts.map +1 -1
  39. package/dist/analysis/impact/classifier.d.ts +9 -9
  40. package/dist/analysis/impact/classifier.d.ts.map +1 -1
  41. package/dist/analysis/impact/classifier.test.d.ts +5 -0
  42. package/dist/analysis/impact/classifier.test.d.ts.map +1 -0
  43. package/dist/analysis/impact/index.d.ts +9 -0
  44. package/dist/analysis/impact/index.d.ts.map +1 -0
  45. package/dist/analysis/impact/rules.d.ts +15 -15
  46. package/dist/analysis/impact/rules.d.ts.map +1 -1
  47. package/dist/analysis/impact/types.d.ts +73 -76
  48. package/dist/analysis/impact/types.d.ts.map +1 -1
  49. package/dist/analysis/index.d.ts +14 -0
  50. package/dist/analysis/index.d.ts.map +1 -0
  51. package/dist/analysis/snapshot/index.d.ts +9 -0
  52. package/dist/analysis/snapshot/index.d.ts.map +1 -0
  53. package/dist/analysis/snapshot/normalizer.d.ts +7 -10
  54. package/dist/analysis/snapshot/normalizer.d.ts.map +1 -1
  55. package/dist/analysis/snapshot/snapshot.d.ts +10 -9
  56. package/dist/analysis/snapshot/snapshot.d.ts.map +1 -1
  57. package/dist/analysis/snapshot/snapshot.test.d.ts +5 -0
  58. package/dist/analysis/snapshot/snapshot.test.d.ts.map +1 -0
  59. package/dist/analysis/snapshot/types.d.ts +58 -57
  60. package/dist/analysis/snapshot/types.d.ts.map +1 -1
  61. package/dist/analysis/spec-parser.d.ts +8 -7
  62. package/dist/analysis/spec-parser.d.ts.map +1 -1
  63. package/dist/analysis/spec-parsing-utils.d.ts +20 -11
  64. package/dist/analysis/spec-parsing-utils.d.ts.map +1 -1
  65. package/dist/analysis/spec-scan.d.ts +13 -13
  66. package/dist/analysis/spec-scan.d.ts.map +1 -1
  67. package/dist/analysis/spec-scan.test.d.ts +2 -0
  68. package/dist/analysis/spec-scan.test.d.ts.map +1 -0
  69. package/dist/analysis/utils/matchers.d.ts +39 -0
  70. package/dist/analysis/utils/matchers.d.ts.map +1 -0
  71. package/dist/analysis/utils/variables.d.ts +15 -0
  72. package/dist/analysis/utils/variables.d.ts.map +1 -0
  73. package/dist/analysis/validate/index.d.ts +5 -0
  74. package/dist/analysis/validate/index.d.ts.map +1 -0
  75. package/dist/analysis/validate/spec-structure.d.ts +15 -15
  76. package/dist/analysis/validate/spec-structure.d.ts.map +1 -1
  77. package/dist/analysis/validate/spec-structure.test.d.ts +2 -0
  78. package/dist/analysis/validate/spec-structure.test.d.ts.map +1 -0
  79. package/dist/formatter.d.ts +28 -28
  80. package/dist/formatter.d.ts.map +1 -1
  81. package/dist/formatters/index.d.ts +8 -0
  82. package/dist/formatters/index.d.ts.map +1 -0
  83. package/dist/formatters/spec-markdown.d.ts +13 -12
  84. package/dist/formatters/spec-markdown.d.ts.map +1 -1
  85. package/dist/formatters/spec-markdown.test.d.ts +5 -0
  86. package/dist/formatters/spec-markdown.test.d.ts.map +1 -0
  87. package/dist/formatters/spec-to-docblock.d.ts +4 -9
  88. package/dist/formatters/spec-to-docblock.d.ts.map +1 -1
  89. package/dist/index.d.ts +13 -42
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +4302 -38
  92. package/dist/node/index.js +4301 -0
  93. package/dist/templates/app-config.d.ts +2 -6
  94. package/dist/templates/app-config.d.ts.map +1 -1
  95. package/dist/templates/app-config.test.d.ts +2 -0
  96. package/dist/templates/app-config.test.d.ts.map +1 -0
  97. package/dist/templates/data-view.d.ts +2 -6
  98. package/dist/templates/data-view.d.ts.map +1 -1
  99. package/dist/templates/data-view.test.d.ts +2 -0
  100. package/dist/templates/data-view.test.d.ts.map +1 -0
  101. package/dist/templates/event.d.ts +6 -7
  102. package/dist/templates/event.d.ts.map +1 -1
  103. package/dist/templates/event.test.d.ts +2 -0
  104. package/dist/templates/event.test.d.ts.map +1 -0
  105. package/dist/templates/experiment.d.ts +2 -6
  106. package/dist/templates/experiment.d.ts.map +1 -1
  107. package/dist/templates/experiment.test.d.ts +2 -0
  108. package/dist/templates/experiment.test.d.ts.map +1 -0
  109. package/dist/templates/handler.d.ts +3 -6
  110. package/dist/templates/handler.d.ts.map +1 -1
  111. package/dist/templates/handler.test.d.ts +2 -0
  112. package/dist/templates/handler.test.d.ts.map +1 -0
  113. package/dist/templates/index.d.ts +18 -0
  114. package/dist/templates/index.d.ts.map +1 -0
  115. package/dist/templates/integration-utils.d.ts +13 -0
  116. package/dist/templates/integration-utils.d.ts.map +1 -0
  117. package/dist/templates/integration-utils.test.d.ts +2 -0
  118. package/dist/templates/integration-utils.test.d.ts.map +1 -0
  119. package/dist/templates/integration.d.ts +2 -6
  120. package/dist/templates/integration.d.ts.map +1 -1
  121. package/dist/templates/integration.test.d.ts +2 -0
  122. package/dist/templates/integration.test.d.ts.map +1 -0
  123. package/dist/templates/knowledge.d.ts +2 -6
  124. package/dist/templates/knowledge.d.ts.map +1 -1
  125. package/dist/templates/knowledge.test.d.ts +2 -0
  126. package/dist/templates/knowledge.test.d.ts.map +1 -0
  127. package/dist/templates/migration.d.ts +2 -6
  128. package/dist/templates/migration.d.ts.map +1 -1
  129. package/dist/templates/migration.test.d.ts +2 -0
  130. package/dist/templates/migration.test.d.ts.map +1 -0
  131. package/dist/templates/operation.d.ts +6 -7
  132. package/dist/templates/operation.d.ts.map +1 -1
  133. package/dist/templates/operation.test.d.ts +2 -0
  134. package/dist/templates/operation.test.d.ts.map +1 -0
  135. package/dist/templates/presentation.d.ts +6 -7
  136. package/dist/templates/presentation.d.ts.map +1 -1
  137. package/dist/templates/presentation.test.d.ts +2 -0
  138. package/dist/templates/presentation.test.d.ts.map +1 -0
  139. package/dist/templates/telemetry.d.ts +2 -6
  140. package/dist/templates/telemetry.d.ts.map +1 -1
  141. package/dist/templates/telemetry.test.d.ts +2 -0
  142. package/dist/templates/telemetry.test.d.ts.map +1 -0
  143. package/dist/templates/utils.d.ts +5 -8
  144. package/dist/templates/utils.d.ts.map +1 -1
  145. package/dist/templates/utils.test.d.ts +2 -0
  146. package/dist/templates/utils.test.d.ts.map +1 -0
  147. package/dist/templates/workflow-runner.d.ts +6 -13
  148. package/dist/templates/workflow-runner.d.ts.map +1 -1
  149. package/dist/templates/workflow-runner.test.d.ts +2 -0
  150. package/dist/templates/workflow-runner.test.d.ts.map +1 -0
  151. package/dist/templates/workflow.d.ts +6 -7
  152. package/dist/templates/workflow.d.ts.map +1 -1
  153. package/dist/templates/workflow.test.d.ts +2 -0
  154. package/dist/templates/workflow.test.d.ts.map +1 -0
  155. package/dist/types/analysis-types.d.ts +135 -137
  156. package/dist/types/analysis-types.d.ts.map +1 -1
  157. package/dist/types/generation-types.d.ts +36 -38
  158. package/dist/types/generation-types.d.ts.map +1 -1
  159. package/dist/types/index.d.ts +9 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/llm-types.d.ts +97 -97
  162. package/dist/types/llm-types.d.ts.map +1 -1
  163. package/dist/types/rulesync-types.d.ts +17 -19
  164. package/dist/types/rulesync-types.d.ts.map +1 -1
  165. package/dist/types/spec-types.d.ts +329 -330
  166. package/dist/types/spec-types.d.ts.map +1 -1
  167. package/package.json +20 -16
  168. package/dist/ai/prompts/code-generation.js +0 -134
  169. package/dist/ai/prompts/code-generation.js.map +0 -1
  170. package/dist/ai/prompts/spec-creation.js +0 -102
  171. package/dist/ai/prompts/spec-creation.js.map +0 -1
  172. package/dist/analysis/deps/graph.js +0 -85
  173. package/dist/analysis/deps/graph.js.map +0 -1
  174. package/dist/analysis/deps/parse-imports.js +0 -31
  175. package/dist/analysis/deps/parse-imports.js.map +0 -1
  176. package/dist/analysis/diff/deep-diff.js +0 -114
  177. package/dist/analysis/diff/deep-diff.js.map +0 -1
  178. package/dist/analysis/diff/semantic.js +0 -97
  179. package/dist/analysis/diff/semantic.js.map +0 -1
  180. package/dist/analysis/example-scan.js +0 -116
  181. package/dist/analysis/example-scan.js.map +0 -1
  182. package/dist/analysis/feature-extractor.js +0 -203
  183. package/dist/analysis/feature-extractor.js.map +0 -1
  184. package/dist/analysis/feature-scan.js +0 -56
  185. package/dist/analysis/feature-scan.js.map +0 -1
  186. package/dist/analysis/grouping.js +0 -115
  187. package/dist/analysis/grouping.js.map +0 -1
  188. package/dist/analysis/impact/classifier.js +0 -135
  189. package/dist/analysis/impact/classifier.js.map +0 -1
  190. package/dist/analysis/impact/index.js +0 -2
  191. package/dist/analysis/impact/rules.js +0 -154
  192. package/dist/analysis/impact/rules.js.map +0 -1
  193. package/dist/analysis/index.js +0 -18
  194. package/dist/analysis/snapshot/index.js +0 -2
  195. package/dist/analysis/snapshot/normalizer.js +0 -67
  196. package/dist/analysis/snapshot/normalizer.js.map +0 -1
  197. package/dist/analysis/snapshot/snapshot.js +0 -163
  198. package/dist/analysis/snapshot/snapshot.js.map +0 -1
  199. package/dist/analysis/spec-parser.js +0 -89
  200. package/dist/analysis/spec-parser.js.map +0 -1
  201. package/dist/analysis/spec-parsing-utils.js +0 -98
  202. package/dist/analysis/spec-parsing-utils.js.map +0 -1
  203. package/dist/analysis/spec-scan.js +0 -157
  204. package/dist/analysis/spec-scan.js.map +0 -1
  205. package/dist/analysis/utils/matchers.js +0 -77
  206. package/dist/analysis/utils/matchers.js.map +0 -1
  207. package/dist/analysis/utils/variables.js +0 -45
  208. package/dist/analysis/utils/variables.js.map +0 -1
  209. package/dist/analysis/validate/index.js +0 -1
  210. package/dist/analysis/validate/spec-structure.js +0 -475
  211. package/dist/analysis/validate/spec-structure.js.map +0 -1
  212. package/dist/formatter.js +0 -163
  213. package/dist/formatter.js.map +0 -1
  214. package/dist/formatters/index.js +0 -2
  215. package/dist/formatters/spec-markdown.js +0 -263
  216. package/dist/formatters/spec-markdown.js.map +0 -1
  217. package/dist/formatters/spec-to-docblock.js +0 -48
  218. package/dist/formatters/spec-to-docblock.js.map +0 -1
  219. package/dist/templates/app-config.js +0 -107
  220. package/dist/templates/app-config.js.map +0 -1
  221. package/dist/templates/data-view.js +0 -69
  222. package/dist/templates/data-view.js.map +0 -1
  223. package/dist/templates/event.js +0 -41
  224. package/dist/templates/event.js.map +0 -1
  225. package/dist/templates/experiment.js +0 -88
  226. package/dist/templates/experiment.js.map +0 -1
  227. package/dist/templates/handler.js +0 -96
  228. package/dist/templates/handler.js.map +0 -1
  229. package/dist/templates/integration-utils.js +0 -105
  230. package/dist/templates/integration-utils.js.map +0 -1
  231. package/dist/templates/integration.js +0 -62
  232. package/dist/templates/integration.js.map +0 -1
  233. package/dist/templates/knowledge.js +0 -69
  234. package/dist/templates/knowledge.js.map +0 -1
  235. package/dist/templates/migration.js +0 -61
  236. package/dist/templates/migration.js.map +0 -1
  237. package/dist/templates/operation.js +0 -101
  238. package/dist/templates/operation.js.map +0 -1
  239. package/dist/templates/presentation.js +0 -79
  240. package/dist/templates/presentation.js.map +0 -1
  241. package/dist/templates/telemetry.js +0 -90
  242. package/dist/templates/telemetry.js.map +0 -1
  243. package/dist/templates/utils.js +0 -39
  244. package/dist/templates/utils.js.map +0 -1
  245. package/dist/templates/workflow-runner.js +0 -49
  246. package/dist/templates/workflow-runner.js.map +0 -1
  247. package/dist/templates/workflow.js +0 -68
  248. package/dist/templates/workflow.js.map +0 -1
@@ -1,62 +0,0 @@
1
- import { toPascalCase } from "./utils.js";
2
- import { escape, renderByokSetup, renderConfigExample, renderConfigSchema, renderConstraints, renderProvides, renderRequires, renderSecretExample, renderSecretSchema, stabilityToEnum } from "./integration-utils.js";
3
-
4
- //#region src/templates/integration.ts
5
- function generateIntegrationSpec(data) {
6
- const specName = toPascalCase(data.name.split(".").pop() ?? "Integration");
7
- const varName = `${specName}IntegrationSpec`;
8
- const registerFn = `register${specName}Integration`;
9
- const supportedModes = data.supportedModes.length ? data.supportedModes : ["managed"];
10
- const supportedModesLine = supportedModes.map((mode) => `'${mode}'`).join(", ");
11
- const provides = renderProvides(data);
12
- const requires = renderRequires(data);
13
- const configSchema = renderConfigSchema(data.configFields);
14
- const configExample = renderConfigExample(data.configFields);
15
- const secretSchema = renderSecretSchema(data.secretFields);
16
- const secretExample = renderSecretExample(data.secretFields);
17
- const docsUrl = data.docsUrl ? ` docsUrl: '${escape(data.docsUrl)}',\n` : "";
18
- const constraints = renderConstraints(data.rateLimitRpm, data.rateLimitRph);
19
- const byokSetup = renderByokSetup(supportedModes, data.byokSetupInstructions, data.byokRequiredScopes);
20
- return `import { StabilityEnum, defineIntegration } from '@contractspec/lib.contracts';
21
- import type { IntegrationSpecRegistry } from '@contractspec/lib.contracts/integrations/spec';
22
-
23
- export const ${varName} = defineIntegration({
24
- meta: {
25
- key: '${escape(data.name)}',
26
- version: ${data.version},
27
- category: '${data.category}',
28
- displayName: '${escape(data.displayName)}',
29
- title: '${escape(data.title)}',
30
- description: '${escape(data.description)}',
31
- domain: '${escape(data.domain)}',
32
- owners: [${data.owners.map((owner) => `'${escape(owner)}'`).join(", ")}],
33
- tags: [${data.tags.map((tag) => `'${escape(tag)}'`).join(", ")}],
34
- stability: StabilityEnum.${stabilityToEnum(data.stability)},
35
- },
36
- supportedModes: [${supportedModesLine}],
37
- capabilities: {
38
- provides: [
39
- ${provides}
40
- ],
41
- ${requires.length > 0 ? `${requires}\n` : ""} },
42
- configSchema: {
43
- ${configSchema} example: ${configExample},
44
- },
45
- secretSchema: {
46
- ${secretSchema} example: ${secretExample},
47
- },
48
- ${docsUrl}${constraints}${byokSetup} healthCheck: {
49
- method: '${data.healthCheckMethod}',
50
- timeoutMs: ${data.healthCheckTimeoutMs ?? 5e3},
51
- },
52
- });
53
-
54
- export function ${registerFn}(registry: IntegrationSpecRegistry): IntegrationSpecRegistry {
55
- return registry.register(${varName});
56
- }
57
- `;
58
- }
59
-
60
- //#endregion
61
- export { generateIntegrationSpec };
62
- //# sourceMappingURL=integration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.js","names":[],"sources":["../../src/templates/integration.ts"],"sourcesContent":["import type { IntegrationSpecData } from '../types/spec-types';\nimport { toPascalCase } from './utils';\nimport {\n escape,\n renderByokSetup,\n renderConfigExample,\n renderConfigSchema,\n renderConstraints,\n renderProvides,\n renderRequires,\n renderSecretExample,\n renderSecretSchema,\n stabilityToEnum,\n} from './integration-utils';\n\nexport function generateIntegrationSpec(data: IntegrationSpecData): string {\n const specName = toPascalCase(data.name.split('.').pop() ?? 'Integration');\n const varName = `${specName}IntegrationSpec`;\n const registerFn = `register${specName}Integration`;\n\n const supportedModes = data.supportedModes.length\n ? data.supportedModes\n : ['managed'];\n const supportedModesLine = supportedModes\n .map((mode) => `'${mode}'`)\n .join(', ');\n\n const provides = renderProvides(data);\n const requires = renderRequires(data);\n\n const configSchema = renderConfigSchema(data.configFields);\n const configExample = renderConfigExample(data.configFields);\n const secretSchema = renderSecretSchema(data.secretFields);\n const secretExample = renderSecretExample(data.secretFields);\n const docsUrl = data.docsUrl ? ` docsUrl: '${escape(data.docsUrl)}',\\n` : '';\n const constraints = renderConstraints(data.rateLimitRpm, data.rateLimitRph);\n const byokSetup = renderByokSetup(\n supportedModes,\n data.byokSetupInstructions,\n data.byokRequiredScopes\n );\n\n return `import { StabilityEnum, defineIntegration } from '@contractspec/lib.contracts';\nimport type { IntegrationSpecRegistry } from '@contractspec/lib.contracts/integrations/spec';\n\nexport const ${varName} = defineIntegration({\n meta: {\n key: '${escape(data.name)}',\n version: ${data.version},\n category: '${data.category}',\n displayName: '${escape(data.displayName)}',\n title: '${escape(data.title)}',\n description: '${escape(data.description)}',\n domain: '${escape(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escape(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escape(tag)}'`).join(', ')}],\n stability: StabilityEnum.${stabilityToEnum(data.stability)},\n },\n supportedModes: [${supportedModesLine}],\n capabilities: {\n provides: [\n${provides}\n ],\n${requires.length > 0 ? `${requires}\\n` : ''} },\n configSchema: {\n${configSchema} example: ${configExample},\n },\n secretSchema: {\n${secretSchema} example: ${secretExample},\n },\n${docsUrl}${constraints}${byokSetup} healthCheck: {\n method: '${data.healthCheckMethod}',\n timeoutMs: ${data.healthCheckTimeoutMs ?? 5000},\n },\n});\n\nexport function ${registerFn}(registry: IntegrationSpecRegistry): IntegrationSpecRegistry {\n return registry.register(${varName});\n}\n`;\n}\n"],"mappings":";;;;AAeA,SAAgB,wBAAwB,MAAmC;CACzE,MAAM,WAAW,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,cAAc;CAC1E,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,aAAa,WAAW,SAAS;CAEvC,MAAM,iBAAiB,KAAK,eAAe,SACvC,KAAK,iBACL,CAAC,UAAU;CACf,MAAM,qBAAqB,eACxB,KAAK,SAAS,IAAI,KAAK,GAAG,CAC1B,KAAK,KAAK;CAEb,MAAM,WAAW,eAAe,KAAK;CACrC,MAAM,WAAW,eAAe,KAAK;CAErC,MAAM,eAAe,mBAAmB,KAAK,aAAa;CAC1D,MAAM,gBAAgB,oBAAoB,KAAK,aAAa;CAC5D,MAAM,eAAe,mBAAmB,KAAK,aAAa;CAC1D,MAAM,gBAAgB,oBAAoB,KAAK,aAAa;CAC5D,MAAM,UAAU,KAAK,UAAU,eAAe,OAAO,KAAK,QAAQ,CAAC,QAAQ;CAC3E,MAAM,cAAc,kBAAkB,KAAK,cAAc,KAAK,aAAa;CAC3E,MAAM,YAAY,gBAChB,gBACA,KAAK,uBACL,KAAK,mBACN;AAED,QAAO;;;eAGM,QAAQ;;YAEX,OAAO,KAAK,KAAK,CAAC;eACf,KAAK,QAAQ;iBACX,KAAK,SAAS;oBACX,OAAO,KAAK,YAAY,CAAC;cAC/B,OAAO,KAAK,MAAM,CAAC;oBACb,OAAO,KAAK,YAAY,CAAC;eAC9B,OAAO,KAAK,OAAO,CAAC;eACpB,KAAK,OAAO,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aAC9D,KAAK,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;+BACpC,gBAAgB,KAAK,UAAU,CAAC;;qBAE1C,mBAAmB;;;EAGtC,SAAS;;EAET,SAAS,SAAS,IAAI,GAAG,SAAS,MAAM,GAAG;;EAE3C,aAAa,eAAe,cAAc;;;EAG1C,aAAa,eAAe,cAAc;;EAE1C,UAAU,cAAc,UAAU;eACrB,KAAK,kBAAkB;iBACrB,KAAK,wBAAwB,IAAK;;;;kBAIjC,WAAW;6BACA,QAAQ"}
@@ -1,69 +0,0 @@
1
- import { escapeString, toPascalCase } from "./utils.js";
2
-
3
- //#region src/templates/knowledge.ts
4
- function generateKnowledgeSpaceSpec(data) {
5
- const specName = toPascalCase(data.name.split(".").pop() ?? "KnowledgeSpace");
6
- const varName = `${specName}KnowledgeSpace`;
7
- const registerFn = `register${specName}KnowledgeSpace`;
8
- const retention = renderRetention(data);
9
- const access = renderAccess(data);
10
- const indexing = renderIndexing(data);
11
- const policyComment = data.policyName && !data.policyVersion ? ` // defaults to latest version` : "";
12
- return `import { StabilityEnum } from '@contractspec/lib.contracts/ownership';
13
- import type { KnowledgeSpaceSpec } from '@contractspec/lib.contracts/knowledge/spec';
14
- import type { KnowledgeSpaceRegistry } from '@contractspec/lib.contracts/knowledge/spec';
15
-
16
- export const ${varName}: KnowledgeSpaceSpec = {
17
- meta: {
18
- key: '${escapeString(data.name)}',
19
- version: ${data.version},
20
- category: '${data.category}',
21
- displayName: '${escape(data.displayName)}',
22
- title: '${escape(data.title)}',
23
- description: '${escape(data.description)}',
24
- domain: '${escape(data.domain)}',
25
- owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(", ")}],
26
- tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(", ")}],
27
- stability: StabilityEnum.${stabilityToEnum(data.stability)},
28
- },
29
- retention: ${retention},
30
- access: {
31
- ${access}${data.policyName ? ` policy: { name: '${escapeString(data.policyName)}',${data.policyVersion ? ` version: ${data.policyVersion}` : ""} },${policyComment}\n` : ""} },
32
- ${indexing} description: '${escape(data.description || data.displayName)}',
33
- };
34
-
35
- export function ${registerFn}(registry: KnowledgeSpaceRegistry): KnowledgeSpaceRegistry {
36
- return registry.register(${varName});
37
- }
38
- `;
39
- }
40
- function renderRetention(data) {
41
- return `{ ttlDays: ${data.retention.ttlDays === null ? "null" : typeof data.retention.ttlDays === "number" ? String(data.retention.ttlDays) : "null"}${typeof data.retention.archiveAfterDays === "number" ? `, archiveAfterDays: ${data.retention.archiveAfterDays}` : ""} }`;
42
- }
43
- function renderAccess(data) {
44
- return `${` trustLevel: '${data.trustLevel}',\n`}${` automationWritable: ${data.automationWritable},\n`}`;
45
- }
46
- function renderIndexing(data) {
47
- const entries = [];
48
- if (data.embeddingModel) entries.push(` embeddingModel: '${escape(data.embeddingModel)}'`);
49
- if (typeof data.chunkSize === "number") entries.push(` chunkSize: ${data.chunkSize}`);
50
- if (data.vectorDbIntegration) entries.push(` vectorDbIntegration: '${escape(data.vectorDbIntegration)}'`);
51
- if (entries.length === 0) return "";
52
- return ` indexing: {\n${entries.join(",\n")}\n },\n`;
53
- }
54
- function stabilityToEnum(stability) {
55
- switch (stability) {
56
- case "beta": return "Beta";
57
- case "stable": return "Stable";
58
- case "deprecated": return "Deprecated";
59
- case "experimental":
60
- default: return "Experimental";
61
- }
62
- }
63
- function escape(value) {
64
- return value.replace(/`/g, "\\`").replace(/'/g, "\\'");
65
- }
66
-
67
- //#endregion
68
- export { generateKnowledgeSpaceSpec };
69
- //# sourceMappingURL=knowledge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge.js","names":[],"sources":["../../src/templates/knowledge.ts"],"sourcesContent":["import type { KnowledgeSpaceSpecData, Stability } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\nexport function generateKnowledgeSpaceSpec(\n data: KnowledgeSpaceSpecData\n): string {\n const specName = toPascalCase(data.name.split('.').pop() ?? 'KnowledgeSpace');\n const varName = `${specName}KnowledgeSpace`;\n const registerFn = `register${specName}KnowledgeSpace`;\n\n const retention = renderRetention(data);\n const access = renderAccess(data);\n const indexing = renderIndexing(data);\n const policyComment =\n data.policyName && !data.policyVersion\n ? ` // defaults to latest version`\n : '';\n\n return `import { StabilityEnum } from '@contractspec/lib.contracts/ownership';\nimport type { KnowledgeSpaceSpec } from '@contractspec/lib.contracts/knowledge/spec';\nimport type { KnowledgeSpaceRegistry } from '@contractspec/lib.contracts/knowledge/spec';\n\nexport const ${varName}: KnowledgeSpaceSpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n category: '${data.category}',\n displayName: '${escape(data.displayName)}',\n title: '${escape(data.title)}',\n description: '${escape(data.description)}',\n domain: '${escape(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: StabilityEnum.${stabilityToEnum(data.stability)},\n },\n retention: ${retention},\n access: {\n${access}${data.policyName ? ` policy: { name: '${escapeString(data.policyName)}',${data.policyVersion ? ` version: ${data.policyVersion}` : ''} },${policyComment}\\n` : ''} },\n${indexing} description: '${escape(data.description || data.displayName)}',\n};\n\nexport function ${registerFn}(registry: KnowledgeSpaceRegistry): KnowledgeSpaceRegistry {\n return registry.register(${varName});\n}\n`;\n}\n\nfunction renderRetention(data: KnowledgeSpaceSpecData): string {\n const ttl =\n data.retention.ttlDays === null\n ? 'null'\n : typeof data.retention.ttlDays === 'number'\n ? String(data.retention.ttlDays)\n : 'null';\n const archive =\n typeof data.retention.archiveAfterDays === 'number'\n ? `, archiveAfterDays: ${data.retention.archiveAfterDays}`\n : '';\n return `{ ttlDays: ${ttl}${archive} }`;\n}\n\nfunction renderAccess(data: KnowledgeSpaceSpecData): string {\n const trustLine = ` trustLevel: '${data.trustLevel}',\\n`;\n const automationLine = ` automationWritable: ${data.automationWritable},\\n`;\n return `${trustLine}${automationLine}`;\n}\n\nfunction renderIndexing(data: KnowledgeSpaceSpecData): string {\n const entries: string[] = [];\n if (data.embeddingModel) {\n entries.push(` embeddingModel: '${escape(data.embeddingModel)}'`);\n }\n if (typeof data.chunkSize === 'number') {\n entries.push(` chunkSize: ${data.chunkSize}`);\n }\n if (data.vectorDbIntegration) {\n entries.push(\n ` vectorDbIntegration: '${escape(data.vectorDbIntegration)}'`\n );\n }\n if (entries.length === 0) {\n return '';\n }\n return ` indexing: {\\n${entries.join(',\\n')}\\n },\\n`;\n}\n\nfunction stabilityToEnum(stability: Stability): string {\n switch (stability) {\n case 'beta':\n return 'Beta';\n case 'stable':\n return 'Stable';\n case 'deprecated':\n return 'Deprecated';\n case 'experimental':\n default:\n return 'Experimental';\n }\n}\n\nfunction escape(value: string): string {\n return value.replace(/`/g, '\\\\`').replace(/'/g, \"\\\\'\");\n}\n"],"mappings":";;;AAGA,SAAgB,2BACd,MACQ;CACR,MAAM,WAAW,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,iBAAiB;CAC7E,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,aAAa,WAAW,SAAS;CAEvC,MAAM,YAAY,gBAAgB,KAAK;CACvC,MAAM,SAAS,aAAa,KAAK;CACjC,MAAM,WAAW,eAAe,KAAK;CACrC,MAAM,gBACJ,KAAK,cAAc,CAAC,KAAK,gBACrB,mCACA;AAEN,QAAO;;;;eAIM,QAAQ;;YAEX,aAAa,KAAK,KAAK,CAAC;eACrB,KAAK,QAAQ;iBACX,KAAK,SAAS;oBACX,OAAO,KAAK,YAAY,CAAC;cAC/B,OAAO,KAAK,MAAM,CAAC;oBACb,OAAO,KAAK,YAAY,CAAC;eAC9B,OAAO,KAAK,OAAO,CAAC;eACpB,KAAK,OAAO,KAAK,UAAU,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aACpE,KAAK,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;+BAC1C,gBAAgB,KAAK,UAAU,CAAC;;eAEhD,UAAU;;EAEvB,SAAS,KAAK,aAAa,wBAAwB,aAAa,KAAK,WAAW,CAAC,IAAI,KAAK,gBAAgB,aAAa,KAAK,kBAAkB,GAAG,KAAK,cAAc,MAAM,GAAG;EAC7K,SAAS,kBAAkB,OAAO,KAAK,eAAe,KAAK,YAAY,CAAC;;;kBAGxD,WAAW;6BACA,QAAQ;;;;AAKrC,SAAS,gBAAgB,MAAsC;AAW7D,QAAO,cATL,KAAK,UAAU,YAAY,OACvB,SACA,OAAO,KAAK,UAAU,YAAY,WAChC,OAAO,KAAK,UAAU,QAAQ,GAC9B,SAEN,OAAO,KAAK,UAAU,qBAAqB,WACvC,uBAAuB,KAAK,UAAU,qBACtC,GAC6B;;AAGrC,SAAS,aAAa,MAAsC;AAG1D,QAAO,GAFW,oBAAoB,KAAK,WAAW,QAC/B,2BAA2B,KAAK,mBAAmB;;AAI5E,SAAS,eAAe,MAAsC;CAC5D,MAAM,UAAoB,EAAE;AAC5B,KAAI,KAAK,eACP,SAAQ,KAAK,wBAAwB,OAAO,KAAK,eAAe,CAAC,GAAG;AAEtE,KAAI,OAAO,KAAK,cAAc,SAC5B,SAAQ,KAAK,kBAAkB,KAAK,YAAY;AAElD,KAAI,KAAK,oBACP,SAAQ,KACN,6BAA6B,OAAO,KAAK,oBAAoB,CAAC,GAC/D;AAEH,KAAI,QAAQ,WAAW,EACrB,QAAO;AAET,QAAO,kBAAkB,QAAQ,KAAK,MAAM,CAAC;;AAG/C,SAAS,gBAAgB,WAA8B;AACrD,SAAQ,WAAR;EACE,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,aACH,QAAO;EACT,KAAK;EACL,QACE,QAAO;;;AAIb,SAAS,OAAO,OAAuB;AACrC,QAAO,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,MAAM,MAAM"}
@@ -1,61 +0,0 @@
1
- import { escapeString, toPascalCase } from "./utils.js";
2
-
3
- //#region src/templates/migration.ts
4
- function generateMigrationSpec(data) {
5
- const migrationVar = `${toPascalCase(data.name.split(".").pop() ?? "Migration")}Migration`;
6
- const dependencies = data.dependencies.length > 0 ? `dependencies: [${data.dependencies.map((dep) => `'${escapeString(dep)}'`).join(", ")}],` : "";
7
- return `import type { MigrationSpec } from '@contractspec/lib.contracts/migrations';
8
-
9
- export const ${migrationVar}: MigrationSpec = {
10
- meta: {
11
- key: '${escapeString(data.name)}',
12
- version: ${data.version},
13
- title: '${escape(data.title)}',
14
- description: '${escape(data.description ?? "")}',
15
- domain: '${escape(data.domain)}',
16
- owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(", ")}],
17
- tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(", ")}],
18
- stability: '${data.stability}',
19
- },
20
- plan: {
21
- up: [
22
- ${renderSteps(data.up)}
23
- ],${data.down && data.down.length ? `
24
- down: [
25
- ${renderSteps(data.down)}
26
- ],` : ""}
27
- },
28
- ${dependencies}
29
- };
30
- `;
31
- }
32
- function renderSteps(steps) {
33
- return steps.map((step) => {
34
- const description = step.description ? `description: '${escape(step.description)}',` : "";
35
- switch (step.kind) {
36
- case "schema": return ` {
37
- kind: 'schema',
38
- ${description}
39
- sql: \`${escape(step.sql ?? "")}\`,
40
- }`;
41
- case "data": return ` {
42
- kind: 'data',
43
- ${description}
44
- script: \`${escape(step.script ?? "")}\`,
45
- }`;
46
- case "validation":
47
- default: return ` {
48
- kind: 'validation',
49
- ${description}
50
- assertion: \`${escape(step.assertion ?? "")}\`,
51
- }`;
52
- }
53
- }).join(",\n");
54
- }
55
- function escape(value) {
56
- return value.replace(/`/g, "\\`").replace(/'/g, "\\'");
57
- }
58
-
59
- //#endregion
60
- export { generateMigrationSpec };
61
- //# sourceMappingURL=migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migration.js","names":[],"sources":["../../src/templates/migration.ts"],"sourcesContent":["import type { MigrationSpecData } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\nexport function generateMigrationSpec(data: MigrationSpecData): string {\n const specName = toPascalCase(data.name.split('.').pop() ?? 'Migration');\n const migrationVar = `${specName}Migration`;\n\n const dependencies =\n data.dependencies.length > 0\n ? `dependencies: [${data.dependencies\n .map((dep) => `'${escapeString(dep)}'`)\n .join(', ')}],`\n : '';\n\n return `import type { MigrationSpec } from '@contractspec/lib.contracts/migrations';\n\nexport const ${migrationVar}: MigrationSpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n title: '${escape(data.title)}',\n description: '${escape(data.description ?? '')}',\n domain: '${escape(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: '${data.stability}',\n },\n plan: {\n up: [\n${renderSteps(data.up)}\n ],${\n data.down && data.down.length\n ? `\n down: [\n${renderSteps(data.down)}\n ],`\n : ''\n }\n },\n ${dependencies}\n};\n`;\n}\n\nfunction renderSteps(steps: MigrationSpecData['up']) {\n return steps\n .map((step) => {\n const description = step.description\n ? `description: '${escape(step.description)}',`\n : '';\n switch (step.kind) {\n case 'schema':\n return ` {\n kind: 'schema',\n ${description}\n sql: \\`${escape(step.sql ?? '')}\\`,\n }`;\n case 'data':\n return ` {\n kind: 'data',\n ${description}\n script: \\`${escape(step.script ?? '')}\\`,\n }`;\n case 'validation':\n default:\n return ` {\n kind: 'validation',\n ${description}\n assertion: \\`${escape(step.assertion ?? '')}\\`,\n }`;\n }\n })\n .join(',\\n');\n}\n\nfunction escape(value: string): string {\n return value.replace(/`/g, '\\\\`').replace(/'/g, \"\\\\'\");\n}\n"],"mappings":";;;AAGA,SAAgB,sBAAsB,MAAiC;CAErE,MAAM,eAAe,GADJ,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,YAAY,CACvC;CAEjC,MAAM,eACJ,KAAK,aAAa,SAAS,IACvB,kBAAkB,KAAK,aACpB,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CACtC,KAAK,KAAK,CAAC,MACd;AAEN,QAAO;;eAEM,aAAa;;YAEhB,aAAa,KAAK,KAAK,CAAC;eACrB,KAAK,QAAQ;cACd,OAAO,KAAK,MAAM,CAAC;oBACb,OAAO,KAAK,eAAe,GAAG,CAAC;eACpC,OAAO,KAAK,OAAO,CAAC;eACpB,KAAK,OAAO,KAAK,UAAU,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aACpE,KAAK,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;kBACvD,KAAK,UAAU;;;;EAI/B,YAAY,KAAK,GAAG,CAAC;QAEjB,KAAK,QAAQ,KAAK,KAAK,SACnB;;EAER,YAAY,KAAK,KAAK,CAAC;UAEf,GACL;;IAED,aAAa;;;;AAKjB,SAAS,YAAY,OAAgC;AACnD,QAAO,MACJ,KAAK,SAAS;EACb,MAAM,cAAc,KAAK,cACrB,iBAAiB,OAAO,KAAK,YAAY,CAAC,MAC1C;AACJ,UAAQ,KAAK,MAAb;GACE,KAAK,SACH,QAAO;;UAEP,YAAY;iBACL,OAAO,KAAK,OAAO,GAAG,CAAC;;GAEhC,KAAK,OACH,QAAO;;UAEP,YAAY;oBACF,OAAO,KAAK,UAAU,GAAG,CAAC;;GAEtC,KAAK;GACL,QACE,QAAO;;UAEP,YAAY;uBACC,OAAO,KAAK,aAAa,GAAG,CAAC;;;GAG9C,CACD,KAAK,MAAM;;AAGhB,SAAS,OAAO,OAAuB;AACrC,QAAO,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,MAAM,MAAM"}
@@ -1,101 +0,0 @@
1
- import { capitalize, toPascalCase } from "./utils.js";
2
-
3
- //#region src/templates/operation.ts
4
- /**
5
- * Generate operation spec TypeScript code.
6
- */
7
- function generateOperationSpec(data) {
8
- const { name, version, kind, description, goal, context, stability, owners, tags, auth, flags } = data;
9
- const specVarName = toPascalCase(name.split(".").pop() ?? "Unknown") + "Spec";
10
- const inputSchemaName = specVarName.replace("Spec", "Input");
11
- const outputSchemaName = specVarName.replace("Spec", "Output");
12
- return `import { define${capitalize(kind)} } from '@contractspec/lib.contracts';
13
- import { ScalarTypeEnum, SchemaModel } from '@contractspec/lib.schema';
14
-
15
- // TODO: Define input schema
16
- export const ${inputSchemaName} = new SchemaModel({
17
- name: '${inputSchemaName}',
18
- description: 'Input for ${name}',
19
- fields: {
20
- // Add your fields here
21
- // example: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
22
- },
23
- });
24
-
25
- // TODO: Define output schema
26
- export const ${outputSchemaName} = new SchemaModel({
27
- name: '${outputSchemaName}',
28
- description: 'Output for ${name}',
29
- fields: {
30
- // Add your fields here
31
- ok: { type: ScalarTypeEnum.Boolean(), isOptional: false },
32
- },
33
- });
34
-
35
- export const ${specVarName} = define${capitalize(kind)}({
36
- meta: {
37
- key: '${name}',
38
- version: ${version},
39
- stability: '${stability}',
40
- owners: [${owners.map((o) => `'${o}'`).join(", ")}],
41
- tags: [${tags.map((t) => `'${t}'`).join(", ")}],
42
- description: '${description}',
43
- goal: '${goal}',
44
- context: '${context}',
45
- },
46
-
47
- io: {
48
- input: ${inputSchemaName},
49
- output: ${outputSchemaName},
50
- errors: {
51
- // Define possible errors
52
- // EXAMPLE_ERROR: {
53
- // description: 'Example error description',
54
- // http: 400,
55
- // when: 'When this error occurs',
56
- // },
57
- },
58
- },
59
-
60
- policy: {
61
- auth: '${auth}',
62
- ${flags.length > 0 ? `flags: [${flags.map((f) => `'${f}'`).join(", ")}],` : "// flags: [],"}
63
- },
64
-
65
- sideEffects: {
66
- ${data.emitsEvents ? "emits: [\n // Define events to emit\n // { ref: SomeEventSpec, when: 'always' }\n ]," : "// emits: [],"}
67
- analytics: [
68
- // Define analytics events
69
- ],
70
- },
71
-
72
- transport: {
73
- rest: { method: '${kind === "command" ? "POST" : "GET"}' },
74
- gql: { field: '${name.replace(/\./g, "_")}' },
75
- mcp: { toolName: '${name}.v${version}' },
76
- },
77
-
78
- acceptance: {
79
- scenarios: [
80
- {
81
- name: 'Happy path',
82
- given: ['preconditions'],
83
- when: ['action taken'],
84
- then: ['expected outcome'],
85
- },
86
- ],
87
- examples: [
88
- {
89
- name: 'Example usage',
90
- input: { /* example input */ },
91
- output: { ok: true },
92
- },
93
- ],
94
- },
95
- });
96
- `;
97
- }
98
-
99
- //#endregion
100
- export { generateOperationSpec };
101
- //# sourceMappingURL=operation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation.js","names":[],"sources":["../../src/templates/operation.ts"],"sourcesContent":["/**\n * Operation spec template generation.\n * Extracted from cli-contractspec/src/templates/operation.template.ts\n */\n\nimport type { OperationSpecData } from '../types/spec-types';\nimport { toPascalCase, capitalize } from './utils';\n\n/**\n * Generate operation spec TypeScript code.\n */\nexport function generateOperationSpec(data: OperationSpecData): string {\n const {\n name,\n version,\n kind,\n description,\n goal,\n context,\n stability,\n owners,\n tags,\n auth,\n flags,\n } = data;\n\n const specVarName = toPascalCase(name.split('.').pop() ?? 'Unknown') + 'Spec';\n const inputSchemaName = specVarName.replace('Spec', 'Input');\n const outputSchemaName = specVarName.replace('Spec', 'Output');\n\n return `import { define${capitalize(kind)} } from '@contractspec/lib.contracts';\nimport { ScalarTypeEnum, SchemaModel } from '@contractspec/lib.schema';\n\n// TODO: Define input schema\nexport const ${inputSchemaName} = new SchemaModel({\n name: '${inputSchemaName}',\n description: 'Input for ${name}',\n fields: {\n // Add your fields here\n // example: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },\n },\n});\n\n// TODO: Define output schema\nexport const ${outputSchemaName} = new SchemaModel({\n name: '${outputSchemaName}',\n description: 'Output for ${name}',\n fields: {\n // Add your fields here\n ok: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n },\n});\n\nexport const ${specVarName} = define${capitalize(kind)}({\n meta: {\n key: '${name}',\n version: ${version},\n stability: '${stability}',\n owners: [${owners.map((o) => `'${o}'`).join(', ')}],\n tags: [${tags.map((t) => `'${t}'`).join(', ')}],\n description: '${description}',\n goal: '${goal}',\n context: '${context}',\n },\n\n io: {\n input: ${inputSchemaName},\n output: ${outputSchemaName},\n errors: {\n // Define possible errors\n // EXAMPLE_ERROR: {\n // description: 'Example error description',\n // http: 400,\n // when: 'When this error occurs',\n // },\n },\n },\n\n policy: {\n auth: '${auth}',\n ${flags.length > 0 ? `flags: [${flags.map((f) => `'${f}'`).join(', ')}],` : '// flags: [],'}\n },\n\n sideEffects: {\n ${data.emitsEvents ? \"emits: [\\n // Define events to emit\\n // { ref: SomeEventSpec, when: 'always' }\\n ],\" : '// emits: [],'}\n analytics: [\n // Define analytics events\n ],\n },\n\n transport: {\n rest: { method: '${kind === 'command' ? 'POST' : 'GET'}' },\n gql: { field: '${name.replace(/\\./g, '_')}' },\n mcp: { toolName: '${name}.v${version}' },\n },\n\n acceptance: {\n scenarios: [\n {\n name: 'Happy path',\n given: ['preconditions'],\n when: ['action taken'],\n then: ['expected outcome'],\n },\n ],\n examples: [\n {\n name: 'Example usage',\n input: { /* example input */ },\n output: { ok: true },\n },\n ],\n },\n});\n`;\n}\n"],"mappings":";;;;;;AAWA,SAAgB,sBAAsB,MAAiC;CACrE,MAAM,EACJ,MACA,SACA,MACA,aACA,MACA,SACA,WACA,QACA,MACA,MACA,UACE;CAEJ,MAAM,cAAc,aAAa,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,UAAU,GAAG;CACvE,MAAM,kBAAkB,YAAY,QAAQ,QAAQ,QAAQ;CAC5D,MAAM,mBAAmB,YAAY,QAAQ,QAAQ,SAAS;AAE9D,QAAO,kBAAkB,WAAW,KAAK,CAAC;;;;eAI7B,gBAAgB;WACpB,gBAAgB;4BACC,KAAK;;;;;;;;eAQlB,iBAAiB;WACrB,iBAAiB;6BACC,KAAK;;;;;;;eAOnB,YAAY,WAAW,WAAW,KAAK,CAAC;;YAE3C,KAAK;eACF,QAAQ;kBACL,UAAU;eACb,OAAO,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;aACzC,KAAK,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;oBAC9B,YAAY;aACnB,KAAK;gBACF,QAAQ;;;;aAIX,gBAAgB;cACf,iBAAiB;;;;;;;;;;;;aAYlB,KAAK;MACZ,MAAM,SAAS,IAAI,WAAW,MAAM,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,gBAAgB;;;;MAI1F,KAAK,cAAc,sGAAsG,gBAAgB;;;;;;;uBAOxH,SAAS,YAAY,SAAS,MAAM;qBACtC,KAAK,QAAQ,OAAO,IAAI,CAAC;wBACtB,KAAK,IAAI,QAAQ"}
@@ -1,79 +0,0 @@
1
- import { toPascalCase } from "./utils.js";
2
-
3
- //#region src/templates/presentation.ts
4
- /**
5
- * Generate presentation spec TypeScript code.
6
- */
7
- function generatePresentationSpec(data) {
8
- const { name, version, description, stability, owners, tags, presentationKind } = data;
9
- const varName = toPascalCase(name.replace(/\./g, "_")) + "Presentation";
10
- let contentBlock = "";
11
- switch (presentationKind) {
12
- case "web_component":
13
- contentBlock = ` content: {
14
- kind: 'web_component',
15
- framework: 'react',
16
- componentKey: '${name.replace(/\./g, "_")}',
17
- props: new SchemaModel({
18
- name: '${varName}Props',
19
- description: 'Props for ${name}',
20
- fields: {
21
- // TODO: Define component props
22
- },
23
- }),
24
- analytics: [
25
- // TODO: Define analytics events
26
- ],
27
- },`;
28
- break;
29
- case "markdown":
30
- contentBlock = ` content: {
31
- kind: 'markdown',
32
- content: \`
33
- # ${description}
34
-
35
- TODO: Add markdown content here
36
- \`,
37
- // Or use resourceUri: 'feature://${name}/guide.md'
38
- },`;
39
- break;
40
- case "data":
41
- contentBlock = ` content: {
42
- kind: 'data',
43
- mimeType: 'application/json',
44
- model: new SchemaModel({
45
- name: '${varName}Data',
46
- description: 'Data structure for ${name}',
47
- fields: {
48
- // TODO: Define data structure
49
- },
50
- }),
51
- },`;
52
- break;
53
- }
54
- return `import type { PresentationSpec } from '@contractspec/lib.contracts/presentations';
55
- import { SchemaModel, ScalarTypeEnum } from '@contractspec/lib.schema';
56
-
57
- export const ${varName}: PresentationSpec = {
58
- meta: {
59
- key: '${name}',
60
- version: ${version},
61
- stability: '${stability}',
62
- owners: [${owners.map((o) => `'${o}'`).join(", ")}],
63
- tags: [${tags.map((t) => `'${t}'`).join(", ")}],
64
- description: '${description}',
65
- },
66
-
67
- policy: {
68
- // flags: [],
69
- // pii: [],
70
- },
71
-
72
- ${contentBlock}
73
- };
74
- `;
75
- }
76
-
77
- //#endregion
78
- export { generatePresentationSpec };
79
- //# sourceMappingURL=presentation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"presentation.js","names":[],"sources":["../../src/templates/presentation.ts"],"sourcesContent":["/**\n * Presentation spec template generation.\n * Extracted from cli-contractspec/src/templates/presentation.template.ts\n */\n\nimport type { PresentationSpecData } from '../types/spec-types';\nimport { toPascalCase } from './utils';\n\n/**\n * Generate presentation spec TypeScript code.\n */\nexport function generatePresentationSpec(data: PresentationSpecData): string {\n const {\n name,\n version,\n description,\n stability,\n owners,\n tags,\n presentationKind,\n } = data;\n\n const varName = toPascalCase(name.replace(/\\./g, '_')) + 'Presentation';\n\n let contentBlock = '';\n\n switch (presentationKind) {\n case 'web_component':\n contentBlock = ` content: {\n kind: 'web_component',\n framework: 'react',\n componentKey: '${name.replace(/\\./g, '_')}',\n props: new SchemaModel({\n name: '${varName}Props',\n description: 'Props for ${name}',\n fields: {\n // TODO: Define component props\n },\n }),\n analytics: [\n // TODO: Define analytics events\n ],\n },`;\n break;\n\n case 'markdown':\n contentBlock = ` content: {\n kind: 'markdown',\n content: \\`\n# ${description}\n\nTODO: Add markdown content here\n \\`,\n // Or use resourceUri: 'feature://${name}/guide.md'\n },`;\n break;\n\n case 'data':\n contentBlock = ` content: {\n kind: 'data',\n mimeType: 'application/json',\n model: new SchemaModel({\n name: '${varName}Data',\n description: 'Data structure for ${name}',\n fields: {\n // TODO: Define data structure\n },\n }),\n },`;\n break;\n }\n\n return `import type { PresentationSpec } from '@contractspec/lib.contracts/presentations';\nimport { SchemaModel, ScalarTypeEnum } from '@contractspec/lib.schema';\n\nexport const ${varName}: PresentationSpec = {\n meta: {\n key: '${name}',\n version: ${version},\n stability: '${stability}',\n owners: [${owners.map((o) => `'${o}'`).join(', ')}],\n tags: [${tags.map((t) => `'${t}'`).join(', ')}],\n description: '${description}',\n },\n \n policy: {\n // flags: [],\n // pii: [],\n },\n \n${contentBlock}\n};\n`;\n}\n"],"mappings":";;;;;;AAWA,SAAgB,yBAAyB,MAAoC;CAC3E,MAAM,EACJ,MACA,SACA,aACA,WACA,QACA,MACA,qBACE;CAEJ,MAAM,UAAU,aAAa,KAAK,QAAQ,OAAO,IAAI,CAAC,GAAG;CAEzD,IAAI,eAAe;AAEnB,SAAQ,kBAAR;EACE,KAAK;AACH,kBAAe;;;qBAGA,KAAK,QAAQ,OAAO,IAAI,CAAC;;eAE/B,QAAQ;gCACS,KAAK;;;;;;;;;AAS/B;EAEF,KAAK;AACH,kBAAe;;;IAGjB,YAAY;;;;wCAIwB,KAAK;;AAEvC;EAEF,KAAK;AACH,kBAAe;;;;eAIN,QAAQ;yCACkB,KAAK;;;;;;AAMxC;;AAGJ,QAAO;;;eAGM,QAAQ;;YAEX,KAAK;eACF,QAAQ;kBACL,UAAU;eACb,OAAO,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;aACzC,KAAK,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;oBAC9B,YAAY;;;;;;;;EAQ9B,aAAa"}
@@ -1,90 +0,0 @@
1
- import { toPascalCase } from "./utils.js";
2
-
3
- //#region src/templates/telemetry.ts
4
- function generateTelemetrySpec(data) {
5
- const specVar = toPascalCase(data.name.split(".").pop() ?? "Telemetry") + "Telemetry";
6
- const providers = data.providers?.length ? `providers: [
7
- ${data.providers.map((provider) => ` {
8
- type: '${provider.type}',
9
- config: ${formatConfigValue(provider.config)},
10
- }`).join(",\n")}
11
- ],` : "";
12
- const events = data.events.map((event) => {
13
- const properties = event.properties.map((prop) => ` '${prop.name}': {
14
- type: '${prop.type}',
15
- ${prop.required ? "required: true," : ""}
16
- ${prop.pii ? "pii: true," : ""}
17
- ${prop.redact ? "redact: true," : ""}
18
- ${prop.description ? `description: '${escapeString(prop.description)}',` : ""}
19
- }`).join(",\n");
20
- const anomalyRules = event.anomalyRules?.length ? ` anomalyDetection: {
21
- enabled: true,
22
- ${typeof event.anomalyMinimumSample === "number" ? `minimumSample: ${event.anomalyMinimumSample},` : ""}
23
- thresholds: [
24
- ${event.anomalyRules.map((rule) => ` {
25
- metric: '${escapeString(rule.metric)}',
26
- ${typeof rule.min === "number" ? `min: ${rule.min},` : ""}
27
- ${typeof rule.max === "number" ? `max: ${rule.max},` : ""}
28
- }`).join(",\n")}
29
- ],
30
- actions: [${(event.anomalyActions ?? []).map((action) => `'${action}'`).join(", ")}],
31
- },` : event.anomalyEnabled ? ` anomalyDetection: {
32
- enabled: true,
33
- ${typeof event.anomalyMinimumSample === "number" ? `minimumSample: ${event.anomalyMinimumSample},` : ""}
34
- },` : "";
35
- return ` {
36
- name: '${escapeString(event.name)}',
37
- version: ${event.version},
38
- semantics: {
39
- what: '${escapeString(event.what)}',
40
- ${event.who ? `who: '${escapeString(event.who)}',` : ""}
41
- ${event.why ? `why: '${escapeString(event.why)}',` : ""}
42
- },
43
- privacy: '${event.privacy}',
44
- properties: {
45
- ${properties}
46
- },
47
- ${typeof event.retentionDays === "number" ? `retention: { days: ${event.retentionDays}, ${event.retentionPolicy ? `policy: '${event.retentionPolicy}'` : ""} },` : ""}
48
- ${typeof event.samplingRate === "number" ? `sampling: { rate: ${event.samplingRate}${event.samplingConditions ? `, conditions: ['${escapeString(event.samplingConditions)}']` : ""} },` : ""}
49
- ${anomalyRules}
50
- ${event.tags?.length ? `tags: [${event.tags.map((tag) => `'${escapeString(tag)}'`).join(", ")}],` : ""}
51
- }`;
52
- }).join(",\n");
53
- return `import type { TelemetrySpec } from '@contractspec/lib.contracts/telemetry';
54
-
55
- export const ${specVar}: TelemetrySpec = {
56
- meta: {
57
- key: '${escapeString(data.name)}',
58
- version: ${data.version},
59
- title: '${escapeString(data.name)} telemetry',
60
- description: '${escapeString(data.description || "Describe the purpose of this telemetry spec.")}',
61
- domain: '${escapeString(data.domain)}',
62
- owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(", ")}],
63
- tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(", ")}],
64
- stability: '${data.stability}',
65
- },
66
- config: {
67
- ${typeof data.defaultRetentionDays === "number" ? `defaultRetentionDays: ${data.defaultRetentionDays},` : ""}
68
- ${typeof data.defaultSamplingRate === "number" ? `defaultSamplingRate: ${data.defaultSamplingRate},` : ""}
69
- ${data.anomalyEnabled ? `anomalyDetection: { enabled: true${typeof data.anomalyCheckIntervalMs === "number" ? `, checkIntervalMs: ${data.anomalyCheckIntervalMs}` : ""} },` : ""}
70
- ${providers}
71
- },
72
- events: [
73
- ${events}
74
- ],
75
- };
76
- `;
77
- }
78
- function escapeString(value) {
79
- return value.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
80
- }
81
- function formatConfigValue(value) {
82
- const trimmed = value.trim();
83
- if (!trimmed) return "{}";
84
- if (trimmed.startsWith("{") && trimmed.endsWith("}") || trimmed.startsWith("[") && trimmed.endsWith("]")) return trimmed;
85
- return `'${escapeString(trimmed)}'`;
86
- }
87
-
88
- //#endregion
89
- export { generateTelemetrySpec };
90
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","names":[],"sources":["../../src/templates/telemetry.ts"],"sourcesContent":["import type { TelemetrySpecData } from '../types/spec-types';\nimport { toPascalCase } from './utils';\n\nexport function generateTelemetrySpec(data: TelemetrySpecData): string {\n const specVar =\n toPascalCase(data.name.split('.').pop() ?? 'Telemetry') + 'Telemetry';\n\n const providers = data.providers?.length\n ? `providers: [\n${data.providers\n .map(\n (provider) => ` {\n type: '${provider.type}',\n config: ${formatConfigValue(provider.config)},\n }`\n )\n .join(',\\n')}\n ],`\n : '';\n\n const events = data.events\n .map((event) => {\n const properties = event.properties\n .map(\n (prop) => ` '${prop.name}': {\n type: '${prop.type}',\n ${prop.required ? 'required: true,' : ''}\n ${prop.pii ? 'pii: true,' : ''}\n ${prop.redact ? 'redact: true,' : ''}\n ${\n prop.description\n ? `description: '${escapeString(prop.description)}',`\n : ''\n }\n }`\n )\n .join(',\\n');\n\n const anomalyRules = event.anomalyRules?.length\n ? ` anomalyDetection: {\n enabled: true,\n ${typeof event.anomalyMinimumSample === 'number' ? `minimumSample: ${event.anomalyMinimumSample},` : ''}\n thresholds: [\n${event.anomalyRules\n .map(\n (rule) => ` {\n metric: '${escapeString(rule.metric)}',\n ${typeof rule.min === 'number' ? `min: ${rule.min},` : ''}\n ${typeof rule.max === 'number' ? `max: ${rule.max},` : ''}\n }`\n )\n .join(',\\n')}\n ],\n actions: [${(event.anomalyActions ?? [])\n .map((action) => `'${action}'`)\n .join(', ')}],\n },`\n : event.anomalyEnabled\n ? ` anomalyDetection: {\n enabled: true,\n ${typeof event.anomalyMinimumSample === 'number' ? `minimumSample: ${event.anomalyMinimumSample},` : ''}\n },`\n : '';\n\n return ` {\n name: '${escapeString(event.name)}',\n version: ${event.version},\n semantics: {\n what: '${escapeString(event.what)}',\n ${event.who ? `who: '${escapeString(event.who)}',` : ''}\n ${event.why ? `why: '${escapeString(event.why)}',` : ''}\n },\n privacy: '${event.privacy}',\n properties: {\n${properties}\n },\n ${\n typeof event.retentionDays === 'number'\n ? `retention: { days: ${event.retentionDays}, ${\n event.retentionPolicy ? `policy: '${event.retentionPolicy}'` : ''\n } },`\n : ''\n }\n ${\n typeof event.samplingRate === 'number'\n ? `sampling: { rate: ${event.samplingRate}${\n event.samplingConditions\n ? `, conditions: ['${escapeString(event.samplingConditions)}']`\n : ''\n } },`\n : ''\n }\n${anomalyRules}\n ${event.tags?.length ? `tags: [${event.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],` : ''}\n }`;\n })\n .join(',\\n');\n\n return `import type { TelemetrySpec } from '@contractspec/lib.contracts/telemetry';\n\nexport const ${specVar}: TelemetrySpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n title: '${escapeString(data.name)} telemetry',\n description: '${escapeString(\n data.description || 'Describe the purpose of this telemetry spec.'\n )}',\n domain: '${escapeString(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: '${data.stability}',\n },\n config: {\n ${typeof data.defaultRetentionDays === 'number' ? `defaultRetentionDays: ${data.defaultRetentionDays},` : ''}\n ${typeof data.defaultSamplingRate === 'number' ? `defaultSamplingRate: ${data.defaultSamplingRate},` : ''}\n ${data.anomalyEnabled ? `anomalyDetection: { enabled: true${typeof data.anomalyCheckIntervalMs === 'number' ? `, checkIntervalMs: ${data.anomalyCheckIntervalMs}` : ''} },` : ''}\n${providers}\n },\n events: [\n${events}\n ],\n};\n`;\n}\n\nfunction escapeString(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction formatConfigValue(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return '{}';\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n return trimmed;\n }\n return `'${escapeString(trimmed)}'`;\n}\n"],"mappings":";;;AAGA,SAAgB,sBAAsB,MAAiC;CACrE,MAAM,UACJ,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,YAAY,GAAG;CAE5D,MAAM,YAAY,KAAK,WAAW,SAC9B;EACJ,KAAK,UACJ,KACE,aAAa;iBACD,SAAS,KAAK;kBACb,kBAAkB,SAAS,OAAO,CAAC;SAElD,CACA,KAAK,MAAM,CAAC;UAET;CAEJ,MAAM,SAAS,KAAK,OACjB,KAAK,UAAU;EACd,MAAM,aAAa,MAAM,WACtB,KACE,SAAS,UAAU,KAAK,KAAK;iBACvB,KAAK,KAAK;UACjB,KAAK,WAAW,oBAAoB,GAAG;UACvC,KAAK,MAAM,eAAe,GAAG;UAC7B,KAAK,SAAS,kBAAkB,GAAG;UAEnC,KAAK,cACD,iBAAiB,aAAa,KAAK,YAAY,CAAC,MAChD,GACL;SAEA,CACA,KAAK,MAAM;EAEd,MAAM,eAAe,MAAM,cAAc,SACrC;;UAEA,OAAO,MAAM,yBAAyB,WAAW,kBAAkB,MAAM,qBAAqB,KAAK,GAAG;;EAE9G,MAAM,aACL,KACE,SAAS;uBACS,aAAa,KAAK,OAAO,CAAC;cACnC,OAAO,KAAK,QAAQ,WAAW,QAAQ,KAAK,IAAI,KAAK,GAAG;cACxD,OAAO,KAAK,QAAQ,WAAW,QAAQ,KAAK,IAAI,KAAK,GAAG;aAEnE,CACA,KAAK,MAAM,CAAC;;qBAEM,MAAM,kBAAkB,EAAE,EACpC,KAAK,WAAW,IAAI,OAAO,GAAG,CAC9B,KAAK,KAAK,CAAC;YAEZ,MAAM,iBACJ;;UAEF,OAAO,MAAM,yBAAyB,WAAW,kBAAkB,MAAM,qBAAqB,KAAK,GAAG;YAEpG;AAEN,SAAO;eACE,aAAa,MAAM,KAAK,CAAC;iBACvB,MAAM,QAAQ;;iBAEd,aAAa,MAAM,KAAK,CAAC;UAChC,MAAM,MAAM,SAAS,aAAa,MAAM,IAAI,CAAC,MAAM,GAAG;UACtD,MAAM,MAAM,SAAS,aAAa,MAAM,IAAI,CAAC,MAAM,GAAG;;kBAE9C,MAAM,QAAQ;;EAE9B,WAAW;;QAGL,OAAO,MAAM,kBAAkB,WAC3B,sBAAsB,MAAM,cAAc,IACxC,MAAM,kBAAkB,YAAY,MAAM,gBAAgB,KAAK,GAChE,OACD,GACL;QAEC,OAAO,MAAM,iBAAiB,WAC1B,qBAAqB,MAAM,eACzB,MAAM,qBACF,mBAAmB,aAAa,MAAM,mBAAmB,CAAC,MAC1D,GACL,OACD,GACL;EACL,aAAa;QACP,MAAM,MAAM,SAAS,UAAU,MAAM,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG;;GAEvG,CACD,KAAK,MAAM;AAEd,QAAO;;eAEM,QAAQ;;YAEX,aAAa,KAAK,KAAK,CAAC;eACrB,KAAK,QAAQ;cACd,aAAa,KAAK,KAAK,CAAC;oBAClB,aACd,KAAK,eAAe,+CACrB,CAAC;eACS,aAAa,KAAK,OAAO,CAAC;eAC1B,KAAK,OAAO,KAAK,UAAU,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aACpE,KAAK,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;kBACvD,KAAK,UAAU;;;MAG3B,OAAO,KAAK,yBAAyB,WAAW,yBAAyB,KAAK,qBAAqB,KAAK,GAAG;MAC3G,OAAO,KAAK,wBAAwB,WAAW,wBAAwB,KAAK,oBAAoB,KAAK,GAAG;MACxG,KAAK,iBAAiB,oCAAoC,OAAO,KAAK,2BAA2B,WAAW,sBAAsB,KAAK,2BAA2B,GAAG,OAAO,GAAG;EACnL,UAAU;;;EAGV,OAAO;;;;;AAMT,SAAS,aAAa,OAAuB;AAC3C,QAAO,MAAM,QAAQ,OAAO,OAAO,CAAC,QAAQ,MAAM,MAAM;;AAG1D,SAAS,kBAAkB,OAAuB;CAChD,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,CAAC,QAAS,QAAO;AACrB,KACG,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,IAChD,QAAQ,WAAW,IAAI,IAAI,QAAQ,SAAS,IAAI,CAEjD,QAAO;AAET,QAAO,IAAI,aAAa,QAAQ,CAAC"}
@@ -1,39 +0,0 @@
1
- //#region src/templates/utils.ts
2
- /**
3
- * Utility functions for template generation.
4
- */
5
- /**
6
- * Convert string to camelCase.
7
- */
8
- function toCamelCase(str) {
9
- const pascal = toPascalCase(str);
10
- return pascal.charAt(0).toLowerCase() + pascal.slice(1);
11
- }
12
- /**
13
- * Convert string to PascalCase.
14
- */
15
- function toPascalCase(str) {
16
- return str.split(/[-_.]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
17
- }
18
- /**
19
- * Convert string to kebab-case.
20
- */
21
- function toKebabCase(str) {
22
- return str.replace(/\./g, "-").replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
23
- }
24
- /**
25
- * Capitalize first letter.
26
- */
27
- function capitalize(str) {
28
- return str.charAt(0).toUpperCase() + str.slice(1);
29
- }
30
- /**
31
- * Escape single quotes in string.
32
- */
33
- function escapeString(value) {
34
- return value.replace(/'/g, "\\'");
35
- }
36
-
37
- //#endregion
38
- export { capitalize, escapeString, toCamelCase, toKebabCase, toPascalCase };
39
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/templates/utils.ts"],"sourcesContent":["/**\n * Utility functions for template generation.\n */\n\n/**\n * Convert string to camelCase.\n */\nexport function toCamelCase(str: string): string {\n const pascal = toPascalCase(str);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Convert string to PascalCase.\n */\nexport function toPascalCase(str: string): string {\n return str\n .split(/[-_.]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n\n/**\n * Convert string to kebab-case.\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/\\./g, '-')\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n}\n\n/**\n * Capitalize first letter.\n */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Escape single quotes in string.\n */\nexport function escapeString(value: string): string {\n return value.replace(/'/g, \"\\\\'\");\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,YAAY,KAAqB;CAC/C,MAAM,SAAS,aAAa,IAAI;AAChC,QAAO,OAAO,OAAO,EAAE,CAAC,aAAa,GAAG,OAAO,MAAM,EAAE;;;;;AAMzD,SAAgB,aAAa,KAAqB;AAChD,QAAO,IACJ,MAAM,QAAQ,CACd,KAAK,SAAS,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,MAAM,EAAE,CAAC,CAC3D,KAAK,GAAG;;;;;AAMb,SAAgB,YAAY,KAAqB;AAC/C,QAAO,IACJ,QAAQ,OAAO,IAAI,CACnB,QAAQ,mBAAmB,QAAQ,CACnC,aAAa;;;;;AAMlB,SAAgB,WAAW,KAAqB;AAC9C,QAAO,IAAI,OAAO,EAAE,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE;;;;;AAMnD,SAAgB,aAAa,OAAuB;AAClD,QAAO,MAAM,QAAQ,MAAM,MAAM"}
@@ -1,49 +0,0 @@
1
- //#region src/templates/workflow-runner.ts
2
- function generateWorkflowRunnerTemplate({ exportName, specImportPath, runnerName, workflowName }) {
3
- return `import {
4
- InMemoryStateStore,
5
- WorkflowRegistry,
6
- WorkflowRunner,
7
- } from '@contractspec/lib.contracts/workflow';
8
- import { ${exportName} } from '${specImportPath}';
9
-
10
- /**
11
- * Runner wiring for ${workflowName}.
12
- *
13
- * TODO:
14
- * - Replace the in-memory state store with a persistent adapter if needed.
15
- * - Implement opExecutor to invoke the correct contract handlers.
16
- * - Wire eventEmitter to telemetry sinks.
17
- */
18
- const registry = new WorkflowRegistry();
19
- registry.register(${exportName});
20
-
21
- const stateStore = new InMemoryStateStore();
22
-
23
- export const ${runnerName} = new WorkflowRunner({
24
- registry,
25
- stateStore,
26
- opExecutor: async (operation, input, ctx) => {
27
- // TODO: route to the appropriate contract handler
28
- // Example: return contractRegistry.execute(operation.name, operation.version, input, ctx);
29
- throw new Error(
30
- \`opExecutor for \${operation.name}.v\${operation.version} is not implemented\`
31
- );
32
- },
33
- // appConfigProvider: async (state) => {
34
- // // TODO: return the ResolvedAppConfig for this workflow run (tenant/environment)
35
- // return undefined;
36
- // },
37
- // enforceCapabilities: async (operation, context) => {
38
- // // TODO: ensure required capabilities are satisfied using context.integrations/context.resolvedAppConfig
39
- // },
40
- eventEmitter: (_event, _payload) => {
41
- // TODO: forward workflow events to telemetry or logging sinks
42
- },
43
- });
44
- `;
45
- }
46
-
47
- //#endregion
48
- export { generateWorkflowRunnerTemplate };
49
- //# sourceMappingURL=workflow-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-runner.js","names":[],"sources":["../../src/templates/workflow-runner.ts"],"sourcesContent":["interface RunnerTemplateOptions {\n exportName: string;\n specImportPath: string;\n runnerName: string;\n workflowName: string;\n}\n\nexport function generateWorkflowRunnerTemplate({\n exportName,\n specImportPath,\n runnerName,\n workflowName,\n}: RunnerTemplateOptions): string {\n return `import {\n InMemoryStateStore,\n WorkflowRegistry,\n WorkflowRunner,\n} from '@contractspec/lib.contracts/workflow';\nimport { ${exportName} } from '${specImportPath}';\n\n/**\n * Runner wiring for ${workflowName}.\n *\n * TODO:\n * - Replace the in-memory state store with a persistent adapter if needed.\n * - Implement opExecutor to invoke the correct contract handlers.\n * - Wire eventEmitter to telemetry sinks.\n */\nconst registry = new WorkflowRegistry();\nregistry.register(${exportName});\n\nconst stateStore = new InMemoryStateStore();\n\nexport const ${runnerName} = new WorkflowRunner({\n registry,\n stateStore,\n opExecutor: async (operation, input, ctx) => {\n // TODO: route to the appropriate contract handler\n // Example: return contractRegistry.execute(operation.name, operation.version, input, ctx);\n throw new Error(\n \\`opExecutor for \\${operation.name}.v\\${operation.version} is not implemented\\`\n );\n },\n // appConfigProvider: async (state) => {\n // // TODO: return the ResolvedAppConfig for this workflow run (tenant/environment)\n // return undefined;\n // },\n // enforceCapabilities: async (operation, context) => {\n // // TODO: ensure required capabilities are satisfied using context.integrations/context.resolvedAppConfig\n // },\n eventEmitter: (_event, _payload) => {\n // TODO: forward workflow events to telemetry or logging sinks\n },\n});\n`;\n}\n"],"mappings":";AAOA,SAAgB,+BAA+B,EAC7C,YACA,gBACA,YACA,gBACgC;AAChC,QAAO;;;;;WAKE,WAAW,WAAW,eAAe;;;uBAGzB,aAAa;;;;;;;;oBAQhB,WAAW;;;;eAIhB,WAAW"}