@graphql-inspector/diff-command 0.0.0-canary.58ffd99 → 0.0.0-canary.7db8980

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,16 +1,18 @@
1
- import { GlobalArgs, CommandFactory } from '@graphql-inspector/commands';
1
+ import { CommandFactory, GlobalArgs } from '@graphql-inspector/commands';
2
2
  import { GraphQLSchema } from 'graphql';
3
3
  export { CommandFactory };
4
4
  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;
@@ -4,47 +4,49 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const tslib = require('tslib');
6
6
  const commands = require('@graphql-inspector/commands');
7
- const logger = require('@graphql-inspector/logger');
8
7
  const core = require('@graphql-inspector/core');
8
+ 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 ? resolveCompletionHandler(input.onComplete) : failOnBreakingChanges;
14
+ const rules = input.rules
15
+ ? input.rules
16
+ .filter(isString)
17
+ .map((name) => {
18
+ const rule = resolveRule(name);
19
+ if (!rule) {
20
+ throw new Error(`\Rule '${name}' does not exist!\n`);
21
+ }
22
+ return rule;
23
+ })
24
+ .filter(f => f)
25
+ : [];
26
+ const changes = yield core.diff(input.oldSchema, input.newSchema, rules, {
27
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
28
+ });
29
+ if (changes.length === 0) {
30
+ logger.Logger.success('No changes detected');
31
+ return;
32
+ }
33
+ logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
34
+ const breakingChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.Breaking);
35
+ const dangerousChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.Dangerous);
36
+ const nonBreakingChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.NonBreaking);
37
+ if (breakingChanges.length) {
38
+ reportBreakingChanges(breakingChanges);
39
+ }
40
+ if (dangerousChanges.length) {
41
+ reportDangerousChanges(dangerousChanges);
42
+ }
43
+ if (nonBreakingChanges.length) {
44
+ reportNonBreakingChanges(nonBreakingChanges);
45
+ }
46
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
47
+ });
46
48
  }
47
- const index = commands.createCommand((api) => {
49
+ const index = commands.createCommand(api => {
48
50
  const { loaders } = api;
49
51
  return {
50
52
  command: 'diff <oldSchema> <newSchema>',
@@ -70,27 +72,40 @@ const index = commands.createCommand((api) => {
70
72
  describe: 'Handle Completion',
71
73
  type: 'string',
72
74
  },
75
+ onUsage: {
76
+ describe: 'Checks usage of schema',
77
+ type: 'string',
78
+ },
73
79
  });
74
80
  },
75
81
  handler(args) {
82
+ var _a;
76
83
  return tslib.__awaiter(this, void 0, void 0, function* () {
77
84
  try {
78
85
  const oldSchemaPointer = args.oldSchema;
79
86
  const newSchemaPointer = args.newSchema;
80
- const { headers, token } = commands.parseGlobalArgs(args);
87
+ const apolloFederation = args.federation || false;
88
+ const aws = args.aws || false;
89
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
90
+ const { headers, leftHeaders, rightHeaders, token } = commands.parseGlobalArgs(args);
91
+ const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
92
+ const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
81
93
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
82
- headers,
94
+ headers: oldSchemaHeaders,
83
95
  token,
84
- });
96
+ method,
97
+ }, apolloFederation, aws);
85
98
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
86
- headers,
99
+ headers: newSchemaHeaders,
87
100
  token,
88
- });
89
- handler({
101
+ method,
102
+ }, apolloFederation, aws);
103
+ yield handler({
90
104
  oldSchema,
91
105
  newSchema,
92
106
  rules: args.rule,
93
107
  onComplete: args.onComplete,
108
+ onUsage: args.onUsage,
94
109
  });
95
110
  }
96
111
  catch (error) {
@@ -117,21 +132,21 @@ function sortChanges(changes) {
117
132
  function reportBreakingChanges(changes) {
118
133
  const label = logger.symbols.error;
119
134
  const sorted = sortChanges(changes);
120
- sorted.forEach((change) => {
135
+ sorted.forEach(change => {
121
136
  logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
122
137
  });
123
138
  }
124
139
  function reportDangerousChanges(changes) {
125
140
  const label = logger.symbols.warning;
126
141
  const sorted = sortChanges(changes);
127
- sorted.forEach((change) => {
142
+ sorted.forEach(change => {
128
143
  logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
129
144
  });
130
145
  }
131
146
  function reportNonBreakingChanges(changes) {
132
147
  const label = logger.symbols.success;
133
148
  const sorted = sortChanges(changes);
134
- sorted.forEach((change) => {
149
+ sorted.forEach(change => {
135
150
  logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
136
151
  });
137
152
  }
@@ -153,6 +168,17 @@ function resolveCompletionHandler(name) {
153
168
  const mod = require(filepath);
154
169
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
155
170
  }
171
+ function resolveUsageHandler(name) {
172
+ const filepath = commands.ensureAbsolute(name);
173
+ try {
174
+ require.resolve(filepath);
175
+ }
176
+ catch (error) {
177
+ throw new Error(`UsageHandler '${name}' does not exist!`);
178
+ }
179
+ const mod = require(filepath);
180
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
181
+ }
156
182
  function failOnBreakingChanges({ breakingChanges }) {
157
183
  const breakingCount = breakingChanges.length;
158
184
  if (breakingCount) {
@@ -169,4 +195,3 @@ function isString(val) {
169
195
 
170
196
  exports.default = index;
171
197
  exports.handler = handler;
172
- //# sourceMappingURL=index.cjs.js.map
@@ -1,46 +1,48 @@
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
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 ? resolveCompletionHandler(input.onComplete) : failOnBreakingChanges;
10
+ const rules = input.rules
11
+ ? input.rules
12
+ .filter(isString)
13
+ .map((name) => {
14
+ const rule = resolveRule(name);
15
+ if (!rule) {
16
+ throw new Error(`\Rule '${name}' does not exist!\n`);
17
+ }
18
+ return rule;
19
+ })
20
+ .filter(f => f)
21
+ : [];
22
+ const changes = yield diff(input.oldSchema, input.newSchema, rules, {
23
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
24
+ });
25
+ if (changes.length === 0) {
26
+ Logger.success('No changes detected');
27
+ return;
28
+ }
29
+ Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
30
+ const breakingChanges = changes.filter(change => change.criticality.level === CriticalityLevel.Breaking);
31
+ const dangerousChanges = changes.filter(change => change.criticality.level === CriticalityLevel.Dangerous);
32
+ const nonBreakingChanges = changes.filter(change => change.criticality.level === CriticalityLevel.NonBreaking);
33
+ if (breakingChanges.length) {
34
+ reportBreakingChanges(breakingChanges);
35
+ }
36
+ if (dangerousChanges.length) {
37
+ reportDangerousChanges(dangerousChanges);
38
+ }
39
+ if (nonBreakingChanges.length) {
40
+ reportNonBreakingChanges(nonBreakingChanges);
41
+ }
42
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
43
+ });
42
44
  }
43
- const index = createCommand((api) => {
45
+ const index = createCommand(api => {
44
46
  const { loaders } = api;
45
47
  return {
46
48
  command: 'diff <oldSchema> <newSchema>',
@@ -66,27 +68,40 @@ const index = createCommand((api) => {
66
68
  describe: 'Handle Completion',
67
69
  type: 'string',
68
70
  },
71
+ onUsage: {
72
+ describe: 'Checks usage of schema',
73
+ type: 'string',
74
+ },
69
75
  });
70
76
  },
71
77
  handler(args) {
78
+ var _a;
72
79
  return __awaiter(this, void 0, void 0, function* () {
73
80
  try {
74
81
  const oldSchemaPointer = args.oldSchema;
75
82
  const newSchemaPointer = args.newSchema;
76
- const { headers, token } = parseGlobalArgs(args);
83
+ const apolloFederation = args.federation || false;
84
+ const aws = args.aws || false;
85
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
86
+ const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);
87
+ const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
88
+ const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
77
89
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
78
- headers,
90
+ headers: oldSchemaHeaders,
79
91
  token,
80
- });
92
+ method,
93
+ }, apolloFederation, aws);
81
94
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
82
- headers,
95
+ headers: newSchemaHeaders,
83
96
  token,
84
- });
85
- handler({
97
+ method,
98
+ }, apolloFederation, aws);
99
+ yield handler({
86
100
  oldSchema,
87
101
  newSchema,
88
102
  rules: args.rule,
89
103
  onComplete: args.onComplete,
104
+ onUsage: args.onUsage,
90
105
  });
91
106
  }
92
107
  catch (error) {
@@ -113,21 +128,21 @@ function sortChanges(changes) {
113
128
  function reportBreakingChanges(changes) {
114
129
  const label = symbols.error;
115
130
  const sorted = sortChanges(changes);
116
- sorted.forEach((change) => {
131
+ sorted.forEach(change => {
117
132
  Logger.log(`${label} ${bolderize(change.message)}`);
118
133
  });
119
134
  }
120
135
  function reportDangerousChanges(changes) {
121
136
  const label = symbols.warning;
122
137
  const sorted = sortChanges(changes);
123
- sorted.forEach((change) => {
138
+ sorted.forEach(change => {
124
139
  Logger.log(`${label} ${bolderize(change.message)}`);
125
140
  });
126
141
  }
127
142
  function reportNonBreakingChanges(changes) {
128
143
  const label = symbols.success;
129
144
  const sorted = sortChanges(changes);
130
- sorted.forEach((change) => {
145
+ sorted.forEach(change => {
131
146
  Logger.log(`${label} ${bolderize(change.message)}`);
132
147
  });
133
148
  }
@@ -149,6 +164,17 @@ function resolveCompletionHandler(name) {
149
164
  const mod = require(filepath);
150
165
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
151
166
  }
167
+ function resolveUsageHandler(name) {
168
+ const filepath = ensureAbsolute(name);
169
+ try {
170
+ require.resolve(filepath);
171
+ }
172
+ catch (error) {
173
+ throw new Error(`UsageHandler '${name}' does not exist!`);
174
+ }
175
+ const mod = require(filepath);
176
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
177
+ }
152
178
  function failOnBreakingChanges({ breakingChanges }) {
153
179
  const breakingCount = breakingChanges.length;
154
180
  if (breakingCount) {
@@ -165,4 +191,3 @@ function isString(val) {
165
191
 
166
192
  export default index;
167
193
  export { handler };
168
- //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@graphql-inspector/diff-command",
3
- "version": "0.0.0-canary.58ffd99",
3
+ "version": "0.0.0-canary.7db8980",
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.58ffd99",
11
- "@graphql-inspector/core": "0.0.0-canary.58ffd99",
12
- "@graphql-inspector/logger": "0.0.0-canary.58ffd99",
10
+ "@graphql-inspector/commands": "0.0.0-canary.7db8980",
11
+ "@graphql-inspector/core": "0.0.0-canary.7db8980",
12
+ "@graphql-inspector/logger": "0.0.0-canary.7db8980",
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 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 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 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 { symbols, Logger, bolderize } from '@graphql-inspector/logger';\nimport { diff as diffSchema, CriticalityLevel, DiffRule, } from '@graphql-inspector/core';\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 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 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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"}