@graphql-inspector/diff-command 0.0.0-canary.9cf9b2c → 0.0.0-canary.e88122e

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
@@ -1,8 +1,18 @@
1
- import { GlobalArgs } from '@graphql-inspector/commands';
2
- declare const _default: import("../../commands/src").CommandFactory<{}, {
1
+ import { CommandFactory, GlobalArgs } from '@graphql-inspector/commands';
2
+ import { GraphQLSchema } from 'graphql';
3
+ export { CommandFactory };
4
+ export declare function handler(input: {
5
+ oldSchema: GraphQLSchema;
6
+ newSchema: GraphQLSchema;
7
+ onComplete?: string;
8
+ onUsage?: string;
9
+ rules?: Array<string | number>;
10
+ }): Promise<void>;
11
+ declare const _default: CommandFactory<{}, {
3
12
  oldSchema: string;
4
13
  newSchema: string;
5
14
  rule?: (string | number)[] | undefined;
6
15
  onComplete?: string | undefined;
16
+ onUsage?: string | undefined;
7
17
  } & GlobalArgs>;
8
18
  export default _default;
@@ -1,11 +1,53 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  const tslib = require('tslib');
4
6
  const commands = require('@graphql-inspector/commands');
5
- const logger = require('@graphql-inspector/logger');
6
7
  const core = require('@graphql-inspector/core');
8
+ const logger = require('@graphql-inspector/logger');
7
9
  const fs = require('fs');
8
10
 
11
+ function handler(input) {
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
+ });
50
+ }
9
51
  const index = commands.createCommand((api) => {
10
52
  const { loaders } = api;
11
53
  return {
@@ -32,56 +74,41 @@ const index = commands.createCommand((api) => {
32
74
  describe: 'Handle Completion',
33
75
  type: 'string',
34
76
  },
77
+ onUsage: {
78
+ describe: 'Checks usage of schema',
79
+ type: 'string',
80
+ },
35
81
  });
36
82
  },
37
83
  handler(args) {
84
+ var _a;
38
85
  return tslib.__awaiter(this, void 0, void 0, function* () {
39
86
  try {
40
87
  const oldSchemaPointer = args.oldSchema;
41
88
  const newSchemaPointer = args.newSchema;
42
- const { headers, token } = commands.parseGlobalArgs(args);
89
+ const apolloFederation = args.federation || false;
90
+ const aws = args.aws || false;
91
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
92
+ const { headers, leftHeaders, rightHeaders, token } = commands.parseGlobalArgs(args);
93
+ const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
94
+ const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
43
95
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
44
- headers,
96
+ headers: oldSchemaHeaders,
45
97
  token,
46
- });
98
+ method,
99
+ }, apolloFederation, aws);
47
100
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
48
- headers,
101
+ headers: newSchemaHeaders,
49
102
  token,
103
+ method,
104
+ }, apolloFederation, aws);
105
+ yield handler({
106
+ oldSchema,
107
+ newSchema,
108
+ rules: args.rule,
109
+ onComplete: args.onComplete,
110
+ onUsage: args.onUsage,
50
111
  });
51
- const onComplete = args.onComplete
52
- ? resolveCompletionHandler(args.onComplete)
53
- : failOnBreakingChanges;
54
- const rules = args.rule
55
- ? args.rule
56
- .filter(isString)
57
- .map((name) => {
58
- const rule = resolveRule(name);
59
- if (!rule) {
60
- throw new Error(`\Rule '${name}' does not exist!\n`);
61
- }
62
- return rule;
63
- })
64
- .filter((f) => f)
65
- : [];
66
- const changes = core.diff(oldSchema, newSchema, rules);
67
- if (changes.length === 0) {
68
- logger.Logger.success('No changes detected');
69
- return;
70
- }
71
- logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
72
- const breakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Breaking);
73
- const dangerousChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Dangerous);
74
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.NonBreaking);
75
- if (breakingChanges.length) {
76
- reportBreakingChanges(breakingChanges);
77
- }
78
- if (dangerousChanges.length) {
79
- reportDangerousChanges(dangerousChanges);
80
- }
81
- if (nonBreakingChanges.length) {
82
- reportNonBreakingChanges(nonBreakingChanges);
83
- }
84
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
85
112
  }
86
113
  catch (error) {
87
114
  logger.Logger.error(error);
@@ -143,6 +170,17 @@ function resolveCompletionHandler(name) {
143
170
  const mod = require(filepath);
144
171
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
145
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
+ }
146
184
  function failOnBreakingChanges({ breakingChanges }) {
147
185
  const breakingCount = breakingChanges.length;
148
186
  if (breakingCount) {
@@ -157,5 +195,5 @@ function isString(val) {
157
195
  return typeof val === 'string';
158
196
  }
159
197
 
160
- module.exports = index;
161
- //# sourceMappingURL=index.cjs.js.map
198
+ exports.default = index;
199
+ exports.handler = handler;
@@ -1,9 +1,49 @@
1
1
  import { __awaiter } from 'tslib';
2
2
  import { createCommand, parseGlobalArgs, ensureAbsolute } from '@graphql-inspector/commands';
3
- import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
4
3
  import { diff, CriticalityLevel, DiffRule } from '@graphql-inspector/core';
4
+ import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
5
5
  import { existsSync } from 'fs';
6
6
 
7
+ function handler(input) {
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
+ });
46
+ }
7
47
  const index = createCommand((api) => {
8
48
  const { loaders } = api;
9
49
  return {
@@ -30,56 +70,41 @@ const index = createCommand((api) => {
30
70
  describe: 'Handle Completion',
31
71
  type: 'string',
32
72
  },
73
+ onUsage: {
74
+ describe: 'Checks usage of schema',
75
+ type: 'string',
76
+ },
33
77
  });
34
78
  },
35
79
  handler(args) {
80
+ var _a;
36
81
  return __awaiter(this, void 0, void 0, function* () {
37
82
  try {
38
83
  const oldSchemaPointer = args.oldSchema;
39
84
  const newSchemaPointer = args.newSchema;
40
- const { headers, token } = parseGlobalArgs(args);
85
+ const apolloFederation = args.federation || false;
86
+ const aws = args.aws || false;
87
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
88
+ const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);
89
+ const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
90
+ const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
41
91
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
42
- headers,
92
+ headers: oldSchemaHeaders,
43
93
  token,
44
- });
94
+ method,
95
+ }, apolloFederation, aws);
45
96
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
46
- headers,
97
+ headers: newSchemaHeaders,
47
98
  token,
99
+ method,
100
+ }, apolloFederation, aws);
101
+ yield handler({
102
+ oldSchema,
103
+ newSchema,
104
+ rules: args.rule,
105
+ onComplete: args.onComplete,
106
+ onUsage: args.onUsage,
48
107
  });
49
- const onComplete = args.onComplete
50
- ? resolveCompletionHandler(args.onComplete)
51
- : failOnBreakingChanges;
52
- const rules = args.rule
53
- ? args.rule
54
- .filter(isString)
55
- .map((name) => {
56
- const rule = resolveRule(name);
57
- if (!rule) {
58
- throw new Error(`\Rule '${name}' does not exist!\n`);
59
- }
60
- return rule;
61
- })
62
- .filter((f) => f)
63
- : [];
64
- const changes = diff(oldSchema, newSchema, rules);
65
- if (changes.length === 0) {
66
- Logger.success('No changes detected');
67
- return;
68
- }
69
- Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
70
- const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);
71
- const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);
72
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);
73
- if (breakingChanges.length) {
74
- reportBreakingChanges(breakingChanges);
75
- }
76
- if (dangerousChanges.length) {
77
- reportDangerousChanges(dangerousChanges);
78
- }
79
- if (nonBreakingChanges.length) {
80
- reportNonBreakingChanges(nonBreakingChanges);
81
- }
82
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
83
108
  }
84
109
  catch (error) {
85
110
  Logger.error(error);
@@ -141,6 +166,17 @@ function resolveCompletionHandler(name) {
141
166
  const mod = require(filepath);
142
167
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
143
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
+ }
144
180
  function failOnBreakingChanges({ breakingChanges }) {
145
181
  const breakingCount = breakingChanges.length;
146
182
  if (breakingCount) {
@@ -156,4 +192,4 @@ function isString(val) {
156
192
  }
157
193
 
158
194
  export default index;
159
- //# sourceMappingURL=index.esm.js.map
195
+ export { handler };
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@graphql-inspector/diff-command",
3
- "version": "0.0.0-canary.9cf9b2c",
3
+ "version": "0.0.0-canary.e88122e",
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": "0.0.0-canary.9cf9b2c",
11
- "@graphql-inspector/core": "0.0.0-canary.9cf9b2c",
12
- "@graphql-inspector/logger": "0.0.0-canary.9cf9b2c",
10
+ "@graphql-inspector/commands": "0.0.0-canary.e88122e",
11
+ "@graphql-inspector/core": "0.0.0-canary.e88122e",
12
+ "@graphql-inspector/logger": "0.0.0-canary.e88122e",
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 { symbols, Logger, bolderize } from '@graphql-inspector/logger';\nimport { diff as diffSchema, CriticalityLevel, DiffRule, } from '@graphql-inspector/core';\nimport { existsSync } from 'fs';\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 return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const { headers, token } = parseGlobalArgs(args);\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n headers,\n token,\n });\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n headers,\n token,\n });\n const onComplete = args.onComplete\n ? resolveCompletionHandler(args.onComplete)\n : failOnBreakingChanges;\n const rules = args.rule\n ? args.rule\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(oldSchema, 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 }\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":["createCommand","__awaiter","parseGlobalArgs","diffSchema","Logger","CriticalityLevel","symbols","bolderize","ensureAbsolute","existsSync","DiffRule"],"mappings":";;;;;;;;AAKA,cAAeA,sBAAa,CAAC,CAAC,GAAG,KAAK;AACtC,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;AAC5B,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,8BAA8B;AAC/C,QAAQ,QAAQ,EAAE,6BAA6B;AAC/C,QAAQ,OAAO,CAAC,KAAK,EAAE;AACvB,YAAY,OAAO,KAAK;AACxB,iBAAiB,UAAU,CAAC,WAAW,EAAE;AACzC,gBAAgB,QAAQ,EAAE,wBAAwB;AAClD,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,YAAY,EAAE,IAAI;AAClC,aAAa,CAAC;AACd,iBAAiB,UAAU,CAAC,WAAW,EAAE;AACzC,gBAAgB,QAAQ,EAAE,uBAAuB;AACjD,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,YAAY,EAAE,IAAI;AAClC,aAAa,CAAC;AACd,iBAAiB,OAAO,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,oBAAoB,QAAQ,EAAE,WAAW;AACzC,oBAAoB,KAAK,EAAE,IAAI;AAC/B,iBAAiB;AACjB,gBAAgB,UAAU,EAAE;AAC5B,oBAAoB,QAAQ,EAAE,mBAAmB;AACjD,oBAAoB,IAAI,EAAE,QAAQ;AAClC,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,OAAO,CAAC,IAAI,EAAE;AACtB,YAAY,OAAOC,eAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAChE,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5D,oBAAoB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5D,oBAAoB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAGC,wBAAe,CAAC,IAAI,CAAC,CAAC;AACrE,oBAAoB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE;AACjF,wBAAwB,OAAO;AAC/B,wBAAwB,KAAK;AAC7B,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE;AACjF,wBAAwB,OAAO;AAC/B,wBAAwB,KAAK;AAC7B,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;AACtD,0BAA0B,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnE,0BAA0B,qBAAqB,CAAC;AAChD,oBAAoB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;AAC3C,0BAA0B,IAAI,CAAC,IAAI;AACnC,6BAA6B,MAAM,CAAC,QAAQ,CAAC;AAC7C,6BAA6B,GAAG,CAAC,CAAC,IAAI,KAAK;AAC3C,4BAA4B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3D,4BAA4B,IAAI,CAAC,IAAI,EAAE;AACvC,gCAAgC,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACrF,6BAA6B;AAC7B,4BAA4B,OAAO,IAAI,CAAC;AACxC,yBAAyB,CAAC;AAC1B,6BAA6B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7C,0BAA0B,EAAE,CAAC;AAC7B,oBAAoB,MAAM,OAAO,GAAGC,SAAU,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5E,oBAAoB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,wBAAwBC,aAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC9D,wBAAwB,OAAO;AAC/B,qBAAqB;AACrB,oBAAoBA,aAAM,CAAC,GAAG,CAAC,CAAC,kCAAkC,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAC1G,oBAAoB,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,KAAKC,qBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC/H,oBAAoB,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,KAAKA,qBAAgB,CAAC,SAAS,CAAC,CAAC;AACjI,oBAAoB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,KAAKA,qBAAgB,CAAC,WAAW,CAAC,CAAC;AACrI,oBAAoB,IAAI,eAAe,CAAC,MAAM,EAAE;AAChD,wBAAwB,qBAAqB,CAAC,eAAe,CAAC,CAAC;AAC/D,qBAAqB;AACrB,oBAAoB,IAAI,gBAAgB,CAAC,MAAM,EAAE;AACjD,wBAAwB,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;AACjE,qBAAqB;AACrB,oBAAoB,IAAI,kBAAkB,CAAC,MAAM,EAAE;AACnD,wBAAwB,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;AACrE,qBAAqB;AACrB,oBAAoB,UAAU,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC1F,iBAAiB;AACjB,gBAAgB,OAAO,KAAK,EAAE;AAC9B,oBAAoBD,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,oBAAoB,MAAM,KAAK,CAAC;AAChC,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK,CAAC;AACN,CAAC,CAAC,CAAC;AACH,SAAS,WAAW,CAAC,OAAO,EAAE;AAC9B,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1C,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACnC,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACnC,QAAQ,IAAI,KAAK,GAAG,KAAK,EAAE;AAC3B,YAAY,OAAO,CAAC,CAAC;AACrB,SAAS;AACT,QAAQ,IAAI,KAAK,GAAG,KAAK,EAAE;AAC3B,YAAY,OAAO,CAAC,CAAC,CAAC;AACtB,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,qBAAqB,CAAC,OAAO,EAAE;AACxC,IAAI,MAAM,KAAK,GAAGE,cAAO,CAAC,KAAK,CAAC;AAChC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC/B,QAAQF,aAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAEG,gBAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,sBAAsB,CAAC,OAAO,EAAE;AACzC,IAAI,MAAM,KAAK,GAAGD,cAAO,CAAC,OAAO,CAAC;AAClC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC/B,QAAQF,aAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAEG,gBAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,IAAI,MAAM,KAAK,GAAGD,cAAO,CAAC,OAAO,CAAC;AAClC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC/B,QAAQF,aAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAEG,gBAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,WAAW,CAAC,IAAI,EAAE;AAC3B,IAAI,MAAM,QAAQ,GAAGC,uBAAc,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,IAAIC,aAAU,CAAC,QAAQ,CAAC,EAAE;AAC9B,QAAQ,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,KAAK;AACL,IAAI,OAAOC,aAAQ,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD,SAAS,wBAAwB,CAAC,IAAI,EAAE;AACxC,IAAI,MAAM,QAAQ,GAAGF,uBAAc,CAAC,IAAI,CAAC,CAAC;AAC1C,IAAI,IAAI;AACR,QAAQ,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,KAAK;AACL,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACvE,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC;AAC1E,CAAC;AACD,SAAS,qBAAqB,CAAC,EAAE,eAAe,EAAE,EAAE;AACpD,IAAI,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC;AACjD,IAAI,IAAI,aAAa,EAAE;AACvB,QAAQJ,aAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,gBAAgB,EAAE,aAAa,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,KAAK;AACL,SAAS;AACT,QAAQA,aAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;AACvD,KAAK;AACL,CAAC;AACD,SAAS,QAAQ,CAAC,GAAG,EAAE;AACvB,IAAI,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;AACnC;;;;"}
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 { symbols, Logger, bolderize } from '@graphql-inspector/logger';\nimport { diff as diffSchema, CriticalityLevel, DiffRule, } from '@graphql-inspector/core';\nimport { existsSync } from 'fs';\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 return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const { headers, token } = parseGlobalArgs(args);\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n headers,\n token,\n });\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n headers,\n token,\n });\n const onComplete = args.onComplete\n ? resolveCompletionHandler(args.onComplete)\n : failOnBreakingChanges;\n const rules = args.rule\n ? args.rule\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(oldSchema, 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 }\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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"}