@graphql-tools/optimize 1.2.1 → 1.3.0-alpha-b76ec274.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/cjs/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./optimize.js"), exports);
5
+ tslib_1.__exportStar(require("./types.js"), exports);
6
+ tslib_1.__exportStar(require("./optimizers/remove-description.js"), exports);
7
+ tslib_1.__exportStar(require("./optimizers/remove-empty-nodes.js"), exports);
8
+ tslib_1.__exportStar(require("./optimizers/remove-loc.js"), exports);
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optimizeDocumentNode = void 0;
4
+ const remove_description_js_1 = require("./optimizers/remove-description.js");
5
+ const remove_empty_nodes_js_1 = require("./optimizers/remove-empty-nodes.js");
6
+ const remove_loc_js_1 = require("./optimizers/remove-loc.js");
7
+ const DEFAULT_OPTIMIZERS = [remove_description_js_1.removeDescriptions, remove_empty_nodes_js_1.removeEmptyNodes, remove_loc_js_1.removeLoc];
8
+ /**
9
+ * This method accept a DocumentNode and applies the optimizations you wish to use.
10
+ * You can override the default ones or provide you own optimizers if you wish.
11
+ *
12
+ * @param node document to optimize
13
+ * @param optimizers optional, list of optimizer to use
14
+ */
15
+ function optimizeDocumentNode(node, optimizers = DEFAULT_OPTIMIZERS) {
16
+ let resultNode = node;
17
+ for (const optimizer of optimizers) {
18
+ if (typeof optimizer !== 'function') {
19
+ throw new Error(`Optimizer provided for "optimizeDocumentNode" must be a function!`);
20
+ }
21
+ const result = optimizer(resultNode);
22
+ if (!result) {
23
+ throw new Error(`Optimizer provided for "optimizeDocumentNode" returned empty value instead of modified "DocumentNode"!`);
24
+ }
25
+ resultNode = result;
26
+ }
27
+ return resultNode;
28
+ }
29
+ exports.optimizeDocumentNode = optimizeDocumentNode;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeDescriptions = void 0;
4
+ const graphql_1 = require("graphql");
5
+ /**
6
+ * This optimizer removes "description" field from schema AST definitions.
7
+ * @param input
8
+ */
9
+ const removeDescriptions = input => {
10
+ function transformNode(node) {
11
+ if (node.description) {
12
+ node.description = undefined;
13
+ }
14
+ return node;
15
+ }
16
+ return (0, graphql_1.visit)(input, {
17
+ ScalarTypeDefinition: transformNode,
18
+ ObjectTypeDefinition: transformNode,
19
+ InterfaceTypeDefinition: transformNode,
20
+ UnionTypeDefinition: transformNode,
21
+ EnumTypeDefinition: transformNode,
22
+ EnumValueDefinition: transformNode,
23
+ InputObjectTypeDefinition: transformNode,
24
+ InputValueDefinition: transformNode,
25
+ FieldDefinition: transformNode,
26
+ });
27
+ };
28
+ exports.removeDescriptions = removeDescriptions;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeEmptyNodes = void 0;
4
+ const graphql_1 = require("graphql");
5
+ /**
6
+ * This optimizer removes empty nodes/arrays (directives/argument/variableDefinitions) from a given DocumentNode of operation/fragment.
7
+ * @param input
8
+ */
9
+ const removeEmptyNodes = input => {
10
+ function transformNode(node) {
11
+ let resultNode = node;
12
+ if (resultNode.directives && Array.isArray(resultNode.directives) && resultNode.directives.length === 0) {
13
+ const { directives, ...rest } = resultNode;
14
+ resultNode = rest;
15
+ }
16
+ if (resultNode.arguments && Array.isArray(resultNode.arguments) && resultNode.arguments.length === 0) {
17
+ const { arguments: args, ...rest } = resultNode;
18
+ resultNode = rest;
19
+ }
20
+ if (resultNode.variableDefinitions &&
21
+ Array.isArray(resultNode.variableDefinitions) &&
22
+ resultNode.variableDefinitions.length === 0) {
23
+ const { variableDefinitions, ...rest } = resultNode;
24
+ resultNode = rest;
25
+ }
26
+ return resultNode;
27
+ }
28
+ return (0, graphql_1.visit)(input, {
29
+ // Request/Operation:
30
+ FragmentDefinition: transformNode,
31
+ OperationDefinition: transformNode,
32
+ VariableDefinition: transformNode,
33
+ Field: transformNode,
34
+ FragmentSpread: transformNode,
35
+ InlineFragment: transformNode,
36
+ Name: transformNode,
37
+ Directive: transformNode,
38
+ // Schema Definition:
39
+ SchemaDefinition: transformNode,
40
+ ScalarTypeDefinition: transformNode,
41
+ ObjectTypeDefinition: transformNode,
42
+ InterfaceTypeDefinition: transformNode,
43
+ UnionTypeDefinition: transformNode,
44
+ EnumTypeDefinition: transformNode,
45
+ EnumValueDefinition: transformNode,
46
+ InputObjectTypeDefinition: transformNode,
47
+ FieldDefinition: transformNode,
48
+ InputValueDefinition: transformNode,
49
+ // Schema Extension:
50
+ SchemaExtension: transformNode,
51
+ ScalarTypeExtension: transformNode,
52
+ ObjectTypeExtension: transformNode,
53
+ InterfaceTypeExtension: transformNode,
54
+ UnionTypeExtension: transformNode,
55
+ EnumTypeExtension: transformNode,
56
+ InputObjectTypeExtension: transformNode,
57
+ });
58
+ };
59
+ exports.removeEmptyNodes = removeEmptyNodes;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeLoc = void 0;
4
+ const graphql_1 = require("graphql");
5
+ /**
6
+ * This optimizer removes "loc" fields
7
+ * @param input
8
+ */
9
+ const removeLoc = input => {
10
+ function transformNode(node) {
11
+ if (node.loc && typeof node.loc === 'object') {
12
+ const { loc, ...rest } = node;
13
+ return rest;
14
+ }
15
+ return node;
16
+ }
17
+ return (0, graphql_1.visit)(input, { enter: transformNode });
18
+ };
19
+ exports.removeLoc = removeLoc;
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
package/cjs/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/esm/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './optimize.js';
2
+ export * from './types.js';
3
+ export * from './optimizers/remove-description.js';
4
+ export * from './optimizers/remove-empty-nodes.js';
5
+ export * from './optimizers/remove-loc.js';
@@ -0,0 +1,25 @@
1
+ import { removeDescriptions } from './optimizers/remove-description.js';
2
+ import { removeEmptyNodes } from './optimizers/remove-empty-nodes.js';
3
+ import { removeLoc } from './optimizers/remove-loc.js';
4
+ const DEFAULT_OPTIMIZERS = [removeDescriptions, removeEmptyNodes, removeLoc];
5
+ /**
6
+ * This method accept a DocumentNode and applies the optimizations you wish to use.
7
+ * You can override the default ones or provide you own optimizers if you wish.
8
+ *
9
+ * @param node document to optimize
10
+ * @param optimizers optional, list of optimizer to use
11
+ */
12
+ export function optimizeDocumentNode(node, optimizers = DEFAULT_OPTIMIZERS) {
13
+ let resultNode = node;
14
+ for (const optimizer of optimizers) {
15
+ if (typeof optimizer !== 'function') {
16
+ throw new Error(`Optimizer provided for "optimizeDocumentNode" must be a function!`);
17
+ }
18
+ const result = optimizer(resultNode);
19
+ if (!result) {
20
+ throw new Error(`Optimizer provided for "optimizeDocumentNode" returned empty value instead of modified "DocumentNode"!`);
21
+ }
22
+ resultNode = result;
23
+ }
24
+ return resultNode;
25
+ }
@@ -0,0 +1,24 @@
1
+ import { visit } from 'graphql';
2
+ /**
3
+ * This optimizer removes "description" field from schema AST definitions.
4
+ * @param input
5
+ */
6
+ export const removeDescriptions = input => {
7
+ function transformNode(node) {
8
+ if (node.description) {
9
+ node.description = undefined;
10
+ }
11
+ return node;
12
+ }
13
+ return visit(input, {
14
+ ScalarTypeDefinition: transformNode,
15
+ ObjectTypeDefinition: transformNode,
16
+ InterfaceTypeDefinition: transformNode,
17
+ UnionTypeDefinition: transformNode,
18
+ EnumTypeDefinition: transformNode,
19
+ EnumValueDefinition: transformNode,
20
+ InputObjectTypeDefinition: transformNode,
21
+ InputValueDefinition: transformNode,
22
+ FieldDefinition: transformNode,
23
+ });
24
+ };
@@ -1,34 +1,9 @@
1
1
  import { visit } from 'graphql';
2
-
3
- /**
4
- * This optimizer removes "description" field from schema AST definitions.
5
- * @param input
6
- */
7
- const removeDescriptions = input => {
8
- function transformNode(node) {
9
- if (node.description) {
10
- node.description = undefined;
11
- }
12
- return node;
13
- }
14
- return visit(input, {
15
- ScalarTypeDefinition: transformNode,
16
- ObjectTypeDefinition: transformNode,
17
- InterfaceTypeDefinition: transformNode,
18
- UnionTypeDefinition: transformNode,
19
- EnumTypeDefinition: transformNode,
20
- EnumValueDefinition: transformNode,
21
- InputObjectTypeDefinition: transformNode,
22
- InputValueDefinition: transformNode,
23
- FieldDefinition: transformNode,
24
- });
25
- };
26
-
27
2
  /**
28
3
  * This optimizer removes empty nodes/arrays (directives/argument/variableDefinitions) from a given DocumentNode of operation/fragment.
29
4
  * @param input
30
5
  */
31
- const removeEmptyNodes = input => {
6
+ export const removeEmptyNodes = input => {
32
7
  function transformNode(node) {
33
8
  let resultNode = node;
34
9
  if (resultNode.directives && Array.isArray(resultNode.directives) && resultNode.directives.length === 0) {
@@ -78,43 +53,3 @@ const removeEmptyNodes = input => {
78
53
  InputObjectTypeExtension: transformNode,
79
54
  });
80
55
  };
81
-
82
- /**
83
- * This optimizer removes "loc" fields
84
- * @param input
85
- */
86
- const removeLoc = input => {
87
- function transformNode(node) {
88
- if (node.loc && typeof node.loc === 'object') {
89
- const { loc, ...rest } = node;
90
- return rest;
91
- }
92
- return node;
93
- }
94
- return visit(input, { enter: transformNode });
95
- };
96
-
97
- const DEFAULT_OPTIMIZERS = [removeDescriptions, removeEmptyNodes, removeLoc];
98
- /**
99
- * This method accept a DocumentNode and applies the optimizations you wish to use.
100
- * You can override the default ones or provide you own optimizers if you wish.
101
- *
102
- * @param node document to optimize
103
- * @param optimizers optional, list of optimizer to use
104
- */
105
- function optimizeDocumentNode(node, optimizers = DEFAULT_OPTIMIZERS) {
106
- let resultNode = node;
107
- for (const optimizer of optimizers) {
108
- if (typeof optimizer !== 'function') {
109
- throw new Error(`Optimizer provided for "optimizeDocumentNode" must be a function!`);
110
- }
111
- const result = optimizer(resultNode);
112
- if (!result) {
113
- throw new Error(`Optimizer provided for "optimizeDocumentNode" returned empty value instead of modified "DocumentNode"!`);
114
- }
115
- resultNode = result;
116
- }
117
- return resultNode;
118
- }
119
-
120
- export { optimizeDocumentNode, removeDescriptions, removeEmptyNodes, removeLoc };
@@ -0,0 +1,15 @@
1
+ import { visit } from 'graphql';
2
+ /**
3
+ * This optimizer removes "loc" fields
4
+ * @param input
5
+ */
6
+ export const removeLoc = input => {
7
+ function transformNode(node) {
8
+ if (node.loc && typeof node.loc === 'object') {
9
+ const { loc, ...rest } = node;
10
+ return rest;
11
+ }
12
+ return node;
13
+ }
14
+ return visit(input, { enter: transformNode });
15
+ };
package/esm/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-tools/optimize",
3
- "version": "1.2.1",
3
+ "version": "1.3.0-alpha-b76ec274.0",
4
4
  "description": "A set of utils for faster development of GraphQL tools",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -15,21 +15,42 @@
15
15
  "directory": "packages/optimize"
16
16
  },
17
17
  "license": "MIT",
18
- "main": "index.js",
19
- "module": "index.mjs",
20
- "typings": "index.d.ts",
18
+ "main": "cjs/index.js",
19
+ "module": "esm/index.js",
20
+ "typings": "typings/index.d.ts",
21
21
  "typescript": {
22
- "definition": "index.d.ts"
22
+ "definition": "typings/index.d.ts"
23
23
  },
24
+ "type": "module",
24
25
  "exports": {
25
26
  ".": {
26
- "require": "./index.js",
27
- "import": "./index.mjs"
27
+ "require": {
28
+ "types": "./typings/index.d.ts",
29
+ "default": "./cjs/index.js"
30
+ },
31
+ "import": {
32
+ "types": "./typings/index.d.ts",
33
+ "default": "./esm/index.js"
34
+ },
35
+ "default": {
36
+ "types": "./typings/index.d.ts",
37
+ "default": "./esm/index.js"
38
+ }
28
39
  },
29
40
  "./*": {
30
- "require": "./*.js",
31
- "import": "./*.mjs"
41
+ "require": {
42
+ "types": "./typings/*.d.ts",
43
+ "default": "./cjs/*.js"
44
+ },
45
+ "import": {
46
+ "types": "./typings/*.d.ts",
47
+ "default": "./esm/*.js"
48
+ },
49
+ "default": {
50
+ "types": "./typings/*.d.ts",
51
+ "default": "./esm/*.js"
52
+ }
32
53
  },
33
54
  "./package.json": "./package.json"
34
55
  }
35
- }
56
+ }
@@ -0,0 +1,5 @@
1
+ export * from './optimize.js';
2
+ export * from './types.js';
3
+ export * from './optimizers/remove-description.js';
4
+ export * from './optimizers/remove-empty-nodes.js';
5
+ export * from './optimizers/remove-loc.js';
@@ -1,5 +1,5 @@
1
1
  import { DocumentNode } from 'graphql';
2
- import { DocumentOptimizer } from './types';
2
+ import { DocumentOptimizer } from './types.js';
3
3
  /**
4
4
  * This method accept a DocumentNode and applies the optimizations you wish to use.
5
5
  * You can override the default ones or provide you own optimizers if you wish.
@@ -1,4 +1,4 @@
1
- import { DocumentOptimizer } from '../types';
1
+ import { DocumentOptimizer } from '../types.js';
2
2
  /**
3
3
  * This optimizer removes "description" field from schema AST definitions.
4
4
  * @param input
@@ -1,4 +1,4 @@
1
- import { DocumentOptimizer } from '../types';
1
+ import { DocumentOptimizer } from '../types.js';
2
2
  /**
3
3
  * This optimizer removes empty nodes/arrays (directives/argument/variableDefinitions) from a given DocumentNode of operation/fragment.
4
4
  * @param input
@@ -1,4 +1,4 @@
1
- import { DocumentOptimizer } from '../types';
1
+ import { DocumentOptimizer } from '../types.js';
2
2
  /**
3
3
  * This optimizer removes "loc" fields
4
4
  * @param input
File without changes
package/README.md DELETED
@@ -1,45 +0,0 @@
1
- # GraphQL Tools: `DocumentNode` Optimizer
2
-
3
- This package is intended to allow developers to optimize `DocumentNode` objects created by `graphql` library.
4
-
5
- It's built as a set of small optimizers you can compose to get the most out of your GraphQL setup.
6
-
7
- The goal of this package is mostly around making optimizations for the way the data is stored in `DocumentNode`, and not to the essence of the `DocumentNode`.
8
-
9
- ## Getting Started
10
-
11
- yarn add -D @graphql-tools/optimize
12
-
13
- ## API
14
-
15
- To get started with this tool, import it and run it over your `DocumentNode`.
16
-
17
- ```ts
18
- import { optimizeDocumentNode } from '@graphql-tools/optimize';
19
-
20
- const myDocument: DocumentNode = { ... }
21
- const optimizedDocument = optimizeDocumentNode(myDocument);
22
- ```
23
-
24
- ### Customizing Optimizers
25
-
26
- By default, we apply all optimizers available in this repo over your document. It shouldn't effect any runtime since we just remove dead or unused areas.
27
-
28
- You can modify the list of optimizers this way:
29
-
30
- ```ts
31
- import { optimizeDocumentNode, removeDescriptions } from '@graphql-tools/optimize';
32
-
33
- const myDocument: DocumentNode = { ... }
34
- const optimizedDocument = optimizeDocumentNode(myDocument, [removeDescriptions]);
35
- ```
36
-
37
- ### Writing your own optimizer
38
-
39
- You can create your own optimizer to manipulate `DocumentNode`, the API signature is pretty simple:
40
-
41
- ```ts
42
- export type DocumentOptimizer = (input: DocumentNode) => DocumentNode
43
- ```
44
-
45
- Take a look at [./optimizers](this directory for inspiration and implementation reference).
package/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './optimize';
2
- export * from './types';
3
- export * from './optimizers/remove-description';
4
- export * from './optimizers/remove-empty-nodes';
5
- export * from './optimizers/remove-loc';
package/index.js DELETED
@@ -1,127 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const graphql = require('graphql');
6
-
7
- /**
8
- * This optimizer removes "description" field from schema AST definitions.
9
- * @param input
10
- */
11
- const removeDescriptions = input => {
12
- function transformNode(node) {
13
- if (node.description) {
14
- node.description = undefined;
15
- }
16
- return node;
17
- }
18
- return graphql.visit(input, {
19
- ScalarTypeDefinition: transformNode,
20
- ObjectTypeDefinition: transformNode,
21
- InterfaceTypeDefinition: transformNode,
22
- UnionTypeDefinition: transformNode,
23
- EnumTypeDefinition: transformNode,
24
- EnumValueDefinition: transformNode,
25
- InputObjectTypeDefinition: transformNode,
26
- InputValueDefinition: transformNode,
27
- FieldDefinition: transformNode,
28
- });
29
- };
30
-
31
- /**
32
- * This optimizer removes empty nodes/arrays (directives/argument/variableDefinitions) from a given DocumentNode of operation/fragment.
33
- * @param input
34
- */
35
- const removeEmptyNodes = input => {
36
- function transformNode(node) {
37
- let resultNode = node;
38
- if (resultNode.directives && Array.isArray(resultNode.directives) && resultNode.directives.length === 0) {
39
- const { directives, ...rest } = resultNode;
40
- resultNode = rest;
41
- }
42
- if (resultNode.arguments && Array.isArray(resultNode.arguments) && resultNode.arguments.length === 0) {
43
- const { arguments: args, ...rest } = resultNode;
44
- resultNode = rest;
45
- }
46
- if (resultNode.variableDefinitions &&
47
- Array.isArray(resultNode.variableDefinitions) &&
48
- resultNode.variableDefinitions.length === 0) {
49
- const { variableDefinitions, ...rest } = resultNode;
50
- resultNode = rest;
51
- }
52
- return resultNode;
53
- }
54
- return graphql.visit(input, {
55
- // Request/Operation:
56
- FragmentDefinition: transformNode,
57
- OperationDefinition: transformNode,
58
- VariableDefinition: transformNode,
59
- Field: transformNode,
60
- FragmentSpread: transformNode,
61
- InlineFragment: transformNode,
62
- Name: transformNode,
63
- Directive: transformNode,
64
- // Schema Definition:
65
- SchemaDefinition: transformNode,
66
- ScalarTypeDefinition: transformNode,
67
- ObjectTypeDefinition: transformNode,
68
- InterfaceTypeDefinition: transformNode,
69
- UnionTypeDefinition: transformNode,
70
- EnumTypeDefinition: transformNode,
71
- EnumValueDefinition: transformNode,
72
- InputObjectTypeDefinition: transformNode,
73
- FieldDefinition: transformNode,
74
- InputValueDefinition: transformNode,
75
- // Schema Extension:
76
- SchemaExtension: transformNode,
77
- ScalarTypeExtension: transformNode,
78
- ObjectTypeExtension: transformNode,
79
- InterfaceTypeExtension: transformNode,
80
- UnionTypeExtension: transformNode,
81
- EnumTypeExtension: transformNode,
82
- InputObjectTypeExtension: transformNode,
83
- });
84
- };
85
-
86
- /**
87
- * This optimizer removes "loc" fields
88
- * @param input
89
- */
90
- const removeLoc = input => {
91
- function transformNode(node) {
92
- if (node.loc && typeof node.loc === 'object') {
93
- const { loc, ...rest } = node;
94
- return rest;
95
- }
96
- return node;
97
- }
98
- return graphql.visit(input, { enter: transformNode });
99
- };
100
-
101
- const DEFAULT_OPTIMIZERS = [removeDescriptions, removeEmptyNodes, removeLoc];
102
- /**
103
- * This method accept a DocumentNode and applies the optimizations you wish to use.
104
- * You can override the default ones or provide you own optimizers if you wish.
105
- *
106
- * @param node document to optimize
107
- * @param optimizers optional, list of optimizer to use
108
- */
109
- function optimizeDocumentNode(node, optimizers = DEFAULT_OPTIMIZERS) {
110
- let resultNode = node;
111
- for (const optimizer of optimizers) {
112
- if (typeof optimizer !== 'function') {
113
- throw new Error(`Optimizer provided for "optimizeDocumentNode" must be a function!`);
114
- }
115
- const result = optimizer(resultNode);
116
- if (!result) {
117
- throw new Error(`Optimizer provided for "optimizeDocumentNode" returned empty value instead of modified "DocumentNode"!`);
118
- }
119
- resultNode = result;
120
- }
121
- return resultNode;
122
- }
123
-
124
- exports.optimizeDocumentNode = optimizeDocumentNode;
125
- exports.removeDescriptions = removeDescriptions;
126
- exports.removeEmptyNodes = removeEmptyNodes;
127
- exports.removeLoc = removeLoc;