@edgedev/template-engine 0.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/README.md +332 -0
- package/dist/hydrateValues.d.ts +11 -0
- package/dist/hydrateValues.d.ts.map +1 -0
- package/dist/hydrateValues.js +568 -0
- package/dist/hydrateValues.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +351 -0
- package/dist/index.js.map +1 -0
- package/dist/kvIndexClient.d.ts +49 -0
- package/dist/kvIndexClient.d.ts.map +1 -0
- package/dist/kvIndexClient.js +256 -0
- package/dist/kvIndexClient.js.map +1 -0
- package/dist/templateConfig.d.ts +3 -0
- package/dist/templateConfig.d.ts.map +1 -0
- package/dist/templateConfig.js +23 -0
- package/dist/templateConfig.js.map +1 -0
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/unoSsr.d.ts +21 -0
- package/dist/unoSsr.d.ts.map +1 -0
- package/dist/unoSsr.js +198 -0
- package/dist/unoSsr.js.map +1 -0
- package/package.json +34 -0
- package/src/hydrateValues.ts +753 -0
- package/src/index.ts +487 -0
- package/src/kvIndexClient.ts +374 -0
- package/src/templateConfig.ts +25 -0
- package/src/types.ts +54 -0
- package/src/unoSsr.ts +232 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
const joinSegments = (segments) => {
|
|
2
|
+
return segments
|
|
3
|
+
.filter(segment => typeof segment === 'string' && segment.length > 0)
|
|
4
|
+
.map(segment => segment.replace(/:+$/g, ''))
|
|
5
|
+
.join(':');
|
|
6
|
+
};
|
|
7
|
+
const buildPrefix = (params, searchValue) => {
|
|
8
|
+
const baseKey = typeof params.baseKey === 'string' ? params.baseKey.trim() : '';
|
|
9
|
+
const uniqueKey = typeof params.uniqueKey === 'string' ? params.uniqueKey.trim() : '';
|
|
10
|
+
const rawSearchKey = typeof params.searchKey === 'string' ? params.searchKey.trim() : '';
|
|
11
|
+
if (!baseKey)
|
|
12
|
+
return '';
|
|
13
|
+
const hasSearchKey = rawSearchKey.length > 0;
|
|
14
|
+
const hasSearchValue = typeof searchValue === 'string' && searchValue.length > 0;
|
|
15
|
+
if (hasSearchKey)
|
|
16
|
+
return joinSegments(['idx', baseKey, rawSearchKey, uniqueKey, searchValue]);
|
|
17
|
+
if (hasSearchValue)
|
|
18
|
+
return joinSegments([baseKey, uniqueKey, searchValue]);
|
|
19
|
+
if (uniqueKey)
|
|
20
|
+
return joinSegments([baseKey, uniqueKey]);
|
|
21
|
+
return baseKey;
|
|
22
|
+
};
|
|
23
|
+
const apiEndpoint = (accountId, namespaceId) => {
|
|
24
|
+
return `https://api.cloudflare.com/client/v4/accounts/${accountId}/storage/kv/namespaces/${namespaceId}`;
|
|
25
|
+
};
|
|
26
|
+
const encodeKey = (key) => {
|
|
27
|
+
return key.split('/').map(encodeURIComponent).join('/');
|
|
28
|
+
};
|
|
29
|
+
const readJson = (input) => {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(input);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const createKvIndexClient = (options) => {
|
|
38
|
+
const { binding, accountId, namespaceId, apiToken, fetch: fetchImpl = globalThis.fetch, maxKeys = 1000, } = options;
|
|
39
|
+
if (!fetchImpl)
|
|
40
|
+
throw new Error('No fetch implementation available. Pass one in options.fetch.');
|
|
41
|
+
const warn = (...args) => {
|
|
42
|
+
console.warn('[kvIndexClient]', ...args);
|
|
43
|
+
};
|
|
44
|
+
const listFromBinding = async (prefix) => {
|
|
45
|
+
if (!binding)
|
|
46
|
+
return [];
|
|
47
|
+
warn('listing via KV binding', { prefix });
|
|
48
|
+
const entries = [];
|
|
49
|
+
let cursor;
|
|
50
|
+
do {
|
|
51
|
+
const listResult = await binding.list({ prefix, limit: maxKeys, cursor });
|
|
52
|
+
for (const entry of listResult.keys ?? []) {
|
|
53
|
+
entries.push({
|
|
54
|
+
key: entry.name,
|
|
55
|
+
metadata: entry.metadata,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
cursor = listResult.cursor ?? undefined;
|
|
59
|
+
} while (cursor);
|
|
60
|
+
return entries;
|
|
61
|
+
};
|
|
62
|
+
const listFromApi = async (prefix) => {
|
|
63
|
+
const entries = [];
|
|
64
|
+
let cursor;
|
|
65
|
+
do {
|
|
66
|
+
const search = new URLSearchParams();
|
|
67
|
+
search.set('prefix', prefix);
|
|
68
|
+
search.set('limit', String(maxKeys));
|
|
69
|
+
search.set('include', 'metadata');
|
|
70
|
+
if (cursor)
|
|
71
|
+
search.set('cursor', cursor);
|
|
72
|
+
const url = `${apiEndpoint(accountId, namespaceId)}/keys?${search.toString()}`;
|
|
73
|
+
warn('listing via KV API', { prefix, cursor });
|
|
74
|
+
const response = await fetchImpl(url, {
|
|
75
|
+
headers: {
|
|
76
|
+
Authorization: `Bearer ${apiToken}`,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok)
|
|
80
|
+
throw new Error(`Cloudflare KV API (list) failed with status ${response.status}`);
|
|
81
|
+
const data = await response.json();
|
|
82
|
+
for (const entry of data.result ?? [])
|
|
83
|
+
entries.push({ key: entry.name, metadata: entry.metadata });
|
|
84
|
+
cursor = data.result_info?.cursor;
|
|
85
|
+
} while (cursor);
|
|
86
|
+
return entries;
|
|
87
|
+
};
|
|
88
|
+
const getValueFromBinding = async (key) => {
|
|
89
|
+
if (!binding)
|
|
90
|
+
return null;
|
|
91
|
+
warn('getting value via KV binding', { key });
|
|
92
|
+
return await binding.get(key);
|
|
93
|
+
};
|
|
94
|
+
const getValueFromApi = async (key) => {
|
|
95
|
+
const url = `${apiEndpoint(accountId, namespaceId)}/values/${encodeKey(key)}`;
|
|
96
|
+
warn('getting value via KV API', { key });
|
|
97
|
+
const response = await fetchImpl(url, {
|
|
98
|
+
headers: {
|
|
99
|
+
Authorization: `Bearer ${apiToken}`,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
if (response.status === 404)
|
|
103
|
+
return null;
|
|
104
|
+
if (!response.ok)
|
|
105
|
+
throw new Error(`Cloudflare KV API (get) failed with status ${response.status}`);
|
|
106
|
+
return await response.text();
|
|
107
|
+
};
|
|
108
|
+
const getValue = async (key) => {
|
|
109
|
+
const local = await getValueFromBinding(key);
|
|
110
|
+
if (local !== null)
|
|
111
|
+
return local;
|
|
112
|
+
return await getValueFromApi(key);
|
|
113
|
+
};
|
|
114
|
+
const findIndexEntries = async (prefix) => {
|
|
115
|
+
let entries = await listFromBinding(prefix);
|
|
116
|
+
if (entries.length === 0)
|
|
117
|
+
entries = await listFromApi(prefix);
|
|
118
|
+
return entries;
|
|
119
|
+
};
|
|
120
|
+
const slug = (s) => {
|
|
121
|
+
return String(s || '')
|
|
122
|
+
.trim()
|
|
123
|
+
.toLowerCase()
|
|
124
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
125
|
+
.replace(/^-+|-+$/g, '')
|
|
126
|
+
.slice(0, 80);
|
|
127
|
+
};
|
|
128
|
+
const normalizeSearchValues = (input) => {
|
|
129
|
+
if (Array.isArray(input)) {
|
|
130
|
+
if (input.length > 0) {
|
|
131
|
+
return input.map((s) => {
|
|
132
|
+
return slug(s);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
return [undefined];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return [input ? slug(input) : input];
|
|
140
|
+
};
|
|
141
|
+
const dedupeEntries = (entries) => {
|
|
142
|
+
const map = new Map();
|
|
143
|
+
for (const entry of entries) {
|
|
144
|
+
const existing = map.get(entry.key);
|
|
145
|
+
if (!existing) {
|
|
146
|
+
map.set(entry.key, entry);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (entry.metadata && existing.metadata == null)
|
|
150
|
+
map.set(entry.key, entry);
|
|
151
|
+
}
|
|
152
|
+
return Array.from(map.values());
|
|
153
|
+
};
|
|
154
|
+
const dedupeRecordsByCanonical = (records) => {
|
|
155
|
+
const seen = new Set();
|
|
156
|
+
const result = [];
|
|
157
|
+
for (const record of records) {
|
|
158
|
+
const canonical = record['canonical'];
|
|
159
|
+
if (typeof canonical === 'string') {
|
|
160
|
+
if (seen.has(canonical))
|
|
161
|
+
continue;
|
|
162
|
+
seen.add(canonical);
|
|
163
|
+
}
|
|
164
|
+
result.push(record);
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
};
|
|
168
|
+
const toRecord = (value) => {
|
|
169
|
+
const parsed = readJson(value);
|
|
170
|
+
if (parsed && typeof parsed === 'object')
|
|
171
|
+
return parsed;
|
|
172
|
+
return { raw: value };
|
|
173
|
+
};
|
|
174
|
+
const fetchCanonicalRecord = async (canonicalKey) => {
|
|
175
|
+
warn('fetching canonical value', { canonicalKey });
|
|
176
|
+
const canonicalRaw = await getValue(canonicalKey);
|
|
177
|
+
if (canonicalRaw === null)
|
|
178
|
+
return { canonical: canonicalKey, missing: true };
|
|
179
|
+
const record = toRecord(canonicalRaw);
|
|
180
|
+
return { ...record, canonical: canonicalKey };
|
|
181
|
+
};
|
|
182
|
+
const toMetaRecord = (entry) => {
|
|
183
|
+
const meta = entry.metadata;
|
|
184
|
+
if (meta && typeof meta === 'object')
|
|
185
|
+
return meta;
|
|
186
|
+
if (typeof meta === 'string') {
|
|
187
|
+
const parsed = readJson(meta);
|
|
188
|
+
if (parsed && typeof parsed === 'object')
|
|
189
|
+
return parsed;
|
|
190
|
+
}
|
|
191
|
+
return { key: entry.key };
|
|
192
|
+
};
|
|
193
|
+
return {
|
|
194
|
+
async queryIndex(params) {
|
|
195
|
+
const hasSearchKey = typeof params.searchKey === 'string' && params.searchKey.trim().length > 0;
|
|
196
|
+
const isMultiSearch = Array.isArray(params.searchValue);
|
|
197
|
+
const normalizedSearchValues = hasSearchKey
|
|
198
|
+
? normalizeSearchValues(params.searchValue)
|
|
199
|
+
: [undefined];
|
|
200
|
+
const prefixes = normalizedSearchValues
|
|
201
|
+
.map(value => buildPrefix(params, value))
|
|
202
|
+
.filter(prefix => prefix.length > 0);
|
|
203
|
+
if (prefixes.length === 0)
|
|
204
|
+
return [];
|
|
205
|
+
const allEntries = [];
|
|
206
|
+
for (const prefix of prefixes) {
|
|
207
|
+
const matches = await findIndexEntries(prefix);
|
|
208
|
+
allEntries.push(...matches);
|
|
209
|
+
}
|
|
210
|
+
const indexEntries = dedupeEntries(allEntries);
|
|
211
|
+
if (indexEntries.length === 0)
|
|
212
|
+
return [];
|
|
213
|
+
if (!hasSearchKey) {
|
|
214
|
+
const records = await Promise.all(indexEntries.map(async (entry) => {
|
|
215
|
+
const value = await getValue(entry.key);
|
|
216
|
+
if (value !== null)
|
|
217
|
+
return toRecord(value);
|
|
218
|
+
return toMetaRecord(entry);
|
|
219
|
+
}));
|
|
220
|
+
return records;
|
|
221
|
+
}
|
|
222
|
+
let records;
|
|
223
|
+
if (indexEntries.length === 1) {
|
|
224
|
+
const [entry] = indexEntries;
|
|
225
|
+
const metaRecord = toMetaRecord(entry);
|
|
226
|
+
warn('single index hit metadata', { key: entry.key, metadata: entry.metadata });
|
|
227
|
+
if (typeof metaRecord.canonical === 'string') {
|
|
228
|
+
records = [await fetchCanonicalRecord(metaRecord.canonical)];
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
const value = await getValue(entry.key);
|
|
232
|
+
if (value !== null)
|
|
233
|
+
records = [toRecord(value)];
|
|
234
|
+
else
|
|
235
|
+
records = [metaRecord];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
records = indexEntries.map((entry) => {
|
|
240
|
+
// warn('multiple index hit metadata', { key: entry.key, metadata: entry.metadata })
|
|
241
|
+
return toMetaRecord(entry);
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
if (!isMultiSearch)
|
|
245
|
+
return records;
|
|
246
|
+
return dedupeRecordsByCanonical(records);
|
|
247
|
+
},
|
|
248
|
+
async getKey(key) {
|
|
249
|
+
const value = await getValue(key);
|
|
250
|
+
if (value === null)
|
|
251
|
+
return null;
|
|
252
|
+
return toRecord(value);
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
//# sourceMappingURL=kvIndexClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kvIndexClient.js","sourceRoot":"","sources":["../src/kvIndexClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateConfig.d.ts","sourceRoot":"","sources":["../src/templateConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,QAAgF,CAAA;AAE3G,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAsBpE,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const ARRAY_BLOCK_RE = /\{\{\{\s*#array\s*({[\s\S]*?})\s*\}\}\}([\s\S]*?)\{\{\{\s*\/array\s*\}\}\}/g;
|
|
2
|
+
export const parseConfig = (raw) => {
|
|
3
|
+
if (typeof raw !== 'string')
|
|
4
|
+
return null;
|
|
5
|
+
const trimmed = raw.trim();
|
|
6
|
+
if (/^\{\s*#/.test(trimmed) || /^\{\s*\//.test(trimmed))
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(trimmed);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
let fixed = trimmed;
|
|
13
|
+
fixed = fixed.replace(/([,{]\s*)([A-Za-z_][A-Za-z0-9_-]*)(\s*:)/g, '$1"$2"$3');
|
|
14
|
+
fixed = fixed.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, '"$1"');
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(fixed);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=templateConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateConfig.js","sourceRoot":"","sources":["../src/templateConfig.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,6EAA6E,CAAA;AAE3G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAY,EAAkC,EAAE;IAC1E,IAAI,OAAO,GAAG,KAAK,QAAQ;QACzB,OAAO,IAAI,CAAA;IAEb,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QACrD,OAAO,IAAI,CAAA;IAEb,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IACD,MAAM,CAAC;QACL,IAAI,KAAK,GAAG,OAAO,CAAA;QACnB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,2CAA2C,EAAE,UAAU,CAAC,CAAA;QAC9E,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;QAC5D,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;QACD,MAAM,CAAC;YACL,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type SchemaValue = string;
|
|
2
|
+
export interface SchemaArrayEntry {
|
|
3
|
+
field: string;
|
|
4
|
+
type?: SchemaValue;
|
|
5
|
+
value?: SchemaValue;
|
|
6
|
+
}
|
|
7
|
+
export type SchemaMap = Record<string, SchemaValue> | SchemaArrayEntry[];
|
|
8
|
+
export interface QueryFilter {
|
|
9
|
+
field: string;
|
|
10
|
+
operator?: string;
|
|
11
|
+
value?: unknown;
|
|
12
|
+
values?: unknown[];
|
|
13
|
+
options?: unknown;
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface QueryOrder {
|
|
17
|
+
field: string;
|
|
18
|
+
direction?: 'asc' | 'desc';
|
|
19
|
+
}
|
|
20
|
+
export interface CollectionDefinition {
|
|
21
|
+
path?: string;
|
|
22
|
+
baseKey?: string;
|
|
23
|
+
query?: QueryFilter[];
|
|
24
|
+
order?: QueryOrder[];
|
|
25
|
+
}
|
|
26
|
+
export type QueryItemsInput = Record<string, unknown> | Array<Record<string, unknown>> | Array<[string, unknown]> | string | Array<string> | undefined;
|
|
27
|
+
export interface MetaEntry {
|
|
28
|
+
schema?: SchemaMap;
|
|
29
|
+
collection?: CollectionDefinition;
|
|
30
|
+
queryItems?: QueryItemsInput;
|
|
31
|
+
queryOptions?: QueryFilter[];
|
|
32
|
+
limit?: number;
|
|
33
|
+
api?: string;
|
|
34
|
+
apiField?: string;
|
|
35
|
+
apiQuery?: unknown;
|
|
36
|
+
value?: unknown;
|
|
37
|
+
}
|
|
38
|
+
export type TemplateMeta = Record<string, MetaEntry | undefined>;
|
|
39
|
+
export type TemplateValues = Record<string, unknown>;
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,gBAAgB,EAAE,CAAA;AAExE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9B,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxB,MAAM,GACN,KAAK,CAAC,MAAM,CAAC,GACb,SAAS,CAAA;AAEb,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,CAAA;AAEhE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/unoSsr.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type AnyObj = Record<string, any>;
|
|
2
|
+
type ThemeLike = AnyObj;
|
|
3
|
+
/**
|
|
4
|
+
* Normalize your theme shape to what Uno expects.
|
|
5
|
+
* Input:
|
|
6
|
+
* { extend: { colors: {...}, fontFamily: {...} }, ... }
|
|
7
|
+
* Output:
|
|
8
|
+
* { colors: {...}, fontFamily: {...} }
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeTheme(input: AnyObj): AnyObj;
|
|
11
|
+
export declare function buildCssVarsBlock(theme: AnyObj): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate minified CSS for provided HTML + theme.
|
|
14
|
+
* Returns { css, hash }.
|
|
15
|
+
*/
|
|
16
|
+
export declare function unoCssFromHtml(html: string, theme: ThemeLike): Promise<{
|
|
17
|
+
css: string;
|
|
18
|
+
hash: string;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=unoSsr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unoSsr.d.ts","sourceRoot":"","sources":["../src/unoSsr.ts"],"names":[],"mappings":"AAIA,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACjC,KAAK,SAAS,GAAG,MAAM,CAAA;AAgBvB;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AA6BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4CvD;AAyGD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;;;GAelE"}
|
package/dist/unoSsr.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// server/utils/uno-ssr.ts
|
|
2
|
+
import { hash as ohash } from 'ohash';
|
|
3
|
+
let cachedGenThemeKey = null;
|
|
4
|
+
let cachedGen = null;
|
|
5
|
+
function sha256(input) {
|
|
6
|
+
const out = ohash(input);
|
|
7
|
+
return out;
|
|
8
|
+
}
|
|
9
|
+
function themeKey(theme) {
|
|
10
|
+
const json = JSON.stringify(theme || {});
|
|
11
|
+
const key = sha256(json);
|
|
12
|
+
return key;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Normalize your theme shape to what Uno expects.
|
|
16
|
+
* Input:
|
|
17
|
+
* { extend: { colors: {...}, fontFamily: {...} }, ... }
|
|
18
|
+
* Output:
|
|
19
|
+
* { colors: {...}, fontFamily: {...} }
|
|
20
|
+
*/
|
|
21
|
+
export function normalizeTheme(input) {
|
|
22
|
+
const extend = (input && input.extend) || {};
|
|
23
|
+
const colors = extend.colors || {};
|
|
24
|
+
const fontFamily = extend.fontFamily || {};
|
|
25
|
+
const normalized = { colors, fontFamily };
|
|
26
|
+
return normalized;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pull dark variant colors if you provide them.
|
|
30
|
+
* Looks under:
|
|
31
|
+
* theme.variants.dark.extend.colors
|
|
32
|
+
* theme.variants.dark.colors
|
|
33
|
+
*/
|
|
34
|
+
function quoteIfNeeded(input) {
|
|
35
|
+
const s = String(input);
|
|
36
|
+
const needsQuotes = /[\s"']/.test(s);
|
|
37
|
+
if (needsQuotes) {
|
|
38
|
+
const escaped = s.replace(/"/g, '\\"');
|
|
39
|
+
const out = `"${escaped}"`;
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
return s;
|
|
43
|
+
}
|
|
44
|
+
function getDarkColors(input) {
|
|
45
|
+
const variants = (input && input.variants) || {};
|
|
46
|
+
const dark = variants.dark || {};
|
|
47
|
+
const darkExtend = dark.extend || {};
|
|
48
|
+
const colorsFromExtend = darkExtend.colors || null;
|
|
49
|
+
const colorsFromFlat = dark.colors || null;
|
|
50
|
+
const result = colorsFromExtend || colorsFromFlat || null;
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
export function buildCssVarsBlock(theme) {
|
|
54
|
+
const extend = (theme && theme.extend) || {};
|
|
55
|
+
const colors = extend.colors || {};
|
|
56
|
+
const fontFamily = extend.fontFamily || {};
|
|
57
|
+
const darkColors = getDarkColors(theme);
|
|
58
|
+
const colorVars = [];
|
|
59
|
+
const fontVars = [];
|
|
60
|
+
for (const [k, v] of Object.entries(colors)) {
|
|
61
|
+
const line = `--color-${k}:${String(v)};`;
|
|
62
|
+
colorVars.push(line);
|
|
63
|
+
}
|
|
64
|
+
for (const [k, v] of Object.entries(fontFamily)) {
|
|
65
|
+
const value = Array.isArray(v)
|
|
66
|
+
? v.map(quoteIfNeeded).join(',')
|
|
67
|
+
: quoteIfNeeded(String(v));
|
|
68
|
+
const line = `--font-${k}:${value};`;
|
|
69
|
+
fontVars.push(line);
|
|
70
|
+
}
|
|
71
|
+
const rootOpen = `:root{`;
|
|
72
|
+
const rootBody = `${colorVars.join('')}${fontVars.join('')}`;
|
|
73
|
+
const rootClose = `}`;
|
|
74
|
+
const rootBlock = `${rootOpen}${rootBody}${rootClose}`;
|
|
75
|
+
let darkBlock = '';
|
|
76
|
+
if (darkColors && typeof darkColors === 'object') {
|
|
77
|
+
const darkLines = [];
|
|
78
|
+
for (const [k, v] of Object.entries(darkColors)) {
|
|
79
|
+
const line = `--color-${k}:${String(v)};`;
|
|
80
|
+
darkLines.push(line);
|
|
81
|
+
}
|
|
82
|
+
if (darkLines.length > 0) {
|
|
83
|
+
const darkOpen = `:root[data-theme="dark"]{`;
|
|
84
|
+
const darkBody = darkLines.join('');
|
|
85
|
+
const darkClose = `}`;
|
|
86
|
+
darkBlock = `${darkOpen}${darkBody}${darkClose}`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const css = `${rootBlock}${darkBlock}`;
|
|
90
|
+
return css;
|
|
91
|
+
}
|
|
92
|
+
const brandFontRule = [
|
|
93
|
+
/^font-brand$/,
|
|
94
|
+
(_match, { theme }) => {
|
|
95
|
+
const fam = theme?.fontFamily?.brand;
|
|
96
|
+
if (!fam) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const list = Array.isArray(fam) ? fam : [fam];
|
|
100
|
+
const value = list
|
|
101
|
+
.map((s) => /[\s"']/.test(String(s)) ? `"${String(s).replace(/"/g, '\\"')}"` : String(s))
|
|
102
|
+
.join(',');
|
|
103
|
+
return { 'font-family': value };
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
// Optional: generic family rule with a safe prefix to avoid collisions with font-weight utilities.
|
|
107
|
+
// Usage in HTML: class="ff-brand" or "ff-sans"
|
|
108
|
+
const prefixedFamilyRule = [
|
|
109
|
+
/^ff-([a-zA-Z0-9_-]+)$/,
|
|
110
|
+
(match, { theme }) => {
|
|
111
|
+
const name = match[1];
|
|
112
|
+
const fam = theme?.fontFamily?.[name];
|
|
113
|
+
if (!fam) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const list = Array.isArray(fam) ? fam : [fam];
|
|
117
|
+
const value = list
|
|
118
|
+
.map((s) => /[\s"']/.test(String(s)) ? `"${String(s).replace(/"/g, '\\"')}"` : String(s))
|
|
119
|
+
.join(',');
|
|
120
|
+
return { 'font-family': value };
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
async function getUnoGenerator(theme) {
|
|
124
|
+
const key = themeKey(theme);
|
|
125
|
+
const canReuse = Boolean(cachedGen && cachedGenThemeKey === key);
|
|
126
|
+
if (canReuse) {
|
|
127
|
+
return cachedGen;
|
|
128
|
+
}
|
|
129
|
+
const unoTheme = normalizeTheme(theme);
|
|
130
|
+
const preflightVars = buildCssVarsBlock(theme);
|
|
131
|
+
const isCloudflare = process.env.NITRO_PRESET === 'cloudflare-pages' ||
|
|
132
|
+
process.env.NITRO_PRESET === 'cloudflare';
|
|
133
|
+
const unoCore = await import('@unocss/core');
|
|
134
|
+
const windPresetMod = await import('@unocss/preset-wind4');
|
|
135
|
+
let transformerDirectives = null;
|
|
136
|
+
let transformerVariantGroup = null;
|
|
137
|
+
try {
|
|
138
|
+
const mod = await import('@unocss/transformer-variant-group');
|
|
139
|
+
transformerVariantGroup = mod.default;
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
// eslint-disable-next-line no-console
|
|
143
|
+
console.warn('[uno-ssr] variant-group transformer unavailable in this runtime, continuing without it.', e);
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
// transformer-directives occasionally drags node-ish deps; make it optional in workers
|
|
147
|
+
if (!isCloudflare) {
|
|
148
|
+
const mod = await import('@unocss/transformer-directives');
|
|
149
|
+
transformerDirectives = mod.default;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
// eslint-disable-next-line no-console
|
|
154
|
+
console.warn('[uno-ssr] directives transformer unavailable, continuing without it.', e);
|
|
155
|
+
}
|
|
156
|
+
const { createGenerator } = unoCore;
|
|
157
|
+
const presetWind4 = windPresetMod.default;
|
|
158
|
+
const gen = createGenerator({
|
|
159
|
+
theme: unoTheme, // <-- put theme here
|
|
160
|
+
presets: [
|
|
161
|
+
presetWind4(), // <-- no theme option here
|
|
162
|
+
],
|
|
163
|
+
transformers: [
|
|
164
|
+
...(transformerVariantGroup ? [transformerVariantGroup()] : []),
|
|
165
|
+
...(transformerDirectives ? [transformerDirectives()] : []),
|
|
166
|
+
],
|
|
167
|
+
rules: [
|
|
168
|
+
brandFontRule,
|
|
169
|
+
prefixedFamilyRule,
|
|
170
|
+
],
|
|
171
|
+
preflights: [
|
|
172
|
+
{ getCSS: () => preflightVars }, // your CSS vars block (optional)
|
|
173
|
+
],
|
|
174
|
+
safelist: [
|
|
175
|
+
'font-[var(--font-brand)]',
|
|
176
|
+
],
|
|
177
|
+
});
|
|
178
|
+
cachedGen = gen;
|
|
179
|
+
cachedGenThemeKey = key;
|
|
180
|
+
return gen;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Generate minified CSS for provided HTML + theme.
|
|
184
|
+
* Returns { css, hash }.
|
|
185
|
+
*/
|
|
186
|
+
export async function unoCssFromHtml(html, theme) {
|
|
187
|
+
const safeHtml = String(html || '');
|
|
188
|
+
const safeTheme = theme || {};
|
|
189
|
+
const gen = await getUnoGenerator(safeTheme);
|
|
190
|
+
const result = await gen.generate(safeHtml, {
|
|
191
|
+
preflights: true,
|
|
192
|
+
minify: true,
|
|
193
|
+
});
|
|
194
|
+
const css = result.css;
|
|
195
|
+
const hash = sha256(css).slice(0, 16);
|
|
196
|
+
return { css, hash };
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=unoSsr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unoSsr.js","sourceRoot":"","sources":["../src/unoSsr.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@edgedev/template-engine",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Lightweight template renderer for Edge CMS content.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc -p tsconfig.json",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"prepare": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"edge",
|
|
18
|
+
"template",
|
|
19
|
+
"renderer",
|
|
20
|
+
"vue"
|
|
21
|
+
],
|
|
22
|
+
"author": "Seth Fischer",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@unocss/core": "^66.5.4",
|
|
26
|
+
"@unocss/preset-wind4": "^66.5.4",
|
|
27
|
+
"@unocss/transformer-directives": "^66.5.4",
|
|
28
|
+
"@unocss/transformer-variant-group": "^66.5.4",
|
|
29
|
+
"ohash": "^2.0.11"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"typescript": "^5.4.5"
|
|
33
|
+
}
|
|
34
|
+
}
|