@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
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Types Module
|
|
3
|
+
*
|
|
4
|
+
* Defines the types and mappings for interactive field collection
|
|
5
|
+
* in the resource generator.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Supported field types for interactive prompts
|
|
9
|
+
*/
|
|
10
|
+
export type FieldType = 'string' | 'text' | 'int' | 'float' | 'boolean' | 'datetime' | 'json' | 'enum';
|
|
11
|
+
/**
|
|
12
|
+
* Field attribute options
|
|
13
|
+
*/
|
|
14
|
+
export interface FieldAttributes {
|
|
15
|
+
/** Field is nullable (optional) */
|
|
16
|
+
optional: boolean;
|
|
17
|
+
/** Field has unique constraint */
|
|
18
|
+
unique: boolean;
|
|
19
|
+
/** Field has a default value */
|
|
20
|
+
hasDefault: boolean;
|
|
21
|
+
/** The default value (if hasDefault is true) */
|
|
22
|
+
defaultValue?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Enum definition for enum fields
|
|
26
|
+
*/
|
|
27
|
+
export interface EnumDefinition {
|
|
28
|
+
/** Enum type name (PascalCase) */
|
|
29
|
+
name: string;
|
|
30
|
+
/** Enum values (UPPER_CASE) */
|
|
31
|
+
values: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A single field definition collected from user
|
|
35
|
+
*/
|
|
36
|
+
export interface FieldDefinition {
|
|
37
|
+
/** Field name (camelCase) */
|
|
38
|
+
name: string;
|
|
39
|
+
/** Field type */
|
|
40
|
+
type: FieldType;
|
|
41
|
+
/** Field attributes */
|
|
42
|
+
attributes: FieldAttributes;
|
|
43
|
+
/** Enum definition (only for enum type) */
|
|
44
|
+
enumDef?: EnumDefinition;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Display information for field types in prompts
|
|
48
|
+
*/
|
|
49
|
+
export interface FieldTypeInfo {
|
|
50
|
+
/** Type identifier */
|
|
51
|
+
type: FieldType;
|
|
52
|
+
/** Display label in prompt */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Short description */
|
|
55
|
+
description: string;
|
|
56
|
+
/** Prisma type mapping */
|
|
57
|
+
prismaType: string;
|
|
58
|
+
/** Zod schema factory (without field name) */
|
|
59
|
+
zodSchema: string;
|
|
60
|
+
/** Whether this is a long text type (for UI hints, not Prisma modifiers) */
|
|
61
|
+
isLongText?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* All available field types with their display info
|
|
65
|
+
*/
|
|
66
|
+
export declare const FIELD_TYPES: readonly FieldTypeInfo[];
|
|
67
|
+
/**
|
|
68
|
+
* Get field type info by type
|
|
69
|
+
*/
|
|
70
|
+
export declare function getFieldTypeInfo(type: FieldType): FieldTypeInfo | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Field names that are reserved and cannot be used
|
|
73
|
+
*/
|
|
74
|
+
export declare const RESERVED_FIELD_NAMES: readonly string[];
|
|
75
|
+
/**
|
|
76
|
+
* Check if a field name is reserved
|
|
77
|
+
*/
|
|
78
|
+
export declare function isReservedFieldName(name: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Validate field name format (camelCase)
|
|
81
|
+
*/
|
|
82
|
+
export declare function validateFieldName(name: string): string | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Validate enum name format (PascalCase)
|
|
85
|
+
*/
|
|
86
|
+
export declare function validateEnumName(name: string): string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Validate enum values format (UPPER_CASE)
|
|
89
|
+
*/
|
|
90
|
+
export declare function validateEnumValues(values: string[]): string | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Parse comma-separated enum values
|
|
93
|
+
*/
|
|
94
|
+
export declare function parseEnumValues(input: string): string[];
|
|
95
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/generators/fields/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,KAAK,GACL,OAAO,GACP,SAAS,GACT,UAAU,GACV,MAAM,GACN,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,uBAAuB;IACvB,UAAU,EAAE,eAAe,CAAC;IAC5B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,aAAa,EA0DtC,CAAC;AAEX;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAE3E;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAKxC,CAAC;AAEX;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAYvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKvD"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Types Module
|
|
3
|
+
*
|
|
4
|
+
* Defines the types and mappings for interactive field collection
|
|
5
|
+
* in the resource generator.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* All available field types with their display info
|
|
9
|
+
*/
|
|
10
|
+
export const FIELD_TYPES = [
|
|
11
|
+
{
|
|
12
|
+
type: 'string',
|
|
13
|
+
label: 'String',
|
|
14
|
+
description: 'Short text (up to 255 chars)',
|
|
15
|
+
prismaType: 'String',
|
|
16
|
+
zodSchema: 'z.string().min(1).max(255)',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'text',
|
|
20
|
+
label: 'Text (long)',
|
|
21
|
+
description: 'Long text content',
|
|
22
|
+
prismaType: 'String',
|
|
23
|
+
zodSchema: 'z.string()',
|
|
24
|
+
isLongText: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'int',
|
|
28
|
+
label: 'Integer',
|
|
29
|
+
description: 'Whole numbers',
|
|
30
|
+
prismaType: 'Int',
|
|
31
|
+
zodSchema: 'z.number().int()',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
type: 'float',
|
|
35
|
+
label: 'Float',
|
|
36
|
+
description: 'Decimal numbers',
|
|
37
|
+
prismaType: 'Float',
|
|
38
|
+
zodSchema: 'z.number()',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
type: 'boolean',
|
|
42
|
+
label: 'Boolean',
|
|
43
|
+
description: 'True/false values',
|
|
44
|
+
prismaType: 'Boolean',
|
|
45
|
+
zodSchema: 'z.boolean()',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: 'datetime',
|
|
49
|
+
label: 'DateTime',
|
|
50
|
+
description: 'Date and time',
|
|
51
|
+
prismaType: 'DateTime',
|
|
52
|
+
zodSchema: 'z.date()',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'json',
|
|
56
|
+
label: 'JSON',
|
|
57
|
+
description: 'JSON data',
|
|
58
|
+
prismaType: 'Json',
|
|
59
|
+
zodSchema: 'z.record(z.unknown())',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'enum',
|
|
63
|
+
label: 'Enum',
|
|
64
|
+
description: 'Predefined values',
|
|
65
|
+
prismaType: '', // Dynamic based on enum name
|
|
66
|
+
zodSchema: '', // Dynamic based on enum values
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* Get field type info by type
|
|
71
|
+
*/
|
|
72
|
+
export function getFieldTypeInfo(type) {
|
|
73
|
+
return FIELD_TYPES.find((t) => t.type === type);
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Reserved Field Names
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Field names that are reserved and cannot be used
|
|
80
|
+
*/
|
|
81
|
+
export const RESERVED_FIELD_NAMES = [
|
|
82
|
+
'id',
|
|
83
|
+
'createdAt',
|
|
84
|
+
'updatedAt',
|
|
85
|
+
'deletedAt',
|
|
86
|
+
];
|
|
87
|
+
/**
|
|
88
|
+
* Check if a field name is reserved
|
|
89
|
+
*/
|
|
90
|
+
export function isReservedFieldName(name) {
|
|
91
|
+
return RESERVED_FIELD_NAMES.includes(name);
|
|
92
|
+
}
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Validation Helpers
|
|
95
|
+
// ============================================================================
|
|
96
|
+
/**
|
|
97
|
+
* Validate field name format (camelCase)
|
|
98
|
+
*/
|
|
99
|
+
export function validateFieldName(name) {
|
|
100
|
+
if (!name || name.trim().length === 0) {
|
|
101
|
+
return 'Field name is required';
|
|
102
|
+
}
|
|
103
|
+
const trimmed = name.trim();
|
|
104
|
+
// Check for valid identifier
|
|
105
|
+
if (!/^[a-z][a-zA-Z0-9]*$/.test(trimmed)) {
|
|
106
|
+
return 'Field name must be camelCase (start with lowercase letter, no special characters)';
|
|
107
|
+
}
|
|
108
|
+
// Check for reserved names
|
|
109
|
+
if (isReservedFieldName(trimmed)) {
|
|
110
|
+
return `"${trimmed}" is a reserved field name`;
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate enum name format (PascalCase)
|
|
116
|
+
*/
|
|
117
|
+
export function validateEnumName(name) {
|
|
118
|
+
if (!name || name.trim().length === 0) {
|
|
119
|
+
return 'Enum name is required';
|
|
120
|
+
}
|
|
121
|
+
const trimmed = name.trim();
|
|
122
|
+
if (!/^[A-Z][a-zA-Z0-9]*$/.test(trimmed)) {
|
|
123
|
+
return 'Enum name must be PascalCase (start with uppercase letter)';
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Validate enum values format (UPPER_CASE)
|
|
129
|
+
*/
|
|
130
|
+
export function validateEnumValues(values) {
|
|
131
|
+
if (values.length === 0) {
|
|
132
|
+
return 'At least one enum value is required';
|
|
133
|
+
}
|
|
134
|
+
for (const value of values) {
|
|
135
|
+
if (!/^[A-Z][A-Z0-9_]*$/.test(value)) {
|
|
136
|
+
return `Enum value "${value}" must be UPPER_CASE`;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Parse comma-separated enum values
|
|
143
|
+
*/
|
|
144
|
+
export function parseEnumValues(input) {
|
|
145
|
+
return input
|
|
146
|
+
.split(',')
|
|
147
|
+
.map((v) => v.trim().toUpperCase().replace(/\s+/g, '_'))
|
|
148
|
+
.filter((v) => v.length > 0);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/generators/fields/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds server action files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make action <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make action users # Simple actions
|
|
11
|
+
* velox make action posts --crud # Full CRUD actions
|
|
12
|
+
* velox make action contact --form # Form action handler
|
|
13
|
+
* velox make action orders --trpc # tRPC bridge actions
|
|
14
|
+
*/
|
|
15
|
+
import { BaseGenerator } from '../base.js';
|
|
16
|
+
import { type ActionOptions } from '../templates/action.js';
|
|
17
|
+
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Action generator - creates server action files
|
|
20
|
+
*/
|
|
21
|
+
export declare class ActionGenerator extends BaseGenerator<ActionOptions> {
|
|
22
|
+
readonly metadata: GeneratorMetadata;
|
|
23
|
+
readonly options: ReadonlyArray<GeneratorOption>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate and transform raw options
|
|
26
|
+
*/
|
|
27
|
+
validateOptions(raw: Record<string, unknown>): ActionOptions;
|
|
28
|
+
/**
|
|
29
|
+
* Generate action files
|
|
30
|
+
*/
|
|
31
|
+
generate(config: GeneratorConfig<ActionOptions>): Promise<GeneratorOutput>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Factory function for creating an ActionGenerator instance
|
|
35
|
+
*/
|
|
36
|
+
export declare function createActionGenerator(): ActionGenerator;
|
|
37
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAInB,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,CAmBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CA6B9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;IAS5D;;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,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds server action files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make action <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make action users # Simple actions
|
|
11
|
+
* velox make action posts --crud # Full CRUD actions
|
|
12
|
+
* velox make action contact --form # Form action handler
|
|
13
|
+
* velox make action orders --trpc # tRPC bridge actions
|
|
14
|
+
*/
|
|
15
|
+
import { BaseGenerator } from '../base.js';
|
|
16
|
+
import { actionTemplate, getActionInstructions, getActionPath, } from '../templates/action.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Generator Implementation
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Action generator - creates server action files
|
|
22
|
+
*/
|
|
23
|
+
export class ActionGenerator extends BaseGenerator {
|
|
24
|
+
metadata = {
|
|
25
|
+
name: 'action',
|
|
26
|
+
description: 'Generate server action files',
|
|
27
|
+
longDescription: `
|
|
28
|
+
Scaffold server actions for VeloxTS applications.
|
|
29
|
+
|
|
30
|
+
Server actions run on the server and can be called from client components.
|
|
31
|
+
Use --form for form handling, --crud for CRUD operations, or --trpc to
|
|
32
|
+
wrap existing tRPC procedures.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
velox make action users # Simple actions
|
|
36
|
+
velox make action posts --crud # Full CRUD actions
|
|
37
|
+
velox make action contact --form # Form action handler
|
|
38
|
+
velox make action orders --trpc # tRPC bridge actions
|
|
39
|
+
velox make action admin --auth # Actions requiring authentication
|
|
40
|
+
`,
|
|
41
|
+
aliases: ['a', 'act'],
|
|
42
|
+
category: 'resource',
|
|
43
|
+
};
|
|
44
|
+
options = [
|
|
45
|
+
{
|
|
46
|
+
name: 'form',
|
|
47
|
+
short: 'f',
|
|
48
|
+
description: 'Generate form action handler',
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
default: false,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'auth',
|
|
54
|
+
short: 'a',
|
|
55
|
+
description: 'Include authentication requirement',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: false,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'crud',
|
|
61
|
+
short: 'c',
|
|
62
|
+
description: 'Generate CRUD-style actions',
|
|
63
|
+
type: 'boolean',
|
|
64
|
+
default: false,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'trpc',
|
|
68
|
+
short: 't',
|
|
69
|
+
description: 'Use tRPC bridge for type safety',
|
|
70
|
+
type: 'boolean',
|
|
71
|
+
default: false,
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Validate and transform raw options
|
|
76
|
+
*/
|
|
77
|
+
validateOptions(raw) {
|
|
78
|
+
return {
|
|
79
|
+
form: Boolean(raw.form ?? false),
|
|
80
|
+
auth: Boolean(raw.auth ?? false),
|
|
81
|
+
crud: Boolean(raw.crud ?? false),
|
|
82
|
+
trpc: Boolean(raw.trpc ?? false),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generate action files
|
|
87
|
+
*/
|
|
88
|
+
async generate(config) {
|
|
89
|
+
const context = this.createContext(config);
|
|
90
|
+
const files = [];
|
|
91
|
+
// Generate action file
|
|
92
|
+
const actionContent = actionTemplate(context);
|
|
93
|
+
files.push({
|
|
94
|
+
path: getActionPath(config.entityName, config.project),
|
|
95
|
+
content: actionContent,
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
files,
|
|
99
|
+
postInstructions: getActionInstructions(config.entityName, config.options),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Factory function for creating an ActionGenerator instance
|
|
105
|
+
*/
|
|
106
|
+
export function createActionGenerator() {
|
|
107
|
+
return new ActionGenerator();
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/generators/generators/action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAEL,cAAc,EACd,qBAAqB,EACrB,aAAa,GACd,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,8BAA8B;QAC3C,eAAe,EAAE;;;;;;;;;;;;;CAapB;QACG,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,oCAAoC;YACjD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,6BAA6B;YAC1C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,iCAAiC;YAC9C,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,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YAChC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YAChC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;SACjC,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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exception Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds custom exception class files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make exception <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make exception payment # Simple exception
|
|
11
|
+
* velox make exception api --http # HTTP-aware exceptions
|
|
12
|
+
* velox make exception form --validation # Validation exceptions
|
|
13
|
+
* velox make exception order --domain # Domain exceptions
|
|
14
|
+
* velox make exception auth --codes # Include error code enum
|
|
15
|
+
*/
|
|
16
|
+
import { BaseGenerator } from '../base.js';
|
|
17
|
+
import { type ExceptionOptions } from '../templates/exception.js';
|
|
18
|
+
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Exception generator - creates custom exception class files
|
|
21
|
+
*/
|
|
22
|
+
export declare class ExceptionGenerator extends BaseGenerator<ExceptionOptions> {
|
|
23
|
+
readonly metadata: GeneratorMetadata;
|
|
24
|
+
readonly options: ReadonlyArray<GeneratorOption>;
|
|
25
|
+
/**
|
|
26
|
+
* Validate and transform raw options
|
|
27
|
+
*/
|
|
28
|
+
validateOptions(raw: Record<string, unknown>): ExceptionOptions;
|
|
29
|
+
/**
|
|
30
|
+
* Generate exception files
|
|
31
|
+
*/
|
|
32
|
+
generate(config: GeneratorConfig<ExceptionOptions>): Promise<GeneratorOutput>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Factory function for creating an ExceptionGenerator instance
|
|
36
|
+
*/
|
|
37
|
+
export declare function createExceptionGenerator(): ExceptionGenerator;
|
|
38
|
+
//# sourceMappingURL=exception.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/exception.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IACrE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAkBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CA6B9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB;IAS/D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAgBpF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exception Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds custom exception class files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make exception <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make exception payment # Simple exception
|
|
11
|
+
* velox make exception api --http # HTTP-aware exceptions
|
|
12
|
+
* velox make exception form --validation # Validation exceptions
|
|
13
|
+
* velox make exception order --domain # Domain exceptions
|
|
14
|
+
* velox make exception auth --codes # Include error code enum
|
|
15
|
+
*/
|
|
16
|
+
import { BaseGenerator } from '../base.js';
|
|
17
|
+
import { exceptionTemplate, getExceptionInstructions, getExceptionPath, } from '../templates/exception.js';
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Generator Implementation
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Exception generator - creates custom exception class files
|
|
23
|
+
*/
|
|
24
|
+
export class ExceptionGenerator extends BaseGenerator {
|
|
25
|
+
metadata = {
|
|
26
|
+
name: 'exception',
|
|
27
|
+
description: 'Generate custom exception classes',
|
|
28
|
+
longDescription: `
|
|
29
|
+
Scaffold custom exception classes for VeloxTS applications.
|
|
30
|
+
|
|
31
|
+
Exceptions provide structured error handling with type safety,
|
|
32
|
+
error codes, and metadata for debugging and API responses.
|
|
33
|
+
|
|
34
|
+
Examples:
|
|
35
|
+
velox make exception payment # Simple exception
|
|
36
|
+
velox make exception api --http # HTTP-aware exceptions
|
|
37
|
+
velox make exception form --validation # Validation exceptions
|
|
38
|
+
velox make exception order --domain # Domain exceptions
|
|
39
|
+
velox make exception auth --codes # Include error code enum
|
|
40
|
+
`,
|
|
41
|
+
aliases: ['ex', 'err', 'error'],
|
|
42
|
+
category: 'infrastructure',
|
|
43
|
+
};
|
|
44
|
+
options = [
|
|
45
|
+
{
|
|
46
|
+
name: 'http',
|
|
47
|
+
short: 'h',
|
|
48
|
+
description: 'Generate HTTP-aware exceptions with status codes',
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
default: false,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'validation',
|
|
54
|
+
short: 'v',
|
|
55
|
+
description: 'Generate validation exception with field errors',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: false,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'domain',
|
|
61
|
+
short: 'd',
|
|
62
|
+
description: 'Generate domain-specific exception hierarchy',
|
|
63
|
+
type: 'boolean',
|
|
64
|
+
default: false,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'codes',
|
|
68
|
+
short: 'c',
|
|
69
|
+
description: 'Include error code enum',
|
|
70
|
+
type: 'boolean',
|
|
71
|
+
default: false,
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Validate and transform raw options
|
|
76
|
+
*/
|
|
77
|
+
validateOptions(raw) {
|
|
78
|
+
return {
|
|
79
|
+
http: Boolean(raw.http ?? false),
|
|
80
|
+
validation: Boolean(raw.validation ?? false),
|
|
81
|
+
domain: Boolean(raw.domain ?? false),
|
|
82
|
+
codes: Boolean(raw.codes ?? false),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Generate exception files
|
|
87
|
+
*/
|
|
88
|
+
async generate(config) {
|
|
89
|
+
const context = this.createContext(config);
|
|
90
|
+
const files = [];
|
|
91
|
+
// Generate exception file
|
|
92
|
+
const exceptionContent = exceptionTemplate(context);
|
|
93
|
+
files.push({
|
|
94
|
+
path: getExceptionPath(config.entityName, config.project),
|
|
95
|
+
content: exceptionContent,
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
files,
|
|
99
|
+
postInstructions: getExceptionInstructions(config.entityName, config.options),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Factory function for creating an ExceptionGenerator instance
|
|
105
|
+
*/
|
|
106
|
+
export function createExceptionGenerator() {
|
|
107
|
+
return new ExceptionGenerator();
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception.js","sourceRoot":"","sources":["../../../src/generators/generators/exception.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAEL,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AASnC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAA+B;IAC5D,QAAQ,GAAsB;QACrC,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,mCAAmC;QAChD,eAAe,EAAE;;;;;;;;;;;;CAYpB;QACG,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;QAC/B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,kDAAkD;YAC/D,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,iDAAiD;YAC9D,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8CAA8C;YAC3D,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,yBAAyB;YACtC,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,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC;YAC5C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;YACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAyC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YACzD,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,wBAAwB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;SAC9E,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guard Generator
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds auth guard files for VeloxTS applications.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* velox make guard <name> [options]
|
|
8
|
+
*
|
|
9
|
+
* Examples:
|
|
10
|
+
* velox make guard subscriber # Simple guard
|
|
11
|
+
* velox make guard admin --role # Role-based guard
|
|
12
|
+
* velox make guard post --permission # Permission-based guard
|
|
13
|
+
* velox make guard document --owner # Ownership guard
|
|
14
|
+
* velox make guard access --composite # Composite guards
|
|
15
|
+
*/
|
|
16
|
+
import { BaseGenerator } from '../base.js';
|
|
17
|
+
import { type GuardOptions } from '../templates/guard.js';
|
|
18
|
+
import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Guard generator - creates auth guard files
|
|
21
|
+
*/
|
|
22
|
+
export declare class GuardGenerator extends BaseGenerator<GuardOptions> {
|
|
23
|
+
readonly metadata: GeneratorMetadata;
|
|
24
|
+
readonly options: ReadonlyArray<GeneratorOption>;
|
|
25
|
+
/**
|
|
26
|
+
* Validate and transform raw options
|
|
27
|
+
*/
|
|
28
|
+
validateOptions(raw: Record<string, unknown>): GuardOptions;
|
|
29
|
+
/**
|
|
30
|
+
* Generate guard files
|
|
31
|
+
*/
|
|
32
|
+
generate(config: GeneratorConfig<GuardOptions>): Promise<GeneratorOutput>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Factory function for creating a GuardGenerator instance
|
|
36
|
+
*/
|
|
37
|
+
export declare function createGuardGenerator(): GuardGenerator;
|
|
38
|
+
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,YAAY,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAkBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CA6B9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY;IAS3D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAgBhF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|