@squiz/component-cli-lib 1.2.13-alpha.3 → 1.2.13-alpha.5
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/CHANGELOG.md +22 -0
- package/build.js +23 -0
- package/lib/index.js +247 -8
- package/lib/index.js.map +7 -1
- package/package.json +12 -10
- package/tsconfig.json +4 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/component-dev-folder-structures.integration.spec.js +0 -73
- package/lib/component-dev-folder-structures.integration.spec.js.map +0 -1
- package/lib/component-dev.integration.spec.js +0 -57
- package/lib/component-dev.integration.spec.js.map +0 -1
- package/lib/component-dev.js +0 -65
- package/lib/component-dev.js.map +0 -1
- package/lib/integration-tests/__components__/big-package/manifest.json +0 -35
- package/lib/integration-tests/__components__/cmp-format-string/manifest.json +0 -40
- package/lib/integration-tests/__components__/cmp-static-file-test/manifest.json +0 -39
- package/lib/integration-tests/__components__/invalid-manifest/manifest.json +0 -27
- package/lib/integration-tests/helper.js +0 -142
- package/lib/integration-tests/helper.js.map +0 -1
- package/lib/integration-tests/service-deployment.integration.spec.js +0 -51
- package/lib/integration-tests/service-deployment.integration.spec.js.map +0 -1
- package/lib/integration-tests/test-setup.js +0 -3
- package/lib/integration-tests/test-setup.js.map +0 -1
- package/lib/integration-tests/upload-and-render-component.integration.spec.js +0 -233
- package/lib/integration-tests/upload-and-render-component.integration.spec.js.map +0 -1
- package/lib/upload-component-folder.js +0 -117
- package/lib/upload-component-folder.js.map +0 -1
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const index_1 = require("../index");
|
|
30
|
-
const helper_1 = __importStar(require("./helper"));
|
|
31
|
-
const cli_color_1 = __importDefault(require("cli-color"));
|
|
32
|
-
const path_1 = __importDefault(require("path"));
|
|
33
|
-
const supertest_1 = __importDefault(require("supertest"));
|
|
34
|
-
const upload_component_folder_1 = require("../upload-component-folder");
|
|
35
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
36
|
-
const crypto_1 = require("crypto");
|
|
37
|
-
const mockConsoleError = jest.fn();
|
|
38
|
-
const mockConsoleLog = jest.fn();
|
|
39
|
-
const orgConsoleError = console.error;
|
|
40
|
-
const webPath = 'set-' + (0, crypto_1.randomUUID)();
|
|
41
|
-
const contentItemId = (0, crypto_1.randomUUID)();
|
|
42
|
-
const testFilesDir = path_1.default.resolve(__dirname, 'test-files');
|
|
43
|
-
describe('uploading a component', () => {
|
|
44
|
-
beforeAll(async () => {
|
|
45
|
-
await promises_1.default.rm(testFilesDir, { force: true, recursive: true });
|
|
46
|
-
await promises_1.default.mkdir(testFilesDir);
|
|
47
|
-
upload_component_folder_1.logger.silent = true;
|
|
48
|
-
});
|
|
49
|
-
afterAll(async () => {
|
|
50
|
-
// clean up the component added by the test
|
|
51
|
-
await (0, helper_1.deleteComponentSet)(webPath);
|
|
52
|
-
await (0, helper_1.deleteContentItem)(contentItemId);
|
|
53
|
-
for (const manifest of await (0, helper_1.getTestComponents)()) {
|
|
54
|
-
await helper_1.managementService.delete(`/component/${manifest.getName()}`).catch(() => null);
|
|
55
|
-
await helper_1.contentService
|
|
56
|
-
.delete(`/content-schema/${manifest.getName()}/${manifest.getVersion()}/${manifest.getComponentFunctionByName().name}`)
|
|
57
|
-
.catch(() => null);
|
|
58
|
-
}
|
|
59
|
-
// clean up the test componnet files
|
|
60
|
-
await promises_1.default.rm(testFilesDir, { force: true, recursive: true });
|
|
61
|
-
upload_component_folder_1.logger.silent = false;
|
|
62
|
-
});
|
|
63
|
-
describe('Test isolated test cases', () => {
|
|
64
|
-
beforeEach(() => {
|
|
65
|
-
jest.spyOn(upload_component_folder_1.logger, 'error').mockImplementation(mockConsoleError);
|
|
66
|
-
jest.spyOn(upload_component_folder_1.logger, 'info').mockImplementation(mockConsoleLog);
|
|
67
|
-
});
|
|
68
|
-
it('Should fail uploading a component without manifest.json', async () => {
|
|
69
|
-
mockConsoleError.mockClear();
|
|
70
|
-
const componentPath = path_1.default.join(__dirname, '/__components__/invalid-upload');
|
|
71
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
72
|
-
expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('manifest could not be found'));
|
|
73
|
-
});
|
|
74
|
-
it('Should fail uploading a component that has invalid manifest.json', async () => {
|
|
75
|
-
mockConsoleError.mockClear();
|
|
76
|
-
const componentPath = path_1.default.join(__dirname, '/__components__/invalid-manifest');
|
|
77
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
78
|
-
expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red('failed validation: Value in `#/name` should match `^[a-zA-Z0-9_\\-]+$`, but received `invalid-manifes@t`'));
|
|
79
|
-
});
|
|
80
|
-
it('Should fail uploading the component that has size more than 100MB', async () => {
|
|
81
|
-
mockConsoleError.mockClear();
|
|
82
|
-
const componentPath = path_1.default.join(__dirname, '/__components__/big-package');
|
|
83
|
-
const filePath = `${componentPath}/105mb-file`;
|
|
84
|
-
await (0, helper_1.createFile)(filePath, 105); // Higher limit has been used because compression reduces the size if you use closer to 100MB
|
|
85
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
86
|
-
expect(mockConsoleError.mock.calls[0][0]).toEqual(cli_color_1.default.red(['File size exceeds the maximum limit of 100MB'].join('')));
|
|
87
|
-
(0, helper_1.removeFile)(filePath);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
describe('Deploy a basic component having a input with multiline format', () => {
|
|
91
|
-
beforeAll(async () => {
|
|
92
|
-
await (0, helper_1.deleteComponentSet)(webPath);
|
|
93
|
-
await (0, helper_1.deleteContentItem)(contentItemId);
|
|
94
|
-
for (const manifest of await (0, helper_1.getTestComponents)()) {
|
|
95
|
-
await helper_1.managementService.delete(`/component/${manifest.getName()}`).catch(() => null);
|
|
96
|
-
await helper_1.contentService
|
|
97
|
-
.delete(`/content-schema/${manifest.getName()}/${manifest.getVersion()}/${manifest.getComponentFunctionByName().name}`)
|
|
98
|
-
.catch(() => null);
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
beforeEach(() => {
|
|
102
|
-
console.error = mockConsoleError;
|
|
103
|
-
console.log = mockConsoleLog;
|
|
104
|
-
});
|
|
105
|
-
afterEach(() => {
|
|
106
|
-
console.error = orgConsoleError;
|
|
107
|
-
});
|
|
108
|
-
it('Should upload the component and return a valid url to preview', async () => {
|
|
109
|
-
var _a;
|
|
110
|
-
const componentPath = path_1.default.join(__dirname, '/__components__/cmp-format-string');
|
|
111
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
112
|
-
const uploadedComponent = '<a href="/r/smoke-test-components/cmp-format-string/1.0.0?_previewKey=test-preview">1.0.0</a>';
|
|
113
|
-
const get = await (0, supertest_1.default)(helper_1.default.renderServiceUrl).get('/');
|
|
114
|
-
expect(get.status).toEqual(200);
|
|
115
|
-
expect((_a = get === null || get === void 0 ? void 0 : get.res) === null || _a === void 0 ? void 0 : _a.text).toContain(uploadedComponent);
|
|
116
|
-
});
|
|
117
|
-
it('Should render a component with multi-line format string input', async () => {
|
|
118
|
-
const componentSet = {
|
|
119
|
-
webPath,
|
|
120
|
-
displayName: 'some-display-name',
|
|
121
|
-
description: 'Set description',
|
|
122
|
-
headers: {},
|
|
123
|
-
environmentVariables: {},
|
|
124
|
-
components: {
|
|
125
|
-
'smoke-test-components/cmp-format-string': [{ environmentVariables: {}, version: '1.0.0' }],
|
|
126
|
-
},
|
|
127
|
-
componentVersionRules: {},
|
|
128
|
-
};
|
|
129
|
-
await (0, helper_1.addComponentSet)(componentSet);
|
|
130
|
-
await (0, helper_1.addContentItem)({
|
|
131
|
-
id: contentItemId,
|
|
132
|
-
schemaName: 'smoke-test-components/cmp-format-string/1.0.0/main',
|
|
133
|
-
content: {
|
|
134
|
-
text: 'from-content-item-service',
|
|
135
|
-
},
|
|
136
|
-
});
|
|
137
|
-
const response = await helper_1.renderService.get(`/r/smoke-test-components/cmp-format-string/1.0.0/?_contentItemId=${contentItemId}&_componentSet=${webPath}`);
|
|
138
|
-
expect(response.status).toEqual(200);
|
|
139
|
-
expect(response.data).toEqual(`<div>Input: from-content-item-service</div>`);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe('Deploy basic component having a static file', () => {
|
|
143
|
-
// component to deploy for this test
|
|
144
|
-
const componentPath = path_1.default.join(__dirname, '/__components__/cmp-static-file-test');
|
|
145
|
-
beforeAll(async () => {
|
|
146
|
-
await (0, helper_1.deleteComponentSet)(webPath);
|
|
147
|
-
await (0, helper_1.deleteContentItem)(contentItemId);
|
|
148
|
-
for (const manifest of await (0, helper_1.getTestComponents)()) {
|
|
149
|
-
await helper_1.managementService.delete(`/component/${manifest.getName()}`).catch(() => null);
|
|
150
|
-
await helper_1.contentService
|
|
151
|
-
.delete(`/content-schema/${manifest.getName()}/${manifest.getVersion()}/${manifest.getComponentFunctionByName().name}`)
|
|
152
|
-
.catch(() => null);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
beforeEach(() => {
|
|
156
|
-
console.error = mockConsoleError;
|
|
157
|
-
console.log = mockConsoleLog;
|
|
158
|
-
});
|
|
159
|
-
afterEach(() => {
|
|
160
|
-
console.error = orgConsoleError;
|
|
161
|
-
});
|
|
162
|
-
it('Should upload the component and return a valid url to preview', async () => {
|
|
163
|
-
var _a;
|
|
164
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
165
|
-
const uploadedComponent = '<a href="/r/smoke-test-components/cmp-static-file-test/1.0.0">1.0.0</a>';
|
|
166
|
-
const get = await (0, supertest_1.default)(helper_1.default.renderServiceUrl).get('/');
|
|
167
|
-
expect(get.status).toEqual(200);
|
|
168
|
-
expect((_a = get === null || get === void 0 ? void 0 : get.res) === null || _a === void 0 ? void 0 : _a.text).toContain(uploadedComponent);
|
|
169
|
-
});
|
|
170
|
-
it('Should fail upload the component with same version', async () => {
|
|
171
|
-
mockConsoleError.mockClear();
|
|
172
|
-
await (0, index_1.uploadComponentFolder)(helper_1.managementServiceRoot, helper_1.default.managementServiceUrl, componentPath, testFilesDir);
|
|
173
|
-
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'));
|
|
174
|
-
});
|
|
175
|
-
it('Should render component', async () => {
|
|
176
|
-
const componentSet = {
|
|
177
|
-
webPath,
|
|
178
|
-
displayName: 'some-display-name',
|
|
179
|
-
description: 'Set description',
|
|
180
|
-
headers: {},
|
|
181
|
-
environmentVariables: {},
|
|
182
|
-
components: {
|
|
183
|
-
'smoke-test-components/cmp-static-file-test': [
|
|
184
|
-
{
|
|
185
|
-
environmentVariables: {},
|
|
186
|
-
version: '1.0.0',
|
|
187
|
-
},
|
|
188
|
-
],
|
|
189
|
-
},
|
|
190
|
-
componentVersionRules: {},
|
|
191
|
-
};
|
|
192
|
-
await (0, helper_1.addComponentSet)(componentSet);
|
|
193
|
-
const response = await helper_1.renderService.get(`/r/smoke-test-components/cmp-static-file-test/1.0.0/?_componentSet=${webPath}&something=hello`);
|
|
194
|
-
expect(response.status).toEqual(200);
|
|
195
|
-
expect(response.data).toEqual([
|
|
196
|
-
'<div>Input: hello</div>',
|
|
197
|
-
'<div>smoke-test-components/cmp-static-file-test 1.0.0 ',
|
|
198
|
-
`${helper_1.default.renderServiceUrl}/s/smoke-test-components/cmp-static-file-test/1.0.0/birthday-cake.png?_componentSet=${webPath}</div>`,
|
|
199
|
-
].join(''));
|
|
200
|
-
});
|
|
201
|
-
it('Should render component with content item ID input', async () => {
|
|
202
|
-
const componentSet = {
|
|
203
|
-
webPath,
|
|
204
|
-
displayName: 'some-display-name',
|
|
205
|
-
description: 'Set description',
|
|
206
|
-
headers: {},
|
|
207
|
-
environmentVariables: {},
|
|
208
|
-
components: {
|
|
209
|
-
'smoke-test-components/cmp-static-file-test': [{ environmentVariables: {}, version: '1.0.0' }],
|
|
210
|
-
},
|
|
211
|
-
componentVersionRules: {},
|
|
212
|
-
};
|
|
213
|
-
await (0, helper_1.addComponentSet)(componentSet);
|
|
214
|
-
// add a component item for the test
|
|
215
|
-
await (0, helper_1.addContentItem)({
|
|
216
|
-
id: contentItemId,
|
|
217
|
-
schemaName: 'smoke-test-components/cmp-static-file-test/1.0.0/main',
|
|
218
|
-
content: {
|
|
219
|
-
something: 'from-content-item-service',
|
|
220
|
-
},
|
|
221
|
-
});
|
|
222
|
-
console.log(`/r/smoke-test-components/cmp-static-file-test/1.0.0/?_componentSet=${webPath}&_contentItemId=${contentItemId}`);
|
|
223
|
-
const response = await helper_1.renderService.get(`/r/smoke-test-components/cmp-static-file-test/1.0.0/?_componentSet=${webPath}&_contentItemId=${contentItemId}`);
|
|
224
|
-
expect(response.status).toEqual(200);
|
|
225
|
-
expect(response.data).toEqual([
|
|
226
|
-
'<div>Input: from-content-item-service</div>',
|
|
227
|
-
'<div>smoke-test-components/cmp-static-file-test 1.0.0 ',
|
|
228
|
-
`${helper_1.default.renderServiceUrl}/s/smoke-test-components/cmp-static-file-test/1.0.0/birthday-cake.png?_componentSet=${webPath}</div>`,
|
|
229
|
-
].join(''));
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
//# sourceMappingURL=upload-and-render-component.integration.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload-and-render-component.integration.spec.js","sourceRoot":"","sources":["../../src/integration-tests/upload-and-render-component.integration.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAAiD;AACjD,mDAYkB;AAClB,0DAA8B;AAC9B,gDAAwB;AACxB,0DAAkC;AAClC,wEAAoD;AAEpD,2DAA8B;AAC9B,mCAAoC;AAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAEjC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;AACtC,MAAM,OAAO,GAAG,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;AACtC,MAAM,aAAa,GAAG,IAAA,mBAAU,GAAE,CAAC;AACnC,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAE3D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,kBAAG,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,kBAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9B,gCAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,2CAA2C;QAC3C,MAAM,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;QAClC,MAAM,IAAA,0BAAiB,EAAC,aAAa,CAAC,CAAC;QAEvC,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAA,0BAAiB,GAAE,EAAE;YAChD,MAAM,0BAAiB,CAAC,MAAM,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,uBAAc;iBACjB,MAAM,CACL,mBAAmB,QAAQ,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,IAC5D,QAAQ,CAAC,0BAA0B,EAAE,CAAC,IACxC,EAAE,CACH;iBACA,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;SACtB;QACD,oCAAoC;QACpC,MAAM,kBAAG,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,gCAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,gCAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,CAAC,gCAAM,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC,CAAC;YAC7E,MAAM,IAAA,6BAAqB,EAAC,8BAAqB,EAAE,gBAAS,CAAC,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;YAChH,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;YAC/E,MAAM,IAAA,6BAAqB,EACzB,8BAAqB,EACrB,gBAAS,CAAC,oBAAoB,EAC9B,aAAa,EAEb,YAAY,CACb,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAC/C,mBAAK,CAAC,GAAG,CACP,0GAA0G,CAC3G,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,GAAG,aAAa,aAAa,CAAC;YAC/C,MAAM,IAAA,mBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,6FAA6F;YAC9H,MAAM,IAAA,6BAAqB,EACzB,8BAAqB,EACrB,gBAAS,CAAC,oBAAoB,EAC9B,aAAa,EAEb,YAAY,CACb,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAC/C,mBAAK,CAAC,GAAG,CAAC,CAAC,8CAA8C,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACrE,CAAC;YACF,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;QAC7E,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;YAClC,MAAM,IAAA,0BAAiB,EAAC,aAAa,CAAC,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAA,0BAAiB,GAAE,EAAE;gBAChD,MAAM,0BAAiB,CAAC,MAAM,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrF,MAAM,uBAAc;qBACjB,MAAM,CACL,mBAAmB,QAAQ,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,IAC5D,QAAQ,CAAC,0BAA0B,EAAE,CAAC,IACxC,EAAE,CACH;qBACA,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC;YACjC,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;;YAC7E,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;YAChF,MAAM,IAAA,6BAAqB,EAAC,8BAAqB,EAAE,gBAAS,CAAC,oBAAoB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;YAChH,MAAM,iBAAiB,GACrB,+FAA+F,CAAC;YAClG,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAS,EAAC,gBAAS,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,MAAC,GAAW,aAAX,GAAG,uBAAH,GAAG,CAAU,GAAG,0CAAE,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,YAAY,GAAkC;gBAClD,OAAO;gBACP,WAAW,EAAE,mBAAmB;gBAChC,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE,EAAE;gBACX,oBAAoB,EAAE,EAAE;gBACxB,UAAU,EAAE;oBACV,yCAAyC,EAAE,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;iBAC5F;gBACD,qBAAqB,EAAE,EAAE;aAC1B,CAAC;YACF,MAAM,IAAA,wBAAe,EAAC,YAAY,CAAC,CAAC;YACpC,MAAM,IAAA,uBAAc,EAAC;gBACnB,EAAE,EAAE,aAAa;gBACjB,UAAU,EAAE,oDAAoD;gBAChE,OAAO,EAAE;oBACP,IAAI,EAAE,2BAA2B;iBAClC;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAa,CAAC,GAAG,CACtC,oEAAoE,aAAa,kBAAkB,OAAO,EAAE,CAC7G,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,oCAAoC;QACpC,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;QAEnF,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;YAClC,MAAM,IAAA,0BAAiB,EAAC,aAAa,CAAC,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,IAAA,0BAAiB,GAAE,EAAE;gBAChD,MAAM,0BAAiB,CAAC,MAAM,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrF,MAAM,uBAAc;qBACjB,MAAM,CACL,mBAAmB,QAAQ,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,IAC5D,QAAQ,CAAC,0BAA0B,EAAE,CAAC,IACxC,EAAE,CACH;qBACA,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC;YACjC,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;;YAC7E,MAAM,IAAA,6BAAqB,EACzB,8BAAqB,EACrB,gBAAS,CAAC,oBAAoB,EAC9B,aAAa,EAEb,YAAY,CACb,CAAC;YAEF,MAAM,iBAAiB,GAAG,yEAAyE,CAAC;YACpG,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAS,EAAC,gBAAS,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,MAAC,GAAW,aAAX,GAAG,uBAAH,GAAG,CAAU,GAAG,0CAAE,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAA,6BAAqB,EACzB,8BAAqB,EACrB,gBAAS,CAAC,oBAAoB,EAC9B,aAAa,EAEb,YAAY,CACb,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAC/C,mBAAK,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAC9G,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,YAAY,GAAkC;gBAClD,OAAO;gBACP,WAAW,EAAE,mBAAmB;gBAChC,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE,EAAE;gBACX,oBAAoB,EAAE,EAAE;gBACxB,UAAU,EAAE;oBACV,4CAA4C,EAAE;wBAC5C;4BACE,oBAAoB,EAAE,EAAE;4BACxB,OAAO,EAAE,OAAO;yBACjB;qBACF;iBACF;gBACD,qBAAqB,EAAE,EAAE;aAC1B,CAAC;YAEF,MAAM,IAAA,wBAAe,EAAC,YAAY,CAAC,CAAC;YAEpC,MAAM,QAAQ,GAAG,MAAM,sBAAa,CAAC,GAAG,CACtC,sEAAsE,OAAO,kBAAkB,CAChG,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAC3B;gBACE,yBAAyB;gBACzB,wDAAwD;gBACxD,GAAG,gBAAS,CAAC,gBAAgB,uFAAuF,OAAO,QAAQ;aACpI,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,YAAY,GAAkC;gBAClD,OAAO;gBACP,WAAW,EAAE,mBAAmB;gBAChC,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE,EAAE;gBACX,oBAAoB,EAAE,EAAE;gBACxB,UAAU,EAAE;oBACV,4CAA4C,EAAE,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;iBAC/F;gBACD,qBAAqB,EAAE,EAAE;aAC1B,CAAC;YACF,MAAM,IAAA,wBAAe,EAAC,YAAY,CAAC,CAAC;YAEpC,oCAAoC;YACpC,MAAM,IAAA,uBAAc,EAAC;gBACnB,EAAE,EAAE,aAAa;gBACjB,UAAU,EAAE,uDAAuD;gBACnE,OAAO,EAAE;oBACP,SAAS,EAAE,2BAA2B;iBACvC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CACT,sEAAsE,OAAO,mBAAmB,aAAa,EAAE,CAChH,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,sBAAa,CAAC,GAAG,CACtC,sEAAsE,OAAO,mBAAmB,aAAa,EAAE,CAChH,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAC3B;gBACE,6CAA6C;gBAC7C,wDAAwD;gBACxD,GAAG,gBAAS,CAAC,gBAAgB,uFAAuF,OAAO,QAAQ;aACpI,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,117 +0,0 @@
|
|
|
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.uploadComponentFolder = exports.logger = void 0;
|
|
7
|
-
const virus_scanner_lib_1 = require("@squiz/virus-scanner-lib");
|
|
8
|
-
const dx_common_lib_1 = require("@squiz/dx-common-lib");
|
|
9
|
-
const component_lib_1 = require("@squiz/component-lib");
|
|
10
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
|
-
const cli_color_1 = __importDefault(require("cli-color"));
|
|
13
|
-
const dx_logger_lib_1 = require("@squiz/dx-logger-lib");
|
|
14
|
-
const dx_json_schema_lib_1 = require("@squiz/dx-json-schema-lib");
|
|
15
|
-
exports.logger = (0, dx_logger_lib_1.getLogger)({ name: 'upload-component', format: 'human' });
|
|
16
|
-
async function uploadComponentFolder(apiClient, componentServiceManagementUrl, folderPath, baseTempDir = '') {
|
|
17
|
-
const tmpDir = await promises_1.default.mkdtemp(path_1.default.resolve(baseTempDir, 'cmp-upload'));
|
|
18
|
-
try {
|
|
19
|
-
await preUploadChecks(apiClient, componentServiceManagementUrl, folderPath);
|
|
20
|
-
exports.logger.info('Initial scanning');
|
|
21
|
-
const zip = await (0, dx_common_lib_1.zipDirectory)(folderPath, tmpDir);
|
|
22
|
-
const initialUpload = await handleResponse(apiClient.post('/v1/upload-component', {}, { baseURL: componentServiceManagementUrl }));
|
|
23
|
-
exports.logger.info(`deployment id: ${initialUpload.id} status: transferring`);
|
|
24
|
-
await (0, virus_scanner_lib_1.uploadFile)(initialUpload, zip);
|
|
25
|
-
await watchAndWaitForUploadAndScanComplete(apiClient, componentServiceManagementUrl, initialUpload.id);
|
|
26
|
-
exports.logger.info(`deployment id: ${initialUpload.id} status: deploying component folder`);
|
|
27
|
-
const result = await handleResponse(apiClient.post(`/v1/upload-component/next/${initialUpload.id}`, {}, { baseURL: componentServiceManagementUrl }));
|
|
28
|
-
await promises_1.default.rm(tmpDir, { force: true, recursive: true });
|
|
29
|
-
if (result.status === 'successful') {
|
|
30
|
-
exports.logger.info(`deployment id: ${initialUpload.id} status: ${cli_color_1.default.green('success')}`);
|
|
31
|
-
exports.logger.info(`uploaded location: ${result.accessLink}`);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
exports.logger.error('failed for an unknown reason', cli_color_1.default.red(result));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
await promises_1.default.rm(tmpDir, { force: true, recursive: true });
|
|
39
|
-
if (e instanceof Error) {
|
|
40
|
-
exports.logger.error(cli_color_1.default.red(e.message));
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
throw e;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.uploadComponentFolder = uploadComponentFolder;
|
|
48
|
-
async function preUploadChecks(apiClient, managementURL, folderPath) {
|
|
49
|
-
const service = new component_lib_1.ManifestServiceForDev(folderPath, exports.logger, new dx_json_schema_lib_1.JsonValidationService());
|
|
50
|
-
const manifestPath = path_1.default.join(folderPath, `manifest.json`);
|
|
51
|
-
const result = await service.readManifest(manifestPath);
|
|
52
|
-
await service.assertManifestIsValid(manifestPath, result.getModel());
|
|
53
|
-
if (await checkIfVersionExists(apiClient, managementURL, result)) {
|
|
54
|
-
throw new Error(`Cannot upload component version, ${result.getName()} ${result.getVersion()} already exists`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
async function checkIfVersionExists(apiClient, managementURL, inputManifest) {
|
|
58
|
-
const response = await apiClient.get(`/v1/component/${inputManifest.getName()}/${inputManifest.getVersion()}`, {
|
|
59
|
-
validateStatus: null,
|
|
60
|
-
baseURL: managementURL,
|
|
61
|
-
});
|
|
62
|
-
if (response.status === 200) {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
else if (response.status === 404) {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
throw new Error(`Unexpected response code ${response.status}`);
|
|
69
|
-
}
|
|
70
|
-
async function watchAndWaitForUploadAndScanComplete(apiClient, managementURL, id) {
|
|
71
|
-
const poll = () => handleResponse(apiClient.get('/v1/upload-component/status/' + id, { baseURL: managementURL }));
|
|
72
|
-
return new Promise((resolve, reject) => {
|
|
73
|
-
const recurse = () => poll().then(async (req) => {
|
|
74
|
-
if (req.status == 'Success') {
|
|
75
|
-
resolve();
|
|
76
|
-
}
|
|
77
|
-
else if (req.status == 'Flagged') {
|
|
78
|
-
reject(new Error('upload has been flagged as a virus'));
|
|
79
|
-
}
|
|
80
|
-
else if (req.status == 'Error') {
|
|
81
|
-
reject(new Error('there has been an error'));
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
setTimeout(async () => {
|
|
85
|
-
await recurse();
|
|
86
|
-
}, 1000);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
recurse();
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
async function handleResponse(axiosInstance) {
|
|
93
|
-
try {
|
|
94
|
-
const response = await axiosInstance;
|
|
95
|
-
return response.data;
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
throw handleError(error);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function handleError(error) {
|
|
102
|
-
const { response } = error;
|
|
103
|
-
if (!response || !isAxiosError(error)) {
|
|
104
|
-
return error;
|
|
105
|
-
}
|
|
106
|
-
const message = response.data.message;
|
|
107
|
-
if (message) {
|
|
108
|
-
return new Error(`Unexpected response code ${response.status}. message: ${message}`);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
return new Error(`Unexpected response code ${response.status}.`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
function isAxiosError(error) {
|
|
115
|
-
return error && error.isAxiosError === true;
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=upload-component-folder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload-component-folder.js","sourceRoot":"","sources":["../src/upload-component-folder.ts"],"names":[],"mappings":"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"}
|