@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.
- package/dist/auth-3UK75242.mjs +17 -0
- package/dist/babel/index.d.mts +2 -2
- package/dist/babel/index.d.ts +2 -2
- package/dist/babel/index.js +2736 -306
- package/dist/babel/index.mjs +1 -1
- package/dist/chunk-52XHYD2V.mjs +214 -0
- package/dist/chunk-5FTDWKHH.mjs +244 -0
- package/dist/chunk-5GUFFFGL.mjs +148 -0
- package/dist/chunk-7JRAEFRB.mjs +7510 -0
- package/dist/chunk-7T6Q5KAA.mjs +7506 -0
- package/dist/chunk-ABYPKRSB.mjs +215 -0
- package/dist/chunk-BZEXUPDH.mjs +175 -0
- package/dist/chunk-EO6SYNCG.mjs +175 -0
- package/dist/chunk-HRYR54PT.mjs +175 -0
- package/dist/chunk-J3M4GUS7.mjs +161 -0
- package/dist/chunk-J7JUAHS4.mjs +186 -0
- package/dist/chunk-JRGFBWTN.mjs +2918 -0
- package/dist/chunk-NTB7OEX2.mjs +2918 -0
- package/dist/chunk-O4AUS7EU.mjs +148 -0
- package/dist/chunk-OPJKP747.mjs +7506 -0
- package/dist/chunk-R2DD5GTY.mjs +186 -0
- package/dist/chunk-THFYE5ZX.mjs +244 -0
- package/dist/chunk-UDDTWG5J.mjs +734 -0
- package/dist/chunk-VLTKQDJ3.mjs +244 -0
- package/dist/chunk-WBYMW4NQ.mjs +3450 -0
- package/dist/chunk-WVYY32LD.mjs +939 -0
- package/dist/chunk-XDVM4YHX.mjs +3450 -0
- package/dist/chunk-Z2G5RZ4H.mjs +186 -0
- package/dist/chunk-ZE3KCHBM.mjs +2918 -0
- package/dist/cli/index.js +10378 -4107
- package/dist/cli/index.mjs +224 -183
- package/dist/codemod/cli.js +1 -1
- package/dist/codemod/cli.mjs +1 -1
- package/dist/codemod/index.d.mts +3 -3
- package/dist/codemod/index.d.ts +3 -3
- package/dist/codemod/index.js +1 -1
- package/dist/codemod/index.mjs +1 -1
- package/dist/config-PL24KEWL.mjs +219 -0
- package/dist/deploy-YAJGW6II.mjs +9 -0
- package/dist/dev-server-CrQ041KP.d.mts +79 -0
- package/dist/dev-server-CrQ041KP.d.ts +79 -0
- package/dist/dev-server.d.mts +2 -2
- package/dist/dev-server.d.ts +2 -2
- package/dist/dev-server.js +4319 -421
- package/dist/dev-server.mjs +4 -4
- package/dist/envelope-ChEkuHij.d.mts +265 -0
- package/dist/envelope-ChEkuHij.d.ts +265 -0
- package/dist/envelope.d.mts +2 -2
- package/dist/envelope.d.ts +2 -2
- package/dist/envelope.js +2734 -304
- package/dist/envelope.mjs +2 -2
- package/dist/index-CEKyyazf.d.mts +104 -0
- package/dist/index-CEKyyazf.d.ts +104 -0
- package/dist/index.d.mts +164 -9
- package/dist/index.d.ts +164 -9
- package/dist/index.js +4730 -734
- package/dist/index.mjs +216 -8
- package/dist/init-7FJENUDK.mjs +407 -0
- package/dist/init-DQDX3QK6.mjs +369 -0
- package/dist/project-compiler-NNK32MPG.mjs +10 -0
- package/dist/project-compiler-OP2VVGJQ.mjs +10 -0
- package/dist/project-compiler-ZB4RUYVL.mjs +10 -0
- package/dist/project-decompiler-U55HQUHW.mjs +7 -0
- package/dist/project-decompiler-US7GAVIC.mjs +7 -0
- package/dist/pull-KOL2QAYQ.mjs +109 -0
- package/dist/pull-P44LDRWB.mjs +109 -0
- package/dist/seed-KOGEPGOJ.mjs +154 -0
- package/dist/server-VW6UPCHO.mjs +277 -0
- package/dist/testing/index.d.mts +8 -8
- package/dist/testing/index.d.ts +8 -8
- package/dist/testing/index.js +2744 -314
- package/dist/testing/index.mjs +1 -1
- package/dist/verify-BYHUKARQ.mjs +1833 -0
- package/dist/verify-OQDEQYMS.mjs +1833 -0
- package/dist/verify-SEIXUGN4.mjs +1833 -0
- package/dist/vite/index.d.mts +1 -1
- package/dist/vite/index.d.ts +1 -1
- package/dist/vite/index.js +2735 -305
- package/dist/vite/index.mjs +2 -2
- package/examples/authentication/main.workflow.tsx +1 -1
- package/examples/authentication/mm.config.ts +1 -1
- package/examples/authentication/pages/LoginPage.tsx +2 -2
- package/examples/authentication/pages/SignupPage.tsx +2 -2
- package/examples/counter.workflow.tsx +1 -1
- package/examples/dashboard.workflow.tsx +1 -1
- package/examples/invoice-approval/actions/invoice.server.ts +1 -1
- package/examples/invoice-approval/main.workflow.tsx +1 -1
- package/examples/invoice-approval/mm.config.ts +1 -1
- package/examples/invoice-approval/pages/InvoiceDetailPage.tsx +1 -1
- package/examples/invoice-approval/pages/InvoiceFormPage.tsx +1 -1
- package/examples/invoice-approval/pages/InvoiceListPage.tsx +1 -1
- package/examples/todo-app.workflow.tsx +1 -1
- package/examples/uber-app/actions/matching.server.ts +1 -1
- package/examples/uber-app/actions/notifications.server.ts +1 -1
- package/examples/uber-app/actions/payments.server.ts +1 -1
- package/examples/uber-app/actions/pricing.server.ts +1 -1
- package/examples/uber-app/app/admin/analytics.tsx +2 -2
- package/examples/uber-app/app/admin/fleet.tsx +2 -2
- package/examples/uber-app/app/admin/surge-pricing.tsx +2 -2
- package/examples/uber-app/app/driver/dashboard.tsx +2 -2
- package/examples/uber-app/app/driver/earnings.tsx +2 -2
- package/examples/uber-app/app/driver/navigation.tsx +2 -2
- package/examples/uber-app/app/driver/ride-acceptance.tsx +2 -2
- package/examples/uber-app/app/rider/home.tsx +2 -2
- package/examples/uber-app/app/rider/payment-methods.tsx +2 -2
- package/examples/uber-app/app/rider/ride-history.tsx +2 -2
- package/examples/uber-app/app/rider/ride-tracking.tsx +2 -2
- package/examples/uber-app/components/DriverCard.tsx +1 -1
- package/examples/uber-app/components/MapView.tsx +3 -3
- package/examples/uber-app/components/RatingStars.tsx +2 -2
- package/examples/uber-app/components/RideCard.tsx +1 -1
- package/examples/uber-app/mm.config.ts +1 -1
- package/examples/uber-app/workflows/dispute-resolution.workflow.tsx +2 -2
- package/examples/uber-app/workflows/driver-onboarding.workflow.tsx +2 -2
- package/examples/uber-app/workflows/payment-processing.workflow.tsx +2 -2
- package/examples/uber-app/workflows/ride-request.workflow.tsx +2 -2
- package/package.json +8 -3
package/dist/cli/index.mjs
CHANGED
|
@@ -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-
|
|
10
|
+
} from "../chunk-ABYPKRSB.mjs";
|
|
5
11
|
import {
|
|
6
12
|
build
|
|
7
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-VLTKQDJ3.mjs";
|
|
8
14
|
import "../chunk-5M7DKKBC.mjs";
|
|
9
|
-
import "../chunk-
|
|
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-
|
|
43
|
-
const { decompileProjectEnhanced } = await import("../project-decompiler-
|
|
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
|
|
456
|
-
const
|
|
457
|
-
const
|
|
458
|
-
const
|
|
459
|
-
const
|
|
460
|
-
const
|
|
461
|
-
const
|
|
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
|
|
494
|
-
const
|
|
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:
|
|
513
|
-
const { resolve: resolve2, join
|
|
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 (
|
|
517
|
-
const { compileProject } = await import("../project-compiler-
|
|
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] =
|
|
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
|
-
|
|
538
|
-
const irPath =
|
|
539
|
-
|
|
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 =
|
|
546
|
-
|
|
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-
|
|
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-
|
|
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
|
-
--
|
|
660
|
-
--
|
|
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)
|
package/dist/codemod/cli.js
CHANGED
package/dist/codemod/cli.mjs
CHANGED
package/dist/codemod/index.d.mts
CHANGED
|
@@ -105,7 +105,7 @@ declare const REVERSE_RULES: ReverseRule[];
|
|
|
105
105
|
/**
|
|
106
106
|
* Atom import source
|
|
107
107
|
*/
|
|
108
|
-
declare const ATOM_IMPORT_SOURCE = "@
|
|
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: [['@
|
|
116
|
+
* plugins: [['@mmapp/react-compiler/codemod', { direction: 'forward' }]]
|
|
117
117
|
*
|
|
118
118
|
* Usage programmatic:
|
|
119
|
-
* import { transform } from '@
|
|
119
|
+
* import { transform } from '@mmapp/react-compiler/codemod';
|
|
120
120
|
* const result = transform(source, { direction: 'forward' });
|
|
121
121
|
*/
|
|
122
122
|
|
package/dist/codemod/index.d.ts
CHANGED
|
@@ -105,7 +105,7 @@ declare const REVERSE_RULES: ReverseRule[];
|
|
|
105
105
|
/**
|
|
106
106
|
* Atom import source
|
|
107
107
|
*/
|
|
108
|
-
declare const ATOM_IMPORT_SOURCE = "@
|
|
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: [['@
|
|
116
|
+
* plugins: [['@mmapp/react-compiler/codemod', { direction: 'forward' }]]
|
|
117
117
|
*
|
|
118
118
|
* Usage programmatic:
|
|
119
|
-
* import { transform } from '@
|
|
119
|
+
* import { transform } from '@mmapp/react-compiler/codemod';
|
|
120
120
|
* const result = transform(source, { direction: 'forward' });
|
|
121
121
|
*/
|
|
122
122
|
|
package/dist/codemod/index.js
CHANGED