mapples 0.2.0-beta.0 → 0.2.0-beta.10
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/README.md +133 -22
- package/dist/adopt/scan.d.ts +8 -2
- package/dist/adopt/scan.js +31 -13
- package/dist/adopt/scan.js.map +1 -1
- package/dist/api/agent.d.ts +85 -0
- package/dist/api/agent.js +92 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/auth.d.ts +2 -0
- package/dist/api/auth.js +28 -6
- package/dist/api/auth.js.map +1 -1
- package/dist/api/client.d.ts +13 -1
- package/dist/api/client.js +26 -4
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.d.ts +9 -0
- package/dist/api/commit.js +36 -0
- package/dist/api/commit.js.map +1 -1
- package/dist/api/errors.js +12 -2
- package/dist/api/errors.js.map +1 -1
- package/dist/api/objects.d.ts +36 -5
- package/dist/api/objects.js +176 -10
- package/dist/api/objects.js.map +1 -1
- package/dist/api/poll.d.ts +5 -3
- package/dist/api/poll.js +17 -6
- package/dist/api/poll.js.map +1 -1
- package/dist/api/txPlan.d.ts +15 -0
- package/dist/api/txPlan.js +196 -0
- package/dist/api/txPlan.js.map +1 -0
- package/dist/assets/assets.d.ts +9 -0
- package/dist/assets/assets.js +33 -4
- package/dist/assets/assets.js.map +1 -1
- package/dist/codegen/emit.d.ts +4 -7
- package/dist/codegen/emit.js +10 -29
- package/dist/codegen/emit.js.map +1 -1
- package/dist/codegen/imports.d.ts +8 -15
- package/dist/codegen/imports.js +27 -72
- package/dist/codegen/imports.js.map +1 -1
- package/dist/codegen/instances.d.ts +5 -0
- package/dist/codegen/instances.js +30 -0
- package/dist/codegen/instances.js.map +1 -0
- package/dist/codegen/styles.d.ts +1 -0
- package/dist/codegen/styles.js +3 -0
- package/dist/codegen/styles.js.map +1 -0
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +87 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.js +1 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/impl/adoptImpl.js +3 -0
- package/dist/commands/impl/adoptImpl.js.map +1 -1
- package/dist/commands/impl/agentImpl.d.ts +23 -0
- package/dist/commands/impl/agentImpl.js +426 -0
- package/dist/commands/impl/agentImpl.js.map +1 -0
- package/dist/commands/impl/createImpl.js +31 -4
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +28 -4
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +30 -5
- package/dist/commands/impl/syncImpl.js.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/merge/applyOps.d.ts +5 -2
- package/dist/merge/applyOps.js +75 -32
- package/dist/merge/applyOps.js.map +1 -1
- package/dist/merge/childrenOrder.d.ts +13 -0
- package/dist/merge/childrenOrder.js +51 -0
- package/dist/merge/childrenOrder.js.map +1 -0
- package/dist/merge/diff.d.ts +20 -1
- package/dist/merge/diff.js +77 -17
- package/dist/merge/diff.js.map +1 -1
- package/dist/merge/threeWay.d.ts +2 -2
- package/dist/merge/threeWay.js +74 -10
- package/dist/merge/threeWay.js.map +1 -1
- package/dist/merge/toEdits.d.ts +1 -3
- package/dist/merge/toEdits.js +3 -91
- package/dist/merge/toEdits.js.map +1 -1
- package/dist/nav/navigatorTree.d.ts +78 -0
- package/dist/nav/navigatorTree.js +410 -0
- package/dist/nav/navigatorTree.js.map +1 -0
- package/dist/nav/placement.d.ts +53 -0
- package/dist/nav/placement.js +260 -0
- package/dist/nav/placement.js.map +1 -0
- package/dist/nav/routeTree.d.ts +8 -2
- package/dist/nav/routeTree.js +79 -151
- package/dist/nav/routeTree.js.map +1 -1
- package/dist/nav/screenOptions.d.ts +15 -0
- package/dist/nav/screenOptions.js +213 -0
- package/dist/nav/screenOptions.js.map +1 -0
- package/dist/project/agentState.d.ts +30 -0
- package/dist/project/agentState.js +42 -0
- package/dist/project/agentState.js.map +1 -0
- package/dist/project/baseStore.d.ts +19 -1
- package/dist/project/baseStore.js +28 -0
- package/dist/project/baseStore.js.map +1 -1
- package/dist/project/componentsMap.d.ts +7 -0
- package/dist/project/componentsMap.js +21 -0
- package/dist/project/componentsMap.js.map +1 -0
- package/dist/project/config.d.ts +12 -3
- package/dist/project/config.js +11 -2
- package/dist/project/config.js.map +1 -1
- package/dist/project/env.d.ts +10 -3
- package/dist/project/env.js +23 -5
- package/dist/project/env.js.map +1 -1
- package/dist/project/pagesMap.d.ts +2 -0
- package/dist/project/pagesMap.js.map +1 -1
- package/dist/project/secret.d.ts +6 -2
- package/dist/project/secret.js +11 -5
- package/dist/project/secret.js.map +1 -1
- package/dist/services/adoptService.d.ts +3 -0
- package/dist/services/adoptService.js +357 -38
- package/dist/services/adoptService.js.map +1 -1
- package/dist/services/agentInstall.d.ts +80 -0
- package/dist/services/agentInstall.js +309 -0
- package/dist/services/agentInstall.js.map +1 -0
- package/dist/services/agentLease.d.ts +2 -0
- package/dist/services/agentLease.js +32 -0
- package/dist/services/agentLease.js.map +1 -0
- package/dist/services/clientFactory.d.ts +2 -0
- package/dist/services/clientFactory.js +20 -3
- package/dist/services/clientFactory.js.map +1 -1
- package/dist/services/doctorService.js +77 -66
- package/dist/services/doctorService.js.map +1 -1
- package/dist/services/scaffold.js +4 -0
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.d.ts +7 -0
- package/dist/services/syncEngine.js +719 -306
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/style/theme.js +17 -1
- package/dist/style/theme.js.map +1 -1
- package/dist/types.d.ts +51 -2
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/report.d.ts +15 -0
- package/dist/ui/report.js +30 -0
- package/dist/ui/report.js.map +1 -1
- package/package.json +3 -2
- package/templates/agent/agents-md/AGENTS.md +8 -0
- package/templates/agent/claude/CLAUDE.md +7 -0
- package/templates/agent/claude/mcp.json +11 -0
- package/templates/agent/claude/settings.json +26 -0
- package/templates/agent/codex/config.toml +6 -0
- package/templates/agent/codex/hooks.json +26 -0
- package/templates/agent/cursor/hooks.json +9 -0
- package/templates/agent/cursor/mcp.json +10 -0
- package/templates/agent/mapples.md +124 -0
- package/templates/agent/skills/mapples-conventions/SKILL.md +137 -0
- package/templates/agent/skills/mapples-design/SKILL.md +235 -0
- package/templates/agent/skills/mapples-design/reference/component-library.md +128 -0
- package/templates/agent/skills/mapples-design/reference/design-tokens.md +132 -0
- package/templates/agent/skills/mapples-design/reference/layout-contract.md +227 -0
- package/templates/agent/skills/mapples-design/reference/lint-checklist.md +51 -0
- package/templates/agent/skills/mapples-design/reference/plan.md +95 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
- package/templates/agent/skills/mapples-design/reference/style-guides.md +92 -0
- package/templates/agent/skills/mapples-sync/SKILL.md +93 -0
- package/templates/app/_layout.tsx +3 -0
- package/templates/app.json +0 -1
- package/templates/gitignore +2 -0
- package/templates/mapples/sid.d.ts +6 -0
- package/templates/package.json +12 -10
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// Splitting a push into transactions of at most MAX_OPS_PER_TX ops without
|
|
2
|
+
// losing nodes (RFC-0001 §5.2, rev. 2026-09-15). The server serializes only
|
|
3
|
+
// what the manifest reaches when a transaction ends, so a create that is not
|
|
4
|
+
// placed in its own transaction is gone. A split therefore:
|
|
5
|
+
// - keeps an unplaced create and the op that places it (a children
|
|
6
|
+
// directive or a Page/Component root) in one transaction;
|
|
7
|
+
// - never sends an op before the create that mints a cid it references
|
|
8
|
+
// (cids resolve through earlier transactions' idMaps);
|
|
9
|
+
// - keeps the relative order of ops aimed at the same target;
|
|
10
|
+
// - refuses, rather than sends, a group that cannot fit one transaction.
|
|
11
|
+
export const MAX_OPS_PER_TX = 200;
|
|
12
|
+
/** A placement group larger than one transaction: the push stops, nothing is sent. */
|
|
13
|
+
export class PushGroupTooLargeError extends Error {
|
|
14
|
+
size;
|
|
15
|
+
limit;
|
|
16
|
+
sample;
|
|
17
|
+
constructor(size, limit, sample) {
|
|
18
|
+
super(`a new element and everything that must land with it is ${size} ops, over the ${limit}-op transaction limit — nothing was pushed. ` +
|
|
19
|
+
'Sync the change in smaller steps (e.g. add the container first, then its children).');
|
|
20
|
+
this.size = size;
|
|
21
|
+
this.limit = limit;
|
|
22
|
+
this.sample = sample;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function cidsIn(value, out) {
|
|
26
|
+
if (typeof value === 'string') {
|
|
27
|
+
if (value.startsWith('c_'))
|
|
28
|
+
out.add(value);
|
|
29
|
+
}
|
|
30
|
+
else if (Array.isArray(value)) {
|
|
31
|
+
for (const v of value)
|
|
32
|
+
cidsIn(v, out);
|
|
33
|
+
}
|
|
34
|
+
else if (value !== null && typeof value === 'object') {
|
|
35
|
+
for (const v of Object.values(value))
|
|
36
|
+
cidsIn(v, out);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Refs an op links under its target: the op that places them. */
|
|
40
|
+
function placedRefs(op) {
|
|
41
|
+
if (op.op === 'create' && (op.entity === 'Page' || op.entity === 'Component')) {
|
|
42
|
+
const root = op.data?.root;
|
|
43
|
+
return typeof root === 'string' ? [root] : [];
|
|
44
|
+
}
|
|
45
|
+
if (op.op === 'update' && op.children) {
|
|
46
|
+
return [...(op.children.insert ?? []).map((i) => i.ref), ...(op.children.set ?? [])];
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
/** The entity whose state an op's position matters for. */
|
|
51
|
+
function orderKey(op) {
|
|
52
|
+
if (op.op === 'create') {
|
|
53
|
+
const parent = op.data?.parent;
|
|
54
|
+
return typeof parent === 'string' ? parent : undefined;
|
|
55
|
+
}
|
|
56
|
+
return op.id;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Plan `ops` as sequential transactions, each at most `limit` ops. Flattening
|
|
60
|
+
* the result gives the order the ops are sent in; a caller that tracks how
|
|
61
|
+
* many ops committed must count against that flattened order.
|
|
62
|
+
*/
|
|
63
|
+
export function planTransactions(ops, limit = MAX_OPS_PER_TX) {
|
|
64
|
+
if (ops.length <= limit)
|
|
65
|
+
return ops.length === 0 ? [] : [ops];
|
|
66
|
+
const n = ops.length;
|
|
67
|
+
// Union-find: an unplaced RenderNode create joins the op that places it.
|
|
68
|
+
const group = Array.from({ length: n }, (_, i) => i);
|
|
69
|
+
const find = (i) => {
|
|
70
|
+
while (group[i] !== i) {
|
|
71
|
+
group[i] = group[group[i]];
|
|
72
|
+
i = group[i];
|
|
73
|
+
}
|
|
74
|
+
return i;
|
|
75
|
+
};
|
|
76
|
+
const union = (a, b) => {
|
|
77
|
+
group[find(a)] = find(b);
|
|
78
|
+
};
|
|
79
|
+
const minter = new Map();
|
|
80
|
+
const unplaced = new Set();
|
|
81
|
+
const deps = Array.from({ length: n }, () => []);
|
|
82
|
+
const lastByKey = new Map();
|
|
83
|
+
ops.forEach((op, i) => {
|
|
84
|
+
const refs = new Set();
|
|
85
|
+
cidsIn({ ...op, cid: undefined }, refs);
|
|
86
|
+
for (const cid of refs) {
|
|
87
|
+
const m = minter.get(cid);
|
|
88
|
+
if (m !== undefined)
|
|
89
|
+
deps[i].push(m);
|
|
90
|
+
}
|
|
91
|
+
for (const ref of placedRefs(op)) {
|
|
92
|
+
const m = minter.get(ref);
|
|
93
|
+
if (m !== undefined && unplaced.delete(ref))
|
|
94
|
+
union(i, m);
|
|
95
|
+
}
|
|
96
|
+
const key = orderKey(op);
|
|
97
|
+
if (key !== undefined) {
|
|
98
|
+
const prev = lastByKey.get(key);
|
|
99
|
+
if (prev !== undefined)
|
|
100
|
+
deps[i].push(prev);
|
|
101
|
+
lastByKey.set(key, i);
|
|
102
|
+
}
|
|
103
|
+
if (op.op === 'create' && op.cid) {
|
|
104
|
+
minter.set(op.cid, i);
|
|
105
|
+
if (op.entity === 'RenderNode' && typeof op.data?.parent !== 'string')
|
|
106
|
+
unplaced.add(op.cid);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
// Group graph, then merge its cycles (Tarjan) so it becomes a DAG.
|
|
110
|
+
const roots = [...new Set(group.map((_, i) => find(i)))];
|
|
111
|
+
const edges = new Map(roots.map((r) => [r, new Set()]));
|
|
112
|
+
ops.forEach((_, i) => {
|
|
113
|
+
for (const d of deps[i]) {
|
|
114
|
+
const from = find(i);
|
|
115
|
+
const to = find(d);
|
|
116
|
+
if (from !== to)
|
|
117
|
+
edges.get(from).add(to);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const component = new Map();
|
|
121
|
+
const indexOf = new Map();
|
|
122
|
+
const low = new Map();
|
|
123
|
+
const stack = [];
|
|
124
|
+
const onStack = new Set();
|
|
125
|
+
let counter = 0;
|
|
126
|
+
const strongConnect = (v) => {
|
|
127
|
+
indexOf.set(v, counter);
|
|
128
|
+
low.set(v, counter);
|
|
129
|
+
counter += 1;
|
|
130
|
+
stack.push(v);
|
|
131
|
+
onStack.add(v);
|
|
132
|
+
for (const w of edges.get(v)) {
|
|
133
|
+
if (!indexOf.has(w)) {
|
|
134
|
+
strongConnect(w);
|
|
135
|
+
low.set(v, Math.min(low.get(v), low.get(w)));
|
|
136
|
+
}
|
|
137
|
+
else if (onStack.has(w)) {
|
|
138
|
+
low.set(v, Math.min(low.get(v), indexOf.get(w)));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (low.get(v) === indexOf.get(v)) {
|
|
142
|
+
for (;;) {
|
|
143
|
+
const w = stack.pop();
|
|
144
|
+
onStack.delete(w);
|
|
145
|
+
component.set(w, v);
|
|
146
|
+
if (w === v)
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
for (const r of roots)
|
|
152
|
+
if (!indexOf.has(r))
|
|
153
|
+
strongConnect(r);
|
|
154
|
+
const members = new Map();
|
|
155
|
+
ops.forEach((_, i) => {
|
|
156
|
+
const c = component.get(find(i));
|
|
157
|
+
const list = members.get(c) ?? [];
|
|
158
|
+
list.push(i);
|
|
159
|
+
members.set(c, list);
|
|
160
|
+
});
|
|
161
|
+
const needs = new Map([...members.keys()].map((c) => [c, new Set()]));
|
|
162
|
+
for (const [from, tos] of edges) {
|
|
163
|
+
for (const to of tos) {
|
|
164
|
+
const a = component.get(from);
|
|
165
|
+
const b = component.get(to);
|
|
166
|
+
if (a !== b)
|
|
167
|
+
needs.get(a).add(b);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Kahn's order, earliest first op first: untouched ops keep their order.
|
|
171
|
+
const done = new Set();
|
|
172
|
+
const ordered = [];
|
|
173
|
+
const pending = [...members.entries()].sort((a, b) => a[1][0] - b[1][0]);
|
|
174
|
+
while (ordered.length < pending.length) {
|
|
175
|
+
const next = pending.find(([c]) => !done.has(c) && [...needs.get(c)].every((d) => done.has(d)));
|
|
176
|
+
done.add(next[0]);
|
|
177
|
+
ordered.push(next[1]);
|
|
178
|
+
}
|
|
179
|
+
const txs = [];
|
|
180
|
+
let current = [];
|
|
181
|
+
for (const indices of ordered) {
|
|
182
|
+
if (indices.length > limit) {
|
|
183
|
+
throw new PushGroupTooLargeError(indices.length, limit, indices.slice(0, 3).map((i) => ops[i]));
|
|
184
|
+
}
|
|
185
|
+
if (current.length + indices.length > limit) {
|
|
186
|
+
txs.push(current);
|
|
187
|
+
current = [];
|
|
188
|
+
}
|
|
189
|
+
for (const i of indices)
|
|
190
|
+
current.push(ops[i]);
|
|
191
|
+
}
|
|
192
|
+
if (current.length > 0)
|
|
193
|
+
txs.push(current);
|
|
194
|
+
return txs;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=txPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txPlan.js","sourceRoot":"","sources":["../../src/api/txPlan.ts"],"names":[],"mappings":"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"}
|
package/dist/assets/assets.d.ts
CHANGED
|
@@ -4,6 +4,15 @@ import type { JpatchOp } from '../types.js';
|
|
|
4
4
|
import type { SyncReport } from '../ui/report.js';
|
|
5
5
|
export declare const ASSETS_DIR: string;
|
|
6
6
|
export declare const ASSET_MAP_FILE: string;
|
|
7
|
+
/** A filesystem-safe local name for an asset record (real records may carry
|
|
8
|
+
* display names like "placeholder: Onboarding hero — teamwork"). */
|
|
9
|
+
export declare function assetFileName(id: string, meta: {
|
|
10
|
+
name?: string;
|
|
11
|
+
file_name?: string;
|
|
12
|
+
extension?: string;
|
|
13
|
+
mime?: string;
|
|
14
|
+
type?: string;
|
|
15
|
+
}): string;
|
|
7
16
|
export interface AssetSyncResult {
|
|
8
17
|
pushOps: JpatchOp[];
|
|
9
18
|
mergedAssets: AssetIndex;
|
package/dist/assets/assets.js
CHANGED
|
@@ -21,19 +21,48 @@ const MIME_BY_EXT = {
|
|
|
21
21
|
'.json': 'application/json',
|
|
22
22
|
};
|
|
23
23
|
const EXT_BY_MIME = Object.fromEntries(Object.entries(MIME_BY_EXT).map(([ext, mime]) => [mime, ext]));
|
|
24
|
+
/** A filesystem-safe local name for an asset record (real records may carry
|
|
25
|
+
* display names like "placeholder: Onboarding hero — teamwork"). */
|
|
26
|
+
export function assetFileName(id, meta) {
|
|
27
|
+
const rawBase = meta.file_name || meta.name || id;
|
|
28
|
+
const base = rawBase
|
|
29
|
+
.replace(/[/\\:*?"<>|]/g, '-')
|
|
30
|
+
.replace(/\s+/g, ' ')
|
|
31
|
+
.trim()
|
|
32
|
+
.slice(0, 120);
|
|
33
|
+
const hasExt = /\.[A-Za-z0-9]{1,5}$/.test(base);
|
|
34
|
+
if (hasExt)
|
|
35
|
+
return base;
|
|
36
|
+
const ext = (meta.extension ? `.${meta.extension.replace(/^\./, '')}` : '') ||
|
|
37
|
+
(meta.mime ? (EXT_BY_MIME[meta.mime] ?? '') : '') ||
|
|
38
|
+
(meta.type === 'image' ? '.png' : '');
|
|
39
|
+
return `${base}${ext}`;
|
|
40
|
+
}
|
|
24
41
|
export async function syncAssets(root, client, remote, report) {
|
|
25
42
|
const dir = join(root, ASSETS_DIR);
|
|
26
43
|
const index = structuredClone(remote ?? {});
|
|
27
44
|
const pushOps = [];
|
|
28
45
|
const knownShas = new Set(Object.values(index).map((a) => a.sha256));
|
|
29
46
|
const namesInIndex = new Map(Object.entries(index).map(([id, a]) => [a.name ?? id, id]));
|
|
30
|
-
// 1. Pull: remote assets not on disk get downloaded.
|
|
47
|
+
// 1. Pull: remote assets not on disk get downloaded. Real records (dev
|
|
48
|
+
// backend) carry a server-relative `link`; the mock's carry sha256+mime
|
|
49
|
+
// served via canvas objects.
|
|
31
50
|
for (const [id, meta] of Object.entries(index)) {
|
|
32
|
-
const fileName =
|
|
51
|
+
const fileName = assetFileName(id, meta);
|
|
33
52
|
const filePath = join(dir, fileName);
|
|
34
53
|
if (existsSync(filePath))
|
|
35
54
|
continue;
|
|
36
|
-
|
|
55
|
+
let bytes;
|
|
56
|
+
if (typeof meta.link === 'string' && meta.link.length > 0) {
|
|
57
|
+
bytes = await client.getBytesAtPath(meta.link);
|
|
58
|
+
}
|
|
59
|
+
else if (meta.sha256) {
|
|
60
|
+
bytes = await client.getObjectBytes(`sha256:${meta.sha256}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
report.notes.push(`asset ${id} has neither link nor sha256 — skipped`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
37
66
|
mkdirSync(dir, { recursive: true });
|
|
38
67
|
writeFileSync(filePath, bytes);
|
|
39
68
|
report.files.push({ file: join(ASSETS_DIR, fileName), action: 'created' });
|
|
@@ -82,7 +111,7 @@ export function writeAssetMap(root, index, report) {
|
|
|
82
111
|
return;
|
|
83
112
|
const lines = Object.entries(index)
|
|
84
113
|
.sort(([a], [b]) => (a < b ? -1 : 1))
|
|
85
|
-
.map(([id, meta]) => ` '${id}': require('./assets/${meta
|
|
114
|
+
.map(([id, meta]) => ` '${id}': require('./assets/${assetFileName(id, meta)}'),`);
|
|
86
115
|
const content = [
|
|
87
116
|
'// GENERATED by Mapples — DO NOT EDIT. Regenerated on every `mapples sync`.',
|
|
88
117
|
'/* eslint-disable @typescript-eslint/no-require-imports */',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/assets/assets.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8EAA8E;AAC9E,gDAAgD;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAE7D,MAAM,WAAW,GAA2B;IAC1C,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF,MAAM,WAAW,GAA2B,MAAM,CAAC,WAAW,CAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/assets/assets.ts"],"names":[],"mappings":"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"}
|
package/dist/codegen/emit.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export
|
|
3
|
-
export declare function mappletName(pageName: string): string;
|
|
4
|
-
export interface EmitPageInput {
|
|
5
|
-
name: string;
|
|
6
|
-
root: RenderDomNode;
|
|
7
|
-
}
|
|
1
|
+
import { type EmitComponentInput, type EmitPageInput } from '@mapples/codegen';
|
|
2
|
+
export { COMPONENT_HEADER, GENERATED_HEADER, pageComponentName, readRouteMarker, ROUTE_MARKER, routeMarkerLine, withoutRouteMarker, withRouteMarker, type EmitComponentInput, type EmitPageInput, } from '@mapples/codegen';
|
|
8
3
|
export declare function emitPage(page: EmitPageInput, filePath?: string): Promise<string>;
|
|
4
|
+
/** A Creator component as a file: same shape as a page, no route. */
|
|
5
|
+
export declare function emitComponent(component: EmitComponentInput, filePath?: string): Promise<string>;
|
package/dist/codegen/emit.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
|
-
// RenderDom page -> complete
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
import {
|
|
1
|
+
// RenderDom page -> complete page file, Prettier-formatted with the target
|
|
2
|
+
// project's config. The generation itself lives in @mapples/codegen (pure),
|
|
3
|
+
// shared with the Creator's code editor; this module adds the formatting.
|
|
4
|
+
import { emitComponent as emitComponentText, emitPage as emitPageText, } from '@mapples/codegen';
|
|
5
5
|
import { formatTsx } from './format.js';
|
|
6
|
-
export
|
|
7
|
-
'// Two-way sync: `mapples sync` reconciles this file with Mapples Creator.';
|
|
8
|
-
export function mappletName(pageName) {
|
|
9
|
-
const pascal = pageName
|
|
10
|
-
.split(/[^A-Za-z0-9]+/)
|
|
11
|
-
.filter(Boolean)
|
|
12
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
13
|
-
.join('');
|
|
14
|
-
return `${pascal || 'Page'}Mapplet`;
|
|
15
|
-
}
|
|
6
|
+
export { COMPONENT_HEADER, GENERATED_HEADER, pageComponentName, readRouteMarker, ROUTE_MARKER, routeMarkerLine, withoutRouteMarker, withRouteMarker, } from '@mapples/codegen';
|
|
16
7
|
export async function emitPage(page, filePath) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
printImports(imports),
|
|
23
|
-
'',
|
|
24
|
-
`export default function ${mappletName(page.name)}() {`,
|
|
25
|
-
' return (',
|
|
26
|
-
jsx,
|
|
27
|
-
' );',
|
|
28
|
-
'}',
|
|
29
|
-
'',
|
|
30
|
-
].join('\n');
|
|
31
|
-
return formatTsx(code, filePath);
|
|
8
|
+
return formatTsx(emitPageText(page), filePath);
|
|
9
|
+
}
|
|
10
|
+
/** A Creator component as a file: same shape as a page, no route. */
|
|
11
|
+
export async function emitComponent(component, filePath) {
|
|
12
|
+
return formatTsx(emitComponentText(component), filePath);
|
|
32
13
|
}
|
|
33
14
|
//# sourceMappingURL=emit.js.map
|
package/dist/codegen/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/codegen/emit.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/codegen/emit.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAE1E,OAAO,EACL,aAAa,IAAI,iBAAiB,EAClC,QAAQ,IAAI,YAAY,GAGzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAmB,EAAE,QAAiB;IACnE,OAAO,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAA6B,EAC7B,QAAiB;IAEjB,OAAO,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export declare const UI_MODULE = "@mapples/ui";
|
|
10
|
-
export declare function parseImportRef(ref: string): {
|
|
11
|
-
module: string;
|
|
12
|
-
exportName: string;
|
|
13
|
-
};
|
|
14
|
-
export declare function collectImports(root: RenderDomNode): ResolvedImports;
|
|
15
|
-
export declare function printImports(resolved: ResolvedImports): string;
|
|
1
|
+
import { type ImportNeed } from '@mapples/sid-ast';
|
|
2
|
+
export { collectImports, importNeedsFor, parseImportRef, printImports, UI_MODULE, type ResolvedImports, } from '@mapples/codegen';
|
|
3
|
+
/**
|
|
4
|
+
* The needs a file still has a use for: those whose name one of its `$sid`
|
|
5
|
+
* elements carries. A tree the file no longer matches (the base, after the
|
|
6
|
+
* developer deleted an element) would otherwise bring the import back.
|
|
7
|
+
*/
|
|
8
|
+
export declare function importNeedsUsedIn(source: string, needs: ImportNeed[]): ImportNeed[];
|
package/dist/codegen/imports.js
CHANGED
|
@@ -1,79 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
1
|
+
// The import block of a generated file — lives in @mapples/codegen (pure).
|
|
2
|
+
import { extract } from '@mapples/sid-ast';
|
|
3
|
+
export { collectImports, importNeedsFor, parseImportRef, printImports, UI_MODULE, } from '@mapples/codegen';
|
|
4
|
+
/**
|
|
5
|
+
* The needs a file still has a use for: those whose name one of its `$sid`
|
|
6
|
+
* elements carries. A tree the file no longer matches (the base, after the
|
|
7
|
+
* developer deleted an element) would otherwise bring the import back.
|
|
8
|
+
*/
|
|
9
|
+
export function importNeedsUsedIn(source, needs) {
|
|
10
|
+
const used = new Set();
|
|
11
11
|
const walk = (node) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const importRef = node.props.importRef;
|
|
15
|
-
if (typeof name !== 'string' || typeof importRef !== 'string') {
|
|
16
|
-
throw new Error(`Custom node ${node.sid} is missing name/importRef`);
|
|
17
|
-
}
|
|
18
|
-
const origin = parseImportRef(importRef);
|
|
19
|
-
if (origin.module === '') {
|
|
20
|
-
throw new Error(`Custom node ${node.sid} (${name}) has a local importRef (${importRef}); cannot emit an import for it`);
|
|
21
|
-
}
|
|
22
|
-
const existing = customs.get(name);
|
|
23
|
-
if (existing &&
|
|
24
|
-
(existing.module !== origin.module || existing.exportName !== origin.exportName)) {
|
|
25
|
-
throw new Error(`Custom name collision: ${name} maps to both ${existing.module} and ${origin.module}`);
|
|
26
|
-
}
|
|
27
|
-
customs.set(name, origin);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
uiNames.add(node.type);
|
|
31
|
-
}
|
|
12
|
+
// An element whose import is missing reads as a Custom named after its tag.
|
|
13
|
+
used.add(node.type === 'Custom' ? String(node.props.name) : node.type);
|
|
32
14
|
for (const child of node.children)
|
|
33
15
|
walk(child);
|
|
34
16
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
for (const [local, origin] of resolved.customs) {
|
|
50
|
-
let entry = byModule.get(origin.module);
|
|
51
|
-
if (!entry) {
|
|
52
|
-
entry = { defaults: [], named: [] };
|
|
53
|
-
byModule.set(origin.module, entry);
|
|
54
|
-
}
|
|
55
|
-
if (origin.exportName === 'default')
|
|
56
|
-
entry.defaults.push(local);
|
|
57
|
-
else
|
|
58
|
-
entry.named.push([origin.exportName, local]);
|
|
59
|
-
}
|
|
60
|
-
for (const module of [...byModule.keys()].sort()) {
|
|
61
|
-
const entry = byModule.get(module);
|
|
62
|
-
const pieces = [];
|
|
63
|
-
if (entry.defaults.length > 1) {
|
|
64
|
-
throw new Error(`two default imports from ${module}: ${entry.defaults.join(', ')}`);
|
|
65
|
-
}
|
|
66
|
-
if (entry.defaults.length === 1)
|
|
67
|
-
pieces.push(entry.defaults[0]);
|
|
68
|
-
if (entry.named.length > 0) {
|
|
69
|
-
const named = entry.named
|
|
70
|
-
.sort(([a], [b]) => (a < b ? -1 : 1))
|
|
71
|
-
.map(([exp, local]) => (exp === local ? exp : `${exp} as ${local}`))
|
|
72
|
-
.join(', ');
|
|
73
|
-
pieces.push(`{ ${named} }`);
|
|
74
|
-
}
|
|
75
|
-
lines.push(`import ${pieces.join(', ')} from '${module}';`);
|
|
17
|
+
const { dom } = extract(source);
|
|
18
|
+
if (dom)
|
|
19
|
+
walk(dom);
|
|
20
|
+
const kept = [];
|
|
21
|
+
for (const need of needs) {
|
|
22
|
+
const named = (need.named ?? []).filter((name) => used.has(name));
|
|
23
|
+
const defaultName = need.defaultName !== undefined && used.has(need.defaultName) ? need.defaultName : undefined;
|
|
24
|
+
if (named.length === 0 && defaultName === undefined)
|
|
25
|
+
continue;
|
|
26
|
+
kept.push({
|
|
27
|
+
module: need.module,
|
|
28
|
+
...(named.length > 0 ? { named } : {}),
|
|
29
|
+
...(defaultName !== undefined ? { defaultName } : {}),
|
|
30
|
+
});
|
|
76
31
|
}
|
|
77
|
-
return
|
|
32
|
+
return kept;
|
|
78
33
|
}
|
|
79
34
|
//# sourceMappingURL=imports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/codegen/imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/codegen/imports.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAAE,OAAO,EAAuC,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,SAAS,GAEV,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,KAAmB;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAQ,EAAE;QACzC,4EAA4E;QAC5E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,SAAS;YAAE,SAAS;QAC9D,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type InstanceLinker } from '@mapples/codegen';
|
|
2
|
+
import type { ComponentEntity } from '../api/objects.js';
|
|
3
|
+
import type { ComponentsMap } from '../project/componentsMap.js';
|
|
4
|
+
export type { InstanceLinker } from '@mapples/codegen';
|
|
5
|
+
export declare function instanceLinker(componentsMap: ComponentsMap, components: Map<string, ComponentEntity>): InstanceLinker;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Linked component instances (file language <-> canvas language) — the
|
|
2
|
+
// conversion lives in @mapples/codegen; this binds it to the CLI's
|
|
3
|
+
// components map and to `node:path`, so OS-native paths in the map resolve
|
|
4
|
+
// the way they always did.
|
|
5
|
+
import { dirname, posix, relative, sep } from 'node:path';
|
|
6
|
+
import { instanceLinker as linker, } from '@mapples/codegen';
|
|
7
|
+
const toPosix = (p) => p.split(sep).join(posix.sep);
|
|
8
|
+
/** `node:path`-backed resolver over the project's OS paths. */
|
|
9
|
+
const nodeResolver = {
|
|
10
|
+
fileFor(fromFile, module) {
|
|
11
|
+
if (!module.startsWith('.'))
|
|
12
|
+
return null;
|
|
13
|
+
const resolved = posix.normalize(posix.join(toPosix(dirname(fromFile)), module));
|
|
14
|
+
return resolved.endsWith('.tsx') ? resolved : `${resolved}.tsx`;
|
|
15
|
+
},
|
|
16
|
+
moduleFor(fromFile, targetFile) {
|
|
17
|
+
let rel = toPosix(relative(dirname(fromFile), targetFile)).replace(/\.tsx$/, '');
|
|
18
|
+
if (!rel.startsWith('.'))
|
|
19
|
+
rel = `./${rel}`;
|
|
20
|
+
return rel;
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export function instanceLinker(componentsMap, components) {
|
|
24
|
+
const posixMap = {};
|
|
25
|
+
for (const [id, mapping] of Object.entries(componentsMap)) {
|
|
26
|
+
posixMap[id] = { file: toPosix(mapping.file), name: mapping.name };
|
|
27
|
+
}
|
|
28
|
+
return linker(posixMap, components, nodeResolver);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/codegen/instances.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,mEAAmE;AACnE,2EAA2E;AAC3E,2BAA2B;AAE3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EACL,cAAc,IAAI,MAAM,GAGzB,MAAM,kBAAkB,CAAC;AAO1B,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEpE,+DAA+D;AAC/D,MAAM,YAAY,GAAmB;IACnC,OAAO,CAAC,QAAQ,EAAE,MAAM;QACtB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,CAAC;IAClE,CAAC;IACD,SAAS,CAAC,QAAQ,EAAE,UAAU;QAC5B,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,aAA4B,EAC5B,UAAwC;IAExC,MAAM,QAAQ,GAAmD,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { hoistStyles, STYLE_MODULE, type HoistedStyles } from '@mapples/codegen';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/codegen/styles.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAsB,MAAM,kBAAkB,CAAC"}
|