@squiz/component-cli-lib 1.2.1-alpha.107 → 1.2.1-alpha.18
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 +0 -730
- package/jest.config.ts +3 -11
- package/lib/index.d.ts +1 -2
- package/lib/index.js +79 -5
- package/lib/index.js.map +1 -1
- package/lib/{component-dev-folder-structures.spec.d.ts → test.d.ts} +0 -0
- package/lib/test.js +12 -0
- package/lib/test.js.map +1 -0
- package/lib/utils/zipDirectory.d.ts +1 -0
- package/lib/utils/zipDirectory.js +32 -0
- package/lib/utils/zipDirectory.js.map +1 -0
- package/package.json +16 -22
- package/src/index.ts +90 -2
- package/src/test.ts +9 -0
- package/src/utils/zipDirectory.ts +31 -0
- package/tsconfig.json +1 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/.gitlab-ci.yml +0 -115
- package/jest.integration.config.ts +0 -17
- package/lib/component-dev-folder-structures.spec.js +0 -58
- package/lib/component-dev-folder-structures.spec.js.map +0 -1
- package/lib/component-dev.d.ts +0 -16
- package/lib/component-dev.js +0 -49
- package/lib/component-dev.js.map +0 -1
- package/lib/component-dev.spec.d.ts +0 -1
- package/lib/component-dev.spec.js +0 -54
- package/lib/component-dev.spec.js.map +0 -1
- package/lib/integration-tests/__components__/big-package/manifest.json +0 -35
- 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.d.ts +0 -19
- package/lib/integration-tests/helper.js +0 -73
- package/lib/integration-tests/helper.js.map +0 -1
- package/lib/integration-tests/service-deployment.spec.d.ts +0 -1
- package/lib/integration-tests/service-deployment.spec.js +0 -36
- package/lib/integration-tests/service-deployment.spec.js.map +0 -1
- package/lib/integration-tests/test-setup.d.ts +0 -0
- 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.spec.d.ts +0 -1
- package/lib/integration-tests/upload-and-render-component.spec.js +0 -141
- package/lib/integration-tests/upload-and-render-component.spec.js.map +0 -1
- package/lib/upload-component-folder.d.ts +0 -3
- package/lib/upload-component-folder.js +0 -131
- package/lib/upload-component-folder.js.map +0 -1
- package/src/component-dev-folder-structures.spec.ts +0 -69
- package/src/component-dev.spec.ts +0 -59
- package/src/component-dev.ts +0 -60
- package/src/integration-tests/__components__/big-package/manifest.json +0 -36
- package/src/integration-tests/__components__/big-package/render-json.js +0 -5
- package/src/integration-tests/__components__/cmp-static-file-test/main.js +0 -10
- package/src/integration-tests/__components__/cmp-static-file-test/manifest.json +0 -42
- package/src/integration-tests/__components__/cmp-static-file-test/public/static-library-file.js +0 -1
- package/src/integration-tests/__components__/invalid-manifest/main.js +0 -7
- package/src/integration-tests/__components__/invalid-manifest/manifest.json +0 -29
- package/src/integration-tests/__components__/invalid-upload/main.js +0 -7
- package/src/integration-tests/helper.ts +0 -79
- package/src/integration-tests/service-deployment.spec.ts +0 -45
- package/src/integration-tests/test-setup.ts +0 -1
- package/src/integration-tests/upload-and-render-component.spec.ts +0 -173
- package/src/upload-component-folder.ts +0 -145
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { ScanStatus, uploadFile } from '@squiz/virus-scanner-lib';
|
|
2
|
-
|
|
3
|
-
import { zipDirectory } from '@squiz/dx-common-lib';
|
|
4
|
-
import { Manifest, ManifestServiceForDev } from '@squiz/component-lib';
|
|
5
|
-
import fsp from 'fs/promises';
|
|
6
|
-
import path from 'path';
|
|
7
|
-
import axios, { AxiosResponse, AxiosError, AxiosInstance } from 'axios';
|
|
8
|
-
import color from 'cli-color';
|
|
9
|
-
import { getLogger, Logger } from '@squiz/dx-logger-lib';
|
|
10
|
-
|
|
11
|
-
export const logger: Logger = getLogger({ name: 'upload-component', format: 'human' });
|
|
12
|
-
|
|
13
|
-
export async function uploadComponentFolder(
|
|
14
|
-
folderPath: string,
|
|
15
|
-
componentServiceManagementUrl: string,
|
|
16
|
-
componentRenderServiceUrl: string,
|
|
17
|
-
baseTempDir: string = '',
|
|
18
|
-
): Promise<void> {
|
|
19
|
-
const tmpDir = await fsp.mkdtemp(path.resolve(baseTempDir, 'cmp-upload'));
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
const axiosInstance = axios.create({
|
|
23
|
-
baseURL: componentServiceManagementUrl,
|
|
24
|
-
headers: {
|
|
25
|
-
'content-type': 'application/json',
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
await preUploadChecks(folderPath, componentRenderServiceUrl);
|
|
30
|
-
logger.info('Initial scanning');
|
|
31
|
-
const zip = await zipDirectory(folderPath, tmpDir);
|
|
32
|
-
|
|
33
|
-
const initialUpload = await handleResponse<any>(axiosInstance.post('upload-component'));
|
|
34
|
-
|
|
35
|
-
logger.info(`deployment id: ${initialUpload.id} status: transferring`);
|
|
36
|
-
await uploadFile(initialUpload, zip);
|
|
37
|
-
|
|
38
|
-
await watchAndWaitForUploadAndScanComplete(initialUpload.id, axiosInstance);
|
|
39
|
-
|
|
40
|
-
logger.info(`deployment id: ${initialUpload.id} status: deploying component folder`);
|
|
41
|
-
const result = await handleResponse<any>(axiosInstance.post(`upload-component/next/${initialUpload.id}`));
|
|
42
|
-
|
|
43
|
-
await fsp.rm(tmpDir, { force: true, recursive: true });
|
|
44
|
-
|
|
45
|
-
if (result.status === 'successful') {
|
|
46
|
-
logger.info(`deployment id: ${initialUpload.id} status: ${color.green('success')}`);
|
|
47
|
-
logger.info(`uploaded location: ${result.accessLink}`);
|
|
48
|
-
} else {
|
|
49
|
-
logger.error('failed for an unknown reason', color.red(result));
|
|
50
|
-
}
|
|
51
|
-
} catch (e) {
|
|
52
|
-
await fsp.rm(tmpDir, { force: true, recursive: true });
|
|
53
|
-
|
|
54
|
-
if (e instanceof Error) {
|
|
55
|
-
logger.error(color.red(e.message));
|
|
56
|
-
} else {
|
|
57
|
-
throw e;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async function preUploadChecks(folderPath: string, renderService: string) {
|
|
63
|
-
const service = new ManifestServiceForDev(folderPath, logger);
|
|
64
|
-
const manifestPath = path.join(folderPath, `manifest.json`);
|
|
65
|
-
|
|
66
|
-
const result = await service.readManifest(manifestPath);
|
|
67
|
-
await service.assertManifestIsValid(manifestPath, result.getModel());
|
|
68
|
-
|
|
69
|
-
if (await checkIfVersionExists(result, renderService)) {
|
|
70
|
-
throw new Error(`Cannot upload component version, ${result.getName()} ${result.getVersion()} already exists`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
async function checkIfVersionExists(inputManifest: Manifest, renderService: string) {
|
|
75
|
-
const axiosInstance = axios.create({
|
|
76
|
-
baseURL: renderService,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
const response = await axiosInstance.get(
|
|
81
|
-
`d/${inputManifest.getName()}/${inputManifest.getVersion()}/manifest.json`,
|
|
82
|
-
);
|
|
83
|
-
if (response.status === 200) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
throw new Error(`Unexpected response code ${response.status}`);
|
|
87
|
-
} catch (error) {
|
|
88
|
-
if (isAxiosError(error)) {
|
|
89
|
-
const { response } = error;
|
|
90
|
-
if (response?.status === 404) {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
throw error;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async function watchAndWaitForUploadAndScanComplete(id: string, axiosInstance: AxiosInstance): Promise<void> {
|
|
99
|
-
const poll = () => handleResponse<ScanStatus>(axiosInstance.get('upload-component/status/' + id));
|
|
100
|
-
|
|
101
|
-
return new Promise((resolve, reject) => {
|
|
102
|
-
const recurse = () =>
|
|
103
|
-
poll().then(async (req) => {
|
|
104
|
-
if (req.status == 'Success') {
|
|
105
|
-
resolve();
|
|
106
|
-
} else if (req.status == 'Flagged') {
|
|
107
|
-
reject(new Error('upload has been flagged as a virus'));
|
|
108
|
-
} else if (req.status == 'Error') {
|
|
109
|
-
reject(new Error('there has been an error'));
|
|
110
|
-
} else {
|
|
111
|
-
setTimeout(async () => {
|
|
112
|
-
await recurse();
|
|
113
|
-
}, 1000);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
recurse();
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
async function handleResponse<T>(axiosInstance: Promise<AxiosResponse<T>>): Promise<T> {
|
|
122
|
-
try {
|
|
123
|
-
const response = await axiosInstance;
|
|
124
|
-
return response.data;
|
|
125
|
-
} catch (error) {
|
|
126
|
-
throw handleError(error);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
function handleError(error: any): Error {
|
|
131
|
-
const { response } = error;
|
|
132
|
-
if (!response || !isAxiosError(error)) {
|
|
133
|
-
return error;
|
|
134
|
-
}
|
|
135
|
-
const message = (response.data as any).message;
|
|
136
|
-
if (message) {
|
|
137
|
-
return new Error(`Unexpected response code ${response.status}. message: ${message}`);
|
|
138
|
-
} else {
|
|
139
|
-
return new Error(`Unexpected response code ${response.status}.`);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function isAxiosError(error: any): error is AxiosError {
|
|
144
|
-
return error && error.isAxiosError === true;
|
|
145
|
-
}
|