@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.
- package/.turbo/turbo-build.log +10 -0
- package/LICENSE +201 -0
- package/lib/collection-factory.d.ts +17 -0
- package/lib/collection-factory.js +52 -0
- package/lib/collection-group-manager.d.ts +26 -0
- package/lib/collection-group-manager.js +57 -0
- package/lib/collection-importer.d.ts +7 -0
- package/lib/collection-importer.js +74 -0
- package/lib/collection.d.ts +138 -0
- package/lib/collection.js +686 -0
- package/lib/database-utils/index.d.ts +9 -0
- package/lib/database-utils/index.js +71 -0
- package/lib/database-utils/traverseJSON.d.ts +10 -0
- package/lib/database-utils/traverseJSON.js +126 -0
- package/lib/database.d.ts +201 -0
- package/lib/database.js +765 -0
- package/lib/decorators/must-have-filter-decorator.d.ts +2 -0
- package/lib/decorators/must-have-filter-decorator.js +38 -0
- package/lib/decorators/target-collection-decorator.d.ts +2 -0
- package/lib/decorators/target-collection-decorator.js +47 -0
- package/lib/decorators/transaction-decorator.d.ts +1 -0
- package/lib/decorators/transaction-decorator.js +88 -0
- package/lib/eager-loading/eager-loading-tree.d.ts +31 -0
- package/lib/eager-loading/eager-loading-tree.js +439 -0
- package/lib/errors/identifier-error.d.ts +3 -0
- package/lib/errors/identifier-error.js +35 -0
- package/lib/errors/zero-column-table-error.d.ts +2 -0
- package/lib/errors/zero-column-table-error.js +31 -0
- package/lib/features/references-map.d.ts +18 -0
- package/lib/features/references-map.js +109 -0
- package/lib/features/referential-integrity-check.d.ts +8 -0
- package/lib/features/referential-integrity-check.js +83 -0
- package/lib/field-repository/array-field-repository.d.ts +28 -0
- package/lib/field-repository/array-field-repository.js +197 -0
- package/lib/fields/array-field.d.ts +11 -0
- package/lib/fields/array-field.js +57 -0
- package/lib/fields/belongs-to-field.d.ts +17 -0
- package/lib/fields/belongs-to-field.js +154 -0
- package/lib/fields/belongs-to-many-field.d.ts +20 -0
- package/lib/fields/belongs-to-many-field.js +187 -0
- package/lib/fields/boolean-field.d.ts +8 -0
- package/lib/fields/boolean-field.js +36 -0
- package/lib/fields/context-field.d.ts +14 -0
- package/lib/fields/context-field.js +70 -0
- package/lib/fields/date-field.d.ts +13 -0
- package/lib/fields/date-field.js +64 -0
- package/lib/fields/field.d.ts +43 -0
- package/lib/fields/field.js +156 -0
- package/lib/fields/has-inverse-field.d.ts +4 -0
- package/lib/fields/has-inverse-field.js +15 -0
- package/lib/fields/has-many-field.d.ts +68 -0
- package/lib/fields/has-many-field.js +156 -0
- package/lib/fields/has-one-field.d.ts +68 -0
- package/lib/fields/has-one-field.js +150 -0
- package/lib/fields/index.d.ts +46 -0
- package/lib/fields/index.js +65 -0
- package/lib/fields/json-field.d.ts +14 -0
- package/lib/fields/json-field.js +54 -0
- package/lib/fields/nanoid-field.d.ts +13 -0
- package/lib/fields/nanoid-field.js +58 -0
- package/lib/fields/number-field.d.ts +41 -0
- package/lib/fields/number-field.js +85 -0
- package/lib/fields/password-field.d.ts +21 -0
- package/lib/fields/password-field.js +95 -0
- package/lib/fields/radio-field.d.ts +16 -0
- package/lib/fields/radio-field.js +66 -0
- package/lib/fields/relation-field.d.ts +21 -0
- package/lib/fields/relation-field.js +79 -0
- package/lib/fields/set-field.d.ts +10 -0
- package/lib/fields/set-field.js +46 -0
- package/lib/fields/sort-field.d.ts +16 -0
- package/lib/fields/sort-field.js +187 -0
- package/lib/fields/string-field.d.ts +8 -0
- package/lib/fields/string-field.js +36 -0
- package/lib/fields/text-field.d.ts +8 -0
- package/lib/fields/text-field.js +36 -0
- package/lib/fields/time-field.d.ts +8 -0
- package/lib/fields/time-field.js +36 -0
- package/lib/fields/uid-field.d.ts +13 -0
- package/lib/fields/uid-field.js +63 -0
- package/lib/fields/uuid-field.d.ts +9 -0
- package/lib/fields/uuid-field.js +45 -0
- package/lib/fields/virtual-field.d.ts +8 -0
- package/lib/fields/virtual-field.js +36 -0
- package/lib/filter-match.d.ts +1 -0
- package/lib/filter-match.js +66 -0
- package/lib/filter-parser.d.ts +21 -0
- package/lib/filter-parser.js +230 -0
- package/lib/helpers.d.ts +3 -0
- package/lib/helpers.js +167 -0
- package/lib/index.d.ts +30 -0
- package/lib/index.js +114 -0
- package/lib/inherited-collection.d.ts +14 -0
- package/lib/inherited-collection.js +138 -0
- package/lib/inherited-map.d.ts +21 -0
- package/lib/inherited-map.js +113 -0
- package/lib/inherited-sync-runner.d.ts +4 -0
- package/lib/inherited-sync-runner.js +175 -0
- package/lib/listeners/adjacency-list.d.ts +2 -0
- package/lib/listeners/adjacency-list.js +42 -0
- package/lib/listeners/append-child-collection-name-after-repository-find.d.ts +6 -0
- package/lib/listeners/append-child-collection-name-after-repository-find.js +66 -0
- package/lib/listeners/index.d.ts +2 -0
- package/lib/listeners/index.js +33 -0
- package/lib/magic-attribute-model.d.ts +8 -0
- package/lib/magic-attribute-model.js +203 -0
- package/lib/migration.d.ts +35 -0
- package/lib/migration.js +103 -0
- package/lib/mock-database.d.ts +25 -0
- package/lib/mock-database.js +126 -0
- package/lib/model-hook.d.ts +12 -0
- package/lib/model-hook.js +92 -0
- package/lib/model.d.ts +23 -0
- package/lib/model.js +152 -0
- package/lib/operators/array.d.ts +2 -0
- package/lib/operators/array.js +158 -0
- package/lib/operators/association.d.ts +2 -0
- package/lib/operators/association.js +35 -0
- package/lib/operators/boolean.d.ts +2 -0
- package/lib/operators/boolean.js +38 -0
- package/lib/operators/child-collection.d.ts +2 -0
- package/lib/operators/child-collection.js +67 -0
- package/lib/operators/date.d.ts +2 -0
- package/lib/operators/date.js +140 -0
- package/lib/operators/empty.d.ts +5 -0
- package/lib/operators/empty.js +89 -0
- package/lib/operators/eq.d.ts +2 -0
- package/lib/operators/eq.js +35 -0
- package/lib/operators/index.d.ts +5 -0
- package/lib/operators/index.js +56 -0
- package/lib/operators/jsonb.d.ts +2 -0
- package/lib/operators/jsonb.js +50 -0
- package/lib/operators/ne.d.ts +2 -0
- package/lib/operators/ne.js +40 -0
- package/lib/operators/notIn.d.ts +2 -0
- package/lib/operators/notIn.js +33 -0
- package/lib/operators/string.d.ts +2 -0
- package/lib/operators/string.js +109 -0
- package/lib/operators/utils.d.ts +4 -0
- package/lib/operators/utils.js +40 -0
- package/lib/options-parser.d.ts +37 -0
- package/lib/options-parser.js +332 -0
- package/lib/playground.d.ts +1 -0
- package/lib/playground.js +43 -0
- package/lib/query-interface/mysql-query-interface.d.ts +35 -0
- package/lib/query-interface/mysql-query-interface.js +122 -0
- package/lib/query-interface/postgres-query-interface.d.ts +32 -0
- package/lib/query-interface/postgres-query-interface.js +189 -0
- package/lib/query-interface/query-interface-builder.d.ts +2 -0
- package/lib/query-interface/query-interface-builder.js +46 -0
- package/lib/query-interface/query-interface.d.ts +42 -0
- package/lib/query-interface/query-interface.js +46 -0
- package/lib/query-interface/sqlite-query-interface.d.ts +35 -0
- package/lib/query-interface/sqlite-query-interface.js +131 -0
- package/lib/relation-repository/belongs-to-many-repository.d.ts +21 -0
- package/lib/relation-repository/belongs-to-many-repository.js +280 -0
- package/lib/relation-repository/belongs-to-repository.d.ts +6 -0
- package/lib/relation-repository/belongs-to-repository.js +39 -0
- package/lib/relation-repository/hasmany-repository.d.ts +10 -0
- package/lib/relation-repository/hasmany-repository.js +182 -0
- package/lib/relation-repository/hasone-repository.d.ts +6 -0
- package/lib/relation-repository/hasone-repository.js +39 -0
- package/lib/relation-repository/multiple-relation-repository.d.ts +20 -0
- package/lib/relation-repository/multiple-relation-repository.js +229 -0
- package/lib/relation-repository/relation-repository.d.ts +29 -0
- package/lib/relation-repository/relation-repository.js +202 -0
- package/lib/relation-repository/single-relation-repository.d.ts +25 -0
- package/lib/relation-repository/single-relation-repository.js +162 -0
- package/lib/relation-repository/types.d.ts +7 -0
- package/lib/relation-repository/types.js +15 -0
- package/lib/repositories/tree-repository/adjacency-list-repository.d.ts +18 -0
- package/lib/repositories/tree-repository/adjacency-list-repository.js +183 -0
- package/lib/repositories/view-repository.d.ts +3 -0
- package/lib/repositories/view-repository.js +32 -0
- package/lib/repository.d.ts +206 -0
- package/lib/repository.js +597 -0
- package/lib/sql-collection/index.d.ts +2 -0
- package/lib/sql-collection/index.js +23 -0
- package/lib/sql-collection/query-generator.d.ts +10 -0
- package/lib/sql-collection/query-generator.js +70 -0
- package/lib/sql-collection/sql-collection.d.ts +7 -0
- package/lib/sql-collection/sql-collection.js +69 -0
- package/lib/sql-collection/sql-model.d.ts +16 -0
- package/lib/sql-collection/sql-model.js +168 -0
- package/lib/sql-parser/index.d.ts +10 -0
- package/lib/sql-parser/index.js +10699 -0
- package/lib/sql-parser/postgres.d.ts +10 -0
- package/lib/sql-parser/postgres.js +31506 -0
- package/lib/sql-parser/sql.pegjs +1297 -0
- package/lib/sync-runner.d.ts +30 -0
- package/lib/sync-runner.js +277 -0
- package/lib/types.d.ts +49 -0
- package/lib/types.js +15 -0
- package/lib/update-associations.d.ts +60 -0
- package/lib/update-associations.js +405 -0
- package/lib/update-guard.d.ts +28 -0
- package/lib/update-guard.js +202 -0
- package/lib/utils.d.ts +7 -0
- package/lib/utils.js +127 -0
- package/lib/value-parsers/array-value-parser.d.ts +8 -0
- package/lib/value-parsers/array-value-parser.js +58 -0
- package/lib/value-parsers/base-value-parser.d.ts +12 -0
- package/lib/value-parsers/base-value-parser.js +63 -0
- package/lib/value-parsers/boolean-value-parser.d.ts +4 -0
- package/lib/value-parsers/boolean-value-parser.js +52 -0
- package/lib/value-parsers/date-value-parser.d.ts +5 -0
- package/lib/value-parsers/date-value-parser.js +88 -0
- package/lib/value-parsers/index.d.ts +12 -0
- package/lib/value-parsers/index.js +78 -0
- package/lib/value-parsers/json-value-parser.d.ts +4 -0
- package/lib/value-parsers/json-value-parser.js +47 -0
- package/lib/value-parsers/number-value-parser.d.ts +4 -0
- package/lib/value-parsers/number-value-parser.js +58 -0
- package/lib/value-parsers/string-value-parser.d.ts +8 -0
- package/lib/value-parsers/string-value-parser.js +64 -0
- package/lib/value-parsers/to-many-value-parser.d.ts +13 -0
- package/lib/value-parsers/to-many-value-parser.js +108 -0
- package/lib/value-parsers/to-one-value-parser.d.ts +4 -0
- package/lib/value-parsers/to-one-value-parser.js +48 -0
- package/lib/view/field-type-map.d.ts +97 -0
- package/lib/view/field-type-map.js +90 -0
- package/lib/view/view-inference.d.ts +32 -0
- package/lib/view/view-inference.js +146 -0
- package/lib/view-collection.d.ts +6 -0
- package/lib/view-collection.js +45 -0
- package/package.json +38 -0
|
@@ -0,0 +1,230 @@
|
|
|
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var filter_parser_exports = {};
|
|
30
|
+
__export(filter_parser_exports, {
|
|
31
|
+
default: () => FilterParser
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(filter_parser_exports);
|
|
34
|
+
var import_flat = require("flat");
|
|
35
|
+
var import_lodash = __toESM(require("lodash"));
|
|
36
|
+
const debug = require("debug")("noco-database");
|
|
37
|
+
const _FilterParser = class _FilterParser {
|
|
38
|
+
collection;
|
|
39
|
+
database;
|
|
40
|
+
model;
|
|
41
|
+
filter;
|
|
42
|
+
context;
|
|
43
|
+
constructor(filter, context) {
|
|
44
|
+
const { collection } = context;
|
|
45
|
+
this.collection = collection;
|
|
46
|
+
this.context = context;
|
|
47
|
+
this.model = collection.model;
|
|
48
|
+
this.filter = this.prepareFilter(filter);
|
|
49
|
+
this.database = collection.context.database;
|
|
50
|
+
}
|
|
51
|
+
prepareFilter(filter) {
|
|
52
|
+
if (import_lodash.default.isPlainObject(filter)) {
|
|
53
|
+
const renamedKey = {};
|
|
54
|
+
for (const key of Object.keys(filter)) {
|
|
55
|
+
if (key.endsWith(".$exists") || key.endsWith(".$notExists")) {
|
|
56
|
+
const keyArr = key.split(".");
|
|
57
|
+
if (keyArr[keyArr.length - 2] == "id") {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
keyArr.splice(keyArr.length - 1, 0, "id");
|
|
61
|
+
renamedKey[key] = keyArr.join(".");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const [oldKey, newKey] of Object.entries(renamedKey)) {
|
|
65
|
+
filter[newKey] = filter[oldKey];
|
|
66
|
+
delete filter[oldKey];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return filter;
|
|
70
|
+
}
|
|
71
|
+
toSequelizeParams() {
|
|
72
|
+
debug("filter %o", this.filter);
|
|
73
|
+
if (!this.filter) {
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
const filter = this.filter;
|
|
77
|
+
const model = this.model;
|
|
78
|
+
const operators = this.database.operators;
|
|
79
|
+
const originalFiler = import_lodash.default.cloneDeep(filter || {});
|
|
80
|
+
const flattenedFilter = (0, import_flat.flatten)(filter || {});
|
|
81
|
+
debug("flattened filter %o", flattenedFilter);
|
|
82
|
+
const include = {};
|
|
83
|
+
const where = {};
|
|
84
|
+
let skipPrefix = null;
|
|
85
|
+
const associations = model.associations;
|
|
86
|
+
debug("associations %O", associations);
|
|
87
|
+
for (const [key, _value] of Object.entries(flattenedFilter)) {
|
|
88
|
+
let value = _value;
|
|
89
|
+
if (skipPrefix && key.startsWith(skipPrefix)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if ((key == "$or" || key == "$and") && Array.isArray(value) && value.length == 0) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
debug('handle filter key "%s: "%s"', key, value);
|
|
96
|
+
const keys = key.split(".");
|
|
97
|
+
const paths = [];
|
|
98
|
+
const origins = [];
|
|
99
|
+
while (keys.length) {
|
|
100
|
+
debug("keys: %o, paths: %o, origins: %o", keys, paths, origins);
|
|
101
|
+
const firstKey = keys.shift();
|
|
102
|
+
origins.push(firstKey);
|
|
103
|
+
debug("origins: %o", origins);
|
|
104
|
+
if (firstKey.startsWith("$")) {
|
|
105
|
+
if (operators.has(firstKey)) {
|
|
106
|
+
debug("%s is operator", firstKey);
|
|
107
|
+
const opKey = operators.get(firstKey);
|
|
108
|
+
debug("operator key %s, operator: %o", firstKey, opKey);
|
|
109
|
+
if (typeof opKey === "symbol") {
|
|
110
|
+
paths.push(opKey);
|
|
111
|
+
continue;
|
|
112
|
+
} else if (typeof opKey === "function") {
|
|
113
|
+
skipPrefix = origins.join(".");
|
|
114
|
+
const queryValue = import_lodash.default.get((0, import_flat.unflatten)(originalFiler), skipPrefix);
|
|
115
|
+
const [fieldName, fullName] = this.getFieldNameFromQueryPath(skipPrefix);
|
|
116
|
+
value = opKey(queryValue, {
|
|
117
|
+
app: this.context.app,
|
|
118
|
+
db: this.database,
|
|
119
|
+
path: skipPrefix,
|
|
120
|
+
fullName,
|
|
121
|
+
fieldName,
|
|
122
|
+
fieldPath: `${this.collection.name}.${fullName}`,
|
|
123
|
+
model: this.model
|
|
124
|
+
});
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
paths.push(firstKey);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (!import_lodash.default.isNaN(parseInt(firstKey))) {
|
|
133
|
+
paths.push(firstKey);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (!associations[firstKey]) {
|
|
137
|
+
paths.push(firstKey);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const associationKeys = [];
|
|
141
|
+
associationKeys.push(firstKey);
|
|
142
|
+
debug("associationKeys %o", associationKeys);
|
|
143
|
+
const existInclude = import_lodash.default.get(include, firstKey);
|
|
144
|
+
if (!existInclude) {
|
|
145
|
+
import_lodash.default.set(include, firstKey, {
|
|
146
|
+
association: firstKey,
|
|
147
|
+
attributes: []
|
|
148
|
+
// out put empty fields by default
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
let target = associations[firstKey].target;
|
|
152
|
+
debug("association target %o", target);
|
|
153
|
+
while (target) {
|
|
154
|
+
const attr = keys.shift();
|
|
155
|
+
origins.push(attr);
|
|
156
|
+
if (target.rawAttributes[attr]) {
|
|
157
|
+
associationKeys.push(target.rawAttributes[attr].field || attr);
|
|
158
|
+
target = null;
|
|
159
|
+
} else if (target.associations[attr]) {
|
|
160
|
+
associationKeys.push(attr);
|
|
161
|
+
const assoc = [];
|
|
162
|
+
associationKeys.forEach((associationKey, index) => {
|
|
163
|
+
if (index > 0) {
|
|
164
|
+
assoc.push("include");
|
|
165
|
+
}
|
|
166
|
+
assoc.push(associationKey);
|
|
167
|
+
});
|
|
168
|
+
const existInclude2 = import_lodash.default.get(include, assoc);
|
|
169
|
+
if (!existInclude2) {
|
|
170
|
+
import_lodash.default.set(include, assoc, {
|
|
171
|
+
association: attr,
|
|
172
|
+
attributes: []
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
target = target.associations[attr].target;
|
|
176
|
+
} else {
|
|
177
|
+
throw new Error(`${attr} neither ${firstKey}'s association nor ${firstKey}'s attribute`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
debug("associationKeys %o", associationKeys);
|
|
181
|
+
if (associationKeys.length > 1) {
|
|
182
|
+
paths.push(`$${associationKeys.join(".")}$`);
|
|
183
|
+
} else {
|
|
184
|
+
paths.push(firstKey);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
debug("where %o, paths %o, value, %o", where, paths, value);
|
|
188
|
+
const values = import_lodash.default.get(where, paths);
|
|
189
|
+
if (values && typeof values === "object" && value && typeof value === "object") {
|
|
190
|
+
value = { ...value, ...values };
|
|
191
|
+
}
|
|
192
|
+
import_lodash.default.set(where, paths, value);
|
|
193
|
+
}
|
|
194
|
+
const toInclude = /* @__PURE__ */ __name((items) => {
|
|
195
|
+
return Object.values(items).map((item) => {
|
|
196
|
+
if (item.include) {
|
|
197
|
+
item.include = toInclude(item.include);
|
|
198
|
+
}
|
|
199
|
+
return item;
|
|
200
|
+
});
|
|
201
|
+
}, "toInclude");
|
|
202
|
+
debug("where %o, include %o", where, include);
|
|
203
|
+
const results = { where, include: toInclude(include) };
|
|
204
|
+
const traverseInclude = /* @__PURE__ */ __name((include2) => {
|
|
205
|
+
for (const item of include2) {
|
|
206
|
+
if (item.include) {
|
|
207
|
+
traverseInclude(item.include);
|
|
208
|
+
}
|
|
209
|
+
item.fromFilter = true;
|
|
210
|
+
}
|
|
211
|
+
}, "traverseInclude");
|
|
212
|
+
traverseInclude(results.include);
|
|
213
|
+
return results;
|
|
214
|
+
}
|
|
215
|
+
getFieldNameFromQueryPath(queryPath) {
|
|
216
|
+
const paths = queryPath.split(".");
|
|
217
|
+
let fieldName;
|
|
218
|
+
const fullPaths = [];
|
|
219
|
+
for (const path of paths) {
|
|
220
|
+
if (path.startsWith("$") || !import_lodash.default.isNaN(parseInt(path))) {
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
fullPaths.push(path);
|
|
224
|
+
fieldName = path;
|
|
225
|
+
}
|
|
226
|
+
return [fieldName, fullPaths.join(".")];
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
__name(_FilterParser, "FilterParser");
|
|
230
|
+
let FilterParser = _FilterParser;
|
package/lib/helpers.d.ts
ADDED
package/lib/helpers.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var helpers_exports = {};
|
|
30
|
+
__export(helpers_exports, {
|
|
31
|
+
checkDatabaseVersion: () => checkDatabaseVersion,
|
|
32
|
+
parseDatabaseOptionsFromEnv: () => parseDatabaseOptionsFromEnv
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(helpers_exports);
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_semver = __toESM(require("semver"));
|
|
37
|
+
function getEnvValue(key, defaultValue) {
|
|
38
|
+
return process.env[key] || defaultValue;
|
|
39
|
+
}
|
|
40
|
+
__name(getEnvValue, "getEnvValue");
|
|
41
|
+
function isFilePath(value) {
|
|
42
|
+
return import_fs.default.promises.stat(value).then((stats) => stats.isFile()).catch((err) => {
|
|
43
|
+
if (err.code === "ENOENT") {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
throw err;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
__name(isFilePath, "isFilePath");
|
|
50
|
+
function getValueOrFileContent(envVarName) {
|
|
51
|
+
const value = getEnvValue(envVarName);
|
|
52
|
+
if (!value) {
|
|
53
|
+
return Promise.resolve(null);
|
|
54
|
+
}
|
|
55
|
+
return isFilePath(value).then((isFile) => {
|
|
56
|
+
if (isFile) {
|
|
57
|
+
return import_fs.default.promises.readFile(value, "utf8");
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}).catch((error) => {
|
|
61
|
+
console.error(`Failed to read file content for environment variable ${envVarName}.`);
|
|
62
|
+
throw error;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
__name(getValueOrFileContent, "getValueOrFileContent");
|
|
66
|
+
function extractSSLOptionsFromEnv() {
|
|
67
|
+
return Promise.all([
|
|
68
|
+
getValueOrFileContent("DB_DIALECT_OPTIONS_SSL_MODE"),
|
|
69
|
+
getValueOrFileContent("DB_DIALECT_OPTIONS_SSL_CA"),
|
|
70
|
+
getValueOrFileContent("DB_DIALECT_OPTIONS_SSL_KEY"),
|
|
71
|
+
getValueOrFileContent("DB_DIALECT_OPTIONS_SSL_CERT"),
|
|
72
|
+
getValueOrFileContent("DB_DIALECT_OPTIONS_SSL_REJECT_UNAUTHORIZED")
|
|
73
|
+
]).then(([mode, ca, key, cert, rejectUnauthorized]) => {
|
|
74
|
+
const sslOptions = {};
|
|
75
|
+
if (mode) sslOptions["mode"] = mode;
|
|
76
|
+
if (ca) sslOptions["ca"] = ca;
|
|
77
|
+
if (key) sslOptions["key"] = key;
|
|
78
|
+
if (cert) sslOptions["cert"] = cert;
|
|
79
|
+
if (rejectUnauthorized) sslOptions["rejectUnauthorized"] = rejectUnauthorized === "true";
|
|
80
|
+
return sslOptions;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
__name(extractSSLOptionsFromEnv, "extractSSLOptionsFromEnv");
|
|
84
|
+
async function parseDatabaseOptionsFromEnv() {
|
|
85
|
+
const databaseOptions = {
|
|
86
|
+
logging: process.env.DB_LOGGING == "on" ? customLogger : false,
|
|
87
|
+
dialect: process.env.DB_DIALECT,
|
|
88
|
+
storage: process.env.DB_STORAGE,
|
|
89
|
+
username: process.env.DB_USER,
|
|
90
|
+
password: process.env.DB_PASSWORD,
|
|
91
|
+
database: process.env.DB_DATABASE,
|
|
92
|
+
host: process.env.DB_HOST,
|
|
93
|
+
port: process.env.DB_PORT,
|
|
94
|
+
timezone: process.env.DB_TIMEZONE,
|
|
95
|
+
tablePrefix: process.env.DB_TABLE_PREFIX,
|
|
96
|
+
schema: process.env.DB_SCHEMA,
|
|
97
|
+
underscored: process.env.DB_UNDERSCORED === "true"
|
|
98
|
+
};
|
|
99
|
+
const sslOptions = await extractSSLOptionsFromEnv();
|
|
100
|
+
if (Object.keys(sslOptions).length) {
|
|
101
|
+
databaseOptions.dialectOptions = databaseOptions.dialectOptions || {};
|
|
102
|
+
databaseOptions.dialectOptions["ssl"] = sslOptions;
|
|
103
|
+
}
|
|
104
|
+
return databaseOptions;
|
|
105
|
+
}
|
|
106
|
+
__name(parseDatabaseOptionsFromEnv, "parseDatabaseOptionsFromEnv");
|
|
107
|
+
function customLogger(queryString, queryObject) {
|
|
108
|
+
console.log(queryString);
|
|
109
|
+
if (queryObject == null ? void 0 : queryObject.bind) {
|
|
110
|
+
console.log(queryObject.bind);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
__name(customLogger, "customLogger");
|
|
114
|
+
const dialectVersionAccessors = {
|
|
115
|
+
sqlite: {
|
|
116
|
+
sql: "select sqlite_version() as version",
|
|
117
|
+
get: /* @__PURE__ */ __name((v) => v, "get"),
|
|
118
|
+
version: "3.x"
|
|
119
|
+
},
|
|
120
|
+
mysql: {
|
|
121
|
+
sql: "select version() as version",
|
|
122
|
+
get: /* @__PURE__ */ __name((v) => {
|
|
123
|
+
const m = /([\d+.]+)/.exec(v);
|
|
124
|
+
return m[0];
|
|
125
|
+
}, "get"),
|
|
126
|
+
version: ">=8.0.17"
|
|
127
|
+
},
|
|
128
|
+
mariadb: {
|
|
129
|
+
sql: "select version() as version",
|
|
130
|
+
get: /* @__PURE__ */ __name((v) => {
|
|
131
|
+
const m = /([\d+.]+)/.exec(v);
|
|
132
|
+
return m[0];
|
|
133
|
+
}, "get"),
|
|
134
|
+
version: ">=10.9"
|
|
135
|
+
},
|
|
136
|
+
postgres: {
|
|
137
|
+
sql: "select version() as version",
|
|
138
|
+
get: /* @__PURE__ */ __name((v) => {
|
|
139
|
+
const m = /([\d+.]+)/.exec(v);
|
|
140
|
+
return import_semver.default.minVersion(m[0]).version;
|
|
141
|
+
}, "get"),
|
|
142
|
+
version: ">=10"
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
async function checkDatabaseVersion(db) {
|
|
146
|
+
var _a;
|
|
147
|
+
const dialect = db.sequelize.getDialect();
|
|
148
|
+
const accessor = dialectVersionAccessors[dialect];
|
|
149
|
+
if (!accessor) {
|
|
150
|
+
throw new Error(`unsupported dialect ${dialect}`);
|
|
151
|
+
}
|
|
152
|
+
const result = await db.sequelize.query(accessor.sql, {
|
|
153
|
+
type: "SELECT"
|
|
154
|
+
});
|
|
155
|
+
const version = accessor.get((_a = result == null ? void 0 : result[0]) == null ? void 0 : _a.version);
|
|
156
|
+
const versionResult = import_semver.default.satisfies(version, accessor.version);
|
|
157
|
+
if (!versionResult) {
|
|
158
|
+
throw new Error(`to use ${dialect}, please ensure the version is ${accessor.version}`);
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
__name(checkDatabaseVersion, "checkDatabaseVersion");
|
|
163
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
164
|
+
0 && (module.exports = {
|
|
165
|
+
checkDatabaseVersion,
|
|
166
|
+
parseDatabaseOptionsFromEnv
|
|
167
|
+
});
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { BaseError, DataTypes, fn, literal, Op, Transaction, UniqueConstraintError, ValidationError, ValidationErrorItem, where, } from 'sequelize';
|
|
2
|
+
export type { BelongsToGetAssociationMixin, HasManyCountAssociationsMixin, HasManyCreateAssociationMixin, HasManyGetAssociationsMixin, ModelStatic, SyncOptions, } from 'sequelize';
|
|
3
|
+
export * from './collection';
|
|
4
|
+
export * from './collection-group-manager';
|
|
5
|
+
export * from './collection-importer';
|
|
6
|
+
export * from './database';
|
|
7
|
+
export { Database as default } from './database';
|
|
8
|
+
export * from './field-repository/array-field-repository';
|
|
9
|
+
export * from './fields';
|
|
10
|
+
export * from './filter-match';
|
|
11
|
+
export { default as FilterParser } from './filter-parser';
|
|
12
|
+
export * from './inherited-collection';
|
|
13
|
+
export * from './magic-attribute-model';
|
|
14
|
+
export * from './migration';
|
|
15
|
+
export * from './mock-database';
|
|
16
|
+
export * from './model';
|
|
17
|
+
export * from './relation-repository/belongs-to-many-repository';
|
|
18
|
+
export * from './relation-repository/belongs-to-repository';
|
|
19
|
+
export * from './relation-repository/hasmany-repository';
|
|
20
|
+
export * from './relation-repository/multiple-relation-repository';
|
|
21
|
+
export * from './relation-repository/single-relation-repository';
|
|
22
|
+
export * from './repository';
|
|
23
|
+
export * from './update-associations';
|
|
24
|
+
export { snakeCase } from './utils';
|
|
25
|
+
export * from './database-utils';
|
|
26
|
+
export * from './value-parsers';
|
|
27
|
+
export * from './view-collection';
|
|
28
|
+
export * from './view/view-inference';
|
|
29
|
+
export * from './sql-collection';
|
|
30
|
+
export * from './helpers';
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
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 __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var src_exports = {};
|
|
30
|
+
__export(src_exports, {
|
|
31
|
+
BaseError: () => import_sequelize.BaseError,
|
|
32
|
+
DataTypes: () => import_sequelize.DataTypes,
|
|
33
|
+
FilterParser: () => import_filter_parser.default,
|
|
34
|
+
Op: () => import_sequelize.Op,
|
|
35
|
+
Transaction: () => import_sequelize.Transaction,
|
|
36
|
+
UniqueConstraintError: () => import_sequelize.UniqueConstraintError,
|
|
37
|
+
ValidationError: () => import_sequelize.ValidationError,
|
|
38
|
+
ValidationErrorItem: () => import_sequelize.ValidationErrorItem,
|
|
39
|
+
default: () => import_database.Database,
|
|
40
|
+
fn: () => import_sequelize.fn,
|
|
41
|
+
literal: () => import_sequelize.literal,
|
|
42
|
+
snakeCase: () => import_utils.snakeCase,
|
|
43
|
+
where: () => import_sequelize.where
|
|
44
|
+
});
|
|
45
|
+
module.exports = __toCommonJS(src_exports);
|
|
46
|
+
var import_sequelize = require("sequelize");
|
|
47
|
+
__reExport(src_exports, require("./collection"), module.exports);
|
|
48
|
+
__reExport(src_exports, require("./collection-group-manager"), module.exports);
|
|
49
|
+
__reExport(src_exports, require("./collection-importer"), module.exports);
|
|
50
|
+
__reExport(src_exports, require("./database"), module.exports);
|
|
51
|
+
var import_database = require("./database");
|
|
52
|
+
__reExport(src_exports, require("./field-repository/array-field-repository"), module.exports);
|
|
53
|
+
__reExport(src_exports, require("./fields"), module.exports);
|
|
54
|
+
__reExport(src_exports, require("./filter-match"), module.exports);
|
|
55
|
+
var import_filter_parser = __toESM(require("./filter-parser"));
|
|
56
|
+
__reExport(src_exports, require("./inherited-collection"), module.exports);
|
|
57
|
+
__reExport(src_exports, require("./magic-attribute-model"), module.exports);
|
|
58
|
+
__reExport(src_exports, require("./migration"), module.exports);
|
|
59
|
+
__reExport(src_exports, require("./mock-database"), module.exports);
|
|
60
|
+
__reExport(src_exports, require("./model"), module.exports);
|
|
61
|
+
__reExport(src_exports, require("./relation-repository/belongs-to-many-repository"), module.exports);
|
|
62
|
+
__reExport(src_exports, require("./relation-repository/belongs-to-repository"), module.exports);
|
|
63
|
+
__reExport(src_exports, require("./relation-repository/hasmany-repository"), module.exports);
|
|
64
|
+
__reExport(src_exports, require("./relation-repository/multiple-relation-repository"), module.exports);
|
|
65
|
+
__reExport(src_exports, require("./relation-repository/single-relation-repository"), module.exports);
|
|
66
|
+
__reExport(src_exports, require("./repository"), module.exports);
|
|
67
|
+
__reExport(src_exports, require("./update-associations"), module.exports);
|
|
68
|
+
var import_utils = require("./utils");
|
|
69
|
+
__reExport(src_exports, require("./database-utils"), module.exports);
|
|
70
|
+
__reExport(src_exports, require("./value-parsers"), module.exports);
|
|
71
|
+
__reExport(src_exports, require("./view-collection"), module.exports);
|
|
72
|
+
__reExport(src_exports, require("./view/view-inference"), module.exports);
|
|
73
|
+
__reExport(src_exports, require("./sql-collection"), module.exports);
|
|
74
|
+
__reExport(src_exports, require("./helpers"), module.exports);
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
BaseError,
|
|
78
|
+
DataTypes,
|
|
79
|
+
FilterParser,
|
|
80
|
+
Op,
|
|
81
|
+
Transaction,
|
|
82
|
+
UniqueConstraintError,
|
|
83
|
+
ValidationError,
|
|
84
|
+
ValidationErrorItem,
|
|
85
|
+
fn,
|
|
86
|
+
literal,
|
|
87
|
+
snakeCase,
|
|
88
|
+
where,
|
|
89
|
+
...require("./collection"),
|
|
90
|
+
...require("./collection-group-manager"),
|
|
91
|
+
...require("./collection-importer"),
|
|
92
|
+
...require("./database"),
|
|
93
|
+
...require("./field-repository/array-field-repository"),
|
|
94
|
+
...require("./fields"),
|
|
95
|
+
...require("./filter-match"),
|
|
96
|
+
...require("./inherited-collection"),
|
|
97
|
+
...require("./magic-attribute-model"),
|
|
98
|
+
...require("./migration"),
|
|
99
|
+
...require("./mock-database"),
|
|
100
|
+
...require("./model"),
|
|
101
|
+
...require("./relation-repository/belongs-to-many-repository"),
|
|
102
|
+
...require("./relation-repository/belongs-to-repository"),
|
|
103
|
+
...require("./relation-repository/hasmany-repository"),
|
|
104
|
+
...require("./relation-repository/multiple-relation-repository"),
|
|
105
|
+
...require("./relation-repository/single-relation-repository"),
|
|
106
|
+
...require("./repository"),
|
|
107
|
+
...require("./update-associations"),
|
|
108
|
+
...require("./database-utils"),
|
|
109
|
+
...require("./value-parsers"),
|
|
110
|
+
...require("./view-collection"),
|
|
111
|
+
...require("./view/view-inference"),
|
|
112
|
+
...require("./sql-collection"),
|
|
113
|
+
...require("./helpers")
|
|
114
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Field } from '.';
|
|
2
|
+
import { Collection, CollectionContext, CollectionOptions } from './collection';
|
|
3
|
+
export declare class InheritedCollection extends Collection {
|
|
4
|
+
parents?: Collection[];
|
|
5
|
+
constructor(options: CollectionOptions, context: CollectionContext);
|
|
6
|
+
getParents(): Collection<any, any>[];
|
|
7
|
+
getFlatParents(): any[];
|
|
8
|
+
parentFields(): Map<string, Field>;
|
|
9
|
+
parentAttributes(): {};
|
|
10
|
+
isInherited(): boolean;
|
|
11
|
+
protected bindParents(): void;
|
|
12
|
+
protected setParents(inherits: string | string[]): void;
|
|
13
|
+
protected setParentFields(): void;
|
|
14
|
+
}
|