@rvoh/dream 0.40.4 → 0.40.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/Dream.js +64 -12
- package/dist/cjs/src/dream/DreamClassTransactionBuilder.js +46 -6
- package/dist/cjs/src/dream/DreamInstanceTransactionBuilder.js +2 -2
- package/dist/cjs/src/dream/LeftJoinLoadBuilder.js +3 -3
- package/dist/cjs/src/dream/LoadBuilder.js +3 -3
- package/dist/cjs/src/dream/internal/associations/createAssociation.js +1 -6
- package/dist/cjs/src/dream/internal/destroyDream.js +1 -1
- package/dist/cjs/src/dream/internal/findOrCreateBy.js +16 -0
- package/dist/cjs/src/dream/internal/runHooksFor.js +4 -4
- package/dist/cjs/src/dream/internal/saveDream.js +1 -1
- package/dist/cjs/src/dream/internal/updateOrCreateBy.js +18 -0
- package/dist/cjs/src/errors/CreateOrUpdateByFailedToCreateAndUpdate.js +18 -0
- package/dist/esm/src/Dream.js +64 -12
- package/dist/esm/src/dream/DreamClassTransactionBuilder.js +46 -6
- package/dist/esm/src/dream/DreamInstanceTransactionBuilder.js +2 -2
- package/dist/esm/src/dream/LeftJoinLoadBuilder.js +3 -3
- package/dist/esm/src/dream/LoadBuilder.js +3 -3
- package/dist/esm/src/dream/internal/associations/createAssociation.js +1 -6
- package/dist/esm/src/dream/internal/destroyDream.js +1 -1
- package/dist/esm/src/dream/internal/findOrCreateBy.js +13 -0
- package/dist/esm/src/dream/internal/runHooksFor.js +4 -4
- package/dist/esm/src/dream/internal/saveDream.js +1 -1
- package/dist/esm/src/dream/internal/updateOrCreateBy.js +15 -0
- package/dist/esm/src/errors/CreateOrUpdateByFailedToCreateAndUpdate.js +15 -0
- package/dist/types/src/Dream.d.ts +42 -9
- package/dist/types/src/dream/DreamClassTransactionBuilder.d.ts +72 -37
- package/dist/types/src/dream/DreamInstanceTransactionBuilder.d.ts +3 -3
- package/dist/types/src/dream/LeftJoinLoadBuilder.d.ts +2 -2
- package/dist/types/src/dream/LoadBuilder.d.ts +2 -2
- package/dist/types/src/dream/Query.d.ts +1 -1
- package/dist/types/src/dream/internal/findOrCreateBy.d.ts +4 -0
- package/dist/types/src/dream/internal/runHooksFor.d.ts +2 -2
- package/dist/types/src/dream/internal/updateOrCreateBy.d.ts +4 -0
- package/dist/types/src/errors/CreateOrUpdateByFailedToCreateAndUpdate.d.ts +6 -0
- package/dist/types/src/types/dream.d.ts +7 -0
- package/dist/types/src/types/dream.ts +9 -0
- package/docs/assets/search.js +1 -1
- package/docs/classes/Benchmark.html +2 -2
- package/docs/classes/CalendarDate.html +2 -2
- package/docs/classes/CreateOrFindByFailedToCreateAndFind.html +3 -3
- package/docs/classes/Decorators.html +19 -19
- package/docs/classes/Dream.html +205 -185
- package/docs/classes/DreamApp.html +4 -4
- package/docs/classes/DreamBin.html +2 -2
- package/docs/classes/DreamCLI.html +4 -4
- package/docs/classes/DreamImporter.html +2 -2
- package/docs/classes/DreamLogos.html +2 -2
- package/docs/classes/DreamMigrationHelpers.html +7 -7
- package/docs/classes/DreamSerializer.html +2 -2
- package/docs/classes/DreamTransaction.html +2 -2
- package/docs/classes/Encrypt.html +2 -2
- package/docs/classes/Env.html +2 -2
- package/docs/classes/GlobalNameNotSet.html +3 -3
- package/docs/classes/NonLoadedAssociation.html +3 -3
- package/docs/classes/Query.html +51 -51
- package/docs/classes/Range.html +2 -2
- package/docs/classes/RecordNotFound.html +3 -3
- package/docs/classes/ValidationError.html +3 -3
- package/docs/functions/Attribute.html +1 -1
- package/docs/functions/RendersMany.html +1 -1
- package/docs/functions/RendersOne.html +1 -1
- package/docs/functions/ReplicaSafe.html +1 -1
- package/docs/functions/STI.html +1 -1
- package/docs/functions/SoftDelete.html +1 -1
- package/docs/functions/camelize.html +1 -1
- package/docs/functions/capitalize.html +1 -1
- package/docs/functions/closeAllDbConnections.html +1 -1
- package/docs/functions/compact.html +1 -1
- package/docs/functions/dreamDbConnections.html +1 -1
- package/docs/functions/dreamPath.html +1 -1
- package/docs/functions/generateDream.html +1 -1
- package/docs/functions/globalClassNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/hyphenize.html +1 -1
- package/docs/functions/inferSerializerFromDreamClassOrViewModelClass.html +1 -1
- package/docs/functions/inferSerializerFromDreamOrViewModel.html +1 -1
- package/docs/functions/isEmpty.html +1 -1
- package/docs/functions/loadRepl.html +1 -1
- package/docs/functions/lookupClassByGlobalName.html +1 -1
- package/docs/functions/pascalize.html +1 -1
- package/docs/functions/pgErrorType.html +1 -1
- package/docs/functions/range-1.html +1 -1
- package/docs/functions/relativeDreamPath.html +1 -1
- package/docs/functions/round.html +1 -1
- package/docs/functions/serializerNameFromFullyQualifiedModelName.html +1 -1
- package/docs/functions/sharedPathPrefix.html +1 -1
- package/docs/functions/snakeify.html +1 -1
- package/docs/functions/sort.html +1 -1
- package/docs/functions/sortBy.html +1 -1
- package/docs/functions/standardizeFullyQualifiedModelName.html +1 -1
- package/docs/functions/uncapitalize.html +1 -1
- package/docs/functions/uniq.html +1 -1
- package/docs/functions/untypedDb.html +1 -1
- package/docs/functions/validateColumn.html +1 -1
- package/docs/functions/validateTable.html +1 -1
- package/docs/interfaces/AttributeStatement.html +2 -2
- package/docs/interfaces/DecoratorContext.html +2 -2
- package/docs/interfaces/DreamAppInitOptions.html +2 -2
- package/docs/interfaces/DreamAppOpts.html +2 -2
- package/docs/interfaces/DreamSerializerAssociationStatement.html +2 -2
- package/docs/interfaces/EncryptOptions.html +2 -2
- package/docs/interfaces/OpenapiSchemaProperties.html +1 -1
- package/docs/interfaces/OpenapiSchemaPropertiesShorthand.html +1 -1
- package/docs/interfaces/OpenapiTypeFieldObject.html +1 -1
- package/docs/types/Camelized.html +1 -1
- package/docs/types/CommonOpenapiSchemaObjectFields.html +1 -1
- package/docs/types/DateTime.html +1 -1
- package/docs/types/DbConnectionType.html +1 -1
- package/docs/types/DreamAssociationMetadata.html +1 -1
- package/docs/types/DreamAttributes.html +1 -1
- package/docs/types/DreamClassColumn.html +1 -1
- package/docs/types/DreamColumn.html +1 -1
- package/docs/types/DreamColumnNames.html +1 -1
- package/docs/types/DreamLogLevel.html +1 -1
- package/docs/types/DreamLogger.html +1 -1
- package/docs/types/DreamOrViewModelSerializerKey.html +1 -1
- package/docs/types/DreamParamSafeAttributes.html +1 -1
- package/docs/types/DreamParamSafeColumnNames.html +1 -1
- package/docs/types/DreamSerializerKey.html +1 -1
- package/docs/types/DreamSerializers.html +1 -1
- package/docs/types/DreamTableSchema.html +1 -1
- package/docs/types/DreamVirtualColumns.html +1 -1
- package/docs/types/EncryptAlgorithm.html +1 -1
- package/docs/types/Hyphenized.html +1 -1
- package/docs/types/IdType.html +1 -1
- package/docs/types/OpenapiAllTypes.html +1 -1
- package/docs/types/OpenapiFormats.html +1 -1
- package/docs/types/OpenapiNumberFormats.html +1 -1
- package/docs/types/OpenapiPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiSchemaArray.html +1 -1
- package/docs/types/OpenapiSchemaArrayShorthand.html +1 -1
- package/docs/types/OpenapiSchemaBase.html +1 -1
- package/docs/types/OpenapiSchemaBody.html +1 -1
- package/docs/types/OpenapiSchemaBodyShorthand.html +1 -1
- package/docs/types/OpenapiSchemaCommonFields.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRef.html +1 -1
- package/docs/types/OpenapiSchemaExpressionRefSchemaShorthand.html +1 -1
- package/docs/types/OpenapiSchemaInteger.html +1 -1
- package/docs/types/OpenapiSchemaNull.html +1 -1
- package/docs/types/OpenapiSchemaNumber.html +1 -1
- package/docs/types/OpenapiSchemaObject.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAllOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectAnyOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectBase.html +1 -1
- package/docs/types/OpenapiSchemaObjectBaseShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOf.html +1 -1
- package/docs/types/OpenapiSchemaObjectOneOfShorthand.html +1 -1
- package/docs/types/OpenapiSchemaObjectShorthand.html +1 -1
- package/docs/types/OpenapiSchemaPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAllOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionAnyOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionOneOf.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializableRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandExpressionSerializerRef.html +1 -1
- package/docs/types/OpenapiSchemaShorthandPrimitiveGeneric.html +1 -1
- package/docs/types/OpenapiSchemaString.html +1 -1
- package/docs/types/OpenapiShorthandAllTypes.html +1 -1
- package/docs/types/OpenapiShorthandPrimitiveTypes.html +1 -1
- package/docs/types/OpenapiTypeField.html +1 -1
- package/docs/types/Pascalized.html +1 -1
- package/docs/types/PrimaryKeyType.html +1 -1
- package/docs/types/RoundingPrecision.html +1 -1
- package/docs/types/SerializableClassOrSerializerCallback.html +1 -1
- package/docs/types/SerializableDreamClassOrViewModelClass.html +1 -1
- package/docs/types/SerializableDreamOrViewModel.html +1 -1
- package/docs/types/SerializableTypes.html +1 -1
- package/docs/types/Snakeified.html +1 -1
- package/docs/types/Timestamp.html +1 -1
- package/docs/types/UpdateableAssociationProperties.html +1 -1
- package/docs/types/UpdateableProperties.html +1 -1
- package/docs/types/ValidationType.html +1 -1
- package/docs/types/ViewModelSerializerKey.html +1 -1
- package/docs/types/WhereStatementForDream.html +1 -1
- package/docs/types/WhereStatementForDreamClass.html +1 -1
- package/docs/variables/DateTime-1.html +1 -1
- package/docs/variables/DreamConst.html +1 -1
- package/docs/variables/TRIGRAM_OPERATORS.html +1 -1
- package/docs/variables/openapiPrimitiveTypes-1.html +1 -1
- package/docs/variables/openapiShorthandPrimitiveTypes-1.html +1 -1
- package/docs/variables/ops.html +1 -1
- package/docs/variables/primaryKeyTypes.html +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default class LoadBuilder {
|
|
2
|
-
dream;
|
|
3
2
|
dreamTransaction;
|
|
3
|
+
dream;
|
|
4
4
|
query;
|
|
5
5
|
/**
|
|
6
6
|
* An intermediate class on the way to executing a load
|
|
@@ -12,7 +12,8 @@ export default class LoadBuilder {
|
|
|
12
12
|
* await user.load('settings').execute()
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
constructor(dream,
|
|
15
|
+
constructor(dream, dreamTransaction) {
|
|
16
|
+
this.dreamTransaction = dreamTransaction;
|
|
16
17
|
this.dream = dream['clone']();
|
|
17
18
|
// Load queries start from the table corresponding to an instance
|
|
18
19
|
// of a Dream. However, the Dream may have default scopes that would
|
|
@@ -21,7 +22,6 @@ export default class LoadBuilder {
|
|
|
21
22
|
// to other associations (thus the use of `removeAllDefaultScopesExceptOnAssociations`
|
|
22
23
|
// instead of `removeAllDefaultScopes`).
|
|
23
24
|
this.query = this.dream.query()['removeAllDefaultScopesExceptOnAssociations']();
|
|
24
|
-
this.dreamTransaction = txn;
|
|
25
25
|
}
|
|
26
26
|
passthrough(passthroughWhereStatement) {
|
|
27
27
|
this.query = this.query.passthrough(passthroughWhereStatement);
|
|
@@ -30,12 +30,7 @@ export default async function createAssociation(dream, txn = null, associationNa
|
|
|
30
30
|
if (hasAssociation.polymorphic) {
|
|
31
31
|
modifiedOpts[hasAssociation.foreignKeyTypeField()] = dream['stiBaseClassOrOwnClassName'];
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
hasresult = await associationClass.txn(txn).create(modifiedOpts);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
hasresult = await associationClass.create(modifiedOpts);
|
|
38
|
-
}
|
|
33
|
+
hasresult = await associationClass.txn(txn).create(modifiedOpts);
|
|
39
34
|
return hasresult;
|
|
40
35
|
case 'BelongsTo':
|
|
41
36
|
belongstoFn = async (txn) => {
|
|
@@ -37,7 +37,7 @@ async function destroyDreamWithTransaction(dream, txn, options) {
|
|
|
37
37
|
}
|
|
38
38
|
await maybeDestroyDream(dream, txn, reallyDestroy);
|
|
39
39
|
if (!skipHooks) {
|
|
40
|
-
await runHooksFor('afterDestroy', dream, true, null, txn
|
|
40
|
+
await runHooksFor('afterDestroy', dream, true, null, txn);
|
|
41
41
|
await runHooksFor('afterDestroyCommit', dream, true, null, txn);
|
|
42
42
|
}
|
|
43
43
|
if (shouldSoftDelete(dream, reallyDestroy)) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default async function findOrCreateBy(dreamClass, txn = null, attributes, extraOpts = {}) {
|
|
2
|
+
const existingRecord = await dreamClass
|
|
3
|
+
.txn(txn)
|
|
4
|
+
.findBy(dreamClass['extractAttributesFromUpdateableProperties'](attributes));
|
|
5
|
+
if (existingRecord)
|
|
6
|
+
return existingRecord;
|
|
7
|
+
const dreamModel = dreamClass.new({
|
|
8
|
+
...attributes,
|
|
9
|
+
...(extraOpts?.createWith || {}),
|
|
10
|
+
});
|
|
11
|
+
await dreamModel.txn(txn).save();
|
|
12
|
+
return dreamModel;
|
|
13
|
+
}
|
|
@@ -35,7 +35,7 @@ export default async function runHooksFor(key, dream, alreadyPersisted, beforeSa
|
|
|
35
35
|
if (txn)
|
|
36
36
|
txn.addCommitHook(hook, dream);
|
|
37
37
|
else
|
|
38
|
-
await runHook(hook, dream);
|
|
38
|
+
await runHook(hook, dream, null);
|
|
39
39
|
}
|
|
40
40
|
break;
|
|
41
41
|
case 'afterSave':
|
|
@@ -50,7 +50,7 @@ export default async function runHooksFor(key, dream, alreadyPersisted, beforeSa
|
|
|
50
50
|
if (txn)
|
|
51
51
|
txn.addCommitHook(hook, dream);
|
|
52
52
|
else
|
|
53
|
-
await runHook(hook, dream);
|
|
53
|
+
await runHook(hook, dream, null);
|
|
54
54
|
}
|
|
55
55
|
break;
|
|
56
56
|
case 'afterUpdate':
|
|
@@ -63,7 +63,7 @@ export default async function runHooksFor(key, dream, alreadyPersisted, beforeSa
|
|
|
63
63
|
if (txn)
|
|
64
64
|
txn.addCommitHook(hook, dream);
|
|
65
65
|
else
|
|
66
|
-
await runHook(hook, dream);
|
|
66
|
+
await runHook(hook, dream, null);
|
|
67
67
|
}
|
|
68
68
|
break;
|
|
69
69
|
default:
|
|
@@ -79,7 +79,7 @@ export default async function runHooksFor(key, dream, alreadyPersisted, beforeSa
|
|
|
79
79
|
if (txn)
|
|
80
80
|
txn.addCommitHook(hook, dream);
|
|
81
81
|
else
|
|
82
|
-
await runHook(hook, dream);
|
|
82
|
+
await runHook(hook, dream, null);
|
|
83
83
|
break;
|
|
84
84
|
default:
|
|
85
85
|
await runHook(hook, dream, txn);
|
|
@@ -6,7 +6,7 @@ import sqlAttributes from '../../helpers/sqlAttributes.js';
|
|
|
6
6
|
import executeDatabaseQuery from './executeDatabaseQuery.js';
|
|
7
7
|
import runHooksFor from './runHooksFor.js';
|
|
8
8
|
export default async function saveDream(dream, txn = null, { skipHooks = false } = {}) {
|
|
9
|
-
const db = txn?.kyselyTransaction
|
|
9
|
+
const db = txn?.kyselyTransaction ?? _db('primary');
|
|
10
10
|
const alreadyPersisted = dream.isPersisted;
|
|
11
11
|
if (!skipHooks) {
|
|
12
12
|
if (alreadyPersisted)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import saveDream from './saveDream.js';
|
|
2
|
+
export default async function updateOrCreateBy(dreamClass, txn = null, attributes, extraOpts = {}) {
|
|
3
|
+
const existingRecord = await dreamClass
|
|
4
|
+
.txn(txn)
|
|
5
|
+
.findBy(dreamClass['extractAttributesFromUpdateableProperties'](attributes));
|
|
6
|
+
const { with: attrs, skipHooks } = extraOpts;
|
|
7
|
+
if (existingRecord) {
|
|
8
|
+
existingRecord.assignAttributes(attrs ?? {});
|
|
9
|
+
return await saveDream(existingRecord, txn, skipHooks ? { skipHooks } : undefined);
|
|
10
|
+
}
|
|
11
|
+
return await dreamClass.txn(txn).create({
|
|
12
|
+
...attributes,
|
|
13
|
+
...(extraOpts?.with || {}),
|
|
14
|
+
}, skipHooks ? { skipHooks } : undefined);
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default class CreateOrUpdateByFailedToCreateAndUpdate extends Error {
|
|
2
|
+
dreamClass;
|
|
3
|
+
constructor(dreamClass) {
|
|
4
|
+
super();
|
|
5
|
+
this.dreamClass = dreamClass;
|
|
6
|
+
}
|
|
7
|
+
get message() {
|
|
8
|
+
return `
|
|
9
|
+
Failed to create instance of ${this.dreamClass.sanitizedName} and no matching model exists to update.
|
|
10
|
+
|
|
11
|
+
The likely cause is that one of the \`with\` fields violates
|
|
12
|
+
a uniqueness constraint.
|
|
13
|
+
`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -11,7 +11,7 @@ import LoadBuilder from './dream/LoadBuilder.js';
|
|
|
11
11
|
import Query from './dream/Query.js';
|
|
12
12
|
import { AssociationStatementsMap, PassthroughOnClause, WhereStatement } from './types/associations/shared.js';
|
|
13
13
|
import { AssociationTableNames, DbConnectionType } from './types/db.js';
|
|
14
|
-
import { AllDefaultScopeNames, AssociationNameToDream, AttributeKeys, DefaultOrNamedScopeName, DreamAssociationNames, DreamAssociationNamesWithoutRequiredOnClauses, DreamAttributes, DreamColumnNames, DreamParamSafeColumnNames, DreamSerializeOptions, IdType, JoinAndStatements, NextPreloadArgumentType, OrderDir, PassthroughColumnNames, PluckEachArgs, PrimaryKeyForFind, TableColumnNames, UpdateableAssociationProperties, UpdateableProperties, UpdateablePropertiesForClass } from './types/dream.js';
|
|
14
|
+
import { AllDefaultScopeNames, AssociationNameToDream, AttributeKeys, CreateOrFindByExtraOpts, DefaultOrNamedScopeName, DreamAssociationNames, DreamAssociationNamesWithoutRequiredOnClauses, DreamAttributes, DreamColumnNames, DreamParamSafeColumnNames, DreamSerializeOptions, IdType, JoinAndStatements, NextPreloadArgumentType, OrderDir, PassthroughColumnNames, PluckEachArgs, PrimaryKeyForFind, TableColumnNames, UpdateableAssociationProperties, UpdateableProperties, UpdateablePropertiesForClass, UpdateOrCreateByExtraOpts } from './types/dream.js';
|
|
15
15
|
import { HookStatement, HookStatementMap } from './types/lifecycle.js';
|
|
16
16
|
import { BaseModelColumnTypes, DefaultQueryTypeOptions, FindEachOpts, QueryWithJoinedAssociationsType, QueryWithJoinedAssociationsTypeAndNoPreload } from './types/query.js';
|
|
17
17
|
import { ValidationStatement, ValidationType } from './types/validation.js';
|
|
@@ -487,9 +487,12 @@ export default class Dream {
|
|
|
487
487
|
* ```
|
|
488
488
|
*
|
|
489
489
|
* @param attributes - attributes or belongs to associations you wish to set on this model before persisting
|
|
490
|
+
* @param opts.skipHooks - if true, will skip applying model hooks. Defaults to false
|
|
490
491
|
* @returns A newly persisted dream instance
|
|
491
492
|
*/
|
|
492
|
-
static create<T extends typeof Dream>(this: T, attributes?: UpdateablePropertiesForClass<T
|
|
493
|
+
static create<T extends typeof Dream>(this: T, attributes?: UpdateablePropertiesForClass<T>, { skipHooks }?: {
|
|
494
|
+
skipHooks?: boolean;
|
|
495
|
+
}): Promise<InstanceType<T>>;
|
|
493
496
|
/**
|
|
494
497
|
* Attempt to create the model. If creation fails
|
|
495
498
|
* due to uniqueness constraint, then find the existing
|
|
@@ -509,7 +512,40 @@ export default class Dream {
|
|
|
509
512
|
* @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
|
|
510
513
|
* @returns A dream instance
|
|
511
514
|
*/
|
|
512
|
-
static createOrFindBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?:
|
|
515
|
+
static createOrFindBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: CreateOrFindByExtraOpts<T>): Promise<InstanceType<T>>;
|
|
516
|
+
/**
|
|
517
|
+
* Attempt to update the model with the given attributes.
|
|
518
|
+
* If no record is found, then a new record is created.
|
|
519
|
+
* All lifecycle hooks are run for whichever action is taken.
|
|
520
|
+
*
|
|
521
|
+
* ```ts
|
|
522
|
+
* const user = await User.updateOrCreateBy({ email }, { with: { name: 'Alice' })
|
|
523
|
+
* ```
|
|
524
|
+
*
|
|
525
|
+
* @param attributes - The base attributes for finding which record to update, also used when creating
|
|
526
|
+
* @param extraOpts.with - additional attributes to persist when updating and creating, but not used for finding
|
|
527
|
+
* @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
|
|
528
|
+
* @returns A dream instance
|
|
529
|
+
*/
|
|
530
|
+
static updateOrCreateBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: UpdateOrCreateByExtraOpts<T>): Promise<InstanceType<T>>;
|
|
531
|
+
/**
|
|
532
|
+
* Attempt to create the model with the given attributes.
|
|
533
|
+
* If creation fails due to uniqueness constraint, then find and update
|
|
534
|
+
* the existing model. All lifecycle hooks are run for whichever
|
|
535
|
+
* action is taken.
|
|
536
|
+
*
|
|
537
|
+
* This is useful in situations where we want to avoid
|
|
538
|
+
* a race condition creating duplicate records.
|
|
539
|
+
*
|
|
540
|
+
* IMPORTANT: A unique index/uniqueness constraint must exist on
|
|
541
|
+
* at least one of the provided attributes
|
|
542
|
+
*
|
|
543
|
+
* @param attributes - The base attributes for finding which record to update, also used when creating
|
|
544
|
+
* @param extraOpts.with - additional attributes to persist when updating and creating, but not used for finding
|
|
545
|
+
* @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
|
|
546
|
+
* @returns A dream instance
|
|
547
|
+
*/
|
|
548
|
+
static createOrUpdateBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: UpdateOrCreateByExtraOpts<T>): Promise<InstanceType<T>>;
|
|
513
549
|
/**
|
|
514
550
|
* Returns a new query instance with the distinct query applied.
|
|
515
551
|
* If no columnName is provided, then distinct will apply to the
|
|
@@ -649,7 +685,7 @@ export default class Dream {
|
|
|
649
685
|
* @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
|
|
650
686
|
* @returns A dream instance
|
|
651
687
|
*/
|
|
652
|
-
static findOrCreateBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?:
|
|
688
|
+
static findOrCreateBy<T extends typeof Dream>(this: T, attributes: UpdateablePropertiesForClass<T>, extraOpts?: CreateOrFindByExtraOpts<T>): Promise<InstanceType<T>>;
|
|
653
689
|
/**
|
|
654
690
|
* Returns true if a record exists for the given
|
|
655
691
|
* model class
|
|
@@ -1029,7 +1065,7 @@ export default class Dream {
|
|
|
1029
1065
|
* @param txn - A DreamTransaction instance (usually collected by calling `ApplicationModel.transaction`)
|
|
1030
1066
|
* @returns A Query scoped to this model with the transaction applied
|
|
1031
1067
|
*/
|
|
1032
|
-
static txn<T extends typeof Dream, I extends InstanceType<T>>(this: T, txn: DreamTransaction<I>): DreamClassTransactionBuilder<I>;
|
|
1068
|
+
static txn<T extends typeof Dream, I extends InstanceType<T>>(this: T, txn: DreamTransaction<I> | null): DreamClassTransactionBuilder<T, I>;
|
|
1033
1069
|
/**
|
|
1034
1070
|
* Builds a new DreamTransaction instance, provides
|
|
1035
1071
|
* the instance to the provided callback.
|
|
@@ -2164,7 +2200,7 @@ export default class Dream {
|
|
|
2164
2200
|
* @param txn - A DreamTransaction instance (collected by calling `ApplicationModel.transaction`)
|
|
2165
2201
|
* @returns A Query scoped to this model with the transaction applied
|
|
2166
2202
|
*/
|
|
2167
|
-
txn<I extends Dream>(this: I, txn: DreamTransaction<Dream>): DreamInstanceTransactionBuilder<I>;
|
|
2203
|
+
txn<I extends Dream>(this: I, txn: DreamTransaction<Dream> | null): DreamInstanceTransactionBuilder<I>;
|
|
2168
2204
|
/**
|
|
2169
2205
|
* Applies all attribute changes passed to the Dream
|
|
2170
2206
|
* instance, leveraging any custom-defined setters,
|
|
@@ -2260,6 +2296,3 @@ export default class Dream {
|
|
|
2260
2296
|
unpreventDeletion(): this;
|
|
2261
2297
|
private _preventDeletion;
|
|
2262
2298
|
}
|
|
2263
|
-
export interface CreateOrFindByExtraOps<T extends typeof Dream> {
|
|
2264
|
-
createWith?: WhereStatement<InstanceType<T>['DB'], InstanceType<T>['schema'], InstanceType<T>['table']> | UpdateablePropertiesForClass<T>;
|
|
2265
|
-
}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { SelectArg, SelectExpression
|
|
1
|
+
import { SelectArg, SelectExpression } from 'kysely';
|
|
2
2
|
import Dream from '../Dream.js';
|
|
3
3
|
import { PassthroughOnClause, WhereStatement } from '../types/associations/shared.js';
|
|
4
4
|
import { AssociationTableNames } from '../types/db.js';
|
|
5
|
-
import { DefaultScopeName, DreamColumnNames, OrderDir, PassthroughColumnNames, PluckEachArgs, PrimaryKeyForFind, TableColumnNames, UpdateableProperties } from '../types/dream.js';
|
|
5
|
+
import { CreateOrFindByExtraOpts, DefaultScopeName, DreamColumnNames, OrderDir, PassthroughColumnNames, PluckEachArgs, PrimaryKeyForFind, TableColumnNames, UpdateableProperties, UpdateablePropertiesForClass, UpdateOrCreateByExtraOpts } from '../types/dream.js';
|
|
6
6
|
import { BaseModelColumnTypes, FindEachOpts, QueryWithJoinedAssociationsType, QueryWithJoinedAssociationsTypeAndNoPreload } from '../types/query.js';
|
|
7
7
|
import { JoinedAssociation, JoinedAssociationsTypeFromAssociations, VariadicJoinsArgs, VariadicLeftJoinLoadArgs, VariadicLoadArgs } from '../types/variadic.js';
|
|
8
8
|
import DreamTransaction from './DreamTransaction.js';
|
|
9
9
|
import Query from './Query.js';
|
|
10
|
-
export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
10
|
+
export default class DreamClassTransactionBuilder<DreamClass extends typeof Dream, DreamInstance extends Dream> {
|
|
11
|
+
private dreamClass;
|
|
12
|
+
private dreamTransaction;
|
|
11
13
|
dreamInstance: DreamInstance;
|
|
12
|
-
dreamTransaction: DreamTransaction<Dream>;
|
|
13
14
|
/**
|
|
14
15
|
* Constructs a new DreamClassTransactionBuilder.
|
|
15
16
|
*
|
|
16
17
|
* @param dreamInstance - The Dream instance to build the transaction for
|
|
17
18
|
* @param txn - The DreamTransaction instance
|
|
18
19
|
*/
|
|
19
|
-
constructor(
|
|
20
|
+
constructor(dreamClass: DreamClass, dreamTransaction: DreamTransaction<Dream> | null);
|
|
20
21
|
/**
|
|
21
22
|
* Retrieves an array containing all records corresponding to
|
|
22
23
|
* this model. Be careful using this, since it will attempt to
|
|
@@ -33,7 +34,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
33
34
|
* @param options.columns - Columns to select
|
|
34
35
|
* @returns An array of dreams
|
|
35
36
|
*/
|
|
36
|
-
all<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, options?: {
|
|
37
|
+
all<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, options?: {
|
|
37
38
|
columns?: DreamColumnNames<DreamInstance>[];
|
|
38
39
|
}): Promise<DreamInstance[]>;
|
|
39
40
|
/**
|
|
@@ -42,7 +43,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
42
43
|
*
|
|
43
44
|
* @returns The number of records corresponding to this model
|
|
44
45
|
*/
|
|
45
|
-
count<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<number>;
|
|
46
|
+
count<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<number>;
|
|
46
47
|
/**
|
|
47
48
|
* Returns a new Query instance, specifying a limit
|
|
48
49
|
*
|
|
@@ -56,7 +57,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
56
57
|
* @param limit - The number of records to limit the query to
|
|
57
58
|
* @returns A Query for this model with the limit clause applied
|
|
58
59
|
*/
|
|
59
|
-
limit<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, limit: number | null): Query<DreamInstance>;
|
|
60
|
+
limit<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, limit: number | null): Query<DreamInstance>;
|
|
60
61
|
/**
|
|
61
62
|
* Returns a new Query instance, specifying an offset
|
|
62
63
|
*
|
|
@@ -70,7 +71,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
70
71
|
* @param offset - The number of records to offset the query by
|
|
71
72
|
* @returns A Query for this model with the offset clause applied
|
|
72
73
|
*/
|
|
73
|
-
offset<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, offset: number | null): Query<DreamInstance>;
|
|
74
|
+
offset<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, offset: number | null): Query<DreamInstance>;
|
|
74
75
|
/**
|
|
75
76
|
* Retrieves the max value of the specified column
|
|
76
77
|
* for this model's records.
|
|
@@ -85,7 +86,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
85
86
|
* @param columnName - A column name on the model
|
|
86
87
|
* @returns The max value of the specified column for this model's records
|
|
87
88
|
*/
|
|
88
|
-
max<I extends DreamClassTransactionBuilder<DreamInstance>, T extends DreamColumnNames<DreamInstance>>(this: I, columnName: T): Promise<DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]["coercedType" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]]>;
|
|
89
|
+
max<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, T extends DreamColumnNames<DreamInstance>>(this: I, columnName: T): Promise<DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]["coercedType" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]]>;
|
|
89
90
|
/**
|
|
90
91
|
* Retrieves the min value of the specified column
|
|
91
92
|
* for this model's records.
|
|
@@ -100,7 +101,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
100
101
|
* @param columnName - A column name on the model
|
|
101
102
|
* @returns The min value of the specified column for this model's records
|
|
102
103
|
*/
|
|
103
|
-
min<I extends DreamClassTransactionBuilder<DreamInstance>, T extends DreamColumnNames<DreamInstance>>(this: I, columnName: T): Promise<DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]["coercedType" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]]>;
|
|
104
|
+
min<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, T extends DreamColumnNames<DreamInstance>>(this: I, columnName: T): Promise<DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]["coercedType" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]][T & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]["columns" & keyof DreamInstance["schema"][DreamInstance["table"] & keyof DreamInstance["schema"]]]]]>;
|
|
104
105
|
/**
|
|
105
106
|
* Persists a new record, setting the provided attributes
|
|
106
107
|
*
|
|
@@ -114,7 +115,9 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
114
115
|
* @param attributes - Attributes or belongs to associations you wish to set on this model before persisting
|
|
115
116
|
* @returns A newly persisted dream instance
|
|
116
117
|
*/
|
|
117
|
-
create<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, attributes?: UpdateableProperties<DreamInstance
|
|
118
|
+
create<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, attributes?: UpdateableProperties<DreamInstance>, { skipHooks }?: {
|
|
119
|
+
skipHooks?: boolean;
|
|
120
|
+
}): Promise<DreamInstance>;
|
|
118
121
|
/**
|
|
119
122
|
* Finds a record for the corresponding model with the
|
|
120
123
|
* specified primary key. If not found, null is returned.
|
|
@@ -129,7 +132,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
129
132
|
* @param primaryKey - The primary key of the record to look up
|
|
130
133
|
* @returns Either the found record, or else null
|
|
131
134
|
*/
|
|
132
|
-
find<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, primaryKey: PrimaryKeyForFind<DreamInstance>): Promise<DreamInstance | null>;
|
|
135
|
+
find<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, primaryKey: PrimaryKeyForFind<DreamInstance>): Promise<DreamInstance | null>;
|
|
133
136
|
/**
|
|
134
137
|
* Finds a record for the corresponding model with the
|
|
135
138
|
* specified primary key. If not found, an exception is raised.
|
|
@@ -144,7 +147,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
144
147
|
* @param primaryKey - The primary key of the record to look up
|
|
145
148
|
* @returns The found record
|
|
146
149
|
*/
|
|
147
|
-
findOrFail<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, primaryKey: PrimaryKeyForFind<DreamInstance>): Promise<DreamInstance>;
|
|
150
|
+
findOrFail<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, primaryKey: PrimaryKeyForFind<DreamInstance>): Promise<DreamInstance>;
|
|
148
151
|
/**
|
|
149
152
|
* Finds the first record—ordered by primary key—matching
|
|
150
153
|
* the corresponding model and the specified where statement.
|
|
@@ -160,7 +163,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
160
163
|
* @param attributes - The where statement used to locate the record
|
|
161
164
|
* @returns Either the first model found matching the whereStatement, or else null
|
|
162
165
|
*/
|
|
163
|
-
findBy<I extends DreamClassTransactionBuilder<
|
|
166
|
+
findBy<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, attributes: WhereStatement<DreamInstance['DB'], DreamInstance['schema'], DreamInstance['table']>): Promise<DreamInstance | null>;
|
|
164
167
|
/**
|
|
165
168
|
* Finds the first record—ordered by primary key—matching
|
|
166
169
|
* the corresponding model and the specified where statement.
|
|
@@ -176,7 +179,39 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
176
179
|
* @param whereStatement - The where statement used to locate the record
|
|
177
180
|
* @returns The first model found matching the whereStatement
|
|
178
181
|
*/
|
|
179
|
-
findOrFailBy<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, whereStatement: WhereStatement<DreamInstance['DB'], DreamInstance['schema'], DreamInstance['table']>): Promise<DreamInstance>;
|
|
182
|
+
findOrFailBy<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, whereStatement: WhereStatement<DreamInstance['DB'], DreamInstance['schema'], DreamInstance['table']>): Promise<DreamInstance>;
|
|
183
|
+
/**
|
|
184
|
+
* Attempt to find the model with the given attributes.
|
|
185
|
+
* If no record is found, then a new record is created.
|
|
186
|
+
*
|
|
187
|
+
* ```ts
|
|
188
|
+
* await ApplicationModel.transaction(async txn => {
|
|
189
|
+
* await User.txn(txn).findOrCreateBy({ email }, { createWith: params })
|
|
190
|
+
* })
|
|
191
|
+
* ```
|
|
192
|
+
*
|
|
193
|
+
* @param attributes - The base attributes for finding, but also the attributes to use when creating
|
|
194
|
+
* @param extraOpts.createWith - additional attributes to persist when creating, but not used for finding
|
|
195
|
+
* @returns A dream instance
|
|
196
|
+
*/
|
|
197
|
+
findOrCreateBy<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, attributes: UpdateablePropertiesForClass<DreamClass>, extraOpts?: CreateOrFindByExtraOpts<DreamClass>): Promise<InstanceType<DreamClass>>;
|
|
198
|
+
/**
|
|
199
|
+
* Attempt to update the model with the given attributes.
|
|
200
|
+
* If no record is found, then a new record is created.
|
|
201
|
+
* All lifecycle hooks are run for whichever action is taken.
|
|
202
|
+
*
|
|
203
|
+
* ```ts
|
|
204
|
+
* await ApplicationModel.transaction(async txn => {
|
|
205
|
+
* await User.txn(txn).updateOrCreateBy({ email }, { with: { name: 'Alice' })
|
|
206
|
+
* })
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @param attributes - The base attributes for finding, but also the attributes to use when creating
|
|
210
|
+
* @param extraOpts.with - additional attributes to persist when updating and creating, but not used for finding
|
|
211
|
+
* @param extraOpts.skipHooks - if true, will skip applying model hooks. Defaults to false
|
|
212
|
+
* @returns A dream instance
|
|
213
|
+
*/
|
|
214
|
+
updateOrCreateBy<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, attributes: UpdateablePropertiesForClass<DreamClass>, extraOpts?: UpdateOrCreateByExtraOpts<DreamClass>): Promise<InstanceType<DreamClass>>;
|
|
180
215
|
/**
|
|
181
216
|
* Finds all records for the corresponding model in batches,
|
|
182
217
|
* and then calls the provided callback for each found record.
|
|
@@ -198,7 +233,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
198
233
|
* @param options.batchSize - The batch size you wish to collect records in. If not provided, it will default to 1000
|
|
199
234
|
* @returns void
|
|
200
235
|
*/
|
|
201
|
-
findEach<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, cb: (instance: DreamInstance) => void | Promise<void>, options?: FindEachOpts): Promise<void>;
|
|
236
|
+
findEach<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, cb: (instance: DreamInstance) => void | Promise<void>, options?: FindEachOpts): Promise<void>;
|
|
202
237
|
/**
|
|
203
238
|
* Returns the first record corresponding to the
|
|
204
239
|
* model, ordered by primary key.
|
|
@@ -212,7 +247,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
212
247
|
*
|
|
213
248
|
* @returns First record, or null if no record exists
|
|
214
249
|
*/
|
|
215
|
-
first<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<DreamInstance | null>;
|
|
250
|
+
first<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<DreamInstance | null>;
|
|
216
251
|
/**
|
|
217
252
|
* Returns the first record corresponding to the
|
|
218
253
|
* model, ordered by primary key. If no record
|
|
@@ -227,7 +262,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
227
262
|
*
|
|
228
263
|
* @returns First record
|
|
229
264
|
*/
|
|
230
|
-
firstOrFail<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<DreamInstance>;
|
|
265
|
+
firstOrFail<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<DreamInstance>;
|
|
231
266
|
/**
|
|
232
267
|
* Returns true if a record exists for the given
|
|
233
268
|
* model class.
|
|
@@ -246,7 +281,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
246
281
|
*
|
|
247
282
|
* @returns boolean
|
|
248
283
|
*/
|
|
249
|
-
exists<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<boolean>;
|
|
284
|
+
exists<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<boolean>;
|
|
250
285
|
/**
|
|
251
286
|
* Load each specified association using a single SQL query.
|
|
252
287
|
* See {@link #preload} for preloading in separate queries.
|
|
@@ -268,7 +303,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
268
303
|
* @param args - A chain of association names and where clauses
|
|
269
304
|
* @returns A query for this model with the include statement applied
|
|
270
305
|
*/
|
|
271
|
-
leftJoinPreload<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicLeftJoinLoadArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
306
|
+
leftJoinPreload<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicLeftJoinLoadArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
272
307
|
...Arr,
|
|
273
308
|
LastArg
|
|
274
309
|
]>, const JoinedAssociations extends readonly JoinedAssociation[] = JoinedAssociationsCandidate extends readonly JoinedAssociation[] ? JoinedAssociationsCandidate : never, RetQuery = QueryWithJoinedAssociationsTypeAndNoPreload<Query<DreamInstance>, JoinedAssociations>>(this: I, ...args: [...Arr, LastArg]): RetQuery;
|
|
@@ -293,7 +328,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
293
328
|
* @param args - A chain of association names and where clauses
|
|
294
329
|
* @returns A query for this model with the preload statement applied
|
|
295
330
|
*/
|
|
296
|
-
preload<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[]>(this: I, ...args: [...Arr, VariadicLoadArgs<DB, Schema, TableName, Arr>]): Query<DreamInstance, Readonly<{
|
|
331
|
+
preload<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[]>(this: I, ...args: [...Arr, VariadicLoadArgs<DB, Schema, TableName, Arr>]): Query<DreamInstance, Readonly<{
|
|
297
332
|
joinedAssociations: readonly [];
|
|
298
333
|
rootTableName: DreamInstance["table"];
|
|
299
334
|
rootTableAlias: DreamInstance extends Dream ? DreamInstance["table"] : DreamInstance;
|
|
@@ -313,7 +348,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
313
348
|
* @param args - A chain of association names and where clauses
|
|
314
349
|
* @returns A Query for this model with the inner join clause applied
|
|
315
350
|
*/
|
|
316
|
-
innerJoin<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicJoinsArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
351
|
+
innerJoin<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicJoinsArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
317
352
|
...Arr,
|
|
318
353
|
LastArg
|
|
319
354
|
]>, const JoinedAssociations extends readonly JoinedAssociation[] = JoinedAssociationsCandidate extends readonly JoinedAssociation[] ? JoinedAssociationsCandidate : never, RetQuery = QueryWithJoinedAssociationsType<Query<DreamInstance>, JoinedAssociations>>(this: I, ...args: [...Arr, LastArg]): RetQuery;
|
|
@@ -330,7 +365,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
330
365
|
* @param args - A chain of association names and where clauses
|
|
331
366
|
* @returns A Query for this model with the left join clause applied
|
|
332
367
|
*/
|
|
333
|
-
leftJoin<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicJoinsArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
368
|
+
leftJoin<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], TableName extends DreamInstance['table'], Schema extends DreamInstance['schema'], const Arr extends readonly unknown[], const LastArg extends VariadicJoinsArgs<DB, Schema, TableName, Arr>, const JoinedAssociationsCandidate = JoinedAssociationsTypeFromAssociations<DB, Schema, TableName, [
|
|
334
369
|
...Arr,
|
|
335
370
|
LastArg
|
|
336
371
|
]>, const JoinedAssociations extends readonly JoinedAssociation[] = JoinedAssociationsCandidate extends readonly JoinedAssociation[] ? JoinedAssociationsCandidate : never, RetQuery = QueryWithJoinedAssociationsType<Query<DreamInstance>, JoinedAssociations>>(this: I, ...args: [...Arr, LastArg]): RetQuery;
|
|
@@ -346,20 +381,20 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
346
381
|
*
|
|
347
382
|
* @returns A new Query instance
|
|
348
383
|
*/
|
|
349
|
-
queryInstance<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Query<DreamInstance>;
|
|
384
|
+
queryInstance<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Query<DreamInstance>;
|
|
350
385
|
/**
|
|
351
386
|
* Returns a query for this model which disregards default scopes
|
|
352
387
|
*
|
|
353
388
|
* @returns A query for this model which disregards default scopes
|
|
354
389
|
*/
|
|
355
|
-
removeAllDefaultScopes<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Query<DreamInstance>;
|
|
390
|
+
removeAllDefaultScopes<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Query<DreamInstance>;
|
|
356
391
|
/**
|
|
357
392
|
* Prevents a specific default scope from applying when
|
|
358
393
|
* the Query is executed
|
|
359
394
|
*
|
|
360
395
|
* @returns A new Query which will prevent a specific default scope from applying
|
|
361
396
|
*/
|
|
362
|
-
removeDefaultScope<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, scopeName: DefaultScopeName<DreamInstance>): Query<DreamInstance>;
|
|
397
|
+
removeDefaultScope<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, scopeName: DefaultScopeName<DreamInstance>): Query<DreamInstance>;
|
|
363
398
|
/**
|
|
364
399
|
* Returns the last record corresponding to the
|
|
365
400
|
* model, ordered by primary key.
|
|
@@ -373,7 +408,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
373
408
|
*
|
|
374
409
|
* @returns Last record, or null if no record exists
|
|
375
410
|
*/
|
|
376
|
-
last<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<DreamInstance | null>;
|
|
411
|
+
last<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<DreamInstance | null>;
|
|
377
412
|
/**
|
|
378
413
|
* Returns the last record corresponding to the
|
|
379
414
|
* model, ordered by primary key. If no record
|
|
@@ -388,7 +423,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
388
423
|
*
|
|
389
424
|
* @returns Last record
|
|
390
425
|
*/
|
|
391
|
-
lastOrFail<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I): Promise<DreamInstance>;
|
|
426
|
+
lastOrFail<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I): Promise<DreamInstance>;
|
|
392
427
|
/**
|
|
393
428
|
* Returns a new Kysely SelectQueryBuilder instance to be used
|
|
394
429
|
* in a sub Query
|
|
@@ -405,7 +440,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
405
440
|
* @param selection - the column to use for your nested Query
|
|
406
441
|
* @returns A Kysely SelectQueryBuilder instance
|
|
407
442
|
*/
|
|
408
|
-
nestedSelect<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], SE extends SelectExpression<DB, DreamInstance['table']>>(this: I, selection: SelectArg<DB, DreamInstance['table'], SE>): import("kysely").SelectQueryBuilder<any, any, any>;
|
|
443
|
+
nestedSelect<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], SE extends SelectExpression<DB, DreamInstance['table']>>(this: I, selection: SelectArg<DB, DreamInstance['table'], SE>): import("kysely").SelectQueryBuilder<any, any, any>;
|
|
409
444
|
/**
|
|
410
445
|
* Returns a new Query instance, attaching the provided
|
|
411
446
|
* order statement
|
|
@@ -427,7 +462,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
427
462
|
* @param orderStatement - Either a string or an object specifying order. If a string, the order is implicitly ascending. If the orderStatement is an object, statements will be provided in the order of the keys set in the object
|
|
428
463
|
* @returns A query for this model with the order clause applied
|
|
429
464
|
*/
|
|
430
|
-
order<I extends DreamClassTransactionBuilder<DreamInstance>>(this: I, arg: DreamColumnNames<DreamInstance> | Partial<Record<DreamColumnNames<DreamInstance>, OrderDir>> | null): Query<DreamInstance, Readonly<{
|
|
465
|
+
order<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>>(this: I, arg: DreamColumnNames<DreamInstance> | Partial<Record<DreamColumnNames<DreamInstance>, OrderDir>> | null): Query<DreamInstance, Readonly<{
|
|
431
466
|
joinedAssociations: Readonly<[]>;
|
|
432
467
|
rootTableName: DreamInstance["table"];
|
|
433
468
|
rootTableAlias: DreamInstance extends Dream ? DreamInstance["table"] : DreamInstance;
|
|
@@ -457,7 +492,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
457
492
|
* @param columnNames - The column or array of columns to pluck
|
|
458
493
|
* @returns An array of pluck results
|
|
459
494
|
*/
|
|
460
|
-
pluck<I extends DreamClassTransactionBuilder<DreamInstance>, ColumnNames extends TableColumnNames<DreamInstance['DB'], DreamInstance['table']>[], ReturnValue extends ColumnNames['length'] extends 1 ? BaseModelColumnTypes<ColumnNames, DreamInstance>[0][] : BaseModelColumnTypes<ColumnNames, DreamInstance>[]>(this: I, ...columnNames: ColumnNames): Promise<ReturnValue>;
|
|
495
|
+
pluck<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, ColumnNames extends TableColumnNames<DreamInstance['DB'], DreamInstance['table']>[], ReturnValue extends ColumnNames['length'] extends 1 ? BaseModelColumnTypes<ColumnNames, DreamInstance>[0][] : BaseModelColumnTypes<ColumnNames, DreamInstance>[]>(this: I, ...columnNames: ColumnNames): Promise<ReturnValue>;
|
|
461
496
|
/**
|
|
462
497
|
* Plucks the specified fields from the given dream class table
|
|
463
498
|
* in batches, passing each found columns into the provided callback function.
|
|
@@ -476,7 +511,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
476
511
|
* @param fields - A list of fields to pluck, followed by a callback function to call for each set of found fields
|
|
477
512
|
* @returns void
|
|
478
513
|
*/
|
|
479
|
-
pluckEach<I extends DreamClassTransactionBuilder<DreamInstance>, ColumnName extends keyof UpdateableProperties<DreamInstance>, ColumnNames extends ColumnName[], CbArgTypes extends BaseModelColumnTypes<ColumnNames, DreamInstance>>(this: I, ...args: PluckEachArgs<ColumnNames, CbArgTypes>): Promise<void>;
|
|
514
|
+
pluckEach<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, ColumnName extends keyof UpdateableProperties<DreamInstance>, ColumnNames extends ColumnName[], CbArgTypes extends BaseModelColumnTypes<ColumnNames, DreamInstance>>(this: I, ...args: PluckEachArgs<ColumnNames, CbArgTypes>): Promise<void>;
|
|
480
515
|
/**
|
|
481
516
|
* Sends data through for use as passthrough data
|
|
482
517
|
* for the associations that require it.
|
|
@@ -502,7 +537,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
502
537
|
* @param passthroughWhereStatement - Where statement used for associations that require passthrough data
|
|
503
538
|
* @returns A Query for this model with the passthrough data
|
|
504
539
|
*/
|
|
505
|
-
passthrough<I extends DreamClassTransactionBuilder<DreamInstance>, PassthroughColumns extends PassthroughColumnNames<DreamInstance>>(this: I, passthroughWhereStatement: PassthroughOnClause<PassthroughColumns>): Query<DreamInstance>;
|
|
540
|
+
passthrough<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, PassthroughColumns extends PassthroughColumnNames<DreamInstance>>(this: I, passthroughWhereStatement: PassthroughOnClause<PassthroughColumns>): Query<DreamInstance>;
|
|
506
541
|
/**
|
|
507
542
|
* Applies a where statement to a new Query instance
|
|
508
543
|
* scoped to this model.
|
|
@@ -517,7 +552,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
517
552
|
* @param whereStatement - Where statement to apply to the Query
|
|
518
553
|
* @returns A Query for this model with the where clause applied
|
|
519
554
|
*/
|
|
520
|
-
where<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatement: WhereStatement<DB, Schema, TableName>): Query<DreamInstance>;
|
|
555
|
+
where<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatement: WhereStatement<DB, Schema, TableName>): Query<DreamInstance>;
|
|
521
556
|
/**
|
|
522
557
|
* Applies "OR"'d where statements to a Query scoped
|
|
523
558
|
* to this model.
|
|
@@ -532,7 +567,7 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
532
567
|
* @param whereStatements - An array of where statements to `OR` together
|
|
533
568
|
* @returns A Query for this model with the whereAny clause applied
|
|
534
569
|
*/
|
|
535
|
-
whereAny<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatements: WhereStatement<DB, Schema, TableName>[]): Query<DreamInstance>;
|
|
570
|
+
whereAny<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatements: WhereStatement<DB, Schema, TableName>[]): Query<DreamInstance>;
|
|
536
571
|
/**
|
|
537
572
|
* Applies a whereNot statement to a new Query instance
|
|
538
573
|
* scoped to this model.
|
|
@@ -547,5 +582,5 @@ export default class DreamClassTransactionBuilder<DreamInstance extends Dream> {
|
|
|
547
582
|
* @param whereStatement - A where statement to negate and apply to the Query
|
|
548
583
|
* @returns A Query for this model with the whereNot clause applied
|
|
549
584
|
*/
|
|
550
|
-
whereNot<I extends DreamClassTransactionBuilder<DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatement: WhereStatement<DB, Schema, TableName>): Query<DreamInstance>;
|
|
585
|
+
whereNot<I extends DreamClassTransactionBuilder<DreamClass, DreamInstance>, DB extends DreamInstance['DB'], Schema extends DreamInstance['schema'], TableName extends AssociationTableNames<DB, Schema> & keyof DB = I['dreamInstance']['table'] & keyof DB>(this: I, whereStatement: WhereStatement<DB, Schema, TableName>): Query<DreamInstance>;
|
|
551
586
|
}
|
|
@@ -8,15 +8,15 @@ import LeftJoinLoadBuilder from './LeftJoinLoadBuilder.js';
|
|
|
8
8
|
import LoadBuilder from './LoadBuilder.js';
|
|
9
9
|
import Query from './Query.js';
|
|
10
10
|
export default class DreamInstanceTransactionBuilder<DreamInstance extends Dream> {
|
|
11
|
-
dreamInstance
|
|
12
|
-
dreamTransaction
|
|
11
|
+
private dreamInstance;
|
|
12
|
+
private dreamTransaction;
|
|
13
13
|
/**
|
|
14
14
|
* Constructs a new DreamInstanceTransactionBuilder.
|
|
15
15
|
*
|
|
16
16
|
* @param dreamInstance - The Dream instance to build the transaction for
|
|
17
17
|
* @param txn - The DreamTransaction instance
|
|
18
18
|
*/
|
|
19
|
-
constructor(dreamInstance: DreamInstance,
|
|
19
|
+
constructor(dreamInstance: DreamInstance, dreamTransaction: DreamTransaction<Dream> | null);
|
|
20
20
|
/**
|
|
21
21
|
* Loads the requested associations upon execution
|
|
22
22
|
*
|