@ooneex/seeds 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -20,4 +20,9 @@ declare const seedCreate: (config: {
20
20
  testPath: string;
21
21
  dataPath: string;
22
22
  }>;
23
- export { seedCreate, run, getSeeds, decorator, SeedClassType, ISeed };
23
+ declare const seedTestCreate: (config: {
24
+ name: string;
25
+ testsDir: string;
26
+ module?: string;
27
+ }) => Promise<string>;
28
+ export { seedTestCreate, seedCreate, run, getSeeds, decorator, SeedClassType, ISeed };
package/dist/index.js CHANGED
@@ -118,10 +118,10 @@ import { toKebabCase, toPascalCase } from "@ooneex/utils";
118
118
  var {Glob } = globalThis.Bun;
119
119
 
120
120
  // src/seed.test.txt
121
- var seed_test_default = `import { existsSync } from "node:fs";
122
- import { join } from "node:path";
121
+ var seed_test_default = `import { join } from "node:path";
123
122
  import { describe, expect, test } from "bun:test";
124
123
  import { {{NAME}}Seed } from "@module/{{MODULE}}/seeds/{{NAME}}Seed";
124
+ import {{MODULE}}Yml from "../../{{MODULE}}.yml";
125
125
 
126
126
  describe("{{NAME}}Seed", () => {
127
127
  test("should have class name ending with 'Seed'", () => {
@@ -143,9 +143,19 @@ describe("{{NAME}}Seed", () => {
143
143
  expect(typeof {{NAME}}Seed.prototype.getDependencies).toBe("function");
144
144
  });
145
145
 
146
- test("should have a data yml file", () => {
147
- const dataFile = join(__dirname, "..", "src", "seeds", "{{DATA_FILE}}.yml");
148
- expect(existsSync(dataFile)).toBe(true);
146
+ test("should have a data yml file", async () => {
147
+ const dataFile = Bun.file(join(import.meta.dir, "../../src/seeds/{{DATA_FILE}}.yml"));
148
+ expect(await dataFile.exists()).toBe(true);
149
+ });
150
+
151
+ test("should match the locked hash in {{MODULE}}.yml", async () => {
152
+ const content = await Bun.file(join(import.meta.dir, "../../src/seeds/{{DATA_FILE}}.yml")).text();
153
+ const actualHash = new Bun.CryptoHasher("sha256").update(content).digest("hex");
154
+
155
+ const lockedSeeds = {{MODULE}}Yml.seeds as Record<string, { hash: string }>;
156
+ const lockedHash = lockedSeeds["{{DATA_FILE}}"]?.hash;
157
+ expect(lockedHash).toBeDefined();
158
+ expect(actualHash).toBe(lockedHash as string);
149
159
  });
150
160
  });
151
161
  `;
@@ -201,11 +211,27 @@ var seedCreate = async (config) => {
201
211
  dataPath: join(seedsDir, `${dataFile}.yml`)
202
212
  };
203
213
  };
214
+ // src/seedTestCreate.ts
215
+ import { join as join2 } from "path";
216
+ import { toKebabCase as toKebabCase2 } from "@ooneex/utils";
217
+ var seedTestCreate = async (config) => {
218
+ const { name, testsDir, module } = config;
219
+ const testPath = join2(process.cwd(), testsDir, `${name}.spec.ts`);
220
+ const testFile = Bun.file(testPath);
221
+ if (await testFile.exists())
222
+ return testPath;
223
+ const baseName = name.replace(/Seed$/, "");
224
+ const dataFile = toKebabCase2(name);
225
+ const content = seed_test_default.replace(/\{\{NAME\}\}/g, baseName).replace(/\{\{DATA_FILE\}\}/g, dataFile).replace(/\{\{MODULE\}\}/g, module ?? "");
226
+ await Bun.write(testPath, content);
227
+ return testPath;
228
+ };
204
229
  export {
230
+ seedTestCreate,
205
231
  seedCreate,
206
232
  run,
207
233
  getSeeds,
208
234
  decorator
209
235
  };
210
236
 
211
- //# debugId=A981E280B56E88AB64756E2164756E21
237
+ //# debugId=728D696F910CF29264756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["src/decorators.ts", "src/container.ts", "src/getSeeds.ts", "src/run.ts", "src/seedCreate.ts"],
3
+ "sources": ["src/decorators.ts", "src/container.ts", "src/getSeeds.ts", "src/run.ts", "src/seedCreate.ts", "src/seedTestCreate.ts"],
4
4
  "sourcesContent": [
5
5
  "import { container, EContainerScope } from \"@ooneex/container\";\nimport { SEEDS_CONTAINER } from \"./container\";\nimport type { SeedClassType } from \"./types\";\n\nexport const decorator = {\n seed: (scope: EContainerScope = EContainerScope.Singleton) => {\n return (target: SeedClassType): void => {\n container.add(target, scope);\n SEEDS_CONTAINER.push(target);\n };\n },\n};\n",
6
6
  "import type { SeedClassType } from \"./types\";\n\nexport const SEEDS_CONTAINER: SeedClassType[] = [];\n",
7
7
  "import { container } from \"@ooneex/container\";\nimport { SEEDS_CONTAINER } from \"./container\";\nimport type { ISeed } from \"./types\";\n\nexport const getSeeds = (): ISeed[] => {\n const seedInstances = SEEDS_CONTAINER.map((SeedClass) => {\n return container.get(SeedClass);\n });\n\n return seedInstances.filter((seed) => seed.isActive());\n};\n",
8
- "import { parseArgs } from \"node:util\";\nimport { container } from \"@ooneex/container\";\nimport type { IException } from \"@ooneex/exception\";\nimport { TerminalLogger } from \"@ooneex/logger\";\nimport { getSeeds } from \"./getSeeds\";\nimport type { ISeed } from \"./types\";\n\nconst runSeed = async (seed: ISeed): Promise<void> => {\n const data = [];\n\n const dependencies = await seed.getDependencies();\n\n for (const dependency of dependencies) {\n const dep = container.get(dependency);\n data.push(await runSeed(dep));\n }\n\n await seed.run(data);\n};\n\nexport const run = async (): Promise<void> => {\n const { values } = parseArgs({\n args: Bun.argv,\n options: {\n drop: {\n type: \"boolean\",\n },\n },\n strict: false,\n allowPositionals: true,\n });\n\n const seeds = getSeeds();\n const logger = new TerminalLogger();\n\n if (seeds.length === 0) {\n logger.info(\"No seeds found\\n\", undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n return;\n }\n\n if (values.drop) {\n const database = container.getConstant<{ drop: () => Promise<void> }>(\n \"database\",\n );\n if (database) {\n await database.drop();\n logger.info(\"Database dropped\\n\", undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n }\n }\n\n logger.info(`Running ${seeds.length} seed(s)...\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n\n for (const seed of seeds) {\n const seedName = seed.constructor.name;\n\n if (!seed.isActive()) {\n logger.warn(`Seed ${seedName} is inactive\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n continue;\n }\n\n try {\n await runSeed(seed);\n logger.success(`Seed ${seedName} completed\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n } catch (error) {\n logger.error(`Seed ${seedName} failed\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n logger.error(error as IException);\n process.exit(1);\n }\n }\n\n try {\n const database = container.getConstant<{ close: () => Promise<void> }>(\n \"database\",\n );\n if (database) {\n await database.close();\n }\n } catch {\n // No database constant registered — nothing to close\n }\n};\n",
9
- "import { join } from \"node:path\";\nimport { toKebabCase, toPascalCase } from \"@ooneex/utils\";\nimport { Glob } from \"bun\";\nimport testTemplate from \"./seed.test.txt\";\nimport template from \"./seed.txt\";\n\nexport const seedCreate = async (config: {\n name: string;\n seedsDir?: string;\n testsDir?: string;\n module?: string;\n}): Promise<{ seedPath: string; testPath: string; dataPath: string }> => {\n const name = toPascalCase(config.name).replace(/Seed$/, \"\");\n const seedName = `${name}Seed`;\n const dataFile = toKebabCase(seedName);\n const seedsDir = config.seedsDir || \"seeds\";\n const testsDir = config.testsDir || join(\"tests\", \"seeds\");\n\n const seedContent = template.replaceAll(\"{{ name }}\", seedName).replaceAll(\"{{ dataFile }}\", dataFile);\n await Bun.write(join(process.cwd(), seedsDir, `${seedName}.ts`), seedContent);\n\n await Bun.write(join(process.cwd(), seedsDir, `${dataFile}.yml`), \"# Seed data\\n\");\n\n const testContent = testTemplate.replace(/\\{\\{NAME\\}\\}/g, name).replace(/\\{\\{DATA_FILE\\}\\}/g, dataFile).replace(/\\{\\{MODULE\\}\\}/g, config.module ?? \"\");\n await Bun.write(join(process.cwd(), testsDir, `${seedName}.spec.ts`), testContent);\n\n const imports: string[] = [];\n const glob = new Glob(\"**/*Seed.ts\");\n for await (const file of glob.scan(join(process.cwd(), seedsDir))) {\n const seedClassName = file.replace(/\\.ts$/, \"\");\n imports.push(`export { ${seedClassName} } from './${seedClassName}';`);\n }\n\n await Bun.write(join(process.cwd(), seedsDir, \"seeds.ts\"), `${imports.sort().join(\"\\n\")}\\n`);\n\n return {\n seedPath: join(seedsDir, `${seedName}.ts`),\n testPath: join(testsDir, `${seedName}.spec.ts`),\n dataPath: join(seedsDir, `${dataFile}.yml`),\n };\n};\n"
8
+ "import { parseArgs } from \"node:util\";\nimport { container } from \"@ooneex/container\";\nimport type { IException } from \"@ooneex/exception\";\nimport { TerminalLogger } from \"@ooneex/logger\";\nimport { getSeeds } from \"./getSeeds\";\nimport type { ISeed } from \"./types\";\n\nconst runSeed = async (seed: ISeed): Promise<void> => {\n const data = [];\n\n const dependencies = await seed.getDependencies();\n\n for (const dependency of dependencies) {\n const dep = container.get(dependency);\n data.push(await runSeed(dep));\n }\n\n await seed.run(data);\n};\n\nexport const run = async (): Promise<void> => {\n const { values } = parseArgs({\n args: Bun.argv,\n options: {\n drop: {\n type: \"boolean\",\n },\n },\n strict: false,\n allowPositionals: true,\n });\n\n const seeds = getSeeds();\n const logger = new TerminalLogger();\n\n if (seeds.length === 0) {\n logger.info(\"No seeds found\\n\", undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n return;\n }\n\n if (values.drop) {\n const database = container.getConstant<{ drop: () => Promise<void> }>(\"database\");\n if (database) {\n await database.drop();\n logger.info(\"Database dropped\\n\", undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n }\n }\n\n logger.info(`Running ${seeds.length} seed(s)...\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n\n for (const seed of seeds) {\n const seedName = seed.constructor.name;\n\n if (!seed.isActive()) {\n logger.warn(`Seed ${seedName} is inactive\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n continue;\n }\n\n try {\n await runSeed(seed);\n logger.success(`Seed ${seedName} completed\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n } catch (error) {\n logger.error(`Seed ${seedName} failed\\n`, undefined, {\n showTimestamp: false,\n showArrow: false,\n useSymbol: true,\n });\n logger.error(error as IException);\n process.exit(1);\n }\n }\n\n try {\n const database = container.getConstant<{ close: () => Promise<void> }>(\"database\");\n if (database) {\n await database.close();\n }\n } catch {\n // No database constant registered — nothing to close\n }\n};\n",
9
+ "import { join } from \"node:path\";\nimport { toKebabCase, toPascalCase } from \"@ooneex/utils\";\nimport { Glob } from \"bun\";\nimport testTemplate from \"./seed.test.txt\";\nimport template from \"./seed.txt\";\n\nexport const seedCreate = async (config: {\n name: string;\n seedsDir?: string;\n testsDir?: string;\n module?: string;\n}): Promise<{ seedPath: string; testPath: string; dataPath: string }> => {\n const name = toPascalCase(config.name).replace(/Seed$/, \"\");\n const seedName = `${name}Seed`;\n const dataFile = toKebabCase(seedName);\n const seedsDir = config.seedsDir || \"seeds\";\n const testsDir = config.testsDir || join(\"tests\", \"seeds\");\n\n const seedContent = template.replaceAll(\"{{ name }}\", seedName).replaceAll(\"{{ dataFile }}\", dataFile);\n await Bun.write(join(process.cwd(), seedsDir, `${seedName}.ts`), seedContent);\n\n await Bun.write(join(process.cwd(), seedsDir, `${dataFile}.yml`), \"# Seed data\\n\");\n\n const testContent = testTemplate\n .replace(/\\{\\{NAME\\}\\}/g, name)\n .replace(/\\{\\{DATA_FILE\\}\\}/g, dataFile)\n .replace(/\\{\\{MODULE\\}\\}/g, config.module ?? \"\");\n await Bun.write(join(process.cwd(), testsDir, `${seedName}.spec.ts`), testContent);\n\n const imports: string[] = [];\n const glob = new Glob(\"**/*Seed.ts\");\n for await (const file of glob.scan(join(process.cwd(), seedsDir))) {\n const seedClassName = file.replace(/\\.ts$/, \"\");\n imports.push(`export { ${seedClassName} } from './${seedClassName}';`);\n }\n\n await Bun.write(join(process.cwd(), seedsDir, \"seeds.ts\"), `${imports.sort().join(\"\\n\")}\\n`);\n\n return {\n seedPath: join(seedsDir, `${seedName}.ts`),\n testPath: join(testsDir, `${seedName}.spec.ts`),\n dataPath: join(seedsDir, `${dataFile}.yml`),\n };\n};\n",
10
+ "import { join } from \"node:path\";\nimport { toKebabCase } from \"@ooneex/utils\";\nimport testTemplate from \"./seed.test.txt\";\n\nexport const seedTestCreate = async (config: {\n name: string;\n testsDir: string;\n module?: string;\n}): Promise<string> => {\n const { name, testsDir, module } = config;\n const testPath = join(process.cwd(), testsDir, `${name}.spec.ts`);\n\n const testFile = Bun.file(testPath);\n if (await testFile.exists()) return testPath;\n\n const baseName = name.replace(/Seed$/, \"\");\n const dataFile = toKebabCase(name);\n\n const content = testTemplate\n .replace(/\\{\\{NAME\\}\\}/g, baseName)\n .replace(/\\{\\{DATA_FILE\\}\\}/g, dataFile)\n .replace(/\\{\\{MODULE\\}\\}/g, module ?? \"\");\n await Bun.write(testPath, content);\n\n return testPath;\n};\n"
10
11
  ],
11
- "mappings": "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",
12
- "debugId": "A981E280B56E88AB64756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "728D696F910CF29264756E2164756E21",
13
14
  "names": []
14
15
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ooneex/seeds",
3
3
  "description": "Database seeding framework for populating initial data, fixtures, and test datasets with execution logging and idempotent operations",
4
- "version": "1.6.2",
4
+ "version": "1.7.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -28,12 +28,12 @@
28
28
  "npm:publish": "bun publish --tolerate-republish --force --production --access public"
29
29
  },
30
30
  "dependencies": {
31
- "@ooneex/container": "^1.5.0",
31
+ "@ooneex/container": "^1.5.1",
32
32
  "@ooneex/logger": "^1.3.5",
33
- "@ooneex/utils": "^0.4.9"
33
+ "@ooneex/utils": "^0.4.11"
34
34
  },
35
35
  "devDependencies": {
36
- "@ooneex/exception": "^1.2.9"
36
+ "@ooneex/exception": "^1.2.10"
37
37
  },
38
38
  "keywords": [
39
39
  "bun",