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.
Files changed (129) hide show
  1. package/README.md +3 -34
  2. package/dist/src/ant.d.ts +19 -0
  3. package/dist/src/ant.js +18 -0
  4. package/dist/src/cert.d.ts +12 -0
  5. package/dist/src/cert.js +91 -0
  6. package/dist/src/clean.d.ts +4 -0
  7. package/dist/src/clean.js +11 -0
  8. package/dist/src/copy.d.ts +7 -0
  9. package/dist/src/copy.js +53 -0
  10. package/dist/src/cp.d.ts +17 -0
  11. package/dist/src/cp.js +88 -0
  12. package/dist/src/docker.container.d.ts +73 -0
  13. package/dist/src/docker.container.js +247 -0
  14. package/dist/src/docker.d.ts +68 -0
  15. package/dist/src/docker.js +188 -0
  16. package/dist/src/docker.network.d.ts +42 -0
  17. package/dist/src/docker.network.js +85 -0
  18. package/dist/src/docker.volume.d.ts +26 -0
  19. package/dist/src/docker.volume.js +62 -0
  20. package/dist/src/dockerCleanup.d.ts +38 -0
  21. package/dist/src/dockerCleanup.js +77 -0
  22. package/dist/src/dockerCompose.d.ts +154 -0
  23. package/dist/src/dockerCompose.js +439 -0
  24. package/dist/src/fs.d.ts +5 -0
  25. package/dist/src/fs.js +38 -0
  26. package/dist/src/git.d.ts +9 -0
  27. package/dist/src/git.js +24 -0
  28. package/dist/src/index.d.ts +20 -0
  29. package/dist/src/index.js +20 -0
  30. package/dist/src/maps.d.ts +33 -0
  31. package/dist/src/maps.js +41 -0
  32. package/dist/src/npm.d.ts +35 -0
  33. package/dist/src/npm.js +104 -0
  34. package/dist/src/pkg.d.ts +33 -0
  35. package/dist/src/pkg.js +33 -0
  36. package/dist/src/publish.d.ts +27 -0
  37. package/dist/src/publish.js +57 -0
  38. package/dist/src/run.d.ts +13 -0
  39. package/dist/src/run.js +44 -0
  40. package/dist/src/tgz.d.ts +13 -0
  41. package/dist/src/tgz.js +67 -0
  42. package/dist/src/version.d.ts +34 -0
  43. package/dist/src/version.js +101 -0
  44. package/dist/src/yarn.d.ts +26 -0
  45. package/dist/src/yarn.js +75 -0
  46. package/package.json +74 -20
  47. package/ant.js +0 -43
  48. package/ant.js.flow +0 -42
  49. package/artifactory.js +0 -617
  50. package/artifactory.js.flow +0 -616
  51. package/cert.conf +0 -20
  52. package/cert.js +0 -153
  53. package/cert.js.flow +0 -152
  54. package/clean.js +0 -20
  55. package/clean.js.flow +0 -19
  56. package/copy.js +0 -80
  57. package/copy.js.flow +0 -79
  58. package/cp.js +0 -173
  59. package/cp.js.flow +0 -172
  60. package/docker.container.js +0 -390
  61. package/docker.container.js.flow +0 -389
  62. package/docker.js +0 -365
  63. package/docker.js.flow +0 -364
  64. package/docker.network.js +0 -160
  65. package/docker.network.js.flow +0 -159
  66. package/docker.volume.js +0 -136
  67. package/docker.volume.js.flow +0 -136
  68. package/dockerCleanup.js +0 -152
  69. package/dockerCleanup.js.flow +0 -151
  70. package/dockerCompose.js +0 -766
  71. package/dockerCompose.js.flow +0 -765
  72. package/flow.js +0 -21
  73. package/flow.js.flow +0 -20
  74. package/fs.js +0 -95
  75. package/fs.js.flow +0 -96
  76. package/git.js +0 -35
  77. package/git.js.flow +0 -34
  78. package/hg.js +0 -35
  79. package/hg.js.flow +0 -34
  80. package/index.js +0 -27
  81. package/index.js.flow +0 -26
  82. package/inline-resources.js +0 -158
  83. package/inline-resources.js.flow +0 -157
  84. package/maps.js +0 -112
  85. package/maps.js.flow +0 -111
  86. package/npm.js +0 -145
  87. package/npm.js.flow +0 -144
  88. package/pkg.js +0 -81
  89. package/pkg.js.flow +0 -80
  90. package/publish.js +0 -145
  91. package/publish.js.flow +0 -144
  92. package/run.js +0 -90
  93. package/run.js.flow +0 -89
  94. package/src/ant.js +0 -42
  95. package/src/artifactory.js +0 -616
  96. package/src/cert.conf +0 -20
  97. package/src/cert.js +0 -152
  98. package/src/clean.js +0 -19
  99. package/src/copy.js +0 -79
  100. package/src/cp.js +0 -172
  101. package/src/docker.container.js +0 -389
  102. package/src/docker.js +0 -364
  103. package/src/docker.network.js +0 -159
  104. package/src/docker.volume.js +0 -136
  105. package/src/dockerCleanup.js +0 -151
  106. package/src/dockerCompose.js +0 -765
  107. package/src/flow.js +0 -20
  108. package/src/fs.js +0 -96
  109. package/src/git.js +0 -34
  110. package/src/hg.js +0 -34
  111. package/src/index.js +0 -26
  112. package/src/inline-resources.js +0 -157
  113. package/src/maps.js +0 -111
  114. package/src/npm.js +0 -144
  115. package/src/pkg.js +0 -80
  116. package/src/publish.js +0 -144
  117. package/src/run.js +0 -89
  118. package/src/test.js +0 -55
  119. package/src/tgz.js +0 -101
  120. package/src/version.js +0 -142
  121. package/src/yarn.js +0 -123
  122. package/test.js +0 -56
  123. package/test.js.flow +0 -55
  124. package/tgz.js +0 -102
  125. package/tgz.js.flow +0 -101
  126. package/version.js +0 -143
  127. package/version.js.flow +0 -142
  128. package/yarn.js +0 -124
  129. package/yarn.js.flow +0 -123
@@ -1,157 +0,0 @@
1
- // @flow
2
- import glob from 'glob';
3
- import path from 'path';
4
- import fs from 'fs';
5
- import { readFile, writeFile } from './fs';
6
-
7
- type DependencyMap = {
8
- [string]: string[],
9
- };
10
- // So we know to copy extra files when a dependency is modified
11
- export const dependencies: DependencyMap = {};
12
-
13
- function recordDependency(parent, child): void {
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
- export async function inlineResources(projectPath: string): Promise<void> {
25
- // Match only TypeScript files in projectPath.
26
- const files = glob.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.join(projectPath, filePath);
32
- const content = await readFile(fullFilePath, 'utf-8');
33
- const inlined = inlineResourcesFromString(content, (url) => {
34
- // Resolve the template url.
35
- const templatePath = path.join(path.dirname(fullFilePath), url);
36
- recordDependency(fullFilePath, templatePath);
37
- return templatePath;
38
- });
39
- await writeFile(fullFilePath, inlined);
40
- }),
41
- );
42
- }
43
-
44
- export function requireResourcesLoader(content: string): string {
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
- export function webpackInlineResourceLoader(content: string): string {
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.join(dir, url);
59
- // Make sure this file gets watched
60
- that.addDependency(fullPath);
61
- return fullPath;
62
- });
63
- }
64
-
65
- export type UrlResolver = (url: string) => string;
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
- export function inlineResourcesFromString(
74
- content: string,
75
- urlResolver: UrlResolver,
76
- ): string {
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: string, cbFn: UrlResolver) {
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: string, urlResolver: UrlResolver): string {
100
- return processTemplate(
101
- content,
102
- (templateUrl) =>
103
- `\`${fs
104
- .readFileSync(urlResolver(templateUrl), 'utf-8')
105
- .replace(/([\n\r]\s*)+/gm, ' ')}\``,
106
- );
107
- }
108
-
109
- function requireTemplate(content: string, loader: string = ''): string {
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: string, cbFn: UrlResolver): string {
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: string, urlResolver: UrlResolver): string {
133
- return processStyle(
134
- content,
135
- (styleUrl) =>
136
- `\`${fs
137
- .readFileSync(urlResolver(styleUrl), 'utf-8')
138
- .replace(/([\n\r]\s*)+/gm, ' ')}\``,
139
- );
140
- }
141
-
142
- function requireStyle(content: string, loader: string = ''): string {
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: string,
153
- // eslint-disable-next-line no-unused-vars
154
- urlResolver?: UrlResolver | string,
155
- ): string {
156
- return content.replace(/\s*moduleId:\s*module\.id\s*,?\s*/gm, '');
157
- }
package/maps.js DELETED
@@ -1,112 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.values = exports.mapValuesAsync = exports.mapValues = exports.keys = exports.filterNullish = exports.filterKeys = exports.entries = void 0;
2
- // Util functions for using objects as maps and preserving type information
3
-
4
- /**
5
- * An object with arbitrary keys, where every key's value is of the same type.
6
- */
7
-
8
-
9
-
10
- // Alias for above, generics in opposite order (for backwards compat)
11
-
12
-
13
- /**
14
- * Given an input object, return an array of the keys.
15
- * This is a wrapper around the standard `Object.keys` that preserves type information.
16
- * @param {ObjMap} obj the input object
17
- * @returns {Array} an array of keys. These will always be strings, but flow may assign
18
- * a more specific type when possible
19
- */
20
- const keys = (obj) =>
21
- Object.keys(obj || {});
22
-
23
- /**
24
- * Given an input object, return an array of the values.
25
- * This is a wrapper around the standard `Object.values` that preserves type information.
26
- * @param {ObjMap} obj the input object
27
- * @returns {Array} an array of values
28
- */exports.keys = keys;
29
- const values = (obj) =>
30
- Object.values(obj || {});
31
-
32
- /**
33
- * Given a `ObjMap`, return an array of the entries.
34
- * This is a wrapper around the standard `Object.entries` that preserves type information.
35
- * It assumes an object with homogenous values.
36
- * @param {ObjMap} obj the input object
37
- * @returns {Array} an array of entry [key, value] tuples
38
- */exports.values = values;
39
- const entries = (obj) =>
40
- Object.entries(obj || {});
41
-
42
- /**
43
- * Given a `ObjMap`, iterate over each entry and run it through the given `map` function.
44
- * @param {ObjMap} obj the input object
45
- * @param {Function} map the mapping operation
46
- * @returns {ObjMap} a new object
47
- */exports.entries = entries;
48
- const mapValues = (
49
- obj,
50
- map) =>
51
-
52
- entries(obj).reduce(
53
- (acc, [k, v]) =>
54
- Object.assign(acc, {
55
- [k]: map(v, k, obj || {}) }),
56
-
57
- {});
58
-
59
-
60
- /**
61
- * Given a `ObjMap`, iterate over each entry and run it through the given async `map` function.
62
- * The promise returned by the `map` is awaited, such that the resulting `ObjMap` values are
63
- * the result of the resolved promise.
64
- * @param {ObjMap} obj the input object
65
- * @param {Function} map the async mapping operation
66
- * @returns {Promise} a promise for a new object
67
- */exports.mapValues = mapValues;
68
- const mapValuesAsync = async (
69
- obj,
70
- map) =>
71
-
72
- entries(obj).reduce(
73
- async (acc, [k, v]) =>
74
- Object.assign(await acc, {
75
- [k]: await map(v, k, obj || {}) }),
76
-
77
- {});
78
-
79
-
80
- /**
81
- * Given a `ObjMap`, iterate over each entry and run it through the given `filter` function.
82
- * Any entry for which the `filter` returns `false` is removed from the resulting `ObjMap`.
83
- * All other entries are left as-is. The resulting output is a subset of the input.
84
- * If no `filter` is specified, default to filtering out nullish values.
85
- * @param {ObjMap} obj the input object
86
- * @param {Function} filter the filter operation
87
- * @returns {ObjMap} a new object, a subset of the input
88
- */exports.mapValuesAsync = mapValuesAsync;
89
- const filterKeys = (
90
- obj,
91
- filter = (v) => v != null) =>
92
-
93
- entries(obj).reduce(
94
- (acc, [k, v]) =>
95
- filter(v, k, obj || {}) ?
96
- Object.assign(acc, {
97
- [k]: v }) :
98
-
99
- acc,
100
- {});
101
-
102
-
103
- /**
104
- * Given an object, removes any top level keys with a nullish value.
105
- * The type system should preserve the incoming object type, with all such keys typed as `empty`.
106
- * @param {Object} obj the input object
107
- * @returns {Object} a new object, a subset of the input
108
- */exports.filterKeys = filterKeys;
109
- const filterNullish = (
110
- obj) =>
111
- filterKeys(obj);exports.filterNullish = filterNullish;
112
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXBzLmpzIl0sIm5hbWVzIjpbImtleXMiLCJvYmoiLCJPYmplY3QiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwibWFwVmFsdWVzIiwibWFwIiwicmVkdWNlIiwiYWNjIiwiayIsInYiLCJhc3NpZ24iLCJtYXBWYWx1ZXNBc3luYyIsImZpbHRlcktleXMiLCJmaWx0ZXIiLCJmaWx0ZXJOdWxsaXNoIl0sIm1hcHBpbmdzIjoiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsSUFBSSxHQUFHLENBQXdCQyxHQUF4QjtBQUNqQkMsTUFBTSxDQUFDRixJQUFQLENBQVlDLEdBQUcsSUFBSSxFQUFuQixDQURJOztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHO0FBQ08sTUFBTUUsTUFBTSxHQUFHLENBQXdCRixHQUF4QjtBQUNuQkMsTUFBTSxDQUFDQyxNQUFQLENBQWNGLEdBQUcsSUFBSSxFQUFyQixDQURJOztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEc7QUFDTyxNQUFNRyxPQUFPLEdBQUcsQ0FBd0JILEdBQXhCO0FBQ3BCQyxNQUFNLENBQUNFLE9BQVAsQ0FBZUgsR0FBRyxJQUFJLEVBQXRCLENBREk7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEc7QUFDTyxNQUFNSSxTQUFTLEdBQUc7QUFDdkJKLEdBRHVCO0FBRXZCSyxHQUZ1Qjs7QUFJdkJGLE9BQU8sQ0FBQ0gsR0FBRCxDQUFQLENBQWFNLE1BQWI7QUFDRSxDQUFDQyxHQUFELEVBQU0sQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLENBQU47QUFDRVIsTUFBTSxDQUFDUyxNQUFQLENBQWNILEdBQWQsRUFBbUI7QUFDakIsR0FBQ0MsQ0FBRCxHQUFLSCxHQUFHLENBQUNJLENBQUQsRUFBSUQsQ0FBSixFQUFPUixHQUFHLElBQUksRUFBZCxDQURTLEVBQW5CLENBRko7O0FBS0UsRUFMRixDQUpLOzs7QUFZUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEc7QUFDTyxNQUFNVyxjQUFjLEdBQUc7QUFDNUJYLEdBRDRCO0FBRTVCSyxHQUY0Qjs7QUFJNUJGLE9BQU8sQ0FBQ0gsR0FBRCxDQUFQLENBQWFNLE1BQWI7QUFDRSxPQUFPQyxHQUFQLEVBQVksQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLENBQVo7QUFDRVIsTUFBTSxDQUFDUyxNQUFQLENBQWMsTUFBTUgsR0FBcEIsRUFBeUI7QUFDdkIsR0FBQ0MsQ0FBRCxHQUFLLE1BQU1ILEdBQUcsQ0FBQ0ksQ0FBRCxFQUFJRCxDQUFKLEVBQU9SLEdBQUcsSUFBSSxFQUFkLENBRFMsRUFBekIsQ0FGSjs7QUFLRSxFQUxGLENBSks7OztBQVlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHO0FBQ08sTUFBTVksVUFBVSxHQUFHO0FBQ3hCWixHQUR3QjtBQUV4QmEsTUFBd0MsR0FBRyxDQUFDSixDQUFELEtBQU9BLENBQUMsSUFBSSxJQUYvQjs7QUFJeEJOLE9BQU8sQ0FBQ0gsR0FBRCxDQUFQLENBQWFNLE1BQWI7QUFDRSxDQUFDQyxHQUFELEVBQU0sQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLENBQU47QUFDRUksTUFBTSxDQUFDSixDQUFELEVBQUlELENBQUosRUFBT1IsR0FBRyxJQUFJLEVBQWQsQ0FBTjtBQUNJQyxNQUFNLENBQUNTLE1BQVAsQ0FBY0gsR0FBZCxFQUFtQjtBQUNqQixHQUFDQyxDQUFELEdBQUtDLENBRFksRUFBbkIsQ0FESjs7QUFJSUYsR0FOUjtBQU9FLEVBUEYsQ0FKSzs7O0FBY1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEc7QUFDTyxNQUFNTyxhQUFhLEdBQUc7QUFDM0JkLEdBRDJCO0FBRWdCWSxVQUFVLENBQUNaLEdBQUQsQ0FGaEQsQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBVdGlsIGZ1bmN0aW9ucyBmb3IgdXNpbmcgb2JqZWN0cyBhcyBtYXBzIGFuZCBwcmVzZXJ2aW5nIHR5cGUgaW5mb3JtYXRpb25cblxuLyoqXG4gKiBBbiBvYmplY3Qgd2l0aCBhcmJpdHJhcnkga2V5cywgd2hlcmUgZXZlcnkga2V5J3MgdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgT2JqTWFwPFYsIEs6IHN0cmluZyA9IHN0cmluZz4gPSB7XG4gICtbS106IFYsXG59O1xuLy8gQWxpYXMgZm9yIGFib3ZlLCBnZW5lcmljcyBpbiBvcHBvc2l0ZSBvcmRlciAoZm9yIGJhY2t3YXJkcyBjb21wYXQpXG5leHBvcnQgdHlwZSBNYXBPYmo8SywgVj4gPSBPYmpNYXA8ViwgSz47XG5cbi8qKlxuICogR2l2ZW4gYW4gaW5wdXQgb2JqZWN0LCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGtleXMuXG4gKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkIGBPYmplY3Qua2V5c2AgdGhhdCBwcmVzZXJ2ZXMgdHlwZSBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7T2JqTWFwfSBvYmogdGhlIGlucHV0IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBrZXlzLiBUaGVzZSB3aWxsIGFsd2F5cyBiZSBzdHJpbmdzLCBidXQgZmxvdyBtYXkgYXNzaWduXG4gKiBhIG1vcmUgc3BlY2lmaWMgdHlwZSB3aGVuIHBvc3NpYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBrZXlzID0gPFYsIEs6IHN0cmluZyA9IHN0cmluZz4ob2JqPzogP09iak1hcDxWLCBLPik6IEtbXSA9PlxuICAoT2JqZWN0LmtleXMob2JqIHx8IHt9KTogYW55KTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbnB1dCBvYmplY3QsIHJldHVybiBhbiBhcnJheSBvZiB0aGUgdmFsdWVzLlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZCBgT2JqZWN0LnZhbHVlc2AgdGhhdCBwcmVzZXJ2ZXMgdHlwZSBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7T2JqTWFwfSBvYmogdGhlIGlucHV0IG9iamVjdFxuICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IDxWLCBLOiBzdHJpbmcgPSBzdHJpbmc+KG9iaj86ID9PYmpNYXA8ViwgSz4pOiBWW10gPT5cbiAgKE9iamVjdC52YWx1ZXMob2JqIHx8IHt9KTogYW55KTtcblxuLyoqXG4gKiBHaXZlbiBhIGBPYmpNYXBgLCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIGVudHJpZXMuXG4gKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkIGBPYmplY3QuZW50cmllc2AgdGhhdCBwcmVzZXJ2ZXMgdHlwZSBpbmZvcm1hdGlvbi5cbiAqIEl0IGFzc3VtZXMgYW4gb2JqZWN0IHdpdGggaG9tb2dlbm91cyB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iak1hcH0gb2JqIHRoZSBpbnB1dCBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cnkgW2tleSwgdmFsdWVdIHR1cGxlc1xuICovXG5leHBvcnQgY29uc3QgZW50cmllcyA9IDxWLCBLOiBzdHJpbmcgPSBzdHJpbmc+KG9iaj86ID9PYmpNYXA8ViwgSz4pOiBbSywgVl1bXSA9PlxuICAoT2JqZWN0LmVudHJpZXMob2JqIHx8IHt9KTogYW55KTtcblxuLyoqXG4gKiBHaXZlbiBhIGBPYmpNYXBgLCBpdGVyYXRlIG92ZXIgZWFjaCBlbnRyeSBhbmQgcnVuIGl0IHRocm91Z2ggdGhlIGdpdmVuIGBtYXBgIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtPYmpNYXB9IG9iaiB0aGUgaW5wdXQgb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXAgdGhlIG1hcHBpbmcgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyB7T2JqTWFwfSBhIG5ldyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcFZhbHVlcyA9IDxWLCBLOiBzdHJpbmcsIFI+KFxuICBvYmo/OiA/T2JqTWFwPFYsIEs+LFxuICBtYXA6IChWLCBLLCBPYmpNYXA8ViwgSz4pID0+IFIsXG4pOiBPYmpNYXA8UiwgSz4gPT5cbiAgZW50cmllcyhvYmopLnJlZHVjZShcbiAgICAoYWNjLCBbaywgdl0pID0+XG4gICAgICBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICBba106IG1hcCh2LCBrLCBvYmogfHwge30pLFxuICAgICAgfSksXG4gICAge30sXG4gICk7XG5cbi8qKlxuICogR2l2ZW4gYSBgT2JqTWFwYCwgaXRlcmF0ZSBvdmVyIGVhY2ggZW50cnkgYW5kIHJ1biBpdCB0aHJvdWdoIHRoZSBnaXZlbiBhc3luYyBgbWFwYCBmdW5jdGlvbi5cbiAqIFRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoZSBgbWFwYCBpcyBhd2FpdGVkLCBzdWNoIHRoYXQgdGhlIHJlc3VsdGluZyBgT2JqTWFwYCB2YWx1ZXMgYXJlXG4gKiB0aGUgcmVzdWx0IG9mIHRoZSByZXNvbHZlZCBwcm9taXNlLlxuICogQHBhcmFtIHtPYmpNYXB9IG9iaiB0aGUgaW5wdXQgb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXAgdGhlIGFzeW5jIG1hcHBpbmcgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gYSBwcm9taXNlIGZvciBhIG5ldyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcFZhbHVlc0FzeW5jID0gYXN5bmMgPFYsIEs6IHN0cmluZywgUj4oXG4gIG9iaj86ID9PYmpNYXA8ViwgSz4sXG4gIG1hcDogKFYsIEssIE9iak1hcDxWLCBLPikgPT4gUHJvbWlzZTxSPixcbik6IFByb21pc2U8T2JqTWFwPFIsIEs+PiA9PlxuICBlbnRyaWVzKG9iaikucmVkdWNlKFxuICAgIGFzeW5jIChhY2MsIFtrLCB2XSkgPT5cbiAgICAgIE9iamVjdC5hc3NpZ24oYXdhaXQgYWNjLCB7XG4gICAgICAgIFtrXTogYXdhaXQgbWFwKHYsIGssIG9iaiB8fCB7fSksXG4gICAgICB9KSxcbiAgICB7fSxcbiAgKTtcblxuLyoqXG4gKiBHaXZlbiBhIGBPYmpNYXBgLCBpdGVyYXRlIG92ZXIgZWFjaCBlbnRyeSBhbmQgcnVuIGl0IHRocm91Z2ggdGhlIGdpdmVuIGBmaWx0ZXJgIGZ1bmN0aW9uLlxuICogQW55IGVudHJ5IGZvciB3aGljaCB0aGUgYGZpbHRlcmAgcmV0dXJucyBgZmFsc2VgIGlzIHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0aW5nIGBPYmpNYXBgLlxuICogQWxsIG90aGVyIGVudHJpZXMgYXJlIGxlZnQgYXMtaXMuIFRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIGEgc3Vic2V0IG9mIHRoZSBpbnB1dC5cbiAqIElmIG5vIGBmaWx0ZXJgIGlzIHNwZWNpZmllZCwgZGVmYXVsdCB0byBmaWx0ZXJpbmcgb3V0IG51bGxpc2ggdmFsdWVzLlxuICogQHBhcmFtIHtPYmpNYXB9IG9iaiB0aGUgaW5wdXQgb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIgdGhlIGZpbHRlciBvcGVyYXRpb25cbiAqIEByZXR1cm5zIHtPYmpNYXB9IGEgbmV3IG9iamVjdCwgYSBzdWJzZXQgb2YgdGhlIGlucHV0XG4gKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJLZXlzID0gPFYsIEs6IHN0cmluZyA9IHN0cmluZz4oXG4gIG9iaj86ID9PYmpNYXA8ViwgSz4sXG4gIGZpbHRlcj86IChWLCBLLCBPYmpNYXA8ViwgSz4pID0+IGJvb2xlYW4gPSAodikgPT4gdiAhPSBudWxsLFxuKTogT2JqTWFwPFYsIEs+ID0+XG4gIGVudHJpZXMob2JqKS5yZWR1Y2UoXG4gICAgKGFjYywgW2ssIHZdKSA9PlxuICAgICAgZmlsdGVyKHYsIGssIG9iaiB8fCB7fSlcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGFjYywge1xuICAgICAgICAgICAgW2tdOiB2LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogYWNjLFxuICAgIHt9LFxuICApO1xuXG4vKipcbiAqIEdpdmVuIGFuIG9iamVjdCwgcmVtb3ZlcyBhbnkgdG9wIGxldmVsIGtleXMgd2l0aCBhIG51bGxpc2ggdmFsdWUuXG4gKiBUaGUgdHlwZSBzeXN0ZW0gc2hvdWxkIHByZXNlcnZlIHRoZSBpbmNvbWluZyBvYmplY3QgdHlwZSwgd2l0aCBhbGwgc3VjaCBrZXlzIHR5cGVkIGFzIGBlbXB0eWAuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIHRoZSBpbnB1dCBvYmplY3RcbiAqIEByZXR1cm5zIHtPYmplY3R9IGEgbmV3IG9iamVjdCwgYSBzdWJzZXQgb2YgdGhlIGlucHV0XG4gKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJOdWxsaXNoID0gPFQ6IHsgLi4uIH0+KFxuICBvYmo6IFQsXG4pOiAkT2JqTWFwPFQsIDxWPihWKSA9PiAkTm9uTWF5YmVUeXBlPFY+PiA9PiBmaWx0ZXJLZXlzKG9iaik7XG4iXX0=
package/maps.js.flow DELETED
@@ -1,111 +0,0 @@
1
- // @flow
2
- // Util functions for using objects as maps and preserving type information
3
-
4
- /**
5
- * An object with arbitrary keys, where every key's value is of the same type.
6
- */
7
- export type ObjMap<V, K: string = string> = {
8
- +[K]: V,
9
- };
10
- // Alias for above, generics in opposite order (for backwards compat)
11
- export type MapObj<K, V> = ObjMap<V, K>;
12
-
13
- /**
14
- * Given an input object, return an array of the keys.
15
- * This is a wrapper around the standard `Object.keys` that preserves type information.
16
- * @param {ObjMap} obj the input object
17
- * @returns {Array} an array of keys. These will always be strings, but flow may assign
18
- * a more specific type when possible
19
- */
20
- export const keys = <V, K: string = string>(obj?: ?ObjMap<V, K>): K[] =>
21
- (Object.keys(obj || {}): any);
22
-
23
- /**
24
- * Given an input object, return an array of the values.
25
- * This is a wrapper around the standard `Object.values` that preserves type information.
26
- * @param {ObjMap} obj the input object
27
- * @returns {Array} an array of values
28
- */
29
- export const values = <V, K: string = string>(obj?: ?ObjMap<V, K>): V[] =>
30
- (Object.values(obj || {}): any);
31
-
32
- /**
33
- * Given a `ObjMap`, return an array of the entries.
34
- * This is a wrapper around the standard `Object.entries` that preserves type information.
35
- * It assumes an object with homogenous values.
36
- * @param {ObjMap} obj the input object
37
- * @returns {Array} an array of entry [key, value] tuples
38
- */
39
- export const entries = <V, K: string = string>(obj?: ?ObjMap<V, K>): [K, V][] =>
40
- (Object.entries(obj || {}): any);
41
-
42
- /**
43
- * Given a `ObjMap`, iterate over each entry and run it through the given `map` function.
44
- * @param {ObjMap} obj the input object
45
- * @param {Function} map the mapping operation
46
- * @returns {ObjMap} a new object
47
- */
48
- export const mapValues = <V, K: string, R>(
49
- obj?: ?ObjMap<V, K>,
50
- map: (V, K, ObjMap<V, K>) => R,
51
- ): ObjMap<R, K> =>
52
- entries(obj).reduce(
53
- (acc, [k, v]) =>
54
- Object.assign(acc, {
55
- [k]: map(v, k, obj || {}),
56
- }),
57
- {},
58
- );
59
-
60
- /**
61
- * Given a `ObjMap`, iterate over each entry and run it through the given async `map` function.
62
- * The promise returned by the `map` is awaited, such that the resulting `ObjMap` values are
63
- * the result of the resolved promise.
64
- * @param {ObjMap} obj the input object
65
- * @param {Function} map the async mapping operation
66
- * @returns {Promise} a promise for a new object
67
- */
68
- export const mapValuesAsync = async <V, K: string, R>(
69
- obj?: ?ObjMap<V, K>,
70
- map: (V, K, ObjMap<V, K>) => Promise<R>,
71
- ): Promise<ObjMap<R, K>> =>
72
- entries(obj).reduce(
73
- async (acc, [k, v]) =>
74
- Object.assign(await acc, {
75
- [k]: await map(v, k, obj || {}),
76
- }),
77
- {},
78
- );
79
-
80
- /**
81
- * Given a `ObjMap`, iterate over each entry and run it through the given `filter` function.
82
- * Any entry for which the `filter` returns `false` is removed from the resulting `ObjMap`.
83
- * All other entries are left as-is. The resulting output is a subset of the input.
84
- * If no `filter` is specified, default to filtering out nullish values.
85
- * @param {ObjMap} obj the input object
86
- * @param {Function} filter the filter operation
87
- * @returns {ObjMap} a new object, a subset of the input
88
- */
89
- export const filterKeys = <V, K: string = string>(
90
- obj?: ?ObjMap<V, K>,
91
- filter?: (V, K, ObjMap<V, K>) => boolean = (v) => v != null,
92
- ): ObjMap<V, K> =>
93
- entries(obj).reduce(
94
- (acc, [k, v]) =>
95
- filter(v, k, obj || {})
96
- ? Object.assign(acc, {
97
- [k]: v,
98
- })
99
- : acc,
100
- {},
101
- );
102
-
103
- /**
104
- * Given an object, removes any top level keys with a nullish value.
105
- * The type system should preserve the incoming object type, with all such keys typed as `empty`.
106
- * @param {Object} obj the input object
107
- * @returns {Object} a new object, a subset of the input
108
- */
109
- export const filterNullish = <T: { ... }>(
110
- obj: T,
111
- ): $ObjMap<T, <V>(V) => $NonMaybeType<V>> => filterKeys(obj);
package/npm.js DELETED
@@ -1,145 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.getNpmConfig = getNpmConfig;exports.npmExec = npmExec;exports.npmGetVersions = npmGetVersions;exports.npmPublish = npmPublish;
2
- var _os = require("os");
3
- var _path = _interopRequireDefault(require("path"));
4
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
5
-
6
- var _cp = require("./cp");
7
- var _pkg = require("./pkg");
8
- var _version = require("./version");
9
- var _run = require("./run");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
- function getNpmConfig() {
25
- return (0, _pkg.getCfg)().npm || {};
26
- }
27
-
28
- const envNpmCreds =
29
- process.env.NPM_CREDS && JSON.parse(process.env.NPM_CREDS) || null;
30
-
31
- const npmExe = (npmPath) =>
32
- npmPath || ((0, _os.platform)() === 'win32' ? 'npm.cmd' : 'npm');
33
-
34
- async function npmExec(
35
- args,
36
- npmPath)
37
- {
38
- return (await (0, _cp.exec)(`${npmExe(npmPath)} ${args.join(' ')}`)).stdout.toString();
39
- }
40
-
41
- async function npmGetVersions(
42
- packageName,
43
- npmPath)
44
- {
45
- try {
46
- return JSON.parse(
47
- await npmExec(['show', packageName, 'versions'], npmPath));
48
-
49
- } catch (err) {
50
- (0, _run.buildLog)(
51
- `warning: failed to find existing package for ${packageName} in npm registry: ${err.message}`);
52
-
53
- return [];
54
- }
55
- }
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
- async function npmPublish({
68
- publishPath,
69
- npmConfig,
70
- npmCreds,
71
- npmAuthToken,
72
- tag,
73
- skipExisting = false,
74
- npmPath } =
75
- {}) {
76
- const creds = npmCreds || envNpmCreds;
77
- const authToken = npmAuthToken || process.env.NPM_TOKEN;
78
- const name = (0, _pkg.getPkgName)();
79
- const { publish, registry, access, dryRun } = npmConfig || getNpmConfig();
80
- if (!publish) {
81
- (0, _run.buildLog)(
82
- 'npm publish info missing from package.json, skipping npm publish');
83
-
84
- return false;
85
- }
86
- const resolvedPath = _path.default.resolve(publishPath);
87
- const workDir = (await _fsExtra.default.stat(resolvedPath)).isDirectory() ?
88
- resolvedPath :
89
- _path.default.dirname(resolvedPath);
90
- if (creds || registry || authToken) {
91
- // Write out .npmrc with credentials
92
- const theRegistry = registry || 'https://registry.npmjs.org/';
93
- const [, host] = /^(?:http(?:s)?:\/\/)?(.+)$/.exec(theRegistry) || [];
94
- await _fsExtra.default.mkdirp(workDir);
95
- await _fsExtra.default.writeFile(
96
- _path.default.join(workDir, '.npmrc'),
97
- `registry=${theRegistry}
98
- ${authToken ? `//${host}:_authToken=${authToken}` : ''}
99
- ${
100
- creds ?
101
- `_auth=${Buffer.from(`${creds.username}:${creds.password}`).toString(
102
- 'base64')
103
- }
104
- always-auth=true
105
- email=${creds.email}` :
106
- ''
107
- }`);
108
-
109
- }
110
- const existing = await npmGetVersions(name, npmPath);
111
- const { isRelease, npm: npmVersion, branch } = await (0, _version.getVersion)();
112
- if (existing.includes(npmVersion)) {
113
- if (skipExisting) {
114
- (0, _run.buildLog)(
115
- 'npm package with this same version already exists. Skipping publish...');
116
-
117
- return false;
118
- }
119
- throw new Error(
120
- 'Failed to publish npm package, this version already exists!');
121
-
122
- }
123
- await (0, _cp.spawn)(
124
- npmExe(npmPath),
125
- [
126
- 'publish',
127
- resolvedPath,
128
- '--tag',
129
- tag || (
130
- isRelease ?
131
- 'latest' :
132
- branch === (await (0, _version.getDevBranch)()) ?
133
- 'next' :
134
- 'branch'),
135
- ...(access ? ['--access', access] : []),
136
- ...(dryRun ? ['--dry-run'] : [])],
137
-
138
- {
139
- stdio: 'inherit',
140
- cwd: workDir });
141
-
142
-
143
- return true;
144
- }
145
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ucG0uanMiXSwibmFtZXMiOlsiZ2V0TnBtQ29uZmlnIiwibnBtIiwiZW52TnBtQ3JlZHMiLCJwcm9jZXNzIiwiZW52IiwiTlBNX0NSRURTIiwiSlNPTiIsInBhcnNlIiwibnBtRXhlIiwibnBtUGF0aCIsIm5wbUV4ZWMiLCJhcmdzIiwiam9pbiIsInN0ZG91dCIsInRvU3RyaW5nIiwibnBtR2V0VmVyc2lvbnMiLCJwYWNrYWdlTmFtZSIsImVyciIsIm1lc3NhZ2UiLCJucG1QdWJsaXNoIiwicHVibGlzaFBhdGgiLCJucG1Db25maWciLCJucG1DcmVkcyIsIm5wbUF1dGhUb2tlbiIsInRhZyIsInNraXBFeGlzdGluZyIsImNyZWRzIiwiYXV0aFRva2VuIiwiTlBNX1RPS0VOIiwibmFtZSIsInB1Ymxpc2giLCJyZWdpc3RyeSIsImFjY2VzcyIsImRyeVJ1biIsInJlc29sdmVkUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwid29ya0RpciIsImZzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZGlybmFtZSIsInRoZVJlZ2lzdHJ5IiwiaG9zdCIsImV4ZWMiLCJta2RpcnAiLCJ3cml0ZUZpbGUiLCJCdWZmZXIiLCJmcm9tIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImVtYWlsIiwiZXhpc3RpbmciLCJpc1JlbGVhc2UiLCJucG1WZXJzaW9uIiwiYnJhbmNoIiwiaW5jbHVkZXMiLCJFcnJvciIsInN0ZGlvIiwiY3dkIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCOzs7Ozs7Ozs7Ozs7Ozs7QUFlTyxTQUFTQSxZQUFULEdBQW1DO0FBQ3hDLFNBQU8sbUJBQVNDLEdBQVQsSUFBZ0IsRUFBdkI7QUFDRDs7QUFFRCxNQUFNQyxXQUFzQjtBQUN6QkMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFNBQVosSUFBeUJDLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixPQUFPLENBQUNDLEdBQVIsQ0FBWUMsU0FBdkIsQ0FBMUIsSUFB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RCxFQUFPcEIsT0FBUCxDQUFyQztBQUNBLFFBQU0sRUFBRTRDLFNBQUYsRUFBYXBELEdBQUcsRUFBRXFELFVBQWxCLEVBQThCQyxNQUE5QixLQUF5QyxNQUFNLDBCQUFyRDtBQUNBLE1BQUlILFFBQVEsQ0FBQ0ksUUFBVCxDQUFrQkYsVUFBbEIsQ0FBSixFQUFtQztBQUNqQyxRQUFJN0IsWUFBSixFQUFrQjtBQUNoQjtBQUNFLDhFQURGOztBQUdBLGFBQU8sS0FBUDtBQUNEO0FBQ0QsVUFBTSxJQUFJZ0MsS0FBSjtBQUNKLGlFQURJLENBQU47O0FBR0Q7QUFDRCxRQUFNO0FBQ0pqRCxFQUFBQSxNQUFNLENBQUNDLE9BQUQsQ0FERjtBQUVKO0FBQ0UsV0FERjtBQUVFeUIsRUFBQUEsWUFGRjtBQUdFLFNBSEY7QUFJRVYsRUFBQUEsR0FBRztBQUNBNkIsRUFBQUEsU0FBUztBQUNOLFVBRE07QUFFTkUsRUFBQUEsTUFBTSxNQUFNLE1BQU0sNEJBQVosQ0FBTjtBQUNBLFFBREE7QUFFQSxVQUxILENBSkw7QUFVRSxNQUFJdkIsTUFBTSxHQUFHLENBQUMsVUFBRCxFQUFhQSxNQUFiLENBQUgsR0FBMEIsRUFBcEMsQ0FWRjtBQVdFLE1BQUlDLE1BQU0sR0FBRyxDQUFDLFdBQUQsQ0FBSCxHQUFtQixFQUE3QixDQVhGLENBRkk7O0FBZUo7QUFDRXlCLElBQUFBLEtBQUssRUFBRSxTQURUO0FBRUVDLElBQUFBLEdBQUcsRUFBRXRCLE9BRlAsRUFmSSxDQUFOOzs7QUFvQkEsU0FBTyxJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHsgcGxhdGZvcm0gfSBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5cbmltcG9ydCB7IHNwYXduLCBleGVjIH0gZnJvbSAnLi9jcCc7XG5pbXBvcnQgeyBnZXRDZmcsIGdldFBrZ05hbWUgfSBmcm9tICcuL3BrZyc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uLCBnZXREZXZCcmFuY2ggfSBmcm9tICcuL3ZlcnNpb24nO1xuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5cbmV4cG9ydCB0eXBlIE5wbUNyZWRzID0ge1xuICB1c2VybmFtZTogc3RyaW5nLFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBlbWFpbDogc3RyaW5nLFxufTtcblxuZXhwb3J0IHR5cGUgTnBtQ29uZmlnID0ge1xuICBwdWJsaXNoOiBib29sZWFuLFxuICByZWdpc3RyeT86IHN0cmluZyxcbiAgYWNjZXNzPzogJ3B1YmxpYycgfCAncmVzdHJpY3RlZCcsXG4gIGRyeVJ1bj86IGJvb2xlYW4sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnBtQ29uZmlnKCk6IE5wbUNvbmZpZyB7XG4gIHJldHVybiBnZXRDZmcoKS5ucG0gfHwge307XG59XG5cbmNvbnN0IGVudk5wbUNyZWRzOiA/TnBtQ3JlZHMgPVxuICAocHJvY2Vzcy5lbnYuTlBNX0NSRURTICYmIEpTT04ucGFyc2UocHJvY2Vzcy5lbnYuTlBNX0NSRURTKSkgfHwgbnVsbDtcblxuY29uc3QgbnBtRXhlID0gKG5wbVBhdGg/OiBzdHJpbmcpID0+XG4gIG5wbVBhdGggfHwgKHBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyAnbnBtLmNtZCcgOiAnbnBtJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1FeGVjKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgbnBtUGF0aD86IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZXhlYyhgJHtucG1FeGUobnBtUGF0aCl9ICR7YXJncy5qb2luKCcgJyl9YCkpLnN0ZG91dC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbnBtR2V0VmVyc2lvbnMoXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gIG5wbVBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBucG1FeGVjKFsnc2hvdycsIHBhY2thZ2VOYW1lLCAndmVyc2lvbnMnXSwgbnBtUGF0aCksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYnVpbGRMb2coXG4gICAgICBgd2FybmluZzogZmFpbGVkIHRvIGZpbmQgZXhpc3RpbmcgcGFja2FnZSBmb3IgJHtwYWNrYWdlTmFtZX0gaW4gbnBtIHJlZ2lzdHJ5OiAke2Vyci5tZXNzYWdlfWAsXG4gICAgKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTnBtUHVibGlzaE9wdGlvbnMgPSB7fFxuICBwdWJsaXNoUGF0aDogc3RyaW5nLCAvLyBkaXN0RGlyLCBvciBwYWNrYWdlLnRneiBmaWxlXG4gIG5wbUNvbmZpZz86IE5wbUNvbmZpZyxcbiAgbnBtQ3JlZHM/OiBOcG1DcmVkcyxcbiAgbnBtQXV0aFRva2VuPzogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmcsXG4gIHNraXBFeGlzdGluZz86IGJvb2xlYW4sXG4gIG5wbVBhdGg/OiBzdHJpbmcsIC8vIHBhdGggdG8gZXhlY3V0YWJsZVxufH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1QdWJsaXNoKHtcbiAgcHVibGlzaFBhdGgsXG4gIG5wbUNvbmZpZyxcbiAgbnBtQ3JlZHMsXG4gIG5wbUF1dGhUb2tlbixcbiAgdGFnLFxuICBza2lwRXhpc3RpbmcgPSBmYWxzZSxcbiAgbnBtUGF0aCxcbn06IE5wbVB1Ymxpc2hPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgY3JlZHMgPSBucG1DcmVkcyB8fCBlbnZOcG1DcmVkcztcbiAgY29uc3QgYXV0aFRva2VuID0gbnBtQXV0aFRva2VuIHx8IHByb2Nlc3MuZW52Lk5QTV9UT0tFTjtcbiAgY29uc3QgbmFtZSA9IGdldFBrZ05hbWUoKTtcbiAgY29uc3QgeyBwdWJsaXNoLCByZWdpc3RyeSwgYWNjZXNzLCBkcnlSdW4gfSA9IG5wbUNvbmZpZyB8fCBnZXROcG1Db25maWcoKTtcbiAgaWYgKCFwdWJsaXNoKSB7XG4gICAgYnVpbGRMb2coXG4gICAgICAnbnBtIHB1Ymxpc2ggaW5mbyBtaXNzaW5nIGZyb20gcGFja2FnZS5qc29uLCBza2lwcGluZyBucG0gcHVibGlzaCcsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHB1Ymxpc2hQYXRoKTtcbiAgY29uc3Qgd29ya0RpciA9IChhd2FpdCBmcy5zdGF0KHJlc29sdmVkUGF0aCkpLmlzRGlyZWN0b3J5KClcbiAgICA/IHJlc29sdmVkUGF0aFxuICAgIDogcGF0aC5kaXJuYW1lKHJlc29sdmVkUGF0aCk7XG4gIGlmIChjcmVkcyB8fCByZWdpc3RyeSB8fCBhdXRoVG9rZW4pIHtcbiAgICAvLyBXcml0ZSBvdXQgLm5wbXJjIHdpdGggY3JlZGVudGlhbHNcbiAgICBjb25zdCB0aGVSZWdpc3RyeSA9IHJlZ2lzdHJ5IHx8ICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nO1xuICAgIGNvbnN0IFssIGhvc3RdID0gL14oPzpodHRwKD86cyk/OlxcL1xcLyk/KC4rKSQvLmV4ZWModGhlUmVnaXN0cnkpIHx8IFtdO1xuICAgIGF3YWl0IGZzLm1rZGlycCh3b3JrRGlyKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4od29ya0RpciwgJy5ucG1yYycpLFxuICAgICAgYHJlZ2lzdHJ5PSR7dGhlUmVnaXN0cnl9XG4ke2F1dGhUb2tlbiA/IGAvLyR7aG9zdH06X2F1dGhUb2tlbj0ke2F1dGhUb2tlbn1gIDogJyd9XG4ke1xuICBjcmVkc1xuICAgID8gYF9hdXRoPSR7QnVmZmVyLmZyb20oYCR7Y3JlZHMudXNlcm5hbWV9OiR7Y3JlZHMucGFzc3dvcmR9YCkudG9TdHJpbmcoXG4gICAgICAgICdiYXNlNjQnLFxuICAgICAgKX1cbmFsd2F5cy1hdXRoPXRydWVcbmVtYWlsPSR7Y3JlZHMuZW1haWx9YFxuICAgIDogJydcbn1gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBucG1HZXRWZXJzaW9ucyhuYW1lLCBucG1QYXRoKTtcbiAgY29uc3QgeyBpc1JlbGVhc2UsIG5wbTogbnBtVmVyc2lvbiwgYnJhbmNoIH0gPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gIGlmIChleGlzdGluZy5pbmNsdWRlcyhucG1WZXJzaW9uKSkge1xuICAgIGlmIChza2lwRXhpc3RpbmcpIHtcbiAgICAgIGJ1aWxkTG9nKFxuICAgICAgICAnbnBtIHBhY2thZ2Ugd2l0aCB0aGlzIHNhbWUgdmVyc2lvbiBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgcHVibGlzaC4uLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRmFpbGVkIHRvIHB1Ymxpc2ggbnBtIHBhY2thZ2UsIHRoaXMgdmVyc2lvbiBhbHJlYWR5IGV4aXN0cyEnLFxuICAgICk7XG4gIH1cbiAgYXdhaXQgc3Bhd24oXG4gICAgbnBtRXhlKG5wbVBhdGgpLFxuICAgIFtcbiAgICAgICdwdWJsaXNoJyxcbiAgICAgIHJlc29sdmVkUGF0aCxcbiAgICAgICctLXRhZycsXG4gICAgICB0YWcgfHxcbiAgICAgICAgKGlzUmVsZWFzZVxuICAgICAgICAgID8gJ2xhdGVzdCdcbiAgICAgICAgICA6IGJyYW5jaCA9PT0gKGF3YWl0IGdldERldkJyYW5jaCgpKVxuICAgICAgICAgID8gJ25leHQnXG4gICAgICAgICAgOiAnYnJhbmNoJyksXG4gICAgICAuLi4oYWNjZXNzID8gWyctLWFjY2VzcycsIGFjY2Vzc10gOiBbXSksXG4gICAgICAuLi4oZHJ5UnVuID8gWyctLWRyeS1ydW4nXSA6IFtdKSxcbiAgICBdLFxuICAgIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBjd2Q6IHdvcmtEaXIsXG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=