svelte-ag 1.2.8 → 1.3.1
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/api/form.svelte.d.ts +7 -10
- package/dist/api/form.svelte.d.ts.map +1 -1
- package/dist/api/form.svelte.js +6 -9
- package/dist/api/query/entrypoint.svelte.d.ts +14 -6
- package/dist/api/query/entrypoint.svelte.d.ts.map +1 -1
- package/dist/api/query/entrypoint.svelte.js +11 -5
- package/dist/api/query/entrypoint.unit.test.js +23 -25
- package/dist/api/query/query.svelte.d.ts +4 -5
- package/dist/api/query/query.svelte.d.ts.map +1 -1
- package/dist/api/query/query.svelte.js +8 -12
- package/dist/api/query/query.unit.test.js +21 -30
- package/dist/api/query/utils.svelte.d.ts +8 -2
- package/dist/api/query/utils.svelte.d.ts.map +1 -1
- package/dist/api/query/utils.svelte.js +5 -4
- package/dist/bin/build-tailwind-manifest/build-tailwind-manifest.unit.test.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/build-tailwind-manifest.unit.test.js +386 -0
- package/dist/bin/build-tailwind-manifest/cli.d.ts +2 -0
- package/dist/bin/build-tailwind-manifest/cli.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/cli.js +122 -0
- package/dist/bin/build-tailwind-manifest/graph.d.ts +9 -0
- package/dist/bin/build-tailwind-manifest/graph.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/graph.js +405 -0
- package/dist/bin/build-tailwind-manifest/index.d.ts +1 -0
- package/dist/bin/build-tailwind-manifest/index.js +6 -0
- package/dist/bin/build-tailwind-manifest/manifest-generator.d.ts +7 -0
- package/dist/bin/build-tailwind-manifest/manifest-generator.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/manifest-generator.js +85 -0
- package/dist/bin/build-tailwind-manifest/path-utils.d.ts +6 -0
- package/dist/bin/build-tailwind-manifest/path-utils.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/path-utils.js +41 -0
- package/dist/bin/build-tailwind-manifest/types.d.ts +15 -0
- package/dist/bin/build-tailwind-manifest/types.d.ts.map +1 -0
- package/dist/bin/build-tailwind-manifest/types.js +1 -0
- package/dist/index.d.ts +29 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/tailwind-sources.manifest.jsonc +193 -3
- package/dist/vite/vite-plugin-component-source-collector.d.ts.map +1 -1
- package/dist/vite/vite-plugin-component-source-collector.js +1 -6
- package/package.json +7 -5
- package/src/lib/api/form.svelte.ts +27 -34
- package/src/lib/api/query/entrypoint.svelte.ts +28 -11
- package/src/lib/api/query/entrypoint.unit.test.ts +25 -27
- package/src/lib/api/query/query.svelte.ts +18 -17
- package/src/lib/api/query/query.unit.test.ts +25 -35
- package/src/lib/api/query/utils.svelte.ts +5 -4
- package/src/lib/bin/build-tailwind-manifest/build-tailwind-manifest.unit.test.ts +591 -0
- package/src/lib/bin/build-tailwind-manifest/cli.ts +147 -0
- package/src/lib/bin/build-tailwind-manifest/graph.ts +521 -0
- package/src/lib/bin/build-tailwind-manifest/index.ts +8 -0
- package/src/lib/bin/build-tailwind-manifest/manifest-generator.ts +119 -0
- package/src/lib/bin/build-tailwind-manifest/path-utils.ts +53 -0
- package/src/lib/bin/build-tailwind-manifest/types.ts +18 -0
- package/src/lib/vite/vite-plugin-component-source-collector.ts +1 -6
- package/dist/bin/build-tailwind-manifest.d.ts +0 -15
- package/dist/bin/build-tailwind-manifest.d.ts.map +0 -1
- package/dist/bin/build-tailwind-manifest.js +0 -581
- package/dist/bin/build-tailwind-manifest.unit.test.d.ts.map +0 -1
- package/dist/bin/build-tailwind-manifest.unit.test.js +0 -208
- package/src/lib/bin/build-tailwind-manifest.ts +0 -757
- package/src/lib/bin/build-tailwind-manifest.unit.test.ts +0 -309
- /package/dist/bin/{build-tailwind-manifest.unit.test.d.ts → build-tailwind-manifest/build-tailwind-manifest.unit.test.d.ts} +0 -0
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'fs/promises';
|
|
2
|
-
import { tmpdir } from 'os';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
|
|
5
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
|
-
|
|
7
|
-
import { parseTailwindSourceManifest } from '../vite/tailwind-sources-manifest.js';
|
|
8
|
-
import { main } from './build-tailwind-manifest.js';
|
|
9
|
-
|
|
10
|
-
const tempDirectories: string[] = [];
|
|
11
|
-
const originalWorkingDirectory = process.cwd();
|
|
12
|
-
|
|
13
|
-
async function createTempDirectory(prefix: string): Promise<string> {
|
|
14
|
-
const directory = await mkdtemp(join(tmpdir(), prefix));
|
|
15
|
-
tempDirectories.push(directory);
|
|
16
|
-
return directory;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function writeJson(filePath: string, value: unknown): Promise<void> {
|
|
20
|
-
await writeFile(filePath, `${JSON.stringify(value, null, 2)}\n`);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
describe('build-tailwind-manifest', () => {
|
|
24
|
-
afterEach(async () => {
|
|
25
|
-
process.chdir(originalWorkingDirectory);
|
|
26
|
-
|
|
27
|
-
await Promise.all(
|
|
28
|
-
tempDirectories.splice(0).map((directory) =>
|
|
29
|
-
rm(directory, {
|
|
30
|
-
recursive: true,
|
|
31
|
-
force: true
|
|
32
|
-
})
|
|
33
|
-
)
|
|
34
|
-
);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('generates manifests for matching package.json globs and filters export prefixes', async () => {
|
|
38
|
-
const repoRoot = await createTempDirectory('tailwind-manifest-monorepo-');
|
|
39
|
-
const packageRoot = join(repoRoot, 'packages', 'module-a');
|
|
40
|
-
|
|
41
|
-
await mkdir(join(packageRoot, 'dist', 'admin', 'overrides'), { recursive: true });
|
|
42
|
-
await mkdir(join(packageRoot, 'dist', 'project'), { recursive: true });
|
|
43
|
-
await mkdir(join(packageRoot, 'testing', 'dist'), { recursive: true });
|
|
44
|
-
|
|
45
|
-
await writeJson(join(packageRoot, 'package.json'), {
|
|
46
|
-
name: 'module-a',
|
|
47
|
-
private: true,
|
|
48
|
-
type: 'module',
|
|
49
|
-
exports: {
|
|
50
|
-
'./testing/*': './testing/dist/*',
|
|
51
|
-
'./admin': './dist/admin/index.ts',
|
|
52
|
-
'./admin/overrides': './dist/admin/overrides/index.ts',
|
|
53
|
-
'./project': './dist/project/index.ts'
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
await writeFile(
|
|
58
|
-
join(packageRoot, 'dist', 'admin', 'index.ts'),
|
|
59
|
-
"export { default as AdminPanel } from './AdminPanel.svelte';\n"
|
|
60
|
-
);
|
|
61
|
-
await writeFile(join(packageRoot, 'dist', 'admin', 'AdminPanel.svelte'), '<div class="admin-grid gap-4"></div>\n');
|
|
62
|
-
await writeFile(
|
|
63
|
-
join(packageRoot, 'dist', 'admin', 'overrides', 'index.ts'),
|
|
64
|
-
"export { default as AdminOverride } from './AdminOverride.svelte';\n"
|
|
65
|
-
);
|
|
66
|
-
await writeFile(
|
|
67
|
-
join(packageRoot, 'dist', 'admin', 'overrides', 'AdminOverride.svelte'),
|
|
68
|
-
[
|
|
69
|
-
'<script module lang="ts">',
|
|
70
|
-
" export { overrideVariants } from './variants.ts';",
|
|
71
|
-
'</script>',
|
|
72
|
-
'<script lang="ts">',
|
|
73
|
-
" import { cn } from './util.js';",
|
|
74
|
-
' let { class: className } = $props();',
|
|
75
|
-
'</script>',
|
|
76
|
-
"<div class={cn('override-flex px-2', className)}></div>",
|
|
77
|
-
''
|
|
78
|
-
].join('\n')
|
|
79
|
-
);
|
|
80
|
-
await writeFile(
|
|
81
|
-
join(packageRoot, 'dist', 'admin', 'overrides', 'variants.ts'),
|
|
82
|
-
"export const overrideVariants = { class: 'override-variant rounded-md' };\n"
|
|
83
|
-
);
|
|
84
|
-
await writeFile(
|
|
85
|
-
join(packageRoot, 'dist', 'admin', 'overrides', 'util.js'),
|
|
86
|
-
"export const cn = (...values) => values.join(' ');\n"
|
|
87
|
-
);
|
|
88
|
-
await writeFile(
|
|
89
|
-
join(packageRoot, 'dist', 'project', 'index.ts'),
|
|
90
|
-
["import './theme.css';", "export { default as ProjectPanel } from './ProjectPanel.svelte';", ''].join('\n')
|
|
91
|
-
);
|
|
92
|
-
await writeFile(join(packageRoot, 'dist', 'project', 'ProjectPanel.svelte'), '<div class="project-root"></div>\n');
|
|
93
|
-
await writeFile(join(packageRoot, 'dist', 'project', 'theme.css'), '.project-theme { color: red; }\n');
|
|
94
|
-
await writeFile(join(packageRoot, 'testing', 'dist', 'ignored.ts'), 'export const ignored = true;\n');
|
|
95
|
-
|
|
96
|
-
process.chdir(repoRoot);
|
|
97
|
-
await main(['--packages', 'packages/*/package.json', '--exports', 'admin,project']);
|
|
98
|
-
|
|
99
|
-
const manifestContents = await readFile(join(packageRoot, 'dist', 'tailwind-sources.manifest.jsonc'), 'utf8');
|
|
100
|
-
const manifest = parseTailwindSourceManifest(manifestContents) as {
|
|
101
|
-
exports: Record<
|
|
102
|
-
string,
|
|
103
|
-
{
|
|
104
|
-
classes: string[];
|
|
105
|
-
sources: string[];
|
|
106
|
-
symbols?: Record<string, { classes: string[]; sources: string[] }>;
|
|
107
|
-
}
|
|
108
|
-
>;
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
expect(manifestContents).toContain(
|
|
112
|
-
'/* tailwind-manifest export "./project"; styles from: ./dist/project/theme.css */'
|
|
113
|
-
);
|
|
114
|
-
expect(manifestContents).toContain('/* tailwind-manifest symbol "AdminPanel"; styles from: inline-only */');
|
|
115
|
-
expect(Object.keys(manifest.exports)).toEqual(['./admin', './admin/overrides', './project']);
|
|
116
|
-
expect(manifest.exports['./admin']?.classes).toEqual(['admin-grid', 'gap-4']);
|
|
117
|
-
expect(manifest.exports['./admin']?.symbols?.AdminPanel?.classes).toEqual(['admin-grid', 'gap-4']);
|
|
118
|
-
expect(manifest.exports['./admin/overrides']?.classes).toEqual([
|
|
119
|
-
'override-flex',
|
|
120
|
-
'override-variant',
|
|
121
|
-
'px-2',
|
|
122
|
-
'rounded-md'
|
|
123
|
-
]);
|
|
124
|
-
expect(manifest.exports['./project']?.classes).toEqual(['project-root']);
|
|
125
|
-
expect(manifest.exports['./project']?.sources).toEqual(['./dist/project/theme.css']);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it('coerces legacy .json manifest overrides to .jsonc output', async () => {
|
|
129
|
-
const repoRoot = await createTempDirectory('tailwind-manifest-json-override-');
|
|
130
|
-
const packageRoot = join(repoRoot, 'package-a');
|
|
131
|
-
|
|
132
|
-
await mkdir(join(packageRoot, 'dist'), { recursive: true });
|
|
133
|
-
await writeJson(join(packageRoot, 'package.json'), {
|
|
134
|
-
name: 'package-a',
|
|
135
|
-
private: true,
|
|
136
|
-
type: 'module',
|
|
137
|
-
tailwindSources: './dist/custom-tailwind.manifest.json',
|
|
138
|
-
exports: {
|
|
139
|
-
'./panel': './dist/panel.svelte'
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
await writeFile(join(packageRoot, 'dist', 'panel.svelte'), '<div class="panel-root"></div>\n');
|
|
143
|
-
|
|
144
|
-
process.chdir(packageRoot);
|
|
145
|
-
await main([]);
|
|
146
|
-
|
|
147
|
-
const jsoncPath = join(packageRoot, 'dist', 'custom-tailwind.manifest.jsonc');
|
|
148
|
-
const manifestContents = await readFile(jsoncPath, 'utf8');
|
|
149
|
-
const manifest = parseTailwindSourceManifest(manifestContents);
|
|
150
|
-
|
|
151
|
-
expect(manifest.exports['./panel']?.classes).toEqual(['panel-root']);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('resolves emitted .js export specifiers back to .ts and .svelte.ts source files', async () => {
|
|
155
|
-
const repoRoot = await createTempDirectory('tailwind-manifest-emitted-js-');
|
|
156
|
-
const packageRoot = join(repoRoot, 'packages', 'modules', 'contact');
|
|
157
|
-
|
|
158
|
-
await mkdir(join(packageRoot, 'project', 'dist', 'contact', 'components'), { recursive: true });
|
|
159
|
-
await mkdir(join(packageRoot, 'dist'), { recursive: true });
|
|
160
|
-
|
|
161
|
-
await writeJson(join(packageRoot, 'package.json'), {
|
|
162
|
-
name: 'contact-module',
|
|
163
|
-
private: true,
|
|
164
|
-
type: 'module',
|
|
165
|
-
exports: {
|
|
166
|
-
'./project': './project/dist/index.ts'
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
await writeFile(
|
|
171
|
-
join(packageRoot, 'project', 'dist', 'index.ts'),
|
|
172
|
-
[
|
|
173
|
-
"export { contactClientApiRequest, contactClientForm } from './api.svelte.js';",
|
|
174
|
-
"export * from './contact/index.js';",
|
|
175
|
-
''
|
|
176
|
-
].join('\n')
|
|
177
|
-
);
|
|
178
|
-
await writeFile(
|
|
179
|
-
join(packageRoot, 'project', 'dist', 'api.svelte.ts'),
|
|
180
|
-
"export const contactClientForm = { class: 'api-form-inline' };\n"
|
|
181
|
-
);
|
|
182
|
-
await writeFile(
|
|
183
|
-
join(packageRoot, 'project', 'dist', 'contact', 'index.ts'),
|
|
184
|
-
[
|
|
185
|
-
"export { default as Contact } from './components/Contact.svelte';",
|
|
186
|
-
"export { default as ContactField } from './components/ContactField.svelte';",
|
|
187
|
-
''
|
|
188
|
-
].join('\n')
|
|
189
|
-
);
|
|
190
|
-
await writeFile(
|
|
191
|
-
join(packageRoot, 'project', 'dist', 'contact', 'components', 'Contact.svelte'),
|
|
192
|
-
'<div class="flex flex-col items-center gap-2"></div>\n'
|
|
193
|
-
);
|
|
194
|
-
await writeFile(
|
|
195
|
-
join(packageRoot, 'project', 'dist', 'contact', 'components', 'ContactField.svelte'),
|
|
196
|
-
'<div class="self-start w-full z-5"></div>\n'
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
process.chdir(packageRoot);
|
|
200
|
-
await main([]);
|
|
201
|
-
|
|
202
|
-
const manifestContents = await readFile(join(packageRoot, 'dist', 'tailwind-sources.manifest.jsonc'), 'utf8');
|
|
203
|
-
const manifest = parseTailwindSourceManifest(manifestContents) as {
|
|
204
|
-
exports: Record<
|
|
205
|
-
string,
|
|
206
|
-
{
|
|
207
|
-
classes: string[];
|
|
208
|
-
sources: string[];
|
|
209
|
-
symbols?: Record<string, { classes: string[]; sources: string[] }>;
|
|
210
|
-
}
|
|
211
|
-
>;
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
expect(manifest.exports['./project']?.classes).toEqual([
|
|
215
|
-
'api-form-inline',
|
|
216
|
-
'flex',
|
|
217
|
-
'flex-col',
|
|
218
|
-
'gap-2',
|
|
219
|
-
'items-center',
|
|
220
|
-
'self-start',
|
|
221
|
-
'w-full',
|
|
222
|
-
'z-5'
|
|
223
|
-
]);
|
|
224
|
-
expect(manifest.exports['./project']?.symbols?.contactClientForm?.classes).toEqual(['api-form-inline']);
|
|
225
|
-
expect(manifest.exports['./project']?.symbols?.Contact?.classes).toEqual([
|
|
226
|
-
'flex',
|
|
227
|
-
'flex-col',
|
|
228
|
-
'gap-2',
|
|
229
|
-
'items-center'
|
|
230
|
-
]);
|
|
231
|
-
expect(manifest.exports['./project']?.symbols?.ContactField?.classes).toEqual(['self-start', 'w-full', 'z-5']);
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
it('ignores class examples inside svelte comments when collecting manifest classes', async () => {
|
|
235
|
-
const repoRoot = await createTempDirectory('tailwind-manifest-svelte-comments-');
|
|
236
|
-
const packageRoot = join(repoRoot, 'package-a');
|
|
237
|
-
|
|
238
|
-
await mkdir(join(packageRoot, 'dist'), { recursive: true });
|
|
239
|
-
await writeJson(join(packageRoot, 'package.json'), {
|
|
240
|
-
name: 'package-a',
|
|
241
|
-
private: true,
|
|
242
|
-
type: 'module',
|
|
243
|
-
exports: {
|
|
244
|
-
'./field': './dist/Field.svelte'
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
await writeFile(
|
|
249
|
-
join(packageRoot, 'dist', 'Field.svelte'),
|
|
250
|
-
[
|
|
251
|
-
'<!--',
|
|
252
|
-
'```svelte',
|
|
253
|
-
'<Field class="z-5 w-full self-start" />',
|
|
254
|
-
'```',
|
|
255
|
-
'-->',
|
|
256
|
-
'<script lang="ts">',
|
|
257
|
-
' let className = "";',
|
|
258
|
-
'</script>',
|
|
259
|
-
'<div class={className}></div>',
|
|
260
|
-
'<div class="self-start"></div>',
|
|
261
|
-
''
|
|
262
|
-
].join('\n')
|
|
263
|
-
);
|
|
264
|
-
|
|
265
|
-
process.chdir(packageRoot);
|
|
266
|
-
await main([]);
|
|
267
|
-
|
|
268
|
-
const manifestContents = await readFile(join(packageRoot, 'dist', 'tailwind-sources.manifest.jsonc'), 'utf8');
|
|
269
|
-
const manifest = parseTailwindSourceManifest(manifestContents);
|
|
270
|
-
|
|
271
|
-
expect(manifest.exports['./field']?.classes).toEqual(['self-start']);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
it('collects any object properties whose names mention class from script files', async () => {
|
|
275
|
-
const repoRoot = await createTempDirectory('tailwind-manifest-icon-props-');
|
|
276
|
-
const packageRoot = join(repoRoot, 'package-a');
|
|
277
|
-
|
|
278
|
-
await mkdir(join(packageRoot, 'dist'), { recursive: true });
|
|
279
|
-
await writeJson(join(packageRoot, 'package.json'), {
|
|
280
|
-
name: 'package-a',
|
|
281
|
-
private: true,
|
|
282
|
-
type: 'module',
|
|
283
|
-
exports: {
|
|
284
|
-
'./admin': './dist/admin.ts'
|
|
285
|
-
}
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
await writeFile(
|
|
289
|
-
join(packageRoot, 'dist', 'admin.ts'),
|
|
290
|
-
[
|
|
291
|
-
"export const contrib = defineContrib('admin', {",
|
|
292
|
-
' headerItems: [',
|
|
293
|
-
" { title: 'Home', link: '/', iconClass: 'icon-[ic--round-home]' },",
|
|
294
|
-
" { title: 'Profile', link: '/profile/settings/', triggerClassName: 'icon-user icon-page' }",
|
|
295
|
-
' ]',
|
|
296
|
-
'});',
|
|
297
|
-
''
|
|
298
|
-
].join('\n')
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
process.chdir(packageRoot);
|
|
302
|
-
await main([]);
|
|
303
|
-
|
|
304
|
-
const manifestContents = await readFile(join(packageRoot, 'dist', 'tailwind-sources.manifest.jsonc'), 'utf8');
|
|
305
|
-
const manifest = parseTailwindSourceManifest(manifestContents);
|
|
306
|
-
|
|
307
|
-
expect(manifest.exports['./admin']?.classes).toEqual(['icon-[ic--round-home]', 'icon-page', 'icon-user']);
|
|
308
|
-
});
|
|
309
|
-
});
|