@tachybase/database 0.23.8

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 (226) hide show
  1. package/.turbo/turbo-build.log +10 -0
  2. package/LICENSE +201 -0
  3. package/lib/collection-factory.d.ts +17 -0
  4. package/lib/collection-factory.js +52 -0
  5. package/lib/collection-group-manager.d.ts +26 -0
  6. package/lib/collection-group-manager.js +57 -0
  7. package/lib/collection-importer.d.ts +7 -0
  8. package/lib/collection-importer.js +74 -0
  9. package/lib/collection.d.ts +138 -0
  10. package/lib/collection.js +686 -0
  11. package/lib/database-utils/index.d.ts +9 -0
  12. package/lib/database-utils/index.js +71 -0
  13. package/lib/database-utils/traverseJSON.d.ts +10 -0
  14. package/lib/database-utils/traverseJSON.js +126 -0
  15. package/lib/database.d.ts +201 -0
  16. package/lib/database.js +765 -0
  17. package/lib/decorators/must-have-filter-decorator.d.ts +2 -0
  18. package/lib/decorators/must-have-filter-decorator.js +38 -0
  19. package/lib/decorators/target-collection-decorator.d.ts +2 -0
  20. package/lib/decorators/target-collection-decorator.js +47 -0
  21. package/lib/decorators/transaction-decorator.d.ts +1 -0
  22. package/lib/decorators/transaction-decorator.js +88 -0
  23. package/lib/eager-loading/eager-loading-tree.d.ts +31 -0
  24. package/lib/eager-loading/eager-loading-tree.js +439 -0
  25. package/lib/errors/identifier-error.d.ts +3 -0
  26. package/lib/errors/identifier-error.js +35 -0
  27. package/lib/errors/zero-column-table-error.d.ts +2 -0
  28. package/lib/errors/zero-column-table-error.js +31 -0
  29. package/lib/features/references-map.d.ts +18 -0
  30. package/lib/features/references-map.js +109 -0
  31. package/lib/features/referential-integrity-check.d.ts +8 -0
  32. package/lib/features/referential-integrity-check.js +83 -0
  33. package/lib/field-repository/array-field-repository.d.ts +28 -0
  34. package/lib/field-repository/array-field-repository.js +197 -0
  35. package/lib/fields/array-field.d.ts +11 -0
  36. package/lib/fields/array-field.js +57 -0
  37. package/lib/fields/belongs-to-field.d.ts +17 -0
  38. package/lib/fields/belongs-to-field.js +154 -0
  39. package/lib/fields/belongs-to-many-field.d.ts +20 -0
  40. package/lib/fields/belongs-to-many-field.js +187 -0
  41. package/lib/fields/boolean-field.d.ts +8 -0
  42. package/lib/fields/boolean-field.js +36 -0
  43. package/lib/fields/context-field.d.ts +14 -0
  44. package/lib/fields/context-field.js +70 -0
  45. package/lib/fields/date-field.d.ts +13 -0
  46. package/lib/fields/date-field.js +64 -0
  47. package/lib/fields/field.d.ts +43 -0
  48. package/lib/fields/field.js +156 -0
  49. package/lib/fields/has-inverse-field.d.ts +4 -0
  50. package/lib/fields/has-inverse-field.js +15 -0
  51. package/lib/fields/has-many-field.d.ts +68 -0
  52. package/lib/fields/has-many-field.js +156 -0
  53. package/lib/fields/has-one-field.d.ts +68 -0
  54. package/lib/fields/has-one-field.js +150 -0
  55. package/lib/fields/index.d.ts +46 -0
  56. package/lib/fields/index.js +65 -0
  57. package/lib/fields/json-field.d.ts +14 -0
  58. package/lib/fields/json-field.js +54 -0
  59. package/lib/fields/nanoid-field.d.ts +13 -0
  60. package/lib/fields/nanoid-field.js +58 -0
  61. package/lib/fields/number-field.d.ts +41 -0
  62. package/lib/fields/number-field.js +85 -0
  63. package/lib/fields/password-field.d.ts +21 -0
  64. package/lib/fields/password-field.js +95 -0
  65. package/lib/fields/radio-field.d.ts +16 -0
  66. package/lib/fields/radio-field.js +66 -0
  67. package/lib/fields/relation-field.d.ts +21 -0
  68. package/lib/fields/relation-field.js +79 -0
  69. package/lib/fields/set-field.d.ts +10 -0
  70. package/lib/fields/set-field.js +46 -0
  71. package/lib/fields/sort-field.d.ts +16 -0
  72. package/lib/fields/sort-field.js +187 -0
  73. package/lib/fields/string-field.d.ts +8 -0
  74. package/lib/fields/string-field.js +36 -0
  75. package/lib/fields/text-field.d.ts +8 -0
  76. package/lib/fields/text-field.js +36 -0
  77. package/lib/fields/time-field.d.ts +8 -0
  78. package/lib/fields/time-field.js +36 -0
  79. package/lib/fields/uid-field.d.ts +13 -0
  80. package/lib/fields/uid-field.js +63 -0
  81. package/lib/fields/uuid-field.d.ts +9 -0
  82. package/lib/fields/uuid-field.js +45 -0
  83. package/lib/fields/virtual-field.d.ts +8 -0
  84. package/lib/fields/virtual-field.js +36 -0
  85. package/lib/filter-match.d.ts +1 -0
  86. package/lib/filter-match.js +66 -0
  87. package/lib/filter-parser.d.ts +21 -0
  88. package/lib/filter-parser.js +230 -0
  89. package/lib/helpers.d.ts +3 -0
  90. package/lib/helpers.js +167 -0
  91. package/lib/index.d.ts +30 -0
  92. package/lib/index.js +114 -0
  93. package/lib/inherited-collection.d.ts +14 -0
  94. package/lib/inherited-collection.js +138 -0
  95. package/lib/inherited-map.d.ts +21 -0
  96. package/lib/inherited-map.js +113 -0
  97. package/lib/inherited-sync-runner.d.ts +4 -0
  98. package/lib/inherited-sync-runner.js +175 -0
  99. package/lib/listeners/adjacency-list.d.ts +2 -0
  100. package/lib/listeners/adjacency-list.js +42 -0
  101. package/lib/listeners/append-child-collection-name-after-repository-find.d.ts +6 -0
  102. package/lib/listeners/append-child-collection-name-after-repository-find.js +66 -0
  103. package/lib/listeners/index.d.ts +2 -0
  104. package/lib/listeners/index.js +33 -0
  105. package/lib/magic-attribute-model.d.ts +8 -0
  106. package/lib/magic-attribute-model.js +203 -0
  107. package/lib/migration.d.ts +35 -0
  108. package/lib/migration.js +103 -0
  109. package/lib/mock-database.d.ts +25 -0
  110. package/lib/mock-database.js +126 -0
  111. package/lib/model-hook.d.ts +12 -0
  112. package/lib/model-hook.js +92 -0
  113. package/lib/model.d.ts +23 -0
  114. package/lib/model.js +152 -0
  115. package/lib/operators/array.d.ts +2 -0
  116. package/lib/operators/array.js +158 -0
  117. package/lib/operators/association.d.ts +2 -0
  118. package/lib/operators/association.js +35 -0
  119. package/lib/operators/boolean.d.ts +2 -0
  120. package/lib/operators/boolean.js +38 -0
  121. package/lib/operators/child-collection.d.ts +2 -0
  122. package/lib/operators/child-collection.js +67 -0
  123. package/lib/operators/date.d.ts +2 -0
  124. package/lib/operators/date.js +140 -0
  125. package/lib/operators/empty.d.ts +5 -0
  126. package/lib/operators/empty.js +89 -0
  127. package/lib/operators/eq.d.ts +2 -0
  128. package/lib/operators/eq.js +35 -0
  129. package/lib/operators/index.d.ts +5 -0
  130. package/lib/operators/index.js +56 -0
  131. package/lib/operators/jsonb.d.ts +2 -0
  132. package/lib/operators/jsonb.js +50 -0
  133. package/lib/operators/ne.d.ts +2 -0
  134. package/lib/operators/ne.js +40 -0
  135. package/lib/operators/notIn.d.ts +2 -0
  136. package/lib/operators/notIn.js +33 -0
  137. package/lib/operators/string.d.ts +2 -0
  138. package/lib/operators/string.js +109 -0
  139. package/lib/operators/utils.d.ts +4 -0
  140. package/lib/operators/utils.js +40 -0
  141. package/lib/options-parser.d.ts +37 -0
  142. package/lib/options-parser.js +332 -0
  143. package/lib/playground.d.ts +1 -0
  144. package/lib/playground.js +43 -0
  145. package/lib/query-interface/mysql-query-interface.d.ts +35 -0
  146. package/lib/query-interface/mysql-query-interface.js +122 -0
  147. package/lib/query-interface/postgres-query-interface.d.ts +32 -0
  148. package/lib/query-interface/postgres-query-interface.js +189 -0
  149. package/lib/query-interface/query-interface-builder.d.ts +2 -0
  150. package/lib/query-interface/query-interface-builder.js +46 -0
  151. package/lib/query-interface/query-interface.d.ts +42 -0
  152. package/lib/query-interface/query-interface.js +46 -0
  153. package/lib/query-interface/sqlite-query-interface.d.ts +35 -0
  154. package/lib/query-interface/sqlite-query-interface.js +131 -0
  155. package/lib/relation-repository/belongs-to-many-repository.d.ts +21 -0
  156. package/lib/relation-repository/belongs-to-many-repository.js +280 -0
  157. package/lib/relation-repository/belongs-to-repository.d.ts +6 -0
  158. package/lib/relation-repository/belongs-to-repository.js +39 -0
  159. package/lib/relation-repository/hasmany-repository.d.ts +10 -0
  160. package/lib/relation-repository/hasmany-repository.js +182 -0
  161. package/lib/relation-repository/hasone-repository.d.ts +6 -0
  162. package/lib/relation-repository/hasone-repository.js +39 -0
  163. package/lib/relation-repository/multiple-relation-repository.d.ts +20 -0
  164. package/lib/relation-repository/multiple-relation-repository.js +229 -0
  165. package/lib/relation-repository/relation-repository.d.ts +29 -0
  166. package/lib/relation-repository/relation-repository.js +202 -0
  167. package/lib/relation-repository/single-relation-repository.d.ts +25 -0
  168. package/lib/relation-repository/single-relation-repository.js +162 -0
  169. package/lib/relation-repository/types.d.ts +7 -0
  170. package/lib/relation-repository/types.js +15 -0
  171. package/lib/repositories/tree-repository/adjacency-list-repository.d.ts +18 -0
  172. package/lib/repositories/tree-repository/adjacency-list-repository.js +183 -0
  173. package/lib/repositories/view-repository.d.ts +3 -0
  174. package/lib/repositories/view-repository.js +32 -0
  175. package/lib/repository.d.ts +206 -0
  176. package/lib/repository.js +597 -0
  177. package/lib/sql-collection/index.d.ts +2 -0
  178. package/lib/sql-collection/index.js +23 -0
  179. package/lib/sql-collection/query-generator.d.ts +10 -0
  180. package/lib/sql-collection/query-generator.js +70 -0
  181. package/lib/sql-collection/sql-collection.d.ts +7 -0
  182. package/lib/sql-collection/sql-collection.js +69 -0
  183. package/lib/sql-collection/sql-model.d.ts +16 -0
  184. package/lib/sql-collection/sql-model.js +168 -0
  185. package/lib/sql-parser/index.d.ts +10 -0
  186. package/lib/sql-parser/index.js +10699 -0
  187. package/lib/sql-parser/postgres.d.ts +10 -0
  188. package/lib/sql-parser/postgres.js +31506 -0
  189. package/lib/sql-parser/sql.pegjs +1297 -0
  190. package/lib/sync-runner.d.ts +30 -0
  191. package/lib/sync-runner.js +277 -0
  192. package/lib/types.d.ts +49 -0
  193. package/lib/types.js +15 -0
  194. package/lib/update-associations.d.ts +60 -0
  195. package/lib/update-associations.js +405 -0
  196. package/lib/update-guard.d.ts +28 -0
  197. package/lib/update-guard.js +202 -0
  198. package/lib/utils.d.ts +7 -0
  199. package/lib/utils.js +127 -0
  200. package/lib/value-parsers/array-value-parser.d.ts +8 -0
  201. package/lib/value-parsers/array-value-parser.js +58 -0
  202. package/lib/value-parsers/base-value-parser.d.ts +12 -0
  203. package/lib/value-parsers/base-value-parser.js +63 -0
  204. package/lib/value-parsers/boolean-value-parser.d.ts +4 -0
  205. package/lib/value-parsers/boolean-value-parser.js +52 -0
  206. package/lib/value-parsers/date-value-parser.d.ts +5 -0
  207. package/lib/value-parsers/date-value-parser.js +88 -0
  208. package/lib/value-parsers/index.d.ts +12 -0
  209. package/lib/value-parsers/index.js +78 -0
  210. package/lib/value-parsers/json-value-parser.d.ts +4 -0
  211. package/lib/value-parsers/json-value-parser.js +47 -0
  212. package/lib/value-parsers/number-value-parser.d.ts +4 -0
  213. package/lib/value-parsers/number-value-parser.js +58 -0
  214. package/lib/value-parsers/string-value-parser.d.ts +8 -0
  215. package/lib/value-parsers/string-value-parser.js +64 -0
  216. package/lib/value-parsers/to-many-value-parser.d.ts +13 -0
  217. package/lib/value-parsers/to-many-value-parser.js +108 -0
  218. package/lib/value-parsers/to-one-value-parser.d.ts +4 -0
  219. package/lib/value-parsers/to-one-value-parser.js +48 -0
  220. package/lib/view/field-type-map.d.ts +97 -0
  221. package/lib/view/field-type-map.js +90 -0
  222. package/lib/view/view-inference.d.ts +32 -0
  223. package/lib/view/view-inference.js +146 -0
  224. package/lib/view-collection.d.ts +6 -0
  225. package/lib/view-collection.js +45 -0
  226. package/package.json +38 -0
@@ -0,0 +1,35 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var identifier_error_exports = {};
20
+ __export(identifier_error_exports, {
21
+ IdentifierError: () => IdentifierError
22
+ });
23
+ module.exports = __toCommonJS(identifier_error_exports);
24
+ const _IdentifierError = class _IdentifierError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = "IdentifierError";
28
+ }
29
+ };
30
+ __name(_IdentifierError, "IdentifierError");
31
+ let IdentifierError = _IdentifierError;
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ IdentifierError
35
+ });
@@ -0,0 +1,2 @@
1
+ export declare class ZeroColumnTableError extends Error {
2
+ }
@@ -0,0 +1,31 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var zero_column_table_error_exports = {};
20
+ __export(zero_column_table_error_exports, {
21
+ ZeroColumnTableError: () => ZeroColumnTableError
22
+ });
23
+ module.exports = __toCommonJS(zero_column_table_error_exports);
24
+ const _ZeroColumnTableError = class _ZeroColumnTableError extends Error {
25
+ };
26
+ __name(_ZeroColumnTableError, "ZeroColumnTableError");
27
+ let ZeroColumnTableError = _ZeroColumnTableError;
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ ZeroColumnTableError
31
+ });
@@ -0,0 +1,18 @@
1
+ export type ReferencePriority = 'default' | 'user';
2
+ export interface Reference {
3
+ sourceCollectionName: string;
4
+ sourceField: string;
5
+ targetField: string;
6
+ targetCollectionName: string;
7
+ onDelete: string;
8
+ priority: ReferencePriority;
9
+ }
10
+ export declare function buildReference(options: Partial<Reference>): Reference;
11
+ declare class ReferencesMap {
12
+ protected map: Map<string, Reference[]>;
13
+ addReference(reference: Reference): void;
14
+ getReferences(collectionName: any): Reference[];
15
+ existReference(reference: Reference): Reference;
16
+ removeReference(reference: Reference): void;
17
+ }
18
+ export default ReferencesMap;
@@ -0,0 +1,109 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var references_map_exports = {};
20
+ __export(references_map_exports, {
21
+ buildReference: () => buildReference,
22
+ default: () => references_map_default
23
+ });
24
+ module.exports = __toCommonJS(references_map_exports);
25
+ const DEFAULT_ON_DELETE = "NO ACTION";
26
+ function buildReference(options) {
27
+ const { sourceCollectionName, sourceField, targetField, targetCollectionName, onDelete, priority } = options;
28
+ return {
29
+ sourceCollectionName,
30
+ sourceField,
31
+ targetField,
32
+ targetCollectionName,
33
+ onDelete: (onDelete || DEFAULT_ON_DELETE).toUpperCase(),
34
+ priority: assignPriority(priority, onDelete)
35
+ };
36
+ }
37
+ __name(buildReference, "buildReference");
38
+ function assignPriority(priority, onDelete) {
39
+ if (priority) {
40
+ return priority;
41
+ }
42
+ return onDelete ? "user" : "default";
43
+ }
44
+ __name(assignPriority, "assignPriority");
45
+ const PRIORITY_MAP = {
46
+ default: 1,
47
+ user: 2
48
+ };
49
+ const _ReferencesMap = class _ReferencesMap {
50
+ map = /* @__PURE__ */ new Map();
51
+ addReference(reference) {
52
+ const existReference = this.existReference(reference);
53
+ if (existReference && existReference.onDelete !== reference.onDelete) {
54
+ const existPriority = PRIORITY_MAP[existReference.priority];
55
+ const newPriority = PRIORITY_MAP[reference.priority];
56
+ if (newPriority > existPriority) {
57
+ existReference.onDelete = reference.onDelete;
58
+ existReference.priority = reference.priority;
59
+ } else if (newPriority === existPriority && newPriority === PRIORITY_MAP["user"]) {
60
+ if (existReference.onDelete === "SET NULL" && reference.onDelete === "CASCADE") {
61
+ existReference.onDelete = reference.onDelete;
62
+ } else {
63
+ console.error(
64
+ new Error(
65
+ `On Delete Conflict, exist reference ${JSON.stringify(existReference)}, new reference ${JSON.stringify(
66
+ reference
67
+ )}`
68
+ )
69
+ );
70
+ }
71
+ }
72
+ }
73
+ if (!existReference) {
74
+ this.map.set(reference.targetCollectionName, [
75
+ ...this.map.get(reference.targetCollectionName) || [],
76
+ reference
77
+ ]);
78
+ }
79
+ }
80
+ getReferences(collectionName) {
81
+ return this.map.get(collectionName);
82
+ }
83
+ existReference(reference) {
84
+ const references = this.map.get(reference.targetCollectionName);
85
+ if (!references) {
86
+ return null;
87
+ }
88
+ const keys = Object.keys(reference).filter((k) => k !== "onDelete" && k !== "priority");
89
+ return references.find((ref) => keys.every((key) => ref[key] === reference[key]));
90
+ }
91
+ removeReference(reference) {
92
+ const references = this.map.get(reference.targetCollectionName);
93
+ if (!references) {
94
+ return;
95
+ }
96
+ const keys = ["sourceCollectionName", "sourceField", "targetField", "targetCollectionName"];
97
+ this.map.set(
98
+ reference.targetCollectionName,
99
+ references.filter((ref) => !keys.every((key) => ref[key] === reference[key]))
100
+ );
101
+ }
102
+ };
103
+ __name(_ReferencesMap, "ReferencesMap");
104
+ let ReferencesMap = _ReferencesMap;
105
+ var references_map_default = ReferencesMap;
106
+ // Annotate the CommonJS export names for ESM import in node:
107
+ 0 && (module.exports = {
108
+ buildReference
109
+ });
@@ -0,0 +1,8 @@
1
+ import { Model, Transactionable } from 'sequelize';
2
+ import Database from '../database';
3
+ interface ReferentialIntegrityCheckOptions extends Transactionable {
4
+ db: Database;
5
+ referencedInstance: Model;
6
+ }
7
+ export declare function referentialIntegrityCheck(options: ReferentialIntegrityCheckOptions): Promise<void>;
8
+ export {};
@@ -0,0 +1,83 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var referential_integrity_check_exports = {};
20
+ __export(referential_integrity_check_exports, {
21
+ referentialIntegrityCheck: () => referentialIntegrityCheck
22
+ });
23
+ module.exports = __toCommonJS(referential_integrity_check_exports);
24
+ async function referentialIntegrityCheck(options) {
25
+ const { referencedInstance, db, transaction } = options;
26
+ const collection = db.modelCollection.get(referencedInstance.constructor);
27
+ const collectionName = collection.name;
28
+ const references = db.referenceMap.getReferences(collectionName);
29
+ if (!references) {
30
+ return;
31
+ }
32
+ for (const reference of references) {
33
+ const { sourceCollectionName, sourceField, targetField, onDelete } = reference;
34
+ if (onDelete === "NO ACTION") {
35
+ continue;
36
+ }
37
+ const sourceCollection = db.collections.get(sourceCollectionName);
38
+ const sourceRepository = sourceCollection.repository;
39
+ if (sourceCollection.isView()) {
40
+ continue;
41
+ }
42
+ const filter = {
43
+ [sourceField]: referencedInstance[targetField]
44
+ };
45
+ const referencingExists = await sourceRepository.count({
46
+ filter,
47
+ transaction
48
+ });
49
+ if (!referencingExists) {
50
+ continue;
51
+ }
52
+ if (onDelete === "RESTRICT") {
53
+ const data = await sourceRepository.find({ filter });
54
+ const transData = data.map((item) => `id:${item.id} \u6570\u636E:${item[sourceCollection.options.titleField]}`).join(",");
55
+ const error = new Error(
56
+ `\u8FD9\u6761\u65E0\u6CD5\u5220\u9664\uFF0C\u8FD8\u6709\u5B58\u5728\u7684\u4F7F\u7528\u5B83\u7684\u6570\u636E\uFF0C\u8FD9\u6761\u6570\u636E\u4E3A
57
+ ${sourceCollection.options.title || sourceCollectionName} \u7684\uFF1A${transData}`
58
+ );
59
+ throw error;
60
+ }
61
+ if (onDelete === "CASCADE") {
62
+ await sourceRepository.destroy({
63
+ filter,
64
+ transaction
65
+ });
66
+ }
67
+ if (onDelete === "SET NULL") {
68
+ await sourceRepository.update({
69
+ filter,
70
+ values: {
71
+ [sourceField]: null
72
+ },
73
+ hooks: false,
74
+ transaction
75
+ });
76
+ }
77
+ }
78
+ }
79
+ __name(referentialIntegrityCheck, "referentialIntegrityCheck");
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ referentialIntegrityCheck
83
+ });
@@ -0,0 +1,28 @@
1
+ import { Transactionable } from 'sequelize';
2
+ import { Collection } from '../collection';
3
+ export declare class ArrayFieldRepository {
4
+ protected collection: Collection;
5
+ protected fieldName: string;
6
+ protected targetValue: string | number;
7
+ constructor(collection: Collection, fieldName: string, targetValue: string | number);
8
+ get(options?: Transactionable): Promise<any>;
9
+ find(options?: Transactionable): Promise<any>;
10
+ set(options: Transactionable & {
11
+ values: Array<string | number> | string | number;
12
+ hooks?: boolean;
13
+ }): Promise<void>;
14
+ protected emitAfterSave(instance: any, options: any): Promise<void>;
15
+ toggle(options: Transactionable & {
16
+ value: string | number;
17
+ hooks?: boolean;
18
+ }): Promise<void>;
19
+ add(options: Transactionable & {
20
+ values: Array<string | number> | string | number;
21
+ hooks?: boolean;
22
+ }): Promise<void>;
23
+ remove(options: Transactionable & {
24
+ values: Array<string | number> | string | number;
25
+ hooks?: boolean;
26
+ }): Promise<void>;
27
+ protected getInstance(options: Transactionable): Promise<any>;
28
+ }
@@ -0,0 +1,197 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
8
+ var __typeError = (msg) => {
9
+ throw TypeError(msg);
10
+ };
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+ var __decoratorStart = (base) => [, , , __create((base == null ? void 0 : base[__knownSymbol("metadata")]) ?? null)];
35
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
36
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
37
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
38
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
39
+ var __runInitializers = (array, flags, self, value) => {
40
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
41
+ return value;
42
+ };
43
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
44
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
45
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
46
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
47
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
48
+ return __privateGet(this, extra);
49
+ }, set [name](x) {
50
+ return __privateSet(this, extra, x);
51
+ } }, name));
52
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
53
+ for (var i = decorators.length - 1; i >= 0; i--) {
54
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
55
+ if (k) {
56
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
57
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
58
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
59
+ }
60
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
61
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
62
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
63
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
64
+ }
65
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
66
+ };
67
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
68
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
69
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
70
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
71
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
72
+ var array_field_repository_exports = {};
73
+ __export(array_field_repository_exports, {
74
+ ArrayFieldRepository: () => ArrayFieldRepository
75
+ });
76
+ module.exports = __toCommonJS(array_field_repository_exports);
77
+ var import_lodash = __toESM(require("lodash"));
78
+ var import_transaction_decorator = require("../decorators/transaction-decorator");
79
+ var import_fields = require("../fields");
80
+ var _remove_dec, _add_dec, _toggle_dec, _set_dec, _find_dec, _get_dec, _init;
81
+ const transaction = (0, import_transaction_decorator.transactionWrapperBuilder)(function() {
82
+ return this.collection.model.sequelize.transaction();
83
+ });
84
+ _get_dec = [transaction()], _find_dec = [transaction()], _set_dec = [transaction((args, transaction2) => {
85
+ return {
86
+ values: args[0],
87
+ transaction: transaction2
88
+ };
89
+ })], _toggle_dec = [transaction((args, transaction2) => {
90
+ return {
91
+ value: args[0],
92
+ transaction: transaction2
93
+ };
94
+ })], _add_dec = [transaction((args, transaction2) => {
95
+ return {
96
+ values: args[0],
97
+ transaction: transaction2
98
+ };
99
+ })], _remove_dec = [transaction((args, transaction2) => {
100
+ return {
101
+ values: args[0],
102
+ transaction: transaction2
103
+ };
104
+ })];
105
+ const _ArrayFieldRepository = class _ArrayFieldRepository {
106
+ constructor(collection, fieldName, targetValue) {
107
+ this.collection = collection;
108
+ this.fieldName = fieldName;
109
+ this.targetValue = targetValue;
110
+ __runInitializers(_init, 5, this);
111
+ const field = collection.getField(fieldName);
112
+ if (!(field instanceof import_fields.ArrayField)) {
113
+ throw new Error("Field must be of type Array");
114
+ }
115
+ }
116
+ async get(options) {
117
+ const instance = await this.getInstance(options);
118
+ return instance.get(this.fieldName);
119
+ }
120
+ async find(options) {
121
+ return await this.get(options);
122
+ }
123
+ async set(options) {
124
+ const { transaction: transaction2 } = options;
125
+ const instance = await this.getInstance({
126
+ transaction: transaction2
127
+ });
128
+ instance.set(this.fieldName, import_lodash.default.castArray(options.values));
129
+ await instance.save({ transaction: transaction2 });
130
+ if (options.hooks !== false) {
131
+ await this.emitAfterSave(instance, options);
132
+ }
133
+ }
134
+ async emitAfterSave(instance, options) {
135
+ await this.collection.db.emitAsync(`${this.collection.name}.afterSaveWithAssociations`, instance, {
136
+ ...options
137
+ });
138
+ instance.clearChangedWithAssociations();
139
+ }
140
+ async toggle(options) {
141
+ const { transaction: transaction2 } = options;
142
+ const instance = await this.getInstance({
143
+ transaction: transaction2
144
+ });
145
+ const oldValue = instance.get(this.fieldName) || [];
146
+ const newValue = oldValue.includes(options.value) ? import_lodash.default.without(oldValue, options.value) : [...oldValue, options.value];
147
+ instance.set(this.fieldName, newValue);
148
+ await instance.save({ transaction: transaction2 });
149
+ if (options.hooks !== false) {
150
+ await this.emitAfterSave(instance, options);
151
+ }
152
+ }
153
+ async add(options) {
154
+ const { transaction: transaction2 } = options;
155
+ const instance = await this.getInstance({
156
+ transaction: transaction2
157
+ });
158
+ const oldValue = instance.get(this.fieldName) || [];
159
+ const newValue = [...oldValue, ...import_lodash.default.castArray(options.values)];
160
+ instance.set(this.fieldName, newValue);
161
+ await instance.save({ transaction: transaction2 });
162
+ if (options.hooks !== false) {
163
+ await this.emitAfterSave(instance, options);
164
+ }
165
+ }
166
+ async remove(options) {
167
+ const { transaction: transaction2 } = options;
168
+ const instance = await this.getInstance({
169
+ transaction: transaction2
170
+ });
171
+ const oldValue = instance.get(this.fieldName) || [];
172
+ instance.set(this.fieldName, import_lodash.default.without(oldValue, ...import_lodash.default.castArray(options.values)));
173
+ await instance.save({ transaction: transaction2 });
174
+ if (options.hooks !== false) {
175
+ await this.emitAfterSave(instance, options);
176
+ }
177
+ }
178
+ getInstance(options) {
179
+ return this.collection.repository.findOne({
180
+ filterByTk: this.targetValue
181
+ });
182
+ }
183
+ };
184
+ _init = __decoratorStart(null);
185
+ __decorateElement(_init, 1, "get", _get_dec, _ArrayFieldRepository);
186
+ __decorateElement(_init, 1, "find", _find_dec, _ArrayFieldRepository);
187
+ __decorateElement(_init, 1, "set", _set_dec, _ArrayFieldRepository);
188
+ __decorateElement(_init, 1, "toggle", _toggle_dec, _ArrayFieldRepository);
189
+ __decorateElement(_init, 1, "add", _add_dec, _ArrayFieldRepository);
190
+ __decorateElement(_init, 1, "remove", _remove_dec, _ArrayFieldRepository);
191
+ __decoratorMetadata(_init, _ArrayFieldRepository);
192
+ __name(_ArrayFieldRepository, "ArrayFieldRepository");
193
+ let ArrayFieldRepository = _ArrayFieldRepository;
194
+ // Annotate the CommonJS export names for ESM import in node:
195
+ 0 && (module.exports = {
196
+ ArrayFieldRepository
197
+ });
@@ -0,0 +1,11 @@
1
+ import { DataTypes } from 'sequelize';
2
+ import { BaseColumnFieldOptions, Field } from './field';
3
+ export declare class ArrayField extends Field {
4
+ get dataType(): DataTypes.AbstractDataTypeConstructor;
5
+ sortValue: (model: any) => void;
6
+ bind(): void;
7
+ unbind(): void;
8
+ }
9
+ export interface ArrayFieldOptions extends BaseColumnFieldOptions {
10
+ type: 'array';
11
+ }
@@ -0,0 +1,57 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var array_field_exports = {};
20
+ __export(array_field_exports, {
21
+ ArrayField: () => ArrayField
22
+ });
23
+ module.exports = __toCommonJS(array_field_exports);
24
+ var import_sequelize = require("sequelize");
25
+ var import_field = require("./field");
26
+ const _ArrayField = class _ArrayField extends import_field.Field {
27
+ get dataType() {
28
+ if (this.database.sequelize.getDialect() === "postgres") {
29
+ return import_sequelize.DataTypes.JSONB;
30
+ }
31
+ return import_sequelize.DataTypes.JSON;
32
+ }
33
+ sortValue = /* @__PURE__ */ __name((model) => {
34
+ let oldValue = model.get(this.options.name);
35
+ if (oldValue) {
36
+ if (typeof oldValue === "string") {
37
+ oldValue = JSON.parse(oldValue);
38
+ }
39
+ const newValue = oldValue.sort();
40
+ model.set(this.options.name, newValue);
41
+ }
42
+ }, "sortValue");
43
+ bind() {
44
+ super.bind();
45
+ this.on("beforeSave", this.sortValue);
46
+ }
47
+ unbind() {
48
+ super.unbind();
49
+ this.off("beforeSave", this.sortValue);
50
+ }
51
+ };
52
+ __name(_ArrayField, "ArrayField");
53
+ let ArrayField = _ArrayField;
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ ArrayField
57
+ });
@@ -0,0 +1,17 @@
1
+ import { BelongsToOptions as SequelizeBelongsToOptions } from 'sequelize';
2
+ import { Reference, ReferencePriority } from '../features/references-map';
3
+ import { BaseRelationFieldOptions, RelationField } from './relation-field';
4
+ export declare class BelongsToField extends RelationField {
5
+ static type: string;
6
+ get dataType(): string;
7
+ get target(): any;
8
+ static toReference(db: any, association: any, onDelete: any, priority?: ReferencePriority): Reference;
9
+ reference(association: any): Reference;
10
+ checkAssociationKeys(): void;
11
+ bind(): boolean;
12
+ unbind(): void;
13
+ }
14
+ export interface BelongsToFieldOptions extends BaseRelationFieldOptions, SequelizeBelongsToOptions {
15
+ type: 'belongsTo';
16
+ target?: string;
17
+ }