build-strap 4.0.0-dev.46 → 4.0.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.
- package/README.md +3 -34
- package/dist/src/ant.d.ts +19 -0
- package/dist/src/ant.js +18 -0
- package/dist/src/cert.d.ts +12 -0
- package/dist/src/cert.js +91 -0
- package/dist/src/clean.d.ts +4 -0
- package/dist/src/clean.js +11 -0
- package/dist/src/copy.d.ts +7 -0
- package/dist/src/copy.js +53 -0
- package/dist/src/cp.d.ts +17 -0
- package/dist/src/cp.js +88 -0
- package/dist/src/docker.container.d.ts +73 -0
- package/dist/src/docker.container.js +247 -0
- package/dist/src/docker.d.ts +68 -0
- package/dist/src/docker.js +188 -0
- package/dist/src/docker.network.d.ts +42 -0
- package/dist/src/docker.network.js +85 -0
- package/dist/src/docker.volume.d.ts +26 -0
- package/dist/src/docker.volume.js +62 -0
- package/dist/src/dockerCleanup.d.ts +38 -0
- package/dist/src/dockerCleanup.js +77 -0
- package/dist/src/dockerCompose.d.ts +154 -0
- package/dist/src/dockerCompose.js +439 -0
- package/dist/src/fs.d.ts +5 -0
- package/dist/src/fs.js +38 -0
- package/dist/src/git.d.ts +9 -0
- package/dist/src/git.js +24 -0
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.js +20 -0
- package/dist/src/maps.d.ts +33 -0
- package/dist/src/maps.js +41 -0
- package/dist/src/npm.d.ts +35 -0
- package/dist/src/npm.js +104 -0
- package/dist/src/pkg.d.ts +33 -0
- package/dist/src/pkg.js +33 -0
- package/dist/src/publish.d.ts +27 -0
- package/dist/src/publish.js +57 -0
- package/dist/src/run.d.ts +13 -0
- package/dist/src/run.js +44 -0
- package/dist/src/tgz.d.ts +13 -0
- package/dist/src/tgz.js +67 -0
- package/dist/src/version.d.ts +34 -0
- package/dist/src/version.js +101 -0
- package/dist/src/yarn.d.ts +26 -0
- package/dist/src/yarn.js +75 -0
- package/package.json +74 -20
- package/ant.js +0 -43
- package/ant.js.flow +0 -42
- package/artifactory.js +0 -617
- package/artifactory.js.flow +0 -616
- package/cert.conf +0 -20
- package/cert.js +0 -153
- package/cert.js.flow +0 -152
- package/clean.js +0 -20
- package/clean.js.flow +0 -19
- package/copy.js +0 -80
- package/copy.js.flow +0 -79
- package/cp.js +0 -173
- package/cp.js.flow +0 -172
- package/docker.container.js +0 -390
- package/docker.container.js.flow +0 -389
- package/docker.js +0 -365
- package/docker.js.flow +0 -364
- package/docker.network.js +0 -160
- package/docker.network.js.flow +0 -159
- package/docker.volume.js +0 -136
- package/docker.volume.js.flow +0 -136
- package/dockerCleanup.js +0 -152
- package/dockerCleanup.js.flow +0 -151
- package/dockerCompose.js +0 -766
- package/dockerCompose.js.flow +0 -765
- package/flow.js +0 -21
- package/flow.js.flow +0 -20
- package/fs.js +0 -95
- package/fs.js.flow +0 -96
- package/git.js +0 -35
- package/git.js.flow +0 -34
- package/hg.js +0 -35
- package/hg.js.flow +0 -34
- package/index.js +0 -27
- package/index.js.flow +0 -26
- package/inline-resources.js +0 -158
- package/inline-resources.js.flow +0 -157
- package/maps.js +0 -112
- package/maps.js.flow +0 -111
- package/npm.js +0 -145
- package/npm.js.flow +0 -144
- package/pkg.js +0 -81
- package/pkg.js.flow +0 -80
- package/publish.js +0 -145
- package/publish.js.flow +0 -144
- package/run.js +0 -90
- package/run.js.flow +0 -89
- package/src/ant.js +0 -42
- package/src/artifactory.js +0 -616
- package/src/cert.conf +0 -20
- package/src/cert.js +0 -152
- package/src/clean.js +0 -19
- package/src/copy.js +0 -79
- package/src/cp.js +0 -172
- package/src/docker.container.js +0 -389
- package/src/docker.js +0 -364
- package/src/docker.network.js +0 -159
- package/src/docker.volume.js +0 -136
- package/src/dockerCleanup.js +0 -151
- package/src/dockerCompose.js +0 -765
- package/src/flow.js +0 -20
- package/src/fs.js +0 -96
- package/src/git.js +0 -34
- package/src/hg.js +0 -34
- package/src/index.js +0 -26
- package/src/inline-resources.js +0 -157
- package/src/maps.js +0 -111
- package/src/npm.js +0 -144
- package/src/pkg.js +0 -80
- package/src/publish.js +0 -144
- package/src/run.js +0 -89
- package/src/test.js +0 -55
- package/src/tgz.js +0 -101
- package/src/version.js +0 -142
- package/src/yarn.js +0 -123
- package/test.js +0 -56
- package/test.js.flow +0 -55
- package/tgz.js +0 -102
- package/tgz.js.flow +0 -101
- package/version.js +0 -143
- package/version.js.flow +0 -142
- package/yarn.js +0 -124
- package/yarn.js.flow +0 -123
package/flow.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.flow = flow;
|
|
2
|
-
var _cp = require("./cp");
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// Run the flow linter
|
|
10
|
-
async function flow(opts) {
|
|
11
|
-
const { allBranches = false, incremental = true } = opts || {};
|
|
12
|
-
return (0, _cp.spawn)(
|
|
13
|
-
'flow',
|
|
14
|
-
[
|
|
15
|
-
incremental ? 'status' : 'check',
|
|
16
|
-
...(allBranches ? ['--show-all-branches'] : [])],
|
|
17
|
-
|
|
18
|
-
{ stdio: 'inherit', shell: true });
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mbG93LmpzIl0sIm5hbWVzIjpbImZsb3ciLCJvcHRzIiwiYWxsQnJhbmNoZXMiLCJpbmNyZW1lbnRhbCIsInN0ZGlvIiwic2hlbGwiXSwibWFwcGluZ3MiOiI7QUFDQTs7Ozs7OztBQU9BO0FBQ08sZUFBZUEsSUFBZixDQUFvQkMsSUFBcEIsRUFBeUQ7QUFDOUQsUUFBTSxFQUFFQyxXQUFXLEdBQUcsS0FBaEIsRUFBdUJDLFdBQVcsR0FBRyxJQUFyQyxLQUE4Q0YsSUFBSSxJQUFJLEVBQTVEO0FBQ0EsU0FBTztBQUNMLFFBREs7QUFFTDtBQUNFRSxFQUFBQSxXQUFXLEdBQUcsUUFBSCxHQUFjLE9BRDNCO0FBRUUsTUFBSUQsV0FBVyxHQUFHLENBQUMscUJBQUQsQ0FBSCxHQUE2QixFQUE1QyxDQUZGLENBRks7O0FBTUwsSUFBRUUsS0FBSyxFQUFFLFNBQVQsRUFBb0JDLEtBQUssRUFBRSxJQUEzQixFQU5LLENBQVA7O0FBUUQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICcuL2NwJztcblxuZXhwb3J0IHR5cGUgRmxvd09wdGlvbnMgPSB7fFxuICBhbGxCcmFuY2hlcz86IGJvb2xlYW4sXG4gIGluY3JlbWVudGFsPzogYm9vbGVhbixcbnx9O1xuXG4vLyBSdW4gdGhlIGZsb3cgbGludGVyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmxvdyhvcHRzPzogRmxvd09wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGFsbEJyYW5jaGVzID0gZmFsc2UsIGluY3JlbWVudGFsID0gdHJ1ZSB9ID0gb3B0cyB8fCB7fTtcbiAgcmV0dXJuIHNwYXduKFxuICAgICdmbG93JyxcbiAgICBbXG4gICAgICBpbmNyZW1lbnRhbCA/ICdzdGF0dXMnIDogJ2NoZWNrJyxcbiAgICAgIC4uLihhbGxCcmFuY2hlcyA/IFsnLS1zaG93LWFsbC1icmFuY2hlcyddIDogW10pLFxuICAgIF0sXG4gICAgeyBzdGRpbzogJ2luaGVyaXQnLCBzaGVsbDogdHJ1ZSB9LFxuICApO1xufVxuIl19
|
package/flow.js.flow
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { spawn } from './cp';
|
|
3
|
-
|
|
4
|
-
export type FlowOptions = {|
|
|
5
|
-
allBranches?: boolean,
|
|
6
|
-
incremental?: boolean,
|
|
7
|
-
|};
|
|
8
|
-
|
|
9
|
-
// Run the flow linter
|
|
10
|
-
export async function flow(opts?: FlowOptions): Promise<string> {
|
|
11
|
-
const { allBranches = false, incremental = true } = opts || {};
|
|
12
|
-
return spawn(
|
|
13
|
-
'flow',
|
|
14
|
-
[
|
|
15
|
-
incremental ? 'status' : 'check',
|
|
16
|
-
...(allBranches ? ['--show-all-branches'] : []),
|
|
17
|
-
],
|
|
18
|
-
{ stdio: 'inherit', shell: true },
|
|
19
|
-
);
|
|
20
|
-
}
|
package/fs.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.writeFile = exports.renameFile = exports.readFile = exports.readDir = exports.moveDir = exports.makeDir = exports.copyFile = exports.copyDir = exports.cleanDir = void 0;
|
|
2
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
3
|
-
var _path = _interopRequireDefault(require("path"));
|
|
4
|
-
var _glob = _interopRequireDefault(require("glob"));
|
|
5
|
-
var _rimraf = _interopRequireDefault(require("rimraf"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
6
|
-
|
|
7
|
-
const readFile = async (
|
|
8
|
-
file,
|
|
9
|
-
options =
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
'utf8') =>
|
|
16
|
-
_fsExtra.default.readFile(file, options);exports.readFile = readFile;
|
|
17
|
-
|
|
18
|
-
const writeFile = async (
|
|
19
|
-
file,
|
|
20
|
-
data,
|
|
21
|
-
options) =>
|
|
22
|
-
_fsExtra.default.writeFile(file, data, options);exports.writeFile = writeFile;
|
|
23
|
-
|
|
24
|
-
const renameFile = async (
|
|
25
|
-
source,
|
|
26
|
-
target) =>
|
|
27
|
-
_fsExtra.default.rename(source, target);exports.renameFile = renameFile;
|
|
28
|
-
|
|
29
|
-
const copyFile = async (source, target) =>
|
|
30
|
-
_fsExtra.default.copyFile(source, target);exports.copyFile = copyFile;
|
|
31
|
-
|
|
32
|
-
const readDir = async (
|
|
33
|
-
pattern,
|
|
34
|
-
options) =>
|
|
35
|
-
|
|
36
|
-
new Promise((resolve, reject) =>
|
|
37
|
-
(0, _glob.default)(pattern, options || {}, (err, result) =>
|
|
38
|
-
err ? reject(err) : resolve(result)));exports.readDir = readDir;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const makeDir = async (name) =>
|
|
43
|
-
_fsExtra.default.ensureDir(name);exports.makeDir = makeDir;
|
|
44
|
-
|
|
45
|
-
const moveDir = async (
|
|
46
|
-
source,
|
|
47
|
-
target) =>
|
|
48
|
-
{
|
|
49
|
-
const dirs = await readDir('**/*.*', {
|
|
50
|
-
cwd: source,
|
|
51
|
-
nosort: true,
|
|
52
|
-
dot: true });
|
|
53
|
-
|
|
54
|
-
await Promise.all(
|
|
55
|
-
dirs.map(async (dir) => {
|
|
56
|
-
const from = _path.default.resolve(source, dir);
|
|
57
|
-
const to = _path.default.resolve(target, dir);
|
|
58
|
-
await makeDir(_path.default.dirname(to));
|
|
59
|
-
await renameFile(from, to);
|
|
60
|
-
}));
|
|
61
|
-
|
|
62
|
-
};exports.moveDir = moveDir;
|
|
63
|
-
|
|
64
|
-
const copyDir = async (
|
|
65
|
-
source,
|
|
66
|
-
target,
|
|
67
|
-
fileGlob = '**/*.*',
|
|
68
|
-
globOptions = null,
|
|
69
|
-
renameFn = (n) => n) =>
|
|
70
|
-
{
|
|
71
|
-
const paths = await readDir(fileGlob, {
|
|
72
|
-
cwd: source,
|
|
73
|
-
nosort: true,
|
|
74
|
-
nodir: true,
|
|
75
|
-
dot: true,
|
|
76
|
-
...globOptions });
|
|
77
|
-
|
|
78
|
-
await Promise.all(
|
|
79
|
-
paths.map(async (p) => {
|
|
80
|
-
const from = _path.default.resolve(source, p);
|
|
81
|
-
const to = _path.default.resolve(target, renameFn(p));
|
|
82
|
-
await makeDir(_path.default.dirname(to));
|
|
83
|
-
await copyFile(from, to);
|
|
84
|
-
}));
|
|
85
|
-
|
|
86
|
-
};exports.copyDir = copyDir;
|
|
87
|
-
|
|
88
|
-
const cleanDir = async (
|
|
89
|
-
pattern,
|
|
90
|
-
globOptions) =>
|
|
91
|
-
|
|
92
|
-
new Promise((resolve, reject) =>
|
|
93
|
-
(0, _rimraf.default)(pattern, { glob: globOptions }, (err) =>
|
|
94
|
-
err ? reject(err) : resolve()));exports.cleanDir = cleanDir;
|
|
95
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9mcy5qcyJdLCJuYW1lcyI6WyJyZWFkRmlsZSIsImZpbGUiLCJvcHRpb25zIiwiZnMiLCJ3cml0ZUZpbGUiLCJkYXRhIiwicmVuYW1lRmlsZSIsInNvdXJjZSIsInRhcmdldCIsInJlbmFtZSIsImNvcHlGaWxlIiwicmVhZERpciIsInBhdHRlcm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVyciIsInJlc3VsdCIsIm1ha2VEaXIiLCJuYW1lIiwiZW5zdXJlRGlyIiwibW92ZURpciIsImRpcnMiLCJjd2QiLCJub3NvcnQiLCJkb3QiLCJhbGwiLCJtYXAiLCJkaXIiLCJmcm9tIiwicGF0aCIsInRvIiwiZGlybmFtZSIsImNvcHlEaXIiLCJmaWxlR2xvYiIsImdsb2JPcHRpb25zIiwicmVuYW1lRm4iLCJuIiwicGF0aHMiLCJub2RpciIsInAiLCJjbGVhbkRpciIsImdsb2IiXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RDs7QUFFTyxNQUFNQSxRQUFRLEdBQUc7QUFDdEJDLElBRHNCO0FBRXRCQyxPQU1LOzs7Ozs7QUFBRyxNQVJjO0FBU0ZDLGlCQUFHSCxRQUFILENBQVlDLElBQVosRUFBa0JDLE9BQWxCLENBVGYsQzs7QUFXQSxNQUFNRSxTQUFTLEdBQUc7QUFDdkJILElBRHVCO0FBRXZCSSxJQUZ1QjtBQUd2QkgsT0FIdUI7QUFJTEMsaUJBQUdDLFNBQUgsQ0FBYUgsSUFBYixFQUFtQkksSUFBbkIsRUFBeUJILE9BQXpCLENBSmIsQzs7QUFNQSxNQUFNSSxVQUFVLEdBQUc7QUFDeEJDLE1BRHdCO0FBRXhCQyxNQUZ3QjtBQUdOTCxpQkFBR00sTUFBSCxDQUFVRixNQUFWLEVBQWtCQyxNQUFsQixDQUhiLEM7O0FBS0EsTUFBTUUsUUFBUSxHQUFHLE9BQU9ILE1BQVAsRUFBdUJDLE1BQXZCO0FBQ3RCTCxpQkFBR08sUUFBSCxDQUFZSCxNQUFaLEVBQW9CQyxNQUFwQixDQURLLEM7O0FBR0EsTUFBTUcsT0FBTyxH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d1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGdsb2IsIHsgdHlwZSBPcHRpb25zIGFzIEdsb2JPcHRpb25zIH0gZnJvbSAnZ2xvYic7XG5pbXBvcnQgcmltcmFmIGZyb20gJ3JpbXJhZic7XG5cbmV4cG9ydCBjb25zdCByZWFkRmlsZSA9IGFzeW5jIChcbiAgZmlsZTogc3RyaW5nLFxuICBvcHRpb25zOlxuICAgIHwgc3RyaW5nXG4gICAgfCB7XG4gICAgICAgIGVuY29kaW5nOiBzdHJpbmcsXG4gICAgICAgIGZsYWc/OiBzdHJpbmcsXG4gICAgICAgIC4uLlxuICAgICAgfSA9ICd1dGY4Jyxcbik6IFByb21pc2U8c3RyaW5nPiA9PiBmcy5yZWFkRmlsZShmaWxlLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHdyaXRlRmlsZSA9IGFzeW5jIChcbiAgZmlsZTogc3RyaW5nLFxuICBkYXRhOiBzdHJpbmcgfCBCdWZmZXIsXG4gIG9wdGlvbnM/OiBzdHJpbmcgfCBPYmplY3QsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHJlbmFtZUZpbGUgPSBhc3luYyAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICB0YXJnZXQ6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4gPT4gZnMucmVuYW1lKHNvdXJjZSwgdGFyZ2V0KTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGaWxlID0gYXN5bmMgKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT5cbiAgZnMuY29weUZpbGUoc291cmNlLCB0YXJnZXQpO1xuXG5leHBvcnQgY29uc3QgcmVhZERpciA9IGFzeW5jIChcbiAgcGF0dGVybjogc3RyaW5nLFxuICBvcHRpb25zPzogT2JqZWN0LFxuKTogUHJvbWlzZTxzdHJpbmdbXT4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICBnbG9iKHBhdHRlcm4sIG9wdGlvbnMgfHwge30sIChlcnIsIHJlc3VsdCkgPT5cbiAgICAgIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShyZXN1bHQpLFxuICAgICksXG4gICk7XG5cbmV4cG9ydCBjb25zdCBtYWtlRGlyID0gYXN5bmMgKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT5cbiAgZnMuZW5zdXJlRGlyKG5hbWUpO1xuXG5leHBvcnQgY29uc3QgbW92ZURpciA9IGFzeW5jIChcbiAgc291cmNlOiBzdHJpbmcsXG4gIHRhcmdldDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGRpcnMgPSBhd2FpdCByZWFkRGlyKCcqKi8qLionLCB7XG4gICAgY3dkOiBzb3VyY2UsXG4gICAgbm9zb3J0OiB0cnVlLFxuICAgIGRvdDogdHJ1ZSxcbiAgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRpcnMubWFwKGFzeW5jIChkaXIpID0+IHtcbiAgICAgIGNvbnN0IGZyb20gPSBwYXRoLnJlc29sdmUoc291cmNlLCBkaXIpO1xuICAgICAgY29uc3QgdG8gPSBwYXRoLnJlc29sdmUodGFyZ2V0LCBkaXIpO1xuICAgICAgYXdhaXQgbWFrZURpcihwYXRoLmRpcm5hbWUodG8pKTtcbiAgICAgIGF3YWl0IHJlbmFtZUZpbGUoZnJvbSwgdG8pO1xuICAgIH0pLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlEaXIgPSBhc3luYyAoXG4gIHNvdXJjZTogc3RyaW5nLFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgZmlsZUdsb2I6IHN0cmluZyA9ICcqKi8qLionLFxuICBnbG9iT3B0aW9ucz86ID9PYmplY3QgPSBudWxsLFxuICByZW5hbWVGbjogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nID0gKG4pID0+IG4sXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcGF0aHMgPSBhd2FpdCByZWFkRGlyKGZpbGVHbG9iLCB7XG4gICAgY3dkOiBzb3VyY2UsXG4gICAgbm9zb3J0OiB0cnVlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIGRvdDogdHJ1ZSxcbiAgICAuLi5nbG9iT3B0aW9ucyxcbiAgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHBhdGhzLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgY29uc3QgZnJvbSA9IHBhdGgucmVzb2x2ZShzb3VyY2UsIHApO1xuICAgICAgY29uc3QgdG8gPSBwYXRoLnJlc29sdmUodGFyZ2V0LCByZW5hbWVGbihwKSk7XG4gICAgICBhd2FpdCBtYWtlRGlyKHBhdGguZGlybmFtZSh0bykpO1xuICAgICAgYXdhaXQgY29weUZpbGUoZnJvbSwgdG8pO1xuICAgIH0pLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFuRGlyID0gYXN5bmMgKFxuICBwYXR0ZXJuOiBzdHJpbmcsXG4gIGdsb2JPcHRpb25zPzogR2xvYk9wdGlvbnMgfCBib29sZWFuLFxuKTogUHJvbWlzZTx2b2lkPiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHJpbXJhZihwYXR0ZXJuLCB7IGdsb2I6IGdsb2JPcHRpb25zIH0sIChlcnIpID0+XG4gICAgICBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKSxcbiAgICApLFxuICApO1xuIl19
|
package/fs.js.flow
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import glob, { type Options as GlobOptions } from 'glob';
|
|
5
|
-
import rimraf from 'rimraf';
|
|
6
|
-
|
|
7
|
-
export const readFile = async (
|
|
8
|
-
file: string,
|
|
9
|
-
options:
|
|
10
|
-
| string
|
|
11
|
-
| {
|
|
12
|
-
encoding: string,
|
|
13
|
-
flag?: string,
|
|
14
|
-
...
|
|
15
|
-
} = 'utf8',
|
|
16
|
-
): Promise<string> => fs.readFile(file, options);
|
|
17
|
-
|
|
18
|
-
export const writeFile = async (
|
|
19
|
-
file: string,
|
|
20
|
-
data: string | Buffer,
|
|
21
|
-
options?: string | Object,
|
|
22
|
-
): Promise<void> => fs.writeFile(file, data, options);
|
|
23
|
-
|
|
24
|
-
export const renameFile = async (
|
|
25
|
-
source: string,
|
|
26
|
-
target: string,
|
|
27
|
-
): Promise<void> => fs.rename(source, target);
|
|
28
|
-
|
|
29
|
-
export const copyFile = async (source: string, target: string): Promise<void> =>
|
|
30
|
-
fs.copyFile(source, target);
|
|
31
|
-
|
|
32
|
-
export const readDir = async (
|
|
33
|
-
pattern: string,
|
|
34
|
-
options?: Object,
|
|
35
|
-
): Promise<string[]> =>
|
|
36
|
-
new Promise((resolve, reject) =>
|
|
37
|
-
glob(pattern, options || {}, (err, result) =>
|
|
38
|
-
err ? reject(err) : resolve(result),
|
|
39
|
-
),
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
export const makeDir = async (name: string): Promise<void> =>
|
|
43
|
-
fs.ensureDir(name);
|
|
44
|
-
|
|
45
|
-
export const moveDir = async (
|
|
46
|
-
source: string,
|
|
47
|
-
target: string,
|
|
48
|
-
): Promise<void> => {
|
|
49
|
-
const dirs = await readDir('**/*.*', {
|
|
50
|
-
cwd: source,
|
|
51
|
-
nosort: true,
|
|
52
|
-
dot: true,
|
|
53
|
-
});
|
|
54
|
-
await Promise.all(
|
|
55
|
-
dirs.map(async (dir) => {
|
|
56
|
-
const from = path.resolve(source, dir);
|
|
57
|
-
const to = path.resolve(target, dir);
|
|
58
|
-
await makeDir(path.dirname(to));
|
|
59
|
-
await renameFile(from, to);
|
|
60
|
-
}),
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export const copyDir = async (
|
|
65
|
-
source: string,
|
|
66
|
-
target: string,
|
|
67
|
-
fileGlob: string = '**/*.*',
|
|
68
|
-
globOptions?: ?Object = null,
|
|
69
|
-
renameFn: (name: string) => string = (n) => n,
|
|
70
|
-
): Promise<void> => {
|
|
71
|
-
const paths = await readDir(fileGlob, {
|
|
72
|
-
cwd: source,
|
|
73
|
-
nosort: true,
|
|
74
|
-
nodir: true,
|
|
75
|
-
dot: true,
|
|
76
|
-
...globOptions,
|
|
77
|
-
});
|
|
78
|
-
await Promise.all(
|
|
79
|
-
paths.map(async (p) => {
|
|
80
|
-
const from = path.resolve(source, p);
|
|
81
|
-
const to = path.resolve(target, renameFn(p));
|
|
82
|
-
await makeDir(path.dirname(to));
|
|
83
|
-
await copyFile(from, to);
|
|
84
|
-
}),
|
|
85
|
-
);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const cleanDir = async (
|
|
89
|
-
pattern: string,
|
|
90
|
-
globOptions?: GlobOptions | boolean,
|
|
91
|
-
): Promise<void> =>
|
|
92
|
-
new Promise((resolve, reject) =>
|
|
93
|
-
rimraf(pattern, { glob: globOptions }, (err) =>
|
|
94
|
-
err ? reject(err) : resolve(),
|
|
95
|
-
),
|
|
96
|
-
);
|
package/git.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.git = git;exports.gitBranch = gitBranch;exports.gitInfo = gitInfo;exports.gitRevId = gitRevId;
|
|
2
|
-
var _cp = require("./cp");
|
|
3
|
-
|
|
4
|
-
async function git(args) {
|
|
5
|
-
return (await (0, _cp.exec)(`git ${args.join(' ')}`)).stdout.toString();
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
async function gitBranch() {
|
|
9
|
-
return (await git(['symbolic-ref', '--short', 'HEAD'])).
|
|
10
|
-
replace(/[_+/]/g, '-').
|
|
11
|
-
trim();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async function gitRevId() {
|
|
15
|
-
return (await git(['rev-parse', '--short=12', 'HEAD'])).
|
|
16
|
-
replace(/[+]/g, '').
|
|
17
|
-
trim();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
let info = null;
|
|
26
|
-
async function gitInfo(noCache = false) {
|
|
27
|
-
if (!info || noCache) {
|
|
28
|
-
info = {
|
|
29
|
-
branch: await gitBranch(),
|
|
30
|
-
revision: await gitRevId() };
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
return info;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9naXQuanMiXSwibmFtZXMiOlsiZ2l0IiwiYXJncyIsImpvaW4iLCJzdGRvdXQiLCJ0b1N0cmluZyIsImdpdEJyYW5jaCIsInJlcGxhY2UiLCJ0cmltIiwiZ2l0UmV2SWQiLCJpbmZvIiwiZ2l0SW5mbyIsIm5vQ2FjaGUiLCJicmFuY2giLCJyZXZpc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUNBOztBQUVPLGVBQWVBLEdBQWYsQ0FBbUJDLElBQW5CLEVBQW9EO0FBQ3pELFNBQU8sQ0FBQyxNQUFNLGNBQU0sT0FBTUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsR0FBVixDQUFlLEVBQTNCLENBQVAsRUFBc0NDLE1BQXRDLENBQTZDQyxRQUE3QyxFQUFQO0FBQ0Q7O0FBRU0sZUFBZUMsU0FBZixHQUE0QztBQUNqRCxTQUFPLENBQUMsTUFBTUwsR0FBRyxDQUFDLENBQUMsY0FBRCxFQUFpQixTQUFqQixFQUE0QixNQUE1QixDQUFELENBQVY7QUFDSk0sRUFBQUEsT0FESSxDQUNJLFFBREosRUFDYyxHQURkO0FBRUpDLEVBQUFBLElBRkksRUFBUDtBQUdEOztBQUVNLGVBQWVDLFFBQWYsR0FBMkM7QUFDaEQsU0FBTyxDQUFDLE1BQU1SLEdBQUcsQ0FBQyxDQUFDLFdBQUQsRUFBYyxZQUFkLEVBQTRCLE1BQTVCLENBQUQsQ0FBVjtBQUNKTSxFQUFBQSxPQURJLENBQ0ksTUFESixFQUNZLEVBRFo7QUFFSkMsRUFBQUEsSUFGSSxFQUFQO0FBR0Q7Ozs7Ozs7QUFPRCxJQUFJRSxJQUFJLEdBQUcsSUFBWDtBQUNPLGVBQWVDLE9BQWYsQ0FBdUJDLE9BQWdCLEdBQUcsS0FBMUMsRUFBbUU7QUFDeEUsTUFBSSxDQUFDRixJQUFELElBQVNFLE9BQWIsRUFBc0I7QUFDcEJGLElBQUFBLElBQUksR0FBRztBQUNMRyxNQUFBQSxNQUFNLEVBQUUsTUFBTVAsU0FBUyxFQURsQjtBQUVMUSxNQUFBQSxRQUFRLEVBQUUsTUFBTUwsUUFBUSxFQUZuQixFQUFQOztBQUlEO0FBQ0QsU0FBT0MsSUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICcuL2NwJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdpdChhcmdzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZXhlYyhgZ2l0ICR7YXJncy5qb2luKCcgJyl9YCkpLnN0ZG91dC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2l0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZ2l0KFsnc3ltYm9saWMtcmVmJywgJy0tc2hvcnQnLCAnSEVBRCddKSlcbiAgICAucmVwbGFjZSgvW18rL10vZywgJy0nKVxuICAgIC50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaXRSZXZJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdpdChbJ3Jldi1wYXJzZScsICctLXNob3J0PTEyJywgJ0hFQUQnXSkpXG4gICAgLnJlcGxhY2UoL1srXS9nLCAnJylcbiAgICAudHJpbSgpO1xufVxuXG50eXBlIEdpdEluZm8gPSB7XG4gIGJyYW5jaDogc3RyaW5nLFxuICByZXZpc2lvbjogc3RyaW5nLFxufTtcblxubGV0IGluZm8gPSBudWxsO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdpdEluZm8obm9DYWNoZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxHaXRJbmZvPiB7XG4gIGlmICghaW5mbyB8fCBub0NhY2hlKSB7XG4gICAgaW5mbyA9IHtcbiAgICAgIGJyYW5jaDogYXdhaXQgZ2l0QnJhbmNoKCksXG4gICAgICByZXZpc2lvbjogYXdhaXQgZ2l0UmV2SWQoKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBpbmZvO1xufVxuIl19
|
package/git.js.flow
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { exec } from './cp';
|
|
3
|
-
|
|
4
|
-
export async function git(args: string[]): Promise<string> {
|
|
5
|
-
return (await exec(`git ${args.join(' ')}`)).stdout.toString();
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export async function gitBranch(): Promise<string> {
|
|
9
|
-
return (await git(['symbolic-ref', '--short', 'HEAD']))
|
|
10
|
-
.replace(/[_+/]/g, '-')
|
|
11
|
-
.trim();
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export async function gitRevId(): Promise<string> {
|
|
15
|
-
return (await git(['rev-parse', '--short=12', 'HEAD']))
|
|
16
|
-
.replace(/[+]/g, '')
|
|
17
|
-
.trim();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
type GitInfo = {
|
|
21
|
-
branch: string,
|
|
22
|
-
revision: string,
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
let info = null;
|
|
26
|
-
export async function gitInfo(noCache: boolean = false): Promise<GitInfo> {
|
|
27
|
-
if (!info || noCache) {
|
|
28
|
-
info = {
|
|
29
|
-
branch: await gitBranch(),
|
|
30
|
-
revision: await gitRevId(),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return info;
|
|
34
|
-
}
|
package/hg.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.hg = hg;exports.hgBranch = hgBranch;exports.hgInfo = hgInfo;exports.hgRevId = hgRevId;
|
|
2
|
-
var _cp = require("./cp");
|
|
3
|
-
|
|
4
|
-
async function hg(args, cwd) {
|
|
5
|
-
// $FlowFixMe
|
|
6
|
-
return (await (0, _cp.exec)(`hg ${args.join(' ')}`, cwd ? { cwd } : {})).stdout;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
async function hgBranch(cwd) {
|
|
10
|
-
return (await hg(['branch'], cwd)).replace(/[_+/]/g, '-').trim();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async function hgRevId(cwd) {
|
|
14
|
-
return (await hg(['id', '-i'], cwd)).replace(/[+]/g, '').trim();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
let info = null;
|
|
23
|
-
async function hgInfo(
|
|
24
|
-
noCache = false,
|
|
25
|
-
cwd)
|
|
26
|
-
{
|
|
27
|
-
if (!info || noCache) {
|
|
28
|
-
info = {
|
|
29
|
-
branch: await hgBranch(cwd),
|
|
30
|
-
revision: await hgRevId(cwd) };
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
return info;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oZy5qcyJdLCJuYW1lcyI6WyJoZyIsImFyZ3MiLCJjd2QiLCJqb2luIiwic3Rkb3V0IiwiaGdCcmFuY2giLCJyZXBsYWNlIiwidHJpbSIsImhnUmV2SWQiLCJpbmZvIiwiaGdJbmZvIiwibm9DYWNoZSIsImJyYW5jaCIsInJldmlzaW9uIl0sIm1hcHBpbmdzIjoiO0FBQ0E7O0FBRU8sZUFBZUEsRUFBZixDQUFrQkMsSUFBbEIsRUFBa0NDLEdBQWxDLEVBQWlFO0FBQ3RFO0FBQ0EsU0FBTyxDQUFDLE1BQU0sY0FBTSxNQUFLRCxJQUFJLENBQUNFLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFBMUIsRUFBNkJELEdBQUcsR0FBRyxFQUFFQSxHQUFGLEVBQUgsR0FBYSxFQUE3QyxDQUFQLEVBQXlERSxNQUFoRTtBQUNEOztBQUVNLGVBQWVDLFFBQWYsQ0FBd0JILEdBQXhCLEVBQXVEO0FBQzVELFNBQU8sQ0FBQyxNQUFNRixFQUFFLENBQUMsQ0FBQyxRQUFELENBQUQsRUFBYUUsR0FBYixDQUFULEVBQTRCSSxPQUE1QixDQUFvQyxRQUFwQyxFQUE4QyxHQUE5QyxFQUFtREMsSUFBbkQsRUFBUDtBQUNEOztBQUVNLGVBQWVDLE9BQWYsQ0FBdUJOLEdBQXZCLEVBQXNEO0FBQzNELFNBQU8sQ0FBQyxNQUFNRixFQUFFLENBQUMsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUFELEVBQWVFLEdBQWYsQ0FBVCxFQUE4QkksT0FBOUIsQ0FBc0MsTUFBdEMsRUFBOEMsRUFBOUMsRUFBa0RDLElBQWxELEVBQVA7QUFDRDs7Ozs7OztBQU9ELElBQUlFLElBQUksR0FBRyxJQUFYO0FBQ08sZUFBZUMsTUFBZjtBQUNMQyxPQUFnQixHQUFHLEtBRGQ7QUFFTFQsR0FGSztBQUdZO0FBQ2pCLE1BQUksQ0FBQ08sSUFBRCxJQUFTRSxPQUFiLEVBQXNCO0FBQ3BCRixJQUFBQSxJQUFJLEdBQUc7QUFDTEcsTUFBQUEsTUFBTSxFQUFFLE1BQU1QLFFBQVEsQ0FBQ0gsR0FBRCxDQURqQjtBQUVMVyxNQUFBQSxRQUFRLEVBQUUsTUFBTUwsT0FBTyxDQUFDTixHQUFELENBRmxCLEVBQVA7O0FBSUQ7QUFDRCxTQUFPTyxJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJy4vY3AnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGcoYXJnczogc3RyaW5nW10sIGN3ZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vICRGbG93Rml4TWVcbiAgcmV0dXJuIChhd2FpdCBleGVjKGBoZyAke2FyZ3Muam9pbignICcpfWAsIGN3ZCA/IHsgY3dkIH0gOiB7fSkpLnN0ZG91dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhnQnJhbmNoKGN3ZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgaGcoWydicmFuY2gnXSwgY3dkKSkucmVwbGFjZSgvW18rL10vZywgJy0nKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoZ1JldklkKGN3ZD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgaGcoWydpZCcsICctaSddLCBjd2QpKS5yZXBsYWNlKC9bK10vZywgJycpLnRyaW0oKTtcbn1cblxudHlwZSBIZ0luZm8gPSB7XG4gIGJyYW5jaDogc3RyaW5nLFxuICByZXZpc2lvbjogc3RyaW5nLFxufTtcblxubGV0IGluZm8gPSBudWxsO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhnSW5mbyhcbiAgbm9DYWNoZTogYm9vbGVhbiA9IGZhbHNlLFxuICBjd2Q/OiBzdHJpbmcsXG4pOiBQcm9taXNlPEhnSW5mbz4ge1xuICBpZiAoIWluZm8gfHwgbm9DYWNoZSkge1xuICAgIGluZm8gPSB7XG4gICAgICBicmFuY2g6IGF3YWl0IGhnQnJhbmNoKGN3ZCksXG4gICAgICByZXZpc2lvbjogYXdhaXQgaGdSZXZJZChjd2QpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGluZm87XG59XG4iXX0=
|
package/hg.js.flow
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { exec } from './cp';
|
|
3
|
-
|
|
4
|
-
export async function hg(args: string[], cwd?: string): Promise<string> {
|
|
5
|
-
// $FlowFixMe
|
|
6
|
-
return (await exec(`hg ${args.join(' ')}`, cwd ? { cwd } : {})).stdout;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export async function hgBranch(cwd?: string): Promise<string> {
|
|
10
|
-
return (await hg(['branch'], cwd)).replace(/[_+/]/g, '-').trim();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export async function hgRevId(cwd?: string): Promise<string> {
|
|
14
|
-
return (await hg(['id', '-i'], cwd)).replace(/[+]/g, '').trim();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
type HgInfo = {
|
|
18
|
-
branch: string,
|
|
19
|
-
revision: string,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
let info = null;
|
|
23
|
-
export async function hgInfo(
|
|
24
|
-
noCache: boolean = false,
|
|
25
|
-
cwd?: string,
|
|
26
|
-
): Promise<HgInfo> {
|
|
27
|
-
if (!info || noCache) {
|
|
28
|
-
info = {
|
|
29
|
-
branch: await hgBranch(cwd),
|
|
30
|
-
revision: await hgRevId(cwd),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return info;
|
|
34
|
-
}
|
package/index.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
var _ant = require("./ant");Object.keys(_ant).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _ant[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _ant[key];} });});
|
|
3
|
-
var _artifactory = require("./artifactory");Object.keys(_artifactory).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _artifactory[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _artifactory[key];} });});
|
|
4
|
-
var _cert = require("./cert");Object.keys(_cert).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _cert[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _cert[key];} });});
|
|
5
|
-
var _clean = require("./clean");Object.keys(_clean).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _clean[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _clean[key];} });});
|
|
6
|
-
var _copy = require("./copy");Object.keys(_copy).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _copy[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _copy[key];} });});
|
|
7
|
-
var _cp = require("./cp");Object.keys(_cp).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _cp[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _cp[key];} });});
|
|
8
|
-
var _docker = require("./docker");Object.keys(_docker).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _docker[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _docker[key];} });});
|
|
9
|
-
var _docker2 = require("./docker.container");Object.keys(_docker2).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _docker2[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _docker2[key];} });});
|
|
10
|
-
var _docker3 = require("./docker.network");Object.keys(_docker3).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _docker3[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _docker3[key];} });});
|
|
11
|
-
var _docker4 = require("./docker.volume");Object.keys(_docker4).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _docker4[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _docker4[key];} });});
|
|
12
|
-
var _dockerCleanup = require("./dockerCleanup");Object.keys(_dockerCleanup).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _dockerCleanup[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _dockerCleanup[key];} });});
|
|
13
|
-
var _dockerCompose = require("./dockerCompose");Object.keys(_dockerCompose).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _dockerCompose[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _dockerCompose[key];} });});
|
|
14
|
-
var _flow = require("./flow");Object.keys(_flow).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _flow[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _flow[key];} });});
|
|
15
|
-
var _fs = require("./fs");Object.keys(_fs).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _fs[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _fs[key];} });});
|
|
16
|
-
var _git = require("./git");Object.keys(_git).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _git[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _git[key];} });});
|
|
17
|
-
var _hg = require("./hg");Object.keys(_hg).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _hg[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _hg[key];} });});
|
|
18
|
-
var _inlineResources = require("./inline-resources");Object.keys(_inlineResources).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _inlineResources[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _inlineResources[key];} });});
|
|
19
|
-
var _npm = require("./npm");Object.keys(_npm).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _npm[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _npm[key];} });});
|
|
20
|
-
var _pkg = require("./pkg");Object.keys(_pkg).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _pkg[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _pkg[key];} });});
|
|
21
|
-
var _publish = require("./publish");Object.keys(_publish).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _publish[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _publish[key];} });});
|
|
22
|
-
var _run = require("./run");Object.keys(_run).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _run[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _run[key];} });});
|
|
23
|
-
var _test = require("./test");Object.keys(_test).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _test[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _test[key];} });});
|
|
24
|
-
var _tgz = require("./tgz");Object.keys(_tgz).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _tgz[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _tgz[key];} });});
|
|
25
|
-
var _version = require("./version");Object.keys(_version).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _version[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _version[key];} });});
|
|
26
|
-
var _yarn = require("./yarn");Object.keys(_yarn).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (key in exports && exports[key] === _yarn[key]) return;Object.defineProperty(exports, key, { enumerable: true, get: function () {return _yarn[key];} });});
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuZXhwb3J0ICogZnJvbSAnLi9hbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hcnRpZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2NlcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL2NvcHknO1xuZXhwb3J0ICogZnJvbSAnLi9jcCc7XG5leHBvcnQgKiBmcm9tICcuL2RvY2tlcic7XG5leHBvcnQgKiBmcm9tICcuL2RvY2tlci5jb250YWluZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kb2NrZXIubmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL2RvY2tlci52b2x1bWUnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2NrZXJDbGVhbnVwJztcbmV4cG9ydCAqIGZyb20gJy4vZG9ja2VyQ29tcG9zZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zsb3cnO1xuZXhwb3J0ICogZnJvbSAnLi9mcyc7XG5leHBvcnQgKiBmcm9tICcuL2dpdCc7XG5leHBvcnQgKiBmcm9tICcuL2hnJztcbmV4cG9ydCAqIGZyb20gJy4vaW5saW5lLXJlc291cmNlcyc7XG5leHBvcnQgKiBmcm9tICcuL25wbSc7XG5leHBvcnQgKiBmcm9tICcuL3BrZyc7XG5leHBvcnQgKiBmcm9tICcuL3B1Ymxpc2gnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW4nO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vdGd6JztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL3lhcm4nO1xuIl19
|
package/index.js.flow
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
export * from './ant';
|
|
3
|
-
export * from './artifactory';
|
|
4
|
-
export * from './cert';
|
|
5
|
-
export * from './clean';
|
|
6
|
-
export * from './copy';
|
|
7
|
-
export * from './cp';
|
|
8
|
-
export * from './docker';
|
|
9
|
-
export * from './docker.container';
|
|
10
|
-
export * from './docker.network';
|
|
11
|
-
export * from './docker.volume';
|
|
12
|
-
export * from './dockerCleanup';
|
|
13
|
-
export * from './dockerCompose';
|
|
14
|
-
export * from './flow';
|
|
15
|
-
export * from './fs';
|
|
16
|
-
export * from './git';
|
|
17
|
-
export * from './hg';
|
|
18
|
-
export * from './inline-resources';
|
|
19
|
-
export * from './npm';
|
|
20
|
-
export * from './pkg';
|
|
21
|
-
export * from './publish';
|
|
22
|
-
export * from './run';
|
|
23
|
-
export * from './test';
|
|
24
|
-
export * from './tgz';
|
|
25
|
-
export * from './version';
|
|
26
|
-
export * from './yarn';
|
package/inline-resources.js
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.dependencies = void 0;exports.inlineResources = inlineResources;exports.inlineResourcesFromString = inlineResourcesFromString;exports.requireResourcesLoader = requireResourcesLoader;exports.webpackInlineResourceLoader = webpackInlineResourceLoader;
|
|
2
|
-
var _glob = _interopRequireDefault(require("glob"));
|
|
3
|
-
var _path = _interopRequireDefault(require("path"));
|
|
4
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
5
|
-
var _fs2 = require("./fs");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// So we know to copy extra files when a dependency is modified
|
|
11
|
-
const dependencies = {};exports.dependencies = dependencies;
|
|
12
|
-
|
|
13
|
-
function recordDependency(parent, child) {
|
|
14
|
-
dependencies[child] = dependencies[child] || [];
|
|
15
|
-
if (!dependencies[child].includes(parent)) {
|
|
16
|
-
dependencies[child].push(parent);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Inline resources in a tsc/ngc compilation.
|
|
22
|
-
* @param projectPath {string} Path to the project.
|
|
23
|
-
*/
|
|
24
|
-
async function inlineResources(projectPath) {
|
|
25
|
-
// Match only TypeScript files in projectPath.
|
|
26
|
-
const files = _glob.default.sync('**/*.ts', { cwd: projectPath });
|
|
27
|
-
|
|
28
|
-
// For each file, inline the templates and styles under it and write the new file.
|
|
29
|
-
await Promise.all(
|
|
30
|
-
files.map(async (filePath) => {
|
|
31
|
-
const fullFilePath = _path.default.join(projectPath, filePath);
|
|
32
|
-
const content = await (0, _fs2.readFile)(fullFilePath, 'utf-8');
|
|
33
|
-
const inlined = inlineResourcesFromString(content, (url) => {
|
|
34
|
-
// Resolve the template url.
|
|
35
|
-
const templatePath = _path.default.join(_path.default.dirname(fullFilePath), url);
|
|
36
|
-
recordDependency(fullFilePath, templatePath);
|
|
37
|
-
return templatePath;
|
|
38
|
-
});
|
|
39
|
-
await (0, _fs2.writeFile)(fullFilePath, inlined);
|
|
40
|
-
}));
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function requireResourcesLoader(content) {
|
|
45
|
-
return [requireTemplate, requireStyle, removeModuleId].reduce(
|
|
46
|
-
(c, fn) => fn(c, '!raw-loader!'),
|
|
47
|
-
content);
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// This is a webpack loader
|
|
52
|
-
function webpackInlineResourceLoader(content) {
|
|
53
|
-
this.cacheable(true);
|
|
54
|
-
const dir = this.context;
|
|
55
|
-
const that = this;
|
|
56
|
-
return inlineResourcesFromString(content, (url) => {
|
|
57
|
-
// Resolve the template url.
|
|
58
|
-
const fullPath = _path.default.join(dir, url);
|
|
59
|
-
// Make sure this file gets watched
|
|
60
|
-
that.addDependency(fullPath);
|
|
61
|
-
return fullPath;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Inline resources from a string content.
|
|
69
|
-
* @param content {string} The source file's content.
|
|
70
|
-
* @param urlResolver {Function} A resolver that takes a URL and return a path.
|
|
71
|
-
* @returns {string} The content with resources inlined.
|
|
72
|
-
*/
|
|
73
|
-
function inlineResourcesFromString(
|
|
74
|
-
content,
|
|
75
|
-
urlResolver)
|
|
76
|
-
{
|
|
77
|
-
// Curry through the inlining functions.
|
|
78
|
-
return [inlineTemplate, inlineStyle, removeModuleId].reduce(
|
|
79
|
-
(c, fn) => fn(c, urlResolver),
|
|
80
|
-
content);
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// The cbFn is given the template url, and should return the string to replace it
|
|
85
|
-
function processTemplate(content, cbFn) {
|
|
86
|
-
return content.replace(
|
|
87
|
-
/templateUrl:\s*'([^']+?\.html)'/g,
|
|
88
|
-
(m, templateUrl) => `template: ${cbFn(templateUrl)}`);
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Inline the templates for a source file. Simply search for instances of `templateUrl: ...` and
|
|
94
|
-
* replace with `template: ...` (with the content of the file included).
|
|
95
|
-
* @param content {string} The source file's content.
|
|
96
|
-
* @param urlResolver {Function} A resolver that takes a URL and return a path.
|
|
97
|
-
* @return {string} The content with all templates inlined.
|
|
98
|
-
*/
|
|
99
|
-
function inlineTemplate(content, urlResolver) {
|
|
100
|
-
return processTemplate(
|
|
101
|
-
content,
|
|
102
|
-
(templateUrl) =>
|
|
103
|
-
`\`${_fs.default.
|
|
104
|
-
readFileSync(urlResolver(templateUrl), 'utf-8').
|
|
105
|
-
replace(/([\n\r]\s*)+/gm, ' ')}\``);
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function requireTemplate(content, loader = '') {
|
|
110
|
-
return processTemplate(content, (url) => `require('${loader}${url}')`);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// The cbFn is given the url of a single css file, and should return the string to replace it
|
|
114
|
-
function processStyle(content, cbFn) {
|
|
115
|
-
return content.replace(
|
|
116
|
-
/styleUrls:\s*(\[[\s\S]*?\])/gm,
|
|
117
|
-
(m, styleUrls) =>
|
|
118
|
-
// eslint-disable-next-line no-eval
|
|
119
|
-
`styles: [${eval(styleUrls).
|
|
120
|
-
map((styleUrl) => cbFn(styleUrl)).
|
|
121
|
-
join(',\n')}]`);
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Inline the styles for a source file. Simply search for instances of `styleUrls: [...]` and
|
|
127
|
-
* replace with `styles: [...]` (with the content of the file included).
|
|
128
|
-
* @param urlResolver {Function} A resolver that takes a URL and return a path.
|
|
129
|
-
* @param content {string} The source file's content.
|
|
130
|
-
* @return {string} The content with all styles inlined.
|
|
131
|
-
*/
|
|
132
|
-
function inlineStyle(content, urlResolver) {
|
|
133
|
-
return processStyle(
|
|
134
|
-
content,
|
|
135
|
-
(styleUrl) =>
|
|
136
|
-
`\`${_fs.default.
|
|
137
|
-
readFileSync(urlResolver(styleUrl), 'utf-8').
|
|
138
|
-
replace(/([\n\r]\s*)+/gm, ' ')}\``);
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function requireStyle(content, loader = '') {
|
|
143
|
-
return processStyle(content, (url) => `require('${loader}${url}')`);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Remove every mention of `moduleId: module.id`.
|
|
148
|
-
* @param content {string} The source file's content.
|
|
149
|
-
* @returns {string} The content with all moduleId: mentions removed.
|
|
150
|
-
*/
|
|
151
|
-
function removeModuleId(
|
|
152
|
-
content,
|
|
153
|
-
// eslint-disable-next-line no-unused-vars
|
|
154
|
-
urlResolver)
|
|
155
|
-
{
|
|
156
|
-
return content.replace(/\s*moduleId:\s*module\.id\s*,?\s*/gm, '');
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmxpbmUtcmVzb3VyY2VzLmpzIl0sIm5hbWVzIjpbImRlcGVuZGVuY2llcyIsInJlY29yZERlcGVuZGVuY3kiLCJwYXJlbnQiLCJjaGlsZCIsImluY2x1ZGVzIiwicHVzaCIsImlubGluZVJlc291cmNlcyIsInByb2plY3RQYXRoIiwiZmlsZXMiLCJnbG9iIiwic3luYyIsImN3ZCIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJmaWxlUGF0aCIsImZ1bGxGaWxlUGF0aCIsInBhdGgiLCJqb2luIiwiY29udGVudCIsImlubGluZWQiLCJpbmxpbmVSZXNvdXJjZXNGcm9tU3RyaW5nIiwidXJsIiwidGVtcGxhdGVQYXRoIiwiZGlybmFtZSIsInJlcXVpcmVSZXNvdXJjZXNMb2FkZXIiLCJyZXF1aXJlVGVtcGxhdGUiLCJyZXF1aXJlU3R5bGUiLCJyZW1vdmVNb2R1bGVJZCIsInJlZHVjZSIsImMiLCJmbiIsIndlYnBhY2tJbmxpbmVSZXNvdXJjZUxvYWRlciIsImNhY2hlYWJsZSIsImRpciIsImNvbnRleHQiLCJ0aGF0IiwiZnVsbFBhdGgiLCJhZGREZXBlbmRlbmN5IiwidXJsUmVzb2x2ZXIiLCJpbmxpbmVUZW1wbGF0ZSIsImlubGluZVN0eWxlIiwicHJvY2Vzc1RlbXBsYXRlIiwiY2JGbiIsInJlcGxhY2UiLCJtIiwidGVtcGxhdGVVcmwiLCJmcyIsInJlYWRGaWxlU3luYyIsImxvYWRlciIsInByb2Nlc3NTdHlsZSIsInN0eWxlVXJscyIsImV2YWwiLCJzdHlsZVVybCJdLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCOzs7OztBQUtBO0FBQ08sTUFBTUEsWUFBMkIsR0FBRyxFQUFwQyxDOztBQUVQLFNBQVNDLGdCQUFULENBQTBCQyxNQUExQixFQUFrQ0MsS0FBbEMsRUFBK0M7QUFDN0NILEVBQUFBLFlBQVksQ0FBQ0csS0FBRCxDQUFaLEdBQXNCSCxZQUFZLENBQUNHLEtBQUQsQ0FBWixJQUF1QixFQUE3QztBQUNBLE1BQUks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QUFULENBQXNCUixPQUF0QixFQUF1QzhCLE1BQWMsR0FBRyxFQUF4RCxFQUFvRTtBQUNsRSxTQUFPQyxZQUFZLENBQUMvQixPQUFELEVBQVUsQ0FBQ0csR0FBRCxLQUFVLFlBQVcyQixNQUFPLEdBQUUzQixHQUFJLElBQTVDLENBQW5CO0FBQ0Q7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNNLGNBQVQ7QUFDRVQsT0FERjtBQUVFO0FBQ0FvQixXQUhGO0FBSVU7QUFDUixTQUFPcEIsT0FBTyxDQUFDeUIsT0FBUixDQUFnQixxQ0FBaEIsRUFBdUQsRUFBdkQsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gJy4vZnMnO1xuXG50eXBlIERlcGVuZGVuY3lNYXAgPSB7XG4gIFtzdHJpbmddOiBzdHJpbmdbXSxcbn07XG4vLyBTbyB3ZSBrbm93IHRvIGNvcHkgZXh0cmEgZmlsZXMgd2hlbiBhIGRlcGVuZGVuY3kgaXMgbW9kaWZpZWRcbmV4cG9ydCBjb25zdCBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lNYXAgPSB7fTtcblxuZnVuY3Rpb24gcmVjb3JkRGVwZW5kZW5jeShwYXJlbnQsIGNoaWxkKTogdm9pZCB7XG4gIGRlcGVuZGVuY2llc1tjaGlsZF0gPSBkZXBlbmRlbmNpZXNbY2hpbGRdIHx8IFtdO1xuICBpZiAoIWRlcGVuZGVuY2llc1tjaGlsZF0uaW5jbHVkZXMocGFyZW50KSkge1xuICAgIGRlcGVuZGVuY2llc1tjaGlsZF0ucHVzaChwYXJlbnQpO1xuICB9XG59XG5cbi8qKlxuICogSW5saW5lIHJlc291cmNlcyBpbiBhIHRzYy9uZ2MgY29tcGlsYXRpb24uXG4gKiBAcGFyYW0gcHJvamVjdFBhdGgge3N0cmluZ30gUGF0aCB0byB0aGUgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlubGluZVJlc291cmNlcyhwcm9qZWN0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIE1hdGNoIG9ubHkgVHlwZVNjcmlwdCBmaWxlcyBpbiBwcm9qZWN0UGF0aC5cbiAgY29uc3QgZmlsZXMgPSBnbG9iLnN5bmMoJyoqLyoudHMnLCB7IGN3ZDogcHJvamVjdFBhdGggfSk7XG5cbiAgLy8gRm9yIGVhY2ggZmlsZSwgaW5saW5lIHRoZSB0ZW1wbGF0ZXMgYW5kIHN0eWxlcyB1bmRlciBpdCBhbmQgd3JpdGUgdGhlIG5ldyBmaWxlLlxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoYXN5bmMgKGZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBmdWxsRmlsZVBhdGggPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmdWxsRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgaW5saW5lZCA9IGlubGluZVJlc291cmNlc0Zyb21TdHJpbmcoY29udGVudCwgKHVybCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSB0ZW1wbGF0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoZnVsbEZpbGVQYXRoKSwgdXJsKTtcbiAgICAgICAgcmVjb3JkRGVwZW5kZW5jeShmdWxsRmlsZVBhdGgsIHRlbXBsYXRlUGF0aCk7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZVBhdGg7XG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmdWxsRmlsZVBhdGgsIGlubGluZWQpO1xuICAgIH0pLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZVJlc291cmNlc0xvYWRlcihjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gW3JlcXVpcmVUZW1wbGF0ZSwgcmVxdWlyZVN0eWxlLCByZW1vdmVNb2R1bGVJZF0ucmVkdWNlKFxuICAgIChjLCBmbikgPT4gZm4oYywgJyFyYXctbG9hZGVyIScpLFxuICAgIGNvbnRlbnQsXG4gICk7XG59XG5cbi8vIFRoaXMgaXMgYSB3ZWJwYWNrIGxvYWRlclxuZXhwb3J0IGZ1bmN0aW9uIHdlYnBhY2tJbmxpbmVSZXNvdXJjZUxvYWRlcihjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICB0aGlzLmNhY2hlYWJsZSh0cnVlKTtcbiAgY29uc3QgZGlyID0gdGhpcy5jb250ZXh0O1xuICBjb25zdCB0aGF0ID0gdGhpcztcbiAgcmV0dXJuIGlubGluZVJlc291cmNlc0Zyb21TdHJpbmcoY29udGVudCwgKHVybCkgPT4ge1xuICAgIC8vIFJlc29sdmUgdGhlIHRlbXBsYXRlIHVybC5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIHVybCk7XG4gICAgLy8gTWFrZSBzdXJlIHRoaXMgZmlsZSBnZXRzIHdhdGNoZWRcbiAgICB0aGF0LmFkZERlcGVuZGVuY3koZnVsbFBhdGgpO1xuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFVybFJlc29sdmVyID0gKHVybDogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogSW5saW5lIHJlc291cmNlcyBmcm9tIGEgc3RyaW5nIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCB7c3RyaW5nfSBUaGUgc291cmNlIGZpbGUncyBjb250ZW50LlxuICogQHBhcmFtIHVybFJlc29sdmVyIHtGdW5jdGlvbn0gQSByZXNvbHZlciB0aGF0IHRha2VzIGEgVVJMIGFuZCByZXR1cm4gYSBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbnRlbnQgd2l0aCByZXNvdXJjZXMgaW5saW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlubGluZVJlc291cmNlc0Zyb21TdHJpbmcoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdXJsUmVzb2x2ZXI6IFVybFJlc29sdmVyLFxuKTogc3RyaW5nIHtcbiAgLy8gQ3VycnkgdGhyb3VnaCB0aGUgaW5saW5pbmcgZnVuY3Rpb25zLlxuICByZXR1cm4gW2lubGluZVRlbXBsYXRlLCBpbmxpbmVTdHlsZSwgcmVtb3ZlTW9kdWxlSWRdLnJlZHVjZShcbiAgICAoYywgZm4pID0+IGZuKGMsIHVybFJlc29sdmVyKSxcbiAgICBjb250ZW50LFxuICApO1xufVxuXG4vLyBUaGUgY2JGbiBpcyBnaXZlbiB0aGUgdGVtcGxhdGUgdXJsLCBhbmQgc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHRvIHJlcGxhY2UgaXRcbmZ1bmN0aW9uIHByb2Nlc3NUZW1wbGF0ZShjb250ZW50OiBzdHJpbmcsIGNiRm46IFVybFJlc29sdmVyKSB7XG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoXG4gICAgL3RlbXBsYXRlVXJsOlxccyonKFteJ10rP1xcLmh0bWwpJy9nLFxuICAgIChtLCB0ZW1wbGF0ZVVybCkgPT4gYHRlbXBsYXRlOiAke2NiRm4odGVtcGxhdGVVcmwpfWAsXG4gICk7XG59XG5cbi8qKlxuICogSW5saW5lIHRoZSB0ZW1wbGF0ZXMgZm9yIGEgc291cmNlIGZpbGUuIFNpbXBseSBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgdGVtcGxhdGVVcmw6IC4uLmAgYW5kXG4gKiByZXBsYWNlIHdpdGggYHRlbXBsYXRlOiAuLi5gICh3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGluY2x1ZGVkKS5cbiAqIEBwYXJhbSBjb250ZW50IHtzdHJpbmd9IFRoZSBzb3VyY2UgZmlsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gdXJsUmVzb2x2ZXIge0Z1bmN0aW9ufSBBIHJlc29sdmVyIHRoYXQgdGFrZXMgYSBVUkwgYW5kIHJldHVybiBhIHBhdGguXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb250ZW50IHdpdGggYWxsIHRlbXBsYXRlcyBpbmxpbmVkLlxuICovXG5mdW5jdGlvbiBpbmxpbmVUZW1wbGF0ZShjb250ZW50OiBzdHJpbmcsIHVybFJlc29sdmVyOiBVcmxSZXNvbHZlcik6IHN0cmluZyB7XG4gIHJldHVybiBwcm9jZXNzVGVtcGxhdGUoXG4gICAgY29udGVudCxcbiAgICAodGVtcGxhdGVVcmwpID0+XG4gICAgICBgXFxgJHtmc1xuICAgICAgICAucmVhZEZpbGVTeW5jKHVybFJlc29sdmVyKHRlbXBsYXRlVXJsKSwgJ3V0Zi04JylcbiAgICAgICAgLnJlcGxhY2UoLyhbXFxuXFxyXVxccyopKy9nbSwgJyAnKX1cXGBgLFxuICApO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlVGVtcGxhdGUoY29udGVudDogc3RyaW5nLCBsb2FkZXI6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByb2Nlc3NUZW1wbGF0ZShjb250ZW50LCAodXJsKSA9PiBgcmVxdWlyZSgnJHtsb2FkZXJ9JHt1cmx9JylgKTtcbn1cblxuLy8gVGhlIGNiRm4gaXMgZ2l2ZW4gdGhlIHVybCBvZiBhIHNpbmdsZSBjc3MgZmlsZSwgYW5kIHNob3VsZCByZXR1cm4gdGhlIHN0cmluZyB0byByZXBsYWNlIGl0XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGUoY29udGVudDogc3RyaW5nLCBjYkZuOiBVcmxSZXNvbHZlcik6IHN0cmluZyB7XG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoXG4gICAgL3N0eWxlVXJsczpcXHMqKFxcW1tcXHNcXFNdKj9cXF0pL2dtLFxuICAgIChtLCBzdHlsZVVybHMpID0+XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICAgICAgYHN0eWxlczogWyR7ZXZhbChzdHlsZVVybHMpXG4gICAgICAgIC5tYXAoKHN0eWxlVXJsKSA9PiBjYkZuKHN0eWxlVXJsKSlcbiAgICAgICAgLmpvaW4oJyxcXG4nKX1dYCxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbmxpbmUgdGhlIHN0eWxlcyBmb3IgYSBzb3VyY2UgZmlsZS4gU2ltcGx5IHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBzdHlsZVVybHM6IFsuLi5dYCBhbmRcbiAqIHJlcGxhY2Ugd2l0aCBgc3R5bGVzOiBbLi4uXWAgKHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgaW5jbHVkZWQpLlxuICogQHBhcmFtIHVybFJlc29sdmVyIHtGdW5jdGlvbn0gQSByZXNvbHZlciB0aGF0IHRha2VzIGEgVVJMIGFuZCByZXR1cm4gYSBwYXRoLlxuICogQHBhcmFtIGNvbnRlbnQge3N0cmluZ30gVGhlIHNvdXJjZSBmaWxlJ3MgY29udGVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnQgd2l0aCBhbGwgc3R5bGVzIGlubGluZWQuXG4gKi9cbmZ1bmN0aW9uIGlubGluZVN0eWxlKGNvbnRlbnQ6IHN0cmluZywgdXJsUmVzb2x2ZXI6IFVybFJlc29sdmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByb2Nlc3NTdHlsZShcbiAgICBjb250ZW50LFxuICAgIChzdHlsZVVybCkgPT5cbiAgICAgIGBcXGAke2ZzXG4gICAgICAgIC5yZWFkRmlsZVN5bmModXJsUmVzb2x2ZXIoc3R5bGVVcmwpLCAndXRmLTgnKVxuICAgICAgICAucmVwbGFjZSgvKFtcXG5cXHJdXFxzKikrL2dtLCAnICcpfVxcYGAsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVTdHlsZShjb250ZW50OiBzdHJpbmcsIGxvYWRlcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzc1N0eWxlKGNvbnRlbnQsICh1cmwpID0+IGByZXF1aXJlKCcke2xvYWRlcn0ke3VybH0nKWApO1xufVxuXG4vKipcbiAqIFJlbW92ZSBldmVyeSBtZW50aW9uIG9mIGBtb2R1bGVJZDogbW9kdWxlLmlkYC5cbiAqIEBwYXJhbSBjb250ZW50IHtzdHJpbmd9IFRoZSBzb3VyY2UgZmlsZSdzIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGVudCB3aXRoIGFsbCBtb2R1bGVJZDogbWVudGlvbnMgcmVtb3ZlZC5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlTW9kdWxlSWQoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHVybFJlc29sdmVyPzogVXJsUmVzb2x2ZXIgfCBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gY29udGVudC5yZXBsYWNlKC9cXHMqbW9kdWxlSWQ6XFxzKm1vZHVsZVxcLmlkXFxzKiw/XFxzKi9nbSwgJycpO1xufVxuIl19
|