@graphql-inspector/diff-command 2.8.0 → 3.0.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/index.d.ts CHANGED
@@ -5,8 +5,9 @@ export declare function handler(input: {
5
5
  oldSchema: GraphQLSchema;
6
6
  newSchema: GraphQLSchema;
7
7
  onComplete?: string;
8
+ onUsage?: string;
8
9
  rules?: Array<string | number>;
9
- }): void;
10
+ }): Promise<void>;
10
11
  declare const _default: CommandFactory<{}, {
11
12
  oldSchema: string;
12
13
  newSchema: string;
@@ -9,40 +9,44 @@ const logger = require('@graphql-inspector/logger');
9
9
  const fs = require('fs');
10
10
 
11
11
  function handler(input) {
12
- const onComplete = input.onComplete
13
- ? resolveCompletionHandler(input.onComplete)
14
- : failOnBreakingChanges;
15
- const rules = input.rules
16
- ? input.rules
17
- .filter(isString)
18
- .map((name) => {
19
- const rule = resolveRule(name);
20
- if (!rule) {
21
- throw new Error(`\Rule '${name}' does not exist!\n`);
22
- }
23
- return rule;
24
- })
25
- .filter((f) => f)
26
- : [];
27
- const changes = core.diff(input.oldSchema, input.newSchema, rules);
28
- if (changes.length === 0) {
29
- logger.Logger.success('No changes detected');
30
- return;
31
- }
32
- logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
33
- const breakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Breaking);
34
- const dangerousChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Dangerous);
35
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.NonBreaking);
36
- if (breakingChanges.length) {
37
- reportBreakingChanges(breakingChanges);
38
- }
39
- if (dangerousChanges.length) {
40
- reportDangerousChanges(dangerousChanges);
41
- }
42
- if (nonBreakingChanges.length) {
43
- reportNonBreakingChanges(nonBreakingChanges);
44
- }
45
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
12
+ return tslib.__awaiter(this, void 0, void 0, function* () {
13
+ const onComplete = input.onComplete
14
+ ? resolveCompletionHandler(input.onComplete)
15
+ : failOnBreakingChanges;
16
+ const rules = input.rules
17
+ ? input.rules
18
+ .filter(isString)
19
+ .map((name) => {
20
+ const rule = resolveRule(name);
21
+ if (!rule) {
22
+ throw new Error(`\Rule '${name}' does not exist!\n`);
23
+ }
24
+ return rule;
25
+ })
26
+ .filter((f) => f)
27
+ : [];
28
+ const changes = yield core.diff(input.oldSchema, input.newSchema, rules, {
29
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
30
+ });
31
+ if (changes.length === 0) {
32
+ logger.Logger.success('No changes detected');
33
+ return;
34
+ }
35
+ logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
36
+ const breakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Breaking);
37
+ const dangerousChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Dangerous);
38
+ const nonBreakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.NonBreaking);
39
+ if (breakingChanges.length) {
40
+ reportBreakingChanges(breakingChanges);
41
+ }
42
+ if (dangerousChanges.length) {
43
+ reportDangerousChanges(dangerousChanges);
44
+ }
45
+ if (nonBreakingChanges.length) {
46
+ reportNonBreakingChanges(nonBreakingChanges);
47
+ }
48
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
49
+ });
46
50
  }
47
51
  const index = commands.createCommand((api) => {
48
52
  const { loaders } = api;
@@ -70,6 +74,10 @@ const index = commands.createCommand((api) => {
70
74
  describe: 'Handle Completion',
71
75
  type: 'string',
72
76
  },
77
+ onUsage: {
78
+ describe: 'Checks usage of schema',
79
+ type: 'string',
80
+ },
73
81
  });
74
82
  },
75
83
  handler(args) {
@@ -85,16 +93,16 @@ const index = commands.createCommand((api) => {
85
93
  const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
86
94
  const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
87
95
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
88
- oldSchemaHeaders,
96
+ headers: oldSchemaHeaders,
89
97
  token,
90
98
  method,
91
99
  }, apolloFederation, aws);
92
100
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
93
- newSchemaHeaders,
101
+ headers: newSchemaHeaders,
94
102
  token,
95
103
  method,
96
104
  }, apolloFederation, aws);
97
- handler({
105
+ yield handler({
98
106
  oldSchema,
99
107
  newSchema,
100
108
  rules: args.rule,
@@ -161,6 +169,17 @@ function resolveCompletionHandler(name) {
161
169
  const mod = require(filepath);
162
170
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
163
171
  }
172
+ function resolveUsageHandler(name) {
173
+ const filepath = commands.ensureAbsolute(name);
174
+ try {
175
+ require.resolve(filepath);
176
+ }
177
+ catch (error) {
178
+ throw new Error(`UsageHandler '${name}' does not exist!`);
179
+ }
180
+ const mod = require(filepath);
181
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
182
+ }
164
183
  function failOnBreakingChanges({ breakingChanges }) {
165
184
  const breakingCount = breakingChanges.length;
166
185
  if (breakingCount) {
@@ -177,4 +196,3 @@ function isString(val) {
177
196
 
178
197
  exports.default = index;
179
198
  exports.handler = handler;
180
- //# sourceMappingURL=index.cjs.js.map
@@ -5,40 +5,44 @@ import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
5
5
  import { existsSync } from 'fs';
6
6
 
7
7
  function handler(input) {
8
- const onComplete = input.onComplete
9
- ? resolveCompletionHandler(input.onComplete)
10
- : failOnBreakingChanges;
11
- const rules = input.rules
12
- ? input.rules
13
- .filter(isString)
14
- .map((name) => {
15
- const rule = resolveRule(name);
16
- if (!rule) {
17
- throw new Error(`\Rule '${name}' does not exist!\n`);
18
- }
19
- return rule;
20
- })
21
- .filter((f) => f)
22
- : [];
23
- const changes = diff(input.oldSchema, input.newSchema, rules);
24
- if (changes.length === 0) {
25
- Logger.success('No changes detected');
26
- return;
27
- }
28
- Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
29
- const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);
30
- const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);
31
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);
32
- if (breakingChanges.length) {
33
- reportBreakingChanges(breakingChanges);
34
- }
35
- if (dangerousChanges.length) {
36
- reportDangerousChanges(dangerousChanges);
37
- }
38
- if (nonBreakingChanges.length) {
39
- reportNonBreakingChanges(nonBreakingChanges);
40
- }
41
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
8
+ return __awaiter(this, void 0, void 0, function* () {
9
+ const onComplete = input.onComplete
10
+ ? resolveCompletionHandler(input.onComplete)
11
+ : failOnBreakingChanges;
12
+ const rules = input.rules
13
+ ? input.rules
14
+ .filter(isString)
15
+ .map((name) => {
16
+ const rule = resolveRule(name);
17
+ if (!rule) {
18
+ throw new Error(`\Rule '${name}' does not exist!\n`);
19
+ }
20
+ return rule;
21
+ })
22
+ .filter((f) => f)
23
+ : [];
24
+ const changes = yield diff(input.oldSchema, input.newSchema, rules, {
25
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
26
+ });
27
+ if (changes.length === 0) {
28
+ Logger.success('No changes detected');
29
+ return;
30
+ }
31
+ Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
32
+ const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);
33
+ const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);
34
+ const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);
35
+ if (breakingChanges.length) {
36
+ reportBreakingChanges(breakingChanges);
37
+ }
38
+ if (dangerousChanges.length) {
39
+ reportDangerousChanges(dangerousChanges);
40
+ }
41
+ if (nonBreakingChanges.length) {
42
+ reportNonBreakingChanges(nonBreakingChanges);
43
+ }
44
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
45
+ });
42
46
  }
43
47
  const index = createCommand((api) => {
44
48
  const { loaders } = api;
@@ -66,6 +70,10 @@ const index = createCommand((api) => {
66
70
  describe: 'Handle Completion',
67
71
  type: 'string',
68
72
  },
73
+ onUsage: {
74
+ describe: 'Checks usage of schema',
75
+ type: 'string',
76
+ },
69
77
  });
70
78
  },
71
79
  handler(args) {
@@ -81,16 +89,16 @@ const index = createCommand((api) => {
81
89
  const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
82
90
  const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
83
91
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
84
- oldSchemaHeaders,
92
+ headers: oldSchemaHeaders,
85
93
  token,
86
94
  method,
87
95
  }, apolloFederation, aws);
88
96
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
89
- newSchemaHeaders,
97
+ headers: newSchemaHeaders,
90
98
  token,
91
99
  method,
92
100
  }, apolloFederation, aws);
93
- handler({
101
+ yield handler({
94
102
  oldSchema,
95
103
  newSchema,
96
104
  rules: args.rule,
@@ -157,6 +165,17 @@ function resolveCompletionHandler(name) {
157
165
  const mod = require(filepath);
158
166
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
159
167
  }
168
+ function resolveUsageHandler(name) {
169
+ const filepath = ensureAbsolute(name);
170
+ try {
171
+ require.resolve(filepath);
172
+ }
173
+ catch (error) {
174
+ throw new Error(`UsageHandler '${name}' does not exist!`);
175
+ }
176
+ const mod = require(filepath);
177
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
178
+ }
160
179
  function failOnBreakingChanges({ breakingChanges }) {
161
180
  const breakingCount = breakingChanges.length;
162
181
  if (breakingCount) {
@@ -173,4 +192,3 @@ function isString(val) {
173
192
 
174
193
  export default index;
175
194
  export { handler };
176
- //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@graphql-inspector/diff-command",
3
- "version": "2.8.0",
3
+ "version": "3.0.1",
4
4
  "description": "Compare GraphQL Schemas",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
7
  "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@graphql-inspector/commands": "2.8.0",
11
- "@graphql-inspector/core": "2.8.0",
12
- "@graphql-inspector/logger": "2.8.0",
10
+ "@graphql-inspector/commands": "3.0.1",
11
+ "@graphql-inspector/core": "3.0.1",
12
+ "@graphql-inspector/logger": "3.0.1",
13
13
  "tslib": "^2.0.0"
14
14
  },
15
15
  "repository": {
@@ -29,10 +29,20 @@
29
29
  "url": "https://github.com/kamilkisiela"
30
30
  },
31
31
  "license": "MIT",
32
- "main": "index.cjs.js",
33
- "module": "index.esm.js",
32
+ "main": "index.js",
33
+ "module": "index.mjs",
34
34
  "typings": "index.d.ts",
35
35
  "typescript": {
36
36
  "definition": "index.d.ts"
37
+ },
38
+ "exports": {
39
+ ".": {
40
+ "require": "./index.js",
41
+ "import": "./index.mjs"
42
+ },
43
+ "./*": {
44
+ "require": "./*.js",
45
+ "import": "./*.mjs"
46
+ }
37
47
  }
38
48
  }
package/index.cjs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../dist/commands/diff/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, ensureAbsolute, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { CriticalityLevel, diff as diffSchema, DiffRule, } from '@graphql-inspector/core';\nimport { bolderize, Logger, symbols } from '@graphql-inspector/logger';\nimport { existsSync } from 'fs';\nexport function handler(input) {\n const onComplete = input.onComplete\n ? resolveCompletionHandler(input.onComplete)\n : failOnBreakingChanges;\n const rules = input.rules\n ? input.rules\n .filter(isString)\n .map((name) => {\n const rule = resolveRule(name);\n if (!rule) {\n throw new Error(`\\Rule '${name}' does not exist!\\n`);\n }\n return rule;\n })\n .filter((f) => f)\n : [];\n const changes = diffSchema(input.oldSchema, input.newSchema, rules);\n if (changes.length === 0) {\n Logger.success('No changes detected');\n return;\n }\n Logger.log(`\\nDetected the following changes (${changes.length}) between schemas:\\n`);\n const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);\n const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);\n const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);\n if (breakingChanges.length) {\n reportBreakingChanges(breakingChanges);\n }\n if (dangerousChanges.length) {\n reportDangerousChanges(dangerousChanges);\n }\n if (nonBreakingChanges.length) {\n reportNonBreakingChanges(nonBreakingChanges);\n }\n onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });\n}\nexport default createCommand((api) => {\n const { loaders } = api;\n return {\n command: 'diff <oldSchema> <newSchema>',\n describe: 'Compare two GraphQL Schemas',\n builder(yargs) {\n return yargs\n .positional('oldSchema', {\n describe: 'Point to an old schema',\n type: 'string',\n demandOption: true,\n })\n .positional('newSchema', {\n describe: 'Point to a new schema',\n type: 'string',\n demandOption: true,\n })\n .options({\n rule: {\n describe: 'Add rules',\n array: true,\n },\n onComplete: {\n describe: 'Handle Completion',\n type: 'string',\n },\n });\n },\n handler(args) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const apolloFederation = args.federation || false;\n const aws = args.aws || false;\n const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';\n const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);\n const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));\n const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n oldSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n newSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n handler({\n oldSchema,\n newSchema,\n rules: args.rule,\n onComplete: args.onComplete,\n });\n }\n catch (error) {\n Logger.error(error);\n throw error;\n }\n });\n },\n };\n});\nfunction sortChanges(changes) {\n return changes.slice().sort((a, b) => {\n const aPath = a.path || '';\n const bPath = b.path || '';\n if (aPath > bPath) {\n return 1;\n }\n if (bPath > aPath) {\n return -1;\n }\n return 0;\n });\n}\nfunction reportBreakingChanges(changes) {\n const label = symbols.error;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportDangerousChanges(changes) {\n const label = symbols.warning;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportNonBreakingChanges(changes) {\n const label = symbols.success;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction resolveRule(name) {\n const filepath = ensureAbsolute(name);\n if (existsSync(filepath)) {\n return require(filepath);\n }\n return DiffRule[name];\n}\nfunction resolveCompletionHandler(name) {\n const filepath = ensureAbsolute(name);\n try {\n require.resolve(filepath);\n }\n catch (error) {\n throw new Error(`CompletionHandler '${name}' does not exist!`);\n }\n const mod = require(filepath);\n return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;\n}\nfunction failOnBreakingChanges({ breakingChanges }) {\n const breakingCount = breakingChanges.length;\n if (breakingCount) {\n Logger.error(`Detected ${breakingCount} breaking change${breakingCount > 1 ? 's' : ''}`);\n process.exit(1);\n }\n else {\n Logger.success('No breaking changes detected');\n }\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\n//# sourceMappingURL=index.js.map"],"names":["diffSchema","Logger","CriticalityLevel","createCommand","__awaiter","parseGlobalArgs","symbols","bolderize","ensureAbsolute","existsSync","DiffRule"],"mappings":"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"}
package/index.esm.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../dist/commands/diff/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, ensureAbsolute, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { CriticalityLevel, diff as diffSchema, DiffRule, } from '@graphql-inspector/core';\nimport { bolderize, Logger, symbols } from '@graphql-inspector/logger';\nimport { existsSync } from 'fs';\nexport function handler(input) {\n const onComplete = input.onComplete\n ? resolveCompletionHandler(input.onComplete)\n : failOnBreakingChanges;\n const rules = input.rules\n ? input.rules\n .filter(isString)\n .map((name) => {\n const rule = resolveRule(name);\n if (!rule) {\n throw new Error(`\\Rule '${name}' does not exist!\\n`);\n }\n return rule;\n })\n .filter((f) => f)\n : [];\n const changes = diffSchema(input.oldSchema, input.newSchema, rules);\n if (changes.length === 0) {\n Logger.success('No changes detected');\n return;\n }\n Logger.log(`\\nDetected the following changes (${changes.length}) between schemas:\\n`);\n const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);\n const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);\n const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);\n if (breakingChanges.length) {\n reportBreakingChanges(breakingChanges);\n }\n if (dangerousChanges.length) {\n reportDangerousChanges(dangerousChanges);\n }\n if (nonBreakingChanges.length) {\n reportNonBreakingChanges(nonBreakingChanges);\n }\n onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });\n}\nexport default createCommand((api) => {\n const { loaders } = api;\n return {\n command: 'diff <oldSchema> <newSchema>',\n describe: 'Compare two GraphQL Schemas',\n builder(yargs) {\n return yargs\n .positional('oldSchema', {\n describe: 'Point to an old schema',\n type: 'string',\n demandOption: true,\n })\n .positional('newSchema', {\n describe: 'Point to a new schema',\n type: 'string',\n demandOption: true,\n })\n .options({\n rule: {\n describe: 'Add rules',\n array: true,\n },\n onComplete: {\n describe: 'Handle Completion',\n type: 'string',\n },\n });\n },\n handler(args) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const apolloFederation = args.federation || false;\n const aws = args.aws || false;\n const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';\n const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);\n const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));\n const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n oldSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n newSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n handler({\n oldSchema,\n newSchema,\n rules: args.rule,\n onComplete: args.onComplete,\n });\n }\n catch (error) {\n Logger.error(error);\n throw error;\n }\n });\n },\n };\n});\nfunction sortChanges(changes) {\n return changes.slice().sort((a, b) => {\n const aPath = a.path || '';\n const bPath = b.path || '';\n if (aPath > bPath) {\n return 1;\n }\n if (bPath > aPath) {\n return -1;\n }\n return 0;\n });\n}\nfunction reportBreakingChanges(changes) {\n const label = symbols.error;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportDangerousChanges(changes) {\n const label = symbols.warning;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportNonBreakingChanges(changes) {\n const label = symbols.success;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction resolveRule(name) {\n const filepath = ensureAbsolute(name);\n if (existsSync(filepath)) {\n return require(filepath);\n }\n return DiffRule[name];\n}\nfunction resolveCompletionHandler(name) {\n const filepath = ensureAbsolute(name);\n try {\n require.resolve(filepath);\n }\n catch (error) {\n throw new Error(`CompletionHandler '${name}' does not exist!`);\n }\n const mod = require(filepath);\n return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;\n}\nfunction failOnBreakingChanges({ breakingChanges }) {\n const breakingCount = breakingChanges.length;\n if (breakingCount) {\n Logger.error(`Detected ${breakingCount} breaking change${breakingCount > 1 ? 's' : ''}`);\n process.exit(1);\n }\n else {\n Logger.success('No breaking changes detected');\n }\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\n//# sourceMappingURL=index.js.map"],"names":["diffSchema"],"mappings":"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"}