@squiz/component-cli-lib 1.2.1-alpha.105 → 1.2.1-alpha.107

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 (36) hide show
  1. package/.gitlab-ci.yml +18 -21
  2. package/CHANGELOG.md +16 -0
  3. package/jest.config.ts +3 -0
  4. package/lib/component-dev-folder-structures.spec.d.ts +1 -0
  5. package/lib/component-dev-folder-structures.spec.js +58 -0
  6. package/lib/component-dev-folder-structures.spec.js.map +1 -0
  7. package/lib/component-dev.d.ts +4 -1
  8. package/lib/component-dev.js +27 -18
  9. package/lib/component-dev.js.map +1 -1
  10. package/lib/component-dev.spec.js +28 -65
  11. package/lib/component-dev.spec.js.map +1 -1
  12. package/lib/integration-tests/__components__/big-package/manifest.json +3 -0
  13. package/lib/integration-tests/__components__/cmp-static-file-test/manifest.json +3 -0
  14. package/lib/integration-tests/__components__/invalid-manifest/manifest.json +3 -0
  15. package/lib/integration-tests/helper.d.ts +1 -0
  16. package/lib/integration-tests/helper.js +4 -1
  17. package/lib/integration-tests/helper.js.map +1 -1
  18. package/lib/integration-tests/service-deployment.spec.js +21 -1
  19. package/lib/integration-tests/service-deployment.spec.js.map +1 -1
  20. package/lib/integration-tests/upload-and-render-component.spec.js +24 -19
  21. package/lib/integration-tests/upload-and-render-component.spec.js.map +1 -1
  22. package/lib/upload-component-folder.d.ts +1 -1
  23. package/lib/upload-component-folder.js +9 -6
  24. package/lib/upload-component-folder.js.map +1 -1
  25. package/package.json +9 -9
  26. package/src/component-dev-folder-structures.spec.ts +69 -0
  27. package/src/component-dev.spec.ts +31 -83
  28. package/src/component-dev.ts +44 -18
  29. package/src/integration-tests/__components__/big-package/manifest.json +3 -0
  30. package/src/integration-tests/__components__/cmp-static-file-test/manifest.json +3 -1
  31. package/src/integration-tests/__components__/invalid-manifest/manifest.json +3 -0
  32. package/src/integration-tests/helper.ts +4 -0
  33. package/src/integration-tests/service-deployment.spec.ts +26 -2
  34. package/src/integration-tests/upload-and-render-component.spec.ts +51 -19
  35. package/src/upload-component-folder.ts +15 -7
  36. package/tsconfig.tsbuildinfo +1 -1
@@ -32,21 +32,29 @@ const cli_color_1 = __importDefault(require("cli-color"));
32
32
  const path_1 = __importDefault(require("path"));
33
33
  const supertest_1 = __importDefault(require("supertest"));
34
34
  const upload_component_folder_1 = require("../upload-component-folder");
35
+ const promises_1 = __importDefault(require("fs/promises"));
35
36
  const mockConsoleError = jest.fn();
36
37
  const mockConsoleLog = jest.fn();
37
38
  const orgConsoleError = console.error;
38
39
  const webPath = 'set';
40
+ const testFilesDir = path_1.default.resolve(__dirname, 'test-files');
41
+ beforeAll(async () => {
42
+ await promises_1.default.rm(testFilesDir, { force: true, recursive: true });
43
+ await promises_1.default.mkdir(testFilesDir);
44
+ });
39
45
  afterAll(async () => {
40
46
  // clean up the component added by the test
41
47
  await (0, helper_1.deleteComponentSet)(webPath);
42
48
  for (const componentName of (0, helper_1.getTestComponents)()) {
43
49
  try {
44
- await helper_1.managementService.delete(`/component/${componentName}`);
50
+ await helper_1.managementService.delete(`/component/smoke-test-components/${componentName}`);
45
51
  }
46
52
  catch {
47
53
  // no op
48
54
  }
49
55
  }
56
+ // clean up the test componnet files
57
+ await promises_1.default.rm(testFilesDir, { force: true, recursive: true });
50
58
  });
51
59
  describe('Test isolated test cases', () => {
52
60
  beforeEach(() => {
@@ -56,21 +64,21 @@ describe('Test isolated test cases', () => {
56
64
  it('Should fail uploading a component without manifest.json', async () => {
57
65
  mockConsoleError.mockClear();
58
66
  const componentPath = path_1.default.join(__dirname, '/__components__/invalid-upload');
59
- await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
67
+ await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl + '/v1', helper_1.default.renderServiceUrl, testFilesDir);
60
68
  expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('manifest could not be found'));
61
69
  });
62
70
  it('Should fail uploading a component that has invalid manifest.json', async () => {
63
71
  mockConsoleError.mockClear();
64
72
  const componentPath = path_1.default.join(__dirname, '/__components__/invalid-manifest');
65
- await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
66
- expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('/name: pattern must match pattern "^[a-zA-Z0-9_\\-]+$"'));
73
+ await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl + '/v1', helper_1.default.renderServiceUrl, testFilesDir);
74
+ expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('failed validation: /name pattern must match pattern "^[a-zA-Z0-9_\\-]+$"'));
67
75
  });
68
76
  it('Should fail uploading the component that has size more than 100MB', async () => {
69
77
  mockConsoleError.mockClear();
70
78
  const componentPath = path_1.default.join(__dirname, '/__components__/big-package');
71
79
  const filePath = `${componentPath}/105mb-file`;
72
80
  await (0, helper_1.createFile)(filePath, 105); // Higher limit has been used because compression reduces the size if you use closer to 100MB
73
- await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
81
+ await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl + '/v1', helper_1.default.renderServiceUrl, testFilesDir);
74
82
  expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red(['File size exceeds the maximum limit of 100MB'].join('')));
75
83
  (0, helper_1.removeFile)(filePath);
76
84
  });
@@ -97,20 +105,17 @@ describe('Deploy basic component having a static file', () => {
97
105
  console.error = orgConsoleError;
98
106
  });
99
107
  it('Should upload the component and return a valid url to preview', async () => {
100
- var _a, _b;
101
- mockConsoleLog.mockClear();
102
- console.log(helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
103
- await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
104
- const url = ((_a = /uploaded location: (.*)/.exec(mockConsoleLog.mock.lastCall)) === null || _a === void 0 ? void 0 : _a[1]) || '';
105
- const uploadedComponent = '<a href="/r/set/cmp-static-file-test/1.0.0">1.0.0</a>';
106
- const get = await (0, supertest_1.default)(url).get('/');
108
+ var _a;
109
+ await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl + '/v1', helper_1.default.renderServiceUrl, testFilesDir);
110
+ const uploadedComponent = '<a href="/r/set/smoke-test-components/cmp-static-file-test/1.0.0">1.0.0</a>';
111
+ const get = await (0, supertest_1.default)(helper_1.default.renderServiceUrl).get('/');
107
112
  expect(get.status).toEqual(200);
108
- expect((_b = get === null || get === void 0 ? void 0 : get.res) === null || _b === void 0 ? void 0 : _b.text).toContain(uploadedComponent);
113
+ expect((_a = get === null || get === void 0 ? void 0 : get.res) === null || _a === void 0 ? void 0 : _a.text).toContain(uploadedComponent);
109
114
  });
110
115
  it('Should fail upload the component with same version', async () => {
111
116
  mockConsoleError.mockClear();
112
- await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl, helper_1.default.renderServiceUrl);
113
- expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('Cannot upload component version, cmp-static-file-test 1.0.0 already exists'));
117
+ await (0, index_1.uploadComponentFolder)(componentPath, helper_1.default.managementServiceUrl + '/v1', helper_1.default.renderServiceUrl, testFilesDir);
118
+ expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('Cannot upload component version, smoke-test-components/cmp-static-file-test 1.0.0 already exists'));
114
119
  });
115
120
  it('Should render component', async () => {
116
121
  const componentSet = {
@@ -120,16 +125,16 @@ describe('Deploy basic component having a static file', () => {
120
125
  headers: {},
121
126
  envVars: {},
122
127
  components: {
123
- 'cmp-static-file-test': [{ envVars: {}, version: '1.0.0' }],
128
+ 'smoke-test-components/cmp-static-file-test': [{ envVars: {}, version: '1.0.0' }],
124
129
  },
125
130
  };
126
131
  await (0, helper_1.addComponentSet)(componentSet);
127
- const response = await helper_1.renderService.get('/r/set/cmp-static-file-test/1.0.0/?something=hello');
132
+ const response = await helper_1.renderService.get('/r/set/smoke-test-components/cmp-static-file-test/1.0.0/?something=hello');
128
133
  expect(response.status).toEqual(200);
129
134
  expect(response.data).toEqual([
130
135
  '<div>Input: hello</div>',
131
- '<div>cmp-static-file-test 1.0.0 ',
132
- `${helper_1.default.renderServiceUrl}/s/cmp-static-file-test/1.0.0/birthday-cake.png</div>`,
136
+ '<div>smoke-test-components/cmp-static-file-test 1.0.0 ',
137
+ `${helper_1.default.renderServiceUrl}/s/smoke-test-components/cmp-static-file-test/1.0.0/birthday-cake.png</div>`,
133
138
  ].join(''));
134
139
  });
135
140
  });
@@ -1 +1 @@
1
- {"version":3,"file":"upload-and-render-component.spec.js","sourceRoot":"","sources":["../../src/integration-tests/upload-and-render-component.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-and-render-component.spec.js","sourceRoot":"","sources":["../../src/integration-tests/upload-and-render-component.spec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { Logger } from '@squiz/dx-logger-lib';
2
2
  export declare const logger: Logger;
3
- export declare function uploadComponentFolder(folderPath: string, componentServiceManagementUrl: string, componentRenderServiceUrl: string): Promise<void>;
3
+ export declare function uploadComponentFolder(folderPath: string, componentServiceManagementUrl: string, componentRenderServiceUrl: string, baseTempDir?: string): Promise<void>;
@@ -5,16 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.uploadComponentFolder = exports.logger = void 0;
7
7
  const virus_scanner_lib_1 = require("@squiz/virus-scanner-lib");
8
- const component_lib_1 = require("@squiz/component-lib");
9
8
  const dx_common_lib_1 = require("@squiz/dx-common-lib");
9
+ const component_lib_1 = require("@squiz/component-lib");
10
10
  const promises_1 = __importDefault(require("fs/promises"));
11
11
  const path_1 = __importDefault(require("path"));
12
12
  const axios_1 = __importDefault(require("axios"));
13
13
  const cli_color_1 = __importDefault(require("cli-color"));
14
14
  const dx_logger_lib_1 = require("@squiz/dx-logger-lib");
15
15
  exports.logger = (0, dx_logger_lib_1.getLogger)({ name: 'upload-component', format: 'human' });
16
- async function uploadComponentFolder(folderPath, componentServiceManagementUrl, componentRenderServiceUrl) {
17
- const tmpDir = path_1.default.resolve(await promises_1.default.mkdtemp('cmp-upload'));
16
+ async function uploadComponentFolder(folderPath, componentServiceManagementUrl, componentRenderServiceUrl, baseTempDir = '') {
17
+ const tmpDir = await promises_1.default.mkdtemp(path_1.default.resolve(baseTempDir, 'cmp-upload'));
18
18
  try {
19
19
  const axiosInstance = axios_1.default.create({
20
20
  baseURL: componentServiceManagementUrl,
@@ -52,9 +52,12 @@ async function uploadComponentFolder(folderPath, componentServiceManagementUrl,
52
52
  }
53
53
  exports.uploadComponentFolder = uploadComponentFolder;
54
54
  async function preUploadChecks(folderPath, renderService) {
55
- const result = await (0, component_lib_1.loadManifest)(path_1.default.join(folderPath, `manifest.json`));
55
+ const service = new component_lib_1.ManifestServiceForDev(folderPath, exports.logger);
56
+ const manifestPath = path_1.default.join(folderPath, `manifest.json`);
57
+ const result = await service.readManifest(manifestPath);
58
+ await service.assertManifestIsValid(manifestPath, result.getModel());
56
59
  if (await checkIfVersionExists(result, renderService)) {
57
- throw new Error(`Cannot upload component version, ${result.name} ${result.version} already exists`);
60
+ throw new Error(`Cannot upload component version, ${result.getName()} ${result.getVersion()} already exists`);
58
61
  }
59
62
  }
60
63
  async function checkIfVersionExists(inputManifest, renderService) {
@@ -62,7 +65,7 @@ async function checkIfVersionExists(inputManifest, renderService) {
62
65
  baseURL: renderService,
63
66
  });
64
67
  try {
65
- const response = await axiosInstance.get(`d/${inputManifest.name}/${inputManifest.version}/manifest.json`);
68
+ const response = await axiosInstance.get(`d/${inputManifest.getName()}/${inputManifest.getVersion()}/manifest.json`);
66
69
  if (response.status === 200) {
67
70
  return true;
68
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"upload-component-folder.js","sourceRoot":"","sources":["../src/upload-component-folder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-component-folder.js","sourceRoot":"","sources":["../src/upload-component-folder.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAkE;AAElE,wDAAoD;AACpD,wDAAuE;AACvE,2DAA8B;AAC9B,gDAAwB;AACxB,kDAAwE;AACxE,0DAA8B;AAC9B,wDAAyD;AAE5C,QAAA,MAAM,GAAW,IAAA,yBAAS,EAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAEhF,KAAK,UAAU,qBAAqB,CACzC,UAAkB,EAClB,6BAAqC,EACrC,yBAAiC,EACjC,cAAsB,EAAE;IAExB,MAAM,MAAM,GAAG,MAAM,kBAAG,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAE1E,IAAI;QACF,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,MAAM,eAAe,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAC7D,cAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,IAAA,4BAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEnD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAM,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAExF,cAAM,CAAC,IAAI,CAAC,kBAAkB,aAAa,CAAC,EAAE,uBAAuB,CAAC,CAAC;QACvE,MAAM,IAAA,8BAAU,EAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAErC,MAAM,oCAAoC,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAE5E,cAAM,CAAC,IAAI,CAAC,kBAAkB,aAAa,CAAC,EAAE,qCAAqC,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAM,aAAa,CAAC,IAAI,CAAC,yBAAyB,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAE1G,MAAM,kBAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;YAClC,cAAM,CAAC,IAAI,CAAC,kBAAkB,aAAa,CAAC,EAAE,YAAY,mBAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACpF,cAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;SACxD;aAAM;YACL,cAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,mBAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;SACjE;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,kBAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,KAAK,EAAE;YACtB,cAAM,CAAC,KAAK,CAAC,mBAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SACpC;aAAM;YACL,MAAM,CAAC,CAAC;SACT;KACF;AACH,CAAC;AA/CD,sDA+CC;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,aAAqB;IACtE,MAAM,OAAO,GAAG,IAAI,qCAAqB,CAAC,UAAU,EAAE,cAAM,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,OAAO,CAAC,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErE,IAAI,MAAM,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;KAC/G;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,aAAuB,EAAE,aAAqB;IAChF,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;QACjC,OAAO,EAAE,aAAa;KACvB,CAAC,CAAC;IAEH,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,CACtC,KAAK,aAAa,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAC3E,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;KAChE;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,MAAK,GAAG,EAAE;gBAC5B,OAAO,KAAK,CAAC;aACd;SACF;QACD,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAED,KAAK,UAAU,oCAAoC,CAAC,EAAU,EAAE,aAA4B;IAC1F,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,cAAc,CAAa,aAAa,CAAC,GAAG,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC,CAAC;IAElG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACxB,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE;gBAC3B,OAAO,EAAE,CAAC;aACX;iBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE;gBAClC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;aAC9C;iBAAM;gBACL,UAAU,CAAC,KAAK,IAAI,EAAE;oBACpB,MAAM,OAAO,EAAE,CAAC;gBAClB,CAAC,EAAE,IAAI,CAAC,CAAC;aACV;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAI,aAAwC;IACvE,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;QACrC,OAAO,QAAQ,CAAC,IAAI,CAAC;KACtB;IAAC,OAAO,KAAK,EAAE;QACd,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;KAC1B;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAU;IAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACrC,OAAO,KAAK,CAAC;KACd;IACD,MAAM,OAAO,GAAI,QAAQ,CAAC,IAAY,CAAC,OAAO,CAAC;IAC/C,IAAI,OAAO,EAAE;QACX,OAAO,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,cAAc,OAAO,EAAE,CAAC,CAAC;KACtF;SAAM;QACL,OAAO,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KAClE;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAU;IAC9B,OAAO,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/component-cli-lib",
3
- "version": "1.2.1-alpha.105",
3
+ "version": "1.2.1-alpha.107",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -15,27 +15,27 @@
15
15
  "devDependencies": {
16
16
  "@types/cli-color": "2.0.2",
17
17
  "@types/express": "4.17.13",
18
- "@types/jest": "28.1.6",
18
+ "@types/jest": "28.1.8",
19
19
  "@types/node": "17.0.27",
20
20
  "@types/supertest": "2.0.12",
21
21
  "dotenv": "16.0.1",
22
22
  "eslint": "8.22.0",
23
23
  "jest": "28.1.3",
24
- "ts-jest": "28.0.7",
24
+ "ts-jest": "28.0.8",
25
25
  "ts-loader": "9.3.1",
26
26
  "ts-node": "10.9.1",
27
27
  "typescript": "4.7.4"
28
28
  },
29
29
  "dependencies": {
30
- "@squiz/component-lib": "^1.2.1-alpha.105",
31
- "@squiz/dx-common-lib": "^1.2.1-alpha.105",
32
- "@squiz/dx-logger-lib": "^1.2.1-alpha.105",
33
- "@squiz/render-runtime-lib": "^1.2.1-alpha.105",
34
- "@squiz/virus-scanner-lib": "^1.2.1-alpha.105",
30
+ "@squiz/component-lib": "^1.2.1-alpha.107",
31
+ "@squiz/dx-common-lib": "^1.2.1-alpha.107",
32
+ "@squiz/dx-logger-lib": "^1.2.1-alpha.107",
33
+ "@squiz/render-runtime-lib": "^1.2.1-alpha.107",
34
+ "@squiz/virus-scanner-lib": "^1.2.1-alpha.107",
35
35
  "archiver": "5.3.1",
36
36
  "axios": "0.27.2",
37
37
  "cli-color": "^2.0.2",
38
38
  "supertest": "^6.2.3"
39
39
  },
40
- "gitHead": "2fb607898c33eccaebfa4011c72f8bec36add30c"
40
+ "gitHead": "dc09e24c89b0f6d6afd23e958523cf9c9add89ec"
41
41
  }
@@ -0,0 +1,69 @@
1
+ import supertest from 'supertest';
2
+ import path from 'path';
3
+ import fsp from 'fs/promises';
4
+
5
+ import { TestHelpers } from '@squiz/render-runtime-lib';
6
+ import { startDevelopmentRender } from './component-dev';
7
+ import { Server } from 'http';
8
+
9
+ jest.setTimeout(20_000);
10
+
11
+ describe('component-dev', () => {
12
+ describe('production style folder structure', () => {
13
+ let server: Server;
14
+ let request: supertest.SuperTest<supertest.Test>;
15
+ beforeAll(async () => {
16
+ server = startDevelopmentRender(TestHelpers.getTestComponentFolder(), { port: 0 });
17
+ request = supertest(server);
18
+ });
19
+
20
+ afterAll(async () => {
21
+ server.close();
22
+ });
23
+
24
+ it('should find the component', async () => {
25
+ const response = await request.get(`/r/set/unit-test-components/test-component/1.0.0?something=hello`);
26
+ expect(response.text).toEqual('<h1>hello</h1>');
27
+ });
28
+ });
29
+
30
+ describe('local developer style folders', () => {
31
+ let version: string;
32
+ let componentName: string;
33
+ let fixtureDirectory: string;
34
+ let server: Server;
35
+ let request: supertest.SuperTest<supertest.Test>;
36
+
37
+ beforeAll(async () => {
38
+ const {
39
+ fixtureDirectory: createdFixtureDirectory,
40
+ version: createdVersion,
41
+ componentName: createdName,
42
+ } = await TestHelpers.ComponentFixture.setupFullComponentDirectory('<h1>Hello World</h1>');
43
+
44
+ version = createdVersion;
45
+ fixtureDirectory = createdFixtureDirectory;
46
+ componentName = createdName;
47
+
48
+ server = startDevelopmentRender(fixtureDirectory, { port: 0 });
49
+ request = supertest(server);
50
+ });
51
+ afterAll(async () => {
52
+ server.close();
53
+ });
54
+
55
+ afterAll(async () => {
56
+ await fsp.rm(path.join(fixtureDirectory, componentName), { force: true, recursive: true });
57
+ });
58
+
59
+ it('should handle recursing folders to find the component', async () => {
60
+ const response = await request.get(`/r/set/some-namespace/${componentName}/${version}/`);
61
+ expect(response.text).toEqual('<h1>Hello World</h1>');
62
+ });
63
+
64
+ it('should handle serving static files from single component directory', async () => {
65
+ const response = await request.get(`/s/some-namespace/${componentName}/${version}/static.txt`);
66
+ expect(response.text).toEqual('hello');
67
+ });
68
+ });
69
+ });
@@ -1,110 +1,58 @@
1
- import path from 'path';
2
- import fsp from 'fs/promises';
3
-
4
1
  import { routeTests, TestHelpers } from '@squiz/render-runtime-lib';
5
2
  import { startDevelopmentRender } from './component-dev';
6
3
  import supertest from 'supertest';
4
+ import { Server } from 'http';
7
5
 
8
6
  jest.setTimeout(20_000);
9
7
 
10
8
  describe('component-dev', () => {
11
- describe('production style folder structure', () => {
12
- let doStopStack: Awaited<ReturnType<typeof startDevelopmentRender>>;
13
-
14
- beforeAll(async () => {
15
- doStopStack = await startDevelopmentRender(path.join(__dirname, '../../../test-components'), { port: 0 });
16
- });
17
-
18
- afterAll(async () => {
19
- await doStopStack();
20
- });
21
-
22
- it('should find the component', async () => {
23
- const testServer = TestHelpers.getTestServer();
24
- const response = await testServer.get(`/r/set/test-component/1.0.0?something=hello`);
25
- expect(response.text).toEqual('<h1>hello</h1>');
26
- });
27
- });
28
-
29
- describe('local developer style folders', () => {
30
- let doStopStack: Awaited<ReturnType<typeof startDevelopmentRender>>;
31
- let version: string;
32
- let componentName: string;
33
- let fixtureDirectory: string;
34
-
9
+ describe('accessing local dev routes', () => {
10
+ let server: Server;
11
+ let request: supertest.SuperTest<supertest.Test>;
35
12
  beforeAll(async () => {
36
- const {
37
- fixtureDirectory: ceratedFixtureDirectory,
38
- version: createdVersion,
39
- componentName: createdName,
40
- } = await TestHelpers.ComponentFixture.setupFullComponentDirectory('<h1>Hello World</h1>');
41
-
42
- version = createdVersion;
43
- fixtureDirectory = ceratedFixtureDirectory;
44
- componentName = createdName;
45
-
46
- doStopStack = await startDevelopmentRender(fixtureDirectory, { port: 0 });
13
+ server = startDevelopmentRender(TestHelpers.getTestComponentFolder(), { port: 0 });
14
+ request = supertest(server);
47
15
  });
48
16
 
49
17
  afterAll(async () => {
50
- await doStopStack();
51
- await fsp.rm(path.join(fixtureDirectory, componentName), { force: true, recursive: true });
18
+ server.close();
52
19
  });
53
20
 
54
- it('should handle recursing folders to find the component', async () => {
55
- const testServer = TestHelpers.getTestServer();
56
- const response = await testServer.get(`/r/set/${componentName}/${version}/`);
57
- expect(response.text).toEqual('<h1>Hello World</h1>');
58
- });
21
+ it('should fail validation when requesting a function with a missing entry file', async () => {
22
+ const response = await request.get(
23
+ '/r/set/unit-test-components/test-component/1.0.3/non-existent-entry-file?something=not-used',
24
+ );
59
25
 
60
- it('should handle serving static files from single component directory', async () => {
61
- const testServer = TestHelpers.getTestServer();
62
- const response = await testServer.get(`/s/${componentName}/${version}/static.txt`);
63
- expect(response.text).toEqual('hello');
64
- });
65
- });
66
-
67
- describe('accessing local dev routes', () => {
68
- let stopServer: Awaited<ReturnType<typeof startDevelopmentRender>>;
69
- const port = 3006;
70
- const url = `http://localhost:${port}`;
71
- const request = supertest(url);
72
-
73
- beforeAll(async () => {
74
- const compDir = path.join(__dirname, '../', '../../test-components');
75
-
76
- stopServer = await startDevelopmentRender(compDir, {
77
- port: port,
26
+ expect(response.body).toEqual({
27
+ message: '"main\'s" entry file "missing-entry-file.js" is inaccessible',
78
28
  });
79
- });
80
-
81
- afterAll(async () => {
82
- await stopServer();
29
+ expect(response.statusCode).toEqual(500);
83
30
  });
84
31
 
85
32
  describe('definition routes', () => {
86
- routeTests.definition(url, url);
33
+ const server = startDevelopmentRender(TestHelpers.getTestComponentFolder(), { port: 0 });
34
+ const request = () => supertest(server);
35
+ routeTests.definition(request, 'http://localhost:0');
36
+ afterAll(() => {
37
+ server.close();
38
+ });
87
39
  });
88
40
 
89
41
  describe('static routes', () => {
90
- routeTests.static(url);
42
+ const server = startDevelopmentRender(TestHelpers.getTestComponentFolder(), { port: 0 });
43
+ const request = () => supertest(server);
44
+ routeTests.static(request);
45
+ afterAll(() => {
46
+ server.close();
47
+ });
91
48
  });
92
49
 
93
50
  describe('render routes', () => {
94
- routeTests.render(url, url);
95
- });
96
-
97
- describe('GET /r/set/test-component/1.0.1', () => {
98
- //
99
- // this scenario is different to the 'production' tests
100
- // this is should 500 in prod and 404 locally
101
- it('should fail validation if trying to render a component with an invalid schema', async () => {
102
- const response = await request.get('/r/set/test-component/1.0.1?something=not-used');
103
-
104
- expect(response.statusCode).toEqual(404);
105
- expect(response.body).toEqual({
106
- message: 'manifest could not be found',
107
- });
51
+ const server = startDevelopmentRender(TestHelpers.getTestComponentFolder(), { port: 0 });
52
+ const request = () => supertest(server);
53
+ routeTests.render(request, 'http://localhost:0');
54
+ afterAll(() => {
55
+ server.close();
108
56
  });
109
57
  });
110
58
  });
@@ -1,6 +1,11 @@
1
- import { startRenderStack, stopRenderStack } from '@squiz/render-runtime-lib';
2
- import { getLogger } from '@squiz/dx-logger-lib';
1
+ import {
2
+ ComponentPreviewService,
3
+ ComponentRunnerServiceWithWorkers,
4
+ setupRenderRuntimeServer,
5
+ } from '@squiz/render-runtime-lib';
6
+ import { getLogger, LoggerOptions } from '@squiz/dx-logger-lib';
3
7
  import path from 'path';
8
+ import { ComponentFunctionService, ComponentSetServiceForLocalDev, ManifestServiceForDev } from '@squiz/component-lib';
4
9
 
5
10
  /**
6
11
  * startDevelopmentRender starts a dev-mode render stack for any
@@ -11,24 +16,45 @@ import path from 'path';
11
16
  * @param {object} options - Additional configuration for the dev stack
12
17
  * @returns a function to stop the render stack
13
18
  */
14
- export async function startDevelopmentRender(componentPath: string, options: { port: number; previewFile?: string }) {
15
- const logger = getLogger({ name: 'component-dev', format: 'human' });
16
- await startRenderStack({
17
- logger: logger,
18
- webserver: {
19
- port: options.port,
20
- rootUrl: `http://localhost:${options.port}`,
21
- shouldRunMigrations: false,
19
+ export function startDevelopmentRender(
20
+ componentPath: string,
21
+ options: { port: number; previewFile?: string; loggingFormat?: LoggerOptions['format'] },
22
+ ) {
23
+ const logger = getLogger({ name: 'component-dev', format: options.loggingFormat || 'human' });
24
+ const rootUrl = `http://localhost:${options.port}`;
25
+ const dataMountPoint = path.resolve(process.cwd(), componentPath);
26
+
27
+ const componentRunnerService = new ComponentRunnerServiceWithWorkers(
28
+ {
29
+ dataMountPoint,
30
+ shouldCacheResponses: false,
31
+ workerTimeout: 5_000,
22
32
  },
23
- componentRunner: {
24
- // Considering the component path will be passed in from CLI
25
- // We need to generate the path from the calling directory
26
- dataMountPoint: path.resolve(process.cwd(), componentPath),
27
- localDevMode: true,
28
- previewFile: options.previewFile,
29
- workerTimeout: 20_000,
33
+ logger,
34
+ );
35
+ const webServer = setupRenderRuntimeServer(
36
+ {
37
+ logger,
38
+ componentRunnerService,
39
+ componentSetService: new ComponentSetServiceForLocalDev(logger),
40
+ componentFunctionService: new ComponentFunctionService(rootUrl),
41
+ componentPreviewService: new ComponentPreviewService(options.previewFile),
42
+ manifestService: new ManifestServiceForDev(dataMountPoint, logger),
30
43
  },
44
+ { rootUrl },
45
+ );
46
+
47
+ const server = webServer.listen(options.port, () => {
48
+ logger.info(`Component development webserver started on port ${options.port}`);
49
+ });
50
+
51
+ server.on('close', async () => {
52
+ await componentRunnerService.stop();
53
+ });
54
+
55
+ process.on('SIGINT', () => {
56
+ server.close();
31
57
  });
32
58
 
33
- return () => stopRenderStack();
59
+ return server;
34
60
  }
@@ -4,6 +4,9 @@
4
4
  "name": "big-package",
5
5
  "version": "1.0.2",
6
6
  "main-function": "render-json",
7
+ "namespace": "smoke-test-components",
8
+ "display-name": "some-display-name",
9
+ "description": "some-description",
7
10
  "functions": [
8
11
  {
9
12
  "name": "render-json",
@@ -4,7 +4,9 @@
4
4
  "name": "cmp-static-file-test",
5
5
  "version": "1.0.0",
6
6
  "main-function": "main",
7
-
7
+ "namespace": "smoke-test-components",
8
+ "display-name": "some-display-name",
9
+ "description": "some-description",
8
10
  "functions": [
9
11
  {
10
12
  "entry": "main.js",
@@ -4,6 +4,9 @@
4
4
  "name": "invalid-manifes@t",
5
5
  "version": "1.0.0",
6
6
  "main-function": "main",
7
+ "namespace": "smoke-test-components",
8
+ "display-name": "some-display-name",
9
+ "description": "some-description",
7
10
 
8
11
  "functions": [
9
12
  {
@@ -27,6 +27,10 @@ const configObj: Config = {
27
27
  export default configObj;
28
28
 
29
29
  export const managementService = axios.create({
30
+ baseURL: configObj.managementServiceUrl + '/v1',
31
+ });
32
+
33
+ export const managementServiceRoot = axios.create({
30
34
  baseURL: configObj.managementServiceUrl,
31
35
  });
32
36
 
@@ -1,4 +1,4 @@
1
- import { renderService, managementService, ci_buildVersion, ci_buildBranch } from './helper';
1
+ import { renderService, managementService, managementServiceRoot, ci_buildVersion, ci_buildBranch } from './helper';
2
2
 
3
3
  interface HealthInfo {
4
4
  status: string;
@@ -8,14 +8,38 @@ interface HealthInfo {
8
8
 
9
9
  describe('Verify latest services deployments', () => {
10
10
  it('Should have latest Management API service', async () => {
11
- const response: HealthInfo = (await managementService.get('/health')).data;
11
+ const response: HealthInfo = (await managementServiceRoot.get('/health')).data;
12
12
  expect(response.buildVersion).toBe(ci_buildVersion);
13
13
  expect(response.buildBranch).toBe(ci_buildBranch);
14
14
  });
15
15
 
16
+ it('Should return 200 for Management API docs', async () => {
17
+ const req = await managementService.get('/docs');
18
+ expect(req.status).toBe(200);
19
+ expect(req.headers['content-type']).toEqual('text/html; charset=utf-8');
20
+ });
21
+
22
+ it('Should return 200 for Management API docs.json', async () => {
23
+ const req = await managementService.get('/docs.json');
24
+ expect(req.status).toBe(200);
25
+ expect(req.headers['content-type']).toEqual('application/json; charset=UTF-8');
26
+ });
27
+
16
28
  it('Should have latest Render Runtime service', async () => {
17
29
  const response: HealthInfo = (await renderService.get('/health')).data;
18
30
  expect(response.buildVersion).toBe(ci_buildVersion);
19
31
  expect(response.buildBranch).toBe(ci_buildBranch);
20
32
  });
33
+
34
+ it('Should return 200 for Render Runtime API docs', async () => {
35
+ const req = await renderService.get('/docs');
36
+ expect(req.status).toBe(200);
37
+ expect(req.headers['content-type']).toEqual('text/html; charset=utf-8');
38
+ });
39
+
40
+ it('Should return 200 for Render Runtime API docs.json', async () => {
41
+ const req = await renderService.get('/docs.json');
42
+ expect(req.status).toBe(200);
43
+ expect(req.headers['content-type']).toEqual('application/json; charset=UTF-8');
44
+ });
21
45
  });