@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,16 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { createBlobAdapter } from '../assets/adapters/createBlobAdapter.js';
|
|
3
|
+
// #endregion
|
|
4
|
+
/**
|
|
5
|
+
* Factory function to create a blob adapter based on type and configuration.
|
|
6
|
+
*
|
|
7
|
+
* @param type The type of blob adapter to create.
|
|
8
|
+
* @param config The configuration object for the adapter.
|
|
9
|
+
* @returns An instance of the requested blob adapter.
|
|
10
|
+
* @throws Error if the adapter type is unsupported.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export function createAdapter(type, config) {
|
|
14
|
+
return createBlobAdapter(type, config);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=createAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdapter.js","sourceRoot":"","sources":["../../src/config/createAdapter.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAmB,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE7F,aAAa;AAEb;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAqB,EAAE,MAAY;IAC7D,OAAO,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ISeedDefinition } from './ISeedDefinition';
|
|
2
|
+
/**
|
|
3
|
+
* Create a seed definition with factory pattern
|
|
4
|
+
*/
|
|
5
|
+
export declare function createSeed(name: string, factory: () => any, options?: Record<string, unknown>): ISeedDefinition;
|
|
6
|
+
//# sourceMappingURL=createSeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSeed.d.ts","sourceRoot":"","sources":["../../src/config/createSeed.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAS/G"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
// #endregion
|
|
3
|
+
/**
|
|
4
|
+
* Create a seed definition with factory pattern
|
|
5
|
+
*/
|
|
6
|
+
export function createSeed(name, factory, options) {
|
|
7
|
+
return {
|
|
8
|
+
name,
|
|
9
|
+
enabled: true,
|
|
10
|
+
factory: {
|
|
11
|
+
create: factory
|
|
12
|
+
},
|
|
13
|
+
options: options ?? {}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=createSeed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSeed.js","sourceRoot":"","sources":["../../src/config/createSeed.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAIlB,aAAa;AAEb;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAkB,EAAE,OAAiC;IAC1F,OAAO;QACH,IAAI;QACJ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACL,MAAM,EAAE,OAAO;SAClB;QACD,OAAO,EAAE,OAAO,IAAI,EAAE;KACzB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IAISeedConfig } from '../ai/AISeedTypes.js';
|
|
2
|
+
import type { IAssetConfig } from './IAssetConfig.js';
|
|
3
|
+
import type { ISeedConfig } from './ISeedConfig.js';
|
|
4
|
+
import type { ISeedDefinition } from './ISeedDefinition.js';
|
|
5
|
+
import type { ISeedOptions } from './ISeedOptions.js';
|
|
6
|
+
/**
|
|
7
|
+
* Input type for defining a seed configuration.
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export interface ISeedConfigInput {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly enabled?: boolean;
|
|
14
|
+
readonly order?: number;
|
|
15
|
+
readonly dependencies?: string[];
|
|
16
|
+
readonly seeds?: ISeedDefinition[];
|
|
17
|
+
readonly searchPaths?: string[];
|
|
18
|
+
readonly ai?: IAISeedConfig;
|
|
19
|
+
readonly assets?: IAssetConfig;
|
|
20
|
+
readonly logLevel?: import('../logging/LogLevel.js').LogLevel;
|
|
21
|
+
readonly options?: ISeedOptions;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Define a seed configuration for a project or feature.
|
|
25
|
+
*/
|
|
26
|
+
export declare function defineConfig(config: ISeedConfigInput): ISeedConfig;
|
|
27
|
+
//# sourceMappingURL=defineConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineConfig.d.ts","sourceRoot":"","sources":["../../src/config/defineConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,wBAAwB,EAAE,QAAQ,CAAC;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAmClE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
/**
|
|
3
|
+
* Define a seed configuration for a project or feature.
|
|
4
|
+
*/
|
|
5
|
+
export function defineConfig(config) {
|
|
6
|
+
const baseConfig = {
|
|
7
|
+
name: config.name,
|
|
8
|
+
enabled: config.enabled ?? true,
|
|
9
|
+
order: config.order ?? 0,
|
|
10
|
+
dependencies: config.dependencies ?? [],
|
|
11
|
+
seeds: config.seeds ?? []
|
|
12
|
+
};
|
|
13
|
+
// Add optional AI configuration
|
|
14
|
+
if (config.ai) {
|
|
15
|
+
baseConfig.ai = config.ai;
|
|
16
|
+
}
|
|
17
|
+
// Add optional asset configuration
|
|
18
|
+
if (config.assets) {
|
|
19
|
+
baseConfig.assets = config.assets;
|
|
20
|
+
}
|
|
21
|
+
// Add optional log level configuration
|
|
22
|
+
if (config.logLevel) {
|
|
23
|
+
baseConfig.logLevel = config.logLevel;
|
|
24
|
+
}
|
|
25
|
+
// Add searchPaths for extended configuration (root configs)
|
|
26
|
+
if (config.searchPaths) {
|
|
27
|
+
baseConfig.searchPaths = config.searchPaths;
|
|
28
|
+
}
|
|
29
|
+
// Add default runtime options
|
|
30
|
+
if (config.options) {
|
|
31
|
+
baseConfig.options = config.options;
|
|
32
|
+
}
|
|
33
|
+
return baseConfig;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=defineConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineConfig.js","sourceRoot":"","sources":["../../src/config/defineConfig.ts"],"names":[],"mappings":"AAAA,kBAAkB;AA4BlB;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACjD,MAAM,UAAU,GAAgB;QAC5B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAC5B,CAAC;IAEF,gCAAgC;IAChC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACX,UAAkD,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACf,UAAqD,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClF,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjB,UAAoF,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrH,CAAC;IAED,4DAA4D;IAC5D,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACpB,UAAsD,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC7F,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChB,UAAsD,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACrF,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IComposedSeedConfig } from '../config/IComposedSeedConfig.js';
|
|
2
|
+
export interface ISeedConfigDiscoveryOptions {
|
|
3
|
+
readonly rootPath: string;
|
|
4
|
+
readonly searchPaths?: string[];
|
|
5
|
+
readonly configFileName?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class SeedConfigDiscovery {
|
|
8
|
+
private readonly _fs;
|
|
9
|
+
private readonly _configFileNames;
|
|
10
|
+
private readonly _logger;
|
|
11
|
+
constructor();
|
|
12
|
+
discover(options: ISeedConfigDiscoveryOptions): Promise<IComposedSeedConfig>;
|
|
13
|
+
private loadConfig;
|
|
14
|
+
private resolveExecutionOrder;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=SeedConfigDiscovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedConfigDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/SeedConfigDiscovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAQ5E,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;;IAuBxB,QAAQ,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAmD3E,UAAU;IAuBxB,OAAO,CAAC,qBAAqB;CAkEhC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { glob } from 'glob';
|
|
3
|
+
import { FileSystem } from '@breadstone-infrastructure/utilities';
|
|
4
|
+
import { SeedLogger } from '../logging/SeedLogger.js';
|
|
5
|
+
export class SeedConfigDiscovery {
|
|
6
|
+
// #region Fields
|
|
7
|
+
_fs;
|
|
8
|
+
_configFileNames;
|
|
9
|
+
_logger;
|
|
10
|
+
// #endregion
|
|
11
|
+
// #region Ctor
|
|
12
|
+
constructor() {
|
|
13
|
+
this._fs = new FileSystem();
|
|
14
|
+
this._configFileNames = [
|
|
15
|
+
'seed.config.js',
|
|
16
|
+
'seed.config.cjs',
|
|
17
|
+
'seed.config.mjs',
|
|
18
|
+
'seed.config.ts',
|
|
19
|
+
'seed.config.cts',
|
|
20
|
+
'seed.config.mts'
|
|
21
|
+
];
|
|
22
|
+
this._logger = new SeedLogger();
|
|
23
|
+
}
|
|
24
|
+
// #endregion
|
|
25
|
+
// #region Methods
|
|
26
|
+
async discover(options) {
|
|
27
|
+
let rootConfigPath = '';
|
|
28
|
+
let rootConfig = null;
|
|
29
|
+
for (const configFileName of this._configFileNames) {
|
|
30
|
+
const configPath = this._fs.pathCombine(options.rootPath, configFileName);
|
|
31
|
+
if (this._fs.fileExists(configPath)) {
|
|
32
|
+
rootConfigPath = configPath;
|
|
33
|
+
rootConfig = await this.loadConfig(configPath);
|
|
34
|
+
Object.assign(rootConfig, { configPath });
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!rootConfig) {
|
|
39
|
+
throw new Error(`No seed config file found in root path: ${options.rootPath}`);
|
|
40
|
+
}
|
|
41
|
+
const extendedRootConfig = rootConfig;
|
|
42
|
+
const searchPaths = extendedRootConfig.searchPaths ?? options.searchPaths ?? [];
|
|
43
|
+
const featureConfigs = [];
|
|
44
|
+
for (const searchPath of searchPaths) {
|
|
45
|
+
const patterns = this._configFileNames.map((name) => this._fs.pathCombine(options.rootPath, searchPath, `**/${name}`));
|
|
46
|
+
const configFiles = (await Promise.all(patterns.map((pattern) => glob(pattern)))).flat();
|
|
47
|
+
for (const configFile of configFiles) {
|
|
48
|
+
if (configFile === rootConfigPath) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const config = await this.loadConfig(configFile);
|
|
53
|
+
Object.assign(config, { configPath: configFile });
|
|
54
|
+
featureConfigs.push(config);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
this._logger.warn(`Failed to load config from ${configFile}: ${error}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const resolved = this.resolveExecutionOrder([rootConfig, ...featureConfigs]);
|
|
62
|
+
return {
|
|
63
|
+
rootConfig,
|
|
64
|
+
featureConfigs,
|
|
65
|
+
resolved
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async loadConfig(configPath) {
|
|
69
|
+
const resolvedPath = this._fs.pathResolve(configPath);
|
|
70
|
+
if (resolvedPath.endsWith('.ts') || resolvedPath.endsWith('.cts') || resolvedPath.endsWith('.mts')) {
|
|
71
|
+
throw new Error(`TypeScript config files are not supported: '${configPath}'. Please use .mjs format instead.`);
|
|
72
|
+
}
|
|
73
|
+
if (resolvedPath.endsWith('.js') || resolvedPath.endsWith('.cjs')) {
|
|
74
|
+
throw new Error(`CommonJS/JavaScript config files are not supported: '${configPath}'. Please use .mjs format instead.`);
|
|
75
|
+
}
|
|
76
|
+
if (!resolvedPath.endsWith('.mjs')) {
|
|
77
|
+
throw new Error(`Unsupported config file format: '${configPath}'. Only .mjs files are supported.`);
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const moduleResult = await import(resolvedPath);
|
|
81
|
+
return moduleResult.default || moduleResult;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw new Error(`Failed to load seed config from ${resolvedPath}: ${error}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
resolveExecutionOrder(configs) {
|
|
88
|
+
const sorted = [];
|
|
89
|
+
const visited = new Set();
|
|
90
|
+
const visiting = new Set();
|
|
91
|
+
const visit = (config) => {
|
|
92
|
+
if (visiting.has(config.name)) {
|
|
93
|
+
throw new Error(`Circular dependency detected: ${config.name}`);
|
|
94
|
+
}
|
|
95
|
+
if (visited.has(config.name)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
visiting.add(config.name);
|
|
99
|
+
for (const dep of config.dependencies || []) {
|
|
100
|
+
const depConfig = configs.find((candidate) => candidate.name === dep);
|
|
101
|
+
if (depConfig) {
|
|
102
|
+
visit(depConfig);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
visiting.delete(config.name);
|
|
106
|
+
visited.add(config.name);
|
|
107
|
+
sorted.push(config);
|
|
108
|
+
};
|
|
109
|
+
const orderedConfigs = [...configs].sort((a, b) => (a.order || 0) - (b.order || 0));
|
|
110
|
+
for (const config of orderedConfigs) {
|
|
111
|
+
if (config.enabled !== false) {
|
|
112
|
+
visit(config);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const allSeeds = sorted.flatMap((config) => {
|
|
116
|
+
return config.seeds
|
|
117
|
+
.filter((seed) => seed.enabled !== false)
|
|
118
|
+
.map((seed) => {
|
|
119
|
+
if (config.configPath) {
|
|
120
|
+
return {
|
|
121
|
+
...seed,
|
|
122
|
+
configPath: config.configPath
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return seed;
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
// Extract logLevel from root config (first config with logLevel defined)
|
|
129
|
+
const logLevel = configs.find((config) => config.logLevel !== undefined)?.logLevel;
|
|
130
|
+
return {
|
|
131
|
+
seeds: allSeeds,
|
|
132
|
+
executionOrder: sorted.map((config) => config.name),
|
|
133
|
+
logLevel
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=SeedConfigDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeedConfigDiscovery.js","sourceRoot":"","sources":["../../src/discovery/SeedConfigDiscovery.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAUtD,MAAM,OAAO,mBAAmB;IAE5B,iBAAiB;IAEA,GAAG,CAAa;IAChB,gBAAgB,CAAW;IAC3B,OAAO,CAAa;IAErC,aAAa;IAEb,eAAe;IAEf;QACI,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG;YACpB,gBAAgB;YAChB,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,iBAAiB;SACpB,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,CAAC;IAED,aAAa;IAEb,kBAAkB;IAEX,KAAK,CAAC,QAAQ,CAAC,OAAoC;QACtD,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,UAAU,GAAuB,IAAI,CAAC;QAE1C,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,cAAc,GAAG,UAAU,CAAC;gBAC5B,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC/C,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC1C,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,kBAAkB,GAAG,UAAsD,CAAC;QAClF,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAEhF,MAAM,cAAc,GAAkB,EAAE,CAAC;QAEzC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;YACvH,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;oBAChC,SAAS;gBACb,CAAC;gBAED,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBACjD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;oBAClD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;QAE7E,OAAO;YACH,UAAU;YACV,cAAc;YACd,QAAQ;SACX,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,UAAkB;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjG,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,oCAAoC,CAAC,CAAC;QACnH,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,wDAAwD,UAAU,oCAAoC,CAAC,CAAC;QAC5H,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,mCAAmC,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAChD,OAAO,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,OAAsB;QAKhD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,MAAM,KAAK,GAAG,CAAC,MAAmB,EAAQ,EAAE;YACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO;YACX,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACtE,IAAI,SAAS,EAAE,CAAC;oBACZ,KAAK,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpF,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC3B,KAAK,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACvC,OAAO,MAAM,CAAC,KAAK;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;iBACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACV,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpB,OAAO;wBACH,GAAG,IAAI;wBACP,UAAU,EAAE,MAAM,CAAC,UAAU;qBAChC,CAAC;gBACN,CAAC;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,QAAQ,CAAC;QAEnF,OAAO;YACH,KAAK,EAAE,QAAQ;YACf,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YACnD,QAAQ;SACX,CAAC;IACN,CAAC;CAIJ"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export * from './config/defineConfig.js';
|
|
2
|
+
export * from './config/createSeed.js';
|
|
3
|
+
export * from './config/IComposedSeedConfig.js';
|
|
4
|
+
export * from './config/ISeedConfig.js';
|
|
5
|
+
export * from './config/ISeedDefinition.js';
|
|
6
|
+
export * from './config/ISeedFactory.js';
|
|
7
|
+
export * from './logging/ISeedLogger.js';
|
|
8
|
+
export * from './logging/LogLevel.js';
|
|
9
|
+
export * from './config/ISeedOptions.js';
|
|
10
|
+
export * from './config/ISeedContext.js';
|
|
11
|
+
export * from './config/ISeedResult.js';
|
|
12
|
+
export * from './config/ISeeder.js';
|
|
13
|
+
export * from './config/IAssetConfig.js';
|
|
14
|
+
export * from './discovery/SeedConfigDiscovery.js';
|
|
15
|
+
export * from './orchestration/SeedOrchestrator.js';
|
|
16
|
+
export * from './base/BaseSeeder.js';
|
|
17
|
+
export * from './base/functionalSeeder.js';
|
|
18
|
+
export * from './utils/SeededRandom.js';
|
|
19
|
+
export * from './utils/ISeedRandom.js';
|
|
20
|
+
export * from './utils/AssetReferenceResolver.js';
|
|
21
|
+
export * from './utils/LocalizationToolkit.js';
|
|
22
|
+
export * from './utils/EntityLookupCache.js';
|
|
23
|
+
export * from './utils/StringArrayToolkit.js';
|
|
24
|
+
export * from './utils/StringValueGuard.js';
|
|
25
|
+
export * from './utils/WarningCollector.js';
|
|
26
|
+
export * from './resolvers/EntityResolver.js';
|
|
27
|
+
export * from './assets/AssetManager.js';
|
|
28
|
+
export * from './assets/IImageTransformOptions.js';
|
|
29
|
+
export * from './assets/adapters/index.js';
|
|
30
|
+
export * from './ai/index.js';
|
|
31
|
+
export * from './json/index.js';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
|
package/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export * from './config/defineConfig.js';
|
|
2
|
+
export * from './config/createSeed.js';
|
|
3
|
+
export * from './config/IComposedSeedConfig.js';
|
|
4
|
+
export * from './config/ISeedConfig.js';
|
|
5
|
+
export * from './config/ISeedDefinition.js';
|
|
6
|
+
export * from './config/ISeedFactory.js';
|
|
7
|
+
export * from './logging/ISeedLogger.js';
|
|
8
|
+
export * from './logging/LogLevel.js';
|
|
9
|
+
export * from './config/ISeedOptions.js';
|
|
10
|
+
export * from './config/ISeedContext.js';
|
|
11
|
+
export * from './config/ISeedResult.js';
|
|
12
|
+
export * from './config/ISeeder.js';
|
|
13
|
+
export * from './config/IAssetConfig.js';
|
|
14
|
+
export * from './discovery/SeedConfigDiscovery.js';
|
|
15
|
+
export * from './orchestration/SeedOrchestrator.js';
|
|
16
|
+
export * from './base/BaseSeeder.js';
|
|
17
|
+
export * from './base/functionalSeeder.js';
|
|
18
|
+
export * from './utils/SeededRandom.js';
|
|
19
|
+
export * from './utils/ISeedRandom.js';
|
|
20
|
+
export * from './utils/AssetReferenceResolver.js';
|
|
21
|
+
export * from './utils/LocalizationToolkit.js';
|
|
22
|
+
export * from './utils/EntityLookupCache.js';
|
|
23
|
+
export * from './utils/StringArrayToolkit.js';
|
|
24
|
+
export * from './utils/StringValueGuard.js';
|
|
25
|
+
export * from './utils/WarningCollector.js';
|
|
26
|
+
export * from './resolvers/EntityResolver.js';
|
|
27
|
+
export * from './assets/AssetManager.js';
|
|
28
|
+
export * from './assets/IImageTransformOptions.js';
|
|
29
|
+
export * from './assets/adapters/index.js';
|
|
30
|
+
export * from './ai/index.js';
|
|
31
|
+
export * from './json/index.js';
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ISeedContext } from '../config/ISeedContext.js';
|
|
2
|
+
import type { IJsonReferenceConfig } from './JsonSeedTypes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolver for references in JSON seed data.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare class JsonReferenceResolver {
|
|
9
|
+
private readonly _config;
|
|
10
|
+
private readonly _refPrefix;
|
|
11
|
+
private readonly _assetPrefix;
|
|
12
|
+
constructor(config: IJsonReferenceConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Resolve all references in the given data.
|
|
15
|
+
*
|
|
16
|
+
* @param data Data containing references
|
|
17
|
+
* @param context Seed context
|
|
18
|
+
* @returns Data with resolved references
|
|
19
|
+
*/
|
|
20
|
+
resolve(data: unknown, context: ISeedContext): Promise<unknown>;
|
|
21
|
+
private _resolveValue;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=JsonReferenceResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonReferenceResolver.d.ts","sourceRoot":"","sources":["../../src/json/JsonReferenceResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI/D;;;;GAIG;AACH,qBAAa,qBAAqB;IAI9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAMnB,MAAM,EAAE,oBAAoB;IAU/C;;;;;;OAMG;IACU,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;YAkB9D,aAAa;CA8D9B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
// #endregion
|
|
3
|
+
/**
|
|
4
|
+
* Resolver for references in JSON seed data.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export class JsonReferenceResolver {
|
|
9
|
+
// #region Fields
|
|
10
|
+
_config;
|
|
11
|
+
_refPrefix;
|
|
12
|
+
_assetPrefix;
|
|
13
|
+
// #endregion
|
|
14
|
+
// #region Ctor
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this._config = config;
|
|
17
|
+
this._refPrefix = config.prefix ?? '@ref:';
|
|
18
|
+
this._assetPrefix = config.assetPrefix ?? '@asset:';
|
|
19
|
+
}
|
|
20
|
+
// #endregion
|
|
21
|
+
// #region Methods
|
|
22
|
+
/**
|
|
23
|
+
* Resolve all references in the given data.
|
|
24
|
+
*
|
|
25
|
+
* @param data Data containing references
|
|
26
|
+
* @param context Seed context
|
|
27
|
+
* @returns Data with resolved references
|
|
28
|
+
*/
|
|
29
|
+
async resolve(data, context) {
|
|
30
|
+
if (Array.isArray(data)) {
|
|
31
|
+
return Promise.all(data.map((item) => this.resolve(item, context)));
|
|
32
|
+
}
|
|
33
|
+
if (data && typeof data === 'object') {
|
|
34
|
+
const resolved = {};
|
|
35
|
+
for (const [key, value] of Object.entries(data)) {
|
|
36
|
+
resolved[key] = await this._resolveValue(value, context);
|
|
37
|
+
}
|
|
38
|
+
return resolved;
|
|
39
|
+
}
|
|
40
|
+
return this._resolveValue(data, context);
|
|
41
|
+
}
|
|
42
|
+
async _resolveValue(value, context) {
|
|
43
|
+
// Handle string references
|
|
44
|
+
if (typeof value === 'string') {
|
|
45
|
+
// Asset reference
|
|
46
|
+
if (value.startsWith(this._assetPrefix)) {
|
|
47
|
+
const assetKey = value.slice(this._assetPrefix.length);
|
|
48
|
+
const assetUrl = context.assets.getAsset(assetKey);
|
|
49
|
+
if (!assetUrl) {
|
|
50
|
+
if (context.warnings) {
|
|
51
|
+
context.warnings.add(`Asset not found: ${assetKey}`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
context.logger.warn(`Asset not found: ${assetKey}`);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
return assetUrl;
|
|
59
|
+
}
|
|
60
|
+
// Entity reference
|
|
61
|
+
if (value.startsWith(this._refPrefix)) {
|
|
62
|
+
const refKey = value.slice(this._refPrefix.length);
|
|
63
|
+
const [type, ...keyParts] = refKey.split(':');
|
|
64
|
+
const key = keyParts.join(':');
|
|
65
|
+
const resolver = this._config.resolvers?.[type];
|
|
66
|
+
if (!resolver) {
|
|
67
|
+
if (context.warnings) {
|
|
68
|
+
context.warnings.add(`No resolver found for reference type: ${type}`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
context.logger.warn(`No resolver found for reference type: ${type}`);
|
|
72
|
+
}
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
return await resolver.resolve(key, context);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
context.logger.error(`Failed to resolve reference ${value}: ${error}`);
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Handle arrays
|
|
85
|
+
if (Array.isArray(value)) {
|
|
86
|
+
return Promise.all(value.map((item) => this._resolveValue(item, context)));
|
|
87
|
+
}
|
|
88
|
+
// Handle nested objects
|
|
89
|
+
if (value && typeof value === 'object') {
|
|
90
|
+
const resolved = {};
|
|
91
|
+
for (const [k, v] of Object.entries(value)) {
|
|
92
|
+
resolved[k] = await this._resolveValue(v, context);
|
|
93
|
+
}
|
|
94
|
+
return resolved;
|
|
95
|
+
}
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=JsonReferenceResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonReferenceResolver.js","sourceRoot":"","sources":["../../src/json/JsonReferenceResolver.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAKlB,aAAa;AAEb;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAE9B,iBAAiB;IAEA,OAAO,CAAuB;IAC9B,UAAU,CAAS;IACnB,YAAY,CAAS;IAEtC,aAAa;IAEb,eAAe;IAEf,YAAmB,MAA4B;QAC3C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC;IACxD,CAAC;IAED,aAAa;IAEb,kBAAkB;IAElB;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAAC,IAAa,EAAE,OAAqB;QACrD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,KAAc,EAAE,OAAqB;QAC7D,2BAA2B;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,kBAAkB;YAClB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC;oBACxD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,OAAO,QAAQ,CAAC;YACpB,CAAC;YAED,mBAAmB;YACnB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACnB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;oBAC1E,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;oBACzE,CAAC;oBACD,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,IAAI,CAAC;oBACD,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC;oBACvE,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;QACL,CAAC;QAED,gBAAgB;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,wBAAwB;QACxB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CAIJ"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ISeedLogger } from '../logging/ISeedLogger.js';
|
|
2
|
+
import type { IJsonValidationResult } from './JsonSeedTypes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validator for JSON data against JSON Schema.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare class JsonSchemaValidator {
|
|
9
|
+
private readonly _fileSystem;
|
|
10
|
+
private readonly _logger;
|
|
11
|
+
constructor(logger: ISeedLogger);
|
|
12
|
+
/**
|
|
13
|
+
* Validate data against a JSON schema.
|
|
14
|
+
*
|
|
15
|
+
* @param data Data to validate
|
|
16
|
+
* @param schemaPath Path to JSON schema file
|
|
17
|
+
* @returns Validation result
|
|
18
|
+
*/
|
|
19
|
+
validate(data: unknown, schemaPath: string): IJsonValidationResult;
|
|
20
|
+
private _validateAgainstSchema;
|
|
21
|
+
private _validateDocument;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=JsonSchemaValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSchemaValidator.d.ts","sourceRoot":"","sources":["../../src/json/JsonSchemaValidator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAIhE;;;;GAIG;AACH,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAMnB,MAAM,EAAE,WAAW;IAStC;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,qBAAqB;IAgCzE,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,iBAAiB;CAuC5B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { FileSystem } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
// #endregion
|
|
4
|
+
/**
|
|
5
|
+
* Validator for JSON data against JSON Schema.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export class JsonSchemaValidator {
|
|
10
|
+
// #region Fields
|
|
11
|
+
_fileSystem;
|
|
12
|
+
_logger;
|
|
13
|
+
// #endregion
|
|
14
|
+
// #region Ctor
|
|
15
|
+
constructor(logger) {
|
|
16
|
+
this._fileSystem = new FileSystem();
|
|
17
|
+
this._logger = logger;
|
|
18
|
+
}
|
|
19
|
+
// #endregion
|
|
20
|
+
// #region Methods
|
|
21
|
+
/**
|
|
22
|
+
* Validate data against a JSON schema.
|
|
23
|
+
*
|
|
24
|
+
* @param data Data to validate
|
|
25
|
+
* @param schemaPath Path to JSON schema file
|
|
26
|
+
* @returns Validation result
|
|
27
|
+
*/
|
|
28
|
+
validate(data, schemaPath) {
|
|
29
|
+
try {
|
|
30
|
+
// Load schema
|
|
31
|
+
const schemaContent = this._fileSystem.fileReadAllText(schemaPath, 'utf-8');
|
|
32
|
+
const schema = JSON.parse(schemaContent);
|
|
33
|
+
// Basic validation (can be extended with ajv or similar)
|
|
34
|
+
const errors = this._validateAgainstSchema(data, schema);
|
|
35
|
+
if (errors.length > 0) {
|
|
36
|
+
return {
|
|
37
|
+
isValid: false,
|
|
38
|
+
errors,
|
|
39
|
+
data: undefined
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
isValid: true,
|
|
44
|
+
errors: [],
|
|
45
|
+
data
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this._logger.error(`Schema validation failed: ${error}`);
|
|
50
|
+
return {
|
|
51
|
+
isValid: false,
|
|
52
|
+
errors: [String(error)],
|
|
53
|
+
data: undefined
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_validateAgainstSchema(data, schema) {
|
|
58
|
+
const errors = [];
|
|
59
|
+
// When validating raw documents (before extraction), each document should be validated individually
|
|
60
|
+
const documents = Array.isArray(data) ? data : [data];
|
|
61
|
+
for (const document of documents) {
|
|
62
|
+
const documentErrors = this._validateDocument(document, schema);
|
|
63
|
+
errors.push(...documentErrors);
|
|
64
|
+
}
|
|
65
|
+
return errors;
|
|
66
|
+
}
|
|
67
|
+
_validateDocument(document, schema) {
|
|
68
|
+
const errors = [];
|
|
69
|
+
const schemaType = schema['type'];
|
|
70
|
+
if (schemaType) {
|
|
71
|
+
const documentType = Array.isArray(document) ? 'array' : typeof document;
|
|
72
|
+
if (schemaType === 'array') {
|
|
73
|
+
if (!Array.isArray(document)) {
|
|
74
|
+
errors.push(`Expected type array, got ${documentType}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (documentType !== schemaType) {
|
|
78
|
+
errors.push(`Expected type ${String(schemaType)}, got ${documentType}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (schema['required'] && Array.isArray(schema['required'])) {
|
|
82
|
+
const requiredFields = schema['required'];
|
|
83
|
+
if (typeof document !== 'object' || document === null) {
|
|
84
|
+
errors.push('Required field validation failed: document is not an object');
|
|
85
|
+
return errors;
|
|
86
|
+
}
|
|
87
|
+
for (const requiredField of requiredFields) {
|
|
88
|
+
if (!(requiredField in document)) {
|
|
89
|
+
errors.push(`Missing required field: ${requiredField}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// TODO: Add more comprehensive validation using ajv or zod
|
|
94
|
+
// For now, we keep it simple and rely on runtime errors
|
|
95
|
+
return errors;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=JsonSchemaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonSchemaValidator.js","sourceRoot":"","sources":["../../src/json/JsonSchemaValidator.ts"],"names":[],"mappings":"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"}
|