@nocobase/database 0.5.0-alpha.38 → 0.7.0-alpha.10
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/LICENSE +201 -21
- package/esm/collection-importer.d.ts +7 -0
- package/esm/collection-importer.js +49 -0
- package/esm/collection-importer.js.map +1 -0
- package/esm/collection.d.ts +73 -0
- package/esm/collection.js +224 -0
- package/esm/collection.js.map +1 -0
- package/esm/database.d.ts +101 -0
- package/esm/database.js +275 -0
- package/esm/database.js.map +1 -0
- package/esm/fields/array-field.d.ts +11 -0
- package/esm/fields/array-field.js +26 -0
- package/esm/fields/array-field.js.map +1 -0
- package/esm/fields/belongs-to-field.d.ts +12 -0
- package/esm/fields/belongs-to-field.js +57 -0
- package/esm/fields/belongs-to-field.js.map +1 -0
- package/esm/fields/belongs-to-many-field.d.ts +11 -0
- package/esm/fields/belongs-to-many-field.js +55 -0
- package/esm/fields/belongs-to-many-field.js.map +1 -0
- package/esm/fields/boolean-field.d.ts +8 -0
- package/esm/fields/boolean-field.js +8 -0
- package/esm/fields/boolean-field.js.map +1 -0
- package/esm/fields/context-field.d.ts +13 -0
- package/esm/fields/context-field.js +43 -0
- package/esm/fields/context-field.js.map +1 -0
- package/esm/fields/date-field.d.ts +8 -0
- package/esm/fields/date-field.js +8 -0
- package/esm/fields/date-field.js.map +1 -0
- package/esm/fields/field.d.ts +37 -0
- package/esm/fields/field.js +74 -0
- package/esm/fields/field.js.map +1 -0
- package/esm/fields/has-inverse-field.d.ts +4 -0
- package/esm/fields/has-inverse-field.js +2 -0
- package/esm/fields/has-inverse-field.js.map +1 -0
- package/esm/fields/has-many-field.d.ts +64 -0
- package/esm/fields/has-many-field.js +58 -0
- package/esm/fields/has-many-field.js.map +1 -0
- package/esm/fields/has-one-field.d.ts +64 -0
- package/esm/fields/has-one-field.js +57 -0
- package/esm/fields/has-one-field.js.map +1 -0
- package/esm/fields/index.d.ts +40 -0
- package/esm/fields/index.js +21 -0
- package/esm/fields/index.js.map +1 -0
- package/esm/fields/json-field.d.ts +14 -0
- package/esm/fields/json-field.js +17 -0
- package/esm/fields/json-field.js.map +1 -0
- package/esm/fields/number-field.d.ts +32 -0
- package/esm/fields/number-field.js +28 -0
- package/esm/fields/number-field.js.map +1 -0
- package/esm/fields/password-field.d.ts +21 -0
- package/esm/fields/password-field.js +71 -0
- package/esm/fields/password-field.js.map +1 -0
- package/esm/fields/radio-field.d.ts +14 -0
- package/esm/fields/radio-field.js +49 -0
- package/esm/fields/radio-field.js.map +1 -0
- package/esm/fields/relation-field.d.ts +20 -0
- package/esm/fields/relation-field.js +27 -0
- package/esm/fields/relation-field.js.map +1 -0
- package/esm/fields/sort-field.d.ts +16 -0
- package/esm/fields/sort-field.js +90 -0
- package/esm/fields/sort-field.js.map +1 -0
- package/esm/fields/string-field.d.ts +8 -0
- package/esm/fields/string-field.js +8 -0
- package/esm/fields/string-field.js.map +1 -0
- package/esm/fields/text-field.d.ts +8 -0
- package/esm/fields/text-field.js +8 -0
- package/esm/fields/text-field.js.map +1 -0
- package/esm/fields/time-field.d.ts +8 -0
- package/esm/fields/time-field.js +8 -0
- package/esm/fields/time-field.js.map +1 -0
- package/esm/fields/uid-field.d.ts +10 -0
- package/esm/fields/uid-field.js +27 -0
- package/esm/fields/uid-field.js.map +1 -0
- package/esm/fields/virtual-field.d.ts +8 -0
- package/esm/fields/virtual-field.js +8 -0
- package/esm/fields/virtual-field.js.map +1 -0
- package/esm/filter-parser.d.ts +27 -0
- package/esm/filter-parser.js +185 -0
- package/esm/filter-parser.js.map +1 -0
- package/esm/index.d.ts +15 -0
- package/esm/index.js +16 -0
- package/esm/index.js.map +1 -0
- package/esm/magic-attribute-model.d.ts +7 -0
- package/esm/magic-attribute-model.js +70 -0
- package/esm/magic-attribute-model.js.map +1 -0
- package/esm/mock-database.d.ts +22 -0
- package/esm/mock-database.js +34 -0
- package/esm/mock-database.js.map +1 -0
- package/esm/model-hook.d.ts +12 -0
- package/esm/model-hook.js +61 -0
- package/esm/model-hook.js.map +1 -0
- package/esm/model.d.ts +15 -0
- package/esm/model.js +80 -0
- package/esm/model.js.map +1 -0
- package/esm/operators/array.d.ts +26 -0
- package/esm/operators/array.js +105 -0
- package/esm/operators/array.js.map +1 -0
- package/esm/operators/association.d.ts +10 -0
- package/esm/operators/association.js +14 -0
- package/esm/operators/association.js.map +1 -0
- package/esm/operators/date.d.ts +34 -0
- package/esm/operators/date.js +35 -0
- package/esm/operators/date.js.map +1 -0
- package/esm/operators/empty.d.ts +28 -0
- package/esm/operators/empty.js +58 -0
- package/esm/operators/empty.js.map +1 -0
- package/esm/operators/index.d.ts +2 -0
- package/esm/operators/index.js +2 -0
- package/esm/operators/index.js.map +1 -0
- package/esm/operators/ne.d.ts +10 -0
- package/esm/operators/ne.js +12 -0
- package/esm/operators/ne.js.map +1 -0
- package/esm/operators/string.d.ts +21 -0
- package/esm/operators/string.js +35 -0
- package/esm/operators/string.js.map +1 -0
- package/esm/operators/utils.d.ts +4 -0
- package/esm/operators/utils.js +11 -0
- package/esm/operators/utils.js.map +1 -0
- package/esm/options-parser.d.ts +31 -0
- package/esm/options-parser.js +225 -0
- package/esm/options-parser.js.map +1 -0
- package/esm/playground.d.ts +1 -0
- package/esm/playground.js +53 -0
- package/esm/playground.js.map +1 -0
- package/esm/relation-repository/belongs-to-many-repository.d.ts +36 -0
- package/esm/relation-repository/belongs-to-many-repository.js +199 -0
- package/esm/relation-repository/belongs-to-many-repository.js.map +1 -0
- package/esm/relation-repository/belongs-to-repository.d.ts +17 -0
- package/esm/relation-repository/belongs-to-repository.js +4 -0
- package/esm/relation-repository/belongs-to-repository.js.map +1 -0
- package/esm/relation-repository/hasmany-repository.d.ts +23 -0
- package/esm/relation-repository/hasmany-repository.js +125 -0
- package/esm/relation-repository/hasmany-repository.js.map +1 -0
- package/esm/relation-repository/hasone-repository.d.ts +17 -0
- package/esm/relation-repository/hasone-repository.js +4 -0
- package/esm/relation-repository/hasone-repository.js.map +1 -0
- package/esm/relation-repository/multiple-relation-repository.d.ts +23 -0
- package/esm/relation-repository/multiple-relation-repository.js +149 -0
- package/esm/relation-repository/multiple-relation-repository.js.map +1 -0
- package/esm/relation-repository/relation-repository.d.ts +32 -0
- package/esm/relation-repository/relation-repository.js +93 -0
- package/esm/relation-repository/relation-repository.js.map +1 -0
- package/esm/relation-repository/single-relation-repository.d.ts +23 -0
- package/esm/relation-repository/single-relation-repository.js +96 -0
- package/esm/relation-repository/single-relation-repository.js.map +1 -0
- package/esm/relation-repository/types.d.ts +7 -0
- package/esm/relation-repository/types.js +2 -0
- package/esm/relation-repository/types.js.map +1 -0
- package/esm/repository.d.ts +165 -0
- package/esm/repository.js +276 -0
- package/esm/repository.js.map +1 -0
- package/esm/transaction-decorator.d.ts +1 -0
- package/esm/transaction-decorator.js +63 -0
- package/esm/transaction-decorator.js.map +1 -0
- package/esm/update-associations.d.ts +60 -0
- package/esm/update-associations.js +362 -0
- package/esm/update-associations.js.map +1 -0
- package/esm/update-guard.d.ts +26 -0
- package/esm/update-guard.js +122 -0
- package/esm/update-guard.js.map +1 -0
- package/lib/collection-importer.d.ts +7 -0
- package/lib/collection-importer.js +75 -0
- package/lib/collection-importer.js.map +1 -0
- package/lib/collection.d.ts +73 -0
- package/lib/collection.js +231 -0
- package/lib/collection.js.map +1 -0
- package/lib/database.d.ts +93 -43
- package/lib/database.js +277 -471
- package/lib/database.js.map +1 -1
- package/lib/fields/array-field.d.ts +11 -0
- package/lib/fields/array-field.js +30 -0
- package/lib/fields/array-field.js.map +1 -0
- package/lib/fields/belongs-to-field.d.ts +12 -0
- package/lib/fields/belongs-to-field.js +61 -0
- package/lib/fields/belongs-to-field.js.map +1 -0
- package/lib/fields/belongs-to-many-field.d.ts +11 -0
- package/lib/fields/belongs-to-many-field.js +59 -0
- package/lib/fields/belongs-to-many-field.js.map +1 -0
- package/lib/fields/boolean-field.d.ts +8 -0
- package/lib/fields/boolean-field.js +12 -0
- package/lib/fields/boolean-field.js.map +1 -0
- package/lib/fields/context-field.d.ts +13 -0
- package/lib/fields/context-field.js +50 -0
- package/lib/fields/context-field.js.map +1 -0
- package/lib/fields/date-field.d.ts +8 -0
- package/lib/fields/date-field.js +12 -0
- package/lib/fields/date-field.js.map +1 -0
- package/lib/fields/field.d.ts +37 -0
- package/lib/fields/field.js +81 -0
- package/lib/fields/field.js.map +1 -0
- package/lib/fields/has-inverse-field.d.ts +4 -0
- package/lib/fields/has-inverse-field.js +3 -0
- package/lib/fields/has-inverse-field.js.map +1 -0
- package/lib/fields/has-many-field.d.ts +64 -0
- package/lib/fields/has-many-field.js +62 -0
- package/lib/fields/has-many-field.js.map +1 -0
- package/lib/fields/has-one-field.d.ts +64 -0
- package/lib/fields/has-one-field.js +61 -0
- package/lib/fields/has-one-field.js.map +1 -0
- package/lib/fields/index.d.ts +40 -10
- package/lib/fields/index.js +31 -138
- package/lib/fields/index.js.map +1 -1
- package/lib/fields/json-field.d.ts +14 -0
- package/lib/fields/json-field.js +22 -0
- package/lib/fields/json-field.js.map +1 -0
- package/lib/fields/number-field.d.ts +32 -0
- package/lib/fields/number-field.js +36 -0
- package/lib/fields/number-field.js.map +1 -0
- package/lib/fields/password-field.d.ts +21 -0
- package/lib/fields/password-field.js +78 -0
- package/lib/fields/password-field.js.map +1 -0
- package/lib/fields/radio-field.d.ts +14 -0
- package/lib/fields/radio-field.js +53 -0
- package/lib/fields/radio-field.js.map +1 -0
- package/lib/fields/relation-field.d.ts +20 -0
- package/lib/fields/relation-field.js +31 -0
- package/lib/fields/relation-field.js.map +1 -0
- package/lib/fields/sort-field.d.ts +16 -0
- package/lib/fields/sort-field.js +94 -0
- package/lib/fields/sort-field.js.map +1 -0
- package/lib/fields/string-field.d.ts +8 -0
- package/lib/fields/string-field.js +12 -0
- package/lib/fields/string-field.js.map +1 -0
- package/lib/fields/text-field.d.ts +8 -0
- package/lib/fields/text-field.js +12 -0
- package/lib/fields/text-field.js.map +1 -0
- package/lib/fields/time-field.d.ts +8 -0
- package/lib/fields/time-field.js +12 -0
- package/lib/fields/time-field.js.map +1 -0
- package/lib/fields/uid-field.d.ts +10 -0
- package/lib/fields/uid-field.js +31 -0
- package/lib/fields/uid-field.js.map +1 -0
- package/lib/fields/virtual-field.d.ts +8 -0
- package/lib/fields/virtual-field.js +12 -0
- package/lib/fields/virtual-field.js.map +1 -0
- package/lib/filter-parser.d.ts +27 -0
- package/lib/filter-parser.js +191 -0
- package/lib/filter-parser.js.map +1 -0
- package/lib/index.d.ts +13 -6
- package/lib/index.js +27 -60
- package/lib/index.js.map +1 -1
- package/lib/magic-attribute-model.d.ts +7 -0
- package/lib/magic-attribute-model.js +77 -0
- package/lib/magic-attribute-model.js.map +1 -0
- package/lib/mock-database.d.ts +22 -0
- package/lib/mock-database.js +40 -0
- package/lib/mock-database.js.map +1 -0
- package/lib/model-hook.d.ts +12 -0
- package/lib/model-hook.js +68 -0
- package/lib/model-hook.js.map +1 -0
- package/lib/model.d.ts +11 -45
- package/lib/model.js +76 -452
- package/lib/model.js.map +1 -1
- package/lib/operators/array.d.ts +26 -0
- package/lib/operators/array.js +107 -0
- package/lib/operators/array.js.map +1 -0
- package/lib/operators/association.d.ts +10 -0
- package/lib/operators/association.js +16 -0
- package/lib/operators/association.js.map +1 -0
- package/lib/operators/date.d.ts +34 -0
- package/lib/operators/date.js +40 -0
- package/lib/operators/date.js.map +1 -0
- package/lib/operators/empty.d.ts +28 -0
- package/lib/operators/empty.js +82 -0
- package/lib/operators/empty.js.map +1 -0
- package/lib/operators/index.d.ts +2 -0
- package/lib/operators/index.js +4 -0
- package/lib/operators/index.js.map +1 -0
- package/lib/operators/ne.d.ts +10 -0
- package/lib/operators/ne.js +14 -0
- package/lib/operators/ne.js.map +1 -0
- package/lib/operators/string.d.ts +21 -0
- package/lib/operators/string.js +37 -0
- package/lib/operators/string.js.map +1 -0
- package/lib/operators/utils.d.ts +4 -0
- package/lib/operators/utils.js +16 -0
- package/lib/operators/utils.js.map +1 -0
- package/lib/options-parser.d.ts +31 -0
- package/lib/options-parser.js +232 -0
- package/lib/options-parser.js.map +1 -0
- package/lib/playground.d.ts +1 -0
- package/lib/playground.js +55 -0
- package/lib/playground.js.map +1 -0
- package/lib/relation-repository/belongs-to-many-repository.d.ts +36 -0
- package/lib/relation-repository/belongs-to-many-repository.js +206 -0
- package/lib/relation-repository/belongs-to-many-repository.js.map +1 -0
- package/lib/relation-repository/belongs-to-repository.d.ts +17 -0
- package/lib/relation-repository/belongs-to-repository.js +8 -0
- package/lib/relation-repository/belongs-to-repository.js.map +1 -0
- package/lib/relation-repository/hasmany-repository.d.ts +23 -0
- package/lib/relation-repository/hasmany-repository.js +129 -0
- package/lib/relation-repository/hasmany-repository.js.map +1 -0
- package/lib/relation-repository/hasone-repository.d.ts +17 -0
- package/lib/relation-repository/hasone-repository.js +8 -0
- package/lib/relation-repository/hasone-repository.js.map +1 -0
- package/lib/relation-repository/multiple-relation-repository.d.ts +23 -0
- package/lib/relation-repository/multiple-relation-repository.js +153 -0
- package/lib/relation-repository/multiple-relation-repository.js.map +1 -0
- package/lib/relation-repository/relation-repository.d.ts +32 -0
- package/lib/relation-repository/relation-repository.js +100 -0
- package/lib/relation-repository/relation-repository.js.map +1 -0
- package/lib/relation-repository/single-relation-repository.d.ts +23 -0
- package/lib/relation-repository/single-relation-repository.js +103 -0
- package/lib/relation-repository/single-relation-repository.js.map +1 -0
- package/lib/relation-repository/types.d.ts +7 -0
- package/lib/relation-repository/types.js +3 -0
- package/lib/relation-repository/types.js.map +1 -0
- package/lib/repository.d.ts +165 -0
- package/lib/repository.js +302 -0
- package/lib/repository.js.map +1 -0
- package/lib/transaction-decorator.d.ts +1 -0
- package/lib/transaction-decorator.js +70 -0
- package/lib/transaction-decorator.js.map +1 -0
- package/lib/update-associations.d.ts +60 -0
- package/lib/update-associations.js +374 -0
- package/lib/update-associations.js.map +1 -0
- package/lib/update-guard.d.ts +26 -0
- package/lib/update-guard.js +129 -0
- package/lib/update-guard.js.map +1 -0
- package/package.json +17 -5
- package/src/__tests__/collection-importer.test.ts +21 -0
- package/src/__tests__/collection.sortable.test.ts +65 -0
- package/src/__tests__/collection.test.ts +218 -0
- package/src/__tests__/database.import.test.ts +33 -0
- package/src/__tests__/database.test.ts +229 -0
- package/src/__tests__/field-options/hidden.test.ts +302 -0
- package/src/__tests__/field-options/sort-by.test.ts +220 -0
- package/src/__tests__/fields/belongs-to-field.test.ts +162 -0
- package/src/__tests__/fields/belongs-to-many-field.test.ts +61 -0
- package/src/__tests__/fields/context-field.test.ts +140 -0
- package/src/__tests__/fields/has-many-field.test.ts +152 -0
- package/src/__tests__/fields/has-one-field.test.ts +67 -0
- package/src/__tests__/fields/password-field.test.ts +30 -0
- package/src/__tests__/fields/sort-field.test.ts +133 -0
- package/src/__tests__/fields/string-field.test.ts +77 -0
- package/src/__tests__/filter-parser.test.ts +104 -0
- package/src/__tests__/fixtures/c0/a.ts +6 -0
- package/src/__tests__/fixtures/c1/b.ts +6 -0
- package/src/__tests__/fixtures/c2/a.ts +6 -0
- package/src/__tests__/fixtures/collections/delay-extend.ts +6 -0
- package/src/__tests__/fixtures/collections/delay-extend2.ts +6 -0
- package/src/__tests__/fixtures/collections/extend.ts +6 -0
- package/src/__tests__/fixtures/collections/extend2.ts +6 -0
- package/src/__tests__/fixtures/collections/posts.ts +4 -0
- package/src/__tests__/fixtures/collections/tags.js +4 -0
- package/src/__tests__/fixtures/collections/test.jpg +0 -0
- package/src/__tests__/fixtures/collections/user.json +9 -0
- package/src/__tests__/index.ts +1 -0
- package/src/__tests__/magic-attribute-model.test.ts +103 -0
- package/src/__tests__/model.test.ts +60 -0
- package/src/__tests__/operator/array-operator.test.ts +268 -0
- package/src/__tests__/operator/association-operator.test.ts +263 -0
- package/src/__tests__/operator/date-operator.test.ts +165 -0
- package/src/__tests__/operator/empty-operator.test.ts +77 -0
- package/src/__tests__/operator/ne.test.ts +33 -0
- package/src/__tests__/operator/string-operator.test.ts +62 -0
- package/src/__tests__/option-parser.test.ts +185 -0
- package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +697 -0
- package/src/__tests__/relation-repository/has-many-repository.test.ts +414 -0
- package/src/__tests__/relation-repository/hasone-repository.test.ts +77 -0
- package/src/__tests__/repository/count.test.ts +180 -0
- package/src/__tests__/repository/create.test.ts +163 -0
- package/src/__tests__/repository/destroy.test.ts +196 -0
- package/src/__tests__/repository/find.test.ts +247 -0
- package/src/__tests__/repository/update.test.ts +60 -0
- package/src/__tests__/repository.test.ts +438 -0
- package/src/__tests__/update-associations.test.ts +412 -0
- package/src/__tests__/update-guard.test.ts +376 -0
- package/src/collection-importer.ts +49 -0
- package/src/collection.ts +282 -0
- package/src/database.ts +340 -0
- package/src/fields/array-field.ts +35 -0
- package/src/fields/belongs-to-field.ts +76 -0
- package/src/fields/belongs-to-many-field.ts +77 -0
- package/src/fields/boolean-field.ts +12 -0
- package/src/fields/context-field.ts +45 -0
- package/src/fields/date-field.ts +12 -0
- package/src/fields/field.ts +105 -0
- package/src/fields/has-inverse-field.ts +5 -0
- package/src/fields/has-many-field.ts +143 -0
- package/src/fields/has-one-field.ts +136 -0
- package/src/fields/index.ts +72 -0
- package/src/fields/json-field.ts +25 -0
- package/src/fields/number-field.ts +52 -0
- package/src/fields/password-field.ts +72 -0
- package/src/fields/radio-field.ts +50 -0
- package/src/fields/relation-field.ts +37 -0
- package/src/fields/sort-field.ts +96 -0
- package/src/fields/string-field.ts +12 -0
- package/src/fields/text-field.ts +12 -0
- package/src/fields/time-field.ts +12 -0
- package/src/fields/uid-field.ts +24 -0
- package/src/fields/virtual-field.ts +12 -0
- package/src/filter-parser.ts +243 -0
- package/src/index.ts +16 -0
- package/src/magic-attribute-model.ts +62 -0
- package/src/mock-database.ts +42 -0
- package/src/model-hook.ts +69 -0
- package/src/model.ts +114 -0
- package/src/operators/array.ts +145 -0
- package/src/operators/association.ts +14 -0
- package/src/operators/date.ts +41 -0
- package/src/operators/empty.ts +75 -0
- package/src/operators/index.ts +8 -0
- package/src/operators/ne.ts +12 -0
- package/src/operators/string.ts +40 -0
- package/src/operators/utils.ts +13 -0
- package/src/options-parser.ts +285 -0
- package/src/playground.ts +52 -0
- package/src/relation-repository/belongs-to-many-repository.ts +240 -0
- package/src/relation-repository/belongs-to-repository.ts +23 -0
- package/src/relation-repository/hasmany-repository.ts +145 -0
- package/src/relation-repository/hasone-repository.ts +23 -0
- package/src/relation-repository/multiple-relation-repository.ts +198 -0
- package/src/relation-repository/relation-repository.ts +114 -0
- package/src/relation-repository/single-relation-repository.ts +99 -0
- package/src/relation-repository/types.ts +15 -0
- package/src/repository.ts +478 -0
- package/src/transaction-decorator.ts +58 -0
- package/src/update-associations.ts +478 -0
- package/src/update-guard.ts +167 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +5 -0
- package/examples/index.ts +0 -125
- package/examples/plugins/db-driven/index.ts +0 -25
- package/examples/plugins/db-driven/tables/fields.ts +0 -78
- package/examples/plugins/db-driven/tables/tables.ts +0 -53
- package/examples/tables/bar.js +0 -26
- package/examples/tables/comments.ts +0 -19
- package/examples/tables/foo.json +0 -3
- package/examples/tables/posts.ts +0 -28
- package/examples/tables/profiles.ts +0 -23
- package/examples/tables/tags.ts +0 -15
- package/examples/tables/users.ts +0 -34
- package/lib/database.d.ts.map +0 -1
- package/lib/fields/field-types.d.ts +0 -419
- package/lib/fields/field-types.d.ts.map +0 -1
- package/lib/fields/field-types.js +0 -1222
- package/lib/fields/field-types.js.map +0 -1
- package/lib/fields/index.d.ts.map +0 -1
- package/lib/fields/option-types.d.ts +0 -105
- package/lib/fields/option-types.d.ts.map +0 -1
- package/lib/fields/option-types.js +0 -18
- package/lib/fields/option-types.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/model.d.ts.map +0 -1
- package/lib/op.d.ts +0 -45
- package/lib/op.d.ts.map +0 -1
- package/lib/op.js +0 -225
- package/lib/op.js.map +0 -1
- package/lib/table.d.ts +0 -56
- package/lib/table.d.ts.map +0 -1
- package/lib/table.js +0 -456
- package/lib/table.js.map +0 -1
- package/lib/utils.d.ts +0 -26
- package/lib/utils.d.ts.map +0 -1
- package/lib/utils.js +0 -438
- package/lib/utils.js.map +0 -1
package/lib/op.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["op.ts"],"names":[],"mappings":"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","file":"op.js","sourcesContent":["import { Op, Utils, Sequelize } from 'sequelize';\nimport moment, { MomentInput } from 'moment';\n\nfunction toArray(value: any): any[] {\n if (value == null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\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\nconst op = new Map<string, typeof Op | Function>();\n\n// Sequelize 内置\nfor (const key in Op) {\n op.set(key, Op[key]);\n const val = Utils.underscoredIf(key, true);\n op.set(val, Op[key]);\n op.set(val.replace(/_/g, ''), Op[key]);\n}\n\n// 通用\n\n// 是否为空:数据库意义的 null\nop.set('$null', (value, { fieldPath, database }) => {\n // const field = database.getFieldByPath(fieldPath);\n // console.log({field});\n return { [Op.is]: null };\n});\nop.set('$notNull', () => ({ [Op.not]: null }));\n\nop.set('$isTruly', () => ({\n [Op.eq]: true,\n}));\nop.set('$isFalsy', () => ({\n [Op.or]: [\n {\n [Op.eq]: false,\n },\n {\n [Op.is]: null,\n },\n ],\n}));\n\n// 字符串\n\n// 包含:指对应字段的值包含某个子串\nop.set('$includes', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.iLike : Op.like]: `%${value}%`,\n}));\n// 不包含:指对应字段的值不包含某个子串(慎用:性能问题)\nop.set('$notIncludes', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.notILike : Op.notLike]: `%${value}%`,\n}));\n// 以之起始\nop.set('$startsWith', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.iLike : Op.like]: `${value}%`,\n}));\n// 不以之起始\nop.set('$notStartsWith', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.notILike : Op.notLike]: `${value}%`,\n}));\n// 以之结束\nop.set('$endsWith', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.iLike : Op.like]: `%${value}`,\n}));\n// 不以之结束\nop.set('$notEndsWith', (value: string, { dialect }) => ({\n [dialect === 'postgres' ? Op.notILike : Op.notLike]: `%${value}`,\n}));\n\n// 仅日期\n\n// 在某日\nop.set('$dateOn', (value: string) => ({\n [Op.and]: [{ [Op.gte]: stringToDate(value) }, { [Op.lt]: getNextDay(value) }],\n}));\n// 不在某日\nop.set('$dateNotOn', (value: string) => ({\n [Op.or]: [{ [Op.lt]: stringToDate(value) }, { [Op.gte]: getNextDay(value) }],\n}));\n// 某日前\nop.set('$dateBefore', (value: string) => ({ [Op.lt]: stringToDate(value) }));\n// 某日后\nop.set('$dateAfter', (value: string) => ({ [Op.gte]: getNextDay(value) }));\n// 不早于(含当天)\nop.set('$dateNotBefore', (value: string) => ({\n [Op.gte]: stringToDate(value),\n}));\n// 不晚于(含当天)\nop.set('$dateNotAfter', (value: string) => ({ [Op.lt]: getNextDay(value) }));\n// 在期间\nop.set('$dateBetween', ([from, to]: string[]) => ({\n [Op.and]: [{ [Op.gte]: stringToDate(from) }, { [Op.lt]: getNextDay(to) }],\n}));\n// 不在期间\nop.set('$dateNotBetween', ([from, to]: string[]) => ({\n [Op.or]: [{ [Op.lt]: stringToDate(from) }, { [Op.gte]: getNextDay(to) }],\n}));\n\n// 多选(JSON)类型\n\n// 包含组中任意值(命名来源:`Array.prototype.some`)\nop.set('$anyOf', (values: any[], options) => {\n if (!values) {\n return Sequelize.literal('');\n }\n values = Array.isArray(values) ? values : [values];\n if (values.length === 0) {\n return Sequelize.literal('');\n }\n const { field, fieldPath } = options;\n const column = fieldPath\n .split('.')\n .map((name) => `\"${name}\"`)\n .join('.');\n const sql = values\n .map((value) => `(${column})::jsonb @> '${JSON.stringify(value)}'`)\n .join(' OR ');\n return Sequelize.literal(sql);\n});\n// 包含组中所有值\nop.set('$allOf', (values: any) => ({ [Op.contains]: toArray(values) }));\n// TODO(bug): 不包含组中任意值\nop.set('$noneOf', (values: any[], options) => {\n if (!values) {\n return Sequelize.literal('');\n }\n values = Array.isArray(values) ? values : [values];\n if (values.length === 0) {\n return Sequelize.literal('');\n }\n const { field, fieldPath } = options;\n const column = fieldPath\n .split('.')\n .map((name) => `\"${name}\"`)\n .join('.');\n const sql = values\n .map((value) => `(${column})::jsonb @> '${JSON.stringify(value)}'`)\n .join(' OR ');\n return Sequelize.literal(`not (${sql})`);\n});\n// 与组中值匹配\nop.set('$match', (values: any[], options) => {\n const array = toArray(values);\n if (values.length === 0) {\n return Sequelize.literal('');\n }\n const { field, fieldPath } = options;\n const column = fieldPath\n .split('.')\n .map((name) => `\"${name}\"`)\n .join('.');\n const sql = `(${column})::jsonb @> '${JSON.stringify(\n array,\n )}' AND (${column})::jsonb <@ '${JSON.stringify(array)}'`;\n return Sequelize.literal(sql);\n});\nop.set('$notMatch', (values: any[], options) => {\n const array = toArray(values);\n if (values.length === 0) {\n return Sequelize.literal('');\n }\n const { field, fieldPath } = options;\n const column = fieldPath\n .split('.')\n .map((name) => `\"${name}\"`)\n .join('.');\n const sql = `(${column})::jsonb @> '${JSON.stringify(\n array,\n )}' AND (${column})::jsonb <@ '${JSON.stringify(array)}'`;\n return Sequelize.literal(`not (${sql})`);\n // return Sequelize.literal(`(not (${sql})) AND ${column} IS NULL`);\n});\n\nexport default class Operator {\n public static get(key: string) {\n return op.get(key);\n }\n\n public static has(key: string) {\n return op.has(key);\n }\n\n public static register(key: string, fn: Function) {\n op.set(key, fn);\n }\n}\n"]}
|
package/lib/table.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { InitOptions, ModelAttributes, ModelOptions, ModelIndexesOptions, SyncOptions } from 'sequelize';
|
|
2
|
-
import { FieldOptions, Relation } from './fields';
|
|
3
|
-
import Database from './database';
|
|
4
|
-
import { Model, ModelCtor } from './model';
|
|
5
|
-
import merge from 'deepmerge';
|
|
6
|
-
export interface MergeOptions extends merge.Options {
|
|
7
|
-
}
|
|
8
|
-
export declare function registerModel(key: string, model: any): void;
|
|
9
|
-
export declare function registerModels(models: any): void;
|
|
10
|
-
export declare function getRegisteredModel(key: any): any;
|
|
11
|
-
export interface TableOptions extends Omit<ModelOptions<Model>, 'name' | 'modelName'> {
|
|
12
|
-
name: string;
|
|
13
|
-
model?: ModelCtor<Model> | string;
|
|
14
|
-
fields?: Array<FieldOptions>;
|
|
15
|
-
[key: string]: any;
|
|
16
|
-
}
|
|
17
|
-
export interface TableContext {
|
|
18
|
-
database: Database;
|
|
19
|
-
}
|
|
20
|
-
export declare type Reinitialize = boolean | 'modelOnly';
|
|
21
|
-
export declare class Table {
|
|
22
|
-
protected database: Database;
|
|
23
|
-
protected options: TableOptions;
|
|
24
|
-
protected fields: Map<string, any>;
|
|
25
|
-
protected modelAttributes: ModelAttributes;
|
|
26
|
-
protected modelOptions: InitOptions;
|
|
27
|
-
protected associations: Map<string, Relation>;
|
|
28
|
-
protected associating: Map<string, Relation>;
|
|
29
|
-
protected indexes: Map<string, any>;
|
|
30
|
-
protected Model: ModelCtor<Model>;
|
|
31
|
-
protected defaultModel: ModelCtor<Model>;
|
|
32
|
-
isThroughTable: boolean;
|
|
33
|
-
relationTables: Set<string>;
|
|
34
|
-
get sortable(): boolean;
|
|
35
|
-
constructor(options: TableOptions, context: TableContext);
|
|
36
|
-
initSortable(): void;
|
|
37
|
-
modelInit(reinitialize?: Reinitialize): void;
|
|
38
|
-
getName(): string;
|
|
39
|
-
getTableName(): string;
|
|
40
|
-
getOptions(key?: any): TableOptions;
|
|
41
|
-
getModel(): ModelCtor<Model>;
|
|
42
|
-
getModelAttributes(): ModelAttributes;
|
|
43
|
-
getModelOptions(): InitOptions;
|
|
44
|
-
getRelatedTableNames(): Set<string>;
|
|
45
|
-
getAssociations(): Map<string, Relation>;
|
|
46
|
-
getFields(): Map<string, any>;
|
|
47
|
-
setFields(fields: Array<FieldOptions>): void;
|
|
48
|
-
hasField(name: string): boolean;
|
|
49
|
-
getField(name: string): any;
|
|
50
|
-
addField(options: FieldOptions, reinitialize?: Reinitialize): any;
|
|
51
|
-
addIndex(indexOptions: string | ModelIndexesOptions, reinitialize?: Reinitialize): void;
|
|
52
|
-
addIndexes(indexes: Array<string | ModelIndexesOptions>, reinitialize?: Reinitialize): void;
|
|
53
|
-
extend(options: TableOptions, mergeOptions?: MergeOptions): void;
|
|
54
|
-
sync(options?: SyncOptions): Promise<void>;
|
|
55
|
-
}
|
|
56
|
-
export default Table;
|
package/lib/table.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,mBAAmB,EAEnB,WAAW,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAEL,YAAY,EACZ,QAAQ,EAIT,MAAM,UAAU,CAAC;AAClB,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,MAAM,WAAW,CAAC;AAE9B,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,OAAO;CAAG;AAItD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAEpD;AAED,wBAAgB,cAAc,CAAC,MAAM,KAAA,QAMpC;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,KAAA,OAKrC;AAED,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAUvD,IAAI,EAAE,MAAM,CAAC;IAKb,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAKlC,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAK7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAKD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AASD,oBAAY,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;AAOjD,qBAAa,KAAK;IAChB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE7B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC;IAEhC,SAAS,CAAC,MAAM,mBAA0B;IAE1C,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAE3C,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IAKpC,SAAS,CAAC,YAAY,wBAA+B;IAKrD,SAAS,CAAC,WAAW,wBAA+B;IAKpD,SAAS,CAAC,OAAO,mBAA0B;IAE3C,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAElC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAKlC,cAAc,EAAE,OAAO,CAAS;IAEhC,cAAc,cAAqB;IAE1C,IAAI,QAAQ,IAAI,OAAO,CAItB;gBAEW,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY;IAoBjD,YAAY;IAkBZ,SAAS,CAAC,YAAY,GAAE,YAAoB;IA6C5C,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAQtB,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY;IAInC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC;IAI5B,kBAAkB,IAAI,eAAe;IAIrC,eAAe,IAAI,WAAW;IAqB9B,oBAAoB,IAAI,GAAG,CAAC,MAAM,CAAC;IAcnC,eAAe;IAIf,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC;IAYrC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAIrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAUrB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,GAAE,YAAmB;IAsDjE,QAAQ,CACb,YAAY,EAAE,MAAM,GAAG,mBAAmB,EAC1C,YAAY,GAAE,YAAmB;IAyB5B,UAAU,CACf,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAC5C,YAAY,GAAE,YAAmB;IAa5B,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,GAAE,YAAiB;IAyBvD,IAAI,CAAC,OAAO,GAAE,WAAgB;CAU5C;AAED,eAAe,KAAK,CAAC","file":"table.d.ts","sourcesContent":["import {\n InitOptions,\n ModelAttributes,\n ModelOptions,\n ModelIndexesOptions,\n Utils,\n SyncOptions,\n} from 'sequelize';\nimport {\n buildField,\n FieldOptions,\n Relation,\n BELONGSTO,\n BELONGSTOMANY,\n SORT,\n} from './fields';\nimport Database from './database';\nimport { Model, ModelCtor } from './model';\nimport _ from 'lodash';\nimport merge from 'deepmerge';\n\nexport interface MergeOptions extends merge.Options {}\n\nconst registeredModels = new Map<string, any>();\n\nexport function registerModel(key: string, model: any) {\n registeredModels.set(key, model);\n}\n\nexport function registerModels(models) {\n for (const key in models) {\n if (models.hasOwnProperty(key)) {\n registerModel(key, models[key]);\n }\n }\n}\n\n// TODO: 判断如果 key 是 model 直接返回\nexport function getRegisteredModel(key) {\n if (typeof key === 'string') {\n return registeredModels.get(key);\n }\n return key;\n}\n\nexport interface TableOptions\n extends Omit<ModelOptions<Model>, 'name' | 'modelName'> {\n /**\n * 唯一标识,与 ModelOptions 的 name 有区别\n *\n * 注意:name 可用于初始化 tableName、modelName,但是 tableName 和 modelName 可能有所不同\n * name 主要用于获取指定的 tables 和 models\n * 如果没有特殊指定 tableName 时,name、tableName、modelName 都是一个值\n *\n * TODO: name, tableName, modelName,freezeTableName,underscored,单复数等等情况还比较混乱\n */\n name: string;\n\n /**\n * 自定义 model\n */\n model?: ModelCtor<Model> | string;\n\n /**\n * 字段配置\n */\n fields?: Array<FieldOptions>;\n\n /**\n * 其他的一些情况\n */\n [key: string]: any;\n}\n\n/**\n * 上下文,Tabel 配置需要的其他变量\n */\nexport interface TableContext {\n database: Database;\n}\n\n/**\n * 是否重新初始化 Model。配置更新时,需要重新初始化 model。\n *\n * - reinitialize = false 只执行 Model.init\n * - reinitialize = true 重新初始化 Model 并执行 Model.init 和 Model.associate\n * - reinitialize = modelOnly 只初始化 Model 并执行 Model.init\n */\nexport type Reinitialize = boolean | 'modelOnly';\n\n/**\n * 表配置\n *\n * 用于处理相关 Model 的配置\n */\nexport class Table {\n protected database: Database;\n\n protected options: TableOptions;\n\n protected fields = new Map<string, any>();\n\n protected modelAttributes: ModelAttributes;\n\n protected modelOptions: InitOptions;\n\n /**\n * 全部关系字段的配置\n */\n protected associations = new Map<string, Relation>();\n\n /**\n * 待建立关系的 association\n */\n protected associating = new Map<string, Relation>();\n\n /**\n * 索引\n */\n protected indexes = new Map<string, any>();\n\n protected Model: ModelCtor<Model>;\n\n protected defaultModel: ModelCtor<Model>;\n\n /**\n * 是否是中间表\n */\n public isThroughTable: boolean = false;\n\n public relationTables = new Set<string>();\n\n get sortable(): boolean {\n return Array.from(this.fields.values()).some(\n (field) => field instanceof SORT,\n );\n }\n\n constructor(options: TableOptions, context: TableContext) {\n const { database } = context;\n database.runHooks('beforeTableInit', options);\n database.emit('beforeTableInit', options);\n const { model, fields = [], indexes = [], sortable } = options;\n this.options = options;\n this.database = database;\n // 初始化的时候获取\n this.defaultModel = getRegisteredModel(model);\n this.modelAttributes = {};\n // 在 set fields 之前 model init 的原因是因为关系字段可能需要用到 model 的相关配置\n // @ts-ignore\n this.addIndexes(indexes, 'modelOnly');\n // this.modelInit('modelOnly');\n this.setFields(fields);\n this.initSortable();\n database.emit('afterTableInit', this);\n database.runHooks('afterTableInit', this);\n }\n\n public initSortable() {\n const { sortable } = this.options;\n if (!sortable) {\n return;\n }\n if (typeof sortable === 'string') {\n this.addField({\n type: 'sort',\n name: sortable,\n });\n } else if (typeof sortable === 'object') {\n this.addField({\n ...sortable,\n type: 'sort',\n });\n }\n }\n\n public modelInit(reinitialize: Reinitialize = false) {\n if (reinitialize || !this.Model) {\n let DefaultModel = this.defaultModel;\n this.Model = DefaultModel\n ? class extends DefaultModel {}\n : class extends Model {};\n this.Model.database = this.database;\n // 关系的建立是在 model.init 之后,在配置中表字段(Column)和关系(Relation)都在 fields,\n // 所以需要单独提炼出 associations 字段,并在 Model.init 之后执行 Model.associate\n // @ts-ignore\n this.Model.associate = (models: { [key: string]: ModelCtor<Model> }) => {\n for (const [key, association] of this.associating) {\n const { type, target } = association.getAssociationArguments();\n if (this.database.isDefined(target)) {\n const TargetModel = this.database.getModel(target);\n // 如果关系表在之后才定义,未设置 targetKey 时,targetKey 默认值需要在 target model 初始化之后才能取到\n if (\n association instanceof BELONGSTO ||\n association instanceof BELONGSTOMANY\n ) {\n association.updateOptionsAfterTargetModelBeDefined();\n }\n this.Model[type](TargetModel, association.getAssociationOptions());\n // 建立关系之后,需要删除待处理的 associating,避免重复和提高效率\n this.associating.delete(key);\n }\n }\n };\n }\n\n this.Model.init(this.getModelAttributes(), this.getModelOptions());\n\n if (reinitialize === true) {\n this.associating = new Map(this.associations);\n // 需要额外处理 associating 的情况\n // 建立表关系需要遍历多个 Model,所以在这里需要标记哪些已定义的 Model 需要建立表关系\n if (this.associating.size > 0) {\n this.database.associating.add(this.options.name);\n } else {\n this.database.associating.delete(this.options.name);\n }\n this.database.associate();\n }\n }\n\n public getName(): string {\n return this.options.name;\n }\n\n public getTableName(): string {\n return this.options.name;\n }\n\n /**\n *\n * @param key 获取数据表配置,也可以指定 key\n */\n public getOptions(key?: any): TableOptions {\n return key ? _.get(this.options, key) : this.options;\n }\n\n public getModel(): ModelCtor<Model> {\n return this.database.getModel(this.getName());\n }\n\n public getModelAttributes(): ModelAttributes {\n return this.modelAttributes;\n }\n\n public getModelOptions(): InitOptions {\n const { name, underscored = true, ...restOptions } = this.options;\n const hooks =\n _.get(this.getModel(), 'options.hooks') || this.options.hooks || {};\n return {\n underscored,\n modelName: name,\n tableName: name,\n sequelize: this.database.sequelize,\n createdAt: Utils.underscoredIf('createdAt', underscored),\n updatedAt: Utils.underscoredIf('updatedAt', underscored),\n indexes: Array.from(this.indexes.values()),\n // freezeTableName: true,\n ..._.omit(restOptions, ['model', 'fields', 'indexes']),\n hooks,\n };\n }\n\n /**\n * 获取相关 table names,一般用于 sync\n */\n public getRelatedTableNames(): Set<string> {\n const names = new Set<string>();\n this.options.name && names.add(this.options.name);\n for (const association of this.associations.values()) {\n const target = association.getTarget();\n target && names.add(target);\n if (association instanceof BELONGSTOMANY) {\n const throughName = association.getThroughName();\n throughName && names.add(throughName);\n }\n }\n return names;\n }\n\n public getAssociations() {\n return this.associations;\n }\n\n public getFields() {\n return this.fields;\n }\n\n public setFields(fields: Array<FieldOptions>) {\n this.fields.clear();\n this.associating.clear();\n this.associations.clear();\n\n for (const filed of fields) {\n this.addField(filed, false);\n }\n\n this.modelInit(true);\n }\n\n public hasField(name: string) {\n return this.fields.has(name);\n }\n\n public getField(name: string) {\n return this.fields.get(name);\n }\n\n /**\n * 添加字段\n *\n * @param options\n * @param reinitialize\n */\n public addField(options: FieldOptions, reinitialize: Reinitialize = true) {\n this.database.runHooks('beforeAddField', options, this);\n this.database.emit('beforeAddField', options, this);\n const { name, index } = options;\n const field = buildField(options, {\n sourceTable: this,\n database: this.database,\n });\n // 添加字段后 table.options 中的 fields 并不会更新,这导致 table.getOptions() 拿不到最新的字段配置\n // 所以在同时更新 table.options.fields 数组\n if (!this.options.fields) {\n this.options.fields = [];\n }\n const existIndex = this.options.fields.findIndex(\n (field) => field.name === name,\n );\n if (existIndex !== -1) {\n this.options.fields.splice(existIndex, 1, options);\n } else {\n this.options.fields.push(options);\n }\n\n this.fields.set(name, field);\n\n if (field instanceof Relation) {\n // 关系字段先放到 associating 里待处理,等相关 target model 初始化之后,再通过 associate 建立关系\n this.associating.set(name, field);\n this.associations.set(name, field);\n } else {\n if (index === true) {\n this.addIndex(name, false);\n } else if (typeof index === 'object') {\n this.addIndex(\n {\n fields: [name],\n ...index,\n },\n false,\n );\n }\n this.modelAttributes[name] = field.getAttributeOptions();\n }\n this.modelInit(reinitialize);\n this.database.emit('afterAddField', field, this);\n this.database.runHooks('afterAddField', field, this);\n return field;\n }\n\n /**\n * 添加索引\n *\n * @param indexOptions\n * @param reinitialize\n */\n public addIndex(\n indexOptions: string | ModelIndexesOptions,\n reinitialize: Reinitialize = true,\n ) {\n const options =\n typeof indexOptions === 'string'\n ? {\n fields: [indexOptions],\n }\n : indexOptions;\n // @ts-ignore\n const index = Utils.nameIndex(options, this.options.name);\n console.log(this.options, { index, options });\n this.indexes.set(index.name, {\n type: '',\n parser: null,\n ...index,\n });\n this.modelInit(reinitialize);\n }\n\n /**\n * 批量添加索引\n *\n * @param indexes\n * @param reinitialize\n */\n public addIndexes(\n indexes: Array<string | ModelIndexesOptions>,\n reinitialize: Reinitialize = true,\n ) {\n for (const index in indexes) {\n this.addIndex(indexes[index], false);\n }\n this.modelInit(reinitialize);\n }\n\n /**\n * 扩展(实验性 API)\n *\n * @param options\n */\n public extend(options: TableOptions, mergeOptions: MergeOptions = {}) {\n const { fields = [], indexes = [], model, ...restOptions } = options;\n if (model) {\n this.defaultModel = getRegisteredModel(model);\n }\n const { arrayMerge = (target: any[], source: any[]) => source } =\n mergeOptions;\n this.options = merge(this.options, restOptions, {\n arrayMerge,\n ...mergeOptions,\n });\n for (const key in fields) {\n this.addField(fields[key], false);\n }\n this.initSortable();\n // @ts-ignore\n this.addIndexes(indexes, false);\n this.modelInit(true);\n }\n\n /**\n * 相关表字段更新\n *\n * @param options\n */\n public async sync(options: SyncOptions = {}) {\n const tables = [];\n for (const name of this.getRelatedTableNames()) {\n tables.push(name);\n }\n return this.database.sync({\n ...options,\n tables,\n });\n }\n}\n\nexport default Table;\n"]}
|
package/lib/table.js
DELETED
|
@@ -1,456 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _react() {
|
|
4
|
-
const data = _interopRequireDefault(require("react"));
|
|
5
|
-
|
|
6
|
-
_react = function _react() {
|
|
7
|
-
return data;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
return data;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
|
|
15
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
16
|
-
|
|
17
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
|
-
|
|
19
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
20
|
-
|
|
21
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
22
|
-
|
|
23
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
24
|
-
|
|
25
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
26
|
-
|
|
27
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
28
|
-
|
|
29
|
-
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
30
|
-
function adopt(value) {
|
|
31
|
-
return value instanceof P ? value : new P(function (resolve) {
|
|
32
|
-
resolve(value);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
37
|
-
function fulfilled(value) {
|
|
38
|
-
try {
|
|
39
|
-
step(generator.next(value));
|
|
40
|
-
} catch (e) {
|
|
41
|
-
reject(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function rejected(value) {
|
|
46
|
-
try {
|
|
47
|
-
step(generator["throw"](value));
|
|
48
|
-
} catch (e) {
|
|
49
|
-
reject(e);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function step(result) {
|
|
54
|
-
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
62
|
-
var t = {};
|
|
63
|
-
|
|
64
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
65
|
-
|
|
66
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
67
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
68
|
-
}
|
|
69
|
-
return t;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
73
|
-
return mod && mod.__esModule ? mod : {
|
|
74
|
-
"default": mod
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
Object.defineProperty(exports, "__esModule", {
|
|
79
|
-
value: true
|
|
80
|
-
});
|
|
81
|
-
exports.Table = exports.getRegisteredModel = exports.registerModels = exports.registerModel = void 0;
|
|
82
|
-
|
|
83
|
-
const sequelize_1 = require("sequelize");
|
|
84
|
-
|
|
85
|
-
const fields_1 = require("./fields");
|
|
86
|
-
|
|
87
|
-
const model_1 = require("./model");
|
|
88
|
-
|
|
89
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
90
|
-
|
|
91
|
-
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
92
|
-
|
|
93
|
-
const registeredModels = new Map();
|
|
94
|
-
|
|
95
|
-
function registerModel(key, model) {
|
|
96
|
-
registeredModels.set(key, model);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
exports.registerModel = registerModel;
|
|
100
|
-
|
|
101
|
-
function registerModels(models) {
|
|
102
|
-
for (const key in models) {
|
|
103
|
-
if (models.hasOwnProperty(key)) {
|
|
104
|
-
registerModel(key, models[key]);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
exports.registerModels = registerModels;
|
|
110
|
-
|
|
111
|
-
function getRegisteredModel(key) {
|
|
112
|
-
if (typeof key === 'string') {
|
|
113
|
-
return registeredModels.get(key);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return key;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
exports.getRegisteredModel = getRegisteredModel;
|
|
120
|
-
|
|
121
|
-
class Table {
|
|
122
|
-
constructor(options, context) {
|
|
123
|
-
this.fields = new Map();
|
|
124
|
-
this.associations = new Map();
|
|
125
|
-
this.associating = new Map();
|
|
126
|
-
this.indexes = new Map();
|
|
127
|
-
this.isThroughTable = false;
|
|
128
|
-
this.relationTables = new Set();
|
|
129
|
-
const database = context.database;
|
|
130
|
-
database.runHooks('beforeTableInit', options);
|
|
131
|
-
database.emit('beforeTableInit', options);
|
|
132
|
-
const model = options.model,
|
|
133
|
-
_options$fields = options.fields,
|
|
134
|
-
fields = _options$fields === void 0 ? [] : _options$fields,
|
|
135
|
-
_options$indexes = options.indexes,
|
|
136
|
-
indexes = _options$indexes === void 0 ? [] : _options$indexes,
|
|
137
|
-
sortable = options.sortable;
|
|
138
|
-
this.options = options;
|
|
139
|
-
this.database = database;
|
|
140
|
-
this.defaultModel = getRegisteredModel(model);
|
|
141
|
-
this.modelAttributes = {};
|
|
142
|
-
this.addIndexes(indexes, 'modelOnly');
|
|
143
|
-
this.setFields(fields);
|
|
144
|
-
this.initSortable();
|
|
145
|
-
database.emit('afterTableInit', this);
|
|
146
|
-
database.runHooks('afterTableInit', this);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
get sortable() {
|
|
150
|
-
return Array.from(this.fields.values()).some(field => field instanceof fields_1.SORT);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
initSortable() {
|
|
154
|
-
const sortable = this.options.sortable;
|
|
155
|
-
|
|
156
|
-
if (!sortable) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (typeof sortable === 'string') {
|
|
161
|
-
this.addField({
|
|
162
|
-
type: 'sort',
|
|
163
|
-
name: sortable
|
|
164
|
-
});
|
|
165
|
-
} else if (typeof sortable === 'object') {
|
|
166
|
-
this.addField(Object.assign(Object.assign({}, sortable), {
|
|
167
|
-
type: 'sort'
|
|
168
|
-
}));
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
modelInit(reinitialize = false) {
|
|
173
|
-
if (reinitialize || !this.Model) {
|
|
174
|
-
let DefaultModel = this.defaultModel;
|
|
175
|
-
this.Model = DefaultModel ? class extends DefaultModel {} : class extends model_1.Model {};
|
|
176
|
-
this.Model.database = this.database;
|
|
177
|
-
|
|
178
|
-
this.Model.associate = models => {
|
|
179
|
-
var _iterator = _createForOfIteratorHelper(this.associating),
|
|
180
|
-
_step;
|
|
181
|
-
|
|
182
|
-
try {
|
|
183
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
184
|
-
const _step$value = _slicedToArray(_step.value, 2),
|
|
185
|
-
key = _step$value[0],
|
|
186
|
-
association = _step$value[1];
|
|
187
|
-
|
|
188
|
-
const _association$getAssoc = association.getAssociationArguments(),
|
|
189
|
-
type = _association$getAssoc.type,
|
|
190
|
-
target = _association$getAssoc.target;
|
|
191
|
-
|
|
192
|
-
if (this.database.isDefined(target)) {
|
|
193
|
-
const TargetModel = this.database.getModel(target);
|
|
194
|
-
|
|
195
|
-
if (association instanceof fields_1.BELONGSTO || association instanceof fields_1.BELONGSTOMANY) {
|
|
196
|
-
association.updateOptionsAfterTargetModelBeDefined();
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
this.Model[type](TargetModel, association.getAssociationOptions());
|
|
200
|
-
this.associating.delete(key);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
} catch (err) {
|
|
204
|
-
_iterator.e(err);
|
|
205
|
-
} finally {
|
|
206
|
-
_iterator.f();
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
this.Model.init(this.getModelAttributes(), this.getModelOptions());
|
|
212
|
-
|
|
213
|
-
if (reinitialize === true) {
|
|
214
|
-
this.associating = new Map(this.associations);
|
|
215
|
-
|
|
216
|
-
if (this.associating.size > 0) {
|
|
217
|
-
this.database.associating.add(this.options.name);
|
|
218
|
-
} else {
|
|
219
|
-
this.database.associating.delete(this.options.name);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
this.database.associate();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
getName() {
|
|
227
|
-
return this.options.name;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
getTableName() {
|
|
231
|
-
return this.options.name;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
getOptions(key) {
|
|
235
|
-
return key ? lodash_1.default.get(this.options, key) : this.options;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
getModel() {
|
|
239
|
-
return this.database.getModel(this.getName());
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
getModelAttributes() {
|
|
243
|
-
return this.modelAttributes;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
getModelOptions() {
|
|
247
|
-
const _a = this.options,
|
|
248
|
-
name = _a.name,
|
|
249
|
-
_a$underscored = _a.underscored,
|
|
250
|
-
underscored = _a$underscored === void 0 ? true : _a$underscored,
|
|
251
|
-
restOptions = __rest(_a, ["name", "underscored"]);
|
|
252
|
-
|
|
253
|
-
const hooks = lodash_1.default.get(this.getModel(), 'options.hooks') || this.options.hooks || {};
|
|
254
|
-
return Object.assign(Object.assign({
|
|
255
|
-
underscored,
|
|
256
|
-
modelName: name,
|
|
257
|
-
tableName: name,
|
|
258
|
-
sequelize: this.database.sequelize,
|
|
259
|
-
createdAt: sequelize_1.Utils.underscoredIf('createdAt', underscored),
|
|
260
|
-
updatedAt: sequelize_1.Utils.underscoredIf('updatedAt', underscored),
|
|
261
|
-
indexes: Array.from(this.indexes.values())
|
|
262
|
-
}, lodash_1.default.omit(restOptions, ['model', 'fields', 'indexes'])), {
|
|
263
|
-
hooks
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
getRelatedTableNames() {
|
|
268
|
-
const names = new Set();
|
|
269
|
-
this.options.name && names.add(this.options.name);
|
|
270
|
-
|
|
271
|
-
var _iterator2 = _createForOfIteratorHelper(this.associations.values()),
|
|
272
|
-
_step2;
|
|
273
|
-
|
|
274
|
-
try {
|
|
275
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
276
|
-
const association = _step2.value;
|
|
277
|
-
const target = association.getTarget();
|
|
278
|
-
target && names.add(target);
|
|
279
|
-
|
|
280
|
-
if (association instanceof fields_1.BELONGSTOMANY) {
|
|
281
|
-
const throughName = association.getThroughName();
|
|
282
|
-
throughName && names.add(throughName);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
} catch (err) {
|
|
286
|
-
_iterator2.e(err);
|
|
287
|
-
} finally {
|
|
288
|
-
_iterator2.f();
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
return names;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
getAssociations() {
|
|
295
|
-
return this.associations;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
getFields() {
|
|
299
|
-
return this.fields;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
setFields(fields) {
|
|
303
|
-
this.fields.clear();
|
|
304
|
-
this.associating.clear();
|
|
305
|
-
this.associations.clear();
|
|
306
|
-
|
|
307
|
-
var _iterator3 = _createForOfIteratorHelper(fields),
|
|
308
|
-
_step3;
|
|
309
|
-
|
|
310
|
-
try {
|
|
311
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
312
|
-
const filed = _step3.value;
|
|
313
|
-
this.addField(filed, false);
|
|
314
|
-
}
|
|
315
|
-
} catch (err) {
|
|
316
|
-
_iterator3.e(err);
|
|
317
|
-
} finally {
|
|
318
|
-
_iterator3.f();
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
this.modelInit(true);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
hasField(name) {
|
|
325
|
-
return this.fields.has(name);
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
getField(name) {
|
|
329
|
-
return this.fields.get(name);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
addField(options, reinitialize = true) {
|
|
333
|
-
this.database.runHooks('beforeAddField', options, this);
|
|
334
|
-
this.database.emit('beforeAddField', options, this);
|
|
335
|
-
const name = options.name,
|
|
336
|
-
index = options.index;
|
|
337
|
-
const field = (0, fields_1.buildField)(options, {
|
|
338
|
-
sourceTable: this,
|
|
339
|
-
database: this.database
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
if (!this.options.fields) {
|
|
343
|
-
this.options.fields = [];
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
const existIndex = this.options.fields.findIndex(field => field.name === name);
|
|
347
|
-
|
|
348
|
-
if (existIndex !== -1) {
|
|
349
|
-
this.options.fields.splice(existIndex, 1, options);
|
|
350
|
-
} else {
|
|
351
|
-
this.options.fields.push(options);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
this.fields.set(name, field);
|
|
355
|
-
|
|
356
|
-
if (field instanceof fields_1.Relation) {
|
|
357
|
-
this.associating.set(name, field);
|
|
358
|
-
this.associations.set(name, field);
|
|
359
|
-
} else {
|
|
360
|
-
if (index === true) {
|
|
361
|
-
this.addIndex(name, false);
|
|
362
|
-
} else if (typeof index === 'object') {
|
|
363
|
-
this.addIndex(Object.assign({
|
|
364
|
-
fields: [name]
|
|
365
|
-
}, index), false);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
this.modelAttributes[name] = field.getAttributeOptions();
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
this.modelInit(reinitialize);
|
|
372
|
-
this.database.emit('afterAddField', field, this);
|
|
373
|
-
this.database.runHooks('afterAddField', field, this);
|
|
374
|
-
return field;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
addIndex(indexOptions, reinitialize = true) {
|
|
378
|
-
const options = typeof indexOptions === 'string' ? {
|
|
379
|
-
fields: [indexOptions]
|
|
380
|
-
} : indexOptions;
|
|
381
|
-
const index = sequelize_1.Utils.nameIndex(options, this.options.name);
|
|
382
|
-
console.log(this.options, {
|
|
383
|
-
index,
|
|
384
|
-
options
|
|
385
|
-
});
|
|
386
|
-
this.indexes.set(index.name, Object.assign({
|
|
387
|
-
type: '',
|
|
388
|
-
parser: null
|
|
389
|
-
}, index));
|
|
390
|
-
this.modelInit(reinitialize);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
addIndexes(indexes, reinitialize = true) {
|
|
394
|
-
for (const index in indexes) {
|
|
395
|
-
this.addIndex(indexes[index], false);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
this.modelInit(reinitialize);
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
extend(options, mergeOptions = {}) {
|
|
402
|
-
const _options$fields2 = options.fields,
|
|
403
|
-
fields = _options$fields2 === void 0 ? [] : _options$fields2,
|
|
404
|
-
_options$indexes2 = options.indexes,
|
|
405
|
-
indexes = _options$indexes2 === void 0 ? [] : _options$indexes2,
|
|
406
|
-
model = options.model,
|
|
407
|
-
restOptions = __rest(options, ["fields", "indexes", "model"]);
|
|
408
|
-
|
|
409
|
-
if (model) {
|
|
410
|
-
this.defaultModel = getRegisteredModel(model);
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
const _mergeOptions$arrayMe = mergeOptions.arrayMerge,
|
|
414
|
-
arrayMerge = _mergeOptions$arrayMe === void 0 ? (target, source) => source : _mergeOptions$arrayMe;
|
|
415
|
-
this.options = (0, deepmerge_1.default)(this.options, restOptions, Object.assign({
|
|
416
|
-
arrayMerge
|
|
417
|
-
}, mergeOptions));
|
|
418
|
-
|
|
419
|
-
for (const key in fields) {
|
|
420
|
-
this.addField(fields[key], false);
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
this.initSortable();
|
|
424
|
-
this.addIndexes(indexes, false);
|
|
425
|
-
this.modelInit(true);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
sync(options = {}) {
|
|
429
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
430
|
-
const tables = [];
|
|
431
|
-
|
|
432
|
-
var _iterator4 = _createForOfIteratorHelper(this.getRelatedTableNames()),
|
|
433
|
-
_step4;
|
|
434
|
-
|
|
435
|
-
try {
|
|
436
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
437
|
-
const name = _step4.value;
|
|
438
|
-
tables.push(name);
|
|
439
|
-
}
|
|
440
|
-
} catch (err) {
|
|
441
|
-
_iterator4.e(err);
|
|
442
|
-
} finally {
|
|
443
|
-
_iterator4.f();
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
return this.database.sync(Object.assign(Object.assign({}, options), {
|
|
447
|
-
tables
|
|
448
|
-
}));
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
exports.Table = Table;
|
|
455
|
-
exports.default = Table;
|
|
456
|
-
//# sourceMappingURL=table.js.map
|
package/lib/table.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["table.ts"],"names":[],"mappings":"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","file":"table.js","sourcesContent":["import {\n InitOptions,\n ModelAttributes,\n ModelOptions,\n ModelIndexesOptions,\n Utils,\n SyncOptions,\n} from 'sequelize';\nimport {\n buildField,\n FieldOptions,\n Relation,\n BELONGSTO,\n BELONGSTOMANY,\n SORT,\n} from './fields';\nimport Database from './database';\nimport { Model, ModelCtor } from './model';\nimport _ from 'lodash';\nimport merge from 'deepmerge';\n\nexport interface MergeOptions extends merge.Options {}\n\nconst registeredModels = new Map<string, any>();\n\nexport function registerModel(key: string, model: any) {\n registeredModels.set(key, model);\n}\n\nexport function registerModels(models) {\n for (const key in models) {\n if (models.hasOwnProperty(key)) {\n registerModel(key, models[key]);\n }\n }\n}\n\n// TODO: 判断如果 key 是 model 直接返回\nexport function getRegisteredModel(key) {\n if (typeof key === 'string') {\n return registeredModels.get(key);\n }\n return key;\n}\n\nexport interface TableOptions\n extends Omit<ModelOptions<Model>, 'name' | 'modelName'> {\n /**\n * 唯一标识,与 ModelOptions 的 name 有区别\n *\n * 注意:name 可用于初始化 tableName、modelName,但是 tableName 和 modelName 可能有所不同\n * name 主要用于获取指定的 tables 和 models\n * 如果没有特殊指定 tableName 时,name、tableName、modelName 都是一个值\n *\n * TODO: name, tableName, modelName,freezeTableName,underscored,单复数等等情况还比较混乱\n */\n name: string;\n\n /**\n * 自定义 model\n */\n model?: ModelCtor<Model> | string;\n\n /**\n * 字段配置\n */\n fields?: Array<FieldOptions>;\n\n /**\n * 其他的一些情况\n */\n [key: string]: any;\n}\n\n/**\n * 上下文,Tabel 配置需要的其他变量\n */\nexport interface TableContext {\n database: Database;\n}\n\n/**\n * 是否重新初始化 Model。配置更新时,需要重新初始化 model。\n *\n * - reinitialize = false 只执行 Model.init\n * - reinitialize = true 重新初始化 Model 并执行 Model.init 和 Model.associate\n * - reinitialize = modelOnly 只初始化 Model 并执行 Model.init\n */\nexport type Reinitialize = boolean | 'modelOnly';\n\n/**\n * 表配置\n *\n * 用于处理相关 Model 的配置\n */\nexport class Table {\n protected database: Database;\n\n protected options: TableOptions;\n\n protected fields = new Map<string, any>();\n\n protected modelAttributes: ModelAttributes;\n\n protected modelOptions: InitOptions;\n\n /**\n * 全部关系字段的配置\n */\n protected associations = new Map<string, Relation>();\n\n /**\n * 待建立关系的 association\n */\n protected associating = new Map<string, Relation>();\n\n /**\n * 索引\n */\n protected indexes = new Map<string, any>();\n\n protected Model: ModelCtor<Model>;\n\n protected defaultModel: ModelCtor<Model>;\n\n /**\n * 是否是中间表\n */\n public isThroughTable: boolean = false;\n\n public relationTables = new Set<string>();\n\n get sortable(): boolean {\n return Array.from(this.fields.values()).some(\n (field) => field instanceof SORT,\n );\n }\n\n constructor(options: TableOptions, context: TableContext) {\n const { database } = context;\n database.runHooks('beforeTableInit', options);\n database.emit('beforeTableInit', options);\n const { model, fields = [], indexes = [], sortable } = options;\n this.options = options;\n this.database = database;\n // 初始化的时候获取\n this.defaultModel = getRegisteredModel(model);\n this.modelAttributes = {};\n // 在 set fields 之前 model init 的原因是因为关系字段可能需要用到 model 的相关配置\n // @ts-ignore\n this.addIndexes(indexes, 'modelOnly');\n // this.modelInit('modelOnly');\n this.setFields(fields);\n this.initSortable();\n database.emit('afterTableInit', this);\n database.runHooks('afterTableInit', this);\n }\n\n public initSortable() {\n const { sortable } = this.options;\n if (!sortable) {\n return;\n }\n if (typeof sortable === 'string') {\n this.addField({\n type: 'sort',\n name: sortable,\n });\n } else if (typeof sortable === 'object') {\n this.addField({\n ...sortable,\n type: 'sort',\n });\n }\n }\n\n public modelInit(reinitialize: Reinitialize = false) {\n if (reinitialize || !this.Model) {\n let DefaultModel = this.defaultModel;\n this.Model = DefaultModel\n ? class extends DefaultModel {}\n : class extends Model {};\n this.Model.database = this.database;\n // 关系的建立是在 model.init 之后,在配置中表字段(Column)和关系(Relation)都在 fields,\n // 所以需要单独提炼出 associations 字段,并在 Model.init 之后执行 Model.associate\n // @ts-ignore\n this.Model.associate = (models: { [key: string]: ModelCtor<Model> }) => {\n for (const [key, association] of this.associating) {\n const { type, target } = association.getAssociationArguments();\n if (this.database.isDefined(target)) {\n const TargetModel = this.database.getModel(target);\n // 如果关系表在之后才定义,未设置 targetKey 时,targetKey 默认值需要在 target model 初始化之后才能取到\n if (\n association instanceof BELONGSTO ||\n association instanceof BELONGSTOMANY\n ) {\n association.updateOptionsAfterTargetModelBeDefined();\n }\n this.Model[type](TargetModel, association.getAssociationOptions());\n // 建立关系之后,需要删除待处理的 associating,避免重复和提高效率\n this.associating.delete(key);\n }\n }\n };\n }\n\n this.Model.init(this.getModelAttributes(), this.getModelOptions());\n\n if (reinitialize === true) {\n this.associating = new Map(this.associations);\n // 需要额外处理 associating 的情况\n // 建立表关系需要遍历多个 Model,所以在这里需要标记哪些已定义的 Model 需要建立表关系\n if (this.associating.size > 0) {\n this.database.associating.add(this.options.name);\n } else {\n this.database.associating.delete(this.options.name);\n }\n this.database.associate();\n }\n }\n\n public getName(): string {\n return this.options.name;\n }\n\n public getTableName(): string {\n return this.options.name;\n }\n\n /**\n *\n * @param key 获取数据表配置,也可以指定 key\n */\n public getOptions(key?: any): TableOptions {\n return key ? _.get(this.options, key) : this.options;\n }\n\n public getModel(): ModelCtor<Model> {\n return this.database.getModel(this.getName());\n }\n\n public getModelAttributes(): ModelAttributes {\n return this.modelAttributes;\n }\n\n public getModelOptions(): InitOptions {\n const { name, underscored = true, ...restOptions } = this.options;\n const hooks =\n _.get(this.getModel(), 'options.hooks') || this.options.hooks || {};\n return {\n underscored,\n modelName: name,\n tableName: name,\n sequelize: this.database.sequelize,\n createdAt: Utils.underscoredIf('createdAt', underscored),\n updatedAt: Utils.underscoredIf('updatedAt', underscored),\n indexes: Array.from(this.indexes.values()),\n // freezeTableName: true,\n ..._.omit(restOptions, ['model', 'fields', 'indexes']),\n hooks,\n };\n }\n\n /**\n * 获取相关 table names,一般用于 sync\n */\n public getRelatedTableNames(): Set<string> {\n const names = new Set<string>();\n this.options.name && names.add(this.options.name);\n for (const association of this.associations.values()) {\n const target = association.getTarget();\n target && names.add(target);\n if (association instanceof BELONGSTOMANY) {\n const throughName = association.getThroughName();\n throughName && names.add(throughName);\n }\n }\n return names;\n }\n\n public getAssociations() {\n return this.associations;\n }\n\n public getFields() {\n return this.fields;\n }\n\n public setFields(fields: Array<FieldOptions>) {\n this.fields.clear();\n this.associating.clear();\n this.associations.clear();\n\n for (const filed of fields) {\n this.addField(filed, false);\n }\n\n this.modelInit(true);\n }\n\n public hasField(name: string) {\n return this.fields.has(name);\n }\n\n public getField(name: string) {\n return this.fields.get(name);\n }\n\n /**\n * 添加字段\n *\n * @param options\n * @param reinitialize\n */\n public addField(options: FieldOptions, reinitialize: Reinitialize = true) {\n this.database.runHooks('beforeAddField', options, this);\n this.database.emit('beforeAddField', options, this);\n const { name, index } = options;\n const field = buildField(options, {\n sourceTable: this,\n database: this.database,\n });\n // 添加字段后 table.options 中的 fields 并不会更新,这导致 table.getOptions() 拿不到最新的字段配置\n // 所以在同时更新 table.options.fields 数组\n if (!this.options.fields) {\n this.options.fields = [];\n }\n const existIndex = this.options.fields.findIndex(\n (field) => field.name === name,\n );\n if (existIndex !== -1) {\n this.options.fields.splice(existIndex, 1, options);\n } else {\n this.options.fields.push(options);\n }\n\n this.fields.set(name, field);\n\n if (field instanceof Relation) {\n // 关系字段先放到 associating 里待处理,等相关 target model 初始化之后,再通过 associate 建立关系\n this.associating.set(name, field);\n this.associations.set(name, field);\n } else {\n if (index === true) {\n this.addIndex(name, false);\n } else if (typeof index === 'object') {\n this.addIndex(\n {\n fields: [name],\n ...index,\n },\n false,\n );\n }\n this.modelAttributes[name] = field.getAttributeOptions();\n }\n this.modelInit(reinitialize);\n this.database.emit('afterAddField', field, this);\n this.database.runHooks('afterAddField', field, this);\n return field;\n }\n\n /**\n * 添加索引\n *\n * @param indexOptions\n * @param reinitialize\n */\n public addIndex(\n indexOptions: string | ModelIndexesOptions,\n reinitialize: Reinitialize = true,\n ) {\n const options =\n typeof indexOptions === 'string'\n ? {\n fields: [indexOptions],\n }\n : indexOptions;\n // @ts-ignore\n const index = Utils.nameIndex(options, this.options.name);\n console.log(this.options, { index, options });\n this.indexes.set(index.name, {\n type: '',\n parser: null,\n ...index,\n });\n this.modelInit(reinitialize);\n }\n\n /**\n * 批量添加索引\n *\n * @param indexes\n * @param reinitialize\n */\n public addIndexes(\n indexes: Array<string | ModelIndexesOptions>,\n reinitialize: Reinitialize = true,\n ) {\n for (const index in indexes) {\n this.addIndex(indexes[index], false);\n }\n this.modelInit(reinitialize);\n }\n\n /**\n * 扩展(实验性 API)\n *\n * @param options\n */\n public extend(options: TableOptions, mergeOptions: MergeOptions = {}) {\n const { fields = [], indexes = [], model, ...restOptions } = options;\n if (model) {\n this.defaultModel = getRegisteredModel(model);\n }\n const { arrayMerge = (target: any[], source: any[]) => source } =\n mergeOptions;\n this.options = merge(this.options, restOptions, {\n arrayMerge,\n ...mergeOptions,\n });\n for (const key in fields) {\n this.addField(fields[key], false);\n }\n this.initSortable();\n // @ts-ignore\n this.addIndexes(indexes, false);\n this.modelInit(true);\n }\n\n /**\n * 相关表字段更新\n *\n * @param options\n */\n public async sync(options: SyncOptions = {}) {\n const tables = [];\n for (const name of this.getRelatedTableNames()) {\n tables.push(name);\n }\n return this.database.sync({\n ...options,\n tables,\n });\n }\n}\n\nexport default Table;\n"]}
|
package/lib/utils.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import Model, { ModelCtor } from './model';
|
|
2
|
-
import Database from './database';
|
|
3
|
-
interface ToWhereContext {
|
|
4
|
-
model?: ModelCtor<Model> | Model | typeof Model;
|
|
5
|
-
associations?: any;
|
|
6
|
-
dialect?: string;
|
|
7
|
-
database?: Database;
|
|
8
|
-
ctx?: any;
|
|
9
|
-
prefix?: any;
|
|
10
|
-
}
|
|
11
|
-
export declare function toWhere(options: any, context?: ToWhereContext): any;
|
|
12
|
-
interface ToIncludeContext {
|
|
13
|
-
model?: ModelCtor<Model> | Model | typeof Model;
|
|
14
|
-
sourceAlias?: string;
|
|
15
|
-
associations?: any;
|
|
16
|
-
dialect?: string;
|
|
17
|
-
database?: Database;
|
|
18
|
-
ctx?: any;
|
|
19
|
-
}
|
|
20
|
-
export declare function toOrder(sort: string | string[], model: any): string[][];
|
|
21
|
-
export declare function toInclude(options: any, context?: ToIncludeContext): any;
|
|
22
|
-
export declare function whereCompare(a: any, b: any): boolean;
|
|
23
|
-
export declare function requireModule(module: any): any;
|
|
24
|
-
export declare function isNumber(num: any): boolean;
|
|
25
|
-
export declare function uid(len?: number): string;
|
|
26
|
-
export {};
|