@nocobase/database 0.7.0-alpha.9 → 0.7.1-alpha.4

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.
Files changed (325) hide show
  1. package/lib/collection-importer.js +85 -68
  2. package/lib/collection.d.ts +6 -2
  3. package/lib/collection.js +371 -210
  4. package/lib/database.d.ts +23 -4
  5. package/lib/database.js +599 -273
  6. package/lib/fields/array-field.js +45 -25
  7. package/lib/fields/belongs-to-field.js +101 -54
  8. package/lib/fields/belongs-to-many-field.js +98 -53
  9. package/lib/fields/boolean-field.js +24 -9
  10. package/lib/fields/context-field.js +77 -45
  11. package/lib/fields/date-field.js +24 -9
  12. package/lib/fields/field.d.ts +4 -1
  13. package/lib/fields/field.js +231 -75
  14. package/lib/fields/formula-field.d.ts +19 -0
  15. package/lib/fields/formula-field.js +184 -0
  16. package/lib/fields/has-inverse-field.js +4 -2
  17. package/lib/fields/has-many-field.js +105 -56
  18. package/lib/fields/has-one-field.js +105 -54
  19. package/lib/fields/index.d.ts +5 -1
  20. package/lib/fields/index.js +290 -32
  21. package/lib/fields/json-field.js +36 -16
  22. package/lib/fields/number-field.js +53 -26
  23. package/lib/fields/password-field.js +120 -73
  24. package/lib/fields/radio-field.js +75 -47
  25. package/lib/fields/relation-field.js +41 -28
  26. package/lib/fields/sort-field.js +165 -89
  27. package/lib/fields/string-field.js +24 -9
  28. package/lib/fields/text-field.js +24 -9
  29. package/lib/fields/time-field.js +24 -9
  30. package/lib/fields/uid-field.js +57 -28
  31. package/lib/fields/uuid-field.d.ts +9 -0
  32. package/lib/fields/uuid-field.js +39 -0
  33. package/lib/fields/virtual-field.js +24 -9
  34. package/lib/filter-parser.js +288 -179
  35. package/lib/index.d.ts +1 -0
  36. package/lib/index.js +224 -29
  37. package/lib/magic-attribute-model.js +123 -71
  38. package/lib/migration.d.ts +35 -0
  39. package/lib/migration.js +90 -0
  40. package/lib/mock-database.d.ts +1 -0
  41. package/lib/mock-database.js +69 -34
  42. package/lib/model-hook.d.ts +5 -5
  43. package/lib/model-hook.js +109 -60
  44. package/lib/model.js +116 -81
  45. package/lib/operators/array.js +136 -96
  46. package/lib/operators/association.js +30 -14
  47. package/lib/operators/boolean.d.ts +13 -0
  48. package/lib/operators/boolean.js +35 -0
  49. package/lib/operators/date.js +78 -34
  50. package/lib/operators/empty.js +113 -75
  51. package/lib/operators/index.js +15 -3
  52. package/lib/operators/ne.js +27 -12
  53. package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
  54. package/lib/operators/notIn.js +29 -0
  55. package/lib/operators/string.js +56 -35
  56. package/lib/operators/utils.js +18 -10
  57. package/lib/options-parser.js +345 -215
  58. package/lib/playground.js +66 -53
  59. package/lib/relation-repository/belongs-to-many-repository.js +281 -198
  60. package/lib/relation-repository/belongs-to-repository.js +10 -6
  61. package/lib/relation-repository/hasmany-repository.js +168 -121
  62. package/lib/relation-repository/hasone-repository.js +10 -6
  63. package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
  64. package/lib/relation-repository/multiple-relation-repository.js +263 -148
  65. package/lib/relation-repository/relation-repository.d.ts +1 -1
  66. package/lib/relation-repository/relation-repository.js +163 -93
  67. package/lib/relation-repository/single-relation-repository.d.ts +6 -6
  68. package/lib/relation-repository/single-relation-repository.js +145 -99
  69. package/lib/relation-repository/types.js +4 -2
  70. package/lib/repository.d.ts +4 -7
  71. package/lib/repository.js +473 -291
  72. package/lib/transaction-decorator.js +80 -67
  73. package/lib/update-associations.d.ts +1 -2
  74. package/lib/update-associations.js +525 -321
  75. package/lib/update-guard.js +160 -117
  76. package/package.json +9 -9
  77. package/src/__tests__/collection.test.ts +27 -0
  78. package/src/__tests__/database.test.ts +47 -0
  79. package/src/__tests__/fields/formula-field.test.ts +69 -0
  80. package/src/__tests__/fields/uuid-field.test.ts +30 -0
  81. package/src/__tests__/fixtures/migrations/m1.ts +7 -0
  82. package/src/__tests__/fixtures/migrations/m2.ts +7 -0
  83. package/src/__tests__/hooks/afterCreateWithAssociations.test.ts +33 -0
  84. package/src/__tests__/migrator.test.ts +70 -0
  85. package/src/__tests__/model-hook.test.ts +54 -0
  86. package/src/__tests__/operator/notIn.test.ts +33 -0
  87. package/src/__tests__/option-parser.test.ts +30 -6
  88. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +1 -1
  89. package/src/__tests__/sequelize-hooks.test.ts +69 -0
  90. package/src/__tests__/sort.test.ts +51 -0
  91. package/src/__tests__/update-associations.test.ts +3 -3
  92. package/src/collection-importer.ts +12 -20
  93. package/src/collection.ts +26 -2
  94. package/src/database.ts +144 -14
  95. package/src/fields/field.ts +88 -1
  96. package/src/fields/formula-field.ts +106 -0
  97. package/src/fields/index.ts +6 -0
  98. package/src/fields/password-field.ts +2 -0
  99. package/src/fields/uuid-field.ts +21 -0
  100. package/src/index.ts +1 -0
  101. package/src/migration.ts +76 -0
  102. package/src/mock-database.ts +2 -1
  103. package/src/model-hook.ts +26 -22
  104. package/src/operators/boolean.ts +18 -0
  105. package/src/operators/index.ts +2 -0
  106. package/src/operators/notIn.ts +12 -0
  107. package/src/options-parser.ts +14 -10
  108. package/src/relation-repository/multiple-relation-repository.ts +14 -6
  109. package/src/relation-repository/relation-repository.ts +12 -6
  110. package/src/relation-repository/single-relation-repository.ts +11 -7
  111. package/src/repository.ts +20 -10
  112. package/src/update-associations.ts +2 -3
  113. package/esm/collection-importer.d.ts +0 -7
  114. package/esm/collection-importer.js +0 -49
  115. package/esm/collection-importer.js.map +0 -1
  116. package/esm/collection.d.ts +0 -73
  117. package/esm/collection.js +0 -224
  118. package/esm/collection.js.map +0 -1
  119. package/esm/database.d.ts +0 -101
  120. package/esm/database.js +0 -275
  121. package/esm/database.js.map +0 -1
  122. package/esm/fields/array-field.d.ts +0 -11
  123. package/esm/fields/array-field.js +0 -26
  124. package/esm/fields/array-field.js.map +0 -1
  125. package/esm/fields/belongs-to-field.d.ts +0 -12
  126. package/esm/fields/belongs-to-field.js +0 -57
  127. package/esm/fields/belongs-to-field.js.map +0 -1
  128. package/esm/fields/belongs-to-many-field.d.ts +0 -11
  129. package/esm/fields/belongs-to-many-field.js +0 -55
  130. package/esm/fields/belongs-to-many-field.js.map +0 -1
  131. package/esm/fields/boolean-field.d.ts +0 -8
  132. package/esm/fields/boolean-field.js +0 -8
  133. package/esm/fields/boolean-field.js.map +0 -1
  134. package/esm/fields/context-field.d.ts +0 -13
  135. package/esm/fields/context-field.js +0 -43
  136. package/esm/fields/context-field.js.map +0 -1
  137. package/esm/fields/date-field.d.ts +0 -8
  138. package/esm/fields/date-field.js +0 -8
  139. package/esm/fields/date-field.js.map +0 -1
  140. package/esm/fields/field.d.ts +0 -37
  141. package/esm/fields/field.js +0 -74
  142. package/esm/fields/field.js.map +0 -1
  143. package/esm/fields/has-inverse-field.d.ts +0 -4
  144. package/esm/fields/has-inverse-field.js +0 -2
  145. package/esm/fields/has-inverse-field.js.map +0 -1
  146. package/esm/fields/has-many-field.d.ts +0 -64
  147. package/esm/fields/has-many-field.js +0 -58
  148. package/esm/fields/has-many-field.js.map +0 -1
  149. package/esm/fields/has-one-field.d.ts +0 -64
  150. package/esm/fields/has-one-field.js +0 -57
  151. package/esm/fields/has-one-field.js.map +0 -1
  152. package/esm/fields/index.d.ts +0 -40
  153. package/esm/fields/index.js +0 -21
  154. package/esm/fields/index.js.map +0 -1
  155. package/esm/fields/json-field.d.ts +0 -14
  156. package/esm/fields/json-field.js +0 -17
  157. package/esm/fields/json-field.js.map +0 -1
  158. package/esm/fields/number-field.d.ts +0 -32
  159. package/esm/fields/number-field.js +0 -28
  160. package/esm/fields/number-field.js.map +0 -1
  161. package/esm/fields/password-field.d.ts +0 -21
  162. package/esm/fields/password-field.js +0 -71
  163. package/esm/fields/password-field.js.map +0 -1
  164. package/esm/fields/radio-field.d.ts +0 -14
  165. package/esm/fields/radio-field.js +0 -49
  166. package/esm/fields/radio-field.js.map +0 -1
  167. package/esm/fields/relation-field.d.ts +0 -20
  168. package/esm/fields/relation-field.js +0 -27
  169. package/esm/fields/relation-field.js.map +0 -1
  170. package/esm/fields/sort-field.d.ts +0 -16
  171. package/esm/fields/sort-field.js +0 -90
  172. package/esm/fields/sort-field.js.map +0 -1
  173. package/esm/fields/string-field.d.ts +0 -8
  174. package/esm/fields/string-field.js +0 -8
  175. package/esm/fields/string-field.js.map +0 -1
  176. package/esm/fields/text-field.d.ts +0 -8
  177. package/esm/fields/text-field.js +0 -8
  178. package/esm/fields/text-field.js.map +0 -1
  179. package/esm/fields/time-field.d.ts +0 -8
  180. package/esm/fields/time-field.js +0 -8
  181. package/esm/fields/time-field.js.map +0 -1
  182. package/esm/fields/uid-field.d.ts +0 -10
  183. package/esm/fields/uid-field.js +0 -27
  184. package/esm/fields/uid-field.js.map +0 -1
  185. package/esm/fields/virtual-field.d.ts +0 -8
  186. package/esm/fields/virtual-field.js +0 -8
  187. package/esm/fields/virtual-field.js.map +0 -1
  188. package/esm/filter-parser.d.ts +0 -27
  189. package/esm/filter-parser.js +0 -185
  190. package/esm/filter-parser.js.map +0 -1
  191. package/esm/index.d.ts +0 -15
  192. package/esm/index.js +0 -16
  193. package/esm/index.js.map +0 -1
  194. package/esm/magic-attribute-model.d.ts +0 -7
  195. package/esm/magic-attribute-model.js +0 -70
  196. package/esm/magic-attribute-model.js.map +0 -1
  197. package/esm/mock-database.d.ts +0 -22
  198. package/esm/mock-database.js +0 -34
  199. package/esm/mock-database.js.map +0 -1
  200. package/esm/model-hook.d.ts +0 -12
  201. package/esm/model-hook.js +0 -61
  202. package/esm/model-hook.js.map +0 -1
  203. package/esm/model.d.ts +0 -15
  204. package/esm/model.js +0 -80
  205. package/esm/model.js.map +0 -1
  206. package/esm/operators/array.d.ts +0 -26
  207. package/esm/operators/array.js +0 -105
  208. package/esm/operators/array.js.map +0 -1
  209. package/esm/operators/association.d.ts +0 -10
  210. package/esm/operators/association.js +0 -14
  211. package/esm/operators/association.js.map +0 -1
  212. package/esm/operators/date.d.ts +0 -34
  213. package/esm/operators/date.js +0 -35
  214. package/esm/operators/date.js.map +0 -1
  215. package/esm/operators/empty.d.ts +0 -28
  216. package/esm/operators/empty.js +0 -58
  217. package/esm/operators/empty.js.map +0 -1
  218. package/esm/operators/index.d.ts +0 -2
  219. package/esm/operators/index.js +0 -2
  220. package/esm/operators/index.js.map +0 -1
  221. package/esm/operators/ne.js +0 -12
  222. package/esm/operators/ne.js.map +0 -1
  223. package/esm/operators/string.d.ts +0 -21
  224. package/esm/operators/string.js +0 -35
  225. package/esm/operators/string.js.map +0 -1
  226. package/esm/operators/utils.d.ts +0 -4
  227. package/esm/operators/utils.js +0 -11
  228. package/esm/operators/utils.js.map +0 -1
  229. package/esm/options-parser.d.ts +0 -31
  230. package/esm/options-parser.js +0 -225
  231. package/esm/options-parser.js.map +0 -1
  232. package/esm/playground.d.ts +0 -1
  233. package/esm/playground.js +0 -53
  234. package/esm/playground.js.map +0 -1
  235. package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
  236. package/esm/relation-repository/belongs-to-many-repository.js +0 -199
  237. package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
  238. package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
  239. package/esm/relation-repository/belongs-to-repository.js +0 -4
  240. package/esm/relation-repository/belongs-to-repository.js.map +0 -1
  241. package/esm/relation-repository/hasmany-repository.d.ts +0 -23
  242. package/esm/relation-repository/hasmany-repository.js +0 -125
  243. package/esm/relation-repository/hasmany-repository.js.map +0 -1
  244. package/esm/relation-repository/hasone-repository.d.ts +0 -17
  245. package/esm/relation-repository/hasone-repository.js +0 -4
  246. package/esm/relation-repository/hasone-repository.js.map +0 -1
  247. package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
  248. package/esm/relation-repository/multiple-relation-repository.js +0 -149
  249. package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
  250. package/esm/relation-repository/relation-repository.d.ts +0 -32
  251. package/esm/relation-repository/relation-repository.js +0 -93
  252. package/esm/relation-repository/relation-repository.js.map +0 -1
  253. package/esm/relation-repository/single-relation-repository.d.ts +0 -23
  254. package/esm/relation-repository/single-relation-repository.js +0 -96
  255. package/esm/relation-repository/single-relation-repository.js.map +0 -1
  256. package/esm/relation-repository/types.d.ts +0 -7
  257. package/esm/relation-repository/types.js +0 -2
  258. package/esm/relation-repository/types.js.map +0 -1
  259. package/esm/repository.d.ts +0 -165
  260. package/esm/repository.js +0 -276
  261. package/esm/repository.js.map +0 -1
  262. package/esm/transaction-decorator.d.ts +0 -1
  263. package/esm/transaction-decorator.js +0 -63
  264. package/esm/transaction-decorator.js.map +0 -1
  265. package/esm/update-associations.d.ts +0 -60
  266. package/esm/update-associations.js +0 -362
  267. package/esm/update-associations.js.map +0 -1
  268. package/esm/update-guard.d.ts +0 -26
  269. package/esm/update-guard.js +0 -122
  270. package/esm/update-guard.js.map +0 -1
  271. package/lib/collection-importer.js.map +0 -1
  272. package/lib/collection.js.map +0 -1
  273. package/lib/database.js.map +0 -1
  274. package/lib/fields/array-field.js.map +0 -1
  275. package/lib/fields/belongs-to-field.js.map +0 -1
  276. package/lib/fields/belongs-to-many-field.js.map +0 -1
  277. package/lib/fields/boolean-field.js.map +0 -1
  278. package/lib/fields/context-field.js.map +0 -1
  279. package/lib/fields/date-field.js.map +0 -1
  280. package/lib/fields/field.js.map +0 -1
  281. package/lib/fields/has-inverse-field.js.map +0 -1
  282. package/lib/fields/has-many-field.js.map +0 -1
  283. package/lib/fields/has-one-field.js.map +0 -1
  284. package/lib/fields/index.js.map +0 -1
  285. package/lib/fields/json-field.js.map +0 -1
  286. package/lib/fields/number-field.js.map +0 -1
  287. package/lib/fields/password-field.js.map +0 -1
  288. package/lib/fields/radio-field.js.map +0 -1
  289. package/lib/fields/relation-field.js.map +0 -1
  290. package/lib/fields/sort-field.js.map +0 -1
  291. package/lib/fields/string-field.js.map +0 -1
  292. package/lib/fields/text-field.js.map +0 -1
  293. package/lib/fields/time-field.js.map +0 -1
  294. package/lib/fields/uid-field.js.map +0 -1
  295. package/lib/fields/virtual-field.js.map +0 -1
  296. package/lib/filter-parser.js.map +0 -1
  297. package/lib/index.js.map +0 -1
  298. package/lib/magic-attribute-model.js.map +0 -1
  299. package/lib/mock-database.js.map +0 -1
  300. package/lib/model-hook.js.map +0 -1
  301. package/lib/model.js.map +0 -1
  302. package/lib/operators/array.js.map +0 -1
  303. package/lib/operators/association.js.map +0 -1
  304. package/lib/operators/date.js.map +0 -1
  305. package/lib/operators/empty.js.map +0 -1
  306. package/lib/operators/index.js.map +0 -1
  307. package/lib/operators/ne.js.map +0 -1
  308. package/lib/operators/string.js.map +0 -1
  309. package/lib/operators/utils.js.map +0 -1
  310. package/lib/options-parser.js.map +0 -1
  311. package/lib/playground.js.map +0 -1
  312. package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
  313. package/lib/relation-repository/belongs-to-repository.js.map +0 -1
  314. package/lib/relation-repository/hasmany-repository.js.map +0 -1
  315. package/lib/relation-repository/hasone-repository.js.map +0 -1
  316. package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
  317. package/lib/relation-repository/relation-repository.js.map +0 -1
  318. package/lib/relation-repository/single-relation-repository.js.map +0 -1
  319. package/lib/relation-repository/types.js.map +0 -1
  320. package/lib/repository.js.map +0 -1
  321. package/lib/transaction-decorator.js.map +0 -1
  322. package/lib/update-associations.js.map +0 -1
  323. package/lib/update-guard.js.map +0 -1
  324. package/tsconfig.build.json +0 -9
  325. package/tsconfig.json +0 -5
@@ -1,37 +0,0 @@
1
- import { DataType, ModelAttributeColumnOptions, ModelIndexesOptions, SyncOptions } from 'sequelize';
2
- import { Collection } from '../collection';
3
- import { Database } from '../database';
4
- export interface FieldContext {
5
- database: Database;
6
- collection: Collection;
7
- }
8
- export interface BaseFieldOptions {
9
- name?: string;
10
- hidden?: boolean;
11
- [key: string]: any;
12
- }
13
- export interface BaseColumnFieldOptions extends BaseFieldOptions, Omit<ModelAttributeColumnOptions, 'type'> {
14
- dataType?: DataType;
15
- index?: boolean | ModelIndexesOptions;
16
- }
17
- export declare abstract class Field {
18
- options: any;
19
- context: FieldContext;
20
- database: Database;
21
- collection: Collection;
22
- [key: string]: any;
23
- get name(): any;
24
- get type(): any;
25
- get dataType(): any;
26
- constructor(options?: any, context?: FieldContext);
27
- sync(syncOptions: SyncOptions): Promise<void>;
28
- init(): void;
29
- on(eventName: string, listener: (...args: any[]) => void): this;
30
- off(eventName: string, listener: (...args: any[]) => void): this;
31
- get(name: string): any;
32
- merge(obj: any): void;
33
- bind(): void;
34
- unbind(): void;
35
- toSequelize(): any;
36
- isSqlite(): boolean;
37
- }
@@ -1,74 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import _ from 'lodash';
11
- export class Field {
12
- constructor(options, context) {
13
- this.context = context;
14
- this.database = context.database;
15
- this.collection = context.collection;
16
- this.options = options || {};
17
- this.init();
18
- }
19
- get name() {
20
- return this.options.name;
21
- }
22
- get type() {
23
- return this.options.type;
24
- }
25
- get dataType() {
26
- return this.options.dataType;
27
- }
28
- // TODO
29
- sync(syncOptions) {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- yield this.collection.sync(Object.assign(Object.assign({}, syncOptions), { force: false, alter: {
32
- drop: false,
33
- } }));
34
- });
35
- }
36
- init() {
37
- // code
38
- }
39
- on(eventName, listener) {
40
- this.database.on(`${this.collection.name}.${eventName}`, listener);
41
- return this;
42
- }
43
- off(eventName, listener) {
44
- this.database.off(`${this.collection.name}.${eventName}`, listener);
45
- return this;
46
- }
47
- get(name) {
48
- return this.options[name];
49
- }
50
- merge(obj) {
51
- Object.assign(this.options, obj);
52
- }
53
- bind() {
54
- const { model } = this.context.collection;
55
- model.rawAttributes[this.name] = this.toSequelize();
56
- // @ts-ignore
57
- model.refreshAttributes();
58
- }
59
- unbind() {
60
- const { model } = this.context.collection;
61
- model.removeAttribute(this.name);
62
- }
63
- toSequelize() {
64
- const opts = _.omit(this.options, ['name']);
65
- if (this.dataType) {
66
- Object.assign(opts, { type: this.dataType });
67
- }
68
- return opts;
69
- }
70
- isSqlite() {
71
- return this.database.sequelize.getDialect() === 'sqlite';
72
- }
73
- }
74
- //# sourceMappingURL=field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/fields/field.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAqBvB,MAAM,OAAgB,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,CAAC,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","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,4 +0,0 @@
1
- import { Field } from './field';
2
- export interface HasInverseField {
3
- inverseField: () => Field;
4
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=has-inverse-field.js.map
@@ -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,64 +0,0 @@
1
- import { AssociationScope, DataType, ForeignKeyOptions, HasManyOptions, HasManyOptions as SequelizeHasManyOptions } from 'sequelize';
2
- import { MultipleRelationFieldOptions, RelationField } from './relation-field';
3
- export interface HasManyFieldOptions extends HasManyOptions {
4
- /**
5
- * The name of the field to use as the key for the association in the source table. Defaults to the primary
6
- * key of the source table
7
- */
8
- sourceKey?: string;
9
- /**
10
- * A string or a data type to represent the identifier in the table
11
- */
12
- keyType?: DataType;
13
- scope?: AssociationScope;
14
- /**
15
- * The alias of this model, in singular form. See also the `name` option passed to `sequelize.define`. If
16
- * you create multiple associations between the same tables, you should provide an alias to be able to
17
- * distinguish between them. If you provide an alias when creating the assocition, you should provide the
18
- * same alias when eager loading and when getting associated models. Defaults to the singularized name of
19
- * target
20
- */
21
- as?: string | {
22
- singular: string;
23
- plural: string;
24
- };
25
- /**
26
- * The name of the foreign key in the target table or an object representing the type definition for the
27
- * foreign column (see `Sequelize.define` for syntax). When using an object, you can add a `name` property
28
- * to set the name of the column. Defaults to the name of source + primary key of source
29
- */
30
- foreignKey?: string | ForeignKeyOptions;
31
- /**
32
- * What happens when delete occurs.
33
- *
34
- * Cascade if this is a n:m, and set null if it is a 1:m
35
- *
36
- * @default 'SET NULL' or 'CASCADE'
37
- */
38
- onDelete?: string;
39
- /**
40
- * What happens when update occurs
41
- *
42
- * @default 'CASCADE'
43
- */
44
- onUpdate?: string;
45
- /**
46
- * Should on update and on delete constraints be enabled on the foreign key.
47
- */
48
- constraints?: boolean;
49
- foreignKeyConstraint?: boolean;
50
- /**
51
- * If `false` the applicable hooks will not be called.
52
- * The default value depends on the context.
53
- */
54
- hooks?: boolean;
55
- }
56
- export declare class HasManyField extends RelationField {
57
- get foreignKey(): any;
58
- bind(): boolean;
59
- unbind(): void;
60
- }
61
- export interface HasManyFieldOptions extends MultipleRelationFieldOptions, SequelizeHasManyOptions {
62
- type: 'hasMany';
63
- target?: string;
64
- }
@@ -1,58 +0,0 @@
1
- import { omit } from 'lodash';
2
- import { Utils, } from 'sequelize';
3
- import { RelationField } from './relation-field';
4
- export class HasManyField extends RelationField {
5
- get foreignKey() {
6
- if (this.options.foreignKey) {
7
- return this.options.foreignKey;
8
- }
9
- const { model } = this.context.collection;
10
- return Utils.camelize([model.options.name.singular, this.sourceKey || model.primaryKeyAttribute].join('_'));
11
- }
12
- bind() {
13
- const { database, collection } = this.context;
14
- const Target = this.TargetModel;
15
- if (!Target) {
16
- database.addPendingField(this);
17
- return false;
18
- }
19
- if (collection.model.associations[this.name]) {
20
- delete collection.model.associations[this.name];
21
- }
22
- const association = collection.model.hasMany(Target, Object.assign({ as: this.name, foreignKey: this.foreignKey }, omit(this.options, ['name', 'type', 'target'])));
23
- // inverse relation
24
- // this.TargetModel.belongsTo(collection.model);
25
- // 建立关系之后从 pending 列表中删除
26
- database.removePendingField(this);
27
- if (!this.options.foreignKey) {
28
- this.options.foreignKey = association.foreignKey;
29
- }
30
- if (!this.options.sourceKey) {
31
- // @ts-ignore
32
- this.options.sourceKey = association.sourceKey;
33
- }
34
- return true;
35
- }
36
- unbind() {
37
- const { database, collection } = this.context;
38
- // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
39
- database.removePendingField(this);
40
- // 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉
41
- const tcoll = database.collections.get(this.target);
42
- const foreignKey = this.options.foreignKey;
43
- const field = tcoll.findField((field) => {
44
- if (field.name === foreignKey) {
45
- return true;
46
- }
47
- return field.type === 'belongsTo' && field.foreignKey === foreignKey;
48
- });
49
- if (!field) {
50
- tcoll.model.removeAttribute(foreignKey);
51
- }
52
- // 删掉 model 的关联字段
53
- delete collection.model.associations[this.name];
54
- // @ts-ignore
55
- collection.model.refreshAttributes();
56
- }
57
- }
58
- //# sourceMappingURL=has-many-field.js.map
@@ -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,64 +0,0 @@
1
- import { AssociationScope, DataType, ForeignKeyOptions, HasOneOptions, HasOneOptions as SequelizeHasOneOptions } from 'sequelize';
2
- import { BaseRelationFieldOptions, RelationField } from './relation-field';
3
- export interface HasOneFieldOptions extends HasOneOptions {
4
- /**
5
- * The name of the field to use as the key for the association in the source table. Defaults to the primary
6
- * key of the source table
7
- */
8
- sourceKey?: string;
9
- /**
10
- * A string or a data type to represent the identifier in the table
11
- */
12
- keyType?: DataType;
13
- scope?: AssociationScope;
14
- /**
15
- * The alias of this model, in singular form. See also the `name` option passed to `sequelize.define`. If
16
- * you create multiple associations between the same tables, you should provide an alias to be able to
17
- * distinguish between them. If you provide an alias when creating the assocition, you should provide the
18
- * same alias when eager loading and when getting associated models. Defaults to the singularized name of
19
- * target
20
- */
21
- as?: string | {
22
- singular: string;
23
- plural: string;
24
- };
25
- /**
26
- * The name of the foreign key in the target table or an object representing the type definition for the
27
- * foreign column (see `Sequelize.define` for syntax). When using an object, you can add a `name` property
28
- * to set the name of the column. Defaults to the name of source + primary key of source
29
- */
30
- foreignKey?: string | ForeignKeyOptions;
31
- /**
32
- * What happens when delete occurs.
33
- *
34
- * Cascade if this is a n:m, and set null if it is a 1:m
35
- *
36
- * @default 'SET NULL' or 'CASCADE'
37
- */
38
- onDelete?: string;
39
- /**
40
- * What happens when update occurs
41
- *
42
- * @default 'CASCADE'
43
- */
44
- onUpdate?: string;
45
- /**
46
- * Should on update and on delete constraints be enabled on the foreign key.
47
- */
48
- constraints?: boolean;
49
- foreignKeyConstraint?: boolean;
50
- /**
51
- * If `false` the applicable hooks will not be called.
52
- * The default value depends on the context.
53
- */
54
- hooks?: boolean;
55
- }
56
- export declare class HasOneField extends RelationField {
57
- get target(): any;
58
- get foreignKey(): any;
59
- bind(): boolean;
60
- unbind(): void;
61
- }
62
- export interface HasOneFieldOptions extends BaseRelationFieldOptions, SequelizeHasOneOptions {
63
- type: 'hasOne';
64
- }
@@ -1,57 +0,0 @@
1
- import { omit } from 'lodash';
2
- import { Utils } from 'sequelize';
3
- import { RelationField } from './relation-field';
4
- export class HasOneField extends RelationField {
5
- get target() {
6
- const { target, name } = this.options;
7
- return target || Utils.pluralize(name);
8
- }
9
- get foreignKey() {
10
- if (this.options.foreignKey) {
11
- return this.options.foreignKey;
12
- }
13
- const { model } = this.context.collection;
14
- return Utils.camelize([model.options.name.singular, model.primaryKeyAttribute].join('_'));
15
- }
16
- bind() {
17
- const { database, collection } = this.context;
18
- const Target = this.TargetModel;
19
- if (!Target) {
20
- database.addPendingField(this);
21
- return false;
22
- }
23
- const association = collection.model.hasOne(Target, Object.assign({ as: this.name, foreignKey: this.foreignKey }, omit(this.options, ['name', 'type', 'target'])));
24
- // 建立关系之后从 pending 列表中删除
25
- database.removePendingField(this);
26
- if (!this.options.foreignKey) {
27
- this.options.foreignKey = association.foreignKey;
28
- }
29
- if (!this.options.sourceKey) {
30
- // @ts-ignore
31
- this.options.sourceKey = association.sourceKey;
32
- }
33
- return true;
34
- }
35
- unbind() {
36
- const { database, collection } = this.context;
37
- // 如果关系字段还没建立就删除了,也同步删除待建立关联的关系字段
38
- database.removePendingField(this);
39
- // 如果关系表内没有显式的创建外键字段,删除关系时,外键也删除掉
40
- const tcoll = database.collections.get(this.target);
41
- const foreignKey = this.options.foreignKey;
42
- const field = tcoll.findField((field) => {
43
- if (field.name === foreignKey) {
44
- return true;
45
- }
46
- return field.type === 'belongsTo' && field.foreignKey === foreignKey;
47
- });
48
- if (!field) {
49
- tcoll.model.removeAttribute(foreignKey);
50
- }
51
- // 删掉 model 的关联字段
52
- delete collection.model.associations[this.name];
53
- // @ts-ignore
54
- collection.model.refreshAttributes();
55
- }
56
- }
57
- //# sourceMappingURL=has-one-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"has-one-field.js","sourceRoot":"","sources":["../../src/fields/has-one-field.ts"],"names":[],"mappings":"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","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"]}
@@ -1,40 +0,0 @@
1
- import { ArrayFieldOptions } from './array-field';
2
- import { BelongsToFieldOptions } from './belongs-to-field';
3
- import { BelongsToManyFieldOptions } from './belongs-to-many-field';
4
- import { BooleanFieldOptions } from './boolean-field';
5
- import { ContextFieldOptions } from './context-field';
6
- import { DateFieldOptions } from './date-field';
7
- import { BaseFieldOptions } from './field';
8
- import { HasManyFieldOptions } from './has-many-field';
9
- import { HasOneFieldOptions } from './has-one-field';
10
- import { JsonbFieldOptions, JsonFieldOptions } from './json-field';
11
- import { DecimalFieldOptions, DoubleFieldOptions, FloatFieldOptions, IntegerFieldOptions, RealFieldOptions } from './number-field';
12
- import { PasswordFieldOptions } from './password-field';
13
- import { RadioFieldOptions } from './radio-field';
14
- import { SortFieldOptions } from './sort-field';
15
- import { StringFieldOptions } from './string-field';
16
- import { TextFieldOptions } from './text-field';
17
- import { TimeFieldOptions } from './time-field';
18
- import { UidFieldOptions } from './uid-field';
19
- import { VirtualFieldOptions } from './virtual-field';
20
- export * from './array-field';
21
- export * from './belongs-to-field';
22
- export * from './belongs-to-many-field';
23
- export * from './boolean-field';
24
- export * from './context-field';
25
- export * from './date-field';
26
- export * from './field';
27
- export * from './has-many-field';
28
- export * from './has-one-field';
29
- export * from './json-field';
30
- export * from './number-field';
31
- export * from './password-field';
32
- export * from './radio-field';
33
- export * from './relation-field';
34
- export * from './sort-field';
35
- export * from './string-field';
36
- export * from './text-field';
37
- export * from './time-field';
38
- export * from './uid-field';
39
- export * from './virtual-field';
40
- export declare type FieldOptions = BaseFieldOptions | StringFieldOptions | IntegerFieldOptions | FloatFieldOptions | DecimalFieldOptions | DoubleFieldOptions | RealFieldOptions | JsonFieldOptions | JsonbFieldOptions | BooleanFieldOptions | RadioFieldOptions | SortFieldOptions | TextFieldOptions | VirtualFieldOptions | ArrayFieldOptions | TimeFieldOptions | DateFieldOptions | UidFieldOptions | PasswordFieldOptions | ContextFieldOptions | BelongsToFieldOptions | HasOneFieldOptions | HasManyFieldOptions | BelongsToManyFieldOptions;
@@ -1,21 +0,0 @@
1
- export * from './array-field';
2
- export * from './belongs-to-field';
3
- export * from './belongs-to-many-field';
4
- export * from './boolean-field';
5
- export * from './context-field';
6
- export * from './date-field';
7
- export * from './field';
8
- export * from './has-many-field';
9
- export * from './has-one-field';
10
- export * from './json-field';
11
- export * from './number-field';
12
- export * from './password-field';
13
- export * from './radio-field';
14
- export * from './relation-field';
15
- export * from './sort-field';
16
- export * from './string-field';
17
- export * from './text-field';
18
- export * from './time-field';
19
- export * from './uid-field';
20
- export * from './virtual-field';
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AA0BA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC","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 { 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 './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 | PasswordFieldOptions\n | ContextFieldOptions\n | BelongsToFieldOptions\n | HasOneFieldOptions\n | HasManyFieldOptions\n | BelongsToManyFieldOptions;\n"]}
@@ -1,14 +0,0 @@
1
- import { DataTypes } from 'sequelize';
2
- import { BaseColumnFieldOptions, Field } from './field';
3
- export declare class JsonField extends Field {
4
- get dataType(): DataTypes.AbstractDataTypeConstructor;
5
- }
6
- export interface JsonFieldOptions extends BaseColumnFieldOptions {
7
- type: 'json';
8
- }
9
- export declare class JsonbField extends Field {
10
- get dataType(): DataTypes.AbstractDataTypeConstructor;
11
- }
12
- export interface JsonbFieldOptions extends BaseColumnFieldOptions {
13
- type: 'jsonb';
14
- }
@@ -1,17 +0,0 @@
1
- import { DataTypes } from 'sequelize';
2
- import { Field } from './field';
3
- export class JsonField extends Field {
4
- get dataType() {
5
- return DataTypes.JSON;
6
- }
7
- }
8
- export class JsonbField extends Field {
9
- get dataType() {
10
- const dialect = this.context.database.sequelize.getDialect();
11
- if (dialect === 'postgres') {
12
- return DataTypes.JSONB;
13
- }
14
- return DataTypes.JSON;
15
- }
16
- }
17
- //# sourceMappingURL=json-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-field.js","sourceRoot":"","sources":["../../src/fields/json-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAMD,MAAM,OAAO,UAAW,SAAQ,KAAK;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,SAAS,CAAC,KAAK,CAAC;SACxB;QACD,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF","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,32 +0,0 @@
1
- import { DataTypes } from 'sequelize';
2
- import { BaseColumnFieldOptions, Field } from './field';
3
- export declare class IntegerField extends Field {
4
- get dataType(): DataTypes.IntegerDataTypeConstructor;
5
- }
6
- export interface IntegerFieldOptions extends BaseColumnFieldOptions {
7
- type: 'integer';
8
- }
9
- export declare class FloatField extends Field {
10
- get dataType(): DataTypes.FloatDataTypeConstructor;
11
- }
12
- export interface FloatFieldOptions extends BaseColumnFieldOptions {
13
- type: 'float';
14
- }
15
- export declare class DoubleField extends Field {
16
- get dataType(): DataTypes.DoubleDataTypeConstructor;
17
- }
18
- export interface DoubleFieldOptions extends BaseColumnFieldOptions {
19
- type: 'double';
20
- }
21
- export declare class RealField extends Field {
22
- get dataType(): DataTypes.RealDataTypeConstructor;
23
- }
24
- export interface RealFieldOptions extends BaseColumnFieldOptions {
25
- type: 'real';
26
- }
27
- export declare class DecimalField extends Field {
28
- get dataType(): DataTypes.DecimalDataTypeConstructor;
29
- }
30
- export interface DecimalFieldOptions extends BaseColumnFieldOptions {
31
- type: 'decimal';
32
- }
@@ -1,28 +0,0 @@
1
- import { DataTypes } from 'sequelize';
2
- import { Field } from './field';
3
- export class IntegerField extends Field {
4
- get dataType() {
5
- return DataTypes.INTEGER;
6
- }
7
- }
8
- export class FloatField extends Field {
9
- get dataType() {
10
- return DataTypes.FLOAT;
11
- }
12
- }
13
- export class DoubleField extends Field {
14
- get dataType() {
15
- return DataTypes.DOUBLE;
16
- }
17
- }
18
- export class RealField extends Field {
19
- get dataType() {
20
- return DataTypes.REAL;
21
- }
22
- }
23
- export class DecimalField extends Field {
24
- get dataType() {
25
- return DataTypes.DECIMAL;
26
- }
27
- }
28
- //# sourceMappingURL=number-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"number-field.js","sourceRoot":"","sources":["../../src/fields/number-field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAA0B,KAAK,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF;AAMD,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB,CAAC;CACF;AAMD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF;AAMD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAMD,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,QAAQ;QACV,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;CACF","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,21 +0,0 @@
1
- import { DataTypes } from 'sequelize';
2
- import { BaseColumnFieldOptions, Field } from './field';
3
- export interface PasswordFieldOptions extends BaseColumnFieldOptions {
4
- type: 'password';
5
- /**
6
- * @default 64
7
- */
8
- length?: number;
9
- /**
10
- * @default 8
11
- */
12
- randomBytesSize?: number;
13
- }
14
- export declare class PasswordField extends Field {
15
- get dataType(): DataTypes.StringDataTypeConstructor;
16
- verify(password: string, hash: string): Promise<unknown>;
17
- hash(password: string): Promise<unknown>;
18
- init(): void;
19
- bind(): void;
20
- unbind(): void;
21
- }