oc 0.49.26 → 0.49.28

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 (247) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cli/commands.d.ts +163 -163
  3. package/dist/cli/commands.js +162 -162
  4. package/dist/cli/domain/clean.d.ts +2 -2
  5. package/dist/cli/domain/clean.js +24 -24
  6. package/dist/cli/domain/get-components-by-dir.d.ts +1 -1
  7. package/dist/cli/domain/get-components-by-dir.js +41 -41
  8. package/dist/cli/domain/get-mocked-plugins.d.ts +10 -10
  9. package/dist/cli/domain/get-mocked-plugins.js +88 -88
  10. package/dist/cli/domain/handle-dependencies/ensure-compiler-is-declared-as-devDependency.d.ts +6 -6
  11. package/dist/cli/domain/handle-dependencies/ensure-compiler-is-declared-as-devDependency.js +15 -15
  12. package/dist/cli/domain/handle-dependencies/get-compiler.d.ts +10 -10
  13. package/dist/cli/domain/handle-dependencies/get-compiler.js +28 -28
  14. package/dist/cli/domain/handle-dependencies/get-missing-dependencies.d.ts +1 -1
  15. package/dist/cli/domain/handle-dependencies/get-missing-dependencies.js +18 -18
  16. package/dist/cli/domain/handle-dependencies/index.d.ts +10 -10
  17. package/dist/cli/domain/handle-dependencies/index.js +70 -70
  18. package/dist/cli/domain/handle-dependencies/install-compiler.d.ts +8 -8
  19. package/dist/cli/domain/handle-dependencies/install-compiler.js +58 -58
  20. package/dist/cli/domain/handle-dependencies/install-missing-dependencies.d.ts +5 -5
  21. package/dist/cli/domain/handle-dependencies/install-missing-dependencies.js +63 -63
  22. package/dist/cli/domain/handle-dependencies/link-missing-dependencies.d.ts +6 -6
  23. package/dist/cli/domain/handle-dependencies/link-missing-dependencies.js +32 -32
  24. package/dist/cli/domain/handle-dependencies/require-template.d.ts +17 -17
  25. package/dist/cli/domain/handle-dependencies/require-template.js +34 -34
  26. package/dist/cli/domain/init-template/index.d.ts +10 -10
  27. package/dist/cli/domain/init-template/index.js +44 -44
  28. package/dist/cli/domain/init-template/install-template.d.ts +11 -11
  29. package/dist/cli/domain/init-template/install-template.js +58 -58
  30. package/dist/cli/domain/init-template/scaffold.d.ts +11 -11
  31. package/dist/cli/domain/init-template/scaffold.js +34 -34
  32. package/dist/cli/domain/local.d.ts +21 -21
  33. package/dist/cli/domain/local.js +86 -86
  34. package/dist/cli/domain/mock.d.ts +5 -5
  35. package/dist/cli/domain/mock.js +33 -33
  36. package/dist/cli/domain/package-components.d.ts +9 -9
  37. package/dist/cli/domain/package-components.js +71 -71
  38. package/dist/cli/domain/registry.d.ts +20 -20
  39. package/dist/cli/domain/registry.js +143 -143
  40. package/dist/cli/domain/url-parser.d.ts +14 -14
  41. package/dist/cli/domain/url-parser.js +31 -31
  42. package/dist/cli/domain/watch.d.ts +1 -1
  43. package/dist/cli/domain/watch.js +29 -29
  44. package/dist/cli/facade/clean.d.ts +16 -16
  45. package/dist/cli/facade/clean.js +58 -58
  46. package/dist/cli/facade/dev.d.ts +146 -114
  47. package/dist/cli/facade/dev.js +177 -177
  48. package/dist/cli/facade/init.d.ts +18 -18
  49. package/dist/cli/facade/init.js +39 -39
  50. package/dist/cli/facade/mock.d.ts +18 -18
  51. package/dist/cli/facade/mock.js +12 -12
  52. package/dist/cli/facade/package.d.ts +19 -19
  53. package/dist/cli/facade/package.js +49 -49
  54. package/dist/cli/facade/preview.d.ts +14 -14
  55. package/dist/cli/facade/preview.js +20 -20
  56. package/dist/cli/facade/publish.d.ts +24 -24
  57. package/dist/cli/facade/publish.js +145 -145
  58. package/dist/cli/facade/registry-add.d.ts +14 -14
  59. package/dist/cli/facade/registry-add.js +18 -18
  60. package/dist/cli/facade/registry-ls.d.ts +10 -10
  61. package/dist/cli/facade/registry-ls.js +27 -27
  62. package/dist/cli/facade/registry-remove.d.ts +14 -14
  63. package/dist/cli/facade/registry-remove.js +18 -18
  64. package/dist/cli/facade/registry.d.ts +5 -5
  65. package/dist/cli/facade/registry.js +9 -9
  66. package/dist/cli/index.d.ts +1 -1
  67. package/dist/cli/index.js +91 -91
  68. package/dist/cli/logger.d.ts +8 -8
  69. package/dist/cli/logger.js +19 -19
  70. package/dist/cli/programmatic-api.d.ts +84 -84
  71. package/dist/cli/programmatic-api.js +66 -66
  72. package/dist/cli/validate-command.d.ts +2 -2
  73. package/dist/cli/validate-command.js +18 -18
  74. package/dist/components/oc-client/_package/package.json +1 -1
  75. package/dist/components/oc-client/_package/server.js +1 -1
  76. package/dist/components/oc-client/_package/src/oc-client.min.js +2 -2
  77. package/dist/components/oc-client/_package/src/oc-client.min.map +1 -1
  78. package/dist/components/oc-client/_package/template.js +11 -1
  79. package/dist/components/oc-client/package.json +1 -1
  80. package/dist/components/oc-client/src/oc-client.min.js +2 -2
  81. package/dist/components/oc-client/src/oc-client.min.map +1 -1
  82. package/dist/index.d.ts +3 -3
  83. package/dist/index.js +12 -12
  84. package/dist/oc-cli.d.ts +2 -2
  85. package/dist/oc-cli.js +3 -3
  86. package/dist/registry/app-start.d.ts +3 -3
  87. package/dist/registry/app-start.js +44 -44
  88. package/dist/registry/domain/authentication.d.ts +7 -7
  89. package/dist/registry/domain/authentication.js +53 -53
  90. package/dist/registry/domain/components-cache/components-list.d.ts +8 -8
  91. package/dist/registry/domain/components-cache/components-list.js +73 -73
  92. package/dist/registry/domain/components-cache/index.d.ts +7 -7
  93. package/dist/registry/domain/components-cache/index.js +81 -81
  94. package/dist/registry/domain/components-details.d.ts +6 -6
  95. package/dist/registry/domain/components-details.js +63 -63
  96. package/dist/registry/domain/events-handler.d.ts +48 -40
  97. package/dist/registry/domain/events-handler.js +37 -37
  98. package/dist/registry/domain/extract-package.d.ts +8 -8
  99. package/dist/registry/domain/extract-package.js +30 -30
  100. package/dist/registry/domain/get-package-json-from-temp-dir.d.ts +2 -2
  101. package/dist/registry/domain/get-package-json-from-temp-dir.js +11 -11
  102. package/dist/registry/domain/nested-renderer.d.ts +14 -14
  103. package/dist/registry/domain/nested-renderer.js +59 -59
  104. package/dist/registry/domain/options-sanitiser.d.ts +6 -6
  105. package/dist/registry/domain/options-sanitiser.js +113 -113
  106. package/dist/registry/domain/plugins-initialiser.d.ts +3 -3
  107. package/dist/registry/domain/plugins-initialiser.js +95 -95
  108. package/dist/registry/domain/register-templates.d.ts +5 -5
  109. package/dist/registry/domain/register-templates.js +37 -37
  110. package/dist/registry/domain/repository.d.ts +26 -26
  111. package/dist/registry/domain/repository.js +255 -255
  112. package/dist/registry/domain/require-wrapper.d.ts +2 -2
  113. package/dist/registry/domain/require-wrapper.js +33 -33
  114. package/dist/registry/domain/sanitiser.d.ts +2 -2
  115. package/dist/registry/domain/sanitiser.js +52 -52
  116. package/dist/registry/domain/storage-adapter.d.ts +10 -10
  117. package/dist/registry/domain/storage-adapter.js +55 -55
  118. package/dist/registry/domain/url-builder.d.ts +10 -10
  119. package/dist/registry/domain/url-builder.js +60 -60
  120. package/dist/registry/domain/validators/component-parameters.d.ts +11 -11
  121. package/dist/registry/domain/validators/component-parameters.js +79 -79
  122. package/dist/registry/domain/validators/index.d.ts +16 -16
  123. package/dist/registry/domain/validators/index.js +29 -29
  124. package/dist/registry/domain/validators/node-version.d.ts +15 -15
  125. package/dist/registry/domain/validators/node-version.js +40 -40
  126. package/dist/registry/domain/validators/oc-cli-version.d.ts +15 -15
  127. package/dist/registry/domain/validators/oc-cli-version.js +34 -34
  128. package/dist/registry/domain/validators/package-json-validator.d.ts +13 -13
  129. package/dist/registry/domain/validators/package-json-validator.js +23 -23
  130. package/dist/registry/domain/validators/plugins-requirements.d.ts +9 -9
  131. package/dist/registry/domain/validators/plugins-requirements.js +22 -22
  132. package/dist/registry/domain/validators/registry-configuration.d.ts +9 -9
  133. package/dist/registry/domain/validators/registry-configuration.js +117 -117
  134. package/dist/registry/domain/validators/uploaded-package.d.ts +14 -14
  135. package/dist/registry/domain/validators/uploaded-package.js +25 -25
  136. package/dist/registry/domain/version-handler.d.ts +2 -2
  137. package/dist/registry/domain/version-handler.js +22 -22
  138. package/dist/registry/index.d.ts +64 -48
  139. package/dist/registry/index.js +109 -109
  140. package/dist/registry/middleware/base-url-handler.d.ts +2 -2
  141. package/dist/registry/middleware/base-url-handler.js +12 -12
  142. package/dist/registry/middleware/cors.d.ts +2 -2
  143. package/dist/registry/middleware/cors.js +11 -11
  144. package/dist/registry/middleware/discovery-handler.d.ts +2 -2
  145. package/dist/registry/middleware/discovery-handler.js +15 -15
  146. package/dist/registry/middleware/file-uploads.d.ts +2 -2
  147. package/dist/registry/middleware/file-uploads.js +23 -23
  148. package/dist/registry/middleware/index.d.ts +3 -3
  149. package/dist/registry/middleware/index.js +48 -48
  150. package/dist/registry/middleware/request-handler.d.ts +2 -2
  151. package/dist/registry/middleware/request-handler.js +30 -30
  152. package/dist/registry/router.d.ts +4 -4
  153. package/dist/registry/router.js +56 -56
  154. package/dist/registry/routes/component-info.d.ts +4 -4
  155. package/dist/registry/routes/component-info.js +95 -94
  156. package/dist/registry/routes/component-preview.d.ts +4 -4
  157. package/dist/registry/routes/component-preview.js +72 -72
  158. package/dist/registry/routes/component.d.ts +4 -4
  159. package/dist/registry/routes/component.js +43 -43
  160. package/dist/registry/routes/components.d.ts +4 -4
  161. package/dist/registry/routes/components.js +78 -78
  162. package/dist/registry/routes/dependencies.d.ts +3 -3
  163. package/dist/registry/routes/dependencies.js +28 -28
  164. package/dist/registry/routes/helpers/apply-default-values.d.ts +2 -2
  165. package/dist/registry/routes/helpers/apply-default-values.js +13 -13
  166. package/dist/registry/routes/helpers/get-available-dependencies.d.ts +8 -8
  167. package/dist/registry/routes/helpers/get-available-dependencies.js +23 -23
  168. package/dist/registry/routes/helpers/get-component-fallback.d.ts +17 -17
  169. package/dist/registry/routes/helpers/get-component-fallback.js +95 -95
  170. package/dist/registry/routes/helpers/get-component-retrieving-info.d.ts +20 -20
  171. package/dist/registry/routes/helpers/get-component-retrieving-info.js +24 -24
  172. package/dist/registry/routes/helpers/get-component.d.ts +34 -34
  173. package/dist/registry/routes/helpers/get-component.js +445 -435
  174. package/dist/registry/routes/helpers/get-components-history.d.ts +8 -8
  175. package/dist/registry/routes/helpers/get-components-history.js +28 -28
  176. package/dist/registry/routes/helpers/is-url-discoverable.d.ts +3 -3
  177. package/dist/registry/routes/helpers/is-url-discoverable.js +21 -21
  178. package/dist/registry/routes/index.d.ts +3 -3
  179. package/dist/registry/routes/index.js +93 -93
  180. package/dist/registry/routes/plugins.d.ts +3 -3
  181. package/dist/registry/routes/plugins.js +17 -17
  182. package/dist/registry/routes/publish.d.ts +3 -3
  183. package/dist/registry/routes/publish.js +101 -101
  184. package/dist/registry/routes/static-redirector.d.ts +3 -3
  185. package/dist/registry/routes/static-redirector.js +86 -86
  186. package/dist/registry/views/index.d.ts +2 -2
  187. package/dist/registry/views/index.js +39 -39
  188. package/dist/registry/views/info.d.ts +16 -16
  189. package/dist/registry/views/info.js +39 -39
  190. package/dist/registry/views/partials/component-author.d.ts +8 -8
  191. package/dist/registry/views/partials/component-author.js +20 -20
  192. package/dist/registry/views/partials/component-parameters.d.ts +5 -5
  193. package/dist/registry/views/partials/component-parameters.js +24 -24
  194. package/dist/registry/views/partials/component-state.d.ts +5 -5
  195. package/dist/registry/views/partials/component-state.js +6 -6
  196. package/dist/registry/views/partials/component-versions.d.ts +5 -5
  197. package/dist/registry/views/partials/component-versions.js +9 -9
  198. package/dist/registry/views/partials/components-dependencies.d.ts +2 -2
  199. package/dist/registry/views/partials/components-dependencies.js +12 -12
  200. package/dist/registry/views/partials/components-history.d.ts +2 -2
  201. package/dist/registry/views/partials/components-history.js +10 -10
  202. package/dist/registry/views/partials/components-list.d.ts +2 -2
  203. package/dist/registry/views/partials/components-list.js +26 -26
  204. package/dist/registry/views/partials/components-plugins.d.ts +2 -2
  205. package/dist/registry/views/partials/components-plugins.js +8 -8
  206. package/dist/registry/views/partials/components-templates.d.ts +2 -2
  207. package/dist/registry/views/partials/components-templates.js +14 -14
  208. package/dist/registry/views/partials/layout.d.ts +8 -8
  209. package/dist/registry/views/partials/layout.js +11 -11
  210. package/dist/registry/views/partials/property.d.ts +2 -2
  211. package/dist/registry/views/partials/property.js +11 -11
  212. package/dist/registry/views/partials/selected-checkbox.d.ts +4 -4
  213. package/dist/registry/views/partials/selected-checkbox.js +7 -7
  214. package/dist/registry/views/preview.d.ts +8 -8
  215. package/dist/registry/views/preview.js +9 -9
  216. package/dist/registry/views/static/index.d.ts +2 -2
  217. package/dist/registry/views/static/index.js +3 -3
  218. package/dist/registry/views/static/info.d.ts +2 -2
  219. package/dist/registry/views/static/info.js +3 -3
  220. package/dist/registry/views/static/style.d.ts +2 -2
  221. package/dist/registry/views/static/style.js +3 -3
  222. package/dist/resources/index.d.ts +134 -134
  223. package/dist/resources/index.js +145 -145
  224. package/dist/resources/settings.d.ts +17 -17
  225. package/dist/resources/settings.js +18 -18
  226. package/dist/types.d.ts +231 -231
  227. package/dist/types.js +2 -2
  228. package/dist/utils/clean-require.d.ts +16 -16
  229. package/dist/utils/clean-require.js +18 -18
  230. package/dist/utils/date-stringify.d.ts +1 -1
  231. package/dist/utils/date-stringify.js +22 -22
  232. package/dist/utils/error-to-string.d.ts +1 -1
  233. package/dist/utils/error-to-string.js +15 -15
  234. package/dist/utils/is-template-legacy.d.ts +3 -3
  235. package/dist/utils/is-template-legacy.js +6 -6
  236. package/dist/utils/is-template-valid.d.ts +4 -4
  237. package/dist/utils/is-template-valid.js +12 -12
  238. package/dist/utils/module-exists.d.ts +1 -1
  239. package/dist/utils/module-exists.js +15 -15
  240. package/dist/utils/npm-utils.d.ts +20 -20
  241. package/dist/utils/npm-utils.js +74 -74
  242. package/dist/utils/put.d.ts +2 -2
  243. package/dist/utils/put.js +29 -29
  244. package/dist/utils/strip-version.d.ts +1 -1
  245. package/dist/utils/strip-version.js +11 -11
  246. package/logintervals.md +1 -1
  247. package/package.json +20 -20
@@ -1,435 +1,445 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const accept_language_parser_1 = __importDefault(require("accept-language-parser"));
30
- const nice_cache_1 = __importDefault(require("nice-cache"));
31
- const oc_client_1 = __importDefault(require("oc-client"));
32
- const domain_1 = __importDefault(require("domain"));
33
- const oc_empty_response_handler_1 = __importDefault(require("oc-empty-response-handler"));
34
- const vm_1 = __importDefault(require("vm"));
35
- const lodash_1 = __importDefault(require("lodash"));
36
- const apply_default_values_1 = __importDefault(require("./apply-default-values"));
37
- const events_handler_1 = __importDefault(require("../../domain/events-handler"));
38
- const get_component_retrieving_info_1 = __importDefault(require("./get-component-retrieving-info"));
39
- const getComponentFallback = __importStar(require("./get-component-fallback"));
40
- const is_template_legacy_1 = __importDefault(require("../../../utils/is-template-legacy"));
41
- const nested_renderer_1 = __importDefault(require("../../domain/nested-renderer"));
42
- const require_wrapper_1 = __importDefault(require("../../domain/require-wrapper"));
43
- const sanitiser = __importStar(require("../../domain/sanitiser"));
44
- const settings_1 = __importDefault(require("../../../resources/settings"));
45
- const resources_1 = __importDefault(require("../../../resources"));
46
- const urlBuilder = __importStar(require("../../domain/url-builder"));
47
- const validator = __importStar(require("../../domain/validators"));
48
- const universalify_1 = require("universalify");
49
- const noopConsole = Object.fromEntries(Object.keys(console).map(key => [key, lodash_1.default.noop]));
50
- function getComponent(conf, repository) {
51
- const client = (0, oc_client_1.default)({ templates: conf.templates });
52
- const cache = new nice_cache_1.default({
53
- verbose: !!conf.verbosity,
54
- refreshInterval: conf.refreshInterval
55
- });
56
- const getEnv = async (component) => {
57
- const cacheKey = `${component.name}/${component.version}/.env`;
58
- const cached = cache.get('file-contents', cacheKey);
59
- if (cached)
60
- return cached;
61
- const env = component.oc.files.env
62
- ? await repository.getEnv(component.name, component.version)
63
- : {};
64
- cache.set('file-contents', cacheKey, env);
65
- return env;
66
- };
67
- const renderer = function (options, cb) {
68
- const nestedRenderer = (0, nested_renderer_1.default)(renderer, options.conf);
69
- const retrievingInfo = (0, get_component_retrieving_info_1.default)(options);
70
- let responseHeaders = {};
71
- const getLanguage = () => {
72
- const paramOverride = !!options.parameters && options.parameters['__ocAcceptLanguage'];
73
- return paramOverride || options.headers['accept-language'];
74
- };
75
- const callback = (result) => {
76
- if (result.response.error) {
77
- retrievingInfo.extend(result.response);
78
- }
79
- retrievingInfo.extend({ status: result.status });
80
- Object.assign(result.response, {
81
- name: options.name,
82
- requestVersion: options.version || ''
83
- });
84
- events_handler_1.default.fire('component-retrieved', retrievingInfo.getData());
85
- return cb(result);
86
- };
87
- let componentCallbackDone = false;
88
- const conf = options.conf;
89
- const acceptLanguage = getLanguage();
90
- const requestedComponent = {
91
- name: options.name,
92
- version: options.version || '',
93
- parameters: options.parameters
94
- };
95
- (0, universalify_1.fromPromise)(repository.getComponent)(requestedComponent.name, requestedComponent.version, (err, component) => {
96
- // check route exist for component and version
97
- if (err) {
98
- if (conf.fallbackRegistryUrl) {
99
- return getComponentFallback.getComponent(conf.fallbackRegistryUrl, options.headers, requestedComponent, callback);
100
- }
101
- return callback({
102
- status: 404,
103
- response: {
104
- code: 'NOT_FOUND',
105
- error: err
106
- }
107
- });
108
- }
109
- // Skip rendering and return only the component info in case of 'accept: application/vnd.oc.info+json'
110
- if (options.headers.accept === settings_1.default.registry.acceptInfoHeader) {
111
- return callback({
112
- status: 200,
113
- response: {
114
- type: conf.local ? 'oc-component-local' : 'oc-component',
115
- version: component.version,
116
- requestVersion: requestedComponent.version,
117
- name: requestedComponent.name
118
- }
119
- });
120
- }
121
- // check component requirements are satisfied by registry
122
- const pluginsCompatibility = validator.validatePluginsRequirements(component.oc.plugins, conf.plugins);
123
- if (!pluginsCompatibility.isValid) {
124
- return callback({
125
- status: 501,
126
- response: {
127
- code: 'PLUGIN_MISSING_FROM_REGISTRY',
128
- error: resources_1.default.errors.registry.PLUGIN_NOT_IMPLEMENTED(pluginsCompatibility.missing.join(', ')),
129
- missingPlugins: pluginsCompatibility.missing
130
- }
131
- });
132
- }
133
- // sanitise and check params
134
- const appliedParams = (0, apply_default_values_1.default)(requestedComponent.parameters, component.oc.parameters);
135
- const params = sanitiser.sanitiseComponentParameters(appliedParams, component.oc.parameters);
136
- const validationResult = validator.validateComponentParameters(
137
- // @ts-ignore
138
- params, component.oc.parameters);
139
- if (!validationResult.isValid) {
140
- return callback({
141
- status: 400,
142
- response: {
143
- code: 'NOT_VALID_REQUEST',
144
- error: validationResult.errors.message
145
- }
146
- });
147
- }
148
- // Support legacy templates
149
- let templateType = component.oc.files.template.type;
150
- const isLegacyTemplate = (0, is_template_legacy_1.default)(templateType);
151
- if (isLegacyTemplate) {
152
- templateType = `oc-template-${templateType}`;
153
- }
154
- if (!repository.getTemplate(templateType)) {
155
- return callback({
156
- status: 400,
157
- response: {
158
- code: 'TEMPLATE_NOT_SUPPORTED',
159
- error: resources_1.default.errors.registry.TEMPLATE_NOT_SUPPORTED(templateType)
160
- }
161
- });
162
- }
163
- const filterCustomHeaders = (headers, requestedVersion, actualVersion) => {
164
- const needFiltering = !lodash_1.default.isEmpty(headers) &&
165
- !lodash_1.default.isEmpty(conf.customHeadersToSkipOnWeakVersion) &&
166
- requestedVersion !== actualVersion;
167
- return needFiltering
168
- ? lodash_1.default.omit(headers, conf.customHeadersToSkipOnWeakVersion)
169
- : headers;
170
- };
171
- const returnComponent = (err, data) => {
172
- if (componentCallbackDone) {
173
- return;
174
- }
175
- componentCallbackDone = true;
176
- const componentHref = urlBuilder.component({
177
- name: component.name,
178
- version: requestedComponent.version,
179
- // @ts-ignore
180
- parameters: params
181
- }, conf.baseUrl);
182
- const isUnrendered = options.headers.accept === settings_1.default.registry.acceptUnrenderedHeader;
183
- const isValidClientRequest = options.headers['user-agent'] &&
184
- !!options.headers['user-agent'].match('oc-client-');
185
- const parseTemplatesHeader = (t) => t.split(';').map(t => t.split(',')[0]);
186
- const supportedTemplates = options.headers['templates']
187
- ? parseTemplatesHeader(options.headers['templates'])
188
- : [];
189
- const isTemplateSupportedByClient = Boolean(isValidClientRequest &&
190
- options.headers['templates'] &&
191
- (lodash_1.default.includes(supportedTemplates, component.oc.files.template.type) ||
192
- lodash_1.default.includes(supportedTemplates, templateType)));
193
- let renderMode = 'rendered';
194
- if (isUnrendered) {
195
- renderMode = 'unrendered';
196
- if (isValidClientRequest &&
197
- !isTemplateSupportedByClient &&
198
- !isLegacyTemplate) {
199
- renderMode = 'rendered';
200
- }
201
- }
202
- retrievingInfo.extend({
203
- href: componentHref,
204
- version: component.version,
205
- renderMode
206
- });
207
- if (!!err || !data) {
208
- err =
209
- err ||
210
- new Error(resources_1.default.errors.registry.DATA_OBJECT_IS_UNDEFINED);
211
- return callback({
212
- status: Number(err.status) || 500,
213
- response: {
214
- code: 'GENERIC_ERROR',
215
- error: resources_1.default.errors.registry.COMPONENT_EXECUTION_ERROR(err.message || ''),
216
- details: {
217
- message: err.message,
218
- stack: err.stack,
219
- originalError: err
220
- }
221
- }
222
- });
223
- }
224
- const response = {
225
- type: conf.local ? 'oc-component-local' : 'oc-component',
226
- version: component.version,
227
- requestVersion: requestedComponent.version,
228
- name: requestedComponent.name,
229
- renderMode
230
- };
231
- if (!options.omitHref) {
232
- response.href = componentHref;
233
- }
234
- responseHeaders = filterCustomHeaders(responseHeaders, requestedComponent.version, component.version);
235
- if (renderMode === 'unrendered') {
236
- callback({
237
- status: 200,
238
- headers: responseHeaders,
239
- response: Object.assign(response, {
240
- data: data,
241
- template: {
242
- src: repository.getStaticFilePath(component.name, component.version, 'template.js'),
243
- type: component.oc.files.template.type,
244
- key: component.oc.files.template.hashKey
245
- }
246
- })
247
- });
248
- }
249
- else {
250
- const cacheKey = `${component.name}/${component.version}/template.js`;
251
- const cached = cache.get('file-contents', cacheKey);
252
- const key = component.oc.files.template.hashKey;
253
- const renderOptions = {
254
- href: componentHref,
255
- key,
256
- version: component.version,
257
- name: component.name,
258
- templateType: component.oc.files.template.type,
259
- container: component.oc.container,
260
- renderInfo: component.oc.renderInfo
261
- };
262
- const returnResult = (template) => {
263
- client.renderTemplate(template, data, renderOptions, (err, html) => {
264
- if (err) {
265
- return callback({
266
- status: 500,
267
- response: {
268
- code: 'INTERNAL_SERVER_ERROR',
269
- error: err
270
- }
271
- });
272
- }
273
- callback({
274
- status: 200,
275
- headers: responseHeaders,
276
- response: Object.assign(response, { html })
277
- });
278
- });
279
- };
280
- if (!!cached && !conf.hotReloading) {
281
- returnResult(cached);
282
- }
283
- else {
284
- (0, universalify_1.fromPromise)(repository.getCompiledView)(component.name, component.version, (_err, templateText) => {
285
- let ocTemplate;
286
- try {
287
- ocTemplate = repository.getTemplate(templateType);
288
- }
289
- catch (err) {
290
- return callback({
291
- status: 400,
292
- response: {
293
- code: 'TEMPLATE_NOT_SUPPORTED',
294
- error: resources_1.default.errors.registry.TEMPLATE_NOT_SUPPORTED(templateType)
295
- }
296
- });
297
- }
298
- const template = ocTemplate.getCompiledTemplate(templateText, key);
299
- cache.set('file-contents', cacheKey, template);
300
- returnResult(template);
301
- });
302
- }
303
- }
304
- };
305
- if (!component.oc.files.dataProvider) {
306
- returnComponent(null, {});
307
- }
308
- else {
309
- (0, universalify_1.fromPromise)(getEnv)(component, (err, env) => {
310
- if (err) {
311
- componentCallbackDone = true;
312
- return callback({
313
- status: 502,
314
- response: {
315
- code: 'ENV_RESOLVING_ERROR',
316
- error: resources_1.default.errors.registry.RESOLVING_ERROR
317
- }
318
- });
319
- }
320
- const cacheKey = `${component.name}/${component.version}/server.js`;
321
- const cached = cache.get('file-contents', cacheKey);
322
- const domain = domain_1.default.create();
323
- const setEmptyResponse = oc_empty_response_handler_1.default.contextDecorator(returnComponent);
324
- const contextObj = {
325
- acceptLanguage: accept_language_parser_1.default.parse(acceptLanguage),
326
- baseUrl: conf.baseUrl,
327
- env: { ...conf.env, ...env },
328
- params,
329
- plugins: conf.plugins,
330
- renderComponent: (0, universalify_1.fromPromise)(nestedRenderer.renderComponent),
331
- renderComponents: (0, universalify_1.fromPromise)(nestedRenderer.renderComponents),
332
- requestHeaders: options.headers,
333
- requestIp: options.ip,
334
- setEmptyResponse,
335
- staticPath: repository
336
- .getStaticFilePath(component.name, component.version, '')
337
- .replace('https:', ''),
338
- setHeader: (header, value) => {
339
- if (!(typeof header === 'string' && typeof value === 'string')) {
340
- throw resources_1.default.errors.registry
341
- .COMPONENT_SET_HEADER_PARAMETERS_NOT_VALID;
342
- }
343
- if (header && value) {
344
- responseHeaders = responseHeaders || {};
345
- responseHeaders[header.toLowerCase()] = value;
346
- }
347
- },
348
- templates: repository.getTemplatesInfo()
349
- };
350
- const setCallbackTimeout = () => {
351
- const executionTimeout = conf.executionTimeout;
352
- if (executionTimeout) {
353
- setTimeout(() => {
354
- const message = `timeout (${executionTimeout * 1000}ms)`;
355
- returnComponent({ message }, undefined);
356
- domain.exit();
357
- }, executionTimeout * 1000);
358
- }
359
- };
360
- if (!!cached && !conf.hotReloading) {
361
- domain.on('error', returnComponent);
362
- try {
363
- domain.run(() => {
364
- cached(contextObj, returnComponent);
365
- setCallbackTimeout();
366
- });
367
- }
368
- catch (e) {
369
- return returnComponent(e, undefined);
370
- }
371
- }
372
- else {
373
- (0, universalify_1.fromPromise)(repository.getDataProvider)(component.name, component.version, (err, dataProvider) => {
374
- if (err) {
375
- componentCallbackDone = true;
376
- return callback({
377
- status: 502,
378
- response: {
379
- code: 'DATA_RESOLVING_ERROR',
380
- error: resources_1.default.errors.registry.RESOLVING_ERROR
381
- }
382
- });
383
- }
384
- const context = {
385
- require: (0, require_wrapper_1.default)(conf.dependencies),
386
- module: {
387
- exports: {}
388
- },
389
- exports: {},
390
- console: conf.local ? console : noopConsole,
391
- setTimeout,
392
- Buffer
393
- };
394
- const handleError = (err) => {
395
- if (err.code === 'DEPENDENCY_MISSING_FROM_REGISTRY') {
396
- componentCallbackDone = true;
397
- return callback({
398
- status: 501,
399
- response: {
400
- code: err.code,
401
- error: resources_1.default.errors.registry.DEPENDENCY_NOT_FOUND(err.missing.join(', ')),
402
- missingDependencies: err.missing
403
- }
404
- });
405
- }
406
- returnComponent(err, undefined);
407
- };
408
- const options = conf.local
409
- ? {
410
- displayErrors: true,
411
- filename: dataProvider.filePath
412
- }
413
- : {};
414
- try {
415
- vm_1.default.runInNewContext(dataProvider.content, context, options);
416
- const processData = context.module.exports['data'] || context.exports['data'];
417
- cache.set('file-contents', cacheKey, processData);
418
- domain.on('error', handleError);
419
- domain.run(() => {
420
- processData(contextObj, returnComponent);
421
- setCallbackTimeout();
422
- });
423
- }
424
- catch (err) {
425
- handleError(err);
426
- }
427
- });
428
- }
429
- });
430
- }
431
- });
432
- };
433
- return renderer;
434
- }
435
- exports.default = getComponent;
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const accept_language_parser_1 = __importDefault(require("accept-language-parser"));
30
+ const nice_cache_1 = __importDefault(require("nice-cache"));
31
+ const oc_client_1 = __importDefault(require("oc-client"));
32
+ const domain_1 = __importDefault(require("domain"));
33
+ const oc_empty_response_handler_1 = __importDefault(require("oc-empty-response-handler"));
34
+ const vm_1 = __importDefault(require("vm"));
35
+ const lodash_1 = __importDefault(require("lodash"));
36
+ const apply_default_values_1 = __importDefault(require("./apply-default-values"));
37
+ const events_handler_1 = __importDefault(require("../../domain/events-handler"));
38
+ const get_component_retrieving_info_1 = __importDefault(require("./get-component-retrieving-info"));
39
+ const getComponentFallback = __importStar(require("./get-component-fallback"));
40
+ const is_template_legacy_1 = __importDefault(require("../../../utils/is-template-legacy"));
41
+ const nested_renderer_1 = __importDefault(require("../../domain/nested-renderer"));
42
+ const require_wrapper_1 = __importDefault(require("../../domain/require-wrapper"));
43
+ const sanitiser = __importStar(require("../../domain/sanitiser"));
44
+ const settings_1 = __importDefault(require("../../../resources/settings"));
45
+ const resources_1 = __importDefault(require("../../../resources"));
46
+ const urlBuilder = __importStar(require("../../domain/url-builder"));
47
+ const validator = __importStar(require("../../domain/validators"));
48
+ const universalify_1 = require("universalify");
49
+ const noopConsole = Object.fromEntries(Object.keys(console).map(key => [key, lodash_1.default.noop]));
50
+ function getComponent(conf, repository) {
51
+ const client = (0, oc_client_1.default)({ templates: conf.templates });
52
+ const cache = new nice_cache_1.default({
53
+ verbose: !!conf.verbosity,
54
+ refreshInterval: conf.refreshInterval
55
+ });
56
+ const getEnv = async (component) => {
57
+ const cacheKey = `${component.name}/${component.version}/.env`;
58
+ const cached = cache.get('file-contents', cacheKey);
59
+ if (cached)
60
+ return cached;
61
+ const env = component.oc.files.env
62
+ ? await repository.getEnv(component.name, component.version)
63
+ : {};
64
+ cache.set('file-contents', cacheKey, env);
65
+ return env;
66
+ };
67
+ const renderer = function (options, cb) {
68
+ const nestedRenderer = (0, nested_renderer_1.default)(renderer, options.conf);
69
+ const retrievingInfo = (0, get_component_retrieving_info_1.default)(options);
70
+ let responseHeaders = {};
71
+ const getLanguage = () => {
72
+ const paramOverride = !!options.parameters && options.parameters['__ocAcceptLanguage'];
73
+ return paramOverride || options.headers['accept-language'];
74
+ };
75
+ const callback = (result) => {
76
+ if (result.response.error) {
77
+ retrievingInfo.extend(result.response);
78
+ }
79
+ retrievingInfo.extend({ status: result.status });
80
+ Object.assign(result.response, {
81
+ name: options.name,
82
+ requestVersion: options.version || ''
83
+ });
84
+ events_handler_1.default.fire('component-retrieved', retrievingInfo.getData());
85
+ return cb(result);
86
+ };
87
+ let componentCallbackDone = false;
88
+ const conf = options.conf;
89
+ const acceptLanguage = getLanguage();
90
+ const requestedComponent = {
91
+ name: options.name,
92
+ version: options.version || '',
93
+ parameters: options.parameters
94
+ };
95
+ (0, universalify_1.fromPromise)(repository.getComponent)(requestedComponent.name, requestedComponent.version, (err, component) => {
96
+ // check route exist for component and version
97
+ if (err) {
98
+ if (conf.fallbackRegistryUrl) {
99
+ return getComponentFallback.getComponent(conf.fallbackRegistryUrl, options.headers, requestedComponent, callback);
100
+ }
101
+ return callback({
102
+ status: 404,
103
+ response: {
104
+ code: 'NOT_FOUND',
105
+ error: err
106
+ }
107
+ });
108
+ }
109
+ // Skip rendering and return only the component info in case of 'accept: application/vnd.oc.info+json'
110
+ if (options.headers.accept === settings_1.default.registry.acceptInfoHeader) {
111
+ return callback({
112
+ status: 200,
113
+ response: {
114
+ type: conf.local ? 'oc-component-local' : 'oc-component',
115
+ version: component.version,
116
+ requestVersion: requestedComponent.version,
117
+ name: requestedComponent.name
118
+ }
119
+ });
120
+ }
121
+ // check component requirements are satisfied by registry
122
+ const pluginsCompatibility = validator.validatePluginsRequirements(component.oc.plugins, conf.plugins);
123
+ if (!pluginsCompatibility.isValid) {
124
+ return callback({
125
+ status: 501,
126
+ response: {
127
+ code: 'PLUGIN_MISSING_FROM_REGISTRY',
128
+ error: resources_1.default.errors.registry.PLUGIN_NOT_IMPLEMENTED(pluginsCompatibility.missing.join(', ')),
129
+ missingPlugins: pluginsCompatibility.missing
130
+ }
131
+ });
132
+ }
133
+ // sanitise and check params
134
+ const appliedParams = (0, apply_default_values_1.default)(requestedComponent.parameters, component.oc.parameters);
135
+ const params = sanitiser.sanitiseComponentParameters(appliedParams, component.oc.parameters);
136
+ const validationResult = validator.validateComponentParameters(
137
+ // @ts-ignore
138
+ params, component.oc.parameters);
139
+ if (!validationResult.isValid) {
140
+ return callback({
141
+ status: 400,
142
+ response: {
143
+ code: 'NOT_VALID_REQUEST',
144
+ error: validationResult.errors.message
145
+ }
146
+ });
147
+ }
148
+ // Support legacy templates
149
+ let templateType = component.oc.files.template.type;
150
+ const isLegacyTemplate = (0, is_template_legacy_1.default)(templateType);
151
+ if (isLegacyTemplate) {
152
+ templateType = `oc-template-${templateType}`;
153
+ }
154
+ if (!repository.getTemplate(templateType)) {
155
+ return callback({
156
+ status: 400,
157
+ response: {
158
+ code: 'TEMPLATE_NOT_SUPPORTED',
159
+ error: resources_1.default.errors.registry.TEMPLATE_NOT_SUPPORTED(templateType)
160
+ }
161
+ });
162
+ }
163
+ const filterCustomHeaders = (headers, requestedVersion, actualVersion) => {
164
+ const needFiltering = !lodash_1.default.isEmpty(headers) &&
165
+ !lodash_1.default.isEmpty(conf.customHeadersToSkipOnWeakVersion) &&
166
+ requestedVersion !== actualVersion;
167
+ return needFiltering
168
+ ? lodash_1.default.omit(headers, conf.customHeadersToSkipOnWeakVersion)
169
+ : headers;
170
+ };
171
+ const returnComponent = (err, data) => {
172
+ if (componentCallbackDone) {
173
+ return;
174
+ }
175
+ componentCallbackDone = true;
176
+ const componentHref = urlBuilder.component({
177
+ name: component.name,
178
+ version: requestedComponent.version,
179
+ // @ts-ignore
180
+ parameters: params
181
+ }, conf.baseUrl);
182
+ const isUnrendered = options.headers.accept === settings_1.default.registry.acceptUnrenderedHeader;
183
+ const isValidClientRequest = options.headers['user-agent'] &&
184
+ !!options.headers['user-agent'].match('oc-client-');
185
+ const parseTemplatesHeader = (t) => t.split(';').map(t => t.split(',')[0]);
186
+ const supportedTemplates = options.headers['templates']
187
+ ? parseTemplatesHeader(options.headers['templates'])
188
+ : [];
189
+ const isTemplateSupportedByClient = Boolean(isValidClientRequest &&
190
+ options.headers['templates'] &&
191
+ (lodash_1.default.includes(supportedTemplates, component.oc.files.template.type) ||
192
+ lodash_1.default.includes(supportedTemplates, templateType)));
193
+ let renderMode = 'rendered';
194
+ if (isUnrendered) {
195
+ renderMode = 'unrendered';
196
+ if (isValidClientRequest &&
197
+ !isTemplateSupportedByClient &&
198
+ !isLegacyTemplate) {
199
+ renderMode = 'rendered';
200
+ }
201
+ }
202
+ retrievingInfo.extend({
203
+ href: componentHref,
204
+ version: component.version,
205
+ renderMode
206
+ });
207
+ if (!!err || !data) {
208
+ err =
209
+ err ||
210
+ new Error(resources_1.default.errors.registry.DATA_OBJECT_IS_UNDEFINED);
211
+ const status = Number(err.status) || 500;
212
+ events_handler_1.default.fire('data-provider-error', {
213
+ status,
214
+ name: component.name,
215
+ requestVersion: requestedComponent.version,
216
+ parameters: params,
217
+ version: component.version,
218
+ error: err
219
+ });
220
+ return callback({
221
+ status,
222
+ response: {
223
+ code: 'GENERIC_ERROR',
224
+ error: resources_1.default.errors.registry.COMPONENT_EXECUTION_ERROR(err.message || ''),
225
+ details: {
226
+ message: err.message,
227
+ stack: err.stack,
228
+ originalError: err
229
+ }
230
+ }
231
+ });
232
+ }
233
+ const response = {
234
+ type: conf.local ? 'oc-component-local' : 'oc-component',
235
+ version: component.version,
236
+ requestVersion: requestedComponent.version,
237
+ name: requestedComponent.name,
238
+ renderMode
239
+ };
240
+ if (!options.omitHref) {
241
+ response.href = componentHref;
242
+ }
243
+ responseHeaders = filterCustomHeaders(responseHeaders, requestedComponent.version, component.version);
244
+ if (renderMode === 'unrendered') {
245
+ callback({
246
+ status: 200,
247
+ headers: responseHeaders,
248
+ response: Object.assign(response, {
249
+ data: data,
250
+ template: {
251
+ src: repository.getStaticFilePath(component.name, component.version, 'template.js'),
252
+ type: component.oc.files.template.type,
253
+ key: component.oc.files.template.hashKey
254
+ }
255
+ })
256
+ });
257
+ }
258
+ else {
259
+ const cacheKey = `${component.name}/${component.version}/template.js`;
260
+ const cached = cache.get('file-contents', cacheKey);
261
+ const key = component.oc.files.template.hashKey;
262
+ const renderOptions = {
263
+ href: componentHref,
264
+ key,
265
+ version: component.version,
266
+ name: component.name,
267
+ templateType: component.oc.files.template.type,
268
+ container: component.oc.container,
269
+ renderInfo: component.oc.renderInfo
270
+ };
271
+ const returnResult = (template) => {
272
+ client.renderTemplate(template, data, renderOptions, (err, html) => {
273
+ if (err) {
274
+ return callback({
275
+ status: 500,
276
+ response: {
277
+ code: 'INTERNAL_SERVER_ERROR',
278
+ error: err
279
+ }
280
+ });
281
+ }
282
+ callback({
283
+ status: 200,
284
+ headers: responseHeaders,
285
+ response: Object.assign(response, { html })
286
+ });
287
+ });
288
+ };
289
+ if (!!cached && !conf.hotReloading) {
290
+ returnResult(cached);
291
+ }
292
+ else {
293
+ (0, universalify_1.fromPromise)(repository.getCompiledView)(component.name, component.version, (_err, templateText) => {
294
+ let ocTemplate;
295
+ try {
296
+ ocTemplate = repository.getTemplate(templateType);
297
+ }
298
+ catch (err) {
299
+ return callback({
300
+ status: 400,
301
+ response: {
302
+ code: 'TEMPLATE_NOT_SUPPORTED',
303
+ error: resources_1.default.errors.registry.TEMPLATE_NOT_SUPPORTED(templateType)
304
+ }
305
+ });
306
+ }
307
+ const template = ocTemplate.getCompiledTemplate(templateText, key);
308
+ cache.set('file-contents', cacheKey, template);
309
+ returnResult(template);
310
+ });
311
+ }
312
+ }
313
+ };
314
+ if (!component.oc.files.dataProvider) {
315
+ returnComponent(null, {});
316
+ }
317
+ else {
318
+ (0, universalify_1.fromPromise)(getEnv)(component, (err, env) => {
319
+ if (err) {
320
+ componentCallbackDone = true;
321
+ return callback({
322
+ status: 502,
323
+ response: {
324
+ code: 'ENV_RESOLVING_ERROR',
325
+ error: resources_1.default.errors.registry.RESOLVING_ERROR
326
+ }
327
+ });
328
+ }
329
+ const cacheKey = `${component.name}/${component.version}/server.js`;
330
+ const cached = cache.get('file-contents', cacheKey);
331
+ const domain = domain_1.default.create();
332
+ const setEmptyResponse = oc_empty_response_handler_1.default.contextDecorator(returnComponent);
333
+ const contextObj = {
334
+ acceptLanguage: accept_language_parser_1.default.parse(acceptLanguage),
335
+ baseUrl: conf.baseUrl,
336
+ env: { ...conf.env, ...env },
337
+ params,
338
+ plugins: conf.plugins,
339
+ renderComponent: (0, universalify_1.fromPromise)(nestedRenderer.renderComponent),
340
+ renderComponents: (0, universalify_1.fromPromise)(nestedRenderer.renderComponents),
341
+ requestHeaders: options.headers,
342
+ requestIp: options.ip,
343
+ setEmptyResponse,
344
+ staticPath: repository
345
+ .getStaticFilePath(component.name, component.version, '')
346
+ .replace('https:', ''),
347
+ setHeader: (header, value) => {
348
+ if (!(typeof header === 'string' && typeof value === 'string')) {
349
+ throw resources_1.default.errors.registry
350
+ .COMPONENT_SET_HEADER_PARAMETERS_NOT_VALID;
351
+ }
352
+ if (header && value) {
353
+ responseHeaders = responseHeaders || {};
354
+ responseHeaders[header.toLowerCase()] = value;
355
+ }
356
+ },
357
+ templates: repository.getTemplatesInfo()
358
+ };
359
+ const setCallbackTimeout = () => {
360
+ const executionTimeout = conf.executionTimeout;
361
+ if (executionTimeout) {
362
+ setTimeout(() => {
363
+ const message = `timeout (${executionTimeout * 1000}ms)`;
364
+ returnComponent({ message }, undefined);
365
+ domain.exit();
366
+ }, executionTimeout * 1000);
367
+ }
368
+ };
369
+ if (!!cached && !conf.hotReloading) {
370
+ domain.on('error', returnComponent);
371
+ try {
372
+ domain.run(() => {
373
+ cached(contextObj, returnComponent);
374
+ setCallbackTimeout();
375
+ });
376
+ }
377
+ catch (e) {
378
+ return returnComponent(e, undefined);
379
+ }
380
+ }
381
+ else {
382
+ (0, universalify_1.fromPromise)(repository.getDataProvider)(component.name, component.version, (err, dataProvider) => {
383
+ if (err) {
384
+ componentCallbackDone = true;
385
+ return callback({
386
+ status: 502,
387
+ response: {
388
+ code: 'DATA_RESOLVING_ERROR',
389
+ error: resources_1.default.errors.registry.RESOLVING_ERROR
390
+ }
391
+ });
392
+ }
393
+ const context = {
394
+ require: (0, require_wrapper_1.default)(conf.dependencies),
395
+ module: {
396
+ exports: {}
397
+ },
398
+ exports: {},
399
+ console: conf.local ? console : noopConsole,
400
+ setTimeout,
401
+ Buffer,
402
+ fetch: globalThis?.fetch
403
+ };
404
+ const handleError = (err) => {
405
+ if (err.code === 'DEPENDENCY_MISSING_FROM_REGISTRY') {
406
+ componentCallbackDone = true;
407
+ return callback({
408
+ status: 501,
409
+ response: {
410
+ code: err.code,
411
+ error: resources_1.default.errors.registry.DEPENDENCY_NOT_FOUND(err.missing.join(', ')),
412
+ missingDependencies: err.missing
413
+ }
414
+ });
415
+ }
416
+ returnComponent(err, undefined);
417
+ };
418
+ const options = conf.local
419
+ ? {
420
+ displayErrors: true,
421
+ filename: dataProvider.filePath
422
+ }
423
+ : {};
424
+ try {
425
+ vm_1.default.runInNewContext(dataProvider.content, context, options);
426
+ const processData = context.module.exports['data'] || context.exports['data'];
427
+ cache.set('file-contents', cacheKey, processData);
428
+ domain.on('error', handleError);
429
+ domain.run(() => {
430
+ processData(contextObj, returnComponent);
431
+ setCallbackTimeout();
432
+ });
433
+ }
434
+ catch (err) {
435
+ handleError(err);
436
+ }
437
+ });
438
+ }
439
+ });
440
+ }
441
+ });
442
+ };
443
+ return renderer;
444
+ }
445
+ exports.default = getComponent;