@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.
Files changed (168) hide show
  1. package/.versionbot/CHANGELOG.yml +3 -3
  2. package/CHANGELOG.md +1 -1
  3. package/{Gruntfile.cts → Gruntfile.ts} +22 -9
  4. package/bin/abstract-sql-compiler.js +1 -1
  5. package/bin/odata-compiler.js +1 -1
  6. package/bin/sbvr-compiler.js +1 -1
  7. package/build/{browser.cts → browser.ts} +1 -1
  8. package/build/{config.cts → config.ts} +1 -5
  9. package/build/{module.cts → module.ts} +1 -1
  10. package/build/{server.cts → server.ts} +1 -1
  11. package/out/bin/abstract-sql-compiler.js +19 -17
  12. package/out/bin/abstract-sql-compiler.js.map +1 -1
  13. package/out/bin/odata-compiler.js +21 -19
  14. package/out/bin/odata-compiler.js.map +1 -1
  15. package/out/bin/sbvr-compiler.js +54 -19
  16. package/out/bin/sbvr-compiler.js.map +1 -1
  17. package/out/bin/utils.d.ts +3 -3
  18. package/out/bin/utils.js +53 -21
  19. package/out/bin/utils.js.map +1 -1
  20. package/out/config-loader/config-loader.d.ts +6 -6
  21. package/out/config-loader/config-loader.js +63 -23
  22. package/out/config-loader/config-loader.js.map +1 -1
  23. package/out/config-loader/env.d.ts +1 -1
  24. package/out/config-loader/env.js +66 -24
  25. package/out/config-loader/env.js.map +1 -1
  26. package/out/data-server/sbvr-server.d.ts +3 -3
  27. package/out/data-server/sbvr-server.js +42 -5
  28. package/out/data-server/sbvr-server.js.map +1 -1
  29. package/out/database-layer/db.d.ts +3 -3
  30. package/out/database-layer/db.js +83 -37
  31. package/out/database-layer/db.js.map +1 -1
  32. package/out/express-emulator/express.js.map +1 -1
  33. package/out/extended-sbvr-parser/extended-sbvr-parser.js +11 -8
  34. package/out/extended-sbvr-parser/extended-sbvr-parser.js.map +1 -1
  35. package/out/http-transactions/transactions.d.ts +2 -2
  36. package/out/http-transactions/transactions.js +4 -4
  37. package/out/http-transactions/transactions.js.map +1 -1
  38. package/out/migrator/async.d.ts +2 -2
  39. package/out/migrator/async.js +60 -20
  40. package/out/migrator/async.js.map +1 -1
  41. package/out/migrator/migrations.js +2 -1
  42. package/out/migrator/sync.d.ts +6 -6
  43. package/out/migrator/sync.js +61 -20
  44. package/out/migrator/sync.js.map +1 -1
  45. package/out/migrator/utils.d.ts +4 -4
  46. package/out/migrator/utils.js +97 -42
  47. package/out/migrator/utils.js.map +1 -1
  48. package/out/odata-metadata/odata-metadata-generator.js +14 -7
  49. package/out/odata-metadata/odata-metadata-generator.js.map +1 -1
  50. package/out/passport-pinejs/mount-login-router.d.ts +1 -1
  51. package/out/passport-pinejs/mount-login-router.js +41 -4
  52. package/out/passport-pinejs/mount-login-router.js.map +1 -1
  53. package/out/passport-pinejs/passport-pinejs.d.ts +1 -1
  54. package/out/passport-pinejs/passport-pinejs.js +46 -11
  55. package/out/passport-pinejs/passport-pinejs.js.map +1 -1
  56. package/out/pinejs-session-store/pinejs-session-store.d.ts +1 -1
  57. package/out/pinejs-session-store/pinejs-session-store.js +48 -11
  58. package/out/pinejs-session-store/pinejs-session-store.js.map +1 -1
  59. package/out/sbvr-api/abstract-sql.d.ts +2 -2
  60. package/out/sbvr-api/abstract-sql.js +65 -22
  61. package/out/sbvr-api/abstract-sql.js.map +1 -1
  62. package/out/sbvr-api/cached-compile.js +15 -8
  63. package/out/sbvr-api/cached-compile.js.map +1 -1
  64. package/out/sbvr-api/common-types.js +2 -1
  65. package/out/sbvr-api/control-flow.d.ts +1 -1
  66. package/out/sbvr-api/control-flow.js +25 -12
  67. package/out/sbvr-api/control-flow.js.map +1 -1
  68. package/out/sbvr-api/dev.js +2 -1
  69. package/out/sbvr-api/errors.d.ts +1 -1
  70. package/out/sbvr-api/errors.js +95 -47
  71. package/out/sbvr-api/errors.js.map +1 -1
  72. package/out/sbvr-api/express-extension.d.ts +2 -2
  73. package/out/sbvr-api/express-extension.js +2 -1
  74. package/out/sbvr-api/hooks.d.ts +4 -4
  75. package/out/sbvr-api/hooks.js +35 -23
  76. package/out/sbvr-api/hooks.js.map +1 -1
  77. package/out/sbvr-api/odata-response.d.ts +2 -2
  78. package/out/sbvr-api/odata-response.js +29 -19
  79. package/out/sbvr-api/odata-response.js.map +1 -1
  80. package/out/sbvr-api/permissions.d.ts +8 -8
  81. package/out/sbvr-api/permissions.js +159 -106
  82. package/out/sbvr-api/permissions.js.map +1 -1
  83. package/out/sbvr-api/sbvr-utils.d.ts +16 -38
  84. package/out/sbvr-api/sbvr-utils.js +285 -222
  85. package/out/sbvr-api/sbvr-utils.js.map +1 -1
  86. package/out/sbvr-api/translations.d.ts +1 -1
  87. package/out/sbvr-api/translations.js +17 -10
  88. package/out/sbvr-api/translations.js.map +1 -1
  89. package/out/sbvr-api/uri-parser.d.ts +6 -6
  90. package/out/sbvr-api/uri-parser.js +84 -39
  91. package/out/sbvr-api/uri-parser.js.map +1 -1
  92. package/out/sbvr-api/user.js +2 -1
  93. package/out/server-glue/global-ext.d.ts +3 -0
  94. package/out/server-glue/module.d.ts +15 -15
  95. package/out/server-glue/module.js +59 -20
  96. package/out/server-glue/module.js.map +1 -1
  97. package/out/server-glue/sbvr-loader.d.ts +1 -2
  98. package/out/server-glue/sbvr-loader.js +11 -4
  99. package/out/server-glue/sbvr-loader.js.map +1 -1
  100. package/out/server-glue/server.d.ts +2 -2
  101. package/out/server-glue/server.js +59 -17
  102. package/out/server-glue/server.js.map +1 -1
  103. package/out/tasks/common.d.ts +1 -1
  104. package/out/tasks/common.js +9 -3
  105. package/out/tasks/common.js.map +1 -1
  106. package/out/tasks/index.d.ts +8 -8
  107. package/out/tasks/index.js +63 -25
  108. package/out/tasks/index.js.map +1 -1
  109. package/out/tasks/tasks.js +2 -1
  110. package/out/tasks/worker.d.ts +3 -3
  111. package/out/tasks/worker.js +51 -14
  112. package/out/tasks/worker.js.map +1 -1
  113. package/out/webresource-handler/handlers/NoopHandler.d.ts +1 -1
  114. package/out/webresource-handler/handlers/NoopHandler.js +5 -1
  115. package/out/webresource-handler/handlers/NoopHandler.js.map +1 -1
  116. package/out/webresource-handler/handlers/S3Handler.d.ts +1 -1
  117. package/out/webresource-handler/handlers/S3Handler.js +24 -17
  118. package/out/webresource-handler/handlers/S3Handler.js.map +1 -1
  119. package/out/webresource-handler/handlers/index.d.ts +2 -2
  120. package/out/webresource-handler/handlers/index.js +18 -2
  121. package/out/webresource-handler/handlers/index.js.map +1 -1
  122. package/out/webresource-handler/index.d.ts +1 -1
  123. package/out/webresource-handler/index.js +85 -35
  124. package/out/webresource-handler/index.js.map +1 -1
  125. package/package.json +33 -33
  126. package/src/bin/abstract-sql-compiler.ts +3 -3
  127. package/src/bin/odata-compiler.ts +3 -3
  128. package/src/bin/sbvr-compiler.ts +2 -2
  129. package/src/bin/utils.ts +15 -23
  130. package/src/config-loader/config-loader.ts +11 -11
  131. package/src/config-loader/env.ts +3 -3
  132. package/src/data-server/sbvr-server.ts +4 -4
  133. package/src/database-layer/db.ts +11 -18
  134. package/src/extended-sbvr-parser/extended-sbvr-parser.ts +5 -5
  135. package/src/http-transactions/transactions.js +4 -4
  136. package/src/migrator/async.ts +5 -5
  137. package/src/migrator/sync.ts +8 -8
  138. package/src/migrator/utils.ts +7 -7
  139. package/src/odata-metadata/odata-metadata-generator.ts +2 -3
  140. package/src/passport-pinejs/mount-login-router.ts +3 -3
  141. package/src/passport-pinejs/passport-pinejs.ts +3 -3
  142. package/src/pinejs-session-store/pinejs-session-store.ts +4 -4
  143. package/src/sbvr-api/abstract-sql.ts +5 -5
  144. package/src/sbvr-api/cached-compile.ts +1 -1
  145. package/src/sbvr-api/control-flow.ts +1 -1
  146. package/src/sbvr-api/errors.ts +1 -1
  147. package/src/sbvr-api/express-extension.ts +2 -2
  148. package/src/sbvr-api/hooks.ts +5 -5
  149. package/src/sbvr-api/odata-response.ts +4 -8
  150. package/src/sbvr-api/permissions.ts +17 -17
  151. package/src/sbvr-api/sbvr-utils.ts +31 -37
  152. package/src/sbvr-api/translations.ts +1 -1
  153. package/src/sbvr-api/uri-parser.ts +9 -9
  154. package/src/server-glue/global-ext.d.ts +3 -0
  155. package/src/server-glue/module.ts +19 -19
  156. package/src/server-glue/sbvr-loader.ts +27 -15
  157. package/src/server-glue/server.ts +24 -13
  158. package/src/tasks/common.ts +1 -1
  159. package/src/tasks/index.ts +14 -14
  160. package/src/tasks/worker.ts +8 -8
  161. package/src/webresource-handler/handlers/NoopHandler.ts +1 -5
  162. package/src/webresource-handler/handlers/S3Handler.ts +1 -1
  163. package/src/webresource-handler/handlers/index.ts +2 -2
  164. package/src/webresource-handler/index.ts +8 -8
  165. package/tsconfig.dev.json +2 -4
  166. package/tsconfig.json +1 -1
  167. package/typings/lf-to-abstract-sql.d.ts +2 -2
  168. package/typings/memoizee.d.ts +1 -1
@@ -1,45 +1,84 @@
1
- import _ from 'lodash';
2
- import { cachedCompile } from './cached-compile.js';
3
- import * as AbstractSQLCompiler from '@balena/abstract-sql-compiler';
4
- import AbstractSqlCompilerPackage from '@balena/abstract-sql-compiler/package.json' with { type: 'json' };
5
- const { version: AbstractSQLCompilerVersion } = AbstractSqlCompilerPackage;
6
- import LF2AbstractSQL from '@balena/lf-to-abstract-sql';
7
- import { odataNameToSqlName, sqlNameToODataName, } from '@balena/odata-to-abstract-sql';
8
- import $sbvrTypes from '@balena/sbvr-types';
9
- const { default: sbvrTypes } = $sbvrTypes;
10
- import deepFreeze from 'deep-freeze';
11
- import { PinejsClientCore } from 'pinejs-client-core';
12
- import { ExtendedSBVRParser } from '../extended-sbvr-parser/extended-sbvr-parser.js';
13
- import * as asyncMigrator from '../migrator/async.js';
14
- import * as syncMigrator from '../migrator/sync.js';
15
- import { generateODataMetadata } from '../odata-metadata/odata-metadata-generator.js';
16
- import { importSBVR } from '../server-glue/sbvr-loader.js';
17
- const devModel = await importSBVR('./dev.sbvr', import.meta);
18
- import * as permissions from './permissions.js';
19
- import { BadRequestError, ConflictError, HttpError, InternalRequestError, MethodNotAllowedError, ParsingError, PermissionError, PermissionParsingError, SbvrValidationError, SqlCompilationError, statusCodeToError, TranslationError, UnauthorizedError, } from './errors.js';
20
- import * as uriParser from './uri-parser.js';
21
- import { rollbackRequestHooks, getHooks, runHooks, } from './hooks.js';
22
- export { addPureHook, addSideEffectHook, } from './hooks.js';
23
- import memoizeWeak from 'memoizee/weak.js';
24
- import * as controlFlow from './control-flow.js';
25
- export let db = undefined;
26
- export { sbvrTypes };
27
- import LF2AbstractSQLPackage from '@balena/lf-to-abstract-sql/package.json' with { type: 'json' };
28
- const { version: LF2AbstractSQLVersion } = LF2AbstractSQLPackage;
29
- import SbvrTypesPackage from '@balena/sbvr-types/package.json' with { type: 'json' };
30
- const { version: sbvrTypesVersion } = SbvrTypesPackage;
31
- import { compileRequest, getAndCheckBindValues, isRuleAffected, } from './abstract-sql.js';
32
- export { resolveOdataBind } from './abstract-sql.js';
33
- import * as odataResponse from './odata-response.js';
34
- import { env } from '../server-glue/module.js';
35
- import { translateAbstractSqlModel } from './translations.js';
36
- import { setExecutedMigrations, } from '../migrator/utils.js';
37
- const LF2AbstractSQLTranslator = LF2AbstractSQL.createTranslator(sbvrTypes);
38
- const LF2AbstractSQLTranslatorVersion = `${LF2AbstractSQLVersion}+${sbvrTypesVersion}`;
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 = memoizeWeak((abstractSqlModel, resourceName) => {
41
- const sqlName = odataNameToSqlName(resourceName);
42
- return _(sqlName)
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
- export const resolveSynonym = (request) => {
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
- const memoizedResolveNavigationResource = memoizeWeak((abstractSqlModel, resourceName, navigationName) => {
58
- const navigation = odataNameToSqlName(navigationName)
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 = _.get(abstractSqlModel.relationships[resolvedResourceName], navigation);
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
- export const resolveNavigationResource = (request, navigationName) => {
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
- export const isModelNew = async (tx, modelName) => {
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
- export const validateModel = async (tx, modelName, request) => {
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
- export const generateLfModel = (seModel) => cachedCompile('lfModel', ExtendedSBVRParser.version, seModel, () => ExtendedSBVRParser.matchAll(seModel, 'Process'));
233
- export const generateAbstractSqlModel = (lfModel) => cachedCompile('abstractSqlModel', LF2AbstractSQLTranslatorVersion, lfModel, () => LF2AbstractSQLTranslator(lfModel, 'Process'));
234
- export const generateSqlModel = (abstractSql, targetDatabaseEngine) => cachedCompile('sqlModel', AbstractSQLCompilerVersion + '+' + targetDatabaseEngine, abstractSql, () => AbstractSQLCompiler[targetDatabaseEngine].compileSchema(abstractSql));
235
- export function generateModels(model, targetDatabaseEngine) {
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
- export const executeModel = (tx, model) => executeModels(tx, [model]);
286
- export const executeModels = async (tx, execModels) => {
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] = _.noop;
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
- export const postExecuteModels = async (tx) => {
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
- export const deleteModel = async (vocabulary) => {
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
- export const getID = (vocab, request) => {
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
- export const runRule = (() => {
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(sbvrTypes);
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 = _.last(abstractSqlModel.rules);
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 = _.uniq(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
- export class PinejsClient extends PinejsClientCore {
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
- export const api = {};
610
- export const logger = {};
611
- export const runURI = async (method, uri, body = {}, tx, req, custom) => {
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
- _.forEach(body, (v, k) => {
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: _.noop,
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 (_.isError(response)) {
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
- export const getAbstractSqlModel = (request) => {
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 = _.last(request.translateVersions);
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
- export const getAffectedIds = async (args) => {
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
- export const getModel = (vocabulary) => {
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 (_.isError(result)) {
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
- export const getApiRoot = (req) => {
927
+ const getApiRoot = (req) => {
872
928
  const [, apiRoot] = req.url.split('/', 2);
873
929
  return apiRoot;
874
930
  };
875
- export const handleODataRequest = async (req, res, next) => {
876
- const apiRoot = getApiRoot(req);
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
- export const onHandleHttpError = (fn) => {
971
+ const onHandleHttpError = (fn) => {
914
972
  handleErrorFns.push(fn);
915
973
  };
916
- export const handleHttpErrors = (req, res, err) => {
917
- if (err instanceof HttpError) {
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, _.last(request.translateVersions), request);
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, _.last(request.translateVersions), request);
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, _.last(request.translateVersions), request);
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
- export const executeStandardModels = async (tx) => {
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
- export const setup = async (_app, $db) => {
1296
- db = $db;
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
- export const postSetup = async (_app, $db) => {
1314
- db = $db;
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