@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
@@ -1 +1 @@
1
- {"version":3,"file":"relations-orderer.mjs","sources":["../../src/entity-manager/relations-orderer.ts"],"sourcesContent":["import { castArray, maxBy } from 'lodash/fp';\nimport _ from 'lodash';\n\nimport { InvalidRelationError } from '../errors';\nimport type { ID } from '../types';\n\ninterface Link {\n id: ID;\n position?: { before?: ID; after?: ID; start?: true; end?: true };\n order?: number;\n __component?: string;\n}\n\ninterface OrderedLink extends Link {\n init?: boolean;\n order: number;\n}\n\n/**\n * When connecting relations, the order you connect them matters.\n *\n * Example, if you connect the following relations:\n * { id: 5, position: { before: 1 } }\n * { id: 1, position: { before: 2 } }\n * { id: 2, position: { end: true } }\n *\n * Going through the connect array, id 5 has to be connected before id 1,\n * so the order of id5 = id1 - 1. But the order value of id 1 is unknown.\n * The only way to know the order of id 1 is to connect it first.\n *\n * This function makes sure the relations are connected in the right order:\n * { id: 2, position: { end: true } }\n * { id: 1, position: { before: 2 } }\n * { id: 5, position: { before: 1 } }\n *\n */\nconst sortConnectArray = (connectArr: Link[], initialArr: Link[] = [], strictSort = true) => {\n const sortedConnect: Link[] = [];\n // Boolean to know if we have to recalculate the order of the relations\n let needsSorting = false;\n // Map to validate if relation is already in sortedConnect or DB.\n const relationInInitialArray = initialArr.reduce(\n (acc, rel) => ({ ...acc, [rel.id]: true }),\n {} as Record<ID, boolean>\n );\n // Map to store the first index where a relation id is connected\n const mappedRelations = connectArr.reduce(\n (mapper, relation: Link) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n\n if (!adjacentRelId || (!relationInInitialArray[adjacentRelId] && !mapper[adjacentRelId])) {\n needsSorting = true;\n }\n\n /**\n * We do not allow duplicate relations to be connected, so we need to check for uniqueness with components\n * Note that the id here includes the uid for polymorphic relations\n *\n * So for normal relations, the same id means the same relation\n * For component relations, it means the unique combo of (id, component name)\n */\n\n // Check if there's an existing relation with this id\n const existingRelation = mapper[relation.id];\n\n // Check if existing relation has a component or not\n const hasNoComponent = existingRelation && !('__component' in existingRelation);\n\n // Check if the existing relation has the same component as the new relation\n const hasSameComponent =\n existingRelation && existingRelation.__component === relation.__component;\n\n // If we have an existing relation that is not unique (no component or same component) we won't accept it\n if (existingRelation && (hasNoComponent || hasSameComponent)) {\n throw new InvalidRelationError(\n `The relation with id ${relation.id} is already connected. ` +\n 'You cannot connect the same relation twice.'\n );\n }\n\n return {\n [relation.id]: { ...relation, computed: false },\n ...mapper,\n };\n },\n {} as Record<ID, Link & { computed: boolean }>\n );\n\n // If we don't need to sort the connect array, we can return it as is\n if (!needsSorting) return connectArr;\n\n // Recursively compute in which order the relation should be connected\n const computeRelation = (relation: Link, relationsSeenInBranch: Record<ID, boolean>) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n const adjacentRelation = mappedRelations[adjacentRelId as ID];\n\n // If the relation has already been seen in the current branch,\n // it means there is a circular reference\n if (adjacentRelId && relationsSeenInBranch[adjacentRelId]) {\n throw new InvalidRelationError(\n 'A circular reference was found in the connect array. ' +\n 'One relation is trying to connect before/after another one that is trying to connect before/after it'\n );\n }\n\n // This relation has already been computed\n if (mappedRelations[relation.id]?.computed) {\n return;\n }\n\n mappedRelations[relation.id].computed = true;\n\n // Relation does not have a before or after attribute or is in the initial array\n if (!adjacentRelId || relationInInitialArray[adjacentRelId]) {\n sortedConnect.push(relation);\n return;\n }\n\n // Look if id is referenced elsewhere in the array\n if (mappedRelations[adjacentRelId]) {\n computeRelation(adjacentRelation, { ...relationsSeenInBranch, [relation.id]: true });\n sortedConnect.push(relation);\n } else if (strictSort) {\n // If we reach this point, it means that the adjacent relation is not in the connect array\n // and it is not in the database.\n throw new InvalidRelationError(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The relation with id ${adjacentRelId} needs to be connected first.`\n );\n } else {\n // We are in non-strict mode so we can push the relation.\n sortedConnect.push({ id: relation.id, position: { end: true } });\n }\n };\n\n // Iterate over connectArr and populate sortedConnect\n connectArr.forEach((relation) => computeRelation(relation, {}));\n\n return sortedConnect;\n};\n\n/**\n * Responsible for calculating the relations order when connecting them.\n *\n * The connect method takes an array of relations with positional attributes:\n * - before: the id of the relation to connect before\n * - after: the id of the relation to connect after\n * - end: it should be at the end\n * - start: it should be at the start\n *\n * Example:\n * - Having a connect array like:\n * [ { id: 4, before: 2 }, { id: 4, before: 3}, {id: 5, before: 4} ]\n * - With the initial relations:\n * [ { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * - Step by step, going through the connect array, the array of relations would be:\n * [ { id: 4, order: 3.5 }, { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 5, order: 3.5 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * - The final step would be to recalculate fractional order values.\n * [ { id: 2, order: 4 }, { id: 5, order: 3.33 }, { id: 4, order: 3.66 }, { id: 3, order: 10 } ]\n *\n * `initArr` is not the full relation list. For an ordered connect, `updateRelations` loads only\n * the rows named as anchors by the payload plus the lowest- and highest-ordered rows, so entries\n * that are adjacent in `computedRelations` are not adjacent in the stored list. Placement must be\n * computed from the anchor's own order, never from its neighbours in this array.\n *\n * @param {Array<*>} initArr - array of relations to initialize the class with\n * @param {string} idColumn - the column name of the id\n * @param {string} orderColumn - the column name of the order\n * @param {boolean} strict - if true, will throw an error if a relation is connected adjacent to\n * another one that does not exist\n * @return {*}\n */\nconst relationsOrderer = <TRelation extends Record<string, ID | number | null>>(\n initArr: TRelation[],\n idColumn: keyof TRelation,\n orderColumn: keyof TRelation,\n strict?: boolean\n) => {\n const computedRelations: OrderedLink[] = _.sortBy(\n castArray(initArr ?? []).map((r) => ({\n init: true,\n id: r[idColumn] as ID,\n order: r[orderColumn] !== null && r[orderColumn] !== undefined ? Number(r[orderColumn]) : 1,\n })),\n 'order'\n );\n\n const maxOrder = maxBy('order', computedRelations)?.order || 0;\n\n const findRelation = (id: ID) => {\n const idx = computedRelations.findIndex((r) => r.id === id);\n return { idx, relation: computedRelations[idx] };\n };\n\n const removeRelation = (r: Link) => {\n const { idx } = findRelation(r.id);\n if (idx >= 0) {\n computedRelations.splice(idx, 1);\n }\n };\n\n const insertRelation = (r: Link) => {\n let idx;\n\n if (r.position?.before) {\n const { idx: beforeIdx, relation } = findRelation(r.position.before);\n if (relation.init) {\n r.order = relation.order - 0.5;\n } else {\n r.order = relation.order;\n }\n idx = beforeIdx;\n } else if (r.position?.after) {\n const { idx: afterIdx, relation } = findRelation(r.position.after);\n if (relation.init) {\n r.order = relation.order + 0.5;\n } else {\n r.order = relation.order;\n }\n idx = afterIdx + 1;\n } else if (r.position?.start) {\n if (computedRelations.length > 0) {\n const firstRelation = computedRelations[0];\n r.order = firstRelation.init ? firstRelation.order - 0.5 : firstRelation.order;\n } else {\n r.order = 0.5;\n }\n idx = 0;\n } else {\n r.order = maxOrder + 0.5;\n idx = computedRelations.length;\n }\n\n // Insert the relation in the array\n computedRelations.splice(idx, 0, r as OrderedLink);\n };\n\n return {\n disconnect(relations: Link | Link[]) {\n castArray(relations).forEach((relation) => {\n removeRelation(relation);\n });\n return this;\n },\n connect(relations: Link | Link[]) {\n sortConnectArray(castArray(relations), computedRelations, strict).forEach((relation) => {\n this.disconnect(relation);\n\n try {\n insertRelation(relation);\n } catch {\n throw new Error(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The list of connect relations is not valid`\n );\n }\n });\n return this;\n },\n get() {\n return computedRelations;\n },\n /**\n * Get a map between the relation id and its order\n */\n getOrderMap() {\n const map: Record<ID, number> = {};\n const chunks = _(computedRelations).groupBy('order').value();\n const sortedKeys = Object.keys(chunks).sort((a, b) => parseFloat(a) - parseFloat(b));\n\n for (const orderStr of sortedKeys) {\n const relations = chunks[orderStr];\n let offset = 1;\n relations.forEach((relation) => {\n if (!relation.init) {\n map[relation.id] = parseFloat(orderStr) + (offset / (relations.length + 1)) * 0.49;\n offset += 1;\n }\n });\n }\n\n return map;\n },\n };\n};\n\nexport { relationsOrderer, sortConnectArray };\n"],"names":["sortConnectArray","connectArr","initialArr","strictSort","sortedConnect","needsSorting","relationInInitialArray","reduce","acc","rel","id","mappedRelations","mapper","relation","adjacentRelId","position","before","after","existingRelation","hasNoComponent","hasSameComponent","__component","InvalidRelationError","computed","computeRelation","relationsSeenInBranch","adjacentRelation","push","JSON","stringify","end","forEach","relationsOrderer","initArr","idColumn","orderColumn","strict","computedRelations","_","sortBy","castArray","map","r","init","order","undefined","Number","maxOrder","maxBy","findRelation","idx","findIndex","removeRelation","splice","insertRelation","beforeIdx","afterIdx","start","length","firstRelation","disconnect","relations","connect","Error","get","getOrderMap","chunks","groupBy","value","sortedKeys","Object","keys","sort","a","b","parseFloat","orderStr","offset"],"mappings":"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"}
1
+ {"version":3,"file":"relations-orderer.mjs","sources":["../../src/entity-manager/relations-orderer.ts"],"sourcesContent":["import _, { castArray, maxBy } from 'lodash';\n\nimport { InvalidRelationError } from '../errors';\nimport type { ID } from '../types';\n\ninterface Link {\n id: ID;\n position?: { before?: ID; after?: ID; start?: true; end?: true };\n order?: number;\n __component?: string;\n}\n\ninterface OrderedLink extends Link {\n init?: boolean;\n order: number;\n}\n\n/**\n * When connecting relations, the order you connect them matters.\n *\n * Example, if you connect the following relations:\n * { id: 5, position: { before: 1 } }\n * { id: 1, position: { before: 2 } }\n * { id: 2, position: { end: true } }\n *\n * Going through the connect array, id 5 has to be connected before id 1,\n * so the order of id5 = id1 - 1. But the order value of id 1 is unknown.\n * The only way to know the order of id 1 is to connect it first.\n *\n * This function makes sure the relations are connected in the right order:\n * { id: 2, position: { end: true } }\n * { id: 1, position: { before: 2 } }\n * { id: 5, position: { before: 1 } }\n *\n */\nconst sortConnectArray = (connectArr: Link[], initialArr: Link[] = [], strictSort = true) => {\n const sortedConnect: Link[] = [];\n // Boolean to know if we have to recalculate the order of the relations\n let needsSorting = false;\n // Map to validate if relation is already in sortedConnect or DB.\n const relationInInitialArray = initialArr.reduce(\n (acc, rel) => ({ ...acc, [rel.id]: true }),\n {} as Record<ID, boolean>\n );\n // Map to store the first index where a relation id is connected\n const mappedRelations = connectArr.reduce(\n (mapper, relation: Link) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n\n if (!adjacentRelId || (!relationInInitialArray[adjacentRelId] && !mapper[adjacentRelId])) {\n needsSorting = true;\n }\n\n /**\n * We do not allow duplicate relations to be connected, so we need to check for uniqueness with components\n * Note that the id here includes the uid for polymorphic relations\n *\n * So for normal relations, the same id means the same relation\n * For component relations, it means the unique combo of (id, component name)\n */\n\n // Check if there's an existing relation with this id\n const existingRelation = mapper[relation.id];\n\n // Check if existing relation has a component or not\n const hasNoComponent = existingRelation && !('__component' in existingRelation);\n\n // Check if the existing relation has the same component as the new relation\n const hasSameComponent =\n existingRelation && existingRelation.__component === relation.__component;\n\n // If we have an existing relation that is not unique (no component or same component) we won't accept it\n if (existingRelation && (hasNoComponent || hasSameComponent)) {\n throw new InvalidRelationError(\n `The relation with id ${relation.id} is already connected. ` +\n 'You cannot connect the same relation twice.'\n );\n }\n\n return {\n [relation.id]: { ...relation, computed: false },\n ...mapper,\n };\n },\n {} as Record<ID, Link & { computed: boolean }>\n );\n\n // If we don't need to sort the connect array, we can return it as is\n if (!needsSorting) return connectArr;\n\n // Recursively compute in which order the relation should be connected\n const computeRelation = (relation: Link, relationsSeenInBranch: Record<ID, boolean>) => {\n const adjacentRelId = relation.position?.before || relation.position?.after;\n const adjacentRelation = mappedRelations[adjacentRelId as ID];\n\n // If the relation has already been seen in the current branch,\n // it means there is a circular reference\n if (adjacentRelId && relationsSeenInBranch[adjacentRelId]) {\n throw new InvalidRelationError(\n 'A circular reference was found in the connect array. ' +\n 'One relation is trying to connect before/after another one that is trying to connect before/after it'\n );\n }\n\n // This relation has already been computed\n if (mappedRelations[relation.id]?.computed) {\n return;\n }\n\n mappedRelations[relation.id].computed = true;\n\n // Relation does not have a before or after attribute or is in the initial array\n if (!adjacentRelId || relationInInitialArray[adjacentRelId]) {\n sortedConnect.push(relation);\n return;\n }\n\n // Look if id is referenced elsewhere in the array\n if (mappedRelations[adjacentRelId]) {\n computeRelation(adjacentRelation, { ...relationsSeenInBranch, [relation.id]: true });\n sortedConnect.push(relation);\n } else if (strictSort) {\n // If we reach this point, it means that the adjacent relation is not in the connect array\n // and it is not in the database.\n throw new InvalidRelationError(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The relation with id ${adjacentRelId} needs to be connected first.`\n );\n } else {\n // We are in non-strict mode so we can push the relation.\n sortedConnect.push({ id: relation.id, position: { end: true } });\n }\n };\n\n // Iterate over connectArr and populate sortedConnect\n connectArr.forEach((relation) => computeRelation(relation, {}));\n\n return sortedConnect;\n};\n\n/**\n * Responsible for calculating the relations order when connecting them.\n *\n * The connect method takes an array of relations with positional attributes:\n * - before: the id of the relation to connect before\n * - after: the id of the relation to connect after\n * - end: it should be at the end\n * - start: it should be at the start\n *\n * Example:\n * - Having a connect array like:\n * [ { id: 4, before: 2 }, { id: 4, before: 3}, {id: 5, before: 4} ]\n * - With the initial relations:\n * [ { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * - Step by step, going through the connect array, the array of relations would be:\n * [ { id: 4, order: 3.5 }, { id: 2, order: 4 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * [ { id: 2, order: 4 }, { id: 5, order: 3.5 }, { id: 4, order: 3.5 }, { id: 3, order: 10 } ]\n * - The final step would be to recalculate fractional order values.\n * [ { id: 2, order: 4 }, { id: 5, order: 3.33 }, { id: 4, order: 3.66 }, { id: 3, order: 10 } ]\n *\n * `initArr` is not the full relation list. For an ordered connect, `updateRelations` loads only\n * the rows named as anchors by the payload plus the lowest- and highest-ordered rows, so entries\n * that are adjacent in `computedRelations` are not adjacent in the stored list. Placement must be\n * computed from the anchor's own order, never from its neighbours in this array.\n *\n * @param {Array<*>} initArr - array of relations to initialize the class with\n * @param {string} idColumn - the column name of the id\n * @param {string} orderColumn - the column name of the order\n * @param {boolean} strict - if true, will throw an error if a relation is connected adjacent to\n * another one that does not exist\n * @return {*}\n */\nconst relationsOrderer = <TRelation extends Record<string, ID | number | null>>(\n initArr: TRelation[],\n idColumn: keyof TRelation,\n orderColumn: keyof TRelation,\n strict?: boolean\n) => {\n const computedRelations: OrderedLink[] = _.sortBy(\n castArray(initArr ?? []).map((r) => ({\n init: true,\n id: r[idColumn] as ID,\n order: r[orderColumn] !== null && r[orderColumn] !== undefined ? Number(r[orderColumn]) : 1,\n })),\n 'order'\n );\n\n const maxOrder = maxBy(computedRelations, 'order')?.order || 0;\n\n const findRelation = (id: ID) => {\n const idx = computedRelations.findIndex((r) => r.id === id);\n return { idx, relation: computedRelations[idx] };\n };\n\n const removeRelation = (r: Link) => {\n const { idx } = findRelation(r.id);\n if (idx >= 0) {\n computedRelations.splice(idx, 1);\n }\n };\n\n const insertRelation = (r: Link) => {\n let idx;\n\n if (r.position?.before) {\n const { idx: beforeIdx, relation } = findRelation(r.position.before);\n if (relation.init) {\n r.order = relation.order - 0.5;\n } else {\n r.order = relation.order;\n }\n idx = beforeIdx;\n } else if (r.position?.after) {\n const { idx: afterIdx, relation } = findRelation(r.position.after);\n if (relation.init) {\n r.order = relation.order + 0.5;\n } else {\n r.order = relation.order;\n }\n idx = afterIdx + 1;\n } else if (r.position?.start) {\n if (computedRelations.length > 0) {\n const firstRelation = computedRelations[0];\n r.order = firstRelation.init ? firstRelation.order - 0.5 : firstRelation.order;\n } else {\n r.order = 0.5;\n }\n idx = 0;\n } else {\n r.order = maxOrder + 0.5;\n idx = computedRelations.length;\n }\n\n // Insert the relation in the array\n computedRelations.splice(idx, 0, r as OrderedLink);\n };\n\n return {\n disconnect(relations: Link | Link[]) {\n castArray(relations).forEach((relation) => {\n removeRelation(relation);\n });\n return this;\n },\n connect(relations: Link | Link[]) {\n sortConnectArray(castArray(relations), computedRelations, strict).forEach((relation) => {\n this.disconnect(relation);\n\n try {\n insertRelation(relation);\n } catch {\n throw new Error(\n `There was a problem connecting relation with id ${\n relation.id\n } at position ${JSON.stringify(\n relation.position\n )}. The list of connect relations is not valid`\n );\n }\n });\n return this;\n },\n get() {\n return computedRelations;\n },\n /**\n * Get a map between the relation id and its order\n */\n getOrderMap() {\n const map: Record<ID, number> = {};\n const chunks = _(computedRelations).groupBy('order').value();\n const sortedKeys = Object.keys(chunks).sort((a, b) => parseFloat(a) - parseFloat(b));\n\n for (const orderStr of sortedKeys) {\n const relations = chunks[orderStr];\n let offset = 1;\n relations.forEach((relation) => {\n if (!relation.init) {\n map[relation.id] = parseFloat(orderStr) + (offset / (relations.length + 1)) * 0.49;\n offset += 1;\n }\n });\n }\n\n return map;\n },\n };\n};\n\nexport { relationsOrderer, sortConnectArray };\n"],"names":["sortConnectArray","connectArr","initialArr","strictSort","sortedConnect","needsSorting","relationInInitialArray","reduce","acc","rel","id","mappedRelations","mapper","relation","adjacentRelId","position","before","after","existingRelation","hasNoComponent","hasSameComponent","__component","InvalidRelationError","computed","computeRelation","relationsSeenInBranch","adjacentRelation","push","JSON","stringify","end","forEach","relationsOrderer","initArr","idColumn","orderColumn","strict","computedRelations","_","sortBy","castArray","map","r","init","order","undefined","Number","maxOrder","maxBy","findRelation","idx","findIndex","removeRelation","splice","insertRelation","beforeIdx","afterIdx","start","length","firstRelation","disconnect","relations","connect","Error","get","getOrderMap","chunks","groupBy","value","sortedKeys","Object","keys","sort","a","b","parseFloat","orderStr","offset"],"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
  var field = require('./field.js');
5
5
 
6
6
  const BIG_INTEGER_REGEX = /^[+-]?\d+$/;
@@ -1 +1 @@
1
- {"version":3,"file":"biginteger.js","sources":["../../src/fields/biginteger.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nconst BIG_INTEGER_REGEX = /^[+-]?\\d+$/;\n\nconst toBigIntegerString = (value: unknown): string => {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (!BIG_INTEGER_REGEX.test(trimmedValue)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return BigInt(trimmedValue).toString();\n }\n\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n};\n\nexport default class BigIntegerField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n return toBigIntegerString(value);\n }\n\n fromDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n try {\n return toBigIntegerString(value);\n } catch {\n // Preserve backward compatibility for legacy rows that may contain\n // malformed bigint values written by older versions/manual imports.\n return toString(value);\n }\n }\n}\n"],"names":["BIG_INTEGER_REGEX","toBigIntegerString","value","toString","Number","isFinite","isInteger","Error","trimmedValue","trim","test","BigInt","BigIntegerField","Field","toDB","undefined","fromDB"],"mappings":";;;;;AAGA,MAAMA,iBAAAA,GAAoB,YAAA;AAE1B,MAAMC,qBAAqB,CAACC,KAAAA,GAAAA;IAC1B,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,IAAI,CAACE,OAAOC,QAAQ,CAACH,UAAU,CAACE,MAAAA,CAAOE,SAAS,CAACJ,KAAAA,CAAAA,EAAQ;AACvD,YAAA,MAAM,IAAIK,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;AAEA,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,MAAMM,YAAAA,GAAeN,MAAMO,IAAI,EAAA;AAE/B,QAAA,IAAI,CAACT,iBAAAA,CAAkBU,IAAI,CAACF,YAAAA,CAAAA,EAAe;AACzC,YAAA,MAAM,IAAID,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;QAEA,OAAOS,MAAAA,CAAOH,cAAcL,QAAQ,EAAA;AACtC,IAAA;AAEA,IAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,CAAA;AAEe,MAAMU,eAAAA,SAAwBC,KAAAA,CAAAA;AAC3CC,IAAAA,IAAAA,CAAKZ,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;AAEA,QAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,IAAA;AAEAc,IAAAA,MAAAA,CAAOd,KAAc,EAAE;QACrB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;QAEA,IAAI;AACF,YAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,QAAA,CAAA,CAAE,OAAM;;;AAGN,YAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,QAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"biginteger.js","sources":["../../src/fields/biginteger.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nconst BIG_INTEGER_REGEX = /^[+-]?\\d+$/;\n\nconst toBigIntegerString = (value: unknown): string => {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (!BIG_INTEGER_REGEX.test(trimmedValue)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return BigInt(trimmedValue).toString();\n }\n\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n};\n\nexport default class BigIntegerField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n return toBigIntegerString(value);\n }\n\n fromDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n try {\n return toBigIntegerString(value);\n } catch {\n // Preserve backward compatibility for legacy rows that may contain\n // malformed bigint values written by older versions/manual imports.\n return toString(value);\n }\n }\n}\n"],"names":["BIG_INTEGER_REGEX","toBigIntegerString","value","toString","Number","isFinite","isInteger","Error","trimmedValue","trim","test","BigInt","BigIntegerField","Field","toDB","undefined","fromDB"],"mappings":";;;;;AAGA,MAAMA,iBAAAA,GAAoB,YAAA;AAE1B,MAAMC,qBAAqB,CAACC,KAAAA,GAAAA;IAC1B,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,IAAI,CAACE,OAAOC,QAAQ,CAACH,UAAU,CAACE,MAAAA,CAAOE,SAAS,CAACJ,KAAAA,CAAAA,EAAQ;AACvD,YAAA,MAAM,IAAIK,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;AAEA,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,MAAMM,YAAAA,GAAeN,MAAMO,IAAI,EAAA;AAE/B,QAAA,IAAI,CAACT,iBAAAA,CAAkBU,IAAI,CAACF,YAAAA,CAAAA,EAAe;AACzC,YAAA,MAAM,IAAID,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;QAEA,OAAOS,MAAAA,CAAOH,cAAcL,QAAQ,EAAA;AACtC,IAAA;AAEA,IAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,CAAA;AAEe,MAAMU,eAAAA,SAAwBC,KAAAA,CAAAA;AAC3CC,IAAAA,IAAAA,CAAKZ,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;AAEA,QAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,IAAA;AAEAc,IAAAA,MAAAA,CAAOd,KAAc,EAAE;QACrB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;QAEA,IAAI;AACF,YAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,QAAA,CAAA,CAAE,OAAM;;;AAGN,YAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,QAAA;AACF,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { toString } from 'lodash/fp';
1
+ import { toString } from 'lodash';
2
2
  import Field from './field.mjs';
3
3
 
4
4
  const BIG_INTEGER_REGEX = /^[+-]?\d+$/;
@@ -1 +1 @@
1
- {"version":3,"file":"biginteger.mjs","sources":["../../src/fields/biginteger.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nconst BIG_INTEGER_REGEX = /^[+-]?\\d+$/;\n\nconst toBigIntegerString = (value: unknown): string => {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (!BIG_INTEGER_REGEX.test(trimmedValue)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return BigInt(trimmedValue).toString();\n }\n\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n};\n\nexport default class BigIntegerField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n return toBigIntegerString(value);\n }\n\n fromDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n try {\n return toBigIntegerString(value);\n } catch {\n // Preserve backward compatibility for legacy rows that may contain\n // malformed bigint values written by older versions/manual imports.\n return toString(value);\n }\n }\n}\n"],"names":["BIG_INTEGER_REGEX","toBigIntegerString","value","toString","Number","isFinite","isInteger","Error","trimmedValue","trim","test","BigInt","BigIntegerField","Field","toDB","undefined","fromDB"],"mappings":";;;AAGA,MAAMA,iBAAAA,GAAoB,YAAA;AAE1B,MAAMC,qBAAqB,CAACC,KAAAA,GAAAA;IAC1B,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,IAAI,CAACE,OAAOC,QAAQ,CAACH,UAAU,CAACE,MAAAA,CAAOE,SAAS,CAACJ,KAAAA,CAAAA,EAAQ;AACvD,YAAA,MAAM,IAAIK,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;AAEA,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,MAAMM,YAAAA,GAAeN,MAAMO,IAAI,EAAA;AAE/B,QAAA,IAAI,CAACT,iBAAAA,CAAkBU,IAAI,CAACF,YAAAA,CAAAA,EAAe;AACzC,YAAA,MAAM,IAAID,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;QAEA,OAAOS,MAAAA,CAAOH,cAAcL,QAAQ,EAAA;AACtC,IAAA;AAEA,IAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,CAAA;AAEe,MAAMU,eAAAA,SAAwBC,KAAAA,CAAAA;AAC3CC,IAAAA,IAAAA,CAAKZ,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;AAEA,QAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,IAAA;AAEAc,IAAAA,MAAAA,CAAOd,KAAc,EAAE;QACrB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;QAEA,IAAI;AACF,YAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,QAAA,CAAA,CAAE,OAAM;;;AAGN,YAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,QAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"biginteger.mjs","sources":["../../src/fields/biginteger.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nconst BIG_INTEGER_REGEX = /^[+-]?\\d+$/;\n\nconst toBigIntegerString = (value: unknown): string => {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return value.toString();\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (!BIG_INTEGER_REGEX.test(trimmedValue)) {\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n }\n\n return BigInt(trimmedValue).toString();\n }\n\n throw new Error(`Expected a valid BigInteger, got ${value}`);\n};\n\nexport default class BigIntegerField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n return toBigIntegerString(value);\n }\n\n fromDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n try {\n return toBigIntegerString(value);\n } catch {\n // Preserve backward compatibility for legacy rows that may contain\n // malformed bigint values written by older versions/manual imports.\n return toString(value);\n }\n }\n}\n"],"names":["BIG_INTEGER_REGEX","toBigIntegerString","value","toString","Number","isFinite","isInteger","Error","trimmedValue","trim","test","BigInt","BigIntegerField","Field","toDB","undefined","fromDB"],"mappings":";;;AAGA,MAAMA,iBAAAA,GAAoB,YAAA;AAE1B,MAAMC,qBAAqB,CAACC,KAAAA,GAAAA;IAC1B,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,IAAI,CAACE,OAAOC,QAAQ,CAACH,UAAU,CAACE,MAAAA,CAAOE,SAAS,CAACJ,KAAAA,CAAAA,EAAQ;AACvD,YAAA,MAAM,IAAIK,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;AAEA,QAAA,OAAOA,MAAMC,QAAQ,EAAA;AACvB,IAAA;IAEA,IAAI,OAAOD,UAAU,QAAA,EAAU;QAC7B,MAAMM,YAAAA,GAAeN,MAAMO,IAAI,EAAA;AAE/B,QAAA,IAAI,CAACT,iBAAAA,CAAkBU,IAAI,CAACF,YAAAA,CAAAA,EAAe;AACzC,YAAA,MAAM,IAAID,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,QAAA;QAEA,OAAOS,MAAAA,CAAOH,cAAcL,QAAQ,EAAA;AACtC,IAAA;AAEA,IAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,iCAAiC,EAAEL,KAAAA,CAAAA,CAAO,CAAA;AAC7D,CAAA;AAEe,MAAMU,eAAAA,SAAwBC,KAAAA,CAAAA;AAC3CC,IAAAA,IAAAA,CAAKZ,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;AAEA,QAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,IAAA;AAEAc,IAAAA,MAAAA,CAAOd,KAAc,EAAE;QACrB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUa,SAAAA,EAAW;YACzC,OAAOb,KAAAA;AACT,QAAA;QAEA,IAAI;AACF,YAAA,OAAOD,kBAAAA,CAAmBC,KAAAA,CAAAA;AAC5B,QAAA,CAAA,CAAE,OAAM;;;AAGN,YAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,QAAA;AACF,IAAA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var field = require('./field.js');
5
5
 
6
6
  function isStringOrNumber(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.js","sources":["../../src/fields/boolean.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nexport default class BooleanField extends Field {\n toDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n // Handle null/undefined values explicitly\n if (value === null || value === undefined) {\n return null;\n }\n\n if (isStringOrNumber(value) && ['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (isStringOrNumber(value) && ['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n\n return Boolean(value);\n }\n\n fromDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n const strVal = toString(value);\n\n if (strVal === '1') {\n return true;\n }\n if (strVal === '0') {\n return false;\n }\n return null;\n }\n}\n"],"names":["isStringOrNumber","value","BooleanField","Field","toDB","undefined","includes","Boolean","fromDB","strVal","toString"],"mappings":";;;;;AAGA,SAASA,iBAAiBC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAY,OAAOA,KAAAA,KAAU,QAAA;AACvD;AAEe,MAAMC,YAAAA,SAAqBC,KAAAA,CAAAA;AACxCC,IAAAA,IAAAA,CAAKH,KAAc,EAAE;QACnB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;;QAGA,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUI,SAAAA,EAAW;YACzC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIL,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,MAAA;AAAQ,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACpE,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAID,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,OAAA;AAAS,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACrE,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOM,OAAAA,CAAQN,KAAAA,CAAAA;AACjB,IAAA;AAEAO,IAAAA,MAAAA,CAAOP,KAAc,EAAE;QACrB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMQ,SAASC,UAAAA,CAAST,KAAAA,CAAAA;AAExB,QAAA,IAAIQ,WAAW,GAAA,EAAK;YAClB,OAAO,IAAA;AACT,QAAA;AACA,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAO,KAAA;AACT,QAAA;QACA,OAAO,IAAA;AACT,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"boolean.js","sources":["../../src/fields/boolean.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nexport default class BooleanField extends Field {\n toDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n // Handle null/undefined values explicitly\n if (value === null || value === undefined) {\n return null;\n }\n\n if (isStringOrNumber(value) && ['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (isStringOrNumber(value) && ['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n\n return Boolean(value);\n }\n\n fromDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n const strVal = toString(value);\n\n if (strVal === '1') {\n return true;\n }\n if (strVal === '0') {\n return false;\n }\n return null;\n }\n}\n"],"names":["isStringOrNumber","value","BooleanField","Field","toDB","undefined","includes","Boolean","fromDB","strVal","toString"],"mappings":";;;;;AAGA,SAASA,iBAAiBC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAY,OAAOA,KAAAA,KAAU,QAAA;AACvD;AAEe,MAAMC,YAAAA,SAAqBC,KAAAA,CAAAA;AACxCC,IAAAA,IAAAA,CAAKH,KAAc,EAAE;QACnB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;;QAGA,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUI,SAAAA,EAAW;YACzC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIL,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,MAAA;AAAQ,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACpE,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAID,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,OAAA;AAAS,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACrE,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOM,OAAAA,CAAQN,KAAAA,CAAAA;AACjB,IAAA;AAEAO,IAAAA,MAAAA,CAAOP,KAAc,EAAE;QACrB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMQ,SAASC,UAAAA,CAAST,KAAAA,CAAAA;AAExB,QAAA,IAAIQ,WAAW,GAAA,EAAK;YAClB,OAAO,IAAA;AACT,QAAA;AACA,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAO,KAAA;AACT,QAAA;QACA,OAAO,IAAA;AACT,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { toString } from 'lodash/fp';
1
+ import { toString } from 'lodash';
2
2
  import Field from './field.mjs';
3
3
 
4
4
  function isStringOrNumber(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"boolean.mjs","sources":["../../src/fields/boolean.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nexport default class BooleanField extends Field {\n toDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n // Handle null/undefined values explicitly\n if (value === null || value === undefined) {\n return null;\n }\n\n if (isStringOrNumber(value) && ['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (isStringOrNumber(value) && ['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n\n return Boolean(value);\n }\n\n fromDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n const strVal = toString(value);\n\n if (strVal === '1') {\n return true;\n }\n if (strVal === '0') {\n return false;\n }\n return null;\n }\n}\n"],"names":["isStringOrNumber","value","BooleanField","Field","toDB","undefined","includes","Boolean","fromDB","strVal","toString"],"mappings":";;;AAGA,SAASA,iBAAiBC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAY,OAAOA,KAAAA,KAAU,QAAA;AACvD;AAEe,MAAMC,YAAAA,SAAqBC,KAAAA,CAAAA;AACxCC,IAAAA,IAAAA,CAAKH,KAAc,EAAE;QACnB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;;QAGA,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUI,SAAAA,EAAW;YACzC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIL,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,MAAA;AAAQ,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACpE,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAID,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,OAAA;AAAS,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACrE,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOM,OAAAA,CAAQN,KAAAA,CAAAA;AACjB,IAAA;AAEAO,IAAAA,MAAAA,CAAOP,KAAc,EAAE;QACrB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMQ,SAASC,QAAAA,CAAST,KAAAA,CAAAA;AAExB,QAAA,IAAIQ,WAAW,GAAA,EAAK;YAClB,OAAO,IAAA;AACT,QAAA;AACA,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAO,KAAA;AACT,QAAA;QACA,OAAO,IAAA;AACT,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"boolean.mjs","sources":["../../src/fields/boolean.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nfunction isStringOrNumber(value: unknown): value is string | number {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nexport default class BooleanField extends Field {\n toDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n // Handle null/undefined values explicitly\n if (value === null || value === undefined) {\n return null;\n }\n\n if (isStringOrNumber(value) && ['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (isStringOrNumber(value) && ['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n\n return Boolean(value);\n }\n\n fromDB(value: unknown) {\n if (typeof value === 'boolean') {\n return value;\n }\n\n const strVal = toString(value);\n\n if (strVal === '1') {\n return true;\n }\n if (strVal === '0') {\n return false;\n }\n return null;\n }\n}\n"],"names":["isStringOrNumber","value","BooleanField","Field","toDB","undefined","includes","Boolean","fromDB","strVal","toString"],"mappings":";;;AAGA,SAASA,iBAAiBC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAY,OAAOA,KAAAA,KAAU,QAAA;AACvD;AAEe,MAAMC,YAAAA,SAAqBC,KAAAA,CAAAA;AACxCC,IAAAA,IAAAA,CAAKH,KAAc,EAAE;QACnB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;;QAGA,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUI,SAAAA,EAAW;YACzC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAIL,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,MAAA;AAAQ,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACpE,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,IAAID,iBAAiBC,KAAAA,CAAAA,IAAU;AAAC,YAAA,OAAA;AAAS,YAAA,GAAA;AAAK,YAAA,GAAA;AAAK,YAAA;SAAE,CAACK,QAAQ,CAACL,KAAAA,CAAAA,EAAQ;YACrE,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOM,OAAAA,CAAQN,KAAAA,CAAAA;AACjB,IAAA;AAEAO,IAAAA,MAAAA,CAAOP,KAAc,EAAE;QACrB,IAAI,OAAOA,UAAU,SAAA,EAAW;YAC9B,OAAOA,KAAAA;AACT,QAAA;AAEA,QAAA,MAAMQ,SAASC,QAAAA,CAAST,KAAAA,CAAAA;AAExB,QAAA,IAAIQ,WAAW,GAAA,EAAK;YAClB,OAAO,IAAA;AACT,QAAA;AACA,QAAA,IAAIA,WAAW,GAAA,EAAK;YAClB,OAAO,KAAA;AACT,QAAA;QACA,OAAO,IAAA;AACT,IAAA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var field = require('./field.js');
5
5
 
6
6
  class NumberField extends field {
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sources":["../../src/fields/number.ts"],"sourcesContent":["import { toNumber } from 'lodash/fp';\nimport Field from './field';\n\nexport default class NumberField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (trimmedValue.length === 0) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n const numberValue = Number(trimmedValue);\n\n if (!Number.isFinite(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","undefined","Number","isFinite","Error","trimmedValue","trim","length","numberValue","fromDB","toNumber"],"mappings":";;;;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUC,SAAAA,EAAW;YACzC,OAAOD,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,CAAOC,QAAQ,CAACH,KAAAA,CAAAA,EAAQ;AAC3B,gBAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOA,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;YAC7B,MAAMK,YAAAA,GAAeL,MAAMM,IAAI,EAAA;YAE/B,IAAID,YAAAA,CAAaE,MAAM,KAAK,CAAA,EAAG;AAC7B,gBAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;AAEA,YAAA,MAAMQ,cAAcN,MAAAA,CAAOG,YAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACH,MAAAA,CAAOC,QAAQ,CAACK,WAAAA,CAAAA,EAAc;AACjC,gBAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOQ,WAAAA;AACT,QAAA;AAEA,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,IAAA;AAEAS,IAAAA,MAAAA,CAAOT,KAAc,EAAE;AACrB,QAAA,OAAOU,UAAAA,CAASV,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"number.js","sources":["../../src/fields/number.ts"],"sourcesContent":["import { toNumber } from 'lodash';\nimport Field from './field';\n\nexport default class NumberField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (trimmedValue.length === 0) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n const numberValue = Number(trimmedValue);\n\n if (!Number.isFinite(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","undefined","Number","isFinite","Error","trimmedValue","trim","length","numberValue","fromDB","toNumber"],"mappings":";;;;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUC,SAAAA,EAAW;YACzC,OAAOD,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,CAAOC,QAAQ,CAACH,KAAAA,CAAAA,EAAQ;AAC3B,gBAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOA,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;YAC7B,MAAMK,YAAAA,GAAeL,MAAMM,IAAI,EAAA;YAE/B,IAAID,YAAAA,CAAaE,MAAM,KAAK,CAAA,EAAG;AAC7B,gBAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;AAEA,YAAA,MAAMQ,cAAcN,MAAAA,CAAOG,YAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACH,MAAAA,CAAOC,QAAQ,CAACK,WAAAA,CAAAA,EAAc;AACjC,gBAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOQ,WAAAA;AACT,QAAA;AAEA,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,IAAA;AAEAS,IAAAA,MAAAA,CAAOT,KAAc,EAAE;AACrB,QAAA,OAAOU,UAAAA,CAASV,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { toNumber } from 'lodash/fp';
1
+ import { toNumber } from 'lodash';
2
2
  import Field from './field.mjs';
3
3
 
4
4
  class NumberField extends Field {
@@ -1 +1 @@
1
- {"version":3,"file":"number.mjs","sources":["../../src/fields/number.ts"],"sourcesContent":["import { toNumber } from 'lodash/fp';\nimport Field from './field';\n\nexport default class NumberField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (trimmedValue.length === 0) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n const numberValue = Number(trimmedValue);\n\n if (!Number.isFinite(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","undefined","Number","isFinite","Error","trimmedValue","trim","length","numberValue","fromDB","toNumber"],"mappings":";;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUC,SAAAA,EAAW;YACzC,OAAOD,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,CAAOC,QAAQ,CAACH,KAAAA,CAAAA,EAAQ;AAC3B,gBAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOA,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;YAC7B,MAAMK,YAAAA,GAAeL,MAAMM,IAAI,EAAA;YAE/B,IAAID,YAAAA,CAAaE,MAAM,KAAK,CAAA,EAAG;AAC7B,gBAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;AAEA,YAAA,MAAMQ,cAAcN,MAAAA,CAAOG,YAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACH,MAAAA,CAAOC,QAAQ,CAACK,WAAAA,CAAAA,EAAc;AACjC,gBAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOQ,WAAAA;AACT,QAAA;AAEA,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,IAAA;AAEAS,IAAAA,MAAAA,CAAOT,KAAc,EAAE;AACrB,QAAA,OAAOU,QAAAA,CAASV,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"number.mjs","sources":["../../src/fields/number.ts"],"sourcesContent":["import { toNumber } from 'lodash';\nimport Field from './field';\n\nexport default class NumberField extends Field {\n toDB(value: unknown) {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n if (trimmedValue.length === 0) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n const numberValue = Number(trimmedValue);\n\n if (!Number.isFinite(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","undefined","Number","isFinite","Error","trimmedValue","trim","length","numberValue","fromDB","toNumber"],"mappings":";;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,IAAIA,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUC,SAAAA,EAAW;YACzC,OAAOD,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;AAC7B,YAAA,IAAI,CAACE,MAAAA,CAAOC,QAAQ,CAACH,KAAAA,CAAAA,EAAQ;AAC3B,gBAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOA,KAAAA;AACT,QAAA;QAEA,IAAI,OAAOA,UAAU,QAAA,EAAU;YAC7B,MAAMK,YAAAA,GAAeL,MAAMM,IAAI,EAAA;YAE/B,IAAID,YAAAA,CAAaE,MAAM,KAAK,CAAA,EAAG;AAC7B,gBAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;AAEA,YAAA,MAAMQ,cAAcN,MAAAA,CAAOG,YAAAA,CAAAA;AAE3B,YAAA,IAAI,CAACH,MAAAA,CAAOC,QAAQ,CAACK,WAAAA,CAAAA,EAAc;AACjC,gBAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,YAAA;YAEA,OAAOQ,WAAAA;AACT,QAAA;AAEA,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAC,6BAA6B,EAAEJ,KAAAA,CAAAA,CAAO,CAAA;AACzD,IAAA;AAEAS,IAAAA,MAAAA,CAAOT,KAAc,EAAE;AACrB,QAAA,OAAOU,QAAAA,CAASV,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var _ = require('lodash/fp');
3
+ var _ = require('lodash');
4
4
  var dateFns = require('date-fns');
5
5
  var invalidTime = require('../../errors/invalid-time.js');
6
6
  var invalidDate = require('../../errors/invalid-date.js');
@@ -82,7 +82,7 @@ const parseTime = (value)=>{
82
82
  throw new invalidTime('Invalid time format, expected HH:mm:ss.SSS');
83
83
  }
84
84
  const [, hours, minutes, seconds, fraction = '.000'] = result;
85
- const fractionPart = _.padCharsEnd('0', 3, fraction.slice(1));
85
+ const fractionPart = fraction.slice(1).padEnd(3, '0');
86
86
  return `${hours}:${minutes}:${seconds}.${fractionPart}`;
87
87
  };
88
88
 
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sources":["../../../src/fields/shared/parsers.ts"],"sourcesContent":["import { padCharsEnd, isString, toString } from 'lodash/fp';\nimport * as dateFns from 'date-fns';\n\nimport { InvalidDateTimeError, InvalidDateError, InvalidTimeError } from '../../errors';\n\nconst isDate = (value: unknown): value is Date => {\n return dateFns.isDate(value);\n};\n\nconst DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\nconst PARTIAL_DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;\nconst TIME_REGEX = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nexport const parseDateTimeOrTimestamp = (value: unknown): Date => {\n if (isDate(value)) {\n return value;\n }\n\n try {\n const date = dateFns.parseISO(toString(value));\n if (dateFns.isValid(date)) {\n return date;\n }\n\n const milliUnixDate = dateFns.parse(toString(value), 'T', new Date());\n if (dateFns.isValid(milliUnixDate)) {\n return milliUnixDate;\n }\n\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\nexport const parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'yyyy-MM-dd');\n }\n\n const found = isString(value) ? value.match(PARTIAL_DATE_REGEX) || [] : [];\n const extractedValue = found[0];\n\n if (extractedValue && !DATE_REGEX.test(toString(value))) {\n // TODO V5: throw an error when format yyyy-MM-dd is not respected\n // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n process.emitWarning(\n `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`\n );\n }\n\n if (!extractedValue) {\n throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n }\n\n const date = dateFns.parseISO(extractedValue);\n if (!dateFns.isValid(date)) {\n throw new InvalidDateError(`Invalid date`);\n }\n\n return extractedValue;\n};\n\nexport const parseTime = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new InvalidTimeError(`Expected a string, got a ${typeof value}`);\n }\n\n const result = value.match(TIME_REGEX);\n\n if (result === null) {\n throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = padCharsEnd('0', 3, fraction.slice(1));\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n"],"names":["isDate","value","dateFns","DATE_REGEX","PARTIAL_DATE_REGEX","TIME_REGEX","parseDateTimeOrTimestamp","date","parseISO","toString","isValid","milliUnixDate","parse","Date","InvalidDateTimeError","parseDate","format","found","isString","match","extractedValue","test","process","emitWarning","InvalidDateError","parseTime","InvalidTimeError","result","hours","minutes","seconds","fraction","fractionPart","padCharsEnd","slice"],"mappings":"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"}
1
+ {"version":3,"file":"parsers.js","sources":["../../../src/fields/shared/parsers.ts"],"sourcesContent":["import { isString, toString } from 'lodash';\nimport * as dateFns from 'date-fns';\n\nimport { InvalidDateTimeError, InvalidDateError, InvalidTimeError } from '../../errors';\n\nconst isDate = (value: unknown): value is Date => {\n return dateFns.isDate(value);\n};\n\nconst DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\nconst PARTIAL_DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;\nconst TIME_REGEX = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nexport const parseDateTimeOrTimestamp = (value: unknown): Date => {\n if (isDate(value)) {\n return value;\n }\n\n try {\n const date = dateFns.parseISO(toString(value));\n if (dateFns.isValid(date)) {\n return date;\n }\n\n const milliUnixDate = dateFns.parse(toString(value), 'T', new Date());\n if (dateFns.isValid(milliUnixDate)) {\n return milliUnixDate;\n }\n\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\nexport const parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'yyyy-MM-dd');\n }\n\n const found = isString(value) ? value.match(PARTIAL_DATE_REGEX) || [] : [];\n const extractedValue = found[0];\n\n if (extractedValue && !DATE_REGEX.test(toString(value))) {\n // TODO V5: throw an error when format yyyy-MM-dd is not respected\n // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n process.emitWarning(\n `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`\n );\n }\n\n if (!extractedValue) {\n throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n }\n\n const date = dateFns.parseISO(extractedValue);\n if (!dateFns.isValid(date)) {\n throw new InvalidDateError(`Invalid date`);\n }\n\n return extractedValue;\n};\n\nexport const parseTime = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new InvalidTimeError(`Expected a string, got a ${typeof value}`);\n }\n\n const result = value.match(TIME_REGEX);\n\n if (result === null) {\n throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = fraction.slice(1).padEnd(3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n"],"names":["isDate","value","dateFns","DATE_REGEX","PARTIAL_DATE_REGEX","TIME_REGEX","parseDateTimeOrTimestamp","date","parseISO","toString","isValid","milliUnixDate","parse","Date","InvalidDateTimeError","parseDate","format","found","isString","match","extractedValue","test","process","emitWarning","InvalidDateError","parseTime","InvalidTimeError","result","hours","minutes","seconds","fraction","fractionPart","slice","padEnd"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { toString, padCharsEnd, isString } from 'lodash/fp';
1
+ import { toString, isString } from 'lodash';
2
2
  import * as dateFns from 'date-fns';
3
3
  import InvalidTimeError from '../../errors/invalid-time.mjs';
4
4
  import InvalidDateError from '../../errors/invalid-date.mjs';
@@ -60,7 +60,7 @@ const parseTime = (value)=>{
60
60
  throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');
61
61
  }
62
62
  const [, hours, minutes, seconds, fraction = '.000'] = result;
63
- const fractionPart = padCharsEnd('0', 3, fraction.slice(1));
63
+ const fractionPart = fraction.slice(1).padEnd(3, '0');
64
64
  return `${hours}:${minutes}:${seconds}.${fractionPart}`;
65
65
  };
66
66
 
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.mjs","sources":["../../../src/fields/shared/parsers.ts"],"sourcesContent":["import { padCharsEnd, isString, toString } from 'lodash/fp';\nimport * as dateFns from 'date-fns';\n\nimport { InvalidDateTimeError, InvalidDateError, InvalidTimeError } from '../../errors';\n\nconst isDate = (value: unknown): value is Date => {\n return dateFns.isDate(value);\n};\n\nconst DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\nconst PARTIAL_DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;\nconst TIME_REGEX = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nexport const parseDateTimeOrTimestamp = (value: unknown): Date => {\n if (isDate(value)) {\n return value;\n }\n\n try {\n const date = dateFns.parseISO(toString(value));\n if (dateFns.isValid(date)) {\n return date;\n }\n\n const milliUnixDate = dateFns.parse(toString(value), 'T', new Date());\n if (dateFns.isValid(milliUnixDate)) {\n return milliUnixDate;\n }\n\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\nexport const parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'yyyy-MM-dd');\n }\n\n const found = isString(value) ? value.match(PARTIAL_DATE_REGEX) || [] : [];\n const extractedValue = found[0];\n\n if (extractedValue && !DATE_REGEX.test(toString(value))) {\n // TODO V5: throw an error when format yyyy-MM-dd is not respected\n // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n process.emitWarning(\n `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`\n );\n }\n\n if (!extractedValue) {\n throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n }\n\n const date = dateFns.parseISO(extractedValue);\n if (!dateFns.isValid(date)) {\n throw new InvalidDateError(`Invalid date`);\n }\n\n return extractedValue;\n};\n\nexport const parseTime = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new InvalidTimeError(`Expected a string, got a ${typeof value}`);\n }\n\n const result = value.match(TIME_REGEX);\n\n if (result === null) {\n throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = padCharsEnd('0', 3, fraction.slice(1));\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n"],"names":["isDate","value","dateFns","DATE_REGEX","PARTIAL_DATE_REGEX","TIME_REGEX","parseDateTimeOrTimestamp","date","parseISO","toString","isValid","milliUnixDate","parse","Date","InvalidDateTimeError","parseDate","format","found","isString","match","extractedValue","test","process","emitWarning","InvalidDateError","parseTime","InvalidTimeError","result","hours","minutes","seconds","fraction","fractionPart","padCharsEnd","slice"],"mappings":"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"}
1
+ {"version":3,"file":"parsers.mjs","sources":["../../../src/fields/shared/parsers.ts"],"sourcesContent":["import { isString, toString } from 'lodash';\nimport * as dateFns from 'date-fns';\n\nimport { InvalidDateTimeError, InvalidDateError, InvalidTimeError } from '../../errors';\n\nconst isDate = (value: unknown): value is Date => {\n return dateFns.isDate(value);\n};\n\nconst DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\nconst PARTIAL_DATE_REGEX = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;\nconst TIME_REGEX = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]{1,3})?$/;\n\nexport const parseDateTimeOrTimestamp = (value: unknown): Date => {\n if (isDate(value)) {\n return value;\n }\n\n try {\n const date = dateFns.parseISO(toString(value));\n if (dateFns.isValid(date)) {\n return date;\n }\n\n const milliUnixDate = dateFns.parse(toString(value), 'T', new Date());\n if (dateFns.isValid(milliUnixDate)) {\n return milliUnixDate;\n }\n\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n } catch {\n throw new InvalidDateTimeError(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\nexport const parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'yyyy-MM-dd');\n }\n\n const found = isString(value) ? value.match(PARTIAL_DATE_REGEX) || [] : [];\n const extractedValue = found[0];\n\n if (extractedValue && !DATE_REGEX.test(toString(value))) {\n // TODO V5: throw an error when format yyyy-MM-dd is not respected\n // throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n process.emitWarning(\n `[deprecated] Using a date format other than YYYY-MM-DD will be removed in future versions. Date received: ${value}. Date stored: ${extractedValue}.`\n );\n }\n\n if (!extractedValue) {\n throw new InvalidDateError(`Invalid format, expected yyyy-MM-dd`);\n }\n\n const date = dateFns.parseISO(extractedValue);\n if (!dateFns.isValid(date)) {\n throw new InvalidDateError(`Invalid date`);\n }\n\n return extractedValue;\n};\n\nexport const parseTime = (value: unknown) => {\n if (isDate(value)) {\n return dateFns.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new InvalidTimeError(`Expected a string, got a ${typeof value}`);\n }\n\n const result = value.match(TIME_REGEX);\n\n if (result === null) {\n throw new InvalidTimeError('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = fraction.slice(1).padEnd(3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n"],"names":["isDate","value","dateFns","DATE_REGEX","PARTIAL_DATE_REGEX","TIME_REGEX","parseDateTimeOrTimestamp","date","parseISO","toString","isValid","milliUnixDate","parse","Date","InvalidDateTimeError","parseDate","format","found","isString","match","extractedValue","test","process","emitWarning","InvalidDateError","parseTime","InvalidTimeError","result","hours","minutes","seconds","fraction","fractionPart","slice","padEnd"],"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
  var field = require('./field.js');
5
5
 
6
6
  class StringField extends field {
@@ -1 +1 @@
1
- {"version":3,"file":"string.js","sources":["../../src/fields/string.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nexport default class StringField extends Field {\n toDB(value: unknown) {\n return toString(value);\n }\n\n fromDB(value: unknown) {\n return toString(value);\n }\n}\n"],"names":["StringField","Field","toDB","value","toString","fromDB"],"mappings":";;;;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AAEAE,IAAAA,MAAAA,CAAOF,KAAc,EAAE;AACrB,QAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"string.js","sources":["../../src/fields/string.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nexport default class StringField extends Field {\n toDB(value: unknown) {\n return toString(value);\n }\n\n fromDB(value: unknown) {\n return toString(value);\n }\n}\n"],"names":["StringField","Field","toDB","value","toString","fromDB"],"mappings":";;;;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AAEAE,IAAAA,MAAAA,CAAOF,KAAc,EAAE;AACrB,QAAA,OAAOC,UAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { toString } from 'lodash/fp';
1
+ import { toString } from 'lodash';
2
2
  import Field from './field.mjs';
3
3
 
4
4
  class StringField extends Field {
@@ -1 +1 @@
1
- {"version":3,"file":"string.mjs","sources":["../../src/fields/string.ts"],"sourcesContent":["import { toString } from 'lodash/fp';\nimport Field from './field';\n\nexport default class StringField extends Field {\n toDB(value: unknown) {\n return toString(value);\n }\n\n fromDB(value: unknown) {\n return toString(value);\n }\n}\n"],"names":["StringField","Field","toDB","value","toString","fromDB"],"mappings":";;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AAEAE,IAAAA,MAAAA,CAAOF,KAAc,EAAE;AACrB,QAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"string.mjs","sources":["../../src/fields/string.ts"],"sourcesContent":["import { toString } from 'lodash';\nimport Field from './field';\n\nexport default class StringField extends Field {\n toDB(value: unknown) {\n return toString(value);\n }\n\n fromDB(value: unknown) {\n return toString(value);\n }\n}\n"],"names":["StringField","Field","toDB","value","toString","fromDB"],"mappings":";;;AAGe,MAAMA,WAAAA,SAAoBC,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AAEAE,IAAAA,MAAAA,CAAOF,KAAc,EAAE;AACrB,QAAA,OAAOC,QAAAA,CAASD,KAAAA,CAAAA;AAClB,IAAA;AACF;;;;"}
package/dist/index.d.ts CHANGED
@@ -3,16 +3,21 @@ import { Dialect } from './dialects';
3
3
  import { SchemaProvider } from './schema';
4
4
  import { Metadata } from './metadata';
5
5
  import { EntityManager } from './entity-manager';
6
- import { MigrationProvider, type Migration } from './migrations';
6
+ import { MigrationProvider } from './migrations';
7
7
  import { LifecycleProvider } from './lifecycles';
8
- import type { Event } from './lifecycles';
9
8
  import * as errors from './errors';
10
9
  import { Callback, TransactionObject } from './transaction-context';
11
- import type { Model, JoinTable } from './types';
12
- import type { Identifiers } from './utils/identifiers';
10
+ import type { Model } from './types';
13
11
  import { type RepairManager } from './repairs';
14
12
  export { isKnexQuery } from './utils/knex';
15
13
  export { isDatabaseClientKind } from './connection';
14
+ export { attributeNaming } from './metadata';
15
+ export type { AttributeNaming, Meta } from './metadata';
16
+ export type { AttributeRenamesOperation, Migration, BuiltMigrationFile, MigrationFileBuilder, MigrationFileFormat, MigrationFileOperation, } from './migrations';
17
+ export type { Event } from './lifecycles';
18
+ export type { Attribute, Model, JoinTable } from './types';
19
+ export type { AttributeRenameHandler, AttributeRenames } from './schema';
20
+ export type { Identifiers } from './utils/identifiers';
16
21
  interface Settings {
17
22
  forceMigration?: boolean;
18
23
  runMigrations?: boolean;
@@ -66,5 +71,4 @@ declare class Database {
66
71
  destroy(): Promise<void>;
67
72
  }
68
73
  export { Database, errors };
69
- export type { Model, JoinTable, Identifiers, Migration, Event };
70
74
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAwB,cAAc,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAkB,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAuB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAA4B,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAA4B,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAkB,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACxD,YAAY,EACV,yBAAyB,EACzB,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,UAAU,QAAQ;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CACzB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EACnC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CACpD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD,cAAM,QAAQ;IACZ,UAAU,EAAE,IAAI,CAAC;IAEjB,OAAO,EAAE,OAAO,CAAC;IAEjB,MAAM,EAAE,cAAc,CAAC;IAEvB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,MAAM,EAAE,cAAc,CAAC;IAEvB,UAAU,EAAE,iBAAiB,CAAC;IAE9B,UAAU,EAAE,iBAAiB,CAAC;IAE9B,aAAa,EAAE,aAAa,CAAC;IAE7B,MAAM,EAAE,aAAa,CAAC;IAEtB,MAAM,EAAE,MAAM,CAAC;gBAEH,MAAM,EAAE,cAAc;IAqD5B,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE;IA2B1C,KAAK,CAAC,GAAG,EAAE,MAAM;IAQjB,aAAa;IAIb;;;;;;OAMG;IACH,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IACzC,WAAW,CAAC,SAAS,SAAS,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA4CrF,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC,aAAa,IAAI,IAAI;IACrB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY;IAQpD,OAAO;;;;;IA2BP,mBAAmB,CAAC,GAAG,mBAAkB;IAKzC,YAAY,CAAC,GAAG,EAAE,MAAM;IAIlB,OAAO;CAId;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ var transactionContext = require('./transaction-context.js');
13
13
  var index$1 = require('./validations/index.js');
14
14
  var index$8 = require('./repairs/index.js');
15
15
  var knex = require('./utils/knex.js');
16
+ var attributeNaming = require('./metadata/attribute-naming.js');
16
17
 
17
18
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
18
19
 
@@ -180,5 +181,6 @@ class Database {
180
181
  exports.isDatabaseClientKind = connection.isDatabaseClientKind;
181
182
  exports.errors = index;
182
183
  exports.isKnexQuery = knex.isKnexQuery;
184
+ exports.attributeNaming = attributeNaming.attributeNaming;
183
185
  exports.Database = Database;
184
186
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider, type Migration } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport type { Event } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\nexport { isDatabaseClientKind } from './connection';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...config.settings,\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\nexport type { Model, JoinTable, Identifiers, Migration, Event };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { Knex } from 'knex';\n\nimport path from 'node:path';\n\nimport { Dialect, getDialect } from './dialects';\nimport { createSchemaProvider, SchemaProvider } from './schema';\nimport { createMetadata, Metadata } from './metadata';\nimport { createEntityManager, EntityManager } from './entity-manager';\nimport { createMigrationsProvider, MigrationProvider } from './migrations';\nimport { createLifecyclesProvider, LifecycleProvider } from './lifecycles';\nimport { createConnection } from './connection';\nimport * as errors from './errors';\nimport { Callback, transactionCtx, TransactionObject } from './transaction-context';\nimport { validateDatabase } from './validations';\nimport type { Model } from './types';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\nexport { isDatabaseClientKind } from './connection';\nexport { attributeNaming } from './metadata';\nexport type { AttributeNaming, Meta } from './metadata';\nexport type {\n AttributeRenamesOperation,\n Migration,\n BuiltMigrationFile,\n MigrationFileBuilder,\n MigrationFileFormat,\n MigrationFileOperation,\n} from './migrations';\nexport type { Event } from './lifecycles';\nexport type { Attribute, Model, JoinTable } from './types';\nexport type { AttributeRenameHandler, AttributeRenames } from './schema';\nexport type { Identifiers } from './utils/identifiers';\n\ninterface Settings {\n forceMigration?: boolean;\n runMigrations?: boolean;\n migrations: {\n dir: string;\n };\n [key: string]: unknown;\n}\n\nexport type Logger = Record<\n 'info' | 'warn' | 'error' | 'debug',\n (message: string | Record<string, unknown>) => void\n>;\n\nexport interface DatabaseConfig {\n connection: Knex.Config;\n settings: Settings;\n logger?: Logger;\n}\n\nconst afterCreate =\n (db: Database) =>\n (\n nativeConnection: unknown,\n done: (error: Error | null, nativeConnection: unknown) => Promise<void>\n ) => {\n // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection\n db.dialect.initialize(nativeConnection).then(() => {\n return done(null, nativeConnection);\n });\n };\n\nclass Database {\n connection: Knex;\n\n dialect: Dialect;\n\n config: DatabaseConfig;\n\n metadata: Metadata;\n\n schema: SchemaProvider;\n\n migrations: MigrationProvider;\n\n lifecycles: LifecycleProvider;\n\n entityManager: EntityManager;\n\n repair: RepairManager;\n\n logger: Logger;\n\n constructor(config: DatabaseConfig) {\n this.config = {\n ...config,\n settings: {\n forceMigration: true,\n runMigrations: true,\n ...config.settings,\n },\n };\n\n this.logger = config.logger ?? console;\n\n this.dialect = getDialect(this);\n\n let knexConfig: Knex.Config = this.config.connection;\n\n // for object connections, we can configure the dialect synchronously\n if (typeof this.config.connection.connection !== 'function') {\n this.dialect.configure();\n }\n // for connection functions, we wrap it so that we can modify it with dialect configure before it reaches knex\n else {\n this.logger.warn(\n 'Knex connection functions are currently experimental. Attempting to access the connection object before database initialization will result in errors.'\n );\n\n knexConfig = {\n ...this.config.connection,\n connection: async () => {\n // @ts-expect-error confirmed it was a function above\n const conn = await this.config.connection.connection();\n this.dialect.configure(conn);\n return conn;\n },\n };\n }\n\n this.metadata = createMetadata([]);\n\n this.connection = createConnection(knexConfig, {\n pool: { afterCreate: afterCreate(this) },\n });\n\n this.schema = createSchemaProvider(this);\n\n this.migrations = createMigrationsProvider(this);\n this.lifecycles = createLifecyclesProvider(this);\n\n this.entityManager = createEntityManager(this);\n\n this.repair = createRepairManager(this);\n }\n\n async init({ models }: { models: Model[] }) {\n if (typeof this.config.connection.connection === 'function') {\n /*\n * User code needs to be able to access `connection.connection` directly as if\n * it were always an object. For a connection function, that doesn't happen\n * until the pool is created, so we need to do that here\n *\n * TODO: In the next major version, we need to replace all internal code that\n * directly references `connection.connection` prior to init, and make a breaking\n * change that it cannot be relied on to exist before init so that we can call\n * this feature stable.\n */\n this.logger.debug('Forcing Knex to make real connection to db');\n\n // sqlite does not support connection pooling so acquireConnection doesn't work\n if (this.config.connection.client === 'sqlite') {\n await this.connection.raw('SELECT 1');\n } else {\n await this.connection.client.acquireConnection();\n }\n }\n\n this.metadata.loadModels(models);\n await validateDatabase(this);\n return this;\n }\n\n query(uid: string) {\n if (!this.metadata.has(uid)) {\n throw new Error(`Model ${uid} not found`);\n }\n\n return this.entityManager.getRepository(uid);\n }\n\n inTransaction() {\n return !!transactionCtx.get();\n }\n\n /**\n * Run work inside a DB transaction. On a fulfilled callback, the transaction\n * is committed; on rejection, it is rolled back. The callback receives Knex\n * `commit` and `rollback` helpers: if you call `rollback` and return without\n * throwing, the implementation avoids attempting a second `commit` on an\n * already-finalised transactor.\n */\n transaction(): Promise<TransactionObject>;\n transaction<TCallback extends Callback>(c: TCallback): Promise<ReturnType<TCallback>>;\n async transaction<TCallback extends Callback>(\n cb?: TCallback\n ): Promise<ReturnType<TCallback> | TransactionObject> {\n const notNestedTransaction = !transactionCtx.get();\n const trx = notNestedTransaction\n ? await this.connection.transaction()\n : (transactionCtx.get() as Knex.Transaction);\n\n async function commit() {\n if (notNestedTransaction) {\n await transactionCtx.commit(trx);\n }\n }\n\n async function rollback() {\n if (notNestedTransaction) {\n await transactionCtx.rollback(trx);\n }\n }\n\n if (!cb) {\n return { commit, rollback, get: () => trx };\n }\n\n return transactionCtx.run(trx, async () => {\n try {\n const callbackParams = {\n trx,\n commit,\n rollback,\n onCommit: transactionCtx.onCommit,\n onRollback: transactionCtx.onRollback,\n };\n const res = await cb(callbackParams);\n await commit();\n return res;\n } catch (error) {\n await rollback();\n throw error;\n }\n });\n }\n\n getSchemaName(): string | undefined {\n return this.connection.client.connectionSettings.schema;\n }\n\n getConnection(): Knex;\n getConnection(tableName?: string): Knex.QueryBuilder;\n getConnection(tableName?: string): Knex | Knex.QueryBuilder {\n const schema = this.getSchemaName();\n const connection = tableName ? this.connection(tableName) : this.connection;\n return schema ? connection.withSchema(schema) : connection;\n }\n\n // Returns basic info about the database connection\n getInfo() {\n const connectionSettings = this.connection?.client?.connectionSettings || {};\n const client = this.dialect?.client || '';\n\n let displayName = '';\n let schema;\n\n // For SQLite, get the relative filename\n if (client === 'sqlite') {\n const absolutePath = connectionSettings?.filename;\n if (absolutePath) {\n displayName = path.relative(process.cwd(), absolutePath);\n }\n }\n // For other dialects, get the database name\n else {\n displayName = connectionSettings?.database;\n schema = connectionSettings?.schema;\n }\n\n return {\n displayName,\n schema,\n client,\n };\n }\n\n getSchemaConnection(trx = this.connection) {\n const schema = this.getSchemaName();\n return schema ? trx.schema.withSchema(schema) : trx.schema;\n }\n\n queryBuilder(uid: string) {\n return this.entityManager.createQueryBuilder(uid);\n }\n\n async destroy() {\n await this.lifecycles.clear();\n await this.connection.destroy();\n }\n}\n\nexport { Database, errors };\n"],"names":["afterCreate","db","nativeConnection","done","dialect","initialize","then","Database","init","models","config","connection","logger","debug","client","raw","acquireConnection","metadata","loadModels","validateDatabase","query","uid","has","Error","entityManager","getRepository","inTransaction","transactionCtx","get","transaction","cb","notNestedTransaction","trx","commit","rollback","run","callbackParams","onCommit","onRollback","res","error","getSchemaName","connectionSettings","schema","getConnection","tableName","withSchema","getInfo","displayName","absolutePath","filename","path","relative","process","cwd","database","getSchemaConnection","queryBuilder","createQueryBuilder","destroy","lifecycles","clear","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -13,6 +13,7 @@ import { transactionCtx } from './transaction-context.mjs';
13
13
  import { validateDatabase } from './validations/index.mjs';
14
14
  import { createRepairManager } from './repairs/index.mjs';
15
15
  export { isKnexQuery } from './utils/knex.mjs';
16
+ export { attributeNaming } from './metadata/attribute-naming.mjs';
16
17
 
17
18
  const afterCreate = (db)=>(nativeConnection, done)=>{
18
19
  // run initialize for it since commands such as postgres SET and sqlite PRAGMA are per-connection