@breadstone-infrastructure/prisma-seeds 0.0.231
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/CHANGELOG.md +9 -0
- package/LICENSE +21 -0
- package/README.md +284 -0
- package/ai/AISeedGenerator.d.ts +127 -0
- package/ai/AISeedGenerator.d.ts.map +1 -0
- package/ai/AISeedGenerator.js +438 -0
- package/ai/AISeedGenerator.js.map +1 -0
- package/ai/AISeedTypes.d.ts +138 -0
- package/ai/AISeedTypes.d.ts.map +1 -0
- package/ai/AISeedTypes.js +3 -0
- package/ai/AISeedTypes.js.map +1 -0
- package/ai/PrismaModelAnalyzer.d.ts +36 -0
- package/ai/PrismaModelAnalyzer.d.ts.map +1 -0
- package/ai/PrismaModelAnalyzer.js +110 -0
- package/ai/PrismaModelAnalyzer.js.map +1 -0
- package/ai/PrismaTypeSchemaGenerator.d.ts +38 -0
- package/ai/PrismaTypeSchemaGenerator.d.ts.map +1 -0
- package/ai/PrismaTypeSchemaGenerator.js +71 -0
- package/ai/PrismaTypeSchemaGenerator.js.map +1 -0
- package/ai/createAISeeder.d.ts +11 -0
- package/ai/createAISeeder.d.ts.map +1 -0
- package/ai/createAISeeder.js +72 -0
- package/ai/createAISeeder.js.map +1 -0
- package/ai/index.d.ts +6 -0
- package/ai/index.d.ts.map +1 -0
- package/ai/index.js +5 -0
- package/ai/index.js.map +1 -0
- package/assets/AssetManager.d.ts +213 -0
- package/assets/AssetManager.d.ts.map +1 -0
- package/assets/AssetManager.js +460 -0
- package/assets/AssetManager.js.map +1 -0
- package/assets/IImageTransformOptions.d.ts +42 -0
- package/assets/IImageTransformOptions.d.ts.map +1 -0
- package/assets/IImageTransformOptions.js +22 -0
- package/assets/IImageTransformOptions.js.map +1 -0
- package/assets/adapters/BlobAdapterFactory.d.ts +21 -0
- package/assets/adapters/BlobAdapterFactory.d.ts.map +1 -0
- package/assets/adapters/BlobAdapterFactory.js +3 -0
- package/assets/adapters/BlobAdapterFactory.js.map +1 -0
- package/assets/adapters/CloudflareR2BlobAdapter.d.ts +97 -0
- package/assets/adapters/CloudflareR2BlobAdapter.d.ts.map +1 -0
- package/assets/adapters/CloudflareR2BlobAdapter.js +265 -0
- package/assets/adapters/CloudflareR2BlobAdapter.js.map +1 -0
- package/assets/adapters/EmptyBlobAdapter.d.ts +42 -0
- package/assets/adapters/EmptyBlobAdapter.d.ts.map +1 -0
- package/assets/adapters/EmptyBlobAdapter.js +65 -0
- package/assets/adapters/EmptyBlobAdapter.js.map +1 -0
- package/assets/adapters/LocalFileAdapter.d.ts +34 -0
- package/assets/adapters/LocalFileAdapter.d.ts.map +1 -0
- package/assets/adapters/LocalFileAdapter.js +74 -0
- package/assets/adapters/LocalFileAdapter.js.map +1 -0
- package/assets/adapters/VercelBlobAdapter.d.ts +73 -0
- package/assets/adapters/VercelBlobAdapter.d.ts.map +1 -0
- package/assets/adapters/VercelBlobAdapter.js +168 -0
- package/assets/adapters/VercelBlobAdapter.js.map +1 -0
- package/assets/adapters/abstracts/BlobAdapterBase.d.ts +62 -0
- package/assets/adapters/abstracts/BlobAdapterBase.d.ts.map +1 -0
- package/assets/adapters/abstracts/BlobAdapterBase.js +58 -0
- package/assets/adapters/abstracts/BlobAdapterBase.js.map +1 -0
- package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts +43 -0
- package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts.map +1 -0
- package/assets/adapters/abstracts/HttpBlobAdapterBase.js +88 -0
- package/assets/adapters/abstracts/HttpBlobAdapterBase.js.map +1 -0
- package/assets/adapters/createBlobAdapter.d.ts +47 -0
- package/assets/adapters/createBlobAdapter.d.ts.map +1 -0
- package/assets/adapters/createBlobAdapter.js +63 -0
- package/assets/adapters/createBlobAdapter.js.map +1 -0
- package/assets/adapters/index.d.ts +11 -0
- package/assets/adapters/index.d.ts.map +1 -0
- package/assets/adapters/index.js +7 -0
- package/assets/adapters/index.js.map +1 -0
- package/assets/adapters/interfaces/IBlobAdapter.d.ts +41 -0
- package/assets/adapters/interfaces/IBlobAdapter.d.ts.map +1 -0
- package/assets/adapters/interfaces/IBlobAdapter.js +3 -0
- package/assets/adapters/interfaces/IBlobAdapter.js.map +1 -0
- package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts +16 -0
- package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts.map +1 -0
- package/assets/adapters/interfaces/IBlobAdapterConfig.js +2 -0
- package/assets/adapters/interfaces/IBlobAdapterConfig.js.map +1 -0
- package/assets/adapters/interfaces/IBlobUploadResult.d.ts +24 -0
- package/assets/adapters/interfaces/IBlobUploadResult.d.ts.map +1 -0
- package/assets/adapters/interfaces/IBlobUploadResult.js +2 -0
- package/assets/adapters/interfaces/IBlobUploadResult.js.map +1 -0
- package/base/BaseSeeder.d.ts +21 -0
- package/base/BaseSeeder.d.ts.map +1 -0
- package/base/BaseSeeder.js +45 -0
- package/base/BaseSeeder.js.map +1 -0
- package/base/functionalSeeder.d.ts +31 -0
- package/base/functionalSeeder.d.ts.map +1 -0
- package/base/functionalSeeder.js +33 -0
- package/base/functionalSeeder.js.map +1 -0
- package/cli/Cli.d.ts +2 -0
- package/cli/Cli.d.ts.map +1 -0
- package/cli/Cli.js +32 -0
- package/cli/Cli.js.map +1 -0
- package/cli/CliArgs.d.ts +2 -0
- package/cli/CliArgs.d.ts.map +1 -0
- package/cli/CliArgs.js +133 -0
- package/cli/CliArgs.js.map +1 -0
- package/cli/CliArgsConfig.d.ts +2 -0
- package/cli/CliArgsConfig.d.ts.map +1 -0
- package/cli/CliArgsConfig.js +15 -0
- package/cli/CliArgsConfig.js.map +1 -0
- package/cli/CliRun.d.ts +2 -0
- package/cli/CliRun.d.ts.map +1 -0
- package/cli/CliRun.js +34 -0
- package/cli/CliRun.js.map +1 -0
- package/cli/commands/SeedCommand.d.ts +2 -0
- package/cli/commands/SeedCommand.d.ts.map +1 -0
- package/cli/commands/SeedCommand.js +73 -0
- package/cli/commands/SeedCommand.js.map +1 -0
- package/cli/commands/SeedCommandArgsConfig.d.ts +2 -0
- package/cli/commands/SeedCommandArgsConfig.d.ts.map +1 -0
- package/cli/commands/SeedCommandArgsConfig.js +31 -0
- package/cli/commands/SeedCommandArgsConfig.js.map +1 -0
- package/cli/seed.d.ts +2 -0
- package/cli/seed.d.ts.map +1 -0
- package/cli/seed.js +42 -0
- package/cli/seed.js.map +1 -0
- package/config/IAssetConfig.d.ts +36 -0
- package/config/IAssetConfig.d.ts.map +1 -0
- package/config/IAssetConfig.js +3 -0
- package/config/IAssetConfig.js.map +1 -0
- package/config/IComposedSeedConfig.d.ts +32 -0
- package/config/IComposedSeedConfig.d.ts.map +1 -0
- package/config/IComposedSeedConfig.js +3 -0
- package/config/IComposedSeedConfig.js.map +1 -0
- package/config/ISeedConfig.d.ts +75 -0
- package/config/ISeedConfig.d.ts.map +1 -0
- package/config/ISeedConfig.js +3 -0
- package/config/ISeedConfig.js.map +1 -0
- package/config/ISeedContext.d.ts +92 -0
- package/config/ISeedContext.d.ts.map +1 -0
- package/config/ISeedContext.js +3 -0
- package/config/ISeedContext.js.map +1 -0
- package/config/ISeedDefinition.d.ts +38 -0
- package/config/ISeedDefinition.d.ts.map +1 -0
- package/config/ISeedDefinition.js +3 -0
- package/config/ISeedDefinition.js.map +1 -0
- package/config/ISeedFactory.d.ts +15 -0
- package/config/ISeedFactory.d.ts.map +1 -0
- package/config/ISeedFactory.js +3 -0
- package/config/ISeedFactory.js.map +1 -0
- package/config/ISeedOptions.d.ts +44 -0
- package/config/ISeedOptions.d.ts.map +1 -0
- package/config/ISeedOptions.js +2 -0
- package/config/ISeedOptions.js.map +1 -0
- package/config/ISeedResult.d.ts +44 -0
- package/config/ISeedResult.d.ts.map +1 -0
- package/config/ISeedResult.js +2 -0
- package/config/ISeedResult.js.map +1 -0
- package/config/ISeeder.d.ts +37 -0
- package/config/ISeeder.d.ts.map +1 -0
- package/config/ISeeder.js +3 -0
- package/config/ISeeder.js.map +1 -0
- package/config/createAdapter.d.ts +13 -0
- package/config/createAdapter.d.ts.map +1 -0
- package/config/createAdapter.js +16 -0
- package/config/createAdapter.js.map +1 -0
- package/config/createSeed.d.ts +6 -0
- package/config/createSeed.d.ts.map +1 -0
- package/config/createSeed.js +16 -0
- package/config/createSeed.js.map +1 -0
- package/config/defineConfig.d.ts +27 -0
- package/config/defineConfig.d.ts.map +1 -0
- package/config/defineConfig.js +35 -0
- package/config/defineConfig.js.map +1 -0
- package/discovery/SeedConfigDiscovery.d.ts +16 -0
- package/discovery/SeedConfigDiscovery.d.ts.map +1 -0
- package/discovery/SeedConfigDiscovery.js +137 -0
- package/discovery/SeedConfigDiscovery.js.map +1 -0
- package/index.d.ts +32 -0
- package/index.d.ts.map +1 -0
- package/index.js +32 -0
- package/index.js.map +1 -0
- package/json/JsonReferenceResolver.d.ts +23 -0
- package/json/JsonReferenceResolver.d.ts.map +1 -0
- package/json/JsonReferenceResolver.js +99 -0
- package/json/JsonReferenceResolver.js.map +1 -0
- package/json/JsonSchemaValidator.d.ts +23 -0
- package/json/JsonSchemaValidator.d.ts.map +1 -0
- package/json/JsonSchemaValidator.js +98 -0
- package/json/JsonSchemaValidator.js.map +1 -0
- package/json/JsonSeedLoader.d.ts +33 -0
- package/json/JsonSeedLoader.d.ts.map +1 -0
- package/json/JsonSeedLoader.js +176 -0
- package/json/JsonSeedLoader.js.map +1 -0
- package/json/JsonSeedTypes.d.ts +204 -0
- package/json/JsonSeedTypes.d.ts.map +1 -0
- package/json/JsonSeedTypes.js +3 -0
- package/json/JsonSeedTypes.js.map +1 -0
- package/json/createJsonSeeder.d.ts +13 -0
- package/json/createJsonSeeder.d.ts.map +1 -0
- package/json/createJsonSeeder.js +240 -0
- package/json/createJsonSeeder.js.map +1 -0
- package/json/index.d.ts +6 -0
- package/json/index.d.ts.map +1 -0
- package/json/index.js +7 -0
- package/json/index.js.map +1 -0
- package/logging/ISeedLogger.d.ts +55 -0
- package/logging/ISeedLogger.d.ts.map +1 -0
- package/logging/ISeedLogger.js +3 -0
- package/logging/ISeedLogger.js.map +1 -0
- package/logging/LogLevel.d.ts +30 -0
- package/logging/LogLevel.d.ts.map +1 -0
- package/logging/LogLevel.js +37 -0
- package/logging/LogLevel.js.map +1 -0
- package/logging/SeedLogger.d.ts +24 -0
- package/logging/SeedLogger.d.ts.map +1 -0
- package/logging/SeedLogger.js +94 -0
- package/logging/SeedLogger.js.map +1 -0
- package/orchestration/SeedOrchestrator.d.ts +30 -0
- package/orchestration/SeedOrchestrator.d.ts.map +1 -0
- package/orchestration/SeedOrchestrator.js +262 -0
- package/orchestration/SeedOrchestrator.js.map +1 -0
- package/package.json +27 -0
- package/resolvers/EntityResolver.d.ts +43 -0
- package/resolvers/EntityResolver.d.ts.map +1 -0
- package/resolvers/EntityResolver.js +95 -0
- package/resolvers/EntityResolver.js.map +1 -0
- package/utils/AssetReferenceResolver.d.ts +49 -0
- package/utils/AssetReferenceResolver.d.ts.map +1 -0
- package/utils/AssetReferenceResolver.js +62 -0
- package/utils/AssetReferenceResolver.js.map +1 -0
- package/utils/EntityLookupCache.d.ts +47 -0
- package/utils/EntityLookupCache.d.ts.map +1 -0
- package/utils/EntityLookupCache.js +64 -0
- package/utils/EntityLookupCache.js.map +1 -0
- package/utils/ISeedRandom.d.ts +70 -0
- package/utils/ISeedRandom.d.ts.map +1 -0
- package/utils/ISeedRandom.js +3 -0
- package/utils/ISeedRandom.js.map +1 -0
- package/utils/LocalizationToolkit.d.ts +125 -0
- package/utils/LocalizationToolkit.d.ts.map +1 -0
- package/utils/LocalizationToolkit.js +131 -0
- package/utils/LocalizationToolkit.js.map +1 -0
- package/utils/SeededRandom.d.ts +15 -0
- package/utils/SeededRandom.d.ts.map +1 -0
- package/utils/SeededRandom.js +56 -0
- package/utils/SeededRandom.js.map +1 -0
- package/utils/StringArrayToolkit.d.ts +25 -0
- package/utils/StringArrayToolkit.d.ts.map +1 -0
- package/utils/StringArrayToolkit.js +56 -0
- package/utils/StringArrayToolkit.js.map +1 -0
- package/utils/StringValueGuard.d.ts +24 -0
- package/utils/StringValueGuard.d.ts.map +1 -0
- package/utils/StringValueGuard.js +46 -0
- package/utils/StringValueGuard.js.map +1 -0
- package/utils/WarningCollector.d.ts +40 -0
- package/utils/WarningCollector.d.ts.map +1 -0
- package/utils/WarningCollector.js +83 -0
- package/utils/WarningCollector.js.map +1 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { BlobAdapterBase } from './abstracts/BlobAdapterBase.js';
|
|
2
|
+
export { EmptyBlobAdapter } from './EmptyBlobAdapter.js';
|
|
3
|
+
export { LocalFileAdapter } from './LocalFileAdapter.js';
|
|
4
|
+
export { VercelBlobAdapter } from './VercelBlobAdapter.js';
|
|
5
|
+
export { CloudflareR2BlobAdapter } from './CloudflareR2BlobAdapter.js';
|
|
6
|
+
export { createCloudflareR2BlobAdapter, createEmptyBlobAdapter, createLocalBlobAdapter, createVercelBlobAdapter, createBlobAdapter } from './createBlobAdapter.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assets/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,iBAAiB,EAAiC,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAmC,MAAM,8BAA8B,CAAC;AACxG,OAAO,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAmB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { IBlobUploadResult } from './IBlobUploadResult';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract blob adapter interface that defines the contract for uploading files
|
|
4
|
+
* to various blob storage providers.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export interface IBlobAdapter {
|
|
9
|
+
get name(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Upload a file to the blob storage.
|
|
12
|
+
*
|
|
13
|
+
* @param key The unique key/path for the file
|
|
14
|
+
* @param buffer The file content as a buffer
|
|
15
|
+
* @param mimeType The MIME type of the file
|
|
16
|
+
* @returns Promise with upload result containing metadata and public URL
|
|
17
|
+
*/
|
|
18
|
+
upload(key: string, buffer: Buffer, mimeType: string): Promise<IBlobUploadResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Generate a public URL for accessing the uploaded file.
|
|
21
|
+
*
|
|
22
|
+
* @param key The unique key/path of the file
|
|
23
|
+
* @returns Promise with the public URL
|
|
24
|
+
*/
|
|
25
|
+
getPublicUrl(key: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a file exists in the blob storage.
|
|
28
|
+
*
|
|
29
|
+
* @param key The unique key/path of the file
|
|
30
|
+
* @returns Promise with boolean indicating if file exists
|
|
31
|
+
*/
|
|
32
|
+
exists(key: string): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete a file from the blob storage.
|
|
35
|
+
*
|
|
36
|
+
* @param key The unique key/path of the file
|
|
37
|
+
* @returns Promise that resolves when file is deleted
|
|
38
|
+
*/
|
|
39
|
+
delete(key: string): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=IBlobAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobAdapter.d.ts","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAIzB,IAAI,IAAI,IAAI,MAAM,CAAC;IAMnB;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAElF;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3C;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAItC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobAdapter.js","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobAdapter.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for blob adapter instances.
|
|
3
|
+
*
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface IBlobAdapterConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Optional key prefix for all uploads
|
|
9
|
+
*/
|
|
10
|
+
keyPrefix?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Additional provider-specific configuration
|
|
13
|
+
*/
|
|
14
|
+
providerConfig?: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=IBlobAdapterConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobAdapterConfig.d.ts","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobAdapterConfig.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAE/B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAE5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobAdapterConfig.js","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobAdapterConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of a blob upload operation.
|
|
3
|
+
*
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface IBlobUploadResult {
|
|
7
|
+
/**
|
|
8
|
+
* The unique key/path where the file was stored
|
|
9
|
+
*/
|
|
10
|
+
key: string;
|
|
11
|
+
/**
|
|
12
|
+
* The public URL to access the uploaded file
|
|
13
|
+
*/
|
|
14
|
+
url: string;
|
|
15
|
+
/**
|
|
16
|
+
* File size in bytes
|
|
17
|
+
*/
|
|
18
|
+
size: number;
|
|
19
|
+
/**
|
|
20
|
+
* Additional metadata from the upload operation
|
|
21
|
+
*/
|
|
22
|
+
metadata: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=IBlobUploadResult.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobUploadResult.d.ts","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobUploadResult.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAE9B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAErC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBlobUploadResult.js","sourceRoot":"","sources":["../../../../src/assets/adapters/interfaces/IBlobUploadResult.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ISeedResult } from '../config/ISeedResult.js';
|
|
2
|
+
import type { ISeedContext } from '../config/ISeedContext.js';
|
|
3
|
+
import type { ISeeder } from '../config/ISeeder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Base class for all seeders, providing common functionality and enforcing the seeder interface.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
* @abstract
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class BaseSeeder implements ISeeder {
|
|
11
|
+
abstract readonly name: string;
|
|
12
|
+
abstract seed(context: ISeedContext): Promise<ISeedResult>;
|
|
13
|
+
validate(context: ISeedContext): Promise<boolean>;
|
|
14
|
+
cleanup(context: ISeedContext): Promise<void>;
|
|
15
|
+
protected createResult(itemsCreated: number, duration: number, errors?: string[], warnings?: string[]): ISeedResult;
|
|
16
|
+
protected measureTime<T>(operation: () => Promise<T>): Promise<{
|
|
17
|
+
result: T;
|
|
18
|
+
duration: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=BaseSeeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSeeder.d.ts","sourceRoot":"","sources":["../../src/base/BaseSeeder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD;;;;;GAKG;AACH,8BAAsB,UAAW,YAAW,OAAO;IAI/C,kBAAyB,IAAI,EAAE,MAAM,CAAC;aAEtB,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAEpD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjD,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,WAAW;cAW3G,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;CAYL"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
// #region Imports
|
|
3
|
+
// #endregion
|
|
4
|
+
/**
|
|
5
|
+
* Base class for all seeders, providing common functionality and enforcing the seeder interface.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
* @abstract
|
|
9
|
+
*/
|
|
10
|
+
export class BaseSeeder {
|
|
11
|
+
async validate(context) {
|
|
12
|
+
try {
|
|
13
|
+
context.logger.debug(`Validating seeder: ${this.name}`);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
context.logger.error(`Validation failed for ${this.name}: ${error}`);
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async cleanup(context) {
|
|
22
|
+
context.logger.debug(`Cleaning up seeder: ${this.name}`);
|
|
23
|
+
// Default implementation - can be overridden
|
|
24
|
+
}
|
|
25
|
+
createResult(itemsCreated, duration, errors = [], warnings = []) {
|
|
26
|
+
return {
|
|
27
|
+
success: errors.length === 0,
|
|
28
|
+
itemsCreated,
|
|
29
|
+
duration,
|
|
30
|
+
errors,
|
|
31
|
+
warnings,
|
|
32
|
+
metadata: {}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async measureTime(operation) {
|
|
36
|
+
const start = Date.now();
|
|
37
|
+
const result = await operation();
|
|
38
|
+
const duration = Date.now() - start;
|
|
39
|
+
return {
|
|
40
|
+
result,
|
|
41
|
+
duration
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=BaseSeeder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSeeder.js","sourceRoot":"","sources":["../../src/base/BaseSeeder.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,kBAAkB;AAMlB,aAAa;AAEb;;;;;GAKG;AACH,MAAM,OAAgB,UAAU;IAQrB,KAAK,CAAC,QAAQ,CAAC,OAAqB;QACvC,IAAI,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAqB;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,6CAA6C;IACjD,CAAC;IAES,YAAY,CAAC,YAAoB,EAAE,QAAgB,EAAE,SAAmB,EAAE,EAAE,WAAqB,EAAE;QACzG,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,YAAY;YACZ,QAAQ;YACR,MAAM;YACN,QAAQ;YACR,QAAQ,EAAE,EAAE;SACf,CAAC;IACN,CAAC;IAES,KAAK,CAAC,WAAW,CAAI,SAA2B;QAItD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACpC,OAAO;YACH,MAAM;YACN,QAAQ;SACX,CAAC;IACN,CAAC;CAIJ"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ISeedResult } from '../config/ISeedResult.js';
|
|
2
|
+
import type { ISeedContext } from '../config/ISeedContext.js';
|
|
3
|
+
import type { ISeeder } from '../config/ISeeder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Result returned by a timed operation executed by a seeder.
|
|
6
|
+
*/
|
|
7
|
+
export interface ITimedExecutionResult<T> {
|
|
8
|
+
readonly result: T;
|
|
9
|
+
readonly duration: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Utilities provided to functional seeders for consistent result creation and instrumentation.
|
|
13
|
+
*/
|
|
14
|
+
export interface IFunctionalSeederUtilities {
|
|
15
|
+
measureExecutionTime<T>(operation: () => Promise<T>): Promise<ITimedExecutionResult<T>>;
|
|
16
|
+
createSeedResult(itemsCreated: number, duration: number, errors?: readonly string[], warnings?: readonly string[], metadata?: Readonly<Record<string, unknown>>): ISeedResult;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Configuration contract used to construct a functional seeder.
|
|
20
|
+
*/
|
|
21
|
+
export interface IFunctionalSeederConfig {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly run: (context: ISeedContext, utilities: IFunctionalSeederUtilities) => Promise<ISeedResult>;
|
|
24
|
+
readonly validate?: (context: ISeedContext) => Promise<boolean>;
|
|
25
|
+
readonly cleanup?: (context: ISeedContext) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates an {@link ISeeder} implementation backed by functional handlers.
|
|
29
|
+
*/
|
|
30
|
+
export declare const createFunctionalSeeder: (config: IFunctionalSeederConfig) => ISeeder;
|
|
31
|
+
//# sourceMappingURL=functionalSeeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functionalSeeder.d.ts","sourceRoot":"","sources":["../../src/base/functionalSeeder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,WAAW,CAAC;CACjL;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,0BAA0B,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACrG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,uBAAuB,KAAG,OAKvE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Creates an {@link ISeeder} implementation backed by functional handlers.
|
|
4
|
+
*/
|
|
5
|
+
export const createFunctionalSeeder = (config) => ({
|
|
6
|
+
name: config.name,
|
|
7
|
+
seed: (context) => config.run(context, createFunctionalSeederUtilities()),
|
|
8
|
+
...config.validate && { validate: (context) => config.validate(context) },
|
|
9
|
+
...config.cleanup && { cleanup: (context) => config.cleanup(context) }
|
|
10
|
+
});
|
|
11
|
+
const createFunctionalSeederUtilities = () => {
|
|
12
|
+
const createSeedResult = (itemsCreated, duration, errors = [], warnings = [], metadata = {}) => ({
|
|
13
|
+
success: errors.length === 0,
|
|
14
|
+
itemsCreated,
|
|
15
|
+
duration,
|
|
16
|
+
errors: [...errors],
|
|
17
|
+
warnings: [...warnings],
|
|
18
|
+
metadata: { ...metadata }
|
|
19
|
+
});
|
|
20
|
+
const measureExecutionTime = async (operation) => {
|
|
21
|
+
const startedAt = Date.now();
|
|
22
|
+
const result = await operation();
|
|
23
|
+
return {
|
|
24
|
+
result,
|
|
25
|
+
duration: Date.now() - startedAt
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
createSeedResult,
|
|
30
|
+
measureExecutionTime
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=functionalSeeder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functionalSeeder.js","sourceRoot":"","sources":["../../src/base/functionalSeeder.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAoCnC;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAA+B,EAAW,EAAE,CAAC,CAAC;IACjF,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE,CAAC,OAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACvF,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC,OAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,OAAO,CAAC,EAAE;IACxF,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC,OAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAQ,CAAC,OAAO,CAAC,EAAE;CACxF,CAAC,CAAC;AAEH,MAAM,+BAA+B,GAAG,GAA+B,EAAE;IACrE,MAAM,gBAAgB,GAAG,CACrB,YAAoB,EACpB,QAAgB,EAChB,SAA4B,EAAE,EAC9B,WAA8B,EAAE,EAChC,WAA8C,EAAE,EACrC,EAAE,CAAC,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5B,YAAY;QACZ,QAAQ;QACR,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;QACnB,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;QACvB,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE;KAC5B,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,KAAK,EAAK,SAA2B,EAAqC,EAAE;QACrG,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,OAAO;YACH,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC;IACN,CAAC,CAAC;IAEF,OAAO;QACH,gBAAgB;QAChB,oBAAoB;KACvB,CAAC;AACN,CAAC,CAAC"}
|
package/cli/Cli.d.ts
ADDED
package/cli/Cli.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":""}
|
package/cli/Cli.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { Program } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { CLI_ARGS } from './CliArgs.js';
|
|
4
|
+
import { DEFAULT_CLI_ARGS_CONFIG } from './CliArgsConfig.js';
|
|
5
|
+
import { SeedCommand } from './commands/SeedCommand.js';
|
|
6
|
+
import { DEFAULT_SEED_COMMAND_ARGS_CONFIG } from './commands/SeedCommandArgsConfig.js';
|
|
7
|
+
// #endregion
|
|
8
|
+
/**
|
|
9
|
+
* @description Prisma Seeds CLI application.
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export class Cli extends Program {
|
|
13
|
+
// #region Ctor
|
|
14
|
+
constructor() {
|
|
15
|
+
super({
|
|
16
|
+
moduleName: 'prisma-seeds',
|
|
17
|
+
prog: 'prisma-seeds',
|
|
18
|
+
description: 'Prisma Seeds — A configurable database seeding tool.',
|
|
19
|
+
version: '@@VERSION',
|
|
20
|
+
addHelp: true,
|
|
21
|
+
debug: true,
|
|
22
|
+
});
|
|
23
|
+
this.config
|
|
24
|
+
.assign(DEFAULT_CLI_ARGS_CONFIG);
|
|
25
|
+
this.args
|
|
26
|
+
.register(...CLI_ARGS);
|
|
27
|
+
const seedCtorFn = () => [DEFAULT_SEED_COMMAND_ARGS_CONFIG];
|
|
28
|
+
this.commands
|
|
29
|
+
.register('seed', SeedCommand, seedCtorFn);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Cli.js.map
|
package/cli/Cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAuB,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AAEvF,aAAa;AAEb;;;GAGG;AACH,MAAM,OAAO,GAAI,SAAQ,OAAuB;IAE5C,eAAe;IAEf;QACI,KAAK,CAAC;YACF,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,sDAAsD;YACnE,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM;aACN,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI;aACJ,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAoD,GAAG,EAAE,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAE7G,IAAI,CAAC,QAAQ;aACR,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;CAGJ"}
|
package/cli/CliArgs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgs.d.ts","sourceRoot":"","sources":["../../src/cli/CliArgs.ts"],"names":[],"mappings":""}
|
package/cli/CliArgs.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { Boolean } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { DEFAULT_CLI_ARGS_CONFIG } from './CliArgsConfig.js';
|
|
4
|
+
// #endregion
|
|
5
|
+
// #region Arguments
|
|
6
|
+
/**
|
|
7
|
+
* @description Drops existing data before seeding.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export const DROP_ARG = {
|
|
11
|
+
alias: ['-d', '--drop'],
|
|
12
|
+
options: {
|
|
13
|
+
type: (value) => Boolean.parse(value),
|
|
14
|
+
required: false,
|
|
15
|
+
default: DEFAULT_CLI_ARGS_CONFIG.drop,
|
|
16
|
+
metavar: 'boolean',
|
|
17
|
+
help: 'Drops existing data before seeding.',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* @description Sets the number of items to seed per entity.
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export const COUNT_ARG = {
|
|
25
|
+
alias: ['-n', '--count'],
|
|
26
|
+
options: {
|
|
27
|
+
type: (value) => parseInt(value, 10),
|
|
28
|
+
required: false,
|
|
29
|
+
default: DEFAULT_CLI_ARGS_CONFIG.count,
|
|
30
|
+
metavar: 'number',
|
|
31
|
+
help: 'Number of items to seed per entity.',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* @description Forces the seeding operation.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export const FORCE_ARG = {
|
|
39
|
+
alias: ['-f', '--force'],
|
|
40
|
+
options: {
|
|
41
|
+
type: (value) => Boolean.parse(value),
|
|
42
|
+
required: false,
|
|
43
|
+
default: DEFAULT_CLI_ARGS_CONFIG.force,
|
|
44
|
+
metavar: 'boolean',
|
|
45
|
+
help: 'Forces the seeding operation without confirmation.',
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @description Enables dry run mode.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export const DRY_RUN_ARG = {
|
|
53
|
+
alias: ['-dr', '--dry-run'],
|
|
54
|
+
options: {
|
|
55
|
+
type: (value) => Boolean.parse(value),
|
|
56
|
+
required: false,
|
|
57
|
+
default: DEFAULT_CLI_ARGS_CONFIG.dryRun,
|
|
58
|
+
metavar: 'boolean',
|
|
59
|
+
help: 'Enables dry run mode to prevent any database changes.',
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* @description Sets the seed value for deterministic randomness.
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export const SEED_ARG = {
|
|
67
|
+
alias: ['-s', '--seed'],
|
|
68
|
+
options: {
|
|
69
|
+
type: (value) => parseInt(value, 10),
|
|
70
|
+
required: false,
|
|
71
|
+
default: DEFAULT_CLI_ARGS_CONFIG.seed,
|
|
72
|
+
metavar: 'number',
|
|
73
|
+
help: 'Seed value for deterministic random generation.',
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* @description Sets the environment for seeding.
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
export const ENVIRONMENT_ARG = {
|
|
81
|
+
alias: ['-e', '--environment'],
|
|
82
|
+
options: {
|
|
83
|
+
required: false,
|
|
84
|
+
default: DEFAULT_CLI_ARGS_CONFIG.environment,
|
|
85
|
+
metavar: 'string',
|
|
86
|
+
help: 'Environment to use for seeding (e.g. development, staging, production).',
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* @description Enables verbose logging output.
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
export const VERBOSE_ARG = {
|
|
94
|
+
alias: ['-v', '--verbose'],
|
|
95
|
+
options: {
|
|
96
|
+
type: (value) => Boolean.parse(value),
|
|
97
|
+
required: false,
|
|
98
|
+
default: DEFAULT_CLI_ARGS_CONFIG.verbose,
|
|
99
|
+
metavar: 'boolean',
|
|
100
|
+
help: 'Enables verbose logging output.',
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* @description Sets the current working directory.
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export const CWD_ARG = {
|
|
108
|
+
alias: ['-c', '--cwd'],
|
|
109
|
+
options: {
|
|
110
|
+
required: false,
|
|
111
|
+
default: DEFAULT_CLI_ARGS_CONFIG.cwd,
|
|
112
|
+
metavar: 'string',
|
|
113
|
+
help: 'Specifies the current working directory for config discovery.',
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
// #endregion
|
|
117
|
+
// #region Exports
|
|
118
|
+
/**
|
|
119
|
+
* @description Aggregate export for all CLI arguments.
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export const CLI_ARGS = [
|
|
123
|
+
DROP_ARG,
|
|
124
|
+
COUNT_ARG,
|
|
125
|
+
FORCE_ARG,
|
|
126
|
+
DRY_RUN_ARG,
|
|
127
|
+
SEED_ARG,
|
|
128
|
+
ENVIRONMENT_ARG,
|
|
129
|
+
VERBOSE_ARG,
|
|
130
|
+
CWD_ARG,
|
|
131
|
+
];
|
|
132
|
+
// #endregion
|
|
133
|
+
//# sourceMappingURL=CliArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgs.js","sourceRoot":"","sources":["../../src/cli/CliArgs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsConfig.d.ts","sourceRoot":"","sources":["../../src/cli/CliArgsConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Default CLI argument values.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_CLI_ARGS_CONFIG = {
|
|
6
|
+
drop: false,
|
|
7
|
+
count: 5,
|
|
8
|
+
force: false,
|
|
9
|
+
dryRun: false,
|
|
10
|
+
seed: Date.now(),
|
|
11
|
+
environment: 'development',
|
|
12
|
+
verbose: false,
|
|
13
|
+
cwd: process.cwd(),
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=CliArgsConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsConfig.js","sourceRoot":"","sources":["../../src/cli/CliArgsConfig.ts"],"names":[],"mappings":"AAoEA;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACnD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;IAChB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,KAAK;IACd,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;CACrB,CAAC"}
|
package/cli/CliRun.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliRun.d.ts","sourceRoot":"","sources":["../../src/cli/CliRun.ts"],"names":[],"mappings":""}
|
package/cli/CliRun.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { ConsoleLogger } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { Cli } from './Cli.js';
|
|
4
|
+
// #endregion
|
|
5
|
+
const logger = new ConsoleLogger();
|
|
6
|
+
/**
|
|
7
|
+
* @description Bootstrap the Prisma Seeds CLI.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
(async () => {
|
|
11
|
+
const catchAction = (error) => {
|
|
12
|
+
logger.error(String(error));
|
|
13
|
+
};
|
|
14
|
+
let cli = null;
|
|
15
|
+
try {
|
|
16
|
+
cli = new Cli();
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
catchAction(error);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
await cli.init();
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
catchAction(error);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
await cli.run();
|
|
30
|
+
})().catch((error) => {
|
|
31
|
+
logger.error(error);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=CliRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliRun.js","sourceRoot":"","sources":["../../src/cli/CliRun.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,aAAa;AAEb,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAEnC;;;GAGG;AACH,CAAC,KAAK,IAAI,EAAE;IACR,MAAM,WAAW,GAAG,CAAC,KAAY,EAAQ,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,IAAI,GAAG,GAAe,IAAI,CAAC;IAC3B,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,WAAW,CAAC,KAAc,CAAC,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,WAAW,CAAC,KAAc,CAAC,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/SeedCommand.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { ProgramCommandBase } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { SeedOrchestrator } from '../../orchestration/SeedOrchestrator.js';
|
|
4
|
+
import { DEFAULT_SEED_COMMAND_ARGS_CONFIG, SEED_COMMAND_ARGS } from './SeedCommandArgsConfig.js';
|
|
5
|
+
// #endregion
|
|
6
|
+
/**
|
|
7
|
+
* @description CLI command that executes the prisma seeder.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export class SeedCommand extends ProgramCommandBase {
|
|
11
|
+
// #region Fields
|
|
12
|
+
_orchestrator;
|
|
13
|
+
// #endregion
|
|
14
|
+
// #region Ctor
|
|
15
|
+
constructor(config) {
|
|
16
|
+
super(config);
|
|
17
|
+
this._orchestrator = new SeedOrchestrator();
|
|
18
|
+
}
|
|
19
|
+
// #endregion
|
|
20
|
+
// #region Properties
|
|
21
|
+
get name() {
|
|
22
|
+
return 'seed';
|
|
23
|
+
}
|
|
24
|
+
get args() {
|
|
25
|
+
return SEED_COMMAND_ARGS;
|
|
26
|
+
}
|
|
27
|
+
// #endregion
|
|
28
|
+
// #region Methods
|
|
29
|
+
configure(config) {
|
|
30
|
+
return Object.assign(this.config, DEFAULT_SEED_COMMAND_ARGS_CONFIG, super.configure(config));
|
|
31
|
+
}
|
|
32
|
+
async execute() {
|
|
33
|
+
const rootPath = this.config.cwd || process.cwd();
|
|
34
|
+
const overrides = {};
|
|
35
|
+
if (this.config.drop) {
|
|
36
|
+
overrides['drop'] = true;
|
|
37
|
+
}
|
|
38
|
+
if (this.config.count !== DEFAULT_SEED_COMMAND_ARGS_CONFIG.count) {
|
|
39
|
+
overrides['count'] = this.config.count;
|
|
40
|
+
}
|
|
41
|
+
if (this.config.force) {
|
|
42
|
+
overrides['force'] = true;
|
|
43
|
+
}
|
|
44
|
+
if (this.config.dryRun) {
|
|
45
|
+
overrides['dryRun'] = true;
|
|
46
|
+
}
|
|
47
|
+
if (this.config.seed !== DEFAULT_SEED_COMMAND_ARGS_CONFIG.seed) {
|
|
48
|
+
overrides['seed'] = this.config.seed;
|
|
49
|
+
}
|
|
50
|
+
if (this.config.environment !== DEFAULT_SEED_COMMAND_ARGS_CONFIG.environment) {
|
|
51
|
+
overrides['environment'] = this.config.environment;
|
|
52
|
+
}
|
|
53
|
+
const hasOverrides = Object.keys(overrides).length > 0;
|
|
54
|
+
const result = hasOverrides
|
|
55
|
+
? await this._orchestrator.executeWithOverrides(rootPath, overrides)
|
|
56
|
+
: await this._orchestrator.execute(rootPath, {
|
|
57
|
+
drop: this.config.drop,
|
|
58
|
+
count: this.config.count,
|
|
59
|
+
force: this.config.force,
|
|
60
|
+
dryRun: this.config.dryRun,
|
|
61
|
+
seed: this.config.seed,
|
|
62
|
+
environment: this.config.environment,
|
|
63
|
+
});
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
return {
|
|
66
|
+
canceled: true,
|
|
67
|
+
error: Object.assign(new Error(`Seeding failed with ${result.errors.length} error(s).`), { code: 1 }),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return { canceled: false, result };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=SeedCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/SeedCommand.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAoB,kBAAkB,EAA6B,MAAM,sCAAsC,CAAC;AACvH,OAAO,EAAiC,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC1G,OAAO,EAAE,gCAAgC,EAA+B,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE9H,aAAa;AAEb;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,kBAA0C;IAEvE,iBAAiB;IAEA,aAAa,CAAmB;IAEjD,aAAa;IAEb,eAAe;IAEf,YAAmB,MAA8B;QAC7C,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChD,CAAC;IAED,aAAa;IAEb,qBAAqB;IAErB,IAAW,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,aAAa;IAEb,kBAAkB;IAEF,SAAS,CAAC,MAA8B;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;IAEe,KAAK,CAAC,OAAO;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,gCAAgC,CAAC,KAAK,EAAE,CAAC;YAC/D,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,gCAAgC,CAAC,IAAI,EAAE,CAAC;YAC7D,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,gCAAgC,CAAC,WAAW,EAAE,CAAC;YAC3E,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACvD,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,YAAY;YACvB,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC;YACpE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACzC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;aACvC,CAAC,CAAC;QAEP,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;gBACH,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;aACxG,CAAC;QACN,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;CAGJ"}
|