@rvoh/dream 2.5.4 → 2.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/cjs/src/Dream.js +4 -1
  2. package/dist/cjs/src/decorators/field/sortable/hooks/beforeSortableSave.js +4 -4
  3. package/dist/cjs/src/dream/DreamClassTransactionBuilder.js +1 -0
  4. package/dist/cjs/src/dream/internal/findOrCreateBy.js +3 -2
  5. package/dist/cjs/src/dream/internal/reload.js +1 -0
  6. package/dist/cjs/src/dream/internal/similarity/SimilarityBuilder.js +4 -1
  7. package/dist/cjs/src/utils/datetime/DateTime.js +3 -0
  8. package/dist/esm/src/Dream.js +4 -1
  9. package/dist/esm/src/decorators/field/sortable/hooks/beforeSortableSave.js +4 -4
  10. package/dist/esm/src/dream/DreamClassTransactionBuilder.js +1 -0
  11. package/dist/esm/src/dream/internal/findOrCreateBy.js +3 -2
  12. package/dist/esm/src/dream/internal/reload.js +1 -0
  13. package/dist/esm/src/dream/internal/similarity/SimilarityBuilder.js +4 -1
  14. package/dist/esm/src/utils/datetime/DateTime.js +3 -0
  15. package/dist/types/src/Dream.d.ts +2 -0
  16. package/dist/types/src/dream/DreamClassTransactionBuilder.d.ts +1 -0
  17. package/dist/types/src/types/dream.d.ts +1 -0
  18. package/dist/types/src/types/dream.ts +1 -0
  19. package/docs/classes/db.DreamMigrationHelpers.html +9 -9
  20. package/docs/classes/db.KyselyQueryDriver.html +32 -32
  21. package/docs/classes/db.PostgresQueryDriver.html +33 -33
  22. package/docs/classes/db.QueryDriverBase.html +31 -31
  23. package/docs/classes/errors.CheckConstraintViolation.html +3 -3
  24. package/docs/classes/errors.ColumnOverflow.html +3 -3
  25. package/docs/classes/errors.CreateOrFindByFailedToCreateAndFind.html +3 -3
  26. package/docs/classes/errors.DataIncompatibleWithDatabaseField.html +3 -3
  27. package/docs/classes/errors.DataTypeColumnTypeMismatch.html +3 -3
  28. package/docs/classes/errors.GlobalNameNotSet.html +3 -3
  29. package/docs/classes/errors.InvalidCalendarDate.html +2 -2
  30. package/docs/classes/errors.InvalidClockTime.html +2 -2
  31. package/docs/classes/errors.InvalidClockTimeTz.html +2 -2
  32. package/docs/classes/errors.InvalidDateTime.html +2 -2
  33. package/docs/classes/errors.MissingSerializersDefinition.html +3 -3
  34. package/docs/classes/errors.NonLoadedAssociation.html +3 -3
  35. package/docs/classes/errors.NotNullViolation.html +3 -3
  36. package/docs/classes/errors.RecordNotFound.html +3 -3
  37. package/docs/classes/errors.ValidationError.html +3 -3
  38. package/docs/classes/index.CalendarDate.html +33 -33
  39. package/docs/classes/index.ClockTime.html +32 -32
  40. package/docs/classes/index.ClockTimeTz.html +35 -35
  41. package/docs/classes/index.DateTime.html +86 -86
  42. package/docs/classes/index.Decorators.html +19 -19
  43. package/docs/classes/index.Dream.html +120 -118
  44. package/docs/classes/index.DreamApp.html +5 -5
  45. package/docs/classes/index.DreamTransaction.html +2 -2
  46. package/docs/classes/index.Env.html +2 -2
  47. package/docs/classes/index.Query.html +56 -56
  48. package/docs/classes/system.CliFileWriter.html +4 -4
  49. package/docs/classes/system.DreamBin.html +2 -2
  50. package/docs/classes/system.DreamCLI.html +6 -6
  51. package/docs/classes/system.DreamImporter.html +2 -2
  52. package/docs/classes/system.DreamLogos.html +2 -2
  53. package/docs/classes/system.DreamSerializerBuilder.html +11 -11
  54. package/docs/classes/system.ObjectSerializerBuilder.html +8 -8
  55. package/docs/classes/system.PathHelpers.html +3 -3
  56. package/docs/classes/utils.Encrypt.html +2 -2
  57. package/docs/classes/utils.Range.html +2 -2
  58. package/docs/functions/db.closeAllDbConnections.html +1 -1
  59. package/docs/functions/db.dreamDbConnections.html +1 -1
  60. package/docs/functions/db.untypedDb.html +1 -1
  61. package/docs/functions/db.validateColumn.html +1 -1
  62. package/docs/functions/db.validateTable.html +1 -1
  63. package/docs/functions/errors.pgErrorType.html +1 -1
  64. package/docs/functions/index.DreamSerializer.html +1 -1
  65. package/docs/functions/index.ObjectSerializer.html +1 -1
  66. package/docs/functions/index.ReplicaSafe.html +1 -1
  67. package/docs/functions/index.STI.html +1 -1
  68. package/docs/functions/index.SoftDelete.html +1 -1
  69. package/docs/functions/utils.camelize.html +1 -1
  70. package/docs/functions/utils.capitalize.html +1 -1
  71. package/docs/functions/utils.cloneDeepSafe.html +1 -1
  72. package/docs/functions/utils.compact.html +1 -1
  73. package/docs/functions/utils.groupBy.html +1 -1
  74. package/docs/functions/utils.hyphenize.html +1 -1
  75. package/docs/functions/utils.intersection.html +1 -1
  76. package/docs/functions/utils.isEmpty.html +1 -1
  77. package/docs/functions/utils.normalizeUnicode.html +1 -1
  78. package/docs/functions/utils.pascalize.html +1 -1
  79. package/docs/functions/utils.percent.html +1 -1
  80. package/docs/functions/utils.range.html +1 -1
  81. package/docs/functions/utils.round.html +1 -1
  82. package/docs/functions/utils.sanitizeString.html +1 -1
  83. package/docs/functions/utils.snakeify.html +1 -1
  84. package/docs/functions/utils.sort.html +1 -1
  85. package/docs/functions/utils.sortBy.html +1 -1
  86. package/docs/functions/utils.sortObjectByKey.html +1 -1
  87. package/docs/functions/utils.sortObjectByValue.html +1 -1
  88. package/docs/functions/utils.uncapitalize.html +1 -1
  89. package/docs/functions/utils.uniq.html +1 -1
  90. package/docs/interfaces/openapi.OpenapiDescription.html +2 -2
  91. package/docs/interfaces/openapi.OpenapiSchemaProperties.html +1 -1
  92. package/docs/interfaces/openapi.OpenapiSchemaPropertiesShorthand.html +1 -1
  93. package/docs/interfaces/openapi.OpenapiTypeFieldObject.html +1 -1
  94. package/docs/interfaces/types.BelongsToStatement.html +2 -2
  95. package/docs/interfaces/types.DecoratorContext.html +2 -2
  96. package/docs/interfaces/types.DreamAppInitOptions.html +2 -2
  97. package/docs/interfaces/types.DreamAppOpts.html +2 -2
  98. package/docs/interfaces/types.DurationObject.html +2 -2
  99. package/docs/interfaces/types.EncryptOptions.html +2 -2
  100. package/docs/interfaces/types.InternalAnyTypedSerializerRendersMany.html +2 -2
  101. package/docs/interfaces/types.InternalAnyTypedSerializerRendersOne.html +2 -2
  102. package/docs/interfaces/types.SerializerRendererOpts.html +2 -2
  103. package/docs/types/openapi.CommonOpenapiSchemaObjectFields.html +1 -1
  104. package/docs/types/openapi.OpenapiAllTypes.html +1 -1
  105. package/docs/types/openapi.OpenapiFormats.html +1 -1
  106. package/docs/types/openapi.OpenapiNumberFormats.html +1 -1
  107. package/docs/types/openapi.OpenapiPrimitiveBaseTypes.html +1 -1
  108. package/docs/types/openapi.OpenapiPrimitiveTypes.html +1 -1
  109. package/docs/types/openapi.OpenapiSchemaArray.html +1 -1
  110. package/docs/types/openapi.OpenapiSchemaArrayShorthand.html +1 -1
  111. package/docs/types/openapi.OpenapiSchemaBase.html +1 -1
  112. package/docs/types/openapi.OpenapiSchemaBody.html +1 -1
  113. package/docs/types/openapi.OpenapiSchemaBodyShorthand.html +1 -1
  114. package/docs/types/openapi.OpenapiSchemaCommonFields.html +1 -1
  115. package/docs/types/openapi.OpenapiSchemaExpressionAllOf.html +2 -2
  116. package/docs/types/openapi.OpenapiSchemaExpressionAnyOf.html +2 -2
  117. package/docs/types/openapi.OpenapiSchemaExpressionOneOf.html +2 -2
  118. package/docs/types/openapi.OpenapiSchemaExpressionRef.html +2 -2
  119. package/docs/types/openapi.OpenapiSchemaExpressionRefSchemaShorthand.html +2 -2
  120. package/docs/types/openapi.OpenapiSchemaInteger.html +1 -1
  121. package/docs/types/openapi.OpenapiSchemaNull.html +2 -2
  122. package/docs/types/openapi.OpenapiSchemaNumber.html +1 -1
  123. package/docs/types/openapi.OpenapiSchemaObject.html +1 -1
  124. package/docs/types/openapi.OpenapiSchemaObjectAllOf.html +1 -1
  125. package/docs/types/openapi.OpenapiSchemaObjectAllOfShorthand.html +1 -1
  126. package/docs/types/openapi.OpenapiSchemaObjectAnyOf.html +1 -1
  127. package/docs/types/openapi.OpenapiSchemaObjectAnyOfShorthand.html +1 -1
  128. package/docs/types/openapi.OpenapiSchemaObjectBase.html +1 -1
  129. package/docs/types/openapi.OpenapiSchemaObjectBaseShorthand.html +1 -1
  130. package/docs/types/openapi.OpenapiSchemaObjectOneOf.html +1 -1
  131. package/docs/types/openapi.OpenapiSchemaObjectOneOfShorthand.html +1 -1
  132. package/docs/types/openapi.OpenapiSchemaObjectShorthand.html +1 -1
  133. package/docs/types/openapi.OpenapiSchemaPrimitiveGeneric.html +1 -1
  134. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAllOf.html +2 -2
  135. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAnyOf.html +2 -2
  136. package/docs/types/openapi.OpenapiSchemaShorthandExpressionOneOf.html +2 -2
  137. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializableRef.html +2 -2
  138. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializerRef.html +2 -2
  139. package/docs/types/openapi.OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
  140. package/docs/types/openapi.OpenapiSchemaString.html +1 -1
  141. package/docs/types/openapi.OpenapiShorthandAllTypes.html +1 -1
  142. package/docs/types/openapi.OpenapiShorthandPrimitiveBaseTypes.html +1 -1
  143. package/docs/types/openapi.OpenapiShorthandPrimitiveTypes.html +1 -1
  144. package/docs/types/openapi.OpenapiTypeField.html +1 -1
  145. package/docs/types/system.DreamAppAllowedPackageManagersEnum.html +1 -1
  146. package/docs/types/types.CalendarDateDurationUnit.html +1 -1
  147. package/docs/types/types.CalendarDateObject.html +1 -1
  148. package/docs/types/types.Camelized.html +1 -1
  149. package/docs/types/types.ClockTimeObject.html +1 -1
  150. package/docs/types/types.DbConnectionType.html +1 -1
  151. package/docs/types/types.DbTypes.html +1 -1
  152. package/docs/types/types.DreamAssociationMetadata.html +1 -1
  153. package/docs/types/types.DreamAttributes.html +1 -1
  154. package/docs/types/types.DreamClassAssociationAndStatement.html +1 -1
  155. package/docs/types/types.DreamClassColumn.html +1 -1
  156. package/docs/types/types.DreamColumn.html +1 -1
  157. package/docs/types/types.DreamColumnNames.html +1 -1
  158. package/docs/types/types.DreamLogLevel.html +1 -1
  159. package/docs/types/types.DreamLogger.html +2 -2
  160. package/docs/types/types.DreamModelSerializerType.html +1 -1
  161. package/docs/types/types.DreamOrViewModelClassSerializerKey.html +1 -1
  162. package/docs/types/types.DreamOrViewModelSerializerKey.html +1 -1
  163. package/docs/types/types.DreamParamSafeAttributes.html +1 -1
  164. package/docs/types/types.DreamParamSafeColumnNames.html +1 -1
  165. package/docs/types/types.DreamSerializable.html +1 -1
  166. package/docs/types/types.DreamSerializableArray.html +1 -1
  167. package/docs/types/types.DreamSerializerKey.html +1 -1
  168. package/docs/types/types.DreamSerializers.html +1 -1
  169. package/docs/types/types.DreamVirtualColumns.html +1 -1
  170. package/docs/types/types.DurationUnit.html +1 -1
  171. package/docs/types/types.EncryptAlgorithm.html +1 -1
  172. package/docs/types/types.HasManyStatement.html +1 -1
  173. package/docs/types/types.HasOneStatement.html +1 -1
  174. package/docs/types/types.Hyphenized.html +1 -1
  175. package/docs/types/types.Pascalized.html +1 -1
  176. package/docs/types/types.PrimaryKeyType.html +1 -1
  177. package/docs/types/types.RoundingPrecision.html +1 -1
  178. package/docs/types/types.SerializerCasing.html +1 -1
  179. package/docs/types/types.SimpleObjectSerializerType.html +1 -1
  180. package/docs/types/types.Snakeified.html +1 -1
  181. package/docs/types/types.StrictInterface.html +1 -1
  182. package/docs/types/types.UpdateableAssociationProperties.html +1 -1
  183. package/docs/types/types.UpdateableProperties.html +1 -1
  184. package/docs/types/types.ValidationType.html +1 -1
  185. package/docs/types/types.ViewModel.html +2 -2
  186. package/docs/types/types.ViewModelClass.html +1 -1
  187. package/docs/types/types.WeekdayName.html +1 -1
  188. package/docs/types/types.WhereStatementForDream.html +1 -1
  189. package/docs/types/types.WhereStatementForDreamClass.html +1 -1
  190. package/docs/variables/index.DreamConst.html +1 -1
  191. package/docs/variables/index.ops.html +1 -1
  192. package/docs/variables/openapi.openapiPrimitiveTypes.html +1 -1
  193. package/docs/variables/openapi.openapiShorthandPrimitiveTypes.html +1 -1
  194. package/docs/variables/system.DreamAppAllowedPackageManagersEnumValues.html +1 -1
  195. package/docs/variables/system.primaryKeyTypes.html +1 -1
  196. package/package.json +3 -3
@@ -1124,15 +1124,17 @@ export default class Dream {
1124
1124
  * @param attributes - The base attributes to persist, but also the attributes to use to find when create fails
1125
1125
  * @param extraOpts - Additional options
1126
1126
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
1127
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
1127
1128
  * @returns A dream instance
1128
1129
  */
1129
1130
  static async createOrFindBy(attributes, extraOpts = {}) {
1131
+ const { skipHooks } = extraOpts;
1130
1132
  try {
1131
1133
  const dreamModel = this.new({
1132
1134
  ...attributes,
1133
1135
  ...extraOpts?.createWith,
1134
1136
  });
1135
- await dreamModel.save();
1137
+ await dreamModel.save(skipHooks ? { skipHooks } : undefined);
1136
1138
  return dreamModel;
1137
1139
  }
1138
1140
  catch (err) {
@@ -1365,6 +1367,7 @@ export default class Dream {
1365
1367
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
1366
1368
  * @param extraOpts - Additional options
1367
1369
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
1370
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
1368
1371
  * @returns A dream instance
1369
1372
  */
1370
1373
  static async findOrCreateBy(attributes, extraOpts = {}) {
@@ -32,10 +32,10 @@ export default function beforeSortableSave({ positionField, dream, scope, }) {
32
32
  // it will be updated in an AfterCreateCommit hook to the correct value after saving.
33
33
  dreamAsAny[positionField] = 0;
34
34
  }
35
- else {
36
- // if the dream is saved, set the position field to undefined, which will cause
37
- // the update cycle to ignore the position field. We will proceed to update it in an
38
- // AfterUpdateCommit hook
35
+ else if (dream.willSaveChangeToAttribute(positionField)) {
36
+ // if the dream is saved and the position is being changed, set the position field to
37
+ // undefined, which will cause the update cycle to ignore the position field. We will
38
+ // proceed to update it in an AfterUpdateCommit hook
39
39
  dreamAsAny[positionField] = undefined;
40
40
  }
41
41
  }
@@ -266,6 +266,7 @@ export default class DreamClassTransactionBuilder {
266
266
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
267
267
  * @param extraOpts - Additional options
268
268
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
269
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
269
270
  * @returns A dream instance
270
271
  */
271
272
  async findOrCreateBy(attributes, extraOpts = {}) {
@@ -4,10 +4,11 @@ export default async function findOrCreateBy(dreamClass, txn = null, attributes,
4
4
  .findBy(dreamClass['extractAttributesFromUpdateableProperties'](attributes));
5
5
  if (existingRecord)
6
6
  return existingRecord;
7
+ const { createWith, skipHooks } = extraOpts;
7
8
  const dreamModel = dreamClass.new({
8
9
  ...attributes,
9
- ...extraOpts?.createWith,
10
+ ...createWith,
10
11
  });
11
- await dreamModel.txn(txn).save();
12
+ await dreamModel.txn(txn).save(skipHooks ? { skipHooks } : undefined);
12
13
  return dreamModel;
13
14
  }
@@ -14,5 +14,6 @@ export default async function reload(dream, txn = null) {
14
14
  const reloadedRecord = await query.firstOrFail();
15
15
  dream.setAttributes(reloadedRecord.getAttributes());
16
16
  dream['freezeAttributes']();
17
+ dream['originalAttributes'] = dream.getAttributes();
17
18
  return dream;
18
19
  }
@@ -321,7 +321,10 @@ function removeJoinAndFromObjectHierarchy(obj) {
321
321
  const result = {};
322
322
  for (const key in obj) {
323
323
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
324
- if (isObject(obj[key])) {
324
+ // Only recurse into plain data objects. Class instances (Dream models, DateTime, etc.)
325
+ // may contain circular loaded-association references, which would cause infinite recursion.
326
+ const proto = Object.getPrototypeOf(obj[key]);
327
+ if (isObject(obj[key]) && (proto === Object.prototype || proto === null)) {
325
328
  result[key] = removeJoinAndFromObjectHierarchy(obj[key].and || obj[key]);
326
329
  }
327
330
  else {
@@ -114,6 +114,9 @@ export class DateTime {
114
114
  constructor(luxonDatetime, microseconds = 0) {
115
115
  this.luxonDatetime = luxonDatetime;
116
116
  this._microseconds = microseconds;
117
+ // Make lazy cache properties non-enumerable so they don't interfere with deep equality checks
118
+ Object.defineProperty(this, '_toSQL', { enumerable: false, writable: true, configurable: true });
119
+ Object.defineProperty(this, '_valueOf', { enumerable: false, writable: true, configurable: true });
117
120
  }
118
121
  /**
119
122
  * Returns the underlying Luxon DateTime instance.
@@ -1124,15 +1124,17 @@ export default class Dream {
1124
1124
  * @param attributes - The base attributes to persist, but also the attributes to use to find when create fails
1125
1125
  * @param extraOpts - Additional options
1126
1126
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
1127
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
1127
1128
  * @returns A dream instance
1128
1129
  */
1129
1130
  static async createOrFindBy(attributes, extraOpts = {}) {
1131
+ const { skipHooks } = extraOpts;
1130
1132
  try {
1131
1133
  const dreamModel = this.new({
1132
1134
  ...attributes,
1133
1135
  ...extraOpts?.createWith,
1134
1136
  });
1135
- await dreamModel.save();
1137
+ await dreamModel.save(skipHooks ? { skipHooks } : undefined);
1136
1138
  return dreamModel;
1137
1139
  }
1138
1140
  catch (err) {
@@ -1365,6 +1367,7 @@ export default class Dream {
1365
1367
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
1366
1368
  * @param extraOpts - Additional options
1367
1369
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
1370
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
1368
1371
  * @returns A dream instance
1369
1372
  */
1370
1373
  static async findOrCreateBy(attributes, extraOpts = {}) {
@@ -32,10 +32,10 @@ export default function beforeSortableSave({ positionField, dream, scope, }) {
32
32
  // it will be updated in an AfterCreateCommit hook to the correct value after saving.
33
33
  dreamAsAny[positionField] = 0;
34
34
  }
35
- else {
36
- // if the dream is saved, set the position field to undefined, which will cause
37
- // the update cycle to ignore the position field. We will proceed to update it in an
38
- // AfterUpdateCommit hook
35
+ else if (dream.willSaveChangeToAttribute(positionField)) {
36
+ // if the dream is saved and the position is being changed, set the position field to
37
+ // undefined, which will cause the update cycle to ignore the position field. We will
38
+ // proceed to update it in an AfterUpdateCommit hook
39
39
  dreamAsAny[positionField] = undefined;
40
40
  }
41
41
  }
@@ -266,6 +266,7 @@ export default class DreamClassTransactionBuilder {
266
266
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
267
267
  * @param extraOpts - Additional options
268
268
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
269
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
269
270
  * @returns A dream instance
270
271
  */
271
272
  async findOrCreateBy(attributes, extraOpts = {}) {
@@ -4,10 +4,11 @@ export default async function findOrCreateBy(dreamClass, txn = null, attributes,
4
4
  .findBy(dreamClass['extractAttributesFromUpdateableProperties'](attributes));
5
5
  if (existingRecord)
6
6
  return existingRecord;
7
+ const { createWith, skipHooks } = extraOpts;
7
8
  const dreamModel = dreamClass.new({
8
9
  ...attributes,
9
- ...extraOpts?.createWith,
10
+ ...createWith,
10
11
  });
11
- await dreamModel.txn(txn).save();
12
+ await dreamModel.txn(txn).save(skipHooks ? { skipHooks } : undefined);
12
13
  return dreamModel;
13
14
  }
@@ -14,5 +14,6 @@ export default async function reload(dream, txn = null) {
14
14
  const reloadedRecord = await query.firstOrFail();
15
15
  dream.setAttributes(reloadedRecord.getAttributes());
16
16
  dream['freezeAttributes']();
17
+ dream['originalAttributes'] = dream.getAttributes();
17
18
  return dream;
18
19
  }
@@ -321,7 +321,10 @@ function removeJoinAndFromObjectHierarchy(obj) {
321
321
  const result = {};
322
322
  for (const key in obj) {
323
323
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
324
- if (isObject(obj[key])) {
324
+ // Only recurse into plain data objects. Class instances (Dream models, DateTime, etc.)
325
+ // may contain circular loaded-association references, which would cause infinite recursion.
326
+ const proto = Object.getPrototypeOf(obj[key]);
327
+ if (isObject(obj[key]) && (proto === Object.prototype || proto === null)) {
325
328
  result[key] = removeJoinAndFromObjectHierarchy(obj[key].and || obj[key]);
326
329
  }
327
330
  else {
@@ -114,6 +114,9 @@ export class DateTime {
114
114
  constructor(luxonDatetime, microseconds = 0) {
115
115
  this.luxonDatetime = luxonDatetime;
116
116
  this._microseconds = microseconds;
117
+ // Make lazy cache properties non-enumerable so they don't interfere with deep equality checks
118
+ Object.defineProperty(this, '_toSQL', { enumerable: false, writable: true, configurable: true });
119
+ Object.defineProperty(this, '_valueOf', { enumerable: false, writable: true, configurable: true });
117
120
  }
118
121
  /**
119
122
  * Returns the underlying Luxon DateTime instance.
@@ -809,6 +809,7 @@ export default class Dream {
809
809
  * @param attributes - The base attributes to persist, but also the attributes to use to find when create fails
810
810
  * @param extraOpts - Additional options
811
811
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
812
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
812
813
  * @returns A dream instance
813
814
  */
814
815
  static createOrFindBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: CreateOrFindByExtraOpts<T>): Promise<InstanceType<T>>;
@@ -994,6 +995,7 @@ export default class Dream {
994
995
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
995
996
  * @param extraOpts - Additional options
996
997
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
998
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
997
999
  * @returns A dream instance
998
1000
  */
999
1001
  static findOrCreateBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: CreateOrFindByExtraOpts<T>): Promise<InstanceType<T>>;
@@ -243,6 +243,7 @@ export default class DreamClassTransactionBuilder<DreamClass extends typeof Drea
243
243
  * @param attributes - The base attributes for finding, but also the attributes to use when creating
244
244
  * @param extraOpts - Additional options
245
245
  * @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
246
+ * @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
246
247
  * @returns A dream instance
247
248
  */
248
249
  findOrCreateBy<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, attributes: UpdateablePropertiesForClass<DreamClass>, extraOpts?: CreateOrFindByExtraOpts<DreamClass>): Promise<InstanceType<DreamClass>>;
@@ -130,6 +130,7 @@ export type AttributeKeys<I extends Dream, TableName extends AssociationTableNam
130
130
  export type UpdateableProperties<I extends Dream, TableName extends AssociationTableNames<I['DB'], I['schema']> & I['table'] = I['table'], VirtualColumns = DreamVirtualColumns<I>> = Partial<Updateable<I['DB'][TableName]> & (VirtualColumns extends readonly any[] ? Record<VirtualColumns[number], any> : object) & (AssociatedModelParam<I> extends never ? object : AssociatedModelParam<I>)>;
131
131
  export interface CreateOrFindByExtraOpts<T extends typeof Dream> {
132
132
  createWith?: UpdateablePropertiesForClass<T>;
133
+ skipHooks?: boolean;
133
134
  }
134
135
  export interface UpdateOrCreateByExtraOpts<T extends typeof Dream> {
135
136
  with?: UpdateablePropertiesForClass<T>;
@@ -522,6 +522,7 @@ export type UpdateableProperties<
522
522
 
523
523
  export interface CreateOrFindByExtraOpts<T extends typeof Dream> {
524
524
  createWith?: UpdateablePropertiesForClass<T>
525
+ skipHooks?: boolean
525
526
  }
526
527
 
527
528
  export interface UpdateOrCreateByExtraOpts<T extends typeof Dream> {
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>DreamMigrationHelpers | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@rvoh/dream</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/db.html">db</a></li><li><a href="" aria-current="page">DreamMigrationHelpers</a></li></ul><h1>Class DreamMigrationHelpers</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L3">src/db/migration-helpers/DreamMigrationHelpers.ts:3</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>DreamMigrationHelpers | @rvoh/dream</title><meta name="description" content="Documentation for @rvoh/dream"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@rvoh/dream</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/db.html">db</a></li><li><a href="" aria-current="page">DreamMigrationHelpers</a></li></ul><h1>Class DreamMigrationHelpers</h1></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L3">src/db/migration-helpers/DreamMigrationHelpers.ts:3</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
2
2
  </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="#adddeferrableuniqueconstraint" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Deferrable<wbr/>Unique<wbr/>Constraint</span></a>
3
3
  <a href="#addenumvalue" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Enum<wbr/>Value</span></a>
4
4
  <a href="#createextension" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create<wbr/>Extension</span></a>
@@ -16,13 +16,13 @@ indexes.</p>
16
16
  </div></li><li><span><span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">columns</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span></span><div class="tsd-comment tsd-typography"><p>Configuration options</p>
17
17
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span class="tsd-kind-property">columns</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5><div class="tsd-comment tsd-typography"><p>The names of the columns to include in the constraint</p>
18
18
  </div></li><li class="tsd-parameter"><h5><span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><p>The name of the table</p>
19
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L41">src/db/migration-helpers/DreamMigrationHelpers.ts:41</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="addenumvalue"><code class="tsd-tag">Static</code><span>add<wbr/>Enum<wbr/>Value</span><a href="#addenumvalue" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="addenumvalue-1"><span class="tsd-kind-call-signature">addEnumValue</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">__namedParameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">AddValueToEnumOpts</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#addenumvalue-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Add a value to an enum.</p>
19
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L41">src/db/migration-helpers/DreamMigrationHelpers.ts:41</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="addenumvalue"><code class="tsd-tag">Static</code><span>add<wbr/>Enum<wbr/>Value</span><a href="#addenumvalue" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="addenumvalue-1"><span class="tsd-kind-call-signature">addEnumValue</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">__namedParameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">AddValueToEnumOpts</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#addenumvalue-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Add a value to an enum.</p>
20
20
  <p>Note that this always includes &quot;IF NOT EXISTS&quot;, so is safe to re-run multiple times.</p>
21
21
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">db</span>: <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></span><div class="tsd-comment tsd-typography"><p>The Kysely database object passed into the migration up/down function</p>
22
22
  </div></li><li><span><span class="tsd-kind-parameter">__namedParameters</span>: <span class="tsd-signature-type">AddValueToEnumOpts</span></span><div class="tsd-comment tsd-typography"><p>The options for adding the enum value</p>
23
23
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span>enumName</span></h5><div class="tsd-comment tsd-typography"><p>The name of the enum to modify</p>
24
24
  </div></li><li class="tsd-parameter"><h5><span>value</span></h5><div class="tsd-comment tsd-typography"><p>The name of the value to add to the enum</p>
25
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L71">src/db/migration-helpers/DreamMigrationHelpers.ts:71</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="createextension"><code class="tsd-tag">Static</code><span>create<wbr/>Extension</span><a href="#createextension" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="createextension-1"><span class="tsd-kind-call-signature">createExtension</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">extensionName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">ifNotExists</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">publicSchema</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#createextension-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Create a database extension.</p>
25
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L71">src/db/migration-helpers/DreamMigrationHelpers.ts:71</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="createextension"><code class="tsd-tag">Static</code><span>create<wbr/>Extension</span><a href="#createextension" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="createextension-1"><span class="tsd-kind-call-signature">createExtension</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">extensionName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">ifNotExists</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">publicSchema</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#createextension-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Create a database extension.</p>
26
26
  <pre><code><span class="hl-1"> </span><span class="hl-7">// Add the case insensitive extension</span><br/><span class="hl-1"> </span><span class="hl-3">await</span><span class="hl-1"> </span><span class="hl-4">DreamMigrationHelpers</span><span class="hl-1">.</span><span class="hl-5">createExtension</span><span class="hl-1">(</span><span class="hl-4">db</span><span class="hl-1">, </span><span class="hl-6">&#39;citext&#39;</span><span class="hl-1">)</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// Add the pg trigram extension</span><br/><span class="hl-1"> </span><span class="hl-3">await</span><span class="hl-1"> </span><span class="hl-4">DreamMigrationHelpers</span><span class="hl-1">.</span><span class="hl-5">createExtension</span><span class="hl-1">(</span><span class="hl-4">db</span><span class="hl-1">, </span><span class="hl-6">&#39;pg_trgm&#39;</span><span class="hl-1">)</span>
27
27
  </code><button>Copy</button></pre>
28
28
 
@@ -31,26 +31,26 @@ indexes.</p>
31
31
  </div></li><li><span><span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">ifNotExists</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">publicSchema</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol"> = {}</span></span><div class="tsd-comment tsd-typography"><p>Configuration options</p>
32
32
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><code class="tsd-tag">Optional</code><span class="tsd-kind-property">ifNotExists</span><span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span></h5><div class="tsd-comment tsd-typography"><p>Only add the extension if it doesn't already exist</p>
33
33
  </div></li><li class="tsd-parameter"><h5><code class="tsd-tag">Optional</code><span class="tsd-kind-property">publicSchema</span><span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span></h5><div class="tsd-comment tsd-typography"><p>Create using the public schema</p>
34
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L93">src/db/migration-helpers/DreamMigrationHelpers.ts:93</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="createginindex"><code class="tsd-tag">Static</code><span>create<wbr/>Gin<wbr/>Index</span><a href="#createginindex" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="createginindex-1"><span class="tsd-kind-call-signature">createGinIndex</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">indexName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">column</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#createginindex-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Create a gin index</p>
34
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L93">src/db/migration-helpers/DreamMigrationHelpers.ts:93</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="createginindex"><code class="tsd-tag">Static</code><span>create<wbr/>Gin<wbr/>Index</span><a href="#createginindex" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="createginindex-1"><span class="tsd-kind-call-signature">createGinIndex</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">indexName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">column</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#createginindex-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Create a gin index</p>
35
35
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">db</span>: <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></span><div class="tsd-comment tsd-typography"><p>The Kysely database object passed into the migration up/down function</p>
36
36
  </div></li><li><span><span class="tsd-kind-parameter">indexName</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>The name of the constraint to create</p>
37
37
  </div></li><li><span><span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">column</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span></span><div class="tsd-comment tsd-typography"><p>Configuration options</p>
38
38
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span class="tsd-kind-property">column</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><p>The name of the column to index</p>
39
39
  </div></li><li class="tsd-parameter"><h5><span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><p>The name of the table</p>
40
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L115">src/db/migration-helpers/DreamMigrationHelpers.ts:115</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="dropconstraint"><code class="tsd-tag">Static</code><span>drop<wbr/>Constraint</span><a href="#dropconstraint" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="dropconstraint-1"><span class="tsd-kind-call-signature">dropConstraint</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">constraintName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#dropconstraint-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Drop a constraint</p>
40
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L115">src/db/migration-helpers/DreamMigrationHelpers.ts:115</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="dropconstraint"><code class="tsd-tag">Static</code><span>drop<wbr/>Constraint</span><a href="#dropconstraint" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="dropconstraint-1"><span class="tsd-kind-call-signature">dropConstraint</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">constraintName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">options</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#dropconstraint-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Drop a constraint</p>
41
41
  <p>Note that this always includes &quot;IF NOT EXISTS&quot;, so is safe to re-run multiple times.</p>
42
42
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">db</span>: <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></span><div class="tsd-comment tsd-typography"><p>The Kysely database object passed into the migration up/down function</p>
43
43
  </div></li><li><span><span class="tsd-kind-parameter">constraintName</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>The name of the constraint to create</p>
44
44
  </div></li><li><span><span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span></span><div class="tsd-comment tsd-typography"><p>Configuration options</p>
45
45
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span class="tsd-kind-property">table</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5><div class="tsd-comment tsd-typography"><p>The name of the table</p>
46
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L138">src/db/migration-helpers/DreamMigrationHelpers.ts:138</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="dropenumvalue"><code class="tsd-tag">Static</code><span>drop<wbr/>Enum<wbr/>Value</span><a href="#dropenumvalue" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="dropenumvalue-1"><span class="tsd-kind-call-signature">dropEnumValue</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">__namedParameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">DropValueFromEnumOpts</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#dropenumvalue-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Drop a value from an enum and replace it with a different enum already
46
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L138">src/db/migration-helpers/DreamMigrationHelpers.ts:138</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="dropenumvalue"><code class="tsd-tag">Static</code><span>drop<wbr/>Enum<wbr/>Value</span><a href="#dropenumvalue" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="dropenumvalue-1"><span class="tsd-kind-call-signature">dropEnumValue</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">__namedParameters</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">DropValueFromEnumOpts</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#dropenumvalue-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Drop a value from an enum and replace it with a different enum already
47
47
  present in the enum type (or optionally remove it from array columns).</p>
48
48
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">db</span>: <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></span><div class="tsd-comment tsd-typography"><p>The Kysely database object passed into the migration up/down function</p>
49
49
  </div></li><li><span><span class="tsd-kind-parameter">__namedParameters</span>: <span class="tsd-signature-type">DropValueFromEnumOpts</span></span><div class="tsd-comment tsd-typography"><p>The options for dropping the enum value</p>
50
50
  </div><ul class="tsd-parameters"><li class="tsd-parameter"><h5><span>enumName</span></h5><div class="tsd-comment tsd-typography"><p>The name of the enum to modify</p>
51
51
  </div></li><li class="tsd-parameter"><h5><span>value</span></h5><div class="tsd-comment tsd-typography"><p>The name of the value to drop from the enum</p>
52
52
  </div></li><li class="tsd-parameter"><h5><span>replacements</span></h5><div class="tsd-comment tsd-typography"><p>Details about which table and column to change and which value to replace the dropped value with (or remove it if the column is an array)</p>
53
- </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L191">src/db/migration-helpers/DreamMigrationHelpers.ts:191</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="newtransaction"><code class="tsd-tag">Static</code><span>new<wbr/>Transaction</span><a href="#newtransaction" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="newtransaction-1"><span class="tsd-kind-call-signature">newTransaction</span><span class="tsd-signature-symbol">()</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span><a href="#newtransaction-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Forces a new transaction boundary in migration execution.</p>
53
+ </div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L191">src/db/migration-helpers/DreamMigrationHelpers.ts:191</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="newtransaction"><code class="tsd-tag">Static</code><span>new<wbr/>Transaction</span><a href="#newtransaction" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="newtransaction-1"><span class="tsd-kind-call-signature">newTransaction</span><span class="tsd-signature-symbol">()</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span><a href="#newtransaction-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Forces a new transaction boundary in migration execution.</p>
54
54
  <p>When called in a migration file, this method ensures that any existing transaction
55
55
  is committed before this migration runs, and a new transaction is started before the
56
56
  migration in this file. This is essential for migrations that depend on previously
@@ -61,7 +61,7 @@ enum values to be committed to the database first.</p>
61
61
  <pre><code class="ts"><span class="hl-7">// first migration file: Add enum value</span><br/><span class="hl-3">export</span><span class="hl-1"> </span><span class="hl-0">async</span><span class="hl-1"> </span><span class="hl-0">function</span><span class="hl-1"> </span><span class="hl-5">up</span><span class="hl-1">(</span><span class="hl-4">db</span><span class="hl-1">: </span><span class="hl-9">Kysely</span><span class="hl-1">&lt;</span><span class="hl-9">any</span><span class="hl-1">&gt;): </span><span class="hl-9">Promise</span><span class="hl-1">&lt;</span><span class="hl-9">void</span><span class="hl-1">&gt; {</span><br/><span class="hl-1"> </span><span class="hl-3">await</span><span class="hl-1"> </span><span class="hl-4">DreamMigrationHelpers</span><span class="hl-1">.</span><span class="hl-5">addEnumValue</span><span class="hl-1">(</span><span class="hl-4">db</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-4">enumName:</span><span class="hl-1"> </span><span class="hl-6">&#39;user_status&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">value:</span><span class="hl-1"> </span><span class="hl-6">&#39;premium&#39;</span><br/><span class="hl-1"> })</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-7">// second migration file: Add check constraint that depends on the enum value</span><br/><span class="hl-3">export</span><span class="hl-1"> </span><span class="hl-0">async</span><span class="hl-1"> </span><span class="hl-0">function</span><span class="hl-1"> </span><span class="hl-5">up</span><span class="hl-1">(</span><span class="hl-4">db</span><span class="hl-1">: </span><span class="hl-9">Kysely</span><span class="hl-1">&lt;</span><span class="hl-9">any</span><span class="hl-1">&gt;): </span><span class="hl-9">Promise</span><span class="hl-1">&lt;</span><span class="hl-9">void</span><span class="hl-1">&gt; {</span><br/><span class="hl-1"> </span><span class="hl-4">DreamMigrationHelpers</span><span class="hl-1">.</span><span class="hl-5">newTransaction</span><span class="hl-1">() </span><span class="hl-7">// Ensure enum value is committed first</span><br/><br/><span class="hl-1"> </span><span class="hl-3">await</span><span class="hl-1"> </span><span class="hl-4">db</span><span class="hl-1">.</span><span class="hl-4">schema</span><br/><span class="hl-1"> .</span><span class="hl-5">alterTable</span><span class="hl-1">(</span><span class="hl-6">&#39;users&#39;</span><span class="hl-1">)</span><br/><span class="hl-1"> .</span><span class="hl-5">addCheckConstraint</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-6">&#39;check_premium_users&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">sql</span><span class="hl-6">`status = &#39;premium&#39; OR credits &lt; 100`</span><br/><span class="hl-1"> )</span><br/><span class="hl-1"> .</span><span class="hl-5">execute</span><span class="hl-1">()</span><br/><span class="hl-1">}</span>
62
62
  </code><button type="button">Copy</button></pre>
63
63
 
64
- </div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L179">src/db/migration-helpers/DreamMigrationHelpers.ts:179</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="renametable"><code class="tsd-tag">Static</code><span>rename<wbr/>Table</span><a href="#renametable" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="renametable-1"><span class="tsd-kind-call-signature">renameTable</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">from</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">to</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#renametable-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Rename a table and its associated primary key sequence.</p>
64
+ </div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L179">src/db/migration-helpers/DreamMigrationHelpers.ts:179</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="renametable"><code class="tsd-tag">Static</code><span>rename<wbr/>Table</span><a href="#renametable" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="renametable-1"><span class="tsd-kind-call-signature">renameTable</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">db</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">from</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span> <span class="tsd-kind-parameter">to</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#renametable-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Rename a table and its associated primary key sequence.</p>
65
65
  <p>This method renames both the table and its primary key sequence to keep them
66
66
  in sync. When PostgreSQL creates a table with a serial or bigserial primary key,
67
67
  it automatically creates a sequence named <code>{tablename}_id_seq</code>. If you only rename
@@ -71,4 +71,4 @@ key column named 'id'.</p>
71
71
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">db</span>: <span class="tsd-signature-type">Kysely</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">&gt;</span></span><div class="tsd-comment tsd-typography"><p>The Kysely database object passed into the migration up/down function</p>
72
72
  </div></li><li><span><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>The current name of the table to rename</p>
73
73
  </div></li><li><span><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>The new name for the table</p>
74
- </div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/d1d955a5eb538b90f18640b3c6277d724868a47b/src/db/migration-helpers/DreamMigrationHelpers.ts#L19">src/db/migration-helpers/DreamMigrationHelpers.ts:19</a></li></ul></aside></div></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#adddeferrableuniqueconstraint"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Deferrable<wbr/>Unique<wbr/>Constraint</span></a><a href="#addenumvalue"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Enum<wbr/>Value</span></a><a href="#createextension"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create<wbr/>Extension</span></a><a href="#createginindex"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create<wbr/>Gin<wbr/>Index</span></a><a href="#dropconstraint"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>drop<wbr/>Constraint</span></a><a href="#dropenumvalue"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>drop<wbr/>Enum<wbr/>Value</span></a><a href="#newtransaction"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>new<wbr/>Transaction</span></a><a href="#renametable"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>rename<wbr/>Table</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@rvoh/dream</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
74
+ </div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/rvohealth/dream/blob/a3927af9e42eb95eb3ecdd383e9ebc51920235ea/src/db/migration-helpers/DreamMigrationHelpers.ts#L19">src/db/migration-helpers/DreamMigrationHelpers.ts:19</a></li></ul></aside></div></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#adddeferrableuniqueconstraint"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Deferrable<wbr/>Unique<wbr/>Constraint</span></a><a href="#addenumvalue"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>add<wbr/>Enum<wbr/>Value</span></a><a href="#createextension"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create<wbr/>Extension</span></a><a href="#createginindex"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>create<wbr/>Gin<wbr/>Index</span></a><a href="#dropconstraint"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>drop<wbr/>Constraint</span></a><a href="#dropenumvalue"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>drop<wbr/>Enum<wbr/>Value</span></a><a href="#newtransaction"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>new<wbr/>Transaction</span></a><a href="#renametable"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>rename<wbr/>Table</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@rvoh/dream</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>