@squiz/render-runtime-lib 1.79.2 → 1.80.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.
- package/lib/PreviewComponentService.js.map +1 -1
- package/lib/RenderInputService.js.map +1 -1
- package/lib/RenderInputService.spec.js +4 -4
- package/lib/RenderInputService.spec.js.map +1 -1
- package/lib/component-runner/ComponentRunnerServiceWithWorkers.js.map +1 -1
- package/lib/component-runner/ContentRuntimeService.js.map +1 -1
- package/lib/component-runner/worker/component-bootstrapper.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/ioc.d.ts +4 -0
- package/lib/ioc.js +3 -1
- package/lib/ioc.js.map +1 -1
- package/lib/test/helpers/fixtures.d.ts +1 -1
- package/lib/test/helpers/fixtures.js.map +1 -1
- package/lib/test/helpers/stack.d.ts +0 -1
- package/lib/test/helpers/stack.js +19 -4
- package/lib/test/helpers/stack.js.map +1 -1
- package/lib/test/mock-services/MockedComponentSetService.js.map +1 -1
- package/lib/test/mock-services/MockedContentItemService.js.map +1 -1
- package/lib/test-helpers.js +17 -7
- package/lib/test-helpers.js.map +1 -1
- package/lib/utils/getContentItemIdFromInput.js +2 -2
- package/lib/utils/getContentItemIdFromInput.js.map +1 -1
- package/lib/utils/resolvePreviewOutput.js +1 -2
- package/lib/utils/resolvePreviewOutput.js.map +1 -1
- package/lib/utils/setHeadersOnExpressResponse.js +1 -2
- package/lib/utils/setHeadersOnExpressResponse.js.map +1 -1
- package/lib/webserver/DxpSessionMiddlewareTsoa.d.ts +17 -0
- package/lib/webserver/DxpSessionMiddlewareTsoa.js +54 -0
- package/lib/webserver/DxpSessionMiddlewareTsoa.js.map +1 -0
- package/lib/webserver/app.d.ts +6 -0
- package/lib/webserver/app.js +3 -4
- package/lib/webserver/app.js.map +1 -1
- package/lib/webserver/controllers/CoreController.js +4 -5
- package/lib/webserver/controllers/CoreController.js.map +1 -1
- package/lib/webserver/controllers/DefinitionController.js +4 -5
- package/lib/webserver/controllers/DefinitionController.js.map +1 -1
- package/lib/webserver/controllers/DevelopmentController.js +5 -8
- package/lib/webserver/controllers/DevelopmentController.js.map +1 -1
- package/lib/webserver/controllers/PreviewController.spec.js +37 -11
- package/lib/webserver/controllers/PreviewController.spec.js.map +1 -1
- package/lib/webserver/controllers/RenderController.js +6 -5
- package/lib/webserver/controllers/RenderController.js.map +1 -1
- package/lib/webserver/controllers/RenderController.spec.js +78 -23
- package/lib/webserver/controllers/RenderController.spec.js.map +1 -1
- package/lib/webserver/controllers/StaticController.js +4 -5
- package/lib/webserver/controllers/StaticController.js.map +1 -1
- package/lib/webserver/controllers/test/definition-route-tests.js +1 -2
- package/lib/webserver/controllers/test/definition-route-tests.js.map +1 -1
- package/lib/webserver/controllers/test/development-route-tests.js +1 -2
- package/lib/webserver/controllers/test/development-route-tests.js.map +1 -1
- package/lib/webserver/controllers/test/preview-route-tests.js +21 -5
- package/lib/webserver/controllers/test/preview-route-tests.js.map +1 -1
- package/lib/webserver/controllers/test/render-route-sandbox-tests.js +51 -17
- package/lib/webserver/controllers/test/render-route-sandbox-tests.js.map +1 -1
- package/lib/webserver/controllers/test/render-route-tests.js +110 -37
- package/lib/webserver/controllers/test/render-route-tests.js.map +1 -1
- package/lib/webserver/controllers/test/static-route-tests.js +1 -2
- package/lib/webserver/controllers/test/static-route-tests.js.map +1 -1
- package/lib/webserver/routes/routes.js +2 -3
- package/lib/webserver/routes/routes.js.map +1 -1
- package/package.json +6 -2
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.previewRouteTests =
|
|
3
|
+
exports.previewRouteTests = previewRouteTests;
|
|
4
|
+
const dxp_session_lib_1 = require("@squiz/dxp-session-lib");
|
|
5
|
+
const mockedSession = (0, dxp_session_lib_1.buildDevelopmentSession)({
|
|
6
|
+
version: dxp_session_lib_1.DxpSessionVersion.version1,
|
|
7
|
+
});
|
|
4
8
|
function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
5
9
|
describe('preview routes', () => {
|
|
6
10
|
it('should render a preview of a component with no wrapper file', async () => {
|
|
7
11
|
await request()
|
|
8
12
|
.get('/r/unit-test-components/test-preview-component/1.2.4?_previewKey=test-preview')
|
|
13
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
9
14
|
.expect(200)
|
|
10
15
|
.expect('content-type', 'text/html; charset=utf-8')
|
|
11
16
|
.expect('800 | this is nested content');
|
|
@@ -13,6 +18,7 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
13
18
|
it('should render a preview of a component with a different preset', async () => {
|
|
14
19
|
await request()
|
|
15
20
|
.get('/r/unit-test-components/test-preview-component/1.2.4?_previewKey=another-preview')
|
|
21
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
16
22
|
.expect(200)
|
|
17
23
|
.expect('content-type', 'text/html; charset=utf-8')
|
|
18
24
|
.expect('12300 | this is also nested content');
|
|
@@ -20,6 +26,7 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
20
26
|
it('should render a preview of a component non-main function with a wrapper html file', async () => {
|
|
21
27
|
await request()
|
|
22
28
|
.get('/r/unit-test-components/test-preview-component/1.2.4/other?_previewKey=another-preview')
|
|
29
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
23
30
|
.expect(200)
|
|
24
31
|
.expect('content-type', 'text/html; charset=utf-8')
|
|
25
32
|
.expect((a) => {
|
|
@@ -45,6 +52,7 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
45
52
|
const expectedJsPath = '/s/unit-test-components/test-preview-component/1.0.1/js-file.js?_previewKey=test-preview';
|
|
46
53
|
await request()
|
|
47
54
|
.get('/r/unit-test-components/test-preview-component/1.0.1/?_previewKey=test-preview')
|
|
55
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
48
56
|
.expect(200)
|
|
49
57
|
.expect('content-type', 'text/html; charset=utf-8')
|
|
50
58
|
.expect((a) => {
|
|
@@ -62,6 +70,7 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
62
70
|
});
|
|
63
71
|
await request()
|
|
64
72
|
.get(expectedCssPath)
|
|
73
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
65
74
|
.expect(200)
|
|
66
75
|
.expect('content-type', 'text/css; charset=UTF-8')
|
|
67
76
|
.expect((a) => {
|
|
@@ -76,6 +85,7 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
76
85
|
});
|
|
77
86
|
await request()
|
|
78
87
|
.get(expectedJsPath)
|
|
88
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
79
89
|
.expect(200)
|
|
80
90
|
.expect('content-type', 'application/javascript; charset=UTF-8')
|
|
81
91
|
.expect((a) => {
|
|
@@ -89,23 +99,30 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
89
99
|
});
|
|
90
100
|
}, 50000);
|
|
91
101
|
it('should load the defined preview for a given preview key', async () => {
|
|
92
|
-
const response = await request()
|
|
102
|
+
const response = await request()
|
|
103
|
+
.get('/r/unit-test-components/test-preview-component/1.0.3?_previewKey=second-preview')
|
|
104
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
93
105
|
expect(response.text).toContain(`<p>Second Preview</p>`);
|
|
94
106
|
expect(response.statusCode).toEqual(200);
|
|
95
107
|
});
|
|
96
108
|
it('should give meaningful error when preview key is invalid', async () => {
|
|
97
|
-
const response = await request()
|
|
109
|
+
const response = await request()
|
|
110
|
+
.get('/r/unit-test-components/test-preview-component/1.0.3?_previewKey=invalid')
|
|
111
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
98
112
|
expect(response.text).toEqual(`{"message":"Component has not defined preview with key \\"invalid\\", the defined preview keys for this component are \\"first-preview, second-preview, test-preview\\""}`);
|
|
99
113
|
expect(response.statusCode).toEqual(404);
|
|
100
114
|
});
|
|
101
115
|
it('should render inline preview data through to component', async () => {
|
|
102
|
-
const response = await request()
|
|
116
|
+
const response = await request()
|
|
117
|
+
.get('/r/unit-test-components/test-preview-component/1.0.4?_previewKey=test-preview')
|
|
118
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
103
119
|
expect(response.text).toContain(`this is a result | 123`);
|
|
104
120
|
expect(response.statusCode).toEqual(200);
|
|
105
121
|
}, 10000);
|
|
106
122
|
it('should resolve URIs to mocked URI object in preview route', async () => {
|
|
107
123
|
await request()
|
|
108
124
|
.get('/r/unit-test-components/test-preview-component/1.1.1?_previewKey=test-preview')
|
|
125
|
+
.set({ 'x-dxp-session': mockedSession })
|
|
109
126
|
.expect(200)
|
|
110
127
|
.expect((a) => {
|
|
111
128
|
expect(a.text).toMatchInlineSnapshot(`
|
|
@@ -118,5 +135,4 @@ function previewRouteTests(request, rootUrl = '${rootUrl}') {
|
|
|
118
135
|
});
|
|
119
136
|
});
|
|
120
137
|
}
|
|
121
|
-
exports.previewRouteTests = previewRouteTests;
|
|
122
138
|
//# sourceMappingURL=preview-route-tests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-route-tests.js","sourceRoot":"","sources":["../../../../src/webserver/controllers/test/preview-route-tests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview-route-tests.js","sourceRoot":"","sources":["../../../../src/webserver/controllers/test/preview-route-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderRouteSandboxTests =
|
|
3
|
+
exports.renderRouteSandboxTests = renderRouteSandboxTests;
|
|
4
|
+
const dxp_session_lib_1 = require("@squiz/dxp-session-lib");
|
|
5
|
+
const mockedSession = (0, dxp_session_lib_1.buildDevelopmentSession)({
|
|
6
|
+
version: dxp_session_lib_1.DxpSessionVersion.version1,
|
|
7
|
+
});
|
|
4
8
|
function renderRouteSandboxTests(request) {
|
|
5
9
|
describe('GET /r/unit-test-components/test-malicious-code/...', () => {
|
|
6
10
|
it('should timeout infinite running code', async () => {
|
|
7
|
-
const response = await request()
|
|
11
|
+
const response = await request()
|
|
12
|
+
.get('/r/unit-test-components/test-malicious-code/1.0.0/?_componentSet=set&something=hello')
|
|
13
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
8
14
|
expect(response.statusCode).toEqual(500);
|
|
9
15
|
expect(response.headers['content-type']).toEqual('text/html; charset=utf-8');
|
|
10
16
|
expect(response.text).toEqual('<!-- function while-true of component unit-test-components/test-malicious-code 1.0.0 could not complete with in the allotted time -->');
|
|
11
17
|
}, 30000);
|
|
12
18
|
it('should timeout non terminating code', async () => {
|
|
13
|
-
const response = await request()
|
|
19
|
+
const response = await request()
|
|
20
|
+
.get('/r/unit-test-components/test-malicious-code/1.3.0/executing-after-return?_componentSet=set')
|
|
21
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
14
22
|
expect(response.statusCode).toEqual(500);
|
|
15
23
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
16
24
|
expect(response.body).toEqual({
|
|
@@ -18,7 +26,9 @@ function renderRouteSandboxTests(request) {
|
|
|
18
26
|
});
|
|
19
27
|
}, 30000);
|
|
20
28
|
it.skip('should not allow starting your own services', async () => {
|
|
21
|
-
const response = await request()
|
|
29
|
+
const response = await request()
|
|
30
|
+
.get('/r/unit-test-components/test-malicious-code/1.3.0/reverse-shell?_componentSet=set')
|
|
31
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
22
32
|
expect(response.body).toEqual({
|
|
23
33
|
message: 'function executing-after-return of component unit-test-components/test-malicious-code 1.3.0 could not complete with in the allotted time',
|
|
24
34
|
});
|
|
@@ -26,7 +36,9 @@ function renderRouteSandboxTests(request) {
|
|
|
26
36
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
27
37
|
}, 10000);
|
|
28
38
|
it.skip('should deny access to fs', async () => {
|
|
29
|
-
const response = await request()
|
|
39
|
+
const response = await request()
|
|
40
|
+
.get('/r/unit-test-components/test-malicious-code/1.1.0/?_componentSet=set&something=hello')
|
|
41
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
30
42
|
expect(response.statusCode).toEqual(500);
|
|
31
43
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
32
44
|
expect(response.body).toEqual({
|
|
@@ -34,7 +46,9 @@ function renderRouteSandboxTests(request) {
|
|
|
34
46
|
});
|
|
35
47
|
});
|
|
36
48
|
it('should allow access to a subset of node provided modules', async () => {
|
|
37
|
-
const response = await request()
|
|
49
|
+
const response = await request()
|
|
50
|
+
.get('/r/unit-test-components/test-malicious-code/1.1.0/allowed-modules?_componentSet=set')
|
|
51
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
38
52
|
expect(response.statusCode).toEqual(200);
|
|
39
53
|
expect(response.headers['content-type']).toContain('application/json');
|
|
40
54
|
expect(response.body.sort()).toEqual([
|
|
@@ -93,6 +107,7 @@ function renderRouteSandboxTests(request) {
|
|
|
93
107
|
'stream/web',
|
|
94
108
|
'string_decoder',
|
|
95
109
|
'sys',
|
|
110
|
+
'test/mock_loader',
|
|
96
111
|
'timers',
|
|
97
112
|
'timers/promises',
|
|
98
113
|
'tls',
|
|
@@ -109,7 +124,9 @@ function renderRouteSandboxTests(request) {
|
|
|
109
124
|
].sort());
|
|
110
125
|
});
|
|
111
126
|
it('should not allow process.exit calls', async () => {
|
|
112
|
-
const response = await request()
|
|
127
|
+
const response = await request()
|
|
128
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/process-exit?_componentSet=set')
|
|
129
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
113
130
|
expect(response.statusCode).toEqual(500);
|
|
114
131
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
115
132
|
expect(response.body).toEqual({
|
|
@@ -117,7 +134,9 @@ function renderRouteSandboxTests(request) {
|
|
|
117
134
|
});
|
|
118
135
|
});
|
|
119
136
|
it('should not allow process.binding calls', async () => {
|
|
120
|
-
const response = await request()
|
|
137
|
+
const response = await request()
|
|
138
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/process-binding?_componentSet=set')
|
|
139
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
121
140
|
expect(response.statusCode).toEqual(500);
|
|
122
141
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
123
142
|
expect(response.body).toEqual({
|
|
@@ -125,7 +144,9 @@ function renderRouteSandboxTests(request) {
|
|
|
125
144
|
});
|
|
126
145
|
});
|
|
127
146
|
it('should not allow process.kill calls', async () => {
|
|
128
|
-
const response = await request()
|
|
147
|
+
const response = await request()
|
|
148
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/process-kill?_componentSet=set')
|
|
149
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
129
150
|
expect(response.statusCode).toEqual(500);
|
|
130
151
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
131
152
|
expect(response.body).toEqual({
|
|
@@ -133,7 +154,9 @@ function renderRouteSandboxTests(request) {
|
|
|
133
154
|
});
|
|
134
155
|
});
|
|
135
156
|
it('should not allow process.abort calls', async () => {
|
|
136
|
-
const response = await request()
|
|
157
|
+
const response = await request()
|
|
158
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/process-abort?_componentSet=set')
|
|
159
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
137
160
|
expect(response.statusCode).toEqual(500);
|
|
138
161
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
139
162
|
expect(response.body).toEqual({
|
|
@@ -141,7 +164,9 @@ function renderRouteSandboxTests(request) {
|
|
|
141
164
|
});
|
|
142
165
|
});
|
|
143
166
|
it.skip('should not allow access to parentPort', async () => {
|
|
144
|
-
const response = await request()
|
|
167
|
+
const response = await request()
|
|
168
|
+
.get('/r/unit-test-components/test-malicious-code/1.3.0/accessing-parent-port?_componentSet=set')
|
|
169
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
145
170
|
expect(response.statusCode).toEqual(500);
|
|
146
171
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
147
172
|
expect(response.body).toEqual({
|
|
@@ -149,7 +174,9 @@ function renderRouteSandboxTests(request) {
|
|
|
149
174
|
});
|
|
150
175
|
});
|
|
151
176
|
it('should not allow escaping the sandbox through the constructor', async () => {
|
|
152
|
-
const response = await request()
|
|
177
|
+
const response = await request()
|
|
178
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/constructor-escape?_componentSet=set')
|
|
179
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
153
180
|
expect(response.statusCode).toEqual(500);
|
|
154
181
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
155
182
|
expect(response.body).toEqual({
|
|
@@ -157,7 +184,9 @@ function renderRouteSandboxTests(request) {
|
|
|
157
184
|
});
|
|
158
185
|
});
|
|
159
186
|
it('should not allow escaping the sandbox through the constructor and calling exit', async () => {
|
|
160
|
-
const response = await request()
|
|
187
|
+
const response = await request()
|
|
188
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/constructor-escape?_componentSet=set')
|
|
189
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
161
190
|
expect(response.statusCode).toEqual(500);
|
|
162
191
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
163
192
|
expect(response.body).toEqual({
|
|
@@ -165,7 +194,9 @@ function renderRouteSandboxTests(request) {
|
|
|
165
194
|
});
|
|
166
195
|
});
|
|
167
196
|
it('should not allow escaping the sandbox through the constructor and loading restricted modules', async () => {
|
|
168
|
-
const response = await request()
|
|
197
|
+
const response = await request()
|
|
198
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/constructor-fs?_componentSet=set')
|
|
199
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
169
200
|
expect(response.body).toEqual({
|
|
170
201
|
message: "Cannot read properties of undefined (reading 'constructor')",
|
|
171
202
|
});
|
|
@@ -173,7 +204,9 @@ function renderRouteSandboxTests(request) {
|
|
|
173
204
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
174
205
|
});
|
|
175
206
|
it('should not allow circumvention of module restrictions', async () => {
|
|
176
|
-
const response = await request()
|
|
207
|
+
const response = await request()
|
|
208
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/circumventing-module-restriction?_componentSet=set')
|
|
209
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
177
210
|
expect(response.statusCode).toEqual(500);
|
|
178
211
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
179
212
|
expect(response.body).toEqual({
|
|
@@ -181,7 +214,9 @@ function renderRouteSandboxTests(request) {
|
|
|
181
214
|
});
|
|
182
215
|
});
|
|
183
216
|
it('should not allow circumvention of module restrictions with mainmodule', async () => {
|
|
184
|
-
const response = await request()
|
|
217
|
+
const response = await request()
|
|
218
|
+
.get('/r/unit-test-components/test-malicious-code/1.2.0/circumventing-module-restriction-mainmodule?_componentSet=set')
|
|
219
|
+
.set({ 'x-dxp-session': mockedSession });
|
|
185
220
|
expect(response.statusCode).toEqual(500);
|
|
186
221
|
expect(response.headers['content-type']).toEqual('application/json; charset=utf-8');
|
|
187
222
|
expect(response.body).toEqual({
|
|
@@ -190,5 +225,4 @@ function renderRouteSandboxTests(request) {
|
|
|
190
225
|
});
|
|
191
226
|
});
|
|
192
227
|
}
|
|
193
|
-
exports.renderRouteSandboxTests = renderRouteSandboxTests;
|
|
194
228
|
//# sourceMappingURL=render-route-sandbox-tests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-route-sandbox-tests.js","sourceRoot":"","sources":["../../../../src/webserver/controllers/test/render-route-sandbox-tests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-route-sandbox-tests.js","sourceRoot":"","sources":["../../../../src/webserver/controllers/test/render-route-sandbox-tests.ts"],"names":[],"mappings":"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"}
|