@graphql-inspector/diff-command 2.9.0 → 3.1.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.
package/index.d.ts CHANGED
@@ -5,12 +5,14 @@ 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;
13
14
  rule?: (string | number)[] | undefined;
14
15
  onComplete?: string | undefined;
16
+ onUsage?: string | undefined;
15
17
  } & GlobalArgs>;
16
18
  export default _default;
@@ -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,20 +93,21 @@ 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,
101
109
  onComplete: args.onComplete,
110
+ onUsage: args.onUsage,
102
111
  });
103
112
  }
104
113
  catch (error) {
@@ -161,6 +170,17 @@ function resolveCompletionHandler(name) {
161
170
  const mod = require(filepath);
162
171
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
163
172
  }
173
+ function resolveUsageHandler(name) {
174
+ const filepath = commands.ensureAbsolute(name);
175
+ try {
176
+ require.resolve(filepath);
177
+ }
178
+ catch (error) {
179
+ throw new Error(`UsageHandler '${name}' does not exist!`);
180
+ }
181
+ const mod = require(filepath);
182
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
183
+ }
164
184
  function failOnBreakingChanges({ breakingChanges }) {
165
185
  const breakingCount = breakingChanges.length;
166
186
  if (breakingCount) {
@@ -177,4 +197,3 @@ function isString(val) {
177
197
 
178
198
  exports.default = index;
179
199
  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,20 +89,21 @@ 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,
97
105
  onComplete: args.onComplete,
106
+ onUsage: args.onUsage,
98
107
  });
99
108
  }
100
109
  catch (error) {
@@ -157,6 +166,17 @@ function resolveCompletionHandler(name) {
157
166
  const mod = require(filepath);
158
167
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
159
168
  }
169
+ function resolveUsageHandler(name) {
170
+ const filepath = ensureAbsolute(name);
171
+ try {
172
+ require.resolve(filepath);
173
+ }
174
+ catch (error) {
175
+ throw new Error(`UsageHandler '${name}' does not exist!`);
176
+ }
177
+ const mod = require(filepath);
178
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
179
+ }
160
180
  function failOnBreakingChanges({ breakingChanges }) {
161
181
  const breakingCount = breakingChanges.length;
162
182
  if (breakingCount) {
@@ -173,4 +193,3 @@ function isString(val) {
173
193
 
174
194
  export default index;
175
195
  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.9.0",
3
+ "version": "3.1.0",
4
4
  "description": "Compare GraphQL Schemas",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
- "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0"
7
+ "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@graphql-inspector/commands": "2.9.0",
11
- "@graphql-inspector/core": "2.9.0",
12
- "@graphql-inspector/logger": "2.9.0",
10
+ "@graphql-inspector/commands": "3.1.0",
11
+ "@graphql-inspector/core": "3.1.0",
12
+ "@graphql-inspector/logger": "3.1.0",
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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"}