@adonis-agora/agent 0.74.1 → 0.75.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/src/channels/handler.d.ts.map +1 -1
  3. package/dist/src/channels/handler.js +10 -0
  4. package/dist/src/channels/handler.js.map +1 -1
  5. package/dist/src/channels/texts.d.ts +2 -0
  6. package/dist/src/channels/texts.d.ts.map +1 -1
  7. package/dist/src/channels/texts.js.map +1 -1
  8. package/dist/src/genui/catalog.d.ts.map +1 -1
  9. package/dist/src/genui/catalog.js +3 -1
  10. package/dist/src/genui/catalog.js.map +1 -1
  11. package/dist/src/genui/channels.d.ts +32 -5
  12. package/dist/src/genui/channels.d.ts.map +1 -1
  13. package/dist/src/genui/channels.js +20 -9
  14. package/dist/src/genui/channels.js.map +1 -1
  15. package/dist/src/genui/index.d.ts.map +1 -1
  16. package/dist/src/genui/index.js +7 -7
  17. package/dist/src/genui/index.js.map +1 -1
  18. package/dist/src/genui/kit/bundle.d.ts +12 -0
  19. package/dist/src/genui/kit/bundle.d.ts.map +1 -1
  20. package/dist/src/genui/kit/bundle.js +124 -133
  21. package/dist/src/genui/kit/bundle.js.map +1 -1
  22. package/dist/src/genui/kit/discover.d.ts +8 -5
  23. package/dist/src/genui/kit/discover.d.ts.map +1 -1
  24. package/dist/src/genui/kit/discover.js +45 -18
  25. package/dist/src/genui/kit/discover.js.map +1 -1
  26. package/dist/src/genui/kit/docs.d.ts +3 -1
  27. package/dist/src/genui/kit/docs.d.ts.map +1 -1
  28. package/dist/src/genui/kit/docs.js +22 -5
  29. package/dist/src/genui/kit/docs.js.map +1 -1
  30. package/dist/src/genui/kit/files.d.ts +22 -10
  31. package/dist/src/genui/kit/files.d.ts.map +1 -1
  32. package/dist/src/genui/kit/files.js +117 -19
  33. package/dist/src/genui/kit/files.js.map +1 -1
  34. package/dist/src/genui/kit/index.d.ts +5 -3
  35. package/dist/src/genui/kit/index.d.ts.map +1 -1
  36. package/dist/src/genui/kit/index.js +4 -2
  37. package/dist/src/genui/kit/index.js.map +1 -1
  38. package/dist/src/genui/kit/plugin.d.ts +17 -9
  39. package/dist/src/genui/kit/plugin.d.ts.map +1 -1
  40. package/dist/src/genui/kit/plugin.js +196 -129
  41. package/dist/src/genui/kit/plugin.js.map +1 -1
  42. package/dist/src/genui/kit/styles.d.ts +83 -0
  43. package/dist/src/genui/kit/styles.d.ts.map +1 -0
  44. package/dist/src/genui/kit/styles.js +406 -0
  45. package/dist/src/genui/kit/styles.js.map +1 -0
  46. package/dist/src/genui/kit/vite-build.d.ts +33 -0
  47. package/dist/src/genui/kit/vite-build.d.ts.map +1 -0
  48. package/dist/src/genui/kit/vite-build.js +195 -0
  49. package/dist/src/genui/kit/vite-build.js.map +1 -0
  50. package/dist/src/genui/kit/write.d.ts +20 -8
  51. package/dist/src/genui/kit/write.d.ts.map +1 -1
  52. package/dist/src/genui/kit/write.js +54 -16
  53. package/dist/src/genui/kit/write.js.map +1 -1
  54. package/dist/src/genui/public.d.ts +5 -4
  55. package/dist/src/genui/public.d.ts.map +1 -1
  56. package/dist/src/genui/public.js +4 -3
  57. package/dist/src/genui/public.js.map +1 -1
  58. package/dist/src/genui/sandbox-jsx-frame-generated.d.ts +2 -0
  59. package/dist/src/genui/sandbox-jsx-frame-generated.d.ts.map +1 -0
  60. package/dist/src/genui/sandbox-jsx-frame-generated.js +4 -0
  61. package/dist/src/genui/sandbox-jsx-frame-generated.js.map +1 -0
  62. package/dist/src/genui/sandbox-kit.d.ts +50 -17
  63. package/dist/src/genui/sandbox-kit.d.ts.map +1 -1
  64. package/dist/src/genui/sandbox-kit.js +20 -10
  65. package/dist/src/genui/sandbox-kit.js.map +1 -1
  66. package/dist/src/genui/sandbox-styles.d.ts +113 -0
  67. package/dist/src/genui/sandbox-styles.d.ts.map +1 -0
  68. package/dist/src/genui/sandbox-styles.js +487 -0
  69. package/dist/src/genui/sandbox-styles.js.map +1 -0
  70. package/dist/src/genui/sandbox-theme.d.ts +13 -9
  71. package/dist/src/genui/sandbox-theme.d.ts.map +1 -1
  72. package/dist/src/genui/sandbox-theme.js +52 -60
  73. package/dist/src/genui/sandbox-theme.js.map +1 -1
  74. package/dist/src/genui/sandbox.d.ts +14 -15
  75. package/dist/src/genui/sandbox.d.ts.map +1 -1
  76. package/dist/src/genui/sandbox.js +55 -13
  77. package/dist/src/genui/sandbox.js.map +1 -1
  78. package/dist/src/genui/tools.d.ts +20 -0
  79. package/dist/src/genui/tools.d.ts.map +1 -1
  80. package/dist/src/genui/tools.js +19 -4
  81. package/dist/src/genui/tools.js.map +1 -1
  82. package/dist/src/hooks/genui_kit.d.ts +6 -2
  83. package/dist/src/hooks/genui_kit.d.ts.map +1 -1
  84. package/dist/src/hooks/genui_kit.js +21 -9
  85. package/dist/src/hooks/genui_kit.js.map +1 -1
  86. package/dist/src/index.d.ts +1 -1
  87. package/dist/src/index.js +1 -1
  88. package/dist/src/negotiated-tool-ui.d.ts.map +1 -1
  89. package/dist/src/negotiated-tool-ui.js +4 -0
  90. package/dist/src/negotiated-tool-ui.js.map +1 -1
  91. package/dist/src/react/core/genui/sandbox-assets.d.ts +4 -1
  92. package/dist/src/react/core/genui/sandbox-assets.d.ts.map +1 -1
  93. package/dist/src/react/core/genui/sandbox-assets.js +17 -5
  94. package/dist/src/react/core/genui/sandbox-assets.js.map +1 -1
  95. package/dist/src/react/core/genui/sandbox.d.ts +1 -1
  96. package/dist/src/react/core/genui/sandbox.d.ts.map +1 -1
  97. package/dist/src/react/core/genui/sandbox.js +20 -4
  98. package/dist/src/react/core/genui/sandbox.js.map +1 -1
  99. package/dist/src/vite/index.d.ts +10 -7
  100. package/dist/src/vite/index.d.ts.map +1 -1
  101. package/dist/src/vite/index.js +10 -7
  102. package/dist/src/vite/index.js.map +1 -1
  103. package/package.json +13 -2
@@ -0,0 +1,406 @@
1
+ /**
2
+ * The app's styles in the sandbox — the Node half: which files they are (given, or found from the
3
+ * app's Vite entrypoints), what they are (Tailwind v3/v4 or plain CSS), and what they compile to
4
+ * with the app's own Vite CSS pipeline (Sass, Less, PostCSS, CSS modules, Tailwind's plugin…).
5
+ */
6
+ import { existsSync, readFileSync, statSync } from 'node:fs';
7
+ import { createRequire } from 'node:module';
8
+ import { dirname, extname, isAbsolute, join, resolve } from 'node:path';
9
+ import { pathToFileURL } from 'node:url';
10
+ import { extractCssVocabulary, tailwindDirectivesFromCss, tailwindTokensFromCss, tailwindV3ConfigToCss, tailwindVersionOf, } from '../sandbox-styles.js';
11
+ import { themeVarsFromCss } from '../sandbox-theme.js';
12
+ import { globFiles } from './files.js';
13
+ import { contentHash, runKitViteBuild } from './vite-build.js';
14
+ /** Extensions a style entry may have. */
15
+ export const STYLE_EXTENSIONS = [
16
+ '.css',
17
+ '.scss',
18
+ '.sass',
19
+ '.less',
20
+ '.styl',
21
+ '.stylus',
22
+ '.pcss',
23
+ '.postcss',
24
+ '.sss',
25
+ ];
26
+ const isStyleFile = (file) => STYLE_EXTENSIONS.includes(extname(file.split('?')[0] ?? file).toLowerCase());
27
+ /** The package a bare specifier names, found from `fromDir` up. */
28
+ function packageDir(name, fromDir) {
29
+ let dir = fromDir;
30
+ for (;;) {
31
+ const candidate = join(dir, 'node_modules', name);
32
+ if (existsSync(join(candidate, 'package.json')))
33
+ return candidate;
34
+ const parent = dirname(dir);
35
+ if (parent === dir)
36
+ return undefined;
37
+ dir = parent;
38
+ }
39
+ }
40
+ /** An `exports` target under the conditions a stylesheet import uses (`style`, then the defaults). */
41
+ function exportTarget(value) {
42
+ if (typeof value === 'string')
43
+ return value;
44
+ if (Array.isArray(value)) {
45
+ for (const each of value) {
46
+ const found = exportTarget(each);
47
+ if (found !== undefined)
48
+ return found;
49
+ }
50
+ return undefined;
51
+ }
52
+ if (typeof value === 'object' && value !== null) {
53
+ const record = value;
54
+ for (const condition of ['style', 'sass', 'import', 'default', 'require']) {
55
+ if (condition in record) {
56
+ const found = exportTarget(record[condition]);
57
+ if (found !== undefined)
58
+ return found;
59
+ }
60
+ }
61
+ }
62
+ return undefined;
63
+ }
64
+ /**
65
+ * A stylesheet import as CSS resolves it: relative, absolute, an alias of the app's Vite config, or
66
+ * a package (`bootstrap/dist/css/bootstrap.css`, `shadcn/tailwind.css`, `@fontsource-variable/geist`
67
+ * — its `exports` under the `style` condition, its `style` field).
68
+ */
69
+ export function resolveStyleImport(spec, fromDir, alias = {}) {
70
+ let target = spec.replace(/^~(?!\/)/, '');
71
+ for (const [key, value] of Object.entries(alias)) {
72
+ if (target === key || target.startsWith(`${key}/`)) {
73
+ target = `${value}${target.slice(key.length)}`;
74
+ break;
75
+ }
76
+ }
77
+ const file = (path) => (existsSync(path) && statSync(path).isFile() ? path : undefined);
78
+ if (target.startsWith('.') || isAbsolute(target)) {
79
+ const path = resolve(fromDir, target);
80
+ return file(path) ?? file(`${path}.css`) ?? file(join(path, 'index.css'));
81
+ }
82
+ const parts = target.split('/');
83
+ const name = target.startsWith('@') ? parts.slice(0, 2).join('/') : parts[0];
84
+ const sub = parts.slice(target.startsWith('@') ? 2 : 1).join('/');
85
+ const dir = packageDir(name, fromDir);
86
+ if (dir === undefined)
87
+ return undefined;
88
+ let manifest = {};
89
+ try {
90
+ manifest = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
91
+ }
92
+ catch {
93
+ /* no manifest: paths only */
94
+ }
95
+ const exportsField = manifest.exports;
96
+ if (typeof exportsField === 'object' && exportsField !== null && !Array.isArray(exportsField)) {
97
+ const map = exportsField;
98
+ const key = sub === '' ? '.' : `./${sub}`;
99
+ const exact = map[key] !== undefined ? exportTarget(map[key]) : undefined;
100
+ if (exact !== undefined)
101
+ return file(join(dir, exact));
102
+ for (const [pattern, value] of Object.entries(map)) {
103
+ if (!pattern.includes('*'))
104
+ continue;
105
+ const [before, after] = pattern.split('*');
106
+ if (key.startsWith(before) && key.endsWith(after)) {
107
+ const star = key.slice(before.length, key.length - after.length);
108
+ const found = exportTarget(value);
109
+ if (found !== undefined)
110
+ return file(join(dir, found.replace('*', star)));
111
+ }
112
+ }
113
+ }
114
+ else if (typeof exportsField === 'string' && sub === '')
115
+ return file(join(dir, exportsField));
116
+ if (sub !== '')
117
+ return file(join(dir, sub)) ?? file(join(dir, `${sub}.css`));
118
+ if (manifest.style !== undefined)
119
+ return file(join(dir, manifest.style));
120
+ if (manifest.main !== undefined && isStyleFile(manifest.main))
121
+ return file(join(dir, manifest.main));
122
+ return file(join(dir, 'index.css'));
123
+ }
124
+ /** The `@import`s of a stylesheet (plain CSS, and Sass/Less `@use`/`@forward`/`@import`). */
125
+ function importsOf(text) {
126
+ const out = [];
127
+ const clean = text.replace(/\/\*[\s\S]*?\*\//g, '');
128
+ for (const match of clean.matchAll(/@(?:import|use|forward)\s+(?:url\(\s*)?["']([^"']+)["']/g))
129
+ out.push(match[1]);
130
+ return out;
131
+ }
132
+ /**
133
+ * The style entries and every stylesheet they `@import` (plain CSS imports are followed through
134
+ * packages; Sass/Less partials are read for detection only). The `tailwindcss` package itself is
135
+ * not read (the frame brings its own runtime).
136
+ */
137
+ export function collectStyleSources(entries, options = {}) {
138
+ const seen = new Set();
139
+ const out = [];
140
+ const visit = (file, depth) => {
141
+ if (seen.has(file) || depth > 16)
142
+ return;
143
+ seen.add(file);
144
+ let text;
145
+ try {
146
+ text = readFileSync(file, 'utf8');
147
+ }
148
+ catch {
149
+ return;
150
+ }
151
+ out.push({ file, text });
152
+ for (const spec of importsOf(text)) {
153
+ if (/^(https?:)?\/\//.test(spec) || /^tailwindcss(\/|$)/.test(spec))
154
+ continue;
155
+ const found = resolveStyleImport(spec, dirname(file), options.alias);
156
+ if (found !== undefined && /\.(css|pcss|postcss)$/i.test(found))
157
+ visit(found, depth + 1);
158
+ }
159
+ };
160
+ for (const entry of entries)
161
+ visit(entry, 0);
162
+ return out;
163
+ }
164
+ /** The `styles` option as files: paths and globs relative to the root, or package stylesheets. */
165
+ export function resolveStyleEntries(root, styles) {
166
+ const files = [];
167
+ const missing = [];
168
+ for (const spec of typeof styles === 'string' ? [styles] : styles) {
169
+ if (/[*?{]/.test(spec)) {
170
+ const matched = globFiles(root, spec);
171
+ if (matched.length === 0)
172
+ missing.push(spec);
173
+ files.push(...matched);
174
+ continue;
175
+ }
176
+ const path = isAbsolute(spec) ? spec : resolve(root, spec);
177
+ if (existsSync(path) && statSync(path).isFile()) {
178
+ files.push(path);
179
+ continue;
180
+ }
181
+ const found = spec.startsWith('.') ? undefined : resolveStyleImport(spec, root);
182
+ if (found !== undefined)
183
+ files.push(found);
184
+ else
185
+ missing.push(spec);
186
+ }
187
+ return { files: [...new Set(files)], missing };
188
+ }
189
+ function inputList(input) {
190
+ if (typeof input === 'string')
191
+ return [input];
192
+ if (Array.isArray(input))
193
+ return input.filter((each) => typeof each === 'string');
194
+ if (typeof input === 'object' && input !== null)
195
+ return Object.values(input).filter((each) => typeof each === 'string');
196
+ return [];
197
+ }
198
+ /**
199
+ * The app's style entries, found from its Vite setup — what `genuiSandboxKit()` uses without
200
+ * `styles`: the stylesheets among `build.rollupOptions.input` (the AdonisJS plugin puts its
201
+ * `entrypoints` there) or linked from `index.html`, and those the script entries import directly
202
+ * (`import './app.css'`). CSS modules are left out.
203
+ */
204
+ export function discoverStyleEntries(root, options = {}) {
205
+ const entries = inputList(options.input).map((each) => isAbsolute(each) ? each : resolve(root, each));
206
+ if (entries.length === 0) {
207
+ const html = join(root, 'index.html');
208
+ if (existsSync(html)) {
209
+ const text = readFileSync(html, 'utf8');
210
+ for (const match of text.matchAll(/<link\b[^>]*>/gi)) {
211
+ const tag = match[0];
212
+ if (!/rel\s*=\s*["']?stylesheet/i.test(tag))
213
+ continue;
214
+ const href = /href\s*=\s*["']([^"']+)["']/i.exec(tag)?.[1];
215
+ if (href !== undefined && !/^(https?:)?\/\//.test(href))
216
+ entries.push(resolve(root, href.replace(/^\//, '')));
217
+ }
218
+ for (const match of text.matchAll(/<script\b[^>]*type\s*=\s*["']module["'][^>]*>/gi)) {
219
+ const src = /src\s*=\s*["']([^"']+)["']/i.exec(match[0])?.[1];
220
+ if (src !== undefined && !/^(https?:)?\/\//.test(src))
221
+ entries.push(resolve(root, src.replace(/^\//, '')));
222
+ }
223
+ }
224
+ }
225
+ const styles = [];
226
+ const add = (file) => {
227
+ if (!/\.module\.[a-z]+$/i.test(file) && existsSync(file) && !styles.includes(file))
228
+ styles.push(file);
229
+ };
230
+ for (const entry of entries) {
231
+ if (isStyleFile(entry)) {
232
+ add(entry);
233
+ continue;
234
+ }
235
+ if (!existsSync(entry))
236
+ continue;
237
+ let text;
238
+ try {
239
+ text = readFileSync(entry, 'utf8');
240
+ }
241
+ catch {
242
+ continue;
243
+ }
244
+ for (const match of text.matchAll(/^\s*import\s+["']([^"']+)["']/gm)) {
245
+ const spec = match[1];
246
+ if (!isStyleFile(spec))
247
+ continue;
248
+ const found = spec.startsWith('.') || isAbsolute(spec)
249
+ ? resolve(dirname(entry), spec)
250
+ : resolveStyleImport(spec, dirname(entry));
251
+ if (found !== undefined)
252
+ add(found);
253
+ }
254
+ }
255
+ return styles;
256
+ }
257
+ /** A Tailwind v3 config's theme as v4 directives (`tailwind.config.*` in the root, or `@config`). */
258
+ async function tailwindV3Css(root, sources, warn) {
259
+ let path;
260
+ for (const source of sources) {
261
+ const spec = /@config\s+["']([^"']+)["']/.exec(source.text)?.[1];
262
+ if (spec !== undefined) {
263
+ path = resolve(dirname(source.file), spec);
264
+ break;
265
+ }
266
+ }
267
+ path ??= ['ts', 'mts', 'cts', 'js', 'mjs', 'cjs']
268
+ .map((extension) => join(root, `tailwind.config.${extension}`))
269
+ .find((candidate) => existsSync(candidate));
270
+ if (path === undefined || !existsSync(path))
271
+ return '';
272
+ try {
273
+ const mod = (await import(`${pathToFileURL(path).href}?t=${statSync(path).mtimeMs}`));
274
+ return tailwindV3ConfigToCss(mod.default ?? mod);
275
+ }
276
+ catch (error) {
277
+ warn?.(`the Tailwind v3 config ${path} did not load (${error instanceof Error ? error.message : String(error)}); the frame's Tailwind has the default theme`);
278
+ return '';
279
+ }
280
+ }
281
+ /** Aliases of a resolved Vite `resolve` (object or array form) as `find → replacement` strings. */
282
+ export function stringAliases(resolveOptions) {
283
+ const alias = resolveOptions?.alias;
284
+ const out = {};
285
+ if (Array.isArray(alias)) {
286
+ for (const entry of alias)
287
+ if (typeof entry.find === 'string' && typeof entry.replacement === 'string')
288
+ out[entry.find] = entry.replacement;
289
+ }
290
+ else if (typeof alias === 'object' && alias !== null) {
291
+ for (const [find, replacement] of Object.entries(alias))
292
+ if (typeof replacement === 'string')
293
+ out[find] = replacement;
294
+ }
295
+ return out;
296
+ }
297
+ /**
298
+ * Compile the style entries with the app's Vite CSS pipeline and work out what they are: Tailwind
299
+ * (its version, tokens, and the directives the frame's runtime needs — v3's config theme mapped to
300
+ * v4), or plain CSS (its class vocabulary). `null` with no entries.
301
+ */
302
+ export async function buildSandboxKitStyles(options) {
303
+ if (options.entries.length === 0)
304
+ return null;
305
+ const sources = collectStyleSources(options.entries, { alias: stringAliases(options.resolve) });
306
+ let css;
307
+ if (options.compile === false) {
308
+ css = sources
309
+ .filter((source) => /\.css$/i.test(source.file))
310
+ .map((source) => source.text)
311
+ .join('\n');
312
+ }
313
+ else {
314
+ const built = await runKitViteBuild({
315
+ root: options.root,
316
+ entry: options.entries.map((file) => `import ${JSON.stringify(file)};`).join('\n'),
317
+ ...(options.resolve !== undefined ? { resolve: options.resolve } : {}),
318
+ ...(options.css !== undefined ? { css: options.css } : {}),
319
+ ...(options.publicDir !== undefined ? { publicDir: options.publicDir } : {}),
320
+ ...(options.plugins !== undefined ? { plugins: options.plugins } : {}),
321
+ ...(options.inlineAssetLimit !== undefined
322
+ ? { inlineAssetLimit: options.inlineAssetLimit }
323
+ : {}),
324
+ ...(options.inlineAssetBudget !== undefined
325
+ ? { inlineAssetBudget: options.inlineAssetBudget }
326
+ : {}),
327
+ ...(options.warn !== undefined ? { warn: options.warn } : {}),
328
+ });
329
+ css = built.css;
330
+ }
331
+ const versions = [
332
+ ...sources.map((source) => tailwindVersionOf(source.text)),
333
+ tailwindVersionOf(css),
334
+ ].filter((version) => version !== null);
335
+ const version = versions.includes(4) ? 4 : versions.includes(3) ? 3 : undefined;
336
+ const result = {
337
+ css,
338
+ hash: contentHash(css),
339
+ files: sources.map((source) => source.file),
340
+ vars: themeVarsFromCss(css, { rootOnly: true }),
341
+ };
342
+ if (version !== undefined) {
343
+ const parts = new Set();
344
+ if (version === 3) {
345
+ const mapped = await tailwindV3Css(options.root, sources, options.warn);
346
+ if (mapped !== '')
347
+ parts.add(mapped);
348
+ }
349
+ for (const source of sources) {
350
+ const directives = tailwindDirectivesFromCss(source.text);
351
+ if (directives !== '')
352
+ parts.add(directives);
353
+ }
354
+ const directives = [...parts].join('\n');
355
+ result.tailwind = { version, tokens: tailwindTokensFromCss(directives), directives };
356
+ if (Object.keys(result.vars).length === 0) {
357
+ for (const source of sources)
358
+ Object.assign(result.vars, {
359
+ ...themeVarsFromCss(source.text, { rootOnly: true }),
360
+ ...result.vars,
361
+ });
362
+ }
363
+ }
364
+ else {
365
+ result.vocabulary = extractCssVocabulary(css);
366
+ }
367
+ return result;
368
+ }
369
+ /** The docs half of compiled styles (what the model is told). */
370
+ export function stylesDocs(styles) {
371
+ if (styles === null)
372
+ return {};
373
+ if (styles.tailwind !== undefined)
374
+ return { tailwind: { version: styles.tailwind.version, tokens: styles.tailwind.tokens } };
375
+ return styles.vocabulary !== undefined ? { vocabulary: styles.vocabulary } : {};
376
+ }
377
+ /** `stylesDocs`: a file (markdown, text) relative to the root, or the guidance itself. */
378
+ export function readStylesGuide(root, stylesDocs) {
379
+ if (stylesDocs === undefined)
380
+ return undefined;
381
+ if (!stylesDocs.includes('\n') && stylesDocs.length < 400) {
382
+ const path = isAbsolute(stylesDocs) ? stylesDocs : resolve(root, stylesDocs);
383
+ if (existsSync(path) && statSync(path).isFile())
384
+ return readFileSync(path, 'utf8');
385
+ }
386
+ return stylesDocs;
387
+ }
388
+ /** A fresh instance of the app's Tailwind Vite plugin, when the app has one and the kit has none. */
389
+ export async function tailwindVitePluginFor(root, appPlugins, given) {
390
+ const named = (list) => list
391
+ .flat(Number.POSITIVE_INFINITY)
392
+ .map((plugin) => String(plugin?.name ?? ''));
393
+ if (!appPlugins.some((plugin) => String(plugin.name ?? '').startsWith('@tailwindcss/vite')))
394
+ return [];
395
+ if (named(given).some((name) => name.startsWith('@tailwindcss/vite')))
396
+ return [];
397
+ try {
398
+ const path = createRequire(resolve(root, 'package.json')).resolve('@tailwindcss/vite');
399
+ const mod = (await import(pathToFileURL(path).href));
400
+ return [mod.default()];
401
+ }
402
+ catch {
403
+ return [];
404
+ }
405
+ }
406
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/genui/kit/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /** What a build produced. */
2
+ export interface KitBuildOutput {
3
+ /** The entry chunk (an IIFE). */
4
+ code: string;
5
+ /** Every CSS file the build emitted, together, its `url()`s made network-less. */
6
+ css: string;
7
+ /** The app modules the build read (`node_modules` and virtual ones left out). */
8
+ modules: string[];
9
+ }
10
+ export interface KitBuildOptions {
11
+ root: string;
12
+ /** The entry module's source (a virtual module; may import anything the app can). */
13
+ entry: string;
14
+ /** `resolve` from the app's Vite config (aliases, dedupe, conditions). */
15
+ resolve?: Record<string, unknown>;
16
+ /** `css` from the app's Vite config (preprocessorOptions, modules, postcss, transformer…). */
17
+ css?: Record<string, unknown>;
18
+ /** The app's public directory (absolute urls in CSS are read from it), or `false`. */
19
+ publicDir?: string | false;
20
+ /** Extra Vite plugins (Tailwind's, one the components need to compile). */
21
+ plugins?: unknown[];
22
+ /** Largest asset inlined, in bytes. */
23
+ inlineAssetLimit?: number;
24
+ /** Most bytes inlined in all. */
25
+ inlineAssetBudget?: number;
26
+ /** Told about every asset left out. */
27
+ warn?: (message: string) => void;
28
+ /** Default true. */
29
+ minify?: boolean;
30
+ }
31
+ export declare function runKitViteBuild(options: KitBuildOptions): Promise<KitBuildOutput>;
32
+ export declare function contentHash(text: string): string;
33
+ //# sourceMappingURL=vite-build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-build.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/vite-build.ts"],"names":[],"mappings":"AAYA,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iCAAiC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,oBAAoB;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAkCD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAoJvF;AAqBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * One in-memory build with the app's Vite (`vite.build`, nothing written) — what both the kit bundle
3
+ * and the compiled styles come from. The app's `resolve` (aliases) and `css` options (preprocessor
4
+ * options, CSS modules, PostCSS, Lightning CSS) are kept, so `@/lib/utils`, a Sass `additionalData`
5
+ * or a PostCSS plugin work as they do in the app; assets referenced by the CSS are inlined as
6
+ * `data:` URIs up to a limit and a budget, the rest left out (the frame has no network).
7
+ */
8
+ import { createHash } from 'node:crypto';
9
+ import { existsSync, readFileSync, statSync } from 'node:fs';
10
+ import { extname, join, relative, resolve } from 'node:path';
11
+ import { INLINE_ASSET_DEFAULTS, inlineCssUrls } from '../sandbox-styles.js';
12
+ /** The entry's file name (Vite resolves an input against the root) and its virtual id. */
13
+ const ENTRY_FILE = 'genui-sandbox-kit-entry.js';
14
+ const ENTRY_ID = '\0genui-sandbox-kit-entry';
15
+ const MIME = {
16
+ '.woff2': 'font/woff2',
17
+ '.woff': 'font/woff',
18
+ '.ttf': 'font/ttf',
19
+ '.otf': 'font/otf',
20
+ '.eot': 'application/vnd.ms-fontobject',
21
+ '.svg': 'image/svg+xml',
22
+ '.png': 'image/png',
23
+ '.jpg': 'image/jpeg',
24
+ '.jpeg': 'image/jpeg',
25
+ '.gif': 'image/gif',
26
+ '.webp': 'image/webp',
27
+ '.avif': 'image/avif',
28
+ '.ico': 'image/x-icon',
29
+ '.cur': 'image/x-icon',
30
+ };
31
+ export async function runKitViteBuild(options) {
32
+ const vite = (await import('vite'));
33
+ const major = Number.parseInt(String(vite.version).split('.')[0] ?? '0', 10);
34
+ const limit = options.inlineAssetLimit ?? INLINE_ASSET_DEFAULTS.limit;
35
+ const budget = options.inlineAssetBudget ?? INLINE_ASSET_DEFAULTS.budget;
36
+ let inlined = 0;
37
+ const reasons = new Map();
38
+ const result = await vite.build({
39
+ configFile: false,
40
+ root: options.root,
41
+ logLevel: 'silent',
42
+ mode: 'production',
43
+ publicDir: options.publicDir ?? false,
44
+ // One React: components living outside the app (a workspace package, another repo) resolve
45
+ // `react` from the app root too, never a second copy that would break their hooks.
46
+ resolve: {
47
+ ...(options.resolve ?? {}),
48
+ dedupe: [
49
+ ...(options.resolve?.dedupe ?? []),
50
+ 'react',
51
+ 'react-dom',
52
+ ],
53
+ },
54
+ css: quietCss(options.css),
55
+ define: { 'process.env.NODE_ENV': JSON.stringify('production') },
56
+ // Vite 8 compiles with Oxc, earlier versions with esbuild: the automatic JSX runtime on both.
57
+ // Production JSX (`jsx`, never `jsxDEV`) whatever NODE_ENV the dev server runs under.
58
+ ...(major >= 8
59
+ ? { oxc: { jsx: { runtime: 'automatic', development: false } } }
60
+ : { esbuild: { jsx: 'automatic', jsxDev: false } }),
61
+ plugins: [
62
+ {
63
+ name: 'genui-sandbox-kit-entry',
64
+ resolveId(id) {
65
+ if (id === ENTRY_ID || id.endsWith(ENTRY_FILE))
66
+ return ENTRY_ID;
67
+ return null;
68
+ },
69
+ load(id) {
70
+ return id === ENTRY_ID ? options.entry : null;
71
+ },
72
+ },
73
+ ...(options.plugins ?? []),
74
+ ],
75
+ build: {
76
+ write: false,
77
+ emptyOutDir: false,
78
+ copyPublicDir: false,
79
+ minify: options.minify ?? true,
80
+ sourcemap: false,
81
+ cssCodeSplit: false,
82
+ reportCompressedSize: false,
83
+ modulePreload: false,
84
+ // Inlined (`data:`) within the limit and the budget; the rest is emitted, then left out below.
85
+ assetsInlineLimit: (file, content) => {
86
+ const name = relative(options.root, file) || file;
87
+ if (content.length > limit) {
88
+ reasons.set(file, `${name} (${kb(content.length)}) is over the ${kb(limit)} limit`);
89
+ return false;
90
+ }
91
+ if (inlined + content.length > budget) {
92
+ reasons.set(file, `${name} is over the ${kb(budget)} budget for inlined assets`);
93
+ return false;
94
+ }
95
+ inlined += content.length;
96
+ return true;
97
+ },
98
+ rollupOptions: {
99
+ input: ENTRY_FILE,
100
+ // The app's own build reports its warnings (`"use client"` directives…); this one is quiet.
101
+ onwarn() { },
102
+ output: {
103
+ format: 'iife',
104
+ name: '__genuiSandboxKit',
105
+ // One file (Rolldown already bundles an IIFE into one, and warns about the option).
106
+ ...(major >= 8 ? {} : { inlineDynamicImports: true }),
107
+ entryFileNames: 'genui-sandbox-kit.js',
108
+ },
109
+ },
110
+ },
111
+ });
112
+ const outputs = (Array.isArray(result) ? result : [result]);
113
+ let code = '';
114
+ let css = '';
115
+ const modules = new Set();
116
+ const emitted = new Map();
117
+ for (const out of outputs) {
118
+ for (const item of out.output ?? []) {
119
+ if (item.type === 'chunk') {
120
+ code += item.code ?? '';
121
+ for (const id of item.moduleIds ?? Object.keys(item.modules ?? {})) {
122
+ if (!id.startsWith('\0') &&
123
+ (!id.includes('/node_modules/') || /\/node_modules\/\.pnpm\/[^/]*@file\+/.test(id)))
124
+ modules.add(id.split('?')[0] ?? id);
125
+ }
126
+ }
127
+ else if (item.fileName.endsWith('.css')) {
128
+ css +=
129
+ typeof item.source === 'string'
130
+ ? item.source
131
+ : Buffer.from(item.source ?? new Uint8Array()).toString('utf8');
132
+ }
133
+ else {
134
+ const original = item.originalFileNames?.[0];
135
+ emitted.set(item.fileName, original === undefined ? undefined : resolve(options.root, original));
136
+ }
137
+ }
138
+ }
139
+ const publicDir = options.publicDir === false || options.publicDir === undefined ? undefined : options.publicDir;
140
+ css = inlineCssUrls(css, {
141
+ limit,
142
+ // Vite counted what it inlined; this pass only checks what is left.
143
+ budget: Number.POSITIVE_INFINITY,
144
+ ...(options.warn !== undefined ? { warn: options.warn } : {}),
145
+ resolve(url) {
146
+ const path = (url.split(/[?#]/)[0] ?? url).replace(/^\.?\//, '');
147
+ for (const [fileName, original] of emitted) {
148
+ if (path === fileName || path.endsWith(`/${fileName}`) || path.endsWith(fileName)) {
149
+ return {
150
+ dropped: (original !== undefined ? reasons.get(original) : undefined) ??
151
+ `${fileName} was not inlined`,
152
+ };
153
+ }
154
+ }
155
+ if (publicDir !== undefined && url.startsWith('/')) {
156
+ const file = join(publicDir, decodeURIComponent(path));
157
+ if (existsSync(file) && statSync(file).isFile()) {
158
+ const bytes = readFileSync(file);
159
+ if (inlined + bytes.length > budget)
160
+ return { dropped: `over the ${kb(budget)} budget for inlined assets` };
161
+ inlined += bytes.length;
162
+ return {
163
+ data: bytes.toString('base64'),
164
+ mime: MIME[extname(file).toLowerCase()] ?? 'application/octet-stream',
165
+ bytes: bytes.length,
166
+ };
167
+ }
168
+ }
169
+ return null;
170
+ },
171
+ });
172
+ return { code, css, modules: [...modules] };
173
+ }
174
+ /** Sass's deprecation warnings (Bootstrap's own, by the thousand) are not the kit's to print. */
175
+ const QUIET_SASS = { quietDeps: true, logger: { warn() { }, debug() { } } };
176
+ /** The app's `css` options, with Sass told to keep quiet unless the app said otherwise. */
177
+ function quietCss(css) {
178
+ const given = (css ?? {});
179
+ const pre = given.preprocessorOptions ?? {};
180
+ return {
181
+ ...given,
182
+ preprocessorOptions: {
183
+ ...pre,
184
+ scss: { ...QUIET_SASS, ...(pre.scss ?? {}) },
185
+ sass: { ...QUIET_SASS, ...(pre.sass ?? {}) },
186
+ },
187
+ };
188
+ }
189
+ export function contentHash(text) {
190
+ return createHash('sha256').update(text).digest('hex').slice(0, 12);
191
+ }
192
+ function kb(bytes) {
193
+ return `${Math.round(bytes / 1024)} KB`;
194
+ }
195
+ //# sourceMappingURL=vite-build.js.map