@squiz/render-runtime-lib 1.74.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 (122) 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.js +31 -0
  19. package/lib/component-runner/ContentRuntimeService.js.map +1 -0
  20. package/lib/component-runner/ExecuteComponentTask.d.ts +1 -9
  21. package/lib/component-runner/ExecuteComponentTask.js +8 -0
  22. package/lib/component-runner/ExecuteComponentTask.js.map +1 -0
  23. package/lib/component-runner/FunctionReturnTypes.js +3 -0
  24. package/lib/component-runner/FunctionReturnTypes.js.map +1 -0
  25. package/lib/component-runner/index.js +23 -0
  26. package/lib/component-runner/index.js.map +1 -0
  27. package/lib/component-runner/worker/component-bootstrapper.js +63 -0
  28. package/lib/component-runner/worker/component-bootstrapper.js.map +1 -0
  29. package/lib/health-check-service.js +3 -0
  30. package/lib/health-check-service.js.map +1 -0
  31. package/lib/index.d.ts +0 -16
  32. package/lib/index.js +23 -4610
  33. package/lib/index.js.map +1 -7
  34. package/lib/ioc.js +37 -0
  35. package/lib/ioc.js.map +1 -0
  36. package/lib/test/helpers/fixtures.js +152 -0
  37. package/lib/test/helpers/fixtures.js.map +1 -0
  38. package/lib/test/helpers/stack.js +121 -0
  39. package/lib/test/helpers/stack.js.map +1 -0
  40. package/lib/test/index.js +21 -0
  41. package/lib/test/index.js.map +1 -0
  42. package/lib/test/mock-services/MockedComponentSetService.js +413 -0
  43. package/lib/test/mock-services/MockedComponentSetService.js.map +1 -0
  44. package/lib/test/mock-services/MockedContentItemService.js +37 -0
  45. package/lib/test/mock-services/MockedContentItemService.js.map +1 -0
  46. package/lib/test-helpers.d.ts +16 -0
  47. package/lib/test-helpers.js +44 -0
  48. package/lib/test-helpers.js.map +1 -0
  49. package/lib/utils/getContentItemIdFromInput.js +13 -0
  50. package/lib/utils/getContentItemIdFromInput.js.map +1 -0
  51. package/lib/utils/getContentItemIdFromInput.spec.js +18 -0
  52. package/lib/utils/getContentItemIdFromInput.spec.js.map +1 -0
  53. package/lib/utils/resolvePreviewOutput.js +71 -0
  54. package/lib/utils/resolvePreviewOutput.js.map +1 -0
  55. package/lib/utils/resolvePreviewOutput.spec.js +168 -0
  56. package/lib/utils/resolvePreviewOutput.spec.js.map +1 -0
  57. package/lib/utils/setHeadersOnExpressResponse.js +15 -0
  58. package/lib/utils/setHeadersOnExpressResponse.js.map +1 -0
  59. package/lib/utils/setHeadersOnExpressResponse.sepc.js +21 -0
  60. package/lib/utils/setHeadersOnExpressResponse.sepc.js.map +1 -0
  61. package/lib/webserver/app.js +78 -0
  62. package/lib/webserver/app.js.map +1 -0
  63. package/lib/webserver/controllers/CoreController.js +116 -0
  64. package/lib/webserver/controllers/CoreController.js.map +1 -0
  65. package/lib/webserver/controllers/CoreController.spec.js +132 -0
  66. package/lib/webserver/controllers/CoreController.spec.js.map +1 -0
  67. package/lib/webserver/controllers/DefinitionController.js +162 -0
  68. package/lib/webserver/controllers/DefinitionController.js.map +1 -0
  69. package/lib/webserver/controllers/DefinitionController.spec.js +16 -0
  70. package/lib/webserver/controllers/DefinitionController.spec.js.map +1 -0
  71. package/lib/webserver/controllers/DevelopmentController.js +149 -0
  72. package/lib/webserver/controllers/DevelopmentController.js.map +1 -0
  73. package/lib/webserver/controllers/DevelopmentController.spec.js +29 -0
  74. package/lib/webserver/controllers/DevelopmentController.spec.js.map +1 -0
  75. package/lib/webserver/controllers/PreviewController.spec.js +124 -0
  76. package/lib/webserver/controllers/PreviewController.spec.js.map +1 -0
  77. package/lib/webserver/controllers/RenderController.d.ts +3 -2
  78. package/lib/webserver/controllers/RenderController.js +221 -0
  79. package/lib/webserver/controllers/RenderController.js.map +1 -0
  80. package/lib/webserver/controllers/RenderController.spec.js +441 -0
  81. package/lib/webserver/controllers/RenderController.spec.js.map +1 -0
  82. package/lib/webserver/controllers/StaticController.js +149 -0
  83. package/lib/webserver/controllers/StaticController.js.map +1 -0
  84. package/lib/webserver/controllers/StaticController.spec.js +28 -0
  85. package/lib/webserver/controllers/StaticController.spec.js.map +1 -0
  86. package/lib/webserver/controllers/test/definition-route-tests.js +627 -0
  87. package/lib/webserver/controllers/test/definition-route-tests.js.map +1 -0
  88. package/lib/webserver/controllers/test/development-route-tests.js +110 -0
  89. package/lib/webserver/controllers/test/development-route-tests.js.map +1 -0
  90. package/lib/webserver/controllers/test/preview-route-tests.js +122 -0
  91. package/lib/webserver/controllers/test/preview-route-tests.js.map +1 -0
  92. package/lib/webserver/controllers/test/render-route-sandbox-tests.js +194 -0
  93. package/lib/webserver/controllers/test/render-route-sandbox-tests.js.map +1 -0
  94. package/lib/webserver/controllers/test/render-route-tests.js +422 -0
  95. package/lib/webserver/controllers/test/render-route-tests.js.map +1 -0
  96. package/lib/webserver/controllers/test/static-route-tests.js +96 -0
  97. package/lib/webserver/controllers/test/static-route-tests.js.map +1 -0
  98. package/lib/webserver/index.js +6 -0
  99. package/lib/webserver/index.js.map +1 -0
  100. package/lib/webserver/routes/routes.js +902 -0
  101. package/lib/webserver/routes/routes.js.map +1 -0
  102. package/package.json +13 -6
  103. package/lib/migrations/20220704054051_initial.sql +0 -19
  104. package/lib/migrations/20220718172237_adding_component_sets.sql +0 -23
  105. package/lib/migrations/20220728113941_add_env_vars_field.sql +0 -1
  106. package/lib/migrations/20220817113300_removing_null_props_from_jsonb.sql +0 -41
  107. package/lib/migrations/20221027151225_dummy.sql +0 -2
  108. package/lib/migrations/20221117151200_add_detail_columns_to_component_version.js +0 -40
  109. package/lib/migrations/20221220151200_add_required_to_manifests.js +0 -7794
  110. package/lib/migrations/20221222151200_add_required_to_manifests.js +0 -7856
  111. package/lib/migrations/20223525103556_component_set_rule.sql +0 -19
  112. package/lib/migrations/20230111095522_update_environment_property.js +0 -7802
  113. package/lib/migrations/20230203084900_ensure_static_root_exists.js +0 -47
  114. package/lib/migrations/20230210143300_lowercase_all_uri_names.js +0 -88
  115. package/lib/migrations/20230217151212_component_set_component_version_updates.sql +0 -38
  116. package/lib/migrations/20230218121212_add_component_set_rules.js +0 -24
  117. package/lib/migrations/202406061447_edge_component_type.sql +0 -1
  118. package/lib/migrations/202407111308_component_version_type.sql +0 -1
  119. package/lib/migrations/202408061132_update_type_to_server.sql +0 -1
  120. package/lib/public/docs.json +0 -5509
  121. package/lib/worker/component-bootstrapper.js +0 -170132
  122. package/lib/worker/component-bootstrapper.js.map +0 -7
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const test_helpers_1 = require("../../test-helpers");
4
+ const static_route_tests_1 = require("./test/static-route-tests");
5
+ const test_1 = require("../../test");
6
+ describe('render-runtime - static files', () => {
7
+ const testServer = new test_helpers_1.TestHelpers.TestServer({
8
+ componentSetService: new test_1.MockedComponentSetServiceForProduction(),
9
+ });
10
+ beforeAll(async () => {
11
+ testServer.start();
12
+ });
13
+ afterAll(() => {
14
+ testServer.stop();
15
+ });
16
+ describe('Static Files routes tests', () => {
17
+ (0, static_route_tests_1.staticRouteTests)(() => testServer.request);
18
+ });
19
+ describe('Response Headers test', () => {
20
+ it('should return the headers set on the component set', async () => {
21
+ const response = await testServer.request.get('/s/unit-test-components/test-static-files/1.0.0/birthday-cake.png?_componentSet=set');
22
+ expect(response.header['some-header-name-1']).toEqual('mocked-component-set-header-val-1');
23
+ expect(response.header['some-header-name-2']).toEqual('mocked-component-set-header-val-2');
24
+ expect(response.statusCode).toEqual(200);
25
+ });
26
+ });
27
+ });
28
+ //# sourceMappingURL=StaticController.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticController.spec.js","sourceRoot":"","sources":["../../../src/webserver/controllers/StaticController.spec.ts"],"names":[],"mappings":";;AAAA,qDAAiD;AACjD,kEAA6D;AAE7D,qCAAoE;AAEpE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,MAAM,UAAU,GAAG,IAAI,0BAAW,CAAC,UAAU,CAAC;QAC5C,mBAAmB,EAAE,IAAI,6CAAsC,EAAE;KAClE,CAAC,CAAC;IACH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,IAAA,qCAAgB,EAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAC3C,qFAAqF,CACtF,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAC3F,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAC3F,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,627 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.definitionRouteTests = void 0;
4
+ function definitionRouteTests(request, _rootUrl = 'http://localhost:3000') {
5
+ describe('definition routes', () => {
6
+ it('should return the component manifest', async () => {
7
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/manifest.json');
8
+ expect(response.statusCode).toEqual(200);
9
+ expect(response.type).toEqual('application/json');
10
+ const expected = {
11
+ $schema: 'http://localhost:3000/schemas/v1.json#',
12
+ name: 'test-component',
13
+ namespace: 'unit-test-components',
14
+ description: 'some-description',
15
+ displayName: 'some-display-name',
16
+ version: '1.0.0',
17
+ mainFunction: 'main',
18
+ functions: [
19
+ {
20
+ name: 'main',
21
+ entry: 'main.js',
22
+ input: {
23
+ type: 'object',
24
+ properties: {
25
+ something: {
26
+ type: 'string',
27
+ },
28
+ },
29
+ required: ['something'],
30
+ },
31
+ output: {
32
+ responseType: 'html',
33
+ },
34
+ },
35
+ {
36
+ name: 'promise-func',
37
+ entry: 'promise.js',
38
+ input: {
39
+ type: 'object',
40
+ properties: {
41
+ something: {
42
+ type: 'string',
43
+ },
44
+ },
45
+ required: ['something'],
46
+ },
47
+ output: {
48
+ responseType: 'html',
49
+ },
50
+ },
51
+ ],
52
+ previews: {
53
+ preview1: {
54
+ functionData: {
55
+ main: {
56
+ inputData: {
57
+ type: 'inline',
58
+ value: {
59
+ something: 'something',
60
+ },
61
+ },
62
+ },
63
+ },
64
+ },
65
+ },
66
+ };
67
+ expect(response.body).toEqual(expected);
68
+ });
69
+ it('should return the component main function definition when no fn specified in the route', async () => {
70
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0');
71
+ expect(response.statusCode).toEqual(200);
72
+ expect(response.type).toEqual('application/json');
73
+ const expected = {
74
+ name: 'main',
75
+ entry: 'main.js',
76
+ input: {
77
+ type: 'object',
78
+ properties: {
79
+ something: {
80
+ type: 'string',
81
+ },
82
+ },
83
+ required: ['something'],
84
+ },
85
+ output: {
86
+ responseType: 'html',
87
+ },
88
+ };
89
+ expect(response.body).toEqual(expected);
90
+ });
91
+ it('should return the component main function definition with component type when specified in the route', async () => {
92
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/main');
93
+ expect(response.statusCode).toEqual(200);
94
+ expect(response.type).toEqual('application/json');
95
+ const expected = {
96
+ name: 'main',
97
+ entry: 'main.js',
98
+ input: {
99
+ type: 'object',
100
+ properties: {
101
+ something: {
102
+ type: 'string',
103
+ },
104
+ },
105
+ required: ['something'],
106
+ },
107
+ output: {
108
+ responseType: 'html',
109
+ },
110
+ };
111
+ expect(response.body).toEqual(expected);
112
+ });
113
+ it('should return the function definition specified in the route', async () => {
114
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/promise-func');
115
+ expect(response.statusCode).toEqual(200);
116
+ expect(response.type).toEqual('application/json');
117
+ const expected = {
118
+ name: 'promise-func',
119
+ entry: 'promise.js',
120
+ input: {
121
+ type: 'object',
122
+ properties: {
123
+ something: {
124
+ type: 'string',
125
+ },
126
+ },
127
+ required: ['something'],
128
+ },
129
+ output: {
130
+ responseType: 'html',
131
+ },
132
+ };
133
+ expect(response.body).toEqual(expected);
134
+ });
135
+ it('should 404 if requesting on a non-existent component', async () => {
136
+ const response = await request().get('/d/unit-test-components/bad-component/1.0.0');
137
+ expect(response.statusCode).toEqual(404);
138
+ expect(response.body).toEqual({
139
+ message: 'manifest for unit-test-components/bad-component 1.0.0 could not be found',
140
+ });
141
+ });
142
+ it('should 404 if requesting on a non-existent component version', async () => {
143
+ const response = await request().get('/d/unit-test-components/test-component/9.9.9');
144
+ expect(response.statusCode).toEqual(404);
145
+ expect(response.body).toEqual({
146
+ message: 'manifest for unit-test-components/test-component 9.9.9 could not be found',
147
+ });
148
+ });
149
+ it('should 404 if requesting a non-existent function on a valid component', async () => {
150
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/non-existent-fn');
151
+ expect(response.statusCode).toEqual(404);
152
+ expect(response.body).toEqual({
153
+ message: 'non-existent-fn could not be found in test-component 1.0.0',
154
+ });
155
+ });
156
+ it('should NOT convert the static files to a fully qualified domains', async () => {
157
+ const response = await request().get('/d/unit-test-components/test-static-files/1.0.0');
158
+ expect(response.statusCode).toEqual(200);
159
+ expect(response.body).toEqual({
160
+ entry: 'main.js',
161
+ input: {},
162
+ name: 'main',
163
+ output: {
164
+ responseType: 'html',
165
+ staticFiles: [
166
+ {
167
+ file: {
168
+ filepath: 'sub/dir/static-library-file.js',
169
+ type: 'js',
170
+ },
171
+ location: 'header',
172
+ },
173
+ {
174
+ file: {
175
+ filepath: 'https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.production.min.js',
176
+ type: 'js',
177
+ },
178
+ location: 'header',
179
+ },
180
+ {
181
+ file: {
182
+ filepath: './sub2/dir/static-library-file.js',
183
+ type: 'js',
184
+ },
185
+ location: 'header',
186
+ },
187
+ ],
188
+ },
189
+ });
190
+ });
191
+ });
192
+ describe('preview routes - /d/ routes', () => {
193
+ it('should return the component manifest with resolved preview static files URLs', async () => {
194
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.1/manifest.json?_previewKey=test-preview');
195
+ const expected = {
196
+ $schema: 'http://localhost:3000/schemas/v1.json#',
197
+ name: 'test-preview-component',
198
+ version: '1.0.1',
199
+ mainFunction: 'main',
200
+ displayName: 'some-display-name',
201
+ namespace: 'unit-test-components',
202
+ description: 'some-description',
203
+ functions: [
204
+ {
205
+ name: 'main',
206
+ entry: 'main.js',
207
+ input: {
208
+ type: 'object',
209
+ properties: {
210
+ something: {
211
+ type: 'string',
212
+ },
213
+ },
214
+ required: [],
215
+ },
216
+ output: {
217
+ responseType: 'html',
218
+ staticFiles: [
219
+ {
220
+ location: 'header',
221
+ file: {
222
+ type: 'css',
223
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/css-file.css?_previewKey=test-preview`,
224
+ },
225
+ },
226
+ {
227
+ location: 'footer',
228
+ file: {
229
+ type: 'js',
230
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/js-file.js?_previewKey=test-preview`,
231
+ },
232
+ },
233
+ ],
234
+ },
235
+ },
236
+ {
237
+ name: 'promise-func',
238
+ entry: 'promise.js',
239
+ input: {
240
+ type: 'object',
241
+ properties: {
242
+ something: {
243
+ type: 'string',
244
+ },
245
+ },
246
+ required: ['something'],
247
+ },
248
+ output: {
249
+ responseType: 'html',
250
+ staticFiles: [
251
+ {
252
+ location: 'header',
253
+ file: {
254
+ type: 'css',
255
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/css-file.css?_previewKey=test-preview`,
256
+ },
257
+ },
258
+ ],
259
+ },
260
+ },
261
+ ],
262
+ staticFiles: {
263
+ locationRoot: 'public',
264
+ },
265
+ previews: {
266
+ 'test-preview': {
267
+ functionData: {
268
+ main: {
269
+ inputData: {
270
+ type: 'inline',
271
+ value: {
272
+ something: 'foo',
273
+ },
274
+ },
275
+ wrapper: {
276
+ path: 'preview-wrapper.html',
277
+ },
278
+ },
279
+ },
280
+ },
281
+ },
282
+ };
283
+ expect(response.body).toEqual(expected);
284
+ expect(response.statusCode).toEqual(200);
285
+ expect(response.type).toEqual('application/json');
286
+ });
287
+ it('should return the component main function definition when no fn specified in the route', async () => {
288
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.1?_previewKey=test-preview');
289
+ const expected = {
290
+ name: 'main',
291
+ entry: 'main.js',
292
+ input: {
293
+ type: 'object',
294
+ properties: {
295
+ something: {
296
+ type: 'string',
297
+ },
298
+ },
299
+ required: [],
300
+ },
301
+ output: {
302
+ responseType: 'html',
303
+ staticFiles: [
304
+ {
305
+ location: 'header',
306
+ file: {
307
+ type: 'css',
308
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/css-file.css?_previewKey=test-preview`,
309
+ },
310
+ },
311
+ {
312
+ location: 'footer',
313
+ file: {
314
+ type: 'js',
315
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/js-file.js?_previewKey=test-preview`,
316
+ },
317
+ },
318
+ ],
319
+ },
320
+ };
321
+ expect(response.body).toEqual(expected);
322
+ expect(response.statusCode).toEqual(200);
323
+ expect(response.type).toEqual('application/json');
324
+ });
325
+ it('should return the component main function definition when specified in the route', async () => {
326
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.1/main?_previewKey=test-preview');
327
+ const expected = {
328
+ name: 'main',
329
+ entry: 'main.js',
330
+ input: {
331
+ type: 'object',
332
+ properties: {
333
+ something: {
334
+ type: 'string',
335
+ },
336
+ },
337
+ required: [],
338
+ },
339
+ output: {
340
+ responseType: 'html',
341
+ staticFiles: [
342
+ {
343
+ location: 'header',
344
+ file: {
345
+ type: 'css',
346
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/css-file.css?_previewKey=test-preview`,
347
+ },
348
+ },
349
+ {
350
+ location: 'footer',
351
+ file: {
352
+ type: 'js',
353
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/js-file.js?_previewKey=test-preview`,
354
+ },
355
+ },
356
+ ],
357
+ },
358
+ };
359
+ expect(response.body).toEqual(expected);
360
+ expect(response.statusCode).toEqual(200);
361
+ expect(response.type).toEqual('application/json');
362
+ });
363
+ it('should return the function definition specified in the route', async () => {
364
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.1/promise-func?_previewKey=test-preview');
365
+ const expected = {
366
+ name: 'promise-func',
367
+ entry: 'promise.js',
368
+ input: {
369
+ type: 'object',
370
+ properties: {
371
+ something: {
372
+ type: 'string',
373
+ },
374
+ },
375
+ required: ['something'],
376
+ },
377
+ output: {
378
+ responseType: 'html',
379
+ staticFiles: [
380
+ {
381
+ location: 'header',
382
+ file: {
383
+ type: 'css',
384
+ filepath: `${_rootUrl}/s/unit-test-components/test-preview-component/1.0.1/css-file.css?_previewKey=test-preview`,
385
+ },
386
+ },
387
+ ],
388
+ },
389
+ };
390
+ expect(response.body).toEqual(expected);
391
+ expect(response.statusCode).toEqual(200);
392
+ expect(response.type).toEqual('application/json');
393
+ });
394
+ it('should 404 if requesting on a non-existent component', async () => {
395
+ const response = await request().get('/d/unit-test-components/bad-component/1.0.0?_previewKey=test-preview');
396
+ expect(response.statusCode).toEqual(404);
397
+ expect(response.body).toEqual({
398
+ message: 'manifest for unit-test-components/bad-component 1.0.0 could not be found',
399
+ });
400
+ });
401
+ it('should 404 if requesting on a non-existent component version', async () => {
402
+ const response = await request().get('/d/unit-test-components/test-preview-component/9.9.9?_previewKey=test-preview');
403
+ expect(response.statusCode).toEqual(404);
404
+ expect(response.body).toEqual({
405
+ message: 'manifest for unit-test-components/test-preview-component 9.9.9 could not be found',
406
+ });
407
+ });
408
+ it('should 404 if requesting a non-existent function on a valid component', async () => {
409
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.1/non-existent-fn?_previewKey=test-preview');
410
+ expect(response.statusCode).toEqual(404);
411
+ expect(response.body).toEqual({
412
+ message: 'non-existent-fn could not be found in test-preview-component 1.0.1',
413
+ });
414
+ });
415
+ it('should set the headers defined in the function preview for the main route', async () => {
416
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.2/?_previewKey=test-preview');
417
+ expect(response.statusCode).toEqual(200);
418
+ expect(response.type).toEqual('application/json');
419
+ expect(response.header['some-header-1']).toEqual('val-1');
420
+ expect(response.header['some-header-2']).toEqual('val-2');
421
+ });
422
+ it('should set the headers defined in the function preview for the function specific route', async () => {
423
+ const response = await request().get('/d/unit-test-components/test-preview-component/1.0.2/main?_previewKey=test-preview');
424
+ expect(response.statusCode).toEqual(200);
425
+ expect(response.type).toEqual('application/json');
426
+ expect(response.header['some-header-1']).toEqual('val-1');
427
+ expect(response.header['some-header-2']).toEqual('val-2');
428
+ });
429
+ });
430
+ describe('definition route - invalid query params', () => {
431
+ it('should throw an appropriate error message when botha _componentSet and _previewKey are provided as query parameters', async () => {
432
+ const response = await request().get('/d/unit-test-components/test-static-files/1.0.0?_componentSet=set&_previewKey=test-preview');
433
+ expect(response.statusCode).toEqual(400);
434
+ });
435
+ });
436
+ describe('definition routes - with component set', () => {
437
+ it('should return the component manifest', async () => {
438
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/manifest.json?_componentSet=set');
439
+ expect(response.statusCode).toEqual(200);
440
+ expect(response.type).toEqual('application/json');
441
+ const expected = {
442
+ $schema: 'http://localhost:3000/schemas/v1.json#',
443
+ name: 'test-component',
444
+ namespace: 'unit-test-components',
445
+ description: 'some-description',
446
+ displayName: 'some-display-name',
447
+ version: '1.0.0',
448
+ mainFunction: 'main',
449
+ functions: [
450
+ {
451
+ name: 'main',
452
+ entry: 'main.js',
453
+ input: {
454
+ type: 'object',
455
+ properties: {
456
+ something: {
457
+ type: 'string',
458
+ },
459
+ },
460
+ required: ['something'],
461
+ },
462
+ output: {
463
+ responseType: 'html',
464
+ },
465
+ },
466
+ {
467
+ name: 'promise-func',
468
+ entry: 'promise.js',
469
+ input: {
470
+ type: 'object',
471
+ properties: {
472
+ something: {
473
+ type: 'string',
474
+ },
475
+ },
476
+ required: ['something'],
477
+ },
478
+ output: {
479
+ responseType: 'html',
480
+ },
481
+ },
482
+ ],
483
+ previews: {
484
+ preview1: {
485
+ functionData: {
486
+ main: {
487
+ inputData: {
488
+ type: 'inline',
489
+ value: {
490
+ something: 'something',
491
+ },
492
+ },
493
+ },
494
+ },
495
+ },
496
+ },
497
+ };
498
+ expect(response.body).toEqual(expected);
499
+ });
500
+ it('should return the component main function definition when no fn specified in the route', async () => {
501
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0?_componentSet=set');
502
+ expect(response.statusCode).toEqual(200);
503
+ expect(response.type).toEqual('application/json');
504
+ const expected = {
505
+ name: 'main',
506
+ entry: 'main.js',
507
+ input: {
508
+ type: 'object',
509
+ properties: {
510
+ something: {
511
+ type: 'string',
512
+ },
513
+ },
514
+ required: ['something'],
515
+ },
516
+ output: {
517
+ responseType: 'html',
518
+ },
519
+ };
520
+ expect(response.body).toEqual(expected);
521
+ });
522
+ it('should return the component main function definition when specified in the route', async () => {
523
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/main?_componentSet=set');
524
+ expect(response.statusCode).toEqual(200);
525
+ expect(response.type).toEqual('application/json');
526
+ const expected = {
527
+ name: 'main',
528
+ entry: 'main.js',
529
+ input: {
530
+ type: 'object',
531
+ properties: {
532
+ something: {
533
+ type: 'string',
534
+ },
535
+ },
536
+ required: ['something'],
537
+ },
538
+ output: {
539
+ responseType: 'html',
540
+ },
541
+ };
542
+ expect(response.body).toEqual(expected);
543
+ });
544
+ it('should return the function definition specified in the route', async () => {
545
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/promise-func?_componentSet=set');
546
+ expect(response.statusCode).toEqual(200);
547
+ expect(response.type).toEqual('application/json');
548
+ const expected = {
549
+ name: 'promise-func',
550
+ entry: 'promise.js',
551
+ input: {
552
+ type: 'object',
553
+ properties: {
554
+ something: {
555
+ type: 'string',
556
+ },
557
+ },
558
+ required: ['something'],
559
+ },
560
+ output: {
561
+ responseType: 'html',
562
+ },
563
+ };
564
+ expect(response.body).toEqual(expected);
565
+ });
566
+ it('should 404 if requesting on a non-existent component', async () => {
567
+ const response = await request().get('/d/unit-test-components/bad-component/1.0.0?_componentSet=set');
568
+ expect(response.statusCode).toEqual(404);
569
+ expect(response.body).toEqual({
570
+ message: 'manifest for unit-test-components/bad-component 1.0.0 could not be found',
571
+ });
572
+ });
573
+ it('should 404 if requesting on a non-existent component version', async () => {
574
+ const response = await request().get('/d/unit-test-components/test-component/9.9.9?_componentSet=set');
575
+ expect(response.statusCode).toEqual(404);
576
+ expect(response.body).toEqual({
577
+ message: 'manifest for unit-test-components/test-component 9.9.9 could not be found',
578
+ });
579
+ });
580
+ it('should 404 if requesting a non-existent function on a valid component', async () => {
581
+ const response = await request().get('/d/unit-test-components/test-component/1.0.0/non-existent-fn?_componentSet=set');
582
+ expect(response.statusCode).toEqual(404);
583
+ expect(response.body).toEqual({
584
+ message: 'non-existent-fn could not be found in test-component 1.0.0',
585
+ });
586
+ });
587
+ it('should convert the static files to a fully qualified domains', async () => {
588
+ const response = await request().get('/d/unit-test-components/test-static-files/1.0.0?_componentSet=set');
589
+ expect(response.statusCode).toEqual(200);
590
+ expect(response.body).toEqual({
591
+ entry: 'main.js',
592
+ input: {},
593
+ name: 'main',
594
+ output: {
595
+ responseType: 'html',
596
+ staticFiles: [
597
+ {
598
+ file: {
599
+ filepath: _rootUrl +
600
+ '/s/unit-test-components/test-static-files/1.0.0/sub/dir/static-library-file.js?_componentSet=set',
601
+ type: 'js',
602
+ },
603
+ location: 'header',
604
+ },
605
+ {
606
+ file: {
607
+ filepath: 'https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.production.min.js',
608
+ type: 'js',
609
+ },
610
+ location: 'header',
611
+ },
612
+ {
613
+ file: {
614
+ filepath: _rootUrl +
615
+ '/s/unit-test-components/test-static-files/1.0.0/sub2/dir/static-library-file.js?_componentSet=set',
616
+ type: 'js',
617
+ },
618
+ location: 'header',
619
+ },
620
+ ],
621
+ },
622
+ });
623
+ });
624
+ });
625
+ }
626
+ exports.definitionRouteTests = definitionRouteTests;
627
+ //# sourceMappingURL=definition-route-tests.js.map