@sudajs/theme-engine 0.2.1 → 1.1.0
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/agent.d.ts +288 -20
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +73 -9
- package/dist/agent.js.map +1 -1
- package/dist/assets.d.ts +21 -0
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +16 -0
- package/dist/assets.js.map +1 -1
- package/dist/check.d.ts +54 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +120 -0
- package/dist/check.js.map +1 -0
- package/dist/components/base-blocks.d.ts.map +1 -1
- package/dist/components/base-blocks.js +90 -6
- package/dist/components/base-blocks.js.map +1 -1
- package/dist/components/containers.d.ts.map +1 -1
- package/dist/components/containers.js +51 -2
- package/dist/components/containers.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/registry/filesystem.d.ts +20 -5
- package/dist/registry/filesystem.d.ts.map +1 -1
- package/dist/registry/filesystem.js +36 -25
- package/dist/registry/filesystem.js.map +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +38 -18
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/ai/slots.d.ts +0 -33
- package/dist/ai/slots.d.ts.map +0 -1
- package/dist/ai/slots.js +0 -139
- package/dist/ai/slots.js.map +0 -1
package/dist/ai/slots.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
function getContent(data) {
|
|
2
|
-
const content = data.content;
|
|
3
|
-
if (!Array.isArray(content)) {
|
|
4
|
-
return [];
|
|
5
|
-
}
|
|
6
|
-
return content.filter((item) => typeof item === "object" &&
|
|
7
|
-
item !== null &&
|
|
8
|
-
typeof item.type === "string" &&
|
|
9
|
-
typeof item.props === "object" &&
|
|
10
|
-
item.props !== null);
|
|
11
|
-
}
|
|
12
|
-
/** Splits a dot/bracket path into segments: `blocks[0].heading` -> ["blocks","0","heading"]. */
|
|
13
|
-
function parsePath(path) {
|
|
14
|
-
return path
|
|
15
|
-
.replace(/\[(\w+)\]/g, ".$1")
|
|
16
|
-
.split(".")
|
|
17
|
-
.filter((segment) => segment.length > 0);
|
|
18
|
-
}
|
|
19
|
-
function getAtPath(root, path) {
|
|
20
|
-
let current = root;
|
|
21
|
-
for (const segment of parsePath(path)) {
|
|
22
|
-
if (current === null || current === undefined) {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
if (Array.isArray(current)) {
|
|
26
|
-
const index = Number(segment);
|
|
27
|
-
if (!Number.isInteger(index)) {
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
current = current[index];
|
|
31
|
-
}
|
|
32
|
-
else if (typeof current === "object") {
|
|
33
|
-
current = current[segment];
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return current;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Immutably sets `value` at `path` within `root`, creating intermediate
|
|
43
|
-
* objects/arrays as needed. Returns a shallow-cloned copy; the original is not
|
|
44
|
-
* mutated.
|
|
45
|
-
*/
|
|
46
|
-
function setAtPath(root, path, value) {
|
|
47
|
-
const segments = parsePath(path);
|
|
48
|
-
if (segments.length === 0) {
|
|
49
|
-
return root;
|
|
50
|
-
}
|
|
51
|
-
const clone = (node, nextSegment) => {
|
|
52
|
-
if (Array.isArray(node)) {
|
|
53
|
-
return [...node];
|
|
54
|
-
}
|
|
55
|
-
if (node && typeof node === "object") {
|
|
56
|
-
return { ...node };
|
|
57
|
-
}
|
|
58
|
-
// Decide container shape from the next key.
|
|
59
|
-
return Number.isInteger(Number(nextSegment)) ? [] : {};
|
|
60
|
-
};
|
|
61
|
-
const result = clone(root, segments[0]);
|
|
62
|
-
let cursor = result;
|
|
63
|
-
for (let i = 0; i < segments.length - 1; i += 1) {
|
|
64
|
-
const segment = segments[i];
|
|
65
|
-
const nextSegment = segments[i + 1];
|
|
66
|
-
const key = Array.isArray(cursor) ? Number(segment) : segment;
|
|
67
|
-
const existing = cursor[key];
|
|
68
|
-
const child = clone(existing, nextSegment);
|
|
69
|
-
cursor[key] = child;
|
|
70
|
-
cursor = child;
|
|
71
|
-
}
|
|
72
|
-
const lastSegment = segments[segments.length - 1];
|
|
73
|
-
const lastKey = Array.isArray(cursor) ? Number(lastSegment) : lastSegment;
|
|
74
|
-
cursor[lastKey] = value;
|
|
75
|
-
return result;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Walks a page document and returns every AI-editable slot declared by the
|
|
79
|
-
* theme's `aiSlots` map (keyed by component type).
|
|
80
|
-
*/
|
|
81
|
-
export function extractAiSlots(data, aiSlots) {
|
|
82
|
-
if (!aiSlots) {
|
|
83
|
-
return [];
|
|
84
|
-
}
|
|
85
|
-
const slots = [];
|
|
86
|
-
for (const item of getContent(data)) {
|
|
87
|
-
const descriptors = aiSlots[item.type];
|
|
88
|
-
if (!descriptors) {
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
const componentId = typeof item.props.id === "string" ? item.props.id : "";
|
|
92
|
-
for (const descriptor of descriptors) {
|
|
93
|
-
slots.push({
|
|
94
|
-
componentId,
|
|
95
|
-
type: item.type,
|
|
96
|
-
descriptor,
|
|
97
|
-
value: getAtPath(item.props, descriptor.path),
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return slots;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Applies a batch of AI edits to a page document, scoped strictly to the
|
|
105
|
-
* declared `aiSlots` for each component type. Edits targeting unknown
|
|
106
|
-
* components or paths outside the allow-list are ignored. Returns a new
|
|
107
|
-
* document; the input is not mutated.
|
|
108
|
-
*/
|
|
109
|
-
export function applyAiValues(data, aiSlots, edits) {
|
|
110
|
-
if (!aiSlots || edits.length === 0) {
|
|
111
|
-
return data;
|
|
112
|
-
}
|
|
113
|
-
const editsByComponent = new Map();
|
|
114
|
-
for (const edit of edits) {
|
|
115
|
-
const list = editsByComponent.get(edit.componentId) ?? [];
|
|
116
|
-
list.push(edit);
|
|
117
|
-
editsByComponent.set(edit.componentId, list);
|
|
118
|
-
}
|
|
119
|
-
const content = getContent(data);
|
|
120
|
-
const nextContent = content.map((item) => {
|
|
121
|
-
const componentId = typeof item.props.id === "string" ? item.props.id : "";
|
|
122
|
-
const componentEdits = editsByComponent.get(componentId);
|
|
123
|
-
const descriptors = aiSlots[item.type];
|
|
124
|
-
if (!componentEdits || !descriptors) {
|
|
125
|
-
return item;
|
|
126
|
-
}
|
|
127
|
-
const allowedPaths = new Set(descriptors.map((d) => d.path));
|
|
128
|
-
let props = item.props;
|
|
129
|
-
for (const edit of componentEdits) {
|
|
130
|
-
if (!allowedPaths.has(edit.path)) {
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
props = setAtPath(props, edit.path, edit.value);
|
|
134
|
-
}
|
|
135
|
-
return props === item.props ? item : { ...item, props };
|
|
136
|
-
});
|
|
137
|
-
return { ...data, content: nextContent };
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=slots.js.map
|
package/dist/ai/slots.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/ai/slots.ts"],"names":[],"mappings":"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"}
|