@mmapp/react-compiler 0.1.0-alpha.3 → 0.1.0-alpha.4

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 (117) hide show
  1. package/dist/auth-3UK75242.mjs +17 -0
  2. package/dist/babel/index.d.mts +2 -2
  3. package/dist/babel/index.d.ts +2 -2
  4. package/dist/babel/index.js +2736 -306
  5. package/dist/babel/index.mjs +1 -1
  6. package/dist/chunk-52XHYD2V.mjs +214 -0
  7. package/dist/chunk-5FTDWKHH.mjs +244 -0
  8. package/dist/chunk-5GUFFFGL.mjs +148 -0
  9. package/dist/chunk-7JRAEFRB.mjs +7510 -0
  10. package/dist/chunk-7T6Q5KAA.mjs +7506 -0
  11. package/dist/chunk-ABYPKRSB.mjs +215 -0
  12. package/dist/chunk-BZEXUPDH.mjs +175 -0
  13. package/dist/chunk-EO6SYNCG.mjs +175 -0
  14. package/dist/chunk-HRYR54PT.mjs +175 -0
  15. package/dist/chunk-J3M4GUS7.mjs +161 -0
  16. package/dist/chunk-J7JUAHS4.mjs +186 -0
  17. package/dist/chunk-JRGFBWTN.mjs +2918 -0
  18. package/dist/chunk-NTB7OEX2.mjs +2918 -0
  19. package/dist/chunk-O4AUS7EU.mjs +148 -0
  20. package/dist/chunk-OPJKP747.mjs +7506 -0
  21. package/dist/chunk-R2DD5GTY.mjs +186 -0
  22. package/dist/chunk-THFYE5ZX.mjs +244 -0
  23. package/dist/chunk-UDDTWG5J.mjs +734 -0
  24. package/dist/chunk-VLTKQDJ3.mjs +244 -0
  25. package/dist/chunk-WBYMW4NQ.mjs +3450 -0
  26. package/dist/chunk-WVYY32LD.mjs +939 -0
  27. package/dist/chunk-XDVM4YHX.mjs +3450 -0
  28. package/dist/chunk-Z2G5RZ4H.mjs +186 -0
  29. package/dist/chunk-ZE3KCHBM.mjs +2918 -0
  30. package/dist/cli/index.js +10378 -4107
  31. package/dist/cli/index.mjs +224 -183
  32. package/dist/codemod/cli.js +1 -1
  33. package/dist/codemod/cli.mjs +1 -1
  34. package/dist/codemod/index.d.mts +3 -3
  35. package/dist/codemod/index.d.ts +3 -3
  36. package/dist/codemod/index.js +1 -1
  37. package/dist/codemod/index.mjs +1 -1
  38. package/dist/config-PL24KEWL.mjs +219 -0
  39. package/dist/deploy-YAJGW6II.mjs +9 -0
  40. package/dist/dev-server-CrQ041KP.d.mts +79 -0
  41. package/dist/dev-server-CrQ041KP.d.ts +79 -0
  42. package/dist/dev-server.d.mts +2 -2
  43. package/dist/dev-server.d.ts +2 -2
  44. package/dist/dev-server.js +4319 -421
  45. package/dist/dev-server.mjs +4 -4
  46. package/dist/envelope-ChEkuHij.d.mts +265 -0
  47. package/dist/envelope-ChEkuHij.d.ts +265 -0
  48. package/dist/envelope.d.mts +2 -2
  49. package/dist/envelope.d.ts +2 -2
  50. package/dist/envelope.js +2734 -304
  51. package/dist/envelope.mjs +2 -2
  52. package/dist/index-CEKyyazf.d.mts +104 -0
  53. package/dist/index-CEKyyazf.d.ts +104 -0
  54. package/dist/index.d.mts +164 -9
  55. package/dist/index.d.ts +164 -9
  56. package/dist/index.js +4730 -734
  57. package/dist/index.mjs +216 -8
  58. package/dist/init-7FJENUDK.mjs +407 -0
  59. package/dist/init-DQDX3QK6.mjs +369 -0
  60. package/dist/project-compiler-NNK32MPG.mjs +10 -0
  61. package/dist/project-compiler-OP2VVGJQ.mjs +10 -0
  62. package/dist/project-compiler-ZB4RUYVL.mjs +10 -0
  63. package/dist/project-decompiler-U55HQUHW.mjs +7 -0
  64. package/dist/project-decompiler-US7GAVIC.mjs +7 -0
  65. package/dist/pull-KOL2QAYQ.mjs +109 -0
  66. package/dist/pull-P44LDRWB.mjs +109 -0
  67. package/dist/seed-KOGEPGOJ.mjs +154 -0
  68. package/dist/server-VW6UPCHO.mjs +277 -0
  69. package/dist/testing/index.d.mts +8 -8
  70. package/dist/testing/index.d.ts +8 -8
  71. package/dist/testing/index.js +2744 -314
  72. package/dist/testing/index.mjs +1 -1
  73. package/dist/verify-BYHUKARQ.mjs +1833 -0
  74. package/dist/verify-OQDEQYMS.mjs +1833 -0
  75. package/dist/verify-SEIXUGN4.mjs +1833 -0
  76. package/dist/vite/index.d.mts +1 -1
  77. package/dist/vite/index.d.ts +1 -1
  78. package/dist/vite/index.js +2735 -305
  79. package/dist/vite/index.mjs +2 -2
  80. package/examples/authentication/main.workflow.tsx +1 -1
  81. package/examples/authentication/mm.config.ts +1 -1
  82. package/examples/authentication/pages/LoginPage.tsx +2 -2
  83. package/examples/authentication/pages/SignupPage.tsx +2 -2
  84. package/examples/counter.workflow.tsx +1 -1
  85. package/examples/dashboard.workflow.tsx +1 -1
  86. package/examples/invoice-approval/actions/invoice.server.ts +1 -1
  87. package/examples/invoice-approval/main.workflow.tsx +1 -1
  88. package/examples/invoice-approval/mm.config.ts +1 -1
  89. package/examples/invoice-approval/pages/InvoiceDetailPage.tsx +1 -1
  90. package/examples/invoice-approval/pages/InvoiceFormPage.tsx +1 -1
  91. package/examples/invoice-approval/pages/InvoiceListPage.tsx +1 -1
  92. package/examples/todo-app.workflow.tsx +1 -1
  93. package/examples/uber-app/actions/matching.server.ts +1 -1
  94. package/examples/uber-app/actions/notifications.server.ts +1 -1
  95. package/examples/uber-app/actions/payments.server.ts +1 -1
  96. package/examples/uber-app/actions/pricing.server.ts +1 -1
  97. package/examples/uber-app/app/admin/analytics.tsx +2 -2
  98. package/examples/uber-app/app/admin/fleet.tsx +2 -2
  99. package/examples/uber-app/app/admin/surge-pricing.tsx +2 -2
  100. package/examples/uber-app/app/driver/dashboard.tsx +2 -2
  101. package/examples/uber-app/app/driver/earnings.tsx +2 -2
  102. package/examples/uber-app/app/driver/navigation.tsx +2 -2
  103. package/examples/uber-app/app/driver/ride-acceptance.tsx +2 -2
  104. package/examples/uber-app/app/rider/home.tsx +2 -2
  105. package/examples/uber-app/app/rider/payment-methods.tsx +2 -2
  106. package/examples/uber-app/app/rider/ride-history.tsx +2 -2
  107. package/examples/uber-app/app/rider/ride-tracking.tsx +2 -2
  108. package/examples/uber-app/components/DriverCard.tsx +1 -1
  109. package/examples/uber-app/components/MapView.tsx +3 -3
  110. package/examples/uber-app/components/RatingStars.tsx +2 -2
  111. package/examples/uber-app/components/RideCard.tsx +1 -1
  112. package/examples/uber-app/mm.config.ts +1 -1
  113. package/examples/uber-app/workflows/dispute-resolution.workflow.tsx +2 -2
  114. package/examples/uber-app/workflows/driver-onboarding.workflow.tsx +2 -2
  115. package/examples/uber-app/workflows/payment-processing.workflow.tsx +2 -2
  116. package/examples/uber-app/workflows/ride-request.workflow.tsx +2 -2
  117. package/package.json +8 -3
@@ -1,15 +1,19 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ login,
4
+ logout,
5
+ resolveToken,
6
+ whoami
7
+ } from "../chunk-J3M4GUS7.mjs";
2
8
  import {
3
9
  deploy
4
- } from "../chunk-EQGA6A6D.mjs";
10
+ } from "../chunk-ABYPKRSB.mjs";
5
11
  import {
6
12
  build
7
- } from "../chunk-5RKTOVR5.mjs";
13
+ } from "../chunk-VLTKQDJ3.mjs";
8
14
  import "../chunk-5M7DKKBC.mjs";
9
- import "../chunk-FYT47UBU.mjs";
10
- import {
11
- __require
12
- } from "../chunk-CIESM3BP.mjs";
15
+ import "../chunk-7T6Q5KAA.mjs";
16
+ import "../chunk-CIESM3BP.mjs";
13
17
 
14
18
  // src/cli/test.ts
15
19
  import { glob } from "glob";
@@ -39,8 +43,8 @@ async function test(options = {}) {
39
43
  const rel = f.startsWith(srcDir + "/") ? f.slice(srcDir.length + 1) : f;
40
44
  fileMap[rel] = readFileSync(f, "utf-8");
41
45
  }
42
- const { compileProject } = await import("../project-compiler-D2LCC27O.mjs");
43
- const { decompileProjectEnhanced } = await import("../project-decompiler-FLXCEJHS.mjs");
46
+ const { compileProject } = await import("../project-compiler-ZB4RUYVL.mjs");
47
+ const { decompileProjectEnhanced } = await import("../project-decompiler-U55HQUHW.mjs");
44
48
  process.stdout.write(` Compiling project...`);
45
49
  const t0 = performance.now();
46
50
  let ir1;
@@ -285,155 +289,6 @@ function compareTransitions(diffs, transitions1, transitions2) {
285
289
  return { transitionMatch, transitionCount };
286
290
  }
287
291
 
288
- // src/cli/auth.ts
289
- import { readFileSync as readFileSync2, writeFileSync, mkdirSync, existsSync as existsSync2, unlinkSync } from "fs";
290
- import { join } from "path";
291
- import { homedir } from "os";
292
- import { createInterface } from "readline";
293
- var MMRC_DIR = join(homedir(), ".mmrc");
294
- var CREDENTIALS_PATH = join(MMRC_DIR, "credentials.json");
295
- function loadCredentials() {
296
- if (!existsSync2(CREDENTIALS_PATH)) return {};
297
- try {
298
- return JSON.parse(readFileSync2(CREDENTIALS_PATH, "utf-8"));
299
- } catch {
300
- return {};
301
- }
302
- }
303
- function saveCredentials(apiUrl, token) {
304
- mkdirSync(MMRC_DIR, { recursive: true, mode: 448 });
305
- const creds = loadCredentials();
306
- creds[apiUrl] = { token, savedAt: (/* @__PURE__ */ new Date()).toISOString() };
307
- writeFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), "utf-8");
308
- try {
309
- const { chmodSync } = __require("fs");
310
- chmodSync(CREDENTIALS_PATH, 384);
311
- } catch {
312
- }
313
- }
314
- function removeCredentials(apiUrl) {
315
- if (!existsSync2(CREDENTIALS_PATH)) return;
316
- if (!apiUrl) {
317
- unlinkSync(CREDENTIALS_PATH);
318
- return;
319
- }
320
- const creds = loadCredentials();
321
- delete creds[apiUrl];
322
- if (Object.keys(creds).length === 0) {
323
- unlinkSync(CREDENTIALS_PATH);
324
- } else {
325
- writeFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), "utf-8");
326
- }
327
- }
328
- function resolveToken(apiUrl, explicitToken) {
329
- if (explicitToken) return explicitToken;
330
- const envToken = process.env.MMRC_TOKEN;
331
- if (envToken) return envToken;
332
- const creds = loadCredentials();
333
- const entry = creds[apiUrl];
334
- if (entry?.token) return entry.token;
335
- return null;
336
- }
337
- function prompt(question, hidden = false) {
338
- return new Promise((resolve2) => {
339
- const rl = createInterface({
340
- input: process.stdin,
341
- output: process.stdout
342
- });
343
- if (hidden && process.stdin.isTTY) {
344
- const origWrite = process.stdout.write.bind(process.stdout);
345
- process.stdout.write = ((chunk, encodingOrCb, cb) => {
346
- if (typeof chunk === "string" && chunk.includes(question)) {
347
- return origWrite(chunk, encodingOrCb, cb);
348
- }
349
- if (typeof chunk === "string" && !chunk.includes("\n")) {
350
- return true;
351
- }
352
- return origWrite(chunk, encodingOrCb, cb);
353
- });
354
- rl.question(question, (answer) => {
355
- process.stdout.write = origWrite;
356
- console.log();
357
- rl.close();
358
- resolve2(answer.trim());
359
- });
360
- } else {
361
- rl.question(question, (answer) => {
362
- rl.close();
363
- resolve2(answer.trim());
364
- });
365
- }
366
- });
367
- }
368
- async function login(apiUrl, email, password) {
369
- if (!email) {
370
- email = await prompt("Email: ");
371
- }
372
- if (!password) {
373
- password = await prompt("Password: ", true);
374
- }
375
- if (!email || !password) {
376
- throw new Error("Email and password are required");
377
- }
378
- console.log(`[mmrc] Logging in to ${apiUrl}...`);
379
- const res = await fetch(`${apiUrl}/auth/login`, {
380
- method: "POST",
381
- headers: { "Content-Type": "application/json" },
382
- body: JSON.stringify({ email, password })
383
- });
384
- if (!res.ok) {
385
- const text = await res.text();
386
- throw new Error(`Login failed: ${res.status} ${text}`);
387
- }
388
- const data = await res.json();
389
- const token = data.token ?? data.access_token ?? data.accessToken;
390
- if (!token) {
391
- throw new Error("Login succeeded but no token in response");
392
- }
393
- saveCredentials(apiUrl, token);
394
- const userName = data.name ?? data.user?.name ?? data.user?.email ?? email;
395
- console.log(`[mmrc] Logged in as ${userName}`);
396
- console.log(`[mmrc] Token saved to ${CREDENTIALS_PATH}`);
397
- return token;
398
- }
399
- function logout(apiUrl) {
400
- if (apiUrl) {
401
- removeCredentials(apiUrl);
402
- console.log(`[mmrc] Credentials removed for ${apiUrl}`);
403
- } else {
404
- removeCredentials();
405
- console.log("[mmrc] All saved credentials removed");
406
- }
407
- }
408
- async function whoami(apiUrl) {
409
- const token = resolveToken(apiUrl);
410
- if (!token) {
411
- console.log("[mmrc] Not logged in. Run `mmrc login` to authenticate.");
412
- return;
413
- }
414
- try {
415
- const res = await fetch(`${apiUrl}/auth/me`, {
416
- headers: { Authorization: `Bearer ${token}` }
417
- });
418
- if (!res.ok) {
419
- if (res.status === 401) {
420
- console.log("[mmrc] Token is expired or invalid. Run `mmrc login` to re-authenticate.");
421
- return;
422
- }
423
- console.log(`[mmrc] Failed to fetch user info: ${res.status}`);
424
- return;
425
- }
426
- const user = await res.json();
427
- console.log(`[mmrc] Logged in to ${apiUrl}`);
428
- console.log(` Name: ${user.name ?? "(unknown)"}`);
429
- console.log(` Email: ${user.email ?? "(unknown)"}`);
430
- if (user.id) console.log(` ID: ${user.id}`);
431
- if (user.role) console.log(` Role: ${user.role}`);
432
- } catch (error) {
433
- console.log(`[mmrc] Could not connect to ${apiUrl}: ${error.message}`);
434
- }
435
- }
436
-
437
292
  // src/cli/index.ts
438
293
  var args = process.argv.slice(2);
439
294
  var command = args[0];
@@ -450,15 +305,43 @@ function getPositional() {
450
305
  }
451
306
  return void 0;
452
307
  }
308
+ async function loadDevConfig() {
309
+ try {
310
+ const { existsSync: existsSync2, readFileSync: readFileSync2 } = await import("fs");
311
+ const { resolve: resolve2 } = await import("path");
312
+ const configPath = resolve2(process.cwd(), "mm.config.ts");
313
+ if (!existsSync2(configPath)) return {};
314
+ const content = readFileSync2(configPath, "utf-8");
315
+ const devMatch = content.match(/dev\s*:\s*\{([^}]*)\}/s);
316
+ if (!devMatch) return {};
317
+ const block = devMatch[1];
318
+ const str = (k) => {
319
+ const m = block.match(new RegExp(`${k}\\s*:\\s*['"\`]([^'"\`]*)['"\`]`));
320
+ return m?.[1];
321
+ };
322
+ const num = (k) => {
323
+ const m = block.match(new RegExp(`${k}\\s*:\\s*(\\d+)`));
324
+ return m ? parseInt(m[1], 10) : void 0;
325
+ };
326
+ const bool = (k) => {
327
+ const m = block.match(new RegExp(`${k}\\s*:\\s*(true|false)`));
328
+ return m ? m[1] === "true" : void 0;
329
+ };
330
+ return { port: num("port"), src: str("src"), mode: str("mode"), seed: bool("seed"), apiUrl: str("apiUrl"), token: str("token"), open: bool("open") };
331
+ } catch {
332
+ return {};
333
+ }
334
+ }
453
335
  async function main() {
454
336
  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");
337
+ const devCfg = await loadDevConfig();
338
+ const port = getFlag("--port") ? parseInt(getFlag("--port"), 10) : devCfg.port;
339
+ const src = getFlag("--src") ?? devCfg.src;
340
+ const mode = getFlag("--mode") ?? devCfg.mode;
341
+ const seed = hasFlag("--seed") || devCfg.seed === true;
342
+ const apiUrl = hasFlag("--local") ? "local" : getFlag("--api-url") ?? devCfg.apiUrl;
343
+ const authToken = getFlag("--token") ?? devCfg.token;
344
+ const open = hasFlag("--open") || devCfg.open === true;
462
345
  const { createDevServer } = await import("../dev-server.mjs");
463
346
  const server = await createDevServer({
464
347
  port,
@@ -490,8 +373,23 @@ async function main() {
490
373
  const result = await test({ src });
491
374
  if (!result.success) process.exit(1);
492
375
  } else if (command === "deploy") {
493
- const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
494
- const token = resolveToken(apiUrl, getFlag("--token"));
376
+ const { loadMmrcConfig, resolveTarget } = await import("../config-PL24KEWL.mjs");
377
+ const mmrcConfig = loadMmrcConfig();
378
+ const targetFlag = getFlag("--target");
379
+ const explicitApiUrl = getFlag("--api-url");
380
+ const explicitToken = getFlag("--token");
381
+ let apiUrl;
382
+ let targetName;
383
+ let configToken = null;
384
+ if (targetFlag || mmrcConfig?.environments && !explicitApiUrl) {
385
+ const resolved = resolveTarget(targetFlag, mmrcConfig, "http://localhost:4200/api/v1");
386
+ apiUrl = explicitApiUrl ?? resolved.apiUrl;
387
+ targetName = resolved.name;
388
+ configToken = resolved.token;
389
+ } else {
390
+ apiUrl = explicitApiUrl ?? "http://localhost:4200/api/v1";
391
+ }
392
+ const token = explicitToken ?? configToken ?? resolveToken(apiUrl) ?? null;
495
393
  const dir = getFlag("--dir");
496
394
  const src = getFlag("--src");
497
395
  const force = hasFlag("--force");
@@ -502,6 +400,9 @@ async function main() {
502
400
  console.error(" 1. Run `mmrc login` to save credentials");
503
401
  console.error(" 2. Pass --token TOKEN");
504
402
  console.error(" 3. Set MMRC_TOKEN environment variable");
403
+ if (mmrcConfig?.environments) {
404
+ console.error(" 4. Set token in mmrc.config.ts environment");
405
+ }
505
406
  process.exit(1);
506
407
  }
507
408
  if (shouldBuild) {
@@ -509,19 +410,19 @@ async function main() {
509
410
  const srcDir = src ?? ".";
510
411
  const outDir = dir ?? "dist/workflows";
511
412
  console.log("[mmrc] Building before deploy...\n");
512
- const { existsSync: existsSync3, readFileSync: readFileSync3, writeFileSync: writeFileSync2, mkdirSync: mkdirSync2 } = await import("fs");
513
- const { resolve: resolve2, join: join2 } = await import("path");
413
+ const { existsSync: existsSync2, readFileSync: readFileSync2, writeFileSync, mkdirSync } = await import("fs");
414
+ const { resolve: resolve2, join } = await import("path");
514
415
  const { glob: glob2 } = await import("glob");
515
416
  const configPath = resolve2(srcDir, "mm.config.ts");
516
- if (existsSync3(configPath)) {
517
- const { compileProject } = await import("../project-compiler-D2LCC27O.mjs");
417
+ if (existsSync2(configPath)) {
418
+ const { compileProject } = await import("../project-compiler-ZB4RUYVL.mjs");
518
419
  const allFiles = await glob2(`${srcDir}/**/*.{ts,tsx}`, {
519
420
  ignore: ["**/node_modules/**", "**/dist/**", "**/__tests__/**", "**/*.test.*"]
520
421
  });
521
422
  const fileMap = {};
522
423
  for (const f of allFiles) {
523
424
  const rel = f.startsWith(srcDir + "/") ? f.slice(srcDir.length + 1) : f;
524
- fileMap[rel] = readFileSync3(f, "utf-8");
425
+ fileMap[rel] = readFileSync2(f, "utf-8");
525
426
  }
526
427
  console.log(` Compiling project (${Object.keys(fileMap).length} files)...`);
527
428
  const result = compileProject(fileMap);
@@ -534,16 +435,16 @@ async function main() {
534
435
  [mmrc] Build failed with ${errors.length} errors \u2014 aborting deploy.`);
535
436
  process.exit(1);
536
437
  }
537
- mkdirSync2(outDir, { recursive: true });
538
- const irPath = join2(outDir, `${result.ir.slug}.workflow.json`);
539
- writeFileSync2(irPath, JSON.stringify(result.ir, null, 2), "utf-8");
438
+ mkdirSync(outDir, { recursive: true });
439
+ const irPath = join(outDir, `${result.ir.slug}.workflow.json`);
440
+ writeFileSync(irPath, JSON.stringify(result.ir, null, 2), "utf-8");
540
441
  console.log(` + ${result.ir.slug}.workflow.json`);
541
442
  const seenSlugs = /* @__PURE__ */ new Set([result.ir.slug]);
542
443
  for (const child of result.childDefinitions) {
543
444
  if (seenSlugs.has(child.slug)) continue;
544
445
  seenSlugs.add(child.slug);
545
- const childPath = join2(outDir, `${child.slug}.workflow.json`);
546
- writeFileSync2(childPath, JSON.stringify(child, null, 2), "utf-8");
446
+ const childPath = join(outDir, `${child.slug}.workflow.json`);
447
+ writeFileSync(childPath, JSON.stringify(child, null, 2), "utf-8");
547
448
  console.log(` + ${child.slug}.workflow.json`);
548
449
  }
549
450
  console.log(` Compiled ${1 + result.childDefinitions.length} definitions.
@@ -556,9 +457,9 @@ async function main() {
556
457
  }
557
458
  console.log("");
558
459
  }
559
- await deploy({ apiUrl, token, dir: outDir, force, dryRun });
460
+ await deploy({ apiUrl, token, dir: outDir, force, dryRun, targetName });
560
461
  } else {
561
- await deploy({ apiUrl, token, dir, force, dryRun });
462
+ await deploy({ apiUrl, token, dir, force, dryRun, targetName });
562
463
  }
563
464
  } else if (command === "login") {
564
465
  const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
@@ -577,13 +478,30 @@ async function main() {
577
478
  console.error('[mmrc] Error: name is required\n Usage: mmrc init <name> [--description "..."] [--icon "..."] [--author "..."]');
578
479
  process.exit(1);
579
480
  }
580
- const { init } = await import("../init-UC3FWPIW.mjs");
481
+ const { init } = await import("../init-7FJENUDK.mjs");
581
482
  await init({
582
483
  name,
583
484
  description: getFlag("--description"),
584
485
  icon: getFlag("--icon"),
585
486
  author: getFlag("--author")
586
487
  });
488
+ } else if (command === "verify") {
489
+ const target = getPositional();
490
+ if (!target) {
491
+ console.error("[mmrc] Error: target path is required\n Usage: mmrc verify <file-or-dir> [options]");
492
+ process.exit(1);
493
+ }
494
+ const { verifyCommand } = await import("../verify-OQDEQYMS.mjs");
495
+ const result = await verifyCommand({
496
+ target,
497
+ static: hasFlag("--static"),
498
+ mutation: hasFlag("--mutation"),
499
+ generate: hasFlag("--generate"),
500
+ ci: hasFlag("--ci"),
501
+ minCoverage: getFlag("--min-coverage") ? parseFloat(getFlag("--min-coverage")) : void 0,
502
+ minMutationScore: getFlag("--min-mutation-score") ? parseFloat(getFlag("--min-mutation-score")) : void 0
503
+ });
504
+ if (!result.success) process.exit(1);
587
505
  } else if (command === "pull") {
588
506
  const slug = getPositional();
589
507
  const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
@@ -600,20 +518,134 @@ async function main() {
600
518
  console.error(" 3. Set MMRC_TOKEN environment variable");
601
519
  process.exit(1);
602
520
  }
603
- const { pull } = await import("../pull-LD5ENLGY.mjs");
521
+ const { pull } = await import("../pull-KOL2QAYQ.mjs");
604
522
  await pull({ slug, apiUrl, token, outDir });
523
+ } else if (command === "seed") {
524
+ const apiUrl = getFlag("--api-url") ?? "http://localhost:4200/api/v1";
525
+ const token = resolveToken(apiUrl, getFlag("--token"));
526
+ const dir = getFlag("--dir");
527
+ const count = getFlag("--count") ? parseInt(getFlag("--count"), 10) : void 0;
528
+ if (!token) {
529
+ console.error("[mmrc] Error: No auth token found. Run `mmrc login` first.");
530
+ process.exit(1);
531
+ }
532
+ const { seedInstances } = await import("../seed-KOGEPGOJ.mjs");
533
+ const result = await seedInstances({ apiUrl, token, dir, count });
534
+ console.log(`
535
+ [mmrc] Seed complete: ${result.created} instances across ${result.definitions} definitions`);
536
+ if (result.errors.length > 0) {
537
+ console.warn(` ${result.errors.length} error(s)`);
538
+ }
539
+ } else if (command === "config") {
540
+ const subcommand = args[1];
541
+ const { getConfig, getConfigValue, setConfigValue, flattenConfig, findConfigPath, writeConfigFile } = await import("../config-PL24KEWL.mjs");
542
+ if (subcommand === "get") {
543
+ const key = args[2];
544
+ if (!key) {
545
+ console.error("[mmrc] Usage: mmrc config get <key> (e.g., dev.port)");
546
+ process.exit(1);
547
+ }
548
+ const config = getConfig();
549
+ const value = getConfigValue(config, key);
550
+ if (value === void 0) {
551
+ console.error(`[mmrc] Config key "${key}" not found.`);
552
+ process.exit(1);
553
+ }
554
+ console.log(typeof value === "object" ? JSON.stringify(value, null, 2) : String(value));
555
+ } else if (subcommand === "set") {
556
+ const key = args[2];
557
+ const value = args[3];
558
+ if (!key || value === void 0) {
559
+ console.error("[mmrc] Usage: mmrc config set <key> <value> (e.g., dev.port 3000)");
560
+ process.exit(1);
561
+ }
562
+ const configPath = findConfigPath();
563
+ if (!configPath) {
564
+ console.error("[mmrc] No mmrc.config.ts found. Run `mmrc init` first.");
565
+ process.exit(1);
566
+ }
567
+ const config = getConfig();
568
+ setConfigValue(config, key, value);
569
+ writeConfigFile(configPath, config);
570
+ console.log(`[mmrc] Set ${key} = ${value}`);
571
+ } else if (subcommand === "list" || !subcommand) {
572
+ const config = getConfig();
573
+ const entries = flattenConfig(config);
574
+ const maxKeyLen = Math.max(...entries.map(([k]) => k.length));
575
+ for (const [k, v] of entries) {
576
+ console.log(` ${k.padEnd(maxKeyLen)} ${v}`);
577
+ }
578
+ } else {
579
+ console.error(`[mmrc] Unknown config subcommand: ${subcommand}`);
580
+ console.error(" Usage: mmrc config [get <key> | set <key> <value> | list]");
581
+ process.exit(1);
582
+ }
583
+ } else if (command === "server") {
584
+ const subcommand = args[1];
585
+ const { serverStart, serverMigrate, serverInit, serverStatus, serverConfig } = await import("../server-VW6UPCHO.mjs");
586
+ if (subcommand === "start") {
587
+ await serverStart({
588
+ config: getFlag("--config"),
589
+ port: getFlag("--port") ? parseInt(getFlag("--port"), 10) : void 0,
590
+ migrate: hasFlag("--migrate"),
591
+ binary: getFlag("--binary")
592
+ });
593
+ } else if (subcommand === "migrate") {
594
+ await serverMigrate({ apiUrl: getFlag("--api-url"), config: getFlag("--config") });
595
+ } else if (subcommand === "init") {
596
+ serverInit({
597
+ mode: getFlag("--mode"),
598
+ db: getFlag("--db"),
599
+ output: getFlag("--output")
600
+ });
601
+ } else if (subcommand === "status") {
602
+ await serverStatus({ apiUrl: getFlag("--api-url") });
603
+ } else if (subcommand === "config") {
604
+ serverConfig({ config: getFlag("--config") });
605
+ } else {
606
+ console.error(`[mmrc] Unknown server subcommand: ${subcommand ?? "(none)"}`);
607
+ console.error(" Usage: mmrc server [start|migrate|init|status|config]");
608
+ process.exit(1);
609
+ }
610
+ } else if (command === "version" || command === "-v" || command === "--version" || hasFlag("--version") || hasFlag("-v")) {
611
+ const { readFileSync: readFileSync2 } = await import("fs");
612
+ const { resolve: resolve2, dirname } = await import("path");
613
+ try {
614
+ const pkgPath = resolve2(dirname(new URL(import.meta.url).pathname), "../../package.json");
615
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf-8"));
616
+ console.log(`mmrc ${pkg.version}`);
617
+ } catch {
618
+ try {
619
+ const pkgPath = resolve2(__dirname, "../../package.json");
620
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf-8"));
621
+ console.log(`mmrc ${pkg.version}`);
622
+ } catch {
623
+ console.log("mmrc (version unknown)");
624
+ }
625
+ }
605
626
  } else {
627
+ let version = "";
628
+ try {
629
+ const { readFileSync: readFileSync2 } = await import("fs");
630
+ const { resolve: resolve2 } = await import("path");
631
+ const pkgPath = resolve2(__dirname, "../../package.json");
632
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf-8"));
633
+ version = ` v${pkg.version}`;
634
+ } catch {
635
+ }
606
636
  console.log(`
607
- MindMatrix React Compiler (mmrc)
637
+ MindMatrix React Compiler (mmrc${version})
608
638
 
609
639
  Commands:
610
640
  init Scaffold a new blueprint package
641
+ config View and modify mmrc.config.ts settings
611
642
  login Authenticate and save credentials
612
643
  logout Remove saved credentials
613
644
  whoami Show current authenticated user
614
645
  dev Start dev server with hot reload
615
646
  build Compile workflow files to Pure Form IR
616
647
  test Round-trip fidelity test (compile \u2192 decompile \u2192 recompile \u2192 compare)
648
+ verify Compile + run verification layers (structural, reachability, safety, liveness, etc.)
617
649
  deploy Compile + upload workflows to backend DB
618
650
  pull Fetch a definition from DB and scaffold local project
619
651
 
@@ -655,9 +687,18 @@ Usage:
655
687
  mmrc test [options]
656
688
  --src Source directory (default: current directory)
657
689
 
690
+ mmrc verify <file-or-dir> [options]
691
+ --static Static analysis only (skip conformance/property/mutation)
692
+ --mutation Include mutation analysis
693
+ --generate Output generated test file instead of running
694
+ --ci CI mode \u2014 exit with non-zero on any failure
695
+ --min-coverage N Minimum coverage percentage (requires --ci)
696
+ --min-mutation-score N Minimum mutation score (requires --ci)
697
+
658
698
  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)
699
+ --target Deploy target from mmrc.config.ts environments (e.g., staging, production)
700
+ --api-url API base URL (overrides target; default: http://localhost:4200/api/v1)
701
+ --token Auth token (overrides all; or use mmrc login / MMRC_TOKEN env var)
661
702
  --dir Compiled workflows directory (default: dist/workflows)
662
703
  --src Source directory (used with --build)
663
704
  --build Compile first, then deploy (no separate build step needed)
@@ -118,7 +118,7 @@ var CONTROL_FLOW_ATOMS = /* @__PURE__ */ new Set([
118
118
  "Slot",
119
119
  "Divider"
120
120
  ]);
121
- var ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
121
+ var ATOM_IMPORT_SOURCE = "@mmapp/react/atoms";
122
122
  var TEXT_VARIANT_TO_TAG = {
123
123
  h1: "h1",
124
124
  h2: "h2",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  transform
4
- } from "../chunk-CKGOZAB7.mjs";
4
+ } from "../chunk-WVYY32LD.mjs";
5
5
  import "../chunk-CIESM3BP.mjs";
6
6
 
7
7
  // src/codemod/cli.ts
@@ -105,7 +105,7 @@ declare const REVERSE_RULES: ReverseRule[];
105
105
  /**
106
106
  * Atom import source
107
107
  */
108
- declare const ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
108
+ declare const ATOM_IMPORT_SOURCE = "@mmapp/react/atoms";
109
109
 
110
110
  /**
111
111
  * Bidirectional React ↔ Workflow Atom Codemod
@@ -113,10 +113,10 @@ declare const ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
113
113
  * Babel plugin entry point. Dispatches by `direction` option.
114
114
  *
115
115
  * Usage as Babel plugin:
116
- * plugins: [['@mindmatrix/react-compiler/codemod', { direction: 'forward' }]]
116
+ * plugins: [['@mmapp/react-compiler/codemod', { direction: 'forward' }]]
117
117
  *
118
118
  * Usage programmatic:
119
- * import { transform } from '@mindmatrix/react-compiler/codemod';
119
+ * import { transform } from '@mmapp/react-compiler/codemod';
120
120
  * const result = transform(source, { direction: 'forward' });
121
121
  */
122
122
 
@@ -105,7 +105,7 @@ declare const REVERSE_RULES: ReverseRule[];
105
105
  /**
106
106
  * Atom import source
107
107
  */
108
- declare const ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
108
+ declare const ATOM_IMPORT_SOURCE = "@mmapp/react/atoms";
109
109
 
110
110
  /**
111
111
  * Bidirectional React ↔ Workflow Atom Codemod
@@ -113,10 +113,10 @@ declare const ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
113
113
  * Babel plugin entry point. Dispatches by `direction` option.
114
114
  *
115
115
  * Usage as Babel plugin:
116
- * plugins: [['@mindmatrix/react-compiler/codemod', { direction: 'forward' }]]
116
+ * plugins: [['@mmapp/react-compiler/codemod', { direction: 'forward' }]]
117
117
  *
118
118
  * Usage programmatic:
119
- * import { transform } from '@mindmatrix/react-compiler/codemod';
119
+ * import { transform } from '@mmapp/react-compiler/codemod';
120
120
  * const result = transform(source, { direction: 'forward' });
121
121
  */
122
122
 
@@ -131,7 +131,7 @@ var CONTROL_FLOW_ATOMS = /* @__PURE__ */ new Set([
131
131
  "Slot",
132
132
  "Divider"
133
133
  ]);
134
- var ATOM_IMPORT_SOURCE = "@mindmatrix/react/atoms";
134
+ var ATOM_IMPORT_SOURCE = "@mmapp/react/atoms";
135
135
  var TEXT_VARIANT_TO_TAG = {
136
136
  h1: "h1",
137
137
  h2: "h2",
@@ -9,7 +9,7 @@ import {
9
9
  extractStaticClasses,
10
10
  reverseClassifyAtom,
11
11
  transform
12
- } from "../chunk-CKGOZAB7.mjs";
12
+ } from "../chunk-WVYY32LD.mjs";
13
13
  import "../chunk-CIESM3BP.mjs";
14
14
  export {
15
15
  ATOM_IMPORT_SOURCE,