@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.
- package/dist/cjs/src/Dream.js +5 -3
- package/dist/cjs/src/decorators/field/sortable/helpers/setPosition.js +11 -2
- package/dist/cjs/src/dream/DreamClassTransactionBuilder.js +3 -1
- package/dist/cjs/src/dream/DreamInstanceTransactionBuilder.js +2 -2
- package/dist/cjs/src/dream/LoadBuilder.js +4 -2
- package/dist/cjs/src/dream/Query.js +2 -0
- package/dist/cjs/src/dream/QueryDriver/Kysely.js +69 -32
- package/dist/cjs/src/dream/internal/applyScopeBypassingSettingsToQuery.js +1 -1
- package/dist/cjs/src/dream/internal/associations/loadedOrLoadAssociation.js +2 -0
- package/dist/cjs/src/dream/internal/installPersistedAttribute.js +9 -0
- package/dist/cjs/src/dream/internal/instanceMutationOptions.js +1 -0
- package/dist/cjs/src/dream/internal/loadDependentDestroyTree.js +1 -1
- package/dist/cjs/src/dream/internal/reload.js +3 -1
- package/dist/cjs/src/errors/associations/IncompatibleThroughAssociationTarget.js +11 -0
- package/dist/esm/src/Dream.js +5 -3
- package/dist/esm/src/decorators/field/sortable/helpers/setPosition.js +11 -2
- package/dist/esm/src/dream/DreamClassTransactionBuilder.js +3 -1
- package/dist/esm/src/dream/DreamInstanceTransactionBuilder.js +2 -2
- package/dist/esm/src/dream/LoadBuilder.js +4 -2
- package/dist/esm/src/dream/Query.js +2 -0
- package/dist/esm/src/dream/QueryDriver/Kysely.js +69 -32
- package/dist/esm/src/dream/internal/applyScopeBypassingSettingsToQuery.js +1 -1
- package/dist/esm/src/dream/internal/associations/loadedOrLoadAssociation.js +2 -0
- package/dist/esm/src/dream/internal/installPersistedAttribute.js +9 -0
- package/dist/esm/src/dream/internal/instanceMutationOptions.js +1 -0
- package/dist/esm/src/dream/internal/loadDependentDestroyTree.js +1 -1
- package/dist/esm/src/dream/internal/reload.js +3 -1
- package/dist/esm/src/errors/associations/IncompatibleThroughAssociationTarget.js +11 -0
- package/dist/types/src/Dream.d.ts +39 -25
- package/dist/types/src/dream/DreamClassTransactionBuilder.d.ts +4 -2
- package/dist/types/src/dream/DreamInstanceTransactionBuilder.d.ts +15 -21
- package/dist/types/src/dream/LoadBuilder.d.ts +3 -1
- package/dist/types/src/dream/Query.d.ts +2 -0
- package/dist/types/src/dream/QueryDriver/Kysely.d.ts +1 -1
- package/dist/types/src/dream/internal/associations/loadedOrLoadAssociation.d.ts +2 -0
- package/dist/types/src/dream/internal/installPersistedAttribute.d.ts +6 -0
- package/dist/types/src/dream/internal/instanceMutationOptions.d.ts +13 -0
- package/dist/types/src/errors/associations/IncompatibleThroughAssociationTarget.d.ts +9 -0
- package/docs/classes/db.DreamMigrationHelpers.html +11 -11
- package/docs/classes/db.KyselyQueryDriver.html +43 -43
- package/docs/classes/db.PostgresQueryDriver.html +44 -44
- package/docs/classes/db.QueryDriverBase.html +42 -42
- package/docs/classes/errors.CheckConstraintViolation.html +3 -3
- package/docs/classes/errors.ColumnOverflow.html +3 -3
- package/docs/classes/errors.CreateOrFindByFailedToCreateAndFind.html +3 -3
- package/docs/classes/errors.DataIncompatibleWithDatabaseField.html +3 -3
- package/docs/classes/errors.DataTypeColumnTypeMismatch.html +3 -3
- package/docs/classes/errors.DecryptionError.html +2 -2
- package/docs/classes/errors.DecryptionParseError.html +2 -2
- package/docs/classes/errors.DecryptionRotationError.html +3 -3
- package/docs/classes/errors.GlobalNameNotSet.html +3 -3
- package/docs/classes/errors.InvalidCalendarDate.html +2 -2
- package/docs/classes/errors.InvalidClockTime.html +2 -2
- package/docs/classes/errors.InvalidClockTimeTz.html +2 -2
- package/docs/classes/errors.InvalidDateTime.html +2 -2
- package/docs/classes/errors.MissingSerializersDefinition.html +3 -3
- package/docs/classes/errors.NonLoadedAssociation.html +3 -3
- package/docs/classes/errors.NotNullViolation.html +3 -3
- package/docs/classes/errors.RecordNotFound.html +3 -3
- package/docs/classes/errors.SortableBatchRequiresTooManyScopeLocks.html +3 -3
- package/docs/classes/errors.SortableScopeDidNotStabilize.html +3 -3
- package/docs/classes/errors.SortableScopeLockWaitTimedOut.html +3 -3
- package/docs/classes/errors.ValidationError.html +3 -3
- package/docs/classes/index.CalendarDate.html +33 -33
- package/docs/classes/index.ClockTime.html +32 -32
- package/docs/classes/index.ClockTimeTz.html +35 -35
- package/docs/classes/index.DateTime.html +86 -86
- package/docs/classes/index.Decorators.html +19 -19
- package/docs/classes/index.Dream.html +150 -145
- package/docs/classes/index.DreamApp.html +10 -10
- package/docs/classes/index.DreamTransaction.html +2 -2
- package/docs/classes/index.Env.html +2 -2
- package/docs/classes/index.Query.html +69 -68
- package/docs/classes/system.CliFileWriter.html +4 -4
- package/docs/classes/system.DreamBin.html +2 -2
- package/docs/classes/system.DreamCLI.html +7 -7
- package/docs/classes/system.DreamImporter.html +2 -2
- package/docs/classes/system.DreamLogos.html +2 -2
- package/docs/classes/system.DreamSerializerBuilder.html +11 -11
- package/docs/classes/system.ObjectSerializerBuilder.html +8 -8
- package/docs/classes/system.PathHelpers.html +3 -3
- package/docs/classes/utils.Encrypt.html +3 -3
- package/docs/classes/utils.Range.html +2 -2
- package/docs/functions/db.closeAllDbConnections.html +1 -1
- package/docs/functions/db.dreamDbConnections.html +1 -1
- package/docs/functions/db.untypedDb.html +1 -1
- package/docs/functions/db.validateColumn.html +1 -1
- package/docs/functions/db.validateTable.html +1 -1
- package/docs/functions/errors.pgErrorType.html +1 -1
- package/docs/functions/index.DreamSerializer.html +1 -1
- package/docs/functions/index.ObjectSerializer.html +1 -1
- package/docs/functions/index.ReplicaSafe.html +1 -1
- package/docs/functions/index.STI.html +1 -1
- package/docs/functions/index.SoftDelete.html +1 -1
- package/docs/functions/utils.camelize.html +1 -1
- package/docs/functions/utils.capitalize.html +1 -1
- package/docs/functions/utils.cloneDeepSafe.html +1 -1
- package/docs/functions/utils.compact.html +1 -1
- package/docs/functions/utils.groupBy.html +1 -1
- package/docs/functions/utils.hyphenize.html +1 -1
- package/docs/functions/utils.intersection.html +1 -1
- package/docs/functions/utils.isEmpty.html +1 -1
- package/docs/functions/utils.normalizeUnicode.html +1 -1
- package/docs/functions/utils.pascalize.html +1 -1
- package/docs/functions/utils.percent.html +1 -1
- package/docs/functions/utils.range.html +1 -1
- package/docs/functions/utils.round.html +1 -1
- package/docs/functions/utils.sanitizeString.html +1 -1
- package/docs/functions/utils.snakeify.html +1 -1
- package/docs/functions/utils.sort.html +1 -1
- package/docs/functions/utils.sortBy.html +1 -1
- package/docs/functions/utils.sortObjectByKey.html +1 -1
- package/docs/functions/utils.sortObjectByValue.html +1 -1
- package/docs/functions/utils.uncapitalize.html +1 -1
- package/docs/functions/utils.uniq.html +1 -1
- package/docs/interfaces/openapi.OpenapiDescription.html +2 -2
- package/docs/interfaces/openapi.OpenapiSchemaProperties.html +1 -1
- package/docs/interfaces/openapi.OpenapiSchemaPropertiesShorthand.html +1 -1
- package/docs/interfaces/openapi.OpenapiTypeFieldObject.html +1 -1
- package/docs/interfaces/types.BelongsToStatement.html +2 -2
- package/docs/interfaces/types.DecoratorContext.html +2 -2
- package/docs/interfaces/types.DreamAppInitOptions.html +2 -2
- package/docs/interfaces/types.DreamAppOpts.html +2 -2
- package/docs/interfaces/types.DreamDbConfig.html +5 -5
- package/docs/interfaces/types.DurationObject.html +2 -2
- package/docs/interfaces/types.EncryptOptions.html +2 -2
- package/docs/interfaces/types.InternalAnyTypedSerializerRendersMany.html +2 -2
- package/docs/interfaces/types.InternalAnyTypedSerializerRendersOne.html +2 -2
- package/docs/interfaces/types.SerializerRendererOpts.html +2 -2
- package/docs/types/openapi.CommonOpenapiSchemaObjectFields.html +1 -1
- package/docs/types/openapi.OpenapiAllTypes.html +1 -1
- package/docs/types/openapi.OpenapiFormats.html +1 -1
- package/docs/types/openapi.OpenapiNumberFormats.html +1 -1
- package/docs/types/openapi.OpenapiPrimitiveBaseTypes.html +1 -1
- package/docs/types/openapi.OpenapiPrimitiveTypes.html +1 -1
- package/docs/types/openapi.OpenapiSchemaArray.html +1 -1
- package/docs/types/openapi.OpenapiSchemaArrayShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaBase.html +1 -1
- package/docs/types/openapi.OpenapiSchemaBody.html +1 -1
- package/docs/types/openapi.OpenapiSchemaBodyShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaCommonFields.html +1 -1
- package/docs/types/openapi.OpenapiSchemaExpressionAllOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaExpressionAnyOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaExpressionOneOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaExpressionRef.html +2 -2
- package/docs/types/openapi.OpenapiSchemaExpressionRefSchemaShorthand.html +2 -2
- package/docs/types/openapi.OpenapiSchemaInteger.html +1 -1
- package/docs/types/openapi.OpenapiSchemaNull.html +2 -2
- package/docs/types/openapi.OpenapiSchemaNumber.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObject.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectAllOf.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectAllOfShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectAnyOf.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectAnyOfShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectBase.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectBaseShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectOneOf.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectOneOfShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaObjectShorthand.html +1 -1
- package/docs/types/openapi.OpenapiSchemaPrimitiveGeneric.html +1 -1
- package/docs/types/openapi.OpenapiSchemaShorthandExpressionAllOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaShorthandExpressionAnyOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaShorthandExpressionOneOf.html +2 -2
- package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializableRef.html +2 -2
- package/docs/types/openapi.OpenapiSchemaShorthandExpressionSerializerRef.html +2 -2
- package/docs/types/openapi.OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
- package/docs/types/openapi.OpenapiSchemaString.html +1 -1
- package/docs/types/openapi.OpenapiShorthandAllTypes.html +1 -1
- package/docs/types/openapi.OpenapiShorthandPrimitiveBaseTypes.html +1 -1
- package/docs/types/openapi.OpenapiShorthandPrimitiveTypes.html +1 -1
- package/docs/types/openapi.OpenapiTypeField.html +1 -1
- package/docs/types/system.DreamAppAllowedPackageManagersEnum.html +1 -1
- package/docs/types/types.CalendarDateDurationUnit.html +1 -1
- package/docs/types/types.CalendarDateObject.html +1 -1
- package/docs/types/types.Camelized.html +1 -1
- package/docs/types/types.ClockTimeObject.html +1 -1
- package/docs/types/types.DbConnectionType.html +1 -1
- package/docs/types/types.DbTypes.html +1 -1
- package/docs/types/types.DreamAssociationMetadata.html +1 -1
- package/docs/types/types.DreamAttributes.html +1 -1
- package/docs/types/types.DreamClassAssociationAndStatement.html +1 -1
- package/docs/types/types.DreamClassColumn.html +1 -1
- package/docs/types/types.DreamColumn.html +1 -1
- package/docs/types/types.DreamColumnNames.html +1 -1
- package/docs/types/types.DreamLogLevel.html +1 -1
- package/docs/types/types.DreamLogger.html +2 -2
- package/docs/types/types.DreamModelSerializerType.html +1 -1
- package/docs/types/types.DreamOrViewModelClassSerializerKey.html +1 -1
- package/docs/types/types.DreamOrViewModelSerializerKey.html +1 -1
- package/docs/types/types.DreamParamSafeAttributes.html +1 -1
- package/docs/types/types.DreamParamSafeColumnNames.html +1 -1
- package/docs/types/types.DreamSerializable.html +1 -1
- package/docs/types/types.DreamSerializableArray.html +1 -1
- package/docs/types/types.DreamSerializerKey.html +1 -1
- package/docs/types/types.DreamSerializers.html +1 -1
- package/docs/types/types.DreamVirtualColumns.html +1 -1
- package/docs/types/types.DurationUnit.html +1 -1
- package/docs/types/types.EncryptAlgorithm.html +1 -1
- package/docs/types/types.HasManyStatement.html +1 -1
- package/docs/types/types.HasOneStatement.html +1 -1
- package/docs/types/types.Hyphenized.html +1 -1
- package/docs/types/types.Pascalized.html +1 -1
- package/docs/types/types.PrimaryKeyType.html +1 -1
- package/docs/types/types.RoundingPrecision.html +1 -1
- package/docs/types/types.SerializerCasing.html +1 -1
- package/docs/types/types.SimpleObjectSerializerType.html +1 -1
- package/docs/types/types.Snakeified.html +1 -1
- package/docs/types/types.StrictInterface.html +1 -1
- package/docs/types/types.UpdateableAssociationProperties.html +1 -1
- package/docs/types/types.UpdateableProperties.html +1 -1
- package/docs/types/types.ValidationType.html +1 -1
- package/docs/types/types.ViewModel.html +2 -2
- package/docs/types/types.ViewModelClass.html +1 -1
- package/docs/types/types.WeekdayName.html +1 -1
- package/docs/types/types.WhereStatementForDream.html +1 -1
- package/docs/types/types.WhereStatementForDreamClass.html +1 -1
- package/docs/variables/index.DreamConst.html +1 -1
- package/docs/variables/index.ops.html +1 -1
- package/docs/variables/openapi.openapiPrimitiveTypes.html +1 -1
- package/docs/variables/openapi.openapiShorthandPrimitiveTypes.html +1 -1
- package/docs/variables/system.DreamAppAllowedPackageManagersEnumValues.html +1 -1
- package/docs/variables/system.primaryKeyTypes.html +1 -1
- package/package.json +1 -1
package/dist/cjs/src/Dream.js
CHANGED
|
@@ -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
|
|
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()
|
|
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.
|
|
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
|
|
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()
|
|
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
|
|
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.
|
|
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
|
-
* .
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
1997
|
-
* association
|
|
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
|
|
2000
|
-
?
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
2116
|
+
previousTableAlias, selfTableAlias, joinAndStatement, previousThroughAssociations, joinType, polymorphicSourceTargetModelClass, }) {
|
|
2104
2117
|
const currentTableAlias = explicitAlias ?? association.as;
|
|
2105
|
-
const
|
|
2106
|
-
const
|
|
2107
|
-
?
|
|
2108
|
-
:
|
|
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 (!
|
|
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 = (
|
|
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:
|
|
2184
|
+
associatedClassOverride: polymorphicSourceTargetModelClass,
|
|
2146
2185
|
}), currentTableAlias));
|
|
2147
|
-
if (
|
|
2186
|
+
if (polymorphicSourceTargetModelClass) {
|
|
2148
2187
|
join = join.on((eb) => this.whereStatementToExpressionWrapper(dreamClass, eb, this.aliasWhereStatement({
|
|
2149
|
-
[association.foreignKeyTypeField()]:
|
|
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.
|
|
2198
|
+
join = this.applyAssociationDefaultScopesToJoin({
|
|
2160
2199
|
dreamClass,
|
|
2161
2200
|
join,
|
|
2162
2201
|
tableNameOrAlias: currentTableAlias,
|
|
2163
2202
|
association,
|
|
2164
|
-
|
|
2203
|
+
modelClassWhoseDefaultScopesApply: modelClassWhoseDefaultScopesApplyToJoin,
|
|
2165
2204
|
});
|
|
2166
|
-
join = this.applyJoinAndStatement(
|
|
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()]:
|
|
2178
|
-
?
|
|
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.
|
|
2236
|
+
join = this.applyAssociationDefaultScopesToJoin({
|
|
2198
2237
|
dreamClass,
|
|
2199
2238
|
join,
|
|
2200
2239
|
tableNameOrAlias: currentTableAlias,
|
|
2201
2240
|
association,
|
|
2202
|
-
|
|
2241
|
+
modelClassWhoseDefaultScopesApply: modelClassWhoseDefaultScopesApplyToJoin,
|
|
2203
2242
|
});
|
|
2204
|
-
join = this.applyJoinAndStatement(
|
|
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
|
-
|
|
2354
|
+
applyAssociationDefaultScopesToJoin({ dreamClass, join, tableNameOrAlias, association, modelClassWhoseDefaultScopesApply, }) {
|
|
2316
2355
|
let scopesQuery = new Query(this.dreamInstance);
|
|
2317
|
-
const
|
|
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 =
|
|
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
|
|
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
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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
|
|
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
|
|
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
|
+
}
|
package/dist/esm/src/Dream.js
CHANGED
|
@@ -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
|
|
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()
|
|
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.
|
|
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
|
|
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()
|
|
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
|
|
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.
|
|
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
|
-
* .
|
|
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
|
|
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
|