@mmapp/react-compiler 0.1.0-alpha.18 → 0.1.0-alpha.19
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/babel/index.d.mts +1 -1
- package/dist/babel/index.d.ts +1 -1
- package/dist/babel/index.js +9 -6
- package/dist/babel/index.mjs +1 -1
- package/dist/chunk-26U577GB.mjs +3465 -0
- package/dist/chunk-2FBDFAX6.mjs +2362 -0
- package/dist/chunk-2REDFOER.mjs +931 -0
- package/dist/{chunk-FPAMQXKB.mjs → chunk-2UTXM2QX.mjs} +10 -20
- package/dist/chunk-2YDQTFAL.mjs +879 -0
- package/dist/chunk-2ZRKQE74.mjs +175 -0
- package/dist/chunk-3QHG2JWV.mjs +154 -0
- package/dist/chunk-466OWSTT.mjs +186 -0
- package/dist/chunk-467SFYOD.mjs +3127 -0
- package/dist/chunk-4AIJO7DZ.mjs +214 -0
- package/dist/chunk-4D43TZYL.mjs +7495 -0
- package/dist/chunk-4HX4PI4R.mjs +734 -0
- package/dist/chunk-4VU56NTZ.mjs +544 -0
- package/dist/chunk-4XHK6FWL.mjs +2058 -0
- package/dist/chunk-52C2JKH2.mjs +186 -0
- package/dist/chunk-52XHYD2V.mjs +214 -0
- package/dist/chunk-5GUFFFGL.mjs +148 -0
- package/dist/chunk-5N2FDDS6.mjs +214 -0
- package/dist/chunk-5ZSJXWZT.mjs +1646 -0
- package/dist/chunk-6CQOAAMV.mjs +1803 -0
- package/dist/chunk-6SEVAAVT.mjs +3516 -0
- package/dist/chunk-6YLR5ZDA.mjs +2829 -0
- package/dist/chunk-77UJB356.mjs +244 -0
- package/dist/chunk-7QOAJPQF.mjs +774 -0
- package/dist/chunk-A5RCMIBP.mjs +1795 -0
- package/dist/chunk-A63R3GKH.mjs +1803 -0
- package/dist/chunk-ABNTZXF5.mjs +951 -0
- package/dist/chunk-ADHWW56I.mjs +214 -0
- package/dist/chunk-AOGY2GK6.mjs +3292 -0
- package/dist/chunk-AXXUXRNA.mjs +1434 -0
- package/dist/chunk-BZLU5YK5.mjs +1025 -0
- package/dist/chunk-C7XCDDBH.mjs +1802 -0
- package/dist/chunk-CHLVKMQW.mjs +175 -0
- package/dist/chunk-CKGOZAB7.mjs +939 -0
- package/dist/chunk-CSXYDIVC.mjs +214 -0
- package/dist/chunk-CXTV4VGG.mjs +148 -0
- package/dist/chunk-D34RAZUX.mjs +2223 -0
- package/dist/chunk-DDIC7WM6.mjs +3127 -0
- package/dist/chunk-DPUQOBU6.mjs +4810 -0
- package/dist/chunk-E6MDVTGT.mjs +148 -0
- package/dist/chunk-EGKMUEM6.mjs +544 -0
- package/dist/chunk-EO6SYNCG.mjs +175 -0
- package/dist/chunk-EQGA6A6D.mjs +121 -0
- package/dist/chunk-EY2CSXYA.mjs +822 -0
- package/dist/chunk-FF5BQVII.mjs +148 -0
- package/dist/chunk-FIQ65CDR.mjs +925 -0
- package/dist/chunk-FOZXJFAR.mjs +186 -0
- package/dist/chunk-G2IAZ5Q6.mjs +148 -0
- package/dist/chunk-G7SMOWOL.mjs +828 -0
- package/dist/chunk-GK7NU6DO.mjs +214 -0
- package/dist/chunk-HDSCPEHY.mjs +4061 -0
- package/dist/chunk-HJELFNEA.mjs +186 -0
- package/dist/chunk-HOIUP6IF.mjs +690 -0
- package/dist/chunk-HRJGDPNE.mjs +148 -0
- package/dist/chunk-I3AU7GRD.mjs +120 -0
- package/dist/chunk-I3VQQJZ6.mjs +2843 -0
- package/dist/chunk-IPTX5MJU.mjs +3223 -0
- package/dist/chunk-ITGUSH2Z.mjs +2783 -0
- package/dist/chunk-IXHBCAMF.mjs +3306 -0
- package/dist/chunk-J7JUAHS4.mjs +186 -0
- package/dist/chunk-J7TWJ3TM.mjs +2784 -0
- package/dist/chunk-JDPLDGVF.mjs +4810 -0
- package/dist/chunk-JK72MQ4N.mjs +877 -0
- package/dist/chunk-K2HHCAS2.mjs +148 -0
- package/dist/chunk-K5HX2SVL.mjs +1902 -0
- package/dist/chunk-KAUEQ2F3.mjs +148 -0
- package/dist/chunk-KFVVOS5N.mjs +925 -0
- package/dist/chunk-KIH4AN3Y.mjs +154 -0
- package/dist/chunk-KPDMN5IX.mjs +175 -0
- package/dist/chunk-LZL2IRCH.mjs +186 -0
- package/dist/chunk-MIZV3TAN.mjs +3293 -0
- package/dist/chunk-MRH4J7IX.mjs +2846 -0
- package/dist/chunk-NKBL5GUC.mjs +186 -0
- package/dist/chunk-NQCNSCF6.mjs +148 -0
- package/dist/chunk-NRP5J3BR.mjs +4811 -0
- package/dist/chunk-NTB7OEX2.mjs +2918 -0
- package/dist/chunk-NUPJYPFU.mjs +801 -0
- package/dist/chunk-NVQUTSQX.mjs +3128 -0
- package/dist/chunk-OGMG64EY.mjs +148 -0
- package/dist/chunk-OL5B2HTH.mjs +175 -0
- package/dist/chunk-OPJKP747.mjs +7506 -0
- package/dist/chunk-OQLGGBNE.mjs +2918 -0
- package/dist/chunk-OW4AQUDL.mjs +544 -0
- package/dist/chunk-OWI6XWCD.mjs +3375 -0
- package/dist/chunk-OZT2EAF2.mjs +2776 -0
- package/dist/chunk-PBRBRKIQ.mjs +175 -0
- package/dist/chunk-PRUMNNDI.mjs +3192 -0
- package/dist/chunk-QPNHDTSM.mjs +4839 -0
- package/dist/chunk-RNEIAJDR.mjs +897 -0
- package/dist/chunk-RY7POBNT.mjs +3127 -0
- package/dist/chunk-S6FJ4DXL.mjs +1813 -0
- package/dist/chunk-SU4E6E7B.mjs +3153 -0
- package/dist/chunk-SYUUKW5A.mjs +3379 -0
- package/dist/chunk-THB5SX2S.mjs +113 -0
- package/dist/chunk-THFYE5ZX.mjs +244 -0
- package/dist/chunk-TK3QMXIP.mjs +2921 -0
- package/dist/chunk-TRR2NPAV.mjs +248 -0
- package/dist/chunk-TTTTOT7P.mjs +1803 -0
- package/dist/chunk-TXONBY6A.mjs +7509 -0
- package/dist/chunk-U2PX3JSY.mjs +1933 -0
- package/dist/chunk-UASOWKDI.mjs +186 -0
- package/dist/chunk-UDDTWG5J.mjs +734 -0
- package/dist/chunk-UIWLAQCL.mjs +175 -0
- package/dist/chunk-UL2XZEMA.mjs +3128 -0
- package/dist/chunk-US3AVDAI.mjs +3456 -0
- package/dist/chunk-V5DIDOTT.mjs +148 -0
- package/dist/chunk-VLTKQDJ3.mjs +244 -0
- package/dist/chunk-VVC42PTS.mjs +175 -0
- package/dist/chunk-VX3T3NIR.mjs +897 -0
- package/dist/chunk-WBYMW4NQ.mjs +3450 -0
- package/dist/chunk-XMWUHQVV.mjs +939 -0
- package/dist/chunk-Y6FXYEAI.mjs +10 -0
- package/dist/chunk-YCWC2SCO.mjs +148 -0
- package/dist/chunk-YFS6JMYO.mjs +3342 -0
- package/dist/chunk-ZE67HOSN.mjs +148 -0
- package/dist/chunk-ZSK5TPIV.mjs +148 -0
- package/dist/cli/index.js +317 -645
- package/dist/cli/index.mjs +8 -8
- package/dist/config-PL24KEWL.mjs +219 -0
- package/dist/dev-server-Bs_sz2DG.d.mts +111 -0
- package/dist/dev-server-Bs_sz2DG.d.ts +111 -0
- package/dist/dev-server-RmGHIntF.d.mts +113 -0
- package/dist/dev-server-RmGHIntF.d.ts +113 -0
- package/dist/dev-server.js +194 -515
- package/dist/dev-server.mjs +4 -4
- package/dist/engine-binary-KQB23JDR.mjs +97 -0
- package/dist/envelope-DD7v0v6E.d.mts +265 -0
- package/dist/envelope-DD7v0v6E.d.ts +265 -0
- package/dist/envelope.js +9 -6
- package/dist/envelope.mjs +2 -2
- package/dist/index-B5gSgvnd.d.mts +44 -0
- package/dist/index-B5gSgvnd.d.ts +44 -0
- package/dist/index-Bs0MnR54.d.mts +103 -0
- package/dist/index-Bs0MnR54.d.ts +103 -0
- package/dist/index-DR0nNc_f.d.mts +101 -0
- package/dist/index-DR0nNc_f.d.ts +101 -0
- package/dist/index-revho_gS.d.mts +104 -0
- package/dist/index-revho_gS.d.ts +104 -0
- package/dist/index-vQjwYekL.d.mts +104 -0
- package/dist/index-vQjwYekL.d.ts +104 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +198 -517
- package/dist/index.mjs +9 -8
- package/dist/init-2XLTUF7O.mjs +407 -0
- package/dist/init-7FJENUDK.mjs +407 -0
- package/dist/init-DQDX3QK6.mjs +369 -0
- package/dist/init-K3GVM4JS.mjs +538 -0
- package/dist/init-NXS5BJN3.mjs +454 -0
- package/dist/init-UC3FWPIW.mjs +367 -0
- package/dist/init-UNV5XIDE.mjs +367 -0
- package/dist/project-compiler-2HOPO7GC.mjs +10 -0
- package/dist/project-compiler-D245L5QR.mjs +10 -0
- package/dist/project-compiler-FUQRMB4X.mjs +10 -0
- package/dist/project-compiler-LA5OBI5P.mjs +10 -0
- package/dist/project-compiler-OP2VVGJQ.mjs +10 -0
- package/dist/project-compiler-PZNFE6AH.mjs +10 -0
- package/dist/project-compiler-QBVF6MFI.mjs +10 -0
- package/dist/project-compiler-VFR6CSDX.mjs +10 -0
- package/dist/project-compiler-WMJZA4UH.mjs +10 -0
- package/dist/project-compiler-XXS27TZT.mjs +10 -0
- package/dist/project-compiler-YYGDSHY5.mjs +10 -0
- package/dist/project-decompiler-5GY2KSG4.mjs +7 -0
- package/dist/project-decompiler-7I2OMUVY.mjs +7 -0
- package/dist/project-decompiler-US7GAVIC.mjs +7 -0
- package/dist/pull-2Q53HF3H.mjs +107 -0
- package/dist/pull-5AFHD3QG.mjs +109 -0
- package/dist/pull-65GUSX6F.mjs +109 -0
- package/dist/pull-6LVI4LMM.mjs +109 -0
- package/dist/pull-A2QUHW4K.mjs +109 -0
- package/dist/pull-B6T5BUKV.mjs +109 -0
- package/dist/pull-CKHWZT33.mjs +109 -0
- package/dist/pull-GM74ERRT.mjs +109 -0
- package/dist/pull-JBEQWVPE.mjs +109 -0
- package/dist/pull-P44LDRWB.mjs +109 -0
- package/dist/pull-W2US3T3E.mjs +109 -0
- package/dist/testing/index.js +9 -6
- package/dist/testing/index.mjs +1 -1
- package/dist/verify-3PPS4XAM.mjs +1833 -0
- package/dist/verify-GKEH5FZQ.mjs +1833 -0
- package/dist/verify-HDKUNHZ4.mjs +1833 -0
- package/dist/verify-SEIXUGN4.mjs +1833 -0
- package/dist/vite/index.js +10 -7
- package/dist/vite/index.mjs +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decompileProjectEnhanced
|
|
3
|
+
} from "./chunk-467SFYOD.mjs";
|
|
4
|
+
import "./chunk-Y6FXYEAI.mjs";
|
|
5
|
+
|
|
6
|
+
// src/cli/pull.ts
|
|
7
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
8
|
+
import { join, dirname } from "path";
|
|
9
|
+
async function pull(options) {
|
|
10
|
+
const { slug, apiUrl, token } = options;
|
|
11
|
+
const outDir = options.outDir ?? slug;
|
|
12
|
+
console.log(`[mmrc pull] Fetching "${slug}" from ${apiUrl}...`);
|
|
13
|
+
const ir = await fetchDefinition(apiUrl, token, slug);
|
|
14
|
+
if (!ir) {
|
|
15
|
+
throw new Error(`Definition "${slug}" not found`);
|
|
16
|
+
}
|
|
17
|
+
console.log(` Found: ${ir.name || ir.slug} (${ir.category || "workflow"}, v${ir.version || "1.0.0"})`);
|
|
18
|
+
console.log(` Fields: ${ir.fields?.length ?? 0}, States: ${ir.states?.length ?? 0}, Transitions: ${ir.transitions?.length ?? 0}`);
|
|
19
|
+
const result = decompileProjectEnhanced(ir);
|
|
20
|
+
mkdirSync(outDir, { recursive: true });
|
|
21
|
+
const filesWritten = [];
|
|
22
|
+
for (const file of result.files) {
|
|
23
|
+
const filePath = join(outDir, file.path);
|
|
24
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
25
|
+
writeFileSync(filePath, file.content, "utf-8");
|
|
26
|
+
filesWritten.push(file.path);
|
|
27
|
+
console.log(` + ${file.path}`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`
|
|
30
|
+
[mmrc pull] Scaffolded ${filesWritten.length} files in ${outDir}/`);
|
|
31
|
+
console.log(` Entry: ${result.entryFile}`);
|
|
32
|
+
console.log(`
|
|
33
|
+
Next steps:`);
|
|
34
|
+
console.log(` cd ${outDir}`);
|
|
35
|
+
console.log(` mmrc dev --src .`);
|
|
36
|
+
console.log(` # Edit files, then deploy back:`);
|
|
37
|
+
console.log(` mmrc deploy --src . --api-url ${apiUrl} --token <token>`);
|
|
38
|
+
return { slug, filesWritten, outDir };
|
|
39
|
+
}
|
|
40
|
+
async function fetchDefinition(apiUrl, token, slug) {
|
|
41
|
+
const bySlug = await tryFetch(`${apiUrl}/workflow/definitions?slug=${encodeURIComponent(slug)}`, token);
|
|
42
|
+
if (bySlug) return bySlug;
|
|
43
|
+
const bySearch = await tryFetch(`${apiUrl}/workflow/catalog/search?q=${encodeURIComponent(slug)}`, token);
|
|
44
|
+
if (bySearch) return bySearch;
|
|
45
|
+
const modulesRes = await fetch(`${apiUrl}/modules`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
47
|
+
});
|
|
48
|
+
if (modulesRes.ok) {
|
|
49
|
+
const modules = await modulesRes.json();
|
|
50
|
+
const mod = modules.find((m) => m.module_id === slug || m.name?.toLowerCase() === slug.toLowerCase());
|
|
51
|
+
if (mod) {
|
|
52
|
+
const fullRes = await fetch(`${apiUrl}/workflow/definitions/${mod.module_id}`, {
|
|
53
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
54
|
+
});
|
|
55
|
+
if (fullRes.ok) {
|
|
56
|
+
return normalizeApiResponse(await fullRes.json());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
async function tryFetch(url, token) {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(url, {
|
|
65
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) return null;
|
|
68
|
+
const data = await res.json();
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
if (data.length === 0) return null;
|
|
71
|
+
return normalizeApiResponse(data[0]);
|
|
72
|
+
}
|
|
73
|
+
const items = data.items ?? data.data;
|
|
74
|
+
if (items && Array.isArray(items)) {
|
|
75
|
+
if (items.length === 0) return null;
|
|
76
|
+
return normalizeApiResponse(items[0]);
|
|
77
|
+
}
|
|
78
|
+
return normalizeApiResponse(data);
|
|
79
|
+
} catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function normalizeApiResponse(def) {
|
|
84
|
+
const ir = {
|
|
85
|
+
slug: def.slug,
|
|
86
|
+
name: def.name,
|
|
87
|
+
version: def.version || "1.0.0",
|
|
88
|
+
description: def.description || "",
|
|
89
|
+
category: def.category || "workflow",
|
|
90
|
+
fields: def.fields || [],
|
|
91
|
+
states: def.states || [],
|
|
92
|
+
transitions: def.transitions || [],
|
|
93
|
+
roles: def.roles || [],
|
|
94
|
+
on_event: def.on_event || [],
|
|
95
|
+
metadata: {
|
|
96
|
+
...def.metadata || {}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const experience = def.view || def.experience || def.metadata?.experience;
|
|
100
|
+
if (experience) {
|
|
101
|
+
ir.experience = experience;
|
|
102
|
+
ir.metadata.experience = experience;
|
|
103
|
+
ir.view = experience;
|
|
104
|
+
}
|
|
105
|
+
return ir;
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
pull
|
|
109
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decompileProjectEnhanced
|
|
3
|
+
} from "./chunk-SU4E6E7B.mjs";
|
|
4
|
+
import "./chunk-Y6FXYEAI.mjs";
|
|
5
|
+
|
|
6
|
+
// src/cli/pull.ts
|
|
7
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
8
|
+
import { join, dirname } from "path";
|
|
9
|
+
async function pull(options) {
|
|
10
|
+
const { slug, apiUrl, token } = options;
|
|
11
|
+
const outDir = options.outDir ?? slug;
|
|
12
|
+
console.log(`[mmrc pull] Fetching "${slug}" from ${apiUrl}...`);
|
|
13
|
+
const ir = await fetchDefinition(apiUrl, token, slug);
|
|
14
|
+
if (!ir) {
|
|
15
|
+
throw new Error(`Definition "${slug}" not found`);
|
|
16
|
+
}
|
|
17
|
+
console.log(` Found: ${ir.name || ir.slug} (${ir.category || "workflow"}, v${ir.version || "1.0.0"})`);
|
|
18
|
+
console.log(` Fields: ${ir.fields?.length ?? 0}, States: ${ir.states?.length ?? 0}, Transitions: ${ir.transitions?.length ?? 0}`);
|
|
19
|
+
const result = decompileProjectEnhanced(ir);
|
|
20
|
+
mkdirSync(outDir, { recursive: true });
|
|
21
|
+
const filesWritten = [];
|
|
22
|
+
for (const file of result.files) {
|
|
23
|
+
const filePath = join(outDir, file.path);
|
|
24
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
25
|
+
writeFileSync(filePath, file.content, "utf-8");
|
|
26
|
+
filesWritten.push(file.path);
|
|
27
|
+
console.log(` + ${file.path}`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`
|
|
30
|
+
[mmrc pull] Scaffolded ${filesWritten.length} files in ${outDir}/`);
|
|
31
|
+
console.log(` Entry: ${result.entryFile}`);
|
|
32
|
+
console.log(`
|
|
33
|
+
Next steps:`);
|
|
34
|
+
console.log(` cd ${outDir}`);
|
|
35
|
+
console.log(` mmrc dev --src .`);
|
|
36
|
+
console.log(` # Edit files, then deploy back:`);
|
|
37
|
+
console.log(` mmrc deploy --src . --api-url ${apiUrl} --token <token>`);
|
|
38
|
+
return { slug, filesWritten, outDir };
|
|
39
|
+
}
|
|
40
|
+
async function fetchDefinition(apiUrl, token, slug) {
|
|
41
|
+
const bySlug = await tryFetch(`${apiUrl}/workflow/definitions?slug=${encodeURIComponent(slug)}`, token);
|
|
42
|
+
if (bySlug) return bySlug;
|
|
43
|
+
const bySearch = await tryFetch(`${apiUrl}/workflow/catalog/search?q=${encodeURIComponent(slug)}`, token);
|
|
44
|
+
if (bySearch) return bySearch;
|
|
45
|
+
const modulesRes = await fetch(`${apiUrl}/modules`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
47
|
+
});
|
|
48
|
+
if (modulesRes.ok) {
|
|
49
|
+
const modules = await modulesRes.json();
|
|
50
|
+
const mod = modules.find((m) => m.module_id === slug || m.name?.toLowerCase() === slug.toLowerCase());
|
|
51
|
+
if (mod) {
|
|
52
|
+
const fullRes = await fetch(`${apiUrl}/workflow/definitions/${mod.module_id}`, {
|
|
53
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
54
|
+
});
|
|
55
|
+
if (fullRes.ok) {
|
|
56
|
+
return normalizeApiResponse(await fullRes.json());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
async function tryFetch(url, token) {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(url, {
|
|
65
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) return null;
|
|
68
|
+
const data = await res.json();
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
if (data.length === 0) return null;
|
|
71
|
+
return normalizeApiResponse(data[0]);
|
|
72
|
+
}
|
|
73
|
+
const items = data.items ?? data.data;
|
|
74
|
+
if (items && Array.isArray(items)) {
|
|
75
|
+
if (items.length === 0) return null;
|
|
76
|
+
return normalizeApiResponse(items[0]);
|
|
77
|
+
}
|
|
78
|
+
return normalizeApiResponse(data);
|
|
79
|
+
} catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function normalizeApiResponse(def) {
|
|
84
|
+
const ir = {
|
|
85
|
+
slug: def.slug,
|
|
86
|
+
name: def.name,
|
|
87
|
+
version: def.version || "1.0.0",
|
|
88
|
+
description: def.description || "",
|
|
89
|
+
category: def.category || "workflow",
|
|
90
|
+
fields: def.fields || [],
|
|
91
|
+
states: def.states || [],
|
|
92
|
+
transitions: def.transitions || [],
|
|
93
|
+
roles: def.roles || [],
|
|
94
|
+
on_event: def.on_event || [],
|
|
95
|
+
metadata: {
|
|
96
|
+
...def.metadata || {}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const experience = def.view || def.experience || def.metadata?.experience;
|
|
100
|
+
if (experience) {
|
|
101
|
+
ir.experience = experience;
|
|
102
|
+
ir.metadata.experience = experience;
|
|
103
|
+
ir.view = experience;
|
|
104
|
+
}
|
|
105
|
+
return ir;
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
pull
|
|
109
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decompileProjectEnhanced
|
|
3
|
+
} from "./chunk-WBYMW4NQ.mjs";
|
|
4
|
+
import "./chunk-CIESM3BP.mjs";
|
|
5
|
+
|
|
6
|
+
// src/cli/pull.ts
|
|
7
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
8
|
+
import { join, dirname } from "path";
|
|
9
|
+
async function pull(options) {
|
|
10
|
+
const { slug, apiUrl, token } = options;
|
|
11
|
+
const outDir = options.outDir ?? slug;
|
|
12
|
+
console.log(`[mmrc pull] Fetching "${slug}" from ${apiUrl}...`);
|
|
13
|
+
const ir = await fetchDefinition(apiUrl, token, slug);
|
|
14
|
+
if (!ir) {
|
|
15
|
+
throw new Error(`Definition "${slug}" not found`);
|
|
16
|
+
}
|
|
17
|
+
console.log(` Found: ${ir.name || ir.slug} (${ir.category || "workflow"}, v${ir.version || "1.0.0"})`);
|
|
18
|
+
console.log(` Fields: ${ir.fields?.length ?? 0}, States: ${ir.states?.length ?? 0}, Transitions: ${ir.transitions?.length ?? 0}`);
|
|
19
|
+
const result = decompileProjectEnhanced(ir);
|
|
20
|
+
mkdirSync(outDir, { recursive: true });
|
|
21
|
+
const filesWritten = [];
|
|
22
|
+
for (const file of result.files) {
|
|
23
|
+
const filePath = join(outDir, file.path);
|
|
24
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
25
|
+
writeFileSync(filePath, file.content, "utf-8");
|
|
26
|
+
filesWritten.push(file.path);
|
|
27
|
+
console.log(` + ${file.path}`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`
|
|
30
|
+
[mmrc pull] Scaffolded ${filesWritten.length} files in ${outDir}/`);
|
|
31
|
+
console.log(` Entry: ${result.entryFile}`);
|
|
32
|
+
console.log(`
|
|
33
|
+
Next steps:`);
|
|
34
|
+
console.log(` cd ${outDir}`);
|
|
35
|
+
console.log(` mmrc dev --src .`);
|
|
36
|
+
console.log(` # Edit files, then deploy back:`);
|
|
37
|
+
console.log(` mmrc deploy --src . --api-url ${apiUrl} --token <token>`);
|
|
38
|
+
return { slug, filesWritten, outDir };
|
|
39
|
+
}
|
|
40
|
+
async function fetchDefinition(apiUrl, token, slug) {
|
|
41
|
+
const bySlug = await tryFetch(`${apiUrl}/workflow/definitions?slug=${encodeURIComponent(slug)}`, token);
|
|
42
|
+
if (bySlug) return bySlug;
|
|
43
|
+
const bySearch = await tryFetch(`${apiUrl}/workflow/catalog/search?q=${encodeURIComponent(slug)}`, token);
|
|
44
|
+
if (bySearch) return bySearch;
|
|
45
|
+
const modulesRes = await fetch(`${apiUrl}/modules`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
47
|
+
});
|
|
48
|
+
if (modulesRes.ok) {
|
|
49
|
+
const modules = await modulesRes.json();
|
|
50
|
+
const mod = modules.find((m) => m.module_id === slug || m.name?.toLowerCase() === slug.toLowerCase());
|
|
51
|
+
if (mod) {
|
|
52
|
+
const fullRes = await fetch(`${apiUrl}/workflow/definitions/${mod.module_id}`, {
|
|
53
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
54
|
+
});
|
|
55
|
+
if (fullRes.ok) {
|
|
56
|
+
return normalizeApiResponse(await fullRes.json());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
async function tryFetch(url, token) {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(url, {
|
|
65
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) return null;
|
|
68
|
+
const data = await res.json();
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
if (data.length === 0) return null;
|
|
71
|
+
return normalizeApiResponse(data[0]);
|
|
72
|
+
}
|
|
73
|
+
const items = data.items ?? data.data;
|
|
74
|
+
if (items && Array.isArray(items)) {
|
|
75
|
+
if (items.length === 0) return null;
|
|
76
|
+
return normalizeApiResponse(items[0]);
|
|
77
|
+
}
|
|
78
|
+
return normalizeApiResponse(data);
|
|
79
|
+
} catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function normalizeApiResponse(def) {
|
|
84
|
+
const ir = {
|
|
85
|
+
slug: def.slug,
|
|
86
|
+
name: def.name,
|
|
87
|
+
version: def.version || "1.0.0",
|
|
88
|
+
description: def.description || "",
|
|
89
|
+
category: def.category || "workflow",
|
|
90
|
+
fields: def.fields || [],
|
|
91
|
+
states: def.states || [],
|
|
92
|
+
transitions: def.transitions || [],
|
|
93
|
+
roles: def.roles || [],
|
|
94
|
+
on_event: def.on_event || [],
|
|
95
|
+
metadata: {
|
|
96
|
+
...def.metadata || {}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const experience = def.view || def.experience || def.metadata?.experience;
|
|
100
|
+
if (experience) {
|
|
101
|
+
ir.experience = experience;
|
|
102
|
+
ir.metadata.experience = experience;
|
|
103
|
+
ir.view = experience;
|
|
104
|
+
}
|
|
105
|
+
return ir;
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
pull
|
|
109
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decompileProjectEnhanced
|
|
3
|
+
} from "./chunk-I3VQQJZ6.mjs";
|
|
4
|
+
import "./chunk-Y6FXYEAI.mjs";
|
|
5
|
+
|
|
6
|
+
// src/cli/pull.ts
|
|
7
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
8
|
+
import { join, dirname } from "path";
|
|
9
|
+
async function pull(options) {
|
|
10
|
+
const { slug, apiUrl, token } = options;
|
|
11
|
+
const outDir = options.outDir ?? slug;
|
|
12
|
+
console.log(`[mmrc pull] Fetching "${slug}" from ${apiUrl}...`);
|
|
13
|
+
const ir = await fetchDefinition(apiUrl, token, slug);
|
|
14
|
+
if (!ir) {
|
|
15
|
+
throw new Error(`Definition "${slug}" not found`);
|
|
16
|
+
}
|
|
17
|
+
console.log(` Found: ${ir.name || ir.slug} (${ir.category || "workflow"}, v${ir.version || "1.0.0"})`);
|
|
18
|
+
console.log(` Fields: ${ir.fields?.length ?? 0}, States: ${ir.states?.length ?? 0}, Transitions: ${ir.transitions?.length ?? 0}`);
|
|
19
|
+
const result = decompileProjectEnhanced(ir);
|
|
20
|
+
mkdirSync(outDir, { recursive: true });
|
|
21
|
+
const filesWritten = [];
|
|
22
|
+
for (const file of result.files) {
|
|
23
|
+
const filePath = join(outDir, file.path);
|
|
24
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
25
|
+
writeFileSync(filePath, file.content, "utf-8");
|
|
26
|
+
filesWritten.push(file.path);
|
|
27
|
+
console.log(` + ${file.path}`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`
|
|
30
|
+
[mmrc pull] Scaffolded ${filesWritten.length} files in ${outDir}/`);
|
|
31
|
+
console.log(` Entry: ${result.entryFile}`);
|
|
32
|
+
console.log(`
|
|
33
|
+
Next steps:`);
|
|
34
|
+
console.log(` cd ${outDir}`);
|
|
35
|
+
console.log(` mmrc dev --src .`);
|
|
36
|
+
console.log(` # Edit files, then deploy back:`);
|
|
37
|
+
console.log(` mmrc deploy --src . --api-url ${apiUrl} --token <token>`);
|
|
38
|
+
return { slug, filesWritten, outDir };
|
|
39
|
+
}
|
|
40
|
+
async function fetchDefinition(apiUrl, token, slug) {
|
|
41
|
+
const bySlug = await tryFetch(`${apiUrl}/workflow/definitions?slug=${encodeURIComponent(slug)}`, token);
|
|
42
|
+
if (bySlug) return bySlug;
|
|
43
|
+
const bySearch = await tryFetch(`${apiUrl}/workflow/catalog/search?q=${encodeURIComponent(slug)}`, token);
|
|
44
|
+
if (bySearch) return bySearch;
|
|
45
|
+
const modulesRes = await fetch(`${apiUrl}/modules`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
47
|
+
});
|
|
48
|
+
if (modulesRes.ok) {
|
|
49
|
+
const modules = await modulesRes.json();
|
|
50
|
+
const mod = modules.find((m) => m.module_id === slug || m.name?.toLowerCase() === slug.toLowerCase());
|
|
51
|
+
if (mod) {
|
|
52
|
+
const fullRes = await fetch(`${apiUrl}/workflow/definitions/${mod.module_id}`, {
|
|
53
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
54
|
+
});
|
|
55
|
+
if (fullRes.ok) {
|
|
56
|
+
return normalizeApiResponse(await fullRes.json());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
async function tryFetch(url, token) {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(url, {
|
|
65
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok) return null;
|
|
68
|
+
const data = await res.json();
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
if (data.length === 0) return null;
|
|
71
|
+
return normalizeApiResponse(data[0]);
|
|
72
|
+
}
|
|
73
|
+
const items = data.items ?? data.data;
|
|
74
|
+
if (items && Array.isArray(items)) {
|
|
75
|
+
if (items.length === 0) return null;
|
|
76
|
+
return normalizeApiResponse(items[0]);
|
|
77
|
+
}
|
|
78
|
+
return normalizeApiResponse(data);
|
|
79
|
+
} catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function normalizeApiResponse(def) {
|
|
84
|
+
const ir = {
|
|
85
|
+
slug: def.slug,
|
|
86
|
+
name: def.name,
|
|
87
|
+
version: def.version || "1.0.0",
|
|
88
|
+
description: def.description || "",
|
|
89
|
+
category: def.category || "workflow",
|
|
90
|
+
fields: def.fields || [],
|
|
91
|
+
states: def.states || [],
|
|
92
|
+
transitions: def.transitions || [],
|
|
93
|
+
roles: def.roles || [],
|
|
94
|
+
on_event: def.on_event || [],
|
|
95
|
+
metadata: {
|
|
96
|
+
...def.metadata || {}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const experience = def.view || def.experience || def.metadata?.experience;
|
|
100
|
+
if (experience) {
|
|
101
|
+
ir.experience = experience;
|
|
102
|
+
ir.metadata.experience = experience;
|
|
103
|
+
ir.view = experience;
|
|
104
|
+
}
|
|
105
|
+
return ir;
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
pull
|
|
109
|
+
};
|
package/dist/testing/index.js
CHANGED
|
@@ -6266,7 +6266,8 @@ function convertOnEvent(sub) {
|
|
|
6266
6266
|
};
|
|
6267
6267
|
}
|
|
6268
6268
|
function emitIR(extracted) {
|
|
6269
|
-
const { slug, name, version, description, category, fields, states, transitions } = extracted;
|
|
6269
|
+
const { slug, name, version, description, category: rawCategory, fields, states, transitions } = extracted;
|
|
6270
|
+
const category = Array.isArray(rawCategory) ? rawCategory : [rawCategory];
|
|
6270
6271
|
const stateArray = Array.from(states.values());
|
|
6271
6272
|
if (stateArray.length === 0) {
|
|
6272
6273
|
stateArray.push({
|
|
@@ -6654,13 +6655,15 @@ function emitCanonical(extracted, sourceFilename) {
|
|
|
6654
6655
|
}
|
|
6655
6656
|
]
|
|
6656
6657
|
});
|
|
6657
|
-
const
|
|
6658
|
+
const rawCat = extracted.category;
|
|
6658
6659
|
let categoryArray;
|
|
6659
|
-
if (
|
|
6660
|
-
|
|
6660
|
+
if (Array.isArray(rawCat)) {
|
|
6661
|
+
categoryArray = rawCat;
|
|
6662
|
+
} else if (rawCat.includes("/")) {
|
|
6663
|
+
const [primary, ...tags] = rawCat.split("/");
|
|
6661
6664
|
categoryArray = (0, import_player_core.normalizeCategory)(primary, ...tags);
|
|
6662
6665
|
} else {
|
|
6663
|
-
categoryArray = [
|
|
6666
|
+
categoryArray = [rawCat];
|
|
6664
6667
|
}
|
|
6665
6668
|
return {
|
|
6666
6669
|
slug: ir.slug,
|
|
@@ -6807,7 +6810,7 @@ function compilerStateToWorkflow(state, metadata) {
|
|
|
6807
6810
|
name: metadata.name || "Workflow",
|
|
6808
6811
|
version: metadata.version || "0.1.0",
|
|
6809
6812
|
description: metadata.description,
|
|
6810
|
-
category: metadata.category || "workflow",
|
|
6813
|
+
category: metadata.categoryArray ? metadata.categoryArray : [metadata.category || "workflow"],
|
|
6811
6814
|
fields: state.fields || [],
|
|
6812
6815
|
states: state.states || /* @__PURE__ */ new Map(),
|
|
6813
6816
|
transitions: state.transitions || [],
|