oc 0.49.8 → 0.49.9

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