dotcom-tool-kit 3.1.7 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from 'winston';
2
+ export declare const shouldDisableNativeFetch: () => boolean;
2
3
  export declare function runTasks(logger: Logger, hooks: string[], files?: string[]): Promise<void>;
3
4
  export declare function listPlugins(logger: Logger): Promise<void>;
4
5
  export { default as showHelp } from './help';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AASrC,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E/F;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D;AAED,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAWrC,eAAO,MAAM,wBAAwB,QAAO,OAY3C,CAAA;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF/F;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D;AAED,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,WAAW,CAAA"}
package/lib/index.js CHANGED
@@ -3,12 +3,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.installHooks = exports.showHelp = exports.listPlugins = exports.runTasks = void 0;
6
+ exports.installHooks = exports.showHelp = exports.listPlugins = exports.runTasks = exports.shouldDisableNativeFetch = void 0;
7
7
  const error_1 = require("@dotcom-tool-kit/error");
8
8
  const config_1 = require("./config");
9
9
  const options_1 = require("@dotcom-tool-kit/options");
10
10
  const logger_1 = require("@dotcom-tool-kit/logger");
11
11
  const messages_1 = require("./messages");
12
+ // function that plugins can check if they need to implement their own logic to
13
+ // disable Node 18's native fetch
14
+ const shouldDisableNativeFetch = () => {
15
+ // disable Node 18's native fetch if the Node runtime supports it (older
16
+ // runtimes don't support the flag, implying they also don't use native
17
+ // fetch) and the user hasn't opted out of the behaviour
18
+ return (
19
+ /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion --
20
+ * the root plugin has default options and it always exists so is always
21
+ * defined
22
+ **/
23
+ !(0, options_1.getOptions)('app root').allowNativeFetch &&
24
+ process.allowedNodeEnvironmentFlags.has('--no-experimental-fetch'));
25
+ };
26
+ exports.shouldDisableNativeFetch = shouldDisableNativeFetch;
12
27
  async function runTasks(logger, hooks, files) {
13
28
  const config = await (0, config_1.loadConfig)(logger);
14
29
  const availableHooks = Object.keys(config.hooks)
@@ -30,6 +45,9 @@ ${availableHooks}`;
30
45
  }
31
46
  }
32
47
  await (0, config_1.checkInstall)(config);
48
+ if ((0, exports.shouldDisableNativeFetch)()) {
49
+ process.execArgv.push('--no-experimental-fetch');
50
+ }
33
51
  for (const hook of hooks) {
34
52
  const errors = [];
35
53
  if (!config.hookTasks[hook]) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,MAAM,EACN,YAAY,EAIZ,SAAS,EACV,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAiB,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAmBvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAgDvE;AAoBD,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CA4D5B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAsI9F"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,MAAM,EACN,YAAY,EAIZ,SAAS,EACV,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAiB,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAmBvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAgDvE;AAoBD,wBAAsB,UAAU,CAC9B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CA8D5B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyI9F"}
package/lib/plugin.js CHANGED
@@ -105,6 +105,8 @@ async function loadPlugin(id, config, logger, parent) {
105
105
  const pluginModulePromise = isAppRoot
106
106
  ? Promise.resolve({ valid: true, value: undefined })
107
107
  : importPlugin(pluginRoot);
108
+ // ESlint disable explanation: erroring due to a possible race condition but is a false positive since the plugin variable isn't from another scope and can't be written to concurrently.
109
+ // eslint-disable-next-line require-atomic-updates
108
110
  plugin.value.rcFile = await rcFilePromise;
109
111
  // start loading child plugins in the background
110
112
  const childrenPromise = Promise.all(plugin.value.rcFile.plugins.map((child) => loadPlugin(child, config, logger, plugin.value)));
@@ -212,11 +214,14 @@ function resolvePlugin(plugin, config, logger) {
212
214
  // merge options from this plugin's config with any options we've collected already
213
215
  // TODO this is almost the exact same code as for hooks, refactor
214
216
  for (const [id, configOptions] of Object.entries(plugin.rcFile.options)) {
215
- const existingOptions = config.options[id];
217
+ // users can specify root options with the dotcom-tool-kit key to mirror
218
+ // the name of the root npm package
219
+ const pluginId = id === 'dotcom-tool-kit' ? 'app root' : id;
220
+ const existingOptions = config.options[pluginId];
216
221
  const pluginOptions = {
217
222
  options: configOptions,
218
223
  plugin,
219
- forPlugin: config.plugins[id]
224
+ forPlugin: config.plugins[pluginId]
220
225
  };
221
226
  if (existingOptions) {
222
227
  const existingFromDescendent = isDescendent(plugin, existingOptions.plugin);
@@ -229,17 +234,17 @@ function resolvePlugin(plugin, config, logger) {
229
234
  plugin,
230
235
  conflicting: conflicting.concat(pluginOptions)
231
236
  };
232
- config.options[id] = conflict;
237
+ config.options[pluginId] = conflict;
233
238
  }
234
239
  else {
235
240
  // if we're here, any existing options are from a child plugin,
236
241
  // so merge in overrides from the parent
237
- config.options[id] = { ...existingOptions, ...pluginOptions };
242
+ config.options[pluginId] = { ...existingOptions, ...pluginOptions };
238
243
  }
239
244
  }
240
245
  else {
241
246
  // this options key might not have been set yet, in which case use the new one
242
- config.options[id] = pluginOptions;
247
+ config.options[pluginId] = pluginOptions;
243
248
  }
244
249
  }
245
250
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotcom-tool-kit",
3
- "version": "3.1.7",
3
+ "version": "3.2.1",
4
4
  "description": "modern, maintainable, modular developer tooling for FT.com projects",
5
5
  "author": "FT.com Platforms Team <platforms-team.customer-products@ft.com>",
6
6
  "license": "MIT",
@@ -20,17 +20,17 @@
20
20
  "test": "cd ../../ ; npx jest --silent --projects core/cli"
21
21
  },
22
22
  "devDependencies": {
23
- "@dotcom-tool-kit/babel": "^3.1.1",
24
- "@dotcom-tool-kit/backend-heroku-app": "^2.1.6",
25
- "@dotcom-tool-kit/circleci": "^5.3.3",
26
- "@dotcom-tool-kit/circleci-deploy": "^3.2.3",
27
- "@dotcom-tool-kit/eslint": "^3.1.1",
28
- "@dotcom-tool-kit/frontend-app": "^3.1.7",
29
- "@dotcom-tool-kit/heroku": "^3.2.1",
30
- "@dotcom-tool-kit/mocha": "^3.1.1",
31
- "@dotcom-tool-kit/n-test": "^3.2.1",
32
- "@dotcom-tool-kit/npm": "^3.1.1",
33
- "@dotcom-tool-kit/webpack": "^3.1.2",
23
+ "@dotcom-tool-kit/babel": "^3.1.3",
24
+ "@dotcom-tool-kit/backend-heroku-app": "^2.1.8",
25
+ "@dotcom-tool-kit/circleci": "^5.3.5",
26
+ "@dotcom-tool-kit/circleci-deploy": "^3.2.5",
27
+ "@dotcom-tool-kit/eslint": "^3.1.3",
28
+ "@dotcom-tool-kit/frontend-app": "^3.1.9",
29
+ "@dotcom-tool-kit/heroku": "^3.2.3",
30
+ "@dotcom-tool-kit/mocha": "^3.1.3",
31
+ "@dotcom-tool-kit/n-test": "^3.2.3",
32
+ "@dotcom-tool-kit/npm": "^3.1.3",
33
+ "@dotcom-tool-kit/webpack": "^3.1.4",
34
34
  "@jest/globals": "^27.4.6",
35
35
  "@types/lodash": "^4.14.185",
36
36
  "@types/node": "^16.18.23",
@@ -41,9 +41,9 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@dotcom-tool-kit/error": "^3.1.0",
44
- "@dotcom-tool-kit/logger": "^3.1.0",
45
- "@dotcom-tool-kit/options": "^3.1.1",
46
- "@dotcom-tool-kit/types": "^3.2.0",
44
+ "@dotcom-tool-kit/logger": "^3.1.1",
45
+ "@dotcom-tool-kit/options": "^3.1.3",
46
+ "@dotcom-tool-kit/types": "^3.3.1",
47
47
  "@dotcom-tool-kit/wait-for-ok": "^3.1.0",
48
48
  "cosmiconfig": "^7.0.0",
49
49
  "lodash": "^4.17.21",
package/readme.md ADDED
@@ -0,0 +1,13 @@
1
+ # dotcom-tool-kit
2
+
3
+ _(This README is for the core `dotcom-tool-kit` package that must be installed to use Tool Kit. You can find the documentation for the Tool Kit project itself at https://github.com/Financial-Times/dotcom-tool-kit/blob/main/readme.md.)_
4
+
5
+ The primary Tool Kit binary that will be invoked to handle all your hooks and tasks.
6
+
7
+ ## Options
8
+
9
+ There are some global options available that will affect all plugins. All are optional but you can override them with the `dotcom-tool-kit` key.
10
+
11
+ | Key | Description | Default value |
12
+ |-|-|-|
13
+ | `allowNativeFetch` | use Node's native fetch if supported | `false` |