dotcom-tool-kit 2.5.0 → 2.6.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/config.d.ts CHANGED
@@ -2,6 +2,7 @@ import type { Logger } from 'winston';
2
2
  import type { HookTask } from './hook';
3
3
  import { Conflict } from './conflict';
4
4
  import { TaskClass, Hook, Plugin, Validated } from '@dotcom-tool-kit/types';
5
+ import { Options as SchemaOptions } from '@dotcom-tool-kit/types/lib/schema';
5
6
  export interface PluginOptions {
6
7
  options: Record<string, unknown>;
7
8
  plugin: Plugin;
@@ -26,27 +27,31 @@ export interface RawConfig {
26
27
  [id: string]: Hook<unknown> | Conflict<Hook<unknown>>;
27
28
  };
28
29
  }
29
- export declare type ValidPluginsConfig = Omit<RawConfig, 'plugins'> & {
30
+ export type ValidPluginsConfig = Omit<RawConfig, 'plugins'> & {
30
31
  plugins: {
31
32
  [id: string]: Plugin;
32
33
  };
33
34
  };
34
- export interface ValidConfig extends ValidPluginsConfig {
35
+ export type ValidPluginOptions<Id extends keyof SchemaOptions> = Omit<PluginOptions, 'options'> & {
36
+ options: SchemaOptions[Id];
37
+ };
38
+ export type ValidOptions = {
39
+ [Id in keyof SchemaOptions]: ValidPluginOptions<Id>;
40
+ };
41
+ export type ValidConfig = Omit<ValidPluginsConfig, 'tasks' | 'hookTasks' | 'options' | 'hooks'> & {
35
42
  tasks: {
36
43
  [id: string]: TaskClass;
37
44
  };
38
45
  hookTasks: {
39
46
  [id: string]: HookTask;
40
47
  };
41
- options: {
42
- [id: string]: PluginOptions;
43
- };
48
+ options: ValidOptions;
44
49
  hooks: {
45
50
  [id: string]: Hook<unknown>;
46
51
  };
47
- }
52
+ };
48
53
  export declare const createConfig: () => RawConfig;
49
- export declare function validateConfig(config: ValidPluginsConfig): asserts config is ValidConfig;
54
+ export declare function validateConfig(config: ValidPluginsConfig, logger: Logger): ValidConfig;
50
55
  export declare function validatePlugins(config: RawConfig): Validated<ValidPluginsConfig>;
51
56
  export declare function checkInstall(config: ValidConfig): Promise<void>;
52
57
  export declare function loadConfig(logger: Logger, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAA+C,MAAM,YAAY,CAAA;AAElF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAgB,MAAM,EAAmB,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAY1G,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;KAAE,CAAA;IAC5C,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;KAAE,CAAA;IACxD,SAAS,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;IAC1D,OAAO,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,CAAA;KAAE,CAAA;IAC9E,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,CAAA;CACjE;AAED,oBAAY,kBAAkB,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IAC5D,OAAO,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CAClC,CAAA;AAED,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IAClC,SAAS,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAA;IACrC,OAAO,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAA;IACxC,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;KAAE,CAAA;CACvC;AAID,eAAO,MAAM,YAAY,QAAO,SAQ9B,CAAA;AAQF,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAuFxF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAKhF;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AAC/F,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/config.js CHANGED
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadConfig = exports.checkInstall = exports.validatePlugins = exports.validateConfig = exports.createConfig = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const path_1 = (0, tslib_1.__importDefault)(require("path"));
5
+ const path_1 = tslib_1.__importDefault(require("path"));
6
6
  const plugin_1 = require("./plugin");
7
7
  const conflict_1 = require("./conflict");
8
8
  const error_1 = require("@dotcom-tool-kit/error");
9
9
  const types_1 = require("@dotcom-tool-kit/types");
10
+ const schema_1 = require("@dotcom-tool-kit/types/lib/schema");
10
11
  const messages_1 = require("./messages");
11
12
  const coreRoot = path_1.default.resolve(__dirname, '../');
12
13
  const createConfig = () => ({
@@ -23,7 +24,9 @@ async function asyncFilter(items, predicate) {
23
24
  const results = await Promise.all(items.map(async (item) => ({ item, keep: await predicate(item) })));
24
25
  return results.filter(({ keep }) => keep).map(({ item }) => item);
25
26
  }
26
- function validateConfig(config) {
27
+ function validateConfig(config, logger) {
28
+ var _a;
29
+ const validConfig = config;
27
30
  const hookTaskConflicts = (0, conflict_1.findConflicts)(Object.values(config.hookTasks));
28
31
  const hookConflicts = (0, conflict_1.findConflicts)(Object.values(config.hooks));
29
32
  const taskConflicts = (0, conflict_1.findConflicts)(Object.values(config.tasks));
@@ -67,6 +70,45 @@ function validateConfig(config) {
67
70
  shouldThrow = true;
68
71
  error.details += (0, messages_1.formatUndefinedHookTasks)(undefinedHookTasks, Array.from(definedHookIds));
69
72
  }
73
+ const invalidOptions = [];
74
+ for (const [id, plugin] of Object.entries(config.plugins)) {
75
+ const pluginId = id;
76
+ const pluginOptions = config.options[pluginId];
77
+ if (pluginOptions && (0, conflict_1.isConflict)(pluginOptions)) {
78
+ continue;
79
+ }
80
+ const pluginSchema = schema_1.Schemas[pluginId];
81
+ if (!pluginSchema) {
82
+ logger.silly(`skipping validation of ${pluginId} plugin as no schema can be found`);
83
+ continue;
84
+ }
85
+ const result = pluginSchema.safeParse((_a = pluginOptions === null || pluginOptions === void 0 ? void 0 : pluginOptions.options) !== null && _a !== void 0 ? _a : {});
86
+ if (result.success) {
87
+ // Set up options entry for plugins that don't have options specified
88
+ // explicitly. They could still have default options that are set by zod.
89
+ if (!pluginOptions) {
90
+ // TypeScript struggles with this type as it sees one side as
91
+ // `Foo<a | b | c>` and the other as `Foo<a> | Foo<b> | Foo<c>` for
92
+ // some reason (something to do with the record indexing) and it can't
93
+ // unify them. But they are equivalent so let's force it with a cast.
94
+ config.options[pluginId] = {
95
+ options: result.data,
96
+ plugin: config.plugins['app root'],
97
+ forPlugin: plugin
98
+ }; // eslint-disable-line @typescript-eslint/no-explicit-any
99
+ }
100
+ else {
101
+ pluginOptions.options = result.data;
102
+ }
103
+ }
104
+ else {
105
+ invalidOptions.push([id, result.error]);
106
+ }
107
+ }
108
+ if (invalidOptions.length > 0) {
109
+ shouldThrow = true;
110
+ error.details += (0, messages_1.formatInvalidOptions)(invalidOptions);
111
+ }
70
112
  const unusedOptions = Object.entries(config.options)
71
113
  .filter(([, option]) => option && !(0, conflict_1.isConflict)(option) && !option.forPlugin && option.plugin.root === process.cwd())
72
114
  .map(([id]) => id);
@@ -87,6 +129,7 @@ function validateConfig(config) {
87
129
  if (shouldThrow) {
88
130
  throw error;
89
131
  }
132
+ return validConfig;
90
133
  }
91
134
  exports.validateConfig = validateConfig;
92
135
  function validatePlugins(config) {
@@ -125,9 +168,6 @@ async function loadConfig(logger, { validate = true } = {}) {
125
168
  const validPluginConfig = validatedPluginConfig.value;
126
169
  // collate root plugin and descendent hooks, options etc into config
127
170
  (0, plugin_1.resolvePlugin)(validRootPlugin, validPluginConfig, logger);
128
- if (validate) {
129
- validateConfig(validPluginConfig);
130
- }
131
- return config;
171
+ return validate ? validateConfig(validPluginConfig, logger) : config;
132
172
  }
133
173
  exports.loadConfig = loadConfig;
package/lib/install.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const error_1 = require("@dotcom-tool-kit/error");
5
5
  const options_1 = require("@dotcom-tool-kit/options");
6
- const groupBy_1 = (0, tslib_1.__importDefault)(require("lodash/groupBy"));
6
+ const groupBy_1 = tslib_1.__importDefault(require("lodash/groupBy"));
7
7
  const config_1 = require("./config");
8
8
  const postInstall_1 = require("./postInstall");
9
9
  // implementation of the Array.some method that supports asynchronous predicates
package/lib/messages.d.ts CHANGED
@@ -2,14 +2,17 @@ import type { PluginOptions } from './config';
2
2
  import type { Conflict } from './conflict';
3
3
  import type { HookTask } from './hook';
4
4
  import type { Plugin, Hook, TaskClass } from '@dotcom-tool-kit/types';
5
+ import type { z } from 'zod';
5
6
  export declare const formatTaskConflicts: (conflicts: Conflict<TaskClass>[]) => string;
6
7
  export declare const formatHookConflicts: (conflicts: Conflict<Hook<unknown>>[]) => string;
7
8
  export declare const formatHookTaskConflicts: (conflicts: Conflict<HookTask>[]) => string;
8
9
  export declare const formatOptionConflicts: (conflicts: Conflict<PluginOptions>[]) => string;
9
10
  export declare const formatUndefinedHookTasks: (undefinedHooks: HookTask[], definedHooks: string[]) => string;
11
+ export type InvalidOption = [string, z.ZodError];
12
+ export declare const formatInvalidOptions: (invalidOptions: InvalidOption[]) => string;
10
13
  export declare const formatUnusedOptions: (unusedOptions: string[], definedPlugins: string[]) => string;
11
14
  export declare const formatUninstalledHooks: (uninstalledHooks: Hook<unknown>[]) => string;
12
- declare type Missing = {
15
+ type Missing = {
13
16
  hook: HookTask;
14
17
  tasks: string[];
15
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AASrE,eAAO,MAAM,mBAAmB,cAAe,SAAS,SAAS,CAAC,EAAE,KAAG,MAKE,CAAA;AASzE,eAAO,MAAM,mBAAmB,cAAe,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE,KAAG,MAKF,CAAA;AAazE,eAAO,MAAM,uBAAuB,cAAe,SAAS,QAAQ,CAAC,EAAE,KAAG,MAQzE,CAAA;AAOD,eAAO,MAAM,qBAAqB,cAAe,SAAS,aAAa,CAAC,EAAE,KAAG,MAU5E,CAAA;AAMD,eAAO,MAAM,wBAAwB,mBACnB,QAAQ,EAAE,gBACZ,MAAM,EAAE,KACrB,MAWF,CAAA;AAED,eAAO,MAAM,mBAAmB,kBACf,MAAM,EAAE,kBACP,MAAM,EAAE,KACvB,MAWF,CAAA;AAED,eAAO,MAAM,sBAAsB,qBACf,KAAK,OAAO,CAAC,EAAE,KAChC,MAKF,CAAA;AAED,aAAK,OAAO,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAOlD,eAAO,MAAM,kBAAkB,iBACf,OAAO,EAAE,SAChB,MAAM,EAAE,KACd,MAOF,CAAA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAezD"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAU5B,eAAO,MAAM,mBAAmB,cAAe,SAAS,SAAS,CAAC,EAAE,KAAG,MAKE,CAAA;AASzE,eAAO,MAAM,mBAAmB,cAAe,SAAS,KAAK,OAAO,CAAC,CAAC,EAAE,KAAG,MAKF,CAAA;AAazE,eAAO,MAAM,uBAAuB,cAAe,SAAS,QAAQ,CAAC,EAAE,KAAG,MAQzE,CAAA;AAOD,eAAO,MAAM,qBAAqB,cAAe,SAAS,aAAa,CAAC,EAAE,KAAG,MAU5E,CAAA;AAMD,eAAO,MAAM,wBAAwB,mBACnB,QAAQ,EAAE,gBACZ,MAAM,EAAE,KACrB,MAWF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEhD,eAAO,MAAM,oBAAoB,mBACf,aAAa,EAAE,KAC9B,MAM0J,CAAA;AAE7J,eAAO,MAAM,mBAAmB,kBACf,MAAM,EAAE,kBACP,MAAM,EAAE,KACvB,MAWF,CAAA;AAED,eAAO,MAAM,sBAAsB,qBACf,KAAK,OAAO,CAAC,EAAE,KAChC,MAKF,CAAA;AAED,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAOlD,eAAO,MAAM,kBAAkB,iBACf,OAAO,EAAE,SAChB,MAAM,EAAE,KACd,MAOF,CAAA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAezD"}
package/lib/messages.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatPluginTree = exports.formatMissingTasks = exports.formatUninstalledHooks = exports.formatUnusedOptions = exports.formatUndefinedHookTasks = exports.formatOptionConflicts = exports.formatHookTaskConflicts = exports.formatHookConflicts = exports.formatTaskConflicts = void 0;
3
+ exports.formatPluginTree = exports.formatMissingTasks = exports.formatUninstalledHooks = exports.formatUnusedOptions = exports.formatInvalidOptions = exports.formatUndefinedHookTasks = exports.formatOptionConflicts = exports.formatHookTaskConflicts = exports.formatHookConflicts = exports.formatTaskConflicts = void 0;
4
4
  const logger_1 = require("@dotcom-tool-kit/logger");
5
+ const zod_validation_error_1 = require("zod-validation-error");
5
6
  const formatTaskConflict = (conflict) => `- ${logger_1.styles.task(conflict.conflicting[0].id || 'unknown task')} ${logger_1.styles.dim('from plugins')} ${conflict.conflicting
6
7
  .map((task) => logger_1.styles.plugin(task.plugin ? task.plugin.id : 'unknown plugin'))
7
8
  .join(logger_1.styles.dim(', '))}`;
@@ -52,6 +53,14 @@ ${definedHooks.length > 0
52
53
  : `There are no hooks defined by this app's plugins. You probably need to install some plugins to define hooks.`}.
53
54
  `;
54
55
  exports.formatUndefinedHookTasks = formatUndefinedHookTasks;
56
+ const formatInvalidOptions = (invalidOptions) => `Options are defined in your Tool Kit configuration that are the wrong types:
57
+
58
+ ${invalidOptions
59
+ .map(([plugin, error]) => (0, zod_validation_error_1.fromZodError)(error, { prefix: `- ${logger_1.styles.plugin(plugin)} has the issue(s)` }).message)
60
+ .join('\n')}
61
+
62
+ Please update the options so that they are the expected types. You can refer to the README for the plugin for examples and descriptions of the options used.`;
63
+ exports.formatInvalidOptions = formatInvalidOptions;
55
64
  const formatUnusedOptions = (unusedOptions, definedPlugins) => `Options are defined in your Tool Kit configuration for plugins that don't exist:
56
65
 
57
66
  ${unusedOptions.map((optionName) => `- ${logger_1.styles.plugin(optionName)}`).join('\n')}
package/lib/plugin.js CHANGED
@@ -4,8 +4,8 @@ exports.resolvePlugin = exports.loadPlugin = exports.validatePlugin = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const logger_1 = require("@dotcom-tool-kit/logger");
6
6
  const types_1 = require("@dotcom-tool-kit/types");
7
- const isPlainObject_1 = (0, tslib_1.__importDefault)(require("lodash/isPlainObject"));
8
- const resolve_from_1 = (0, tslib_1.__importDefault)(require("resolve-from"));
7
+ const isPlainObject_1 = tslib_1.__importDefault(require("lodash/isPlainObject"));
8
+ const resolve_from_1 = tslib_1.__importDefault(require("resolve-from"));
9
9
  const conflict_1 = require("./conflict");
10
10
  const rc_file_1 = require("./rc-file");
11
11
  function isDescendent(possibleAncestor, possibleDescendent) {
@@ -60,9 +60,10 @@ function validatePlugin(plugin) {
60
60
  }
61
61
  exports.validatePlugin = validatePlugin;
62
62
  async function importPlugin(pluginPath) {
63
+ var _a;
63
64
  try {
64
65
  // pluginPath is an absolute resolved path to a plugin module as found from its parent
65
- const pluginModule = (await Promise.resolve().then(() => (0, tslib_1.__importStar)(require(pluginPath))));
66
+ const pluginModule = (await (_a = pluginPath, Promise.resolve().then(() => tslib_1.__importStar(require(_a)))));
66
67
  return validatePlugin(pluginModule);
67
68
  }
68
69
  catch (e) {
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.postInstall = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const path_1 = (0, tslib_1.__importDefault)(require("path"));
5
+ const path_1 = tslib_1.__importDefault(require("path"));
6
6
  const fs_1 = require("fs");
7
7
  const npm_1 = require("@dotcom-tool-kit/types/lib/npm");
8
- const YAML = (0, tslib_1.__importStar)(require("yaml"));
9
- const merge_1 = (0, tslib_1.__importDefault)(require("lodash/merge"));
8
+ const YAML = tslib_1.__importStar(require("yaml"));
9
+ const merge_1 = tslib_1.__importDefault(require("lodash/merge"));
10
10
  const circleci_1 = require("@dotcom-tool-kit/types/lib/circleci");
11
11
  /**
12
12
  * This step adds the tags only filter to rest of the jobs in the workflow if there is a job that contains the semverRegex.
package/lib/rc-file.js CHANGED
@@ -4,7 +4,7 @@ exports.loadToolKitRC = exports.explorer = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const logger_1 = require("@dotcom-tool-kit/logger");
6
6
  const cosmiconfig_1 = require("cosmiconfig");
7
- const path = (0, tslib_1.__importStar)(require("path"));
7
+ const path = tslib_1.__importStar(require("path"));
8
8
  exports.explorer = (0, cosmiconfig_1.cosmiconfig)('toolkit', { ignoreEmptySearchPlaces: false });
9
9
  const emptyConfig = { plugins: [], hooks: {}, options: {} };
10
10
  let rootConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotcom-tool-kit",
3
- "version": "2.5.0",
3
+ "version": "2.6.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,20 +20,20 @@
20
20
  "test": "cd ../../ ; npx jest --silent --projects core/cli"
21
21
  },
22
22
  "devDependencies": {
23
+ "@dotcom-tool-kit/babel": "^2.0.14",
24
+ "@dotcom-tool-kit/backend-heroku-app": "^1.0.2",
25
+ "@dotcom-tool-kit/circleci": "^4.0.1",
26
+ "@dotcom-tool-kit/circleci-deploy": "^2.0.1",
27
+ "@dotcom-tool-kit/eslint": "^2.3.1",
28
+ "@dotcom-tool-kit/frontend-app": "^2.2.2",
29
+ "@dotcom-tool-kit/heroku": "^2.1.5",
30
+ "@dotcom-tool-kit/mocha": "^2.3.1",
31
+ "@dotcom-tool-kit/n-test": "^2.1.9",
32
+ "@dotcom-tool-kit/npm": "^2.0.15",
33
+ "@dotcom-tool-kit/webpack": "^2.1.13",
23
34
  "@jest/globals": "^27.4.6",
24
35
  "@types/lodash": "^4.14.185",
25
36
  "@types/node": "^12.20.24",
26
- "@dotcom-tool-kit/backend-heroku-app": "^1.0.0",
27
- "@dotcom-tool-kit/heroku": "^2.1.3",
28
- "@dotcom-tool-kit/webpack": "^2.1.11",
29
- "@dotcom-tool-kit/babel": "^2.0.12",
30
- "@dotcom-tool-kit/circleci": "^3.0.2",
31
- "@dotcom-tool-kit/npm": "^2.0.13",
32
- "@dotcom-tool-kit/circleci-deploy": "^1.0.0",
33
- "@dotcom-tool-kit/frontend-app": "^2.2.0",
34
- "@dotcom-tool-kit/eslint": "^2.2.5",
35
- "@dotcom-tool-kit/mocha": "^2.2.1",
36
- "@dotcom-tool-kit/n-test": "^2.1.7",
37
37
  "chai": "^4.3.4",
38
38
  "globby": "^10.0.2",
39
39
  "ts-node": "^8.10.2",
@@ -41,16 +41,17 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@dotcom-tool-kit/error": "^2.0.1",
44
- "@dotcom-tool-kit/logger": "^2.2.0",
45
- "@dotcom-tool-kit/options": "^2.0.12",
46
- "@dotcom-tool-kit/types": "^2.8.0",
44
+ "@dotcom-tool-kit/logger": "^2.2.1",
45
+ "@dotcom-tool-kit/options": "^2.0.14",
46
+ "@dotcom-tool-kit/types": "^2.9.1",
47
47
  "@dotcom-tool-kit/wait-for-ok": "^2.0.1",
48
48
  "cosmiconfig": "^7.0.0",
49
49
  "lodash": "^4.17.21",
50
50
  "minimist": "^1.2.5",
51
51
  "resolve-from": "^5.0.0",
52
52
  "tslib": "^2.3.1",
53
- "yaml": "^1.10.2"
53
+ "yaml": "^1.10.2",
54
+ "zod-validation-error": "^0.3.0"
54
55
  },
55
56
  "engines": {
56
57
  "node": ">=8.0.0"