@balena/pinejs 19.7.2-build-esm-debc5e08e09b78ba96aec7ee219676236007e113-1 → 19.7.2-build-update-deps-a909ee054f395de407ec4e1275fd0f5b7514fe29-1
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/.versionbot/CHANGELOG.yml +3 -3
- package/CHANGELOG.md +1 -1
- package/{Gruntfile.cts → Gruntfile.ts} +22 -9
- package/bin/abstract-sql-compiler.js +1 -1
- package/bin/odata-compiler.js +1 -1
- package/bin/sbvr-compiler.js +1 -1
- package/build/{browser.cts → browser.ts} +1 -1
- package/build/{config.cts → config.ts} +1 -5
- package/build/{module.cts → module.ts} +1 -1
- package/build/{server.cts → server.ts} +1 -1
- package/out/bin/abstract-sql-compiler.js +19 -17
- package/out/bin/abstract-sql-compiler.js.map +1 -1
- package/out/bin/odata-compiler.js +21 -19
- package/out/bin/odata-compiler.js.map +1 -1
- package/out/bin/sbvr-compiler.js +54 -19
- package/out/bin/sbvr-compiler.js.map +1 -1
- package/out/bin/utils.d.ts +3 -3
- package/out/bin/utils.js +53 -21
- package/out/bin/utils.js.map +1 -1
- package/out/config-loader/config-loader.d.ts +6 -6
- package/out/config-loader/config-loader.js +63 -23
- package/out/config-loader/config-loader.js.map +1 -1
- package/out/config-loader/env.d.ts +1 -1
- package/out/config-loader/env.js +66 -24
- package/out/config-loader/env.js.map +1 -1
- package/out/data-server/sbvr-server.d.ts +3 -3
- package/out/data-server/sbvr-server.js +42 -5
- package/out/data-server/sbvr-server.js.map +1 -1
- package/out/database-layer/db.d.ts +3 -3
- package/out/database-layer/db.js +83 -37
- package/out/database-layer/db.js.map +1 -1
- package/out/express-emulator/express.js.map +1 -1
- package/out/extended-sbvr-parser/extended-sbvr-parser.js +11 -8
- package/out/extended-sbvr-parser/extended-sbvr-parser.js.map +1 -1
- package/out/http-transactions/transactions.d.ts +2 -2
- package/out/http-transactions/transactions.js +4 -4
- package/out/http-transactions/transactions.js.map +1 -1
- package/out/migrator/async.d.ts +2 -2
- package/out/migrator/async.js +60 -20
- package/out/migrator/async.js.map +1 -1
- package/out/migrator/migrations.js +2 -1
- package/out/migrator/sync.d.ts +6 -6
- package/out/migrator/sync.js +61 -20
- package/out/migrator/sync.js.map +1 -1
- package/out/migrator/utils.d.ts +4 -4
- package/out/migrator/utils.js +97 -42
- package/out/migrator/utils.js.map +1 -1
- package/out/odata-metadata/odata-metadata-generator.js +14 -7
- package/out/odata-metadata/odata-metadata-generator.js.map +1 -1
- package/out/passport-pinejs/mount-login-router.d.ts +1 -1
- package/out/passport-pinejs/mount-login-router.js +41 -4
- package/out/passport-pinejs/mount-login-router.js.map +1 -1
- package/out/passport-pinejs/passport-pinejs.d.ts +1 -1
- package/out/passport-pinejs/passport-pinejs.js +46 -11
- package/out/passport-pinejs/passport-pinejs.js.map +1 -1
- package/out/pinejs-session-store/pinejs-session-store.d.ts +1 -1
- package/out/pinejs-session-store/pinejs-session-store.js +48 -11
- package/out/pinejs-session-store/pinejs-session-store.js.map +1 -1
- package/out/sbvr-api/abstract-sql.d.ts +2 -2
- package/out/sbvr-api/abstract-sql.js +65 -22
- package/out/sbvr-api/abstract-sql.js.map +1 -1
- package/out/sbvr-api/cached-compile.js +15 -8
- package/out/sbvr-api/cached-compile.js.map +1 -1
- package/out/sbvr-api/common-types.js +2 -1
- package/out/sbvr-api/control-flow.d.ts +1 -1
- package/out/sbvr-api/control-flow.js +25 -12
- package/out/sbvr-api/control-flow.js.map +1 -1
- package/out/sbvr-api/dev.js +2 -1
- package/out/sbvr-api/errors.d.ts +1 -1
- package/out/sbvr-api/errors.js +95 -47
- package/out/sbvr-api/errors.js.map +1 -1
- package/out/sbvr-api/express-extension.d.ts +2 -2
- package/out/sbvr-api/express-extension.js +2 -1
- package/out/sbvr-api/hooks.d.ts +4 -4
- package/out/sbvr-api/hooks.js +35 -23
- package/out/sbvr-api/hooks.js.map +1 -1
- package/out/sbvr-api/odata-response.d.ts +2 -2
- package/out/sbvr-api/odata-response.js +29 -19
- package/out/sbvr-api/odata-response.js.map +1 -1
- package/out/sbvr-api/permissions.d.ts +8 -8
- package/out/sbvr-api/permissions.js +159 -106
- package/out/sbvr-api/permissions.js.map +1 -1
- package/out/sbvr-api/sbvr-utils.d.ts +16 -38
- package/out/sbvr-api/sbvr-utils.js +285 -222
- package/out/sbvr-api/sbvr-utils.js.map +1 -1
- package/out/sbvr-api/translations.d.ts +1 -1
- package/out/sbvr-api/translations.js +17 -10
- package/out/sbvr-api/translations.js.map +1 -1
- package/out/sbvr-api/uri-parser.d.ts +6 -6
- package/out/sbvr-api/uri-parser.js +84 -39
- package/out/sbvr-api/uri-parser.js.map +1 -1
- package/out/sbvr-api/user.js +2 -1
- package/out/server-glue/global-ext.d.ts +3 -0
- package/out/server-glue/module.d.ts +15 -15
- package/out/server-glue/module.js +59 -20
- package/out/server-glue/module.js.map +1 -1
- package/out/server-glue/sbvr-loader.d.ts +1 -2
- package/out/server-glue/sbvr-loader.js +11 -4
- package/out/server-glue/sbvr-loader.js.map +1 -1
- package/out/server-glue/server.d.ts +2 -2
- package/out/server-glue/server.js +59 -17
- package/out/server-glue/server.js.map +1 -1
- package/out/tasks/common.d.ts +1 -1
- package/out/tasks/common.js +9 -3
- package/out/tasks/common.js.map +1 -1
- package/out/tasks/index.d.ts +8 -8
- package/out/tasks/index.js +63 -25
- package/out/tasks/index.js.map +1 -1
- package/out/tasks/tasks.js +2 -1
- package/out/tasks/worker.d.ts +3 -3
- package/out/tasks/worker.js +51 -14
- package/out/tasks/worker.js.map +1 -1
- package/out/webresource-handler/handlers/NoopHandler.d.ts +1 -1
- package/out/webresource-handler/handlers/NoopHandler.js +5 -1
- package/out/webresource-handler/handlers/NoopHandler.js.map +1 -1
- package/out/webresource-handler/handlers/S3Handler.d.ts +1 -1
- package/out/webresource-handler/handlers/S3Handler.js +24 -17
- package/out/webresource-handler/handlers/S3Handler.js.map +1 -1
- package/out/webresource-handler/handlers/index.d.ts +2 -2
- package/out/webresource-handler/handlers/index.js +18 -2
- package/out/webresource-handler/handlers/index.js.map +1 -1
- package/out/webresource-handler/index.d.ts +1 -1
- package/out/webresource-handler/index.js +85 -35
- package/out/webresource-handler/index.js.map +1 -1
- package/package.json +33 -33
- package/src/bin/abstract-sql-compiler.ts +3 -3
- package/src/bin/odata-compiler.ts +3 -3
- package/src/bin/sbvr-compiler.ts +2 -2
- package/src/bin/utils.ts +15 -23
- package/src/config-loader/config-loader.ts +11 -11
- package/src/config-loader/env.ts +3 -3
- package/src/data-server/sbvr-server.ts +4 -4
- package/src/database-layer/db.ts +11 -18
- package/src/extended-sbvr-parser/extended-sbvr-parser.ts +5 -5
- package/src/http-transactions/transactions.js +4 -4
- package/src/migrator/async.ts +5 -5
- package/src/migrator/sync.ts +8 -8
- package/src/migrator/utils.ts +7 -7
- package/src/odata-metadata/odata-metadata-generator.ts +2 -3
- package/src/passport-pinejs/mount-login-router.ts +3 -3
- package/src/passport-pinejs/passport-pinejs.ts +3 -3
- package/src/pinejs-session-store/pinejs-session-store.ts +4 -4
- package/src/sbvr-api/abstract-sql.ts +5 -5
- package/src/sbvr-api/cached-compile.ts +1 -1
- package/src/sbvr-api/control-flow.ts +1 -1
- package/src/sbvr-api/errors.ts +1 -1
- package/src/sbvr-api/express-extension.ts +2 -2
- package/src/sbvr-api/hooks.ts +5 -5
- package/src/sbvr-api/odata-response.ts +4 -8
- package/src/sbvr-api/permissions.ts +17 -17
- package/src/sbvr-api/sbvr-utils.ts +31 -37
- package/src/sbvr-api/translations.ts +1 -1
- package/src/sbvr-api/uri-parser.ts +9 -9
- package/src/server-glue/global-ext.d.ts +3 -0
- package/src/server-glue/module.ts +19 -19
- package/src/server-glue/sbvr-loader.ts +27 -15
- package/src/server-glue/server.ts +24 -13
- package/src/tasks/common.ts +1 -1
- package/src/tasks/index.ts +14 -14
- package/src/tasks/worker.ts +8 -8
- package/src/webresource-handler/handlers/NoopHandler.ts +1 -5
- package/src/webresource-handler/handlers/S3Handler.ts +1 -1
- package/src/webresource-handler/handlers/index.ts +2 -2
- package/src/webresource-handler/index.ts +8 -8
- package/tsconfig.dev.json +2 -4
- package/tsconfig.json +1 -1
- package/typings/lf-to-abstract-sql.d.ts +2 -2
- package/typings/memoizee.d.ts +1 -1
@@ -1,45 +1,84 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
37
|
+
};
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
39
|
+
exports.postSetup = exports.setup = exports.executeStandardModels = exports.handleHttpErrors = exports.onHandleHttpError = exports.handleODataRequest = exports.getApiRoot = exports.getModel = exports.getAffectedIds = exports.getAbstractSqlModel = exports.runURI = exports.logger = exports.api = exports.PinejsClient = exports.runRule = exports.getID = exports.deleteModel = exports.postExecuteModels = exports.executeModels = exports.executeModel = exports.generateSqlModel = exports.generateAbstractSqlModel = exports.generateLfModel = exports.validateModel = exports.isModelNew = exports.resolveNavigationResource = exports.resolveSynonym = exports.resolveOdataBind = exports.sbvrTypes = exports.db = exports.addSideEffectHook = exports.addPureHook = void 0;
|
40
|
+
exports.generateModels = generateModels;
|
41
|
+
const lodash_1 = __importDefault(require("lodash"));
|
42
|
+
const cached_compile_1 = require("./cached-compile");
|
43
|
+
const AbstractSQLCompiler = __importStar(require("@balena/abstract-sql-compiler"));
|
44
|
+
const package_json_1 = require("@balena/abstract-sql-compiler/package.json");
|
45
|
+
const LF2AbstractSQL = __importStar(require("@balena/lf-to-abstract-sql"));
|
46
|
+
const odata_to_abstract_sql_1 = require("@balena/odata-to-abstract-sql");
|
47
|
+
const sbvr_types_1 = __importDefault(require("@balena/sbvr-types"));
|
48
|
+
exports.sbvrTypes = sbvr_types_1.default;
|
49
|
+
const deepFreeze = require("deep-freeze");
|
50
|
+
const pinejs_client_core_1 = require("pinejs-client-core");
|
51
|
+
const extended_sbvr_parser_1 = require("../extended-sbvr-parser/extended-sbvr-parser");
|
52
|
+
const asyncMigrator = __importStar(require("../migrator/async"));
|
53
|
+
const syncMigrator = __importStar(require("../migrator/sync"));
|
54
|
+
const odata_metadata_generator_1 = require("../odata-metadata/odata-metadata-generator");
|
55
|
+
const sbvr_loader_1 = require("../server-glue/sbvr-loader");
|
56
|
+
const devModel = (0, sbvr_loader_1.requireSBVR)('./dev.sbvr', require);
|
57
|
+
const permissions = __importStar(require("./permissions"));
|
58
|
+
const errors_1 = require("./errors");
|
59
|
+
const uriParser = __importStar(require("./uri-parser"));
|
60
|
+
const hooks_1 = require("./hooks");
|
61
|
+
var hooks_2 = require("./hooks");
|
62
|
+
Object.defineProperty(exports, "addPureHook", { enumerable: true, get: function () { return hooks_2.addPureHook; } });
|
63
|
+
Object.defineProperty(exports, "addSideEffectHook", { enumerable: true, get: function () { return hooks_2.addSideEffectHook; } });
|
64
|
+
const weak_1 = __importDefault(require("memoizee/weak"));
|
65
|
+
const controlFlow = __importStar(require("./control-flow"));
|
66
|
+
exports.db = undefined;
|
67
|
+
const package_json_2 = require("@balena/lf-to-abstract-sql/package.json");
|
68
|
+
const package_json_3 = require("@balena/sbvr-types/package.json");
|
69
|
+
const abstract_sql_1 = require("./abstract-sql");
|
70
|
+
var abstract_sql_2 = require("./abstract-sql");
|
71
|
+
Object.defineProperty(exports, "resolveOdataBind", { enumerable: true, get: function () { return abstract_sql_2.resolveOdataBind; } });
|
72
|
+
const odataResponse = __importStar(require("./odata-response"));
|
73
|
+
const module_1 = require("../server-glue/module");
|
74
|
+
const translations_1 = require("./translations");
|
75
|
+
const utils_1 = require("../migrator/utils");
|
76
|
+
const LF2AbstractSQLTranslator = LF2AbstractSQL.createTranslator(sbvr_types_1.default);
|
77
|
+
const LF2AbstractSQLTranslatorVersion = `${package_json_2.version}+${package_json_3.version}`;
|
39
78
|
const models = {};
|
40
|
-
const memoizedResolvedSynonym =
|
41
|
-
const sqlName = odataNameToSqlName(resourceName);
|
42
|
-
return
|
79
|
+
const memoizedResolvedSynonym = (0, weak_1.default)((abstractSqlModel, resourceName) => {
|
80
|
+
const sqlName = (0, odata_to_abstract_sql_1.odataNameToSqlName)(resourceName);
|
81
|
+
return (0, lodash_1.default)(sqlName)
|
43
82
|
.split('-')
|
44
83
|
.map((namePart) => {
|
45
84
|
const synonym = abstractSqlModel.synonyms[namePart];
|
@@ -50,41 +89,43 @@ const memoizedResolvedSynonym = memoizeWeak((abstractSqlModel, resourceName) =>
|
|
50
89
|
})
|
51
90
|
.join('-');
|
52
91
|
}, { primitive: true });
|
53
|
-
|
54
|
-
const abstractSqlModel = getAbstractSqlModel(request);
|
92
|
+
const resolveSynonym = (request) => {
|
93
|
+
const abstractSqlModel = (0, exports.getAbstractSqlModel)(request);
|
55
94
|
return memoizedResolvedSynonym(abstractSqlModel, request.resourceName);
|
56
95
|
};
|
57
|
-
|
58
|
-
|
96
|
+
exports.resolveSynonym = resolveSynonym;
|
97
|
+
const memoizedResolveNavigationResource = (0, weak_1.default)((abstractSqlModel, resourceName, navigationName) => {
|
98
|
+
const navigation = (0, odata_to_abstract_sql_1.odataNameToSqlName)(navigationName)
|
59
99
|
.split('-')
|
60
100
|
.flatMap((namePart) => memoizedResolvedSynonym(abstractSqlModel, namePart).split('-'));
|
61
101
|
navigation.push('$');
|
62
102
|
const resolvedResourceName = memoizedResolvedSynonym(abstractSqlModel, resourceName);
|
63
|
-
const mapping =
|
103
|
+
const mapping = lodash_1.default.get(abstractSqlModel.relationships[resolvedResourceName], navigation);
|
64
104
|
if (mapping == null) {
|
65
105
|
throw new Error(`Cannot navigate from '${resourceName}' to '${navigationName}'`);
|
66
106
|
}
|
67
107
|
if (mapping.length < 2) {
|
68
108
|
throw new Error(`'${resourceName}' to '${navigationName}' is a field not a navigation`);
|
69
109
|
}
|
70
|
-
return sqlNameToODataName(abstractSqlModel.tables[mapping[1][0]].name);
|
110
|
+
return (0, odata_to_abstract_sql_1.sqlNameToODataName)(abstractSqlModel.tables[mapping[1][0]].name);
|
71
111
|
}, { primitive: true });
|
72
|
-
|
73
|
-
const abstractSqlModel = getAbstractSqlModel(request);
|
112
|
+
const resolveNavigationResource = (request, navigationName) => {
|
113
|
+
const abstractSqlModel = (0, exports.getAbstractSqlModel)(request);
|
74
114
|
return memoizedResolveNavigationResource(abstractSqlModel, request.resourceName, navigationName);
|
75
115
|
};
|
116
|
+
exports.resolveNavigationResource = resolveNavigationResource;
|
76
117
|
const prettifyConstraintError = (err, request) => {
|
77
|
-
if (err instanceof db.ConstraintError) {
|
118
|
+
if (err instanceof exports.db.ConstraintError) {
|
78
119
|
let keyMatches = null;
|
79
120
|
let violatedConstraintInfo;
|
80
|
-
if (err instanceof db.UniqueConstraintError) {
|
81
|
-
switch (db.engine) {
|
121
|
+
if (err instanceof exports.db.UniqueConstraintError) {
|
122
|
+
switch (exports.db.engine) {
|
82
123
|
case 'mysql':
|
83
124
|
keyMatches =
|
84
125
|
/ER_DUP_ENTRY: Duplicate entry '.*?[^\\]' for key '(.*?[^\\])'/.exec(err.message);
|
85
126
|
break;
|
86
127
|
case 'postgres': {
|
87
|
-
const resourceName = resolveSynonym(request);
|
128
|
+
const resourceName = (0, exports.resolveSynonym)(request);
|
88
129
|
const abstractSqlModel = getFinalAbstractSqlModel(request);
|
89
130
|
const table = abstractSqlModel.tables[resourceName];
|
90
131
|
keyMatches = new RegExp('"' + table.name + '_(.*?)_key"').exec(err.message);
|
@@ -102,30 +143,30 @@ const prettifyConstraintError = (err, request) => {
|
|
102
143
|
}
|
103
144
|
if (keyMatches != null) {
|
104
145
|
const columns = keyMatches[1].split('_');
|
105
|
-
throw new db.UniqueConstraintError('"' +
|
106
|
-
columns.map(sqlNameToODataName).join('" and "') +
|
146
|
+
throw new exports.db.UniqueConstraintError('"' +
|
147
|
+
columns.map(odata_to_abstract_sql_1.sqlNameToODataName).join('" and "') +
|
107
148
|
'" must be unique.');
|
108
149
|
}
|
109
150
|
if (violatedConstraintInfo != null) {
|
110
151
|
const { table, name: violatedConstraintName } = violatedConstraintInfo;
|
111
152
|
const violatedUniqueIndex = table.indexes.find((idx) => idx.name === violatedConstraintName);
|
112
153
|
if (violatedUniqueIndex?.description != null) {
|
113
|
-
throw new BadRequestError(violatedUniqueIndex.description);
|
154
|
+
throw new errors_1.BadRequestError(violatedUniqueIndex.description);
|
114
155
|
}
|
115
156
|
}
|
116
|
-
throw new db.UniqueConstraintError('Unique key constraint violated');
|
157
|
+
throw new exports.db.UniqueConstraintError('Unique key constraint violated');
|
117
158
|
}
|
118
|
-
if (err instanceof db.ExclusionConstraintError) {
|
119
|
-
throw new db.ExclusionConstraintError('Exclusion constraint violated');
|
159
|
+
if (err instanceof exports.db.ExclusionConstraintError) {
|
160
|
+
throw new exports.db.ExclusionConstraintError('Exclusion constraint violated');
|
120
161
|
}
|
121
|
-
if (err instanceof db.ForeignKeyConstraintError) {
|
122
|
-
switch (db.engine) {
|
162
|
+
if (err instanceof exports.db.ForeignKeyConstraintError) {
|
163
|
+
switch (exports.db.engine) {
|
123
164
|
case 'mysql':
|
124
165
|
keyMatches =
|
125
166
|
/ER_ROW_IS_REFERENCED_: Cannot delete or update a parent row: a foreign key constraint fails \(".*?"\.(".*?").*/.exec(err.message);
|
126
167
|
break;
|
127
168
|
case 'postgres': {
|
128
|
-
const resourceName = resolveSynonym(request);
|
169
|
+
const resourceName = (0, exports.resolveSynonym)(request);
|
129
170
|
const abstractSqlModel = getFinalAbstractSqlModel(request);
|
130
171
|
const tableName = abstractSqlModel.tables[resourceName].name;
|
131
172
|
keyMatches = new RegExp('"' +
|
@@ -142,16 +183,16 @@ const prettifyConstraintError = (err, request) => {
|
|
142
183
|
}
|
143
184
|
}
|
144
185
|
if (keyMatches == null) {
|
145
|
-
throw new db.ForeignKeyConstraintError('Foreign key constraint violated');
|
186
|
+
throw new exports.db.ForeignKeyConstraintError('Foreign key constraint violated');
|
146
187
|
}
|
147
|
-
throw new db.ForeignKeyConstraintError('Data is referenced by ' + sqlNameToODataName(keyMatches[1]) + '.');
|
188
|
+
throw new exports.db.ForeignKeyConstraintError('Data is referenced by ' + (0, odata_to_abstract_sql_1.sqlNameToODataName)(keyMatches[1]) + '.');
|
148
189
|
}
|
149
|
-
if (err instanceof db.CheckConstraintError) {
|
150
|
-
const resourceName = resolveSynonym(request);
|
190
|
+
if (err instanceof exports.db.CheckConstraintError) {
|
191
|
+
const resourceName = (0, exports.resolveSynonym)(request);
|
151
192
|
const abstractSqlModel = getFinalAbstractSqlModel(request);
|
152
193
|
const table = abstractSqlModel.tables[resourceName];
|
153
194
|
if (table.checks) {
|
154
|
-
switch (db.engine) {
|
195
|
+
switch (exports.db.engine) {
|
155
196
|
case 'postgres':
|
156
197
|
keyMatches = new RegExp('new row for relation "' +
|
157
198
|
table.name +
|
@@ -163,17 +204,17 @@ const prettifyConstraintError = (err, request) => {
|
|
163
204
|
const checkName = keyMatches[1];
|
164
205
|
const check = table.checks.find((c) => c.name === checkName);
|
165
206
|
if (check?.description != null) {
|
166
|
-
throw new BadRequestError(check.description);
|
207
|
+
throw new errors_1.BadRequestError(check.description);
|
167
208
|
}
|
168
209
|
}
|
169
|
-
throw new BadRequestError('Check constraint violated');
|
210
|
+
throw new errors_1.BadRequestError('Check constraint violated');
|
170
211
|
}
|
171
212
|
err.message = 'Constraint failed';
|
172
213
|
throw err;
|
173
214
|
}
|
174
215
|
};
|
175
216
|
let cachedIsModelNew;
|
176
|
-
|
217
|
+
const isModelNew = async (tx, modelName) => {
|
177
218
|
const result = await tx.tableList("name = 'model'");
|
178
219
|
if (result.rows.length === 0) {
|
179
220
|
return true;
|
@@ -184,11 +225,12 @@ export const isModelNew = async (tx, modelName) => {
|
|
184
225
|
}
|
185
226
|
return !cachedIsModelNew.has(modelName);
|
186
227
|
};
|
228
|
+
exports.isModelNew = isModelNew;
|
187
229
|
const bindsForAffectedIds = (bindings, request) => {
|
188
230
|
if (request?.affectedIds == null) {
|
189
231
|
return {};
|
190
232
|
}
|
191
|
-
const tableName = getAbstractSqlModel(request).tables[resolveSynonym(request)].name;
|
233
|
+
const tableName = (0, exports.getAbstractSqlModel)(request).tables[(0, exports.resolveSynonym)(request)].name;
|
192
234
|
const isDelete = request.method === 'DELETE';
|
193
235
|
const odataBinds = {};
|
194
236
|
for (const bind of bindings) {
|
@@ -207,45 +249,49 @@ const bindsForAffectedIds = (bindings, request) => {
|
|
207
249
|
}
|
208
250
|
return odataBinds;
|
209
251
|
};
|
210
|
-
|
252
|
+
const validateModel = async (tx, modelName, request) => {
|
211
253
|
const { sql } = models[modelName];
|
212
254
|
if (!sql) {
|
213
255
|
throw new Error(`Tried to validate a virtual model: '${modelName}'`);
|
214
256
|
}
|
215
257
|
await Promise.all(sql.rules.map(async (rule) => {
|
216
|
-
if (!isRuleAffected(rule, request)) {
|
258
|
+
if (!(0, abstract_sql_1.isRuleAffected)(rule, request)) {
|
217
259
|
return;
|
218
260
|
}
|
219
|
-
const values = await getAndCheckBindValues({
|
261
|
+
const values = await (0, abstract_sql_1.getAndCheckBindValues)({
|
220
262
|
vocabulary: modelName,
|
221
263
|
odataBinds: bindsForAffectedIds(rule.bindings, request),
|
222
264
|
values: {},
|
223
|
-
engine: db.engine,
|
265
|
+
engine: exports.db.engine,
|
224
266
|
}, rule.bindings);
|
225
267
|
const result = await tx.executeSql(rule.sql, values);
|
226
268
|
const v = result.rows[0].result;
|
227
269
|
if (v === false || v === 0 || v === '0') {
|
228
|
-
throw new SbvrValidationError(rule.structuredEnglish);
|
270
|
+
throw new errors_1.SbvrValidationError(rule.structuredEnglish);
|
229
271
|
}
|
230
272
|
}));
|
231
273
|
};
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
274
|
+
exports.validateModel = validateModel;
|
275
|
+
const generateLfModel = (seModel) => (0, cached_compile_1.cachedCompile)('lfModel', extended_sbvr_parser_1.ExtendedSBVRParser.version, seModel, () => extended_sbvr_parser_1.ExtendedSBVRParser.matchAll(seModel, 'Process'));
|
276
|
+
exports.generateLfModel = generateLfModel;
|
277
|
+
const generateAbstractSqlModel = (lfModel) => (0, cached_compile_1.cachedCompile)('abstractSqlModel', LF2AbstractSQLTranslatorVersion, lfModel, () => LF2AbstractSQLTranslator(lfModel, 'Process'));
|
278
|
+
exports.generateAbstractSqlModel = generateAbstractSqlModel;
|
279
|
+
const generateSqlModel = (abstractSql, targetDatabaseEngine) => (0, cached_compile_1.cachedCompile)('sqlModel', package_json_1.version + '+' + targetDatabaseEngine, abstractSql, () => AbstractSQLCompiler[targetDatabaseEngine].compileSchema(abstractSql));
|
280
|
+
exports.generateSqlModel = generateSqlModel;
|
281
|
+
function generateModels(model, targetDatabaseEngine) {
|
236
282
|
const { apiRoot: vocab, modelText: se, translateTo, translations } = model;
|
237
283
|
let { abstractSql: maybeAbstractSql } = model;
|
238
284
|
let lf;
|
239
285
|
if (se) {
|
240
286
|
try {
|
241
|
-
lf = generateLfModel(se);
|
287
|
+
lf = (0, exports.generateLfModel)(se);
|
242
288
|
}
|
243
289
|
catch (e) {
|
244
290
|
console.error(`Error parsing model '${vocab}':`, e);
|
245
291
|
throw new Error(`Error parsing model '${vocab}': ${e}`);
|
246
292
|
}
|
247
293
|
try {
|
248
|
-
maybeAbstractSql = generateAbstractSqlModel(lf);
|
294
|
+
maybeAbstractSql = (0, exports.generateAbstractSqlModel)(lf);
|
249
295
|
}
|
250
296
|
catch (e) {
|
251
297
|
console.error(`Error translating model '${vocab}':`, e);
|
@@ -253,18 +299,18 @@ export function generateModels(model, targetDatabaseEngine) {
|
|
253
299
|
}
|
254
300
|
}
|
255
301
|
const abstractSql = maybeAbstractSql;
|
256
|
-
const odataMetadata = cachedCompile('metadata', generateODataMetadata.version, { vocab, abstractSqlModel: abstractSql }, () => generateODataMetadata(vocab, abstractSql));
|
302
|
+
const odataMetadata = (0, cached_compile_1.cachedCompile)('metadata', odata_metadata_generator_1.generateODataMetadata.version, { vocab, abstractSqlModel: abstractSql }, () => (0, odata_metadata_generator_1.generateODataMetadata)(vocab, abstractSql));
|
257
303
|
let sql;
|
258
304
|
let resourceRenames;
|
259
305
|
if (translateTo != null) {
|
260
|
-
resourceRenames = translateAbstractSqlModel(abstractSql, models[translateTo].abstractSql, model.apiRoot, translateTo, translations);
|
306
|
+
resourceRenames = (0, translations_1.translateAbstractSqlModel)(abstractSql, models[translateTo].abstractSql, model.apiRoot, translateTo, translations);
|
261
307
|
}
|
262
308
|
else {
|
263
309
|
for (const [key, table] of Object.entries(abstractSql.tables)) {
|
264
310
|
abstractSql.tables[`${key}$${model.apiRoot}`] = { ...table };
|
265
311
|
}
|
266
312
|
try {
|
267
|
-
sql = generateSqlModel(abstractSql, targetDatabaseEngine);
|
313
|
+
sql = (0, exports.generateSqlModel)(abstractSql, targetDatabaseEngine);
|
268
314
|
}
|
269
315
|
catch (e) {
|
270
316
|
console.error(`Error compiling model '${vocab}':`, e);
|
@@ -282,17 +328,18 @@ export function generateModels(model, targetDatabaseEngine) {
|
|
282
328
|
odataMetadata,
|
283
329
|
};
|
284
330
|
}
|
285
|
-
|
286
|
-
|
331
|
+
const executeModel = (tx, model) => (0, exports.executeModels)(tx, [model]);
|
332
|
+
exports.executeModel = executeModel;
|
333
|
+
const executeModels = async (tx, execModels) => {
|
287
334
|
try {
|
288
335
|
const compiledModels = await Promise.all(execModels.map(async (model) => {
|
289
336
|
const { apiRoot } = model;
|
290
337
|
const migrationExecutionResult = await syncMigrator.run(tx, model);
|
291
|
-
const compiledModel = generateModels(model, db.engine);
|
338
|
+
const compiledModel = generateModels(model, exports.db.engine);
|
292
339
|
if (compiledModel.sql) {
|
293
340
|
for (const createStatement of compiledModel.sql.createSchema) {
|
294
341
|
const promise = tx.executeSql(createStatement);
|
295
|
-
if (db.engine === 'websql') {
|
342
|
+
if (exports.db.engine === 'websql') {
|
296
343
|
promise.catch((err) => {
|
297
344
|
console.warn("Ignoring errors in the create table statements for websql as it doesn't support CREATE IF NOT EXISTS", err);
|
298
345
|
});
|
@@ -315,19 +362,19 @@ export const executeModels = async (tx, execModels) => {
|
|
315
362
|
},
|
316
363
|
};
|
317
364
|
if (compiledModel.sql) {
|
318
|
-
await validateModel(tx, apiRoot);
|
365
|
+
await (0, exports.validateModel)(tx, apiRoot);
|
319
366
|
}
|
320
|
-
api[apiRoot] = new PinejsClient('/' + apiRoot + '/');
|
321
|
-
logger[apiRoot] = { ...console };
|
367
|
+
exports.api[apiRoot] = new PinejsClient('/' + apiRoot + '/');
|
368
|
+
exports.logger[apiRoot] = { ...console };
|
322
369
|
if (model.logging != null) {
|
323
370
|
const defaultSetting = model.logging?.default ?? true;
|
324
|
-
const log = logger[apiRoot];
|
371
|
+
const log = exports.logger[apiRoot];
|
325
372
|
for (const k of Object.keys(model.logging)) {
|
326
373
|
const key = k;
|
327
374
|
if (key !== 'Console' &&
|
328
375
|
typeof log[key] === 'function' &&
|
329
376
|
!(model.logging?.[key] ?? defaultSetting)) {
|
330
|
-
log[key] =
|
377
|
+
log[key] = lodash_1.default.noop;
|
331
378
|
}
|
332
379
|
}
|
333
380
|
}
|
@@ -336,7 +383,7 @@ export const executeModels = async (tx, execModels) => {
|
|
336
383
|
await Promise.all(compiledModels.map(async (model) => {
|
337
384
|
const updateModel = async (modelType) => {
|
338
385
|
if (model[modelType] == null) {
|
339
|
-
await api.dev.delete({
|
386
|
+
await exports.api.dev.delete({
|
340
387
|
resource: 'model',
|
341
388
|
passthrough: {
|
342
389
|
tx,
|
@@ -351,7 +398,7 @@ export const executeModels = async (tx, execModels) => {
|
|
351
398
|
});
|
352
399
|
return;
|
353
400
|
}
|
354
|
-
const result = await api.dev.get({
|
401
|
+
const result = await exports.api.dev.get({
|
355
402
|
resource: 'model',
|
356
403
|
passthrough: {
|
357
404
|
tx,
|
@@ -383,7 +430,7 @@ export const executeModels = async (tx, execModels) => {
|
|
383
430
|
else {
|
384
431
|
uri += '?returnResource=false';
|
385
432
|
}
|
386
|
-
return await runURI(method, uri, body, tx, permissions.root);
|
433
|
+
return await (0, exports.runURI)(method, uri, body, tx, permissions.root);
|
387
434
|
};
|
388
435
|
await Promise.all(['se', 'lf', 'abstractSql', 'sql', 'odataMetadata'].map(updateModel));
|
389
436
|
}));
|
@@ -398,26 +445,28 @@ export const executeModels = async (tx, execModels) => {
|
|
398
445
|
throw err;
|
399
446
|
}
|
400
447
|
};
|
401
|
-
|
448
|
+
exports.executeModels = executeModels;
|
449
|
+
const postExecuteModels = async (tx) => {
|
402
450
|
for (const modelKey of Object.keys(models)) {
|
403
451
|
const pendingToSetExecutedMigrations = models[modelKey]?.modelExecutionResult?.migrationExecutionResult
|
404
452
|
?.pendingUnsetMigrations;
|
405
453
|
if (pendingToSetExecutedMigrations != null) {
|
406
|
-
await setExecutedMigrations(tx, modelKey, pendingToSetExecutedMigrations);
|
454
|
+
await (0, utils_1.setExecutedMigrations)(tx, modelKey, pendingToSetExecutedMigrations);
|
407
455
|
}
|
408
456
|
}
|
409
457
|
};
|
458
|
+
exports.postExecuteModels = postExecuteModels;
|
410
459
|
const cleanupModel = (vocab) => {
|
411
460
|
delete models[vocab];
|
412
|
-
delete api[vocab];
|
461
|
+
delete exports.api[vocab];
|
413
462
|
};
|
414
|
-
|
463
|
+
const deleteModel = async (vocabulary) => {
|
415
464
|
const { sql } = models[vocabulary];
|
416
465
|
if (sql) {
|
417
|
-
await db.transaction(async (tx) => {
|
466
|
+
await exports.db.transaction(async (tx) => {
|
418
467
|
const dropStatements = sql.dropSchema.map((dropStatement) => tx.executeSql(dropStatement));
|
419
468
|
await Promise.all(dropStatements.concat([
|
420
|
-
api.dev.delete({
|
469
|
+
exports.api.dev.delete({
|
421
470
|
resource: 'model',
|
422
471
|
passthrough: {
|
423
472
|
tx,
|
@@ -434,9 +483,10 @@ export const deleteModel = async (vocabulary) => {
|
|
434
483
|
}
|
435
484
|
cleanupModel(vocabulary);
|
436
485
|
};
|
486
|
+
exports.deleteModel = deleteModel;
|
437
487
|
const isWhereNode = (x) => x[0] === 'Where';
|
438
488
|
const isEqualsNode = (x) => x[0] === 'Equals';
|
439
|
-
|
489
|
+
const getID = (vocab, request) => {
|
440
490
|
if (request.abstractSqlQuery == null) {
|
441
491
|
throw new Error('Can only get the id if an abstractSqlQuery is provided');
|
442
492
|
}
|
@@ -457,22 +507,23 @@ export const getID = (vocab, request) => {
|
|
457
507
|
}
|
458
508
|
return 0;
|
459
509
|
};
|
460
|
-
|
510
|
+
exports.getID = getID;
|
511
|
+
exports.runRule = (() => {
|
461
512
|
const LF2AbstractSQLPrepHack = LF2AbstractSQL.LF2AbstractSQLPrep._extend({
|
462
513
|
CardinalityOptimisation() {
|
463
514
|
this._pred(false);
|
464
515
|
},
|
465
516
|
});
|
466
517
|
const translator = LF2AbstractSQL.LF2AbstractSQL.createInstance();
|
467
|
-
translator.addTypes(
|
518
|
+
translator.addTypes(sbvr_types_1.default);
|
468
519
|
return async (vocab, rule) => {
|
469
520
|
const seModel = models[vocab].se;
|
470
|
-
const log = logger[vocab];
|
521
|
+
const log = exports.logger[vocab];
|
471
522
|
let lfModel;
|
472
523
|
let slfModel;
|
473
524
|
let abstractSqlModel;
|
474
525
|
try {
|
475
|
-
lfModel = ExtendedSBVRParser.matchAll(seModel + '\nRule: ' + rule, 'Process');
|
526
|
+
lfModel = extended_sbvr_parser_1.ExtendedSBVRParser.matchAll(seModel + '\nRule: ' + rule, 'Process');
|
476
527
|
}
|
477
528
|
catch (e) {
|
478
529
|
log.error('Error parsing rule', rule, e);
|
@@ -499,7 +550,7 @@ export const runRule = (() => {
|
|
499
550
|
resourceName = ruleLF[1][1][1][2][1];
|
500
551
|
}
|
501
552
|
let fetchingViolators = false;
|
502
|
-
const ruleAbs =
|
553
|
+
const ruleAbs = lodash_1.default.last(abstractSqlModel.rules);
|
503
554
|
if (ruleAbs == null) {
|
504
555
|
throw new Error('Unable to generate rule');
|
505
556
|
}
|
@@ -536,21 +587,21 @@ export const runRule = (() => {
|
|
536
587
|
}
|
537
588
|
return ['Select', '*'];
|
538
589
|
});
|
539
|
-
const compiledRule = AbstractSQLCompiler[db.engine].compileRule(ruleBody);
|
590
|
+
const compiledRule = AbstractSQLCompiler[exports.db.engine].compileRule(ruleBody);
|
540
591
|
if (Array.isArray(compiledRule)) {
|
541
592
|
throw new Error('Unexpected query generated');
|
542
593
|
}
|
543
|
-
const values = await getAndCheckBindValues({
|
594
|
+
const values = await (0, abstract_sql_1.getAndCheckBindValues)({
|
544
595
|
vocabulary: vocab,
|
545
596
|
odataBinds: [],
|
546
597
|
values: {},
|
547
|
-
engine: db.engine,
|
598
|
+
engine: exports.db.engine,
|
548
599
|
}, compiledRule.bindings);
|
549
|
-
const result = await db.executeSql(compiledRule.query, values);
|
600
|
+
const result = await exports.db.executeSql(compiledRule.query, values);
|
550
601
|
const table = models[vocab].abstractSql.tables[resourceName];
|
551
|
-
const odataIdField = sqlNameToODataName(table.idField);
|
602
|
+
const odataIdField = (0, odata_to_abstract_sql_1.sqlNameToODataName)(table.idField);
|
552
603
|
let ids = result.rows.map((row) => row[table.idField]);
|
553
|
-
ids =
|
604
|
+
ids = lodash_1.default.uniq(ids);
|
554
605
|
ids = ids.map((id) => odataIdField + ' eq ' + id);
|
555
606
|
let filter;
|
556
607
|
if (ids.length > 0) {
|
@@ -559,10 +610,10 @@ export const runRule = (() => {
|
|
559
610
|
else {
|
560
611
|
filter = '0 eq 1';
|
561
612
|
}
|
562
|
-
const odataResult = (await runURI('GET', '/' +
|
613
|
+
const odataResult = (await (0, exports.runURI)('GET', '/' +
|
563
614
|
vocab +
|
564
615
|
'/' +
|
565
|
-
sqlNameToODataName(table.resourceName) +
|
616
|
+
(0, odata_to_abstract_sql_1.sqlNameToODataName)(table.resourceName) +
|
566
617
|
'?$filter=' +
|
567
618
|
filter, undefined, undefined, permissions.rootRead));
|
568
619
|
odataResult.__formulationType = formulationType;
|
@@ -570,9 +621,9 @@ export const runRule = (() => {
|
|
570
621
|
return odataResult;
|
571
622
|
};
|
572
623
|
})();
|
573
|
-
|
624
|
+
class PinejsClient extends pinejs_client_core_1.PinejsClientCore {
|
574
625
|
async _request({ method, url, body, tx, req, custom, }) {
|
575
|
-
return (await runURI(method, url, body, tx, req, custom));
|
626
|
+
return (await (0, exports.runURI)(method, url, body, tx, req, custom));
|
576
627
|
}
|
577
628
|
post(params) {
|
578
629
|
return super.post(params);
|
@@ -606,12 +657,13 @@ export class PinejsClient extends PinejsClientCore {
|
|
606
657
|
return `${authBase}?${compiledFilter}`;
|
607
658
|
}
|
608
659
|
}
|
609
|
-
|
610
|
-
|
611
|
-
|
660
|
+
exports.PinejsClient = PinejsClient;
|
661
|
+
exports.api = {};
|
662
|
+
exports.logger = {};
|
663
|
+
const runURI = async (method, uri, body = {}, tx, req, custom) => {
|
612
664
|
const [, apiRoot] = uri.split('/', 2);
|
613
665
|
if (apiRoot == null || models[apiRoot] == null) {
|
614
|
-
throw new InternalRequestError();
|
666
|
+
throw new errors_1.InternalRequestError();
|
615
667
|
}
|
616
668
|
let user;
|
617
669
|
let apiKey;
|
@@ -629,13 +681,13 @@ export const runURI = async (method, uri, body = {}, tx, req, custom) => {
|
|
629
681
|
permissions: [],
|
630
682
|
};
|
631
683
|
}
|
632
|
-
|
684
|
+
lodash_1.default.forEach(body, (v, k) => {
|
633
685
|
if (v === undefined) {
|
634
686
|
delete body[k];
|
635
687
|
}
|
636
688
|
});
|
637
689
|
const emulatedReq = {
|
638
|
-
on:
|
690
|
+
on: lodash_1.default.noop,
|
639
691
|
custom,
|
640
692
|
user,
|
641
693
|
apiKey,
|
@@ -648,28 +700,30 @@ export const runURI = async (method, uri, body = {}, tx, req, custom) => {
|
|
648
700
|
};
|
649
701
|
const { promise } = runODataRequest(emulatedReq, apiRoot);
|
650
702
|
const [response] = await promise;
|
651
|
-
if (
|
703
|
+
if (lodash_1.default.isError(response)) {
|
652
704
|
throw response;
|
653
705
|
}
|
654
706
|
const { body: responseBody, statusCode, headers } = response;
|
655
707
|
if (statusCode != null && statusCode >= 400) {
|
656
|
-
const ErrorClass = statusCodeToError[statusCode];
|
708
|
+
const ErrorClass = errors_1.statusCodeToError[statusCode];
|
657
709
|
if (ErrorClass != null) {
|
658
710
|
throw new ErrorClass(undefined, responseBody, headers);
|
659
711
|
}
|
660
|
-
throw new HttpError(statusCode, undefined, responseBody, headers);
|
712
|
+
throw new errors_1.HttpError(statusCode, undefined, responseBody, headers);
|
661
713
|
}
|
662
714
|
return responseBody;
|
663
715
|
};
|
664
|
-
|
716
|
+
exports.runURI = runURI;
|
717
|
+
const getAbstractSqlModel = (request) => {
|
665
718
|
return (request.abstractSqlModel ??= models[request.vocabulary].abstractSql);
|
666
719
|
};
|
720
|
+
exports.getAbstractSqlModel = getAbstractSqlModel;
|
667
721
|
const getFinalAbstractSqlModel = (request) => {
|
668
|
-
const finalModel =
|
722
|
+
const finalModel = lodash_1.default.last(request.translateVersions);
|
669
723
|
return (request.finalAbstractSqlModel ??= models[finalModel].abstractSql);
|
670
724
|
};
|
671
|
-
const getIdField = (request) => getFinalAbstractSqlModel(request).tables[resolveSynonym(request)].idField;
|
672
|
-
|
725
|
+
const getIdField = (request) => getFinalAbstractSqlModel(request).tables[(0, exports.resolveSynonym)(request)].idField;
|
726
|
+
const getAffectedIds = async (args) => {
|
673
727
|
const { request } = args;
|
674
728
|
if (request.affectedIds) {
|
675
729
|
return request.affectedIds;
|
@@ -682,6 +736,7 @@ export const getAffectedIds = async (args) => {
|
|
682
736
|
delete request.pendingAffectedIds;
|
683
737
|
return request.affectedIds;
|
684
738
|
};
|
739
|
+
exports.getAffectedIds = getAffectedIds;
|
685
740
|
const $getAffectedIds = async ({ req, request, tx, }) => {
|
686
741
|
if (!['PATCH', 'DELETE'].includes(request.method)) {
|
687
742
|
throw new Error('Can only call `getAffectedIds` with PATCH/DELETE requests');
|
@@ -693,8 +748,8 @@ const $getAffectedIds = async ({ req, request, tx, }) => {
|
|
693
748
|
parsedRequest.engine = request.engine;
|
694
749
|
parsedRequest.translateVersions = request.translateVersions;
|
695
750
|
let affectedRequest = parsedRequest;
|
696
|
-
const abstractSqlModel = getAbstractSqlModel(affectedRequest);
|
697
|
-
const resourceName = resolveSynonym(affectedRequest);
|
751
|
+
const abstractSqlModel = (0, exports.getAbstractSqlModel)(affectedRequest);
|
752
|
+
const resourceName = (0, exports.resolveSynonym)(affectedRequest);
|
698
753
|
const resourceTable = abstractSqlModel.tables[resourceName];
|
699
754
|
if (resourceTable == null) {
|
700
755
|
throw new Error('Unknown resource: ' + affectedRequest.resourceName);
|
@@ -708,7 +763,7 @@ const $getAffectedIds = async ({ req, request, tx, }) => {
|
|
708
763
|
await permissions.addPermissions(req, affectedRequest);
|
709
764
|
affectedRequest.method = 'GET';
|
710
765
|
affectedRequest = uriParser.translateUri(affectedRequest);
|
711
|
-
affectedRequest = compileRequest(affectedRequest);
|
766
|
+
affectedRequest = (0, abstract_sql_1.compileRequest)(affectedRequest);
|
712
767
|
let result;
|
713
768
|
if (tx != null) {
|
714
769
|
result = await runQuery(tx, affectedRequest);
|
@@ -718,17 +773,18 @@ const $getAffectedIds = async ({ req, request, tx, }) => {
|
|
718
773
|
}
|
719
774
|
return result.rows.map((row) => row[idField]);
|
720
775
|
};
|
721
|
-
|
776
|
+
const getModel = (vocabulary) => {
|
722
777
|
return models[vocabulary];
|
723
778
|
};
|
779
|
+
exports.getModel = getModel;
|
724
780
|
const runODataRequest = (req, vocabulary) => {
|
725
|
-
if (env.DEBUG) {
|
726
|
-
logger[vocabulary].log('Parsing', req.method, req.url);
|
781
|
+
if (module_1.env.DEBUG) {
|
782
|
+
exports.logger[vocabulary].log('Parsing', req.method, req.url);
|
727
783
|
}
|
728
784
|
const { versions } = models[vocabulary];
|
729
785
|
const reqHooks = versions.map((version) => [
|
730
786
|
version,
|
731
|
-
getHooks({
|
787
|
+
(0, hooks_1.getHooks)({
|
732
788
|
method: req.method,
|
733
789
|
vocabulary: version,
|
734
790
|
}, version === versions[0]),
|
@@ -746,7 +802,7 @@ const runODataRequest = (req, vocabulary) => {
|
|
746
802
|
}
|
747
803
|
});
|
748
804
|
transactions.length = 0;
|
749
|
-
rollbackRequestHooks(reqHooks);
|
805
|
+
(0, hooks_1.rollbackRequestHooks)(reqHooks);
|
750
806
|
};
|
751
807
|
req.on('close', tryCancelRequest);
|
752
808
|
if (req.tx != null) {
|
@@ -757,7 +813,7 @@ const runODataRequest = (req, vocabulary) => {
|
|
757
813
|
return {
|
758
814
|
tryCancelRequest,
|
759
815
|
promise: (async () => {
|
760
|
-
await runHooks('PREPARSE', reqHooks, { req, tx: req.tx });
|
816
|
+
await (0, hooks_1.runHooks)('PREPARSE', reqHooks, { req, tx: req.tx });
|
761
817
|
let requests;
|
762
818
|
if (req.batch != null && req.batch.length > 0) {
|
763
819
|
requests = req.batch;
|
@@ -767,51 +823,51 @@ const runODataRequest = (req, vocabulary) => {
|
|
767
823
|
requests = [{ method, url, data: body }];
|
768
824
|
}
|
769
825
|
const prepareRequest = async (parsedRequest) => {
|
770
|
-
const abstractSqlModel = getAbstractSqlModel(parsedRequest);
|
826
|
+
const abstractSqlModel = (0, exports.getAbstractSqlModel)(parsedRequest);
|
771
827
|
if (abstractSqlModel == null) {
|
772
|
-
throw new BadRequestError('Unknown vocabulary: ' + parsedRequest.vocabulary);
|
828
|
+
throw new errors_1.BadRequestError('Unknown vocabulary: ' + parsedRequest.vocabulary);
|
773
829
|
}
|
774
|
-
parsedRequest.engine = db.engine;
|
830
|
+
parsedRequest.engine = exports.db.engine;
|
775
831
|
parsedRequest.translateVersions = [...versions];
|
776
832
|
const $request = parsedRequest;
|
777
833
|
try {
|
778
|
-
let resolvedResourceName = resolveSynonym($request);
|
834
|
+
let resolvedResourceName = (0, exports.resolveSynonym)($request);
|
779
835
|
if (resolvedResourceName.endsWith('#canAccess')) {
|
780
836
|
resolvedResourceName = resolvedResourceName.slice(0, -'#canAccess'.length);
|
781
837
|
}
|
782
838
|
if (abstractSqlModel.tables[resolvedResourceName] == null) {
|
783
|
-
throw new UnauthorizedError();
|
839
|
+
throw new errors_1.UnauthorizedError();
|
784
840
|
}
|
785
841
|
$request.hooks = [];
|
786
842
|
for (const version of versions) {
|
787
843
|
const hooks = [
|
788
844
|
version,
|
789
|
-
getHooks({
|
845
|
+
(0, hooks_1.getHooks)({
|
790
846
|
resourceName: $request.resourceName,
|
791
847
|
vocabulary: version,
|
792
848
|
method: $request.method,
|
793
849
|
}, version === versions[0]),
|
794
850
|
];
|
795
851
|
$request.hooks.push(hooks);
|
796
|
-
await runHooks('POSTPARSE', [hooks], {
|
852
|
+
await (0, hooks_1.runHooks)('POSTPARSE', [hooks], {
|
797
853
|
req,
|
798
854
|
request: $request,
|
799
855
|
tx: req.tx,
|
800
856
|
});
|
801
857
|
const { resourceRenames } = models[version];
|
802
858
|
if (resourceRenames) {
|
803
|
-
const resourceName = resolveSynonym($request);
|
859
|
+
const resourceName = (0, exports.resolveSynonym)($request);
|
804
860
|
if (resourceRenames[resourceName]) {
|
805
|
-
$request.resourceName = sqlNameToODataName(resourceRenames[resourceName]);
|
861
|
+
$request.resourceName = (0, odata_to_abstract_sql_1.sqlNameToODataName)(resourceRenames[resourceName]);
|
806
862
|
}
|
807
863
|
}
|
808
864
|
}
|
809
865
|
const translatedRequest = uriParser.translateUri($request);
|
810
|
-
return compileRequest(translatedRequest);
|
866
|
+
return (0, abstract_sql_1.compileRequest)(translatedRequest);
|
811
867
|
}
|
812
868
|
catch (err) {
|
813
|
-
rollbackRequestHooks(reqHooks);
|
814
|
-
rollbackRequestHooks($request.hooks);
|
869
|
+
(0, hooks_1.rollbackRequestHooks)(reqHooks);
|
870
|
+
(0, hooks_1.rollbackRequestHooks)($request.hooks);
|
815
871
|
throw err;
|
816
872
|
}
|
817
873
|
};
|
@@ -827,14 +883,14 @@ const runODataRequest = (req, vocabulary) => {
|
|
827
883
|
return await runTransaction(req, request, async (tx) => {
|
828
884
|
transactions.push(tx);
|
829
885
|
tx.on('rollback', () => {
|
830
|
-
rollbackRequestHooks(reqHooks);
|
886
|
+
(0, hooks_1.rollbackRequestHooks)(reqHooks);
|
831
887
|
if (Array.isArray(request)) {
|
832
888
|
for (const { hooks } of request) {
|
833
|
-
rollbackRequestHooks(hooks);
|
889
|
+
(0, hooks_1.rollbackRequestHooks)(hooks);
|
834
890
|
}
|
835
891
|
}
|
836
892
|
else {
|
837
|
-
rollbackRequestHooks(request.hooks);
|
893
|
+
(0, hooks_1.rollbackRequestHooks)(request.hooks);
|
838
894
|
}
|
839
895
|
});
|
840
896
|
if (Array.isArray(request)) {
|
@@ -851,7 +907,7 @@ const runODataRequest = (req, vocabulary) => {
|
|
851
907
|
});
|
852
908
|
});
|
853
909
|
const responses = results.map((result) => {
|
854
|
-
if (
|
910
|
+
if (lodash_1.default.isError(result)) {
|
855
911
|
return convertToHttpError(result);
|
856
912
|
}
|
857
913
|
else {
|
@@ -859,7 +915,7 @@ const runODataRequest = (req, vocabulary) => {
|
|
859
915
|
result.body == null &&
|
860
916
|
result.statusCode == null) {
|
861
917
|
console.error('No status or body set', req.url, responses);
|
862
|
-
return new InternalRequestError();
|
918
|
+
return new errors_1.InternalRequestError();
|
863
919
|
}
|
864
920
|
return result;
|
865
921
|
}
|
@@ -868,12 +924,13 @@ const runODataRequest = (req, vocabulary) => {
|
|
868
924
|
})(),
|
869
925
|
};
|
870
926
|
};
|
871
|
-
|
927
|
+
const getApiRoot = (req) => {
|
872
928
|
const [, apiRoot] = req.url.split('/', 2);
|
873
929
|
return apiRoot;
|
874
930
|
};
|
875
|
-
|
876
|
-
|
931
|
+
exports.getApiRoot = getApiRoot;
|
932
|
+
const handleODataRequest = async (req, res, next) => {
|
933
|
+
const apiRoot = (0, exports.getApiRoot)(req);
|
877
934
|
if (apiRoot == null || models[apiRoot] == null) {
|
878
935
|
next('route');
|
879
936
|
return;
|
@@ -885,14 +942,14 @@ export const handleODataRequest = async (req, res, next) => {
|
|
885
942
|
res.set('Cache-Control', 'no-cache');
|
886
943
|
if (req.batch == null || req.batch.length === 0) {
|
887
944
|
let [response] = responses;
|
888
|
-
if (response instanceof HttpError) {
|
945
|
+
if (response instanceof errors_1.HttpError) {
|
889
946
|
response = httpErrorToResponse(response);
|
890
947
|
}
|
891
948
|
handleResponse(res, response);
|
892
949
|
}
|
893
950
|
else {
|
894
951
|
res.status(200).sendMulti(responses.map((response) => {
|
895
|
-
if (response instanceof HttpError) {
|
952
|
+
if (response instanceof errors_1.HttpError) {
|
896
953
|
return httpErrorToResponse(response);
|
897
954
|
}
|
898
955
|
else {
|
@@ -902,19 +959,21 @@ export const handleODataRequest = async (req, res, next) => {
|
|
902
959
|
}
|
903
960
|
}
|
904
961
|
catch (e) {
|
905
|
-
if (handleHttpErrors(req, res, e)) {
|
962
|
+
if ((0, exports.handleHttpErrors)(req, res, e)) {
|
906
963
|
return;
|
907
964
|
}
|
908
965
|
console.error('An error occurred while constructing the response', e);
|
909
966
|
res.status(500).end();
|
910
967
|
}
|
911
968
|
};
|
969
|
+
exports.handleODataRequest = handleODataRequest;
|
912
970
|
const handleErrorFns = [];
|
913
|
-
|
971
|
+
const onHandleHttpError = (fn) => {
|
914
972
|
handleErrorFns.push(fn);
|
915
973
|
};
|
916
|
-
|
917
|
-
|
974
|
+
exports.onHandleHttpError = onHandleHttpError;
|
975
|
+
const handleHttpErrors = (req, res, err) => {
|
976
|
+
if (err instanceof errors_1.HttpError) {
|
918
977
|
for (const handleErrorFn of handleErrorFns) {
|
919
978
|
handleErrorFn(req, err);
|
920
979
|
}
|
@@ -924,6 +983,7 @@ export const handleHttpErrors = (req, res, err) => {
|
|
924
983
|
}
|
925
984
|
return false;
|
926
985
|
};
|
986
|
+
exports.handleHttpErrors = handleHttpErrors;
|
927
987
|
const handleResponse = (res, response) => {
|
928
988
|
const { body, headers, statusCode } = response;
|
929
989
|
res.set(headers);
|
@@ -943,38 +1003,38 @@ const httpErrorToResponse = (err) => {
|
|
943
1003
|
};
|
944
1004
|
};
|
945
1005
|
const convertToHttpError = (err) => {
|
946
|
-
if (err instanceof HttpError) {
|
1006
|
+
if (err instanceof errors_1.HttpError) {
|
947
1007
|
return err;
|
948
1008
|
}
|
949
|
-
if (err instanceof SbvrValidationError) {
|
950
|
-
return new BadRequestError(err);
|
1009
|
+
if (err instanceof errors_1.SbvrValidationError) {
|
1010
|
+
return new errors_1.BadRequestError(err);
|
951
1011
|
}
|
952
|
-
if (err instanceof PermissionError) {
|
953
|
-
return new UnauthorizedError(err);
|
1012
|
+
if (err instanceof errors_1.PermissionError) {
|
1013
|
+
return new errors_1.UnauthorizedError(err);
|
954
1014
|
}
|
955
|
-
if (err instanceof db.ConstraintError) {
|
956
|
-
return new ConflictError(err);
|
1015
|
+
if (err instanceof exports.db.ConstraintError) {
|
1016
|
+
return new errors_1.ConflictError(err);
|
957
1017
|
}
|
958
|
-
if (err instanceof SqlCompilationError ||
|
959
|
-
err instanceof TranslationError ||
|
960
|
-
err instanceof ParsingError ||
|
961
|
-
err instanceof PermissionParsingError ||
|
962
|
-
err instanceof db.DatabaseError) {
|
963
|
-
return new InternalRequestError();
|
1018
|
+
if (err instanceof errors_1.SqlCompilationError ||
|
1019
|
+
err instanceof errors_1.TranslationError ||
|
1020
|
+
err instanceof errors_1.ParsingError ||
|
1021
|
+
err instanceof errors_1.PermissionParsingError ||
|
1022
|
+
err instanceof exports.db.DatabaseError) {
|
1023
|
+
return new errors_1.InternalRequestError();
|
964
1024
|
}
|
965
1025
|
console.error('Unexpected response error type', err);
|
966
|
-
return new InternalRequestError();
|
1026
|
+
return new errors_1.InternalRequestError();
|
967
1027
|
};
|
968
1028
|
const runRequest = async (req, tx, request) => {
|
969
|
-
const log = logger[request.vocabulary];
|
970
|
-
if (env.DEBUG) {
|
1029
|
+
const log = exports.logger[request.vocabulary];
|
1030
|
+
if (module_1.env.DEBUG) {
|
971
1031
|
log.log('Running', req.method, req.url);
|
972
1032
|
}
|
973
1033
|
let resultGet;
|
974
1034
|
let resultPost;
|
975
1035
|
try {
|
976
1036
|
try {
|
977
|
-
await runHooks('PRERUN', request.hooks, { req, request, tx });
|
1037
|
+
await (0, hooks_1.runHooks)('PRERUN', request.hooks, { req, request, tx });
|
978
1038
|
switch (request.method) {
|
979
1039
|
case 'GET':
|
980
1040
|
resultGet = await runGet(req, request, tx);
|
@@ -993,7 +1053,7 @@ const runRequest = async (req, tx, request) => {
|
|
993
1053
|
}
|
994
1054
|
}
|
995
1055
|
catch (err) {
|
996
|
-
if (err instanceof db.DatabaseError) {
|
1056
|
+
if (err instanceof exports.db.DatabaseError) {
|
997
1057
|
prettifyConstraintError(err, request);
|
998
1058
|
log.error(err);
|
999
1059
|
err.message = 'Database error';
|
@@ -1007,11 +1067,11 @@ const runRequest = async (req, tx, request) => {
|
|
1007
1067
|
err instanceof TypeError ||
|
1008
1068
|
err instanceof URIError) {
|
1009
1069
|
log.error(err);
|
1010
|
-
throw new InternalRequestError();
|
1070
|
+
throw new errors_1.InternalRequestError();
|
1011
1071
|
}
|
1012
1072
|
throw err;
|
1013
1073
|
}
|
1014
|
-
await runHooks('POSTRUN', request.hooks, {
|
1074
|
+
await (0, hooks_1.runHooks)('POSTRUN', request.hooks, {
|
1015
1075
|
req,
|
1016
1076
|
request,
|
1017
1077
|
result: resultGet ?? resultPost,
|
@@ -1019,7 +1079,7 @@ const runRequest = async (req, tx, request) => {
|
|
1019
1079
|
});
|
1020
1080
|
}
|
1021
1081
|
catch (err) {
|
1022
|
-
await runHooks('POSTRUN-ERROR', request.hooks, {
|
1082
|
+
await (0, hooks_1.runHooks)('POSTRUN-ERROR', request.hooks, {
|
1023
1083
|
req,
|
1024
1084
|
request,
|
1025
1085
|
tx,
|
@@ -1041,7 +1101,7 @@ const runRequest = async (req, tx, request) => {
|
|
1041
1101
|
case 'OPTIONS':
|
1042
1102
|
return await respondOptions(req, request, tx);
|
1043
1103
|
default:
|
1044
|
-
throw new MethodNotAllowedError();
|
1104
|
+
throw new errors_1.MethodNotAllowedError();
|
1045
1105
|
}
|
1046
1106
|
};
|
1047
1107
|
const runChangeSet = (req, tx) => async (changeSetResults, request) => {
|
@@ -1063,7 +1123,7 @@ const updateBinds = (changeSetResults, request) => {
|
|
1063
1123
|
if (ref?.body == null ||
|
1064
1124
|
typeof ref.body === 'string' ||
|
1065
1125
|
ref.body.id === undefined) {
|
1066
|
-
throw new BadRequestError('Reference to a non existing resource in Changeset');
|
1126
|
+
throw new errors_1.BadRequestError('Reference to a non existing resource in Changeset');
|
1067
1127
|
}
|
1068
1128
|
request.odataBinds[i] = uriParser.parseId(ref.body.id);
|
1069
1129
|
}
|
@@ -1089,33 +1149,33 @@ const runTransaction = async (req, request, callback) => {
|
|
1089
1149
|
}
|
1090
1150
|
if (Array.isArray(request)) {
|
1091
1151
|
if (request.every(checkReadOnlyRequests)) {
|
1092
|
-
return await db.readTransaction(callback);
|
1152
|
+
return await exports.db.readTransaction(callback);
|
1093
1153
|
}
|
1094
1154
|
}
|
1095
1155
|
else if (checkReadOnlyRequests(request)) {
|
1096
|
-
return await db.readTransaction(callback);
|
1156
|
+
return await exports.db.readTransaction(callback);
|
1097
1157
|
}
|
1098
|
-
return await db.transaction(callback);
|
1158
|
+
return await exports.db.transaction(callback);
|
1099
1159
|
};
|
1100
1160
|
const runQuery = async (tx, request, queryIndex, addReturning = false) => {
|
1101
1161
|
const { vocabulary } = request;
|
1102
1162
|
let { sqlQuery } = request;
|
1103
1163
|
if (sqlQuery == null) {
|
1104
|
-
throw new InternalRequestError('No SQL query available to run');
|
1164
|
+
throw new errors_1.InternalRequestError('No SQL query available to run');
|
1105
1165
|
}
|
1106
1166
|
if (request.engine == null) {
|
1107
|
-
throw new InternalRequestError('No database engine specified');
|
1167
|
+
throw new errors_1.InternalRequestError('No database engine specified');
|
1108
1168
|
}
|
1109
1169
|
if (Array.isArray(sqlQuery)) {
|
1110
1170
|
if (queryIndex == null) {
|
1111
|
-
throw new InternalRequestError('Received a query index to run but the query is not an array');
|
1171
|
+
throw new errors_1.InternalRequestError('Received a query index to run but the query is not an array');
|
1112
1172
|
}
|
1113
1173
|
sqlQuery = sqlQuery[queryIndex];
|
1114
1174
|
}
|
1115
1175
|
const { query, bindings } = sqlQuery;
|
1116
|
-
const values = await getAndCheckBindValues(request, bindings);
|
1117
|
-
if (env.DEBUG) {
|
1118
|
-
logger[vocabulary].log(query, values);
|
1176
|
+
const values = await (0, abstract_sql_1.getAndCheckBindValues)(request, bindings);
|
1177
|
+
if (module_1.env.DEBUG) {
|
1178
|
+
exports.logger[vocabulary].log(query, values);
|
1119
1179
|
}
|
1120
1180
|
const returningIdField = addReturning && request.affectedIds == null ? getIdField(request) : false;
|
1121
1181
|
const sqlResult = await tx.executeSql(query, values, returningIdField);
|
@@ -1139,13 +1199,13 @@ const respondGet = async (req, request, result, tx) => {
|
|
1139
1199
|
const metadata = format != null && typeof format === 'object'
|
1140
1200
|
? format.metadata
|
1141
1201
|
: undefined;
|
1142
|
-
const d = await odataResponse.process(vocab, getAbstractSqlModel(request), request.originalResourceName, result.rows, { includeMetadata: metadata === 'full' });
|
1202
|
+
const d = await odataResponse.process(vocab, (0, exports.getAbstractSqlModel)(request), request.originalResourceName, result.rows, { includeMetadata: metadata === 'full' });
|
1143
1203
|
const response = {
|
1144
1204
|
statusCode: 200,
|
1145
1205
|
body: { d },
|
1146
1206
|
headers: { 'content-type': 'application/json' },
|
1147
1207
|
};
|
1148
|
-
await runHooks('PRERESPOND', request.hooks, {
|
1208
|
+
await (0, hooks_1.runHooks)('PRERESPOND', request.hooks, {
|
1149
1209
|
req,
|
1150
1210
|
request,
|
1151
1211
|
result,
|
@@ -1172,22 +1232,22 @@ const respondGet = async (req, request, result, tx) => {
|
|
1172
1232
|
const runPost = async (_req, request, tx) => {
|
1173
1233
|
const { rowsAffected, insertId } = await runQuery(tx, request, undefined, true);
|
1174
1234
|
if (rowsAffected === 0) {
|
1175
|
-
throw new PermissionError();
|
1235
|
+
throw new errors_1.PermissionError();
|
1176
1236
|
}
|
1177
|
-
await validateModel(tx,
|
1237
|
+
await (0, exports.validateModel)(tx, lodash_1.default.last(request.translateVersions), request);
|
1178
1238
|
return insertId;
|
1179
1239
|
};
|
1180
1240
|
const respondPost = async (req, request, id, tx) => {
|
1181
1241
|
const vocab = request.vocabulary;
|
1182
1242
|
const location = odataResponse.resourceURI(vocab, request.originalResourceName, id);
|
1183
|
-
if (env.DEBUG) {
|
1184
|
-
logger[vocab].log('Insert ID: ', request.resourceName, id);
|
1243
|
+
if (module_1.env.DEBUG) {
|
1244
|
+
exports.logger[vocab].log('Insert ID: ', request.resourceName, id);
|
1185
1245
|
}
|
1186
1246
|
let result = { d: [{ id }] };
|
1187
1247
|
if (location != null &&
|
1188
1248
|
!['0', 'false'].includes(request?.odataQuery?.options?.returnResource)) {
|
1189
1249
|
try {
|
1190
|
-
result = (await runURI('GET', location, undefined, tx, req));
|
1250
|
+
result = (await (0, exports.runURI)('GET', location, undefined, tx, req));
|
1191
1251
|
}
|
1192
1252
|
catch {
|
1193
1253
|
}
|
@@ -1200,7 +1260,7 @@ const respondPost = async (req, request, id, tx) => {
|
|
1200
1260
|
location,
|
1201
1261
|
},
|
1202
1262
|
};
|
1203
|
-
await runHooks('PRERESPOND', request.hooks, {
|
1263
|
+
await (0, hooks_1.runHooks)('PRERESPOND', request.hooks, {
|
1204
1264
|
req,
|
1205
1265
|
request,
|
1206
1266
|
result,
|
@@ -1221,14 +1281,14 @@ const runPut = async (_req, request, tx) => {
|
|
1221
1281
|
({ rowsAffected } = await runQuery(tx, request, undefined, true));
|
1222
1282
|
}
|
1223
1283
|
if (rowsAffected > 0) {
|
1224
|
-
await validateModel(tx,
|
1284
|
+
await (0, exports.validateModel)(tx, lodash_1.default.last(request.translateVersions), request);
|
1225
1285
|
}
|
1226
1286
|
};
|
1227
1287
|
const respondPut = async (req, request, tx) => {
|
1228
1288
|
const response = {
|
1229
1289
|
statusCode: 200,
|
1230
1290
|
};
|
1231
|
-
await runHooks('PRERESPOND', request.hooks, {
|
1291
|
+
await (0, hooks_1.runHooks)('PRERESPOND', request.hooks, {
|
1232
1292
|
req,
|
1233
1293
|
request,
|
1234
1294
|
response,
|
@@ -1241,7 +1301,7 @@ const respondOptions = respondPut;
|
|
1241
1301
|
const runDelete = async (_req, request, tx) => {
|
1242
1302
|
const { rowsAffected } = await runQuery(tx, request, undefined, true);
|
1243
1303
|
if (rowsAffected > 0) {
|
1244
|
-
await validateModel(tx,
|
1304
|
+
await (0, exports.validateModel)(tx, lodash_1.default.last(request.translateVersions), request);
|
1245
1305
|
}
|
1246
1306
|
};
|
1247
1307
|
const devModelConfig = {
|
@@ -1281,10 +1341,10 @@ const devModelConfig = {
|
|
1281
1341
|
},
|
1282
1342
|
},
|
1283
1343
|
};
|
1284
|
-
|
1344
|
+
const executeStandardModels = async (tx) => {
|
1285
1345
|
try {
|
1286
|
-
await executeModel(tx, devModelConfig);
|
1287
|
-
await executeModels(tx, permissions.config.models);
|
1346
|
+
await (0, exports.executeModel)(tx, devModelConfig);
|
1347
|
+
await (0, exports.executeModels)(tx, permissions.config.models);
|
1288
1348
|
console.info('Successfully executed standard models.');
|
1289
1349
|
}
|
1290
1350
|
catch (err) {
|
@@ -1292,11 +1352,12 @@ export const executeStandardModels = async (tx) => {
|
|
1292
1352
|
throw err;
|
1293
1353
|
}
|
1294
1354
|
};
|
1295
|
-
|
1296
|
-
|
1355
|
+
exports.executeStandardModels = executeStandardModels;
|
1356
|
+
const setup = async (_app, $db) => {
|
1357
|
+
exports.db = $db;
|
1297
1358
|
try {
|
1298
|
-
await db.transaction(async (tx) => {
|
1299
|
-
await executeStandardModels(tx);
|
1359
|
+
await exports.db.transaction(async (tx) => {
|
1360
|
+
await (0, exports.executeStandardModels)(tx);
|
1300
1361
|
permissions.setup();
|
1301
1362
|
});
|
1302
1363
|
}
|
@@ -1305,16 +1366,17 @@ export const setup = async (_app, $db) => {
|
|
1305
1366
|
process.exit(1);
|
1306
1367
|
}
|
1307
1368
|
try {
|
1308
|
-
await db.executeSql('CREATE UNIQUE INDEX "uniq_model_model_type_vocab" ON "model" ("is of-vocabulary", "model type");');
|
1369
|
+
await exports.db.executeSql('CREATE UNIQUE INDEX "uniq_model_model_type_vocab" ON "model" ("is of-vocabulary", "model type");');
|
1309
1370
|
}
|
1310
1371
|
catch {
|
1311
1372
|
}
|
1312
1373
|
};
|
1313
|
-
|
1314
|
-
|
1374
|
+
exports.setup = setup;
|
1375
|
+
const postSetup = async (_app, $db) => {
|
1376
|
+
exports.db = $db;
|
1315
1377
|
try {
|
1316
|
-
await db.transaction(async (tx) => {
|
1317
|
-
await postExecuteModels(tx);
|
1378
|
+
await exports.db.transaction(async (tx) => {
|
1379
|
+
await (0, exports.postExecuteModels)(tx);
|
1318
1380
|
});
|
1319
1381
|
}
|
1320
1382
|
catch (err) {
|
@@ -1322,4 +1384,5 @@ export const postSetup = async (_app, $db) => {
|
|
1322
1384
|
process.exit(1);
|
1323
1385
|
}
|
1324
1386
|
};
|
1387
|
+
exports.postSetup = postSetup;
|
1325
1388
|
//# sourceMappingURL=sbvr-utils.js.map
|