@rvoh/dream 2.9.2 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/cjs/src/dream/QueryDriver/Kysely.js +7 -8
  2. package/dist/cjs/src/dream/QueryDriver/helpers/kysely/checkForNeedToBeRunMigrations.js +1 -1
  3. package/dist/cjs/src/dream/QueryDriver/helpers/kysely/runMigration.js +1 -1
  4. package/dist/cjs/src/dream-app/index.js +14 -6
  5. package/dist/cjs/src/errors/dream-app/MissingDbSslDirective.js +29 -0
  6. package/dist/esm/src/dream/QueryDriver/Kysely.js +7 -8
  7. package/dist/esm/src/dream/QueryDriver/helpers/kysely/checkForNeedToBeRunMigrations.js +1 -1
  8. package/dist/esm/src/dream/QueryDriver/helpers/kysely/runMigration.js +1 -1
  9. package/dist/esm/src/dream-app/index.js +14 -6
  10. package/dist/esm/src/errors/dream-app/MissingDbSslDirective.js +29 -0
  11. package/dist/types/src/dream/QueryDriver/Kysely.d.ts +8 -9
  12. package/dist/types/src/dream-app/index.d.ts +23 -15
  13. package/dist/types/src/errors/dream-app/MissingDbSslDirective.d.ts +6 -0
  14. package/docs/classes/db.DreamMigrationHelpers.html +9 -9
  15. package/docs/classes/db.KyselyQueryDriver.html +32 -32
  16. package/docs/classes/db.PostgresQueryDriver.html +33 -33
  17. package/docs/classes/db.QueryDriverBase.html +31 -31
  18. package/docs/classes/errors.CheckConstraintViolation.html +3 -3
  19. package/docs/classes/errors.ColumnOverflow.html +3 -3
  20. package/docs/classes/errors.CreateOrFindByFailedToCreateAndFind.html +3 -3
  21. package/docs/classes/errors.DataIncompatibleWithDatabaseField.html +3 -3
  22. package/docs/classes/errors.DataTypeColumnTypeMismatch.html +3 -3
  23. package/docs/classes/errors.GlobalNameNotSet.html +3 -3
  24. package/docs/classes/errors.InvalidCalendarDate.html +2 -2
  25. package/docs/classes/errors.InvalidClockTime.html +2 -2
  26. package/docs/classes/errors.InvalidClockTimeTz.html +2 -2
  27. package/docs/classes/errors.InvalidDateTime.html +2 -2
  28. package/docs/classes/errors.MissingSerializersDefinition.html +3 -3
  29. package/docs/classes/errors.NonLoadedAssociation.html +3 -3
  30. package/docs/classes/errors.NotNullViolation.html +3 -3
  31. package/docs/classes/errors.RecordNotFound.html +3 -3
  32. package/docs/classes/errors.ValidationError.html +3 -3
  33. package/docs/classes/index.CalendarDate.html +33 -33
  34. package/docs/classes/index.ClockTime.html +32 -32
  35. package/docs/classes/index.ClockTimeTz.html +35 -35
  36. package/docs/classes/index.DateTime.html +86 -86
  37. package/docs/classes/index.Decorators.html +19 -19
  38. package/docs/classes/index.Dream.html +118 -118
  39. package/docs/classes/index.DreamApp.html +5 -5
  40. package/docs/classes/index.DreamTransaction.html +2 -2
  41. package/docs/classes/index.Env.html +2 -2
  42. package/docs/classes/index.Query.html +56 -56
  43. package/docs/classes/system.CliFileWriter.html +4 -4
  44. package/docs/classes/system.DreamBin.html +2 -2
  45. package/docs/classes/system.DreamCLI.html +7 -7
  46. package/docs/classes/system.DreamImporter.html +2 -2
  47. package/docs/classes/system.DreamLogos.html +2 -2
  48. package/docs/classes/system.DreamSerializerBuilder.html +11 -11
  49. package/docs/classes/system.ObjectSerializerBuilder.html +8 -8
  50. package/docs/classes/system.PathHelpers.html +3 -3
  51. package/docs/classes/utils.Encrypt.html +3 -3
  52. package/docs/classes/utils.Range.html +2 -2
  53. package/docs/functions/db.closeAllDbConnections.html +1 -1
  54. package/docs/functions/db.dreamDbConnections.html +1 -1
  55. package/docs/functions/db.untypedDb.html +1 -1
  56. package/docs/functions/db.validateColumn.html +1 -1
  57. package/docs/functions/db.validateTable.html +1 -1
  58. package/docs/functions/errors.pgErrorType.html +1 -1
  59. package/docs/functions/index.DreamSerializer.html +1 -1
  60. package/docs/functions/index.ObjectSerializer.html +1 -1
  61. package/docs/functions/index.ReplicaSafe.html +1 -1
  62. package/docs/functions/index.STI.html +1 -1
  63. package/docs/functions/index.SoftDelete.html +1 -1
  64. package/docs/functions/utils.camelize.html +1 -1
  65. package/docs/functions/utils.capitalize.html +1 -1
  66. package/docs/functions/utils.cloneDeepSafe.html +1 -1
  67. package/docs/functions/utils.compact.html +1 -1
  68. package/docs/functions/utils.groupBy.html +1 -1
  69. package/docs/functions/utils.hyphenize.html +1 -1
  70. package/docs/functions/utils.intersection.html +1 -1
  71. package/docs/functions/utils.isEmpty.html +1 -1
  72. package/docs/functions/utils.normalizeUnicode.html +1 -1
  73. package/docs/functions/utils.pascalize.html +1 -1
  74. package/docs/functions/utils.percent.html +1 -1
  75. package/docs/functions/utils.range.html +1 -1
  76. package/docs/functions/utils.round.html +1 -1
  77. package/docs/functions/utils.sanitizeString.html +1 -1
  78. package/docs/functions/utils.snakeify.html +1 -1
  79. package/docs/functions/utils.sort.html +1 -1
  80. package/docs/functions/utils.sortBy.html +1 -1
  81. package/docs/functions/utils.sortObjectByKey.html +1 -1
  82. package/docs/functions/utils.sortObjectByValue.html +1 -1
  83. package/docs/functions/utils.uncapitalize.html +1 -1
  84. package/docs/functions/utils.uniq.html +1 -1
  85. package/docs/interfaces/openapi.OpenapiDescription.html +2 -2
  86. package/docs/interfaces/openapi.OpenapiSchemaProperties.html +1 -1
  87. package/docs/interfaces/openapi.OpenapiSchemaPropertiesShorthand.html +1 -1
  88. package/docs/interfaces/openapi.OpenapiTypeFieldObject.html +1 -1
  89. package/docs/interfaces/types.BelongsToStatement.html +2 -2
  90. package/docs/interfaces/types.DecoratorContext.html +2 -2
  91. package/docs/interfaces/types.DreamAppInitOptions.html +2 -2
  92. package/docs/interfaces/types.DreamAppOpts.html +2 -2
  93. package/docs/interfaces/types.DurationObject.html +2 -2
  94. package/docs/interfaces/types.EncryptOptions.html +2 -2
  95. package/docs/interfaces/types.InternalAnyTypedSerializerRendersMany.html +2 -2
  96. package/docs/interfaces/types.InternalAnyTypedSerializerRendersOne.html +2 -2
  97. package/docs/interfaces/types.SerializerRendererOpts.html +2 -2
  98. package/docs/types/openapi.CommonOpenapiSchemaObjectFields.html +1 -1
  99. package/docs/types/openapi.OpenapiAllTypes.html +1 -1
  100. package/docs/types/openapi.OpenapiFormats.html +1 -1
  101. package/docs/types/openapi.OpenapiNumberFormats.html +1 -1
  102. package/docs/types/openapi.OpenapiPrimitiveBaseTypes.html +1 -1
  103. package/docs/types/openapi.OpenapiPrimitiveTypes.html +1 -1
  104. package/docs/types/openapi.OpenapiSchemaArray.html +1 -1
  105. package/docs/types/openapi.OpenapiSchemaArrayShorthand.html +1 -1
  106. package/docs/types/openapi.OpenapiSchemaBase.html +1 -1
  107. package/docs/types/openapi.OpenapiSchemaBody.html +1 -1
  108. package/docs/types/openapi.OpenapiSchemaBodyShorthand.html +1 -1
  109. package/docs/types/openapi.OpenapiSchemaCommonFields.html +1 -1
  110. package/docs/types/openapi.OpenapiSchemaExpressionAllOf.html +2 -2
  111. package/docs/types/openapi.OpenapiSchemaExpressionAnyOf.html +2 -2
  112. package/docs/types/openapi.OpenapiSchemaExpressionOneOf.html +2 -2
  113. package/docs/types/openapi.OpenapiSchemaExpressionRef.html +2 -2
  114. package/docs/types/openapi.OpenapiSchemaExpressionRefSchemaShorthand.html +2 -2
  115. package/docs/types/openapi.OpenapiSchemaInteger.html +1 -1
  116. package/docs/types/openapi.OpenapiSchemaNull.html +2 -2
  117. package/docs/types/openapi.OpenapiSchemaNumber.html +1 -1
  118. package/docs/types/openapi.OpenapiSchemaObject.html +1 -1
  119. package/docs/types/openapi.OpenapiSchemaObjectAllOf.html +1 -1
  120. package/docs/types/openapi.OpenapiSchemaObjectAllOfShorthand.html +1 -1
  121. package/docs/types/openapi.OpenapiSchemaObjectAnyOf.html +1 -1
  122. package/docs/types/openapi.OpenapiSchemaObjectAnyOfShorthand.html +1 -1
  123. package/docs/types/openapi.OpenapiSchemaObjectBase.html +1 -1
  124. package/docs/types/openapi.OpenapiSchemaObjectBaseShorthand.html +1 -1
  125. package/docs/types/openapi.OpenapiSchemaObjectOneOf.html +1 -1
  126. package/docs/types/openapi.OpenapiSchemaObjectOneOfShorthand.html +1 -1
  127. package/docs/types/openapi.OpenapiSchemaObjectShorthand.html +1 -1
  128. package/docs/types/openapi.OpenapiSchemaPrimitiveGeneric.html +1 -1
  129. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAllOf.html +2 -2
  130. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAnyOf.html +2 -2
  131. package/docs/types/openapi.OpenapiSchemaShorthandExpressionOneOf.html +2 -2
  132. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializableRef.html +2 -2
  133. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializerRef.html +2 -2
  134. package/docs/types/openapi.OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
  135. package/docs/types/openapi.OpenapiSchemaString.html +1 -1
  136. package/docs/types/openapi.OpenapiShorthandAllTypes.html +1 -1
  137. package/docs/types/openapi.OpenapiShorthandPrimitiveBaseTypes.html +1 -1
  138. package/docs/types/openapi.OpenapiShorthandPrimitiveTypes.html +1 -1
  139. package/docs/types/openapi.OpenapiTypeField.html +1 -1
  140. package/docs/types/system.DreamAppAllowedPackageManagersEnum.html +1 -1
  141. package/docs/types/types.CalendarDateDurationUnit.html +1 -1
  142. package/docs/types/types.CalendarDateObject.html +1 -1
  143. package/docs/types/types.Camelized.html +1 -1
  144. package/docs/types/types.ClockTimeObject.html +1 -1
  145. package/docs/types/types.DbConnectionType.html +1 -1
  146. package/docs/types/types.DbTypes.html +1 -1
  147. package/docs/types/types.DreamAssociationMetadata.html +1 -1
  148. package/docs/types/types.DreamAttributes.html +1 -1
  149. package/docs/types/types.DreamClassAssociationAndStatement.html +1 -1
  150. package/docs/types/types.DreamClassColumn.html +1 -1
  151. package/docs/types/types.DreamColumn.html +1 -1
  152. package/docs/types/types.DreamColumnNames.html +1 -1
  153. package/docs/types/types.DreamLogLevel.html +1 -1
  154. package/docs/types/types.DreamLogger.html +2 -2
  155. package/docs/types/types.DreamModelSerializerType.html +1 -1
  156. package/docs/types/types.DreamOrViewModelClassSerializerKey.html +1 -1
  157. package/docs/types/types.DreamOrViewModelSerializerKey.html +1 -1
  158. package/docs/types/types.DreamParamSafeAttributes.html +1 -1
  159. package/docs/types/types.DreamParamSafeColumnNames.html +1 -1
  160. package/docs/types/types.DreamSerializable.html +1 -1
  161. package/docs/types/types.DreamSerializableArray.html +1 -1
  162. package/docs/types/types.DreamSerializerKey.html +1 -1
  163. package/docs/types/types.DreamSerializers.html +1 -1
  164. package/docs/types/types.DreamVirtualColumns.html +1 -1
  165. package/docs/types/types.DurationUnit.html +1 -1
  166. package/docs/types/types.EncryptAlgorithm.html +1 -1
  167. package/docs/types/types.HasManyStatement.html +1 -1
  168. package/docs/types/types.HasOneStatement.html +1 -1
  169. package/docs/types/types.Hyphenized.html +1 -1
  170. package/docs/types/types.Pascalized.html +1 -1
  171. package/docs/types/types.PrimaryKeyType.html +1 -1
  172. package/docs/types/types.RoundingPrecision.html +1 -1
  173. package/docs/types/types.SerializerCasing.html +1 -1
  174. package/docs/types/types.SimpleObjectSerializerType.html +1 -1
  175. package/docs/types/types.Snakeified.html +1 -1
  176. package/docs/types/types.StrictInterface.html +1 -1
  177. package/docs/types/types.UpdateableAssociationProperties.html +1 -1
  178. package/docs/types/types.UpdateableProperties.html +1 -1
  179. package/docs/types/types.ValidationType.html +1 -1
  180. package/docs/types/types.ViewModel.html +2 -2
  181. package/docs/types/types.ViewModelClass.html +1 -1
  182. package/docs/types/types.WeekdayName.html +1 -1
  183. package/docs/types/types.WhereStatementForDream.html +1 -1
  184. package/docs/types/types.WhereStatementForDreamClass.html +1 -1
  185. package/docs/variables/index.DreamConst.html +1 -1
  186. package/docs/variables/index.ops.html +1 -1
  187. package/docs/variables/openapi.openapiPrimitiveTypes.html +1 -1
  188. package/docs/variables/openapi.openapiShorthandPrimitiveTypes.html +1 -1
  189. package/docs/variables/system.DreamAppAllowedPackageManagersEnumValues.html +1 -1
  190. package/docs/variables/system.primaryKeyTypes.html +1 -1
  191. package/package.json +5 -5
@@ -2047,15 +2047,14 @@ const associationStringToAssociationAndMaybeAlias = function ({ dreamClass, asso
2047
2047
  * Resolve the value passed to `pg.Pool`'s `ssl` field for a given credential.
2048
2048
  *
2049
2049
  * Precedence:
2050
- * 1. If `connectionConf.ssl` is set (boolean or `tls.ConnectionOptions`),
2051
- * pass it straight through to `pg`. This is the verified-TLS path —
2052
- * apps configure `{ rejectUnauthorized: true, ca: <bundle> }` for
2053
- * authenticated TLS against a private PKI, or `true` to use Node's
2054
- * default verification against the system CA store.
2055
- * 2. Else if `connectionConf.useSsl` is `true`, fall back to
2050
+ * 1. If `connectionConf.ssl` is set (object or explicit `false`), pass it
2051
+ * straight through to `pg`.
2052
+ * 2. Else if `connectionConf.useSsl` is `true` (deprecated), fall back to
2056
2053
  * `{ rejectUnauthorized: false }` — encrypted but **not** authenticated.
2057
- * Preserved for back-compat; new code should set `ssl` explicitly.
2058
- * 3. Else disable TLS.
2054
+ *
2055
+ * `assertDbCredentialTlsDirective` (in `dream-app`) throws at
2056
+ * `app.set('db', ...)` time when both `ssl` and `useSsl` are unset, so this
2057
+ * resolver never sees the "neither directive" state.
2059
2058
  */
2060
2059
  export function resolvePostgresSsl(connectionConf) {
2061
2060
  if (connectionConf.ssl !== undefined)
@@ -1,4 +1,4 @@
1
- import { FileMigrationProvider, Migrator } from 'kysely';
1
+ import { FileMigrationProvider, Migrator } from 'kysely/migration';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import { closeAllConnectionsForConnectionName } from '../../../../db/DreamDbConnection.js';
4
4
  import db from '../../../../db/index.js';
@@ -1,4 +1,4 @@
1
- import { FileMigrationProvider, Migrator } from 'kysely';
1
+ import { FileMigrationProvider, Migrator } from 'kysely/migration';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import DreamCLI from '../../../../cli/index.js';
4
4
  import colorize from '../../../../cli/logger/loggable/colorize.js';
@@ -6,6 +6,7 @@ import Encrypt from '../encrypt/index.js';
6
6
  import DreamAppInitMissingCallToLoadModels from '../errors/dream-app/DreamAppInitMissingCallToLoadModels.js';
7
7
  import DreamAppInitMissingMissingProjectRoot from '../errors/dream-app/DreamAppInitMissingMissingProjectRoot.js';
8
8
  import DreamAppInitMissingPackageManager from '../errors/dream-app/DreamAppInitMissingPackageManager.js';
9
+ import MissingDbSslDirective from '../errors/dream-app/MissingDbSslDirective.js';
9
10
  import autogeneratedFileDisclaimer from '../helpers/cli/autoGeneratedFileDisclaimer.js';
10
11
  import modelClassNameFrom from '../helpers/cli/modelClassNameFrom.js';
11
12
  import EnvInternal from '../helpers/EnvInternal.js';
@@ -345,14 +346,16 @@ A new key can also be generated from the CLI:
345
346
  case 'bypassDeprecationChecks':
346
347
  this._bypassDeprecationChecks = options;
347
348
  break;
348
- case 'db':
349
- if (typeof options === 'string') {
350
- this._dbCredentials[options] = secondaryOptions;
351
- }
352
- else {
353
- this._dbCredentials['default'] = options;
349
+ case 'db': {
350
+ const connectionName = typeof options === 'string' ? options : 'default';
351
+ const credentialOptions = (typeof options === 'string' ? secondaryOptions : options);
352
+ assertDbCredentialTlsDirective(credentialOptions.primary, connectionName, 'primary');
353
+ if (credentialOptions.replica) {
354
+ assertDbCredentialTlsDirective(credentialOptions.replica, connectionName, 'replica');
354
355
  }
356
+ this._dbCredentials[connectionName] = credentialOptions;
355
357
  break;
358
+ }
356
359
  case 'encryption':
357
360
  this._encryption = options;
358
361
  break;
@@ -412,6 +415,11 @@ A new key can also be generated from the CLI:
412
415
  }
413
416
  }
414
417
  }
418
+ function assertDbCredentialTlsDirective(credential, connectionName, credentialKey) {
419
+ if (credential.ssl === undefined && !credential.useSsl) {
420
+ throw new MissingDbSslDirective(connectionName, credentialKey);
421
+ }
422
+ }
415
423
  function loggerArgToString(arg) {
416
424
  if (typeof arg === 'string')
417
425
  return arg;
@@ -0,0 +1,29 @@
1
+ export default class MissingDbSslDirective extends Error {
2
+ connectionName;
3
+ credentialKey;
4
+ constructor(connectionName, credentialKey) {
5
+ super();
6
+ this.connectionName = connectionName;
7
+ this.credentialKey = credentialKey;
8
+ }
9
+ get message() {
10
+ return `
11
+ DreamApp refused to register a db credential without an explicit TLS
12
+ directive. Every \`SingleDbCredential\` passed to \`app.set('db', ...)\`
13
+ must set one of:
14
+
15
+ ssl: { rejectUnauthorized: true } // verified TLS (system CA)
16
+ ssl: { rejectUnauthorized: true, ca: <pem> } // verified TLS (private CA)
17
+ ssl: { rejectUnauthorized: false } // unverified TLS
18
+ ssl: false // TLS disabled
19
+ useSsl: true // legacy, deprecated
20
+
21
+ Omitting the directive used to silently disable TLS. Throwing here
22
+ turns the safety question into a deliberate decision at the call
23
+ site, so a credential cannot reach production with TLS off by accident.
24
+
25
+ connection: ${this.connectionName}
26
+ credential: ${this.credentialKey}
27
+ `;
28
+ }
29
+ }
@@ -2047,15 +2047,14 @@ const associationStringToAssociationAndMaybeAlias = function ({ dreamClass, asso
2047
2047
  * Resolve the value passed to `pg.Pool`'s `ssl` field for a given credential.
2048
2048
  *
2049
2049
  * Precedence:
2050
- * 1. If `connectionConf.ssl` is set (boolean or `tls.ConnectionOptions`),
2051
- * pass it straight through to `pg`. This is the verified-TLS path —
2052
- * apps configure `{ rejectUnauthorized: true, ca: <bundle> }` for
2053
- * authenticated TLS against a private PKI, or `true` to use Node's
2054
- * default verification against the system CA store.
2055
- * 2. Else if `connectionConf.useSsl` is `true`, fall back to
2050
+ * 1. If `connectionConf.ssl` is set (object or explicit `false`), pass it
2051
+ * straight through to `pg`.
2052
+ * 2. Else if `connectionConf.useSsl` is `true` (deprecated), fall back to
2056
2053
  * `{ rejectUnauthorized: false }` — encrypted but **not** authenticated.
2057
- * Preserved for back-compat; new code should set `ssl` explicitly.
2058
- * 3. Else disable TLS.
2054
+ *
2055
+ * `assertDbCredentialTlsDirective` (in `dream-app`) throws at
2056
+ * `app.set('db', ...)` time when both `ssl` and `useSsl` are unset, so this
2057
+ * resolver never sees the "neither directive" state.
2059
2058
  */
2060
2059
  export function resolvePostgresSsl(connectionConf) {
2061
2060
  if (connectionConf.ssl !== undefined)
@@ -1,4 +1,4 @@
1
- import { FileMigrationProvider, Migrator } from 'kysely';
1
+ import { FileMigrationProvider, Migrator } from 'kysely/migration';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import { closeAllConnectionsForConnectionName } from '../../../../db/DreamDbConnection.js';
4
4
  import db from '../../../../db/index.js';
@@ -1,4 +1,4 @@
1
- import { FileMigrationProvider, Migrator } from 'kysely';
1
+ import { FileMigrationProvider, Migrator } from 'kysely/migration';
2
2
  import * as fs from 'node:fs/promises';
3
3
  import DreamCLI from '../../../../cli/index.js';
4
4
  import colorize from '../../../../cli/logger/loggable/colorize.js';
@@ -6,6 +6,7 @@ import Encrypt from '../encrypt/index.js';
6
6
  import DreamAppInitMissingCallToLoadModels from '../errors/dream-app/DreamAppInitMissingCallToLoadModels.js';
7
7
  import DreamAppInitMissingMissingProjectRoot from '../errors/dream-app/DreamAppInitMissingMissingProjectRoot.js';
8
8
  import DreamAppInitMissingPackageManager from '../errors/dream-app/DreamAppInitMissingPackageManager.js';
9
+ import MissingDbSslDirective from '../errors/dream-app/MissingDbSslDirective.js';
9
10
  import autogeneratedFileDisclaimer from '../helpers/cli/autoGeneratedFileDisclaimer.js';
10
11
  import modelClassNameFrom from '../helpers/cli/modelClassNameFrom.js';
11
12
  import EnvInternal from '../helpers/EnvInternal.js';
@@ -345,14 +346,16 @@ A new key can also be generated from the CLI:
345
346
  case 'bypassDeprecationChecks':
346
347
  this._bypassDeprecationChecks = options;
347
348
  break;
348
- case 'db':
349
- if (typeof options === 'string') {
350
- this._dbCredentials[options] = secondaryOptions;
351
- }
352
- else {
353
- this._dbCredentials['default'] = options;
349
+ case 'db': {
350
+ const connectionName = typeof options === 'string' ? options : 'default';
351
+ const credentialOptions = (typeof options === 'string' ? secondaryOptions : options);
352
+ assertDbCredentialTlsDirective(credentialOptions.primary, connectionName, 'primary');
353
+ if (credentialOptions.replica) {
354
+ assertDbCredentialTlsDirective(credentialOptions.replica, connectionName, 'replica');
354
355
  }
356
+ this._dbCredentials[connectionName] = credentialOptions;
355
357
  break;
358
+ }
356
359
  case 'encryption':
357
360
  this._encryption = options;
358
361
  break;
@@ -412,6 +415,11 @@ A new key can also be generated from the CLI:
412
415
  }
413
416
  }
414
417
  }
418
+ function assertDbCredentialTlsDirective(credential, connectionName, credentialKey) {
419
+ if (credential.ssl === undefined && !credential.useSsl) {
420
+ throw new MissingDbSslDirective(connectionName, credentialKey);
421
+ }
422
+ }
415
423
  function loggerArgToString(arg) {
416
424
  if (typeof arg === 'string')
417
425
  return arg;
@@ -0,0 +1,29 @@
1
+ export default class MissingDbSslDirective extends Error {
2
+ connectionName;
3
+ credentialKey;
4
+ constructor(connectionName, credentialKey) {
5
+ super();
6
+ this.connectionName = connectionName;
7
+ this.credentialKey = credentialKey;
8
+ }
9
+ get message() {
10
+ return `
11
+ DreamApp refused to register a db credential without an explicit TLS
12
+ directive. Every \`SingleDbCredential\` passed to \`app.set('db', ...)\`
13
+ must set one of:
14
+
15
+ ssl: { rejectUnauthorized: true } // verified TLS (system CA)
16
+ ssl: { rejectUnauthorized: true, ca: <pem> } // verified TLS (private CA)
17
+ ssl: { rejectUnauthorized: false } // unverified TLS
18
+ ssl: false // TLS disabled
19
+ useSsl: true // legacy, deprecated
20
+
21
+ Omitting the directive used to silently disable TLS. Throwing here
22
+ turns the safety question into a deliberate decision at the call
23
+ site, so a credential cannot reach production with TLS off by accident.
24
+
25
+ connection: ${this.connectionName}
26
+ credential: ${this.credentialKey}
27
+ `;
28
+ }
29
+ }
@@ -473,14 +473,13 @@ export default class KyselyQueryDriver<DreamInstance extends Dream> extends Quer
473
473
  * Resolve the value passed to `pg.Pool`'s `ssl` field for a given credential.
474
474
  *
475
475
  * Precedence:
476
- * 1. If `connectionConf.ssl` is set (boolean or `tls.ConnectionOptions`),
477
- * pass it straight through to `pg`. This is the verified-TLS path —
478
- * apps configure `{ rejectUnauthorized: true, ca: <bundle> }` for
479
- * authenticated TLS against a private PKI, or `true` to use Node's
480
- * default verification against the system CA store.
481
- * 2. Else if `connectionConf.useSsl` is `true`, fall back to
476
+ * 1. If `connectionConf.ssl` is set (object or explicit `false`), pass it
477
+ * straight through to `pg`.
478
+ * 2. Else if `connectionConf.useSsl` is `true` (deprecated), fall back to
482
479
  * `{ rejectUnauthorized: false }` — encrypted but **not** authenticated.
483
- * Preserved for back-compat; new code should set `ssl` explicitly.
484
- * 3. Else disable TLS.
480
+ *
481
+ * `assertDbCredentialTlsDirective` (in `dream-app`) throws at
482
+ * `app.set('db', ...)` time when both `ssl` and `useSsl` are unset, so this
483
+ * resolver never sees the "neither directive" state.
485
484
  */
486
- export declare function resolvePostgresSsl(connectionConf: SingleDbCredential): boolean | TlsConnectionOptions;
485
+ export declare function resolvePostgresSsl(connectionConf: SingleDbCredential): TlsConnectionOptions | false;
@@ -213,27 +213,35 @@ export interface SingleDbCredential {
213
213
  /**
214
214
  * @deprecated Use `ssl` instead.
215
215
  *
216
- * The legacy boolean opt-in for Postgres TLS. When `true` (and `ssl` is not
216
+ * Legacy boolean opt-in for Postgres TLS. When `true` (and `ssl` is not
217
217
  * set), Dream connects with `{ rejectUnauthorized: false }` — TLS is on but
218
- * the server certificate is not verified. The new `ssl` field accepts a
219
- * full `tls.ConnectionOptions` object so callers can opt into verified TLS
220
- * (`ssl: { rejectUnauthorized: true, ca: readFileSync('ca.pem') }`) or use
221
- * Node's defaults (`ssl: true`). This field is preserved for back-compat
222
- * and will be removed in a future major version.
218
+ * the server certificate is not verified. Preserved for back-compat and
219
+ * will be removed in a future major version. New code should set `ssl`
220
+ * directly.
223
221
  */
224
222
  useSsl?: boolean;
225
223
  /**
226
- * Optional explicit TLS configuration passed straight through to `pg.Pool`'s
227
- * `ssl` field. Takes precedence over the deprecated `useSsl` when provided.
224
+ * TLS configuration passed straight through to `pg.Pool`'s `ssl` field.
225
+ * Takes precedence over the deprecated `useSsl` when provided.
228
226
  *
229
- * - `true` lets `pg` use Node's defaults (verified TLS against the system CA).
230
- * - `false` disables TLS.
231
- * - An object is `tls.ConnectionOptions` set `rejectUnauthorized: true` plus
232
- * a `ca` bundle for verified TLS against a private PKI; set
233
- * `rejectUnauthorized: false` only if you accept opportunistic-TLS-without-
234
- * authentication (the historical default produced by `useSsl: true` alone).
227
+ * Set `rejectUnauthorized: true` (Node's own default) for verified TLS
228
+ * against the system CA store — the right choice for managed providers that
229
+ * present a public-CA-signed certificate (Supabase, Neon, Render, Azure
230
+ * Database for PostgreSQL on Flexible Server, etc.).
231
+ *
232
+ * For providers that present a private-CA certificate (AWS RDS,
233
+ * GCP Cloud SQL), add a `ca` bundle:
234
+ * `ssl: { rejectUnauthorized: true, ca: readFileSync('rds-ca.pem') }`.
235
+ *
236
+ * For providers that present a self-signed certificate (Heroku Hobby,
237
+ * some local docker images), set `rejectUnauthorized: false` — encrypted
238
+ * but unauthenticated.
239
+ *
240
+ * Set `false` to disable TLS entirely. Omitting `ssl` (and `useSsl`) throws
241
+ * at `app.set('db', ...)` time so the safety question is a deliberate
242
+ * decision at the call site rather than a silent default.
235
243
  */
236
- ssl?: boolean | TlsConnectionOptions;
244
+ ssl?: TlsConnectionOptions | false;
237
245
  }
238
246
  export type DreamLogger = {
239
247
  info: (...args: any[]) => void;
@@ -0,0 +1,6 @@
1
+ export default class MissingDbSslDirective extends Error {
2
+ private connectionName;
3
+ private credentialKey;
4
+ constructor(connectionName: string, credentialKey: 'primary' | 'replica');
5
+ get message(): string;
6
+ }
@@ -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/16a8794358d3fbad6031b4653eb7b7abcd02be57/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/bef9ed26893b2f12d398a370716f1f4ddcea966e/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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L48">src/db/migration-helpers/DreamMigrationHelpers.ts:48</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L48">src/db/migration-helpers/DreamMigrationHelpers.ts:48</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L78">src/db/migration-helpers/DreamMigrationHelpers.ts:78</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L78">src/db/migration-helpers/DreamMigrationHelpers.ts:78</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L100">src/db/migration-helpers/DreamMigrationHelpers.ts:100</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L100">src/db/migration-helpers/DreamMigrationHelpers.ts:100</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L122">src/db/migration-helpers/DreamMigrationHelpers.ts:122</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L122">src/db/migration-helpers/DreamMigrationHelpers.ts:122</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L145">src/db/migration-helpers/DreamMigrationHelpers.ts:145</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L145">src/db/migration-helpers/DreamMigrationHelpers.ts:145</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L198">src/db/migration-helpers/DreamMigrationHelpers.ts:198</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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L198">src/db/migration-helpers/DreamMigrationHelpers.ts:198</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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L186">src/db/migration-helpers/DreamMigrationHelpers.ts:186</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 index and 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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L186">src/db/migration-helpers/DreamMigrationHelpers.ts:186</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 index and sequence.</p>
65
65
  <p>This method renames the table, its primary key index (<code>{tablename}_pkey</code>),
66
66
  and its primary key sequence (<code>{tablename}_id_seq</code>) to keep them in sync.</p>
67
67
  <p>The sequence rename is skipped for tables with UUID primary keys (which have
@@ -70,4 +70,4 @@ PostgreSQL does not automatically rename it when the table is renamed.</p>
70
70
  </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>
71
71
  </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>
72
72
  </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>
73
- </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/16a8794358d3fbad6031b4653eb7b7abcd02be57/src/db/migration-helpers/DreamMigrationHelpers.ts#L18">src/db/migration-helpers/DreamMigrationHelpers.ts:18</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>
73
+ </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/bef9ed26893b2f12d398a370716f1f4ddcea966e/src/db/migration-helpers/DreamMigrationHelpers.ts#L18">src/db/migration-helpers/DreamMigrationHelpers.ts:18</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>