@atlassian/wrm-troubleshooting 0.0.0-snapshot.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 (86) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/CODE_OF_CONDUCT.md +73 -0
  3. package/LICENSE +13 -0
  4. package/README.md +99 -0
  5. package/bin/cli.js +5 -0
  6. package/dist/analytics/analytics.js +74 -0
  7. package/dist/analytics/analytics.js.map +1 -0
  8. package/dist/analytics/events.js +27 -0
  9. package/dist/analytics/events.js.map +1 -0
  10. package/dist/applicationUrls.js +39 -0
  11. package/dist/applicationUrls.js.map +1 -0
  12. package/dist/atlassianPluginXml.js +69 -0
  13. package/dist/atlassianPluginXml.js.map +1 -0
  14. package/dist/checkForUpdate.js +58 -0
  15. package/dist/checkForUpdate.js.map +1 -0
  16. package/dist/cli.js +76 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/cliUtils.js +21 -0
  19. package/dist/cliUtils.js.map +1 -0
  20. package/dist/globWithOptions.js +18 -0
  21. package/dist/globWithOptions.js.map +1 -0
  22. package/dist/maven/MavenError.js +14 -0
  23. package/dist/maven/MavenError.js.map +1 -0
  24. package/dist/paths.js +12 -0
  25. package/dist/paths.js.map +1 -0
  26. package/dist/pom.js +147 -0
  27. package/dist/pom.js.map +1 -0
  28. package/dist/steps/getEffectivePomConfig.js +94 -0
  29. package/dist/steps/getEffectivePomConfig.js.map +1 -0
  30. package/dist/steps/getEffectiveWebpackConfig.js +35 -0
  31. package/dist/steps/getEffectiveWebpackConfig.js.map +1 -0
  32. package/dist/steps/getWrmWebpackPlugin.js +22 -0
  33. package/dist/steps/getWrmWebpackPlugin.js.map +1 -0
  34. package/dist/steps/index.js +27 -0
  35. package/dist/steps/index.js.map +1 -0
  36. package/dist/steps/locatePomFile.js +30 -0
  37. package/dist/steps/locatePomFile.js.map +1 -0
  38. package/dist/steps/locateWebpackConfigFile.js +32 -0
  39. package/dist/steps/locateWebpackConfigFile.js.map +1 -0
  40. package/dist/steps/types.js +48 -0
  41. package/dist/steps/types.js.map +1 -0
  42. package/dist/steps/validateOptions.js +21 -0
  43. package/dist/steps/validateOptions.js.map +1 -0
  44. package/dist/steps/verifyPomConfigIsValid.js +22 -0
  45. package/dist/steps/verifyPomConfigIsValid.js.map +1 -0
  46. package/dist/steps/verifyWebpackBundle.js +26 -0
  47. package/dist/steps/verifyWebpackBundle.js.map +1 -0
  48. package/dist/steps/verifyWrmPluginHasValidConfig.js +28 -0
  49. package/dist/steps/verifyWrmPluginHasValidConfig.js.map +1 -0
  50. package/dist/steps/verifyWrmPluginScanFolders.js +15 -0
  51. package/dist/steps/verifyWrmPluginScanFolders.js.map +1 -0
  52. package/dist/steps/verifyWrmRuntime.js +139 -0
  53. package/dist/steps/verifyWrmRuntime.js.map +1 -0
  54. package/dist/troubleshooting.js +219 -0
  55. package/dist/troubleshooting.js.map +1 -0
  56. package/dist/troubleshootingOptions.js +12 -0
  57. package/dist/troubleshootingOptions.js.map +1 -0
  58. package/dist/types.js +3 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/webpack/webpack.js +149 -0
  61. package/dist/webpack/webpack.js.map +1 -0
  62. package/dist/webpack/webpackCli.js +167 -0
  63. package/dist/webpack/webpackCli.js.map +1 -0
  64. package/dist/webpack/webpackCliV3.js +33 -0
  65. package/dist/webpack/webpackCliV3.js.map +1 -0
  66. package/dist/webpack/webpackCliV4.js +33 -0
  67. package/dist/webpack/webpackCliV4.js.map +1 -0
  68. package/dist/webpack/webpackError.js +14 -0
  69. package/dist/webpack/webpackError.js.map +1 -0
  70. package/dist/webpackPlugin/WebpackRetrieveConfigPlugin.js +61 -0
  71. package/dist/webpackPlugin/WebpackRetrieveConfigPlugin.js.map +1 -0
  72. package/dist/webpackPlugin/webpack.config.js +10 -0
  73. package/dist/webpackPlugin/webpack.config.js.map +1 -0
  74. package/dist/webpackWrmPlugin.js +62 -0
  75. package/dist/webpackWrmPlugin.js.map +1 -0
  76. package/dist/wrm/fetchWithTimeout.js +23 -0
  77. package/dist/wrm/fetchWithTimeout.js.map +1 -0
  78. package/dist/wrm/wrmRestApi.js +93 -0
  79. package/dist/wrm/wrmRestApi.js.map +1 -0
  80. package/dist/wrm/wrmTypes.js +3 -0
  81. package/dist/wrm/wrmTypes.js.map +1 -0
  82. package/dist/xmlParser.js +42 -0
  83. package/dist/xmlParser.js.map +1 -0
  84. package/dist/yargsHelper.js +22 -0
  85. package/dist/yargsHelper.js.map +1 -0
  86. package/package.json +97 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"troubleshootingOptions.js","sourceRoot":"","sources":["../src/troubleshootingOptions.ts"],"names":[],"mappings":";;;AAiBA,+BAA+B;AAClB,QAAA,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY;AAEtC,QAAA,6BAA6B,GAAiC;IACzE,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,uBAAe;CACzB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.bundleWebpack = exports.retrieveEffectiveWebpackConfig = exports.askForWebpackConfig = exports.confirmRootWebpackConfig = exports.findRootWebpackConfigFile = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = require("fs");
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
11
+ const globWithOptions_1 = require("../globWithOptions");
12
+ const paths_1 = require("../paths");
13
+ const types_1 = require("../steps/types");
14
+ const webpackCli_1 = require("./webpackCli");
15
+ const webpackError_1 = require("./webpackError");
16
+ inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
17
+ const WEBPACK_CONFIG_ROOT_FILE_PATTERN = 'webpack.config.*';
18
+ const WEBPACK_CONFIG_FILE_GLOB_PATTERN = '**/webpack.*';
19
+ async function findRootWebpackConfigFile() {
20
+ const files = await (0, globWithOptions_1.globWithOptions)(WEBPACK_CONFIG_ROOT_FILE_PATTERN);
21
+ if (files.length) {
22
+ // There is always a one root file
23
+ return files[0];
24
+ }
25
+ return undefined;
26
+ }
27
+ exports.findRootWebpackConfigFile = findRootWebpackConfigFile;
28
+ async function confirmRootWebpackConfig(webpackConfigFile, rootWebpackConfigFileFound) {
29
+ const answers = await inquirer_1.default.prompt({
30
+ type: 'confirm',
31
+ name: 'confirmRootWebpackConfig',
32
+ message: `We have found ${rootWebpackConfigFileFound ? 'a root ' : ''}webpack config file at "${chalk_1.default.green((0, paths_1.getRelativePath)(webpackConfigFile))}". Is it the file we should be using now?`,
33
+ });
34
+ if (answers.confirmRootWebpackConfig) {
35
+ return webpackConfigFile;
36
+ }
37
+ return undefined;
38
+ }
39
+ exports.confirmRootWebpackConfig = confirmRootWebpackConfig;
40
+ async function askToSelectWebpackConfig(fileLocations) {
41
+ const answers = await inquirer_1.default.prompt({
42
+ // @ts-expect-error We are using inquirer plugin that is causing TS error
43
+ type: 'autocomplete',
44
+ name: 'webpackLocation',
45
+ message: 'Select a webpack config file you want to use:',
46
+ source: (answersSoFar, input) => {
47
+ const userInput = input || '';
48
+ return fileLocations
49
+ .filter((fileLocation) => fileLocation.match(new RegExp(userInput, 'i')))
50
+ .map((fileLocation) => ({
51
+ name: (0, paths_1.getRelativePath)(fileLocation),
52
+ value: fileLocation,
53
+ }));
54
+ },
55
+ });
56
+ return answers.webpackLocation;
57
+ }
58
+ async function askForWebpackConfigLocation() {
59
+ const hasWebpackConfigAnswers = await inquirer_1.default.prompt({
60
+ type: 'confirm',
61
+ name: 'hasWebpackConfig',
62
+ message: 'Have you installed and configured the webpack for this project?',
63
+ });
64
+ if (!hasWebpackConfigAnswers.hasWebpackConfig) {
65
+ return new Error("The webpack wasn't configured for this project.");
66
+ }
67
+ const answers = await inquirer_1.default.prompt({
68
+ type: 'input',
69
+ name: 'webpackLocation',
70
+ message: 'Please provide a path to a webpack config file you want to use:',
71
+ async validate(input) {
72
+ try {
73
+ await fs_1.promises.access(input);
74
+ return true;
75
+ }
76
+ catch (e) {
77
+ // eslint-disable-next-line no-empty
78
+ }
79
+ return 'Cannot find or read the file from provided path. Please correct the file path.';
80
+ },
81
+ });
82
+ return answers.webpackLocation;
83
+ }
84
+ async function askForWebpackConfig(rooWebpackConfigFileFound) {
85
+ if (!rooWebpackConfigFileFound) {
86
+ console.log("We couldn't find a webpack config file in root directory of your project. ");
87
+ }
88
+ let webpackLocation;
89
+ console.log('We are now looking for the webpack config files in your project...');
90
+ const fileLocations = await (0, globWithOptions_1.globWithOptions)(WEBPACK_CONFIG_FILE_GLOB_PATTERN);
91
+ // We have found some files that are looking like potential webpack configs
92
+ if (fileLocations.length) {
93
+ webpackLocation = await askToSelectWebpackConfig(fileLocations);
94
+ }
95
+ else {
96
+ console.log("We couldn't locate any files that look like webpack config files in this project.");
97
+ webpackLocation = await askForWebpackConfigLocation();
98
+ }
99
+ return webpackLocation;
100
+ }
101
+ exports.askForWebpackConfig = askForWebpackConfig;
102
+ async function retrieveEffectiveWebpackConfig(webpackConfigFile, commandTimeout) {
103
+ const webpackCliInfo = await (0, webpackCli_1.getWebpackCliInfo)(webpackConfigFile, commandTimeout);
104
+ if (webpackCliInfo instanceof Error) {
105
+ return webpackCliInfo;
106
+ }
107
+ console.log('👀 We will retrieve webpack configuration now. This might take some time...');
108
+ let output;
109
+ try {
110
+ const result = await (0, webpackCli_1.runWebpackBundleWithInjectedPlugin)(webpackCliInfo, webpackConfigFile, commandTimeout);
111
+ if (result instanceof Error) {
112
+ return result;
113
+ }
114
+ ({ stdout: output } = result);
115
+ }
116
+ catch (err) {
117
+ const error = err;
118
+ return new webpackError_1.WebpackError(`Couldn't run webpack. Is the configuration "${(0, paths_1.getRelativePath)(webpackConfigFile)}" contains a valid webpack config? Try running a standalone webpack command to lear more e.g ${chalk_1.default.bold('npx webpack')}`, error.message);
119
+ }
120
+ // Parse the output as JSON
121
+ try {
122
+ const jsonString = output;
123
+ const effectiveConfig = JSON.parse(jsonString);
124
+ return {
125
+ effectiveConfig,
126
+ cliInfo: webpackCliInfo,
127
+ };
128
+ }
129
+ catch (e) {
130
+ return new Error(" Couldn't parse webpack configuration. Something went wrong.");
131
+ }
132
+ }
133
+ exports.retrieveEffectiveWebpackConfig = retrieveEffectiveWebpackConfig;
134
+ async function bundleWebpack(webpackCliInfo, webpackConfigFile, commandTimeout) {
135
+ // TODO: Should we pass webpack bundling modes here?
136
+ try {
137
+ await (0, webpackCli_1.runWebpackBundle)(webpackCliInfo, webpackConfigFile, commandTimeout);
138
+ }
139
+ catch (err) {
140
+ const error = err;
141
+ if (error.timedOut) {
142
+ return (0, types_1.getTimeoutError)('webpack', commandTimeout);
143
+ }
144
+ const errorMessage = error.stdout || error.message || error.shortMessage;
145
+ return new webpackError_1.WebpackError(`Couldn't bundle the code using the ${chalk_1.default.bold('webpack CLI')}.`, errorMessage);
146
+ }
147
+ }
148
+ exports.bundleWebpack = bundleWebpack;
149
+ //# sourceMappingURL=webpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpack.js","sourceRoot":"","sources":["../../src/webpack/webpack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.runWebpackBundle = exports.runWebpackBundleWithInjectedPlugin = exports.getWebpackCliInfo = void 0;
26
+ const chalk_1 = __importDefault(require("chalk"));
27
+ const execa_1 = __importDefault(require("execa"));
28
+ const fs_1 = require("fs");
29
+ const path_1 = __importDefault(require("path"));
30
+ const semver = __importStar(require("semver"));
31
+ const paths_1 = require("../paths");
32
+ const types_1 = require("../steps/types");
33
+ const webpackCliV3_1 = require("./webpackCliV3");
34
+ const webpackCliV4_1 = require("./webpackCliV4");
35
+ const webpackError_1 = require("./webpackError");
36
+ var WebpackCliVersion;
37
+ (function (WebpackCliVersion) {
38
+ WebpackCliVersion[WebpackCliVersion["V3"] = 3] = "V3";
39
+ WebpackCliVersion[WebpackCliVersion["V4"] = 4] = "V4";
40
+ })(WebpackCliVersion || (WebpackCliVersion = {}));
41
+ async function getWebpackCliInfo(webpackConfigFile, commandTimeout) {
42
+ const absoluteDirname = path_1.default.resolve(path_1.default.dirname(webpackConfigFile));
43
+ const workingDirectory = await resolveCliWorkingDirectory(absoluteDirname);
44
+ if (!workingDirectory) {
45
+ return new Error(`We can't detect the location of the ${chalk_1.default.bold('webpack CLI')}. Please ensure that the project has installed the "${chalk_1.default.bold('webpack-cli')}" NPM dependency.`);
46
+ }
47
+ const cliVersion = await getWebpackCliVersion(workingDirectory, commandTimeout);
48
+ if (cliVersion instanceof Error) {
49
+ return cliVersion;
50
+ }
51
+ return {
52
+ version: cliVersion,
53
+ workingDirectory,
54
+ };
55
+ }
56
+ exports.getWebpackCliInfo = getWebpackCliInfo;
57
+ const versionsMap = new Map([
58
+ [3, WebpackCliVersion.V3],
59
+ [4, WebpackCliVersion.V4],
60
+ ]);
61
+ /**
62
+ * Returns the version of the webpack-cli command
63
+ */
64
+ async function getWebpackCliVersion(workingDirectory, commandTimeout) {
65
+ let cliVersion;
66
+ try {
67
+ const { stdout: output } = await (0, execa_1.default)('npx', ['webpack-cli', '--version'], {
68
+ cwd: workingDirectory,
69
+ timeout: commandTimeout,
70
+ });
71
+ // webpack-cli v3 outputs only a version but webpack-cli v4 outputs multiple versions for each of the components
72
+ cliVersion = semver.parse(output);
73
+ if (cliVersion === null && output.split('\n').length > 1) {
74
+ cliVersion = semver.parse(findCliVersionString(output));
75
+ }
76
+ }
77
+ catch (err) {
78
+ const error = err;
79
+ if (error.timedOut) {
80
+ return (0, types_1.getTimeoutError)('webpack', commandTimeout);
81
+ }
82
+ const errorMessage = error.stdout || error.message || error.shortMessage;
83
+ return new webpackError_1.WebpackError(`We can't detect the location of the ${chalk_1.default.bold('webpack CLI')}. Please ensure that the project has installed the "${chalk_1.default.bold('webpack-cli')}" NPM dependency.`, errorMessage);
84
+ }
85
+ if (cliVersion === null) {
86
+ return new Error(`The "webpack-cli" has invalid version "${cliVersion}". Please try reinstalling the "webpack-cli" NPM dependency.`);
87
+ }
88
+ const webpackCliMajorVersion = cliVersion.major;
89
+ if (!versionsMap.has(webpackCliMajorVersion)) {
90
+ const supportedVersions = [...versionsMap.keys()].join(', ');
91
+ return new Error(`The current version ${webpackCliMajorVersion} of "webpack-cli" package is not yet supported. Please try using the "webpack-cli" in one the supported versions instead: ${supportedVersions}.`);
92
+ }
93
+ // We checked if the map has the value
94
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
+ return versionsMap.get(webpackCliMajorVersion);
96
+ }
97
+ function findCliVersionString(input) {
98
+ const match = input.match(/^(?:webpack-cli):?\s+([0-9.a-z\-_]+)$/m);
99
+ return match && match[1];
100
+ }
101
+ /**
102
+ * Locates the directory where we can safely call the "npx webpack-cli" command withing the project dir
103
+ */
104
+ async function resolveCliWorkingDirectory(dir) {
105
+ // Get a name of the root directory so we can break from the loop while we are traversing path tree
106
+ const rootDirectory = path_1.default.parse(dir).root;
107
+ let currentDir = dir;
108
+ let foundPath = null;
109
+ // Chek if we have a valid dir and we haven't reached the root directory yet
110
+ while (currentDir && currentDir !== rootDirectory) {
111
+ let webpackCliPath;
112
+ /**
113
+ * Check if we can resolve webpack-cli binary in the current directory.
114
+ *
115
+ * We need a custom resolution function since we can't simply call {@link require.resolve} with "webpack-cli" as param:
116
+ * ```js
117
+ * require.resolve('webpack-cli', { paths: [currentDir] });
118
+ * ```
119
+ * This wouldn't work with the project that is using Yarn and Workspaces that are hoisting the "webpack-cli" NPM module
120
+ * to the root directory of the monorepo project. If the webpack-cli bin file is located under node_modules in
121
+ * one of the non-project-root directories, most of the time it's the directory we are looking for.
122
+ */
123
+ try {
124
+ webpackCliPath = path_1.default.join(currentDir, 'node_modules', '.bin', 'webpack-cli');
125
+ await fs_1.promises.access(webpackCliPath);
126
+ }
127
+ catch (e) {
128
+ currentDir = path_1.default.resolve(currentDir, '..');
129
+ continue;
130
+ }
131
+ // Check if the resolved webpack path is included in current dir
132
+ if (!(0, paths_1.isSubDirectory)(currentDir, path_1.default.dirname(webpackCliPath))) {
133
+ currentDir = path_1.default.resolve(currentDir, '..');
134
+ continue;
135
+ }
136
+ foundPath = currentDir;
137
+ break;
138
+ }
139
+ return foundPath || null;
140
+ }
141
+ function runWebpackBundleWithInjectedPlugin(webpackCliInfo, webpackConfigFile, commandTimeout) {
142
+ let command;
143
+ switch (webpackCliInfo.version) {
144
+ case WebpackCliVersion.V3:
145
+ command = (0, webpackCliV3_1.runWebpackBundleWithInjectedPluginCliV3)(webpackCliInfo, webpackConfigFile, commandTimeout);
146
+ break;
147
+ case WebpackCliVersion.V4:
148
+ command = (0, webpackCliV4_1.runWebpackBundleWithInjectedPluginCliV4)(webpackCliInfo, webpackConfigFile, commandTimeout);
149
+ break;
150
+ }
151
+ return command;
152
+ }
153
+ exports.runWebpackBundleWithInjectedPlugin = runWebpackBundleWithInjectedPlugin;
154
+ function runWebpackBundle(webpackCliInfo, webpackConfigFile, commandTimeout) {
155
+ let command;
156
+ switch (webpackCliInfo.version) {
157
+ case WebpackCliVersion.V3:
158
+ command = (0, webpackCliV3_1.runWebpackBundleCliV3)(webpackCliInfo, webpackConfigFile, commandTimeout);
159
+ break;
160
+ case WebpackCliVersion.V4:
161
+ command = (0, webpackCliV4_1.runWebpackBundleCliV4)(webpackCliInfo, webpackConfigFile, commandTimeout);
162
+ break;
163
+ }
164
+ return command;
165
+ }
166
+ exports.runWebpackBundle = runWebpackBundle;
167
+ //# sourceMappingURL=webpackCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackCli.js","sourceRoot":"","sources":["../../src/webpack/webpackCli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runWebpackBundleCliV3 = exports.runWebpackBundleWithInjectedPluginCliV3 = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ const fs_1 = require("fs");
9
+ const path_1 = __importDefault(require("path"));
10
+ async function runWebpackBundleWithInjectedPluginCliV3(webpackCliInfo, webpackConfigFile, commandTimeout) {
11
+ const pluginPath = path_1.default.resolve(__dirname, '../webpackPlugin/WebpackRetrieveConfigPlugin.js');
12
+ try {
13
+ await fs_1.promises.access(pluginPath);
14
+ }
15
+ catch (e) {
16
+ return new Error('We couldn\'t locate the "WebpackRetrieveConfigPlugin" plugin. Please try reinstalling the troubleshooting tool.');
17
+ }
18
+ // TODO: Should we pass webpack bundling modes here?
19
+ return (0, execa_1.default)('npx', ['webpack-cli', '--config', webpackConfigFile, '--plugin', pluginPath], {
20
+ cwd: webpackCliInfo.workingDirectory,
21
+ timeout: commandTimeout,
22
+ });
23
+ }
24
+ exports.runWebpackBundleWithInjectedPluginCliV3 = runWebpackBundleWithInjectedPluginCliV3;
25
+ function runWebpackBundleCliV3(webpackCliInfo, webpackConfigFile, commandTimeout) {
26
+ // TODO: Should we pass webpack bundling modes here?
27
+ return (0, execa_1.default)('npx', ['webpack-cli', '--config', webpackConfigFile], {
28
+ cwd: webpackCliInfo.workingDirectory,
29
+ timeout: commandTimeout,
30
+ });
31
+ }
32
+ exports.runWebpackBundleCliV3 = runWebpackBundleCliV3;
33
+ //# sourceMappingURL=webpackCliV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackCliV3.js","sourceRoot":"","sources":["../../src/webpack/webpackCliV3.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,2BAAoC;AACpC,gDAAwB;AAIjB,KAAK,UAAU,uCAAuC,CAC3D,cAA8B,EAC9B,iBAAyB,EACzB,cAAsB;IAEtB,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC;IAE9F,IAAI;QACF,MAAM,aAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC7B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,KAAK,CACd,iHAAiH,CAClH,CAAC;KACH;IAED,oDAAoD;IACpD,OAAO,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;QAC1F,GAAG,EAAE,cAAc,CAAC,gBAAgB;QACpC,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;AACL,CAAC;AApBD,0FAoBC;AAED,SAAgB,qBAAqB,CACnC,cAA8B,EAC9B,iBAAyB,EACzB,cAAsB;IAEtB,oDAAoD;IACpD,OAAO,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE;QAClE,GAAG,EAAE,cAAc,CAAC,gBAAgB;QACpC,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;AACL,CAAC;AAVD,sDAUC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runWebpackBundleCliV4 = exports.runWebpackBundleWithInjectedPluginCliV4 = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ const fs_1 = require("fs");
9
+ const path_1 = __importDefault(require("path"));
10
+ async function runWebpackBundleWithInjectedPluginCliV4(webpackCliInfo, webpackConfigFile, commandTimeout) {
11
+ const configPath = path_1.default.resolve(__dirname, '../webpackPlugin/webpack.config.js');
12
+ try {
13
+ await fs_1.promises.access(configPath);
14
+ }
15
+ catch (e) {
16
+ return new Error('We couldn\'t locate the "WebpackRetrieveConfigPlugin" plugin. Please try reinstalling the troubleshooting tool.');
17
+ }
18
+ // TODO: Should we pass webpack bundling modes here?
19
+ return (0, execa_1.default)('npx', ['webpack-cli', 'build', '--config', webpackConfigFile, configPath, '--merge'], {
20
+ cwd: webpackCliInfo.workingDirectory,
21
+ timeout: commandTimeout,
22
+ });
23
+ }
24
+ exports.runWebpackBundleWithInjectedPluginCliV4 = runWebpackBundleWithInjectedPluginCliV4;
25
+ function runWebpackBundleCliV4(webpackCliInfo, webpackConfigFile, commandTimeout) {
26
+ // TODO: Should we pass webpack bundling modes here?
27
+ return (0, execa_1.default)('npx', ['webpack-cli', 'bundle', '--config', webpackConfigFile], {
28
+ cwd: webpackCliInfo.workingDirectory,
29
+ timeout: commandTimeout,
30
+ });
31
+ }
32
+ exports.runWebpackBundleCliV4 = runWebpackBundleCliV4;
33
+ //# sourceMappingURL=webpackCliV4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackCliV4.js","sourceRoot":"","sources":["../../src/webpack/webpackCliV4.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,2BAAoC;AACpC,gDAAwB;AAIjB,KAAK,UAAU,uCAAuC,CAC3D,cAA8B,EAC9B,iBAAyB,EACzB,cAAsB;IAEtB,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;IAEjF,IAAI;QACF,MAAM,aAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC7B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,KAAK,CACd,iHAAiH,CAClH,CAAC;KACH;IAED,oDAAoD;IACpD,OAAO,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;QAClG,GAAG,EAAE,cAAc,CAAC,gBAAgB;QACpC,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;AACL,CAAC;AApBD,0FAoBC;AAED,SAAgB,qBAAqB,CACnC,cAA8B,EAC9B,iBAAyB,EACzB,cAAsB;IAEtB,oDAAoD;IACpD,OAAO,IAAA,eAAK,EAAC,KAAK,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE;QAC5E,GAAG,EAAE,cAAc,CAAC,gBAAgB;QACpC,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;AACL,CAAC;AAVD,sDAUC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebpackError = void 0;
4
+ class WebpackError extends Error {
5
+ constructor(message, webpackOutput) {
6
+ super(message);
7
+ this.webpackOutput = webpackOutput;
8
+ }
9
+ getWebpackOutput() {
10
+ return this.webpackOutput;
11
+ }
12
+ }
13
+ exports.WebpackError = WebpackError;
14
+ //# sourceMappingURL=webpackError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackError.js","sourceRoot":"","sources":["../../src/webpack/webpackError.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAa,SAAQ,KAAK;IAGrC,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF;AAZD,oCAYC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function decoratePluginWithNames(config) {
4
+ return {
5
+ ...config,
6
+ plugins: config.plugins.filter(Boolean).map((plugin) => {
7
+ var _a, _b;
8
+ plugin.pluginName =
9
+ (_b = (_a = plugin.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : plugin.name;
10
+ return plugin;
11
+ }),
12
+ };
13
+ }
14
+ const unwantedWebpackPlugins = [
15
+ /* prettier-ignore-start */
16
+ 'BundleAnalyzerPlugin' /* When we serialize the plugin it will generate circular data */,
17
+ /* prettier-ignore-end */
18
+ ];
19
+ function cleanUnwantedPlugins(config) {
20
+ return {
21
+ ...config,
22
+ plugins: config.plugins.map((plugin) => {
23
+ const { pluginName } = plugin;
24
+ if (!unwantedWebpackPlugins.includes(pluginName)) {
25
+ return plugin;
26
+ }
27
+ // Clean-up config and only keep the plugin name.
28
+ // We are doing that to know what webpack plugins are being used by the project and to keep type safety.
29
+ const fakePlugin = {
30
+ pluginName,
31
+ /* eslint-disable @typescript-eslint/no-empty-function */
32
+ constructor() { },
33
+ apply() { },
34
+ /* eslint-enable @typescript-eslint/no-empty-function */
35
+ };
36
+ return fakePlugin;
37
+ }),
38
+ };
39
+ }
40
+ function normalizeConfig(config) {
41
+ const configWithDecoratedPlugins = decoratePluginWithNames(config);
42
+ return cleanUnwantedPlugins(configWithDecoratedPlugins);
43
+ }
44
+ class WebpackRetrieveConfigPlugin {
45
+ apply(compiler) {
46
+ compiler.hooks.beforeRun.tapAsync('Retrieve Webpack Configuration', function (compiler) {
47
+ const config = normalizeConfig(compiler.options);
48
+ const serializedConfig = JSON.stringify(config);
49
+ // Output the serialized webpack config to process stdout so the WRM troubleshooting tool can read it
50
+ console.log(serializedConfig);
51
+ // We need a timeout since there is an issue in Node related to flushing stdout
52
+ // https://github.com/nodejs/node/issues/12921
53
+ setTimeout(() => {
54
+ process.exit(0);
55
+ }, 50);
56
+ });
57
+ }
58
+ }
59
+ exports.default = WebpackRetrieveConfigPlugin;
60
+ module.exports = WebpackRetrieveConfigPlugin;
61
+ //# sourceMappingURL=WebpackRetrieveConfigPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebpackRetrieveConfigPlugin.js","sourceRoot":"","sources":["../../src/webpackPlugin/WebpackRetrieveConfigPlugin.ts"],"names":[],"mappings":";;AAKA,SAAS,uBAAuB,CAAC,MAAgC;IAC/D,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAyB,CAAC,MAAM,EAAE,EAAE;;YAC5E,MAAiC,CAAC,UAAU;gBAC3C,MAAA,MAAC,MAAgC,CAAC,WAAW,0CAAE,IAAI,mCAAK,MAAgC,CAAC,IAAI,CAAC;YAEhG,OAAO,MAAgC,CAAC;QAC1C,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG;IAC7B,2BAA2B;IAC3B,sBAAsB,CAAC,iEAAiE;IACxF,yBAAyB;CAC1B,CAAC;AAEF,SAAS,oBAAoB,CAAC,MAA8B;IAC1D,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAyB,CAAC,MAAM,EAAE,EAAE;YAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAE9B,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAChD,OAAO,MAAM,CAAC;aACf;YAED,iDAAiD;YACjD,wGAAwG;YACxG,MAAM,UAAU,GAA2B;gBACzC,UAAU;gBACV,yDAAyD;gBACzD,WAAW,KAAI,CAAC;gBAChB,KAAK,KAAI,CAAC;gBACV,wDAAwD;aACzD,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAgC;IACvD,MAAM,0BAA0B,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEnE,OAAO,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;AAC1D,CAAC;AAED,MAAqB,2BAA2B;IAC9C,KAAK,CAAC,QAAkB;QACtB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,gCAAgC,EAAE,UAAU,QAAQ;YACpF,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAEhD,qGAAqG;YACrG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAE9B,+EAA+E;YAC/E,8CAA8C;YAC9C,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAhBD,8CAgBC;AAED,MAAM,CAAC,OAAO,GAAG,2BAA2B,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const WebpackRetrieveConfigPlugin_1 = __importDefault(require("./WebpackRetrieveConfigPlugin"));
7
+ module.exports = {
8
+ plugins: [new WebpackRetrieveConfigPlugin_1.default()],
9
+ };
10
+ //# sourceMappingURL=webpack.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpack.config.js","sourceRoot":"","sources":["../../src/webpackPlugin/webpack.config.ts"],"names":[],"mappings":";;;;;AAAA,gGAAwE;AAExE,MAAM,CAAC,OAAO,GAAG;IACf,OAAO,EAAE,CAAC,IAAI,qCAA2B,EAAE,CAAC;CAC7C,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verifyGeneratedWebResources = exports.checkWrmScanFoldersIsValid = exports.checkWrmPluginHasValidConfig = exports.NPM_PACKAGE_NAME = exports.WRM_PLUGIN_NAME = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = require("fs");
9
+ const atlassianPluginXml_1 = require("./atlassianPluginXml");
10
+ const paths_1 = require("./paths");
11
+ const pom_1 = require("./pom");
12
+ exports.WRM_PLUGIN_NAME = 'WrmPlugin';
13
+ exports.NPM_PACKAGE_NAME = 'atlassian-webresource-webpack-plugin';
14
+ async function checkWrmPluginHasValidConfig(pomXml, wrmWebpackPlugin) {
15
+ const pomPluginKey = (0, pom_1.getAtlassianPluginKeyFromPom)(pomXml);
16
+ const { pluginKey: wrmPluginPluginKey } = wrmWebpackPlugin.options;
17
+ if (pomPluginKey !== wrmPluginPluginKey) {
18
+ const pluginKeyOption = 'pluginKey';
19
+ const pomFile = 'pom.xml';
20
+ // TODO: the pom.xml should be atlassian-plugin.xml file I guess
21
+ return new Error(`The value of atlassian plugin key provided to the ${chalk_1.default.bold(exports.WRM_PLUGIN_NAME)} webpack plugin doesn't match the plugin key defined in "${chalk_1.default.green(pomFile)}" file:
22
+ - ${chalk_1.default.bold(exports.WRM_PLUGIN_NAME)} [${chalk_1.default.bold(pluginKeyOption)}]: "${chalk_1.default.bold.red(wrmPluginPluginKey)}"
23
+ - ${chalk_1.default.bold(pomFile)} [${chalk_1.default.bold('project.groupId')}].[${chalk_1.default.bold('project.artifactId')}]: "${chalk_1.default.bold.red(pomPluginKey)}"`);
24
+ }
25
+ return true;
26
+ }
27
+ exports.checkWrmPluginHasValidConfig = checkWrmPluginHasValidConfig;
28
+ async function checkWrmScanFoldersIsValid(pomXml, pomFile, wrmWebpackPlugin) {
29
+ const { xmlDescriptors: wrmXmlDescriptorsFile } = wrmWebpackPlugin.options;
30
+ // Get Scan Folders value
31
+ const pomScanFolders = (0, pom_1.getAbsoluteScanFoldersConfig)(pomXml, pomFile);
32
+ // Check if wrmXmlDescriptorsFile is a child of Scan Folders directory
33
+ const isInFolder = (0, paths_1.isSubDirectory)(pomScanFolders, wrmXmlDescriptorsFile);
34
+ if (!isInFolder) {
35
+ const wrmXmlDescriptorOption = 'xmlDescriptors';
36
+ return new Error(`The configuration value of "${chalk_1.default.bold(pom_1.SCAN_FOLDERS_KEY)}" entry in ${chalk_1.default.green((0, paths_1.getRelativePath)(pomFile))} file doesn't overlap with the value of "${chalk_1.default.bold(wrmXmlDescriptorOption)}" in your webpack configuration:
37
+ - ${chalk_1.default.bold((0, paths_1.getRelativePath)(pomFile))} [${chalk_1.default.bold(pom_1.SCAN_FOLDERS_KEY)}]: ${chalk_1.default.bold.red((0, paths_1.getRelativePath)(pomScanFolders))}
38
+ - ${chalk_1.default.bold(exports.WRM_PLUGIN_NAME)} [${chalk_1.default.bold(wrmXmlDescriptorOption)}]: "${chalk_1.default.bold.red((0, paths_1.getRelativePath)(wrmXmlDescriptorsFile))}"`);
39
+ }
40
+ return true;
41
+ }
42
+ exports.checkWrmScanFoldersIsValid = checkWrmScanFoldersIsValid;
43
+ async function verifyGeneratedWebResources(pomFile, pomXml, preBundleTimestamp) {
44
+ const pomScanFolders = (0, pom_1.getAbsoluteScanFoldersConfig)(pomXml, pomFile);
45
+ const generatedXmlPaths = await (0, atlassianPluginXml_1.getGeneratedModuleDescriptorPaths)(pomFile, pomXml);
46
+ return verifyXmlFiles(generatedXmlPaths, preBundleTimestamp, pomScanFolders);
47
+ }
48
+ exports.verifyGeneratedWebResources = verifyGeneratedWebResources;
49
+ async function verifyXmlFiles(xmlPaths, preBundleTimestamp, pomScanFolders) {
50
+ // Check if any files were generated in the directory
51
+ if (!xmlPaths.length) {
52
+ return new Error(`No *.xml files were created by webpack under the "${chalk_1.default.green((0, paths_1.getRelativePath)(pomScanFolders))}" directory. Check if running the "webpack" CLI command shows you any errors or warnings that might cause the issue.`);
53
+ }
54
+ // Check if the XML files were generated during the webpack bundle
55
+ const fileStats = await Promise.all(xmlPaths.map((filePath) => fs_1.promises.stat(filePath)));
56
+ const filesAreNewer = fileStats.some((stats) => stats.mtimeMs > preBundleTimestamp);
57
+ if (!filesAreNewer) {
58
+ return new Error(`The *.xml files under the "${chalk_1.default.green((0, paths_1.getRelativePath)(pomScanFolders))}" directory are generated by webpack CLI but are coming from the older webpack bundle. Check if running the "webpack" CLI command shows you any errors or warnings that might cause the issue.`);
59
+ }
60
+ return true;
61
+ }
62
+ //# sourceMappingURL=webpackWrmPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackWrmPlugin.js","sourceRoot":"","sources":["../src/webpackWrmPlugin.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,2BAAoC;AAEpC,6DAAyE;AACzE,mCAA0D;AAC1D,+BAAqG;AAGxF,QAAA,eAAe,GAAG,WAAW,CAAC;AAC9B,QAAA,gBAAgB,GAAG,sCAAsC,CAAC;AAWhE,KAAK,UAAU,4BAA4B,CAChD,MAAc,EACd,gBAA8D;IAE9D,MAAM,YAAY,GAAG,IAAA,kCAA4B,EAAC,MAAM,CAAC,CAAC;IAE1D,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAEnE,IAAI,YAAY,KAAK,kBAAkB,EAAE;QACvC,MAAM,eAAe,GAA8D,WAAW,CAAC;QAE/F,MAAM,OAAO,GAAG,SAAS,CAAC;QAE1B,gEAAgE;QAChE,OAAO,IAAI,KAAK,CACd,qDAAqD,eAAK,CAAC,IAAI,CAC7D,uBAAe,CAChB,4DAA4D,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KAClF,eAAK,CAAC,IAAI,CAAC,uBAAe,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACpG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CAC9G,YAAY,CACb,GAAG,CACL,CAAC;KACH;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AA1BD,oEA0BC;AAEM,KAAK,UAAU,0BAA0B,CAC9C,MAAc,EACd,OAAe,EACf,gBAA8D;IAE9D,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAE3E,yBAAyB;IACzB,MAAM,cAAc,GAAG,IAAA,kCAA4B,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErE,sEAAsE;IACtE,MAAM,UAAU,GAAG,IAAA,sBAAc,EAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAEzE,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,sBAAsB,GAAmE,gBAAgB,CAAC;QAEhH,OAAO,IAAI,KAAK,CACd,+BAA+B,eAAK,CAAC,IAAI,CAAC,sBAAgB,CAAC,cAAc,eAAK,CAAC,KAAK,CAClF,IAAA,uBAAe,EAAC,OAAO,CAAC,CACzB,4CAA4C,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC;KAChF,eAAK,CAAC,IAAI,CAAC,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,sBAAgB,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,CACtF,IAAA,uBAAe,EAAC,cAAc,CAAC,CAChC;KACF,eAAK,CAAC,IAAI,CAAC,uBAAe,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,GAAG,CACpF,IAAA,uBAAe,EAAC,qBAAqB,CAAC,CACvC,GAAG,CACL,CAAC;KACH;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AA9BD,gEA8BC;AAEM,KAAK,UAAU,2BAA2B,CAC/C,OAAe,EACf,MAAc,EACd,kBAA0B;IAE1B,MAAM,cAAc,GAAG,IAAA,kCAA4B,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,MAAM,IAAA,sDAAiC,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnF,OAAO,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;AAC/E,CAAC;AATD,kEASC;AAED,KAAK,UAAU,cAAc,CAC3B,QAAkB,EAClB,kBAA0B,EAC1B,cAAsB;IAEtB,qDAAqD;IACrD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACpB,OAAO,IAAI,KAAK,CACd,qDAAqD,eAAK,CAAC,KAAK,CAC9D,IAAA,uBAAe,EAAC,cAAc,CAAC,CAChC,sHAAsH,CACxH,CAAC;KACH;IAED,kEAAkE;IAClE,MAAM,SAAS,GAAY,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAEpF,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,IAAI,KAAK,CACd,8BAA8B,eAAK,CAAC,KAAK,CACvC,IAAA,uBAAe,EAAC,cAAc,CAAC,CAChC,gMAAgM,CAClM,CAAC;KACH;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fetchWithTimeout = exports.FetchTimeoutError = void 0;
7
+ const abort_controller_1 = require("abort-controller");
8
+ const node_fetch_1 = __importDefault(require("node-fetch"));
9
+ class FetchTimeoutError extends Error {
10
+ }
11
+ exports.FetchTimeoutError = FetchTimeoutError;
12
+ async function fetchWithTimeout(timeout, url, options) {
13
+ const abortCtrl = new abort_controller_1.AbortController();
14
+ setTimeout(() => {
15
+ abortCtrl.abort();
16
+ }, timeout);
17
+ return (0, node_fetch_1.default)(url, {
18
+ ...options,
19
+ signal: abortCtrl.signal,
20
+ });
21
+ }
22
+ exports.fetchWithTimeout = fetchWithTimeout;
23
+ //# sourceMappingURL=fetchWithTimeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchWithTimeout.js","sourceRoot":"","sources":["../../src/wrm/fetchWithTimeout.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAmD;AAEnD,4DAA+B;AAE/B,MAAa,iBAAkB,SAAQ,KAAK;CAAG;AAA/C,8CAA+C;AAExC,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAAgB,EAAE,OAAqB;IAC7F,MAAM,SAAS,GAAG,IAAI,kCAAe,EAAE,CAAC;IAExC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,EAAE,OAAO,CAAC,CAAC;IAEZ,OAAO,IAAA,oBAAK,EAAC,GAAG,EAAE;QAChB,GAAG,OAAO;QACV,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAXD,4CAWC"}