drizzle-seed 0.4.0-08e4e66 → 0.4.0-0ec754e

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.
@@ -31,14 +31,22 @@ export declare abstract class AbstractGenerator<T = {}> {
31
31
  }): void;
32
32
  updateParams(): void;
33
33
  abstract generate(params: {
34
- i: number;
34
+ i?: number;
35
35
  columnName?: string;
36
+ input?: string;
36
37
  }): number | string | boolean | unknown | undefined | void;
37
38
  getEntityKind(): string;
38
39
  getMaxUniqueCount(): number;
39
40
  replaceIfUnique(): AbstractGenerator<T> | undefined;
40
41
  replaceIfArray(): GenerateArray | undefined;
41
42
  }
43
+ export declare class GenerateHashFromString extends AbstractGenerator<{}> {
44
+ static readonly entityKind: string;
45
+ init(): void;
46
+ generate({ input }: {
47
+ input: string;
48
+ }): number;
49
+ }
42
50
  export declare class GenerateArray extends AbstractGenerator<{
43
51
  baseColumnGen: AbstractGenerator<any>;
44
52
  size?: number;
@@ -31,14 +31,22 @@ export declare abstract class AbstractGenerator<T = {}> {
31
31
  }): void;
32
32
  updateParams(): void;
33
33
  abstract generate(params: {
34
- i: number;
34
+ i?: number;
35
35
  columnName?: string;
36
+ input?: string;
36
37
  }): number | string | boolean | unknown | undefined | void;
37
38
  getEntityKind(): string;
38
39
  getMaxUniqueCount(): number;
39
40
  replaceIfUnique(): AbstractGenerator<T> | undefined;
40
41
  replaceIfArray(): GenerateArray | undefined;
41
42
  }
43
+ export declare class GenerateHashFromString extends AbstractGenerator<{}> {
44
+ static readonly entityKind: string;
45
+ init(): void;
46
+ generate({ input }: {
47
+ input: string;
48
+ }): number;
49
+ }
42
50
  export declare class GenerateArray extends AbstractGenerator<{
43
51
  baseColumnGen: AbstractGenerator<any>;
44
52
  size?: number;
@@ -31,14 +31,22 @@ export declare abstract class AbstractGenerator<T = {}> {
31
31
  }): void;
32
32
  updateParams(): void;
33
33
  abstract generate(params: {
34
- i: number;
34
+ i?: number;
35
35
  columnName?: string;
36
+ input?: string;
36
37
  }): number | string | boolean | unknown | undefined | void;
37
38
  getEntityKind(): string;
38
39
  getMaxUniqueCount(): number;
39
40
  replaceIfUnique(): AbstractGenerator<T> | undefined;
40
41
  replaceIfArray(): GenerateArray | undefined;
41
42
  }
43
+ export declare class GenerateHashFromString extends AbstractGenerator<{}> {
44
+ static readonly entityKind: string;
45
+ init(): void;
46
+ generate({ input }: {
47
+ input: string;
48
+ }): number;
49
+ }
42
50
  export declare class GenerateArray extends AbstractGenerator<{
43
51
  baseColumnGen: AbstractGenerator<any>;
44
52
  size?: number;
@@ -1 +1 @@
1
- export declare const latestVersion = 2;
1
+ export declare const latestVersion = 3;
@@ -1 +1 @@
1
- export declare const latestVersion = 2;
1
+ export declare const latestVersion = 3;
@@ -1 +1 @@
1
- export declare const latestVersion = 2;
1
+ export declare const latestVersion = 3;
@@ -0,0 +1,10 @@
1
+ import { AbstractGenerator } from '../Generators.js';
2
+ export declare class GenerateHashFromStringV3 extends AbstractGenerator<{}> {
3
+ static readonly entityKind: string;
4
+ static readonly version: number;
5
+ init(): void;
6
+ generate({ input }: {
7
+ i: number;
8
+ input: string;
9
+ }): number;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { AbstractGenerator } from '../Generators.js';
2
+ export declare class GenerateHashFromStringV3 extends AbstractGenerator<{}> {
3
+ static readonly entityKind: string;
4
+ static readonly version: number;
5
+ init(): void;
6
+ generate({ input }: {
7
+ i: number;
8
+ input: string;
9
+ }): number;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { AbstractGenerator } from '../Generators.js';
2
+ export declare class GenerateHashFromStringV3 extends AbstractGenerator<{}> {
3
+ static readonly entityKind: string;
4
+ static readonly version: number;
5
+ init(): void;
6
+ generate({ input }: {
7
+ i: number;
8
+ input: string;
9
+ }): number;
10
+ }
package/index.cjs CHANGED
@@ -39,16 +39,6 @@ const isRelationCyclic = (startRel) => {
39
39
  }
40
40
  return false;
41
41
  };
42
- const generateHashFromString = (s) => {
43
- let hash = 0;
44
- // p and m are prime numbers
45
- const p = 53;
46
- const m = 28871271685163;
47
- for (let i = 0; i < s.length; i++) {
48
- hash += ((s.codePointAt(i) || 0) * Math.pow(p, i)) % m;
49
- }
50
- return hash;
51
- };
52
42
  const equalSets = (set1, set2) => {
53
43
  return set1.size === set2.size && [...set1].every((si) => set2.has(si));
54
44
  };
@@ -131544,6 +131534,20 @@ class AbstractGenerator {
131544
131534
  }
131545
131535
  }
131546
131536
  // Generators Classes -----------------------------------------------------------------------------------------------------------------------
131537
+ class GenerateHashFromString extends AbstractGenerator {
131538
+ static entityKind = 'GenerateHashFromString';
131539
+ init() { }
131540
+ generate({ input }) {
131541
+ let hash = 0;
131542
+ // p and m are prime numbers
131543
+ const p = 53;
131544
+ const m = 28871271685163;
131545
+ for (let i = 0; i < input.length; i++) {
131546
+ hash += ((input.codePointAt(i) || 0) * Math.pow(p, i)) % m;
131547
+ }
131548
+ return hash;
131549
+ }
131550
+ }
131547
131551
  class GenerateArray extends AbstractGenerator {
131548
131552
  static entityKind = 'GenerateArray';
131549
131553
  arraySize = 10;
@@ -134440,6 +134444,25 @@ class GenerateUniqueStringV2 extends AbstractGenerator {
134440
134444
  }
134441
134445
  }
134442
134446
 
134447
+ /* eslint-disable drizzle-internal/require-entity-kind */
134448
+ class GenerateHashFromStringV3 extends AbstractGenerator {
134449
+ static entityKind = 'GenerateHashFromString';
134450
+ static version = 3;
134451
+ init() { }
134452
+ generate({ input }) {
134453
+ let hash = 0n;
134454
+ // p and m are prime numbers
134455
+ const p = 53n;
134456
+ const m = 28871271685163n; // < 2^53
134457
+ let power = 1n; // will track p^i, where i is character index
134458
+ for (const ch of input) {
134459
+ hash = (hash + (BigInt(ch.codePointAt(0) || 0) * power)) % m;
134460
+ power = (power * p) % m;
134461
+ }
134462
+ return Number(hash);
134463
+ }
134464
+ }
134465
+
134443
134466
  function createGenerator(generatorConstructor) {
134444
134467
  return (...args) => {
134445
134468
  let params = args[0];
@@ -135235,7 +135258,14 @@ const generatorsFuncs = {
135235
135258
  const generatorsFuncsV2 = {
135236
135259
  ...generatorsFuncs,
135237
135260
  };
135261
+ ({
135262
+ ...generatorsFuncs,
135263
+ });
135238
135264
  const generatorsMap = {
135265
+ GenerateHashFromString: [
135266
+ GenerateHashFromString,
135267
+ GenerateHashFromStringV3,
135268
+ ],
135239
135269
  HollowGenerator: [
135240
135270
  HollowGenerator,
135241
135271
  ],
@@ -135634,7 +135664,7 @@ const selectGeneratorForCockroachColumn = (table, col) => {
135634
135664
  return generator;
135635
135665
  };
135636
135666
 
135637
- const latestVersion = 2;
135667
+ const latestVersion = 3;
135638
135668
 
135639
135669
  const selectGeneratorForMssqlColumn = (table, col) => {
135640
135670
  const pickGenerator = (table, col) => {
@@ -136483,6 +136513,7 @@ class SeedService {
136483
136513
  sqliteMaxParametersNumber = 32766;
136484
136514
  mssqlMaxParametersNumber = 2100;
136485
136515
  version;
136516
+ hashFromStringGenerator;
136486
136517
  generatePossibleGenerators = (connectionType, tables, relations, refinements, options) => {
136487
136518
  let columnPossibleGenerator;
136488
136519
  let tablePossibleGenerators;
@@ -136491,6 +136522,7 @@ class SeedService {
136491
136522
  if (Number.isNaN(this.version) || this.version < 1 || this.version > latestVersion) {
136492
136523
  throw new Error(`Version should be in range [1, ${latestVersion}].`);
136493
136524
  }
136525
+ this.hashFromStringGenerator = this.selectVersionOfGenerator(new generatorsMap.GenerateHashFromString[0]());
136494
136526
  // sorting table in order which they will be filled up (tables with foreign keys case)
136495
136527
  const { tablesInOutRelations } = this.getInfoFromRelations(relations);
136496
136528
  const orderedTablesNames = this.getOrderedTablesList(tablesInOutRelations);
@@ -136552,7 +136584,7 @@ class SeedService {
136552
136584
  const weightedRepeatedValuesCount = refinements[table.name]
136553
136585
  .with[fkTableName];
136554
136586
  weightedCountSeed = customSeed
136555
- + generateHashFromString(`${table.name}.${fkTableName}`);
136587
+ + this.hashFromStringGenerator.generate({ input: `${table.name}.${fkTableName}` });
136556
136588
  newTableWithCount = this.getWeightedWithCount(weightedRepeatedValuesCount, (tablesPossibleGenerators[i].withCount
136557
136589
  || tablesPossibleGenerators[i].count), weightedCountSeed);
136558
136590
  }
@@ -136588,6 +136620,18 @@ class SeedService {
136588
136620
  && refinements[table.name].columns !== undefined
136589
136621
  && refinements[table.name].columns[col.name] !== undefined) {
136590
136622
  const genObj = refinements[table.name].columns[col.name];
136623
+ if (genObj === false) {
136624
+ if (col.notNull === true && col.hasDefault === false) {
136625
+ throw new Error(`You cannot set the '${col.name}' column in the '${table.name}' table to false in your refinements.`
136626
+ + `\nDoing so will result in a null value being inserted into the '${col.name}' column,`
136627
+ + `\nwhich will cause an error because the column has a not null constraint and no default value.`);
136628
+ }
136629
+ // Generating undefined as a value for a column and then inserting it via drizzle-orm
136630
+ // will result in the value not being inserted into that column.
136631
+ columnPossibleGenerator.generator = new generatorsMap.GenerateDefault[0]({ defaultValue: undefined });
136632
+ columnPossibleGenerator.wasRefined = true;
136633
+ continue;
136634
+ }
136591
136635
  if (col.columnType.match(/\[\w*]/g) !== null) {
136592
136636
  if ((col.baseColumn?.dataType === 'array' && col.baseColumn.columnType.match(/\[\w*]/g) !== null)
136593
136637
  // studio case
@@ -136909,10 +136953,12 @@ class SeedService {
136909
136953
  pRNGSeed = (columnRelations.length !== 0
136910
136954
  && columnRelations[0].columns.length >= 2)
136911
136955
  ? (customSeed
136912
- + generateHashFromString(`${columnRelations[0].table}.${columnRelations[0].columns.join('_')}`))
136956
+ + this.hashFromStringGenerator.generate({
136957
+ input: `${columnRelations[0].table}.${columnRelations[0].columns.join('_')}`,
136958
+ }))
136913
136959
  : col.generator?.uniqueKey === undefined
136914
- ? (customSeed + generateHashFromString(`${table.tableName}.${col.columnName}`))
136915
- : (customSeed + generateHashFromString(col.generator.uniqueKey));
136960
+ ? (customSeed + this.hashFromStringGenerator.generate({ input: `${table.tableName}.${col.columnName}` }))
136961
+ : (customSeed + this.hashFromStringGenerator.generate({ input: col.generator.uniqueKey }));
136916
136962
  tableGenerators[col.columnName] = {
136917
136963
  pRNGSeed,
136918
136964
  ...col,
@@ -136934,7 +136980,9 @@ class SeedService {
136934
136980
  if (rel.table === rel.refTable
136935
136981
  && tableGenerators[rel.columns[colIdx]]?.wasRefined === false) {
136936
136982
  const refColName = rel.refColumns[colIdx];
136937
- pRNGSeed = generateHashFromString(`${table.tableName}.${refColName}`);
136983
+ pRNGSeed = this.hashFromStringGenerator.generate({
136984
+ input: `${table.tableName}.${refColName}`,
136985
+ });
136938
136986
  const refColumnGenerator = {};
136939
136987
  refColumnGenerator[refColName] = {
136940
136988
  ...tableGenerators[refColName],