@nocobase/database 0.7.0-alpha.9 → 0.7.1-alpha.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/lib/collection-importer.js +85 -68
- package/lib/collection.d.ts +6 -2
- package/lib/collection.js +371 -210
- package/lib/database.d.ts +23 -4
- package/lib/database.js +599 -273
- package/lib/fields/array-field.js +45 -25
- package/lib/fields/belongs-to-field.js +101 -54
- package/lib/fields/belongs-to-many-field.js +98 -53
- package/lib/fields/boolean-field.js +24 -9
- package/lib/fields/context-field.js +77 -45
- package/lib/fields/date-field.js +24 -9
- package/lib/fields/field.d.ts +4 -1
- package/lib/fields/field.js +231 -75
- package/lib/fields/formula-field.d.ts +19 -0
- package/lib/fields/formula-field.js +184 -0
- package/lib/fields/has-inverse-field.js +4 -2
- package/lib/fields/has-many-field.js +105 -56
- package/lib/fields/has-one-field.js +105 -54
- package/lib/fields/index.d.ts +5 -1
- package/lib/fields/index.js +290 -32
- package/lib/fields/json-field.js +36 -16
- package/lib/fields/number-field.js +53 -26
- package/lib/fields/password-field.js +120 -73
- package/lib/fields/radio-field.js +75 -47
- package/lib/fields/relation-field.js +41 -28
- package/lib/fields/sort-field.js +165 -89
- package/lib/fields/string-field.js +24 -9
- package/lib/fields/text-field.js +24 -9
- package/lib/fields/time-field.js +24 -9
- package/lib/fields/uid-field.js +57 -28
- package/lib/fields/uuid-field.d.ts +9 -0
- package/lib/fields/uuid-field.js +39 -0
- package/lib/fields/virtual-field.js +24 -9
- package/lib/filter-parser.js +288 -179
- package/lib/index.d.ts +1 -0
- package/lib/index.js +224 -29
- package/lib/magic-attribute-model.js +123 -71
- package/lib/migration.d.ts +35 -0
- package/lib/migration.js +90 -0
- package/lib/mock-database.d.ts +1 -0
- package/lib/mock-database.js +69 -34
- package/lib/model-hook.d.ts +5 -5
- package/lib/model-hook.js +109 -60
- package/lib/model.js +116 -81
- package/lib/operators/array.js +136 -96
- package/lib/operators/association.js +30 -14
- package/lib/operators/boolean.d.ts +13 -0
- package/lib/operators/boolean.js +35 -0
- package/lib/operators/date.js +78 -34
- package/lib/operators/empty.js +113 -75
- package/lib/operators/index.js +15 -3
- package/lib/operators/ne.js +27 -12
- package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
- package/lib/operators/notIn.js +29 -0
- package/lib/operators/string.js +56 -35
- package/lib/operators/utils.js +18 -10
- package/lib/options-parser.js +345 -215
- package/lib/playground.js +66 -53
- package/lib/relation-repository/belongs-to-many-repository.js +281 -198
- package/lib/relation-repository/belongs-to-repository.js +10 -6
- package/lib/relation-repository/hasmany-repository.js +168 -121
- package/lib/relation-repository/hasone-repository.js +10 -6
- package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
- package/lib/relation-repository/multiple-relation-repository.js +263 -148
- package/lib/relation-repository/relation-repository.d.ts +1 -1
- package/lib/relation-repository/relation-repository.js +163 -93
- package/lib/relation-repository/single-relation-repository.d.ts +6 -6
- package/lib/relation-repository/single-relation-repository.js +145 -99
- package/lib/relation-repository/types.js +4 -2
- package/lib/repository.d.ts +4 -7
- package/lib/repository.js +473 -291
- package/lib/transaction-decorator.js +80 -67
- package/lib/update-associations.d.ts +1 -2
- package/lib/update-associations.js +525 -321
- package/lib/update-guard.js +160 -117
- package/package.json +9 -9
- package/src/__tests__/collection.test.ts +27 -0
- package/src/__tests__/database.test.ts +47 -0
- package/src/__tests__/fields/formula-field.test.ts +69 -0
- package/src/__tests__/fields/uuid-field.test.ts +30 -0
- package/src/__tests__/fixtures/migrations/m1.ts +7 -0
- package/src/__tests__/fixtures/migrations/m2.ts +7 -0
- package/src/__tests__/hooks/afterCreateWithAssociations.test.ts +33 -0
- package/src/__tests__/migrator.test.ts +70 -0
- package/src/__tests__/model-hook.test.ts +54 -0
- package/src/__tests__/operator/notIn.test.ts +33 -0
- package/src/__tests__/option-parser.test.ts +30 -6
- package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +1 -1
- package/src/__tests__/sequelize-hooks.test.ts +69 -0
- package/src/__tests__/sort.test.ts +51 -0
- package/src/__tests__/update-associations.test.ts +3 -3
- package/src/collection-importer.ts +12 -20
- package/src/collection.ts +26 -2
- package/src/database.ts +144 -14
- package/src/fields/field.ts +88 -1
- package/src/fields/formula-field.ts +106 -0
- package/src/fields/index.ts +6 -0
- package/src/fields/password-field.ts +2 -0
- package/src/fields/uuid-field.ts +21 -0
- package/src/index.ts +1 -0
- package/src/migration.ts +76 -0
- package/src/mock-database.ts +2 -1
- package/src/model-hook.ts +26 -22
- package/src/operators/boolean.ts +18 -0
- package/src/operators/index.ts +2 -0
- package/src/operators/notIn.ts +12 -0
- package/src/options-parser.ts +14 -10
- package/src/relation-repository/multiple-relation-repository.ts +14 -6
- package/src/relation-repository/relation-repository.ts +12 -6
- package/src/relation-repository/single-relation-repository.ts +11 -7
- package/src/repository.ts +20 -10
- package/src/update-associations.ts +2 -3
- package/esm/collection-importer.d.ts +0 -7
- package/esm/collection-importer.js +0 -49
- package/esm/collection-importer.js.map +0 -1
- package/esm/collection.d.ts +0 -73
- package/esm/collection.js +0 -224
- package/esm/collection.js.map +0 -1
- package/esm/database.d.ts +0 -101
- package/esm/database.js +0 -275
- package/esm/database.js.map +0 -1
- package/esm/fields/array-field.d.ts +0 -11
- package/esm/fields/array-field.js +0 -26
- package/esm/fields/array-field.js.map +0 -1
- package/esm/fields/belongs-to-field.d.ts +0 -12
- package/esm/fields/belongs-to-field.js +0 -57
- package/esm/fields/belongs-to-field.js.map +0 -1
- package/esm/fields/belongs-to-many-field.d.ts +0 -11
- package/esm/fields/belongs-to-many-field.js +0 -55
- package/esm/fields/belongs-to-many-field.js.map +0 -1
- package/esm/fields/boolean-field.d.ts +0 -8
- package/esm/fields/boolean-field.js +0 -8
- package/esm/fields/boolean-field.js.map +0 -1
- package/esm/fields/context-field.d.ts +0 -13
- package/esm/fields/context-field.js +0 -43
- package/esm/fields/context-field.js.map +0 -1
- package/esm/fields/date-field.d.ts +0 -8
- package/esm/fields/date-field.js +0 -8
- package/esm/fields/date-field.js.map +0 -1
- package/esm/fields/field.d.ts +0 -37
- package/esm/fields/field.js +0 -74
- package/esm/fields/field.js.map +0 -1
- package/esm/fields/has-inverse-field.d.ts +0 -4
- package/esm/fields/has-inverse-field.js +0 -2
- package/esm/fields/has-inverse-field.js.map +0 -1
- package/esm/fields/has-many-field.d.ts +0 -64
- package/esm/fields/has-many-field.js +0 -58
- package/esm/fields/has-many-field.js.map +0 -1
- package/esm/fields/has-one-field.d.ts +0 -64
- package/esm/fields/has-one-field.js +0 -57
- package/esm/fields/has-one-field.js.map +0 -1
- package/esm/fields/index.d.ts +0 -40
- package/esm/fields/index.js +0 -21
- package/esm/fields/index.js.map +0 -1
- package/esm/fields/json-field.d.ts +0 -14
- package/esm/fields/json-field.js +0 -17
- package/esm/fields/json-field.js.map +0 -1
- package/esm/fields/number-field.d.ts +0 -32
- package/esm/fields/number-field.js +0 -28
- package/esm/fields/number-field.js.map +0 -1
- package/esm/fields/password-field.d.ts +0 -21
- package/esm/fields/password-field.js +0 -71
- package/esm/fields/password-field.js.map +0 -1
- package/esm/fields/radio-field.d.ts +0 -14
- package/esm/fields/radio-field.js +0 -49
- package/esm/fields/radio-field.js.map +0 -1
- package/esm/fields/relation-field.d.ts +0 -20
- package/esm/fields/relation-field.js +0 -27
- package/esm/fields/relation-field.js.map +0 -1
- package/esm/fields/sort-field.d.ts +0 -16
- package/esm/fields/sort-field.js +0 -90
- package/esm/fields/sort-field.js.map +0 -1
- package/esm/fields/string-field.d.ts +0 -8
- package/esm/fields/string-field.js +0 -8
- package/esm/fields/string-field.js.map +0 -1
- package/esm/fields/text-field.d.ts +0 -8
- package/esm/fields/text-field.js +0 -8
- package/esm/fields/text-field.js.map +0 -1
- package/esm/fields/time-field.d.ts +0 -8
- package/esm/fields/time-field.js +0 -8
- package/esm/fields/time-field.js.map +0 -1
- package/esm/fields/uid-field.d.ts +0 -10
- package/esm/fields/uid-field.js +0 -27
- package/esm/fields/uid-field.js.map +0 -1
- package/esm/fields/virtual-field.d.ts +0 -8
- package/esm/fields/virtual-field.js +0 -8
- package/esm/fields/virtual-field.js.map +0 -1
- package/esm/filter-parser.d.ts +0 -27
- package/esm/filter-parser.js +0 -185
- package/esm/filter-parser.js.map +0 -1
- package/esm/index.d.ts +0 -15
- package/esm/index.js +0 -16
- package/esm/index.js.map +0 -1
- package/esm/magic-attribute-model.d.ts +0 -7
- package/esm/magic-attribute-model.js +0 -70
- package/esm/magic-attribute-model.js.map +0 -1
- package/esm/mock-database.d.ts +0 -22
- package/esm/mock-database.js +0 -34
- package/esm/mock-database.js.map +0 -1
- package/esm/model-hook.d.ts +0 -12
- package/esm/model-hook.js +0 -61
- package/esm/model-hook.js.map +0 -1
- package/esm/model.d.ts +0 -15
- package/esm/model.js +0 -80
- package/esm/model.js.map +0 -1
- package/esm/operators/array.d.ts +0 -26
- package/esm/operators/array.js +0 -105
- package/esm/operators/array.js.map +0 -1
- package/esm/operators/association.d.ts +0 -10
- package/esm/operators/association.js +0 -14
- package/esm/operators/association.js.map +0 -1
- package/esm/operators/date.d.ts +0 -34
- package/esm/operators/date.js +0 -35
- package/esm/operators/date.js.map +0 -1
- package/esm/operators/empty.d.ts +0 -28
- package/esm/operators/empty.js +0 -58
- package/esm/operators/empty.js.map +0 -1
- package/esm/operators/index.d.ts +0 -2
- package/esm/operators/index.js +0 -2
- package/esm/operators/index.js.map +0 -1
- package/esm/operators/ne.js +0 -12
- package/esm/operators/ne.js.map +0 -1
- package/esm/operators/string.d.ts +0 -21
- package/esm/operators/string.js +0 -35
- package/esm/operators/string.js.map +0 -1
- package/esm/operators/utils.d.ts +0 -4
- package/esm/operators/utils.js +0 -11
- package/esm/operators/utils.js.map +0 -1
- package/esm/options-parser.d.ts +0 -31
- package/esm/options-parser.js +0 -225
- package/esm/options-parser.js.map +0 -1
- package/esm/playground.d.ts +0 -1
- package/esm/playground.js +0 -53
- package/esm/playground.js.map +0 -1
- package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
- package/esm/relation-repository/belongs-to-many-repository.js +0 -199
- package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
- package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
- package/esm/relation-repository/belongs-to-repository.js +0 -4
- package/esm/relation-repository/belongs-to-repository.js.map +0 -1
- package/esm/relation-repository/hasmany-repository.d.ts +0 -23
- package/esm/relation-repository/hasmany-repository.js +0 -125
- package/esm/relation-repository/hasmany-repository.js.map +0 -1
- package/esm/relation-repository/hasone-repository.d.ts +0 -17
- package/esm/relation-repository/hasone-repository.js +0 -4
- package/esm/relation-repository/hasone-repository.js.map +0 -1
- package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
- package/esm/relation-repository/multiple-relation-repository.js +0 -149
- package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
- package/esm/relation-repository/relation-repository.d.ts +0 -32
- package/esm/relation-repository/relation-repository.js +0 -93
- package/esm/relation-repository/relation-repository.js.map +0 -1
- package/esm/relation-repository/single-relation-repository.d.ts +0 -23
- package/esm/relation-repository/single-relation-repository.js +0 -96
- package/esm/relation-repository/single-relation-repository.js.map +0 -1
- package/esm/relation-repository/types.d.ts +0 -7
- package/esm/relation-repository/types.js +0 -2
- package/esm/relation-repository/types.js.map +0 -1
- package/esm/repository.d.ts +0 -165
- package/esm/repository.js +0 -276
- package/esm/repository.js.map +0 -1
- package/esm/transaction-decorator.d.ts +0 -1
- package/esm/transaction-decorator.js +0 -63
- package/esm/transaction-decorator.js.map +0 -1
- package/esm/update-associations.d.ts +0 -60
- package/esm/update-associations.js +0 -362
- package/esm/update-associations.js.map +0 -1
- package/esm/update-guard.d.ts +0 -26
- package/esm/update-guard.js +0 -122
- package/esm/update-guard.js.map +0 -1
- package/lib/collection-importer.js.map +0 -1
- package/lib/collection.js.map +0 -1
- package/lib/database.js.map +0 -1
- package/lib/fields/array-field.js.map +0 -1
- package/lib/fields/belongs-to-field.js.map +0 -1
- package/lib/fields/belongs-to-many-field.js.map +0 -1
- package/lib/fields/boolean-field.js.map +0 -1
- package/lib/fields/context-field.js.map +0 -1
- package/lib/fields/date-field.js.map +0 -1
- package/lib/fields/field.js.map +0 -1
- package/lib/fields/has-inverse-field.js.map +0 -1
- package/lib/fields/has-many-field.js.map +0 -1
- package/lib/fields/has-one-field.js.map +0 -1
- package/lib/fields/index.js.map +0 -1
- package/lib/fields/json-field.js.map +0 -1
- package/lib/fields/number-field.js.map +0 -1
- package/lib/fields/password-field.js.map +0 -1
- package/lib/fields/radio-field.js.map +0 -1
- package/lib/fields/relation-field.js.map +0 -1
- package/lib/fields/sort-field.js.map +0 -1
- package/lib/fields/string-field.js.map +0 -1
- package/lib/fields/text-field.js.map +0 -1
- package/lib/fields/time-field.js.map +0 -1
- package/lib/fields/uid-field.js.map +0 -1
- package/lib/fields/virtual-field.js.map +0 -1
- package/lib/filter-parser.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/magic-attribute-model.js.map +0 -1
- package/lib/mock-database.js.map +0 -1
- package/lib/model-hook.js.map +0 -1
- package/lib/model.js.map +0 -1
- package/lib/operators/array.js.map +0 -1
- package/lib/operators/association.js.map +0 -1
- package/lib/operators/date.js.map +0 -1
- package/lib/operators/empty.js.map +0 -1
- package/lib/operators/index.js.map +0 -1
- package/lib/operators/ne.js.map +0 -1
- package/lib/operators/string.js.map +0 -1
- package/lib/operators/utils.js.map +0 -1
- package/lib/options-parser.js.map +0 -1
- package/lib/playground.js.map +0 -1
- package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
- package/lib/relation-repository/belongs-to-repository.js.map +0 -1
- package/lib/relation-repository/hasmany-repository.js.map +0 -1
- package/lib/relation-repository/hasone-repository.js.map +0 -1
- package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
- package/lib/relation-repository/relation-repository.js.map +0 -1
- package/lib/relation-repository/single-relation-repository.js.map +0 -1
- package/lib/relation-repository/types.js.map +0 -1
- package/lib/repository.js.map +0 -1
- package/lib/transaction-decorator.js.map +0 -1
- package/lib/update-associations.js.map +0 -1
- package/lib/update-guard.js.map +0 -1
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -5
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"single-relation-repository.js","sourceRoot":"","sources":["../../src/relation-repository/single-relation-repository.ts"],"names":[],"mappings":"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","sourcesContent":["import lodash from 'lodash';\nimport { SingleAssociationAccessors } from 'sequelize';\nimport { Model } from '../model';\nimport { Appends, Except, Fields, Filter, TargetKey, TransactionAble, UpdateOptions } from '../repository';\nimport { updateModelByValues } from '../update-associations';\nimport { RelationRepository, transaction } from './relation-repository';\n\nexport interface SingleRelationFindOption extends TransactionAble {\n fields?: Fields;\n except?: Except;\n appends?: Appends;\n filter?: Filter;\n}\n\ninterface SetOption extends TransactionAble {\n tk?: TargetKey;\n}\n\nexport abstract class SingleRelationRepository extends RelationRepository {\n @transaction()\n async remove(options?: TransactionAble): Promise<void> {\n const transaction = await this.getTransaction(options);\n const sourceModel = await this.getSourceModel(transaction);\n return await sourceModel[this.accessors().set](null, {\n transaction,\n });\n }\n\n @transaction((args, transaction) => {\n return {\n tk: args[0],\n transaction,\n };\n })\n async set(options: TargetKey | SetOption): Promise<void> {\n const transaction = await this.getTransaction(options);\n let handleKey = lodash.isPlainObject(options) ? (<SetOption>options).tk : options;\n\n const sourceModel = await this.getSourceModel(transaction);\n\n return await sourceModel[this.accessors().set](handleKey, {\n transaction,\n });\n }\n\n async find(options?: SingleRelationFindOption): Promise<Model<any>> {\n const transaction = await this.getTransaction(options);\n const findOptions = this.buildQueryOptions({\n ...options,\n });\n\n const getAccessor = this.accessors().get;\n const sourceModel = await this.getSourceModel(transaction);\n\n return await sourceModel[getAccessor]({\n ...findOptions,\n transaction,\n });\n }\n\n async findOne(options?: SingleRelationFindOption): Promise<Model<any>> {\n return this.find(options);\n }\n\n @transaction()\n async destroy(options?: TransactionAble): Promise<Boolean> {\n const transaction = await this.getTransaction(options);\n\n const target = await this.find({\n transaction,\n });\n\n await target.destroy({\n transaction,\n });\n\n return true;\n }\n\n @transaction()\n async update(options: UpdateOptions): Promise<any> {\n const transaction = await this.getTransaction(options);\n\n const target = await this.find({\n transaction,\n });\n\n await updateModelByValues(target, options?.values, {\n ...lodash.omit(options, 'values'),\n transaction,\n });\n\n return target;\n }\n\n accessors() {\n return <SingleAssociationAccessors>super.accessors();\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/relation-repository/types.ts"],"names":[],"mappings":"","sourcesContent":["import { TargetKey, Values } from '../repository';\nimport { Transactionable } from 'sequelize';\n\nexport type PrimaryKeyWithThroughValues = [TargetKey, Values];\n\nexport interface AssociatedOptions extends Transactionable {\n tk?: TargetKey | TargetKey[] | PrimaryKeyWithThroughValues | PrimaryKeyWithThroughValues[];\n}\n\nexport type setAssociationOptions =\n | TargetKey\n | TargetKey[]\n | PrimaryKeyWithThroughValues\n | PrimaryKeyWithThroughValues[]\n | AssociatedOptions;\n"]}
|
package/lib/repository.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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","sourcesContent":["import lodash, { omit } from 'lodash';\nimport {\n Association,\n BulkCreateOptions,\n CreateOptions as SequelizeCreateOptions,\n DestroyOptions as SequelizeDestroyOptions,\n FindAndCountOptions as SequelizeAndCountOptions,\n FindOptions as SequelizeFindOptions,\n ModelCtor,\n Op,\n Transaction,\n UpdateOptions as SequelizeUpdateOptions\n} from 'sequelize';\nimport { Collection } from './collection';\nimport { Database } from './database';\nimport { RelationField } from './fields';\nimport FilterParser from './filter-parser';\nimport { Model } from './model';\nimport { OptionsParser } from './options-parser';\nimport { BelongsToManyRepository } from './relation-repository/belongs-to-many-repository';\nimport { BelongsToRepository } from './relation-repository/belongs-to-repository';\nimport { HasManyRepository } from './relation-repository/hasmany-repository';\nimport { HasOneRepository } from './relation-repository/hasone-repository';\nimport { RelationRepository } from './relation-repository/relation-repository';\nimport { transactionWrapperBuilder } from './transaction-decorator';\nimport { updateAssociations, updateModelByValues } from './update-associations';\nimport { UpdateGuard } from './update-guard';\n\nconst debug = require('debug')('noco-database');\n\nexport interface IRepository {}\n\ninterface CreateManyOptions extends BulkCreateOptions {\n records: Values[];\n}\n\nexport interface TransactionAble {\n transaction?: Transaction;\n}\n\nexport interface FilterAble {\n filter: Filter;\n}\n\nexport type TargetKey = string | number;\nexport type TK = TargetKey | TargetKey[];\n\nexport type Filter = any;\nexport type Appends = string[];\nexport type Except = string[];\nexport type Fields = string[];\nexport type Sort = string[] | string;\n\nexport type WhiteList = string[];\nexport type BlackList = string[];\nexport type AssociationKeysToBeUpdate = string[];\n\nexport type Values = any;\n\nexport interface CountOptions extends Omit<SequelizeCreateOptions, 'distinct' | 'where' | 'include'>, TransactionAble {\n fields?: Fields;\n filter?: Filter;\n}\n\nexport interface FilterByTk {\n filterByTk?: TargetKey;\n}\n\nexport interface FindOptions extends SequelizeFindOptions, CommonFindOptions, FilterByTk {}\n\nexport interface CommonFindOptions {\n filter?: Filter;\n fields?: Fields;\n appends?: Appends;\n except?: Except;\n sort?: Sort;\n context?: any;\n}\n\ninterface FindOneOptions extends FindOptions, CommonFindOptions {}\n\nexport interface DestroyOptions extends SequelizeDestroyOptions {\n filter?: Filter;\n filterByTk?: TargetKey | TargetKey[];\n truncate?: boolean;\n context?: any;\n}\n\ninterface FindAndCountOptions extends Omit<SequelizeAndCountOptions, 'where' | 'include' | 'order'> {\n // 数据过滤\n filter?: Filter;\n // 输出结果显示哪些字段\n fields?: Fields;\n // 输出结果不显示哪些字段\n except?: Except;\n // 附加字段,用于控制关系字段的输出\n appends?: Appends;\n // 排序,字段前面加上 “-” 表示降序\n sort?: Sort;\n}\n\nexport interface CreateOptions extends SequelizeCreateOptions {\n values?: Values;\n whitelist?: WhiteList;\n blacklist?: BlackList;\n updateAssociationValues?: AssociationKeysToBeUpdate;\n context?: any;\n}\n\nexport interface UpdateOptions extends Omit<SequelizeUpdateOptions, 'where'> {\n values: Values;\n filter?: Filter;\n filterByTk?: TargetKey;\n whitelist?: WhiteList;\n blacklist?: BlackList;\n updateAssociationValues?: AssociationKeysToBeUpdate;\n context?: any;\n}\n\ninterface RelatedQueryOptions {\n database: Database;\n field: RelationField;\n source: {\n idOrInstance: any;\n collection: Collection;\n };\n target: {\n association: Association & {\n accessors: any;\n };\n collection: Collection;\n };\n}\n\nconst transaction = transactionWrapperBuilder(function () {\n return (<Repository>this).collection.model.sequelize.transaction();\n});\n\nclass RelationRepositoryBuilder<R extends RelationRepository> {\n collection: Collection;\n associationName: string;\n association: Association;\n\n builderMap = {\n HasOne: HasOneRepository,\n BelongsTo: BelongsToRepository,\n BelongsToMany: BelongsToManyRepository,\n HasMany: HasManyRepository,\n };\n\n constructor(collection: Collection, associationName: string) {\n this.collection = collection;\n this.associationName = associationName;\n this.association = this.collection.model.associations[this.associationName];\n }\n\n protected builder() {\n return this.builderMap;\n }\n\n of(id: string | number): R {\n const klass = this.builder()[this.association.associationType];\n return new klass(this.collection, this.associationName, id);\n }\n}\n\nexport class Repository<TModelAttributes extends {} = any, TCreationAttributes extends {} = TModelAttributes>\n implements IRepository\n{\n database: Database;\n collection: Collection;\n model: ModelCtor<Model>;\n\n constructor(collection: Collection) {\n this.database = collection.context.database;\n this.collection = collection;\n this.model = collection.model;\n }\n\n /**\n * return count by filter\n */\n async count(countOptions?: CountOptions): Promise<number> {\n let options = countOptions ? lodash.clone(countOptions) : {};\n\n const transaction = await this.getTransaction(options);\n\n if (countOptions?.filter) {\n options = {\n ...options,\n ...this.parseFilter(countOptions.filter, countOptions),\n };\n }\n\n const count = await this.collection.model.count({\n ...options,\n distinct: true,\n transaction,\n });\n\n return count;\n }\n\n /**\n * find\n * @param options\n */\n async find(options?: FindOptions) {\n const model = this.collection.model;\n const transaction = await this.getTransaction(options);\n\n const opts = {\n subQuery: false,\n ...this.buildQueryOptions(options),\n };\n\n if (opts.include && opts.include.length > 0) {\n // @ts-ignore\n const primaryKeyField = model.primaryKeyField || model.primaryKeyAttribute;\n\n const ids = (\n await model.findAll({\n ...opts,\n includeIgnoreAttributes: false,\n attributes: [primaryKeyField],\n group: `${model.name}.${primaryKeyField}`,\n transaction,\n })\n ).map((row) => row.get(primaryKeyField));\n\n const where = {\n [primaryKeyField]: {\n [Op.in]: ids,\n },\n };\n\n return await model.findAll({\n ...omit(opts, ['limit', 'offset']),\n where,\n transaction,\n });\n }\n\n return await model.findAll({\n ...opts,\n transaction,\n });\n }\n\n /**\n * find and count\n * @param options\n */\n async findAndCount(options?: FindAndCountOptions): Promise<[Model[], number]> {\n const transaction = await this.getTransaction(options);\n options = {\n ...options,\n transaction,\n };\n\n return [await this.find(options), await this.count(options)];\n }\n\n /**\n * Find By Id\n *\n */\n findById(id: string | number) {\n return this.collection.model.findByPk(id);\n }\n\n /**\n * Find one record from database\n *\n * @param options\n */\n async findOne(options?: FindOneOptions) {\n const transaction = await this.getTransaction(options);\n\n const rows = await this.find({ ...options, limit: 1, transaction });\n return rows.length == 1 ? rows[0] : null;\n }\n\n /**\n * Save instance to database\n *\n * @param values\n * @param options\n */\n @transaction()\n async create<M extends Model>(options: CreateOptions): Promise<M> {\n const transaction = await this.getTransaction(options);\n\n const guard = UpdateGuard.fromOptions(this.model, { ...options, action: 'create' });\n const values = guard.sanitize(options.values || {});\n\n const instance = await this.model.create<any>(values, {\n ...options,\n transaction,\n });\n\n if (!instance) {\n return;\n }\n\n await updateAssociations(instance, values, {\n ...options,\n transaction,\n });\n\n if (options.hooks !== false) {\n await this.database.emitAsync(`${this.collection.name}.afterCreateWithAssociations`, instance, options);\n await this.database.emitAsync(`${this.collection.name}.afterSaveWithAssociations`, instance, options);\n }\n\n return instance;\n }\n\n /**\n * Save Many instances to database\n *\n * @param records\n * @param options\n */\n @transaction()\n async createMany(options: CreateManyOptions) {\n const transaction = await this.getTransaction(options);\n const { records } = options;\n const instances = [];\n for (const values of records) {\n const instance = await this.create({ values, transaction });\n instances.push(instance);\n }\n return instances;\n }\n\n /**\n * Update model value\n *\n * @param values\n * @param options\n */\n @transaction()\n async update(options: UpdateOptions) {\n const transaction = await this.getTransaction(options);\n const guard = UpdateGuard.fromOptions(this.model, options);\n\n const values = guard.sanitize(options.values);\n\n const queryOptions = this.buildQueryOptions(options);\n\n const instances = await this.find({\n ...queryOptions,\n transaction,\n });\n\n for (const instance of instances) {\n await updateModelByValues(instance, values, {\n ...options,\n sanitized: true,\n transaction,\n });\n }\n\n if (options.hooks !== false) {\n for (const instance of instances) {\n await this.database.emitAsync(`${this.collection.name}.afterUpdateWithAssociations`, instance, options);\n await this.database.emitAsync(`${this.collection.name}.afterSaveWithAssociations`, instance, options);\n }\n }\n\n return instances;\n }\n\n @transaction((args, transaction) => {\n return {\n filterByTk: args[0],\n transaction,\n };\n })\n async destroy(options?: TargetKey | TargetKey[] | DestroyOptions) {\n const transaction = await this.getTransaction(options);\n\n const modelFilterKey = this.collection.filterTargetKey;\n\n options = <DestroyOptions>options;\n\n if (options['individualHooks'] === undefined) {\n options['individualHooks'] = true;\n }\n\n const filterByTk: TargetKey[] | undefined =\n options.filterByTk && !lodash.isArray(options.filterByTk)\n ? [options.filterByTk]\n : (options.filterByTk as TargetKey[] | undefined);\n\n if (filterByTk && !options.filter) {\n return await this.model.destroy({\n ...options,\n where: {\n [modelFilterKey]: {\n [Op.in]: filterByTk,\n },\n },\n transaction,\n });\n }\n\n if (options.filter) {\n let pks = (\n await this.find({\n filter: options.filter,\n transaction,\n })\n ).map((instance) => instance.get(modelFilterKey) as TargetKey);\n\n if (filterByTk) {\n pks = lodash.intersection(\n pks.map((i) => `${i}`),\n filterByTk.map((i) => `${i}`),\n );\n }\n\n return await this.destroy({\n ...lodash.omit(options, 'filter'),\n filterByTk: pks,\n transaction,\n });\n }\n\n if (options.truncate) {\n return await this.model.destroy({\n ...options,\n truncate: true,\n transaction,\n });\n }\n }\n\n /**\n * @param association target association\n */\n relation<R extends RelationRepository>(association: string): RelationRepositoryBuilder<R> {\n return new RelationRepositoryBuilder<R>(this.collection, association);\n }\n\n protected buildQueryOptions(options: any) {\n const parser = new OptionsParser(options, {\n collection: this.collection,\n });\n\n const params = parser.toSequelizeParams();\n debug('sequelize query params %o', params);\n return { where: {}, ...options, ...params };\n }\n\n protected parseFilter(filter: Filter, options?: any) {\n const parser = new FilterParser(filter, {\n collection: this.collection,\n app: {\n ctx: options?.context,\n },\n });\n return parser.toSequelizeParams();\n }\n\n protected async getTransaction(options: any, autoGen = false) {\n if (lodash.isPlainObject(options) && options.transaction) {\n return options.transaction;\n }\n\n if (autoGen) {\n return await this.model.sequelize.transaction();\n }\n\n return null;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-decorator.js","sourceRoot":"","sources":["../src/transaction-decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA4B;AAE5B,SAAgB,yBAAyB,CAAC,oBAAoB;IAC5D,OAAO,SAAS,WAAW,CAAC,mBAAoB;QAC9C,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;YAElC,UAAU,CAAC,KAAK,GAAG;;oBACjB,IAAI,WAAW,CAAC;oBAChB,IAAI,cAAc,GAAG,KAAK,CAAC;oBAE3B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBAC5D,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;qBAC3C;oBAED,IAAI,CAAC,WAAW,EAAE;wBAChB,WAAW,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACrD,cAAc,GAAG,IAAI,CAAC;qBACvB;oBAED,iCAAiC;oBACjC,IAAI,cAAc,EAAE;wBAClB,IAAI;4BACF,IAAI,aAAa,CAAC;4BAClB,IAAI,gBAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gCACtC,aAAa,mCACR,SAAS,CAAC,CAAC,CAAC,KACf,WAAW,GACZ,CAAC;6BACH;iCAAM,IAAI,mBAAmB,EAAE;gCAC9B,aAAa,GAAG,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;6BAC7D;iCAAM,IAAI,gBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC1E,aAAa,GAAG;oCACd,WAAW;iCACZ,CAAC;6BACH;iCAAM;gCACL,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,OAAO,CAAC,CAAC;6BACxE;4BAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;4BAE5D,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;4BAE3B,OAAO,OAAO,CAAC;yBAChB;wBAAC,OAAO,GAAG,EAAE;4BACZ,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;4BACvB,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;4BAC7B,MAAM,GAAG,CAAC;yBACX;qBACF;yBAAM;wBACL,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;qBACxC;gBACH,CAAC;aAAA,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAvDD,8DAuDC","sourcesContent":["import lodash from 'lodash';\n\nexport function transactionWrapperBuilder(transactionGenerator) {\n return function transaction(transactionInjector?) {\n return (target, name, descriptor) => {\n const oldValue = descriptor.value;\n\n descriptor.value = async function () {\n let transaction;\n let newTransaction = false;\n\n if (arguments.length > 0 && typeof arguments[0] === 'object') {\n transaction = arguments[0]['transaction'];\n }\n\n if (!transaction) {\n transaction = await transactionGenerator.apply(this);\n newTransaction = true;\n }\n\n // 需要将 newTransaction 注入到被装饰函数参数内\n if (newTransaction) {\n try {\n let callArguments;\n if (lodash.isPlainObject(arguments[0])) {\n callArguments = {\n ...arguments[0],\n transaction,\n };\n } else if (transactionInjector) {\n callArguments = transactionInjector(arguments, transaction);\n } else if (lodash.isNull(arguments[0]) || lodash.isUndefined(arguments[0])) {\n callArguments = {\n transaction,\n };\n } else {\n throw new Error(`please provide transactionInjector for ${name} call`);\n }\n\n const results = await oldValue.apply(this, [callArguments]);\n\n await transaction.commit();\n\n return results;\n } catch (err) {\n console.error({ err });\n await transaction.rollback();\n throw err;\n }\n } else {\n return oldValue.apply(this, arguments);\n }\n };\n\n return descriptor;\n };\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-associations.js","sourceRoot":"","sources":["../src/update-associations.ts"],"names":[],"mappings":";;;;;;;;;;;;AAUA,mCAAgC;AAEhC,iDAA6C;AAE7C,SAAS,iBAAiB,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAChE,CAAC;AAED,SAAS,eAAe,CAAC,IAAc,EAAE,MAAc;IACrD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAe;IAC/C,OAAsB,QAAQ,CAAC,WAAY,CAAC,YAAY,CAAC;AAC3D,CAAC;AAFD,8CAEC;AAED,SAAgB,yBAAyB,CAAC,QAAe;IACvD,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;SAChC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;QACjC,OAAO,WAAW,CAAC,eAAe,IAAI,eAAe,CAAC;IACxD,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;QACnB,OAAsB,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC;AAVD,8DAUC;AAED,SAAgB,qBAAqB,CAAC,QAAe,EAAE,GAAW;IAChE,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAgB,CAAC;AACzD,CAAC;AAFD,sDAEC;AAyBD,SAAsB,mBAAmB,CAAC,QAAe,EAAE,MAAmB,EAAE,OAAuB;;QACrG,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAA,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,0BAAW,EAAE,CAAC;YAChC,YAAY;YACZ,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtC,KAAK,CAAC,4BAA4B,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACpE,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACjC;QAED,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CAAA;AAbD,kDAaC;AAED,SAAsB,uBAAuB,CAC3C,QAAe,EACf,WAAmB,EACnB,aAAkB,EAClB,MAAa,EACb,WAAW,GAAG,IAAI;;QAElB,8BAA8B;QAC9B,KAAK,MAAM,aAAa,IAAI,yBAAyB,CAAC,QAAQ,CAAC,EAAE;YAC/D,aAAa;YACb,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;YACjD,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC;YAE3C,IAAI,gBAAgB,KAAK,gBAAgB,EAAE;gBACzC,MAAM,KAAK,GAAG;oBACZ,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;oBACjE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;iBAC9D,CAAC;gBAEF,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE;oBAC9C,KAAK;oBACL,WAAW;iBACZ,CAAC,CAAC;aACJ;SACF;IACH,CAAC;CAAA;AAzBD,0DAyBC;AAED;;;;;GAKG;AACH,SAAsB,kBAAkB,CAAC,QAAe,EAAE,MAAW,EAAE,UAAoC,EAAE;;QAC3G,2BAA2B;QAC3B,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,WAAW,EAAE;YAChB,cAAc,GAAG,IAAI,CAAC;YACtB,WAAW,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;SACtD;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,EAAE;YAC1D,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,kCAC7C,OAAO,KACV,WAAW,IACX,CAAC;aACJ;SACF;QAED,8BAA8B;QAC9B,KAAK,MAAM,aAAa,IAAI,yBAAyB,CAAC,QAAQ,CAAC,EAAE;YAC/D,aAAa;YACb,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;YACjD,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC;YAE3C,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE;gBACnD,MAAM,KAAK,GAAG;oBACZ,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;oBACjE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;iBAC3E,CAAC;gBAEF,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;oBACnD,KAAK;oBACL,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW;iBACZ,CAAC,CAAC;aACJ;SACF;QAED,IAAI,cAAc,EAAE;YAClB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;SAC5B;IACH,CAAC;CAAA;AAhDD,gDAgDC;AAED,SAAS,wBAAwB,CAAC,CAAM,EAAE,CAAM;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAE/B,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;QACrD,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS;YAC3C,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI;YAC/B,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI;YAC/B,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,QAAQ;YAC3B,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAC3B,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,UAAU;YAC3B,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAC5B,CAAC;KACH;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE;QAC/G,MAAM,WAAW,GAAG,CAAC,CAAC,eAAe,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,OAAO,CACL,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI;YACnD,WAAW,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU;YACjD,WAAW,CAAC,SAAS,KAAK,WAAW,CAAC,SAAS,CAChD,CAAC;KACH;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAsB,iBAAiB,CACrC,QAAe,EACf,GAAW,EACX,KAAU,EACV,UAAoC,EAAE;;QAEtC,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAEzD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,OAAO,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE;YACnG,OAAO,KAAK,CAAC;SACd;QAED,QAAQ,WAAW,CAAC,eAAe,EAAE;YACnC,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACd,OAAO,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAChE,KAAK,SAAS,CAAC;YACf,KAAK,eAAe;gBAClB,OAAO,yBAAyB,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACnE;IACH,CAAC;CAAA;AAxBD,8CAwBC;AAED;;;;;;GAMG;AACH,SAAsB,uBAAuB,CAC3C,KAAY,EACZ,GAAW,EACX,KAAU,EACV,UAAoC,EAAE;;QAEtC,MAAM,WAAW,GAAuB,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1E,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;YACvE,OAAO,KAAK,CAAC;SACd;QAED,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC;QAC7G,MAAM,IAAI,GAAG,eAAe,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAE3D,IAAI;YACF,4BAA4B;YAC5B,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;YAE9C,MAAM,iBAAiB,GAAG,GAAS,EAAE;gBACnC,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBAChD,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC5B;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAA,CAAC;YAEF,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC5B,OAAO,MAAM,iBAAiB,EAAE,CAAC;aAClC;YAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBAC3B,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC5B;gBACD,OAAO,IAAI,CAAC;aACb;YAED,IAAI,KAAK,YAAY,aAAK,EAAE;gBAC1B,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC1D,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE/B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;oBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;iBAC5B;gBACD,OAAO,IAAI,CAAC;aACb;YAED,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACpD,IAAI,OAAe,CAAC;YACpB,IAAI,CAAmB,CAAC;YACxB,IAAI,WAAW,CAAC,eAAe,KAAK,WAAW,EAAE;gBAC/C,CAAC,GAAG,WAAW,CAAC,MAA0B,CAAC;gBAC3C,aAAa;gBACb,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC;aACjC;iBAAM;gBACL,CAAC,GAAG,WAAW,CAAC,MAA0B,CAAC;gBAC3C,OAAO,GAAG,CAAC,CAAC,mBAAmB,CAAC;aACjC;YAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;gBACpC,IAAI,QAAQ,GAAQ,MAAM,CAAC,CAAC,OAAO,CAAC;oBAClC,KAAK,EAAE;wBACL,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;qBAC1B;oBACD,WAAW;iBACZ,CAAC,CAAC;gBAEH,IAAI,QAAQ,EAAE;oBACZ,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;oBAE7D,IAAI,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACzC,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,kCAAO,OAAO,KAAE,WAAW,IAAG,CAAC;qBAC3D;oBAED,MAAM,kBAAkB,CAAC,QAAQ,EAAE,KAAK,kCACnC,OAAO,KACV,WAAW,EACX,kBAAkB,EAAE,WAAW,EAC/B,uBAAuB,EAAE,IAAI,IAC7B,CAAC;oBACH,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBAClC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;wBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;qBAC5B;oBACD,OAAO,IAAI,CAAC;iBACb;aACF;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YAC9E,MAAM,kBAAkB,CAAC,QAAQ,EAAE,KAAK,kCACnC,OAAO,KACV,WAAW,EACX,kBAAkB,EAAE,WAAW,EAC/B,uBAAuB,EAAE,IAAI,IAC7B,CAAC;YACH,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClC,aAAa;YACb,IAAI,WAAW,CAAC,SAAS,EAAE;gBACzB,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;aAC/D;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC5B;SACF;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;aAC9B;YACD,MAAM,KAAK,CAAC;SACb;IACH,CAAC;CAAA;AApHD,0DAoHC;AAED;;;;;;GAMG;AACH,SAAsB,yBAAyB,CAC7C,KAAY,EACZ,GAAW,EACX,KAAU,EACV,UAAoC,EAAE;;QAEtC,MAAM,WAAW,GAA4B,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE/E,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE;YACvE,OAAO,KAAK,CAAC;SACd;QAED,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,EAAE,EAAE,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC;QAC7G,MAAM,IAAI,GAAG,eAAe,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAE3D,IAAI;YACF,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;YAE9C,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACpD,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC5B,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzD,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC9B,OAAO;aACR;YAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBAC3B,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC1D,OAAO;aACR;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACzB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;aACjB;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,eAAe;YACjC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,cAAc;YAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;oBAC3B,SAAS;iBACV;gBACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;oBAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;qBAAM,IAAI,IAAI,YAAY,aAAK,EAAE;oBAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;qBAAM,IAAI,IAAI,CAAC,SAAS,EAAE;oBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAClB;aACF;YAED,8BAA8B;YAC9B,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YAE1D,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBAElD,MAAM,OAAO,GAAS,WAAY,CAAC,OAAO,CAAC,CAAC,CAAO,WAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE1F,MAAM,eAAe,GAAG;oBACtB,OAAO;oBACP,WAAW;iBACZ,CAAC;gBAEF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,YAAY,EAAE;oBAChB,eAAe,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;iBAC3C;gBAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;oBAC/B,oBAAoB;oBACpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBACpE,MAAM,kBAAkB,CAAC,QAAQ,EAAE,IAAI,kCAClC,OAAO,KACV,WAAW,EACX,kBAAkB,EAAE,WAAW,EAC/B,uBAAuB,EAAE,IAAI,IAC7B,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACtB;qBAAM;oBACL,sBAAsB;oBACtB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAM,IAAI,CAAC,EAAE,CAAC,EAAE;wBAChE,WAAW;qBACZ,CAAC,CAAC;oBACH,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;oBAE9C,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;oBACpD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACzC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,kCAAO,OAAO,KAAE,WAAW,IAAG,CAAC;qBAC1D;oBACD,MAAM,kBAAkB,CAAC,QAAQ,EAAE,IAAI,kCAClC,OAAO,KACV,WAAW,EACX,kBAAkB,EAAE,WAAW,EAC/B,uBAAuB,EAAE,IAAI,IAC7B,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACtB;aACF;YAED,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;aAC5B;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;SACb;IACH,CAAC;CAAA;AAlHD,8DAkHC","sourcesContent":["import {\n Association,\n BelongsTo,\n BelongsToMany,\n HasMany,\n HasOne,\n Hookable,\n ModelCtor,\n Transactionable,\n} from 'sequelize';\nimport { Model } from './model';\nimport { TransactionAble } from './repository';\nimport { UpdateGuard } from './update-guard';\n\nfunction isUndefinedOrNull(value: any) {\n return typeof value === 'undefined' || value === null;\n}\n\nfunction isStringOrNumber(value: any) {\n return typeof value === 'string' || typeof value === 'number';\n}\n\nfunction getKeysByPrefix(keys: string[], prefix: string) {\n return keys.filter((key) => key.startsWith(`${prefix}.`)).map((key) => key.substring(prefix.length + 1));\n}\n\nexport function modelAssociations(instance: Model) {\n return (<typeof Model>instance.constructor).associations;\n}\n\nexport function belongsToManyAssociations(instance: Model): Array<BelongsToMany> {\n const associations = modelAssociations(instance);\n return Object.entries(associations)\n .filter((entry) => {\n const [key, association] = entry;\n return association.associationType == 'BelongsToMany';\n })\n .map((association) => {\n return <BelongsToMany>association[1];\n });\n}\n\nexport function modelAssociationByKey(instance: Model, key: string): Association {\n return modelAssociations(instance)[key] as Association;\n}\n\ntype UpdateValue = { [key: string]: any };\n\ninterface UpdateOptions extends TransactionAble {\n filter?: any;\n filterByTk?: number | string;\n // 字段白名单\n whitelist?: string[];\n // 字段黑名单\n blacklist?: string[];\n // 关系数据默认会新建并建立关联处理,如果是已存在的数据只关联,但不更新关系数据\n // 如果需要更新关联数据,可以通过 updateAssociationValues 指定\n updateAssociationValues?: string[];\n sanitized?: boolean;\n sourceModel?: Model;\n}\n\ninterface UpdateAssociationOptions extends Transactionable, Hookable {\n updateAssociationValues?: string[];\n sourceModel?: Model;\n context?: any;\n associationContext?: any;\n}\n\nexport async function updateModelByValues(instance: Model, values: UpdateValue, options?: UpdateOptions) {\n if (!options?.sanitized) {\n const guard = new UpdateGuard();\n //@ts-ignore\n guard.setModel(instance.constructor);\n guard.setBlackList(options.blacklist);\n guard.setWhiteList(options.whitelist);\n guard.setAssociationKeysToBeUpdate(options.updateAssociationValues);\n values = guard.sanitize(values);\n }\n\n await instance.update(values, options);\n await updateAssociations(instance, values, options);\n}\n\nexport async function updateThroughTableValue(\n instance: Model,\n throughName: string,\n throughValues: any,\n source: Model,\n transaction = null,\n) {\n // update through table values\n for (const belongsToMany of belongsToManyAssociations(instance)) {\n // @ts-ignore\n const throughModel = belongsToMany.through.model;\n const throughModelName = throughModel.name;\n\n if (throughModelName === throughModelName) {\n const where = {\n [belongsToMany.foreignKey]: instance.get(belongsToMany.sourceKey),\n [belongsToMany.otherKey]: source.get(belongsToMany.targetKey),\n };\n\n return await throughModel.update(throughValues, {\n where,\n transaction,\n });\n }\n }\n}\n\n/**\n * update association of instance by values\n * @param instance\n * @param values\n * @param options\n */\nexport async function updateAssociations(instance: Model, values: any, options: UpdateAssociationOptions = {}) {\n // if no values set, return\n if (!values) {\n return;\n }\n\n let newTransaction = false;\n let transaction = options.transaction;\n\n if (!transaction) {\n newTransaction = true;\n transaction = await instance.sequelize.transaction();\n }\n\n const keys = Object.keys(values);\n\n for (const key of Object.keys(modelAssociations(instance))) {\n if (keys.includes(key)) {\n await updateAssociation(instance, key, values[key], {\n ...options,\n transaction,\n });\n }\n }\n\n // update through table values\n for (const belongsToMany of belongsToManyAssociations(instance)) {\n // @ts-ignore\n const throughModel = belongsToMany.through.model;\n const throughModelName = throughModel.name;\n\n if (values[throughModelName] && options.sourceModel) {\n const where = {\n [belongsToMany.foreignKey]: instance.get(belongsToMany.sourceKey),\n [belongsToMany.otherKey]: options.sourceModel.get(belongsToMany.targetKey),\n };\n\n await throughModel.update(values[throughModel.name], {\n where,\n context: options.context,\n transaction,\n });\n }\n }\n\n if (newTransaction) {\n await transaction.commit();\n }\n}\n\nfunction isReverseAssociationPair(a: any, b: any) {\n const typeSet = new Set();\n typeSet.add(a.associationType);\n typeSet.add(b.associationType);\n\n if (typeSet.size == 1 && typeSet.has('BelongsToMany')) {\n return (\n a.through.tableName === b.through.tableName &&\n a.target.name === b.source.name &&\n b.target.name === a.source.name &&\n a.foreignKey === b.otherKey &&\n a.sourceKey === b.targetKey &&\n a.otherKey === b.foreignKey &&\n a.targetKey === b.sourceKey\n );\n }\n\n if ((typeSet.has('HasOne') && typeSet.has('BelongsTo')) || (typeSet.has('HasMany') && typeSet.has('BelongsTo'))) {\n const sourceAssoc = a.associationType == 'BelongsTo' ? b : a;\n const targetAssoc = sourceAssoc == a ? b : a;\n\n return (\n sourceAssoc.source.name === targetAssoc.target.name &&\n sourceAssoc.foreignKey === targetAssoc.foreignKey &&\n sourceAssoc.sourceKey === targetAssoc.targetKey\n );\n }\n\n return false;\n}\n\n/**\n * update model association by key\n * @param instance\n * @param key\n * @param value\n * @param options\n */\nexport async function updateAssociation(\n instance: Model,\n key: string,\n value: any,\n options: UpdateAssociationOptions = {},\n) {\n const association = modelAssociationByKey(instance, key);\n\n if (!association) {\n return false;\n }\n\n if (options.associationContext && isReverseAssociationPair(association, options.associationContext)) {\n return false;\n }\n\n switch (association.associationType) {\n case 'HasOne':\n case 'BelongsTo':\n return updateSingleAssociation(instance, key, value, options);\n case 'HasMany':\n case 'BelongsToMany':\n return updateMultipleAssociation(instance, key, value, options);\n }\n}\n\n/**\n * update belongsTo and HasOne\n * @param model\n * @param key\n * @param value\n * @param options\n */\nexport async function updateSingleAssociation(\n model: Model,\n key: string,\n value: any,\n options: UpdateAssociationOptions = {},\n) {\n const association = <HasOne | BelongsTo>modelAssociationByKey(model, key);\n\n if (!association) {\n return false;\n }\n\n if (!['undefined', 'string', 'number', 'object'].includes(typeof value)) {\n return false;\n }\n\n const { context, updateAssociationValues = [], transaction = await model.sequelize.transaction() } = options;\n const keys = getKeysByPrefix(updateAssociationValues, key);\n\n try {\n // set method of association\n const setAccessor = association.accessors.set;\n\n const removeAssociation = async () => {\n await model[setAccessor](null, { transaction });\n model.setDataValue(key, null);\n if (!options.transaction) {\n await transaction.commit();\n }\n return true;\n };\n\n if (isUndefinedOrNull(value)) {\n return await removeAssociation();\n }\n\n if (isStringOrNumber(value)) {\n await model[setAccessor](value, { context, transaction });\n if (!options.transaction) {\n await transaction.commit();\n }\n return true;\n }\n\n if (value instanceof Model) {\n await model[setAccessor](value, { context, transaction });\n model.setDataValue(key, value);\n\n if (!options.transaction) {\n await transaction.commit();\n }\n return true;\n }\n\n const createAccessor = association.accessors.create;\n let dataKey: string;\n let M: ModelCtor<Model>;\n if (association.associationType === 'BelongsTo') {\n M = association.target as ModelCtor<Model>;\n // @ts-ignore\n dataKey = association.targetKey;\n } else {\n M = association.source as ModelCtor<Model>;\n dataKey = M.primaryKeyAttribute;\n }\n\n if (isStringOrNumber(value[dataKey])) {\n let instance: any = await M.findOne({\n where: {\n [dataKey]: value[dataKey],\n },\n transaction,\n });\n\n if (instance) {\n await model[setAccessor](instance, { context, transaction });\n\n if (updateAssociationValues.includes(key)) {\n await instance.update(value, { ...options, transaction });\n }\n\n await updateAssociations(instance, value, {\n ...options,\n transaction,\n associationContext: association,\n updateAssociationValues: keys,\n });\n model.setDataValue(key, instance);\n if (!options.transaction) {\n await transaction.commit();\n }\n return true;\n }\n }\n\n const instance = await model[createAccessor](value, { context, transaction });\n await updateAssociations(instance, value, {\n ...options,\n transaction,\n associationContext: association,\n updateAssociationValues: keys,\n });\n model.setDataValue(key, instance);\n // @ts-ignore\n if (association.targetKey) {\n model.setDataValue(association.foreignKey, instance[dataKey]);\n }\n if (!options.transaction) {\n await transaction.commit();\n }\n } catch (error) {\n if (!options.transaction) {\n await transaction.rollback();\n }\n throw error;\n }\n}\n\n/**\n * update multiple association of model by value\n * @param model\n * @param key\n * @param value\n * @param options\n */\nexport async function updateMultipleAssociation(\n model: Model,\n key: string,\n value: any,\n options: UpdateAssociationOptions = {},\n) {\n const association = <BelongsToMany | HasMany>modelAssociationByKey(model, key);\n\n if (!association) {\n return false;\n }\n\n if (!['undefined', 'string', 'number', 'object'].includes(typeof value)) {\n return false;\n }\n\n const { context, updateAssociationValues = [], transaction = await model.sequelize.transaction() } = options;\n const keys = getKeysByPrefix(updateAssociationValues, key);\n\n try {\n const setAccessor = association.accessors.set;\n\n const createAccessor = association.accessors.create;\n if (isUndefinedOrNull(value)) {\n await model[setAccessor](null, { transaction, context });\n model.setDataValue(key, null);\n return;\n }\n\n if (isStringOrNumber(value)) {\n await model[setAccessor](value, { transaction, context });\n return;\n }\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n const list1 = []; // to be setted\n const list2 = []; // to be added\n for (const item of value) {\n if (isUndefinedOrNull(item)) {\n continue;\n }\n if (isStringOrNumber(item)) {\n list1.push(item);\n } else if (item instanceof Model) {\n list1.push(item);\n } else if (item.sequelize) {\n list1.push(item);\n } else if (typeof item === 'object') {\n list2.push(item);\n }\n }\n\n // associate targets in lists1\n await model[setAccessor](list1, { transaction, context });\n\n const list3 = [];\n for (const item of list2) {\n const pk = association.target.primaryKeyAttribute;\n\n const through = (<any>association).through ? (<any>association).through.model.name : null;\n\n const accessorOptions = {\n context,\n transaction,\n };\n\n const throughValue = item[through];\n\n if (throughValue) {\n accessorOptions['through'] = throughValue;\n }\n\n if (isUndefinedOrNull(item[pk])) {\n // create new record\n const instance = await model[createAccessor](item, accessorOptions);\n await updateAssociations(instance, item, {\n ...options,\n transaction,\n associationContext: association,\n updateAssociationValues: keys,\n });\n list3.push(instance);\n } else {\n // set & update record\n const instance = await association.target.findByPk<any>(item[pk], {\n transaction,\n });\n const addAccessor = association.accessors.add;\n\n await model[addAccessor](item[pk], accessorOptions);\n if (updateAssociationValues.includes(key)) {\n await instance.update(item, { ...options, transaction });\n }\n await updateAssociations(instance, item, {\n ...options,\n transaction,\n associationContext: association,\n updateAssociationValues: keys,\n });\n list3.push(instance);\n }\n }\n\n model.setDataValue(key, list1.concat(list3));\n if (!options.transaction) {\n await transaction.commit();\n }\n } catch (error) {\n await transaction.rollback();\n throw error;\n }\n}\n"]}
|
package/lib/update-guard.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-guard.js","sourceRoot":"","sources":["../src/update-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import lodash from 'lodash';\nimport { ModelCtor } from 'sequelize';\nimport { Model } from './model';\nimport { AssociationKeysToBeUpdate, BlackList, WhiteList } from './repository';\n\ntype UpdateValueItem = string | number | UpdateValues;\n\ntype UpdateValues = {\n [key: string]: UpdateValueItem | Array<UpdateValueItem>;\n};\n\ntype UpdateAction = 'create' | 'update';\nexport class UpdateGuard {\n model: ModelCtor<any>;\n action: UpdateAction;\n private associationKeysToBeUpdate: AssociationKeysToBeUpdate;\n private blackList: BlackList;\n private whiteList: WhiteList;\n\n setAction(action: UpdateAction) {\n this.action = action;\n }\n\n setModel(model: ModelCtor<any>) {\n this.model = model;\n }\n\n setAssociationKeysToBeUpdate(associationKeysToBeUpdate: AssociationKeysToBeUpdate) {\n if (this.action == 'create') {\n this.associationKeysToBeUpdate = Object.keys(this.model.associations);\n } else {\n this.associationKeysToBeUpdate = associationKeysToBeUpdate;\n }\n }\n\n setWhiteList(whiteList: WhiteList) {\n this.whiteList = whiteList;\n }\n\n setBlackList(blackList: BlackList) {\n this.blackList = blackList;\n }\n\n /**\n * Sanitize values by whitelist blacklist\n * @param values\n */\n sanitize(values: UpdateValues) {\n values = lodash.clone(values);\n\n if (!this.model) {\n throw new Error('please set model first');\n }\n\n const associations = this.model.associations;\n const associationsValues = lodash.pick(values, Object.keys(associations));\n\n // build params of association update guard\n const listOfAssociation = (list, association) => {\n if (list) {\n list = list\n .filter((whiteListKey) => whiteListKey.startsWith(`${association}.`))\n .map((whiteListKey) => whiteListKey.replace(`${association}.`, ''));\n\n if (list.length == 0) {\n return undefined;\n }\n\n return list;\n }\n\n return undefined;\n };\n\n // sanitize association values\n Object.keys(associationsValues).forEach((association) => {\n let associationValues = associationsValues[association];\n\n const filterAssociationToBeUpdate = (value) => {\n const associationKeysToBeUpdate = this.associationKeysToBeUpdate || [];\n\n if (associationKeysToBeUpdate.includes(association)) {\n return value;\n }\n\n const associationObj = associations[association];\n\n const associationKeyName =\n associationObj.associationType == 'BelongsTo' || associationObj.associationType == 'HasOne'\n ? (<any>associationObj).targetKey\n : associationObj.target.primaryKeyAttribute;\n\n if (value[associationKeyName]) {\n return lodash.pick(value, [associationKeyName, ...Object.keys(associationObj.target.associations)]);\n }\n\n return value;\n };\n\n const sanitizeValue = (value) => {\n const associationUpdateGuard = new UpdateGuard();\n associationUpdateGuard.setModel(associations[association].target);\n\n ['whiteList', 'blackList', 'associationKeysToBeUpdate'].forEach((optionKey) => {\n associationUpdateGuard[`set${lodash.upperFirst(optionKey)}`](listOfAssociation(this[optionKey], association));\n });\n\n return associationUpdateGuard.sanitize(filterAssociationToBeUpdate(value));\n };\n\n if (Array.isArray(associationValues)) {\n associationValues = associationValues.map((value) => {\n if (typeof value == 'string' || typeof value == 'number') {\n return value;\n } else {\n return sanitizeValue(value);\n }\n });\n } else if (typeof associationValues === 'object' && associationValues !== null) {\n associationValues = sanitizeValue(associationValues);\n }\n\n // set association values to sanitized value\n values[association] = associationValues;\n });\n\n if (values instanceof Model) {\n return values;\n }\n\n let valuesKeys = Object.keys(values || {});\n\n // handle whitelist\n if (this.whiteList) {\n valuesKeys = valuesKeys.filter((valueKey) => {\n return (\n this.whiteList.findIndex((whiteKey) => {\n const keyPaths = whiteKey.split('.');\n return keyPaths[0] === valueKey;\n }) !== -1\n );\n });\n }\n\n // handle blacklist\n if (this.blackList) {\n valuesKeys = valuesKeys.filter((valueKey) => !this.blackList.includes(valueKey));\n }\n\n const result = valuesKeys.reduce((obj, key) => {\n lodash.set(obj, key, values[key]);\n return obj;\n }, {});\n\n return result;\n }\n\n static fromOptions(model, options) {\n const guard = new UpdateGuard();\n guard.setModel(model);\n guard.setWhiteList(options.whitelist);\n guard.setBlackList(options.blacklist);\n guard.setAction(lodash.get(options, 'action', 'update'));\n guard.setAssociationKeysToBeUpdate(options.updateAssociationValues);\n return guard;\n }\n}\n"]}
|
package/tsconfig.build.json
DELETED