@rvoh/dream 2.28.3 → 2.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/cjs/src/Dream.js +5 -3
  2. package/dist/cjs/src/decorators/field/sortable/helpers/setPosition.js +11 -2
  3. package/dist/cjs/src/dream/DreamClassTransactionBuilder.js +3 -1
  4. package/dist/cjs/src/dream/DreamInstanceTransactionBuilder.js +2 -2
  5. package/dist/cjs/src/dream/LoadBuilder.js +4 -2
  6. package/dist/cjs/src/dream/Query.js +2 -0
  7. package/dist/cjs/src/dream/QueryDriver/Kysely.js +69 -32
  8. package/dist/cjs/src/dream/internal/applyScopeBypassingSettingsToQuery.js +1 -1
  9. package/dist/cjs/src/dream/internal/associations/loadedOrLoadAssociation.js +2 -0
  10. package/dist/cjs/src/dream/internal/installPersistedAttribute.js +9 -0
  11. package/dist/cjs/src/dream/internal/instanceMutationOptions.js +1 -0
  12. package/dist/cjs/src/dream/internal/loadDependentDestroyTree.js +1 -1
  13. package/dist/cjs/src/dream/internal/reload.js +3 -1
  14. package/dist/cjs/src/errors/associations/IncompatibleThroughAssociationTarget.js +11 -0
  15. package/dist/esm/src/Dream.js +5 -3
  16. package/dist/esm/src/decorators/field/sortable/helpers/setPosition.js +11 -2
  17. package/dist/esm/src/dream/DreamClassTransactionBuilder.js +3 -1
  18. package/dist/esm/src/dream/DreamInstanceTransactionBuilder.js +2 -2
  19. package/dist/esm/src/dream/LoadBuilder.js +4 -2
  20. package/dist/esm/src/dream/Query.js +2 -0
  21. package/dist/esm/src/dream/QueryDriver/Kysely.js +69 -32
  22. package/dist/esm/src/dream/internal/applyScopeBypassingSettingsToQuery.js +1 -1
  23. package/dist/esm/src/dream/internal/associations/loadedOrLoadAssociation.js +2 -0
  24. package/dist/esm/src/dream/internal/installPersistedAttribute.js +9 -0
  25. package/dist/esm/src/dream/internal/instanceMutationOptions.js +1 -0
  26. package/dist/esm/src/dream/internal/loadDependentDestroyTree.js +1 -1
  27. package/dist/esm/src/dream/internal/reload.js +3 -1
  28. package/dist/esm/src/errors/associations/IncompatibleThroughAssociationTarget.js +11 -0
  29. package/dist/types/src/Dream.d.ts +39 -25
  30. package/dist/types/src/dream/DreamClassTransactionBuilder.d.ts +4 -2
  31. package/dist/types/src/dream/DreamInstanceTransactionBuilder.d.ts +15 -21
  32. package/dist/types/src/dream/LoadBuilder.d.ts +3 -1
  33. package/dist/types/src/dream/Query.d.ts +2 -0
  34. package/dist/types/src/dream/QueryDriver/Kysely.d.ts +1 -1
  35. package/dist/types/src/dream/internal/associations/loadedOrLoadAssociation.d.ts +2 -0
  36. package/dist/types/src/dream/internal/installPersistedAttribute.d.ts +6 -0
  37. package/dist/types/src/dream/internal/instanceMutationOptions.d.ts +13 -0
  38. package/dist/types/src/errors/associations/IncompatibleThroughAssociationTarget.d.ts +9 -0
  39. package/docs/classes/db.DreamMigrationHelpers.html +11 -11
  40. package/docs/classes/db.KyselyQueryDriver.html +43 -43
  41. package/docs/classes/db.PostgresQueryDriver.html +44 -44
  42. package/docs/classes/db.QueryDriverBase.html +42 -42
  43. package/docs/classes/errors.CheckConstraintViolation.html +3 -3
  44. package/docs/classes/errors.ColumnOverflow.html +3 -3
  45. package/docs/classes/errors.CreateOrFindByFailedToCreateAndFind.html +3 -3
  46. package/docs/classes/errors.DataIncompatibleWithDatabaseField.html +3 -3
  47. package/docs/classes/errors.DataTypeColumnTypeMismatch.html +3 -3
  48. package/docs/classes/errors.DecryptionError.html +2 -2
  49. package/docs/classes/errors.DecryptionParseError.html +2 -2
  50. package/docs/classes/errors.DecryptionRotationError.html +3 -3
  51. package/docs/classes/errors.GlobalNameNotSet.html +3 -3
  52. package/docs/classes/errors.InvalidCalendarDate.html +2 -2
  53. package/docs/classes/errors.InvalidClockTime.html +2 -2
  54. package/docs/classes/errors.InvalidClockTimeTz.html +2 -2
  55. package/docs/classes/errors.InvalidDateTime.html +2 -2
  56. package/docs/classes/errors.MissingSerializersDefinition.html +3 -3
  57. package/docs/classes/errors.NonLoadedAssociation.html +3 -3
  58. package/docs/classes/errors.NotNullViolation.html +3 -3
  59. package/docs/classes/errors.RecordNotFound.html +3 -3
  60. package/docs/classes/errors.SortableBatchRequiresTooManyScopeLocks.html +3 -3
  61. package/docs/classes/errors.SortableScopeDidNotStabilize.html +3 -3
  62. package/docs/classes/errors.SortableScopeLockWaitTimedOut.html +3 -3
  63. package/docs/classes/errors.ValidationError.html +3 -3
  64. package/docs/classes/index.CalendarDate.html +33 -33
  65. package/docs/classes/index.ClockTime.html +32 -32
  66. package/docs/classes/index.ClockTimeTz.html +35 -35
  67. package/docs/classes/index.DateTime.html +86 -86
  68. package/docs/classes/index.Decorators.html +19 -19
  69. package/docs/classes/index.Dream.html +150 -145
  70. package/docs/classes/index.DreamApp.html +10 -10
  71. package/docs/classes/index.DreamTransaction.html +2 -2
  72. package/docs/classes/index.Env.html +2 -2
  73. package/docs/classes/index.Query.html +69 -68
  74. package/docs/classes/system.CliFileWriter.html +4 -4
  75. package/docs/classes/system.DreamBin.html +2 -2
  76. package/docs/classes/system.DreamCLI.html +7 -7
  77. package/docs/classes/system.DreamImporter.html +2 -2
  78. package/docs/classes/system.DreamLogos.html +2 -2
  79. package/docs/classes/system.DreamSerializerBuilder.html +11 -11
  80. package/docs/classes/system.ObjectSerializerBuilder.html +8 -8
  81. package/docs/classes/system.PathHelpers.html +3 -3
  82. package/docs/classes/utils.Encrypt.html +3 -3
  83. package/docs/classes/utils.Range.html +2 -2
  84. package/docs/functions/db.closeAllDbConnections.html +1 -1
  85. package/docs/functions/db.dreamDbConnections.html +1 -1
  86. package/docs/functions/db.untypedDb.html +1 -1
  87. package/docs/functions/db.validateColumn.html +1 -1
  88. package/docs/functions/db.validateTable.html +1 -1
  89. package/docs/functions/errors.pgErrorType.html +1 -1
  90. package/docs/functions/index.DreamSerializer.html +1 -1
  91. package/docs/functions/index.ObjectSerializer.html +1 -1
  92. package/docs/functions/index.ReplicaSafe.html +1 -1
  93. package/docs/functions/index.STI.html +1 -1
  94. package/docs/functions/index.SoftDelete.html +1 -1
  95. package/docs/functions/utils.camelize.html +1 -1
  96. package/docs/functions/utils.capitalize.html +1 -1
  97. package/docs/functions/utils.cloneDeepSafe.html +1 -1
  98. package/docs/functions/utils.compact.html +1 -1
  99. package/docs/functions/utils.groupBy.html +1 -1
  100. package/docs/functions/utils.hyphenize.html +1 -1
  101. package/docs/functions/utils.intersection.html +1 -1
  102. package/docs/functions/utils.isEmpty.html +1 -1
  103. package/docs/functions/utils.normalizeUnicode.html +1 -1
  104. package/docs/functions/utils.pascalize.html +1 -1
  105. package/docs/functions/utils.percent.html +1 -1
  106. package/docs/functions/utils.range.html +1 -1
  107. package/docs/functions/utils.round.html +1 -1
  108. package/docs/functions/utils.sanitizeString.html +1 -1
  109. package/docs/functions/utils.snakeify.html +1 -1
  110. package/docs/functions/utils.sort.html +1 -1
  111. package/docs/functions/utils.sortBy.html +1 -1
  112. package/docs/functions/utils.sortObjectByKey.html +1 -1
  113. package/docs/functions/utils.sortObjectByValue.html +1 -1
  114. package/docs/functions/utils.uncapitalize.html +1 -1
  115. package/docs/functions/utils.uniq.html +1 -1
  116. package/docs/interfaces/openapi.OpenapiDescription.html +2 -2
  117. package/docs/interfaces/openapi.OpenapiSchemaProperties.html +1 -1
  118. package/docs/interfaces/openapi.OpenapiSchemaPropertiesShorthand.html +1 -1
  119. package/docs/interfaces/openapi.OpenapiTypeFieldObject.html +1 -1
  120. package/docs/interfaces/types.BelongsToStatement.html +2 -2
  121. package/docs/interfaces/types.DecoratorContext.html +2 -2
  122. package/docs/interfaces/types.DreamAppInitOptions.html +2 -2
  123. package/docs/interfaces/types.DreamAppOpts.html +2 -2
  124. package/docs/interfaces/types.DreamDbConfig.html +5 -5
  125. package/docs/interfaces/types.DurationObject.html +2 -2
  126. package/docs/interfaces/types.EncryptOptions.html +2 -2
  127. package/docs/interfaces/types.InternalAnyTypedSerializerRendersMany.html +2 -2
  128. package/docs/interfaces/types.InternalAnyTypedSerializerRendersOne.html +2 -2
  129. package/docs/interfaces/types.SerializerRendererOpts.html +2 -2
  130. package/docs/types/openapi.CommonOpenapiSchemaObjectFields.html +1 -1
  131. package/docs/types/openapi.OpenapiAllTypes.html +1 -1
  132. package/docs/types/openapi.OpenapiFormats.html +1 -1
  133. package/docs/types/openapi.OpenapiNumberFormats.html +1 -1
  134. package/docs/types/openapi.OpenapiPrimitiveBaseTypes.html +1 -1
  135. package/docs/types/openapi.OpenapiPrimitiveTypes.html +1 -1
  136. package/docs/types/openapi.OpenapiSchemaArray.html +1 -1
  137. package/docs/types/openapi.OpenapiSchemaArrayShorthand.html +1 -1
  138. package/docs/types/openapi.OpenapiSchemaBase.html +1 -1
  139. package/docs/types/openapi.OpenapiSchemaBody.html +1 -1
  140. package/docs/types/openapi.OpenapiSchemaBodyShorthand.html +1 -1
  141. package/docs/types/openapi.OpenapiSchemaCommonFields.html +1 -1
  142. package/docs/types/openapi.OpenapiSchemaExpressionAllOf.html +2 -2
  143. package/docs/types/openapi.OpenapiSchemaExpressionAnyOf.html +2 -2
  144. package/docs/types/openapi.OpenapiSchemaExpressionOneOf.html +2 -2
  145. package/docs/types/openapi.OpenapiSchemaExpressionRef.html +2 -2
  146. package/docs/types/openapi.OpenapiSchemaExpressionRefSchemaShorthand.html +2 -2
  147. package/docs/types/openapi.OpenapiSchemaInteger.html +1 -1
  148. package/docs/types/openapi.OpenapiSchemaNull.html +2 -2
  149. package/docs/types/openapi.OpenapiSchemaNumber.html +1 -1
  150. package/docs/types/openapi.OpenapiSchemaObject.html +1 -1
  151. package/docs/types/openapi.OpenapiSchemaObjectAllOf.html +1 -1
  152. package/docs/types/openapi.OpenapiSchemaObjectAllOfShorthand.html +1 -1
  153. package/docs/types/openapi.OpenapiSchemaObjectAnyOf.html +1 -1
  154. package/docs/types/openapi.OpenapiSchemaObjectAnyOfShorthand.html +1 -1
  155. package/docs/types/openapi.OpenapiSchemaObjectBase.html +1 -1
  156. package/docs/types/openapi.OpenapiSchemaObjectBaseShorthand.html +1 -1
  157. package/docs/types/openapi.OpenapiSchemaObjectOneOf.html +1 -1
  158. package/docs/types/openapi.OpenapiSchemaObjectOneOfShorthand.html +1 -1
  159. package/docs/types/openapi.OpenapiSchemaObjectShorthand.html +1 -1
  160. package/docs/types/openapi.OpenapiSchemaPrimitiveGeneric.html +1 -1
  161. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAllOf.html +2 -2
  162. package/docs/types/openapi.OpenapiSchemaShorthandExpressionAnyOf.html +2 -2
  163. package/docs/types/openapi.OpenapiSchemaShorthandExpressionOneOf.html +2 -2
  164. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializableRef.html +2 -2
  165. package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializerRef.html +2 -2
  166. package/docs/types/openapi.OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
  167. package/docs/types/openapi.OpenapiSchemaString.html +1 -1
  168. package/docs/types/openapi.OpenapiShorthandAllTypes.html +1 -1
  169. package/docs/types/openapi.OpenapiShorthandPrimitiveBaseTypes.html +1 -1
  170. package/docs/types/openapi.OpenapiShorthandPrimitiveTypes.html +1 -1
  171. package/docs/types/openapi.OpenapiTypeField.html +1 -1
  172. package/docs/types/system.DreamAppAllowedPackageManagersEnum.html +1 -1
  173. package/docs/types/types.CalendarDateDurationUnit.html +1 -1
  174. package/docs/types/types.CalendarDateObject.html +1 -1
  175. package/docs/types/types.Camelized.html +1 -1
  176. package/docs/types/types.ClockTimeObject.html +1 -1
  177. package/docs/types/types.DbConnectionType.html +1 -1
  178. package/docs/types/types.DbTypes.html +1 -1
  179. package/docs/types/types.DreamAssociationMetadata.html +1 -1
  180. package/docs/types/types.DreamAttributes.html +1 -1
  181. package/docs/types/types.DreamClassAssociationAndStatement.html +1 -1
  182. package/docs/types/types.DreamClassColumn.html +1 -1
  183. package/docs/types/types.DreamColumn.html +1 -1
  184. package/docs/types/types.DreamColumnNames.html +1 -1
  185. package/docs/types/types.DreamLogLevel.html +1 -1
  186. package/docs/types/types.DreamLogger.html +2 -2
  187. package/docs/types/types.DreamModelSerializerType.html +1 -1
  188. package/docs/types/types.DreamOrViewModelClassSerializerKey.html +1 -1
  189. package/docs/types/types.DreamOrViewModelSerializerKey.html +1 -1
  190. package/docs/types/types.DreamParamSafeAttributes.html +1 -1
  191. package/docs/types/types.DreamParamSafeColumnNames.html +1 -1
  192. package/docs/types/types.DreamSerializable.html +1 -1
  193. package/docs/types/types.DreamSerializableArray.html +1 -1
  194. package/docs/types/types.DreamSerializerKey.html +1 -1
  195. package/docs/types/types.DreamSerializers.html +1 -1
  196. package/docs/types/types.DreamVirtualColumns.html +1 -1
  197. package/docs/types/types.DurationUnit.html +1 -1
  198. package/docs/types/types.EncryptAlgorithm.html +1 -1
  199. package/docs/types/types.HasManyStatement.html +1 -1
  200. package/docs/types/types.HasOneStatement.html +1 -1
  201. package/docs/types/types.Hyphenized.html +1 -1
  202. package/docs/types/types.Pascalized.html +1 -1
  203. package/docs/types/types.PrimaryKeyType.html +1 -1
  204. package/docs/types/types.RoundingPrecision.html +1 -1
  205. package/docs/types/types.SerializerCasing.html +1 -1
  206. package/docs/types/types.SimpleObjectSerializerType.html +1 -1
  207. package/docs/types/types.Snakeified.html +1 -1
  208. package/docs/types/types.StrictInterface.html +1 -1
  209. package/docs/types/types.UpdateableAssociationProperties.html +1 -1
  210. package/docs/types/types.UpdateableProperties.html +1 -1
  211. package/docs/types/types.ValidationType.html +1 -1
  212. package/docs/types/types.ViewModel.html +2 -2
  213. package/docs/types/types.ViewModelClass.html +1 -1
  214. package/docs/types/types.WeekdayName.html +1 -1
  215. package/docs/types/types.WhereStatementForDream.html +1 -1
  216. package/docs/types/types.WhereStatementForDreamClass.html +1 -1
  217. package/docs/variables/index.DreamConst.html +1 -1
  218. package/docs/variables/index.ops.html +1 -1
  219. package/docs/variables/openapi.openapiPrimitiveTypes.html +1 -1
  220. package/docs/variables/openapi.openapiShorthandPrimitiveTypes.html +1 -1
  221. package/docs/variables/system.DreamAppAllowedPackageManagersEnumValues.html +1 -1
  222. package/docs/variables/system.primaryKeyTypes.html +1 -1
  223. package/package.json +1 -1
@@ -16,7 +16,7 @@ import loadedOrLoadAssociation from './dream/internal/associations/loadedOrLoadA
16
16
  import undestroyAssociation from './dream/internal/associations/undestroyAssociation.js';
17
17
  import associationStringToNameAndAlias from './dream/internal/associationStringToNameAndAlias.js';
18
18
  import destroyDream from './dream/internal/destroyDream.js';
19
- import { destroyOptions, reallyDestroyOptions, undestroyOptions, } from './dream/internal/destroyOptions.js';
19
+ import { destroyOptions, reallyDestroyOptions, undestroyOptions } from './dream/internal/destroyOptions.js';
20
20
  import ensureSTITypeFieldIsSet from './dream/internal/ensureSTITypeFieldIsSet.js';
21
21
  import findOrCreateBy from './dream/internal/findOrCreateBy.js';
22
22
  import mergeSerializerAssociationEdges from './dream/internal/mergeSerializerAssociationEdges.js';
@@ -878,6 +878,8 @@ export default class Dream {
878
878
  });
879
879
  }
880
880
  /**
881
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
882
+ *
881
883
  * Returns a query which bypasses user-removable default scopes, including on
882
884
  * association loads. An STI child's reserved type discriminator remains
883
885
  * enforced; query the STI base model to span its registered children.
@@ -885,7 +887,7 @@ export default class Dream {
885
887
  * @returns A query which bypasses user-removable default scopes
886
888
  */
887
889
  static removeAllDefaultScopes() {
888
- return this.query().removeAllDefaultScopes();
890
+ return this.query()['removeAllDefaultScopes']();
889
891
  }
890
892
  /**
891
893
  * imports an object from the IOC. This is usually done in rare cases,
@@ -3183,7 +3185,7 @@ export default class Dream {
3183
3185
  * this will raise an exception.
3184
3186
  *
3185
3187
  * ```ts
3186
- * const user = await User.removeAllDefaultScopes().last()
3188
+ * const user = await User.removeDefaultScope('dream:SoftDelete').last()
3187
3189
  * await user.undestroy()
3188
3190
  * ```
3189
3191
  *
@@ -1,3 +1,5 @@
1
+ import installPersistedAttribute from '../../../../dream/internal/installPersistedAttribute.js';
2
+ import RecordNotFound from '../../../../errors/RecordNotFound.js';
1
3
  import range from '../../../../helpers/range.js';
2
4
  import ops from '../../../../ops/index.js';
3
5
  import acquireSortableScopeLocks from './acquireSortableScopeLocks.js';
@@ -9,9 +11,16 @@ import { invalidateSortableRowCache } from './sortableRowCache.js';
9
11
  import { snapshotScopeValue } from './sortableSnapshot.js';
10
12
  import validPosition from './validPosition.js';
11
13
  export default async function setPosition(obj) {
12
- const { dream, txn } = obj;
13
14
  await applyUpdates(obj);
14
- await dream.txn(txn).reload();
15
+ await refreshPosition(obj);
16
+ }
17
+ async function refreshPosition({ dream, positionField, query }) {
18
+ const positions = await query['removeAllDefaultScopes']()
19
+ .where({ [dream['_primaryKey']]: dream.primaryKeyValue() })
20
+ .pluck(positionField);
21
+ if (!positions.length)
22
+ throw new RecordNotFound(dream['sanitizedConstructorName']);
23
+ installPersistedAttribute(dream, positionField, positions[0]);
15
24
  }
16
25
  async function applyUpdates(obj) {
17
26
  const { dream, positionField, scope, txn } = obj;
@@ -629,6 +629,8 @@ export default class DreamClassTransactionBuilder {
629
629
  return new Query(this.dreamInstance).txn(this.dreamTransaction);
630
630
  }
631
631
  /**
632
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
633
+ *
632
634
  * Returns a query which bypasses user-removable default scopes, including on
633
635
  * association loads. An STI child's reserved type discriminator remains
634
636
  * enforced; query the STI base model to span its registered children.
@@ -636,7 +638,7 @@ export default class DreamClassTransactionBuilder {
636
638
  * @returns A query which bypasses user-removable default scopes
637
639
  */
638
640
  removeAllDefaultScopes() {
639
- return this.queryInstance().removeAllDefaultScopes();
641
+ return this.queryInstance()['removeAllDefaultScopes']();
640
642
  }
641
643
  /**
642
644
  * Prevents a specific default scope from applying when
@@ -10,7 +10,7 @@ import destroyAssociation from './internal/associations/destroyAssociation.js';
10
10
  import loadedOrLoadAssociation from './internal/associations/loadedOrLoadAssociation.js';
11
11
  import undestroyAssociation from './internal/associations/undestroyAssociation.js';
12
12
  import destroyDream from './internal/destroyDream.js';
13
- import { destroyOptions, reallyDestroyOptions, undestroyOptions, } from './internal/destroyOptions.js';
13
+ import { destroyOptions, reallyDestroyOptions, undestroyOptions } from './internal/destroyOptions.js';
14
14
  import reload from './internal/reload.js';
15
15
  import saveDream from './internal/saveDream.js';
16
16
  import { DEFAULT_BYPASS_ALL_DEFAULT_SCOPES, DEFAULT_DEFAULT_SCOPES_TO_BYPASS, DEFAULT_SKIP_HOOKS, } from './internal/scopeHelpers.js';
@@ -227,7 +227,7 @@ export default class DreamInstanceTransactionBuilder {
227
227
  * this will raise an exception.
228
228
  *
229
229
  * ```ts
230
- * const user = await User.removeAllDefaultScopes().last()
230
+ * const user = await User.removeDefaultScope('dream:SoftDelete').last()
231
231
  * await user.txn(txn).undestroy()
232
232
  * ```
233
233
  *
@@ -44,6 +44,8 @@ export default class LoadBuilder {
44
44
  return this;
45
45
  }
46
46
  /**
47
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
48
+ *
47
49
  * Prevents user-removable default scopes from applying when loading
48
50
  * associations. An associated STI child's reserved type discriminator remains
49
51
  * enforced; loading through its STI base still spans registered children.
@@ -52,14 +54,14 @@ export default class LoadBuilder {
52
54
  * const user = await User.firstOrFail()
53
55
  * const loaded = await user
54
56
  * .load('posts')
55
- * .removeAllDefaultScopes()
57
+ * .removeDefaultScope('dream:SoftDelete')
56
58
  * .execute()
57
59
  * ```
58
60
  *
59
61
  * @returns The LoadBuilder instance for chaining
60
62
  */
61
63
  removeAllDefaultScopes() {
62
- this.query = this.query.removeAllDefaultScopes();
64
+ this.query = this.query['removeAllDefaultScopes']();
63
65
  return this;
64
66
  }
65
67
  /**
@@ -778,6 +778,8 @@ export default class Query {
778
778
  });
779
779
  }
780
780
  /**
781
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
782
+ *
781
783
  * Prevents user-removable default scopes from applying when the Query is
782
784
  * executed, including when associations are loaded. An STI child's reserved
783
785
  * type discriminator remains enforced; query the STI base model to span its
@@ -21,6 +21,7 @@ import DreamApp from '../../dream-app/index.js';
21
21
  import Dream from '../../Dream.js';
22
22
  import ArrayTargetIncompatibleWithThroughAssociation from '../../errors/associations/ArrayTargetIncompatibleWithThroughAssociation.js';
23
23
  import CannotJoinPolymorphicBelongsToError from '../../errors/associations/CannotJoinPolymorphicBelongsToError.js';
24
+ import IncompatibleThroughAssociationTarget from '../../errors/associations/IncompatibleThroughAssociationTarget.js';
24
25
  import JoinAttemptedOnMissingAssociation from '../../errors/associations/JoinAttemptedOnMissingAssociation.js';
25
26
  import MissingRequiredAssociationAndClause from '../../errors/associations/MissingRequiredAssociationAndClause.js';
26
27
  import MissingRequiredPassthroughForAssociationAndClause from '../../errors/associations/MissingRequiredPassthroughForAssociationAndClause.js';
@@ -1547,7 +1548,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
1547
1548
  joinAndStatement,
1548
1549
  joinType,
1549
1550
  previousThroughAssociations: [],
1550
- dreamClassThroughAssociationWantsToHydrate: undefined,
1551
+ polymorphicSourceTargetModelClass: undefined,
1551
1552
  });
1552
1553
  query = results.query;
1553
1554
  /**
@@ -1976,7 +1977,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
1976
1977
  joinAndStatement: {},
1977
1978
  previousThroughAssociations: [],
1978
1979
  joinType,
1979
- dreamClassThroughAssociationWantsToHydrate: undefined,
1980
+ polymorphicSourceTargetModelClass: undefined,
1980
1981
  });
1981
1982
  }
1982
1983
  const associatedDreamClass = associationReferencedByThroughAssociation.modelCB();
@@ -1992,12 +1993,24 @@ export default class KyselyQueryDriver extends QueryDriverBase {
1992
1993
  association: throughAssociation,
1993
1994
  throughClass: associatedDreamClass,
1994
1995
  });
1996
+ const outermostThroughAssociation = previousThroughAssociations[0]?.association ?? throughAssociation;
1997
+ const outermostTargetModelClass = outermostThroughAssociation.modelCB();
1998
+ const sourceTargetModelClassOrClasses = sourceAssociation.modelCB();
1999
+ const sourceTargetModelClasses = Array.isArray(sourceTargetModelClassOrClasses)
2000
+ ? sourceTargetModelClassOrClasses
2001
+ : [sourceTargetModelClassOrClasses];
2002
+ if (!sourceTargetModelClasses.some(sourceTargetModelClass => outermostTargetModelClass.typeof(sourceTargetModelClass)))
2003
+ throw new IncompatibleThroughAssociationTarget({
2004
+ outermostAssociation: outermostThroughAssociation,
2005
+ outermostTargetModelClass,
2006
+ sourceAssociation,
2007
+ });
1995
2008
  /**
1996
- * When the source is a polymorphic BelongsTo association, use the target of the through
1997
- * association to determine which class to target.
2009
+ * A polymorphic source can accept several model classes. The outermost
2010
+ * association target selects the one this through chain is following.
1998
2011
  */
1999
- const dreamClassThroughAssociationWantsToHydrate = Array.isArray(sourceAssociation.modelCB())
2000
- ? throughAssociation.modelCB()
2012
+ const polymorphicSourceTargetModelClass = Array.isArray(sourceTargetModelClassOrClasses)
2013
+ ? outermostTargetModelClass
2001
2014
  : undefined;
2002
2015
  /**
2003
2016
  * Add the source that `sourceAssociation` points to. Note that since joinsBridgeThroughAssociations
@@ -2031,7 +2044,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2031
2044
  { association: throughAssociation, selfTableAlias: previousTableAlias },
2032
2045
  ],
2033
2046
  joinType,
2034
- dreamClassThroughAssociationWantsToHydrate,
2047
+ polymorphicSourceTargetModelClass,
2035
2048
  });
2036
2049
  }
2037
2050
  applyOneJoin({ query, dreamClass, association,
@@ -2054,7 +2067,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2054
2067
  /**
2055
2068
  * previousTableAlias is always set
2056
2069
  */
2057
- previousTableAlias, selfTableAlias = previousTableAlias, joinAndStatement = {}, previousThroughAssociations, joinType, dreamClassThroughAssociationWantsToHydrate, }) {
2070
+ previousTableAlias, selfTableAlias = previousTableAlias, joinAndStatement = {}, previousThroughAssociations, joinType, polymorphicSourceTargetModelClass, }) {
2058
2071
  if (association.type !== 'BelongsTo' && association.through) {
2059
2072
  return this.joinsBridgeThroughAssociations({
2060
2073
  query,
@@ -2077,7 +2090,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2077
2090
  joinAndStatement,
2078
2091
  previousThroughAssociations,
2079
2092
  joinType,
2080
- dreamClassThroughAssociationWantsToHydrate,
2093
+ polymorphicSourceTargetModelClass,
2081
2094
  });
2082
2095
  }
2083
2096
  addAssociationJoinStatementToQuery({ query, dreamClass, association,
@@ -2100,12 +2113,38 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2100
2113
  /**
2101
2114
  * previousTableAlias is always set
2102
2115
  */
2103
- previousTableAlias, selfTableAlias, joinAndStatement, previousThroughAssociations, joinType, dreamClassThroughAssociationWantsToHydrate, }) {
2116
+ previousTableAlias, selfTableAlias, joinAndStatement, previousThroughAssociations, joinType, polymorphicSourceTargetModelClass, }) {
2104
2117
  const currentTableAlias = explicitAlias ?? association.as;
2105
- const _associatedDreamClass = association.modelCB();
2106
- const associatedDreamClass = Array.isArray(_associatedDreamClass)
2107
- ? _associatedDreamClass[0]
2108
- : _associatedDreamClass;
2118
+ const associationModelClassOrPolymorphicModelClasses = association.modelCB();
2119
+ const modelClassUsedForJoinConditions = Array.isArray(associationModelClassOrPolymorphicModelClasses)
2120
+ ? associationModelClassOrPolymorphicModelClasses[0]
2121
+ : associationModelClassOrPolymorphicModelClasses;
2122
+ /**
2123
+ * The outermost through association defines what callers expect this join to
2124
+ * return, so its target is the single owner of the target table's default
2125
+ * scopes. Inner associations describe how to reach that table; the
2126
+ * compatibility check in `joinsBridgeThroughAssociations` ensures they can
2127
+ * actually return the outer target.
2128
+ *
2129
+ * For example, BearBnB already defines `Host.places` and `Place.rooms`. It
2130
+ * could expose only bedrooms from a host without adding `Place.bedrooms`:
2131
+ *
2132
+ * // Place.ts
2133
+ * @deco.HasMany('Room')
2134
+ * public rooms: Room[]
2135
+ *
2136
+ * // Host.ts
2137
+ * @deco.HasMany('Room/Bedroom', { through: 'places', source: 'rooms' })
2138
+ * public bedrooms: Bedroom[]
2139
+ *
2140
+ * `Host.bedrooms` is the outermost association, so Bedroom's `dream:STI`
2141
+ * scope is applied once to the final rooms join. Bedroom is a subclass of
2142
+ * Room, so `Place.rooms` is a compatible path. Reversing those targets, or
2143
+ * mixing sibling STI children, raises instead of silently changing meaning.
2144
+ */
2145
+ const modelClassWhoseDefaultScopesApplyToJoin = previousThroughAssociations[0]?.association.modelCB() ??
2146
+ polymorphicSourceTargetModelClass ??
2147
+ modelClassUsedForJoinConditions;
2109
2148
  /**
2110
2149
  * Stacked order/distinct clauses are applied in join order: the options of
2111
2150
  * the through association whose bridging joins were added to the query
@@ -2131,22 +2170,22 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2131
2170
  }
2132
2171
  }
2133
2172
  if (association.type === 'BelongsTo') {
2134
- if (!dreamClassThroughAssociationWantsToHydrate && Array.isArray(association.modelCB()))
2173
+ if (!polymorphicSourceTargetModelClass && Array.isArray(association.modelCB()))
2135
2174
  throw new CannotJoinPolymorphicBelongsToError({
2136
2175
  dreamClass,
2137
2176
  association,
2138
2177
  innerJoinStatements: this.query['innerJoinStatements'],
2139
2178
  leftJoinStatements: this.query['leftJoinStatements'],
2140
2179
  });
2141
- const to = (dreamClassThroughAssociationWantsToHydrate ?? association.modelCB()).table;
2180
+ const to = (polymorphicSourceTargetModelClass ?? association.modelCB()).table;
2142
2181
  const joinTableExpression = this.aliasedJoinTableExpression(to, currentTableAlias);
2143
2182
  query = query[(joinType === 'inner' ? 'innerJoin' : 'leftJoin')](joinTableExpression, (join) => {
2144
2183
  join = join.onRef(this.namespaceColumn(association.foreignKey(), previousTableAlias), '=', this.namespaceColumn(association.primaryKey(undefined, {
2145
- associatedClassOverride: dreamClassThroughAssociationWantsToHydrate,
2184
+ associatedClassOverride: polymorphicSourceTargetModelClass,
2146
2185
  }), currentTableAlias));
2147
- if (dreamClassThroughAssociationWantsToHydrate) {
2186
+ if (polymorphicSourceTargetModelClass) {
2148
2187
  join = join.on((eb) => this.whereStatementToExpressionWrapper(dreamClass, eb, this.aliasWhereStatement({
2149
- [association.foreignKeyTypeField()]: dreamClassThroughAssociationWantsToHydrate.sanitizedName,
2188
+ [association.foreignKeyTypeField()]: polymorphicSourceTargetModelClass.sanitizedName,
2150
2189
  }, previousTableAlias)));
2151
2190
  }
2152
2191
  join = this.applyPreviousThroughAssociationAndStatementsToJoinStatement({
@@ -2156,14 +2195,14 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2156
2195
  currentTableAlias,
2157
2196
  joinAndStatement,
2158
2197
  });
2159
- join = this.conditionallyApplyDefaultScopesDependentOnAssociation({
2198
+ join = this.applyAssociationDefaultScopesToJoin({
2160
2199
  dreamClass,
2161
2200
  join,
2162
2201
  tableNameOrAlias: currentTableAlias,
2163
2202
  association,
2164
- throughAssociatedClassOverride: dreamClassThroughAssociationWantsToHydrate,
2203
+ modelClassWhoseDefaultScopesApply: modelClassWhoseDefaultScopesApplyToJoin,
2165
2204
  });
2166
- join = this.applyJoinAndStatement(associatedDreamClass, join, joinAndStatement, currentTableAlias);
2205
+ join = this.applyJoinAndStatement(modelClassUsedForJoinConditions, join, joinAndStatement, currentTableAlias);
2167
2206
  return join;
2168
2207
  });
2169
2208
  }
@@ -2174,8 +2213,8 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2174
2213
  join = join.onRef(this.namespaceColumn(association.primaryKey(), previousTableAlias), '=', this.namespaceColumn(association.foreignKey(), currentTableAlias));
2175
2214
  if (association.polymorphic) {
2176
2215
  join = join.on((eb) => this.whereStatementToExpressionWrapper(dreamClass, eb, this.aliasWhereStatement({
2177
- [association.foreignKeyTypeField()]: dreamClassThroughAssociationWantsToHydrate
2178
- ? dreamClassThroughAssociationWantsToHydrate.referenceTypeString
2216
+ [association.foreignKeyTypeField()]: polymorphicSourceTargetModelClass
2217
+ ? polymorphicSourceTargetModelClass.referenceTypeString
2179
2218
  : dreamClass.referenceTypeString,
2180
2219
  }, currentTableAlias)));
2181
2220
  }
@@ -2194,14 +2233,14 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2194
2233
  selfTableAlias,
2195
2234
  joinAndStatement,
2196
2235
  });
2197
- join = this.conditionallyApplyDefaultScopesDependentOnAssociation({
2236
+ join = this.applyAssociationDefaultScopesToJoin({
2198
2237
  dreamClass,
2199
2238
  join,
2200
2239
  tableNameOrAlias: currentTableAlias,
2201
2240
  association,
2202
- throughAssociatedClassOverride: dreamClassThroughAssociationWantsToHydrate,
2241
+ modelClassWhoseDefaultScopesApply: modelClassWhoseDefaultScopesApplyToJoin,
2203
2242
  });
2204
- join = this.applyJoinAndStatement(associatedDreamClass, join, joinAndStatement, currentTableAlias);
2243
+ join = this.applyJoinAndStatement(modelClassUsedForJoinConditions, join, joinAndStatement, currentTableAlias);
2205
2244
  return join;
2206
2245
  });
2207
2246
  if (association.type === 'HasMany') {
@@ -2312,11 +2351,9 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2312
2351
  if (missingRequiredWhereStatements.length)
2313
2352
  throw new MissingRequiredAssociationAndClause(association, missingRequiredWhereStatements[0]);
2314
2353
  }
2315
- conditionallyApplyDefaultScopesDependentOnAssociation({ dreamClass, join, tableNameOrAlias, association, throughAssociatedClassOverride, }) {
2354
+ applyAssociationDefaultScopesToJoin({ dreamClass, join, tableNameOrAlias, association, modelClassWhoseDefaultScopesApply, }) {
2316
2355
  let scopesQuery = new Query(this.dreamInstance);
2317
- const associationClass = throughAssociatedClassOverride ?? association.modelCB();
2318
- const associationScopes = associationClass['scopes'].default;
2319
- for (const scope of associationScopes) {
2356
+ for (const scope of modelClassWhoseDefaultScopesApply['scopes'].default) {
2320
2357
  if (!shouldBypassDefaultScope(scope.method, {
2321
2358
  bypassAllDefaultScopes: this.query['bypassAllDefaultScopes'],
2322
2359
  defaultScopesToBypass: [
@@ -2324,7 +2361,7 @@ export default class KyselyQueryDriver extends QueryDriverBase {
2324
2361
  ...(association.withoutDefaultScopes || []),
2325
2362
  ],
2326
2363
  })) {
2327
- const tempQuery = associationClass[scope.method](scopesQuery);
2364
+ const tempQuery = modelClassWhoseDefaultScopesApply[scope.method](scopesQuery);
2328
2365
  // The scope method on a Dream model should return a clone of the Query it receives
2329
2366
  // (e.g. by returning `scope.where(...)`), but in case the function doesn't return,
2330
2367
  // or returns the wrong thing, we check before overriding `scopesQuery` with what the
@@ -1,6 +1,6 @@
1
1
  export default function applyScopeBypassingSettingsToQuery(query, { bypassAllDefaultScopes, defaultScopesToBypass, }) {
2
2
  if (bypassAllDefaultScopes)
3
- query = query.removeAllDefaultScopes();
3
+ query = query['removeAllDefaultScopes']();
4
4
  defaultScopesToBypass.forEach(defaultScopeToBypass => {
5
5
  query = query.removeDefaultScope(defaultScopeToBypass);
6
6
  });
@@ -5,6 +5,8 @@ export default async function loadedOrLoadAssociation(dream, dreamOrTransactionB
5
5
  let scope = dreamOrTransactionBuilder.associationQuery(associationName, associationQueryOptions);
6
6
  if (options?.passthrough)
7
7
  scope = scope.passthrough(options.passthrough);
8
+ if (options?.connection)
9
+ scope = scope.connection(options.connection);
8
10
  if (association?.type === 'HasMany') {
9
11
  dream[associationName] = (await scope.all());
10
12
  }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Installs one database-sourced scalar as the persisted value without
3
+ * replacing the saved-change history established by the current save.
4
+ */
5
+ export default function installPersistedAttribute(dream, column, val) {
6
+ dream['currentAttributes'][column] = val;
7
+ dream['frozenAttributes'][column] = val;
8
+ dream['originalAttributes'][column] = val;
9
+ }
@@ -21,7 +21,7 @@ export default async function loadDependentDestroyTree(dream, txn, { reallyDestr
21
21
  loadBuilder = loadBuilder.load(...args);
22
22
  }
23
23
  if (bypassAllDefaultScopes) {
24
- loadBuilder = loadBuilder.removeAllDefaultScopes();
24
+ loadBuilder = loadBuilder['removeAllDefaultScopes']();
25
25
  }
26
26
  else {
27
27
  for (const scopeName of defaultScopesToBypass) {
@@ -10,7 +10,9 @@ export default async function reload(dream, txn = null) {
10
10
  // we have persisted are not yet propagated
11
11
  else
12
12
  query = query.connection('primary');
13
- query = query.removeAllDefaultScopes().where({ [dream['_primaryKey']]: dream.primaryKeyValue() });
13
+ query = query['removeAllDefaultScopes']().where({
14
+ [dream['_primaryKey']]: dream.primaryKeyValue(),
15
+ });
14
16
  const reloadedRecord = await query.firstOrFail();
15
17
  dream.setAttributes(reloadedRecord.getAttributes());
16
18
  dream['freezeAttributes']();
@@ -0,0 +1,11 @@
1
+ export default class IncompatibleThroughAssociationTarget extends Error {
2
+ constructor({ outermostAssociation, outermostTargetModelClass, sourceAssociation, }) {
3
+ super(`Through association \`${outermostAssociation.as}\` targets \`${outermostTargetModelClass.sanitizedName}\`, but source association \`${sourceAssociation.as}\` targets ${targetDescription(sourceAssociation)}. ` +
4
+ `The through association's target must be the same as or a subclass of a source target.`);
5
+ }
6
+ }
7
+ function targetDescription(association) {
8
+ const targetModelClassOrClasses = association.modelCB();
9
+ const targetNames = (Array.isArray(targetModelClassOrClasses) ? targetModelClassOrClasses : [targetModelClassOrClasses]).map(targetModelClass => `\`${targetModelClass.sanitizedName}\``);
10
+ return targetNames.join(', ');
11
+ }
@@ -16,7 +16,7 @@ import loadedOrLoadAssociation from './dream/internal/associations/loadedOrLoadA
16
16
  import undestroyAssociation from './dream/internal/associations/undestroyAssociation.js';
17
17
  import associationStringToNameAndAlias from './dream/internal/associationStringToNameAndAlias.js';
18
18
  import destroyDream from './dream/internal/destroyDream.js';
19
- import { destroyOptions, reallyDestroyOptions, undestroyOptions, } from './dream/internal/destroyOptions.js';
19
+ import { destroyOptions, reallyDestroyOptions, undestroyOptions } from './dream/internal/destroyOptions.js';
20
20
  import ensureSTITypeFieldIsSet from './dream/internal/ensureSTITypeFieldIsSet.js';
21
21
  import findOrCreateBy from './dream/internal/findOrCreateBy.js';
22
22
  import mergeSerializerAssociationEdges from './dream/internal/mergeSerializerAssociationEdges.js';
@@ -878,6 +878,8 @@ export default class Dream {
878
878
  });
879
879
  }
880
880
  /**
881
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
882
+ *
881
883
  * Returns a query which bypasses user-removable default scopes, including on
882
884
  * association loads. An STI child's reserved type discriminator remains
883
885
  * enforced; query the STI base model to span its registered children.
@@ -885,7 +887,7 @@ export default class Dream {
885
887
  * @returns A query which bypasses user-removable default scopes
886
888
  */
887
889
  static removeAllDefaultScopes() {
888
- return this.query().removeAllDefaultScopes();
890
+ return this.query()['removeAllDefaultScopes']();
889
891
  }
890
892
  /**
891
893
  * imports an object from the IOC. This is usually done in rare cases,
@@ -3183,7 +3185,7 @@ export default class Dream {
3183
3185
  * this will raise an exception.
3184
3186
  *
3185
3187
  * ```ts
3186
- * const user = await User.removeAllDefaultScopes().last()
3188
+ * const user = await User.removeDefaultScope('dream:SoftDelete').last()
3187
3189
  * await user.undestroy()
3188
3190
  * ```
3189
3191
  *
@@ -1,3 +1,5 @@
1
+ import installPersistedAttribute from '../../../../dream/internal/installPersistedAttribute.js';
2
+ import RecordNotFound from '../../../../errors/RecordNotFound.js';
1
3
  import range from '../../../../helpers/range.js';
2
4
  import ops from '../../../../ops/index.js';
3
5
  import acquireSortableScopeLocks from './acquireSortableScopeLocks.js';
@@ -9,9 +11,16 @@ import { invalidateSortableRowCache } from './sortableRowCache.js';
9
11
  import { snapshotScopeValue } from './sortableSnapshot.js';
10
12
  import validPosition from './validPosition.js';
11
13
  export default async function setPosition(obj) {
12
- const { dream, txn } = obj;
13
14
  await applyUpdates(obj);
14
- await dream.txn(txn).reload();
15
+ await refreshPosition(obj);
16
+ }
17
+ async function refreshPosition({ dream, positionField, query }) {
18
+ const positions = await query['removeAllDefaultScopes']()
19
+ .where({ [dream['_primaryKey']]: dream.primaryKeyValue() })
20
+ .pluck(positionField);
21
+ if (!positions.length)
22
+ throw new RecordNotFound(dream['sanitizedConstructorName']);
23
+ installPersistedAttribute(dream, positionField, positions[0]);
15
24
  }
16
25
  async function applyUpdates(obj) {
17
26
  const { dream, positionField, scope, txn } = obj;
@@ -629,6 +629,8 @@ export default class DreamClassTransactionBuilder {
629
629
  return new Query(this.dreamInstance).txn(this.dreamTransaction);
630
630
  }
631
631
  /**
632
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
633
+ *
632
634
  * Returns a query which bypasses user-removable default scopes, including on
633
635
  * association loads. An STI child's reserved type discriminator remains
634
636
  * enforced; query the STI base model to span its registered children.
@@ -636,7 +638,7 @@ export default class DreamClassTransactionBuilder {
636
638
  * @returns A query which bypasses user-removable default scopes
637
639
  */
638
640
  removeAllDefaultScopes() {
639
- return this.queryInstance().removeAllDefaultScopes();
641
+ return this.queryInstance()['removeAllDefaultScopes']();
640
642
  }
641
643
  /**
642
644
  * Prevents a specific default scope from applying when
@@ -10,7 +10,7 @@ import destroyAssociation from './internal/associations/destroyAssociation.js';
10
10
  import loadedOrLoadAssociation from './internal/associations/loadedOrLoadAssociation.js';
11
11
  import undestroyAssociation from './internal/associations/undestroyAssociation.js';
12
12
  import destroyDream from './internal/destroyDream.js';
13
- import { destroyOptions, reallyDestroyOptions, undestroyOptions, } from './internal/destroyOptions.js';
13
+ import { destroyOptions, reallyDestroyOptions, undestroyOptions } from './internal/destroyOptions.js';
14
14
  import reload from './internal/reload.js';
15
15
  import saveDream from './internal/saveDream.js';
16
16
  import { DEFAULT_BYPASS_ALL_DEFAULT_SCOPES, DEFAULT_DEFAULT_SCOPES_TO_BYPASS, DEFAULT_SKIP_HOOKS, } from './internal/scopeHelpers.js';
@@ -227,7 +227,7 @@ export default class DreamInstanceTransactionBuilder {
227
227
  * this will raise an exception.
228
228
  *
229
229
  * ```ts
230
- * const user = await User.removeAllDefaultScopes().last()
230
+ * const user = await User.removeDefaultScope('dream:SoftDelete').last()
231
231
  * await user.txn(txn).undestroy()
232
232
  * ```
233
233
  *
@@ -44,6 +44,8 @@ export default class LoadBuilder {
44
44
  return this;
45
45
  }
46
46
  /**
47
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
48
+ *
47
49
  * Prevents user-removable default scopes from applying when loading
48
50
  * associations. An associated STI child's reserved type discriminator remains
49
51
  * enforced; loading through its STI base still spans registered children.
@@ -52,14 +54,14 @@ export default class LoadBuilder {
52
54
  * const user = await User.firstOrFail()
53
55
  * const loaded = await user
54
56
  * .load('posts')
55
- * .removeAllDefaultScopes()
57
+ * .removeDefaultScope('dream:SoftDelete')
56
58
  * .execute()
57
59
  * ```
58
60
  *
59
61
  * @returns The LoadBuilder instance for chaining
60
62
  */
61
63
  removeAllDefaultScopes() {
62
- this.query = this.query.removeAllDefaultScopes();
64
+ this.query = this.query['removeAllDefaultScopes']();
63
65
  return this;
64
66
  }
65
67
  /**
@@ -778,6 +778,8 @@ export default class Query {
778
778
  });
779
779
  }
780
780
  /**
781
+ * @deprecated Use {@link removeDefaultScope} instead. This method will become private in v3.
782
+ *
781
783
  * Prevents user-removable default scopes from applying when the Query is
782
784
  * executed, including when associations are loaded. An STI child's reserved
783
785
  * type discriminator remains enforced; query the STI base model to span its