@vertz/create-vertz-app 0.2.9 → 0.2.11
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA+B/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAoBzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAc9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA6B1C;AAID;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAoBvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CASnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAe5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAgD7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA+B/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAoBzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAa5C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAc9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA6B1C;AAID;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAoBvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CASnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAe5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAgD7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAkIzC"}
|
package/dist/templates/index.js
CHANGED
|
@@ -317,9 +317,30 @@ export const themeGlobals = globals;
|
|
|
317
317
|
* src/pages/home.tsx — task list + create form with query + css
|
|
318
318
|
*/
|
|
319
319
|
export function homePageTemplate() {
|
|
320
|
-
return `import {
|
|
320
|
+
return `import {
|
|
321
|
+
ANIMATION_DURATION,
|
|
322
|
+
ANIMATION_EASING,
|
|
323
|
+
ListTransition,
|
|
324
|
+
css,
|
|
325
|
+
fadeOut,
|
|
326
|
+
globalCss,
|
|
327
|
+
query,
|
|
328
|
+
queryMatch,
|
|
329
|
+
slideInFromTop,
|
|
330
|
+
} from '@vertz/ui';
|
|
321
331
|
import { api } from '../client';
|
|
322
332
|
|
|
333
|
+
// Inject global CSS for list item enter/exit animations
|
|
334
|
+
void globalCss({
|
|
335
|
+
'[data-presence="enter"]': {
|
|
336
|
+
animation: \`\${slideInFromTop} \${ANIMATION_DURATION} \${ANIMATION_EASING}\`,
|
|
337
|
+
},
|
|
338
|
+
'[data-presence="exit"]': {
|
|
339
|
+
animation: \`\${fadeOut} \${ANIMATION_DURATION} \${ANIMATION_EASING}\`,
|
|
340
|
+
overflow: 'hidden',
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
|
|
323
344
|
const pageStyles = css({
|
|
324
345
|
container: ['py:2', 'w:full'],
|
|
325
346
|
heading: ['font:xl', 'font:bold', 'text:foreground', 'mb:4'],
|
|
@@ -408,11 +429,15 @@ export function HomePage() {
|
|
|
408
429
|
</div>
|
|
409
430
|
)}
|
|
410
431
|
<div data-testid="task-list" class={pageStyles.list}>
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
432
|
+
<ListTransition
|
|
433
|
+
each={response.items}
|
|
434
|
+
keyFn={(task) => task.id}
|
|
435
|
+
children={(task) => (
|
|
436
|
+
<div class={pageStyles.item}>
|
|
437
|
+
<span>{task.title}</span>
|
|
438
|
+
</div>
|
|
439
|
+
)}
|
|
440
|
+
/>
|
|
416
441
|
</div>
|
|
417
442
|
</>
|
|
418
443
|
),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"templates.test.d.ts","sourceRoot":"","sources":["../../../src/templates/__tests__/templates.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { appComponentTemplate, bunfigTemplate, bunPluginShimTemplate, clientTemplate, dbTemplate, entryClientTemplate, envExampleTemplate, envTemplate, gitignoreTemplate, homePageTemplate, packageJsonTemplate, schemaTemplate, serverTemplate, tasksEntityTemplate, themeTemplate, tsconfigTemplate, vertzConfigTemplate, } from '../index.js';
|
|
3
|
-
describe('templates', () => {
|
|
4
|
-
describe('packageJsonTemplate', () => {
|
|
5
|
-
it('returns valid JSON', () => {
|
|
6
|
-
const result = packageJsonTemplate('test-app');
|
|
7
|
-
expect(() => JSON.parse(result)).not.toThrow();
|
|
8
|
-
});
|
|
9
|
-
it('includes project name', () => {
|
|
10
|
-
const result = packageJsonTemplate('my-app');
|
|
11
|
-
const pkg = JSON.parse(result);
|
|
12
|
-
expect(pkg.name).toBe('my-app');
|
|
13
|
-
});
|
|
14
|
-
it('includes full-stack dependencies', () => {
|
|
15
|
-
const result = packageJsonTemplate('test-app');
|
|
16
|
-
const pkg = JSON.parse(result);
|
|
17
|
-
expect(pkg.dependencies['@vertz/server']).toBeDefined();
|
|
18
|
-
expect(pkg.dependencies['@vertz/db']).toBeDefined();
|
|
19
|
-
expect(pkg.dependencies['@vertz/ui']).toBeDefined();
|
|
20
|
-
expect(pkg.dependencies['@vertz/theme-shadcn']).toBeDefined();
|
|
21
|
-
});
|
|
22
|
-
it('includes dev dependencies', () => {
|
|
23
|
-
const result = packageJsonTemplate('test-app');
|
|
24
|
-
const pkg = JSON.parse(result);
|
|
25
|
-
expect(pkg.devDependencies['@vertz/cli']).toBeDefined();
|
|
26
|
-
expect(pkg.devDependencies['@vertz/ui-compiler']).toBeDefined();
|
|
27
|
-
expect(pkg.devDependencies['@vertz/ui-server']).toBeDefined();
|
|
28
|
-
expect(pkg.devDependencies['bun-types']).toBeDefined();
|
|
29
|
-
});
|
|
30
|
-
it('includes #generated imports map', () => {
|
|
31
|
-
const result = packageJsonTemplate('test-app');
|
|
32
|
-
const pkg = JSON.parse(result);
|
|
33
|
-
expect(pkg.imports['#generated']).toBe('./.vertz/generated/client.ts');
|
|
34
|
-
expect(pkg.imports['#generated/types']).toBe('./.vertz/generated/types/index.ts');
|
|
35
|
-
});
|
|
36
|
-
it('includes vertz dev/build/codegen scripts', () => {
|
|
37
|
-
const result = packageJsonTemplate('test-app');
|
|
38
|
-
const pkg = JSON.parse(result);
|
|
39
|
-
expect(pkg.scripts.dev).toBe('vertz dev');
|
|
40
|
-
expect(pkg.scripts.build).toBe('vertz build');
|
|
41
|
-
expect(pkg.scripts.codegen).toBe('vertz codegen');
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('tsconfigTemplate', () => {
|
|
45
|
-
it('returns valid JSON', () => {
|
|
46
|
-
const result = tsconfigTemplate();
|
|
47
|
-
expect(() => JSON.parse(result)).not.toThrow();
|
|
48
|
-
});
|
|
49
|
-
it('has strict mode enabled', () => {
|
|
50
|
-
const result = tsconfigTemplate();
|
|
51
|
-
const tsconfig = JSON.parse(result);
|
|
52
|
-
expect(tsconfig.compilerOptions.strict).toBe(true);
|
|
53
|
-
});
|
|
54
|
-
it('includes JSX config for @vertz/ui', () => {
|
|
55
|
-
const result = tsconfigTemplate();
|
|
56
|
-
const tsconfig = JSON.parse(result);
|
|
57
|
-
expect(tsconfig.compilerOptions.jsx).toBe('react-jsx');
|
|
58
|
-
expect(tsconfig.compilerOptions.jsxImportSource).toBe('@vertz/ui');
|
|
59
|
-
});
|
|
60
|
-
it('includes bun-types', () => {
|
|
61
|
-
const result = tsconfigTemplate();
|
|
62
|
-
const tsconfig = JSON.parse(result);
|
|
63
|
-
expect(tsconfig.compilerOptions.types).toContain('bun-types');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
describe('vertzConfigTemplate', () => {
|
|
67
|
-
it('exports a default config with compiler entry', () => {
|
|
68
|
-
const result = vertzConfigTemplate();
|
|
69
|
-
expect(result).toContain('export default');
|
|
70
|
-
expect(result).toContain("entryFile: 'src/api/server.ts'");
|
|
71
|
-
});
|
|
72
|
-
it('exports codegen config', () => {
|
|
73
|
-
const result = vertzConfigTemplate();
|
|
74
|
-
expect(result).toContain('export const codegen');
|
|
75
|
-
expect(result).toContain("generators: ['typescript']");
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('envTemplate', () => {
|
|
79
|
-
it('contains PORT=3000', () => {
|
|
80
|
-
expect(envTemplate()).toContain('PORT=3000');
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('envExampleTemplate', () => {
|
|
84
|
-
it('contains PORT=3000', () => {
|
|
85
|
-
expect(envExampleTemplate()).toContain('PORT=3000');
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('bunfigTemplate', () => {
|
|
89
|
-
it('registers bun-plugin-shim.ts under [serve.static]', () => {
|
|
90
|
-
const result = bunfigTemplate();
|
|
91
|
-
expect(result).toContain('[serve.static]');
|
|
92
|
-
expect(result).toContain('bun-plugin-shim.ts');
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
describe('bunPluginShimTemplate', () => {
|
|
96
|
-
it('imports createVertzBunPlugin from @vertz/ui-server/bun-plugin', () => {
|
|
97
|
-
const result = bunPluginShimTemplate();
|
|
98
|
-
expect(result).toContain("from '@vertz/ui-server/bun-plugin'");
|
|
99
|
-
expect(result).toContain('createVertzBunPlugin');
|
|
100
|
-
});
|
|
101
|
-
it('exports plugin as default', () => {
|
|
102
|
-
expect(bunPluginShimTemplate()).toContain('export default plugin');
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('gitignoreTemplate', () => {
|
|
106
|
-
it('includes standard entries', () => {
|
|
107
|
-
const result = gitignoreTemplate();
|
|
108
|
-
expect(result).toContain('node_modules');
|
|
109
|
-
expect(result).toContain('dist/');
|
|
110
|
-
expect(result).toContain('.vertz/');
|
|
111
|
-
expect(result).toContain('*.db');
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
describe('serverTemplate', () => {
|
|
115
|
-
it('uses createServer from @vertz/server', () => {
|
|
116
|
-
const result = serverTemplate();
|
|
117
|
-
expect(result).toContain("from '@vertz/server'");
|
|
118
|
-
expect(result).toContain('createServer');
|
|
119
|
-
});
|
|
120
|
-
it('exports default app', () => {
|
|
121
|
-
expect(serverTemplate()).toContain('export default app');
|
|
122
|
-
});
|
|
123
|
-
it('includes import.meta.main guard', () => {
|
|
124
|
-
expect(serverTemplate()).toContain('import.meta.main');
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
describe('schemaTemplate', () => {
|
|
128
|
-
it('defines tasks table with d.table', () => {
|
|
129
|
-
const result = schemaTemplate();
|
|
130
|
-
expect(result).toContain("d.table('tasks'");
|
|
131
|
-
expect(result).toContain('d.model(tasksTable)');
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
describe('dbTemplate', () => {
|
|
135
|
-
it('uses createSqliteAdapter', () => {
|
|
136
|
-
const result = dbTemplate();
|
|
137
|
-
expect(result).toContain('createSqliteAdapter');
|
|
138
|
-
expect(result).toContain('autoApply: true');
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
describe('tasksEntityTemplate', () => {
|
|
142
|
-
it('defines tasks entity with model and access', () => {
|
|
143
|
-
const result = tasksEntityTemplate();
|
|
144
|
-
expect(result).toContain("entity('tasks'");
|
|
145
|
-
expect(result).toContain('tasksModel');
|
|
146
|
-
expect(result).toContain('list: () => true');
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('clientTemplate', () => {
|
|
150
|
-
it('uses #generated imports', () => {
|
|
151
|
-
const result = clientTemplate();
|
|
152
|
-
expect(result).toContain("from '#generated'");
|
|
153
|
-
expect(result).toContain("from '#generated/types'");
|
|
154
|
-
expect(result).toContain('createClient');
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe('appComponentTemplate', () => {
|
|
158
|
-
it('exports getInjectedCSS for SSR', () => {
|
|
159
|
-
expect(appComponentTemplate()).toContain('getInjectedCSS');
|
|
160
|
-
});
|
|
161
|
-
it('uses ThemeProvider', () => {
|
|
162
|
-
expect(appComponentTemplate()).toContain('ThemeProvider');
|
|
163
|
-
});
|
|
164
|
-
it('renders HomePage', () => {
|
|
165
|
-
expect(appComponentTemplate()).toContain('HomePage');
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
describe('entryClientTemplate', () => {
|
|
169
|
-
it('uses mount from @vertz/ui', () => {
|
|
170
|
-
expect(entryClientTemplate()).toContain('mount');
|
|
171
|
-
});
|
|
172
|
-
it('includes HMR self-accept', () => {
|
|
173
|
-
expect(entryClientTemplate()).toContain('import.meta.hot.accept()');
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
describe('themeTemplate', () => {
|
|
177
|
-
it('uses configureTheme from @vertz/theme-shadcn', () => {
|
|
178
|
-
const result = themeTemplate();
|
|
179
|
-
expect(result).toContain('configureTheme');
|
|
180
|
-
expect(result).toContain("from '@vertz/theme-shadcn'");
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
describe('homePageTemplate', () => {
|
|
184
|
-
it('uses query and queryMatch', () => {
|
|
185
|
-
const result = homePageTemplate();
|
|
186
|
-
expect(result).toContain('query');
|
|
187
|
-
expect(result).toContain('queryMatch');
|
|
188
|
-
});
|
|
189
|
-
it('uses api.tasks', () => {
|
|
190
|
-
expect(homePageTemplate()).toContain('api.tasks');
|
|
191
|
-
});
|
|
192
|
-
it('exports HomePage component', () => {
|
|
193
|
-
expect(homePageTemplate()).toContain('export function HomePage()');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
describe('all templates return non-empty strings', () => {
|
|
197
|
-
it('every template function returns a non-empty string', () => {
|
|
198
|
-
const templates = [
|
|
199
|
-
() => packageJsonTemplate('test'),
|
|
200
|
-
tsconfigTemplate,
|
|
201
|
-
vertzConfigTemplate,
|
|
202
|
-
envTemplate,
|
|
203
|
-
envExampleTemplate,
|
|
204
|
-
gitignoreTemplate,
|
|
205
|
-
bunfigTemplate,
|
|
206
|
-
bunPluginShimTemplate,
|
|
207
|
-
serverTemplate,
|
|
208
|
-
schemaTemplate,
|
|
209
|
-
dbTemplate,
|
|
210
|
-
tasksEntityTemplate,
|
|
211
|
-
clientTemplate,
|
|
212
|
-
appComponentTemplate,
|
|
213
|
-
entryClientTemplate,
|
|
214
|
-
themeTemplate,
|
|
215
|
-
homePageTemplate,
|
|
216
|
-
];
|
|
217
|
-
for (const template of templates) {
|
|
218
|
-
const result = template();
|
|
219
|
-
expect(result.length).toBeGreaterThan(0);
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
});
|