@forge/cli-shared 9.3.0-next.8 → 9.3.0-next.9
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 +6 -0
- package/out/file-system/archiver.d.ts +40 -0
- package/out/file-system/archiver.d.ts.map +1 -0
- package/out/file-system/archiver.js +148 -0
- package/out/file-system/index.d.ts +1 -0
- package/out/file-system/index.d.ts.map +1 -1
- package/out/file-system/index.js +1 -0
- package/out/shared/test.d.ts +2 -1
- package/out/shared/test.d.ts.map +1 -1
- package/out/shared/test.js +2 -2
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { UserError } from '../shared';
|
|
2
|
+
import { Logger } from '../ui';
|
|
3
|
+
export declare abstract class Archiver {
|
|
4
|
+
abstract addContent(fileName: string, contents: Buffer): void;
|
|
5
|
+
abstract addFrom(fileName: string, filePath: string): void;
|
|
6
|
+
abstract finalise(): Promise<string>;
|
|
7
|
+
addMany(entries: Map<string, string | Buffer>): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class ArchiverError extends UserError {
|
|
10
|
+
}
|
|
11
|
+
export declare class ZipArchiver extends Archiver {
|
|
12
|
+
private readonly archive;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private tempFile;
|
|
15
|
+
private resolves;
|
|
16
|
+
private rejects;
|
|
17
|
+
private constructor();
|
|
18
|
+
static create(logger: Logger): Promise<ZipArchiver>;
|
|
19
|
+
addContent(fileName: string, contents: Buffer): void;
|
|
20
|
+
addFrom(fileName: string, filePath: string): void;
|
|
21
|
+
finalise(): Promise<string>;
|
|
22
|
+
onWarning(cb: (err: Error) => void): void;
|
|
23
|
+
private onArchiveError;
|
|
24
|
+
private onClose;
|
|
25
|
+
}
|
|
26
|
+
export declare class DirectoryArchiver extends Archiver {
|
|
27
|
+
private readonly target;
|
|
28
|
+
constructor(target: string);
|
|
29
|
+
addContent(fileName: string, contents: Buffer): void;
|
|
30
|
+
addFrom(fileName: string, filePath: string): void;
|
|
31
|
+
finalise(): Promise<string>;
|
|
32
|
+
}
|
|
33
|
+
export declare class MultiArchiver extends Archiver {
|
|
34
|
+
private readonly archivers;
|
|
35
|
+
constructor(archivers: Archiver[]);
|
|
36
|
+
addContent(fileName: string, contents: Buffer): void;
|
|
37
|
+
addFrom(fileName: string, filePath: string): void;
|
|
38
|
+
finalise(): Promise<string>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=archiver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../../src/file-system/archiver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,8BAAsB,QAAQ;aACZ,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;aAKpD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;aACjD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAMpC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI;CAS5D;AAED,qBAAa,aAAc,SAAQ,SAAS;CAAG;AA4B/C,qBAAa,WAAY,SAAQ,QAAQ;IAMrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO;WAaa,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKzD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMpD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUjD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAS3B,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI;IAIzC,OAAO,CAAC,cAAc,CAKpB;IAEF,OAAO,CAAC,OAAO,CAIb;CACH;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAIpC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWpD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU3C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;CAGzC;AAED,qBAAa,aAAc,SAAQ,QAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,QAAQ,EAAE;IAI3C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMpD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM3C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;CAIzC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiArchiver = exports.DirectoryArchiver = exports.ZipArchiver = exports.ArchiverError = exports.Archiver = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const tmp_1 = tslib_1.__importDefault(require("tmp"));
|
|
8
|
+
const shared_1 = require("../shared");
|
|
9
|
+
class Archiver {
|
|
10
|
+
addMany(entries) {
|
|
11
|
+
for (const [name, output] of entries) {
|
|
12
|
+
if (Buffer.isBuffer(output)) {
|
|
13
|
+
this.addContent(name, output);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
this.addFrom(name, output);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.Archiver = Archiver;
|
|
22
|
+
class ArchiverError extends shared_1.UserError {
|
|
23
|
+
}
|
|
24
|
+
exports.ArchiverError = ArchiverError;
|
|
25
|
+
const invalidArchivePathMessage = (fileName) => `Invalid archive path "${fileName}"`;
|
|
26
|
+
const archiveContentAddedMessage = (fileName) => `Added archive content "${fileName}"`;
|
|
27
|
+
const archiveFileAddedMessage = (fileName, filePath) => `Added archive file "${fileName}" from "${filePath}"`;
|
|
28
|
+
function validateArchivePath(fileName) {
|
|
29
|
+
if (!fileName) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const normalizedPath = path_1.default.posix.normalize(fileName.replace(/\\/g, '/'));
|
|
33
|
+
if (path_1.default.posix.isAbsolute(normalizedPath) || normalizedPath === '..' || normalizedPath.startsWith('../')) {
|
|
34
|
+
throw new ArchiverError(invalidArchivePathMessage(fileName));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class ZipArchiver extends Archiver {
|
|
38
|
+
archive;
|
|
39
|
+
logger;
|
|
40
|
+
tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
|
|
41
|
+
resolves = [];
|
|
42
|
+
rejects = [];
|
|
43
|
+
constructor(archive, logger) {
|
|
44
|
+
super();
|
|
45
|
+
this.archive = archive;
|
|
46
|
+
this.logger = logger;
|
|
47
|
+
const output = (0, fs_1.createWriteStream)(this.tempFile.name);
|
|
48
|
+
this.archive.pipe(output);
|
|
49
|
+
output.on('close', this.onClose);
|
|
50
|
+
this.archive.on('warning', this.onArchiveError);
|
|
51
|
+
this.archive.on('error', this.onArchiveError);
|
|
52
|
+
}
|
|
53
|
+
static async create(logger) {
|
|
54
|
+
const { ZipArchive } = await Promise.resolve().then(() => tslib_1.__importStar(require('archiver')));
|
|
55
|
+
return new ZipArchiver(new ZipArchive(), logger);
|
|
56
|
+
}
|
|
57
|
+
addContent(fileName, contents) {
|
|
58
|
+
validateArchivePath(fileName);
|
|
59
|
+
this.archive.append(contents, { name: fileName });
|
|
60
|
+
this.logger.debug(archiveContentAddedMessage(fileName));
|
|
61
|
+
}
|
|
62
|
+
addFrom(fileName, filePath) {
|
|
63
|
+
validateArchivePath(fileName);
|
|
64
|
+
if ((0, fs_1.statSync)(filePath).isDirectory()) {
|
|
65
|
+
this.archive.directory(filePath, fileName || false);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.archive.file(filePath, { name: fileName });
|
|
69
|
+
}
|
|
70
|
+
this.logger.debug(archiveFileAddedMessage(fileName, filePath));
|
|
71
|
+
}
|
|
72
|
+
finalise() {
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
this.resolves.push(resolve);
|
|
75
|
+
this.rejects.push(reject);
|
|
76
|
+
this.archive.finalize();
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
onWarning(cb) {
|
|
80
|
+
this.archive.on('warning', cb);
|
|
81
|
+
}
|
|
82
|
+
onArchiveError = (err) => {
|
|
83
|
+
const error = new ArchiverError(err.message);
|
|
84
|
+
for (const reject of this.rejects) {
|
|
85
|
+
reject(error);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
onClose = () => {
|
|
89
|
+
for (const resolve of this.resolves) {
|
|
90
|
+
resolve(this.tempFile.name);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
exports.ZipArchiver = ZipArchiver;
|
|
95
|
+
class DirectoryArchiver extends Archiver {
|
|
96
|
+
target;
|
|
97
|
+
constructor(target) {
|
|
98
|
+
super();
|
|
99
|
+
this.target = target;
|
|
100
|
+
}
|
|
101
|
+
addContent(fileName, contents) {
|
|
102
|
+
validateArchivePath(fileName);
|
|
103
|
+
try {
|
|
104
|
+
const targetName = path_1.default.join(this.target, fileName);
|
|
105
|
+
(0, fs_1.mkdirSync)(path_1.default.dirname(targetName), { recursive: true });
|
|
106
|
+
(0, fs_1.writeFileSync)(targetName, contents);
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
throw new ArchiverError(e.message);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
addFrom(fileName, filePath) {
|
|
113
|
+
validateArchivePath(fileName);
|
|
114
|
+
try {
|
|
115
|
+
const targetName = path_1.default.join(this.target, fileName);
|
|
116
|
+
(0, fs_1.cpSync)(filePath, targetName, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
throw new ArchiverError(e.message);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async finalise() {
|
|
123
|
+
return this.target;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.DirectoryArchiver = DirectoryArchiver;
|
|
127
|
+
class MultiArchiver extends Archiver {
|
|
128
|
+
archivers;
|
|
129
|
+
constructor(archivers) {
|
|
130
|
+
super();
|
|
131
|
+
this.archivers = archivers;
|
|
132
|
+
}
|
|
133
|
+
addContent(fileName, contents) {
|
|
134
|
+
for (const archiver of this.archivers) {
|
|
135
|
+
archiver.addContent(fileName, contents);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
addFrom(fileName, filePath) {
|
|
139
|
+
for (const archiver of this.archivers) {
|
|
140
|
+
archiver.addFrom(fileName, filePath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async finalise() {
|
|
144
|
+
const paths = await Promise.all(this.archivers.map((archiver) => archiver.finalise()));
|
|
145
|
+
return paths[0];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.MultiArchiver = MultiArchiver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file-system/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file-system/index.ts"],"names":[],"mappings":"AAEA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC"}
|
package/out/file-system/index.js
CHANGED
|
@@ -3,5 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./file-system-reader"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./file-system-writer"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./archiver"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./util"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./zip-accessor"), exports);
|
package/out/shared/test.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ type TestApp = {
|
|
|
7
7
|
path: string;
|
|
8
8
|
}[];
|
|
9
9
|
};
|
|
10
|
-
export declare function createTestApp({ userCode, userCodeFilename, packages, withI18nBundle }: {
|
|
10
|
+
export declare function createTestApp({ userCode, userCodeFilename, userCodeExtension, packages, withI18nBundle }: {
|
|
11
11
|
userCode: string;
|
|
12
12
|
userCodeFilename?: string;
|
|
13
|
+
userCodeExtension?: string;
|
|
13
14
|
packages?: string[];
|
|
14
15
|
withI18nBundle?: boolean;
|
|
15
16
|
}): Promise<TestApp>;
|
package/out/shared/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/shared/test.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,wBAAgB,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC;AAEF,wBAAsB,aAAa,CAAC,EAClC,QAAQ,EACR,gBAA0B,EAC1B,QAAQ,EACR,cAAsB,EACvB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB"}
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/shared/test.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,wBAAgB,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAU/E;AAED,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC;AAEF,wBAAsB,aAAa,CAAC,EAClC,QAAQ,EACR,gBAA0B,EAC1B,iBAAwB,EACxB,QAAQ,EACR,cAAsB,EACvB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB"}
|
package/out/shared/test.js
CHANGED
|
@@ -18,12 +18,12 @@ function mockLogger(traceEnabled, debugEnabled) {
|
|
|
18
18
|
error: jest.fn()
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
async function createTestApp({ userCode, userCodeFilename = 'index', packages, withI18nBundle = false }) {
|
|
21
|
+
async function createTestApp({ userCode, userCodeFilename = 'index', userCodeExtension = 'ts', packages, withI18nBundle = false }) {
|
|
22
22
|
const appDirectory = (0, directories_1.tmpDir)();
|
|
23
23
|
const userCodeDir = path_1.default.join(appDirectory, 'src', path_1.default.dirname(userCodeFilename));
|
|
24
24
|
const userCodeBaseName = path_1.default.basename(userCodeFilename);
|
|
25
25
|
await (0, fs_extra_1.ensureDir)(userCodeDir);
|
|
26
|
-
const userCodePath = path_1.default.join(userCodeDir, `${userCodeBaseName}
|
|
26
|
+
const userCodePath = path_1.default.join(userCodeDir, `${userCodeBaseName}.${userCodeExtension}`);
|
|
27
27
|
await (0, promises_1.writeFile)(userCodePath, userCode);
|
|
28
28
|
await (0, promises_1.writeFile)(path_1.default.join(appDirectory, 'tsconfig.json'), JSON.stringify({}));
|
|
29
29
|
const allPackages = ['@types/node', 'undici-types', ...(packages ?? [])];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli-shared",
|
|
3
|
-
"version": "9.3.0-next.
|
|
3
|
+
"version": "9.3.0-next.9",
|
|
4
4
|
"description": "Common functionality for Forge CLI",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"@sentry/node": "7.106.0",
|
|
19
19
|
"@vercel/detect-agent": "^1.2.3",
|
|
20
20
|
"adm-zip": "^0.5.10",
|
|
21
|
+
"archiver": "^8.0.0",
|
|
21
22
|
"array.prototype.flatmap": "^1.3.3",
|
|
22
23
|
"case": "^1.6.3",
|
|
23
24
|
"chalk": "^4.1.2",
|