@mmapp/react-compiler 0.1.0-alpha.1 → 0.1.0-alpha.5

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 (265) hide show
  1. package/ATOM-PIPELINE.md +144 -0
  2. package/README.md +88 -40
  3. package/dist/babel/index.js +2814 -277
  4. package/dist/babel/index.mjs +2 -2
  5. package/dist/chunk-3USIFFE4.mjs +2190 -0
  6. package/dist/chunk-45YMGEVT.mjs +186 -0
  7. package/dist/chunk-4FN2AISW.mjs +148 -0
  8. package/dist/chunk-4OPI5L7G.mjs +2593 -0
  9. package/dist/chunk-4RYTKOOJ.mjs +186 -0
  10. package/dist/chunk-52XHYD2V.mjs +214 -0
  11. package/dist/chunk-5GUFFFGL.mjs +148 -0
  12. package/dist/chunk-5RKTOVR5.mjs +244 -0
  13. package/dist/chunk-5YDMOO4X.mjs +214 -0
  14. package/dist/chunk-64ZWEMLJ.mjs +148 -0
  15. package/dist/chunk-6XP4KSWQ.mjs +2190 -0
  16. package/dist/chunk-72QWL54I.mjs +175 -0
  17. package/dist/chunk-7B4TRI7C.mjs +4835 -0
  18. package/dist/chunk-7ZKGHTNB.mjs +4952 -0
  19. package/dist/chunk-CIESM3BP.mjs +33 -0
  20. package/dist/chunk-DE3ZGQAC.mjs +148 -0
  21. package/dist/chunk-DMCY3BBG.mjs +1933 -0
  22. package/dist/chunk-DPIK3PJS.mjs +244 -0
  23. package/dist/chunk-E5IVH4RE.mjs +186 -0
  24. package/dist/chunk-E6FZNUR5.mjs +4953 -0
  25. package/dist/chunk-EJRBDQDP.mjs +2607 -0
  26. package/dist/chunk-ELO4TXJL.mjs +186 -0
  27. package/dist/chunk-EO6SYNCG.mjs +175 -0
  28. package/dist/chunk-FKRO52XH.mjs +3446 -0
  29. package/dist/chunk-FL4YAKU6.mjs +4941 -0
  30. package/dist/chunk-FYT47UBU.mjs +5076 -0
  31. package/dist/chunk-GCLGPOJZ.mjs +148 -0
  32. package/dist/chunk-GXB4JOP7.mjs +5072 -0
  33. package/dist/chunk-HFXOUMTD.mjs +175 -0
  34. package/dist/chunk-HWIZ47US.mjs +214 -0
  35. package/dist/chunk-IB7MNPQL.mjs +4953 -0
  36. package/dist/chunk-ICSIHQCG.mjs +148 -0
  37. package/dist/chunk-J7JUAHS4.mjs +186 -0
  38. package/dist/chunk-JLA5VNQ3.mjs +186 -0
  39. package/dist/chunk-JQLWFCTM.mjs +214 -0
  40. package/dist/chunk-KFJJCQAL.mjs +148 -0
  41. package/dist/chunk-KJUIIEQE.mjs +186 -0
  42. package/dist/chunk-KNWTHRVQ.mjs +175 -0
  43. package/dist/chunk-KSG4XSZF.mjs +175 -0
  44. package/dist/chunk-LF5N6DOU.mjs +175 -0
  45. package/dist/chunk-LJQCM2IM.mjs +214 -0
  46. package/dist/chunk-NTB7OEX2.mjs +2918 -0
  47. package/dist/chunk-NW6555WJ.mjs +186 -0
  48. package/dist/chunk-OMZE6VLQ.mjs +214 -0
  49. package/dist/chunk-OPJKP747.mjs +7506 -0
  50. package/dist/chunk-P4BR7WVO.mjs +2190 -0
  51. package/dist/chunk-QQHVYH2X.mjs +244 -0
  52. package/dist/chunk-S5QLWLLT.mjs +186 -0
  53. package/dist/chunk-SCWGT2FY.mjs +2190 -0
  54. package/dist/chunk-SMKJUSB3.mjs +2190 -0
  55. package/dist/chunk-THFYE5ZX.mjs +244 -0
  56. package/dist/chunk-VCAY2KGM.mjs +175 -0
  57. package/dist/chunk-WBYMW4NQ.mjs +3450 -0
  58. package/dist/chunk-WECAV6QB.mjs +148 -0
  59. package/dist/chunk-WMKBXUCE.mjs +3228 -0
  60. package/dist/chunk-XAJ5BKKL.mjs +4947 -0
  61. package/dist/chunk-XG2X7AEA.mjs +175 -0
  62. package/dist/chunk-XG7Z23NQ.mjs +148 -0
  63. package/dist/chunk-XWZAOCQ7.mjs +2607 -0
  64. package/dist/chunk-Y6MA7ULW.mjs +148 -0
  65. package/dist/chunk-YMS7Q7LG.mjs +214 -0
  66. package/dist/chunk-ZA37XTGA.mjs +175 -0
  67. package/dist/cli/index.js +13189 -6838
  68. package/dist/cli/index.mjs +140 -22
  69. package/dist/codemod/cli.mjs +1 -1
  70. package/dist/codemod/index.mjs +1 -1
  71. package/dist/config-PL24KEWL.mjs +219 -0
  72. package/dist/dev-server-RmGHIntF.d.mts +113 -0
  73. package/dist/dev-server-RmGHIntF.d.ts +113 -0
  74. package/dist/dev-server.d.mts +1 -1
  75. package/dist/dev-server.d.ts +1 -1
  76. package/dist/dev-server.js +4135 -440
  77. package/dist/dev-server.mjs +5 -5
  78. package/dist/envelope.js +2812 -275
  79. package/dist/envelope.mjs +3 -3
  80. package/dist/index.d.mts +161 -2
  81. package/dist/index.d.ts +161 -2
  82. package/dist/index.js +4429 -428
  83. package/dist/index.mjs +217 -9
  84. package/{src/cli/init.ts → dist/init-7JQMAAXS.mjs} +70 -95
  85. package/dist/init-DQDX3QK6.mjs +369 -0
  86. package/dist/init-EHO4VQ22.mjs +369 -0
  87. package/dist/init-UC3FWPIW.mjs +367 -0
  88. package/dist/init-UNSMVKIK.mjs +366 -0
  89. package/dist/init-UNV5XIDE.mjs +367 -0
  90. package/dist/project-compiler-2P4N4DR7.mjs +10 -0
  91. package/dist/project-compiler-D2LCC27O.mjs +10 -0
  92. package/dist/project-compiler-EJ3GANJE.mjs +10 -0
  93. package/dist/project-compiler-LOQKVRZJ.mjs +10 -0
  94. package/dist/project-compiler-OP2VVGJQ.mjs +10 -0
  95. package/dist/project-compiler-RQ6OQKRM.mjs +10 -0
  96. package/dist/project-compiler-VWNNCHGO.mjs +10 -0
  97. package/dist/project-compiler-XVAAU4C5.mjs +10 -0
  98. package/dist/project-compiler-YES5FGMD.mjs +10 -0
  99. package/dist/project-compiler-ZKMQDLGU.mjs +10 -0
  100. package/dist/project-decompiler-FLXCEJHS.mjs +7 -0
  101. package/dist/project-decompiler-US7GAVIC.mjs +7 -0
  102. package/dist/project-decompiler-VLPR22QF.mjs +7 -0
  103. package/dist/pull-FUS5QYZS.mjs +109 -0
  104. package/dist/pull-LD5ENLGY.mjs +109 -0
  105. package/dist/pull-P44LDRWB.mjs +109 -0
  106. package/dist/testing/index.js +2822 -285
  107. package/dist/testing/index.mjs +2 -2
  108. package/dist/verify-SEIXUGN4.mjs +1833 -0
  109. package/dist/vite/index.js +2815 -278
  110. package/dist/vite/index.mjs +3 -3
  111. package/examples/uber-app/app/admin/fleet.tsx +19 -19
  112. package/package.json +16 -6
  113. package/compile-blueprint-chat.mjs +0 -99
  114. package/compile-blueprint-glass-console.mjs +0 -98
  115. package/compile-chat-defs.mjs +0 -92
  116. package/examples/uber-app/tests/payment.test.tsx +0 -129
  117. package/examples/uber-app/tests/ride-flow.test.tsx +0 -123
  118. package/package.json.backup +0 -86
  119. package/scripts/decompile.ts +0 -226
  120. package/scripts/seed-auth.ts +0 -267
  121. package/scripts/seed-uber.ts +0 -248
  122. package/scripts/validate-uber.ts +0 -119
  123. package/seed-blueprint-chat.mjs +0 -444
  124. package/seed-blueprint-glass-console.mjs +0 -445
  125. package/seed-compiled.mjs +0 -318
  126. package/src/RoundTripValidator.ts +0 -400
  127. package/src/__tests__/atom-rendering-coverage.test.ts +0 -680
  128. package/src/__tests__/auth-module-compilation.test.ts +0 -247
  129. package/src/__tests__/auth-template-compilation.test.ts +0 -589
  130. package/src/__tests__/change-extractor.test.ts +0 -142
  131. package/src/__tests__/cli-pull.test.ts +0 -73
  132. package/src/__tests__/cli-test.test.ts +0 -72
  133. package/src/__tests__/component-extractor.test.ts +0 -331
  134. package/src/__tests__/context-extractor.test.ts +0 -145
  135. package/src/__tests__/decompiler.test.ts +0 -718
  136. package/src/__tests__/define-blueprint.test.ts +0 -133
  137. package/src/__tests__/definition-validator.test.ts +0 -519
  138. package/src/__tests__/during-extractor.test.ts +0 -152
  139. package/src/__tests__/effect-extractor.test.ts +0 -107
  140. package/src/__tests__/event-emission.test.ts +0 -127
  141. package/src/__tests__/examples.test.ts +0 -236
  142. package/src/__tests__/full-blueprint-coverage.test.ts +0 -1221
  143. package/src/__tests__/golden-suite.test.ts +0 -403
  144. package/src/__tests__/grammar-island-extractor.test.ts +0 -289
  145. package/src/__tests__/instance-key.test.ts +0 -82
  146. package/src/__tests__/ir-migration.test.ts +0 -255
  147. package/src/__tests__/lock-file.test.ts +0 -117
  148. package/src/__tests__/model-extractor.test.ts +0 -195
  149. package/src/__tests__/model-field-acl.test.ts +0 -237
  150. package/src/__tests__/model-hooks.test.ts +0 -130
  151. package/src/__tests__/model-ref-resolution.test.ts +0 -268
  152. package/src/__tests__/model-roundtrip.test.ts +0 -502
  153. package/src/__tests__/model-runtime.test.ts +0 -112
  154. package/src/__tests__/model-transitions.test.ts +0 -183
  155. package/src/__tests__/nrt-action-trace.test.ts +0 -391
  156. package/src/__tests__/pipeline-hardening.test.ts +0 -413
  157. package/src/__tests__/project-compiler.test.ts +0 -546
  158. package/src/__tests__/project-decompiler.test.ts +0 -343
  159. package/src/__tests__/query-compilation.test.ts +0 -145
  160. package/src/__tests__/round-trip/PLAN.md +0 -158
  161. package/src/__tests__/round-trip/README.md +0 -52
  162. package/src/__tests__/round-trip/RESULTS.md +0 -86
  163. package/src/__tests__/round-trip/fixtures/data-heavy/main.workflow.tsx +0 -55
  164. package/src/__tests__/round-trip/fixtures/data-heavy/mm.config.ts +0 -11
  165. package/src/__tests__/round-trip/fixtures/data-heavy/models/contact.ts +0 -54
  166. package/src/__tests__/round-trip/fixtures/full-workflow/main.workflow.tsx +0 -79
  167. package/src/__tests__/round-trip/fixtures/full-workflow/mm.config.ts +0 -12
  168. package/src/__tests__/round-trip/fixtures/full-workflow/models/order.ts +0 -50
  169. package/src/__tests__/round-trip/fixtures/simple-crud/main.workflow.tsx +0 -25
  170. package/src/__tests__/round-trip/fixtures/simple-crud/mm.config.ts +0 -11
  171. package/src/__tests__/round-trip/fixtures/simple-crud/models/task.ts +0 -32
  172. package/src/__tests__/round-trip/fixtures/view-heavy/main.workflow.tsx +0 -79
  173. package/src/__tests__/round-trip/fixtures/view-heavy/mm.config.ts +0 -10
  174. package/src/__tests__/round-trip/round-trip.test.ts +0 -2598
  175. package/src/__tests__/round-trip-ir.test.ts +0 -300
  176. package/src/__tests__/round-trip.test.ts +0 -1212
  177. package/src/__tests__/route-merging.test.ts +0 -372
  178. package/src/__tests__/router-composition.test.ts +0 -489
  179. package/src/__tests__/router-extractor.test.ts +0 -176
  180. package/src/__tests__/server-action-extractor.test.ts +0 -128
  181. package/src/__tests__/smart-type-inference.test.ts +0 -365
  182. package/src/__tests__/source-envelope.test.ts +0 -284
  183. package/src/__tests__/source-fidelity.test.ts +0 -516
  184. package/src/__tests__/state-extractor.test.ts +0 -115
  185. package/src/__tests__/strict-mode.test.ts +0 -227
  186. package/src/__tests__/transition-effect-extractor.test.ts +0 -119
  187. package/src/__tests__/transition-extractor.test.ts +0 -68
  188. package/src/__tests__/ts-to-expression.test.ts +0 -462
  189. package/src/__tests__/type-generator.test.ts +0 -201
  190. package/src/__tests__/uber-validation.test.ts +0 -502
  191. package/src/action-compiler.ts +0 -361
  192. package/src/babel/emitters/experience-transform.ts +0 -199
  193. package/src/babel/emitters/ir-to-tsx-emitter.ts +0 -110
  194. package/src/babel/emitters/pure-form-emitter.ts +0 -1023
  195. package/src/babel/emitters/runtime-glue-emitter.ts +0 -39
  196. package/src/babel/extractors/change-extractor.ts +0 -199
  197. package/src/babel/extractors/component-extractor.ts +0 -907
  198. package/src/babel/extractors/computed-extractor.ts +0 -262
  199. package/src/babel/extractors/context-extractor.ts +0 -277
  200. package/src/babel/extractors/during-extractor.ts +0 -295
  201. package/src/babel/extractors/effect-extractor.ts +0 -340
  202. package/src/babel/extractors/event-extractor.ts +0 -235
  203. package/src/babel/extractors/grammar-island-extractor.ts +0 -302
  204. package/src/babel/extractors/model-extractor.ts +0 -1018
  205. package/src/babel/extractors/router-extractor.ts +0 -303
  206. package/src/babel/extractors/server-action-extractor.ts +0 -173
  207. package/src/babel/extractors/server-action-hook-extractor.ts +0 -72
  208. package/src/babel/extractors/server-state-extractor.ts +0 -88
  209. package/src/babel/extractors/state-extractor.ts +0 -214
  210. package/src/babel/extractors/transition-effect-extractor.ts +0 -176
  211. package/src/babel/extractors/transition-extractor.ts +0 -143
  212. package/src/babel/index.ts +0 -24
  213. package/src/babel/transpilers/ts-to-expression.ts +0 -674
  214. package/src/babel/visitor.ts +0 -807
  215. package/src/cli/auth.ts +0 -255
  216. package/src/cli/build.ts +0 -288
  217. package/src/cli/deploy.ts +0 -206
  218. package/src/cli/index.ts +0 -328
  219. package/src/cli/installer.ts +0 -261
  220. package/src/cli/lock-file.ts +0 -94
  221. package/src/cli/mmrc.ts +0 -22
  222. package/src/cli/pull.ts +0 -172
  223. package/src/cli/registry-client.ts +0 -175
  224. package/src/cli/test.ts +0 -397
  225. package/src/cli/type-generator.ts +0 -243
  226. package/src/codemod/__tests__/forward.test.ts +0 -239
  227. package/src/codemod/__tests__/reverse.test.ts +0 -145
  228. package/src/codemod/__tests__/round-trip.test.ts +0 -137
  229. package/src/codemod/annotation.ts +0 -97
  230. package/src/codemod/classify.ts +0 -197
  231. package/src/codemod/cli.ts +0 -207
  232. package/src/codemod/control-flow.ts +0 -409
  233. package/src/codemod/forward.ts +0 -244
  234. package/src/codemod/import-manager.ts +0 -171
  235. package/src/codemod/index.ts +0 -120
  236. package/src/codemod/reverse.ts +0 -197
  237. package/src/codemod/rules.ts +0 -174
  238. package/src/codemod/state-transform.ts +0 -126
  239. package/src/decompiler/ast-builder.ts +0 -538
  240. package/src/decompiler/config-generator.ts +0 -151
  241. package/src/decompiler/index.ts +0 -315
  242. package/src/decompiler/project-decompiler.ts +0 -1776
  243. package/src/decompiler/project.ts +0 -862
  244. package/src/decompiler/split-strategy.ts +0 -140
  245. package/src/decompiler/state-emitter.ts +0 -1053
  246. package/src/decompiler/sx-emitter.ts +0 -318
  247. package/src/decompiler/workspace-hydrator.ts +0 -189
  248. package/src/dev-server.ts +0 -238
  249. package/src/envelope/fs-tree.ts +0 -217
  250. package/src/envelope/source-envelope.ts +0 -264
  251. package/src/envelope.ts +0 -315
  252. package/src/incremental-compiler.ts +0 -401
  253. package/src/index.ts +0 -99
  254. package/src/model-compiler.ts +0 -277
  255. package/src/project-compiler.ts +0 -1629
  256. package/src/route-extractor.ts +0 -333
  257. package/src/testing/index.ts +0 -32
  258. package/src/testing/snapshot.ts +0 -252
  259. package/src/testing/test-utils.ts +0 -226
  260. package/src/types.ts +0 -68
  261. package/src/vite/index.ts +0 -288
  262. package/test-compile.mjs +0 -142
  263. package/tsconfig.json +0 -25
  264. package/tsup.config.ts +0 -23
  265. package/vitest.config.ts +0 -9
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  deploy
4
- } from "../chunk-EQGA6A6D.mjs";
4
+ } from "../chunk-52XHYD2V.mjs";
5
5
  import {
6
6
  build
7
- } from "../chunk-KFGYOOVS.mjs";
7
+ } from "../chunk-THFYE5ZX.mjs";
8
8
  import "../chunk-5M7DKKBC.mjs";
9
- import "../chunk-HLRGCCIL.mjs";
9
+ import "../chunk-OPJKP747.mjs";
10
10
  import {
11
11
  __require
12
- } from "../chunk-Y6FXYEAI.mjs";
12
+ } from "../chunk-CIESM3BP.mjs";
13
13
 
14
14
  // src/cli/test.ts
15
15
  import { glob } from "glob";
@@ -39,8 +39,8 @@ async function test(options = {}) {
39
39
  const rel = f.startsWith(srcDir + "/") ? f.slice(srcDir.length + 1) : f;
40
40
  fileMap[rel] = readFileSync(f, "utf-8");
41
41
  }
42
- const { compileProject } = await import("../project-compiler-EGJUTAJU.mjs");
43
- const { decompileProjectEnhanced } = await import("../project-decompiler-5GY2KSG4.mjs");
42
+ const { compileProject } = await import("../project-compiler-OP2VVGJQ.mjs");
43
+ const { decompileProjectEnhanced } = await import("../project-decompiler-US7GAVIC.mjs");
44
44
  process.stdout.write(` Compiling project...`);
45
45
  const t0 = performance.now();
46
46
  let ir1;
@@ -450,15 +450,43 @@ function getPositional() {
450
450
  }
451
451
  return void 0;
452
452
  }
453
+ async function loadDevConfig() {
454
+ try {
455
+ const { existsSync: existsSync3, readFileSync: readFileSync3 } = await import("fs");
456
+ const { resolve: resolve2 } = await import("path");
457
+ const configPath = resolve2(process.cwd(), "mm.config.ts");
458
+ if (!existsSync3(configPath)) return {};
459
+ const content = readFileSync3(configPath, "utf-8");
460
+ const devMatch = content.match(/dev\s*:\s*\{([^}]*)\}/s);
461
+ if (!devMatch) return {};
462
+ const block = devMatch[1];
463
+ const str = (k) => {
464
+ const m = block.match(new RegExp(`${k}\\s*:\\s*['"\`]([^'"\`]*)['"\`]`));
465
+ return m?.[1];
466
+ };
467
+ const num = (k) => {
468
+ const m = block.match(new RegExp(`${k}\\s*:\\s*(\\d+)`));
469
+ return m ? parseInt(m[1], 10) : void 0;
470
+ };
471
+ const bool = (k) => {
472
+ const m = block.match(new RegExp(`${k}\\s*:\\s*(true|false)`));
473
+ return m ? m[1] === "true" : void 0;
474
+ };
475
+ return { port: num("port"), src: str("src"), mode: str("mode"), seed: bool("seed"), apiUrl: str("apiUrl"), token: str("token"), open: bool("open") };
476
+ } catch {
477
+ return {};
478
+ }
479
+ }
453
480
  async function main() {
454
481
  if (command === "dev") {
455
- const port = getFlag("--port") ? parseInt(getFlag("--port"), 10) : void 0;
456
- const src = getFlag("--src");
457
- const mode = getFlag("--mode");
458
- const seed = hasFlag("--seed");
459
- const apiUrl = getFlag("--api-url");
460
- const authToken = getFlag("--token");
461
- const open = hasFlag("--open");
482
+ const devCfg = await loadDevConfig();
483
+ const port = getFlag("--port") ? parseInt(getFlag("--port"), 10) : devCfg.port;
484
+ const src = getFlag("--src") ?? devCfg.src;
485
+ const mode = getFlag("--mode") ?? devCfg.mode;
486
+ const seed = hasFlag("--seed") || devCfg.seed === true;
487
+ const apiUrl = getFlag("--api-url") ?? devCfg.apiUrl;
488
+ const authToken = getFlag("--token") ?? devCfg.token;
489
+ const open = hasFlag("--open") || devCfg.open === true;
462
490
  const { createDevServer } = await import("../dev-server.mjs");
463
491
  const server = await createDevServer({
464
492
  port,
@@ -490,8 +518,23 @@ async function main() {
490
518
  const result = await test({ src });
491
519
  if (!result.success) process.exit(1);
492
520
  } else if (command === "deploy") {
493
- const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
494
- const token = resolveToken(apiUrl, getFlag("--token"));
521
+ const { loadMmrcConfig, resolveTarget } = await import("../config-PL24KEWL.mjs");
522
+ const mmrcConfig = loadMmrcConfig();
523
+ const targetFlag = getFlag("--target");
524
+ const explicitApiUrl = getFlag("--api-url");
525
+ const explicitToken = getFlag("--token");
526
+ let apiUrl;
527
+ let targetName;
528
+ let configToken = null;
529
+ if (targetFlag || mmrcConfig?.environments && !explicitApiUrl) {
530
+ const resolved = resolveTarget(targetFlag, mmrcConfig, "http://localhost:4200/api/v1");
531
+ apiUrl = explicitApiUrl ?? resolved.apiUrl;
532
+ targetName = resolved.name;
533
+ configToken = resolved.token;
534
+ } else {
535
+ apiUrl = explicitApiUrl ?? "http://localhost:4200/api/v1";
536
+ }
537
+ const token = explicitToken ?? configToken ?? resolveToken(apiUrl) ?? null;
495
538
  const dir = getFlag("--dir");
496
539
  const src = getFlag("--src");
497
540
  const force = hasFlag("--force");
@@ -502,6 +545,9 @@ async function main() {
502
545
  console.error(" 1. Run `mmrc login` to save credentials");
503
546
  console.error(" 2. Pass --token TOKEN");
504
547
  console.error(" 3. Set MMRC_TOKEN environment variable");
548
+ if (mmrcConfig?.environments) {
549
+ console.error(" 4. Set token in mmrc.config.ts environment");
550
+ }
505
551
  process.exit(1);
506
552
  }
507
553
  if (shouldBuild) {
@@ -514,7 +560,7 @@ async function main() {
514
560
  const { glob: glob2 } = await import("glob");
515
561
  const configPath = resolve2(srcDir, "mm.config.ts");
516
562
  if (existsSync3(configPath)) {
517
- const { compileProject } = await import("../project-compiler-EGJUTAJU.mjs");
563
+ const { compileProject } = await import("../project-compiler-OP2VVGJQ.mjs");
518
564
  const allFiles = await glob2(`${srcDir}/**/*.{ts,tsx}`, {
519
565
  ignore: ["**/node_modules/**", "**/dist/**", "**/__tests__/**", "**/*.test.*"]
520
566
  });
@@ -556,9 +602,9 @@ async function main() {
556
602
  }
557
603
  console.log("");
558
604
  }
559
- await deploy({ apiUrl, token, dir: outDir, force, dryRun });
605
+ await deploy({ apiUrl, token, dir: outDir, force, dryRun, targetName });
560
606
  } else {
561
- await deploy({ apiUrl, token, dir, force, dryRun });
607
+ await deploy({ apiUrl, token, dir, force, dryRun, targetName });
562
608
  }
563
609
  } else if (command === "login") {
564
610
  const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
@@ -577,13 +623,30 @@ async function main() {
577
623
  console.error('[mmrc] Error: name is required\n Usage: mmrc init <name> [--description "..."] [--icon "..."] [--author "..."]');
578
624
  process.exit(1);
579
625
  }
580
- const { init } = await import("../init-IXEE2RCF.mjs");
626
+ const { init } = await import("../init-DQDX3QK6.mjs");
581
627
  await init({
582
628
  name,
583
629
  description: getFlag("--description"),
584
630
  icon: getFlag("--icon"),
585
631
  author: getFlag("--author")
586
632
  });
633
+ } else if (command === "verify") {
634
+ const target = getPositional();
635
+ if (!target) {
636
+ console.error("[mmrc] Error: target path is required\n Usage: mmrc verify <file-or-dir> [options]");
637
+ process.exit(1);
638
+ }
639
+ const { verifyCommand } = await import("../verify-SEIXUGN4.mjs");
640
+ const result = await verifyCommand({
641
+ target,
642
+ static: hasFlag("--static"),
643
+ mutation: hasFlag("--mutation"),
644
+ generate: hasFlag("--generate"),
645
+ ci: hasFlag("--ci"),
646
+ minCoverage: getFlag("--min-coverage") ? parseFloat(getFlag("--min-coverage")) : void 0,
647
+ minMutationScore: getFlag("--min-mutation-score") ? parseFloat(getFlag("--min-mutation-score")) : void 0
648
+ });
649
+ if (!result.success) process.exit(1);
587
650
  } else if (command === "pull") {
588
651
  const slug = getPositional();
589
652
  const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
@@ -600,20 +663,66 @@ async function main() {
600
663
  console.error(" 3. Set MMRC_TOKEN environment variable");
601
664
  process.exit(1);
602
665
  }
603
- const { pull } = await import("../pull-JBEQWVPE.mjs");
666
+ const { pull } = await import("../pull-P44LDRWB.mjs");
604
667
  await pull({ slug, apiUrl, token, outDir });
668
+ } else if (command === "config") {
669
+ const subcommand = args[1];
670
+ const { getConfig, getConfigValue, setConfigValue, flattenConfig, findConfigPath, writeConfigFile } = await import("../config-PL24KEWL.mjs");
671
+ if (subcommand === "get") {
672
+ const key = args[2];
673
+ if (!key) {
674
+ console.error("[mmrc] Usage: mmrc config get <key> (e.g., dev.port)");
675
+ process.exit(1);
676
+ }
677
+ const config = getConfig();
678
+ const value = getConfigValue(config, key);
679
+ if (value === void 0) {
680
+ console.error(`[mmrc] Config key "${key}" not found.`);
681
+ process.exit(1);
682
+ }
683
+ console.log(typeof value === "object" ? JSON.stringify(value, null, 2) : String(value));
684
+ } else if (subcommand === "set") {
685
+ const key = args[2];
686
+ const value = args[3];
687
+ if (!key || value === void 0) {
688
+ console.error("[mmrc] Usage: mmrc config set <key> <value> (e.g., dev.port 3000)");
689
+ process.exit(1);
690
+ }
691
+ const configPath = findConfigPath();
692
+ if (!configPath) {
693
+ console.error("[mmrc] No mmrc.config.ts found. Run `mmrc init` first.");
694
+ process.exit(1);
695
+ }
696
+ const config = getConfig();
697
+ setConfigValue(config, key, value);
698
+ writeConfigFile(configPath, config);
699
+ console.log(`[mmrc] Set ${key} = ${value}`);
700
+ } else if (subcommand === "list" || !subcommand) {
701
+ const config = getConfig();
702
+ const entries = flattenConfig(config);
703
+ const maxKeyLen = Math.max(...entries.map(([k]) => k.length));
704
+ for (const [k, v] of entries) {
705
+ console.log(` ${k.padEnd(maxKeyLen)} ${v}`);
706
+ }
707
+ } else {
708
+ console.error(`[mmrc] Unknown config subcommand: ${subcommand}`);
709
+ console.error(" Usage: mmrc config [get <key> | set <key> <value> | list]");
710
+ process.exit(1);
711
+ }
605
712
  } else {
606
713
  console.log(`
607
714
  MindMatrix React Compiler (mmrc)
608
715
 
609
716
  Commands:
610
717
  init Scaffold a new blueprint package
718
+ config View and modify mmrc.config.ts settings
611
719
  login Authenticate and save credentials
612
720
  logout Remove saved credentials
613
721
  whoami Show current authenticated user
614
722
  dev Start dev server with hot reload
615
723
  build Compile workflow files to Pure Form IR
616
724
  test Round-trip fidelity test (compile \u2192 decompile \u2192 recompile \u2192 compare)
725
+ verify Compile + run verification layers (structural, reachability, safety, liveness, etc.)
617
726
  deploy Compile + upload workflows to backend DB
618
727
  pull Fetch a definition from DB and scaffold local project
619
728
 
@@ -655,9 +764,18 @@ Usage:
655
764
  mmrc test [options]
656
765
  --src Source directory (default: current directory)
657
766
 
767
+ mmrc verify <file-or-dir> [options]
768
+ --static Static analysis only (skip conformance/property/mutation)
769
+ --mutation Include mutation analysis
770
+ --generate Output generated test file instead of running
771
+ --ci CI mode \u2014 exit with non-zero on any failure
772
+ --min-coverage N Minimum coverage percentage (requires --ci)
773
+ --min-mutation-score N Minimum mutation score (requires --ci)
774
+
658
775
  mmrc deploy [options]
659
- --api-url API base URL (default: http://localhost:4200/api/v1)
660
- --token Auth token (or use mmrc login / MMRC_TOKEN env var)
776
+ --target Deploy target from mmrc.config.ts environments (e.g., staging, production)
777
+ --api-url API base URL (overrides target; default: http://localhost:4200/api/v1)
778
+ --token Auth token (overrides all; or use mmrc login / MMRC_TOKEN env var)
661
779
  --dir Compiled workflows directory (default: dist/workflows)
662
780
  --src Source directory (used with --build)
663
781
  --build Compile first, then deploy (no separate build step needed)
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  transform
4
4
  } from "../chunk-CKGOZAB7.mjs";
5
- import "../chunk-Y6FXYEAI.mjs";
5
+ import "../chunk-CIESM3BP.mjs";
6
6
 
7
7
  // src/codemod/cli.ts
8
8
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
@@ -10,7 +10,7 @@ import {
10
10
  reverseClassifyAtom,
11
11
  transform
12
12
  } from "../chunk-CKGOZAB7.mjs";
13
- import "../chunk-Y6FXYEAI.mjs";
13
+ import "../chunk-CIESM3BP.mjs";
14
14
  export {
15
15
  ATOM_IMPORT_SOURCE,
16
16
  FORWARD_RULES,
@@ -0,0 +1,219 @@
1
+ import "./chunk-CIESM3BP.mjs";
2
+
3
+ // src/cli/config.ts
4
+ import { existsSync, readFileSync, writeFileSync } from "fs";
5
+ import { resolve, join } from "path";
6
+ var DEFAULT_CONFIG = {
7
+ dev: {
8
+ port: 5199,
9
+ apiPort: 4200,
10
+ db: "sqlite://mm-dev.db",
11
+ redis: "",
12
+ api: "http://localhost:4200/api/v1",
13
+ seed: false,
14
+ open: false
15
+ },
16
+ build: {
17
+ mode: "infer",
18
+ outDir: "dist/workflows",
19
+ skipTypeCheck: false
20
+ },
21
+ test: {
22
+ minCoverage: 80,
23
+ minMutationScore: 60,
24
+ integration: false
25
+ },
26
+ environments: {
27
+ local: { apiUrl: "http://localhost:4200/api/v1" },
28
+ dev: { apiUrl: "https://dev.mindmatrix.club/api/v1" }
29
+ },
30
+ defaultTarget: "dev"
31
+ };
32
+ function isPlainObject(val) {
33
+ return typeof val === "object" && val !== null && !Array.isArray(val);
34
+ }
35
+ function deepMerge(target, source) {
36
+ const result = { ...target };
37
+ for (const key of Object.keys(source)) {
38
+ const srcVal = source[key];
39
+ const tgtVal = target[key];
40
+ if (isPlainObject(srcVal) && isPlainObject(tgtVal)) {
41
+ result[key] = deepMerge(tgtVal, srcVal);
42
+ } else if (srcVal !== void 0) {
43
+ result[key] = srcVal;
44
+ }
45
+ }
46
+ return result;
47
+ }
48
+ function findConfigPath(startDir) {
49
+ let dir = startDir ?? process.cwd();
50
+ const root = resolve("/");
51
+ while (true) {
52
+ for (const name of ["mmrc.config.ts", "mmrc.config.json"]) {
53
+ const candidate = join(dir, name);
54
+ if (existsSync(candidate)) return candidate;
55
+ }
56
+ const parent = resolve(dir, "..");
57
+ if (parent === dir || parent === root) break;
58
+ dir = parent;
59
+ }
60
+ return null;
61
+ }
62
+ function loadConfigFromFile(configPath) {
63
+ const content = readFileSync(configPath, "utf-8");
64
+ if (configPath.endsWith(".json")) {
65
+ try {
66
+ return JSON.parse(content);
67
+ } catch {
68
+ return {};
69
+ }
70
+ }
71
+ let js = content.replace(/\/\*[\s\S]*?\*\//g, "").replace(/(?<![:'"])\/\/.*$/gm, "").replace(/^import\s+.*$/gm, "").replace(/^export\s+default\s+/m, "module.exports = ").replace(/^export\s+/gm, "").replace(/:\s*MmrcConfig/g, "").replace(/as\s+const/g, "").replace(/satisfies\s+\w+/g, "");
72
+ js = `function defineMmrc(c) { return c; }
73
+ ${js}`;
74
+ try {
75
+ const m = {};
76
+ const fn = new Function("module", "exports", "require", js);
77
+ fn(m, m, () => ({}));
78
+ const exported = m.exports ?? m;
79
+ return isPlainObject(exported) ? exported : {};
80
+ } catch {
81
+ return {};
82
+ }
83
+ }
84
+ function getConfig(startDir) {
85
+ const configPath = findConfigPath(startDir);
86
+ if (!configPath) return { ...DEFAULT_CONFIG };
87
+ const userConfig = loadConfigFromFile(configPath);
88
+ return deepMerge(DEFAULT_CONFIG, userConfig);
89
+ }
90
+ function getConfigValue(config, key) {
91
+ const parts = key.split(".");
92
+ let current = config;
93
+ for (const part of parts) {
94
+ if (!isPlainObject(current)) return void 0;
95
+ current = current[part];
96
+ }
97
+ return current;
98
+ }
99
+ function setConfigValue(config, key, value) {
100
+ const parts = key.split(".");
101
+ let current = config;
102
+ for (let i = 0; i < parts.length - 1; i++) {
103
+ const part = parts[i];
104
+ if (!isPlainObject(current[part])) {
105
+ current[part] = {};
106
+ }
107
+ current = current[part];
108
+ }
109
+ const last = parts[parts.length - 1];
110
+ if (value === "true") current[last] = true;
111
+ else if (value === "false") current[last] = false;
112
+ else if (/^\d+$/.test(value)) current[last] = parseInt(value, 10);
113
+ else current[last] = value;
114
+ }
115
+ function flattenConfig(obj, prefix = "") {
116
+ const entries = [];
117
+ if (!isPlainObject(obj)) {
118
+ entries.push([prefix, String(obj)]);
119
+ return entries;
120
+ }
121
+ for (const [key, val] of Object.entries(obj)) {
122
+ const fullKey = prefix ? `${prefix}.${key}` : key;
123
+ if (isPlainObject(val)) {
124
+ entries.push(...flattenConfig(val, fullKey));
125
+ } else {
126
+ entries.push([fullKey, String(val)]);
127
+ }
128
+ }
129
+ return entries;
130
+ }
131
+ function writeConfigFile(configPath, config) {
132
+ const json = JSON.stringify(config, null, 2);
133
+ const content = `/**
134
+ * mmrc.config.ts \u2014 MindMatrix React Compiler configuration.
135
+ *
136
+ * Configures the mmrc CLI for local dev, builds, tests, and deploy targets.
137
+ * Edit directly or run \`mmrc config set <key> <value>\`.
138
+ */
139
+
140
+ const config = ${json};
141
+
142
+ export default config;
143
+ `;
144
+ writeFileSync(configPath, content, "utf-8");
145
+ }
146
+ function resolveTarget(targetName, config, fallbackApiUrl) {
147
+ if (!config || !config.environments) {
148
+ return { name: targetName ?? "default", apiUrl: fallbackApiUrl, token: null };
149
+ }
150
+ const name = targetName ?? config.defaultTarget ?? "local";
151
+ const env = config.environments[name];
152
+ if (!env) {
153
+ const available = Object.keys(config.environments).join(", ");
154
+ throw new Error(`Unknown target "${name}". Available environments: ${available}`);
155
+ }
156
+ return { name, apiUrl: env.apiUrl, token: env.token ?? null };
157
+ }
158
+ function generateMmrcConfig() {
159
+ return `/**
160
+ * mmrc.config.ts \u2014 MindMatrix React Compiler configuration.
161
+ *
162
+ * Configures the mmrc CLI for local dev, builds, tests, and deploy targets.
163
+ * Edit directly or run \`mmrc config set <key> <value>\`.
164
+ */
165
+
166
+ const config = {
167
+ dev: {
168
+ port: 5199,
169
+ apiPort: 4200,
170
+ db: 'sqlite://mm-dev.db',
171
+ redis: '',
172
+ api: 'https://dev.mindmatrix.club/api/v1',
173
+ seed: false,
174
+ open: false,
175
+ },
176
+
177
+ build: {
178
+ mode: 'infer',
179
+ outDir: 'dist/workflows',
180
+ skipTypeCheck: false,
181
+ },
182
+
183
+ test: {
184
+ minCoverage: 80,
185
+ minMutationScore: 60,
186
+ integration: false,
187
+ },
188
+
189
+ environments: {
190
+ local: { apiUrl: 'http://localhost:4200/api/v1' },
191
+ dev: { apiUrl: 'https://dev.mindmatrix.club/api/v1' },
192
+ },
193
+
194
+ defaultTarget: 'dev',
195
+ };
196
+
197
+ export default config;
198
+ `;
199
+ }
200
+ function loadMmrcConfig(dir) {
201
+ const path = findConfigPath(dir);
202
+ if (!path) return null;
203
+ const partial = loadConfigFromFile(path);
204
+ return deepMerge(DEFAULT_CONFIG, partial);
205
+ }
206
+ export {
207
+ DEFAULT_CONFIG,
208
+ deepMerge,
209
+ findConfigPath,
210
+ flattenConfig,
211
+ generateMmrcConfig,
212
+ getConfig,
213
+ getConfigValue,
214
+ loadConfigFromFile,
215
+ loadMmrcConfig,
216
+ resolveTarget,
217
+ setConfigValue,
218
+ writeConfigFile
219
+ };
@@ -0,0 +1,113 @@
1
+ import { ViteDevServer } from 'vite';
2
+ import { IRWorkflowDefinition } from '@mindmatrix/player-core';
3
+
4
+ /**
5
+ * CLI Build Command — compiles workflow files to Pure Form JSON.
6
+ *
7
+ * Supports three file types:
8
+ * - *.workflow.tsx — React workflow components
9
+ * - models/*.ts — TypeScript model files
10
+ * - *.server.ts — Server action files
11
+ *
12
+ * Produces:
13
+ * - *.workflow.json — IR (Pure Form)
14
+ * - *.json — Engine-compatible definition
15
+ * - envelope.json — Source envelope with file manifest
16
+ */
17
+
18
+ interface BuildOptions {
19
+ src?: string;
20
+ outDir?: string;
21
+ mode?: 'strict' | 'infer';
22
+ /** Generate source envelope. */
23
+ envelope?: boolean;
24
+ /** Blueprint slug for envelope. */
25
+ slug?: string;
26
+ /** Blueprint version for envelope. */
27
+ version?: string;
28
+ /** Skip TypeScript type checking (not recommended). */
29
+ skipTypeCheck?: boolean;
30
+ /** Watch mode: auto-recompile on file changes. */
31
+ watch?: boolean;
32
+ }
33
+ interface BuildResult {
34
+ compiled: number;
35
+ errors: number;
36
+ warnings: number;
37
+ definitions: IRWorkflowDefinition[];
38
+ errorDetails: {
39
+ file: string;
40
+ message: string;
41
+ line?: number;
42
+ }[];
43
+ }
44
+ declare function build(options?: BuildOptions): Promise<BuildResult>;
45
+
46
+ /**
47
+ * Dev Server — Vite-based development server for MindMatrix React workflows.
48
+ *
49
+ * Uses the Vite plugin to watch .workflow.tsx files. On file change:
50
+ * 1. Compile through Babel plugin → extract IR
51
+ * 2. Diff IR against last known state
52
+ * 3. Notify connected frontends via WebSocket
53
+ * 4. Optionally seed definitions to the dev API
54
+ *
55
+ * Usage (programmatic):
56
+ * import { createDevServer } from '@mindmatrix/react-compiler';
57
+ * const server = await createDevServer({ port: 5199 });
58
+ * // ... server.close() to stop
59
+ *
60
+ * Usage (CLI):
61
+ * mmrc dev --port 5199 --src src/workflows --seed
62
+ */
63
+
64
+ /** Minimal WebSocket interface — avoids requiring @types/ws at compile time */
65
+ interface WsClient {
66
+ readyState: number;
67
+ send(data: string): void;
68
+ close(): void;
69
+ on(event: string, listener: (...args: unknown[]) => void): void;
70
+ }
71
+ interface DevServerOptions {
72
+ /** Port for the dev server. Default: 5199 */
73
+ port?: number;
74
+ /** Source directory to watch. Default: 'src/workflows' */
75
+ src?: string;
76
+ /** Compilation mode. Default: 'infer' */
77
+ mode?: 'strict' | 'infer';
78
+ /** Glob patterns for workflow files. Default: ['**\/*.workflow.tsx'] */
79
+ include?: string[];
80
+ /** Output directory for .workflow.json sidecar files. Default: 'dist/workflows' */
81
+ outDir?: string;
82
+ /** Seed compiled definitions to the dev API on change. Default: false */
83
+ seed?: boolean;
84
+ /** Dev API base URL. Default: 'http://localhost:4200/api/v1' */
85
+ apiUrl?: string;
86
+ /** Auth token for dev API. Default: reads from MINDMATRIX_TOKEN env */
87
+ authToken?: string;
88
+ /** Enable WebSocket notification channel. Default: true */
89
+ ws?: boolean;
90
+ /** Open browser on start. Default: false */
91
+ open?: boolean;
92
+ }
93
+ interface DevServerInstance {
94
+ /** The underlying Vite dev server */
95
+ vite: ViteDevServer;
96
+ /** Port the server is running on */
97
+ port: number;
98
+ /** Connected WebSocket clients */
99
+ clients: Set<WsClient>;
100
+ /** Trigger a full rebuild of all workflow files */
101
+ rebuild: () => Promise<BuildResult>;
102
+ /** Stop the dev server */
103
+ close: () => Promise<void>;
104
+ }
105
+ /**
106
+ * Create and start a MindMatrix dev server.
107
+ *
108
+ * This is a thin Vite server configured with the mindmatrixReact plugin,
109
+ * plus a WebSocket channel that pushes compile events to connected editors.
110
+ */
111
+ declare function createDevServer(options?: DevServerOptions): Promise<DevServerInstance>;
112
+
113
+ export { type BuildOptions as B, type DevServerOptions as D, type DevServerInstance as a, build as b, createDevServer as c, type BuildResult as d };