@vertz/create-vertz-app 0.2.0 → 0.2.2
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/bin/create-vertz-app.ts +21 -53
- package/dist/prompts.d.ts +1 -15
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +1 -83
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +33 -30
- package/dist/templates/__tests__/templates.test.js +119 -158
- package/dist/templates/index.d.ts +23 -32
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +276 -197
- package/dist/types.d.ts +0 -12
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,237 +1,198 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { appComponentTemplate, clientTemplate, dbTemplate, entryClientTemplate, envExampleTemplate, envTemplate, gitignoreTemplate, homePageTemplate, packageJsonTemplate, schemaTemplate, serverTemplate, tasksEntityTemplate, themeTemplate, tsconfigTemplate, vertzConfigTemplate, } from '../index.js';
|
|
3
3
|
describe('templates', () => {
|
|
4
4
|
describe('packageJsonTemplate', () => {
|
|
5
5
|
it('returns valid JSON', () => {
|
|
6
|
-
const result = packageJsonTemplate(
|
|
6
|
+
const result = packageJsonTemplate('test-app');
|
|
7
7
|
expect(() => JSON.parse(result)).not.toThrow();
|
|
8
8
|
});
|
|
9
9
|
it('includes project name', () => {
|
|
10
|
-
const result = packageJsonTemplate(
|
|
10
|
+
const result = packageJsonTemplate('my-app');
|
|
11
11
|
const pkg = JSON.parse(result);
|
|
12
12
|
expect(pkg.name).toBe('my-app');
|
|
13
13
|
});
|
|
14
|
-
it('includes
|
|
15
|
-
const result = packageJsonTemplate(
|
|
14
|
+
it('includes full-stack dependencies', () => {
|
|
15
|
+
const result = packageJsonTemplate('test-app');
|
|
16
16
|
const pkg = JSON.parse(result);
|
|
17
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();
|
|
18
21
|
});
|
|
19
|
-
it('includes
|
|
20
|
-
const result = packageJsonTemplate(
|
|
22
|
+
it('includes dev dependencies', () => {
|
|
23
|
+
const result = packageJsonTemplate('test-app');
|
|
21
24
|
const pkg = JSON.parse(result);
|
|
22
25
|
expect(pkg.devDependencies['@vertz/cli']).toBeDefined();
|
|
26
|
+
expect(pkg.devDependencies['@vertz/ui-compiler']).toBeDefined();
|
|
27
|
+
expect(pkg.devDependencies['bun-types']).toBeDefined();
|
|
23
28
|
});
|
|
24
|
-
it('includes
|
|
25
|
-
const result = packageJsonTemplate(
|
|
29
|
+
it('includes #generated imports map', () => {
|
|
30
|
+
const result = packageJsonTemplate('test-app');
|
|
26
31
|
const pkg = JSON.parse(result);
|
|
27
|
-
expect(pkg.
|
|
28
|
-
expect(pkg.
|
|
29
|
-
expect(pkg.scripts.check).toBeDefined();
|
|
32
|
+
expect(pkg.imports['#generated']).toBe('./.vertz/generated/client.ts');
|
|
33
|
+
expect(pkg.imports['#generated/types']).toBe('./.vertz/generated/types/index.ts');
|
|
30
34
|
});
|
|
31
|
-
it('
|
|
32
|
-
const result = packageJsonTemplate(
|
|
35
|
+
it('includes vertz dev/build/codegen scripts', () => {
|
|
36
|
+
const result = packageJsonTemplate('test-app');
|
|
33
37
|
const pkg = JSON.parse(result);
|
|
34
|
-
expect(pkg.scripts.dev).
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const result = packageJsonTemplate({ projectName: 'test-app', runtime: 'node' });
|
|
38
|
-
const pkg = JSON.parse(result);
|
|
39
|
-
expect(pkg.scripts.dev).toContain('tsx');
|
|
40
|
-
expect(pkg.dependencies.tsx).toBeDefined();
|
|
41
|
-
});
|
|
42
|
-
// Tests for runtime-specific type dependencies
|
|
43
|
-
describe('runtime-specific type dependencies', () => {
|
|
44
|
-
it('adds bun-types to devDependencies for bun runtime', () => {
|
|
45
|
-
const result = packageJsonTemplate({ projectName: 'test-app', runtime: 'bun' });
|
|
46
|
-
const pkg = JSON.parse(result);
|
|
47
|
-
expect(pkg.devDependencies['bun-types']).toBeDefined();
|
|
48
|
-
expect(pkg.devDependencies['bun-types']).toMatch(/^\^1\./);
|
|
49
|
-
});
|
|
50
|
-
it('adds @types/node to devDependencies for node runtime', () => {
|
|
51
|
-
const result = packageJsonTemplate({ projectName: 'test-app', runtime: 'node' });
|
|
52
|
-
const pkg = JSON.parse(result);
|
|
53
|
-
expect(pkg.devDependencies['@types/node']).toBeDefined();
|
|
54
|
-
expect(pkg.devDependencies['@types/node']).toMatch(/^\^20\./);
|
|
55
|
-
});
|
|
56
|
-
it('does not add type packages for deno runtime', () => {
|
|
57
|
-
const result = packageJsonTemplate({ projectName: 'test-app', runtime: 'deno' });
|
|
58
|
-
const pkg = JSON.parse(result);
|
|
59
|
-
expect(pkg.devDependencies['bun-types']).toBeUndefined();
|
|
60
|
-
expect(pkg.devDependencies['@types/node']).toBeUndefined();
|
|
61
|
-
});
|
|
38
|
+
expect(pkg.scripts.dev).toBe('vertz dev');
|
|
39
|
+
expect(pkg.scripts.build).toBe('vertz build');
|
|
40
|
+
expect(pkg.scripts.codegen).toBe('vertz codegen');
|
|
62
41
|
});
|
|
63
42
|
});
|
|
64
43
|
describe('tsconfigTemplate', () => {
|
|
65
44
|
it('returns valid JSON', () => {
|
|
66
|
-
const result = tsconfigTemplate(
|
|
45
|
+
const result = tsconfigTemplate();
|
|
67
46
|
expect(() => JSON.parse(result)).not.toThrow();
|
|
68
47
|
});
|
|
69
48
|
it('has strict mode enabled', () => {
|
|
70
|
-
const result = tsconfigTemplate(
|
|
49
|
+
const result = tsconfigTemplate();
|
|
71
50
|
const tsconfig = JSON.parse(result);
|
|
72
51
|
expect(tsconfig.compilerOptions.strict).toBe(true);
|
|
73
52
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
expect(tsconfig.compilerOptions.types).toContain('node');
|
|
85
|
-
expect(tsconfig.compilerOptions.types).not.toContain('bun-types');
|
|
86
|
-
});
|
|
87
|
-
it('has empty types array for deno runtime', () => {
|
|
88
|
-
const result = tsconfigTemplate('deno');
|
|
89
|
-
const tsconfig = JSON.parse(result);
|
|
90
|
-
// Deno has built-in types, so types should be empty or undefined
|
|
91
|
-
expect(tsconfig.compilerOptions.types).toEqual([]);
|
|
92
|
-
});
|
|
53
|
+
it('includes JSX config for @vertz/ui', () => {
|
|
54
|
+
const result = tsconfigTemplate();
|
|
55
|
+
const tsconfig = JSON.parse(result);
|
|
56
|
+
expect(tsconfig.compilerOptions.jsx).toBe('react-jsx');
|
|
57
|
+
expect(tsconfig.compilerOptions.jsxImportSource).toBe('@vertz/ui');
|
|
58
|
+
});
|
|
59
|
+
it('includes bun-types', () => {
|
|
60
|
+
const result = tsconfigTemplate();
|
|
61
|
+
const tsconfig = JSON.parse(result);
|
|
62
|
+
expect(tsconfig.compilerOptions.types).toContain('bun-types');
|
|
93
63
|
});
|
|
94
64
|
});
|
|
95
65
|
describe('vertzConfigTemplate', () => {
|
|
96
|
-
it('
|
|
66
|
+
it('exports a default config with compiler entry', () => {
|
|
97
67
|
const result = vertzConfigTemplate();
|
|
98
|
-
expect(result
|
|
68
|
+
expect(result).toContain('export default');
|
|
69
|
+
expect(result).toContain("entryFile: 'src/api/server.ts'");
|
|
99
70
|
});
|
|
100
|
-
it('exports
|
|
71
|
+
it('exports codegen config', () => {
|
|
101
72
|
const result = vertzConfigTemplate();
|
|
102
|
-
expect(result).toContain('export
|
|
73
|
+
expect(result).toContain('export const codegen');
|
|
74
|
+
expect(result).toContain("generators: ['typescript']");
|
|
103
75
|
});
|
|
104
76
|
});
|
|
105
77
|
describe('envTemplate', () => {
|
|
106
|
-
it('
|
|
107
|
-
|
|
108
|
-
expect(result.length).toBeGreaterThan(0);
|
|
109
|
-
});
|
|
110
|
-
it('includes DATABASE_URL placeholder', () => {
|
|
111
|
-
const result = envTemplate();
|
|
112
|
-
expect(result).toContain('DATABASE_URL=');
|
|
78
|
+
it('contains PORT=3000', () => {
|
|
79
|
+
expect(envTemplate()).toContain('PORT=3000');
|
|
113
80
|
});
|
|
114
81
|
});
|
|
115
82
|
describe('envExampleTemplate', () => {
|
|
116
|
-
it('
|
|
117
|
-
|
|
118
|
-
expect(result.length).toBeGreaterThan(0);
|
|
119
|
-
});
|
|
120
|
-
it('matches env template structure', () => {
|
|
121
|
-
const result = envExampleTemplate();
|
|
122
|
-
expect(result).toContain('DATABASE_URL=');
|
|
83
|
+
it('contains PORT=3000', () => {
|
|
84
|
+
expect(envExampleTemplate()).toContain('PORT=3000');
|
|
123
85
|
});
|
|
124
86
|
});
|
|
125
87
|
describe('gitignoreTemplate', () => {
|
|
126
|
-
it('
|
|
127
|
-
const result = gitignoreTemplate();
|
|
128
|
-
expect(result.length).toBeGreaterThan(0);
|
|
129
|
-
});
|
|
130
|
-
it('includes node_modules', () => {
|
|
88
|
+
it('includes standard entries', () => {
|
|
131
89
|
const result = gitignoreTemplate();
|
|
132
90
|
expect(result).toContain('node_modules');
|
|
133
|
-
});
|
|
134
|
-
it('includes dist/', () => {
|
|
135
|
-
const result = gitignoreTemplate();
|
|
136
91
|
expect(result).toContain('dist/');
|
|
92
|
+
expect(result).toContain('.vertz/');
|
|
93
|
+
expect(result).toContain('*.db');
|
|
137
94
|
});
|
|
138
95
|
});
|
|
139
|
-
describe('
|
|
140
|
-
it('
|
|
141
|
-
const result =
|
|
142
|
-
expect(result
|
|
143
|
-
|
|
144
|
-
it('uses envsafe for validation', () => {
|
|
145
|
-
const result = envSrcTemplate();
|
|
146
|
-
expect(result).toContain('envsafe');
|
|
96
|
+
describe('serverTemplate', () => {
|
|
97
|
+
it('uses createServer from @vertz/server', () => {
|
|
98
|
+
const result = serverTemplate();
|
|
99
|
+
expect(result).toContain("from '@vertz/server'");
|
|
100
|
+
expect(result).toContain('createServer');
|
|
147
101
|
});
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
it('returns non-empty string', () => {
|
|
151
|
-
const result = appTemplate(true);
|
|
152
|
-
expect(result.length).toBeGreaterThan(0);
|
|
102
|
+
it('exports default app', () => {
|
|
103
|
+
expect(serverTemplate()).toContain('export default app');
|
|
153
104
|
});
|
|
154
|
-
it('
|
|
155
|
-
|
|
156
|
-
expect(result).toContain('createServer');
|
|
105
|
+
it('includes import.meta.main guard', () => {
|
|
106
|
+
expect(serverTemplate()).toContain('import.meta.main');
|
|
157
107
|
});
|
|
158
108
|
});
|
|
159
|
-
describe('
|
|
160
|
-
it('
|
|
161
|
-
const result =
|
|
162
|
-
expect(result
|
|
109
|
+
describe('schemaTemplate', () => {
|
|
110
|
+
it('defines tasks table with d.table', () => {
|
|
111
|
+
const result = schemaTemplate();
|
|
112
|
+
expect(result).toContain("d.table('tasks'");
|
|
113
|
+
expect(result).toContain('d.model(tasksTable)');
|
|
163
114
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
115
|
+
});
|
|
116
|
+
describe('dbTemplate', () => {
|
|
117
|
+
it('uses createSqliteAdapter', () => {
|
|
118
|
+
const result = dbTemplate();
|
|
119
|
+
expect(result).toContain('createSqliteAdapter');
|
|
120
|
+
expect(result).toContain('autoApply: true');
|
|
167
121
|
});
|
|
168
122
|
});
|
|
169
|
-
describe('
|
|
170
|
-
it('
|
|
171
|
-
const result =
|
|
172
|
-
expect(result
|
|
123
|
+
describe('tasksEntityTemplate', () => {
|
|
124
|
+
it('defines tasks entity with model and access', () => {
|
|
125
|
+
const result = tasksEntityTemplate();
|
|
126
|
+
expect(result).toContain("entity('tasks'");
|
|
127
|
+
expect(result).toContain('tasksModel');
|
|
128
|
+
expect(result).toContain('list: () => true');
|
|
173
129
|
});
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
130
|
+
});
|
|
131
|
+
describe('clientTemplate', () => {
|
|
132
|
+
it('uses #generated imports', () => {
|
|
133
|
+
const result = clientTemplate();
|
|
134
|
+
expect(result).toContain("from '#generated'");
|
|
135
|
+
expect(result).toContain("from '#generated/types'");
|
|
136
|
+
expect(result).toContain('createClient');
|
|
177
137
|
});
|
|
178
138
|
});
|
|
179
|
-
describe('
|
|
180
|
-
it('
|
|
181
|
-
|
|
182
|
-
expect(result.length).toBeGreaterThan(0);
|
|
139
|
+
describe('appComponentTemplate', () => {
|
|
140
|
+
it('exports getInjectedCSS for SSR', () => {
|
|
141
|
+
expect(appComponentTemplate()).toContain('getInjectedCSS');
|
|
183
142
|
});
|
|
184
|
-
it('
|
|
185
|
-
|
|
186
|
-
expect(result.length).toBeGreaterThan(0);
|
|
143
|
+
it('uses ThemeProvider', () => {
|
|
144
|
+
expect(appComponentTemplate()).toContain('ThemeProvider');
|
|
187
145
|
});
|
|
188
|
-
it('
|
|
189
|
-
|
|
190
|
-
expect(result.length).toBeGreaterThan(0);
|
|
146
|
+
it('renders HomePage', () => {
|
|
147
|
+
expect(appComponentTemplate()).toContain('HomePage');
|
|
191
148
|
});
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
149
|
+
});
|
|
150
|
+
describe('entryClientTemplate', () => {
|
|
151
|
+
it('uses mount from @vertz/ui', () => {
|
|
152
|
+
expect(entryClientTemplate()).toContain('mount');
|
|
195
153
|
});
|
|
196
|
-
it('
|
|
197
|
-
|
|
198
|
-
expect(result.length).toBeGreaterThan(0);
|
|
154
|
+
it('includes HMR self-accept', () => {
|
|
155
|
+
expect(entryClientTemplate()).toContain('import.meta.hot.accept()');
|
|
199
156
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
157
|
+
});
|
|
158
|
+
describe('themeTemplate', () => {
|
|
159
|
+
it('uses configureTheme from @vertz/theme-shadcn', () => {
|
|
160
|
+
const result = themeTemplate();
|
|
161
|
+
expect(result).toContain('configureTheme');
|
|
162
|
+
expect(result).toContain("from '@vertz/theme-shadcn'");
|
|
203
163
|
});
|
|
204
164
|
});
|
|
205
|
-
describe('
|
|
206
|
-
it('
|
|
207
|
-
const result =
|
|
208
|
-
expect(
|
|
165
|
+
describe('homePageTemplate', () => {
|
|
166
|
+
it('uses query and queryMatch', () => {
|
|
167
|
+
const result = homePageTemplate();
|
|
168
|
+
expect(result).toContain('query');
|
|
169
|
+
expect(result).toContain('queryMatch');
|
|
170
|
+
});
|
|
171
|
+
it('uses api.tasks', () => {
|
|
172
|
+
expect(homePageTemplate()).toContain('api.tasks');
|
|
209
173
|
});
|
|
210
|
-
it('
|
|
211
|
-
|
|
212
|
-
const config = JSON.parse(result);
|
|
213
|
-
expect(config.imports).toBeDefined();
|
|
174
|
+
it('exports HomePage component', () => {
|
|
175
|
+
expect(homePageTemplate()).toContain('export function HomePage()');
|
|
214
176
|
});
|
|
215
177
|
});
|
|
216
178
|
describe('all templates return non-empty strings', () => {
|
|
217
179
|
it('every template function returns a non-empty string', () => {
|
|
218
180
|
const templates = [
|
|
219
|
-
() => packageJsonTemplate(
|
|
220
|
-
|
|
181
|
+
() => packageJsonTemplate('test'),
|
|
182
|
+
tsconfigTemplate,
|
|
221
183
|
vertzConfigTemplate,
|
|
222
184
|
envTemplate,
|
|
223
185
|
envExampleTemplate,
|
|
224
186
|
gitignoreTemplate,
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
denoConfigTemplate,
|
|
187
|
+
serverTemplate,
|
|
188
|
+
schemaTemplate,
|
|
189
|
+
dbTemplate,
|
|
190
|
+
tasksEntityTemplate,
|
|
191
|
+
clientTemplate,
|
|
192
|
+
appComponentTemplate,
|
|
193
|
+
entryClientTemplate,
|
|
194
|
+
themeTemplate,
|
|
195
|
+
homePageTemplate,
|
|
235
196
|
];
|
|
236
197
|
for (const template of templates) {
|
|
237
198
|
const result = template();
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import type { Runtime } from '../types.js';
|
|
2
1
|
/**
|
|
3
|
-
* Package.json template
|
|
2
|
+
* Package.json template — full-stack deps + #generated imports map
|
|
4
3
|
*/
|
|
5
|
-
export declare function packageJsonTemplate(
|
|
6
|
-
projectName: string;
|
|
7
|
-
runtime: Runtime;
|
|
8
|
-
includeExample?: boolean;
|
|
9
|
-
}): string;
|
|
4
|
+
export declare function packageJsonTemplate(projectName: string): string;
|
|
10
5
|
/**
|
|
11
|
-
* Tsconfig.json template
|
|
6
|
+
* Tsconfig.json template — JSX config for @vertz/ui
|
|
12
7
|
*/
|
|
13
|
-
export declare function tsconfigTemplate(
|
|
8
|
+
export declare function tsconfigTemplate(): string;
|
|
14
9
|
/**
|
|
15
|
-
* vertz.config.ts template
|
|
10
|
+
* vertz.config.ts template — compiler entry + codegen config
|
|
16
11
|
*/
|
|
17
12
|
export declare function vertzConfigTemplate(): string;
|
|
18
13
|
/**
|
|
@@ -28,43 +23,39 @@ export declare function envExampleTemplate(): string;
|
|
|
28
23
|
*/
|
|
29
24
|
export declare function gitignoreTemplate(): string;
|
|
30
25
|
/**
|
|
31
|
-
* src/
|
|
26
|
+
* src/api/server.ts — createServer with entities + db
|
|
32
27
|
*/
|
|
33
|
-
export declare function
|
|
28
|
+
export declare function serverTemplate(): string;
|
|
34
29
|
/**
|
|
35
|
-
* src/
|
|
30
|
+
* src/api/schema.ts — tasks table + model
|
|
36
31
|
*/
|
|
37
|
-
export declare function
|
|
32
|
+
export declare function schemaTemplate(): string;
|
|
38
33
|
/**
|
|
39
|
-
* src/
|
|
34
|
+
* src/api/db.ts — createSqliteAdapter with autoApply migrations
|
|
40
35
|
*/
|
|
41
|
-
export declare function
|
|
36
|
+
export declare function dbTemplate(): string;
|
|
42
37
|
/**
|
|
43
|
-
* src/
|
|
38
|
+
* src/api/entities/tasks.entity.ts — entity with CRUD access
|
|
44
39
|
*/
|
|
45
|
-
export declare function
|
|
40
|
+
export declare function tasksEntityTemplate(): string;
|
|
46
41
|
/**
|
|
47
|
-
* src/
|
|
42
|
+
* src/client.ts — #generated imports + type re-export
|
|
48
43
|
*/
|
|
49
|
-
export declare function
|
|
44
|
+
export declare function clientTemplate(): string;
|
|
50
45
|
/**
|
|
51
|
-
* src/
|
|
46
|
+
* src/app.tsx — SSR module exports + ThemeProvider + render HomePage
|
|
52
47
|
*/
|
|
53
|
-
export declare function
|
|
48
|
+
export declare function appComponentTemplate(): string;
|
|
54
49
|
/**
|
|
55
|
-
* src/
|
|
50
|
+
* src/entry-client.ts — mount + HMR self-accept
|
|
56
51
|
*/
|
|
57
|
-
export declare function
|
|
52
|
+
export declare function entryClientTemplate(): string;
|
|
58
53
|
/**
|
|
59
|
-
* src/
|
|
54
|
+
* src/styles/theme.ts — configureTheme from @vertz/theme-shadcn
|
|
60
55
|
*/
|
|
61
|
-
export declare function
|
|
56
|
+
export declare function themeTemplate(): string;
|
|
62
57
|
/**
|
|
63
|
-
* src/
|
|
58
|
+
* src/pages/home.tsx — task list + create form with query + css
|
|
64
59
|
*/
|
|
65
|
-
export declare function
|
|
66
|
-
/**
|
|
67
|
-
* deno.json template for Deno runtime
|
|
68
|
-
*/
|
|
69
|
-
export declare function denoConfigTemplate(): string;
|
|
60
|
+
export declare function homePageTemplate(): string;
|
|
70
61
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"
|
|
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,CA8B/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,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,CAyGzC"}
|