@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.
Files changed (252) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +284 -0
  4. package/ai/AISeedGenerator.d.ts +127 -0
  5. package/ai/AISeedGenerator.d.ts.map +1 -0
  6. package/ai/AISeedGenerator.js +438 -0
  7. package/ai/AISeedGenerator.js.map +1 -0
  8. package/ai/AISeedTypes.d.ts +138 -0
  9. package/ai/AISeedTypes.d.ts.map +1 -0
  10. package/ai/AISeedTypes.js +3 -0
  11. package/ai/AISeedTypes.js.map +1 -0
  12. package/ai/PrismaModelAnalyzer.d.ts +36 -0
  13. package/ai/PrismaModelAnalyzer.d.ts.map +1 -0
  14. package/ai/PrismaModelAnalyzer.js +110 -0
  15. package/ai/PrismaModelAnalyzer.js.map +1 -0
  16. package/ai/PrismaTypeSchemaGenerator.d.ts +38 -0
  17. package/ai/PrismaTypeSchemaGenerator.d.ts.map +1 -0
  18. package/ai/PrismaTypeSchemaGenerator.js +71 -0
  19. package/ai/PrismaTypeSchemaGenerator.js.map +1 -0
  20. package/ai/createAISeeder.d.ts +11 -0
  21. package/ai/createAISeeder.d.ts.map +1 -0
  22. package/ai/createAISeeder.js +72 -0
  23. package/ai/createAISeeder.js.map +1 -0
  24. package/ai/index.d.ts +6 -0
  25. package/ai/index.d.ts.map +1 -0
  26. package/ai/index.js +5 -0
  27. package/ai/index.js.map +1 -0
  28. package/assets/AssetManager.d.ts +213 -0
  29. package/assets/AssetManager.d.ts.map +1 -0
  30. package/assets/AssetManager.js +460 -0
  31. package/assets/AssetManager.js.map +1 -0
  32. package/assets/IImageTransformOptions.d.ts +42 -0
  33. package/assets/IImageTransformOptions.d.ts.map +1 -0
  34. package/assets/IImageTransformOptions.js +22 -0
  35. package/assets/IImageTransformOptions.js.map +1 -0
  36. package/assets/adapters/BlobAdapterFactory.d.ts +21 -0
  37. package/assets/adapters/BlobAdapterFactory.d.ts.map +1 -0
  38. package/assets/adapters/BlobAdapterFactory.js +3 -0
  39. package/assets/adapters/BlobAdapterFactory.js.map +1 -0
  40. package/assets/adapters/CloudflareR2BlobAdapter.d.ts +97 -0
  41. package/assets/adapters/CloudflareR2BlobAdapter.d.ts.map +1 -0
  42. package/assets/adapters/CloudflareR2BlobAdapter.js +265 -0
  43. package/assets/adapters/CloudflareR2BlobAdapter.js.map +1 -0
  44. package/assets/adapters/EmptyBlobAdapter.d.ts +42 -0
  45. package/assets/adapters/EmptyBlobAdapter.d.ts.map +1 -0
  46. package/assets/adapters/EmptyBlobAdapter.js +65 -0
  47. package/assets/adapters/EmptyBlobAdapter.js.map +1 -0
  48. package/assets/adapters/LocalFileAdapter.d.ts +34 -0
  49. package/assets/adapters/LocalFileAdapter.d.ts.map +1 -0
  50. package/assets/adapters/LocalFileAdapter.js +74 -0
  51. package/assets/adapters/LocalFileAdapter.js.map +1 -0
  52. package/assets/adapters/VercelBlobAdapter.d.ts +73 -0
  53. package/assets/adapters/VercelBlobAdapter.d.ts.map +1 -0
  54. package/assets/adapters/VercelBlobAdapter.js +168 -0
  55. package/assets/adapters/VercelBlobAdapter.js.map +1 -0
  56. package/assets/adapters/abstracts/BlobAdapterBase.d.ts +62 -0
  57. package/assets/adapters/abstracts/BlobAdapterBase.d.ts.map +1 -0
  58. package/assets/adapters/abstracts/BlobAdapterBase.js +58 -0
  59. package/assets/adapters/abstracts/BlobAdapterBase.js.map +1 -0
  60. package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts +43 -0
  61. package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts.map +1 -0
  62. package/assets/adapters/abstracts/HttpBlobAdapterBase.js +88 -0
  63. package/assets/adapters/abstracts/HttpBlobAdapterBase.js.map +1 -0
  64. package/assets/adapters/createBlobAdapter.d.ts +47 -0
  65. package/assets/adapters/createBlobAdapter.d.ts.map +1 -0
  66. package/assets/adapters/createBlobAdapter.js +63 -0
  67. package/assets/adapters/createBlobAdapter.js.map +1 -0
  68. package/assets/adapters/index.d.ts +11 -0
  69. package/assets/adapters/index.d.ts.map +1 -0
  70. package/assets/adapters/index.js +7 -0
  71. package/assets/adapters/index.js.map +1 -0
  72. package/assets/adapters/interfaces/IBlobAdapter.d.ts +41 -0
  73. package/assets/adapters/interfaces/IBlobAdapter.d.ts.map +1 -0
  74. package/assets/adapters/interfaces/IBlobAdapter.js +3 -0
  75. package/assets/adapters/interfaces/IBlobAdapter.js.map +1 -0
  76. package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts +16 -0
  77. package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts.map +1 -0
  78. package/assets/adapters/interfaces/IBlobAdapterConfig.js +2 -0
  79. package/assets/adapters/interfaces/IBlobAdapterConfig.js.map +1 -0
  80. package/assets/adapters/interfaces/IBlobUploadResult.d.ts +24 -0
  81. package/assets/adapters/interfaces/IBlobUploadResult.d.ts.map +1 -0
  82. package/assets/adapters/interfaces/IBlobUploadResult.js +2 -0
  83. package/assets/adapters/interfaces/IBlobUploadResult.js.map +1 -0
  84. package/base/BaseSeeder.d.ts +21 -0
  85. package/base/BaseSeeder.d.ts.map +1 -0
  86. package/base/BaseSeeder.js +45 -0
  87. package/base/BaseSeeder.js.map +1 -0
  88. package/base/functionalSeeder.d.ts +31 -0
  89. package/base/functionalSeeder.d.ts.map +1 -0
  90. package/base/functionalSeeder.js +33 -0
  91. package/base/functionalSeeder.js.map +1 -0
  92. package/cli/Cli.d.ts +2 -0
  93. package/cli/Cli.d.ts.map +1 -0
  94. package/cli/Cli.js +32 -0
  95. package/cli/Cli.js.map +1 -0
  96. package/cli/CliArgs.d.ts +2 -0
  97. package/cli/CliArgs.d.ts.map +1 -0
  98. package/cli/CliArgs.js +133 -0
  99. package/cli/CliArgs.js.map +1 -0
  100. package/cli/CliArgsConfig.d.ts +2 -0
  101. package/cli/CliArgsConfig.d.ts.map +1 -0
  102. package/cli/CliArgsConfig.js +15 -0
  103. package/cli/CliArgsConfig.js.map +1 -0
  104. package/cli/CliRun.d.ts +2 -0
  105. package/cli/CliRun.d.ts.map +1 -0
  106. package/cli/CliRun.js +34 -0
  107. package/cli/CliRun.js.map +1 -0
  108. package/cli/commands/SeedCommand.d.ts +2 -0
  109. package/cli/commands/SeedCommand.d.ts.map +1 -0
  110. package/cli/commands/SeedCommand.js +73 -0
  111. package/cli/commands/SeedCommand.js.map +1 -0
  112. package/cli/commands/SeedCommandArgsConfig.d.ts +2 -0
  113. package/cli/commands/SeedCommandArgsConfig.d.ts.map +1 -0
  114. package/cli/commands/SeedCommandArgsConfig.js +31 -0
  115. package/cli/commands/SeedCommandArgsConfig.js.map +1 -0
  116. package/cli/seed.d.ts +2 -0
  117. package/cli/seed.d.ts.map +1 -0
  118. package/cli/seed.js +42 -0
  119. package/cli/seed.js.map +1 -0
  120. package/config/IAssetConfig.d.ts +36 -0
  121. package/config/IAssetConfig.d.ts.map +1 -0
  122. package/config/IAssetConfig.js +3 -0
  123. package/config/IAssetConfig.js.map +1 -0
  124. package/config/IComposedSeedConfig.d.ts +32 -0
  125. package/config/IComposedSeedConfig.d.ts.map +1 -0
  126. package/config/IComposedSeedConfig.js +3 -0
  127. package/config/IComposedSeedConfig.js.map +1 -0
  128. package/config/ISeedConfig.d.ts +75 -0
  129. package/config/ISeedConfig.d.ts.map +1 -0
  130. package/config/ISeedConfig.js +3 -0
  131. package/config/ISeedConfig.js.map +1 -0
  132. package/config/ISeedContext.d.ts +92 -0
  133. package/config/ISeedContext.d.ts.map +1 -0
  134. package/config/ISeedContext.js +3 -0
  135. package/config/ISeedContext.js.map +1 -0
  136. package/config/ISeedDefinition.d.ts +38 -0
  137. package/config/ISeedDefinition.d.ts.map +1 -0
  138. package/config/ISeedDefinition.js +3 -0
  139. package/config/ISeedDefinition.js.map +1 -0
  140. package/config/ISeedFactory.d.ts +15 -0
  141. package/config/ISeedFactory.d.ts.map +1 -0
  142. package/config/ISeedFactory.js +3 -0
  143. package/config/ISeedFactory.js.map +1 -0
  144. package/config/ISeedOptions.d.ts +44 -0
  145. package/config/ISeedOptions.d.ts.map +1 -0
  146. package/config/ISeedOptions.js +2 -0
  147. package/config/ISeedOptions.js.map +1 -0
  148. package/config/ISeedResult.d.ts +44 -0
  149. package/config/ISeedResult.d.ts.map +1 -0
  150. package/config/ISeedResult.js +2 -0
  151. package/config/ISeedResult.js.map +1 -0
  152. package/config/ISeeder.d.ts +37 -0
  153. package/config/ISeeder.d.ts.map +1 -0
  154. package/config/ISeeder.js +3 -0
  155. package/config/ISeeder.js.map +1 -0
  156. package/config/createAdapter.d.ts +13 -0
  157. package/config/createAdapter.d.ts.map +1 -0
  158. package/config/createAdapter.js +16 -0
  159. package/config/createAdapter.js.map +1 -0
  160. package/config/createSeed.d.ts +6 -0
  161. package/config/createSeed.d.ts.map +1 -0
  162. package/config/createSeed.js +16 -0
  163. package/config/createSeed.js.map +1 -0
  164. package/config/defineConfig.d.ts +27 -0
  165. package/config/defineConfig.d.ts.map +1 -0
  166. package/config/defineConfig.js +35 -0
  167. package/config/defineConfig.js.map +1 -0
  168. package/discovery/SeedConfigDiscovery.d.ts +16 -0
  169. package/discovery/SeedConfigDiscovery.d.ts.map +1 -0
  170. package/discovery/SeedConfigDiscovery.js +137 -0
  171. package/discovery/SeedConfigDiscovery.js.map +1 -0
  172. package/index.d.ts +32 -0
  173. package/index.d.ts.map +1 -0
  174. package/index.js +32 -0
  175. package/index.js.map +1 -0
  176. package/json/JsonReferenceResolver.d.ts +23 -0
  177. package/json/JsonReferenceResolver.d.ts.map +1 -0
  178. package/json/JsonReferenceResolver.js +99 -0
  179. package/json/JsonReferenceResolver.js.map +1 -0
  180. package/json/JsonSchemaValidator.d.ts +23 -0
  181. package/json/JsonSchemaValidator.d.ts.map +1 -0
  182. package/json/JsonSchemaValidator.js +98 -0
  183. package/json/JsonSchemaValidator.js.map +1 -0
  184. package/json/JsonSeedLoader.d.ts +33 -0
  185. package/json/JsonSeedLoader.d.ts.map +1 -0
  186. package/json/JsonSeedLoader.js +176 -0
  187. package/json/JsonSeedLoader.js.map +1 -0
  188. package/json/JsonSeedTypes.d.ts +204 -0
  189. package/json/JsonSeedTypes.d.ts.map +1 -0
  190. package/json/JsonSeedTypes.js +3 -0
  191. package/json/JsonSeedTypes.js.map +1 -0
  192. package/json/createJsonSeeder.d.ts +13 -0
  193. package/json/createJsonSeeder.d.ts.map +1 -0
  194. package/json/createJsonSeeder.js +240 -0
  195. package/json/createJsonSeeder.js.map +1 -0
  196. package/json/index.d.ts +6 -0
  197. package/json/index.d.ts.map +1 -0
  198. package/json/index.js +7 -0
  199. package/json/index.js.map +1 -0
  200. package/logging/ISeedLogger.d.ts +55 -0
  201. package/logging/ISeedLogger.d.ts.map +1 -0
  202. package/logging/ISeedLogger.js +3 -0
  203. package/logging/ISeedLogger.js.map +1 -0
  204. package/logging/LogLevel.d.ts +30 -0
  205. package/logging/LogLevel.d.ts.map +1 -0
  206. package/logging/LogLevel.js +37 -0
  207. package/logging/LogLevel.js.map +1 -0
  208. package/logging/SeedLogger.d.ts +24 -0
  209. package/logging/SeedLogger.d.ts.map +1 -0
  210. package/logging/SeedLogger.js +94 -0
  211. package/logging/SeedLogger.js.map +1 -0
  212. package/orchestration/SeedOrchestrator.d.ts +30 -0
  213. package/orchestration/SeedOrchestrator.d.ts.map +1 -0
  214. package/orchestration/SeedOrchestrator.js +262 -0
  215. package/orchestration/SeedOrchestrator.js.map +1 -0
  216. package/package.json +27 -0
  217. package/resolvers/EntityResolver.d.ts +43 -0
  218. package/resolvers/EntityResolver.d.ts.map +1 -0
  219. package/resolvers/EntityResolver.js +95 -0
  220. package/resolvers/EntityResolver.js.map +1 -0
  221. package/utils/AssetReferenceResolver.d.ts +49 -0
  222. package/utils/AssetReferenceResolver.d.ts.map +1 -0
  223. package/utils/AssetReferenceResolver.js +62 -0
  224. package/utils/AssetReferenceResolver.js.map +1 -0
  225. package/utils/EntityLookupCache.d.ts +47 -0
  226. package/utils/EntityLookupCache.d.ts.map +1 -0
  227. package/utils/EntityLookupCache.js +64 -0
  228. package/utils/EntityLookupCache.js.map +1 -0
  229. package/utils/ISeedRandom.d.ts +70 -0
  230. package/utils/ISeedRandom.d.ts.map +1 -0
  231. package/utils/ISeedRandom.js +3 -0
  232. package/utils/ISeedRandom.js.map +1 -0
  233. package/utils/LocalizationToolkit.d.ts +125 -0
  234. package/utils/LocalizationToolkit.d.ts.map +1 -0
  235. package/utils/LocalizationToolkit.js +131 -0
  236. package/utils/LocalizationToolkit.js.map +1 -0
  237. package/utils/SeededRandom.d.ts +15 -0
  238. package/utils/SeededRandom.d.ts.map +1 -0
  239. package/utils/SeededRandom.js +56 -0
  240. package/utils/SeededRandom.js.map +1 -0
  241. package/utils/StringArrayToolkit.d.ts +25 -0
  242. package/utils/StringArrayToolkit.d.ts.map +1 -0
  243. package/utils/StringArrayToolkit.js +56 -0
  244. package/utils/StringArrayToolkit.js.map +1 -0
  245. package/utils/StringValueGuard.d.ts +24 -0
  246. package/utils/StringValueGuard.d.ts.map +1 -0
  247. package/utils/StringValueGuard.js +46 -0
  248. package/utils/StringValueGuard.js.map +1 -0
  249. package/utils/WarningCollector.d.ts +40 -0
  250. package/utils/WarningCollector.d.ts.map +1 -0
  251. package/utils/WarningCollector.js +83 -0
  252. 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":"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"}
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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"}