@balena/pinejs 15.0.0-true-boolean-7896b116c446d891d7a0d5e4085c02a13bc9c725 → 15.0.1-build-migrations-clarify-marking-sbvr-optional-d6d0ded8eccc6eadb2492f4697918cf0afd00215-1
Sign up to get free protection for your applications and to get access to all the features.
- package/.dockerignore +4 -0
- package/.github/workflows/flowzone.yml +21 -0
- package/.husky/pre-commit +4 -0
- package/.pinejs-cache.json +1 -0
- package/.resinci.yml +1 -0
- package/.versionbot/CHANGELOG.yml +9678 -2002
- package/CHANGELOG.md +2976 -2
- package/Dockerfile +14 -0
- package/Gruntfile.ts +3 -6
- package/README.md +10 -1
- package/VERSION +1 -0
- package/build/browser.ts +1 -1
- package/build/config.ts +0 -1
- package/docker-compose.npm-test.yml +11 -0
- package/docs/AdvancedUsage.md +77 -63
- package/docs/GettingStarted.md +90 -41
- package/docs/Migrations.md +102 -1
- package/docs/ProjectConfig.md +12 -21
- package/docs/Testing.md +7 -0
- package/out/bin/abstract-sql-compiler.js +17 -17
- package/out/bin/abstract-sql-compiler.js.map +1 -1
- package/out/bin/odata-compiler.js +23 -20
- package/out/bin/odata-compiler.js.map +1 -1
- package/out/bin/sbvr-compiler.js +22 -22
- package/out/bin/sbvr-compiler.js.map +1 -1
- package/out/bin/utils.d.ts +2 -2
- package/out/bin/utils.js +3 -3
- package/out/bin/utils.js.map +1 -1
- package/out/config-loader/config-loader.d.ts +9 -8
- package/out/config-loader/config-loader.js +135 -78
- package/out/config-loader/config-loader.js.map +1 -1
- package/out/config-loader/env.d.ts +41 -16
- package/out/config-loader/env.js +46 -2
- package/out/config-loader/env.js.map +1 -1
- package/out/data-server/sbvr-server.d.ts +2 -19
- package/out/data-server/sbvr-server.js +44 -38
- package/out/data-server/sbvr-server.js.map +1 -1
- package/out/database-layer/db.d.ts +32 -14
- package/out/database-layer/db.js +120 -41
- package/out/database-layer/db.js.map +1 -1
- package/out/express-emulator/express.js +10 -11
- package/out/express-emulator/express.js.map +1 -1
- package/out/http-transactions/transactions.d.ts +2 -18
- package/out/http-transactions/transactions.js +29 -21
- package/out/http-transactions/transactions.js.map +1 -1
- package/out/migrator/async.d.ts +7 -0
- package/out/migrator/async.js +168 -0
- package/out/migrator/async.js.map +1 -0
- package/out/migrator/migrations.sbvr +43 -0
- package/out/migrator/sync.d.ts +9 -0
- package/out/migrator/sync.js +106 -0
- package/out/migrator/sync.js.map +1 -0
- package/out/migrator/utils.d.ts +78 -0
- package/out/migrator/utils.js +283 -0
- package/out/migrator/utils.js.map +1 -0
- package/out/odata-metadata/odata-metadata-generator.js +10 -13
- package/out/odata-metadata/odata-metadata-generator.js.map +1 -1
- package/out/passport-pinejs/passport-pinejs.d.ts +1 -1
- package/out/passport-pinejs/passport-pinejs.js +8 -7
- 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 +20 -6
- package/out/pinejs-session-store/pinejs-session-store.js.map +1 -1
- package/out/sbvr-api/abstract-sql.d.ts +3 -2
- package/out/sbvr-api/abstract-sql.js +9 -9
- package/out/sbvr-api/abstract-sql.js.map +1 -1
- package/out/sbvr-api/cached-compile.js +1 -1
- package/out/sbvr-api/cached-compile.js.map +1 -1
- package/out/sbvr-api/common-types.d.ts +6 -5
- package/out/sbvr-api/control-flow.d.ts +8 -1
- package/out/sbvr-api/control-flow.js +36 -9
- package/out/sbvr-api/control-flow.js.map +1 -1
- package/out/sbvr-api/errors.d.ts +47 -40
- package/out/sbvr-api/errors.js +78 -77
- package/out/sbvr-api/errors.js.map +1 -1
- package/out/sbvr-api/express-extension.d.ts +4 -0
- package/out/sbvr-api/hooks.d.ts +16 -15
- package/out/sbvr-api/hooks.js +74 -48
- 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 +28 -30
- package/out/sbvr-api/odata-response.js.map +1 -1
- package/out/sbvr-api/permissions.d.ts +17 -16
- package/out/sbvr-api/permissions.js +369 -304
- package/out/sbvr-api/permissions.js.map +1 -1
- package/out/sbvr-api/sbvr-utils.d.ts +33 -15
- package/out/sbvr-api/sbvr-utils.js +397 -235
- package/out/sbvr-api/sbvr-utils.js.map +1 -1
- package/out/sbvr-api/translations.d.ts +6 -0
- package/out/sbvr-api/translations.js +150 -0
- package/out/sbvr-api/translations.js.map +1 -0
- package/out/sbvr-api/uri-parser.d.ts +23 -17
- package/out/sbvr-api/uri-parser.js +33 -27
- package/out/sbvr-api/uri-parser.js.map +1 -1
- package/out/sbvr-api/user.sbvr +2 -0
- package/out/server-glue/module.d.ts +6 -6
- package/out/server-glue/module.js +4 -2
- package/out/server-glue/module.js.map +1 -1
- package/out/server-glue/server.js +5 -5
- package/out/server-glue/server.js.map +1 -1
- package/package.json +89 -73
- package/pinejs.png +0 -0
- package/repo.yml +9 -9
- package/src/bin/abstract-sql-compiler.ts +5 -7
- package/src/bin/odata-compiler.ts +11 -13
- package/src/bin/sbvr-compiler.ts +11 -17
- package/src/bin/utils.ts +3 -5
- package/src/config-loader/config-loader.ts +167 -53
- package/src/config-loader/env.ts +106 -6
- package/src/data-server/sbvr-server.js +44 -38
- package/src/database-layer/db.ts +205 -64
- package/src/express-emulator/express.js +10 -11
- package/src/http-transactions/transactions.js +29 -21
- package/src/migrator/async.ts +323 -0
- package/src/migrator/migrations.sbvr +43 -0
- package/src/migrator/sync.ts +152 -0
- package/src/migrator/utils.ts +458 -0
- package/src/odata-metadata/odata-metadata-generator.ts +12 -15
- package/src/passport-pinejs/passport-pinejs.ts +9 -7
- package/src/pinejs-session-store/pinejs-session-store.ts +15 -1
- package/src/sbvr-api/abstract-sql.ts +17 -14
- package/src/sbvr-api/common-types.ts +2 -1
- package/src/sbvr-api/control-flow.ts +45 -11
- package/src/sbvr-api/errors.ts +82 -77
- package/src/sbvr-api/express-extension.ts +6 -1
- package/src/sbvr-api/hooks.ts +123 -50
- package/src/sbvr-api/odata-response.ts +23 -28
- package/src/sbvr-api/permissions.ts +548 -415
- package/src/sbvr-api/sbvr-utils.ts +581 -259
- package/src/sbvr-api/translations.ts +248 -0
- package/src/sbvr-api/uri-parser.ts +63 -49
- package/src/sbvr-api/user.sbvr +2 -0
- package/src/server-glue/module.ts +16 -10
- package/src/server-glue/server.ts +5 -5
- package/tsconfig.dev.json +1 -0
- package/tsconfig.json +1 -2
- package/typings/lf-to-abstract-sql.d.ts +6 -9
- package/typings/memoizee.d.ts +1 -1
- package/.github/CODEOWNERS +0 -1
- package/circle.yml +0 -37
- package/docs/todo.txt +0 -22
- package/out/migrator/migrator.d.ts +0 -20
- package/out/migrator/migrator.js +0 -188
- package/out/migrator/migrator.js.map +0 -1
- package/src/migrator/migrator.ts +0 -286
package/out/sbvr-api/hooks.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.runHooks = exports.addPureHook = exports.addSideEffectHook = exports.addHook = exports.getHooks = exports.rollbackRequestHooks = void 0;
|
4
|
-
const Bluebird = require("bluebird");
|
5
4
|
const _ = require("lodash");
|
6
5
|
const control_flow_1 = require("./control-flow");
|
7
6
|
const memoize = require("memoizee");
|
@@ -32,7 +31,13 @@ class SideEffectHook extends Hook {
|
|
32
31
|
}
|
33
32
|
registerRollback(fn) {
|
34
33
|
if (this.rolledBack) {
|
35
|
-
|
34
|
+
(async () => {
|
35
|
+
try {
|
36
|
+
await fn();
|
37
|
+
}
|
38
|
+
catch {
|
39
|
+
}
|
40
|
+
})();
|
36
41
|
}
|
37
42
|
else {
|
38
43
|
this.rollbackFns.push(fn);
|
@@ -43,17 +48,21 @@ class SideEffectHook extends Hook {
|
|
43
48
|
return;
|
44
49
|
}
|
45
50
|
this.rolledBack = true;
|
46
|
-
await control_flow_1.settleMapSeries(this.rollbackFns, (fn) => fn());
|
51
|
+
await (0, control_flow_1.settleMapSeries)(this.rollbackFns, (fn) => fn());
|
47
52
|
}
|
48
53
|
}
|
49
|
-
const rollbackRequestHooks = (
|
50
|
-
if (
|
54
|
+
const rollbackRequestHooks = (hooksList) => {
|
55
|
+
if (hooksList == null) {
|
51
56
|
return;
|
52
57
|
}
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
58
|
+
const sideEffectHooks = hooksList
|
59
|
+
.flatMap(([, v]) => Object.values(v).flat())
|
60
|
+
.filter((hook) => hook instanceof SideEffectHook);
|
61
|
+
if (sideEffectHooks.length === 0) {
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
(0, control_flow_1.settleMapSeries)(sideEffectHooks, async (hook) => {
|
65
|
+
await hook.rollback();
|
57
66
|
});
|
58
67
|
};
|
59
68
|
exports.rollbackRequestHooks = rollbackRequestHooks;
|
@@ -83,19 +92,24 @@ const getResourceHooks = (vocabHooks, resourceName) => {
|
|
83
92
|
}
|
84
93
|
return mergeHooks(vocabHooks[resourceName], vocabHooks['all']);
|
85
94
|
};
|
86
|
-
const getVocabHooks = (methodHooks, vocabulary, resourceName) => {
|
95
|
+
const getVocabHooks = (methodHooks, vocabulary, resourceName, includeAllVocab) => {
|
87
96
|
if (methodHooks == null) {
|
88
97
|
return {};
|
89
98
|
}
|
90
|
-
|
99
|
+
const vocabHooks = getResourceHooks(methodHooks[vocabulary], resourceName);
|
100
|
+
if (!includeAllVocab) {
|
101
|
+
return vocabHooks;
|
102
|
+
}
|
103
|
+
return mergeHooks(vocabHooks, getResourceHooks(methodHooks['all'], resourceName));
|
91
104
|
};
|
92
|
-
const getMethodHooks = memoize((method, vocabulary, resourceName) => mergeHooks(getVocabHooks(apiHooks[method], vocabulary, resourceName), getVocabHooks(apiHooks['all'], vocabulary, resourceName)), { primitive: true });
|
93
|
-
const getHooks = (request) => {
|
105
|
+
const getMethodHooks = memoize((method, vocabulary, resourceName, includeAllVocab) => mergeHooks(getVocabHooks(apiHooks[method], vocabulary, resourceName, includeAllVocab), getVocabHooks(apiHooks['all'], vocabulary, resourceName, includeAllVocab)), { primitive: true });
|
106
|
+
const getHooks = (request, includeAllVocab) => {
|
94
107
|
let { resourceName } = request;
|
95
108
|
if (resourceName != null) {
|
96
|
-
resourceName = sbvr_utils_1.resolveSynonym(request)
|
109
|
+
resourceName = (0, sbvr_utils_1.resolveSynonym)(request)
|
110
|
+
.replace(/\$.*$/, '');
|
97
111
|
}
|
98
|
-
return instantiateHooks(getMethodHooks(request.method, request.vocabulary, resourceName));
|
112
|
+
return instantiateHooks(getMethodHooks(request.method, request.vocabulary, resourceName, includeAllVocab));
|
99
113
|
};
|
100
114
|
exports.getHooks = getHooks;
|
101
115
|
exports.getHooks.clear = () => getMethodHooks.clear();
|
@@ -111,7 +125,6 @@ const apiHooks = {
|
|
111
125
|
};
|
112
126
|
apiHooks.MERGE = apiHooks.PATCH;
|
113
127
|
const addHook = (method, vocabulary, resourceName, hooks) => {
|
114
|
-
var _a, _b, _c;
|
115
128
|
const methodHooks = apiHooks[method];
|
116
129
|
if (methodHooks == null) {
|
117
130
|
throw new Error('Unsupported method: ' + method);
|
@@ -124,14 +137,14 @@ const addHook = (method, vocabulary, resourceName, hooks) => {
|
|
124
137
|
else {
|
125
138
|
let abstractSqlModel;
|
126
139
|
try {
|
127
|
-
abstractSqlModel = sbvr_utils_1.getAbstractSqlModel({ vocabulary });
|
140
|
+
abstractSqlModel = (0, sbvr_utils_1.getAbstractSqlModel)({ vocabulary });
|
128
141
|
}
|
129
|
-
catch
|
142
|
+
catch {
|
130
143
|
throw new Error('Unknown api root: ' + vocabulary);
|
131
144
|
}
|
132
145
|
if (resourceName !== 'all') {
|
133
146
|
const origResourceName = resourceName;
|
134
|
-
resourceName = sbvr_utils_1.resolveSynonym({ vocabulary, resourceName });
|
147
|
+
resourceName = (0, sbvr_utils_1.resolveSynonym)({ vocabulary, resourceName });
|
135
148
|
if (abstractSqlModel.tables[resourceName] == null) {
|
136
149
|
throw new Error('Unknown resource for api root: ' +
|
137
150
|
origResourceName +
|
@@ -140,9 +153,9 @@ const addHook = (method, vocabulary, resourceName, hooks) => {
|
|
140
153
|
}
|
141
154
|
}
|
142
155
|
}
|
143
|
-
|
156
|
+
methodHooks[vocabulary] ??= {};
|
144
157
|
const apiRootHooks = methodHooks[vocabulary];
|
145
|
-
|
158
|
+
apiRootHooks[resourceName] ??= {};
|
146
159
|
const resourceHooks = apiRootHooks[resourceName];
|
147
160
|
if ('sideEffects' in hooks && 'readOnlyTx' in hooks) {
|
148
161
|
const { sideEffects, readOnlyTx } = hooks;
|
@@ -164,7 +177,7 @@ const addHook = (method, vocabulary, resourceName, hooks) => {
|
|
164
177
|
throw new Error('Unknown callback type: ' + hookType);
|
165
178
|
}
|
166
179
|
const hook = hooks[hookType];
|
167
|
-
|
180
|
+
resourceHooks[hookType] ??= [];
|
168
181
|
if (hook != null) {
|
169
182
|
resourceHooks[hookType].push(hook);
|
170
183
|
}
|
@@ -173,7 +186,7 @@ const addHook = (method, vocabulary, resourceName, hooks) => {
|
|
173
186
|
};
|
174
187
|
exports.addHook = addHook;
|
175
188
|
const addSideEffectHook = (method, apiRoot, resourceName, hooks) => {
|
176
|
-
exports.addHook(method, apiRoot, resourceName, {
|
189
|
+
(0, exports.addHook)(method, apiRoot, resourceName, {
|
177
190
|
...hooks,
|
178
191
|
sideEffects: true,
|
179
192
|
readOnlyTx: false,
|
@@ -181,51 +194,64 @@ const addSideEffectHook = (method, apiRoot, resourceName, hooks) => {
|
|
181
194
|
};
|
182
195
|
exports.addSideEffectHook = addSideEffectHook;
|
183
196
|
const addPureHook = (method, apiRoot, resourceName, hooks) => {
|
184
|
-
exports.addHook(method, apiRoot, resourceName, {
|
197
|
+
(0, exports.addHook)(method, apiRoot, resourceName, {
|
185
198
|
...hooks,
|
186
199
|
sideEffects: false,
|
187
200
|
readOnlyTx: false,
|
188
201
|
});
|
189
202
|
};
|
190
203
|
exports.addPureHook = addPureHook;
|
191
|
-
const defineApi = (args) => {
|
192
|
-
const {
|
193
|
-
const { vocabulary } = request;
|
204
|
+
const defineApi = (modelName, args) => {
|
205
|
+
const { req, tx } = args;
|
194
206
|
Object.defineProperty(args, 'api', {
|
195
|
-
get: _.once(() => sbvr_utils_1.api[
|
207
|
+
get: _.once(() => sbvr_utils_1.api[modelName].clone({
|
196
208
|
passthrough: { req, tx },
|
197
209
|
})),
|
198
210
|
});
|
199
211
|
};
|
212
|
+
const getReadOnlyArgs = (modelName, args) => {
|
213
|
+
if (args.tx == null || args.tx.isReadOnly()) {
|
214
|
+
return args;
|
215
|
+
}
|
216
|
+
let readOnlyArgs;
|
217
|
+
readOnlyArgs = { ...args, tx: args.tx.asReadOnly() };
|
218
|
+
if (args.request != null) {
|
219
|
+
defineApi(modelName, readOnlyArgs);
|
220
|
+
}
|
221
|
+
return readOnlyArgs;
|
222
|
+
};
|
200
223
|
const runHooks = async (hookName, hooksList, args) => {
|
201
224
|
if (hooksList == null) {
|
202
225
|
return;
|
203
226
|
}
|
204
|
-
const hooks = hooksList
|
205
|
-
|
227
|
+
const hooks = hooksList
|
228
|
+
.map(([modelName, $hooks]) => [
|
229
|
+
modelName,
|
230
|
+
$hooks[hookName],
|
231
|
+
])
|
232
|
+
.filter((v) => v[1] != null && v[1].length > 0);
|
233
|
+
if (hooks.length === 0) {
|
206
234
|
return;
|
207
235
|
}
|
208
|
-
|
209
|
-
|
210
|
-
readOnlyArgs = { ...args, tx: args.tx.asReadOnly() };
|
211
|
-
}
|
212
|
-
else {
|
213
|
-
readOnlyArgs = args;
|
236
|
+
if (['POSTRUN', 'PRERESPOND', 'POSTRUN-ERROR'].includes(hookName)) {
|
237
|
+
hooks.reverse();
|
214
238
|
}
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
239
|
+
for (const [modelName, modelHooks] of hooks) {
|
240
|
+
const modelArgs = { ...args };
|
241
|
+
let modelReadOnlyArgs;
|
242
|
+
if (args.request != null) {
|
243
|
+
defineApi(modelName, modelArgs);
|
219
244
|
}
|
245
|
+
await Promise.all(modelHooks.map(async (hook) => {
|
246
|
+
if (hook.readOnlyTx) {
|
247
|
+
modelReadOnlyArgs ??= getReadOnlyArgs(modelName, modelArgs);
|
248
|
+
await hook.run(modelReadOnlyArgs);
|
249
|
+
}
|
250
|
+
else {
|
251
|
+
await hook.run(modelArgs);
|
252
|
+
}
|
253
|
+
}));
|
220
254
|
}
|
221
|
-
await Promise.all(hooks.map(async (hook) => {
|
222
|
-
if (hook.readOnlyTx) {
|
223
|
-
await hook.run(readOnlyArgs);
|
224
|
-
}
|
225
|
-
else {
|
226
|
-
await hook.run(args);
|
227
|
-
}
|
228
|
-
}));
|
229
255
|
};
|
230
256
|
exports.runHooks = runHooks;
|
231
257
|
//# sourceMappingURL=hooks.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/sbvr-api/hooks.ts"],"names":[],"mappings":";;;AAOA,
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/sbvr-api/hooks.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
declare module '@balena/abstract-sql-compiler' {
|
2
2
|
interface AbstractSqlTable {
|
3
3
|
fetchProcessingFields?: {
|
4
|
-
[field: string]: NonNullable<
|
4
|
+
[field: string]: NonNullable<SbvrType['fetchProcessing']>;
|
5
5
|
};
|
6
6
|
localFields?: {
|
7
7
|
[odataName: string]: true;
|
@@ -10,7 +10,7 @@ declare module '@balena/abstract-sql-compiler' {
|
|
10
10
|
}
|
11
11
|
import type { AbstractSqlModel } from '@balena/abstract-sql-compiler';
|
12
12
|
import type { Result, Row } from '../database-layer/db';
|
13
|
-
import
|
13
|
+
import { SbvrType } from '@balena/sbvr-types';
|
14
14
|
export declare const resourceURI: (vocab: string, resourceName: string, id: string | number) => string | undefined;
|
15
15
|
export declare const process: (vocab: string, abstractSqlModel: AbstractSqlModel, resourceName: string, rows: Result['rows'], { includeMetadata }: {
|
16
16
|
includeMetadata: boolean;
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.prepareModel = exports.process = exports.resourceURI = void 0;
|
4
4
|
const odata_to_abstract_sql_1 = require("@balena/odata-to-abstract-sql");
|
5
|
-
const
|
5
|
+
const sbvr_types_1 = require("@balena/sbvr-types");
|
6
6
|
const _ = require("lodash");
|
7
7
|
const sbvr_utils_1 = require("./sbvr-utils");
|
8
8
|
const checkForExpansion = async (vocab, abstractSqlModel, parentResourceName, fieldName, row, opts) => {
|
@@ -14,30 +14,25 @@ const checkForExpansion = async (vocab, abstractSqlModel, parentResourceName, fi
|
|
14
14
|
try {
|
15
15
|
field = JSON.parse(field);
|
16
16
|
}
|
17
|
-
catch
|
17
|
+
catch {
|
18
18
|
}
|
19
19
|
}
|
20
|
+
const mappingResourceName = (0, sbvr_utils_1.resolveNavigationResource)({
|
21
|
+
abstractSqlModel,
|
22
|
+
vocabulary: vocab,
|
23
|
+
resourceName: parentResourceName,
|
24
|
+
}, fieldName);
|
20
25
|
if (Array.isArray(field)) {
|
21
|
-
const
|
22
|
-
abstractSqlModel,
|
23
|
-
vocabulary: vocab,
|
24
|
-
resourceName: parentResourceName,
|
25
|
-
}, fieldName);
|
26
|
-
const expandedField = await exports.process(vocab, abstractSqlModel, mappingResourceName, field, opts);
|
26
|
+
const expandedField = await (0, exports.process)(vocab, abstractSqlModel, mappingResourceName, field, opts);
|
27
27
|
row[fieldName] = expandedField;
|
28
28
|
}
|
29
29
|
else {
|
30
|
-
const mappingResourceName = sbvr_utils_1.resolveNavigationResource({
|
31
|
-
abstractSqlModel,
|
32
|
-
vocabulary: vocab,
|
33
|
-
resourceName: parentResourceName,
|
34
|
-
}, fieldName);
|
35
30
|
row[fieldName] = {
|
36
31
|
__id: field,
|
37
32
|
};
|
38
33
|
if (opts.includeMetadata) {
|
39
34
|
row[fieldName].__deferred = {
|
40
|
-
uri: exports.resourceURI(vocab, mappingResourceName, field),
|
35
|
+
uri: (0, exports.resourceURI)(vocab, mappingResourceName, field),
|
41
36
|
};
|
42
37
|
}
|
43
38
|
}
|
@@ -56,8 +51,8 @@ const getLocalFields = (table) => {
|
|
56
51
|
if (table.localFields == null) {
|
57
52
|
table.localFields = {};
|
58
53
|
for (const { fieldName, dataType } of table.fields) {
|
59
|
-
if (
|
60
|
-
const odataName = odata_to_abstract_sql_1.sqlNameToODataName(fieldName);
|
54
|
+
if (!['ForeignKey', 'ConceptType'].includes(dataType)) {
|
55
|
+
const odataName = (0, odata_to_abstract_sql_1.sqlNameToODataName)(fieldName);
|
61
56
|
table.localFields[odataName] = true;
|
62
57
|
}
|
63
58
|
}
|
@@ -65,16 +60,19 @@ const getLocalFields = (table) => {
|
|
65
60
|
return table.localFields;
|
66
61
|
};
|
67
62
|
const getFetchProcessingFields = (table) => {
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
sbvrTypes[dataType].fetchProcessing != null)
|
63
|
+
return (table.fetchProcessingFields ??= _(table.fields)
|
64
|
+
.filter(({ dataType }) => sbvr_types_1.default[dataType]
|
65
|
+
?.fetchProcessing != null)
|
72
66
|
.map(({ fieldName, dataType }) => {
|
73
|
-
const odataName = odata_to_abstract_sql_1.sqlNameToODataName(fieldName);
|
74
|
-
return [
|
67
|
+
const odataName = (0, odata_to_abstract_sql_1.sqlNameToODataName)(fieldName);
|
68
|
+
return [
|
69
|
+
odataName,
|
70
|
+
sbvr_types_1.default[dataType]
|
71
|
+
.fetchProcessing,
|
72
|
+
];
|
75
73
|
})
|
76
74
|
.fromPairs()
|
77
|
-
.value())
|
75
|
+
.value());
|
78
76
|
};
|
79
77
|
const process = async (vocab, abstractSqlModel, resourceName, rows, { includeMetadata }) => {
|
80
78
|
if (rows.length === 0) {
|
@@ -86,7 +84,7 @@ const process = async (vocab, abstractSqlModel, resourceName, rows, { includeMet
|
|
86
84
|
return count;
|
87
85
|
}
|
88
86
|
}
|
89
|
-
const sqlResourceName = sbvr_utils_1.resolveSynonym({
|
87
|
+
const sqlResourceName = (0, sbvr_utils_1.resolveSynonym)({
|
90
88
|
abstractSqlModel,
|
91
89
|
vocabulary: vocab,
|
92
90
|
resourceName,
|
@@ -97,17 +95,17 @@ const process = async (vocab, abstractSqlModel, resourceName, rows, { includeMet
|
|
97
95
|
const processedFields = fieldNames.filter((fieldName) => fetchProcessingFields.hasOwnProperty(fieldName));
|
98
96
|
const localFields = getLocalFields(table);
|
99
97
|
const expandableFields = fieldNames.filter((fieldName) => !localFields.hasOwnProperty(fieldName));
|
100
|
-
const odataIdField = odata_to_abstract_sql_1.sqlNameToODataName(table.idField);
|
101
|
-
|
102
|
-
|
98
|
+
const odataIdField = (0, odata_to_abstract_sql_1.sqlNameToODataName)(table.idField);
|
99
|
+
for (const row of rows) {
|
100
|
+
for (const fieldName of processedFields) {
|
103
101
|
row[fieldName] = fetchProcessingFields[fieldName](row[fieldName]);
|
104
|
-
}
|
102
|
+
}
|
105
103
|
if (includeMetadata) {
|
106
104
|
row.__metadata = {
|
107
|
-
uri: exports.resourceURI(vocab, resourceName, row[odataIdField]),
|
105
|
+
uri: (0, exports.resourceURI)(vocab, resourceName, row[odataIdField]),
|
108
106
|
};
|
109
107
|
}
|
110
|
-
}
|
108
|
+
}
|
111
109
|
if (expandableFields.length > 0) {
|
112
110
|
await Promise.all(rows.map(async (row) => {
|
113
111
|
await Promise.all(expandableFields.map(async (fieldName) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"odata-response.js","sourceRoot":"","sources":["../../src/sbvr-api/odata-response.ts"],"names":[],"mappings":";;;AAiBA,yEAAmE;AACnE,
|
1
|
+
{"version":3,"file":"odata-response.js","sourceRoot":"","sources":["../../src/sbvr-api/odata-response.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import './express-extension';
|
2
2
|
import type * as Express from 'express';
|
3
|
+
import type { Tx } from '../database-layer/db';
|
3
4
|
import type { ApiKey, User } from '../sbvr-api/sbvr-utils';
|
4
5
|
import * as sbvrUtils from '../sbvr-api/sbvr-utils';
|
5
6
|
import { HookReq } from './hooks';
|
@@ -20,28 +21,28 @@ interface NestedCheckAnd<T> {
|
|
20
21
|
}
|
21
22
|
interface NestedCheckArray<T> extends Array<NestedCheck<T>> {
|
22
23
|
}
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
export declare function nestedCheck<I, O>(check: string, stringCallback: (s: string) => O): O;
|
28
|
-
export declare function nestedCheck<I, O>(check: boolean, stringCallback: (s: string) => O): boolean;
|
29
|
-
export declare function nestedCheck<I, O>(check: NestedCheck<I>, stringCallback: (s: string) => O): Exclude<I, string> | O | MappedNestedCheck<typeof check, I, O>;
|
24
|
+
type NestedCheck<T> = NestedCheckOr<T> | NestedCheckAnd<T> | NestedCheckArray<T> | T;
|
25
|
+
type PermissionCheck = NestedCheck<string>;
|
26
|
+
type MappedType<I, O> = O extends NestedCheck<infer T> ? Exclude<Exclude<I, string> | T, boolean> : Exclude<Exclude<I, string> | O, boolean>;
|
27
|
+
type MappedNestedCheck<T extends NestedCheck<I>, I, O> = T extends NestedCheckOr<I> ? NestedCheckOr<MappedType<I, O>> : T extends NestedCheckAnd<I> ? NestedCheckAnd<MappedType<I, O>> : T extends NestedCheckArray<I> ? NestedCheckArray<MappedType<I, O>> : Exclude<I, string> | O;
|
28
|
+
export declare function nestedCheck<I extends {}, O>(check: string, stringCallback: (s: string) => O): O;
|
29
|
+
export declare function nestedCheck<I extends {}, O>(check: boolean, stringCallback: (s: string) => O): boolean;
|
30
|
+
export declare function nestedCheck<I extends {}, O>(check: NestedCheck<I>, stringCallback: (s: string) => O): Exclude<I, string> | O | MappedNestedCheck<typeof check, I, O>;
|
30
31
|
export declare const checkPassword: (username: string, password: string) => Promise<{
|
31
32
|
id: number;
|
32
33
|
actor: number;
|
33
34
|
username: string;
|
34
35
|
permissions: string[];
|
35
36
|
}>;
|
36
|
-
export declare const getUserPermissions: (userId: number) => Promise<string[]>;
|
37
|
-
export declare const getApiKeyPermissions: (apiKey: string) => Promise<string[]>;
|
38
|
-
export declare const resolveAuthHeader: (req: Express.Request, expectedScheme?: string) => Promise<PermissionReq['apiKey']>;
|
39
|
-
export declare const customAuthorizationMiddleware: (expectedScheme?: string) => (req: Express.Request, _res?: Express.Response
|
40
|
-
export declare const authorizationMiddleware: (req: Express.Request, _res?: Express.Response
|
41
|
-
export declare const resolveApiKey: (req: HookReq | Express.Request, paramName?: string) => Promise<PermissionReq['apiKey']>;
|
42
|
-
export declare const customApiKeyMiddleware: (paramName?: string) => (req: HookReq | Express.Request, _res?: Express.Response
|
43
|
-
export declare const apiKeyMiddleware: (req: HookReq | Express.Request, _res?: Express.Response
|
44
|
-
export declare const checkPermissions: (req: PermissionReq, actionList: PermissionCheck, resourceName?: string
|
37
|
+
export declare const getUserPermissions: (userId: number, tx?: Tx) => Promise<string[]>;
|
38
|
+
export declare const getApiKeyPermissions: (apiKey: string, tx?: Tx) => Promise<string[]>;
|
39
|
+
export declare const resolveAuthHeader: (req: Express.Request, expectedScheme?: string, tx?: Tx) => Promise<PermissionReq['apiKey']>;
|
40
|
+
export declare const customAuthorizationMiddleware: (expectedScheme?: string) => (req: Express.Request, _res?: Express.Response, next?: Express.NextFunction) => Promise<void>;
|
41
|
+
export declare const authorizationMiddleware: (req: Express.Request, _res?: Express.Response, next?: Express.NextFunction) => Promise<void>;
|
42
|
+
export declare const resolveApiKey: (req: HookReq | Express.Request, paramName?: string, tx?: Tx) => Promise<PermissionReq['apiKey']>;
|
43
|
+
export declare const customApiKeyMiddleware: (paramName?: string) => (req: HookReq | Express.Request, _res?: Express.Response, next?: Express.NextFunction) => Promise<void>;
|
44
|
+
export declare const apiKeyMiddleware: (req: HookReq | Express.Request, _res?: Express.Response, next?: Express.NextFunction) => Promise<void>;
|
45
|
+
export declare const checkPermissions: (req: PermissionReq, actionList: PermissionCheck, resourceName?: string, vocabulary?: string) => Promise<boolean | NestedCheck<string>>;
|
45
46
|
export declare const checkPermissionsMiddleware: (action: PermissionCheck) => Express.RequestHandler;
|
46
47
|
export declare const addPermissions: (req: PermissionReq, request: ODataRequest & {
|
47
48
|
permissionType?: PermissionCheck;
|