@veloxts/cli 0.4.14 → 0.6.23
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 +2 -48
- package/dist/cli.d.ts +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +71 -7
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/introspect.d.ts +16 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +559 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +18 -8
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/procedures.d.ts.map +1 -1
- package/dist/commands/procedures.js +16 -0
- package/dist/commands/procedures.js.map +1 -1
- package/dist/dev/error-parser.d.ts.map +1 -1
- package/dist/dev/error-parser.js +24 -8
- package/dist/dev/error-parser.js.map +1 -1
- package/dist/dev/hmr-runner.d.ts.map +1 -1
- package/dist/dev/hmr-runner.js +6 -1
- package/dist/dev/hmr-runner.js.map +1 -1
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/index.d.ts.map +1 -1
- package/dist/dev/index.js +3 -3
- package/dist/dev/index.js.map +1 -1
- package/dist/dev/reload-reporter.d.ts +2 -2
- package/dist/dev/reload-reporter.d.ts.map +1 -1
- package/dist/dev/reload-reporter.js +2 -2
- package/dist/dev/reload-reporter.js.map +1 -1
- package/dist/errors/catalog.d.ts +48 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/catalog.js +421 -0
- package/dist/errors/catalog.js.map +1 -0
- package/dist/errors/index.d.ts +26 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +28 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/velox-error.d.ts +122 -0
- package/dist/errors/velox-error.d.ts.map +1 -0
- package/dist/errors/velox-error.js +216 -0
- package/dist/errors/velox-error.js.map +1 -0
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +26 -0
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
- package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
- package/dist/generators/fields/__tests__/helpers.js +142 -0
- package/dist/generators/fields/__tests__/helpers.js.map +1 -0
- package/dist/generators/fields/actions.d.ts +58 -0
- package/dist/generators/fields/actions.d.ts.map +1 -0
- package/dist/generators/fields/actions.js +230 -0
- package/dist/generators/fields/actions.js.map +1 -0
- package/dist/generators/fields/display.d.ts +28 -0
- package/dist/generators/fields/display.d.ts.map +1 -0
- package/dist/generators/fields/display.js +214 -0
- package/dist/generators/fields/display.js.map +1 -0
- package/dist/generators/fields/index.d.ts +12 -0
- package/dist/generators/fields/index.d.ts.map +1 -0
- package/dist/generators/fields/index.js +12 -0
- package/dist/generators/fields/index.js.map +1 -0
- package/dist/generators/fields/prompts.d.ts +31 -0
- package/dist/generators/fields/prompts.d.ts.map +1 -0
- package/dist/generators/fields/prompts.js +366 -0
- package/dist/generators/fields/prompts.js.map +1 -0
- package/dist/generators/fields/templates.d.ts +49 -0
- package/dist/generators/fields/templates.d.ts.map +1 -0
- package/dist/generators/fields/templates.js +230 -0
- package/dist/generators/fields/templates.js.map +1 -0
- package/dist/generators/fields/types.d.ts +95 -0
- package/dist/generators/fields/types.d.ts.map +1 -0
- package/dist/generators/fields/types.js +150 -0
- package/dist/generators/fields/types.js.map +1 -0
- package/dist/generators/generators/action.d.ts +37 -0
- package/dist/generators/generators/action.d.ts.map +1 -0
- package/dist/generators/generators/action.js +109 -0
- package/dist/generators/generators/action.js.map +1 -0
- package/dist/generators/generators/exception.d.ts +38 -0
- package/dist/generators/generators/exception.d.ts.map +1 -0
- package/dist/generators/generators/exception.js +109 -0
- package/dist/generators/generators/exception.js.map +1 -0
- package/dist/generators/generators/guard.d.ts +38 -0
- package/dist/generators/generators/guard.d.ts.map +1 -0
- package/dist/generators/generators/guard.js +109 -0
- package/dist/generators/generators/guard.js.map +1 -0
- package/dist/generators/generators/index.d.ts +8 -0
- package/dist/generators/generators/index.d.ts.map +1 -1
- package/dist/generators/generators/index.js +27 -0
- package/dist/generators/generators/index.js.map +1 -1
- package/dist/generators/generators/layout.d.ts +36 -0
- package/dist/generators/generators/layout.d.ts.map +1 -0
- package/dist/generators/generators/layout.js +111 -0
- package/dist/generators/generators/layout.js.map +1 -0
- package/dist/generators/generators/middleware.d.ts +38 -0
- package/dist/generators/generators/middleware.d.ts.map +1 -0
- package/dist/generators/generators/middleware.js +109 -0
- package/dist/generators/generators/middleware.js.map +1 -0
- package/dist/generators/generators/model.d.ts +16 -4
- package/dist/generators/generators/model.d.ts.map +1 -1
- package/dist/generators/generators/model.js +88 -7
- package/dist/generators/generators/model.js.map +1 -1
- package/dist/generators/generators/page.d.ts +36 -0
- package/dist/generators/generators/page.d.ts.map +1 -0
- package/dist/generators/generators/page.js +112 -0
- package/dist/generators/generators/page.js.map +1 -0
- package/dist/generators/generators/policy.d.ts +37 -0
- package/dist/generators/generators/policy.d.ts.map +1 -0
- package/dist/generators/generators/policy.js +100 -0
- package/dist/generators/generators/policy.js.map +1 -0
- package/dist/generators/generators/resource.d.ts +42 -4
- package/dist/generators/generators/resource.d.ts.map +1 -1
- package/dist/generators/generators/resource.js +450 -9
- package/dist/generators/generators/resource.js.map +1 -1
- package/dist/generators/generators/service.d.ts +38 -0
- package/dist/generators/generators/service.d.ts.map +1 -0
- package/dist/generators/generators/service.js +109 -0
- package/dist/generators/generators/service.js.map +1 -0
- package/dist/generators/registry.d.ts.map +1 -1
- package/dist/generators/registry.js +10 -1
- package/dist/generators/registry.js.map +1 -1
- package/dist/generators/templates/action.d.ts +28 -0
- package/dist/generators/templates/action.d.ts.map +1 -0
- package/dist/generators/templates/action.js +359 -0
- package/dist/generators/templates/action.js.map +1 -0
- package/dist/generators/templates/exception.d.ts +26 -0
- package/dist/generators/templates/exception.d.ts.map +1 -0
- package/dist/generators/templates/exception.js +671 -0
- package/dist/generators/templates/exception.js.map +1 -0
- package/dist/generators/templates/guard.d.ts +26 -0
- package/dist/generators/templates/guard.d.ts.map +1 -0
- package/dist/generators/templates/guard.js +555 -0
- package/dist/generators/templates/guard.js.map +1 -0
- package/dist/generators/templates/layout.d.ts +28 -0
- package/dist/generators/templates/layout.d.ts.map +1 -0
- package/dist/generators/templates/layout.js +147 -0
- package/dist/generators/templates/layout.js.map +1 -0
- package/dist/generators/templates/middleware.d.ts +26 -0
- package/dist/generators/templates/middleware.d.ts.map +1 -0
- package/dist/generators/templates/middleware.js +411 -0
- package/dist/generators/templates/middleware.js.map +1 -0
- package/dist/generators/templates/model.d.ts +3 -0
- package/dist/generators/templates/model.d.ts.map +1 -1
- package/dist/generators/templates/model.js +183 -28
- package/dist/generators/templates/model.js.map +1 -1
- package/dist/generators/templates/page.d.ts +36 -0
- package/dist/generators/templates/page.d.ts.map +1 -0
- package/dist/generators/templates/page.js +147 -0
- package/dist/generators/templates/page.js.map +1 -0
- package/dist/generators/templates/policy.d.ts +24 -0
- package/dist/generators/templates/policy.d.ts.map +1 -0
- package/dist/generators/templates/policy.js +499 -0
- package/dist/generators/templates/policy.js.map +1 -0
- package/dist/generators/templates/resource.d.ts +65 -0
- package/dist/generators/templates/resource.d.ts.map +1 -1
- package/dist/generators/templates/resource.js +228 -43
- package/dist/generators/templates/resource.js.map +1 -1
- package/dist/generators/templates/service.d.ts +26 -0
- package/dist/generators/templates/service.d.ts.map +1 -0
- package/dist/generators/templates/service.js +511 -0
- package/dist/generators/templates/service.js.map +1 -0
- package/dist/generators/types.d.ts +26 -14
- package/dist/generators/types.d.ts.map +1 -1
- package/dist/generators/types.js +8 -25
- package/dist/generators/types.js.map +1 -1
- package/dist/generators/utils/ast-helpers.d.ts +147 -0
- package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
- package/dist/generators/utils/ast-helpers.js +350 -0
- package/dist/generators/utils/ast-helpers.js.map +1 -0
- package/dist/generators/utils/prisma-migration.d.ts +59 -0
- package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
- package/dist/generators/utils/prisma-migration.js +161 -0
- package/dist/generators/utils/prisma-migration.js.map +1 -0
- package/dist/generators/utils/prisma-schema.d.ts +97 -0
- package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
- package/dist/generators/utils/prisma-schema.js +235 -0
- package/dist/generators/utils/prisma-schema.js.map +1 -0
- package/dist/generators/utils/router-integration.d.ts +70 -0
- package/dist/generators/utils/router-integration.d.ts.map +1 -0
- package/dist/generators/utils/router-integration.js +305 -0
- package/dist/generators/utils/router-integration.js.map +1 -0
- package/dist/generators/utils/snapshot.d.ts +93 -0
- package/dist/generators/utils/snapshot.d.ts.map +1 -0
- package/dist/generators/utils/snapshot.js +178 -0
- package/dist/generators/utils/snapshot.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/seeding/errors.d.ts +11 -24
- package/dist/seeding/errors.d.ts.map +1 -1
- package/dist/seeding/errors.js +11 -50
- package/dist/seeding/errors.js.map +1 -1
- package/dist/utils/paths.d.ts +19 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +45 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/schema-patterns.d.ts +26 -0
- package/dist/utils/schema-patterns.d.ts.map +1 -0
- package/dist/utils/schema-patterns.js +40 -0
- package/dist/utils/schema-patterns.js.map +1 -0
- package/package.json +12 -10
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
* velox m model Order --crud --paginated # With pagination
|
|
14
14
|
* velox m model Article --soft-delete # With soft delete support
|
|
15
15
|
*/
|
|
16
|
+
import * as p from '@clack/prompts';
|
|
16
17
|
import { BaseGenerator } from '../base.js';
|
|
18
|
+
import { collectFields } from '../fields/index.js';
|
|
17
19
|
import { generateModelFiles, getModelInstructions } from '../templates/model.js';
|
|
18
|
-
|
|
19
|
-
// Generator Implementation
|
|
20
|
-
// ============================================================================
|
|
20
|
+
import { deriveEntityNames } from '../utils/naming.js';
|
|
21
21
|
/**
|
|
22
22
|
* Model generator - creates Prisma model, Zod schema, and procedures
|
|
23
23
|
*/
|
|
@@ -69,6 +69,19 @@ Examples:
|
|
|
69
69
|
type: 'boolean',
|
|
70
70
|
default: true,
|
|
71
71
|
},
|
|
72
|
+
{
|
|
73
|
+
name: 'interactive',
|
|
74
|
+
short: 'i',
|
|
75
|
+
description: 'Interactively define fields',
|
|
76
|
+
type: 'boolean',
|
|
77
|
+
default: false,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'skip-fields',
|
|
81
|
+
description: 'Skip field prompts (generate skeleton only)',
|
|
82
|
+
type: 'boolean',
|
|
83
|
+
default: false,
|
|
84
|
+
},
|
|
72
85
|
];
|
|
73
86
|
/**
|
|
74
87
|
* Validate and transform raw options
|
|
@@ -79,15 +92,62 @@ Examples:
|
|
|
79
92
|
paginated: Boolean(raw.paginated ?? false),
|
|
80
93
|
softDelete: Boolean(raw['soft-delete'] ?? raw.softDelete ?? false),
|
|
81
94
|
timestamps: Boolean(raw.timestamps ?? true),
|
|
95
|
+
interactive: Boolean(raw.interactive ?? false),
|
|
96
|
+
skipFields: Boolean(raw['skip-fields'] ?? raw.skipFields ?? false),
|
|
82
97
|
};
|
|
83
98
|
}
|
|
84
99
|
/**
|
|
85
|
-
* Generate model files
|
|
100
|
+
* Generate model files with optional interactive field collection
|
|
86
101
|
*/
|
|
87
102
|
async generate(config) {
|
|
88
|
-
const
|
|
89
|
-
//
|
|
90
|
-
|
|
103
|
+
const { interactive, skipFields } = config.options;
|
|
104
|
+
// Collect fields interactively if not skipped and in interactive mode
|
|
105
|
+
let fields = [];
|
|
106
|
+
if (interactive && !skipFields && !config.dryRun) {
|
|
107
|
+
const fieldResult = await this.collectFieldsInteractively(config.entityName);
|
|
108
|
+
if (fieldResult.cancelled) {
|
|
109
|
+
// User cancelled - return empty output
|
|
110
|
+
return {
|
|
111
|
+
files: [],
|
|
112
|
+
postInstructions: 'Operation cancelled by user.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
fields = fieldResult.fields;
|
|
116
|
+
// Field collection already shows summary and confirms with user
|
|
117
|
+
}
|
|
118
|
+
// Build template options (without CLI-only flags)
|
|
119
|
+
const templateOptions = {
|
|
120
|
+
crud: config.options.crud,
|
|
121
|
+
paginated: config.options.paginated,
|
|
122
|
+
softDelete: config.options.softDelete,
|
|
123
|
+
timestamps: config.options.timestamps,
|
|
124
|
+
fields,
|
|
125
|
+
};
|
|
126
|
+
// Create context with template options
|
|
127
|
+
const context = {
|
|
128
|
+
entity: deriveEntityNames(config.entityName),
|
|
129
|
+
project: config.project,
|
|
130
|
+
options: templateOptions,
|
|
131
|
+
};
|
|
132
|
+
// Show spinner during actual file generation
|
|
133
|
+
// Only show if we're in interactive mode (we collected fields or user opted to skip)
|
|
134
|
+
const showSpinner = interactive && !skipFields && !config.dryRun;
|
|
135
|
+
let files;
|
|
136
|
+
if (showSpinner) {
|
|
137
|
+
const s = p.spinner();
|
|
138
|
+
s.start('Scaffolding model...');
|
|
139
|
+
try {
|
|
140
|
+
files = generateModelFiles(context);
|
|
141
|
+
s.stop(`Scaffolded ${files.length} file(s)`);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
s.stop('Scaffolding failed');
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
files = generateModelFiles(context);
|
|
150
|
+
}
|
|
91
151
|
// Generate post-creation instructions
|
|
92
152
|
const postInstructions = getModelInstructions(context);
|
|
93
153
|
return {
|
|
@@ -95,6 +155,27 @@ Examples:
|
|
|
95
155
|
postInstructions,
|
|
96
156
|
};
|
|
97
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Collect fields interactively from user
|
|
160
|
+
*/
|
|
161
|
+
async collectFieldsInteractively(entityName) {
|
|
162
|
+
// Ask if user wants to define fields
|
|
163
|
+
const wantFields = await p.confirm({
|
|
164
|
+
message: `Do you want to define fields for ${entityName}?`,
|
|
165
|
+
initialValue: true,
|
|
166
|
+
});
|
|
167
|
+
if (p.isCancel(wantFields)) {
|
|
168
|
+
return { fields: [], cancelled: true };
|
|
169
|
+
}
|
|
170
|
+
if (!wantFields) {
|
|
171
|
+
return { fields: [], cancelled: false };
|
|
172
|
+
}
|
|
173
|
+
// Collect fields
|
|
174
|
+
return collectFields({
|
|
175
|
+
resourceName: entityName,
|
|
176
|
+
minFields: 0,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
98
179
|
}
|
|
99
180
|
// ============================================================================
|
|
100
181
|
// Export
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/generators/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/generators/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds RSC page files for VeloxTS full-stack applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make page <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make page home # Simple server component page
|
|
11
|
+
* velox make page dashboard --client # Client component with interactivity
|
|
12
|
+
* velox make page users --loading # Include loading skeleton
|
|
13
|
+
*/
|
|
14
|
+
import { BaseGenerator } from '../base.js';
|
|
15
|
+
import { type PageOptions } from '../templates/page.js';
|
|
16
|
+
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Page generator - creates RSC page files
|
|
19
|
+
*/
|
|
20
|
+
export declare class PageGenerator extends BaseGenerator<PageOptions> {
|
|
21
|
+
readonly metadata: GeneratorMetadata;
|
|
22
|
+
readonly options: ReadonlyArray<GeneratorOption>;
|
|
23
|
+
/**
|
|
24
|
+
* Validate and transform raw options
|
|
25
|
+
*/
|
|
26
|
+
validateOptions(raw: Record<string, unknown>): PageOptions;
|
|
27
|
+
/**
|
|
28
|
+
* Generate page files
|
|
29
|
+
*/
|
|
30
|
+
generate(config: GeneratorConfig<PageOptions>): Promise<GeneratorOutput>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Factory function for creating a PageGenerator instance
|
|
34
|
+
*/
|
|
35
|
+
export declare function createPageGenerator(): PageGenerator;
|
|
36
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,WAAW,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAiBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAsB9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAQ1D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAmC/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds RSC page files for VeloxTS full-stack applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make page <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make page home # Simple server component page
|
|
11
|
+
* velox make page dashboard --client # Client component with interactivity
|
|
12
|
+
* velox make page users --loading # Include loading skeleton
|
|
13
|
+
*/
|
|
14
|
+
import { BaseGenerator } from '../base.js';
|
|
15
|
+
import { getPageInstructions, getPagePath, loadingTemplate, pageTemplate, } from '../templates/page.js';
|
|
16
|
+
import { GeneratorError, GeneratorErrorCode } from '../types.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Generator Implementation
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Page generator - creates RSC page files
|
|
22
|
+
*/
|
|
23
|
+
export class PageGenerator extends BaseGenerator {
|
|
24
|
+
metadata = {
|
|
25
|
+
name: 'page',
|
|
26
|
+
description: 'Generate an RSC page component',
|
|
27
|
+
longDescription: `
|
|
28
|
+
Scaffold a React Server Component page for VeloxTS full-stack applications.
|
|
29
|
+
|
|
30
|
+
By default, creates a server component that renders on the server.
|
|
31
|
+
Use --client for interactive components that hydrate on the client.
|
|
32
|
+
Use --loading to include a loading skeleton for React Suspense.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
velox make page home # Simple server component page
|
|
36
|
+
velox make page dashboard --client # Client component with interactivity
|
|
37
|
+
velox make page users --loading # Include loading skeleton
|
|
38
|
+
`,
|
|
39
|
+
aliases: ['pg'],
|
|
40
|
+
category: 'resource',
|
|
41
|
+
};
|
|
42
|
+
options = [
|
|
43
|
+
{
|
|
44
|
+
name: 'client',
|
|
45
|
+
short: 'c',
|
|
46
|
+
description: 'Generate a client component with "use client" directive',
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
default: false,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'loading',
|
|
52
|
+
short: 'l',
|
|
53
|
+
description: 'Include a loading skeleton component',
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
default: false,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'fetch',
|
|
59
|
+
short: 'f',
|
|
60
|
+
description: 'Include data fetching example',
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
default: false,
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
/**
|
|
66
|
+
* Validate and transform raw options
|
|
67
|
+
*/
|
|
68
|
+
validateOptions(raw) {
|
|
69
|
+
return {
|
|
70
|
+
client: Boolean(raw.client ?? false),
|
|
71
|
+
loading: Boolean(raw.loading ?? false),
|
|
72
|
+
fetch: Boolean(raw.fetch ?? false),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Generate page files
|
|
77
|
+
*/
|
|
78
|
+
async generate(config) {
|
|
79
|
+
// Check if this is a full-stack project
|
|
80
|
+
if (config.project.projectType !== 'fullstack') {
|
|
81
|
+
throw new GeneratorError(GeneratorErrorCode.PROJECT_STRUCTURE, 'Page generator requires a full-stack VeloxTS project.', 'Create a full-stack project with: npx create-velox-app my-app --full-stack');
|
|
82
|
+
}
|
|
83
|
+
const context = this.createContext(config);
|
|
84
|
+
const files = [];
|
|
85
|
+
// Generate main page file
|
|
86
|
+
const pageContent = pageTemplate(context);
|
|
87
|
+
files.push({
|
|
88
|
+
path: getPagePath(config.entityName, config.project),
|
|
89
|
+
content: pageContent,
|
|
90
|
+
});
|
|
91
|
+
// Generate loading file if requested
|
|
92
|
+
if (config.options.loading) {
|
|
93
|
+
const loadingContent = loadingTemplate(context);
|
|
94
|
+
files.push({
|
|
95
|
+
path: getPagePath('_loading', config.project),
|
|
96
|
+
content: loadingContent,
|
|
97
|
+
skipIfExists: true, // Don't overwrite existing loading file
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
files,
|
|
102
|
+
postInstructions: getPageInstructions(config.entityName, config.options),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Factory function for creating a PageGenerator instance
|
|
108
|
+
*/
|
|
109
|
+
export function createPageGenerator() {
|
|
110
|
+
return new PageGenerator();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/generators/generators/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,eAAe,EAEf,YAAY,GACb,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjE,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,aAA0B;IAClD,QAAQ,GAAsB;QACrC,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gCAAgC;QAC7C,eAAe,EAAE;;;;;;;;;;;CAWpB;QACG,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,yDAAyD;YACtE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,sCAAsC;YACnD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,+BAA+B;YAC5C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;YACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAoC;QACjD,wCAAwC;QACxC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC/C,MAAM,IAAI,cAAc,CACtB,kBAAkB,CAAC,iBAAiB,EACpC,uDAAuD,EACvD,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,0BAA0B;QAC1B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YACpD,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;gBAC7C,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,IAAI,EAAE,wCAAwC;aAC7D,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;SACzE,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds authorization policy files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make policy <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make policy post # Simple policy
|
|
11
|
+
* velox make policy article --crud # CRUD policy class
|
|
12
|
+
* velox make policy document --resource # Resource-based ABAC
|
|
13
|
+
* velox make policy comment --soft # Include soft delete policies
|
|
14
|
+
*/
|
|
15
|
+
import { BaseGenerator } from '../base.js';
|
|
16
|
+
import { type PolicyOptions } from '../templates/policy.js';
|
|
17
|
+
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Policy generator - creates authorization policy files
|
|
20
|
+
*/
|
|
21
|
+
export declare class PolicyGenerator extends BaseGenerator<PolicyOptions> {
|
|
22
|
+
readonly metadata: GeneratorMetadata;
|
|
23
|
+
readonly options: ReadonlyArray<GeneratorOption>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate and transform raw options
|
|
26
|
+
*/
|
|
27
|
+
validateOptions(raw: Record<string, unknown>): PolicyOptions;
|
|
28
|
+
/**
|
|
29
|
+
* Generate policy files
|
|
30
|
+
*/
|
|
31
|
+
generate(config: GeneratorConfig<PolicyOptions>): Promise<GeneratorOutput>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Factory function for creating a PolicyGenerator instance
|
|
35
|
+
*/
|
|
36
|
+
export declare function createPolicyGenerator(): PolicyGenerator;
|
|
37
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAkBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAsB9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;IAQ5D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAgBjF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds authorization policy files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make policy <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make policy post # Simple policy
|
|
11
|
+
* velox make policy article --crud # CRUD policy class
|
|
12
|
+
* velox make policy document --resource # Resource-based ABAC
|
|
13
|
+
* velox make policy comment --soft # Include soft delete policies
|
|
14
|
+
*/
|
|
15
|
+
import { BaseGenerator } from '../base.js';
|
|
16
|
+
import { getPolicyInstructions, getPolicyPath, policyTemplate, } from '../templates/policy.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Generator Implementation
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Policy generator - creates authorization policy files
|
|
22
|
+
*/
|
|
23
|
+
export class PolicyGenerator extends BaseGenerator {
|
|
24
|
+
metadata = {
|
|
25
|
+
name: 'policy',
|
|
26
|
+
description: 'Generate authorization policy definitions',
|
|
27
|
+
longDescription: `
|
|
28
|
+
Scaffold authorization policies for VeloxTS applications.
|
|
29
|
+
|
|
30
|
+
Policies centralize authorization logic for resources, making it
|
|
31
|
+
easier to maintain and test access control rules separately from
|
|
32
|
+
business logic.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
velox make policy post # Simple policy
|
|
36
|
+
velox make policy article --crud # CRUD policy class
|
|
37
|
+
velox make policy document --resource # Resource-based ABAC
|
|
38
|
+
velox make policy comment --soft # Include soft delete policies
|
|
39
|
+
`,
|
|
40
|
+
aliases: ['pol', 'auth'],
|
|
41
|
+
category: 'auth',
|
|
42
|
+
};
|
|
43
|
+
options = [
|
|
44
|
+
{
|
|
45
|
+
name: 'crud',
|
|
46
|
+
short: 'c',
|
|
47
|
+
description: 'Generate CRUD policy class',
|
|
48
|
+
type: 'boolean',
|
|
49
|
+
default: false,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'resource',
|
|
53
|
+
short: 'r',
|
|
54
|
+
description: 'Generate resource-based ABAC policy',
|
|
55
|
+
type: 'boolean',
|
|
56
|
+
default: false,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'soft',
|
|
60
|
+
short: 's',
|
|
61
|
+
description: 'Include soft delete policies',
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
default: false,
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* Validate and transform raw options
|
|
68
|
+
*/
|
|
69
|
+
validateOptions(raw) {
|
|
70
|
+
return {
|
|
71
|
+
crud: Boolean(raw.crud ?? false),
|
|
72
|
+
resource: Boolean(raw.resource ?? false),
|
|
73
|
+
softDelete: Boolean(raw.soft ?? false),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generate policy files
|
|
78
|
+
*/
|
|
79
|
+
async generate(config) {
|
|
80
|
+
const context = this.createContext(config);
|
|
81
|
+
const files = [];
|
|
82
|
+
// Generate policy file
|
|
83
|
+
const policyContent = policyTemplate(context);
|
|
84
|
+
files.push({
|
|
85
|
+
path: getPolicyPath(config.entityName, config.project),
|
|
86
|
+
content: policyContent,
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
files,
|
|
90
|
+
postInstructions: getPolicyInstructions(config.entityName, config.options),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Factory function for creating a PolicyGenerator instance
|
|
96
|
+
*/
|
|
97
|
+
export function createPolicyGenerator() {
|
|
98
|
+
return new PolicyGenerator();
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/generators/generators/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,aAAa,EAEb,cAAc,GACf,MAAM,wBAAwB,CAAC;AAShC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAA4B;IACtD,QAAQ,GAAsB;QACrC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2CAA2C;QACxD,eAAe,EAAE;;;;;;;;;;;;CAYpB;QACG,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM;KACjB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,4BAA4B;YACzC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,qCAAqC;YAClD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC;YACxC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;SACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAsC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,uBAAuB;QACvB,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YACtD,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;SAC3E,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -3,27 +3,65 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates a complete resource with model, schema, procedures, and tests.
|
|
5
5
|
* This is the "full stack" generator for quickly scaffolding new entities.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Auto-injects Prisma models into schema.prisma
|
|
9
|
+
* - Auto-registers procedures in detected router pattern
|
|
10
|
+
* - Optional automatic Prisma migration
|
|
11
|
+
* - Snapshot/rollback for safe file operations
|
|
6
12
|
*/
|
|
7
13
|
import { BaseGenerator } from '../base.js';
|
|
8
14
|
import { type ResourceOptions } from '../templates/resource.js';
|
|
9
15
|
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
16
|
+
/**
|
|
17
|
+
* CLI options including interactive flags and auto-registration (extends ResourceOptions for template)
|
|
18
|
+
*/
|
|
19
|
+
interface ResourceCliOptions extends ResourceOptions {
|
|
20
|
+
interactive: boolean;
|
|
21
|
+
skipFields: boolean;
|
|
22
|
+
skipRegistration: boolean;
|
|
23
|
+
skipMigration: boolean;
|
|
24
|
+
autoMigrate: boolean;
|
|
25
|
+
}
|
|
10
26
|
/**
|
|
11
27
|
* Resource generator implementation
|
|
12
28
|
*/
|
|
13
|
-
export declare class ResourceGenerator extends BaseGenerator<
|
|
29
|
+
export declare class ResourceGenerator extends BaseGenerator<ResourceCliOptions> {
|
|
14
30
|
readonly metadata: GeneratorMetadata;
|
|
15
31
|
readonly options: ReadonlyArray<GeneratorOption>;
|
|
16
32
|
/**
|
|
17
33
|
* Validate resource-specific options
|
|
18
34
|
*/
|
|
19
|
-
validateOptions(rawOptions: Record<string, unknown>):
|
|
35
|
+
validateOptions(rawOptions: Record<string, unknown>): ResourceCliOptions;
|
|
36
|
+
/**
|
|
37
|
+
* Generate resource files with optional interactive field collection
|
|
38
|
+
* and automatic Prisma/router integration
|
|
39
|
+
*/
|
|
40
|
+
generate(config: GeneratorConfig<ResourceCliOptions>): Promise<GeneratorOutput>;
|
|
41
|
+
/**
|
|
42
|
+
* Perform auto-registration of Prisma model and procedures
|
|
43
|
+
*/
|
|
44
|
+
private performAutoRegistration;
|
|
45
|
+
/**
|
|
46
|
+
* Inject Prisma model into schema.prisma
|
|
47
|
+
*/
|
|
48
|
+
private injectPrismaModel;
|
|
49
|
+
/**
|
|
50
|
+
* Register procedures in router
|
|
51
|
+
*/
|
|
52
|
+
private registerInRouter;
|
|
53
|
+
/**
|
|
54
|
+
* Build post-instructions based on what was auto-done
|
|
55
|
+
*/
|
|
56
|
+
private buildPostInstructions;
|
|
20
57
|
/**
|
|
21
|
-
*
|
|
58
|
+
* Collect fields interactively from user
|
|
22
59
|
*/
|
|
23
|
-
|
|
60
|
+
private collectFieldsInteractively;
|
|
24
61
|
}
|
|
25
62
|
/**
|
|
26
63
|
* Create a new resource generator instance
|
|
27
64
|
*/
|
|
28
65
|
export declare function createResourceGenerator(): ResourceGenerator;
|
|
66
|
+
export {};
|
|
29
67
|
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/resource.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AA0IrB;;GAEG;AACH,UAAU,kBAAmB,SAAQ,eAAe;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IAEpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAkBD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACtE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAY;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAW;IAE3D;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB;IAmBxE;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IA6FrF;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,iBAAiB;IAyE/B;;OAEG;YACW,gBAAgB;IAkF9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkH7B;;OAEG;YACW,0BAA0B;CAuBzC;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
|