@nocobase/database 0.7.0-alpha.34 → 0.7.0-alpha.57
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 +101 -67
- package/lib/collection.js +339 -210
- package/lib/database.js +488 -304
- 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.js +114 -75
- 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.js +277 -33
- package/lib/fields/json-field.js +36 -16
- package/lib/fields/number-field.js +53 -26
- package/lib/fields/password-field.js +118 -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.js +36 -12
- package/lib/fields/virtual-field.js +24 -9
- package/lib/filter-parser.js +288 -179
- package/lib/index.js +210 -29
- package/lib/magic-attribute-model.js +123 -71
- package/lib/mock-database.js +68 -34
- package/lib/model-hook.js +101 -59
- package/lib/model.js +116 -81
- package/lib/operators/array.js +136 -96
- package/lib/operators/association.js +30 -14
- 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/lib/operators/notIn.js +27 -12
- package/lib/operators/string.js +56 -35
- package/lib/operators/utils.js +18 -10
- package/lib/options-parser.js +323 -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.js +263 -148
- package/lib/relation-repository/relation-repository.js +155 -97
- package/lib/relation-repository/single-relation-repository.js +138 -99
- package/lib/relation-repository/types.js +4 -2
- package/lib/repository.js +465 -291
- package/lib/transaction-decorator.js +80 -67
- package/lib/update-associations.js +525 -321
- package/lib/update-guard.js +160 -117
- package/package.json +3 -8
- package/src/database.ts +9 -3
- package/src/mock-database.ts +1 -1
- 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 -104
- package/esm/database.js +0 -305
- 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 -42
- package/esm/fields/index.js +0 -22
- 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/uuid-field.d.ts +0 -9
- package/esm/fields/uuid-field.js +0 -11
- package/esm/fields/uuid-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 -60
- 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.d.ts +0 -10
- package/esm/operators/ne.js +0 -12
- package/esm/operators/ne.js.map +0 -1
- package/esm/operators/notIn.d.ts +0 -10
- package/esm/operators/notIn.js +0 -12
- package/esm/operators/notIn.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 -95
- 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/uuid-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/notIn.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
package/lib/database.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyMixins, AsyncEmitter } from '@nocobase/utils';\nimport merge from 'deepmerge';\nimport { EventEmitter } from 'events';\nimport lodash from 'lodash';\nimport {\n ModelCtor,\n Op,\n Options,\n QueryInterfaceDropAllTablesOptions,\n QueryOptions,\n Sequelize,\n SyncOptions,\n Utils\n} from 'sequelize';\nimport { Collection, CollectionOptions, RepositoryType } from './collection';\nimport { ImporterReader, ImportFileExtension } from './collection-importer';\nimport * as FieldTypes from './fields';\nimport { Field, FieldContext, RelationField } from './fields';\nimport { Model } from './model';\nimport { ModelHook } from './model-hook';\nimport extendOperators from './operators';\nimport { RelationRepository } from './relation-repository/relation-repository';\nimport { Repository } from './repository';\n\nexport interface MergeOptions extends merge.Options {}\n\nexport interface PendingOptions {\n field: RelationField;\n model: ModelCtor<Model>;\n}\n\ninterface MapOf<T> {\n [key: string]: T;\n}\n\nexport interface IDatabaseOptions extends Options {\n tablePrefix?: string;\n}\n\nexport type DatabaseOptions = IDatabaseOptions | Sequelize;\n\ninterface RegisterOperatorsContext {\n db?: Database;\n path?: string;\n field?: Field;\n app?: any;\n}\n\nexport interface CleanOptions extends QueryInterfaceDropAllTablesOptions {\n drop?: boolean;\n}\n\ntype OperatorFunc = (value: any, ctx?: RegisterOperatorsContext) => any;\n\nexport class Database extends EventEmitter implements AsyncEmitter {\n sequelize: Sequelize;\n fieldTypes = new Map();\n options: IDatabaseOptions;\n models = new Map<string, ModelCtor<Model>>();\n repositories = new Map<string, RepositoryType>();\n operators = new Map();\n collections = new Map<string, Collection>();\n pendingFields = new Map<string, RelationField[]>();\n modelCollection = new Map<ModelCtor<any>, Collection>();\n\n modelHook: ModelHook;\n\n delayCollectionExtend = new Map<string, { collectionOptions: CollectionOptions; mergeOptions?: any }[]>();\n\n constructor(options: DatabaseOptions) {\n super();\n\n if (options instanceof Sequelize) {\n this.sequelize = options;\n } else {\n const opts = {\n sync: {\n alter: {\n drop: false,\n },\n force: false,\n },\n ...options,\n };\n this.sequelize = new Sequelize(opts);\n this.options = opts;\n }\n\n this.collections = new Map();\n this.modelHook = new ModelHook(this);\n\n this.on('afterDefineCollection', (collection: Collection) => {\n // after collection defined, call bind method on pending fields\n this.pendingFields.get(collection.name)?.forEach((field) => field.bind());\n this.delayCollectionExtend.get(collection.name)?.forEach((collectionExtend) => {\n collection.updateOptions(collectionExtend.collectionOptions, collectionExtend.mergeOptions);\n });\n });\n\n // register database field types\n for (const [name, field] of Object.entries(FieldTypes)) {\n if (['Field', 'RelationField'].includes(name)) {\n continue;\n }\n let key = name.replace(/Field$/g, '');\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n this.registerFieldTypes({\n [key]: field,\n });\n }\n\n this.initOperators();\n }\n\n /**\n * Add collection to database\n * @param options\n */\n collection<Attributes = any, CreateAttributes = Attributes>(\n options: CollectionOptions,\n ): Collection<Attributes, CreateAttributes> {\n this.emit('beforeDefineCollection', options);\n\n const collection = new Collection(options, {\n database: this,\n });\n\n this.collections.set(collection.name, collection);\n this.modelCollection.set(collection.model, collection);\n\n this.emit('afterDefineCollection', collection);\n\n return collection;\n }\n\n getTablePrefix() {\n return this.options.tablePrefix || '';\n }\n\n /**\n * get exists collection by its name\n * @param name\n */\n getCollection(name: string): Collection {\n return this.collections.get(name);\n }\n\n hasCollection(name: string): boolean {\n return this.collections.has(name);\n }\n\n removeCollection(name: string) {\n const collection = this.collections.get(name);\n this.emit('beforeRemoveCollection', collection);\n\n const result = this.collections.delete(name);\n\n if (result) {\n this.emit('afterRemoveCollection', collection);\n }\n }\n\n getModel<M extends Model>(name: string) {\n return this.getCollection(name).model as ModelCtor<M>;\n }\n\n getRepository<R extends Repository>(name: string): R;\n getRepository<R extends RelationRepository>(name: string, relationId: string | number): R;\n\n getRepository<R extends RelationRepository>(name: string, relationId?: string | number): Repository | R {\n if (relationId) {\n const [collection, relation] = name.split('.');\n return this.getRepository(collection)?.relation(relation)?.of(relationId) as R;\n }\n\n return this.getCollection(name)?.repository;\n }\n\n addPendingField(field: RelationField) {\n const associating = this.pendingFields;\n const items = this.pendingFields.get(field.target) || [];\n items.push(field);\n associating.set(field.target, items);\n }\n\n removePendingField(field: RelationField) {\n const items = this.pendingFields.get(field.target) || [];\n const index = items.indexOf(field);\n if (index !== -1) {\n delete items[index];\n this.pendingFields.set(field.target, items);\n }\n }\n\n registerFieldTypes(fieldTypes: MapOf<typeof Field>) {\n for (const [type, fieldType] of Object.entries(fieldTypes)) {\n this.fieldTypes.set(type, fieldType);\n }\n }\n\n registerModels(models: MapOf<ModelCtor<any>>) {\n for (const [type, schemaType] of Object.entries(models)) {\n this.models.set(type, schemaType);\n }\n }\n\n registerRepositories(repositories: MapOf<RepositoryType>) {\n for (const [type, schemaType] of Object.entries(repositories)) {\n this.repositories.set(type, schemaType);\n }\n }\n\n initOperators() {\n const operators = new Map();\n\n // Sequelize 内置\n for (const key in Op) {\n operators.set('$' + key, Op[key]);\n const val = Utils.underscoredIf(key, true);\n operators.set('$' + val, Op[key]);\n operators.set('$' + val.replace(/_/g, ''), Op[key]);\n }\n\n this.operators = operators;\n\n this.registerOperators({\n ...extendOperators,\n });\n }\n\n registerOperators(operators: MapOf<OperatorFunc>) {\n for (const [key, operator] of Object.entries(operators)) {\n this.operators.set(key, operator);\n }\n }\n\n buildField(options, context: FieldContext) {\n const { type } = options;\n const Field = this.fieldTypes.get(type);\n if (!Field) {\n throw Error(`unsupported field type ${type}`);\n }\n return new Field(options, context);\n }\n\n async sync(options?: SyncOptions) {\n const isMySQL = this.sequelize.getDialect() === 'mysql';\n if (isMySQL) {\n await this.sequelize.query('SET FOREIGN_KEY_CHECKS = 0', null);\n }\n const result = await this.sequelize.sync(options);\n if (isMySQL) {\n await this.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null);\n }\n return result;\n }\n\n async clean(options: CleanOptions) {\n const { drop, ...others } = options;\n if (drop) {\n await this.sequelize.getQueryInterface().dropAllTables(others);\n }\n }\n\n public isSqliteMemory() {\n return this.sequelize.getDialect() === 'sqlite' && lodash.get(this.options, 'storage') == ':memory:';\n }\n\n async auth(options: QueryOptions & { repeat?: number } = {}) {\n const { repeat = 10, ...others } = options;\n const delay = (ms) => new Promise((yea) => setTimeout(yea, ms));\n let count = 0;\n const authenticate = async () => {\n try {\n await this.sequelize.authenticate(others);\n console.log('Connection has been established successfully.');\n return true;\n } catch (error) {\n console.log('reconnecting...', count);\n if (count >= repeat) {\n throw error;\n }\n ++count;\n await delay(500);\n return await authenticate();\n }\n };\n\n return await authenticate();\n }\n\n async reconnect() {\n if (this.isSqliteMemory()) {\n return;\n }\n // @ts-ignore\n const ConnectionManager = this.sequelize.dialect.connectionManager.constructor;\n // @ts-ignore\n const connectionManager = new ConnectionManager(this.sequelize.dialect, this.sequelize);\n // @ts-ignore\n this.sequelize.dialect.connectionManager = connectionManager;\n // @ts-ignore\n this.sequelize.connectionManager = connectionManager;\n }\n\n closed() {\n // @ts-ignore\n return this.sequelize.connectionManager.pool._draining;\n }\n\n async close() {\n if (this.isSqliteMemory()) {\n return;\n }\n\n return this.sequelize.close();\n }\n\n on(event: string | symbol, listener: (...args: any[]) => void): this {\n const modelEventName = this.modelHook.isModelHook(event);\n\n if (modelEventName && !this.modelHook.hasBindEvent(modelEventName)) {\n this.sequelize.addHook(modelEventName, this.modelHook.sequelizeHookBuilder(modelEventName));\n\n this.modelHook.bindEvent(modelEventName);\n }\n\n return super.on(event, listener);\n }\n\n async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>> {\n const reader = new ImporterReader(options.directory, options.extensions);\n const modules = await reader.read();\n const result = new Map<string, Collection>();\n\n for (const module of modules) {\n if (module.extend) {\n const collectionName = module.collectionOptions.name;\n const existCollection = this.getCollection(collectionName);\n if (existCollection) {\n existCollection.updateOptions(module.collectionOptions, module.mergeOptions);\n } else {\n const existDelayExtends = this.delayCollectionExtend.get(collectionName) || [];\n\n this.delayCollectionExtend.set(collectionName, [...existDelayExtends, module]);\n }\n } else {\n const collection = this.collection(module);\n result.set(collection.name, collection);\n }\n }\n\n return result;\n }\n\n emitAsync: (event: string | symbol, ...args: any[]) => Promise<boolean>;\n}\n\nexport function extend(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions) {\n return {\n collectionOptions,\n mergeOptions,\n extend: true,\n };\n}\n\nexport const defineCollection = (collectionOptions: CollectionOptions) => {\n return collectionOptions;\n};\n\nexport const extendCollection = (collectionOptions: CollectionOptions, mergeOptions?: MergeOptions) => {\n return {\n collectionOptions,\n mergeOptions,\n extend: true,\n };\n};\n\napplyMixins(Database, [AsyncEmitter]);\n\nexport default Database;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array-field.js","sourceRoot":"","sources":["../../src/fields/array-field.ts"],"names":[],"mappings":";;;AAAA,mCAAwD;AACxD,yCAAsC;AAEtC,MAAa,UAAW,SAAQ,aAAK;IACnC,IAAI,QAAQ;QACV,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;YACvD,OAAO,qBAAS,CAAC,KAAK,CAAC;SACxB;QAED,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,KAAK;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SACxC;IACH,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AA3BD,gCA2BC","sourcesContent":["import { BaseColumnFieldOptions, Field } from './field';\nimport { DataTypes } from 'sequelize';\n\nexport class ArrayField extends Field {\n get dataType() {\n if (this.database.sequelize.getDialect() === 'postgres') {\n return DataTypes.JSONB;\n }\n\n return DataTypes.JSON;\n }\n\n sortValue(model) {\n const oldValue = model.get(this.options.name);\n\n if (oldValue) {\n const newValue = oldValue.sort();\n model.set(this.options.name, newValue);\n }\n }\n\n bind() {\n super.bind();\n this.on('beforeSave', this.sortValue.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeSave', this.sortValue.bind(this));\n }\n}\n\nexport interface ArrayFieldOptions extends BaseColumnFieldOptions {\n type: 'array';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-field.js","sourceRoot":"","sources":["../../src/fields/belongs-to-field.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAC9B,yCAAiF;AACjF,qDAA2E;AAE3E,MAAa,cAAe,SAAQ,8BAAa;IAG/C,IAAI,MAAM;QACR,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,MAAM,IAAI,iBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAEhC,uDAAuD;QACvD,qBAAqB;QACrB,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;SACd;QAED,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjD;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,kBACnD,EAAE,EAAE,IAAI,CAAC,IAAI,IACV,IAAA,aAAI,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EACjD,CAAC;QAEH,mBAAmB;QACnB,8CAA8C;QAE9C,wBAAwB;QACxB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;SAClD;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,aAAa;YACb,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;SAChD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,iCAAiC;QACjC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,uCAAuC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC;QACrE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SAC9C;QACD,iBAAiB;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,aAAa;QACb,UAAU,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;;AAjEH,wCAkEC;AAjEQ,mBAAI,GAAG,WAAW,CAAC","sourcesContent":["import { omit } from 'lodash';\nimport { BelongsToOptions as SequelizeBelongsToOptions, Utils } from 'sequelize';\nimport { BaseRelationFieldOptions, RelationField } from './relation-field';\n\nexport class BelongsToField extends RelationField {\n static type = 'belongsTo';\n\n get target() {\n const { target, name } = this.options;\n return target || Utils.pluralize(name);\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n\n // if target model not exists, add it to pending field,\n // it will bind later\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n\n if (collection.model.associations[this.name]) {\n delete collection.model.associations[this.name];\n }\n\n // define relation on sequelize model\n const association = collection.model.belongsTo(Target, {\n as: this.name,\n ...omit(this.options, ['name', 'type', 'target']),\n });\n\n // inverse relation\n // this.TargetModel.hasMany(collection.model);\n\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n\n if (!this.options.sourceKey) {\n // @ts-ignore\n this.options.sourceKey = association.sourceKey;\n }\n\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 如果外键没有显式的创建,关系表也无反向关联字段,删除关系时,外键也删除掉\n const tcoll = database.collections.get(this.target);\n const foreignKey = this.options.foreignKey;\n const field1 = collection.getField(foreignKey);\n const field2 = tcoll.findField((field) => {\n return field.type === 'hasMany' && field.foreignKey === foreignKey;\n });\n if (!field1 && !field2) {\n collection.model.removeAttribute(foreignKey);\n }\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n // @ts-ignore\n collection.model.refreshAttributes();\n }\n}\n\nexport interface BelongsToFieldOptions extends BaseRelationFieldOptions, SequelizeBelongsToOptions {\n type: 'belongsTo';\n target?: string;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-many-field.js","sourceRoot":"","sources":["../../src/fields/belongs-to-many-field.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAC9B,yCAAyF;AAEzF,qDAA+E;AAE/E,MAAa,kBAAmB,SAAQ,8BAAa;IACnD,IAAI,OAAO;QACT,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,OAAO;YACpB,iBAAK,CAAC,QAAQ,CACZ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;iBAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;iBACjC,IAAI,EAAE;iBACN,IAAI,CAAC,GAAG,CAAC,CACb,CACF,CAAC;IACJ,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,OAAmB,CAAC;QAExB,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;YACnC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;SAC3C;aAAM;YACL,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAC5B,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SACpE;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,kCACpD,IAAA,aAAI,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,KACjD,EAAE,EAAE,IAAI,CAAC,IAAI,EACb,OAAO,EAAE,OAAO,CAAC,KAAK,IACtB,CAAC;QAEH,wBAAwB;QACxB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;SAClD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;SAChD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;SAC9C;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SACrC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,iCAAiC;QACjC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,iBAAiB;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;CACF;AAhED,gDAgEC","sourcesContent":["import { omit } from 'lodash';\nimport { BelongsToManyOptions as SequelizeBelongsToManyOptions, Utils } from 'sequelize';\nimport { Collection } from '../collection';\nimport { MultipleRelationFieldOptions, RelationField } from './relation-field';\n\nexport class BelongsToManyField extends RelationField {\n get through() {\n return (\n this.options.through ||\n Utils.camelize(\n [this.context.collection.model.name, this.target]\n .map((name) => name.toLowerCase())\n .sort()\n .join('_'),\n )\n );\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n const through = this.through;\n\n let Through: Collection;\n\n if (database.hasCollection(through)) {\n Through = database.getCollection(through);\n } else {\n Through = database.collection({\n name: through,\n });\n Object.defineProperty(Through.model, 'isThrough', { value: true });\n }\n\n const association = collection.model.belongsToMany(Target, {\n ...omit(this.options, ['name', 'type', 'target']),\n as: this.name,\n through: Through.model,\n });\n\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n if (!this.options.sourceKey) {\n this.options.sourceKey = association.sourceKey;\n }\n if (!this.options.otherKey) {\n this.options.otherKey = association.otherKey;\n }\n if (!this.options.through) {\n this.options.through = this.through;\n }\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n }\n}\n\nexport interface BelongsToManyFieldOptions\n extends MultipleRelationFieldOptions,\n Omit<SequelizeBelongsToManyOptions, 'through'> {\n type: 'belongsToMany';\n through?: string;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boolean-field.js","sourceRoot":"","sources":["../../src/fields/boolean-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,YAAa,SAAQ,aAAK;IACrC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAJD,oCAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class BooleanField extends Field {\n get dataType() {\n return DataTypes.BOOLEAN;\n }\n}\n\nexport interface BooleanFieldOptions extends BaseColumnFieldOptions {\n type: 'boolean';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-field.js","sourceRoot":"","sources":["../../src/fields/context-field.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,yCAAsC;AAEtC,mCAAwD;AAExD,MAAa,YAAa,SAAQ,aAAK;IACrC,IAAI,QAAQ;QACV,MAAM,IAAI,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QACvD,OAAO,qBAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,qBAAS,CAAC,MAAM,CAAC;IAC3D,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,CAAO,KAAY,EAAE,OAAO,EAAE,EAAE;YAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YAChD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAA,CAAC;IACJ,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxC;IACH,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACzC;IACH,CAAC;CACF;AAhCD,oCAgCC","sourcesContent":["import lodash from 'lodash';\nimport { DataTypes } from 'sequelize';\nimport { Model } from '../model';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class ContextField extends Field {\n get dataType() {\n const type: string = this.options.dataType || 'string';\n return DataTypes[type.toUpperCase()] || DataTypes.STRING;\n }\n\n init() {\n const { name, dataIndex } = this.options;\n this.listener = async (model: Model, options) => {\n const { context } = options;\n model.set(name, lodash.get(context, dataIndex));\n model.changed(name, true);\n };\n }\n\n bind() {\n super.bind();\n const { createOnly } = this.options;\n this.on('beforeCreate', this.listener);\n if (!createOnly) {\n this.on('beforeUpdate', this.listener);\n }\n }\n\n unbind() {\n super.unbind();\n const { createOnly } = this.options;\n this.off('beforeCreate', this.listener);\n if (!createOnly) {\n this.off('beforeUpdate', this.listener);\n }\n }\n}\n\nexport interface ContextFieldOptions extends BaseColumnFieldOptions {\n type: 'context';\n dataIndex: string;\n dataType?: string;\n createOnly?: boolean;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-field.js","sourceRoot":"","sources":["../../src/fields/date-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,SAAU,SAAQ,aAAK;IAClC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAJD,8BAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class DateField extends Field {\n get dataType() {\n return DataTypes.DATE;\n }\n}\n\nexport interface DateFieldOptions extends BaseColumnFieldOptions {\n type: 'date';\n}\n"]}
|
package/lib/fields/field.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/fields/field.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAuB;AAqBvB,MAAsB,KAAK;IAmBzB,YAAY,OAAa,EAAE,OAAsB;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAlBD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAUD,OAAO;IACD,IAAI,CAAC,WAAwB;;YACjC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,iCACrB,WAAW,KACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE;oBACL,IAAI,EAAE,KAAK;iBACZ,IACD,CAAC;QACL,CAAC;KAAA;IAED,IAAI;QACF,OAAO;IACT,CAAC;IAED,EAAE,CAAC,SAAiB,EAAE,QAAkC;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,SAAiB,EAAE,QAAkC;QACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,GAAQ;QACZ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1C,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpD,aAAa;QACb,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1C,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,WAAW;QACT,MAAM,IAAI,GAAG,gBAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,QAAQ,CAAC;IAC3D,CAAC;CACF;AAnFD,sBAmFC","sourcesContent":["import _ from 'lodash';\nimport { DataType, ModelAttributeColumnOptions, ModelIndexesOptions, SyncOptions } from 'sequelize';\nimport { Collection } from '../collection';\nimport { Database } from '../database';\n\nexport interface FieldContext {\n database: Database;\n collection: Collection;\n}\n\nexport interface BaseFieldOptions {\n name?: string;\n hidden?: boolean;\n [key: string]: any;\n}\n\nexport interface BaseColumnFieldOptions extends BaseFieldOptions, Omit<ModelAttributeColumnOptions, 'type'> {\n dataType?: DataType;\n index?: boolean | ModelIndexesOptions;\n}\n\nexport abstract class Field {\n options: any;\n context: FieldContext;\n database: Database;\n collection: Collection;\n [key: string]: any;\n\n get name() {\n return this.options.name;\n }\n\n get type() {\n return this.options.type;\n }\n\n get dataType() {\n return this.options.dataType;\n }\n\n constructor(options?: any, context?: FieldContext) {\n this.context = context;\n this.database = context.database;\n this.collection = context.collection;\n this.options = options || {};\n this.init();\n }\n\n // TODO\n async sync(syncOptions: SyncOptions) {\n await this.collection.sync({\n ...syncOptions,\n force: false,\n alter: {\n drop: false,\n },\n });\n }\n\n init() {\n // code\n }\n\n on(eventName: string, listener: (...args: any[]) => void) {\n this.database.on(`${this.collection.name}.${eventName}`, listener);\n return this;\n }\n\n off(eventName: string, listener: (...args: any[]) => void) {\n this.database.off(`${this.collection.name}.${eventName}`, listener);\n return this;\n }\n\n get(name: string) {\n return this.options[name];\n }\n\n merge(obj: any) {\n Object.assign(this.options, obj);\n }\n\n bind() {\n const { model } = this.context.collection;\n model.rawAttributes[this.name] = this.toSequelize();\n // @ts-ignore\n model.refreshAttributes();\n }\n\n unbind() {\n const { model } = this.context.collection;\n model.removeAttribute(this.name);\n }\n\n toSequelize(): any {\n const opts = _.omit(this.options, ['name']);\n if (this.dataType) {\n Object.assign(opts, { type: this.dataType });\n }\n return opts;\n }\n\n isSqlite() {\n return this.database.sequelize.getDialect() === 'sqlite';\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"has-inverse-field.js","sourceRoot":"","sources":["../../src/fields/has-inverse-field.ts"],"names":[],"mappings":"","sourcesContent":["import { Field } from './field';\n\nexport interface HasInverseField {\n inverseField: () => Field;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"has-many-field.js","sourceRoot":"","sources":["../../src/fields/has-many-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { omit } from 'lodash';\nimport {\n AssociationScope,\n DataType,\n ForeignKeyOptions,\n HasManyOptions,\n HasManyOptions as SequelizeHasManyOptions,\n Utils,\n} from 'sequelize';\n\nimport { BaseRelationFieldOptions, MultipleRelationFieldOptions, RelationField } from './relation-field';\n\nexport interface HasManyFieldOptions extends HasManyOptions {\n /**\n * The name of the field to use as the key for the association in the source table. Defaults to the primary\n * key of the source table\n */\n sourceKey?: string;\n\n /**\n * A string or a data type to represent the identifier in the table\n */\n keyType?: DataType;\n\n scope?: AssociationScope;\n\n /**\n * The alias of this model, in singular form. See also the `name` option passed to `sequelize.define`. If\n * you create multiple associations between the same tables, you should provide an alias to be able to\n * distinguish between them. If you provide an alias when creating the assocition, you should provide the\n * same alias when eager loading and when getting associated models. Defaults to the singularized name of\n * target\n */\n as?: string | { singular: string; plural: string };\n\n /**\n * The name of the foreign key in the target table or an object representing the type definition for the\n * foreign column (see `Sequelize.define` for syntax). When using an object, you can add a `name` property\n * to set the name of the column. Defaults to the name of source + primary key of source\n */\n foreignKey?: string | ForeignKeyOptions;\n\n /**\n * What happens when delete occurs.\n *\n * Cascade if this is a n:m, and set null if it is a 1:m\n *\n * @default 'SET NULL' or 'CASCADE'\n */\n onDelete?: string;\n\n /**\n * What happens when update occurs\n *\n * @default 'CASCADE'\n */\n onUpdate?: string;\n\n /**\n * Should on update and on delete constraints be enabled on the foreign key.\n */\n constraints?: boolean;\n foreignKeyConstraint?: boolean;\n\n // scope?: AssociationScope;\n\n /**\n * If `false` the applicable hooks will not be called.\n * The default value depends on the context.\n */\n hooks?: boolean;\n}\n\nexport class HasManyField extends RelationField {\n get foreignKey() {\n if (this.options.foreignKey) {\n return this.options.foreignKey;\n }\n const { model } = this.context.collection;\n return Utils.camelize([model.options.name.singular, this.sourceKey || model.primaryKeyAttribute].join('_'));\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n\n if (collection.model.associations[this.name]) {\n delete collection.model.associations[this.name];\n }\n\n const association = collection.model.hasMany(Target, {\n as: this.name,\n foreignKey: this.foreignKey,\n ...omit(this.options, ['name', 'type', 'target']),\n });\n\n // inverse relation\n // this.TargetModel.belongsTo(collection.model);\n\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n if (!this.options.sourceKey) {\n // @ts-ignore\n this.options.sourceKey = association.sourceKey;\n }\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉\n const tcoll = database.collections.get(this.target);\n const foreignKey = this.options.foreignKey;\n const field = tcoll.findField((field) => {\n if (field.name === foreignKey) {\n return true;\n }\n return field.type === 'belongsTo' && field.foreignKey === foreignKey;\n });\n if (!field) {\n tcoll.model.removeAttribute(foreignKey);\n }\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n // @ts-ignore\n collection.model.refreshAttributes();\n }\n}\n\nexport interface HasManyFieldOptions extends MultipleRelationFieldOptions, SequelizeHasManyOptions {\n type: 'hasMany';\n target?: string;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"has-one-field.js","sourceRoot":"","sources":["../../src/fields/has-one-field.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAC9B,yCAOmB;AACnB,qDAA2E;AA+D3E,MAAa,WAAY,SAAQ,8BAAa;IAC5C,IAAI,MAAM;QACR,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,MAAM,IAAI,iBAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,UAAU;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SAChC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1C,OAAO,iBAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;YACX,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;SACd;QACD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,kBAChD,EAAE,EAAE,IAAI,CAAC,IAAI,EACb,UAAU,EAAE,IAAI,CAAC,UAAU,IACxB,IAAA,aAAI,EAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EACjD,CAAC;QACH,wBAAwB;QACxB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;SAClD;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC3B,aAAa;YACb,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;SAChD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,iCAAiC;QACjC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,iCAAiC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC7B,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;SACzC;QACD,iBAAiB;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,aAAa;QACb,UAAU,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;CACF;AA3DD,kCA2DC","sourcesContent":["import { omit } from 'lodash';\nimport {\n AssociationScope,\n DataType,\n ForeignKeyOptions,\n HasOneOptions,\n HasOneOptions as SequelizeHasOneOptions,\n Utils\n} from 'sequelize';\nimport { BaseRelationFieldOptions, RelationField } from './relation-field';\n\nexport interface HasOneFieldOptions extends HasOneOptions {\n /**\n * The name of the field to use as the key for the association in the source table. Defaults to the primary\n * key of the source table\n */\n sourceKey?: string;\n\n /**\n * A string or a data type to represent the identifier in the table\n */\n keyType?: DataType;\n\n scope?: AssociationScope;\n\n /**\n * The alias of this model, in singular form. See also the `name` option passed to `sequelize.define`. If\n * you create multiple associations between the same tables, you should provide an alias to be able to\n * distinguish between them. If you provide an alias when creating the assocition, you should provide the\n * same alias when eager loading and when getting associated models. Defaults to the singularized name of\n * target\n */\n as?: string | { singular: string; plural: string };\n\n /**\n * The name of the foreign key in the target table or an object representing the type definition for the\n * foreign column (see `Sequelize.define` for syntax). When using an object, you can add a `name` property\n * to set the name of the column. Defaults to the name of source + primary key of source\n */\n foreignKey?: string | ForeignKeyOptions;\n\n /**\n * What happens when delete occurs.\n *\n * Cascade if this is a n:m, and set null if it is a 1:m\n *\n * @default 'SET NULL' or 'CASCADE'\n */\n onDelete?: string;\n\n /**\n * What happens when update occurs\n *\n * @default 'CASCADE'\n */\n onUpdate?: string;\n\n /**\n * Should on update and on delete constraints be enabled on the foreign key.\n */\n constraints?: boolean;\n foreignKeyConstraint?: boolean;\n\n // scope?: AssociationScope;\n\n /**\n * If `false` the applicable hooks will not be called.\n * The default value depends on the context.\n */\n hooks?: boolean;\n}\n\nexport class HasOneField extends RelationField {\n get target() {\n const { target, name } = this.options;\n return target || Utils.pluralize(name);\n }\n\n get foreignKey() {\n if (this.options.foreignKey) {\n return this.options.foreignKey;\n }\n const { model } = this.context.collection;\n return Utils.camelize([model.options.name.singular, model.primaryKeyAttribute].join('_'));\n }\n\n bind() {\n const { database, collection } = this.context;\n const Target = this.TargetModel;\n if (!Target) {\n database.addPendingField(this);\n return false;\n }\n const association = collection.model.hasOne(Target, {\n as: this.name,\n foreignKey: this.foreignKey,\n ...omit(this.options, ['name', 'type', 'target']),\n });\n // 建立关系之后从 pending 列表中删除\n database.removePendingField(this);\n if (!this.options.foreignKey) {\n this.options.foreignKey = association.foreignKey;\n }\n if (!this.options.sourceKey) {\n // @ts-ignore\n this.options.sourceKey = association.sourceKey;\n }\n return true;\n }\n\n unbind() {\n const { database, collection } = this.context;\n // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段\n database.removePendingField(this);\n // 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉\n const tcoll = database.collections.get(this.target);\n const foreignKey = this.options.foreignKey;\n const field = tcoll.findField((field) => {\n if (field.name === foreignKey) {\n return true;\n }\n return field.type === 'belongsTo' && field.foreignKey === foreignKey;\n });\n if (!field) {\n tcoll.model.removeAttribute(foreignKey);\n }\n // 删掉 model 的关联字段\n delete collection.model.associations[this.name];\n // @ts-ignore\n collection.model.refreshAttributes();\n }\n}\n\nexport interface HasOneFieldOptions extends BaseRelationFieldOptions, SequelizeHasOneOptions {\n type: 'hasOne';\n}\n"]}
|
package/lib/fields/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AA2BA,gDAA8B;AAC9B,qDAAmC;AACnC,0DAAwC;AACxC,kDAAgC;AAChC,kDAAgC;AAChC,+CAA6B;AAC7B,0CAAwB;AACxB,mDAAiC;AACjC,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,mDAAiC;AACjC,gDAA8B;AAC9B,mDAAiC;AACjC,+CAA6B;AAC7B,iDAA+B;AAC/B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,+CAA6B;AAC7B,kDAAgC","sourcesContent":["import { ArrayFieldOptions } from './array-field';\nimport { BelongsToFieldOptions } from './belongs-to-field';\nimport { BelongsToManyFieldOptions } from './belongs-to-many-field';\nimport { BooleanFieldOptions } from './boolean-field';\nimport { ContextFieldOptions } from './context-field';\nimport { DateFieldOptions } from './date-field';\nimport { BaseFieldOptions } from './field';\nimport { HasManyFieldOptions } from './has-many-field';\nimport { HasOneFieldOptions } from './has-one-field';\nimport { JsonbFieldOptions, JsonFieldOptions } from './json-field';\nimport {\n DecimalFieldOptions,\n DoubleFieldOptions,\n FloatFieldOptions,\n IntegerFieldOptions,\n RealFieldOptions\n} from './number-field';\nimport { PasswordFieldOptions } from './password-field';\nimport { RadioFieldOptions } from './radio-field';\nimport { SortFieldOptions } from './sort-field';\nimport { StringFieldOptions } from './string-field';\nimport { TextFieldOptions } from './text-field';\nimport { TimeFieldOptions } from './time-field';\nimport { UidFieldOptions } from './uid-field';\nimport { UUIDFieldOptions } from './uuid-field';\nimport { VirtualFieldOptions } from './virtual-field';\n\nexport * from './array-field';\nexport * from './belongs-to-field';\nexport * from './belongs-to-many-field';\nexport * from './boolean-field';\nexport * from './context-field';\nexport * from './date-field';\nexport * from './field';\nexport * from './has-many-field';\nexport * from './has-one-field';\nexport * from './json-field';\nexport * from './number-field';\nexport * from './password-field';\nexport * from './radio-field';\nexport * from './relation-field';\nexport * from './sort-field';\nexport * from './string-field';\nexport * from './text-field';\nexport * from './time-field';\nexport * from './uid-field';\nexport * from './uuid-field';\nexport * from './virtual-field';\n\nexport type FieldOptions =\n | BaseFieldOptions\n | StringFieldOptions\n | IntegerFieldOptions\n | FloatFieldOptions\n | DecimalFieldOptions\n | DoubleFieldOptions\n | RealFieldOptions\n | JsonFieldOptions\n | JsonbFieldOptions\n | BooleanFieldOptions\n | RadioFieldOptions\n | SortFieldOptions\n | TextFieldOptions\n | VirtualFieldOptions\n | ArrayFieldOptions\n | TimeFieldOptions\n | DateFieldOptions\n | UidFieldOptions\n | UUIDFieldOptions\n | PasswordFieldOptions\n | ContextFieldOptions\n | BelongsToFieldOptions\n | HasOneFieldOptions\n | HasManyFieldOptions\n | BelongsToManyFieldOptions;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-field.js","sourceRoot":"","sources":["../../src/fields/json-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,SAAU,SAAQ,aAAK;IAClC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAJD,8BAIC;AAMD,MAAa,UAAW,SAAQ,aAAK;IACnC,IAAI,QAAQ;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC7D,IAAI,OAAO,KAAK,UAAU,EAAE;YAC1B,OAAO,qBAAS,CAAC,KAAK,CAAC;SACxB;QACD,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AARD,gCAQC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class JsonField extends Field {\n get dataType() {\n return DataTypes.JSON;\n }\n}\n\nexport interface JsonFieldOptions extends BaseColumnFieldOptions {\n type: 'json';\n}\n\nexport class JsonbField extends Field {\n get dataType() {\n const dialect = this.context.database.sequelize.getDialect();\n if (dialect === 'postgres') {\n return DataTypes.JSONB;\n }\n return DataTypes.JSON;\n }\n}\nexport interface JsonbFieldOptions extends BaseColumnFieldOptions {\n type: 'jsonb';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number-field.js","sourceRoot":"","sources":["../../src/fields/number-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,YAAa,SAAQ,aAAK;IACrC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAJD,oCAIC;AAMD,MAAa,UAAW,SAAQ,aAAK;IACnC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,KAAK,CAAC;IACzB,CAAC;CACF;AAJD,gCAIC;AAMD,MAAa,WAAY,SAAQ,aAAK;IACpC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF;AAJD,kCAIC;AAMD,MAAa,SAAU,SAAQ,aAAK;IAClC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAJD,8BAIC;AAMD,MAAa,YAAa,SAAQ,aAAK;IACrC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAJD,oCAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class IntegerField extends Field {\n get dataType() {\n return DataTypes.INTEGER;\n }\n}\n\nexport interface IntegerFieldOptions extends BaseColumnFieldOptions {\n type: 'integer';\n}\n\nexport class FloatField extends Field {\n get dataType() {\n return DataTypes.FLOAT;\n }\n}\n\nexport interface FloatFieldOptions extends BaseColumnFieldOptions {\n type: 'float';\n}\n\nexport class DoubleField extends Field {\n get dataType() {\n return DataTypes.DOUBLE;\n }\n}\n\nexport interface DoubleFieldOptions extends BaseColumnFieldOptions {\n type: 'double';\n}\n\nexport class RealField extends Field {\n get dataType() {\n return DataTypes.REAL;\n }\n}\n\nexport interface RealFieldOptions extends BaseColumnFieldOptions {\n type: 'real';\n}\n\nexport class DecimalField extends Field {\n get dataType() {\n return DataTypes.DECIMAL;\n }\n}\n\nexport interface DecimalFieldOptions extends BaseColumnFieldOptions {\n type: 'decimal';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password-field.js","sourceRoot":"","sources":["../../src/fields/password-field.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'crypto';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport interface PasswordFieldOptions extends BaseColumnFieldOptions {\n type: 'password';\n /**\n * @default 64\n */\n length?: number;\n /**\n * @default 8\n */\n randomBytesSize?: number;\n}\n\nexport class PasswordField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n\n async verify(password: string, hash: string) {\n const { length = 64, randomBytesSize = 8 } = this.options;\n return new Promise((resolve, reject) => {\n const salt = hash.substring(0, randomBytesSize * 2);\n const key = hash.substring(randomBytesSize * 2);\n crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {\n if (err) reject(err);\n resolve(key == derivedKey.toString('hex'));\n });\n });\n }\n\n async hash(password: string) {\n const { length = 64, randomBytesSize = 8 } = this.options;\n return new Promise((resolve, reject) => {\n const salt = crypto.randomBytes(randomBytesSize).toString('hex');\n crypto.scrypt(password, salt, length / 2 - randomBytesSize, (err, derivedKey) => {\n if (err) reject(err);\n resolve(salt + derivedKey.toString('hex'));\n });\n });\n }\n\n init() {\n const { name } = this.options;\n this.listener = async (model) => {\n if (!model.changed(name as any)) {\n return;\n }\n const value = model.get(name) as string;\n if (value) {\n const hash = await this.hash(value);\n model.set(name, hash);\n } else {\n model.set(name, null);\n }\n };\n }\n\n bind() {\n super.bind();\n this.on('beforeCreate', this.listener);\n this.on('beforeUpdate', this.listener);\n }\n\n unbind() {\n super.unbind();\n this.off('beforeCreate', this.listener);\n this.off('beforeUpdate', this.listener);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radio-field.js","sourceRoot":"","sources":["../../src/fields/radio-field.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAsC;AACtC,mCAAwD;AAMxD;;GAEG;AACH,MAAa,UAAW,SAAQ,aAAK;IACnC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,CAAO,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAW,CAAC,EAAE;gBAC/B,OAAO;aACR;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAY,CAAC;YACzC,IAAI,KAAK,EAAE;gBACT,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAChC,MAAM,CAAC,CAAC,MAAM,CACZ,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EACjB;oBACE,KAAK,EAAE;wBACL,CAAC,IAAI,CAAC,EAAE,IAAI;qBACb;oBACD,WAAW;oBACX,KAAK,EAAE,KAAK;iBACb,CACF,CAAC;aACH;QACH,CAAC,CAAA,CAAC;IACJ,CAAC;IAED,IAAI;QACF,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;CACF;AAvCD,gCAuCC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport interface RadioFieldOptions extends BaseColumnFieldOptions {\n type: 'radio';\n}\n\n/**\n * 暂时只支持全局,不支持批量\n */\nexport class RadioField extends Field {\n get dataType() {\n return DataTypes.BOOLEAN;\n }\n\n init() {\n const { name } = this.options;\n this.listener = async (model, { transaction }) => {\n if (!model.changed(name as any)) {\n return;\n }\n const value = model.get(name) as boolean;\n if (value) {\n const M = this.collection.model;\n await M.update(\n { [name]: false },\n {\n where: {\n [name]: true,\n },\n transaction,\n hooks: false,\n },\n );\n }\n };\n }\n\n bind() {\n super.bind();\n this.on('beforeCreate', this.listener.bind(this));\n this.on('beforeUpdate', this.listener.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeCreate', this.listener.bind(this));\n this.off('beforeUpdate', this.listener.bind(this));\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"relation-field.js","sourceRoot":"","sources":["../../src/fields/relation-field.ts"],"names":[],"mappings":";;;AAAA,mCAAkD;AAQlD,MAAsB,aAAc,SAAQ,aAAK;IAC/C;;OAEG;IACH,IAAI,MAAM;QACR,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC;IAC7E,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACxE,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF;AA5BD,sCA4BC","sourcesContent":["import { BaseFieldOptions, Field } from './field';\n\nexport interface BaseRelationFieldOptions extends BaseFieldOptions {}\n\nexport interface MultipleRelationFieldOptions extends BaseRelationFieldOptions {\n sortBy?: string | string[];\n}\n\nexport abstract class RelationField extends Field {\n /**\n * target relation name\n */\n get target() {\n const { target, name } = this.options;\n return target || name;\n }\n\n get foreignKey() {\n return this.options.foreignKey;\n }\n\n get sourceKey() {\n return this.options.sourceKey || this.collection.model.primaryKeyAttribute;\n }\n\n get targetKey() {\n return this.options.targetKey || this.TargetModel.primaryKeyAttribute;\n }\n\n /**\n * get target model from database by it's name\n * @constructor\n */\n get TargetModel() {\n return this.context.database.sequelize.models[this.target];\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sort-field.js","sourceRoot":"","sources":["../../src/fields/sort-field.ts"],"names":[],"mappings":"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","sourcesContent":["import { Mutex } from 'async-mutex';\nimport { isNumber } from 'lodash';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nconst sortFieldMutex = new Mutex();\n\nexport class SortField extends Field {\n get dataType() {\n return DataTypes.INTEGER;\n }\n\n async setSortValue(instance, options) {\n const { name, scopeKey } = this.options;\n const { model } = this.context.collection;\n\n if (isNumber(instance.get(name)) && instance._previousDataValues[scopeKey] == instance[scopeKey]) {\n return;\n }\n\n const where = {};\n\n if (scopeKey) {\n const value = instance.get(scopeKey);\n if (value !== undefined && value !== null) {\n where[scopeKey] = value;\n }\n }\n\n await sortFieldMutex.runExclusive(async () => {\n const max = await model.max<number, any>(name, { ...options, where });\n const newValue = (max || 0) + 1;\n instance.set(name, newValue);\n });\n }\n\n async onScopeChange(instance, options) {\n const { scopeKey } = this.options;\n if (scopeKey && !instance.isNewRecord && instance._previousDataValues[scopeKey] != instance[scopeKey]) {\n await this.setSortValue(instance, options);\n }\n }\n\n async initRecordsSortValue({ transaction }) {\n const totalCount = await this.collection.repository.count({\n transaction,\n });\n const emptyCount = await this.collection.repository.count({\n filter: {\n [this.name]: null,\n },\n transaction,\n });\n\n if (emptyCount === totalCount && emptyCount > 0) {\n const records = await this.collection.repository.find({\n order: [this.collection.model.primaryKeyAttribute],\n transaction,\n });\n\n let start = 1;\n for (const record of records) {\n await record.update(\n {\n sort: start,\n },\n {\n transaction,\n silent: true,\n },\n );\n\n start += 1;\n }\n }\n }\n\n bind() {\n super.bind();\n this.on('afterSync', this.initRecordsSortValue.bind(this));\n this.on('beforeUpdate', this.onScopeChange.bind(this));\n this.on('beforeCreate', this.setSortValue.bind(this));\n }\n\n unbind() {\n super.unbind();\n this.off('beforeUpdate', this.onScopeChange.bind(this));\n this.off('beforeCreate', this.setSortValue.bind(this));\n this.off('afterSync', this.initRecordsSortValue.bind(this));\n }\n}\n\nexport interface SortFieldOptions extends BaseColumnFieldOptions {\n type: 'sort';\n scopeKey?: string;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"string-field.js","sourceRoot":"","sources":["../../src/fields/string-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,WAAY,SAAQ,aAAK;IACpC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF;AAJD,kCAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class StringField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n}\n\nexport interface StringFieldOptions extends BaseColumnFieldOptions {\n type: 'string';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text-field.js","sourceRoot":"","sources":["../../src/fields/text-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,SAAU,SAAQ,aAAK;IAClC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAJD,8BAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class TextField extends Field {\n get dataType() {\n return DataTypes.TEXT;\n }\n}\n\nexport interface TextFieldOptions extends BaseColumnFieldOptions {\n type: 'text';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time-field.js","sourceRoot":"","sources":["../../src/fields/time-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,SAAU,SAAQ,aAAK;IAClC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAJD,8BAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class TimeField extends Field {\n get dataType() {\n return DataTypes.TIME;\n }\n}\n\nexport interface TimeFieldOptions extends BaseColumnFieldOptions {\n type: 'time';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uid-field.js","sourceRoot":"","sources":["../../src/fields/uid-field.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAsC;AACtC,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,QAAS,SAAQ,aAAK;IACjC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1C,KAAK,CAAC,YAAY,CAAC,CAAO,QAAQ,EAAE,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,IAAA,WAAG,GAAE,EAAE,CAAC,CAAC;aACzC;QACH,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;CACF;AAdD,4BAcC","sourcesContent":["import { uid } from '@nocobase/utils';\nimport { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class UidField extends Field {\n get dataType() {\n return DataTypes.STRING;\n }\n\n init() {\n const { name, prefix = '' } = this.options;\n const { model } = this.context.collection;\n model.beforeCreate(async (instance) => {\n if (!instance.get(name)) {\n instance.set(name, `${prefix}${uid()}`);\n }\n });\n }\n}\n\nexport interface UidFieldOptions extends BaseColumnFieldOptions {\n type: 'uid';\n prefix?: string;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uuid-field.js","sourceRoot":"","sources":["../../src/fields/uuid-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAsE;AAEtE,MAAa,SAAU,SAAQ,aAAK;IAClC,YAAY,OAAa,EAAE,OAAsB;QAC/C,KAAK,iBAED,YAAY,EAAE,qBAAS,CAAC,MAAM,IAC3B,OAAO,GAEZ,OAAO,CACR,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAbD,8BAaC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field, FieldContext } from './field';\n\nexport class UuidField extends Field {\n constructor(options?: any, context?: FieldContext) {\n super(\n {\n defaultValue: DataTypes.UUIDV4,\n ...options,\n },\n context,\n );\n }\n get dataType() {\n return DataTypes.UUID;\n }\n}\n\nexport interface UUIDFieldOptions extends BaseColumnFieldOptions {\n type: 'uuid';\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-field.js","sourceRoot":"","sources":["../../src/fields/virtual-field.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,mCAAwD;AAExD,MAAa,YAAa,SAAQ,aAAK;IACrC,IAAI,QAAQ;QACV,OAAO,qBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAJD,oCAIC","sourcesContent":["import { DataTypes } from 'sequelize';\nimport { BaseColumnFieldOptions, Field } from './field';\n\nexport class VirtualField extends Field {\n get dataType() {\n return DataTypes.VIRTUAL;\n }\n}\n\nexport interface VirtualFieldOptions extends BaseColumnFieldOptions {\n type: 'virtual';\n}\n"]}
|
package/lib/filter-parser.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-parser.js","sourceRoot":"","sources":["../src/filter-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { flatten, unflatten } from 'flat';\nimport { default as lodash, default as _ } from 'lodash';\nimport { ModelCtor } from 'sequelize';\nimport { Collection } from './collection';\nimport { Database } from './database';\nimport { Model } from './model';\n\nconst debug = require('debug')('noco-database');\n\ntype FilterType = any;\n\ninterface FilterParserContext {\n collection: Collection;\n app?: any;\n}\n\nexport default class FilterParser {\n collection: Collection;\n database: Database;\n model: ModelCtor<Model>;\n filter: FilterType;\n context: FilterParserContext;\n\n constructor(filter: FilterType, context: FilterParserContext) {\n const { collection } = context;\n this.collection = collection;\n this.context = context;\n this.model = collection.model;\n this.filter = this.prepareFilter(filter);\n this.database = collection.context.database;\n }\n\n prepareFilter(filter: FilterType) {\n if (lodash.isPlainObject(filter)) {\n const renamedKey = {};\n\n for (const key of Object.keys(filter)) {\n if (key.endsWith('.$exists') || key.endsWith('.$notExists')) {\n const keyArr = key.split('.');\n if (keyArr[keyArr.length - 2] == 'id') {\n continue;\n }\n\n keyArr.splice(keyArr.length - 1, 0, 'id');\n renamedKey[key] = keyArr.join('.');\n }\n }\n\n for (const [oldKey, newKey] of Object.entries(renamedKey)) {\n // @ts-ignore\n filter[newKey] = filter[oldKey];\n delete filter[oldKey];\n }\n }\n\n return filter;\n }\n\n toSequelizeParams() {\n debug('filter %o', this.filter);\n\n if (!this.filter) {\n return {};\n }\n\n const filter = this.filter;\n\n const model = this.model;\n\n // supported operators\n const operators = this.database.operators;\n\n const originalFiler = lodash.cloneDeep(filter || {});\n\n const flattenedFilter = flatten(filter || {});\n\n debug('flattened filter %o', flattenedFilter);\n\n const include = {};\n const where = {};\n const filter2 = lodash.cloneDeep(flattenedFilter);\n\n let skipPrefix = null;\n const associations = model.associations;\n\n debug('associations %O', associations);\n\n for (let [key, value] of Object.entries(flattenedFilter)) {\n // 处理 filter 条件\n if (skipPrefix && key.startsWith(skipPrefix)) {\n continue;\n }\n\n debug('handle filter key \"%s: \"%s\"', key, value);\n let keys = key.split('.');\n\n // paths ?\n const paths = [];\n\n // origins ?\n const origins = [];\n\n while (keys.length) {\n debug('keys: %o, paths: %o, origins: %o', keys, paths, origins);\n\n // move key from keys to origins\n const firstKey = keys.shift();\n origins.push(firstKey);\n\n debug('origins: %o', origins);\n\n if (firstKey.startsWith('$')) {\n if (operators.has(firstKey)) {\n debug('%s is operator', firstKey);\n // if firstKey is operator\n const opKey = operators.get(firstKey);\n debug('operator key %s, operator: %o', firstKey, opKey);\n\n // 默认操作符\n if (typeof opKey === 'symbol') {\n paths.push(opKey);\n continue;\n } else if (typeof opKey === 'function') {\n skipPrefix = origins.join('.');\n\n const queryValue = lodash.get(unflatten(originalFiler), skipPrefix);\n\n value = opKey(queryValue, {\n app: this.context.app,\n db: this.database,\n path: skipPrefix,\n fieldName: this.getFieldNameFromQueryPath(skipPrefix),\n model: this.model,\n });\n break;\n }\n } else {\n paths.push(firstKey);\n continue;\n }\n }\n\n // firstKey is number\n if (!lodash.isNaN(parseInt(firstKey))) {\n paths.push(firstKey);\n continue;\n }\n\n // firstKey is not association\n if (!associations[firstKey]) {\n paths.push(firstKey);\n continue;\n }\n\n const associationKeys = [];\n\n associationKeys.push(firstKey);\n\n debug('associationKeys %o', associationKeys);\n\n // set sequelize include option\n _.set(include, firstKey, {\n association: firstKey,\n attributes: [], // out put empty fields by default\n });\n\n // association target model\n let target = associations[firstKey].target;\n debug('association target %o', target);\n\n while (target) {\n const attr = keys.shift();\n origins.push(attr);\n // if it is target model attribute\n if (target.rawAttributes[attr]) {\n associationKeys.push(attr);\n target = null;\n } else if (target.associations[attr]) {\n // if it is target model association (nested association filter)\n associationKeys.push(attr);\n const assoc = [];\n associationKeys.forEach((associationKey, index) => {\n if (index > 0) {\n assoc.push('include');\n }\n assoc.push(associationKey);\n });\n\n _.set(include, assoc, {\n association: attr,\n attributes: [],\n });\n target = target.associations[attr].target;\n } else {\n throw new Error(`${attr} neither ${firstKey}'s association nor ${firstKey}'s attribute`);\n }\n }\n\n debug('associationKeys %o', associationKeys);\n\n if (associationKeys.length > 1) {\n paths.push(`$${associationKeys.join('.')}$`);\n } else {\n paths.push(firstKey);\n }\n }\n\n debug('where %o, paths %o, value, %o', where, paths, value);\n\n const values = _.get(where, paths);\n\n if (values && typeof values === 'object' && value && typeof value === 'object') {\n value = { ...value, ...values };\n }\n _.set(where, paths, value);\n }\n\n const toInclude = (items) => {\n return Object.values(items).map((item: any) => {\n if (item.include) {\n item.include = toInclude(item.include);\n }\n return item;\n });\n };\n debug('where %o, include %o', where, include);\n return { where, include: toInclude(include) };\n }\n\n private getFieldNameFromQueryPath(queryPath: string) {\n const paths = queryPath.split('.');\n let fieldName;\n for (const path of paths) {\n if (path.startsWith('$') || !lodash.isNaN(parseInt(path))) {\n continue;\n }\n\n fieldName = path;\n }\n\n return fieldName;\n }\n}\n"]}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,uCAAuD;AAAnC,+FAAA,EAAE,OAAA;AACtB,+CAA6B;AAC7B,6CAA2B;AAC3B,uCAAiD;AAAxC,mGAAA,QAAQ,OAAW;AAC5B,2CAAyB;AACzB,0DAAwC;AACxC,kDAAgC;AAChC,0CAAwB;AACxB,mFAAiE;AACjE,8EAA4D;AAC5D,2EAAyD;AACzD,qFAAmE;AACnE,mFAAiE;AACjE,+CAA6B;AAC7B,wDAAsC","sourcesContent":["export { ModelCtor, Op, SyncOptions } from 'sequelize';\nexport * from './collection';\nexport * from './database';\nexport { Database as default } from './database';\nexport * from './fields';\nexport * from './magic-attribute-model';\nexport * from './mock-database';\nexport * from './model';\nexport * from './relation-repository/belongs-to-many-repository';\nexport * from './relation-repository/belongs-to-repository';\nexport * from './relation-repository/hasmany-repository';\nexport * from './relation-repository/multiple-relation-repository';\nexport * from './relation-repository/single-relation-repository';\nexport * from './repository';\nexport * from './update-associations';\n\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"magic-attribute-model.js","sourceRoot":"","sources":["../src/magic-attribute-model.ts"],"names":[],"mappings":"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","sourcesContent":["import { merge } from '@nocobase/utils';\nimport _ from 'lodash';\nimport Database from './database';\nimport { Model } from './model';\n\nexport class MagicAttributeModel extends Model {\n get magicAttribute() {\n const db: Database = (<any>this.constructor).database;\n const collection = db.getCollection(this.constructor.name);\n return collection.options.magicAttribute || 'options';\n }\n\n set(key: any, value?: any, options?: any) {\n if (typeof key === 'string') {\n const [column] = key.split('.');\n if ((this.constructor as any).hasAlias(column)) {\n return super.set(key, value, options);\n }\n if ((this.constructor as any).rawAttributes[column]) {\n return super.set(key, value, options);\n }\n if (_.isPlainObject(value)) {\n const opts = super.get(this.magicAttribute) || {};\n return super.set(`${this.magicAttribute}.${key}`, merge(opts?.[key], value), options);\n }\n return super.set(`${this.magicAttribute}.${key}`, value, options);\n } else {\n if (!key) {\n return;\n }\n Object.keys(key).forEach((k) => {\n this.set(k, key[k], options);\n });\n }\n return super.set(key, value, options);\n }\n\n get(key?: any, value?: any): any {\n if (typeof key === 'string') {\n const [column] = key.split('.');\n if ((this.constructor as any).hasAlias(column)) {\n return super.get(key, value);\n }\n if ((this.constructor as any).rawAttributes[column]) {\n return super.get(key, value);\n }\n const options = super.get(this.magicAttribute, value);\n return _.get(options, key);\n }\n const data = super.get(key, value);\n return {\n ..._.omit(data, this.magicAttribute),\n ...data[this.magicAttribute],\n };\n }\n\n async update(values?: any, options?: any) {\n // @ts-ignore\n this._changed = new Set();\n return super.update(values, options);\n }\n}\n"]}
|
package/lib/mock-database.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock-database.js","sourceRoot":"","sources":["../src/mock-database.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,+BAA+B;AAC/B,yCAAwD;AAExD,MAAa,YAAa,SAAQ,mBAAQ;IACxC,YAAY,OAAyB;QACnC,KAAK,iBACH,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,QAAQ,IAAA,WAAG,EAAC,CAAC,CAAC,GAAG,EAC9B,OAAO,EAAE,QAAQ,IACd,OAAO,EACV,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACrG,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAZD,oCAYC;AAED,SAAgB,cAAc;IAC5B,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC7B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACjC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC/B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;QAC9D,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,UAAU;YAC7D,CAAC,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAChD,CAAC,CAAC,UAAU;QAChB,MAAM,EAAE;YACN,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,oBAAoB;SAC9B;KACF,CAAC;AACJ,CAAC;AAlBD,wCAkBC;AAED,SAAgB,YAAY,CAAC,UAA4B,EAAE;IACzD,MAAM,SAAS,GAAG,IAAA,aAAK,EAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAHD,oCAGC","sourcesContent":["import { merge, uid } from '@nocobase/utils';\nimport { resolve } from 'path';\nimport { Database, IDatabaseOptions } from './database';\n\nexport class MockDatabase extends Database {\n constructor(options: IDatabaseOptions) {\n super({\n storage: ':memory:',\n tablePrefix: `mock_${uid(6)}_`,\n dialect: 'sqlite',\n ...options,\n });\n this.sequelize.beforeDefine((model, opts) => {\n opts.tableName = `${this.getTablePrefix()}${opts.tableName || opts.modelName || opts.name.plural}`;\n });\n }\n}\n\nexport function getConfigByEnv() {\n return {\n username: process.env.DB_USER,\n password: process.env.DB_PASSWORD,\n database: process.env.DB_DATABASE,\n host: process.env.DB_HOST,\n port: process.env.DB_PORT,\n dialect: process.env.DB_DIALECT,\n logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,\n storage:\n process.env.DB_STORAGE && process.env.DB_STORAGE !== ':memory:'\n ? resolve(process.cwd(), process.env.DB_STORAGE)\n : ':memory:',\n define: {\n charset: 'utf8mb4',\n collate: 'utf8mb4_unicode_ci',\n },\n };\n}\n\nexport function mockDatabase(options: IDatabaseOptions = {}): MockDatabase {\n const dbOptions = merge(getConfigByEnv(), options);\n return new MockDatabase(dbOptions);\n}\n"]}
|
package/lib/model-hook.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-hook.js","sourceRoot":"","sources":["../src/model-hook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAA4B;AAK5B,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEjD,MAAa,SAAS;IAIpB,YAAY,QAAkB;QAF9B,eAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAG7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,SAA0B;QACpC,IAAI,gBAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAE5C,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACnB,OAA6B,QAAQ,CAAC;aACvC;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa,CAAC,QAAQ;QACpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;YAC1B,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,EAAE;gBAC5B,OAAe,GAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aACtC;YAED,IAAI,gBAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBAC7B,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;oBAChB,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;iBAC1B;gBAED,IAAI,gBAAM,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE;oBAClC,OAAO,gBAAM,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;iBACvC;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,SAAS;QACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,YAAY,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,oBAAoB,CAAC,SAAS;QAC5B,OAAO,CAAO,GAAG,IAAW,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,SAAS,EAAE;gBACb,mBAAmB;gBACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;aACrE;YAED,8BAA8B;YAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC,CAAA,CAAC;IACJ,CAAC;CACF;AA7DD,8BA6DC","sourcesContent":["import lodash from 'lodash';\nimport type { SequelizeHooks } from 'sequelize/types/lib/hooks';\nimport Database from './database';\nimport { Model } from './model';\n\nconst { hooks } = require('sequelize/lib/hooks');\n\nexport class ModelHook {\n database: Database;\n boundEvent = new Set<string>();\n\n constructor(database: Database) {\n this.database = database;\n }\n\n isModelHook(eventName: string | symbol): keyof SequelizeHooks | false {\n if (lodash.isString(eventName)) {\n const hookType = eventName.split('.').pop();\n\n if (hooks[hookType]) {\n return <keyof SequelizeHooks>hookType;\n }\n }\n\n return false;\n }\n\n findModelName(hookArgs) {\n for (const arg of hookArgs) {\n if (arg?._previousDataValues) {\n return (<Model>arg).constructor.name;\n }\n\n if (lodash.isPlainObject(arg)) {\n if (arg['model']) {\n return arg['model'].name;\n }\n\n if (lodash.get(arg, 'name.plural')) {\n return lodash.get(arg, 'name.plural');\n }\n }\n }\n\n return null;\n }\n\n bindEvent(eventName) {\n this.boundEvent.add(eventName);\n }\n\n hasBindEvent(eventName) {\n return this.boundEvent.has(eventName);\n }\n\n sequelizeHookBuilder(eventName) {\n return async (...args: any[]) => {\n const modelName = this.findModelName(args);\n\n if (modelName) {\n // emit model event\n await this.database.emitAsync(`${modelName}.${eventName}`, ...args);\n }\n\n // emit sequelize global event\n await this.database.emitAsync(eventName, ...args);\n };\n }\n}\n"]}
|
package/lib/model.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { Model as SequelizeModel, ModelCtor } from 'sequelize';\nimport { Collection } from './collection';\nimport { Database } from './database';\nimport lodash from 'lodash';\nimport { Field } from './fields';\n\ninterface IModel {\n [key: string]: any;\n}\n\ninterface JSONTransformerOptions {\n model: ModelCtor<any>;\n collection: Collection;\n db: Database;\n key?: string;\n field?: Field;\n}\n\nexport class Model<TModelAttributes extends {} = any, TCreationAttributes extends {} = TModelAttributes>\n extends SequelizeModel<TModelAttributes, TCreationAttributes>\n implements IModel\n{\n public static database: Database;\n public static collection: Collection;\n\n public toJSON<T extends TModelAttributes>(): T {\n const handleObj = (obj, options: JSONTransformerOptions) => {\n const handles = [\n (data) => {\n if (data instanceof Model) {\n return data.toJSON();\n }\n\n return data;\n },\n this.hiddenObjKey,\n ];\n return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), obj);\n };\n\n const handleArray = (arrayOfObj, options: JSONTransformerOptions) => {\n const handles = [this.sortAssociations];\n return handles.reduce((carry, fn) => fn.apply(this, [carry, options]), arrayOfObj || []);\n };\n\n const opts = {\n model: this.constructor as ModelCtor<any>,\n collection: (this.constructor as any).collection,\n db: (this.constructor as any).database as Database,\n };\n\n const traverseJSON = (data: T, options: JSONTransformerOptions): T => {\n const { model, db, collection } = options;\n // handle Object\n data = handleObj(data, options);\n\n const result = {};\n for (const key of Object.keys(data)) {\n // @ts-ignore\n if (model.hasAlias(key)) {\n const association = model.associations[key];\n const opts = {\n model: association.target,\n collection: db.getCollection(association.target.name),\n db,\n key,\n field: collection.getField(key),\n };\n\n if (['HasMany', 'BelongsToMany'].includes(association.associationType)) {\n result[key] = handleArray(data[key], opts).map((item) => traverseJSON(item, opts));\n } else {\n result[key] = data[key] ? traverseJSON(data[key], opts) : null;\n }\n } else {\n result[key] = data[key];\n }\n }\n\n return result as T;\n };\n\n return traverseJSON(super.toJSON(), opts);\n }\n\n private hiddenObjKey(obj, options: JSONTransformerOptions) {\n const hiddenFields = Array.from(options.collection.fields.values())\n .filter((field) => field.options.hidden)\n .map((field) => field.options.name);\n\n return lodash.omit(obj, hiddenFields);\n }\n\n private sortAssociations(data, { field }: JSONTransformerOptions): any {\n const sortBy = field.options.sortBy;\n return sortBy ? this.sortArray(data, sortBy) : data;\n }\n\n private sortArray(data, sortBy: string | string[]) {\n if (!lodash.isArray(sortBy)) {\n sortBy = [sortBy];\n }\n\n const orderItems = [];\n const orderDirections = [];\n\n sortBy.forEach((sortItem) => {\n orderDirections.push(sortItem.startsWith('-') ? 'desc' : 'asc');\n orderItems.push(sortItem.replace('-', ''));\n });\n\n return lodash.orderBy(data, orderItems, orderDirections);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/operators/array.ts"],"names":[],"mappings":"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","sourcesContent":["import { Op, Sequelize } from 'sequelize';\nimport { isPg, isMySQL } from './utils';\n\nconst getFieldName = (ctx) => {\n const fieldName = ctx.fieldName;\n return fieldName;\n};\n\nconst escape = (value, ctx) => {\n const sequelize: Sequelize = ctx.db.sequelize;\n return sequelize.escape(value);\n};\n\nconst sqliteExistQuery = (value, ctx) => {\n const fieldName = getFieldName(ctx);\n\n const sqlArray = `(${value.map((v) => `'${v}'`).join(', ')})`;\n\n const subQuery = `exists (select * from json_each(${fieldName}) where json_each.value in ${sqlArray})`;\n\n return subQuery;\n};\n\nconst emptyQuery = (ctx, operator: '=' | '>') => {\n const fieldName = getFieldName(ctx);\n\n let funcName = 'json_array_length';\n let ifNull = 'IFNULL';\n\n if (isPg(ctx)) {\n funcName = 'jsonb_array_length';\n ifNull = 'coalesce';\n }\n\n if (isMySQL(ctx)) {\n funcName = 'json_length';\n }\n\n return `(select ${ifNull}(${funcName}(${fieldName}), 0) ${operator} 0)`;\n};\n\nexport default {\n $match(value, ctx) {\n const fieldName = getFieldName(ctx);\n\n if (isPg(ctx)) {\n return {\n [Op.contained]: value,\n [Op.contains]: value,\n };\n }\n\n value = escape(JSON.stringify(value.sort()), ctx);\n\n if (isMySQL(ctx)) {\n return Sequelize.literal(`JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName})`);\n }\n\n return {\n [Op.eq]: Sequelize.literal(`json(${value})`),\n };\n },\n\n $notMatch(value, ctx) {\n const fieldName = getFieldName(ctx);\n value = escape(JSON.stringify(value), ctx);\n\n if (isPg(ctx)) {\n return Sequelize.literal(`not (${fieldName} <@ ${value}::JSONB and ${fieldName} @> ${value}::JSONB)`);\n }\n\n if (isMySQL(ctx)) {\n return Sequelize.literal(`not (JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName}))`);\n }\n return {\n [Op.ne]: Sequelize.literal(`json(${value})`),\n };\n },\n\n $anyOf(value, ctx) {\n const fieldName = getFieldName(ctx);\n\n if (isPg(ctx)) {\n return Sequelize.literal(\n `${fieldName} ?| ${escape(\n value.map((i) => `${i}`),\n ctx,\n )}`,\n );\n }\n\n if (isMySQL(ctx)) {\n value = escape(JSON.stringify(value), ctx);\n\n return Sequelize.literal(`JSON_OVERLAPS(${fieldName}, ${value})`);\n }\n\n const subQuery = sqliteExistQuery(value, ctx);\n\n return Sequelize.literal(subQuery);\n },\n\n $noneOf(value, ctx) {\n let where;\n\n if (isPg(ctx)) {\n const fieldName = getFieldName(ctx);\n // pg single quote\n where = Sequelize.literal(\n `not (${fieldName} ?| ${escape(\n value.map((i) => `${i}`),\n ctx,\n )})`,\n );\n } else if (isMySQL(ctx)) {\n const fieldName = getFieldName(ctx);\n value = escape(JSON.stringify(value), ctx);\n where = Sequelize.literal(`NOT JSON_OVERLAPS(${fieldName}, ${value})`);\n } else {\n const subQuery = sqliteExistQuery(value, ctx);\n\n where = Sequelize.literal(`not ${subQuery}`);\n }\n\n return {\n [Op.or]: [where, { [Op.is]: null }],\n };\n },\n\n $arrayEmpty(value, ctx) {\n const subQuery = emptyQuery(ctx, '=');\n\n return {\n [Op.and]: [Sequelize.literal(`${subQuery}`)],\n };\n },\n\n $arrayNotEmpty(value, ctx) {\n const subQuery = emptyQuery(ctx, '>');\n\n return {\n [Op.and]: [Sequelize.literal(`${subQuery}`)],\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"association.js","sourceRoot":"","sources":["../../src/operators/association.ts"],"names":[],"mappings":";;AAAA,yCAA0C;AAE1C,kBAAe;IACb,OAAO,CAAC,KAAK,EAAE,GAAG;QAChB,OAAO;YACL,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,GAAG;QACnB,OAAO;YACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { Op, Sequelize } from 'sequelize';\n\nexport default {\n $exists(value, ctx) {\n return {\n [Op.not]: null,\n };\n },\n $notExists(value, ctx) {\n return {\n [Op.is]: null,\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/operators/date.ts"],"names":[],"mappings":";;;;;AAAA,yCAA+B;AAC/B,oDAA6C;AAC7C,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,OAAO,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,kBAAe;IACb,OAAO,CAAC,KAAK;QACX,OAAO;YACL,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;SAC9E,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAK;QACd,OAAO;YACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK;QACf,OAAO,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,KAAK;QAClB,OAAO;YACL,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,KAAK;QACjB,OAAO,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,CAAC;CACF,CAAC","sourcesContent":["import { Op } from 'sequelize';\nimport moment, { MomentInput } from 'moment';\nfunction stringToDate(value: string): Date {\n return moment(value).toDate();\n}\n\nfunction getNextDay(value: MomentInput): Date {\n return moment(value).add(1, 'd').toDate();\n}\n\nexport default {\n $dateOn(value) {\n return {\n [Op.and]: [{ [Op.gte]: stringToDate(value) }, { [Op.lt]: getNextDay(value) }],\n };\n },\n\n $dateNotOn(value) {\n return {\n [Op.or]: [{ [Op.lt]: stringToDate(value) }, { [Op.gte]: getNextDay(value) }],\n };\n },\n\n $dateBefore(value) {\n return { [Op.lt]: stringToDate(value) };\n },\n\n $dateNotBefore(value) {\n return {\n [Op.gte]: stringToDate(value),\n };\n },\n\n $dateAfter(value) {\n return { [Op.gte]: getNextDay(value) };\n },\n\n $dateNotAfter(value) {\n return { [Op.lt]: getNextDay(value) };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../../src/operators/empty.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA0C;AAC1C,sCAAoD;AACpD,oDAAqC;AACrC,iDAA0C;AAE1C,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,EAAE;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAElB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,mBAAmB;IACnB,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAEtB,MAAM,eAAe,GAAG,IAAI,CAAC;IAE7B,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE;QACzC,IAAI,gBAAM,CAAC,QAAQ,CAAC,IAAA,iBAAQ,EAAC,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzE,SAAS;SACV;QAED,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;KAChD;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,kBAAe;IACb,MAAM,CAAC,CAAC,EAAE,GAAG;QACX,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,KAAK,YAAY,oBAAW,EAAE;YAChC,OAAO;gBACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE;oBACP,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;oBACb,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,EAAE;iBACZ;aACF,CAAC;SACH;QAED,IAAI,KAAK,YAAY,mBAAU,EAAE;YAC/B,OAAO,eAAc,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C;QAED,OAAO;YACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,CAAC,EAAE,GAAG;QACd,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,KAAK,YAAY,oBAAW,EAAE;YAChC,OAAO;gBACL,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE;oBACR,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAI;oBACd,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,EAAE;iBACZ;aACF,CAAC;SACH;QAED,IAAI,KAAK,YAAY,mBAAU,EAAE;YAC/B,OAAO,eAAc,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC9C;QAED,OAAO;YACL,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { DataTypes, Op } from 'sequelize';\nimport { ArrayField, StringField } from '../fields';\nimport arrayOperators from './array';\nimport lodash, { parseInt } from 'lodash';\n\nconst findFilterFieldType = (ctx) => {\n const db = ctx.db;\n\n let path = ctx.path.split('.');\n\n // remove operators\n path.pop();\n\n const fieldName = path.pop();\n\n let model = ctx.model;\n\n const associationPath = path;\n\n for (const association of associationPath) {\n if (lodash.isNumber(parseInt(association)) || association.startsWith('$')) {\n continue;\n }\n\n model = model.associations[association].target;\n }\n\n const collection = db.modelCollection.get(model);\n\n return collection.getField(fieldName);\n};\n\nexport default {\n $empty(_, ctx) {\n const field = findFilterFieldType(ctx);\n\n if (field instanceof StringField) {\n return {\n [Op.or]: {\n [Op.is]: null,\n [Op.eq]: '',\n },\n };\n }\n\n if (field instanceof ArrayField) {\n return arrayOperators.$arrayEmpty(_, ctx);\n }\n\n return {\n [Op.is]: null,\n };\n },\n\n $notEmpty(_, ctx) {\n const field = findFilterFieldType(ctx);\n\n if (field instanceof StringField) {\n return {\n [Op.and]: {\n [Op.not]: null,\n [Op.ne]: '',\n },\n };\n }\n\n if (field instanceof ArrayField) {\n return arrayOperators.$arrayNotEmpty(_, ctx);\n }\n\n return {\n [Op.not]: null,\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operators/index.ts"],"names":[],"mappings":";;AAAA,wHACK,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,GAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,GACzB,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAC1B,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAC1B,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,GAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,GACvB,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAC7B","sourcesContent":["export default {\n ...require('./association').default,\n ...require('./date').default,\n ...require('./array').default,\n ...require('./empty').default,\n ...require('./string').default,\n ...require('./ne').default,\n ...require('./notIn').default,\n};\n"]}
|
package/lib/operators/ne.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ne.js","sourceRoot":"","sources":["../../src/operators/ne.ts"],"names":[],"mappings":";;AAAA,yCAA+B;AAE/B,kBAAe;IACb,GAAG,CAAC,GAAG,EAAE,GAAG;QACV,OAAO;YACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE;gBACP,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,GAAG;gBACZ,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;aACd;SACF,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { Op } from 'sequelize';\n\nexport default {\n $ne(val, ctx) {\n return {\n [Op.or]: {\n [Op.ne]: val,\n [Op.is]: null,\n },\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notIn.js","sourceRoot":"","sources":["../../src/operators/notIn.ts"],"names":[],"mappings":";;AAAA,yCAA+B;AAE/B,kBAAe;IACb,MAAM,CAAC,GAAG,EAAE,GAAG;QACb,OAAO;YACL,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE;gBACP,CAAC,cAAE,CAAC,KAAK,CAAC,EAAE,GAAG;gBACf,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,IAAI;aACd;SACF,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { Op } from 'sequelize';\n\nexport default {\n $notIn(val, ctx) {\n return {\n [Op.or]: {\n [Op.notIn]: val,\n [Op.is]: null,\n },\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/operators/string.ts"],"names":[],"mappings":";;AAAA,mCAA+B;AAC/B,yCAA+B;AAE/B,kBAAe;IACb,SAAS,CAAC,KAAK,EAAE,GAAG;QAClB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,GAAG;SAC/C,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAAK,EAAE,GAAG;QACrB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,GAAG;SACrD,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,GAAG;QACpB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;SAC9C,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAAK,EAAE,GAAG;QACvB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG;SACpD,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,KAAK,EAAE,GAAG;QACjB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,GAAG;QACpB,OAAO;YACL,CAAC,IAAA,YAAI,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,EAAE;SACpD,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { isPg } from './utils';\nimport { Op } from 'sequelize';\n\nexport default {\n $includes(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `%${value}%`,\n };\n },\n\n $notIncludes(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}%`,\n };\n },\n\n $startsWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `${value}%`,\n };\n },\n\n $notStartsWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `${value}%`,\n };\n },\n\n $endWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `%${value}`,\n };\n },\n\n $notEndWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}`,\n };\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/operators/utils.ts"],"names":[],"mappings":";;;AAAA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE;IACzB,OAAO,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AACvC,CAAC,CAAC;AAUO,gCAAU;AARnB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC;AACxC,CAAC,CAAC;AAMmB,oBAAI;AAJzB,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;IACtB,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;AACrC,CAAC,CAAC;AAEyB,0BAAO","sourcesContent":["const getDialect = (ctx) => {\n return ctx.db.sequelize.getDialect();\n};\n\nconst isPg = (ctx) => {\n return getDialect(ctx) === 'postgres';\n};\n\nconst isMySQL = (ctx) => {\n return getDialect(ctx) === 'mysql';\n};\n\nexport { getDialect, isPg, isMySQL };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"options-parser.js","sourceRoot":"","sources":["../src/options-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { FindAttributeOptions, ModelCtor, Op } from 'sequelize';\nimport { Collection } from './collection';\nimport { Database } from './database';\nimport FilterParser from './filter-parser';\nimport { Appends, Except, FindOptions } from './repository';\n\nconst debug = require('debug')('noco-database');\n\ninterface OptionsParserContext {\n collection: Collection;\n targetKey?: string;\n}\n\nexport class OptionsParser {\n options: FindOptions;\n database: Database;\n collection: Collection;\n model: ModelCtor<any>;\n filterParser: FilterParser;\n context: OptionsParserContext;\n\n constructor(options: FindOptions, context: OptionsParserContext) {\n const { collection } = context;\n\n this.collection = collection;\n this.model = collection.model;\n this.options = options;\n this.database = collection.context.database;\n this.filterParser = new FilterParser(options?.filter, {\n collection,\n app: {\n ctx: options?.context,\n },\n });\n this.context = context;\n }\n\n isAssociation(key: string) {\n return this.model.associations[key] !== undefined;\n }\n\n isAssociationPath(path: string) {\n return this.isAssociation(path.split('.')[0]);\n }\n\n toSequelizeParams() {\n const queryParams = this.filterParser.toSequelizeParams();\n\n if (this.options?.filterByTk) {\n queryParams.where = {\n [Op.and]: [\n queryParams.where,\n {\n [this.context.targetKey || this.collection.filterTargetKey]: this.options.filterByTk,\n },\n ],\n };\n }\n\n return this.parseSort(this.parseFields(queryParams));\n }\n\n /**\n * parser sort options\n * @param filterParams\n * @protected\n */\n protected parseSort(filterParams) {\n let sort = this.options?.sort || [];\n if (typeof sort === 'string') {\n sort = sort.split(',');\n }\n const orderParams = sort.map((sortKey: string) => {\n const direction = sortKey.startsWith('-') ? 'DESC' : 'ASC';\n const sortField: Array<any> = sortKey.replace('-', '').split('.');\n\n // handle sort by association\n if (sortField.length > 1) {\n let associationModel = this.model;\n\n for (let i = 0; i < sortField.length - 1; i++) {\n const associationKey = sortField[i];\n sortField[i] = associationModel.associations[associationKey].target;\n associationModel = sortField[i];\n }\n }\n\n sortField.push(direction);\n return sortField;\n });\n\n if (orderParams.length > 0) {\n return {\n order: orderParams,\n ...filterParams,\n };\n }\n\n return filterParams;\n }\n\n protected parseFields(filterParams: any) {\n const appends = this.options?.appends || [];\n const except = [];\n\n let attributes: FindAttributeOptions = {\n include: [],\n exclude: [],\n }; // out put all fields by default\n\n if (this.options?.fields) {\n // 将fields拆分为 attributes 和 appends\n for (const field of this.options.fields) {\n if (this.isAssociationPath(field)) {\n // field is association field\n appends.push(field);\n } else {\n // field is model attribute, change attributes to array type\n if (!Array.isArray(attributes)) attributes = [];\n\n attributes.push(field);\n }\n }\n }\n\n if (this.options?.except) {\n for (const exceptKey of this.options.except) {\n if (this.isAssociationPath(exceptKey)) {\n // except association field\n except.push(exceptKey);\n } else {\n // if attributes is array form, ignore except\n if (Array.isArray(attributes)) continue;\n attributes.exclude.push(exceptKey);\n }\n }\n }\n\n return {\n attributes,\n ...this.parseExcept(except, this.parseAppends(appends, filterParams)),\n };\n }\n\n protected parseExcept(except: Except, filterParams: any) {\n if (!except) return filterParams;\n const setExcept = (queryParams: any, except: string) => {\n // split exceptKey to path form\n // posts.comments.content => ['posts', 'comments', 'content']\n // then set except on include attributes\n const exceptPath = except.split('.');\n const association = exceptPath[0];\n const lastLevel = exceptPath.length <= 2;\n\n let existIncludeIndex = queryParams['include'].findIndex((include) => include['association'] == association);\n\n if (existIncludeIndex == -1) {\n // if include not exists, ignore this except\n return;\n }\n\n if (lastLevel) {\n // if it not have exclude form\n if (Array.isArray(queryParams['include'][existIncludeIndex]['attributes'])) {\n return;\n } else {\n if (!queryParams['include'][existIncludeIndex]['attributes']['exclude']) {\n queryParams['include'][existIncludeIndex]['attributes']['exclude'] = [];\n }\n\n queryParams['include'][existIncludeIndex]['attributes']['exclude'].push(exceptPath[1]);\n }\n } else {\n setExcept(queryParams['include'][existIncludeIndex], exceptPath.filter((_, index) => index !== 0).join('.'));\n }\n };\n\n for (const exceptKey of except) {\n setExcept(filterParams, exceptKey);\n }\n\n return filterParams;\n }\n\n protected parseAppends(appends: Appends, filterParams: any) {\n if (!appends) return filterParams;\n\n /**\n * set include params\n * @param includeRoot\n * @param appends\n */\n const setInclude = (model: ModelCtor<any>, queryParams: any, append: string) => {\n const appendFields = append.split('.');\n const appendAssociation = appendFields[0];\n\n const associations = model.associations;\n\n // if append length less or equal 2\n // example:\n // appends: ['posts']\n // appends: ['posts.title']\n // All of these can be seen as last level\n let lastLevel: boolean = false;\n\n if (appendFields.length == 1) {\n lastLevel = true;\n }\n\n if (appendFields.length == 2) {\n const associationModel = associations[appendFields[0]].target;\n if (associationModel.rawAttributes[appendFields[1]]) {\n lastLevel = true;\n }\n }\n\n // find association index\n if (queryParams['include'] == undefined) {\n queryParams['include'] = [];\n }\n\n let existIncludeIndex = queryParams['include'].findIndex(\n (include) => include['association'] == appendAssociation,\n );\n\n // if association not exist, create it\n if (existIncludeIndex == -1) {\n // association not exists\n queryParams['include'].push({\n association: appendAssociation,\n });\n\n existIncludeIndex = queryParams['include'].length - 1;\n }\n\n // end appends\n // without nests association\n if (lastLevel) {\n // get exist association attributes\n let attributes = queryParams['include'][existIncludeIndex]['attributes'] || {\n include: [], // all fields are output by default\n };\n\n // if need set attribute\n if (appendFields.length == 2) {\n if (!Array.isArray(attributes)) {\n attributes = [];\n }\n\n const attributeName = appendFields[1];\n\n // push field to it\n attributes.push(attributeName);\n } else {\n // if attributes is empty array, change it to object\n if (Array.isArray(attributes) && attributes.length == 0) {\n attributes = {\n include: [],\n };\n }\n }\n\n // set new attributes\n queryParams['include'][existIncludeIndex] = {\n ...queryParams['include'][existIncludeIndex],\n attributes,\n };\n } else {\n setInclude(\n model.associations[queryParams['include'][existIncludeIndex].association].target,\n queryParams['include'][existIncludeIndex],\n appendFields.filter((_, index) => index !== 0).join('.'),\n );\n }\n };\n\n // handle every appends\n for (const append of appends) {\n setInclude(this.model, filterParams, append);\n }\n\n debug('filter params: %o', filterParams);\n return filterParams;\n }\n}\n"]}
|
package/lib/playground.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playground.js","sourceRoot":"","sources":["../src/playground.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,yCAAsC;AAGtC,MAAM,EAAE,GAAG,IAAI,mBAAQ,CAAC;IACtB,OAAO,EAAE,QAAQ;IACjB,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC;IACjC,OAAO,EAAE,UAAU;CACpB,CAAC,CAAC;AAEH,CAAC,GAAS,EAAE;IACV,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC;QACzB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC;QACzB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;YACjC;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,MAAM;aACb;SACF;KACF,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAEnC,MAAM,UAAU,CAAC,UAAU,CAAC;QAC1B,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;YAC1C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;YAC1C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;SAC3C;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAC/B,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE;YACL,eAAe,EAAE,MAAM;SACxB;QACD,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;QACjD,UAAU,EAAE;YACV,OAAO,EAAE,EAAE;SACZ;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAA,CAAC,EAAE,CAAC","sourcesContent":["import { Database } from './database';\nimport FilterParser from './filter-parser';\n\nconst db = new Database({\n dialect: 'sqlite',\n dialectModule: require('sqlite3'),\n storage: ':memory:',\n});\n\n(async () => {\n const User = db.collection({\n name: 'users',\n fields: [{ type: 'string', name: 'name' }],\n });\n\n const Post = db.collection({\n name: 'posts',\n fields: [\n { type: 'string', name: 'title' },\n {\n type: 'belongsTo',\n name: 'user',\n },\n ],\n });\n\n await db.sync();\n\n const repository = User.repository;\n\n await repository.createMany({\n records: [\n { name: 'u1', posts: [{ title: 'u1t1' }] },\n { name: 'u2', posts: [{ title: 'u2t1' }] },\n { name: 'u3', posts: [{ title: 'u3t1' }] },\n ],\n });\n\n const Model = User.model;\n const user = await Model.findOne({\n subQuery: false,\n where: {\n '$posts.title$': 'u1t1',\n },\n include: { association: 'posts', attributes: [] },\n attributes: {\n include: [],\n },\n });\n\n console.log(user.toJSON());\n})();\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-many-repository.js","sourceRoot":"","sources":["../../src/relation-repository/belongs-to-many-repository.ts"],"names":[],"mappings":"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","sourcesContent":["import lodash from 'lodash';\nimport { BelongsToMany, Op, Transaction } from 'sequelize';\nimport { Model } from '../model';\nimport { CreateOptions, DestroyOptions, FindOptions, TargetKey, UpdateOptions } from '../repository';\nimport { updateThroughTableValue } from '../update-associations';\nimport { FindAndCountOptions, FindOneOptions, MultipleRelationRepository } from './multiple-relation-repository';\nimport { transaction } from './relation-repository';\nimport { AssociatedOptions, PrimaryKeyWithThroughValues } from './types';\n\ntype CreateBelongsToManyOptions = CreateOptions;\n\ninterface IBelongsToManyRepository<M extends Model> {\n find(options?: FindOptions): Promise<M[]>;\n findAndCount(options?: FindAndCountOptions): Promise<[M[], number]>;\n findOne(options?: FindOneOptions): Promise<M>;\n // 新增并关联,存在中间表数据\n create(options?: CreateBelongsToManyOptions): Promise<M>;\n // 更新,存在中间表数据\n update(options?: UpdateOptions): Promise<M>;\n // 删除\n destroy(options?: number | string | number[] | string[] | DestroyOptions): Promise<Boolean>;\n // 建立关联\n set(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n // 附加关联,存在中间表数据\n add(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n // 移除关联\n remove(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n toggle(options: TargetKey | { pk?: TargetKey; transaction?: Transaction }): Promise<void>;\n}\n\nexport class BelongsToManyRepository extends MultipleRelationRepository implements IBelongsToManyRepository<any> {\n @transaction()\n async create(options?: CreateBelongsToManyOptions): Promise<any> {\n const transaction = await this.getTransaction(options);\n\n const createAccessor = this.accessors().create;\n\n const values = options.values || {};\n\n const sourceModel = await this.getSourceModel(transaction);\n\n const createOptions = {\n ...options,\n through: values[this.throughName()],\n transaction,\n };\n\n return sourceModel[createAccessor](values, createOptions);\n }\n\n @transaction((args, transaction) => {\n return {\n filterByTk: args[0],\n transaction,\n };\n })\n async destroy(options?: TargetKey | TargetKey[] | DestroyOptions): Promise<Boolean> {\n const transaction = await this.getTransaction(options);\n const association = <BelongsToMany>this.association;\n\n const instancesToIds = (instances) => {\n return instances.map((instance) => instance.get(this.targetKey()));\n };\n\n // Through Table\n const throughTableWhere: Array<any> = [\n {\n [association.foreignKey]: this.sourceKeyValue,\n },\n ];\n\n let ids;\n\n if (options && options['filter']) {\n const instances = await this.find({\n filter: options['filter'],\n transaction,\n });\n\n ids = instancesToIds(instances);\n }\n\n if (options && options['filterByTk']) {\n const instances = (<any>this.association).toInstanceArray(options['filterByTk']);\n ids = ids ? lodash.intersection(ids, instancesToIds(instances)) : instancesToIds(instances);\n }\n\n if (options && !options['filterByTk'] && !options['filter']) {\n const sourceModel = await this.getSourceModel(transaction);\n\n const instances = await sourceModel[this.accessors().get]({\n transaction,\n });\n\n ids = instancesToIds(instances);\n }\n\n throughTableWhere.push({\n [association.otherKey]: {\n [Op.in]: ids,\n },\n });\n\n // delete through table data\n await this.throughModel().destroy({\n where: throughTableWhere,\n transaction,\n });\n\n await this.targetModel.destroy({\n where: {\n [this.targetKey()]: {\n [Op.in]: ids,\n },\n },\n transaction,\n });\n\n return true;\n }\n\n protected async setTargets(\n call: 'add' | 'set',\n options: TargetKey | TargetKey[] | PrimaryKeyWithThroughValues | PrimaryKeyWithThroughValues[] | AssociatedOptions,\n ) {\n let handleKeys: TargetKey[] | PrimaryKeyWithThroughValues[];\n\n const transaction = await this.getTransaction(options, false);\n\n if (lodash.isPlainObject(options)) {\n options = (<AssociatedOptions>options).tk || [];\n }\n\n if (lodash.isString(options) || lodash.isNumber(options)) {\n handleKeys = [<TargetKey>options];\n } // if it is type primaryKeyWithThroughValues\n else if (lodash.isArray(options) && options.length == 2 && lodash.isPlainObject(options[0][1])) {\n handleKeys = [<PrimaryKeyWithThroughValues>options];\n } else {\n handleKeys = <TargetKey[] | PrimaryKeyWithThroughValues[]>options;\n }\n\n const sourceModel = await this.getSourceModel(transaction);\n\n const setObj = (<any>handleKeys).reduce((carry, item) => {\n if (Array.isArray(item)) {\n carry[item[0]] = item[1];\n } else {\n carry[item] = true;\n }\n return carry;\n }, {});\n\n await sourceModel[this.accessors()[call]](Object.keys(setObj), {\n transaction,\n });\n\n for (const [id, throughValues] of Object.entries(setObj)) {\n if (typeof throughValues === 'object') {\n const instance = await this.targetModel.findByPk(id, {\n transaction,\n });\n await updateThroughTableValue(instance, this.throughName(), throughValues, sourceModel, transaction);\n }\n }\n }\n\n @transaction((args, transaction) => {\n return {\n tk: args[0],\n transaction,\n };\n })\n async add(\n options: TargetKey | TargetKey[] | PrimaryKeyWithThroughValues | PrimaryKeyWithThroughValues[] | AssociatedOptions,\n ): Promise<void> {\n await this.setTargets('add', options);\n }\n\n @transaction((args, transaction) => {\n return {\n tk: args[0],\n transaction,\n };\n })\n async set(\n options: TargetKey | TargetKey[] | PrimaryKeyWithThroughValues | PrimaryKeyWithThroughValues[] | AssociatedOptions,\n ): Promise<void> {\n await this.setTargets('set', options);\n }\n\n @transaction((args, transaction) => {\n return {\n tk: args[0],\n transaction,\n };\n })\n async toggle(options: TargetKey | { tk?: TargetKey; transaction?: Transaction }): Promise<void> {\n const transaction = await this.getTransaction(options);\n const sourceModel = await this.getSourceModel(transaction);\n\n const has = await sourceModel[this.accessors().hasSingle](options['tk'], {\n transaction,\n });\n\n if (has) {\n await this.remove({\n ...(<any>options),\n transaction,\n });\n } else {\n await this.add({\n ...(<any>options),\n transaction,\n });\n }\n\n return;\n }\n\n extendFindOptions(findOptions) {\n let joinTableAttributes;\n if (lodash.get(findOptions, 'fields')) {\n joinTableAttributes = [];\n }\n\n return {\n ...findOptions,\n joinTableAttributes,\n };\n }\n\n throughName() {\n return this.throughModel().name;\n }\n\n throughModel() {\n return (<any>this.association).through.model;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-repository.js","sourceRoot":"","sources":["../../src/relation-repository/belongs-to-repository.ts"],"names":[],"mappings":";;;AAEA,6EAAkG;AAoBlG,MAAa,mBAAoB,SAAQ,qDAAwB;CAAwC;AAAzG,kDAAyG","sourcesContent":["import { Model } from '../model';\nimport { CreateOptions, UpdateOptions } from '../repository';\nimport { SingleRelationFindOption, SingleRelationRepository } from './single-relation-repository';\n\ninterface BelongsToFindOptions extends SingleRelationFindOption {}\n\ninterface IBelongsToRepository<M extends Model> {\n // 不需要 findOne,find 就是 findOne\n find(options?: BelongsToFindOptions): Promise<M>;\n findOne(options?: BelongsToFindOptions): Promise<M>;\n // 新增并关联,如果存在关联,解除之后,与新数据建立关联\n create(options?: CreateOptions): Promise<M>;\n // 更新\n update(options?: UpdateOptions): Promise<M>;\n // 删除\n destroy(): Promise<Boolean>;\n // 建立关联\n set(primaryKey: any): Promise<void>;\n // 移除关联\n remove(): Promise<void>;\n}\n\nexport class BelongsToRepository extends SingleRelationRepository implements IBelongsToRepository<any> {}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hasmany-repository.js","sourceRoot":"","sources":["../../src/relation-repository/hasmany-repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { omit } from 'lodash';\nimport { HasMany, Op } from 'sequelize';\nimport { Model } from '../model';\nimport { CreateOptions, DestroyOptions, FindOptions, TargetKey, TK, UpdateOptions } from '../repository';\nimport {\n AssociatedOptions,\n FindAndCountOptions,\n FindOneOptions,\n MultipleRelationRepository\n} from './multiple-relation-repository';\nimport { transaction } from './relation-repository';\n\ninterface IHasManyRepository<M extends Model> {\n find(options?: FindOptions): Promise<M>;\n findAndCount(options?: FindAndCountOptions): Promise<[M[], number]>;\n findOne(options?: FindOneOptions): Promise<M>;\n // 新增并关联\n create(options?: CreateOptions): Promise<M>;\n // 更新\n update(options?: UpdateOptions): Promise<M>;\n // 删除\n destroy(options?: TK | DestroyOptions): Promise<Boolean>;\n // 建立关联\n set(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n // 附加关联\n add(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n // 移除关联\n remove(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void>;\n}\n\nexport class HasManyRepository extends MultipleRelationRepository implements IHasManyRepository<any> {\n async find(options?: FindOptions): Promise<any> {\n const targetRepository = this.targetCollection.repository;\n\n const addFilter = {\n [this.association.foreignKey]: this.sourceKeyValue,\n };\n\n if (options?.filterByTk) {\n addFilter[this.associationField.targetKey] = options.filterByTk;\n }\n\n return await targetRepository.find({\n ...omit(options, ['filterByTk']),\n filter: {\n $and: [options.filter || {}, addFilter],\n },\n });\n }\n\n @transaction((args, transaction) => {\n return {\n filterByTk: args[0],\n transaction,\n };\n })\n async destroy(options?: TK | DestroyOptions): Promise<Boolean> {\n const transaction = await this.getTransaction(options);\n\n const sourceModel = await this.getSourceModel(transaction);\n\n const where = [\n {\n [this.association.foreignKey]: sourceModel.get((this.association as any).sourceKey),\n },\n ];\n\n if (options && options['filter']) {\n const filterResult = this.parseFilter(options['filter'], options);\n\n if (filterResult.include && filterResult.include.length > 0) {\n return await this.destroyByFilter(options['filter'], transaction);\n }\n\n where.push(filterResult.where);\n }\n\n if (options && options['filterByTk']) {\n if (typeof options === 'object' && options['filterByTk']) {\n options = options['filterByTk'];\n }\n\n where.push({\n [this.targetKey()]: options,\n });\n }\n\n await this.targetModel.destroy({\n where: {\n [Op.and]: where,\n },\n individualHooks: true,\n transaction,\n });\n\n return true;\n }\n\n handleKeyOfAdd(options) {\n let handleKeys;\n\n if (typeof options !== 'object' && !Array.isArray(options)) {\n handleKeys = [options];\n } else {\n handleKeys = options['pk'];\n }\n return handleKeys;\n }\n\n @transaction((args, transaction) => {\n return {\n pk: args[0],\n transaction,\n };\n })\n async set(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void> {\n const transaction = await this.getTransaction(options);\n\n const sourceModel = await this.getSourceModel(transaction);\n\n await sourceModel[this.accessors().set](this.handleKeyOfAdd(options), {\n transaction,\n });\n }\n\n @transaction((args, transaction) => {\n return {\n pk: args[0],\n transaction,\n };\n })\n async add(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void> {\n const transaction = await this.getTransaction(options);\n\n const sourceModel = await this.getSourceModel(transaction);\n\n await sourceModel[this.accessors().add](this.handleKeyOfAdd(options), {\n transaction,\n });\n }\n\n accessors() {\n return (<HasMany>this.association).accessors;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hasone-repository.js","sourceRoot":"","sources":["../../src/relation-repository/hasone-repository.ts"],"names":[],"mappings":";;;AAEA,6EAAkG;AAoBlG,MAAa,gBAAiB,SAAQ,qDAAwB;CAAqC;AAAnG,4CAAmG","sourcesContent":["import { Model } from '../model';\nimport { CreateOptions } from '../repository';\nimport { SingleRelationFindOption, SingleRelationRepository } from './single-relation-repository';\n\ninterface HasOneFindOptions extends SingleRelationFindOption {}\n\ninterface IHasOneRepository<M extends Model> {\n // 不需要 findOne,find 就是 findOne\n find(options?: HasOneFindOptions): Promise<M>;\n findOne(options?: HasOneFindOptions): Promise<M>;\n // 新增并关联,如果存在关联,解除之后,与新数据建立关联\n create(options?: CreateOptions): Promise<M>;\n // 更新\n update(options?): Promise<M>;\n // 删除\n destroy(): Promise<Boolean>;\n // 建立关联\n set(primaryKey: any): Promise<void>;\n // 移除关联\n remove(): Promise<void>;\n}\n\nexport class HasOneRepository extends SingleRelationRepository implements IHasOneRepository<any> {}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"multiple-relation-repository.js","sourceRoot":"","sources":["../../src/relation-repository/multiple-relation-repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { omit } from 'lodash';\nimport { MultiAssociationAccessors, Op, Sequelize, Transaction } from 'sequelize';\nimport {\n CommonFindOptions,\n CountOptions,\n DestroyOptions,\n Filter,\n FilterByTk,\n FindOptions,\n TargetKey,\n TK,\n TransactionAble,\n UpdateOptions\n} from '../repository';\nimport { updateModelByValues } from '../update-associations';\nimport { UpdateGuard } from '../update-guard';\nimport { RelationRepository, transaction } from './relation-repository';\n\nexport interface FindAndCountOptions extends CommonFindOptions {}\n\nexport interface FindOneOptions extends CommonFindOptions, FilterByTk {}\n\nexport interface AssociatedOptions extends TransactionAble {\n tk?: TK;\n}\n\nexport abstract class MultipleRelationRepository extends RelationRepository {\n extendFindOptions(findOptions) {\n return findOptions;\n }\n\n async find(options?: FindOptions): Promise<any> {\n const transaction = await this.getTransaction(options);\n\n const findOptions = {\n ...this.extendFindOptions(\n this.buildQueryOptions({\n ...options,\n }),\n ),\n subQuery: false,\n };\n\n const getAccessor = this.accessors().get;\n const sourceModel = await this.getSourceModel(transaction);\n\n if (findOptions.include && findOptions.include.length > 0) {\n const ids = (\n await sourceModel[getAccessor]({\n ...findOptions,\n includeIgnoreAttributes: false,\n attributes: [this.targetKey()],\n group: `${this.targetModel.name}.${this.targetKey()}`,\n transaction,\n })\n ).map((row) => row.get(this.targetKey()));\n\n return await sourceModel[getAccessor]({\n ...omit(findOptions, ['limit', 'offset']),\n where: {\n [this.targetKey()]: {\n [Op.in]: ids,\n },\n },\n transaction,\n });\n }\n\n return await sourceModel[getAccessor]({\n ...findOptions,\n transaction,\n });\n }\n\n async findAndCount(options?: FindAndCountOptions): Promise<[any[], number]> {\n const transaction = await this.getTransaction(options, false);\n return [\n await this.find({\n ...options,\n transaction,\n }),\n await this.count({\n ...options,\n transaction,\n }),\n ];\n }\n\n async count(options?: CountOptions) {\n const transaction = await this.getTransaction(options);\n\n const sourceModel = await this.getSourceModel(transaction);\n const queryOptions = this.buildQueryOptions(options);\n\n const count = await sourceModel[this.accessors().get]({\n where: queryOptions.where,\n include: queryOptions.include,\n includeIgnoreAttributes: false,\n attributes: [\n [\n Sequelize.fn(\n 'COUNT',\n Sequelize.fn('DISTINCT', Sequelize.col(`${this.targetModel.name}.${this.targetKey()}`)),\n ),\n 'count',\n ],\n ],\n raw: true,\n plain: true,\n transaction,\n });\n\n return parseInt(count.count);\n }\n\n async findOne(options?: FindOneOptions): Promise<any> {\n const transaction = await this.getTransaction(options, false);\n const rows = await this.find({ ...options, limit: 1, transaction });\n return rows.length == 1 ? rows[0] : null;\n }\n\n @transaction((args, transaction) => {\n return {\n tk: args[0],\n transaction,\n };\n })\n async remove(options: TargetKey | TargetKey[] | AssociatedOptions): Promise<void> {\n const transaction = await this.getTransaction(options);\n let handleKeys = options['tk'];\n\n if (!Array.isArray(handleKeys)) {\n handleKeys = [handleKeys];\n }\n\n const sourceModel = await this.getSourceModel(transaction);\n await sourceModel[this.accessors().removeMultiple](handleKeys, {\n transaction,\n });\n return;\n }\n\n @transaction()\n async update(options?: UpdateOptions): Promise<any> {\n const transaction = await this.getTransaction(options);\n\n const guard = UpdateGuard.fromOptions(this.targetModel, options);\n\n const values = guard.sanitize(options.values);\n\n const queryOptions = this.buildQueryOptions(options as any);\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 sourceModel: this.sourceInstance,\n transaction,\n });\n }\n\n for (const instance of instances) {\n if (options.hooks !== false) {\n await this.db.emitAsync(`${this.targetCollection.name}.afterUpdateWithAssociations`, instance, {...options, transaction});\n await this.db.emitAsync(`${this.targetCollection.name}.afterSaveWithAssociations`, instance, {...options, transaction});\n }\n }\n\n return instances;\n }\n\n async destroy(options?: TK | DestroyOptions): Promise<Boolean> {\n return false;\n }\n\n protected async destroyByFilter(filter: Filter, transaction?: Transaction) {\n const instances = await this.find({\n filter: filter,\n transaction,\n });\n\n return await this.destroy({\n filterByTk: instances.map((instance) => instance.get(this.targetCollection.filterTargetKey)),\n transaction,\n });\n }\n\n protected filterHasInclude(filter: Filter, options?: any) {\n const filterResult = this.parseFilter(filter, options);\n return filterResult.include && filterResult.include.length > 0;\n }\n\n protected accessors() {\n return <MultiAssociationAccessors>super.accessors();\n }\n}\n"]}
|