@squiz/render-runtime-lib 1.73.0 → 1.75.0

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 (123) hide show
  1. package/lib/PreviewComponentService.js +43 -0
  2. package/lib/PreviewComponentService.js.map +1 -0
  3. package/lib/PreviewComponentService.spec.js +64 -0
  4. package/lib/PreviewComponentService.spec.js.map +1 -0
  5. package/lib/RenderInputService.js +286 -0
  6. package/lib/RenderInputService.js.map +1 -0
  7. package/lib/RenderInputService.spec.js +645 -0
  8. package/lib/RenderInputService.spec.js.map +1 -0
  9. package/lib/component-runner/ComponentRootUrlResolver.js +3 -0
  10. package/lib/component-runner/ComponentRootUrlResolver.js.map +1 -0
  11. package/lib/component-runner/ComponentRunnerServiceWithWorkers.js +91 -0
  12. package/lib/component-runner/ComponentRunnerServiceWithWorkers.js.map +1 -0
  13. package/lib/component-runner/ComponentRunnerServiceWithWorkers.spec.js +104 -0
  14. package/lib/component-runner/ComponentRunnerServiceWithWorkers.spec.js.map +1 -0
  15. package/lib/component-runner/ComponentRuntimeContext.d.ts +1 -8
  16. package/lib/component-runner/ComponentRuntimeContext.js +3 -0
  17. package/lib/component-runner/ComponentRuntimeContext.js.map +1 -0
  18. package/lib/component-runner/ContentRuntimeService.d.ts +1 -1
  19. package/lib/component-runner/ContentRuntimeService.js +31 -0
  20. package/lib/component-runner/ContentRuntimeService.js.map +1 -0
  21. package/lib/component-runner/ExecuteComponentTask.d.ts +1 -9
  22. package/lib/component-runner/ExecuteComponentTask.js +8 -0
  23. package/lib/component-runner/ExecuteComponentTask.js.map +1 -0
  24. package/lib/component-runner/FunctionReturnTypes.js +3 -0
  25. package/lib/component-runner/FunctionReturnTypes.js.map +1 -0
  26. package/lib/component-runner/index.js +23 -0
  27. package/lib/component-runner/index.js.map +1 -0
  28. package/lib/component-runner/worker/component-bootstrapper.js +63 -0
  29. package/lib/component-runner/worker/component-bootstrapper.js.map +1 -0
  30. package/lib/health-check-service.js +3 -0
  31. package/lib/health-check-service.js.map +1 -0
  32. package/lib/index.d.ts +0 -16
  33. package/lib/index.js +23 -4590
  34. package/lib/index.js.map +1 -7
  35. package/lib/ioc.js +37 -0
  36. package/lib/ioc.js.map +1 -0
  37. package/lib/test/helpers/fixtures.js +152 -0
  38. package/lib/test/helpers/fixtures.js.map +1 -0
  39. package/lib/test/helpers/stack.js +121 -0
  40. package/lib/test/helpers/stack.js.map +1 -0
  41. package/lib/test/index.js +21 -0
  42. package/lib/test/index.js.map +1 -0
  43. package/lib/test/mock-services/MockedComponentSetService.js +413 -0
  44. package/lib/test/mock-services/MockedComponentSetService.js.map +1 -0
  45. package/lib/test/mock-services/MockedContentItemService.js +37 -0
  46. package/lib/test/mock-services/MockedContentItemService.js.map +1 -0
  47. package/lib/test-helpers.d.ts +16 -0
  48. package/lib/test-helpers.js +44 -0
  49. package/lib/test-helpers.js.map +1 -0
  50. package/lib/utils/getContentItemIdFromInput.js +13 -0
  51. package/lib/utils/getContentItemIdFromInput.js.map +1 -0
  52. package/lib/utils/getContentItemIdFromInput.spec.js +18 -0
  53. package/lib/utils/getContentItemIdFromInput.spec.js.map +1 -0
  54. package/lib/utils/resolvePreviewOutput.js +71 -0
  55. package/lib/utils/resolvePreviewOutput.js.map +1 -0
  56. package/lib/utils/resolvePreviewOutput.spec.js +168 -0
  57. package/lib/utils/resolvePreviewOutput.spec.js.map +1 -0
  58. package/lib/utils/setHeadersOnExpressResponse.js +15 -0
  59. package/lib/utils/setHeadersOnExpressResponse.js.map +1 -0
  60. package/lib/utils/setHeadersOnExpressResponse.sepc.js +21 -0
  61. package/lib/utils/setHeadersOnExpressResponse.sepc.js.map +1 -0
  62. package/lib/webserver/app.js +78 -0
  63. package/lib/webserver/app.js.map +1 -0
  64. package/lib/webserver/controllers/CoreController.js +116 -0
  65. package/lib/webserver/controllers/CoreController.js.map +1 -0
  66. package/lib/webserver/controllers/CoreController.spec.js +132 -0
  67. package/lib/webserver/controllers/CoreController.spec.js.map +1 -0
  68. package/lib/webserver/controllers/DefinitionController.js +162 -0
  69. package/lib/webserver/controllers/DefinitionController.js.map +1 -0
  70. package/lib/webserver/controllers/DefinitionController.spec.js +16 -0
  71. package/lib/webserver/controllers/DefinitionController.spec.js.map +1 -0
  72. package/lib/webserver/controllers/DevelopmentController.js +149 -0
  73. package/lib/webserver/controllers/DevelopmentController.js.map +1 -0
  74. package/lib/webserver/controllers/DevelopmentController.spec.js +29 -0
  75. package/lib/webserver/controllers/DevelopmentController.spec.js.map +1 -0
  76. package/lib/webserver/controllers/PreviewController.spec.js +124 -0
  77. package/lib/webserver/controllers/PreviewController.spec.js.map +1 -0
  78. package/lib/webserver/controllers/RenderController.d.ts +3 -2
  79. package/lib/webserver/controllers/RenderController.js +221 -0
  80. package/lib/webserver/controllers/RenderController.js.map +1 -0
  81. package/lib/webserver/controllers/RenderController.spec.js +441 -0
  82. package/lib/webserver/controllers/RenderController.spec.js.map +1 -0
  83. package/lib/webserver/controllers/StaticController.js +149 -0
  84. package/lib/webserver/controllers/StaticController.js.map +1 -0
  85. package/lib/webserver/controllers/StaticController.spec.js +28 -0
  86. package/lib/webserver/controllers/StaticController.spec.js.map +1 -0
  87. package/lib/webserver/controllers/test/definition-route-tests.js +627 -0
  88. package/lib/webserver/controllers/test/definition-route-tests.js.map +1 -0
  89. package/lib/webserver/controllers/test/development-route-tests.js +110 -0
  90. package/lib/webserver/controllers/test/development-route-tests.js.map +1 -0
  91. package/lib/webserver/controllers/test/preview-route-tests.js +122 -0
  92. package/lib/webserver/controllers/test/preview-route-tests.js.map +1 -0
  93. package/lib/webserver/controllers/test/render-route-sandbox-tests.js +194 -0
  94. package/lib/webserver/controllers/test/render-route-sandbox-tests.js.map +1 -0
  95. package/lib/webserver/controllers/test/render-route-tests.js +422 -0
  96. package/lib/webserver/controllers/test/render-route-tests.js.map +1 -0
  97. package/lib/webserver/controllers/test/static-route-tests.js +96 -0
  98. package/lib/webserver/controllers/test/static-route-tests.js.map +1 -0
  99. package/lib/webserver/index.js +6 -0
  100. package/lib/webserver/index.js.map +1 -0
  101. package/lib/webserver/routes/routes.js +902 -0
  102. package/lib/webserver/routes/routes.js.map +1 -0
  103. package/package.json +13 -6
  104. package/lib/migrations/20220704054051_initial.sql +0 -19
  105. package/lib/migrations/20220718172237_adding_component_sets.sql +0 -23
  106. package/lib/migrations/20220728113941_add_env_vars_field.sql +0 -1
  107. package/lib/migrations/20220817113300_removing_null_props_from_jsonb.sql +0 -41
  108. package/lib/migrations/20221027151225_dummy.sql +0 -2
  109. package/lib/migrations/20221117151200_add_detail_columns_to_component_version.js +0 -40
  110. package/lib/migrations/20221220151200_add_required_to_manifests.js +0 -7794
  111. package/lib/migrations/20221222151200_add_required_to_manifests.js +0 -7856
  112. package/lib/migrations/20223525103556_component_set_rule.sql +0 -19
  113. package/lib/migrations/20230111095522_update_environment_property.js +0 -7802
  114. package/lib/migrations/20230203084900_ensure_static_root_exists.js +0 -47
  115. package/lib/migrations/20230210143300_lowercase_all_uri_names.js +0 -88
  116. package/lib/migrations/20230217151212_component_set_component_version_updates.sql +0 -38
  117. package/lib/migrations/20230218121212_add_component_set_rules.js +0 -24
  118. package/lib/migrations/202406061447_edge_component_type.sql +0 -1
  119. package/lib/migrations/202407111308_component_version_type.sql +0 -1
  120. package/lib/migrations/202408061132_update_type_to_server.sql +0 -1
  121. package/lib/public/docs.json +0 -5509
  122. package/lib/worker/component-bootstrapper.js +0 -185979
  123. package/lib/worker/component-bootstrapper.js.map +0 -7
@@ -0,0 +1,221 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
35
+ return function (target, key) { decorator(target, key, paramIndex); }
36
+ };
37
+ var RenderController_1;
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RenderController = void 0;
40
+ const tsoa_1 = require("tsoa");
41
+ const inversify_binding_decorators_1 = require("inversify-binding-decorators");
42
+ const inversify_1 = require("inversify");
43
+ const query_string_1 = require("query-string");
44
+ const component_lib_1 = require("@squiz/component-lib");
45
+ const RenderInputService_1 = require("../../RenderInputService");
46
+ const PreviewComponentService_1 = require("../../PreviewComponentService");
47
+ const setHeadersOnExpressResponse_1 = require("../../utils/setHeadersOnExpressResponse");
48
+ const dx_common_lib_1 = require("@squiz/dx-common-lib");
49
+ const cheerio = __importStar(require("cheerio"));
50
+ // import { ValueType, metrics } from '@opentelemetry/api';
51
+ const UPPERCASE_REGEX = /[A-Z]/;
52
+ // const meter = metrics.getMeter('render-runtime');
53
+ let RenderController = RenderController_1 = class RenderController extends tsoa_1.Controller {
54
+ constructor(componentSetService, manifestService, componentFunctionService, componentRunnerService, renderInputService, contentItemService, componentPreviewService) {
55
+ super();
56
+ this.componentSetService = componentSetService;
57
+ this.manifestService = manifestService;
58
+ this.componentFunctionService = componentFunctionService;
59
+ this.componentRunnerService = componentRunnerService;
60
+ this.renderInputService = renderInputService;
61
+ this.contentItemService = contentItemService;
62
+ this.componentPreviewService = componentPreviewService;
63
+ }
64
+ async getDefaultFunctionRendering(expressRequest, namespace, componentName, version, componentSet, previewKey, contentItemId, previewBlockIndex) {
65
+ await this.getGivenFunctionRendering(expressRequest, namespace, componentName, version, '', componentSet, previewKey, contentItemId, previewBlockIndex);
66
+ }
67
+ async getGivenFunctionRendering(expressRequest, namespace, componentName, version, functionName, componentSet, previewKey, contentItemId, previewBlockIndex) {
68
+ const response = expressRequest.res;
69
+ (0, dx_common_lib_1.assertIsDefined)(response);
70
+ const { path, query } = expressRequest;
71
+ if (UPPERCASE_REGEX.test(path) || (componentSet && UPPERCASE_REGEX.test(componentSet))) {
72
+ const url = (0, query_string_1.stringifyUrl)({
73
+ url: path.toLowerCase(),
74
+ query: {
75
+ ...query,
76
+ _componentSet: componentSet === null || componentSet === void 0 ? void 0 : componentSet.toLowerCase(),
77
+ },
78
+ });
79
+ response.redirect(url);
80
+ return;
81
+ }
82
+ //TODO: Update metric export https://squizgroup.atlassian.net/browse/FEAAS-768
83
+ // const histogram = meter.createHistogram('component.render.duration', {
84
+ // description: 'A distribution of the component render times',
85
+ // unit: 'milliseconds',
86
+ // valueType: ValueType.INT,
87
+ // });
88
+ // const start = new Date();
89
+ const renderInput = await this.renderInputService.resolveInput({
90
+ componentSet,
91
+ namespace,
92
+ componentName,
93
+ version,
94
+ previewKey,
95
+ contentItemId,
96
+ expressRequest,
97
+ functionName,
98
+ });
99
+ let renderedOutput = await this.doFunctionRender(renderInput);
100
+ // If we have a string (such as HTML), add the block index attribute if set
101
+ if (typeof renderedOutput === 'string' && previewBlockIndex) {
102
+ renderedOutput = this.processPreviewHtml(previewBlockIndex, renderedOutput);
103
+ }
104
+ this.handleResponse(renderInput, renderedOutput, response);
105
+ // const end = new Date();
106
+ // histogram.record(end.getTime() - start.getTime(), {
107
+ // 'component.id': componentName,
108
+ // 'component.set': componentSet,
109
+ // 'component.function': functionName,
110
+ // });
111
+ }
112
+ processPreviewHtml(index, html) {
113
+ const $ = cheerio.load(html);
114
+ $('body')
115
+ .children()
116
+ .each((idx, el) => {
117
+ $(el).attr('data-block-index', index);
118
+ });
119
+ return $('body').html() || '';
120
+ }
121
+ handleResponse(input, output, response) {
122
+ this.setHeadersOnResponse(input, response);
123
+ response.send(output);
124
+ }
125
+ async doFunctionRender(renderInput) {
126
+ let result = await this.renderAndValidateOutput(renderInput);
127
+ if (renderInput.renderType === 'preview') {
128
+ result = await this.componentPreviewService.dressRenderedOutputForPreview(renderInput.manifest, renderInput.componentFunction, renderInput.previewKey, result);
129
+ }
130
+ return result;
131
+ }
132
+ async renderAndValidateOutput(renderInput) {
133
+ var _a, _b;
134
+ let previewKey = undefined;
135
+ if (renderInput.renderType === 'preview') {
136
+ previewKey = renderInput.previewKey;
137
+ }
138
+ const result = await this.componentRunnerService.executeComponentFunction({
139
+ dxpApiKey: renderInput.dxpApiKey,
140
+ requestId: renderInput.requestId,
141
+ args: [renderInput.input],
142
+ functionEntryFilePath: renderInput.functionEntryFilePath,
143
+ environment: renderInput.runtimeSet.environment,
144
+ componentFullName: renderInput.componentFullName,
145
+ componentFunction: renderInput.componentFunction,
146
+ componentRootUrl: renderInput.componentRootUrl,
147
+ manifest: renderInput.manifestForWeb,
148
+ runtimeSet: renderInput.runtimeSet,
149
+ manifestPath: renderInput.renderType === 'preview' ? renderInput.manifestPath : '',
150
+ previewKey: previewKey,
151
+ queryParameters: renderInput.queryParameters,
152
+ });
153
+ try {
154
+ this.componentFunctionService.assertOutputValidForComponentFunction(result, renderInput.componentFunction);
155
+ }
156
+ catch (e) {
157
+ throw new component_lib_1.ComponentError(renderInput.requestId, e, (_b = (_a = renderInput.componentFunction) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'main', renderInput.componentFullName, renderInput.manifest.getVersion(), renderInput.functionEntryFilePath, renderInput.componentFunction.output.responseType);
158
+ }
159
+ return result;
160
+ }
161
+ setHeadersOnResponse(renderInput, response) {
162
+ const headers = renderInput.headers || {};
163
+ switch (renderInput.componentFunction.output.responseType) {
164
+ case 'html':
165
+ headers['content-type'] = 'text/html';
166
+ break;
167
+ case 'json':
168
+ headers['content-type'] = 'application/json';
169
+ break;
170
+ }
171
+ (0, setHeadersOnExpressResponse_1.setHeadersOnExpressResponse)(headers, response);
172
+ let cacheControl = response.getHeader('cache-control');
173
+ if (typeof cacheControl !== 'string') {
174
+ cacheControl = undefined;
175
+ }
176
+ response.setHeader('cache-control', (0, dx_common_lib_1.parseAndSanitiseCacheControlHeader)(cacheControl));
177
+ }
178
+ };
179
+ __decorate([
180
+ (0, tsoa_1.Get)('/:namespace/:componentName/:version'),
181
+ __param(0, (0, tsoa_1.Request)()),
182
+ __param(1, (0, tsoa_1.Path)()),
183
+ __param(2, (0, tsoa_1.Path)()),
184
+ __param(3, (0, tsoa_1.Path)()),
185
+ __param(4, (0, tsoa_1.Query)('_componentSet')),
186
+ __param(5, (0, tsoa_1.Query)('_previewKey')),
187
+ __param(6, (0, tsoa_1.Query)('_contentItemId')),
188
+ __param(7, (0, tsoa_1.Query)('_previewBlockIndex')),
189
+ __metadata("design:type", Function),
190
+ __metadata("design:paramtypes", [Object, String, String, String, String, String, String, String]),
191
+ __metadata("design:returntype", Promise)
192
+ ], RenderController.prototype, "getDefaultFunctionRendering", null);
193
+ __decorate([
194
+ (0, tsoa_1.Get)('/:namespace/:componentName/:version/:functionName'),
195
+ __param(0, (0, tsoa_1.Request)()),
196
+ __param(1, (0, tsoa_1.Path)()),
197
+ __param(2, (0, tsoa_1.Path)()),
198
+ __param(3, (0, tsoa_1.Path)()),
199
+ __param(4, (0, tsoa_1.Path)()),
200
+ __param(5, (0, tsoa_1.Query)('_componentSet')),
201
+ __param(6, (0, tsoa_1.Query)('_previewKey')),
202
+ __param(7, (0, tsoa_1.Query)('_contentItemId')),
203
+ __param(8, (0, tsoa_1.Query)('_previewBlockIndex')),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", [Object, String, String, String, String, String, String, String, String]),
206
+ __metadata("design:returntype", Promise)
207
+ ], RenderController.prototype, "getGivenFunctionRendering", null);
208
+ RenderController = RenderController_1 = __decorate([
209
+ (0, inversify_binding_decorators_1.provide)(RenderController_1),
210
+ (0, tsoa_1.Route)('/r'),
211
+ __param(0, (0, inversify_1.inject)('ComponentSetService')),
212
+ __param(1, (0, inversify_1.inject)('ManifestService')),
213
+ __param(2, (0, inversify_1.inject)('ComponentFunctionService')),
214
+ __param(3, (0, inversify_1.inject)('ComponentRunnerService')),
215
+ __param(4, (0, inversify_1.inject)('RenderInputService')),
216
+ __param(5, (0, inversify_1.inject)('ContentItemService')),
217
+ __param(6, (0, inversify_1.inject)('ComponentPreviewService')),
218
+ __metadata("design:paramtypes", [Object, Object, component_lib_1.ComponentFunctionService, Object, RenderInputService_1.RenderInputService, Object, PreviewComponentService_1.ComponentPreviewService])
219
+ ], RenderController);
220
+ exports.RenderController = RenderController;
221
+ //# sourceMappingURL=RenderController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderController.js","sourceRoot":"","sources":["../../../src/webserver/controllers/RenderController.ts"],"names":[],"mappings":"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"}