@strapi/database 5.55.1 → 5.57.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.
Files changed (196) hide show
  1. package/dist/dialects/dialect.d.ts +28 -0
  2. package/dist/dialects/dialect.d.ts.map +1 -1
  3. package/dist/dialects/dialect.js +29 -0
  4. package/dist/dialects/dialect.js.map +1 -1
  5. package/dist/dialects/dialect.mjs +29 -0
  6. package/dist/dialects/dialect.mjs.map +1 -1
  7. package/dist/dialects/mysql/index.d.ts +9 -0
  8. package/dist/dialects/mysql/index.d.ts.map +1 -1
  9. package/dist/dialects/mysql/index.js +37 -0
  10. package/dist/dialects/mysql/index.js.map +1 -1
  11. package/dist/dialects/mysql/index.mjs +37 -0
  12. package/dist/dialects/mysql/index.mjs.map +1 -1
  13. package/dist/dialects/postgresql/index.d.ts +7 -0
  14. package/dist/dialects/postgresql/index.d.ts.map +1 -1
  15. package/dist/dialects/postgresql/index.js +50 -0
  16. package/dist/dialects/postgresql/index.js.map +1 -1
  17. package/dist/dialects/postgresql/index.mjs +50 -0
  18. package/dist/dialects/postgresql/index.mjs.map +1 -1
  19. package/dist/dialects/sqlite/index.d.ts +9 -0
  20. package/dist/dialects/sqlite/index.d.ts.map +1 -1
  21. package/dist/dialects/sqlite/index.js +16 -0
  22. package/dist/dialects/sqlite/index.js.map +1 -1
  23. package/dist/dialects/sqlite/index.mjs +16 -0
  24. package/dist/dialects/sqlite/index.mjs.map +1 -1
  25. package/dist/entity-manager/entity-repository.js +1 -1
  26. package/dist/entity-manager/entity-repository.js.map +1 -1
  27. package/dist/entity-manager/entity-repository.mjs +1 -1
  28. package/dist/entity-manager/entity-repository.mjs.map +1 -1
  29. package/dist/entity-manager/index.d.ts.map +1 -1
  30. package/dist/entity-manager/index.js +38 -36
  31. package/dist/entity-manager/index.js.map +1 -1
  32. package/dist/entity-manager/index.mjs +38 -36
  33. package/dist/entity-manager/index.mjs.map +1 -1
  34. package/dist/entity-manager/morph-relations.d.ts.map +1 -1
  35. package/dist/entity-manager/morph-relations.js +3 -5
  36. package/dist/entity-manager/morph-relations.js.map +1 -1
  37. package/dist/entity-manager/morph-relations.mjs +3 -5
  38. package/dist/entity-manager/morph-relations.mjs.map +1 -1
  39. package/dist/entity-manager/regular-relations.js +3 -3
  40. package/dist/entity-manager/regular-relations.js.map +1 -1
  41. package/dist/entity-manager/regular-relations.mjs +3 -3
  42. package/dist/entity-manager/regular-relations.mjs.map +1 -1
  43. package/dist/entity-manager/relations-orderer.d.ts.map +1 -1
  44. package/dist/entity-manager/relations-orderer.js +4 -5
  45. package/dist/entity-manager/relations-orderer.js.map +1 -1
  46. package/dist/entity-manager/relations-orderer.mjs +2 -3
  47. package/dist/entity-manager/relations-orderer.mjs.map +1 -1
  48. package/dist/fields/biginteger.js +1 -1
  49. package/dist/fields/biginteger.js.map +1 -1
  50. package/dist/fields/biginteger.mjs +1 -1
  51. package/dist/fields/biginteger.mjs.map +1 -1
  52. package/dist/fields/boolean.js +1 -1
  53. package/dist/fields/boolean.js.map +1 -1
  54. package/dist/fields/boolean.mjs +1 -1
  55. package/dist/fields/boolean.mjs.map +1 -1
  56. package/dist/fields/number.js +1 -1
  57. package/dist/fields/number.js.map +1 -1
  58. package/dist/fields/number.mjs +1 -1
  59. package/dist/fields/number.mjs.map +1 -1
  60. package/dist/fields/shared/parsers.js +2 -2
  61. package/dist/fields/shared/parsers.js.map +1 -1
  62. package/dist/fields/shared/parsers.mjs +2 -2
  63. package/dist/fields/shared/parsers.mjs.map +1 -1
  64. package/dist/fields/string.js +1 -1
  65. package/dist/fields/string.js.map +1 -1
  66. package/dist/fields/string.mjs +1 -1
  67. package/dist/fields/string.mjs.map +1 -1
  68. package/dist/index.d.ts +9 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/index.mjs +1 -0
  73. package/dist/index.mjs.map +1 -1
  74. package/dist/metadata/attribute-naming.d.ts +31 -0
  75. package/dist/metadata/attribute-naming.d.ts.map +1 -0
  76. package/dist/metadata/attribute-naming.js +39 -0
  77. package/dist/metadata/attribute-naming.js.map +1 -0
  78. package/dist/metadata/attribute-naming.mjs +37 -0
  79. package/dist/metadata/attribute-naming.mjs.map +1 -0
  80. package/dist/metadata/index.d.ts +5 -2
  81. package/dist/metadata/index.d.ts.map +1 -1
  82. package/dist/metadata/index.js +3 -0
  83. package/dist/metadata/index.js.map +1 -1
  84. package/dist/metadata/index.mjs +3 -1
  85. package/dist/metadata/index.mjs.map +1 -1
  86. package/dist/metadata/metadata.d.ts +10 -0
  87. package/dist/metadata/metadata.d.ts.map +1 -1
  88. package/dist/metadata/metadata.js +10 -2
  89. package/dist/metadata/metadata.js.map +1 -1
  90. package/dist/metadata/metadata.mjs +10 -2
  91. package/dist/metadata/metadata.mjs.map +1 -1
  92. package/dist/metadata/relations.d.ts.map +1 -1
  93. package/dist/metadata/relations.js +6 -5
  94. package/dist/metadata/relations.js.map +1 -1
  95. package/dist/metadata/relations.mjs +6 -5
  96. package/dist/metadata/relations.mjs.map +1 -1
  97. package/dist/migrations/common.d.ts +2 -0
  98. package/dist/migrations/common.d.ts.map +1 -1
  99. package/dist/migrations/common.js.map +1 -1
  100. package/dist/migrations/common.mjs.map +1 -1
  101. package/dist/migrations/file-builder.d.ts +97 -0
  102. package/dist/migrations/file-builder.d.ts.map +1 -0
  103. package/dist/migrations/file-builder.js +251 -0
  104. package/dist/migrations/file-builder.js.map +1 -0
  105. package/dist/migrations/file-builder.mjs +240 -0
  106. package/dist/migrations/file-builder.mjs.map +1 -0
  107. package/dist/migrations/index.d.ts +3 -2
  108. package/dist/migrations/index.d.ts.map +1 -1
  109. package/dist/migrations/index.js +6 -0
  110. package/dist/migrations/index.js.map +1 -1
  111. package/dist/migrations/index.mjs +6 -0
  112. package/dist/migrations/index.mjs.map +1 -1
  113. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js +1 -1
  114. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
  115. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs +1 -1
  116. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
  117. package/dist/migrations/resolver.d.ts.map +1 -1
  118. package/dist/migrations/resolver.js +4 -1
  119. package/dist/migrations/resolver.js.map +1 -1
  120. package/dist/migrations/resolver.mjs +4 -1
  121. package/dist/migrations/resolver.mjs.map +1 -1
  122. package/dist/query/helpers/order-by.d.ts.map +1 -1
  123. package/dist/query/helpers/order-by.js +3 -4
  124. package/dist/query/helpers/order-by.js.map +1 -1
  125. package/dist/query/helpers/order-by.mjs +3 -4
  126. package/dist/query/helpers/order-by.mjs.map +1 -1
  127. package/dist/query/helpers/populate/apply.d.ts.map +1 -1
  128. package/dist/query/helpers/populate/apply.js +46 -30
  129. package/dist/query/helpers/populate/apply.js.map +1 -1
  130. package/dist/query/helpers/populate/apply.mjs +46 -30
  131. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  132. package/dist/query/helpers/populate/process.js +3 -3
  133. package/dist/query/helpers/populate/process.js.map +1 -1
  134. package/dist/query/helpers/populate/process.mjs +3 -3
  135. package/dist/query/helpers/populate/process.mjs.map +1 -1
  136. package/dist/query/helpers/search.js +2 -2
  137. package/dist/query/helpers/search.js.map +1 -1
  138. package/dist/query/helpers/search.mjs +2 -2
  139. package/dist/query/helpers/search.mjs.map +1 -1
  140. package/dist/query/helpers/streams/readable.js +3 -3
  141. package/dist/query/helpers/streams/readable.js.map +1 -1
  142. package/dist/query/helpers/streams/readable.mjs +3 -3
  143. package/dist/query/helpers/streams/readable.mjs.map +1 -1
  144. package/dist/query/helpers/transform.d.ts.map +1 -1
  145. package/dist/query/helpers/transform.js +6 -13
  146. package/dist/query/helpers/transform.js.map +1 -1
  147. package/dist/query/helpers/transform.mjs +6 -9
  148. package/dist/query/helpers/transform.mjs.map +1 -1
  149. package/dist/query/helpers/where.js +13 -9
  150. package/dist/query/helpers/where.js.map +1 -1
  151. package/dist/query/helpers/where.mjs +13 -9
  152. package/dist/query/helpers/where.mjs.map +1 -1
  153. package/dist/query/query-builder.d.ts.map +1 -1
  154. package/dist/query/query-builder.js +35 -29
  155. package/dist/query/query-builder.js.map +1 -1
  156. package/dist/query/query-builder.mjs +35 -29
  157. package/dist/query/query-builder.mjs.map +1 -1
  158. package/dist/schema/builder.js +5 -5
  159. package/dist/schema/builder.js.map +1 -1
  160. package/dist/schema/builder.mjs +5 -5
  161. package/dist/schema/builder.mjs.map +1 -1
  162. package/dist/schema/diff.js +12 -12
  163. package/dist/schema/diff.js.map +1 -1
  164. package/dist/schema/diff.mjs +12 -12
  165. package/dist/schema/diff.mjs.map +1 -1
  166. package/dist/schema/index.d.ts +3 -1
  167. package/dist/schema/index.d.ts.map +1 -1
  168. package/dist/schema/index.js +6 -0
  169. package/dist/schema/index.js.map +1 -1
  170. package/dist/schema/index.mjs +6 -0
  171. package/dist/schema/index.mjs.map +1 -1
  172. package/dist/schema/rename-helpers.d.ts +78 -0
  173. package/dist/schema/rename-helpers.d.ts.map +1 -0
  174. package/dist/schema/rename-helpers.js +235 -0
  175. package/dist/schema/rename-helpers.js.map +1 -0
  176. package/dist/schema/rename-helpers.mjs +233 -0
  177. package/dist/schema/rename-helpers.mjs.map +1 -0
  178. package/dist/utils/async-curry.d.ts.map +1 -1
  179. package/dist/utils/async-curry.js +1 -2
  180. package/dist/utils/async-curry.js.map +1 -1
  181. package/dist/utils/async-curry.mjs +1 -2
  182. package/dist/utils/async-curry.mjs.map +1 -1
  183. package/dist/utils/identifiers/hash.d.ts.map +1 -1
  184. package/dist/utils/identifiers/hash.js +1 -2
  185. package/dist/utils/identifiers/hash.js.map +1 -1
  186. package/dist/utils/identifiers/hash.mjs +1 -2
  187. package/dist/utils/identifiers/hash.mjs.map +1 -1
  188. package/dist/utils/identifiers/index.js +8 -10
  189. package/dist/utils/identifiers/index.js.map +1 -1
  190. package/dist/utils/identifiers/index.mjs +8 -6
  191. package/dist/utils/identifiers/index.mjs.map +1 -1
  192. package/dist/validations/relations/bidirectional.js +1 -1
  193. package/dist/validations/relations/bidirectional.js.map +1 -1
  194. package/dist/validations/relations/bidirectional.mjs +1 -1
  195. package/dist/validations/relations/bidirectional.mjs.map +1 -1
  196. package/package.json +6 -5
@@ -36,6 +36,22 @@ class SqliteDialect extends dialect {
36
36
  canAlterConstraints() {
37
37
  return false;
38
38
  }
39
+ /**
40
+ * SQLite foreign keys are unnamed (declared inline on the table), so only
41
+ * indexes need dropping. Queries run on `trx`: SQLite pools hold a single
42
+ * connection, which the migration transaction already owns.
43
+ */ async dropSchemaObject(trx, { table, name }) {
44
+ const indexes = await trx.raw('pragma index_list(??)', [
45
+ table
46
+ ]);
47
+ if (!indexes.some((index)=>index.name === name)) {
48
+ return false;
49
+ }
50
+ await trx.raw('DROP INDEX ??', [
51
+ name
52
+ ]);
53
+ return true;
54
+ }
39
55
  getSqlType(type) {
40
56
  switch(type){
41
57
  case 'enum':
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;;;;;;;;AASA,MAAMA,qBAAAA,GAAwB;AAAC,IAAA;AAAkB,CAAA;AAEjD,4GACA,MAAMC,wBAAAA,GAA2B,GAAA;AAElB,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;IASzCC,kBAAAA,GAA6B;QAC3B,OAAOH,wBAAAA;AACT,IAAA;AAEAI,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAAA,IAAS,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAA,EAAU;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,qBAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD,QAAA;AAEA,QAAA,MAAMG,KAAAA,GAAQF,qBAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,oBAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB,IAAA;IAEAI,YAAAA,GAAe;QACb,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAAA,CAAA,CAA4Bb,UAAU,CAACY,gBAAAA,CAAAA;AACtE,IAAA;IAEAE,mBAAAA,GAAsB;QACpB,OAAO,KAAA;AACT,IAAA;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT,gBAAA;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT,gBAAA;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT,gBAAA;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT,gBAAA;AACF;AACF,IAAA;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACzB,qBAAAA,CAAsB0B,QAAQ,CAACD,QAAAA,CAAAA;AACzC,IAAA;AAEA,IAAA,MAAME,iBAAAA,GAAoB;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D,IAAA;AAEA,IAAA,MAAMQ,eAAAA,GAAkB;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD,IAAA;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,OAAmB,EAAA,CAAA;AAC/B,gBAAA;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAAA,CAAgBC,KAAAA,CAAAA;AACxB,gBAAA;AACF;AACF,IAAA;IAEAG,gBAAAA,GAAmB;QACjB,OAAO,KAAA;AACT,IAAA;AA7EA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAAA,EAAI,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,eAAAA,CAAsB3B,EAAAA,CAAAA;AACnD,IAAA;AA0EF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n /**\n * SQLite foreign keys are unnamed (declared inline on the table), so only\n * indexes need dropping. Queries run on `trx`: SQLite pools hold a single\n * connection, which the migration transaction already owns.\n */\n async dropSchemaObject(\n trx: Knex,\n { table, name }: { table: string; name: string }\n ): Promise<boolean> {\n const indexes: Array<{ name: string }> = await trx.raw('pragma index_list(??)', [table]);\n\n if (!indexes.some((index) => index.name === name)) {\n return false;\n }\n\n await trx.raw('DROP INDEX ??', [name]);\n return true;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","dropSchemaObject","trx","table","name","indexes","some","index","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":"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"}
@@ -29,6 +29,22 @@ class SqliteDialect extends Dialect {
29
29
  canAlterConstraints() {
30
30
  return false;
31
31
  }
32
+ /**
33
+ * SQLite foreign keys are unnamed (declared inline on the table), so only
34
+ * indexes need dropping. Queries run on `trx`: SQLite pools hold a single
35
+ * connection, which the migration transaction already owns.
36
+ */ async dropSchemaObject(trx, { table, name }) {
37
+ const indexes = await trx.raw('pragma index_list(??)', [
38
+ table
39
+ ]);
40
+ if (!indexes.some((index)=>index.name === name)) {
41
+ return false;
42
+ }
43
+ await trx.raw('DROP INDEX ??', [
44
+ name
45
+ ]);
46
+ return true;
47
+ }
32
48
  getSqlType(type) {
33
49
  switch(type){
34
50
  case 'enum':
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":";;;;;;AASA,MAAMA,qBAAAA,GAAwB;AAAC,IAAA;AAAkB,CAAA;AAEjD,4GACA,MAAMC,wBAAAA,GAA2B,GAAA;AAElB,MAAMC,aAAAA,SAAsBC,OAAAA,CAAAA;IASzCC,kBAAAA,GAA6B;QAC3B,OAAOH,wBAAAA;AACT,IAAA;AAEAI,IAAAA,SAAAA,CAAUC,IAAmC,EAAE;QAC7C,MAAMC,UAAAA,GACJD,IAAAA,IAAS,IAAI,CAACE,EAAE,CAACC,MAAM,CAACF,UAAU,CAACA,UAAU;QAC/C,IAAI,OAAOA,eAAe,QAAA,EAAU;AAClCA,YAAAA,UAAAA,CAAWG,QAAQ,GAAGC,IAAAA,CAAKC,OAAO,CAACL,WAAWG,QAAQ,CAAA;AACxD,QAAA;AAEA,QAAA,MAAMG,KAAAA,GAAQF,IAAAA,CAAKG,OAAO,CAACP,WAAWG,QAAQ,CAAA;AAE9CK,QAAAA,GAAAA,CAAIC,aAAa,CAACH,KAAAA,CAAAA;AACpB,IAAA;IAEAI,YAAAA,GAAe;QACb,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,UAAAA,CAAWC,gBAAyB,EAAE;QAC1C,MAAM,IAAI,CAACX,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,0BAAA,CAAA,CAA4Bb,UAAU,CAACY,gBAAAA,CAAAA;AACtE,IAAA;IAEAE,mBAAAA,GAAsB;QACpB,OAAO,KAAA;AACT,IAAA;AAEAC,IAAAA,UAAAA,CAAWC,IAAY,EAAE;QACvB,OAAQA,IAAAA;YACN,KAAK,MAAA;AAAQ,gBAAA;oBACX,OAAO,MAAA;AACT,gBAAA;YACA,KAAK,QAAA;YACL,KAAK,SAAA;AAAW,gBAAA;oBACd,OAAO,OAAA;AACT,gBAAA;YACA,KAAK,WAAA;AAAa,gBAAA;oBAChB,OAAO,UAAA;AACT,gBAAA;AACA,YAAA;AAAS,gBAAA;oBACP,OAAOA,IAAAA;AACT,gBAAA;AACF;AACF,IAAA;AAEAC,IAAAA,gBAAAA,CAAiBC,QAAgB,EAAE;QACjC,OAAO,CAACzB,qBAAAA,CAAsB0B,QAAQ,CAACD,QAAAA,CAAAA;AACzC,IAAA;AAEA,IAAA,MAAME,iBAAAA,GAAoB;QACxB,MAAM,IAAI,CAACnB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAA;AAC1D,IAAA;AAEA,IAAA,MAAMQ,eAAAA,GAAkB;QACtB,MAAM,IAAI,CAACpB,EAAE,CAACD,UAAU,CAACa,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAA;AACzD,IAAA;AAEAS,IAAAA,eAAAA,CAAgBC,KAA4B,EAAE;AAC5C,QAAA,OAAQA,MAAMC,KAAK;YACjB,KAAK,EAAA;AAAI,gBAAA;AACP,oBAAA,MAAM,IAAIC,YAAmB,EAAA,CAAA;AAC/B,gBAAA;AACA,YAAA;AAAS,gBAAA;AACP,oBAAA,KAAK,CAACH,eAAAA,CAAgBC,KAAAA,CAAAA;AACxB,gBAAA;AACF;AACF,IAAA;IAEAG,gBAAAA,GAAmB;QACjB,OAAO,KAAA;AACT,IAAA;AA7EA,IAAA,WAAA,CAAYzB,EAAY,CAAE;AACxB,QAAA,KAAK,CAACA,EAAAA,EAAI,QAAA,CAAA;AAEV,QAAA,IAAI,CAAC0B,eAAe,GAAG,IAAIC,qBAAAA,CAAsB3B,EAAAA,CAAAA;AACnD,IAAA;AA0EF;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/dialects/sqlite/index.ts"],"sourcesContent":["import path from 'path';\nimport fse from 'fs-extra';\nimport type { Knex } from 'knex';\n\nimport * as errors from '../../errors';\nimport Dialect from '../dialect';\nimport SqliteSchemaInspector from './schema-inspector';\nimport type { Database } from '../..';\n\nconst UNSUPPORTED_OPERATORS = ['$jsonSupersetOf'];\n\n/** SQLite compound SELECT limit (SQLITE_MAX_COMPOUND_SELECT); Knex batch insert uses UNION ALL per row. */\nconst SQLITE_BATCH_INSERT_SIZE = 500;\n\nexport default class SqliteDialect extends Dialect {\n schemaInspector: SqliteSchemaInspector;\n\n constructor(db: Database) {\n super(db, 'sqlite');\n\n this.schemaInspector = new SqliteSchemaInspector(db);\n }\n\n getBatchInsertSize(): number {\n return SQLITE_BATCH_INSERT_SIZE;\n }\n\n configure(conn?: Knex.Sqlite3ConnectionConfig) {\n const connection =\n conn || (this.db.config.connection.connection as Knex.Sqlite3ConnectionConfig);\n if (typeof connection !== 'string') {\n connection.filename = path.resolve(connection.filename);\n }\n\n const dbDir = path.dirname(connection.filename);\n\n fse.ensureDirSync(dbDir);\n }\n\n useReturning() {\n return true;\n }\n\n async initialize(nativeConnection: unknown) {\n await this.db.connection.raw('pragma foreign_keys = on').connection(nativeConnection);\n }\n\n canAlterConstraints() {\n return false;\n }\n\n /**\n * SQLite foreign keys are unnamed (declared inline on the table), so only\n * indexes need dropping. Queries run on `trx`: SQLite pools hold a single\n * connection, which the migration transaction already owns.\n */\n async dropSchemaObject(\n trx: Knex,\n { table, name }: { table: string; name: string }\n ): Promise<boolean> {\n const indexes: Array<{ name: string }> = await trx.raw('pragma index_list(??)', [table]);\n\n if (!indexes.some((index) => index.name === name)) {\n return false;\n }\n\n await trx.raw('DROP INDEX ??', [name]);\n return true;\n }\n\n getSqlType(type: string) {\n switch (type) {\n case 'enum': {\n return 'text';\n }\n case 'double':\n case 'decimal': {\n return 'float';\n }\n case 'timestamp': {\n return 'datetime';\n }\n default: {\n return type;\n }\n }\n }\n\n supportsOperator(operator: string) {\n return !UNSUPPORTED_OPERATORS.includes(operator);\n }\n\n async startSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = off`);\n }\n\n async endSchemaUpdate() {\n await this.db.connection.raw(`pragma foreign_keys = on`);\n }\n\n transformErrors(error: NodeJS.ErrnoException) {\n switch (error.errno) {\n case 19: {\n throw new errors.NotNullError(); // TODO: extract column name\n }\n default: {\n super.transformErrors(error);\n }\n }\n }\n\n canAddIncrements() {\n return false;\n }\n}\n"],"names":["UNSUPPORTED_OPERATORS","SQLITE_BATCH_INSERT_SIZE","SqliteDialect","Dialect","getBatchInsertSize","configure","conn","connection","db","config","filename","path","resolve","dbDir","dirname","fse","ensureDirSync","useReturning","initialize","nativeConnection","raw","canAlterConstraints","dropSchemaObject","trx","table","name","indexes","some","index","getSqlType","type","supportsOperator","operator","includes","startSchemaUpdate","endSchemaUpdate","transformErrors","error","errno","errors","canAddIncrements","schemaInspector","SqliteSchemaInspector"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
 
5
5
  const withDefaultPagination = (params)=>{
6
6
  const { page = 1, pageSize = 10, ...rest } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
1
+ {"version":3,"file":"entity-repository.js","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { isString } from 'lodash/fp';
1
+ import { isString } from 'lodash';
2
2
 
3
3
  const withDefaultPagination = (params)=>{
4
4
  const { page = 1, pageSize = 10, ...rest } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-repository.mjs","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash/fp';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":";;AAIA,MAAMA,wBAAwB,CAACC,MAAAA,GAAAA;IAC7B,MAAM,EAAEC,OAAO,CAAC,EAAEC,WAAW,EAAE,EAAE,GAAGC,IAAAA,EAAM,GAAGH,MAAAA;IAE7C,OAAO;AACLC,QAAAA,IAAAA,EAAMG,MAAAA,CAAOH,IAAAA,CAAAA;AACbC,QAAAA,QAAAA,EAAUE,MAAAA,CAAOF,QAAAA,CAAAA;AACjB,QAAA,GAAGC;AACL,KAAA;AACF,CAAA;AAOA,MAAME,kBAAkB,CACtBL,MAAAA,GAAAA;IAEA,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGC,IAAAA,EAAM,GAAGJ,qBAAAA,CAAsBC,MAAAA,CAAAA;AAE1D,IAAA,MAAMM,SAASC,IAAAA,CAAKC,GAAG,CAACP,IAAAA,GAAO,GAAG,CAAA,CAAA,GAAKC,QAAAA;AACvC,IAAA,MAAMO,KAAAA,GAAQP,QAAAA;AAEd,IAAA,MAAMQ,KAAAA,GAAQ;AACZ,QAAA,GAAGP,IAAI;AACPM,QAAAA,KAAAA;AACAH,QAAAA;AACF,KAAA;IAEA,OAAO;AAACI,QAAAA,KAAAA;AAAO,QAAA;AAAET,YAAAA,IAAAA;AAAMC,YAAAA;AAAS;AAAE,KAAA;AACpC,CAAA;AAEO,MAAMS,gBAAAA,GAAmB,CAACC,GAAAA,EAAaC,EAAAA,GAAAA;IAC5C,OAAO;QACLC,OAAAA,CAAAA,CAAQd,MAAAA,GAAS,EAAE,EAAA;AACjB,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACD,OAAO,CAACF,GAAAA,EAAKZ,MAAAA,CAAAA;AACvC,QAAA,CAAA;QAEAgB,QAAAA,CAAAA,CAAShB,MAAAA,GAAS,EAAE,EAAA;AAClB,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACC,QAAQ,CAACJ,GAAAA,EAAKZ,MAAAA,CAAAA;AACxC,QAAA,CAAA;QAEAiB,aAAAA,CAAAA,CAAcjB,MAAAA,GAAS,EAAE,EAAA;YACvB,OAAOkB,OAAAA,CAAQC,GAAG,CAAC;AACjBN,gBAAAA,EAAAA,CAAGE,aAAa,CAACC,QAAQ,CAACJ,GAAAA,EAAKZ,MAAAA,CAAAA;AAC/Ba,gBAAAA,EAAAA,CAAGE,aAAa,CAACK,KAAK,CAACR,GAAAA,EAAKZ,MAAAA;AAC7B,aAAA,CAAA;AACH,QAAA,CAAA;AAEA,QAAA,MAAMqB,UAASrB,MAAM,EAAA;YACnB,MAAM,CAACU,OAAO,EAAET,IAAI,EAAEC,QAAQ,EAAE,CAAC,GAAGG,eAAAA,CAAgBL,MAAAA,CAAAA;AAEpD,YAAA,MAAM,CAACsB,OAAAA,EAASC,KAAAA,CAAM,GAAG,MAAML,OAAAA,CAAQC,GAAG,CAAC;AACzCN,gBAAAA,EAAAA,CAAGE,aAAa,CAACC,QAAQ,CAACJ,GAAAA,EAAKF,KAAAA,CAAAA;AAC/BG,gBAAAA,EAAAA,CAAGE,aAAa,CAACK,KAAK,CAACR,GAAAA,EAAKF,KAAAA;AAC7B,aAAA,CAAA;YAED,OAAO;AACLY,gBAAAA,OAAAA;gBACAE,UAAAA,EAAY;AACVvB,oBAAAA,IAAAA;AACAC,oBAAAA,QAAAA;oBACAuB,SAAAA,EAAWlB,IAAAA,CAAKmB,IAAI,CAACH,KAAAA,GAAQrB,QAAAA,CAAAA;AAC7BqB,oBAAAA;AACF;AACF,aAAA;AACF,QAAA,CAAA;AAEAI,QAAAA,MAAAA,CAAAA,CAAO3B,MAAM,EAAA;AACX,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACY,MAAM,CAACf,GAAAA,EAAKZ,MAAAA,CAAAA;AACtC,QAAA,CAAA;AAEA4B,QAAAA,UAAAA,CAAAA,CAAW5B,MAAM,EAAA;AACf,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACa,UAAU,CAAChB,GAAAA,EAAKZ,MAAAA,CAAAA;AAC1C,QAAA,CAAA;AAEA6B,QAAAA,MAAAA,CAAAA,CAAO7B,MAAM,EAAA;AACX,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACc,MAAM,CAACjB,GAAAA,EAAKZ,MAAAA,CAAAA;AACtC,QAAA,CAAA;AAEA8B,QAAAA,UAAAA,CAAAA,CAAW9B,MAAM,EAAA;AACf,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACe,UAAU,CAAClB,GAAAA,EAAKZ,MAAAA,CAAAA;AAC1C,QAAA,CAAA;AAEA+B,QAAAA,MAAAA,CAAAA,CAAO/B,MAAM,EAAA;AACX,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACgB,MAAM,CAACnB,GAAAA,EAAKZ,MAAAA,CAAAA;AACtC,QAAA,CAAA;QAEAgC,UAAAA,CAAAA,CAAWhC,MAAAA,GAAS,EAAE,EAAA;AACpB,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACiB,UAAU,CAACpB,GAAAA,EAAKZ,MAAAA,CAAAA;AAC1C,QAAA,CAAA;AAEAoB,QAAAA,KAAAA,CAAAA,CAAMpB,MAAM,EAAA;AACV,YAAA,OAAOa,EAAAA,CAAGE,aAAa,CAACK,KAAK,CAACR,GAAAA,EAAKZ,MAAAA,CAAAA;AACrC,QAAA,CAAA;QAEA,MAAMiC,eAAAA,CAAAA,CAAgBC,EAAE,EAAEC,IAAI,EAAA;YAC5B,MAAMC,GAAAA,GAAM,MAAMvB,EAAAA,CAAGwB,WAAW,EAAA;YAChC,IAAI;AACF,gBAAA,MAAMxB,GAAGE,aAAa,CAACkB,eAAe,CAACrB,GAAAA,EAAKsB,IAAIC,IAAAA,EAAM;AAAEE,oBAAAA,WAAAA,EAAaD,IAAIE,GAAG;AAAG,iBAAA,CAAA;gBAC/E,OAAO,MAAMF,IAAIG,MAAM,EAAA;AACzB,YAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;AACV,gBAAA,MAAMJ,IAAIK,QAAQ,EAAA;gBAClB,MAAMD,CAAAA;AACR,YAAA;AACF,QAAA,CAAA;QAEA,MAAME,eAAAA,CAAAA,CAAgBR,EAAE,EAAEC,IAAI,EAAA;YAC5B,MAAMC,GAAAA,GAAM,MAAMvB,EAAAA,CAAGwB,WAAW,EAAA;YAChC,IAAI;AACF,gBAAA,MAAMxB,GAAGE,aAAa,CAAC2B,eAAe,CAAC9B,GAAAA,EAAKsB,IAAIC,IAAAA,EAAM;AAAEE,oBAAAA,WAAAA,EAAaD,IAAIE,GAAG;AAAG,iBAAA,CAAA;gBAC/E,OAAO,MAAMF,IAAIG,MAAM,EAAA;AACzB,YAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;AACV,gBAAA,MAAMJ,IAAIK,QAAQ,EAAA;gBAClB,MAAMD,CAAAA;AACR,YAAA;AACF,QAAA,CAAA;AAEAG,QAAAA,eAAAA,CAAAA,CAAgBT,EAAE,EAAA;AAChB,YAAA,OAAOrB,EAAAA,CAAGE,aAAa,CAAC4B,eAAe,CAAC/B,GAAAA,EAAKsB,EAAAA,CAAAA;AAC/C,QAAA,CAAA;QAEAU,QAAAA,CAAAA,CAASC,MAAM,EAAED,QAAQ,EAAA;AACvB,YAAA,OAAO/B,GAAGE,aAAa,CAAC6B,QAAQ,CAAChC,KAAKiC,MAAAA,EAAQD,QAAAA,CAAAA;AAChD,QAAA,CAAA;AAEAE,QAAAA,IAAAA,CAAAA,CAAKD,MAAM,EAAEE,MAAM,EAAE/C,MAAM,EAAA;AACzB,YAAA,OAAOa,GAAGE,aAAa,CAAC+B,IAAI,CAAClC,GAAAA,EAAKiC,QAAQE,MAAAA,EAAQ/C,MAAAA,CAAAA;AACpD,QAAA,CAAA;AAEA,QAAA,MAAMgD,SAAAA,CAAAA,CAAUH,MAAM,EAAEI,KAAK,EAAEjD,MAAM,EAAA;YACnC,IAAI,CAACkD,SAASD,KAAAA,CAAAA,EAAQ;AACpB,gBAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,uBAAuB,EAAEF,KAAAA,CAAM,eAAe,CAAC,CAAA;AAClE,YAAA;YAEA,MAAM,EAAEG,UAAU,EAAE,GAAGvC,GAAGwC,QAAQ,CAACf,GAAG,CAAC1B,GAAAA,CAAAA;YACvC,MAAM0C,SAAAA,GAAYF,UAAU,CAACH,KAAAA,CAAM;YAEnC,IACE,CAACK,SAAAA,IACDA,SAAAA,CAAUC,IAAI,KAAK,cACnB,CAACD,SAAAA,CAAUE,QAAQ,IACnB,CAAC;AAAC,gBAAA,WAAA;AAAa,gBAAA;AAAa,aAAA,CAACC,QAAQ,CAACH,SAAAA,CAAUE,QAAQ,CAAA,EACxD;AACA,gBAAA,MAAM,IAAIL,KAAAA,CAAM,CAAC,uBAAuB,EAAEF,KAAAA,CAAM,wCAAwC,CAAC,CAAA;AAC3F,YAAA;YAEA,MAAM,CAACvC,OAAO,EAAET,IAAI,EAAEC,QAAQ,EAAE,CAAC,GAAGG,eAAAA,CAAgBL,MAAAA,CAAAA;YAEpD,MAAM,CAACsB,OAAAA,EAAS,EAAEF,KAAAA,EAAOG,KAAK,EAAE,CAAC,GAAG,MAAML,OAAAA,CAAQC,GAAG,CAAC;AACpDN,gBAAAA,EAAAA,CAAGE,aAAa,CAAC+B,IAAI,CAAClC,GAAAA,EAAKiC,QAAQI,KAAAA,EAAOvC,KAAAA,CAAAA;AAC1CG,gBAAAA,EAAAA,CAAGE,aAAa,CAAC+B,IAAI,CAAClC,GAAAA,EAAKiC,QAAQI,KAAAA,EAAO;AAAE,oBAAA,GAAGvC,KAAK;oBAAEU,KAAAA,EAAO;AAAK,iBAAA;AACnE,aAAA,CAAA;YAED,OAAO;AACLE,gBAAAA,OAAAA;gBACAE,UAAAA,EAAY;AACVvB,oBAAAA,IAAAA;AACAC,oBAAAA,QAAAA;oBACAuB,SAAAA,EAAWlB,IAAAA,CAAKmB,IAAI,CAACH,KAAAA,GAAQrB,QAAAA,CAAAA;AAC7BqB,oBAAAA;AACF;AACF,aAAA;AACF,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"entity-repository.mjs","sources":["../../src/entity-manager/entity-repository.ts"],"sourcesContent":["import { isString } from 'lodash';\nimport type { Database } from '..';\nimport type { Repository, Params } from './types';\n\nconst withDefaultPagination = (params: Params) => {\n const { page = 1, pageSize = 10, ...rest } = params;\n\n return {\n page: Number(page),\n pageSize: Number(pageSize),\n ...rest,\n };\n};\n\ntype ParamsWithLimits = Omit<Params, 'page' | 'pageSize'> & {\n limit: number;\n offset: number;\n};\n\nconst withOffsetLimit = (\n params: Params\n): [ParamsWithLimits, { page: number; pageSize: number }] => {\n const { page, pageSize, ...rest } = withDefaultPagination(params);\n\n const offset = Math.max(page - 1, 0) * pageSize;\n const limit = pageSize;\n\n const query = {\n ...rest,\n limit,\n offset,\n };\n\n return [query, { page, pageSize }];\n};\n\nexport const createRepository = (uid: string, db: Database): Repository => {\n return {\n findOne(params = {}) {\n return db.entityManager.findOne(uid, params);\n },\n\n findMany(params = {}) {\n return db.entityManager.findMany(uid, params);\n },\n\n findWithCount(params = {}) {\n return Promise.all([\n db.entityManager.findMany(uid, params),\n db.entityManager.count(uid, params),\n ]);\n },\n\n async findPage(params) {\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, total] = await Promise.all([\n db.entityManager.findMany(uid, query),\n db.entityManager.count(uid, query),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n\n create(params) {\n return db.entityManager.create(uid, params);\n },\n\n createMany(params) {\n return db.entityManager.createMany(uid, params);\n },\n\n update(params) {\n return db.entityManager.update(uid, params);\n },\n\n updateMany(params) {\n return db.entityManager.updateMany(uid, params);\n },\n\n delete(params) {\n return db.entityManager.delete(uid, params);\n },\n\n deleteMany(params = {}) {\n return db.entityManager.deleteMany(uid, params);\n },\n\n count(params) {\n return db.entityManager.count(uid, params);\n },\n\n async attachRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.attachRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n async updateRelations(id, data) {\n const trx = await db.transaction();\n try {\n await db.entityManager.updateRelations(uid, id, data, { transaction: trx.get() });\n return await trx.commit();\n } catch (e) {\n await trx.rollback();\n throw e;\n }\n },\n\n deleteRelations(id) {\n return db.entityManager.deleteRelations(uid, id);\n },\n\n populate(entity, populate) {\n return db.entityManager.populate(uid, entity, populate);\n },\n\n load(entity, fields, params) {\n return db.entityManager.load(uid, entity, fields, params);\n },\n\n async loadPages(entity, field, params) {\n if (!isString(field)) {\n throw new Error(`Invalid load. Expected ${field} to be a string`);\n }\n\n const { attributes } = db.metadata.get(uid);\n const attribute = attributes[field];\n\n if (\n !attribute ||\n attribute.type !== 'relation' ||\n !attribute.relation ||\n !['oneToMany', 'manyToMany'].includes(attribute.relation)\n ) {\n throw new Error(`Invalid load. Expected ${field} to be an anyToMany relational attribute`);\n }\n\n const [query, { page, pageSize }] = withOffsetLimit(params);\n\n const [results, { count: total }] = await Promise.all([\n db.entityManager.load(uid, entity, field, query),\n db.entityManager.load(uid, entity, field, { ...query, count: true }),\n ]);\n\n return {\n results,\n pagination: {\n page,\n pageSize,\n pageCount: Math.ceil(total / pageSize),\n total,\n },\n };\n },\n };\n};\n"],"names":["withDefaultPagination","params","page","pageSize","rest","Number","withOffsetLimit","offset","Math","max","limit","query","createRepository","uid","db","findOne","entityManager","findMany","findWithCount","Promise","all","count","findPage","results","total","pagination","pageCount","ceil","create","createMany","update","updateMany","delete","deleteMany","attachRelations","id","data","trx","transaction","get","commit","e","rollback","updateRelations","deleteRelations","populate","entity","load","fields","loadPages","field","isString","Error","attributes","metadata","attribute","type","relation","includes"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA4OxB,eAAO,MAAM,mBAAmB,GAAI,IAAI,QAAQ,KAAG,aA6+ClD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-manager/index.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAE5D,cAAc,SAAS,CAAC;AA2OxB,eAAO,MAAM,mBAAmB,GAAI,IAAI,QAAQ,KAAG,aA6+ClD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var types = require('../utils/types.js');
5
5
  var index = require('../fields/index.js');
6
6
  var queryBuilder = require('../query/query-builder.js');
@@ -32,7 +32,7 @@ var relationsOrderer = require('./relations-orderer.js');
32
32
  await qb.execute();
33
33
  }
34
34
  }
35
- const isRecord = (value)=>_.isObject(value) && !_.isNil(value);
35
+ const isRecord = (value)=>_.isObject(value) && value != null;
36
36
  const toId = (value)=>{
37
37
  if (isRecord(value) && 'id' in value && isValidId(value.id)) {
38
38
  return value.id;
@@ -43,10 +43,10 @@ const toId = (value)=>{
43
43
  throw new Error(`Invalid id, expected a string or integer, got ${JSON.stringify(value)}`);
44
44
  };
45
45
  const toIds = (value)=>_.castArray(value || []).map(toId);
46
- const isValidId = (value)=>_.isString(value) || _.isInteger(value);
46
+ const isValidId = (value)=>_.isString(value) || Number.isInteger(value);
47
47
  const isValidObjectId = (value)=>isRecord(value) && 'id' in value && isValidId(value.id);
48
48
  const toIdArray = (data)=>{
49
- const array = _.castArray(data).filter((datum)=>!_.isNil(datum)).map((datum)=>{
49
+ const array = _.castArray(data).filter((datum)=>datum != null).map((datum)=>{
50
50
  // if it is a string or an integer return an obj with id = to datum
51
51
  if (isValidId(datum)) {
52
52
  return {
@@ -60,17 +60,17 @@ const toIdArray = (data)=>{
60
60
  }
61
61
  return datum;
62
62
  });
63
- return _.uniqWith(_.isEqual, array);
63
+ return _.uniqWith(array, _.isEqual);
64
64
  };
65
65
  const toAssocs = (data)=>{
66
- if (_.isArray(data) || _.isString(data) || _.isNumber(data) || _.isNull(data) || isRecord(data) && 'id' in data) {
66
+ if (Array.isArray(data) || _.isString(data) || _.isNumber(data) || data === null || isRecord(data) && 'id' in data) {
67
67
  return {
68
- set: _.isNull(data) ? data : toIdArray(data)
68
+ set: data === null ? data : toIdArray(data)
69
69
  };
70
70
  }
71
71
  if (data?.set) {
72
72
  return {
73
- set: _.isNull(data.set) ? data.set : toIdArray(data.set)
73
+ set: data.set === null ? data.set : toIdArray(data.set)
74
74
  };
75
75
  }
76
76
  return {
@@ -95,8 +95,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
95
95
  const attribute = attributes[attributeName];
96
96
  if (types.isScalarAttribute(attribute)) {
97
97
  const field = index.createField(attribute);
98
- if (_.isUndefined(data[attributeName])) {
99
- if (!_.isUndefined(attribute.default) && withDefaults) {
98
+ if (data[attributeName] === undefined) {
99
+ if (attribute.default !== undefined && withDefaults) {
100
100
  if (typeof attribute.default === 'function') {
101
101
  obj[attributeName] = attribute.default();
102
102
  } else {
@@ -116,7 +116,7 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
116
116
  if ('joinColumn' in attribute && attribute.joinColumn && attribute.owner) {
117
117
  const joinColumnName = attribute.joinColumn.name;
118
118
  // allow setting to null
119
- let attrValue = !_.isUndefined(data[attributeName]) ? data[attributeName] : data[joinColumnName];
119
+ let attrValue = data[attributeName] !== undefined ? data[attributeName] : data[joinColumnName];
120
120
  // Legacy single-column storage: only one id fits. Take the last
121
121
  // and warn — modern schemas use a join table that can hold both
122
122
  // the draft and published rows of the related entry.
@@ -127,9 +127,9 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
127
127
  }
128
128
  attrValue = setIds.length > 0 ? setIds[setIds.length - 1] : null;
129
129
  }
130
- if (_.isNull(attrValue)) {
130
+ if (attrValue === null) {
131
131
  obj[joinColumnName] = attrValue;
132
- } else if (!_.isUndefined(attrValue)) {
132
+ } else if (attrValue !== undefined) {
133
133
  obj[joinColumnName] = toId(attrValue);
134
134
  }
135
135
  continue;
@@ -144,8 +144,8 @@ const processData = (metadata, data = {}, { withDefaults = false } = {})=>{
144
144
  });
145
145
  continue;
146
146
  }
147
- if (!_.isUndefined(value)) {
148
- if (!_.has('id', value) || !_.has(typeField, value)) {
147
+ if (value !== undefined) {
148
+ if (!_.has(value, 'id') || !_.has(value, typeField)) {
149
149
  throw new Error(`Expects properties ${typeField} an id to make a morph association`);
150
150
  }
151
151
  Object.assign(obj, {
@@ -188,11 +188,11 @@ const createEntityManager = (db)=>{
188
188
  const states = await db.lifecycles.run('beforeCount', uid, {
189
189
  params
190
190
  });
191
- const res = await this.createQueryBuilder(uid).init(_.pick([
191
+ const res = await this.createQueryBuilder(uid).init(_.pick(params, [
192
192
  '_q',
193
193
  'where',
194
194
  'filters'
195
- ], params)).count().first().execute();
195
+ ])).count().first().execute();
196
196
  const result = Number(res.count);
197
197
  await db.lifecycles.run('afterCount', uid, {
198
198
  params,
@@ -250,7 +250,7 @@ const createEntityManager = (db)=>{
250
250
  });
251
251
  const metadata = db.metadata.get(uid);
252
252
  const { data } = params;
253
- if (!_.isArray(data)) {
253
+ if (!Array.isArray(data)) {
254
254
  throw new Error('CreateMany expects data to be an array');
255
255
  }
256
256
  const dataToInsert = data.map((datum)=>processData(metadata, datum, {
@@ -350,11 +350,11 @@ const createEntityManager = (db)=>{
350
350
  throw new Error('Update requires data');
351
351
  }
352
352
  // Same pick set as count and deleteMany. See deleteMany for why.
353
- const updatedRows = await this.createQueryBuilder(uid).init(_.pick([
353
+ const updatedRows = await this.createQueryBuilder(uid).init(_.pick(params, [
354
354
  '_q',
355
355
  'where',
356
356
  'filters'
357
- ], params)).update(dataToUpdate).execute({
357
+ ])).update(dataToUpdate).execute({
358
358
  mapResults: false
359
359
  });
360
360
  const result = {
@@ -413,11 +413,11 @@ const createEntityManager = (db)=>{
413
413
  // Only apply filter criteria (_q / where / filters), same as count — not full findMany params.
414
414
  // limit, offset, orderBy, populate, etc. must be ignored: populate throws on delete results,
415
415
  // and pagination keys can make deleteMany diverge from findMany or delete an unexpected slice.
416
- const deletedRows = await this.createQueryBuilder(uid).init(_.pick([
416
+ const deletedRows = await this.createQueryBuilder(uid).init(_.pick(params, [
417
417
  '_q',
418
418
  'where',
419
419
  'filters'
420
- ], params)).delete().execute({
420
+ ])).delete().execute({
421
421
  mapResults: false
422
422
  });
423
423
  const result = {
@@ -436,7 +436,7 @@ const createEntityManager = (db)=>{
436
436
  const { transaction: trx } = options ?? {};
437
437
  for (const attributeName of Object.keys(attributes)){
438
438
  const attribute = attributes[attributeName];
439
- const isValidLink = _.has(attributeName, data) && !_.isNil(data[attributeName]);
439
+ const isValidLink = _.has(data, attributeName) && data[attributeName] != null;
440
440
  if (attribute.type !== 'relation' || !isValidLink) {
441
441
  continue;
442
442
  }
@@ -576,7 +576,7 @@ const createEntityManager = (db)=>{
576
576
  });
577
577
  }
578
578
  // prepare new relations to insert
579
- const insert = _.uniqBy('id', relsToAdd).map((data)=>{
579
+ const insert = _.uniqBy(relsToAdd, 'id').map((data)=>{
580
580
  return {
581
581
  [joinColumn.name]: id,
582
582
  [inverseJoinColumn.name]: data.id,
@@ -629,7 +629,7 @@ const createEntityManager = (db)=>{
629
629
  const { transaction: trx } = options ?? {};
630
630
  for (const attributeName of Object.keys(attributes)){
631
631
  const attribute = attributes[attributeName];
632
- if (attribute.type !== 'relation' || !_.has(attributeName, data)) {
632
+ if (attribute.type !== 'relation' || !_.has(data, attributeName)) {
633
633
  continue;
634
634
  }
635
635
  const cleanRelationData = toAssocs(data[attributeName]);
@@ -648,7 +648,7 @@ const createEntityManager = (db)=>{
648
648
  [idColumn.name]: id,
649
649
  [typeColumn.name]: uid
650
650
  }).transacting(trx).execute();
651
- if (!_.isNull(cleanRelationData.set)) {
651
+ if (cleanRelationData.set !== null) {
652
652
  const relId = toIds(cleanRelationData.set?.[0]);
653
653
  await this.createQueryBuilder(target).update({
654
654
  [idColumn.name]: id,
@@ -878,7 +878,7 @@ const createEntityManager = (db)=>{
878
878
  }).update({
879
879
  [attribute.joinColumn.referencedColumn]: null
880
880
  }).transacting(trx).execute();
881
- if (!_.isNull(cleanRelationData.set)) {
881
+ if (cleanRelationData.set !== null) {
882
882
  const relIdsToAdd = toIds(cleanRelationData.set);
883
883
  await this.createQueryBuilder(target).where({
884
884
  id: relIdsToAdd
@@ -901,7 +901,7 @@ const createEntityManager = (db)=>{
901
901
  select.push(inverseOrderColumnName);
902
902
  }
903
903
  // only delete relations
904
- if (_.isNull(cleanRelationData.set)) {
904
+ if (cleanRelationData.set === null) {
905
905
  await regularRelations.deleteRelations({
906
906
  id,
907
907
  attribute,
@@ -910,7 +910,7 @@ const createEntityManager = (db)=>{
910
910
  transaction: trx
911
911
  });
912
912
  } else {
913
- const isPartialUpdate = !_.has('set', cleanRelationData);
913
+ const isPartialUpdate = !_.has(cleanRelationData, 'set');
914
914
  let relIdsToaddOrMove;
915
915
  if (isPartialUpdate) {
916
916
  if (relations.isAnyToOne(attribute)) ;
@@ -918,7 +918,7 @@ const createEntityManager = (db)=>{
918
918
  // Use id-only comparison so a disconnect item whose id also appears in
919
919
  // the connect array is correctly excluded from deletion (deep-equality
920
920
  // fails because connect items carry extra fields like `position`).
921
- const relIdsToDelete = toIds(_.differenceWith((a, b)=>a.id === b.id, cleanRelationData.disconnect, cleanRelationData.connect ?? []));
921
+ const relIdsToDelete = toIds(_.differenceWith(cleanRelationData.disconnect, cleanRelationData.connect ?? [], (a, b)=>a.id === b.id));
922
922
  // When a connect item's position.before/after references an id that is
923
923
  // about to be deleted (relIdsToDelete), the referenced row won't exist by
924
924
  // the time the adjacentRelations query runs below, causing sortConnectArray
@@ -1058,7 +1058,7 @@ const createEntityManager = (db)=>{
1058
1058
  }).where(joinTable.on || {}).transacting(trx).execute();
1059
1059
  }
1060
1060
  // prepare relations to insert
1061
- const insert = _.uniqBy('id', cleanRelationData.connect).map((relToAdd)=>({
1061
+ const insert = _.uniqBy(cleanRelationData.connect, 'id').map((relToAdd)=>({
1062
1062
  [joinColumn.name]: id,
1063
1063
  [inverseJoinColumn.name]: relToAdd.id,
1064
1064
  ...joinTable.on,
@@ -1095,7 +1095,7 @@ const createEntityManager = (db)=>{
1095
1095
  }
1096
1096
  // add inv order value
1097
1097
  if (relations.hasInverseOrderColumn(attribute)) {
1098
- const nonExistingRelsIds = _.difference(relIdsToaddOrMove, _.map(inverseJoinColumn.name, currentMovingRels));
1098
+ const nonExistingRelsIds = _.difference(relIdsToaddOrMove, _.map(currentMovingRels, inverseJoinColumn.name));
1099
1099
  const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
1100
1100
  as: 'max'
1101
1101
  }).whereIn(inverseJoinColumn.name, nonExistingRelsIds).where(joinTable.on || {}).groupBy(inverseJoinColumn.name).from(joinTable.name).transacting(trx);
@@ -1140,7 +1140,7 @@ const createEntityManager = (db)=>{
1140
1140
  if (_.isEmpty(cleanRelationData.set)) {
1141
1141
  continue;
1142
1142
  }
1143
- const insert = _.uniqBy('id', cleanRelationData.set).map((relToAdd)=>({
1143
+ const insert = _.uniqBy(cleanRelationData.set, 'id').map((relToAdd)=>({
1144
1144
  [joinColumn.name]: id,
1145
1145
  [inverseJoinColumn.name]: relToAdd.id,
1146
1146
  ...joinTable.on,
@@ -1160,7 +1160,7 @@ const createEntityManager = (db)=>{
1160
1160
  $in: relIdsToaddOrMove
1161
1161
  }
1162
1162
  }).where(joinTable.on || {}).transacting(trx).execute();
1163
- const inverseRelsIds = _.map(inverseJoinColumn.name, existingRels);
1163
+ const inverseRelsIds = _.map(existingRels, inverseJoinColumn.name);
1164
1164
  const nonExistingRelsIds = _.difference(relIdsToaddOrMove, inverseRelsIds);
1165
1165
  const maxResults = await db.getConnection().select(inverseJoinColumn.name).max(inverseOrderColumnName, {
1166
1166
  as: 'max'
@@ -1317,7 +1317,9 @@ const createEntityManager = (db)=>{
1317
1317
  // TODO: add lifecycle events
1318
1318
  async load (uid, entity, fields, populate) {
1319
1319
  const { attributes } = db.metadata.get(uid);
1320
- const fieldsArr = _.castArray(fields);
1320
+ const fieldsArr = Array.isArray(fields) ? fields : [
1321
+ fields
1322
+ ];
1321
1323
  fieldsArr.forEach((field)=>{
1322
1324
  const attribute = attributes[field];
1323
1325
  if (!attribute || attribute.type !== 'relation') {
@@ -1340,7 +1342,7 @@ const createEntityManager = (db)=>{
1340
1342
  return null;
1341
1343
  }
1342
1344
  if (Array.isArray(fields)) {
1343
- return _.pick(fields, entry);
1345
+ return _.pick(entry, fields);
1344
1346
  }
1345
1347
  return entry[fields];
1346
1348
  },