@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.
- package/ATOM-PIPELINE.md +144 -0
- package/README.md +88 -40
- package/dist/babel/index.js +2814 -277
- package/dist/babel/index.mjs +2 -2
- package/dist/chunk-3USIFFE4.mjs +2190 -0
- package/dist/chunk-45YMGEVT.mjs +186 -0
- package/dist/chunk-4FN2AISW.mjs +148 -0
- package/dist/chunk-4OPI5L7G.mjs +2593 -0
- package/dist/chunk-4RYTKOOJ.mjs +186 -0
- package/dist/chunk-52XHYD2V.mjs +214 -0
- package/dist/chunk-5GUFFFGL.mjs +148 -0
- package/dist/chunk-5RKTOVR5.mjs +244 -0
- package/dist/chunk-5YDMOO4X.mjs +214 -0
- package/dist/chunk-64ZWEMLJ.mjs +148 -0
- package/dist/chunk-6XP4KSWQ.mjs +2190 -0
- package/dist/chunk-72QWL54I.mjs +175 -0
- package/dist/chunk-7B4TRI7C.mjs +4835 -0
- package/dist/chunk-7ZKGHTNB.mjs +4952 -0
- package/dist/chunk-CIESM3BP.mjs +33 -0
- package/dist/chunk-DE3ZGQAC.mjs +148 -0
- package/dist/chunk-DMCY3BBG.mjs +1933 -0
- package/dist/chunk-DPIK3PJS.mjs +244 -0
- package/dist/chunk-E5IVH4RE.mjs +186 -0
- package/dist/chunk-E6FZNUR5.mjs +4953 -0
- package/dist/chunk-EJRBDQDP.mjs +2607 -0
- package/dist/chunk-ELO4TXJL.mjs +186 -0
- package/dist/chunk-EO6SYNCG.mjs +175 -0
- package/dist/chunk-FKRO52XH.mjs +3446 -0
- package/dist/chunk-FL4YAKU6.mjs +4941 -0
- package/dist/chunk-FYT47UBU.mjs +5076 -0
- package/dist/chunk-GCLGPOJZ.mjs +148 -0
- package/dist/chunk-GXB4JOP7.mjs +5072 -0
- package/dist/chunk-HFXOUMTD.mjs +175 -0
- package/dist/chunk-HWIZ47US.mjs +214 -0
- package/dist/chunk-IB7MNPQL.mjs +4953 -0
- package/dist/chunk-ICSIHQCG.mjs +148 -0
- package/dist/chunk-J7JUAHS4.mjs +186 -0
- package/dist/chunk-JLA5VNQ3.mjs +186 -0
- package/dist/chunk-JQLWFCTM.mjs +214 -0
- package/dist/chunk-KFJJCQAL.mjs +148 -0
- package/dist/chunk-KJUIIEQE.mjs +186 -0
- package/dist/chunk-KNWTHRVQ.mjs +175 -0
- package/dist/chunk-KSG4XSZF.mjs +175 -0
- package/dist/chunk-LF5N6DOU.mjs +175 -0
- package/dist/chunk-LJQCM2IM.mjs +214 -0
- package/dist/chunk-NTB7OEX2.mjs +2918 -0
- package/dist/chunk-NW6555WJ.mjs +186 -0
- package/dist/chunk-OMZE6VLQ.mjs +214 -0
- package/dist/chunk-OPJKP747.mjs +7506 -0
- package/dist/chunk-P4BR7WVO.mjs +2190 -0
- package/dist/chunk-QQHVYH2X.mjs +244 -0
- package/dist/chunk-S5QLWLLT.mjs +186 -0
- package/dist/chunk-SCWGT2FY.mjs +2190 -0
- package/dist/chunk-SMKJUSB3.mjs +2190 -0
- package/dist/chunk-THFYE5ZX.mjs +244 -0
- package/dist/chunk-VCAY2KGM.mjs +175 -0
- package/dist/chunk-WBYMW4NQ.mjs +3450 -0
- package/dist/chunk-WECAV6QB.mjs +148 -0
- package/dist/chunk-WMKBXUCE.mjs +3228 -0
- package/dist/chunk-XAJ5BKKL.mjs +4947 -0
- package/dist/chunk-XG2X7AEA.mjs +175 -0
- package/dist/chunk-XG7Z23NQ.mjs +148 -0
- package/dist/chunk-XWZAOCQ7.mjs +2607 -0
- package/dist/chunk-Y6MA7ULW.mjs +148 -0
- package/dist/chunk-YMS7Q7LG.mjs +214 -0
- package/dist/chunk-ZA37XTGA.mjs +175 -0
- package/dist/cli/index.js +13189 -6838
- package/dist/cli/index.mjs +140 -22
- package/dist/codemod/cli.mjs +1 -1
- package/dist/codemod/index.mjs +1 -1
- package/dist/config-PL24KEWL.mjs +219 -0
- package/dist/dev-server-RmGHIntF.d.mts +113 -0
- package/dist/dev-server-RmGHIntF.d.ts +113 -0
- package/dist/dev-server.d.mts +1 -1
- package/dist/dev-server.d.ts +1 -1
- package/dist/dev-server.js +4135 -440
- package/dist/dev-server.mjs +5 -5
- package/dist/envelope.js +2812 -275
- package/dist/envelope.mjs +3 -3
- package/dist/index.d.mts +161 -2
- package/dist/index.d.ts +161 -2
- package/dist/index.js +4429 -428
- package/dist/index.mjs +217 -9
- package/{src/cli/init.ts → dist/init-7JQMAAXS.mjs} +70 -95
- package/dist/init-DQDX3QK6.mjs +369 -0
- package/dist/init-EHO4VQ22.mjs +369 -0
- package/dist/init-UC3FWPIW.mjs +367 -0
- package/dist/init-UNSMVKIK.mjs +366 -0
- package/dist/init-UNV5XIDE.mjs +367 -0
- package/dist/project-compiler-2P4N4DR7.mjs +10 -0
- package/dist/project-compiler-D2LCC27O.mjs +10 -0
- package/dist/project-compiler-EJ3GANJE.mjs +10 -0
- package/dist/project-compiler-LOQKVRZJ.mjs +10 -0
- package/dist/project-compiler-OP2VVGJQ.mjs +10 -0
- package/dist/project-compiler-RQ6OQKRM.mjs +10 -0
- package/dist/project-compiler-VWNNCHGO.mjs +10 -0
- package/dist/project-compiler-XVAAU4C5.mjs +10 -0
- package/dist/project-compiler-YES5FGMD.mjs +10 -0
- package/dist/project-compiler-ZKMQDLGU.mjs +10 -0
- package/dist/project-decompiler-FLXCEJHS.mjs +7 -0
- package/dist/project-decompiler-US7GAVIC.mjs +7 -0
- package/dist/project-decompiler-VLPR22QF.mjs +7 -0
- package/dist/pull-FUS5QYZS.mjs +109 -0
- package/dist/pull-LD5ENLGY.mjs +109 -0
- package/dist/pull-P44LDRWB.mjs +109 -0
- package/dist/testing/index.js +2822 -285
- package/dist/testing/index.mjs +2 -2
- package/dist/verify-SEIXUGN4.mjs +1833 -0
- package/dist/vite/index.js +2815 -278
- package/dist/vite/index.mjs +3 -3
- package/examples/uber-app/app/admin/fleet.tsx +19 -19
- package/package.json +16 -6
- package/compile-blueprint-chat.mjs +0 -99
- package/compile-blueprint-glass-console.mjs +0 -98
- package/compile-chat-defs.mjs +0 -92
- package/examples/uber-app/tests/payment.test.tsx +0 -129
- package/examples/uber-app/tests/ride-flow.test.tsx +0 -123
- package/package.json.backup +0 -86
- package/scripts/decompile.ts +0 -226
- package/scripts/seed-auth.ts +0 -267
- package/scripts/seed-uber.ts +0 -248
- package/scripts/validate-uber.ts +0 -119
- package/seed-blueprint-chat.mjs +0 -444
- package/seed-blueprint-glass-console.mjs +0 -445
- package/seed-compiled.mjs +0 -318
- package/src/RoundTripValidator.ts +0 -400
- package/src/__tests__/atom-rendering-coverage.test.ts +0 -680
- package/src/__tests__/auth-module-compilation.test.ts +0 -247
- package/src/__tests__/auth-template-compilation.test.ts +0 -589
- package/src/__tests__/change-extractor.test.ts +0 -142
- package/src/__tests__/cli-pull.test.ts +0 -73
- package/src/__tests__/cli-test.test.ts +0 -72
- package/src/__tests__/component-extractor.test.ts +0 -331
- package/src/__tests__/context-extractor.test.ts +0 -145
- package/src/__tests__/decompiler.test.ts +0 -718
- package/src/__tests__/define-blueprint.test.ts +0 -133
- package/src/__tests__/definition-validator.test.ts +0 -519
- package/src/__tests__/during-extractor.test.ts +0 -152
- package/src/__tests__/effect-extractor.test.ts +0 -107
- package/src/__tests__/event-emission.test.ts +0 -127
- package/src/__tests__/examples.test.ts +0 -236
- package/src/__tests__/full-blueprint-coverage.test.ts +0 -1221
- package/src/__tests__/golden-suite.test.ts +0 -403
- package/src/__tests__/grammar-island-extractor.test.ts +0 -289
- package/src/__tests__/instance-key.test.ts +0 -82
- package/src/__tests__/ir-migration.test.ts +0 -255
- package/src/__tests__/lock-file.test.ts +0 -117
- package/src/__tests__/model-extractor.test.ts +0 -195
- package/src/__tests__/model-field-acl.test.ts +0 -237
- package/src/__tests__/model-hooks.test.ts +0 -130
- package/src/__tests__/model-ref-resolution.test.ts +0 -268
- package/src/__tests__/model-roundtrip.test.ts +0 -502
- package/src/__tests__/model-runtime.test.ts +0 -112
- package/src/__tests__/model-transitions.test.ts +0 -183
- package/src/__tests__/nrt-action-trace.test.ts +0 -391
- package/src/__tests__/pipeline-hardening.test.ts +0 -413
- package/src/__tests__/project-compiler.test.ts +0 -546
- package/src/__tests__/project-decompiler.test.ts +0 -343
- package/src/__tests__/query-compilation.test.ts +0 -145
- package/src/__tests__/round-trip/PLAN.md +0 -158
- package/src/__tests__/round-trip/README.md +0 -52
- package/src/__tests__/round-trip/RESULTS.md +0 -86
- package/src/__tests__/round-trip/fixtures/data-heavy/main.workflow.tsx +0 -55
- package/src/__tests__/round-trip/fixtures/data-heavy/mm.config.ts +0 -11
- package/src/__tests__/round-trip/fixtures/data-heavy/models/contact.ts +0 -54
- package/src/__tests__/round-trip/fixtures/full-workflow/main.workflow.tsx +0 -79
- package/src/__tests__/round-trip/fixtures/full-workflow/mm.config.ts +0 -12
- package/src/__tests__/round-trip/fixtures/full-workflow/models/order.ts +0 -50
- package/src/__tests__/round-trip/fixtures/simple-crud/main.workflow.tsx +0 -25
- package/src/__tests__/round-trip/fixtures/simple-crud/mm.config.ts +0 -11
- package/src/__tests__/round-trip/fixtures/simple-crud/models/task.ts +0 -32
- package/src/__tests__/round-trip/fixtures/view-heavy/main.workflow.tsx +0 -79
- package/src/__tests__/round-trip/fixtures/view-heavy/mm.config.ts +0 -10
- package/src/__tests__/round-trip/round-trip.test.ts +0 -2598
- package/src/__tests__/round-trip-ir.test.ts +0 -300
- package/src/__tests__/round-trip.test.ts +0 -1212
- package/src/__tests__/route-merging.test.ts +0 -372
- package/src/__tests__/router-composition.test.ts +0 -489
- package/src/__tests__/router-extractor.test.ts +0 -176
- package/src/__tests__/server-action-extractor.test.ts +0 -128
- package/src/__tests__/smart-type-inference.test.ts +0 -365
- package/src/__tests__/source-envelope.test.ts +0 -284
- package/src/__tests__/source-fidelity.test.ts +0 -516
- package/src/__tests__/state-extractor.test.ts +0 -115
- package/src/__tests__/strict-mode.test.ts +0 -227
- package/src/__tests__/transition-effect-extractor.test.ts +0 -119
- package/src/__tests__/transition-extractor.test.ts +0 -68
- package/src/__tests__/ts-to-expression.test.ts +0 -462
- package/src/__tests__/type-generator.test.ts +0 -201
- package/src/__tests__/uber-validation.test.ts +0 -502
- package/src/action-compiler.ts +0 -361
- package/src/babel/emitters/experience-transform.ts +0 -199
- package/src/babel/emitters/ir-to-tsx-emitter.ts +0 -110
- package/src/babel/emitters/pure-form-emitter.ts +0 -1023
- package/src/babel/emitters/runtime-glue-emitter.ts +0 -39
- package/src/babel/extractors/change-extractor.ts +0 -199
- package/src/babel/extractors/component-extractor.ts +0 -907
- package/src/babel/extractors/computed-extractor.ts +0 -262
- package/src/babel/extractors/context-extractor.ts +0 -277
- package/src/babel/extractors/during-extractor.ts +0 -295
- package/src/babel/extractors/effect-extractor.ts +0 -340
- package/src/babel/extractors/event-extractor.ts +0 -235
- package/src/babel/extractors/grammar-island-extractor.ts +0 -302
- package/src/babel/extractors/model-extractor.ts +0 -1018
- package/src/babel/extractors/router-extractor.ts +0 -303
- package/src/babel/extractors/server-action-extractor.ts +0 -173
- package/src/babel/extractors/server-action-hook-extractor.ts +0 -72
- package/src/babel/extractors/server-state-extractor.ts +0 -88
- package/src/babel/extractors/state-extractor.ts +0 -214
- package/src/babel/extractors/transition-effect-extractor.ts +0 -176
- package/src/babel/extractors/transition-extractor.ts +0 -143
- package/src/babel/index.ts +0 -24
- package/src/babel/transpilers/ts-to-expression.ts +0 -674
- package/src/babel/visitor.ts +0 -807
- package/src/cli/auth.ts +0 -255
- package/src/cli/build.ts +0 -288
- package/src/cli/deploy.ts +0 -206
- package/src/cli/index.ts +0 -328
- package/src/cli/installer.ts +0 -261
- package/src/cli/lock-file.ts +0 -94
- package/src/cli/mmrc.ts +0 -22
- package/src/cli/pull.ts +0 -172
- package/src/cli/registry-client.ts +0 -175
- package/src/cli/test.ts +0 -397
- package/src/cli/type-generator.ts +0 -243
- package/src/codemod/__tests__/forward.test.ts +0 -239
- package/src/codemod/__tests__/reverse.test.ts +0 -145
- package/src/codemod/__tests__/round-trip.test.ts +0 -137
- package/src/codemod/annotation.ts +0 -97
- package/src/codemod/classify.ts +0 -197
- package/src/codemod/cli.ts +0 -207
- package/src/codemod/control-flow.ts +0 -409
- package/src/codemod/forward.ts +0 -244
- package/src/codemod/import-manager.ts +0 -171
- package/src/codemod/index.ts +0 -120
- package/src/codemod/reverse.ts +0 -197
- package/src/codemod/rules.ts +0 -174
- package/src/codemod/state-transform.ts +0 -126
- package/src/decompiler/ast-builder.ts +0 -538
- package/src/decompiler/config-generator.ts +0 -151
- package/src/decompiler/index.ts +0 -315
- package/src/decompiler/project-decompiler.ts +0 -1776
- package/src/decompiler/project.ts +0 -862
- package/src/decompiler/split-strategy.ts +0 -140
- package/src/decompiler/state-emitter.ts +0 -1053
- package/src/decompiler/sx-emitter.ts +0 -318
- package/src/decompiler/workspace-hydrator.ts +0 -189
- package/src/dev-server.ts +0 -238
- package/src/envelope/fs-tree.ts +0 -217
- package/src/envelope/source-envelope.ts +0 -264
- package/src/envelope.ts +0 -315
- package/src/incremental-compiler.ts +0 -401
- package/src/index.ts +0 -99
- package/src/model-compiler.ts +0 -277
- package/src/project-compiler.ts +0 -1629
- package/src/route-extractor.ts +0 -333
- package/src/testing/index.ts +0 -32
- package/src/testing/snapshot.ts +0 -252
- package/src/testing/test-utils.ts +0 -226
- package/src/types.ts +0 -68
- package/src/vite/index.ts +0 -288
- package/test-compile.mjs +0 -142
- package/tsconfig.json +0 -25
- package/tsup.config.ts +0 -23
- package/vitest.config.ts +0 -9
package/dist/cli/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
deploy
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-52XHYD2V.mjs";
|
|
5
5
|
import {
|
|
6
6
|
build
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-THFYE5ZX.mjs";
|
|
8
8
|
import "../chunk-5M7DKKBC.mjs";
|
|
9
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-OPJKP747.mjs";
|
|
10
10
|
import {
|
|
11
11
|
__require
|
|
12
|
-
} from "../chunk-
|
|
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-
|
|
43
|
-
const { decompileProjectEnhanced } = await import("../project-decompiler-
|
|
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
|
|
456
|
-
const
|
|
457
|
-
const
|
|
458
|
-
const
|
|
459
|
-
const
|
|
460
|
-
const
|
|
461
|
-
const
|
|
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
|
|
494
|
-
const
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
--
|
|
660
|
-
--
|
|
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)
|
package/dist/codemod/cli.mjs
CHANGED
package/dist/codemod/index.mjs
CHANGED
|
@@ -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 };
|