@strapi/database 5.29.0 → 5.30.1

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 (89) hide show
  1. package/dist/connection.js.map +1 -1
  2. package/dist/connection.mjs.map +1 -1
  3. package/dist/dialects/dialect.js.map +1 -1
  4. package/dist/dialects/dialect.mjs.map +1 -1
  5. package/dist/dialects/index.js.map +1 -1
  6. package/dist/dialects/index.mjs.map +1 -1
  7. package/dist/dialects/mysql/database-inspector.js.map +1 -1
  8. package/dist/dialects/mysql/database-inspector.mjs.map +1 -1
  9. package/dist/dialects/mysql/index.js +1 -2
  10. package/dist/dialects/mysql/index.js.map +1 -1
  11. package/dist/dialects/mysql/index.mjs +1 -2
  12. package/dist/dialects/mysql/index.mjs.map +1 -1
  13. package/dist/dialects/mysql/schema-inspector.js.map +1 -1
  14. package/dist/dialects/mysql/schema-inspector.mjs.map +1 -1
  15. package/dist/dialects/postgresql/index.js.map +1 -1
  16. package/dist/dialects/postgresql/index.mjs.map +1 -1
  17. package/dist/dialects/postgresql/schema-inspector.js.map +1 -1
  18. package/dist/dialects/postgresql/schema-inspector.mjs.map +1 -1
  19. package/dist/dialects/sqlite/index.js.map +1 -1
  20. package/dist/dialects/sqlite/index.mjs.map +1 -1
  21. package/dist/dialects/sqlite/schema-inspector.js.map +1 -1
  22. package/dist/dialects/sqlite/schema-inspector.mjs.map +1 -1
  23. package/dist/entity-manager/index.js.map +1 -1
  24. package/dist/entity-manager/index.mjs.map +1 -1
  25. package/dist/entity-manager/morph-relations.js.map +1 -1
  26. package/dist/entity-manager/morph-relations.mjs.map +1 -1
  27. package/dist/errors/database.js.map +1 -1
  28. package/dist/errors/database.mjs.map +1 -1
  29. package/dist/errors/invalid-date.js.map +1 -1
  30. package/dist/errors/invalid-date.mjs.map +1 -1
  31. package/dist/errors/invalid-datetime.js.map +1 -1
  32. package/dist/errors/invalid-datetime.mjs.map +1 -1
  33. package/dist/errors/invalid-relation.js.map +1 -1
  34. package/dist/errors/invalid-relation.mjs.map +1 -1
  35. package/dist/errors/invalid-time.js.map +1 -1
  36. package/dist/errors/invalid-time.mjs.map +1 -1
  37. package/dist/errors/not-null.js.map +1 -1
  38. package/dist/errors/not-null.mjs.map +1 -1
  39. package/dist/fields/field.js.map +1 -1
  40. package/dist/fields/field.mjs.map +1 -1
  41. package/dist/fields/index.js.map +1 -1
  42. package/dist/fields/index.mjs.map +1 -1
  43. package/dist/fields/number.js.map +1 -1
  44. package/dist/fields/number.mjs.map +1 -1
  45. package/dist/fields/shared/parsers.js.map +1 -1
  46. package/dist/fields/shared/parsers.mjs.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/metadata/metadata.js.map +1 -1
  50. package/dist/metadata/metadata.mjs.map +1 -1
  51. package/dist/metadata/relations.js.map +1 -1
  52. package/dist/metadata/relations.mjs.map +1 -1
  53. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.js.map +1 -1
  54. package/dist/migrations/internal-migrations/5.0.0-01-convert-identifiers-long-than-max-length.mjs.map +1 -1
  55. package/dist/migrations/internal-migrations/5.0.0-02-document-id.js.map +1 -1
  56. package/dist/migrations/internal-migrations/5.0.0-02-document-id.mjs.map +1 -1
  57. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.js.map +1 -1
  58. package/dist/migrations/internal-migrations/5.0.0-05-drop-slug-unique-index.mjs.map +1 -1
  59. package/dist/migrations/logger.js.map +1 -1
  60. package/dist/migrations/logger.mjs.map +1 -1
  61. package/dist/query/helpers/join.js.map +1 -1
  62. package/dist/query/helpers/join.mjs.map +1 -1
  63. package/dist/query/helpers/order-by.js.map +1 -1
  64. package/dist/query/helpers/order-by.mjs.map +1 -1
  65. package/dist/query/helpers/populate/apply.js.map +1 -1
  66. package/dist/query/helpers/populate/apply.mjs.map +1 -1
  67. package/dist/query/helpers/search.js.map +1 -1
  68. package/dist/query/helpers/search.mjs.map +1 -1
  69. package/dist/query/helpers/streams/readable.js.map +1 -1
  70. package/dist/query/helpers/streams/readable.mjs.map +1 -1
  71. package/dist/query/helpers/where.js.map +1 -1
  72. package/dist/query/helpers/where.mjs.map +1 -1
  73. package/dist/query/query-builder.js.map +1 -1
  74. package/dist/query/query-builder.mjs.map +1 -1
  75. package/dist/repairs/operations/remove-orphan-morph-types.js.map +1 -1
  76. package/dist/repairs/operations/remove-orphan-morph-types.mjs.map +1 -1
  77. package/dist/schema/builder.js.map +1 -1
  78. package/dist/schema/builder.mjs.map +1 -1
  79. package/dist/schema/schema.js.map +1 -1
  80. package/dist/schema/schema.mjs.map +1 -1
  81. package/dist/utils/identifiers/hash.js.map +1 -1
  82. package/dist/utils/identifiers/hash.mjs.map +1 -1
  83. package/dist/utils/identifiers/index.js +2 -4
  84. package/dist/utils/identifiers/index.js.map +1 -1
  85. package/dist/utils/identifiers/index.mjs +2 -4
  86. package/dist/utils/identifiers/index.mjs.map +1 -1
  87. package/dist/utils/knex.js.map +1 -1
  88. package/dist/utils/knex.mjs.map +1 -1
  89. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-date.mjs","sources":["../../src/errors/invalid-date.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateError extends DatabaseError {\n constructor(message = 'Invalid date format, expected YYYY-MM-DD') {\n super(message);\n this.name = 'InvalidDateFormat';\n }\n}\n"],"names":["InvalidDateError","DatabaseError","constructor","message","name"],"mappings":";;AAEe,MAAMA,gBAAyBC,SAAAA,aAAAA,CAAAA;IAC5CC,WAAYC,CAAAA,OAAAA,GAAU,0CAA0C,CAAE;AAChE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-date.mjs","sources":["../../src/errors/invalid-date.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateError extends DatabaseError {\n constructor(message = 'Invalid date format, expected YYYY-MM-DD') {\n super(message);\n this.name = 'InvalidDateFormat';\n }\n}\n"],"names":["InvalidDateError","DatabaseError","message","name"],"mappings":";;AAEe,MAAMA,gBAAyBC,SAAAA,aAAAA,CAAAA;IAC5C,WAAYC,CAAAA,OAAAA,GAAU,0CAA0C,CAAE;AAChE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-datetime.js","sources":["../../src/errors/invalid-datetime.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateTimeError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidDatetimeFormat';\n }\n}\n"],"names":["InvalidDateTimeError","DatabaseError","constructor","message","name"],"mappings":";;;;AAEe,MAAMA,oBAA6BC,SAAAA,QAAAA,CAAAA;IAChDC,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-datetime.js","sources":["../../src/errors/invalid-datetime.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateTimeError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidDatetimeFormat';\n }\n}\n"],"names":["InvalidDateTimeError","DatabaseError","message","name"],"mappings":";;;;AAEe,MAAMA,oBAA6BC,SAAAA,QAAAA,CAAAA;IAChD,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-datetime.mjs","sources":["../../src/errors/invalid-datetime.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateTimeError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidDatetimeFormat';\n }\n}\n"],"names":["InvalidDateTimeError","DatabaseError","constructor","message","name"],"mappings":";;AAEe,MAAMA,oBAA6BC,SAAAA,aAAAA,CAAAA;IAChDC,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-datetime.mjs","sources":["../../src/errors/invalid-datetime.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidDateTimeError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidDatetimeFormat';\n }\n}\n"],"names":["InvalidDateTimeError","DatabaseError","message","name"],"mappings":";;AAEe,MAAMA,oBAA6BC,SAAAA,aAAAA,CAAAA;IAChD,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-relation.js","sources":["../../src/errors/invalid-relation.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidRelationError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidRelationFormat';\n }\n}\n"],"names":["InvalidRelationError","DatabaseError","constructor","message","name"],"mappings":";;;;AAEe,MAAMA,oBAA6BC,SAAAA,QAAAA,CAAAA;IAChDC,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-relation.js","sources":["../../src/errors/invalid-relation.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidRelationError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidRelationFormat';\n }\n}\n"],"names":["InvalidRelationError","DatabaseError","message","name"],"mappings":";;;;AAEe,MAAMA,oBAA6BC,SAAAA,QAAAA,CAAAA;IAChD,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-relation.mjs","sources":["../../src/errors/invalid-relation.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidRelationError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidRelationFormat';\n }\n}\n"],"names":["InvalidRelationError","DatabaseError","constructor","message","name"],"mappings":";;AAEe,MAAMA,oBAA6BC,SAAAA,aAAAA,CAAAA;IAChDC,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-relation.mjs","sources":["../../src/errors/invalid-relation.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidRelationError extends DatabaseError {\n constructor(message = 'Invalid relation format') {\n super(message);\n this.name = 'InvalidRelationFormat';\n }\n}\n"],"names":["InvalidRelationError","DatabaseError","message","name"],"mappings":";;AAEe,MAAMA,oBAA6BC,SAAAA,aAAAA,CAAAA;IAChD,WAAYC,CAAAA,OAAAA,GAAU,yBAAyB,CAAE;AAC/C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,uBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-time.js","sources":["../../src/errors/invalid-time.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidTimeError extends DatabaseError {\n constructor(message = 'Invalid time format, expected HH:mm:ss.SSS') {\n super(message);\n this.name = 'InvalidTimeFormat';\n }\n}\n"],"names":["InvalidTimeError","DatabaseError","constructor","message","name"],"mappings":";;;;AAEe,MAAMA,gBAAyBC,SAAAA,QAAAA,CAAAA;IAC5CC,WAAYC,CAAAA,OAAAA,GAAU,4CAA4C,CAAE;AAClE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-time.js","sources":["../../src/errors/invalid-time.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidTimeError extends DatabaseError {\n constructor(message = 'Invalid time format, expected HH:mm:ss.SSS') {\n super(message);\n this.name = 'InvalidTimeFormat';\n }\n}\n"],"names":["InvalidTimeError","DatabaseError","message","name"],"mappings":";;;;AAEe,MAAMA,gBAAyBC,SAAAA,QAAAA,CAAAA;IAC5C,WAAYC,CAAAA,OAAAA,GAAU,4CAA4C,CAAE;AAClE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-time.mjs","sources":["../../src/errors/invalid-time.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidTimeError extends DatabaseError {\n constructor(message = 'Invalid time format, expected HH:mm:ss.SSS') {\n super(message);\n this.name = 'InvalidTimeFormat';\n }\n}\n"],"names":["InvalidTimeError","DatabaseError","constructor","message","name"],"mappings":";;AAEe,MAAMA,gBAAyBC,SAAAA,aAAAA,CAAAA;IAC5CC,WAAYC,CAAAA,OAAAA,GAAU,4CAA4C,CAAE;AAClE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
1
+ {"version":3,"file":"invalid-time.mjs","sources":["../../src/errors/invalid-time.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class InvalidTimeError extends DatabaseError {\n constructor(message = 'Invalid time format, expected HH:mm:ss.SSS') {\n super(message);\n this.name = 'InvalidTimeFormat';\n }\n}\n"],"names":["InvalidTimeError","DatabaseError","message","name"],"mappings":";;AAEe,MAAMA,gBAAyBC,SAAAA,aAAAA,CAAAA;IAC5C,WAAYC,CAAAA,OAAAA,GAAU,4CAA4C,CAAE;AAClE,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,mBAAA;AACd;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"not-null.js","sources":["../../src/errors/not-null.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class NotNullError extends DatabaseError {\n constructor({ column = '' } = {}) {\n super(`Not null constraint violation${column ? ` on column ${column}` : ''}.`);\n this.name = 'NotNullError';\n this.details = { column };\n this.stack = '';\n }\n}\n"],"names":["NotNullError","DatabaseError","constructor","column","name","details","stack"],"mappings":";;;;AAEe,MAAMA,YAAqBC,SAAAA,QAAAA,CAAAA;AACxCC,IAAAA,WAAAA,CAAY,EAAEC,MAAS,GAAA,EAAE,EAAE,GAAG,EAAE,CAAE;AAChC,QAAA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAS,GAAA,CAAC,WAAW,EAAEA,MAAO,CAAA,CAAC,GAAG,EAAA,CAAG,CAAC,CAAC,CAAA;QAC7E,IAAI,CAACC,IAAI,GAAG,cAAA;QACZ,IAAI,CAACC,OAAO,GAAG;AAAEF,YAAAA;AAAO,SAAA;QACxB,IAAI,CAACG,KAAK,GAAG,EAAA;AACf;AACF;;;;"}
1
+ {"version":3,"file":"not-null.js","sources":["../../src/errors/not-null.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class NotNullError extends DatabaseError {\n constructor({ column = '' } = {}) {\n super(`Not null constraint violation${column ? ` on column ${column}` : ''}.`);\n this.name = 'NotNullError';\n this.details = { column };\n this.stack = '';\n }\n}\n"],"names":["NotNullError","DatabaseError","column","name","details","stack"],"mappings":";;;;AAEe,MAAMA,YAAqBC,SAAAA,QAAAA,CAAAA;AACxC,IAAA,WAAA,CAAY,EAAEC,MAAS,GAAA,EAAE,EAAE,GAAG,EAAE,CAAE;AAChC,QAAA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAS,GAAA,CAAC,WAAW,EAAEA,MAAQ,CAAA,CAAA,GAAG,EAAG,CAAA,CAAC,CAAC,CAAA;QAC7E,IAAI,CAACC,IAAI,GAAG,cAAA;QACZ,IAAI,CAACC,OAAO,GAAG;AAAEF,YAAAA;AAAO,SAAA;QACxB,IAAI,CAACG,KAAK,GAAG,EAAA;AACf;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"not-null.mjs","sources":["../../src/errors/not-null.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class NotNullError extends DatabaseError {\n constructor({ column = '' } = {}) {\n super(`Not null constraint violation${column ? ` on column ${column}` : ''}.`);\n this.name = 'NotNullError';\n this.details = { column };\n this.stack = '';\n }\n}\n"],"names":["NotNullError","DatabaseError","constructor","column","name","details","stack"],"mappings":";;AAEe,MAAMA,YAAqBC,SAAAA,aAAAA,CAAAA;AACxCC,IAAAA,WAAAA,CAAY,EAAEC,MAAS,GAAA,EAAE,EAAE,GAAG,EAAE,CAAE;AAChC,QAAA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAS,GAAA,CAAC,WAAW,EAAEA,MAAO,CAAA,CAAC,GAAG,EAAA,CAAG,CAAC,CAAC,CAAA;QAC7E,IAAI,CAACC,IAAI,GAAG,cAAA;QACZ,IAAI,CAACC,OAAO,GAAG;AAAEF,YAAAA;AAAO,SAAA;QACxB,IAAI,CAACG,KAAK,GAAG,EAAA;AACf;AACF;;;;"}
1
+ {"version":3,"file":"not-null.mjs","sources":["../../src/errors/not-null.ts"],"sourcesContent":["import DatabaseError from './database';\n\nexport default class NotNullError extends DatabaseError {\n constructor({ column = '' } = {}) {\n super(`Not null constraint violation${column ? ` on column ${column}` : ''}.`);\n this.name = 'NotNullError';\n this.details = { column };\n this.stack = '';\n }\n}\n"],"names":["NotNullError","DatabaseError","column","name","details","stack"],"mappings":";;AAEe,MAAMA,YAAqBC,SAAAA,aAAAA,CAAAA;AACxC,IAAA,WAAA,CAAY,EAAEC,MAAS,GAAA,EAAE,EAAE,GAAG,EAAE,CAAE;AAChC,QAAA,KAAK,CAAC,CAAC,6BAA6B,EAAEA,MAAS,GAAA,CAAC,WAAW,EAAEA,MAAQ,CAAA,CAAA,GAAG,EAAG,CAAA,CAAC,CAAC,CAAA;QAC7E,IAAI,CAACC,IAAI,GAAG,cAAA;QACZ,IAAI,CAACC,OAAO,GAAG;AAAEF,YAAAA;AAAO,SAAA;QACxB,IAAI,CAACG,KAAK,GAAG,EAAA;AACf;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sources":["../../src/fields/field.ts"],"sourcesContent":["export default class Field {\n config: unknown;\n\n constructor(config: unknown) {\n this.config = config;\n }\n\n toDB(value: unknown) {\n return value;\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n"],"names":["Field","toDB","value","fromDB","constructor","config"],"mappings":";;AAAe,MAAMA,KAAAA,CAAAA;AAOnBC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,OAAOA,KAAAA;AACT;AAEAC,IAAAA,MAAAA,CAAOD,KAAc,EAAE;QACrB,OAAOA,KAAAA;AACT;AAVAE,IAAAA,WAAAA,CAAYC,MAAe,CAAE;QAC3B,IAAI,CAACA,MAAM,GAAGA,MAAAA;AAChB;AASF;;;;"}
1
+ {"version":3,"file":"field.js","sources":["../../src/fields/field.ts"],"sourcesContent":["export default class Field {\n config: unknown;\n\n constructor(config: unknown) {\n this.config = config;\n }\n\n toDB(value: unknown) {\n return value;\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n"],"names":["Field","toDB","value","fromDB","config"],"mappings":";;AAAe,MAAMA,KAAAA,CAAAA;AAOnBC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,OAAOA,KAAAA;AACT;AAEAC,IAAAA,MAAAA,CAAOD,KAAc,EAAE;QACrB,OAAOA,KAAAA;AACT;AAVA,IAAA,WAAA,CAAYE,MAAe,CAAE;QAC3B,IAAI,CAACA,MAAM,GAAGA,MAAAA;AAChB;AASF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"field.mjs","sources":["../../src/fields/field.ts"],"sourcesContent":["export default class Field {\n config: unknown;\n\n constructor(config: unknown) {\n this.config = config;\n }\n\n toDB(value: unknown) {\n return value;\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n"],"names":["Field","toDB","value","fromDB","constructor","config"],"mappings":"AAAe,MAAMA,KAAAA,CAAAA;AAOnBC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,OAAOA,KAAAA;AACT;AAEAC,IAAAA,MAAAA,CAAOD,KAAc,EAAE;QACrB,OAAOA,KAAAA;AACT;AAVAE,IAAAA,WAAAA,CAAYC,MAAe,CAAE;QAC3B,IAAI,CAACA,MAAM,GAAGA,MAAAA;AAChB;AASF;;;;"}
1
+ {"version":3,"file":"field.mjs","sources":["../../src/fields/field.ts"],"sourcesContent":["export default class Field {\n config: unknown;\n\n constructor(config: unknown) {\n this.config = config;\n }\n\n toDB(value: unknown) {\n return value;\n }\n\n fromDB(value: unknown) {\n return value;\n }\n}\n"],"names":["Field","toDB","value","fromDB","config"],"mappings":"AAAe,MAAMA,KAAAA,CAAAA;AAOnBC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;QACnB,OAAOA,KAAAA;AACT;AAEAC,IAAAA,MAAAA,CAAOD,KAAc,EAAE;QACrB,OAAOA,KAAAA;AACT;AAVA,IAAA,WAAA,CAAYE,MAAe,CAAE;QAC3B,IAAI,CAACA,MAAM,GAAGA,MAAAA;AAChB;AASF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/fields/index.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport Field from './field';\nimport StringField from './string';\nimport JSONField from './json';\nimport BigIntegerField from './biginteger';\nimport NumberField from './number';\nimport DateField from './date';\nimport TimeField from './time';\nimport DatetimeField from './datetime';\nimport TimestampField from './timestamp';\nimport BooleanField from './boolean';\n\nimport type { Attribute } from '../types';\n\nconst typeToFieldMap: Record<string, typeof Field> = {\n increments: Field,\n password: StringField,\n email: StringField,\n string: StringField,\n uid: StringField,\n richtext: StringField,\n text: StringField,\n enumeration: StringField,\n json: JSONField,\n biginteger: BigIntegerField,\n integer: NumberField,\n float: NumberField,\n decimal: NumberField,\n date: DateField,\n time: TimeField,\n datetime: DatetimeField,\n timestamp: TimestampField,\n boolean: BooleanField,\n blocks: JSONField,\n};\n\nexport const createField = (attribute: Attribute): Field => {\n const { type } = attribute;\n\n if (_.has(type, typeToFieldMap)) {\n return new typeToFieldMap[type]({});\n }\n\n throw new Error(`Undefined field for type ${type}`);\n};\n"],"names":["typeToFieldMap","increments","Field","password","StringField","email","string","uid","richtext","text","enumeration","json","JSONField","biginteger","BigIntegerField","integer","NumberField","float","decimal","date","DateField","time","TimeField","datetime","DatetimeField","timestamp","TimestampField","boolean","BooleanField","blocks","createField","attribute","type","_","has","Error"],"mappings":";;;;;;;;;;;;;;AAeA,MAAMA,cAA+C,GAAA;IACnDC,UAAYC,EAAAA,KAAAA;IACZC,QAAUC,EAAAA,MAAAA;IACVC,KAAOD,EAAAA,MAAAA;IACPE,MAAQF,EAAAA,MAAAA;IACRG,GAAKH,EAAAA,MAAAA;IACLI,QAAUJ,EAAAA,MAAAA;IACVK,IAAML,EAAAA,MAAAA;IACNM,WAAaN,EAAAA,MAAAA;IACbO,IAAMC,EAAAA,IAAAA;IACNC,UAAYC,EAAAA,UAAAA;IACZC,OAASC,EAAAA,MAAAA;IACTC,KAAOD,EAAAA,MAAAA;IACPE,OAASF,EAAAA,MAAAA;IACTG,IAAMC,EAAAA,IAAAA;IACNC,IAAMC,EAAAA,IAAAA;IACNC,QAAUC,EAAAA,QAAAA;IACVC,SAAWC,EAAAA,SAAAA;IACXC,OAASC,EAAAA,OAAAA;IACTC,MAAQjB,EAAAA;AACV,CAAA;AAEO,MAAMkB,cAAc,CAACC,SAAAA,GAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGD,SAAAA;AAEjB,IAAA,IAAIE,CAAEC,CAAAA,GAAG,CAACF,IAAAA,EAAMhC,cAAiB,CAAA,EAAA;AAC/B,QAAA,OAAO,IAAIA,cAAc,CAACgC,IAAAA,CAAK,CAAC,EAAC,CAAA;AACnC;AAEA,IAAA,MAAM,IAAIG,KAAM,CAAA,CAAC,yBAAyB,EAAEH,KAAK,CAAC,CAAA;AACpD;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/fields/index.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport Field from './field';\nimport StringField from './string';\nimport JSONField from './json';\nimport BigIntegerField from './biginteger';\nimport NumberField from './number';\nimport DateField from './date';\nimport TimeField from './time';\nimport DatetimeField from './datetime';\nimport TimestampField from './timestamp';\nimport BooleanField from './boolean';\n\nimport type { Attribute } from '../types';\n\nconst typeToFieldMap: Record<string, typeof Field> = {\n increments: Field,\n password: StringField,\n email: StringField,\n string: StringField,\n uid: StringField,\n richtext: StringField,\n text: StringField,\n enumeration: StringField,\n json: JSONField,\n biginteger: BigIntegerField,\n integer: NumberField,\n float: NumberField,\n decimal: NumberField,\n date: DateField,\n time: TimeField,\n datetime: DatetimeField,\n timestamp: TimestampField,\n boolean: BooleanField,\n blocks: JSONField,\n};\n\nexport const createField = (attribute: Attribute): Field => {\n const { type } = attribute;\n\n if (_.has(type, typeToFieldMap)) {\n return new typeToFieldMap[type]({});\n }\n\n throw new Error(`Undefined field for type ${type}`);\n};\n"],"names":["typeToFieldMap","increments","Field","password","StringField","email","string","uid","richtext","text","enumeration","json","JSONField","biginteger","BigIntegerField","integer","NumberField","float","decimal","date","DateField","time","TimeField","datetime","DatetimeField","timestamp","TimestampField","boolean","BooleanField","blocks","createField","attribute","type","_","has","Error"],"mappings":";;;;;;;;;;;;;;AAeA,MAAMA,cAA+C,GAAA;IACnDC,UAAYC,EAAAA,KAAAA;IACZC,QAAUC,EAAAA,MAAAA;IACVC,KAAOD,EAAAA,MAAAA;IACPE,MAAQF,EAAAA,MAAAA;IACRG,GAAKH,EAAAA,MAAAA;IACLI,QAAUJ,EAAAA,MAAAA;IACVK,IAAML,EAAAA,MAAAA;IACNM,WAAaN,EAAAA,MAAAA;IACbO,IAAMC,EAAAA,IAAAA;IACNC,UAAYC,EAAAA,UAAAA;IACZC,OAASC,EAAAA,MAAAA;IACTC,KAAOD,EAAAA,MAAAA;IACPE,OAASF,EAAAA,MAAAA;IACTG,IAAMC,EAAAA,IAAAA;IACNC,IAAMC,EAAAA,IAAAA;IACNC,QAAUC,EAAAA,QAAAA;IACVC,SAAWC,EAAAA,SAAAA;IACXC,OAASC,EAAAA,OAAAA;IACTC,MAAQjB,EAAAA;AACV,CAAA;AAEO,MAAMkB,cAAc,CAACC,SAAAA,GAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGD,SAAAA;AAEjB,IAAA,IAAIE,CAAEC,CAAAA,GAAG,CAACF,IAAAA,EAAMhC,cAAiB,CAAA,EAAA;AAC/B,QAAA,OAAO,IAAIA,cAAc,CAACgC,IAAAA,CAAK,CAAC,EAAC,CAAA;AACnC;AAEA,IAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,yBAAyB,EAAEH,IAAM,CAAA,CAAA,CAAA;AACpD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/fields/index.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport Field from './field';\nimport StringField from './string';\nimport JSONField from './json';\nimport BigIntegerField from './biginteger';\nimport NumberField from './number';\nimport DateField from './date';\nimport TimeField from './time';\nimport DatetimeField from './datetime';\nimport TimestampField from './timestamp';\nimport BooleanField from './boolean';\n\nimport type { Attribute } from '../types';\n\nconst typeToFieldMap: Record<string, typeof Field> = {\n increments: Field,\n password: StringField,\n email: StringField,\n string: StringField,\n uid: StringField,\n richtext: StringField,\n text: StringField,\n enumeration: StringField,\n json: JSONField,\n biginteger: BigIntegerField,\n integer: NumberField,\n float: NumberField,\n decimal: NumberField,\n date: DateField,\n time: TimeField,\n datetime: DatetimeField,\n timestamp: TimestampField,\n boolean: BooleanField,\n blocks: JSONField,\n};\n\nexport const createField = (attribute: Attribute): Field => {\n const { type } = attribute;\n\n if (_.has(type, typeToFieldMap)) {\n return new typeToFieldMap[type]({});\n }\n\n throw new Error(`Undefined field for type ${type}`);\n};\n"],"names":["typeToFieldMap","increments","Field","password","StringField","email","string","uid","richtext","text","enumeration","json","JSONField","biginteger","BigIntegerField","integer","NumberField","float","decimal","date","DateField","time","TimeField","datetime","DatetimeField","timestamp","TimestampField","boolean","BooleanField","blocks","createField","attribute","type","_","has","Error"],"mappings":";;;;;;;;;;;;AAeA,MAAMA,cAA+C,GAAA;IACnDC,UAAYC,EAAAA,KAAAA;IACZC,QAAUC,EAAAA,WAAAA;IACVC,KAAOD,EAAAA,WAAAA;IACPE,MAAQF,EAAAA,WAAAA;IACRG,GAAKH,EAAAA,WAAAA;IACLI,QAAUJ,EAAAA,WAAAA;IACVK,IAAML,EAAAA,WAAAA;IACNM,WAAaN,EAAAA,WAAAA;IACbO,IAAMC,EAAAA,SAAAA;IACNC,UAAYC,EAAAA,eAAAA;IACZC,OAASC,EAAAA,WAAAA;IACTC,KAAOD,EAAAA,WAAAA;IACPE,OAASF,EAAAA,WAAAA;IACTG,IAAMC,EAAAA,SAAAA;IACNC,IAAMC,EAAAA,SAAAA;IACNC,QAAUC,EAAAA,aAAAA;IACVC,SAAWC,EAAAA,cAAAA;IACXC,OAASC,EAAAA,YAAAA;IACTC,MAAQjB,EAAAA;AACV,CAAA;AAEO,MAAMkB,cAAc,CAACC,SAAAA,GAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGD,SAAAA;AAEjB,IAAA,IAAIE,CAAEC,CAAAA,GAAG,CAACF,IAAAA,EAAMhC,cAAiB,CAAA,EAAA;AAC/B,QAAA,OAAO,IAAIA,cAAc,CAACgC,IAAAA,CAAK,CAAC,EAAC,CAAA;AACnC;AAEA,IAAA,MAAM,IAAIG,KAAM,CAAA,CAAC,yBAAyB,EAAEH,KAAK,CAAC,CAAA;AACpD;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/fields/index.ts"],"sourcesContent":["import _ from 'lodash/fp';\n\nimport Field from './field';\nimport StringField from './string';\nimport JSONField from './json';\nimport BigIntegerField from './biginteger';\nimport NumberField from './number';\nimport DateField from './date';\nimport TimeField from './time';\nimport DatetimeField from './datetime';\nimport TimestampField from './timestamp';\nimport BooleanField from './boolean';\n\nimport type { Attribute } from '../types';\n\nconst typeToFieldMap: Record<string, typeof Field> = {\n increments: Field,\n password: StringField,\n email: StringField,\n string: StringField,\n uid: StringField,\n richtext: StringField,\n text: StringField,\n enumeration: StringField,\n json: JSONField,\n biginteger: BigIntegerField,\n integer: NumberField,\n float: NumberField,\n decimal: NumberField,\n date: DateField,\n time: TimeField,\n datetime: DatetimeField,\n timestamp: TimestampField,\n boolean: BooleanField,\n blocks: JSONField,\n};\n\nexport const createField = (attribute: Attribute): Field => {\n const { type } = attribute;\n\n if (_.has(type, typeToFieldMap)) {\n return new typeToFieldMap[type]({});\n }\n\n throw new Error(`Undefined field for type ${type}`);\n};\n"],"names":["typeToFieldMap","increments","Field","password","StringField","email","string","uid","richtext","text","enumeration","json","JSONField","biginteger","BigIntegerField","integer","NumberField","float","decimal","date","DateField","time","TimeField","datetime","DatetimeField","timestamp","TimestampField","boolean","BooleanField","blocks","createField","attribute","type","_","has","Error"],"mappings":";;;;;;;;;;;;AAeA,MAAMA,cAA+C,GAAA;IACnDC,UAAYC,EAAAA,KAAAA;IACZC,QAAUC,EAAAA,WAAAA;IACVC,KAAOD,EAAAA,WAAAA;IACPE,MAAQF,EAAAA,WAAAA;IACRG,GAAKH,EAAAA,WAAAA;IACLI,QAAUJ,EAAAA,WAAAA;IACVK,IAAML,EAAAA,WAAAA;IACNM,WAAaN,EAAAA,WAAAA;IACbO,IAAMC,EAAAA,SAAAA;IACNC,UAAYC,EAAAA,eAAAA;IACZC,OAASC,EAAAA,WAAAA;IACTC,KAAOD,EAAAA,WAAAA;IACPE,OAASF,EAAAA,WAAAA;IACTG,IAAMC,EAAAA,SAAAA;IACNC,IAAMC,EAAAA,SAAAA;IACNC,QAAUC,EAAAA,aAAAA;IACVC,SAAWC,EAAAA,cAAAA;IACXC,OAASC,EAAAA,YAAAA;IACTC,MAAQjB,EAAAA;AACV,CAAA;AAEO,MAAMkB,cAAc,CAACC,SAAAA,GAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGD,SAAAA;AAEjB,IAAA,IAAIE,CAAEC,CAAAA,GAAG,CAACF,IAAAA,EAAMhC,cAAiB,CAAA,EAAA;AAC/B,QAAA,OAAO,IAAIA,cAAc,CAACgC,IAAAA,CAAK,CAAC,EAAC,CAAA;AACnC;AAEA,IAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,yBAAyB,EAAEH,IAAM,CAAA,CAAA,CAAA;AACpD;;;;"}
@@ -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 const numberValue = toNumber(value);\n\n if (Number.isNaN(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","numberValue","toNumber","Number","isNaN","Error","fromDB"],"mappings":";;;;;AAGe,MAAMA,WAAoBC,SAAAA,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,MAAMC,cAAcC,UAASF,CAAAA,KAAAA,CAAAA;QAE7B,IAAIG,MAAAA,CAAOC,KAAK,CAACH,WAAc,CAAA,EAAA;AAC7B,YAAA,MAAM,IAAII,KAAM,CAAA,CAAC,6BAA6B,EAAEL,MAAM,CAAC,CAAA;AACzD;QAEA,OAAOC,WAAAA;AACT;AAEAK,IAAAA,MAAAA,CAAON,KAAc,EAAE;AACrB,QAAA,OAAOE,UAASF,CAAAA,KAAAA,CAAAA;AAClB;AACF;;;;"}
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 const numberValue = toNumber(value);\n\n if (Number.isNaN(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","numberValue","toNumber","Number","isNaN","Error","fromDB"],"mappings":";;;;;AAGe,MAAMA,WAAoBC,SAAAA,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,MAAMC,cAAcC,UAASF,CAAAA,KAAAA,CAAAA;QAE7B,IAAIG,MAAAA,CAAOC,KAAK,CAACH,WAAc,CAAA,EAAA;AAC7B,YAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEL,KAAO,CAAA,CAAA,CAAA;AACzD;QAEA,OAAOC,WAAAA;AACT;AAEAK,IAAAA,MAAAA,CAAON,KAAc,EAAE;AACrB,QAAA,OAAOE,UAASF,CAAAA,KAAAA,CAAAA;AAClB;AACF;;;;"}
@@ -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 const numberValue = toNumber(value);\n\n if (Number.isNaN(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","numberValue","toNumber","Number","isNaN","Error","fromDB"],"mappings":";;;AAGe,MAAMA,WAAoBC,SAAAA,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,MAAMC,cAAcC,QAASF,CAAAA,KAAAA,CAAAA;QAE7B,IAAIG,MAAAA,CAAOC,KAAK,CAACH,WAAc,CAAA,EAAA;AAC7B,YAAA,MAAM,IAAII,KAAM,CAAA,CAAC,6BAA6B,EAAEL,MAAM,CAAC,CAAA;AACzD;QAEA,OAAOC,WAAAA;AACT;AAEAK,IAAAA,MAAAA,CAAON,KAAc,EAAE;AACrB,QAAA,OAAOE,QAASF,CAAAA,KAAAA,CAAAA;AAClB;AACF;;;;"}
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 const numberValue = toNumber(value);\n\n if (Number.isNaN(numberValue)) {\n throw new Error(`Expected a valid Number, got ${value}`);\n }\n\n return numberValue;\n }\n\n fromDB(value: unknown) {\n return toNumber(value);\n }\n}\n"],"names":["NumberField","Field","toDB","value","numberValue","toNumber","Number","isNaN","Error","fromDB"],"mappings":";;;AAGe,MAAMA,WAAoBC,SAAAA,KAAAA,CAAAA;AACvCC,IAAAA,IAAAA,CAAKC,KAAc,EAAE;AACnB,QAAA,MAAMC,cAAcC,QAASF,CAAAA,KAAAA,CAAAA;QAE7B,IAAIG,MAAAA,CAAOC,KAAK,CAACH,WAAc,CAAA,EAAA;AAC7B,YAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,6BAA6B,EAAEL,KAAO,CAAA,CAAA,CAAA;AACzD;QAEA,OAAOC,WAAAA;AACT;AAEAK,IAAAA,MAAAA,CAAON,KAAc,EAAE;AACrB,QAAA,OAAOE,QAASF,CAAAA,KAAAA,CAAAA;AAClB;AACF;;;;"}
@@ -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 (error) {\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","error","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 { 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 (error) {\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","error","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 +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 (error) {\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","error","parseDate","format","found","isString","match","extractedValue","test","process","emitWarning","InvalidDateError","parseTime","InvalidTimeError","result","hours","minutes","seconds","fraction","fractionPart","padCharsEnd","slice"],"mappings":";;;;;;AAKA,MAAMA,SAAS,CAACC,KAAAA,GAAAA;IACd,OAAOC,OAAAA,CAAQF,MAAM,CAACC,KAAAA,CAAAA;AACxB,CAAA;AAEA,MAAME,UAAa,GAAA,kDAAA;AACnB,MAAMC,kBAAqB,GAAA,kDAAA;AAC3B,MAAMC,UAAa,GAAA,8DAAA;AAEZ,MAAMC,2BAA2B,CAACL,KAAAA,GAAAA;AACvC,IAAA,IAAID,OAAOC,KAAQ,CAAA,EAAA;QACjB,OAAOA,KAAAA;AACT;IAEA,IAAI;AACF,QAAA,MAAMM,IAAOL,GAAAA,OAAAA,CAAQM,QAAQ,CAACC,QAASR,CAAAA,KAAAA,CAAAA,CAAAA;QACvC,IAAIC,OAAAA,CAAQQ,OAAO,CAACH,IAAO,CAAA,EAAA;YACzB,OAAOA,IAAAA;AACT;AAEA,QAAA,MAAMI,gBAAgBT,OAAQU,CAAAA,KAAK,CAACH,QAASR,CAAAA,KAAAA,CAAAA,EAAQ,KAAK,IAAIY,IAAAA,EAAAA,CAAAA;QAC9D,IAAIX,OAAAA,CAAQQ,OAAO,CAACC,aAAgB,CAAA,EAAA;YAClC,OAAOA,aAAAA;AACT;AAEA,QAAA,MAAM,IAAIG,oBAAAA,CAAqB,CAAC,mDAAmD,CAAC,CAAA;AACtF,KAAA,CAAE,OAAOC,KAAO,EAAA;AACd,QAAA,MAAM,IAAID,oBAAAA,CAAqB,CAAC,mDAAmD,CAAC,CAAA;AACtF;AACF;AAEO,MAAME,YAAY,CAACf,KAAAA,GAAAA;AACxB,IAAA,IAAID,OAAOC,KAAQ,CAAA,EAAA;QACjB,OAAOC,OAAAA,CAAQe,MAAM,CAAChB,KAAO,EAAA,YAAA,CAAA;AAC/B;IAEA,MAAMiB,KAAAA,GAAQC,SAASlB,KAASA,CAAAA,GAAAA,KAAAA,CAAMmB,KAAK,CAAChB,kBAAAA,CAAAA,IAAuB,EAAE,GAAG,EAAE;IAC1E,MAAMiB,cAAAA,GAAiBH,KAAK,CAAC,CAAE,CAAA;AAE/B,IAAA,IAAIG,kBAAkB,CAAClB,UAAAA,CAAWmB,IAAI,CAACb,SAASR,KAAS,CAAA,CAAA,EAAA;;;QAGvDsB,OAAQC,CAAAA,WAAW,CACjB,CAAC,0GAA0G,EAAEvB,MAAM,eAAe,EAAEoB,cAAe,CAAA,CAAC,CAAC,CAAA;AAEzJ;AAEA,IAAA,IAAI,CAACA,cAAgB,EAAA;AACnB,QAAA,MAAM,IAAII,gBAAAA,CAAiB,CAAC,mCAAmC,CAAC,CAAA;AAClE;IAEA,MAAMlB,IAAAA,GAAOL,OAAQM,CAAAA,QAAQ,CAACa,cAAAA,CAAAA;AAC9B,IAAA,IAAI,CAACnB,OAAAA,CAAQQ,OAAO,CAACH,IAAO,CAAA,EAAA;AAC1B,QAAA,MAAM,IAAIkB,gBAAAA,CAAiB,CAAC,YAAY,CAAC,CAAA;AAC3C;IAEA,OAAOJ,cAAAA;AACT;AAEO,MAAMK,YAAY,CAACzB,KAAAA,GAAAA;AACxB,IAAA,IAAID,OAAOC,KAAQ,CAAA,EAAA;QACjB,OAAOC,OAAAA,CAAQe,MAAM,CAAChB,KAAO,EAAA,cAAA,CAAA;AAC/B;IAEA,IAAI,OAAOA,UAAU,QAAU,EAAA;AAC7B,QAAA,MAAM,IAAI0B,gBAAiB,CAAA,CAAC,yBAAyB,EAAE,OAAO1B,MAAM,CAAC,CAAA;AACvE;IAEA,MAAM2B,MAAAA,GAAS3B,KAAMmB,CAAAA,KAAK,CAACf,UAAAA,CAAAA;AAE3B,IAAA,IAAIuB,WAAW,IAAM,EAAA;AACnB,QAAA,MAAM,IAAID,gBAAiB,CAAA,4CAAA,CAAA;AAC7B;AAEA,IAAA,MAAM,GAAGE,KAAOC,EAAAA,OAAAA,EAASC,SAASC,QAAW,GAAA,MAAM,CAAC,GAAGJ,MAAAA;AACvD,IAAA,MAAMK,eAAeC,WAAY,CAAA,GAAA,EAAK,CAAGF,EAAAA,QAAAA,CAASG,KAAK,CAAC,CAAA,CAAA,CAAA;AAExD,IAAA,OAAO,CAAC,EAAEN,KAAM,CAAA,CAAC,EAAEC,OAAAA,CAAQ,CAAC,EAAEC,OAAQ,CAAA,CAAC,EAAEE,YAAAA,CAAa,CAAC;AACzD;;;;"}
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 (error) {\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","error","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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"}
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 { 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';\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 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 };\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","constructor","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, type Migration } 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, JoinTable } from './types';\nimport type { Identifiers } from './utils/identifiers';\nimport { createRepairManager, type RepairManager } from './repairs';\n\nexport { isKnexQuery } from './utils/knex';\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 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 };\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 +1 @@
1
- {"version":3,"file":"index.mjs","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 { 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';\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 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 };\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","constructor","settings","forceMigration","runMigrations","console","getDialect","knexConfig","configure","warn","conn","createMetadata","createConnection","pool","createSchemaProvider","migrations","createMigrationsProvider","createLifecyclesProvider","createEntityManager","repair","createRepairManager"],"mappings":";;;;;;;;;;;;;;;AAwCA,MAAMA,WACJ,GAAA,CAACC,EACD,GAAA,CACEC,gBACAC,EAAAA,IAAAA,GAAAA;;AAGAF,QAAAA,EAAAA,CAAGG,OAAO,CAACC,UAAU,CAACH,gBAAAA,CAAAA,CAAkBI,IAAI,CAAC,IAAA;AAC3C,YAAA,OAAOH,KAAK,IAAMD,EAAAA,gBAAAA,CAAAA;AACpB,SAAA,CAAA;AACF,KAAA;AAEF,MAAMK,QAAAA,CAAAA;AA0EJ,IAAA,MAAMC,IAAK,CAAA,EAAEC,MAAM,EAAuB,EAAE;QAC1C,IAAI,OAAO,IAAI,CAACC,MAAM,CAACC,UAAU,CAACA,UAAU,KAAK,UAAY,EAAA;AAC3D;;;;;;;;;AASC,UACD,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,4CAAA,CAAA;;YAGlB,IAAI,IAAI,CAACH,MAAM,CAACC,UAAU,CAACG,MAAM,KAAK,QAAU,EAAA;AAC9C,gBAAA,MAAM,IAAI,CAACH,UAAU,CAACI,GAAG,CAAC,UAAA,CAAA;aACrB,MAAA;AACL,gBAAA,MAAM,IAAI,CAACJ,UAAU,CAACG,MAAM,CAACE,iBAAiB,EAAA;AAChD;AACF;AAEA,QAAA,IAAI,CAACC,QAAQ,CAACC,UAAU,CAACT,MAAAA,CAAAA;AACzB,QAAA,MAAMU,iBAAiB,IAAI,CAAA;AAC3B,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,KAAAA,CAAMC,GAAW,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,CAACJ,QAAQ,CAACK,GAAG,CAACD,GAAM,CAAA,EAAA;AAC3B,YAAA,MAAM,IAAIE,KAAM,CAAA,CAAC,MAAM,EAAEF,GAAAA,CAAI,UAAU,CAAC,CAAA;AAC1C;AAEA,QAAA,OAAO,IAAI,CAACG,aAAa,CAACC,aAAa,CAACJ,GAAAA,CAAAA;AAC1C;IAEAK,aAAgB,GAAA;QACd,OAAO,CAAC,CAACC,cAAAA,CAAeC,GAAG,EAAA;AAC7B;IAIA,MAAMC,WAAAA,CACJC,EAAc,EACsC;QACpD,MAAMC,oBAAAA,GAAuB,CAACJ,cAAAA,CAAeC,GAAG,EAAA;QAChD,MAAMI,GAAAA,GAAMD,oBACR,GAAA,MAAM,IAAI,CAACpB,UAAU,CAACkB,WAAW,EAChCF,GAAAA,cAAAA,CAAeC,GAAG,EAAA;QAEvB,eAAeK,MAAAA,GAAAA;AACb,YAAA,IAAIF,oBAAsB,EAAA;gBACxB,MAAMJ,cAAAA,CAAeM,MAAM,CAACD,GAAAA,CAAAA;AAC9B;AACF;QAEA,eAAeE,QAAAA,GAAAA;AACb,YAAA,IAAIH,oBAAsB,EAAA;gBACxB,MAAMJ,cAAAA,CAAeO,QAAQ,CAACF,GAAAA,CAAAA;AAChC;AACF;AAEA,QAAA,IAAI,CAACF,EAAI,EAAA;YACP,OAAO;AAAEG,gBAAAA,MAAAA;AAAQC,gBAAAA,QAAAA;AAAUN,gBAAAA,GAAAA,EAAK,IAAMI;AAAI,aAAA;AAC5C;QAEA,OAAOL,cAAAA,CAAeQ,GAAG,CAACH,GAAK,EAAA,UAAA;YAC7B,IAAI;AACF,gBAAA,MAAMI,cAAiB,GAAA;AACrBJ,oBAAAA,GAAAA;AACAC,oBAAAA,MAAAA;AACAC,oBAAAA,QAAAA;AACAG,oBAAAA,QAAAA,EAAUV,eAAeU,QAAQ;AACjCC,oBAAAA,UAAAA,EAAYX,eAAeW;AAC7B,iBAAA;gBACA,MAAMC,GAAAA,GAAM,MAAMT,EAAGM,CAAAA,cAAAA,CAAAA;gBACrB,MAAMH,MAAAA,EAAAA;gBACN,OAAOM,GAAAA;AACT,aAAA,CAAE,OAAOC,KAAO,EAAA;gBACd,MAAMN,QAAAA,EAAAA;gBACN,MAAMM,KAAAA;AACR;AACF,SAAA,CAAA;AACF;IAEAC,aAAoC,GAAA;QAClC,OAAO,IAAI,CAAC9B,UAAU,CAACG,MAAM,CAAC4B,kBAAkB,CAACC,MAAM;AACzD;AAIAC,IAAAA,aAAAA,CAAcC,SAAkB,EAA4B;QAC1D,MAAMF,MAAAA,GAAS,IAAI,CAACF,aAAa,EAAA;QACjC,MAAM9B,UAAAA,GAAakC,YAAY,IAAI,CAAClC,UAAU,CAACkC,SAAAA,CAAAA,GAAa,IAAI,CAAClC,UAAU;AAC3E,QAAA,OAAOgC,MAAShC,GAAAA,UAAAA,CAAWmC,UAAU,CAACH,MAAUhC,CAAAA,GAAAA,UAAAA;AAClD;;IAGAoC,OAAU,GAAA;AACR,QAAA,MAAML,qBAAqB,IAAI,CAAC/B,UAAU,EAAEG,MAAAA,EAAQ4B,sBAAsB,EAAC;AAC3E,QAAA,MAAM5B,MAAS,GAAA,IAAI,CAACV,OAAO,EAAEU,MAAU,IAAA,EAAA;AAEvC,QAAA,IAAIkC,WAAc,GAAA,EAAA;QAClB,IAAIL,MAAAA;;AAGJ,QAAA,IAAI7B,WAAW,QAAU,EAAA;AACvB,YAAA,MAAMmC,eAAeP,kBAAoBQ,EAAAA,QAAAA;AACzC,YAAA,IAAID,YAAc,EAAA;AAChBD,gBAAAA,WAAAA,GAAcG,IAAKC,CAAAA,QAAQ,CAACC,OAAAA,CAAQC,GAAG,EAAIL,EAAAA,YAAAA,CAAAA;AAC7C;SAGG,MAAA;AACHD,YAAAA,WAAAA,GAAcN,kBAAoBa,EAAAA,QAAAA;AAClCZ,YAAAA,MAAAA,GAASD,kBAAoBC,EAAAA,MAAAA;AAC/B;QAEA,OAAO;AACLK,YAAAA,WAAAA;AACAL,YAAAA,MAAAA;AACA7B,YAAAA;AACF,SAAA;AACF;AAEA0C,IAAAA,mBAAAA,CAAoBxB,GAAM,GAAA,IAAI,CAACrB,UAAU,EAAE;QACzC,MAAMgC,MAAAA,GAAS,IAAI,CAACF,aAAa,EAAA;QACjC,OAAOE,MAAAA,GAASX,IAAIW,MAAM,CAACG,UAAU,CAACH,MAAAA,CAAAA,GAAUX,IAAIW,MAAM;AAC5D;AAEAc,IAAAA,YAAAA,CAAapC,GAAW,EAAE;AACxB,QAAA,OAAO,IAAI,CAACG,aAAa,CAACkC,kBAAkB,CAACrC,GAAAA,CAAAA;AAC/C;AAEA,IAAA,MAAMsC,OAAU,GAAA;AACd,QAAA,MAAM,IAAI,CAACC,UAAU,CAACC,KAAK,EAAA;AAC3B,QAAA,MAAM,IAAI,CAAClD,UAAU,CAACgD,OAAO,EAAA;AAC/B;AA7LAG,IAAAA,WAAAA,CAAYpD,MAAsB,CAAE;QAClC,IAAI,CAACA,MAAM,GAAG;AACZ,YAAA,GAAGA,MAAM;YACTqD,QAAU,EAAA;gBACRC,cAAgB,EAAA,IAAA;gBAChBC,aAAe,EAAA,IAAA;AACf,gBAAA,GAAIvD,MAAOqD,CAAAA,QAAQ,IAAI;AACzB;AACF,SAAA;AAEA,QAAA,IAAI,CAACnD,MAAM,GAAGF,MAAAA,CAAOE,MAAM,IAAIsD,OAAAA;AAE/B,QAAA,IAAI,CAAC9D,OAAO,GAAG+D,UAAAA,CAAW,IAAI,CAAA;AAE9B,QAAA,IAAIC,UAA0B,GAAA,IAAI,CAAC1D,MAAM,CAACC,UAAU;;QAGpD,IAAI,OAAO,IAAI,CAACD,MAAM,CAACC,UAAU,CAACA,UAAU,KAAK,UAAY,EAAA;YAC3D,IAAI,CAACP,OAAO,CAACiE,SAAS,EAAA;SAGnB,MAAA;AACH,YAAA,IAAI,CAACzD,MAAM,CAAC0D,IAAI,CACd,wJAAA,CAAA;YAGFF,UAAa,GAAA;AACX,gBAAA,GAAG,IAAI,CAAC1D,MAAM,CAACC,UAAU;gBACzBA,UAAY,EAAA,UAAA;;oBAEV,MAAM4D,IAAAA,GAAO,MAAM,IAAI,CAAC7D,MAAM,CAACC,UAAU,CAACA,UAAU,EAAA;AACpD,oBAAA,IAAI,CAACP,OAAO,CAACiE,SAAS,CAACE,IAAAA,CAAAA;oBACvB,OAAOA,IAAAA;AACT;AACF,aAAA;AACF;AAEA,QAAA,IAAI,CAACtD,QAAQ,GAAGuD,cAAAA,CAAe,EAAE,CAAA;AAEjC,QAAA,IAAI,CAAC7D,UAAU,GAAG8D,gBAAAA,CAAiBL,UAAY,EAAA;YAC7CM,IAAM,EAAA;AAAE1E,gBAAAA,WAAAA,EAAaA,YAAY,IAAI;AAAE;AACzC,SAAA,CAAA;AAEA,QAAA,IAAI,CAAC2C,MAAM,GAAGgC,oBAAAA,CAAqB,IAAI,CAAA;AAEvC,QAAA,IAAI,CAACC,UAAU,GAAGC,wBAAAA,CAAyB,IAAI,CAAA;AAC/C,QAAA,IAAI,CAACjB,UAAU,GAAGkB,wBAAAA,CAAyB,IAAI,CAAA;AAE/C,QAAA,IAAI,CAACtD,aAAa,GAAGuD,mBAAAA,CAAoB,IAAI,CAAA;AAE7C,QAAA,IAAI,CAACC,MAAM,GAAGC,mBAAAA,CAAoB,IAAI,CAAA;AACxC;AA2IF;;;;"}
1
+ {"version":3,"file":"index.mjs","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 { 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';\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 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 };\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 +1 @@
1
- {"version":3,"file":"metadata.js","sources":["../../src/metadata/metadata.ts"],"sourcesContent":["import { cloneDeep, snakeCase } from 'lodash/fp';\nimport { identifiers } from '../utils/identifiers';\nimport * as types from '../utils/types';\nimport { createRelation } from './relations';\nimport type { Attribute, Model } from '../types';\nimport type { ForeignKey, Index } from '../schema/types';\nimport type { Action, SubscriberFn } from '../lifecycles';\n\nexport interface Meta extends Model {\n columnToAttribute: Record<string, string>;\n indexes: Index[];\n foreignKeys: ForeignKey[];\n lifecycles: Partial<Record<Action, SubscriberFn>>;\n}\n\nexport class Metadata extends Map<string, Meta> {\n // TODO: we expose the global identifiers in this way so that in the future we can instantiate our own\n // However, it should NOT be done until all the methods used by metadata can be part of this metadata object\n // and access this one; currently they all access the global identifiers directly.\n get identifiers() {\n return identifiers;\n }\n\n get(key: string): Meta {\n if (!super.has(key)) {\n throw new Error(`Metadata for \"${key}\" not found`);\n }\n\n return super.get(key) as Meta;\n }\n\n add(meta: Meta) {\n return this.set(meta.uid, meta);\n }\n\n /**\n * Validate the DB metadata, throwing an error if a duplicate DB table name is detected\n */\n validate() {\n const seenTables = new Map();\n for (const meta of this.values()) {\n if (seenTables.get(meta.tableName)) {\n throw new Error(\n `DB table \"${meta.tableName}\" already exists. Change the collectionName of the related content type.`\n );\n }\n seenTables.set(meta.tableName, true);\n }\n }\n\n loadModels(models: Model[]) {\n // init pass\n for (const model of cloneDeep(models ?? [])) {\n const tableName = identifiers.getTableName(model.tableName);\n this.add({\n ...model,\n tableName,\n attributes: {\n ...model.attributes,\n },\n lifecycles: model.lifecycles ?? {},\n indexes: model.indexes ?? [],\n foreignKeys: model.foreignKeys ?? [],\n columnToAttribute: {},\n });\n }\n\n // build compos / relations\n for (const meta of this.values()) {\n for (const [attributeName, attribute] of Object.entries(meta.attributes)) {\n try {\n if (attribute.unstable_virtual) {\n continue;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n createRelation(attributeName, attribute, meta, this);\n continue;\n }\n\n createAttribute(attributeName, attribute);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(\n `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`\n );\n }\n }\n }\n }\n\n for (const meta of this.values()) {\n const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {\n const attribute = meta.attributes[key];\n if ('columnName' in attribute) {\n return Object.assign(acc, { [attribute.columnName || key]: key });\n }\n\n return Object.assign(acc, { [key]: key });\n }, {});\n\n meta.columnToAttribute = columnToAttribute;\n }\n\n this.validate();\n }\n}\n\nconst createAttribute = (attributeName: string, attribute: Attribute) => {\n // if the attribute has already set its own column name, use that\n // this will prevent us from shortening a name twice\n if ('columnName' in attribute && attribute.columnName) {\n return;\n }\n\n const columnName = identifiers.getColumnName(snakeCase(attributeName));\n\n Object.assign(attribute, { columnName });\n};\n"],"names":["Metadata","Map","identifiers","get","key","has","Error","add","meta","set","uid","validate","seenTables","values","tableName","loadModels","models","model","cloneDeep","getTableName","attributes","lifecycles","indexes","foreignKeys","columnToAttribute","attributeName","attribute","Object","entries","unstable_virtual","types","createRelation","createAttribute","error","singularName","message","keys","reduce","acc","assign","columnName","getColumnName","snakeCase"],"mappings":"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"}
1
+ {"version":3,"file":"metadata.js","sources":["../../src/metadata/metadata.ts"],"sourcesContent":["import { cloneDeep, snakeCase } from 'lodash/fp';\nimport { identifiers } from '../utils/identifiers';\nimport * as types from '../utils/types';\nimport { createRelation } from './relations';\nimport type { Attribute, Model } from '../types';\nimport type { ForeignKey, Index } from '../schema/types';\nimport type { Action, SubscriberFn } from '../lifecycles';\n\nexport interface Meta extends Model {\n columnToAttribute: Record<string, string>;\n indexes: Index[];\n foreignKeys: ForeignKey[];\n lifecycles: Partial<Record<Action, SubscriberFn>>;\n}\n\nexport class Metadata extends Map<string, Meta> {\n // TODO: we expose the global identifiers in this way so that in the future we can instantiate our own\n // However, it should NOT be done until all the methods used by metadata can be part of this metadata object\n // and access this one; currently they all access the global identifiers directly.\n get identifiers() {\n return identifiers;\n }\n\n get(key: string): Meta {\n if (!super.has(key)) {\n throw new Error(`Metadata for \"${key}\" not found`);\n }\n\n return super.get(key) as Meta;\n }\n\n add(meta: Meta) {\n return this.set(meta.uid, meta);\n }\n\n /**\n * Validate the DB metadata, throwing an error if a duplicate DB table name is detected\n */\n validate() {\n const seenTables = new Map();\n for (const meta of this.values()) {\n if (seenTables.get(meta.tableName)) {\n throw new Error(\n `DB table \"${meta.tableName}\" already exists. Change the collectionName of the related content type.`\n );\n }\n seenTables.set(meta.tableName, true);\n }\n }\n\n loadModels(models: Model[]) {\n // init pass\n for (const model of cloneDeep(models ?? [])) {\n const tableName = identifiers.getTableName(model.tableName);\n this.add({\n ...model,\n tableName,\n attributes: {\n ...model.attributes,\n },\n lifecycles: model.lifecycles ?? {},\n indexes: model.indexes ?? [],\n foreignKeys: model.foreignKeys ?? [],\n columnToAttribute: {},\n });\n }\n\n // build compos / relations\n for (const meta of this.values()) {\n for (const [attributeName, attribute] of Object.entries(meta.attributes)) {\n try {\n if (attribute.unstable_virtual) {\n continue;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n createRelation(attributeName, attribute, meta, this);\n continue;\n }\n\n createAttribute(attributeName, attribute);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(\n `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`\n );\n }\n }\n }\n }\n\n for (const meta of this.values()) {\n const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {\n const attribute = meta.attributes[key];\n if ('columnName' in attribute) {\n return Object.assign(acc, { [attribute.columnName || key]: key });\n }\n\n return Object.assign(acc, { [key]: key });\n }, {});\n\n meta.columnToAttribute = columnToAttribute;\n }\n\n this.validate();\n }\n}\n\nconst createAttribute = (attributeName: string, attribute: Attribute) => {\n // if the attribute has already set its own column name, use that\n // this will prevent us from shortening a name twice\n if ('columnName' in attribute && attribute.columnName) {\n return;\n }\n\n const columnName = identifiers.getColumnName(snakeCase(attributeName));\n\n Object.assign(attribute, { columnName });\n};\n"],"names":["Metadata","Map","identifiers","get","key","has","Error","add","meta","set","uid","validate","seenTables","values","tableName","loadModels","models","model","cloneDeep","getTableName","attributes","lifecycles","indexes","foreignKeys","columnToAttribute","attributeName","attribute","Object","entries","unstable_virtual","types","createRelation","createAttribute","error","singularName","message","keys","reduce","acc","assign","columnName","getColumnName","snakeCase"],"mappings":";;;;;;;AAeO,MAAMA,QAAiBC,SAAAA,GAAAA,CAAAA;;;;AAI5B,IAAA,IAAIC,WAAc,GAAA;QAChB,OAAOA,iBAAAA;AACT;AAEAC,IAAAA,GAAAA,CAAIC,GAAW,EAAQ;AACrB,QAAA,IAAI,CAAC,KAAK,CAACC,GAAAA,CAAID,GAAM,CAAA,EAAA;AACnB,YAAA,MAAM,IAAIE,KAAM,CAAA,CAAC,cAAc,EAAEF,GAAAA,CAAI,WAAW,CAAC,CAAA;AACnD;QAEA,OAAO,KAAK,CAACD,GAAIC,CAAAA,GAAAA,CAAAA;AACnB;AAEAG,IAAAA,GAAAA,CAAIC,IAAU,EAAE;AACd,QAAA,OAAO,IAAI,CAACC,GAAG,CAACD,IAAAA,CAAKE,GAAG,EAAEF,IAAAA,CAAAA;AAC5B;AAEA;;AAEC,MACDG,QAAW,GAAA;AACT,QAAA,MAAMC,aAAa,IAAIX,GAAAA,EAAAA;AACvB,QAAA,KAAK,MAAMO,IAAAA,IAAQ,IAAI,CAACK,MAAM,EAAI,CAAA;AAChC,YAAA,IAAID,UAAWT,CAAAA,GAAG,CAACK,IAAAA,CAAKM,SAAS,CAAG,EAAA;gBAClC,MAAM,IAAIR,MACR,CAAC,UAAU,EAAEE,IAAKM,CAAAA,SAAS,CAAC,wEAAwE,CAAC,CAAA;AAEzG;AACAF,YAAAA,UAAAA,CAAWH,GAAG,CAACD,IAAKM,CAAAA,SAAS,EAAE,IAAA,CAAA;AACjC;AACF;AAEAC,IAAAA,UAAAA,CAAWC,MAAe,EAAE;;AAE1B,QAAA,KAAK,MAAMC,KAAAA,IAASC,WAAUF,CAAAA,MAAAA,IAAU,EAAE,CAAG,CAAA;AAC3C,YAAA,MAAMF,SAAYZ,GAAAA,iBAAAA,CAAYiB,YAAY,CAACF,MAAMH,SAAS,CAAA;YAC1D,IAAI,CAACP,GAAG,CAAC;AACP,gBAAA,GAAGU,KAAK;AACRH,gBAAAA,SAAAA;gBACAM,UAAY,EAAA;AACV,oBAAA,GAAGH,MAAMG;AACX,iBAAA;gBACAC,UAAYJ,EAAAA,KAAAA,CAAMI,UAAU,IAAI,EAAC;gBACjCC,OAASL,EAAAA,KAAAA,CAAMK,OAAO,IAAI,EAAE;gBAC5BC,WAAaN,EAAAA,KAAAA,CAAMM,WAAW,IAAI,EAAE;AACpCC,gBAAAA,iBAAAA,EAAmB;AACrB,aAAA,CAAA;AACF;;AAGA,QAAA,KAAK,MAAMhB,IAAAA,IAAQ,IAAI,CAACK,MAAM,EAAI,CAAA;YAChC,KAAK,MAAM,CAACY,aAAAA,EAAeC,SAAU,CAAA,IAAIC,OAAOC,OAAO,CAACpB,IAAKY,CAAAA,UAAU,CAAG,CAAA;gBACxE,IAAI;oBACF,IAAIM,SAAAA,CAAUG,gBAAgB,EAAE;AAC9B,wBAAA;AACF;oBAEA,IAAIC,2BAA2B,CAACJ,SAAY,CAAA,EAAA;wBAC1CK,wBAAeN,CAAAA,aAAAA,EAAeC,SAAWlB,EAAAA,IAAAA,EAAM,IAAI,CAAA;AACnD,wBAAA;AACF;AAEAwB,oBAAAA,eAAAA,CAAgBP,aAAeC,EAAAA,SAAAA,CAAAA;AACjC,iBAAA,CAAE,OAAOO,KAAO,EAAA;AACd,oBAAA,IAAIA,iBAAiB3B,KAAO,EAAA;wBAC1B,MAAM,IAAIA,MACR,CAAC,mBAAmB,EAAEmB,aAAc,CAAA,UAAU,EAAEjB,IAAK0B,CAAAA,YAAY,CAAC,CAAC,EAAE1B,KAAKE,GAAG,CAAC,GAAG,EAAEuB,KAAAA,CAAME,OAAO,CAAE,CAAA,CAAA;AAEtG;AACF;AACF;AACF;AAEA,QAAA,KAAK,MAAM3B,IAAAA,IAAQ,IAAI,CAACK,MAAM,EAAI,CAAA;YAChC,MAAMW,iBAAAA,GAAoBG,MAAOS,CAAAA,IAAI,CAAC5B,IAAAA,CAAKY,UAAU,CAAEiB,CAAAA,MAAM,CAAC,CAACC,GAAKlC,EAAAA,GAAAA,GAAAA;AAClE,gBAAA,MAAMsB,SAAYlB,GAAAA,IAAAA,CAAKY,UAAU,CAAChB,GAAI,CAAA;AACtC,gBAAA,IAAI,gBAAgBsB,SAAW,EAAA;oBAC7B,OAAOC,MAAAA,CAAOY,MAAM,CAACD,GAAK,EAAA;AAAE,wBAAA,CAACZ,SAAUc,CAAAA,UAAU,IAAIpC,GAAAA,GAAMA;AAAI,qBAAA,CAAA;AACjE;gBAEA,OAAOuB,MAAAA,CAAOY,MAAM,CAACD,GAAK,EAAA;AAAE,oBAAA,CAAClC,MAAMA;AAAI,iBAAA,CAAA;AACzC,aAAA,EAAG,EAAC,CAAA;AAEJI,YAAAA,IAAAA,CAAKgB,iBAAiB,GAAGA,iBAAAA;AAC3B;AAEA,QAAA,IAAI,CAACb,QAAQ,EAAA;AACf;AACF;AAEA,MAAMqB,eAAAA,GAAkB,CAACP,aAAuBC,EAAAA,SAAAA,GAAAA;;;AAG9C,IAAA,IAAI,YAAgBA,IAAAA,SAAAA,IAAaA,SAAUc,CAAAA,UAAU,EAAE;AACrD,QAAA;AACF;AAEA,IAAA,MAAMA,UAAatC,GAAAA,iBAAAA,CAAYuC,aAAa,CAACC,WAAUjB,CAAAA,aAAAA,CAAAA,CAAAA;IAEvDE,MAAOY,CAAAA,MAAM,CAACb,SAAW,EAAA;AAAEc,QAAAA;AAAW,KAAA,CAAA;AACxC,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.mjs","sources":["../../src/metadata/metadata.ts"],"sourcesContent":["import { cloneDeep, snakeCase } from 'lodash/fp';\nimport { identifiers } from '../utils/identifiers';\nimport * as types from '../utils/types';\nimport { createRelation } from './relations';\nimport type { Attribute, Model } from '../types';\nimport type { ForeignKey, Index } from '../schema/types';\nimport type { Action, SubscriberFn } from '../lifecycles';\n\nexport interface Meta extends Model {\n columnToAttribute: Record<string, string>;\n indexes: Index[];\n foreignKeys: ForeignKey[];\n lifecycles: Partial<Record<Action, SubscriberFn>>;\n}\n\nexport class Metadata extends Map<string, Meta> {\n // TODO: we expose the global identifiers in this way so that in the future we can instantiate our own\n // However, it should NOT be done until all the methods used by metadata can be part of this metadata object\n // and access this one; currently they all access the global identifiers directly.\n get identifiers() {\n return identifiers;\n }\n\n get(key: string): Meta {\n if (!super.has(key)) {\n throw new Error(`Metadata for \"${key}\" not found`);\n }\n\n return super.get(key) as Meta;\n }\n\n add(meta: Meta) {\n return this.set(meta.uid, meta);\n }\n\n /**\n * Validate the DB metadata, throwing an error if a duplicate DB table name is detected\n */\n validate() {\n const seenTables = new Map();\n for (const meta of this.values()) {\n if (seenTables.get(meta.tableName)) {\n throw new Error(\n `DB table \"${meta.tableName}\" already exists. Change the collectionName of the related content type.`\n );\n }\n seenTables.set(meta.tableName, true);\n }\n }\n\n loadModels(models: Model[]) {\n // init pass\n for (const model of cloneDeep(models ?? [])) {\n const tableName = identifiers.getTableName(model.tableName);\n this.add({\n ...model,\n tableName,\n attributes: {\n ...model.attributes,\n },\n lifecycles: model.lifecycles ?? {},\n indexes: model.indexes ?? [],\n foreignKeys: model.foreignKeys ?? [],\n columnToAttribute: {},\n });\n }\n\n // build compos / relations\n for (const meta of this.values()) {\n for (const [attributeName, attribute] of Object.entries(meta.attributes)) {\n try {\n if (attribute.unstable_virtual) {\n continue;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n createRelation(attributeName, attribute, meta, this);\n continue;\n }\n\n createAttribute(attributeName, attribute);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(\n `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`\n );\n }\n }\n }\n }\n\n for (const meta of this.values()) {\n const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {\n const attribute = meta.attributes[key];\n if ('columnName' in attribute) {\n return Object.assign(acc, { [attribute.columnName || key]: key });\n }\n\n return Object.assign(acc, { [key]: key });\n }, {});\n\n meta.columnToAttribute = columnToAttribute;\n }\n\n this.validate();\n }\n}\n\nconst createAttribute = (attributeName: string, attribute: Attribute) => {\n // if the attribute has already set its own column name, use that\n // this will prevent us from shortening a name twice\n if ('columnName' in attribute && attribute.columnName) {\n return;\n }\n\n const columnName = identifiers.getColumnName(snakeCase(attributeName));\n\n Object.assign(attribute, { columnName });\n};\n"],"names":["Metadata","Map","identifiers","get","key","has","Error","add","meta","set","uid","validate","seenTables","values","tableName","loadModels","models","model","cloneDeep","getTableName","attributes","lifecycles","indexes","foreignKeys","columnToAttribute","attributeName","attribute","Object","entries","unstable_virtual","types","createRelation","createAttribute","error","singularName","message","keys","reduce","acc","assign","columnName","getColumnName","snakeCase"],"mappings":"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"}
1
+ {"version":3,"file":"metadata.mjs","sources":["../../src/metadata/metadata.ts"],"sourcesContent":["import { cloneDeep, snakeCase } from 'lodash/fp';\nimport { identifiers } from '../utils/identifiers';\nimport * as types from '../utils/types';\nimport { createRelation } from './relations';\nimport type { Attribute, Model } from '../types';\nimport type { ForeignKey, Index } from '../schema/types';\nimport type { Action, SubscriberFn } from '../lifecycles';\n\nexport interface Meta extends Model {\n columnToAttribute: Record<string, string>;\n indexes: Index[];\n foreignKeys: ForeignKey[];\n lifecycles: Partial<Record<Action, SubscriberFn>>;\n}\n\nexport class Metadata extends Map<string, Meta> {\n // TODO: we expose the global identifiers in this way so that in the future we can instantiate our own\n // However, it should NOT be done until all the methods used by metadata can be part of this metadata object\n // and access this one; currently they all access the global identifiers directly.\n get identifiers() {\n return identifiers;\n }\n\n get(key: string): Meta {\n if (!super.has(key)) {\n throw new Error(`Metadata for \"${key}\" not found`);\n }\n\n return super.get(key) as Meta;\n }\n\n add(meta: Meta) {\n return this.set(meta.uid, meta);\n }\n\n /**\n * Validate the DB metadata, throwing an error if a duplicate DB table name is detected\n */\n validate() {\n const seenTables = new Map();\n for (const meta of this.values()) {\n if (seenTables.get(meta.tableName)) {\n throw new Error(\n `DB table \"${meta.tableName}\" already exists. Change the collectionName of the related content type.`\n );\n }\n seenTables.set(meta.tableName, true);\n }\n }\n\n loadModels(models: Model[]) {\n // init pass\n for (const model of cloneDeep(models ?? [])) {\n const tableName = identifiers.getTableName(model.tableName);\n this.add({\n ...model,\n tableName,\n attributes: {\n ...model.attributes,\n },\n lifecycles: model.lifecycles ?? {},\n indexes: model.indexes ?? [],\n foreignKeys: model.foreignKeys ?? [],\n columnToAttribute: {},\n });\n }\n\n // build compos / relations\n for (const meta of this.values()) {\n for (const [attributeName, attribute] of Object.entries(meta.attributes)) {\n try {\n if (attribute.unstable_virtual) {\n continue;\n }\n\n if (types.isRelationalAttribute(attribute)) {\n createRelation(attributeName, attribute, meta, this);\n continue;\n }\n\n createAttribute(attributeName, attribute);\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(\n `Error on attribute ${attributeName} in model ${meta.singularName}(${meta.uid}): ${error.message}`\n );\n }\n }\n }\n }\n\n for (const meta of this.values()) {\n const columnToAttribute = Object.keys(meta.attributes).reduce((acc, key) => {\n const attribute = meta.attributes[key];\n if ('columnName' in attribute) {\n return Object.assign(acc, { [attribute.columnName || key]: key });\n }\n\n return Object.assign(acc, { [key]: key });\n }, {});\n\n meta.columnToAttribute = columnToAttribute;\n }\n\n this.validate();\n }\n}\n\nconst createAttribute = (attributeName: string, attribute: Attribute) => {\n // if the attribute has already set its own column name, use that\n // this will prevent us from shortening a name twice\n if ('columnName' in attribute && attribute.columnName) {\n return;\n }\n\n const columnName = identifiers.getColumnName(snakeCase(attributeName));\n\n Object.assign(attribute, { columnName });\n};\n"],"names":["Metadata","Map","identifiers","get","key","has","Error","add","meta","set","uid","validate","seenTables","values","tableName","loadModels","models","model","cloneDeep","getTableName","attributes","lifecycles","indexes","foreignKeys","columnToAttribute","attributeName","attribute","Object","entries","unstable_virtual","types","createRelation","createAttribute","error","singularName","message","keys","reduce","acc","assign","columnName","getColumnName","snakeCase"],"mappings":"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"}