irgen 0.2.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 (244) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/LICENSE +21 -0
  3. package/README.md +161 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +312 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/dsl/aggregator.d.ts +8 -0
  9. package/dist/dsl/aggregator.d.ts.map +1 -0
  10. package/dist/dsl/aggregator.js +64 -0
  11. package/dist/dsl/aggregator.js.map +1 -0
  12. package/dist/dsl/frontend-runtime.d.ts +486 -0
  13. package/dist/dsl/frontend-runtime.d.ts.map +1 -0
  14. package/dist/dsl/frontend-runtime.js +232 -0
  15. package/dist/dsl/frontend-runtime.js.map +1 -0
  16. package/dist/dsl/runtime.d.ts +33 -0
  17. package/dist/dsl/runtime.d.ts.map +1 -0
  18. package/dist/dsl/runtime.js +120 -0
  19. package/dist/dsl/runtime.js.map +1 -0
  20. package/dist/emit/backend/adapters.d.ts +11 -0
  21. package/dist/emit/backend/adapters.d.ts.map +1 -0
  22. package/dist/emit/backend/adapters.js +374 -0
  23. package/dist/emit/backend/adapters.js.map +1 -0
  24. package/dist/emit/backend/backend-tsmorph.d.ts +5 -0
  25. package/dist/emit/backend/backend-tsmorph.d.ts.map +1 -0
  26. package/dist/emit/backend/backend-tsmorph.js +858 -0
  27. package/dist/emit/backend/backend-tsmorph.js.map +1 -0
  28. package/dist/emit/backend/fake-backend.d.ts +2 -0
  29. package/dist/emit/backend/fake-backend.d.ts.map +1 -0
  30. package/dist/emit/backend/fake-backend.js +19 -0
  31. package/dist/emit/backend/fake-backend.js.map +1 -0
  32. package/dist/emit/backend/packaging.d.ts +3 -0
  33. package/dist/emit/backend/packaging.d.ts.map +1 -0
  34. package/dist/emit/backend/packaging.js +71 -0
  35. package/dist/emit/backend/packaging.js.map +1 -0
  36. package/dist/emit/backend/server.d.ts +4 -0
  37. package/dist/emit/backend/server.d.ts.map +1 -0
  38. package/dist/emit/backend/server.js +169 -0
  39. package/dist/emit/backend/server.js.map +1 -0
  40. package/dist/emit/cli/cli-fake.d.ts +2 -0
  41. package/dist/emit/cli/cli-fake.d.ts.map +1 -0
  42. package/dist/emit/cli/cli-fake.js +33 -0
  43. package/dist/emit/cli/cli-fake.js.map +1 -0
  44. package/dist/emit/electron/electron-shell.d.ts +3 -0
  45. package/dist/emit/electron/electron-shell.d.ts.map +1 -0
  46. package/dist/emit/electron/electron-shell.js +454 -0
  47. package/dist/emit/electron/electron-shell.js.map +1 -0
  48. package/dist/emit/engine.d.ts +14 -0
  49. package/dist/emit/engine.d.ts.map +1 -0
  50. package/dist/emit/engine.js +25 -0
  51. package/dist/emit/engine.js.map +1 -0
  52. package/dist/emit/format.d.ts +2 -0
  53. package/dist/emit/format.d.ts.map +1 -0
  54. package/dist/emit/format.js +23 -0
  55. package/dist/emit/format.js.map +1 -0
  56. package/dist/emit/frontend/frontend-react.d.ts +4 -0
  57. package/dist/emit/frontend/frontend-react.d.ts.map +1 -0
  58. package/dist/emit/frontend/frontend-react.js +2021 -0
  59. package/dist/emit/frontend/frontend-react.js.map +1 -0
  60. package/dist/emit/frontend/registry.d.ts +20 -0
  61. package/dist/emit/frontend/registry.d.ts.map +1 -0
  62. package/dist/emit/frontend/registry.js +46 -0
  63. package/dist/emit/frontend/registry.js.map +1 -0
  64. package/dist/emit/frontend/runtime-emitter.d.ts +4 -0
  65. package/dist/emit/frontend/runtime-emitter.d.ts.map +1 -0
  66. package/dist/emit/frontend/runtime-emitter.js +435 -0
  67. package/dist/emit/frontend/runtime-emitter.js.map +1 -0
  68. package/dist/emit/frontend/runtime-template.d.ts +28 -0
  69. package/dist/emit/frontend/runtime-template.d.ts.map +1 -0
  70. package/dist/emit/frontend/runtime-template.js +218 -0
  71. package/dist/emit/frontend/runtime-template.js.map +1 -0
  72. package/dist/emit/frontend/ssg.d.ts +8 -0
  73. package/dist/emit/frontend/ssg.d.ts.map +1 -0
  74. package/dist/emit/frontend/ssg.js +219 -0
  75. package/dist/emit/frontend/ssg.js.map +1 -0
  76. package/dist/emit/registry.d.ts +17 -0
  77. package/dist/emit/registry.d.ts.map +1 -0
  78. package/dist/emit/registry.js +38 -0
  79. package/dist/emit/registry.js.map +1 -0
  80. package/dist/emit/static-site/css.d.ts +5 -0
  81. package/dist/emit/static-site/css.d.ts.map +1 -0
  82. package/dist/emit/static-site/css.js +872 -0
  83. package/dist/emit/static-site/css.js.map +1 -0
  84. package/dist/emit/static-site/enhancements.d.ts +11 -0
  85. package/dist/emit/static-site/enhancements.d.ts.map +1 -0
  86. package/dist/emit/static-site/enhancements.js +266 -0
  87. package/dist/emit/static-site/enhancements.js.map +1 -0
  88. package/dist/emit/static-site/static-site-html.d.ts +3 -0
  89. package/dist/emit/static-site/static-site-html.d.ts.map +1 -0
  90. package/dist/emit/static-site/static-site-html.js +1172 -0
  91. package/dist/emit/static-site/static-site-html.js.map +1 -0
  92. package/dist/emit/utils/sdk.d.ts +15 -0
  93. package/dist/emit/utils/sdk.d.ts.map +1 -0
  94. package/dist/emit/utils/sdk.js +34 -0
  95. package/dist/emit/utils/sdk.js.map +1 -0
  96. package/dist/extensions/context.d.ts +23 -0
  97. package/dist/extensions/context.d.ts.map +1 -0
  98. package/dist/extensions/context.js +43 -0
  99. package/dist/extensions/context.js.map +1 -0
  100. package/dist/index.d.ts +32 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +135 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/ir/decl/backend.raw.schema.d.ts +128 -0
  105. package/dist/ir/decl/backend.raw.schema.d.ts.map +1 -0
  106. package/dist/ir/decl/backend.raw.schema.js +24 -0
  107. package/dist/ir/decl/backend.raw.schema.js.map +1 -0
  108. package/dist/ir/decl/bundle.d.ts +15 -0
  109. package/dist/ir/decl/bundle.d.ts.map +1 -0
  110. package/dist/ir/decl/bundle.js +8 -0
  111. package/dist/ir/decl/bundle.js.map +1 -0
  112. package/dist/ir/decl/cli.raw.schema.d.ts +133 -0
  113. package/dist/ir/decl/cli.raw.schema.d.ts.map +1 -0
  114. package/dist/ir/decl/cli.raw.schema.js +20 -0
  115. package/dist/ir/decl/cli.raw.schema.js.map +1 -0
  116. package/dist/ir/decl/frontend.raw.schema.d.ts +6631 -0
  117. package/dist/ir/decl/frontend.raw.schema.d.ts.map +1 -0
  118. package/dist/ir/decl/frontend.raw.schema.js +272 -0
  119. package/dist/ir/decl/frontend.raw.schema.js.map +1 -0
  120. package/dist/ir/decl/index.d.ts +6 -0
  121. package/dist/ir/decl/index.d.ts.map +1 -0
  122. package/dist/ir/decl/index.js +6 -0
  123. package/dist/ir/decl/index.js.map +1 -0
  124. package/dist/ir/decl/normalize.schema.d.ts +9154 -0
  125. package/dist/ir/decl/normalize.schema.d.ts.map +1 -0
  126. package/dist/ir/decl/normalize.schema.js +71 -0
  127. package/dist/ir/decl/normalize.schema.js.map +1 -0
  128. package/dist/ir/domain/backend.d.ts +19 -0
  129. package/dist/ir/domain/backend.d.ts.map +1 -0
  130. package/dist/ir/domain/backend.js +3 -0
  131. package/dist/ir/domain/backend.js.map +1 -0
  132. package/dist/ir/domain/cli.d.ts +18 -0
  133. package/dist/ir/domain/cli.d.ts.map +1 -0
  134. package/dist/ir/domain/cli.js +2 -0
  135. package/dist/ir/domain/cli.js.map +1 -0
  136. package/dist/ir/domain/frontend/index.d.ts +190 -0
  137. package/dist/ir/domain/frontend/index.d.ts.map +1 -0
  138. package/dist/ir/domain/frontend/index.js +2 -0
  139. package/dist/ir/domain/frontend/index.js.map +1 -0
  140. package/dist/ir/domain/frontend.d.ts +2 -0
  141. package/dist/ir/domain/frontend.d.ts.map +1 -0
  142. package/dist/ir/domain/frontend.js +3 -0
  143. package/dist/ir/domain/frontend.js.map +1 -0
  144. package/dist/ir/frontend-contract.d.ts +187 -0
  145. package/dist/ir/frontend-contract.d.ts.map +1 -0
  146. package/dist/ir/frontend-contract.js +6 -0
  147. package/dist/ir/frontend-contract.js.map +1 -0
  148. package/dist/ir/target/backend.d.ts +11 -0
  149. package/dist/ir/target/backend.d.ts.map +1 -0
  150. package/dist/ir/target/backend.js +2 -0
  151. package/dist/ir/target/backend.js.map +1 -0
  152. package/dist/ir/target/backend.policy.d.ts +896 -0
  153. package/dist/ir/target/backend.policy.d.ts.map +1 -0
  154. package/dist/ir/target/backend.policy.js +106 -0
  155. package/dist/ir/target/backend.policy.js.map +1 -0
  156. package/dist/ir/target/cli.d.ts +3 -0
  157. package/dist/ir/target/cli.d.ts.map +1 -0
  158. package/dist/ir/target/cli.js +2 -0
  159. package/dist/ir/target/cli.js.map +1 -0
  160. package/dist/ir/target/electron.d.ts +99 -0
  161. package/dist/ir/target/electron.d.ts.map +1 -0
  162. package/dist/ir/target/electron.js +2 -0
  163. package/dist/ir/target/electron.js.map +1 -0
  164. package/dist/ir/target/electron.policy.d.ts +7015 -0
  165. package/dist/ir/target/electron.policy.d.ts.map +1 -0
  166. package/dist/ir/target/electron.policy.js +119 -0
  167. package/dist/ir/target/electron.policy.js.map +1 -0
  168. package/dist/ir/target/frontend.d.ts +12 -0
  169. package/dist/ir/target/frontend.d.ts.map +1 -0
  170. package/dist/ir/target/frontend.js +2 -0
  171. package/dist/ir/target/frontend.js.map +1 -0
  172. package/dist/ir/target/frontend.policy.d.ts +268 -0
  173. package/dist/ir/target/frontend.policy.d.ts.map +1 -0
  174. package/dist/ir/target/frontend.policy.js +33 -0
  175. package/dist/ir/target/frontend.policy.js.map +1 -0
  176. package/dist/ir/target/index.d.ts +6 -0
  177. package/dist/ir/target/index.d.ts.map +1 -0
  178. package/dist/ir/target/index.js +6 -0
  179. package/dist/ir/target/index.js.map +1 -0
  180. package/dist/ir/target/static-site.d.ts +18 -0
  181. package/dist/ir/target/static-site.d.ts.map +1 -0
  182. package/dist/ir/target/static-site.js +2 -0
  183. package/dist/ir/target/static-site.js.map +1 -0
  184. package/dist/ir/target/static-site.policy.d.ts +2911 -0
  185. package/dist/ir/target/static-site.policy.d.ts.map +1 -0
  186. package/dist/ir/target/static-site.policy.js +127 -0
  187. package/dist/ir/target/static-site.policy.js.map +1 -0
  188. package/dist/lowering/backend.d.ts +4 -0
  189. package/dist/lowering/backend.d.ts.map +1 -0
  190. package/dist/lowering/backend.js +57 -0
  191. package/dist/lowering/backend.js.map +1 -0
  192. package/dist/lowering/cli.d.ts +4 -0
  193. package/dist/lowering/cli.d.ts.map +1 -0
  194. package/dist/lowering/cli.js +22 -0
  195. package/dist/lowering/cli.js.map +1 -0
  196. package/dist/lowering/engine.d.ts +18 -0
  197. package/dist/lowering/engine.d.ts.map +1 -0
  198. package/dist/lowering/engine.js +47 -0
  199. package/dist/lowering/engine.js.map +1 -0
  200. package/dist/lowering/frontend.d.ts +9 -0
  201. package/dist/lowering/frontend.d.ts.map +1 -0
  202. package/dist/lowering/frontend.js +246 -0
  203. package/dist/lowering/frontend.js.map +1 -0
  204. package/dist/lowering/targets/to-backend.d.ts +9 -0
  205. package/dist/lowering/targets/to-backend.d.ts.map +1 -0
  206. package/dist/lowering/targets/to-backend.js +55 -0
  207. package/dist/lowering/targets/to-backend.js.map +1 -0
  208. package/dist/lowering/targets/to-cli.d.ts +4 -0
  209. package/dist/lowering/targets/to-cli.d.ts.map +1 -0
  210. package/dist/lowering/targets/to-cli.js +11 -0
  211. package/dist/lowering/targets/to-cli.js.map +1 -0
  212. package/dist/lowering/targets/to-electron.d.ts +30 -0
  213. package/dist/lowering/targets/to-electron.d.ts.map +1 -0
  214. package/dist/lowering/targets/to-electron.js +87 -0
  215. package/dist/lowering/targets/to-electron.js.map +1 -0
  216. package/dist/lowering/targets/to-frontend.d.ts +4 -0
  217. package/dist/lowering/targets/to-frontend.d.ts.map +1 -0
  218. package/dist/lowering/targets/to-frontend.js +30 -0
  219. package/dist/lowering/targets/to-frontend.js.map +1 -0
  220. package/dist/lowering/targets/to-static-site.d.ts +16 -0
  221. package/dist/lowering/targets/to-static-site.d.ts.map +1 -0
  222. package/dist/lowering/targets/to-static-site.js +30 -0
  223. package/dist/lowering/targets/to-static-site.js.map +1 -0
  224. package/dist/mappers/index.d.ts +12 -0
  225. package/dist/mappers/index.d.ts.map +1 -0
  226. package/dist/mappers/index.js +60 -0
  227. package/dist/mappers/index.js.map +1 -0
  228. package/dist/types/extension.d.ts +3 -0
  229. package/dist/types/extension.d.ts.map +1 -0
  230. package/dist/types/extension.js +2 -0
  231. package/dist/types/extension.js.map +1 -0
  232. package/dist/utils/array.d.ts +2 -0
  233. package/dist/utils/array.d.ts.map +1 -0
  234. package/dist/utils/array.js +4 -0
  235. package/dist/utils/array.js.map +1 -0
  236. package/dist/utils/index.d.ts +3 -0
  237. package/dist/utils/index.d.ts.map +1 -0
  238. package/dist/utils/index.js +3 -0
  239. package/dist/utils/index.js.map +1 -0
  240. package/dist/utils/string.d.ts +13 -0
  241. package/dist/utils/string.d.ts.map +1 -0
  242. package/dist/utils/string.js +56 -0
  243. package/dist/utils/string.js.map +1 -0
  244. package/package.json +112 -0
@@ -0,0 +1,55 @@
1
+ import { normalizeBackendPolicy, BackendPolicySchema } from "../../ir/target/backend.policy.js";
2
+ import { engine } from "../engine.js";
3
+ import { z } from "zod";
4
+ export function backendDomainToTarget(ir, policies) {
5
+ const raw = policies?.backend ?? policies ?? {};
6
+ const normalized = normalizeBackendPolicy(raw);
7
+ // Backward compatibility: allow legacy generateId/httpClient/formatter/loggerImpl/db fields at root
8
+ const legacyGenerateId = raw.generateId ?? raw?.core?.generateId;
9
+ const legacyFormatter = raw.formatter;
10
+ const legacyLogger = raw.loggerImpl;
11
+ const legacyHttp = raw.httpClient;
12
+ const legacyDb = raw.db;
13
+ const generateId = legacyGenerateId ?? normalized.core.generateId ?? "uuid_v4";
14
+ const idProvider = generateId === "shortid" ? "shortId" : "newId";
15
+ const mergedPolicy = {
16
+ ...normalized,
17
+ core: {
18
+ ...normalized.core,
19
+ generateId,
20
+ formatter: legacyFormatter ?? normalized.core.formatter,
21
+ loggerImpl: legacyLogger ?? normalized.core.loggerImpl,
22
+ httpClient: legacyHttp ?? normalized.core.httpClient,
23
+ db: legacyDb ?? normalized.core.db,
24
+ },
25
+ };
26
+ return {
27
+ ...ir,
28
+ policies: {
29
+ backend: {
30
+ ...mergedPolicy,
31
+ idProvider,
32
+ },
33
+ },
34
+ };
35
+ }
36
+ try {
37
+ // Accept both new policy object and legacy top-level knobs for tests/CLI overrides
38
+ const legacySchema = z.object({
39
+ generateId: z.enum(["uuid_v4", "shortid", "custom"]).optional(),
40
+ loggerImpl: z.enum(["console", "pino", "winston", "custom"]).optional(),
41
+ httpClient: z.enum(["fetch", "axios", "got", "custom"]).optional(),
42
+ formatter: z.enum(["prettier", "biome"]).optional(),
43
+ db: z.object({
44
+ provider: z.literal("prisma"),
45
+ url: z.string(),
46
+ }).optional(),
47
+ }).passthrough();
48
+ const strictBackendSchema = BackendPolicySchema.removeDefault().strict();
49
+ engine.registerTransform("backend-target", (ir, policies) => backendDomainToTarget(ir, policies));
50
+ engine.registerPolicySchema("backend-target", z.union([strictBackendSchema, legacySchema]));
51
+ }
52
+ catch (e) {
53
+ // ignore double registration in test runs
54
+ }
55
+ //# sourceMappingURL=to-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-backend.js","sourceRoot":"","sources":["../../../src/lowering/targets/to-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CliIR } from "../../ir/domain/cli.js";
2
+ import type { CliTargetIR } from "../../ir/target/cli.js";
3
+ export declare function cliDomainToTarget(ir: CliIR): CliTargetIR;
4
+ //# sourceMappingURL=to-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-cli.d.ts","sourceRoot":"","sources":["../../../src/lowering/targets/to-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG,WAAW,CAExD"}
@@ -0,0 +1,11 @@
1
+ import { engine } from "../engine.js";
2
+ export function cliDomainToTarget(ir) {
3
+ return ir;
4
+ }
5
+ try {
6
+ engine.registerTransform("cli-target", (ir) => cliDomainToTarget(ir));
7
+ }
8
+ catch (e) {
9
+ // ignore duplicate registration
10
+ }
11
+ //# sourceMappingURL=to-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-cli.js","sourceRoot":"","sources":["../../../src/lowering/targets/to-cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,iBAAiB,CAAC,EAAS;IACzC,OAAO,EAAiB,CAAC;AAC3B,CAAC;AAED,IAAI,CAAC;IACH,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,EAAS,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,gCAAgC;AAClC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { FrontendIR } from "../../ir/domain/frontend.js";
2
+ import type { ElectronTargetIR, ElectronPolicies } from "../../ir/target/electron.js";
3
+ export type ElectronPolicyInput = {
4
+ electron?: {
5
+ window?: Partial<ElectronPolicies["electron"]["window"]>;
6
+ security?: Partial<ElectronPolicies["electron"]["security"]>;
7
+ packaging?: Partial<ElectronPolicies["electron"]["packaging"]>;
8
+ autoUpdate?: Partial<ElectronPolicies["electron"]["autoUpdate"]>;
9
+ ipc?: Partial<ElectronPolicies["electron"]["ipc"]>;
10
+ loading?: Partial<ElectronPolicies["electron"]["loading"]>;
11
+ reliability?: Partial<ElectronPolicies["electron"]["reliability"]>;
12
+ };
13
+ } | {
14
+ window?: Partial<ElectronPolicies["electron"]["window"]>;
15
+ security?: Partial<ElectronPolicies["electron"]["security"]>;
16
+ packaging?: Partial<ElectronPolicies["electron"]["packaging"]>;
17
+ autoUpdate?: Partial<ElectronPolicies["electron"]["autoUpdate"]>;
18
+ ipc?: Partial<ElectronPolicies["electron"]["ipc"]>;
19
+ loading?: Partial<ElectronPolicies["electron"]["loading"]>;
20
+ reliability?: Partial<ElectronPolicies["electron"]["reliability"]>;
21
+ };
22
+ /**
23
+ * Target lowering: FrontendIR → ElectronTargetIR
24
+ *
25
+ * Note: Electron target uses FrontendIR as its domain IR input (electron shares
26
+ * the frontend mapper), so the function name follows the pattern:
27
+ * {domain}DomainTo{Target}Target -> frontendDomainToElectronTarget
28
+ */
29
+ export declare function frontendDomainToElectronTarget(ir: FrontendIR, policies?: ElectronPolicyInput): ElectronTargetIR;
30
+ //# sourceMappingURL=to-electron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-electron.d.ts","sourceRoot":"","sources":["../../../src/lowering/targets/to-electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAItF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7D,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/D,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,GAAG,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;KACpE,CAAC;CACH,GAAG;IACF,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;CACpE,CAAC;AAoEF;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,gBAAgB,CAK/G"}
@@ -0,0 +1,87 @@
1
+ import { ElectronPolicyInputSchema } from "../../ir/target/electron.policy.js";
2
+ import { engine } from "../engine.js";
3
+ const DEFAULT_WINDOW = { width: 1280, height: 800, resizable: true, devTools: false };
4
+ const DEFAULT_SECURITY = {
5
+ contextIsolation: true,
6
+ sandbox: false,
7
+ ipcWhitelist: ["ping", "open-file-dialog"],
8
+ csp: "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; base-uri 'self'; form-action 'self'",
9
+ };
10
+ const DEFAULT_PACKAGING = (appName) => ({
11
+ tool: "electron-builder",
12
+ appId: `com.example.${appName.toLowerCase()}`,
13
+ productName: appName,
14
+ artifactName: "${productName}-${version}-${os}-${arch}",
15
+ outputDir: "release",
16
+ buildResources: "build",
17
+ asar: true,
18
+ });
19
+ const DEFAULT_LOADING = {
20
+ devUrl: "http://localhost:3000",
21
+ prodIndex: "../frontend/dist/index.html",
22
+ };
23
+ const DEFAULT_AUTO_UPDATE = {
24
+ enabled: false,
25
+ retryOnFail: true,
26
+ retryDelayMs: 300000,
27
+ };
28
+ const DEFAULT_RELIABILITY = {
29
+ singleInstance: true,
30
+ logging: {
31
+ enabled: true,
32
+ level: "info",
33
+ fileMaxSizeMB: 10,
34
+ console: true,
35
+ },
36
+ performance: {
37
+ disableBackgroundThrottling: true,
38
+ },
39
+ crashReporting: {
40
+ enabled: false,
41
+ provider: "electron",
42
+ },
43
+ session: {
44
+ restoreWindowBounds: true,
45
+ windowStateFile: "window-state.json",
46
+ saveOnClose: true,
47
+ },
48
+ };
49
+ function resolvePolicies(ir, policies) {
50
+ const raw = policies?.electron ?? policies ?? {};
51
+ const window = { ...DEFAULT_WINDOW, ...(raw.window ?? {}) };
52
+ const security = { ...DEFAULT_SECURITY, ...(raw.security ?? {}) };
53
+ const packaging = { ...DEFAULT_PACKAGING(ir.appName), ...(raw.packaging ?? {}) };
54
+ const autoUpdate = { ...DEFAULT_AUTO_UPDATE, ...(raw.autoUpdate ?? {}) };
55
+ const reliability = { ...DEFAULT_RELIABILITY, ...(raw.reliability ?? {}) };
56
+ const ipcWhitelist = Array.from(new Set([
57
+ ...(security.ipcWhitelist ?? []),
58
+ ...(raw.ipc?.whitelist ?? []),
59
+ ]));
60
+ const ipc = {
61
+ whitelist: ipcWhitelist,
62
+ handlers: raw.ipc?.handlers ?? [],
63
+ };
64
+ const loading = { ...DEFAULT_LOADING, ...(raw.loading ?? {}) };
65
+ return { electron: { window, security: { ...security, ipcWhitelist }, packaging, autoUpdate, ipc, loading, reliability } };
66
+ }
67
+ /**
68
+ * Target lowering: FrontendIR → ElectronTargetIR
69
+ *
70
+ * Note: Electron target uses FrontendIR as its domain IR input (electron shares
71
+ * the frontend mapper), so the function name follows the pattern:
72
+ * {domain}DomainTo{Target}Target -> frontendDomainToElectronTarget
73
+ */
74
+ export function frontendDomainToElectronTarget(ir, policies) {
75
+ return {
76
+ ...ir,
77
+ policies: resolvePolicies(ir, policies),
78
+ };
79
+ }
80
+ try {
81
+ engine.registerTransform("electron-target", (ir, policies) => frontendDomainToElectronTarget(ir, policies));
82
+ engine.registerPolicySchema("electron-target", ElectronPolicyInputSchema);
83
+ }
84
+ catch (e) {
85
+ // ignore double registration
86
+ }
87
+ //# sourceMappingURL=to-electron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-electron.js","sourceRoot":"","sources":["../../../src/lowering/targets/to-electron.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsBtC,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACtF,MAAM,gBAAgB,GAAG;IACvB,gBAAgB,EAAE,IAAI;IACtB,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAa;IACtD,GAAG,EAAE,wJAAwJ;CAC9J,CAAC;AACF,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAA6C,EAAE,CAAC,CAAC;IACzF,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,eAAe,OAAO,CAAC,WAAW,EAAE,EAAE;IAC7C,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,yCAAyC;IACvD,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,OAAO;IACvB,IAAI,EAAE,IAAI;CACX,CAAC,CAAC;AACH,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,uBAAuB;IAC/B,SAAS,EAAE,6BAA6B;CACzC,CAAC;AACF,MAAM,mBAAmB,GAAG;IAC1B,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,MAAM;CACrB,CAAC;AACF,MAAM,mBAAmB,GAAG;IAC1B,cAAc,EAAE,IAAI;IACpB,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,MAAM;QACb,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,IAAI;KACd;IACD,WAAW,EAAE;QACX,2BAA2B,EAAE,IAAI;KAClC;IACD,cAAc,EAAE;QACd,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,UAAU;KACrB;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,mBAAmB;QACpC,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,EAAc,EAAE,QAA8B;IACrE,MAAM,GAAG,GAAI,QAAgB,EAAE,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IACjF,MAAM,UAAU,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IACzE,MAAM,WAAW,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;QAChC,GAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,IAAI,EAAE,CAAc;KAC5C,CAAC,CAAC,CAAC;IACJ,MAAM,GAAG,GAAG;QACV,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE;KAClC,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/D,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;AAC7H,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAAc,EAAE,QAA8B;IAC3F,OAAO;QACL,GAAG,EAAE;QACL,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,IAAI,CAAC;IACH,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,EAAc,EAAE,QAAc,EAAE,EAAE,CAAC,8BAA8B,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9H,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;AAC5E,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,6BAA6B;AAC/B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FrontendIR } from "../../ir/domain/frontend.js";
2
+ import type { FrontendTargetIR } from "../../ir/target/frontend.js";
3
+ export declare function frontendDomainToTarget(ir: FrontendIR, policies?: any): FrontendTargetIR;
4
+ //# sourceMappingURL=to-frontend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-frontend.d.ts","sourceRoot":"","sources":["../../../src/lowering/targets/to-frontend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAYpE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAKvF"}
@@ -0,0 +1,30 @@
1
+ import { normalizeFrontendPolicy, FrontendPolicySchema } from "../../ir/target/frontend.policy.js";
2
+ import { engine } from "../engine.js";
3
+ import { z } from "zod";
4
+ function resolveFrontendPolicies(policies) {
5
+ const raw = policies?.frontend ?? policies;
6
+ return {
7
+ frontend: normalizeFrontendPolicy(raw),
8
+ };
9
+ }
10
+ export function frontendDomainToTarget(ir, policies) {
11
+ return {
12
+ ...ir,
13
+ policies: resolveFrontendPolicies(policies),
14
+ };
15
+ }
16
+ try {
17
+ // Accept both namespaced (frontend: {...}) and flat ({ styling: ..., framework: ...}) policy format
18
+ // The normalizeFrontendPolicy function already handles both formats
19
+ const namespacedSchema = z.object({ frontend: FrontendPolicySchema }).passthrough();
20
+ const flexibleSchema = z.union([
21
+ FrontendPolicySchema,
22
+ namespacedSchema,
23
+ ]);
24
+ engine.registerTransform("frontend-target", (ir, policies) => frontendDomainToTarget(ir, policies));
25
+ engine.registerPolicySchema("frontend-target", flexibleSchema);
26
+ }
27
+ catch (e) {
28
+ // ignore duplicate registration during repeated imports
29
+ }
30
+ //# sourceMappingURL=to-frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-frontend.js","sourceRoot":"","sources":["../../../src/lowering/targets/to-frontend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,SAAS,uBAAuB,CAAC,QAAc;IAC7C,MAAM,GAAG,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC;IAC3C,OAAO;QACL,QAAQ,EAAE,uBAAuB,CAAC,GAAG,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAc,EAAE,QAAc;IACnE,OAAO;QACL,GAAG,EAAE;QACL,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,IAAI,CAAC;IACH,oGAAoG;IACpG,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpF,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC;QAC7B,oBAAoB;QACpB,gBAAgB;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,EAAc,EAAE,QAAc,EAAE,EAAE,CAAC,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtH,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AACjE,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,wDAAwD;AAC1D,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { FrontendIR } from "../../ir/domain/frontend.js";
2
+ import type { StaticSiteTargetIR } from "../../ir/target/static-site.js";
3
+ export type StaticSitePolicyInput = {
4
+ staticSite?: unknown;
5
+ } | {
6
+ [key: string]: unknown;
7
+ };
8
+ /**
9
+ * Target lowering: FrontendIR → StaticSiteTargetIR
10
+ *
11
+ * Note: Static-site target uses FrontendIR as its domain IR input (same as electron),
12
+ * so the function name follows the pattern:
13
+ * {domain}DomainTo{Target}Target -> frontendDomainToStaticSiteTarget
14
+ */
15
+ export declare function frontendDomainToStaticSiteTarget(ir: FrontendIR, policies?: StaticSitePolicyInput): StaticSiteTargetIR;
16
+ //# sourceMappingURL=to-static-site.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-static-site.d.ts","sourceRoot":"","sources":["../../../src/lowering/targets/to-static-site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,gCAAgC,CAAC;AAI7F,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAWF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,kBAAkB,CAKrH"}
@@ -0,0 +1,30 @@
1
+ import { normalizeStaticSitePolicy, StaticSitePolicyInputSchema } from "../../ir/target/static-site.policy.js";
2
+ import { engine } from "../engine.js";
3
+ function resolvePolicies(policies) {
4
+ const raw = policies?.staticSite ?? policies ?? {};
5
+ const normalized = normalizeStaticSitePolicy(raw);
6
+ return {
7
+ staticSite: normalized,
8
+ };
9
+ }
10
+ /**
11
+ * Target lowering: FrontendIR → StaticSiteTargetIR
12
+ *
13
+ * Note: Static-site target uses FrontendIR as its domain IR input (same as electron),
14
+ * so the function name follows the pattern:
15
+ * {domain}DomainTo{Target}Target -> frontendDomainToStaticSiteTarget
16
+ */
17
+ export function frontendDomainToStaticSiteTarget(ir, policies) {
18
+ return {
19
+ ...ir,
20
+ policies: resolvePolicies(policies),
21
+ };
22
+ }
23
+ try {
24
+ engine.registerTransform("static-site-target", (ir, policies) => frontendDomainToStaticSiteTarget(ir, policies));
25
+ engine.registerPolicySchema("static-site-target", StaticSitePolicyInputSchema);
26
+ }
27
+ catch (e) {
28
+ // ignore double registration
29
+ }
30
+ //# sourceMappingURL=to-static-site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-static-site.js","sourceRoot":"","sources":["../../../src/lowering/targets/to-static-site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAC/G,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,SAAS,eAAe,CAAC,QAAgC;IACvD,MAAM,GAAG,GAAI,QAAgB,EAAE,UAAU,IAAI,QAAQ,IAAI,EAAE,CAAC;IAC5D,MAAM,UAAU,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAElD,OAAO;QACL,UAAU,EAAE,UAAU;KACvB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAAC,EAAc,EAAE,QAAgC;IAC/F,OAAO;QACL,GAAG,EAAE;QACL,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,IAAI,CAAC;IACH,MAAM,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,EAAc,EAAE,QAAc,EAAE,EAAE,CAAC,gCAAgC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnI,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAAC;AACjF,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,6BAA6B;AAC/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DeclBundle } from "../ir/decl";
2
+ type MapperFn = (decl: DeclBundle, options?: any) => Promise<any> | any;
3
+ export declare function registerMapper(name: string, fn: MapperFn, options?: {
4
+ force?: boolean;
5
+ }): void;
6
+ export declare function unregisterMapper(name: string): void;
7
+ export declare function getMapper(name: string): MapperFn | undefined;
8
+ export declare function listMappers(): string[];
9
+ export declare function runMapper(name: string, decl: DeclBundle, options?: any): Promise<any>;
10
+ export declare function registerBuiltins(): void;
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mappers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAIxE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,QAKvF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,QAE5C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE5D;AAED,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,GAAG,gBAI5E;AAGD,wBAAgB,gBAAgB,SAmC/B"}
@@ -0,0 +1,60 @@
1
+ const registry = new Map();
2
+ export function registerMapper(name, fn, options) {
3
+ if (!options?.force && registry.has(name)) {
4
+ throw new Error(`mapper already registered: ${name}`);
5
+ }
6
+ registry.set(name, fn);
7
+ }
8
+ export function unregisterMapper(name) {
9
+ registry.delete(name);
10
+ }
11
+ export function getMapper(name) {
12
+ return registry.get(name);
13
+ }
14
+ export function listMappers() {
15
+ return Array.from(registry.keys());
16
+ }
17
+ export async function runMapper(name, decl, options) {
18
+ const fn = getMapper(name);
19
+ if (!fn)
20
+ throw new Error(`mapper not registered: ${name}`);
21
+ return await fn(decl, options);
22
+ }
23
+ // Register the known mappers lazily to avoid circular imports in other modules
24
+ export function registerBuiltins() {
25
+ if (listMappers().length > 0)
26
+ return; // idempotent
27
+ // These imports are dynamic to avoid top-level circular deps
28
+ const backend = async (decl, policies) => {
29
+ await import("../lowering/backend.js"); // ensure transform registered
30
+ const { engine } = await import("../lowering/engine.js");
31
+ const backendApp = decl.apps.find(app => app.type === "app");
32
+ if (!backendApp)
33
+ throw new Error("no backend app found in unified declaration");
34
+ return engine.runTransform("backend", backendApp, policies);
35
+ };
36
+ const frontend = async (decl, policies) => {
37
+ await import("../lowering/frontend.js"); // ensure transform registered
38
+ const { engine } = await import("../lowering/engine.js");
39
+ const frontendApp = decl.apps.find(app => app.type === "frontend");
40
+ if (!frontendApp)
41
+ throw new Error("no frontend app found in unified declaration");
42
+ return engine.runTransform("frontend", frontendApp, policies);
43
+ };
44
+ const cli = async (decl, policies) => {
45
+ await import("../lowering/cli.js");
46
+ const { engine } = await import("../lowering/engine.js");
47
+ const cliApp = decl.apps.find(app => app.type === "cli");
48
+ if (!cliApp)
49
+ throw new Error("no cli app found in unified declaration");
50
+ return engine.runTransform("cli", cliApp, policies);
51
+ };
52
+ registerMapper("backend", backend, { force: true });
53
+ registerMapper("frontend", frontend, { force: true });
54
+ registerMapper("cli", cli, { force: true });
55
+ // electron shares frontend DomainIR mapper
56
+ registerMapper("electron", frontend, { force: true });
57
+ // static-site shares frontend DomainIR mapper (same as electron)
58
+ registerMapper("static-site", frontend, { force: true });
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mappers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type MapperFn = (decl: any, options?: any) => Promise<any> | any;
2
+ export type ExtensionHook = (ctx: any, options?: any) => void | Promise<void>;
3
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/types/extension.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function uniq<T>(arr: T[]): T[];
2
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAErC"}
@@ -0,0 +1,4 @@
1
+ export function uniq(arr) {
2
+ return Array.from(new Set(arr));
3
+ }
4
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAI,GAAQ;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./string";
2
+ export * from "./array";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./string";
2
+ export * from "./array";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Small utilities for string transformations used across the project.
3
+ */
4
+ export declare function pascal(s: string): string;
5
+ export declare function camel(s: string): string;
6
+ export declare function kebab(s: string): string;
7
+ /**
8
+ * Basic pluralization helper.
9
+ * - Supports a small irregular map and common english plural rules.
10
+ * - Good enough for simple method naming like `listProducts` / `listCategories`.
11
+ */
12
+ export declare function pluralize(s: string): string;
13
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,UAO/B;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,UAG9B;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,UAM9B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiC3C"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Small utilities for string transformations used across the project.
3
+ */
4
+ export function pascal(s) {
5
+ return s
6
+ .replace(/[^a-zA-Z0-9]+/g, " ")
7
+ .split(" ")
8
+ .filter(Boolean)
9
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
10
+ .join("");
11
+ }
12
+ export function camel(s) {
13
+ const p = pascal(s);
14
+ return p.charAt(0).toLowerCase() + p.slice(1);
15
+ }
16
+ export function kebab(s) {
17
+ return s
18
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
19
+ .replace(/[^a-zA-Z0-9]+/g, "-")
20
+ .replace(/^-+|-+$/g, "")
21
+ .toLowerCase();
22
+ }
23
+ /**
24
+ * Basic pluralization helper.
25
+ * - Supports a small irregular map and common english plural rules.
26
+ * - Good enough for simple method naming like `listProducts` / `listCategories`.
27
+ */
28
+ export function pluralize(s) {
29
+ const lower = s.toLowerCase();
30
+ const irregular = {
31
+ person: "people",
32
+ child: "children",
33
+ mouse: "mice",
34
+ category: "categories",
35
+ };
36
+ if (irregular[lower]) {
37
+ // preserve original casing: if input was PascalCase, return PascalCase plural
38
+ const sample = irregular[lower];
39
+ if (s[0] === s[0].toUpperCase()) {
40
+ return sample.charAt(0).toUpperCase() + sample.slice(1);
41
+ }
42
+ return sample;
43
+ }
44
+ // basic rules
45
+ if (/[sxz]$/.test(lower) || /[ch]$/.test(lower)) {
46
+ return s + "es";
47
+ }
48
+ if (/[aeiou]y$/.test(lower)) {
49
+ return s + "s";
50
+ }
51
+ if (/y$/.test(lower)) {
52
+ return s.slice(0, -1) + "ies";
53
+ }
54
+ return s + "s";
55
+ }
56
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,OAAO,CAAC;SACL,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,OAAO,CAAC;SACL,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9B,MAAM,SAAS,GAA2B;QACxC,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,YAAY;KACvB,CAAC;IAEF,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,8EAA8E;QAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc;IACd,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC;AACjB,CAAC"}