@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
package/lib/ioc.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iocContainer = exports.initIocContainer = void 0;
4
+ const inversify_1 = require("inversify");
5
+ const inversify_binding_decorators_1 = require("inversify-binding-decorators");
6
+ const tsoa_1 = require("tsoa");
7
+ (0, inversify_1.decorate)((0, inversify_1.injectable)(), tsoa_1.Controller); // Makes tsoa's Controller injectable
8
+ // The services are tied to the Express application and then injected into
9
+ // the controllers on each request. Ideally the services are under "request.app.locals"
10
+ // rather then directly on the "request" but the Express typing doesn't allow it nicely
11
+ let iocContainer;
12
+ exports.iocContainer = iocContainer;
13
+ const initIocContainer = (services, config) => {
14
+ const container = new inversify_1.Container();
15
+ container.load((0, inversify_binding_decorators_1.buildProviderModule)());
16
+ container.bind('Config').toConstantValue(config);
17
+ container.bind('Sandbox').toConstantValue(services.sandbox);
18
+ container.bind('Logger').toConstantValue(services.logger);
19
+ container
20
+ .bind('ComponentFunctionService')
21
+ .toConstantValue(services.componentFunctionService);
22
+ container.bind('ComponentRunnerService').toConstantValue(services.componentRunnerService);
23
+ container.bind('ComponentSetService').toConstantValue(services.componentSetService);
24
+ container.bind('ManifestService').toConstantValue(services.manifestService);
25
+ container.bind('RenderInputService').toConstantValue(services.renderInputService);
26
+ container.bind('HealthCheckService').toConstantValue(services.healthCheckService);
27
+ container.bind('ComponentPreviewService').toConstantValue(services.componentPreviewService);
28
+ container.bind('ContentItemService').toConstantValue(services.contentItemService);
29
+ container.bind('ApiKeyValidationService').toConstantValue(services.apiKeyService);
30
+ container
31
+ .bind('ComponentRootUrlResolver')
32
+ .toConstantValue(services.componentRootUrlResolver);
33
+ exports.iocContainer = iocContainer = container;
34
+ return container;
35
+ };
36
+ exports.initIocContainer = initIocContainer;
37
+ //# sourceMappingURL=ioc.js.map
package/lib/ioc.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ioc.js","sourceRoot":"","sources":["../src/ioc.ts"],"names":[],"mappings":";;;AAAA,yCAA4D;AAC5D,+EAAmE;AACnE,+BAAgD;AAYhD,IAAA,oBAAQ,EAAC,IAAA,sBAAU,GAAE,EAAE,iBAAU,CAAC,CAAC,CAAC,qCAAqC;AAqBzE,0EAA0E;AAC1E,uFAAuF;AACvF,uFAAuF;AACvF,IAAI,YAA0B,CAAC;AA4BtB,oCAAY;AA1Bd,MAAM,gBAAgB,GAAG,CAAC,QAAkB,EAAE,MAAc,EAAE,EAAE;IACrE,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IAClC,SAAS,CAAC,IAAI,CAAC,IAAA,kDAAmB,GAAE,CAAC,CAAC;IACtC,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACzD,SAAS,CAAC,IAAI,CAAU,SAAS,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrE,SAAS,CAAC,IAAI,CAAS,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClE,SAAS;SACN,IAAI,CAA2B,0BAA0B,CAAC;SAC1D,eAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACtD,SAAS,CAAC,IAAI,CAAyB,wBAAwB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAClH,SAAS,CAAC,IAAI,CAAsB,qBAAqB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACzG,SAAS,CAAC,IAAI,CAAkB,iBAAiB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC7F,SAAS,CAAC,IAAI,CAAqB,oBAAoB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtG,SAAS,CAAC,IAAI,CAAiC,oBAAoB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAClH,SAAS,CAAC,IAAI,CAA0B,yBAAyB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACrH,SAAS,CAAC,IAAI,CAAiC,oBAAoB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAClH,SAAS,CAAC,IAAI,CAA0B,yBAAyB,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3G,SAAS;SACN,IAAI,CAA2B,0BAA0B,CAAC;SAC1D,eAAe,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAEtD,uBAAA,YAAY,GAAG,SAAS,CAAC;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAvBW,QAAA,gBAAgB,oBAuB3B"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ComponentFixture = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const strict_1 = __importDefault(require("assert/strict"));
10
+ const stack_1 = require("./stack");
11
+ const crypto_1 = require("crypto");
12
+ const FIXTURE_NAMESPACE = 'some-namespace';
13
+ class ComponentFixture {
14
+ static getFixtureRootDirectory() {
15
+ if (this.fixtureRootDirectory === undefined) {
16
+ this.fixtureRootDirectory = path_1.default.join((0, stack_1.getTestComponentFolder)(), 'fixtures');
17
+ }
18
+ return this.fixtureRootDirectory;
19
+ }
20
+ static async setupFullComponentDirectory(returnObj, { raw = false } = {}) {
21
+ const fixtureDirectory = await this.createFixtureDirectory();
22
+ const { directory: componentDirectory, version } = await this.createVersionDirectory(fixtureDirectory);
23
+ const manifest = await this.createManifest(componentDirectory, { version, staticFilesRoot: 'static' });
24
+ await promises_1.default.writeFile(path_1.default.join(componentDirectory, 'main.js'), jsFileData(returnObj, { raw }));
25
+ await promises_1.default.mkdir(path_1.default.join(componentDirectory, 'static'));
26
+ await promises_1.default.writeFile(path_1.default.join(componentDirectory, 'static', 'static.txt'), 'hello');
27
+ return { fixtureDirectory, componentDirectory, version, manifest, componentName: path_1.default.basename(fixtureDirectory) };
28
+ }
29
+ static async new(returnObj, { raw = false, environment = [], set = getTestSet() } = {}) {
30
+ const fixtureDirectory = await this.createFixtureDirectory();
31
+ const componentPath = path_1.default.join(fixtureDirectory, 'main.js');
32
+ const data = jsFileData(returnObj, { raw });
33
+ await promises_1.default.writeFile(componentPath, data);
34
+ return {
35
+ requestId: path_1.default.basename(fixtureDirectory),
36
+ functionEntryFilePath: componentPath,
37
+ args: [{}],
38
+ environment: set.environment,
39
+ manifest: {
40
+ name: path_1.default.basename(fixtureDirectory),
41
+ namespace: this.namespace,
42
+ displayName: 'some-display-name',
43
+ description: 'some-description',
44
+ version: '1.0.0',
45
+ $schema: '',
46
+ mainFunction: 'main.js',
47
+ environment,
48
+ functions: [
49
+ {
50
+ entry: 'main.js',
51
+ name: 'main',
52
+ input: {},
53
+ output: {
54
+ responseType: 'html',
55
+ },
56
+ },
57
+ ],
58
+ },
59
+ componentFullName: path_1.default.basename(fixtureDirectory),
60
+ runtimeSet: set,
61
+ componentRootUrl: 'http://localhost:3000',
62
+ previewKey: undefined,
63
+ componentFunction: {
64
+ entry: componentPath,
65
+ input: {},
66
+ name: 'main',
67
+ output: {
68
+ responseType: 'html',
69
+ },
70
+ },
71
+ };
72
+ }
73
+ static async updateComponent(component, output) {
74
+ strict_1.default.ok(component.functionEntryFilePath.startsWith(this.getFixtureRootDirectory()));
75
+ await promises_1.default.writeFile(component.functionEntryFilePath, jsFileData(output));
76
+ return component;
77
+ }
78
+ static async createFixtureDirectory() {
79
+ const fixtureName = generateRandomName();
80
+ const fixturePath = path_1.default.join(this.getFixtureRootDirectory(), fixtureName);
81
+ await promises_1.default.mkdir(fixturePath, { recursive: true });
82
+ return fixturePath;
83
+ }
84
+ static async createVersionDirectory(fixtureDirectory) {
85
+ // TODO: Make the version automatic and random
86
+ const version = '1.0.1';
87
+ const directory = path_1.default.join(fixtureDirectory, version);
88
+ await promises_1.default.mkdir(directory);
89
+ return { directory, version };
90
+ }
91
+ static async createManifest(componentDirectory, options = {}) {
92
+ var _a, _b, _c, _d;
93
+ // If the version has been set, we can assume that the component directory
94
+ // has a version as part of the path so we can strip it out
95
+ // This is probably unnecessary to do, but could be helpful
96
+ const name = path_1.default.basename(componentDirectory) === options.version
97
+ ? path_1.default.basename(path_1.default.dirname(componentDirectory))
98
+ : path_1.default.basename(componentDirectory);
99
+ const manifest = {
100
+ $schema: 'http://localhost:3000/schemas/v1.json#',
101
+ name,
102
+ namespace: this.namespace,
103
+ displayName: 'some-display-name',
104
+ description: 'some-description',
105
+ version: (_a = options.version) !== null && _a !== void 0 ? _a : '1.0.0',
106
+ mainFunction: (_b = options.mainFunction) !== null && _b !== void 0 ? _b : 'main',
107
+ functions: [
108
+ {
109
+ name: (_c = options.mainFunction) !== null && _c !== void 0 ? _c : 'main',
110
+ entry: ((_d = options.mainFunction) !== null && _d !== void 0 ? _d : 'main') + '.js',
111
+ input: {},
112
+ output: {
113
+ responseType: 'html',
114
+ },
115
+ },
116
+ ],
117
+ };
118
+ if (options.staticFilesRoot) {
119
+ manifest.staticFiles = {
120
+ locationRoot: options.staticFilesRoot,
121
+ };
122
+ }
123
+ await promises_1.default.writeFile(path_1.default.join(componentDirectory, 'manifest.json'), JSON.stringify(manifest));
124
+ return manifest;
125
+ }
126
+ }
127
+ exports.ComponentFixture = ComponentFixture;
128
+ ComponentFixture.fixtureRootDirectory = undefined;
129
+ ComponentFixture.namespace = FIXTURE_NAMESPACE;
130
+ function jsFileData(input, { raw = false } = {}) {
131
+ // Unsure how best to handle this
132
+ if (raw) {
133
+ return `module.exports = (input, info) => ${input}`;
134
+ }
135
+ if (typeof input === 'string') {
136
+ return `module.exports = () => "${input}"`;
137
+ }
138
+ else {
139
+ return `module.exports = () => JSON.parse(${JSON.stringify(input)})`;
140
+ }
141
+ }
142
+ function getTestSet() {
143
+ return {
144
+ displayName: 'test-fixture-components',
145
+ webPath: 'test-fixture-components',
146
+ environment: {},
147
+ };
148
+ }
149
+ function generateRandomName() {
150
+ return 'test-' + (0, crypto_1.randomUUID)();
151
+ }
152
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/test/helpers/fixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TestServer = exports.getTestWebServer = exports.setupTestApp = exports.getTestComponentFolder = exports.createTestSandbox = exports.testComponentLogger = exports.testLogger = void 0;
7
+ const http_1 = __importDefault(require("http"));
8
+ const supertest_1 = __importDefault(require("supertest"));
9
+ const child_process_1 = require("child_process");
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const runtime_sandbox_node_1 = require("@squiz/runtime-sandbox-node");
13
+ const dx_logger_lib_1 = require("@squiz/dx-logger-lib");
14
+ const webserver_1 = require("../../webserver");
15
+ const component_lib_1 = require("@squiz/component-lib");
16
+ const component_runner_1 = require("../../component-runner");
17
+ const PreviewComponentService_1 = require("../../PreviewComponentService");
18
+ const dx_common_lib_1 = require("@squiz/dx-common-lib");
19
+ const RenderInputService_1 = require("../../RenderInputService");
20
+ const component_logger_lib_1 = require("@squiz/component-logger-lib");
21
+ exports.testLogger = (0, dx_logger_lib_1.getLogger)({
22
+ name: 'render-runtime-lib-test',
23
+ meta: {
24
+ hostname: os_1.default.hostname(),
25
+ pid: process.pid,
26
+ },
27
+ silent: true,
28
+ });
29
+ exports.testComponentLogger = new component_logger_lib_1.ComponentLogger({
30
+ enabled: false,
31
+ tenantId: 'test-tenant-id',
32
+ logUrl: 'http://some.url',
33
+ key: 'some-key',
34
+ tags: 'tag-foo tag-foo2',
35
+ serviceName: 'some-service',
36
+ });
37
+ const createTestSandbox = () => new runtime_sandbox_node_1.NodeSandbox({
38
+ workerPool: {
39
+ shouldCacheResponses: false,
40
+ workerLimits: {
41
+ minWorkers: 2,
42
+ maxWorkers: 2,
43
+ },
44
+ },
45
+ });
46
+ exports.createTestSandbox = createTestSandbox;
47
+ function getTestComponentFolder() {
48
+ const rootDir = (0, child_process_1.execSync)('git rev-parse --show-toplevel', { encoding: 'utf-8' }).replace(/\n$/, '');
49
+ return path_1.default.resolve(rootDir, 'test-components');
50
+ }
51
+ exports.getTestComponentFolder = getTestComponentFolder;
52
+ function setupTestApp(services = {}, config = {}) {
53
+ const dataMount = getTestComponentFolder();
54
+ // While the actual port is random, we want a stable URL for the tests
55
+ const componentRootUrlResolver = () => 'http://localhost:3000';
56
+ const apiKeyService = new dx_common_lib_1.DevelopmentApiKeyService();
57
+ const sandbox = services.sandbox || (0, exports.createTestSandbox)();
58
+ const componentRunnerService = new component_runner_1.ComponentRunnerServiceWithWorkers(sandbox, exports.testLogger, exports.testComponentLogger);
59
+ const componentFunctionService = new component_lib_1.ComponentFunctionService();
60
+ const componentSetService = new component_lib_1.ComponentSetServiceForLocalDev(exports.testLogger);
61
+ const manifestService = new component_lib_1.ManifestServiceForProduction(dataMount, exports.testLogger);
62
+ const contentItemService = undefined;
63
+ const renderInputService = new RenderInputService_1.RenderInputService(apiKeyService, componentSetService, manifestService, componentFunctionService, contentItemService, componentRootUrlResolver);
64
+ const app = (0, webserver_1.setupApp)({
65
+ componentFunctionService,
66
+ componentSetService,
67
+ manifestService,
68
+ componentRunnerService,
69
+ contentItemService,
70
+ renderInputService,
71
+ logger: exports.testLogger,
72
+ apiKeyService,
73
+ componentPreviewService: new PreviewComponentService_1.ComponentPreviewService(),
74
+ sandbox,
75
+ componentRootUrlResolver,
76
+ ...services,
77
+ }, config);
78
+ return { server: http_1.default.createServer(app), app };
79
+ }
80
+ exports.setupTestApp = setupTestApp;
81
+ function getTestWebServer(services = {}) {
82
+ const { server, app } = setupTestApp(services);
83
+ const agent = (0, supertest_1.default)(server);
84
+ server.on('close', async () => {
85
+ for (const service of Object.values(app.request.services)) {
86
+ if (service && typeof service.stop === 'function') {
87
+ await service.stop();
88
+ }
89
+ }
90
+ });
91
+ return agent;
92
+ }
93
+ exports.getTestWebServer = getTestWebServer;
94
+ class TestServer {
95
+ constructor(services = {}, config = {}) {
96
+ const { server, app } = setupTestApp(services, config);
97
+ this.server = server;
98
+ this.server.on('close', async () => {
99
+ for (const service of Object.values(app.request.services)) {
100
+ if (service && typeof service.stop === 'function') {
101
+ await service.stop();
102
+ }
103
+ }
104
+ });
105
+ this.app = app;
106
+ }
107
+ get request() {
108
+ if (!this.server.listening) {
109
+ throw new Error('Server not listening');
110
+ }
111
+ return (0, supertest_1.default)(this.server);
112
+ }
113
+ start() {
114
+ this.server.listen(0);
115
+ }
116
+ stop() {
117
+ this.server.close();
118
+ }
119
+ }
120
+ exports.TestServer = TestServer;
121
+ //# sourceMappingURL=stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../../../src/test/helpers/stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./helpers/stack"), exports);
18
+ __exportStar(require("./helpers/fixtures"), exports);
19
+ __exportStar(require("./mock-services/MockedComponentSetService"), exports);
20
+ __exportStar(require("./mock-services/MockedContentItemService"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,qDAAmC;AACnC,4EAA0D;AAC1D,2EAAyD"}