@graphql-inspector/introspect-command 0.0.0-canary.a883150 → 0.0.0-canary.d95a8a3

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,5 +1,11 @@
1
1
  import { GlobalArgs, CommandFactory } from '@graphql-inspector/commands';
2
+ import { GraphQLSchema } from 'graphql';
2
3
  export { CommandFactory };
4
+ export declare function handler({ schema: unsortedSchema, output, comments, }: {
5
+ schema: GraphQLSchema;
6
+ output: string;
7
+ comments: boolean;
8
+ }): void;
3
9
  declare const _default: CommandFactory<{}, {
4
10
  schema: string;
5
11
  write?: string | undefined;
package/index.js ADDED
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const tslib = require('tslib');
6
+ const commands = require('@graphql-inspector/commands');
7
+ const logger = require('@graphql-inspector/logger');
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const graphql = require('graphql');
11
+
12
+ function handler({ schema: unsortedSchema, output, comments, }) {
13
+ const schema = graphql.lexicographicSortSchema(unsortedSchema);
14
+ const introspection = graphql.introspectionFromSchema(schema);
15
+ const filepath = path.resolve(process.cwd(), output);
16
+ let content;
17
+ switch (path.extname(output.toLowerCase())) {
18
+ case '.graphql':
19
+ case '.gql':
20
+ case '.gqls':
21
+ case '.graphqls':
22
+ content = graphql.printSchema(schema, {
23
+ commentDescriptions: comments,
24
+ });
25
+ break;
26
+ case '.json':
27
+ content = JSON.stringify(introspection, null, 2);
28
+ break;
29
+ default:
30
+ throw new Error('Only .graphql, .gql and .json files are supported');
31
+ }
32
+ fs.writeFileSync(output, content, {
33
+ encoding: 'utf-8',
34
+ });
35
+ logger.Logger.success(`Saved to ${filepath}`);
36
+ }
37
+ const index = commands.createCommand(api => {
38
+ const { loaders } = api;
39
+ return {
40
+ command: 'introspect <schema>',
41
+ describe: 'Introspect a schema',
42
+ builder(yargs) {
43
+ return yargs
44
+ .positional('schema', {
45
+ describe: 'Point to a schema',
46
+ type: 'string',
47
+ demandOption: true,
48
+ })
49
+ .options({
50
+ w: {
51
+ alias: 'write',
52
+ describe: 'Write to a file',
53
+ type: 'string',
54
+ },
55
+ comments: {
56
+ describe: 'Use preceding comments as the description',
57
+ type: 'boolean',
58
+ },
59
+ })
60
+ .default('w', 'graphql.schema.json');
61
+ },
62
+ handler(args) {
63
+ var _a;
64
+ return tslib.__awaiter(this, void 0, void 0, function* () {
65
+ const { headers, token } = commands.parseGlobalArgs(args);
66
+ const output = args.write;
67
+ const comments = args.comments || false;
68
+ const apolloFederation = args.federation || false;
69
+ const aws = args.aws || false;
70
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
71
+ const schema = yield loaders.loadSchema(args.schema, {
72
+ token,
73
+ headers,
74
+ method,
75
+ }, apolloFederation, aws);
76
+ return handler({ schema, output, comments });
77
+ });
78
+ },
79
+ };
80
+ });
81
+
82
+ exports.default = index;
83
+ exports.handler = handler;
package/index.mjs ADDED
@@ -0,0 +1,79 @@
1
+ import { __awaiter } from 'tslib';
2
+ import { createCommand, parseGlobalArgs } from '@graphql-inspector/commands';
3
+ import { Logger } from '@graphql-inspector/logger';
4
+ import { writeFileSync } from 'fs';
5
+ import { resolve, extname } from 'path';
6
+ import { lexicographicSortSchema, introspectionFromSchema, printSchema } from 'graphql';
7
+
8
+ function handler({ schema: unsortedSchema, output, comments, }) {
9
+ const schema = lexicographicSortSchema(unsortedSchema);
10
+ const introspection = introspectionFromSchema(schema);
11
+ const filepath = resolve(process.cwd(), output);
12
+ let content;
13
+ switch (extname(output.toLowerCase())) {
14
+ case '.graphql':
15
+ case '.gql':
16
+ case '.gqls':
17
+ case '.graphqls':
18
+ content = printSchema(schema, {
19
+ commentDescriptions: comments,
20
+ });
21
+ break;
22
+ case '.json':
23
+ content = JSON.stringify(introspection, null, 2);
24
+ break;
25
+ default:
26
+ throw new Error('Only .graphql, .gql and .json files are supported');
27
+ }
28
+ writeFileSync(output, content, {
29
+ encoding: 'utf-8',
30
+ });
31
+ Logger.success(`Saved to ${filepath}`);
32
+ }
33
+ const index = createCommand(api => {
34
+ const { loaders } = api;
35
+ return {
36
+ command: 'introspect <schema>',
37
+ describe: 'Introspect a schema',
38
+ builder(yargs) {
39
+ return yargs
40
+ .positional('schema', {
41
+ describe: 'Point to a schema',
42
+ type: 'string',
43
+ demandOption: true,
44
+ })
45
+ .options({
46
+ w: {
47
+ alias: 'write',
48
+ describe: 'Write to a file',
49
+ type: 'string',
50
+ },
51
+ comments: {
52
+ describe: 'Use preceding comments as the description',
53
+ type: 'boolean',
54
+ },
55
+ })
56
+ .default('w', 'graphql.schema.json');
57
+ },
58
+ handler(args) {
59
+ var _a;
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const { headers, token } = parseGlobalArgs(args);
62
+ const output = args.write;
63
+ const comments = args.comments || false;
64
+ const apolloFederation = args.federation || false;
65
+ const aws = args.aws || false;
66
+ const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
67
+ const schema = yield loaders.loadSchema(args.schema, {
68
+ token,
69
+ headers,
70
+ method,
71
+ }, apolloFederation, aws);
72
+ return handler({ schema, output, comments });
73
+ });
74
+ },
75
+ };
76
+ });
77
+
78
+ export default index;
79
+ export { handler };
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@graphql-inspector/introspect-command",
3
- "version": "0.0.0-canary.a883150",
3
+ "version": "0.0.0-canary.d95a8a3",
4
4
  "description": "Introspects GraphQL Schema",
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.a883150",
11
- "@graphql-inspector/core": "0.0.0-canary.a883150",
12
- "@graphql-inspector/logger": "0.0.0-canary.a883150",
10
+ "@graphql-inspector/commands": "0.0.0-canary.d95a8a3",
11
+ "@graphql-inspector/core": "0.0.0-canary.d95a8a3",
12
+ "@graphql-inspector/logger": "0.0.0-canary.d95a8a3",
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 DELETED
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- const tslib = require('tslib');
4
- const commands = require('@graphql-inspector/commands');
5
- const logger = require('@graphql-inspector/logger');
6
- const fs = require('fs');
7
- const path = require('path');
8
- const graphql = require('graphql');
9
-
10
- const index = commands.createCommand((api) => {
11
- const { loaders, interceptPositional, interceptOptions, interceptArguments, } = api;
12
- return {
13
- command: 'introspect <schema>',
14
- describe: 'Introspect a schema',
15
- builder(yargs) {
16
- return yargs
17
- .positional('schema', interceptPositional('schema', {
18
- describe: 'Point to a schema',
19
- type: 'string',
20
- demandOption: true,
21
- }))
22
- .options(interceptOptions({
23
- w: {
24
- alias: 'write',
25
- describe: 'Write to a file',
26
- type: 'string',
27
- },
28
- comments: {
29
- describe: 'Use preceding comments as the description',
30
- type: 'boolean',
31
- },
32
- }))
33
- .default('w', 'graphql.schema.json');
34
- },
35
- handler(args) {
36
- return tslib.__awaiter(this, void 0, void 0, function* () {
37
- yield interceptArguments(args);
38
- const { headers, token } = commands.parseGlobalArgs(args);
39
- const schema = yield loaders.loadSchema(args.schema, {
40
- token,
41
- headers,
42
- });
43
- const introspection = graphql.introspectionFromSchema(schema);
44
- const output = args.write;
45
- const filepath = path.resolve(process.cwd(), output);
46
- let content;
47
- switch (path.extname(output.toLowerCase())) {
48
- case '.graphql':
49
- case '.gql':
50
- case '.gqls':
51
- case '.graphqls':
52
- content = graphql.printSchema(schema, {
53
- commentDescriptions: args.comments || false,
54
- });
55
- break;
56
- case '.json':
57
- content = JSON.stringify(introspection, null, 2);
58
- break;
59
- default:
60
- throw new Error('Only .graphql, .gql and .json files are supported');
61
- }
62
- fs.writeFileSync(output, content, {
63
- encoding: 'utf-8',
64
- });
65
- logger.Logger.success(`Saved to ${filepath}`);
66
- });
67
- },
68
- };
69
- });
70
-
71
- module.exports = index;
72
- //# sourceMappingURL=index.cjs.js.map
package/index.cjs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../dist/commands/introspect/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { Logger } from '@graphql-inspector/logger';\nimport { writeFileSync } from 'fs';\nimport { resolve, extname } from 'path';\nimport { introspectionFromSchema, printSchema } from 'graphql';\nexport default createCommand((api) => {\n const { loaders, interceptPositional, interceptOptions, interceptArguments, } = api;\n return {\n command: 'introspect <schema>',\n describe: 'Introspect a schema',\n builder(yargs) {\n return yargs\n .positional('schema', interceptPositional('schema', {\n describe: 'Point to a schema',\n type: 'string',\n demandOption: true,\n }))\n .options(interceptOptions({\n w: {\n alias: 'write',\n describe: 'Write to a file',\n type: 'string',\n },\n comments: {\n describe: 'Use preceding comments as the description',\n type: 'boolean',\n },\n }))\n .default('w', 'graphql.schema.json');\n },\n handler(args) {\n return __awaiter(this, void 0, void 0, function* () {\n yield interceptArguments(args);\n const { headers, token } = parseGlobalArgs(args);\n const schema = yield loaders.loadSchema(args.schema, {\n token,\n headers,\n });\n const introspection = introspectionFromSchema(schema);\n const output = args.write;\n const filepath = resolve(process.cwd(), output);\n let content;\n switch (extname(output.toLowerCase())) {\n case '.graphql':\n case '.gql':\n case '.gqls':\n case '.graphqls':\n content = printSchema(schema, {\n commentDescriptions: args.comments || false,\n });\n break;\n case '.json':\n content = JSON.stringify(introspection, null, 2);\n break;\n default:\n throw new Error('Only .graphql, .gql and .json files are supported');\n }\n writeFileSync(output, content, {\n encoding: 'utf-8',\n });\n Logger.success(`Saved to ${filepath}`);\n });\n },\n };\n});\n//# sourceMappingURL=index.js.map"],"names":["createCommand","__awaiter","parseGlobalArgs","introspectionFromSchema","resolve","extname","printSchema","writeFileSync","Logger"],"mappings":";;;;;;;;;AAMA,cAAeA,sBAAa,CAAC,CAAC,GAAG,KAAK;AACtC,IAAI,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,GAAG,GAAG,GAAG,CAAC;AACxF,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,qBAAqB;AACtC,QAAQ,QAAQ,EAAE,qBAAqB;AACvC,QAAQ,OAAO,CAAC,KAAK,EAAE;AACvB,YAAY,OAAO,KAAK;AACxB,iBAAiB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE;AACpE,gBAAgB,QAAQ,EAAE,mBAAmB;AAC7C,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,YAAY,EAAE,IAAI;AAClC,aAAa,CAAC,CAAC;AACf,iBAAiB,OAAO,CAAC,gBAAgB,CAAC;AAC1C,gBAAgB,CAAC,EAAE;AACnB,oBAAoB,KAAK,EAAE,OAAO;AAClC,oBAAoB,QAAQ,EAAE,iBAAiB;AAC/C,oBAAoB,IAAI,EAAE,QAAQ;AAClC,iBAAiB;AACjB,gBAAgB,QAAQ,EAAE;AAC1B,oBAAoB,QAAQ,EAAE,2CAA2C;AACzE,oBAAoB,IAAI,EAAE,SAAS;AACnC,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,iBAAiB,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AACrD,SAAS;AACT,QAAQ,OAAO,CAAC,IAAI,EAAE;AACtB,YAAY,OAAOC,eAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa;AAChE,gBAAgB,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC/C,gBAAgB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAGC,wBAAe,CAAC,IAAI,CAAC,CAAC;AACjE,gBAAgB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE;AACrE,oBAAoB,KAAK;AACzB,oBAAoB,OAAO;AAC3B,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,MAAM,aAAa,GAAGC,+BAAuB,CAAC,MAAM,CAAC,CAAC;AACtE,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1C,gBAAgB,MAAM,QAAQ,GAAGC,YAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AAChE,gBAAgB,IAAI,OAAO,CAAC;AAC5B,gBAAgB,QAAQC,YAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AACrD,oBAAoB,KAAK,UAAU,CAAC;AACpC,oBAAoB,KAAK,MAAM,CAAC;AAChC,oBAAoB,KAAK,OAAO,CAAC;AACjC,oBAAoB,KAAK,WAAW;AACpC,wBAAwB,OAAO,GAAGC,mBAAW,CAAC,MAAM,EAAE;AACtD,4BAA4B,mBAAmB,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;AACvE,yBAAyB,CAAC,CAAC;AAC3B,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,OAAO;AAChC,wBAAwB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,wBAAwB,MAAM;AAC9B,oBAAoB;AACpB,wBAAwB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;AAC7F,iBAAiB;AACjB,gBAAgBC,gBAAa,CAAC,MAAM,EAAE,OAAO,EAAE;AAC/C,oBAAoB,QAAQ,EAAE,OAAO;AACrC,iBAAiB,CAAC,CAAC;AACnB,gBAAgBC,aAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvD,aAAa,CAAC,CAAC;AACf,SAAS;AACT,KAAK,CAAC;AACN,CAAC,CAAC;;;;"}
package/index.esm.js DELETED
@@ -1,70 +0,0 @@
1
- import { __awaiter } from 'tslib';
2
- import { createCommand, parseGlobalArgs } from '@graphql-inspector/commands';
3
- import { Logger } from '@graphql-inspector/logger';
4
- import { writeFileSync } from 'fs';
5
- import { resolve, extname } from 'path';
6
- import { introspectionFromSchema, printSchema } from 'graphql';
7
-
8
- const index = createCommand((api) => {
9
- const { loaders, interceptPositional, interceptOptions, interceptArguments, } = api;
10
- return {
11
- command: 'introspect <schema>',
12
- describe: 'Introspect a schema',
13
- builder(yargs) {
14
- return yargs
15
- .positional('schema', interceptPositional('schema', {
16
- describe: 'Point to a schema',
17
- type: 'string',
18
- demandOption: true,
19
- }))
20
- .options(interceptOptions({
21
- w: {
22
- alias: 'write',
23
- describe: 'Write to a file',
24
- type: 'string',
25
- },
26
- comments: {
27
- describe: 'Use preceding comments as the description',
28
- type: 'boolean',
29
- },
30
- }))
31
- .default('w', 'graphql.schema.json');
32
- },
33
- handler(args) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- yield interceptArguments(args);
36
- const { headers, token } = parseGlobalArgs(args);
37
- const schema = yield loaders.loadSchema(args.schema, {
38
- token,
39
- headers,
40
- });
41
- const introspection = introspectionFromSchema(schema);
42
- const output = args.write;
43
- const filepath = resolve(process.cwd(), output);
44
- let content;
45
- switch (extname(output.toLowerCase())) {
46
- case '.graphql':
47
- case '.gql':
48
- case '.gqls':
49
- case '.graphqls':
50
- content = printSchema(schema, {
51
- commentDescriptions: args.comments || false,
52
- });
53
- break;
54
- case '.json':
55
- content = JSON.stringify(introspection, null, 2);
56
- break;
57
- default:
58
- throw new Error('Only .graphql, .gql and .json files are supported');
59
- }
60
- writeFileSync(output, content, {
61
- encoding: 'utf-8',
62
- });
63
- Logger.success(`Saved to ${filepath}`);
64
- });
65
- },
66
- };
67
- });
68
-
69
- export default index;
70
- //# sourceMappingURL=index.esm.js.map
package/index.esm.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../dist/commands/introspect/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { Logger } from '@graphql-inspector/logger';\nimport { writeFileSync } from 'fs';\nimport { resolve, extname } from 'path';\nimport { introspectionFromSchema, printSchema } from 'graphql';\nexport default createCommand((api) => {\n const { loaders, interceptPositional, interceptOptions, interceptArguments, } = api;\n return {\n command: 'introspect <schema>',\n describe: 'Introspect a schema',\n builder(yargs) {\n return yargs\n .positional('schema', interceptPositional('schema', {\n describe: 'Point to a schema',\n type: 'string',\n demandOption: true,\n }))\n .options(interceptOptions({\n w: {\n alias: 'write',\n describe: 'Write to a file',\n type: 'string',\n },\n comments: {\n describe: 'Use preceding comments as the description',\n type: 'boolean',\n },\n }))\n .default('w', 'graphql.schema.json');\n },\n handler(args) {\n return __awaiter(this, void 0, void 0, function* () {\n yield interceptArguments(args);\n const { headers, token } = parseGlobalArgs(args);\n const schema = yield loaders.loadSchema(args.schema, {\n token,\n headers,\n });\n const introspection = introspectionFromSchema(schema);\n const output = args.write;\n const filepath = resolve(process.cwd(), output);\n let content;\n switch (extname(output.toLowerCase())) {\n case '.graphql':\n case '.gql':\n case '.gqls':\n case '.graphqls':\n content = printSchema(schema, {\n commentDescriptions: args.comments || false,\n });\n break;\n case '.json':\n content = JSON.stringify(introspection, null, 2);\n break;\n default:\n throw new Error('Only .graphql, .gql and .json files are supported');\n }\n writeFileSync(output, content, {\n encoding: 'utf-8',\n });\n Logger.success(`Saved to ${filepath}`);\n });\n },\n };\n});\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}