@aws-cdk-testing/cli-integ 2.61.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.
Files changed (165) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +16 -0
  3. package/README.md +151 -0
  4. package/bin/apply-patches +19 -0
  5. package/bin/download-and-run-old-tests +52 -0
  6. package/bin/query-github +2 -0
  7. package/bin/query-github.d.ts +1 -0
  8. package/bin/query-github.js +55 -0
  9. package/bin/run-suite +2 -0
  10. package/bin/run-suite.d.ts +1 -0
  11. package/bin/run-suite.js +126 -0
  12. package/bin/stage-distribution +2 -0
  13. package/bin/stage-distribution.d.ts +1 -0
  14. package/bin/stage-distribution.js +209 -0
  15. package/bin/test-root +2 -0
  16. package/bin/test-root.d.ts +1 -0
  17. package/bin/test-root.js +6 -0
  18. package/entrypoints/test-cli-regression-against-current-code.sh +11 -0
  19. package/entrypoints/test-cli-regression-against-latest-release.sh +11 -0
  20. package/entrypoints/test-cli-regression.bash +83 -0
  21. package/entrypoints/test.sh +12 -0
  22. package/lib/aws.d.ts +55 -0
  23. package/lib/aws.js +243 -0
  24. package/lib/corking.d.ts +13 -0
  25. package/lib/corking.js +34 -0
  26. package/lib/files.d.ts +15 -0
  27. package/lib/files.js +80 -0
  28. package/lib/github.d.ts +4 -0
  29. package/lib/github.js +43 -0
  30. package/lib/index.d.ts +12 -0
  31. package/lib/index.js +25 -0
  32. package/lib/integ-test.d.ts +11 -0
  33. package/lib/integ-test.js +55 -0
  34. package/lib/lists.d.ts +1 -0
  35. package/lib/lists.js +12 -0
  36. package/lib/memoize.d.ts +6 -0
  37. package/lib/memoize.js +19 -0
  38. package/lib/npm.d.ts +4 -0
  39. package/lib/npm.js +15 -0
  40. package/lib/package-sources/release-source.d.ts +22 -0
  41. package/lib/package-sources/release-source.js +67 -0
  42. package/lib/package-sources/repo-source.d.ts +23 -0
  43. package/lib/package-sources/repo-source.js +92 -0
  44. package/lib/package-sources/repo-tools/npm +2 -0
  45. package/lib/package-sources/repo-tools/npm.d.ts +1 -0
  46. package/lib/package-sources/repo-tools/npm.js +42 -0
  47. package/lib/package-sources/source.d.ts +24 -0
  48. package/lib/package-sources/source.js +3 -0
  49. package/lib/package-sources/subprocess.d.ts +3 -0
  50. package/lib/package-sources/subprocess.js +18 -0
  51. package/lib/resource-pool.d.ts +54 -0
  52. package/lib/resource-pool.js +120 -0
  53. package/lib/resources.d.ts +1 -0
  54. package/lib/resources.js +6 -0
  55. package/lib/shell.d.ts +59 -0
  56. package/lib/shell.js +118 -0
  57. package/lib/staging/codeartifact.d.ts +44 -0
  58. package/lib/staging/codeartifact.js +258 -0
  59. package/lib/staging/maven.d.ts +5 -0
  60. package/lib/staging/maven.js +83 -0
  61. package/lib/staging/npm.d.ts +4 -0
  62. package/lib/staging/npm.js +56 -0
  63. package/lib/staging/nuget.d.ts +4 -0
  64. package/lib/staging/nuget.js +71 -0
  65. package/lib/staging/parallel-shell.d.ts +6 -0
  66. package/lib/staging/parallel-shell.js +46 -0
  67. package/lib/staging/pypi.d.ts +4 -0
  68. package/lib/staging/pypi.js +49 -0
  69. package/lib/staging/usage-dir.d.ts +31 -0
  70. package/lib/staging/usage-dir.js +87 -0
  71. package/lib/with-aws.d.ts +13 -0
  72. package/lib/with-aws.js +60 -0
  73. package/lib/with-cdk-app.d.ts +146 -0
  74. package/lib/with-cdk-app.js +398 -0
  75. package/lib/with-packages.d.ts +5 -0
  76. package/lib/with-packages.js +14 -0
  77. package/lib/with-sam.d.ts +33 -0
  78. package/lib/with-sam.js +240 -0
  79. package/lib/with-temporary-directory.d.ts +5 -0
  80. package/lib/with-temporary-directory.js +32 -0
  81. package/lib/xpmutex.d.ts +43 -0
  82. package/lib/xpmutex.js +207 -0
  83. package/package.json +73 -0
  84. package/resources/cdk-apps/app/app.js +463 -0
  85. package/resources/cdk-apps/app/cdk.json +7 -0
  86. package/resources/cdk-apps/app/docker/Dockerfile +2 -0
  87. package/resources/cdk-apps/app/docker/Dockerfile.Custom +2 -0
  88. package/resources/cdk-apps/app/lambda/index.js +4 -0
  89. package/resources/cdk-apps/app/lambda/response.json +3 -0
  90. package/resources/cdk-apps/app/nested-stack.js +49 -0
  91. package/resources/cdk-apps/cfn-include-app/.gitignore +1 -0
  92. package/resources/cdk-apps/cfn-include-app/cdk.json +4 -0
  93. package/resources/cdk-apps/cfn-include-app/cfn-include-app.js +21 -0
  94. package/resources/cdk-apps/cfn-include-app/example-template.json +13 -0
  95. package/resources/cdk-apps/sam_cdk_integ_app/bin/test-app.js +11 -0
  96. package/resources/cdk-apps/sam_cdk_integ_app/cdk.json +6 -0
  97. package/resources/cdk-apps/sam_cdk_integ_app/lib/nested-stack.js +19 -0
  98. package/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +134 -0
  99. package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/.no-packagejson-validator +0 -0
  100. package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/Dockerfile +9 -0
  101. package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/app.js +22 -0
  102. package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/package.json +18 -0
  103. package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.mod +5 -0
  104. package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.sum +17 -0
  105. package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/main.go +17 -0
  106. package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/.no-packagejson-validator +0 -0
  107. package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/app.ts +16 -0
  108. package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package-lock.json +12 -0
  109. package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package.json +5 -0
  110. package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/app.py +15 -0
  111. package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/requirements.txt +1 -0
  112. package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/layer_version_dependency.py +5 -0
  113. package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/requirements.txt +1 -0
  114. package/resources/cdk-apps/sam_cdk_integ_app/src/rest-api-definition.yaml +12 -0
  115. package/resources/cli-regression-patches/v1.119.0/NOTES.md +5 -0
  116. package/resources/cli-regression-patches/v1.119.0/cli.integtest.js +659 -0
  117. package/resources/cli-regression-patches/v1.130.0/NOTES.md +12 -0
  118. package/resources/cli-regression-patches/v1.130.0/app/app.js +378 -0
  119. package/resources/cli-regression-patches/v1.130.0/bootstrapping.integtest.js +220 -0
  120. package/resources/cli-regression-patches/v1.44.0/NOTES.md +18 -0
  121. package/resources/cli-regression-patches/v1.44.0/bootstrapping.integtest.js +126 -0
  122. package/resources/cli-regression-patches/v1.44.0/test.sh +26 -0
  123. package/resources/cli-regression-patches/v1.61.1/NOTES.md +2 -0
  124. package/resources/cli-regression-patches/v1.61.1/skip-tests.txt +16 -0
  125. package/resources/cli-regression-patches/v1.62.0/NOTES.md +2 -0
  126. package/resources/cli-regression-patches/v1.62.0/aws-helpers.js +245 -0
  127. package/resources/cli-regression-patches/v1.63.0/NOTES.md +1 -0
  128. package/resources/cli-regression-patches/v1.63.0/skip-tests.txt +7 -0
  129. package/resources/cli-regression-patches/v1.64.0/NOTES.md +3 -0
  130. package/resources/cli-regression-patches/v1.64.0/cdk-helpers.js +325 -0
  131. package/resources/cli-regression-patches/v1.64.0/cli.integtest.js +599 -0
  132. package/resources/cli-regression-patches/v1.64.1/NOTES.md +3 -0
  133. package/resources/cli-regression-patches/v1.64.1/cdk-helpers.js +324 -0
  134. package/resources/cli-regression-patches/v1.64.1/cli.integtest.js +599 -0
  135. package/resources/cli-regression-patches/v1.67.0/NOTES.md +2 -0
  136. package/resources/cli-regression-patches/v1.67.0/cdk-helpers.js +331 -0
  137. package/resources/cloud-assemblies/0.36.0/InitStack.template.json +1 -0
  138. package/resources/cloud-assemblies/0.36.0/manifest.json +19 -0
  139. package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/InitStack.template.json +2 -0
  140. package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/manifest.json.js +37 -0
  141. package/resources/cloud-assemblies/1.10.0-request-azs/InitStack.template.json +2 -0
  142. package/resources/cloud-assemblies/1.10.0-request-azs/manifest.json.js +34 -0
  143. package/resources/integ.jest.config.js +25 -0
  144. package/skip-tests.txt +8 -0
  145. package/tests/cli-integ-tests/README.md +47 -0
  146. package/tests/cli-integ-tests/bootstrapping.integtest.d.ts +1 -0
  147. package/tests/cli-integ-tests/bootstrapping.integtest.js +271 -0
  148. package/tests/cli-integ-tests/cli.integtest.d.ts +1 -0
  149. package/tests/cli-integ-tests/cli.integtest.js +1029 -0
  150. package/tests/init-csharp/init-csharp.integtest.d.ts +1 -0
  151. package/tests/init-csharp/init-csharp.integtest.js +14 -0
  152. package/tests/init-fsharp/init-fsharp.integtest.d.ts +1 -0
  153. package/tests/init-fsharp/init-fsharp.integtest.js +14 -0
  154. package/tests/init-java/init-java.integtest.d.ts +1 -0
  155. package/tests/init-java/init-java.integtest.js +14 -0
  156. package/tests/init-javascript/init-javascript.integtest.d.ts +1 -0
  157. package/tests/init-javascript/init-javascript.integtest.js +15 -0
  158. package/tests/init-python/init-python.integtest.d.ts +1 -0
  159. package/tests/init-python/init-python.integtest.js +19 -0
  160. package/tests/init-typescript-app/init-typescript-app.integtest.d.ts +1 -0
  161. package/tests/init-typescript-app/init-typescript-app.integtest.js +49 -0
  162. package/tests/init-typescript-lib/init-typescript-lib.integtest.d.ts +1 -0
  163. package/tests/init-typescript-lib/init-typescript-lib.integtest.js +13 -0
  164. package/tests/uberpackage/uberpackage.integtest.d.ts +1 -0
  165. package/tests/uberpackage/uberpackage.integtest.js +11 -0
package/lib/shell.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ /// <reference types="node" />
2
+ import * as child_process from 'child_process';
3
+ import { TestContext } from './integ-test';
4
+ import { TemporaryDirectoryContext } from './with-temporary-directory';
5
+ /**
6
+ * A shell command that does what you want
7
+ *
8
+ * Is platform-aware, handles errors nicely.
9
+ */
10
+ export declare function shell(command: string[], options?: ShellOptions): Promise<string>;
11
+ export interface ShellOptions extends child_process.SpawnOptions {
12
+ /**
13
+ * Properties to add to 'env'
14
+ */
15
+ readonly modEnv?: Record<string, string>;
16
+ /**
17
+ * Don't fail when exiting with an error
18
+ *
19
+ * @default false
20
+ */
21
+ readonly allowErrExit?: boolean;
22
+ /**
23
+ * Whether to capture stderr
24
+ *
25
+ * @default true
26
+ */
27
+ readonly captureStderr?: boolean;
28
+ /**
29
+ * Pass output here
30
+ *
31
+ * @default stdout unless quiet=true
32
+ */
33
+ readonly output?: NodeJS.WritableStream;
34
+ /**
35
+ * Only return stderr. For example, this is used to validate
36
+ * that when CI=true, all logs are sent to stdout.
37
+ *
38
+ * @default false
39
+ */
40
+ readonly onlyStderr?: boolean;
41
+ /**
42
+ * Don't log to stdout
43
+ *
44
+ * @default always
45
+ */
46
+ readonly show?: 'always' | 'never' | 'error';
47
+ }
48
+ export declare class ShellHelper {
49
+ private readonly _cwd;
50
+ private readonly _output;
51
+ static fromContext(context: TestContext & TemporaryDirectoryContext): ShellHelper;
52
+ constructor(_cwd: string, _output: NodeJS.WritableStream);
53
+ shell(command: string[], options?: Omit<ShellOptions, 'cwd' | 'output'>): Promise<string>;
54
+ }
55
+ /**
56
+ * rm -rf reimplementation, don't want to depend on an NPM package for this
57
+ */
58
+ export declare function rimraf(fsPath: string): void;
59
+ export declare function addToShellPath(x: string): void;
package/lib/shell.js ADDED
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addToShellPath = exports.rimraf = exports.ShellHelper = exports.shell = void 0;
4
+ const child_process = require("child_process");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ /**
8
+ * A shell command that does what you want
9
+ *
10
+ * Is platform-aware, handles errors nicely.
11
+ */
12
+ async function shell(command, options = {}) {
13
+ if (options.modEnv && options.env) {
14
+ throw new Error('Use either env or modEnv but not both');
15
+ }
16
+ // Always output the command
17
+ (options.output ?? process.stdout).write(`💻 ${command.join(' ')}\n`);
18
+ let output = options.output ?? process.stdout;
19
+ switch (options.show ?? 'always') {
20
+ case 'always':
21
+ break;
22
+ case 'never':
23
+ case 'error':
24
+ output = undefined;
25
+ break;
26
+ }
27
+ if (process.env.VERBOSE) {
28
+ output = process.stdout;
29
+ }
30
+ const env = options.env ?? (options.modEnv ? { ...process.env, ...options.modEnv } : process.env);
31
+ const child = child_process.spawn(command[0], command.slice(1), {
32
+ ...options,
33
+ env,
34
+ // Need this for Windows where we want .cmd and .bat to be found as well.
35
+ shell: true,
36
+ stdio: ['ignore', 'pipe', 'pipe'],
37
+ });
38
+ return new Promise((resolve, reject) => {
39
+ const stdout = new Array();
40
+ const stderr = new Array();
41
+ child.stdout.on('data', chunk => {
42
+ output?.write(chunk);
43
+ stdout.push(chunk);
44
+ });
45
+ child.stderr.on('data', chunk => {
46
+ output?.write(chunk);
47
+ if (options.captureStderr ?? true) {
48
+ stderr.push(chunk);
49
+ }
50
+ });
51
+ child.once('error', reject);
52
+ child.once('close', code => {
53
+ const stderrOutput = Buffer.concat(stderr).toString('utf-8');
54
+ const stdoutOutput = Buffer.concat(stdout).toString('utf-8');
55
+ const out = (options.onlyStderr ? stderrOutput : stdoutOutput + stderrOutput).trim();
56
+ if (code === 0 || options.allowErrExit) {
57
+ resolve(out);
58
+ }
59
+ else {
60
+ if (options.show === 'error') {
61
+ (options.output ?? process.stdout).write(out + '\n');
62
+ }
63
+ reject(new Error(`'${command.join(' ')}' exited with error code ${code}.`));
64
+ }
65
+ });
66
+ });
67
+ }
68
+ exports.shell = shell;
69
+ class ShellHelper {
70
+ constructor(_cwd, _output) {
71
+ this._cwd = _cwd;
72
+ this._output = _output;
73
+ }
74
+ static fromContext(context) {
75
+ return new ShellHelper(context.integTestDir, context.output);
76
+ }
77
+ async shell(command, options = {}) {
78
+ return shell(command, {
79
+ output: this._output,
80
+ cwd: this._cwd,
81
+ ...options,
82
+ });
83
+ }
84
+ }
85
+ exports.ShellHelper = ShellHelper;
86
+ /**
87
+ * rm -rf reimplementation, don't want to depend on an NPM package for this
88
+ */
89
+ function rimraf(fsPath) {
90
+ try {
91
+ const isDir = fs.lstatSync(fsPath).isDirectory();
92
+ if (isDir) {
93
+ for (const file of fs.readdirSync(fsPath)) {
94
+ rimraf(path.join(fsPath, file));
95
+ }
96
+ fs.rmdirSync(fsPath);
97
+ }
98
+ else {
99
+ fs.unlinkSync(fsPath);
100
+ }
101
+ }
102
+ catch (e) {
103
+ // We will survive ENOENT
104
+ if (e.code !== 'ENOENT') {
105
+ throw e;
106
+ }
107
+ }
108
+ }
109
+ exports.rimraf = rimraf;
110
+ function addToShellPath(x) {
111
+ const parts = process.env.PATH?.split(':') ?? [];
112
+ if (!parts.includes(x)) {
113
+ parts.unshift(x);
114
+ }
115
+ process.env.PATH = parts.join(':');
116
+ }
117
+ exports.addToShellPath = addToShellPath;
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUk3Qjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLEtBQUssQ0FBQyxPQUFpQixFQUFFLFVBQXdCLEVBQUU7SUFDdkUsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsNEJBQTRCO0lBQzVCLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEUsSUFBSSxNQUFNLEdBQXNDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNqRixRQUFRLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO1FBQ2hDLEtBQUssUUFBUTtZQUNYLE1BQU07UUFDUixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTztZQUNWLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDbkIsTUFBTTtLQUNUO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUN2QixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sS0FBSyxHQUFH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QyxDQUFDO0FBUkQsd0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRlc3RDb250ZXh0IH0gZnJvbSAnLi9pbnRlZy10ZXN0JztcbmltcG9ydCB7IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQgfSBmcm9tICcuL3dpdGgtdGVtcG9yYXJ5LWRpcmVjdG9yeSc7XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgLy8gQWx3YXlzIG91dHB1dCB0aGUgY29tbWFuZFxuICAob3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQpLndyaXRlKGDwn5K7ICR7Y29tbWFuZC5qb2luKCcgJyl9XFxuYCk7XG5cbiAgbGV0IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG4gIHN3aXRjaCAob3B0aW9ucy5zaG93ID8/ICdhbHdheXMnKSB7XG4gICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25ldmVyJzpcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBvdXRwdXQgPSB1bmRlZmluZWQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5WRVJCT1NFKSB7XG4gICAgb3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQ7XG4gIH1cblxuICBjb25zdCBlbnYgPSBvcHRpb25zLmVudiA/PyAob3B0aW9ucy5tb2RFbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRpb25zLm1vZEVudiB9IDogcHJvY2Vzcy5lbnYpO1xuXG4gIGNvbnN0IGNoaWxkID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0ZG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3RkZXJyID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcblxuICAgIGNoaWxkLnN0ZG91dCEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICBvdXRwdXQ/LndyaXRlKGNodW5rKTtcbiAgICAgIHN0ZG91dC5wdXNoKGNodW5rKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyciEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICBvdXRwdXQ/LndyaXRlKGNodW5rKTtcbiAgICAgIGlmIChvcHRpb25zLmNhcHR1cmVTdGRlcnIgPz8gdHJ1ZSkge1xuICAgICAgICBzdGRlcnIucHVzaChjaHVuayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICBjaGlsZC5vbmNlKCdjbG9zZScsIGNvZGUgPT4ge1xuICAgICAgY29uc3Qgc3RkZXJyT3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRlcnIpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgc3Rkb3V0T3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXQpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgb3V0ID0gKG9wdGlvbnMub25seVN0ZGVyciA/IHN0ZGVyck91dHB1dCA6IHN0ZG91dE91dHB1dCArIHN0ZGVyck91dHB1dCkudHJpbSgpO1xuICAgICAgaWYgKGNvZGUgPT09IDAgfHwgb3B0aW9ucy5hbGxvd0VyckV4aXQpIHtcbiAgICAgICAgcmVzb2x2ZShvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvdyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIChvcHRpb25zLm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dCkud3JpdGUob3V0ICsgJ1xcbicpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCcke2NvbW1hbmQuam9pbignICcpfScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAke2NvZGV9LmApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxPcHRpb25zIGV4dGVuZHMgY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnMge1xuICAvKipcbiAgICogUHJvcGVydGllcyB0byBhZGQgdG8gJ2VudidcbiAgICovXG4gIHJlYWRvbmx5IG1vZEVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIERvbid0IGZhaWwgd2hlbiBleGl0aW5nIHdpdGggYW4gZXJyb3JcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93RXJyRXhpdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2FwdHVyZSBzdGRlcnJcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FwdHVyZVN0ZGVycj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhc3Mgb3V0cHV0IGhlcmVcbiAgICpcbiAgICogQGRlZmF1bHQgc3Rkb3V0IHVubGVzcyBxdWlldD10cnVlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ/OiBOb2RlSlMuV3JpdGFibGVTdHJlYW07XG5cbiAgLyoqXG4gICAqIE9ubHkgcmV0dXJuIHN0ZGVyci4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCB0byB2YWxpZGF0ZVxuICAgKiB0aGF0IHdoZW4gQ0k9dHJ1ZSwgYWxsIGxvZ3MgYXJlIHNlbnQgdG8gc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgb25seVN0ZGVycj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbid0IGxvZyB0byBzdGRvdXRcbiAgICpcbiAgICogQGRlZmF1bHQgYWx3YXlzXG4gICAqL1xuICByZWFkb25seSBzaG93PzogJ2Fsd2F5cycgfCAnbmV2ZXInIHwgJ2Vycm9yJztcbn1cblxuZXhwb3J0IGNsYXNzIFNoZWxsSGVscGVyIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tQ29udGV4dChjb250ZXh0OiBUZXN0Q29udGV4dCAmIFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFNoZWxsSGVscGVyKGNvbnRleHQuaW50ZWdUZXN0RGlyLCBjb250ZXh0Lm91dHB1dCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jd2Q6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgeyB9XG5cbiAgcHVibGljIGFzeW5jIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBPbWl0PFNoZWxsT3B0aW9ucywgJ2N3ZCcgfCAnb3V0cHV0Jz4gPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHNoZWxsKGNvbW1hbmQsIHtcbiAgICAgIG91dHB1dDogdGhpcy5fb3V0cHV0LFxuICAgICAgY3dkOiB0aGlzLl9jd2QsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcm0gLXJmIHJlaW1wbGVtZW50YXRpb24sIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGFuIE5QTSBwYWNrYWdlIGZvciB0aGlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByaW1yYWYoZnNQYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpc0RpciA9IGZzLmxzdGF0U3luYyhmc1BhdGgpLmlzRGlyZWN0b3J5KCk7XG5cbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmcy5yZWFkZGlyU3luYyhmc1BhdGgpKSB7XG4gICAgICAgIHJpbXJhZihwYXRoLmpvaW4oZnNQYXRoLCBmaWxlKSk7XG4gICAgICB9XG4gICAgICBmcy5ybWRpclN5bmMoZnNQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnMudW5saW5rU3luYyhmc1BhdGgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFdlIHdpbGwgc3Vydml2ZSBFTk9FTlRcbiAgICBpZiAoZS5jb2RlICE9PSAnRU5PRU5UJykgeyB0aHJvdyBlOyB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU2hlbGxQYXRoKHg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHByb2Nlc3MuZW52LlBBVEg/LnNwbGl0KCc6JykgPz8gW107XG5cbiAgaWYgKCFwYXJ0cy5pbmNsdWRlcyh4KSkge1xuICAgIHBhcnRzLnVuc2hpZnQoeCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5QQVRIID0gcGFydHMuam9pbignOicpO1xufSJdfQ==
@@ -0,0 +1,44 @@
1
+ export declare class TestRepository {
2
+ readonly repositoryName: string;
3
+ static readonly DEFAULT_DOMAIN = "test-cdk";
4
+ static newRandom(): Promise<TestRepository>;
5
+ static newWithName(name: string): Promise<TestRepository>;
6
+ static existing(repositoryName: string): TestRepository;
7
+ /**
8
+ * Garbage collect repositories
9
+ */
10
+ static gc(): Promise<void>;
11
+ readonly npmUpstream = "npm-upstream";
12
+ readonly pypiUpstream = "pypi-upstream";
13
+ readonly nugetUpstream = "nuget-upstream";
14
+ readonly mavenUpstream = "maven-upstream";
15
+ readonly domain = "test-cdk";
16
+ private readonly codeArtifact;
17
+ private _loginInformation;
18
+ private constructor();
19
+ prepare(): Promise<void>;
20
+ loginInformation(): Promise<LoginInformation>;
21
+ delete(): Promise<void>;
22
+ /**
23
+ * List all packages and mark them as "allow upstream versions".
24
+ *
25
+ * If we don't do this and we publish `foo@2.3.4-rc.0`, then we can't
26
+ * download `foo@2.3.0` anymore because by default CodeArtifact will
27
+ * block different versions from the same package.
28
+ */
29
+ markAllUpstreamAllow(): Promise<void>;
30
+ private ensureDomain;
31
+ private ensureUpstreams;
32
+ private ensureRepository;
33
+ private domainExists;
34
+ private repositoryExists;
35
+ private listPackages;
36
+ }
37
+ export interface LoginInformation {
38
+ readonly authToken: string;
39
+ readonly repositoryName: string;
40
+ readonly npmEndpoint: string;
41
+ readonly mavenEndpoint: string;
42
+ readonly nugetEndpoint: string;
43
+ readonly pypiEndpoint: string;
44
+ }
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestRepository = void 0;
4
+ const AWS = require("aws-sdk");
5
+ const aws_1 = require("../aws");
6
+ const COLLECT_BY_TAG = 'collect-by';
7
+ const REPO_LIFETIME_MS = 24 * 3600 * 1000; // One day
8
+ class TestRepository {
9
+ constructor(repositoryName) {
10
+ this.repositoryName = repositoryName;
11
+ this.npmUpstream = 'npm-upstream';
12
+ this.pypiUpstream = 'pypi-upstream';
13
+ this.nugetUpstream = 'nuget-upstream';
14
+ this.mavenUpstream = 'maven-upstream';
15
+ this.domain = TestRepository.DEFAULT_DOMAIN;
16
+ this.codeArtifact = new AWS.CodeArtifact();
17
+ }
18
+ static async newRandom() {
19
+ const qualifier = Math.random().toString(36).replace(/[^a-z0-9]+/g, '');
20
+ const repo = new TestRepository(`test-${qualifier}`);
21
+ await repo.prepare();
22
+ return repo;
23
+ }
24
+ static async newWithName(name) {
25
+ const repo = new TestRepository(name);
26
+ await repo.prepare();
27
+ return repo;
28
+ }
29
+ static existing(repositoryName) {
30
+ return new TestRepository(repositoryName);
31
+ }
32
+ /**
33
+ * Garbage collect repositories
34
+ */
35
+ static async gc() {
36
+ if (!await TestRepository.existing('*dummy*').domainExists()) {
37
+ return;
38
+ }
39
+ const codeArtifact = new AWS.CodeArtifact();
40
+ let nextToken;
41
+ do {
42
+ const page = await codeArtifact.listRepositories({ nextToken }).promise();
43
+ for (const repo of page.repositories ?? []) {
44
+ const tags = await codeArtifact.listTagsForResource({ resourceArn: repo.arn }).promise();
45
+ const collectable = tags?.tags?.find(t => t.key === COLLECT_BY_TAG && Number(t.value) < Date.now());
46
+ if (collectable) {
47
+ // eslint-disable-next-line no-console
48
+ console.log('Deleting', repo.name);
49
+ await codeArtifact.deleteRepository({
50
+ domain: repo.domainName,
51
+ repository: repo.name,
52
+ }).promise();
53
+ }
54
+ }
55
+ nextToken = page.nextToken;
56
+ } while (nextToken);
57
+ }
58
+ async prepare() {
59
+ await this.ensureDomain();
60
+ await this.ensureUpstreams();
61
+ await this.ensureRepository(this.repositoryName, {
62
+ description: 'Testing repository',
63
+ upstreams: [
64
+ this.npmUpstream,
65
+ this.pypiUpstream,
66
+ this.nugetUpstream,
67
+ this.mavenUpstream,
68
+ ],
69
+ tags: {
70
+ [COLLECT_BY_TAG]: `${Date.now() + REPO_LIFETIME_MS}`,
71
+ },
72
+ });
73
+ }
74
+ async loginInformation() {
75
+ if (this._loginInformation) {
76
+ return this._loginInformation;
77
+ }
78
+ this._loginInformation = {
79
+ authToken: (await this.codeArtifact.getAuthorizationToken({ domain: this.domain, durationSeconds: 12 * 3600 }).promise()).authorizationToken,
80
+ repositoryName: this.repositoryName,
81
+ npmEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'npm' }).promise()).repositoryEndpoint,
82
+ mavenEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'maven' }).promise()).repositoryEndpoint,
83
+ nugetEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'nuget' }).promise()).repositoryEndpoint,
84
+ pypiEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'pypi' }).promise()).repositoryEndpoint,
85
+ };
86
+ return this._loginInformation;
87
+ }
88
+ async delete() {
89
+ try {
90
+ await this.codeArtifact.deleteRepository({
91
+ domain: this.domain,
92
+ repository: this.repositoryName,
93
+ }).promise();
94
+ // eslint-disable-next-line no-console
95
+ console.log('Deleted', this.repositoryName);
96
+ }
97
+ catch (e) {
98
+ if (e.code !== 'ResourceNotFoundException') {
99
+ throw e;
100
+ }
101
+ // Okay
102
+ }
103
+ }
104
+ /**
105
+ * List all packages and mark them as "allow upstream versions".
106
+ *
107
+ * If we don't do this and we publish `foo@2.3.4-rc.0`, then we can't
108
+ * download `foo@2.3.0` anymore because by default CodeArtifact will
109
+ * block different versions from the same package.
110
+ */
111
+ async markAllUpstreamAllow() {
112
+ for await (const pkg of this.listPackages({ upstream: 'BLOCK' })) {
113
+ await retryThrottled(() => this.codeArtifact.putPackageOriginConfiguration({
114
+ domain: this.domain,
115
+ repository: this.repositoryName,
116
+ format: pkg.format,
117
+ package: pkg.package,
118
+ namespace: pkg.namespace,
119
+ restrictions: {
120
+ publish: 'ALLOW',
121
+ upstream: 'ALLOW',
122
+ },
123
+ }).promise());
124
+ }
125
+ }
126
+ async ensureDomain() {
127
+ if (await this.domainExists()) {
128
+ return;
129
+ }
130
+ await this.codeArtifact.createDomain({
131
+ domain: this.domain,
132
+ tags: [{ key: 'testing', value: 'true' }],
133
+ }).promise();
134
+ }
135
+ async ensureUpstreams() {
136
+ await this.ensureRepository(this.npmUpstream, {
137
+ description: 'The upstream repository for NPM',
138
+ external: 'public:npmjs',
139
+ });
140
+ await this.ensureRepository(this.mavenUpstream, {
141
+ description: 'The upstream repository for Maven',
142
+ external: 'public:maven-central',
143
+ });
144
+ await this.ensureRepository(this.nugetUpstream, {
145
+ description: 'The upstream repository for NuGet',
146
+ external: 'public:nuget-org',
147
+ });
148
+ await this.ensureRepository(this.pypiUpstream, {
149
+ description: 'The upstream repository for PyPI',
150
+ external: 'public:pypi',
151
+ });
152
+ }
153
+ async ensureRepository(name, options) {
154
+ if (await this.repositoryExists(name)) {
155
+ return;
156
+ }
157
+ await this.codeArtifact.createRepository({
158
+ domain: this.domain,
159
+ repository: name,
160
+ description: options?.description,
161
+ upstreams: options?.upstreams?.map(repositoryName => ({ repositoryName })),
162
+ tags: options?.tags ? Object.entries(options.tags).map(([key, value]) => ({ key, value })) : undefined,
163
+ }).promise();
164
+ if (options?.external) {
165
+ const externalConnection = options.external;
166
+ await retry(() => this.codeArtifact.associateExternalConnection({
167
+ domain: this.domain,
168
+ repository: name,
169
+ externalConnection,
170
+ }).promise());
171
+ }
172
+ }
173
+ async domainExists() {
174
+ try {
175
+ await this.codeArtifact.describeDomain({ domain: this.domain }).promise();
176
+ return true;
177
+ }
178
+ catch (e) {
179
+ if (e.code !== 'ResourceNotFoundException') {
180
+ throw e;
181
+ }
182
+ return false;
183
+ }
184
+ }
185
+ async repositoryExists(name) {
186
+ try {
187
+ await this.codeArtifact.describeRepository({ domain: this.domain, repository: name }).promise();
188
+ return true;
189
+ }
190
+ catch (e) {
191
+ if (e.code !== 'ResourceNotFoundException') {
192
+ throw e;
193
+ }
194
+ return false;
195
+ }
196
+ }
197
+ async *listPackages(filter = {}) {
198
+ let response = await retryThrottled(() => this.codeArtifact.listPackages({
199
+ domain: this.domain,
200
+ repository: this.repositoryName,
201
+ ...filter,
202
+ }).promise());
203
+ while (true) {
204
+ for (const p of response.packages ?? []) {
205
+ yield p;
206
+ }
207
+ if (!response.nextToken) {
208
+ break;
209
+ }
210
+ response = await retryThrottled(() => this.codeArtifact.listPackages({
211
+ domain: this.domain,
212
+ repository: this.repositoryName,
213
+ ...filter,
214
+ nextToken: response.nextToken,
215
+ }).promise());
216
+ }
217
+ }
218
+ }
219
+ exports.TestRepository = TestRepository;
220
+ TestRepository.DEFAULT_DOMAIN = 'test-cdk';
221
+ async function retry(block) {
222
+ let attempts = 3;
223
+ while (true) {
224
+ try {
225
+ return await block();
226
+ }
227
+ catch (e) {
228
+ if (attempts-- === 0) {
229
+ throw e;
230
+ }
231
+ // eslint-disable-next-line no-console
232
+ console.debug(e.message);
233
+ await aws_1.sleep(500);
234
+ }
235
+ }
236
+ }
237
+ async function retryThrottled(block) {
238
+ let time = 100;
239
+ let attempts = 15;
240
+ while (true) {
241
+ try {
242
+ return await block();
243
+ }
244
+ catch (e) {
245
+ // eslint-disable-next-line no-console
246
+ console.debug(e.message);
247
+ if (e.code !== 'ThrottlingException') {
248
+ throw e;
249
+ }
250
+ if (attempts-- === 0) {
251
+ throw e;
252
+ }
253
+ await aws_1.sleep(Math.floor(Math.random() * time));
254
+ time *= 2;
255
+ }
256
+ }
257
+ }
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29kZWFydGlmYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixnQ0FBK0I7QUFFL0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVO0FBRXJELE1BQWEsY0FBYztJQThEekIsWUFBb0MsY0FBc0I7UUFBdEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFWMUMsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFDN0IsaUJBQVksR0FBRyxlQUFlLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLFdBQU0sR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBRXRDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFLdkQsQ0FBQztJQTVETSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8s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LEVBQUUsQ0FBQztTQUN0QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLENBQUM7YUFBRTtZQUNsQyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsTUFBTSxXQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7S0FDRjtBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUFJLEtBQXVCO0lBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixPQUFPLElBQUksRUFBRTtRQUNYLElBQUk7WUFDRixPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLENBQUM7YUFBRTtZQUNsRCxJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsQ0FBQzthQUFFO1lBQ2xDLE1BQU0sV0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNYO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi9hd3MnO1xuXG5jb25zdCBDT0xMRUNUX0JZX1RBRyA9ICdjb2xsZWN0LWJ5JztcbmNvbnN0IFJFUE9fTElGRVRJTUVfTVMgPSAyNCAqIDM2MDAgKiAxMDAwOyAvLyBPbmUgZGF5XG5cbmV4cG9ydCBjbGFzcyBUZXN0UmVwb3NpdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ET01BSU4gPSAndGVzdC1jZGsnO1xuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbmV3UmFuZG9tKCkge1xuICAgIGNvbnN0IHF1YWxpZmllciA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJycpO1xuXG4gICAgY29uc3QgcmVwbyA9IG5ldyBUZXN0UmVwb3NpdG9yeShgdGVzdC0ke3F1YWxpZmllcn1gKTtcbiAgICBhd2FpdCByZXBvLnByZXBhcmUoKTtcbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbmV3V2l0aE5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbyA9IG5ldyBUZXN0UmVwb3NpdG9yeShuYW1lKTtcbiAgICBhd2FpdCByZXBvLnByZXBhcmUoKTtcbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXhpc3RpbmcocmVwb3NpdG9yeU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgVGVzdFJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdhcmJhZ2UgY29sbGVjdCByZXBvc2l0b3JpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2MoKSB7XG4gICAgaWYgKCFhd2FpdCBUZXN0UmVwb3NpdG9yeS5leGlzdGluZygnKmR1bW15KicpLmRvbWFpbkV4aXN0cygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29kZUFydGlmYWN0ID0gbmV3IEFXUy5Db2RlQXJ0aWZhY3QoKTtcblxuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkbyB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgY29kZUFydGlmYWN0Lmxpc3RSZXBvc2l0b3JpZXMoeyBuZXh0VG9rZW4gfSkucHJvbWlzZSgpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcG8gb2YgcGFnZS5yZXBvc2l0b3JpZXMgPz8gW10pIHtcbiAgICAgICAgY29uc3QgdGFncyA9IGF3YWl0IGNvZGVBcnRpZmFjdC5saXN0VGFnc0ZvclJlc291cmNlKHsgcmVzb3VyY2VBcm46IHJlcG8uYXJuISB9KS5wcm9taXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbGxlY3RhYmxlID0gdGFncz8udGFncz8uZmluZCh0ID0+IHQua2V5ID09PSBDT0xMRUNUX0JZX1RBRyAmJiBOdW1iZXIodC52YWx1ZSkgPCBEYXRlLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbGxlY3RhYmxlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcnLCByZXBvLm5hbWUpO1xuICAgICAgICAgIGF3YWl0IGNvZGVBcnRpZmFjdC5kZWxldGVSZXBvc2l0b3J5KHtcbiAgICAgICAgICAgIGRvbWFpbjogcmVwby5kb21haW5OYW1lISxcbiAgICAgICAgICAgIHJlcG9zaXRvcnk6IHJlcG8ubmFtZSEsXG4gICAgICAgICAgfSkucHJvbWlzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHRUb2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbnBtVXBzdHJlYW0gPSAnbnBtLXVwc3RyZWFtJztcbiAgcHVibGljIHJlYWRvbmx5IHB5cGlVcHN0cmVhbSA9ICdweXBpLXVwc3RyZWFtJztcbiAgcHVibGljIHJlYWRvbmx5IG51Z2V0VXBzdHJlYW0gPSAnbnVnZXQtdXBzdHJlYW0nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWF2ZW5VcHN0cmVhbSA9ICdtYXZlbi11cHN0cmVhbSc7XG4gIHB1YmxpYyByZWFkb25seSBkb21haW4gPSBUZXN0UmVwb3NpdG9yeS5ERUZBVUxUX0RPTUFJTjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVBcnRpZmFjdCA9IG5ldyBBV1MuQ29kZUFydGlmYWN0KCk7XG5cbiAgcHJpdmF0ZSBfbG9naW5JbmZvcm1hdGlvbjogTG9naW5JbmZvcm1hdGlvbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZURvbWFpbigpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVXBzdHJlYW1zKCk7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlcG9zaXRvcnkodGhpcy5yZXBvc2l0b3J5TmFtZSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUZXN0aW5nIHJlcG9zaXRvcnknLFxuICAgICAgdXBzdHJlYW1zOiBbXG4gICAgICAgIHRoaXMubnBtVXBzdHJlYW0sXG4gICAgICAgIHRoaXMucHlwaVVwc3RyZWFtLFxuICAgICAgICB0aGlzLm51Z2V0VXBzdHJlYW0sXG4gICAgICAgIHRoaXMubWF2ZW5VcHN0cmVhbSxcbiAgICAgIF0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIFtDT0xMRUNUX0JZX1RBR106IGAke0RhdGUubm93KCkgKyBSRVBPX0xJRkVUSU1FX01TfWAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luSW5mb3JtYXRpb24oKTogUHJvbWlzZTxMb2dpbkluZm9ybWF0aW9uPiB7XG4gICAgaWYgKHRoaXMuX2xvZ2luSW5mb3JtYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dpbkluZm9ybWF0aW9uO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2luSW5mb3JtYXRpb24gPSB7XG4gICAgICBhdXRoVG9rZW46IChhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5nZXRBdXRob3JpemF0aW9uVG9rZW4oeyBkb21haW46IHRoaXMuZG9tYWluLCBkdXJhdGlvblNlY29uZHM6IDEyICogMzYwMCB9KS5wcm9taXNlKCkpLmF1dGhvcml6YXRpb25Ub2tlbiEsXG4gICAgICByZXBvc2l0b3J5TmFtZTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgIG5wbUVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAnbnBtJyB9KS5wcm9taXNlKCkpLnJlcG9zaXRvcnlFbmRwb2ludCEsXG4gICAgICBtYXZlbkVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAnbWF2ZW4nIH0pLnByb21pc2UoKSkucmVwb3NpdG9yeUVuZHBvaW50ISxcbiAgICAgIG51Z2V0RW5kcG9pbnQ6IChhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5nZXRSZXBvc2l0b3J5RW5kcG9pbnQoeyBkb21haW46IHRoaXMuZG9tYWluLCByZXBvc2l0b3J5OiB0aGlzLnJlcG9zaXRvcnlOYW1lLCBmb3JtYXQ6ICdudWdldCcgfSkucHJvbWlzZSgpKS5yZXBvc2l0b3J5RW5kcG9pbnQhLFxuICAgICAgcHlwaUVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAncHlwaScgfSkucHJvbWlzZSgpKS5yZXBvc2l0b3J5RW5kcG9pbnQhLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2luSW5mb3JtYXRpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5kZWxldGVSZXBvc2l0b3J5KHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgIH0pLnByb21pc2UoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdEZWxldGVkJywgdGhpcy5yZXBvc2l0b3J5TmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIC8vIE9rYXlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGFja2FnZXMgYW5kIG1hcmsgdGhlbSBhcyBcImFsbG93IHVwc3RyZWFtIHZlcnNpb25zXCIuXG4gICAqXG4gICAqIElmIHdlIGRvbid0IGRvIHRoaXMgYW5kIHdlIHB1Ymxpc2ggYGZvb0AyLjMuNC1yYy4wYCwgdGhlbiB3ZSBjYW4ndFxuICAgKiBkb3dubG9hZCBgZm9vQDIuMy4wYCBhbnltb3JlIGJlY2F1c2UgYnkgZGVmYXVsdCBDb2RlQXJ0aWZhY3Qgd2lsbFxuICAgKiBibG9jayBkaWZmZXJlbnQgdmVyc2lvbnMgZnJvbSB0aGUgc2FtZSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1hcmtBbGxVcHN0cmVhbUFsbG93KCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgcGtnIG9mIHRoaXMubGlzdFBhY2thZ2VzKHsgdXBzdHJlYW06ICdCTE9DSycgfSkpIHtcbiAgICAgIGF3YWl0IHJldHJ5VGhyb3R0bGVkKCgpID0+IHRoaXMuY29kZUFydGlmYWN0LnB1dFBhY2thZ2VPcmlnaW5Db25maWd1cmF0aW9uKHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcblxuICAgICAgICBmb3JtYXQ6IHBrZy5mb3JtYXQhLFxuICAgICAgICBwYWNrYWdlOiBwa2cucGFja2FnZSEsXG4gICAgICAgIG5hbWVzcGFjZTogcGtnLm5hbWVzcGFjZSEsXG4gICAgICAgIHJlc3RyaWN0aW9uczoge1xuICAgICAgICAgIHB1Ymxpc2g6ICdBTExPVycsXG4gICAgICAgICAgdXBzdHJlYW06ICdBTExPVycsXG4gICAgICAgIH0sXG4gICAgICB9KS5wcm9taXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRG9tYWluKCkge1xuICAgIGlmIChhd2FpdCB0aGlzLmRvbWFpbkV4aXN0cygpKSB7IHJldHVybjsgfVxuICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmNyZWF0ZURvbWFpbih7XG4gICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgdGFnczogW3sga2V5OiAndGVzdGluZycsIHZhbHVlOiAndHJ1ZScgfV0sXG4gICAgfSkucHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVVcHN0cmVhbXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubnBtVXBzdHJlYW0sIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgZm9yIE5QTScsXG4gICAgICBleHRlcm5hbDogJ3B1YmxpYzpucG1qcycsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubWF2ZW5VcHN0cmVhbSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBmb3IgTWF2ZW4nLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6bWF2ZW4tY2VudHJhbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubnVnZXRVcHN0cmVhbSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBmb3IgTnVHZXQnLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6bnVnZXQtb3JnJyxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlcG9zaXRvcnkodGhpcy5weXBpVXBzdHJlYW0sIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgZm9yIFB5UEknLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6cHlwaScsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVJlcG9zaXRvcnkobmFtZTogc3RyaW5nLCBvcHRpb25zPzoge1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IGV4dGVybmFsPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHVwc3RyZWFtcz86IHN0cmluZ1tdLFxuICAgIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICB9KSB7XG4gICAgaWYgKGF3YWl0IHRoaXMucmVwb3NpdG9yeUV4aXN0cyhuYW1lKSkgeyByZXR1cm47IH1cblxuICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmNyZWF0ZVJlcG9zaXRvcnkoe1xuICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgIHJlcG9zaXRvcnk6IG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgICB1cHN0cmVhbXM6IG9wdGlvbnM/LnVwc3RyZWFtcz8ubWFwKHJlcG9zaXRvcnlOYW1lID0+ICh7IHJlcG9zaXRvcnlOYW1lIH0pKSxcbiAgICAgIHRhZ3M6IG9wdGlvbnM/LnRhZ3MgPyBPYmplY3QuZW50cmllcyhvcHRpb25zLnRhZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9KS5wcm9taXNlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uZXh0ZXJuYWwpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsQ29ubmVjdGlvbiA9IG9wdGlvbnMuZXh0ZXJuYWw7XG4gICAgICBhd2FpdCByZXRyeSgoKSA9PiB0aGlzLmNvZGVBcnRpZmFjdC5hc3NvY2lhdGVFeHRlcm5hbENvbm5lY3Rpb24oe1xuICAgICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgICByZXBvc2l0b3J5OiBuYW1lLFxuICAgICAgICBleHRlcm5hbENvbm5lY3Rpb24sXG4gICAgICB9KS5wcm9taXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9tYWluRXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5kZXNjcmliZURvbWFpbih7IGRvbWFpbjogdGhpcy5kb21haW4gfSkucHJvbWlzZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcG9zaXRvcnlFeGlzdHMobmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmRlc2NyaWJlUmVwb3NpdG9yeSh7IGRvbWFpbjogdGhpcy5kb21haW4sIHJlcG9zaXRvcnk6IG5hbWUgfSkucHJvbWlzZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jKiBsaXN0UGFja2FnZXMoZmlsdGVyOiBQaWNrPEFXUy5Db2RlQXJ0aWZhY3QuTGlzdFBhY2thZ2VzUmVxdWVzdCwgJ3Vwc3RyZWFtJ3wncHVibGlzaCd8J2Zvcm1hdCc+ID0ge30pIHtcbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCByZXRyeVRocm90dGxlZCgoKSA9PiB0aGlzLmNvZGVBcnRpZmFjdC5saXN0UGFja2FnZXMoe1xuICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgIHJlcG9zaXRvcnk6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICAuLi5maWx0ZXIsXG4gICAgfSkucHJvbWlzZSgpKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzcG9uc2UucGFja2FnZXMgPz8gW10pIHtcbiAgICAgICAgeWllbGQgcDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5uZXh0VG9rZW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmV0cnlUaHJvdHRsZWQoKCkgPT4gdGhpcy5jb2RlQXJ0aWZhY3QubGlzdFBhY2thZ2VzKHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLm5leHRUb2tlbixcbiAgICAgIH0pLnByb21pc2UoKSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJ5PEE+KGJsb2NrOiAoKSA9PiBQcm9taXNlPEE+KSB7XG4gIGxldCBhdHRlbXB0cyA9IDM7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChhdHRlbXB0cy0tID09PSAwKSB7IHRocm93IGU7IH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyeVRocm90dGxlZDxBPihibG9jazogKCkgPT4gUHJvbWlzZTxBPikge1xuICBsZXQgdGltZSA9IDEwMDtcbiAgbGV0IGF0dGVtcHRzID0gMTU7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBpZiAoZS5jb2RlICE9PSAnVGhyb3R0bGluZ0V4Y2VwdGlvbicpIHsgdGhyb3cgZTsgfVxuICAgICAgaWYgKGF0dGVtcHRzLS0gPT09IDApIHsgdGhyb3cgZTsgfVxuICAgICAgYXdhaXQgc2xlZXAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGltZSkpO1xuICAgICAgdGltZSAqPSAyO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luSW5mb3JtYXRpb24ge1xuICByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZztcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbnBtRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5FbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBudWdldEVuZHBvaW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB5cGlFbmRwb2ludDogc3RyaW5nO1xufSJdfQ==
@@ -0,0 +1,5 @@
1
+ import { LoginInformation } from './codeartifact';
2
+ import { UsageDir } from './usage-dir';
3
+ export declare function mavenLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
4
+ export declare function uploadJavaPackages(packages: string[], login: LoginInformation, usageDir: UsageDir): Promise<void>;
5
+ export declare function writeMavenSettingsFile(filename: string, login: LoginInformation): Promise<void>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeMavenSettingsFile = exports.uploadJavaPackages = exports.mavenLogin = void 0;
4
+ /* eslint-disable no-console */
5
+ const path = require("path");
6
+ const files_1 = require("../files");
7
+ const shell_1 = require("../shell");
8
+ const parallel_shell_1 = require("./parallel-shell");
9
+ // Do not try to JIT the Maven binary
10
+ const NO_JIT = '-XX:+TieredCompilation -XX:TieredStopAtLevel=1';
11
+ async function mavenLogin(login, usageDir) {
12
+ await writeMavenSettingsFile(settingsFile(usageDir), login);
13
+ // Write env var
14
+ // Twiddle JVM settings a bit to make Maven survive running on a CodeBuild box.
15
+ await usageDir.addToEnv({
16
+ MAVEN_OPTS: `-Duser.home=${usageDir.directory} ${NO_JIT} ${process.env.MAVEN_OPTS ?? ''}`.trim(),
17
+ });
18
+ }
19
+ exports.mavenLogin = mavenLogin;
20
+ function settingsFile(usageDir) {
21
+ // If we configure usageDir as a fake home directory Maven will find this file.
22
+ // (No other way to configure the settings file as part of the environment).
23
+ return path.join(usageDir.directory, '.m2', 'settings.xml');
24
+ }
25
+ async function uploadJavaPackages(packages, login, usageDir) {
26
+ await parallel_shell_1.parallelShell(packages, async (pkg, output) => {
27
+ console.log(`⏳ ${pkg}`);
28
+ await shell_1.shell(['mvn',
29
+ `--settings=${settingsFile(usageDir)}`,
30
+ 'org.apache.maven.plugins:maven-deploy-plugin:3.0.0:deploy-file',
31
+ `-Durl=${login.mavenEndpoint}`,
32
+ '-DrepositoryId=codeartifact',
33
+ `-DpomFile=${pkg}`,
34
+ `-Dfile=${pkg.replace(/.pom$/, '.jar')}`,
35
+ `-Dsources=${pkg.replace(/.pom$/, '-sources.jar')}`,
36
+ `-Djavadoc=${pkg.replace(/.pom$/, '-javadoc.jar')}`], {
37
+ output,
38
+ modEnv: {
39
+ // Do not try to JIT the Maven binary
40
+ MAVEN_OPTS: `${NO_JIT} ${process.env.MAVEN_OPTS ?? ''}`.trim(),
41
+ },
42
+ });
43
+ console.log(`✅ ${pkg}`);
44
+ }, (pkg, output) => {
45
+ if (output.toString().includes('409 Conflict')) {
46
+ console.log(`❌ ${pkg}: already exists. Skipped.`);
47
+ return 'skip';
48
+ }
49
+ return 'fail';
50
+ });
51
+ }
52
+ exports.uploadJavaPackages = uploadJavaPackages;
53
+ async function writeMavenSettingsFile(filename, login) {
54
+ await files_1.writeFile(filename, `<?xml version="1.0" encoding="UTF-8" ?>
55
+ <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
56
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
57
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
58
+ http://maven.apache.org/xsd/settings-1.0.0.xsd">
59
+ <servers>
60
+ <server>
61
+ <id>codeartifact</id>
62
+ <username>aws</username>
63
+ <password>${login.authToken}</password>
64
+ </server>
65
+ </servers>
66
+ <profiles>
67
+ <profile>
68
+ <id>default</id>
69
+ <repositories>
70
+ <repository>
71
+ <id>codeartifact</id>
72
+ <url>${login.mavenEndpoint}</url>
73
+ </repository>
74
+ </repositories>
75
+ </profile>
76
+ </profiles>
77
+ <activeProfiles>
78
+ <activeProfile>default</activeProfile>
79
+ </activeProfiles>
80
+ </settings>`);
81
+ }
82
+ exports.writeMavenSettingsFile = writeMavenSettingsFile;
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXZlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLG9DQUFxQztBQUNyQyxvQ0FBaUM7QUFFakMscURBQWlEO0FBR2pELHFDQUFxQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxnREFBZ0QsQ0FBQztBQUV6RCxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQXVCLEVBQUUsUUFBa0I7SUFDMUUsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUQsZ0JBQWdCO0lBQ2hCLCtFQUErRTtJQUMvRSxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDdEIsVUFBVSxFQUFFLGVBQWUsUUFBUSxDQUFDLFNBQVMsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO0tBQ2pHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFSRCxnQ0FRQztBQUVELFNBQVMsWUFBWSxDQUFDLFFBQWtCO0lBQ3RDLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxLQUF1QixFQUFFLFFBQWtCO0lBQ3RHLE1BQU0sOEJBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLGFBQUssQ0FBQyxDQUFDLEtBQUs7WUFDaEIsY0FBYyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEMsZ0VBQWdFO1lBQ2hFLFNBQVMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM5Qiw2QkFBNkI7WUFDN0IsYUFBYSxHQUFHLEVBQUU7WUFDbEIsVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN4QyxhQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxFQUFFO1lBQ25ELGFBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RELE1BQU07WUFDTixNQUFNLEVBQUU7Z0JBQ04scUNBQXFDO2dCQUNyQyxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO2FBQy9EO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDRCQUE0QixDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQTdCRCxnREE2QkM7QUFFTSxLQUFLLFVBQVUsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxLQUF1QjtJQUNwRixNQUFNLGlCQUFTLENBQUMsUUFBUSxFQUFFOzs7Ozs7Ozs7b0JBU1IsS0FBSyxDQUFDLFNBQVM7Ozs7Ozs7OzttQkFTaEIsS0FBSyxDQUFDLGFBQWE7Ozs7Ozs7O2NBUXhCLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBNUJELHdEQTRCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tICcuLi9maWxlcyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4uL3NoZWxsJztcbmltcG9ydCB7IExvZ2luSW5mb3JtYXRpb24gfSBmcm9tICcuL2NvZGVhcnRpZmFjdCc7XG5pbXBvcnQgeyBwYXJhbGxlbFNoZWxsIH0gZnJvbSAnLi9wYXJhbGxlbC1zaGVsbCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4vdXNhZ2UtZGlyJztcblxuLy8gRG8gbm90IHRyeSB0byBKSVQgdGhlIE1hdmVuIGJpbmFyeVxuY29uc3QgTk9fSklUID0gJy1YWDorVGllcmVkQ29tcGlsYXRpb24gLVhYOlRpZXJlZFN0b3BBdExldmVsPTEnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWF2ZW5Mb2dpbihsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIGF3YWl0IHdyaXRlTWF2ZW5TZXR0aW5nc0ZpbGUoc2V0dGluZ3NGaWxlKHVzYWdlRGlyKSwgbG9naW4pO1xuXG4gIC8vIFdyaXRlIGVudiB2YXJcbiAgLy8gVHdpZGRsZSBKVk0gc2V0dGluZ3MgYSBiaXQgdG8gbWFrZSBNYXZlbiBzdXJ2aXZlIHJ1bm5pbmcgb24gYSBDb2RlQnVpbGQgYm94LlxuICBhd2FpdCB1c2FnZURpci5hZGRUb0Vudih7XG4gICAgTUFWRU5fT1BUUzogYC1EdXNlci5ob21lPSR7dXNhZ2VEaXIuZGlyZWN0b3J5fSAke05PX0pJVH0gJHtwcm9jZXNzLmVudi5NQVZFTl9PUFRTID8/ICcnfWAudHJpbSgpLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0dGluZ3NGaWxlKHVzYWdlRGlyOiBVc2FnZURpcikge1xuICAvLyBJZiB3ZSBjb25maWd1cmUgdXNhZ2VEaXIgYXMgYSBmYWtlIGhvbWUgZGlyZWN0b3J5IE1hdmVuIHdpbGwgZmluZCB0aGlzIGZpbGUuXG4gIC8vIChObyBvdGhlciB3YXkgdG8gY29uZmlndXJlIHRoZSBzZXR0aW5ncyBmaWxlIGFzIHBhcnQgb2YgdGhlIGVudmlyb25tZW50KS5cbiAgcmV0dXJuIHBhdGguam9pbih1c2FnZURpci5kaXJlY3RvcnksICcubTInLCAnc2V0dGluZ3MueG1sJyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWRKYXZhUGFja2FnZXMocGFja2FnZXM6IHN0cmluZ1tdLCBsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIGF3YWl0IHBhcmFsbGVsU2hlbGwocGFja2FnZXMsIGFzeW5jIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGDij7MgJHtwa2d9YCk7XG5cbiAgICBhd2FpdCBzaGVsbChbJ212bicsXG4gICAgICBgLS1zZXR0aW5ncz0ke3NldHRpbmdzRmlsZSh1c2FnZURpcil9YCxcbiAgICAgICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM6bWF2ZW4tZGVwbG95LXBsdWdpbjozLjAuMDpkZXBsb3ktZmlsZScsXG4gICAgICBgLUR1cmw9JHtsb2dpbi5tYXZlbkVuZHBvaW50fWAsXG4gICAgICAnLURyZXBvc2l0b3J5SWQ9Y29kZWFydGlmYWN0JyxcbiAgICAgIGAtRHBvbUZpbGU9JHtwa2d9YCxcbiAgICAgIGAtRGZpbGU9JHtwa2cucmVwbGFjZSgvLnBvbSQvLCAnLmphcicpfWAsXG4gICAgICBgLURzb3VyY2VzPSR7cGtnLnJlcGxhY2UoLy5wb20kLywgJy1zb3VyY2VzLmphcicpfWAsXG4gICAgICBgLURqYXZhZG9jPSR7cGtnLnJlcGxhY2UoLy5wb20kLywgJy1qYXZhZG9jLmphcicpfWBdLCB7XG4gICAgICBvdXRwdXQsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLy8gRG8gbm90IHRyeSB0byBKSVQgdGhlIE1hdmVuIGJpbmFyeVxuICAgICAgICBNQVZFTl9PUFRTOiBgJHtOT19KSVR9ICR7cHJvY2Vzcy5lbnYuTUFWRU5fT1BUUyA/PyAnJ31gLnRyaW0oKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFICR7cGtnfWApO1xuICB9LFxuICAocGtnLCBvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4p2MICR7cGtnfTogYWxyZWFkeSBleGlzdHMuIFNraXBwZWQuYCk7XG4gICAgICByZXR1cm4gJ3NraXAnO1xuICAgIH1cbiAgICByZXR1cm4gJ2ZhaWwnO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlTWF2ZW5TZXR0aW5nc0ZpbGUoZmlsZW5hbWU6IHN0cmluZywgbG9naW46IExvZ2luSW5mb3JtYXRpb24pIHtcbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVuYW1lLCBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PlxuICA8c2V0dGluZ3MgeG1sbnM9XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFwiXG4gICAgICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiXG4gICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2Qvc2V0dGluZ3MtMS4wLjAueHNkXCI+XG4gICAgPHNlcnZlcnM+XG4gICAgICA8c2VydmVyPlxuICAgICAgICA8aWQ+Y29kZWFydGlmYWN0PC9pZD5cbiAgICAgICAgPHVzZXJuYW1lPmF3czwvdXNlcm5hbWU+XG4gICAgICAgIDxwYXNzd29yZD4ke2xvZ2luLmF1dGhUb2tlbn08L3Bhc3N3b3JkPlxuICAgICAgPC9zZXJ2ZXI+XG4gICAgPC9zZXJ2ZXJzPlxuICAgIDxwcm9maWxlcz5cbiAgICAgIDxwcm9maWxlPlxuICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+XG4gICAgICAgIDxyZXBvc2l0b3JpZXM+XG4gICAgICAgICAgPHJlcG9zaXRvcnk+XG4gICAgICAgICAgICA8aWQ+Y29kZWFydGlmYWN0PC9pZD5cbiAgICAgICAgICAgIDx1cmw+JHtsb2dpbi5tYXZlbkVuZHBvaW50fTwvdXJsPlxuICAgICAgICAgIDwvcmVwb3NpdG9yeT5cbiAgICAgICAgPC9yZXBvc2l0b3JpZXM+XG4gICAgICA8L3Byb2ZpbGU+XG4gICAgPC9wcm9maWxlcz5cbiAgICA8YWN0aXZlUHJvZmlsZXM+XG4gICAgICA8YWN0aXZlUHJvZmlsZT5kZWZhdWx0PC9hY3RpdmVQcm9maWxlPlxuICAgIDwvYWN0aXZlUHJvZmlsZXM+XG4gIDwvc2V0dGluZ3M+YCk7XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { LoginInformation } from './codeartifact';
2
+ import { UsageDir } from './usage-dir';
3
+ export declare function npmLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
4
+ export declare function uploadNpmPackages(packages: string[], login: LoginInformation, usageDir: UsageDir): Promise<void>;