@veloxts/cli 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/db.d.ts +12 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +18 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +29 -3
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/procedures.d.ts +12 -0
- package/dist/commands/procedures.d.ts.map +1 -0
- package/dist/commands/procedures.js +153 -0
- package/dist/commands/procedures.js.map +1 -0
- package/dist/dev/hmr-runner.d.ts +52 -0
- package/dist/dev/hmr-runner.d.ts.map +1 -0
- package/dist/dev/hmr-runner.js +153 -0
- package/dist/dev/hmr-runner.js.map +1 -0
- package/dist/dev/index.d.ts +6 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +6 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/watch-config.d.ts +32 -0
- package/dist/dev/watch-config.d.ts.map +1 -0
- package/dist/dev/watch-config.js +74 -0
- package/dist/dev/watch-config.js.map +1 -0
- package/dist/generators/generators/factory.d.ts +36 -0
- package/dist/generators/generators/factory.d.ts.map +1 -0
- package/dist/generators/generators/factory.js +85 -0
- package/dist/generators/generators/factory.js.map +1 -0
- package/dist/generators/generators/index.d.ts +2 -0
- package/dist/generators/generators/index.d.ts.map +1 -1
- package/dist/generators/generators/index.js +8 -0
- package/dist/generators/generators/index.js.map +1 -1
- package/dist/generators/generators/seeder.d.ts +36 -0
- package/dist/generators/generators/seeder.d.ts.map +1 -0
- package/dist/generators/generators/seeder.js +99 -0
- package/dist/generators/generators/seeder.js.map +1 -0
- package/dist/generators/templates/factory.d.ts +26 -0
- package/dist/generators/templates/factory.d.ts.map +1 -0
- package/dist/generators/templates/factory.js +125 -0
- package/dist/generators/templates/factory.js.map +1 -0
- package/dist/generators/templates/seeder.d.ts +34 -0
- package/dist/generators/templates/seeder.d.ts.map +1 -0
- package/dist/generators/templates/seeder.js +129 -0
- package/dist/generators/templates/seeder.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/seeding/commands/seed.d.ts +11 -0
- package/dist/seeding/commands/seed.d.ts.map +1 -0
- package/dist/seeding/commands/seed.js +268 -0
- package/dist/seeding/commands/seed.js.map +1 -0
- package/dist/seeding/errors.d.ts +119 -0
- package/dist/seeding/errors.d.ts.map +1 -0
- package/dist/seeding/errors.js +191 -0
- package/dist/seeding/errors.js.map +1 -0
- package/dist/seeding/factory.d.ts +162 -0
- package/dist/seeding/factory.d.ts.map +1 -0
- package/dist/seeding/factory.js +250 -0
- package/dist/seeding/factory.js.map +1 -0
- package/dist/seeding/index.d.ts +31 -0
- package/dist/seeding/index.d.ts.map +1 -0
- package/dist/seeding/index.js +41 -0
- package/dist/seeding/index.js.map +1 -0
- package/dist/seeding/loader.d.ts +41 -0
- package/dist/seeding/loader.d.ts.map +1 -0
- package/dist/seeding/loader.js +210 -0
- package/dist/seeding/loader.js.map +1 -0
- package/dist/seeding/registry.d.ts +116 -0
- package/dist/seeding/registry.d.ts.map +1 -0
- package/dist/seeding/registry.js +298 -0
- package/dist/seeding/registry.js.map +1 -0
- package/dist/seeding/runner.d.ts +88 -0
- package/dist/seeding/runner.d.ts.map +1 -0
- package/dist/seeding/runner.js +254 -0
- package/dist/seeding/runner.js.map +1 -0
- package/dist/seeding/types.d.ts +247 -0
- package/dist/seeding/types.d.ts.map +1 -0
- package/dist/seeding/types.js +7 -0
- package/dist/seeding/types.js.map +1 -0
- package/dist/utils/output.d.ts +12 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +21 -0
- package/dist/utils/output.js.map +1 -1
- package/package.json +18 -17
- package/LICENSE +0 -21
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seeding Types
|
|
3
|
+
*
|
|
4
|
+
* Core type definitions for the VeloxTS database seeding system.
|
|
5
|
+
*/
|
|
6
|
+
import type { PrismaClientLike } from '../migrations/types.js';
|
|
7
|
+
export type { PrismaClientLike };
|
|
8
|
+
/**
|
|
9
|
+
* Valid environment names for seeder filtering
|
|
10
|
+
*/
|
|
11
|
+
export type Environment = 'development' | 'production' | 'test';
|
|
12
|
+
/**
|
|
13
|
+
* Logger interface for seeder output
|
|
14
|
+
*/
|
|
15
|
+
export interface SeederLogger {
|
|
16
|
+
/** Log informational message */
|
|
17
|
+
info(message: string): void;
|
|
18
|
+
/** Log success message */
|
|
19
|
+
success(message: string): void;
|
|
20
|
+
/** Log warning message */
|
|
21
|
+
warning(message: string): void;
|
|
22
|
+
/** Log error message */
|
|
23
|
+
error(message: string): void;
|
|
24
|
+
/** Log debug message (only in verbose mode) */
|
|
25
|
+
debug(message: string): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Factory interface for creating model instances with fake data.
|
|
29
|
+
*
|
|
30
|
+
* @template TInput - The input type for creating records
|
|
31
|
+
* @template TOutput - The output type returned from database (defaults to TInput)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const users = await factory.get(UserFactory).create(10);
|
|
36
|
+
* const admin = await factory.get(UserFactory).state('admin').create();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export interface Factory<TInput extends Record<string, unknown>, TOutput = TInput> {
|
|
40
|
+
/** Model name for Prisma operations (e.g., 'user', 'post') */
|
|
41
|
+
readonly modelName: string;
|
|
42
|
+
/** Define default attributes for new instances */
|
|
43
|
+
definition(): TInput;
|
|
44
|
+
/**
|
|
45
|
+
* Create a single instance in the database
|
|
46
|
+
* @param overrides - Attributes to override defaults
|
|
47
|
+
*/
|
|
48
|
+
create(overrides?: Partial<TInput>): Promise<TOutput>;
|
|
49
|
+
/**
|
|
50
|
+
* Create multiple instances in the database
|
|
51
|
+
* @param count - Number of instances to create
|
|
52
|
+
* @param overrides - Attributes to override defaults for all instances
|
|
53
|
+
*/
|
|
54
|
+
createMany(count: number, overrides?: Partial<TInput>): Promise<TOutput[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Make a single instance without persisting to database
|
|
57
|
+
* @param overrides - Attributes to override defaults
|
|
58
|
+
*/
|
|
59
|
+
make(overrides?: Partial<TInput>): TInput;
|
|
60
|
+
/**
|
|
61
|
+
* Make multiple instances without persisting to database
|
|
62
|
+
* @param count - Number of instances to make
|
|
63
|
+
* @param overrides - Attributes to override defaults for all instances
|
|
64
|
+
*/
|
|
65
|
+
makeMany(count: number, overrides?: Partial<TInput>): TInput[];
|
|
66
|
+
/**
|
|
67
|
+
* Apply a named state modifier
|
|
68
|
+
* @param name - State name to apply
|
|
69
|
+
* @returns New factory instance with state applied
|
|
70
|
+
*/
|
|
71
|
+
state(name: string): Factory<TInput, TOutput>;
|
|
72
|
+
/**
|
|
73
|
+
* Get list of available state names
|
|
74
|
+
*/
|
|
75
|
+
getAvailableStates(): ReadonlyArray<string>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* State modifier function type
|
|
79
|
+
*/
|
|
80
|
+
export type StateModifier<TInput> = (attrs: TInput) => Partial<TInput>;
|
|
81
|
+
/**
|
|
82
|
+
* Factory constructor type for registry
|
|
83
|
+
*/
|
|
84
|
+
export interface FactoryConstructor<TInput extends Record<string, unknown> = Record<string, unknown>, TOutput = TInput> {
|
|
85
|
+
new (prisma: PrismaClientLike): Factory<TInput, TOutput>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Registry for managing factory instances
|
|
89
|
+
*/
|
|
90
|
+
export interface FactoryRegistry {
|
|
91
|
+
/**
|
|
92
|
+
* Get or create a factory instance
|
|
93
|
+
* @param FactoryClass - The factory constructor class
|
|
94
|
+
*/
|
|
95
|
+
get<TInput extends Record<string, unknown>, TOutput = TInput>(FactoryClass: FactoryConstructor<TInput, TOutput>): Factory<TInput, TOutput>;
|
|
96
|
+
/**
|
|
97
|
+
* Clear all cached factory instances
|
|
98
|
+
*/
|
|
99
|
+
clear(): void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Context passed to seeders during execution.
|
|
103
|
+
*
|
|
104
|
+
* Provides access to database, factories, and logging utilities.
|
|
105
|
+
*/
|
|
106
|
+
export interface SeederContext {
|
|
107
|
+
/** Prisma client for database operations */
|
|
108
|
+
readonly db: PrismaClientLike;
|
|
109
|
+
/** Factory registry for creating fake data */
|
|
110
|
+
readonly factory: FactoryRegistry;
|
|
111
|
+
/** Current environment (development, production, test) */
|
|
112
|
+
readonly environment: Environment;
|
|
113
|
+
/** Logger for seeder output */
|
|
114
|
+
readonly log: SeederLogger;
|
|
115
|
+
/**
|
|
116
|
+
* Run another seeder (for composition)
|
|
117
|
+
* @param seeder - Seeder to run
|
|
118
|
+
*/
|
|
119
|
+
runSeeder(seeder: Seeder): Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Base seeder interface - all seeders implement this.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* export const UserSeeder: Seeder = {
|
|
127
|
+
* name: 'UserSeeder',
|
|
128
|
+
* dependencies: ['RoleSeeder'],
|
|
129
|
+
*
|
|
130
|
+
* async run({ db, factory, log }) {
|
|
131
|
+
* await factory.get(UserFactory).createMany(10);
|
|
132
|
+
* log.success('Created 10 users');
|
|
133
|
+
* },
|
|
134
|
+
* };
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export interface Seeder {
|
|
138
|
+
/** Unique seeder name (e.g., 'UserSeeder') */
|
|
139
|
+
readonly name: string;
|
|
140
|
+
/**
|
|
141
|
+
* Seeders that must run before this one.
|
|
142
|
+
* Used for dependency resolution and execution ordering.
|
|
143
|
+
*/
|
|
144
|
+
readonly dependencies?: ReadonlyArray<string>;
|
|
145
|
+
/**
|
|
146
|
+
* Environments this seeder runs in.
|
|
147
|
+
* If not specified, runs in all environments.
|
|
148
|
+
*/
|
|
149
|
+
readonly environments?: ReadonlyArray<Environment>;
|
|
150
|
+
/**
|
|
151
|
+
* Run the seeder - populate data.
|
|
152
|
+
* @param context - Seeder execution context
|
|
153
|
+
*/
|
|
154
|
+
run(context: SeederContext): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* Optional: Truncate related tables before seeding.
|
|
157
|
+
* Called when running with --fresh flag.
|
|
158
|
+
* @param context - Seeder execution context
|
|
159
|
+
*/
|
|
160
|
+
truncate?(context: SeederContext): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Result of seeder execution
|
|
164
|
+
*/
|
|
165
|
+
export interface SeederResult {
|
|
166
|
+
/** Seeder name */
|
|
167
|
+
readonly name: string;
|
|
168
|
+
/** Whether execution succeeded */
|
|
169
|
+
readonly success: boolean;
|
|
170
|
+
/** Duration in milliseconds */
|
|
171
|
+
readonly duration: number;
|
|
172
|
+
/** Error message if failed */
|
|
173
|
+
readonly error?: string;
|
|
174
|
+
/** Number of records created (if tracked) */
|
|
175
|
+
readonly recordsCreated?: number;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Result of batch seeder execution
|
|
179
|
+
*/
|
|
180
|
+
export interface BatchSeederResult {
|
|
181
|
+
/** Individual seeder results */
|
|
182
|
+
readonly results: ReadonlyArray<SeederResult>;
|
|
183
|
+
/** Total seeders executed */
|
|
184
|
+
readonly total: number;
|
|
185
|
+
/** Number of successful seeders */
|
|
186
|
+
readonly successful: number;
|
|
187
|
+
/** Number of failed seeders */
|
|
188
|
+
readonly failed: number;
|
|
189
|
+
/** Number of skipped seeders */
|
|
190
|
+
readonly skipped: number;
|
|
191
|
+
/** Total duration in milliseconds */
|
|
192
|
+
readonly duration: number;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Options for db:seed command
|
|
196
|
+
*/
|
|
197
|
+
export interface SeedCommandOptions {
|
|
198
|
+
/** Run truncate before seeding (fresh seed) */
|
|
199
|
+
readonly fresh?: boolean;
|
|
200
|
+
/** Run specific seeder class by name */
|
|
201
|
+
readonly class?: string;
|
|
202
|
+
/** Skip confirmation in production */
|
|
203
|
+
readonly force?: boolean;
|
|
204
|
+
/** Show what would run without executing */
|
|
205
|
+
readonly dryRun?: boolean;
|
|
206
|
+
/** Output as JSON */
|
|
207
|
+
readonly json?: boolean;
|
|
208
|
+
/** Verbose output */
|
|
209
|
+
readonly verbose?: boolean;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Options for seeder runner
|
|
213
|
+
*/
|
|
214
|
+
export interface SeederRunOptions {
|
|
215
|
+
/** Run truncate before seeding */
|
|
216
|
+
readonly fresh?: boolean;
|
|
217
|
+
/** Specific seeders to run (by name) */
|
|
218
|
+
readonly only?: ReadonlyArray<string>;
|
|
219
|
+
/** Show what would run without executing */
|
|
220
|
+
readonly dryRun?: boolean;
|
|
221
|
+
/** Verbose output */
|
|
222
|
+
readonly verbose?: boolean;
|
|
223
|
+
/** Current environment */
|
|
224
|
+
readonly environment?: Environment;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Loaded seeder from filesystem
|
|
228
|
+
*/
|
|
229
|
+
export interface LoadedSeeder {
|
|
230
|
+
/** Seeder instance */
|
|
231
|
+
readonly seeder: Seeder;
|
|
232
|
+
/** File path where seeder was loaded from */
|
|
233
|
+
readonly filePath: string;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Result of loading seeders from filesystem
|
|
237
|
+
*/
|
|
238
|
+
export interface SeederLoadResult {
|
|
239
|
+
/** Successfully loaded seeders */
|
|
240
|
+
readonly seeders: ReadonlyArray<LoadedSeeder>;
|
|
241
|
+
/** Files that failed to load */
|
|
242
|
+
readonly errors: ReadonlyArray<{
|
|
243
|
+
readonly filePath: string;
|
|
244
|
+
readonly error: string;
|
|
245
|
+
}>;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/seeding/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/seeding/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/utils/output.d.ts
CHANGED
|
@@ -47,4 +47,16 @@ export declare function formatCommand(command: string): string;
|
|
|
47
47
|
* Format a URL for display
|
|
48
48
|
*/
|
|
49
49
|
export declare function formatUrl(url: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Format duration in milliseconds for display
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatDuration(ms: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Print restart timing information
|
|
56
|
+
*/
|
|
57
|
+
export declare function restartTiming(ms: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Print startup timing information
|
|
60
|
+
*/
|
|
61
|
+
export declare function startupTiming(ms: number): void;
|
|
50
62
|
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
package/dist/utils/output.js
CHANGED
|
@@ -75,4 +75,25 @@ export function formatCommand(command) {
|
|
|
75
75
|
export function formatUrl(url) {
|
|
76
76
|
return pc.cyan(url);
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Format duration in milliseconds for display
|
|
80
|
+
*/
|
|
81
|
+
export function formatDuration(ms) {
|
|
82
|
+
if (ms < 1000) {
|
|
83
|
+
return `${ms}ms`;
|
|
84
|
+
}
|
|
85
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Print restart timing information
|
|
89
|
+
*/
|
|
90
|
+
export function restartTiming(ms) {
|
|
91
|
+
console.log(`${pc.green('✓')} Restarted in ${pc.cyan(formatDuration(ms))}`);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Print startup timing information
|
|
95
|
+
*/
|
|
96
|
+
export function startupTiming(ms) {
|
|
97
|
+
console.log(`${pc.green('✓')} Server ready in ${pc.cyan(formatDuration(ms))}`);
|
|
98
|
+
}
|
|
78
99
|
//# sourceMappingURL=output.js.map
|
package/dist/utils/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veloxts/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Developer tooling and CLI commands for VeloxTS framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,6 +18,15 @@
|
|
|
18
18
|
"dist",
|
|
19
19
|
"README.md"
|
|
20
20
|
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"dev": "tsc --watch",
|
|
24
|
+
"type-check": "tsc --noEmit",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
|
+
"test:types": "tsd",
|
|
28
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
29
|
+
},
|
|
21
30
|
"tsd": {
|
|
22
31
|
"directory": "src/migrations/__type-tests__",
|
|
23
32
|
"compilerOptions": {
|
|
@@ -30,15 +39,16 @@
|
|
|
30
39
|
},
|
|
31
40
|
"dependencies": {
|
|
32
41
|
"@clack/prompts": "0.11.0",
|
|
42
|
+
"@veloxts/auth": "workspace:*",
|
|
43
|
+
"@veloxts/core": "workspace:*",
|
|
44
|
+
"@veloxts/orm": "workspace:*",
|
|
45
|
+
"@veloxts/router": "workspace:*",
|
|
46
|
+
"@veloxts/validation": "workspace:*",
|
|
33
47
|
"commander": "14.0.2",
|
|
48
|
+
"hot-hook": "0.4.0",
|
|
34
49
|
"picocolors": "1.1.1",
|
|
35
50
|
"pluralize": "8.0.0",
|
|
36
|
-
"tsx": "4.21.0"
|
|
37
|
-
"@veloxts/auth": "0.4.2",
|
|
38
|
-
"@veloxts/core": "0.4.2",
|
|
39
|
-
"@veloxts/orm": "0.4.2",
|
|
40
|
-
"@veloxts/router": "0.4.2",
|
|
41
|
-
"@veloxts/validation": "0.4.2"
|
|
51
|
+
"tsx": "4.21.0"
|
|
42
52
|
},
|
|
43
53
|
"peerDependencies": {
|
|
44
54
|
"@prisma/client": ">=5.0.0"
|
|
@@ -69,14 +79,5 @@
|
|
|
69
79
|
},
|
|
70
80
|
"publishConfig": {
|
|
71
81
|
"access": "public"
|
|
72
|
-
},
|
|
73
|
-
"scripts": {
|
|
74
|
-
"build": "tsc",
|
|
75
|
-
"dev": "tsc --watch",
|
|
76
|
-
"type-check": "tsc --noEmit",
|
|
77
|
-
"test": "vitest run",
|
|
78
|
-
"test:watch": "vitest",
|
|
79
|
-
"test:types": "tsd",
|
|
80
|
-
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
81
82
|
}
|
|
82
|
-
}
|
|
83
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 VeloxTS Framework Contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|