@ensdomains/ensjs 3.0.0-alpha.15 → 3.0.0-alpha.16

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.
@@ -1,6 +1,8 @@
1
- export declare const enter: (node: any) => any;
2
- export declare const requestMiddleware: (visit: any, parse: any) => (request: any) => any;
3
- export declare const responseMiddleware: (traverse: any) => (response: any) => any;
1
+ import type { parse as Parse, print as Print, SelectionSetNode, visit as Visit } from 'graphql';
2
+ import type Traverse from 'traverse';
3
+ export declare const enter: (node: SelectionSetNode) => SelectionSetNode | undefined;
4
+ export declare const requestMiddleware: (visit: typeof Visit, parse: typeof Parse, print: typeof Print) => (request: any) => any;
5
+ export declare const responseMiddleware: (traverse: typeof Traverse) => (response: any) => any;
4
6
  export default class GqlManager {
5
7
  gql: any;
6
8
  client?: any | null;
@@ -24,7 +24,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.responseMiddleware = exports.requestMiddleware = exports.enter = void 0;
27
- // @ts-nocheck
28
27
  const normalise_1 = require("./utils/normalise");
29
28
  const generateSelection = (selection) => ({
30
29
  kind: 'Field',
@@ -38,25 +37,34 @@ const generateSelection = (selection) => ({
38
37
  selectionSet: undefined,
39
38
  });
40
39
  const enter = (node) => {
41
- if (node.kind === 'SelectionSet') {
42
- const id = node.selections.find((x) => x.name && x.name.value === 'id');
43
- const name = node.selections.find((x) => x.name && x.name.value === 'name');
44
- if (!id && name) {
45
- node.selections = [...node.selections, generateSelection('id')];
46
- return node;
40
+ let hasName = false;
41
+ let hasId = false;
42
+ for (const selection of node.selections) {
43
+ if ('name' in selection) {
44
+ if (selection.name.value === 'name')
45
+ hasName = true;
46
+ else if (selection.name.value === 'id')
47
+ hasId = true;
47
48
  }
48
49
  }
50
+ if (hasName && !hasId) {
51
+ node.selections = [...node.selections, generateSelection('id')];
52
+ return node;
53
+ }
49
54
  };
50
55
  exports.enter = enter;
51
- const requestMiddleware = (visit, parse) => (request) => {
56
+ const requestMiddleware = (visit, parse, print) => (request) => {
52
57
  const requestBody = JSON.parse(request.body);
53
58
  const rawQuery = requestBody.query;
54
59
  const parsedQuery = parse(rawQuery);
55
- const updatedQuery = visit(parsedQuery, { enter: exports.enter });
56
- const updatedBody = { ...requestBody, query: updatedQuery.loc.source.body };
60
+ const updatedQuery = visit(parsedQuery, {
61
+ SelectionSet: {
62
+ enter: exports.enter,
63
+ },
64
+ });
57
65
  return {
58
66
  ...request,
59
- body: JSON.stringify(updatedBody),
67
+ body: JSON.stringify({ ...requestBody, query: print(updatedQuery) }),
60
68
  };
61
69
  };
62
70
  exports.requestMiddleware = requestMiddleware;
@@ -81,13 +89,13 @@ class GqlManager {
81
89
  client = null;
82
90
  setUrl = async (url) => {
83
91
  if (url) {
84
- const [imported, traverse, { visit, parse }] = await Promise.all([
92
+ const [imported, traverse, { visit, parse, print }] = await Promise.all([
85
93
  Promise.resolve().then(() => __importStar(require('graphql-request'))),
86
94
  Promise.resolve().then(() => __importStar(require('traverse'))),
87
95
  Promise.resolve().then(() => __importStar(require('graphql/language'))),
88
96
  ]);
89
97
  this.client = new imported.GraphQLClient(url, {
90
- requestMiddleware: (0, exports.requestMiddleware)(visit, parse),
98
+ requestMiddleware: (0, exports.requestMiddleware)(visit, parse, print),
91
99
  responseMiddleware: (0, exports.responseMiddleware)(traverse.default),
92
100
  });
93
101
  this.gql = imported.gql;
@@ -1,6 +1,8 @@
1
- export declare const enter: (node: any) => any;
2
- export declare const requestMiddleware: (visit: any, parse: any) => (request: any) => any;
3
- export declare const responseMiddleware: (traverse: any) => (response: any) => any;
1
+ import type { parse as Parse, print as Print, SelectionSetNode, visit as Visit } from 'graphql';
2
+ import type Traverse from 'traverse';
3
+ export declare const enter: (node: SelectionSetNode) => SelectionSetNode | undefined;
4
+ export declare const requestMiddleware: (visit: typeof Visit, parse: typeof Parse, print: typeof Print) => (request: any) => any;
5
+ export declare const responseMiddleware: (traverse: typeof Traverse) => (response: any) => any;
4
6
  export default class GqlManager {
5
7
  gql: any;
6
8
  client?: any | null;
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  import { namehash } from './utils/normalise';
3
2
  const generateSelection = (selection) => ({
4
3
  kind: 'Field',
@@ -12,24 +11,33 @@ const generateSelection = (selection) => ({
12
11
  selectionSet: undefined,
13
12
  });
14
13
  export const enter = (node) => {
15
- if (node.kind === 'SelectionSet') {
16
- const id = node.selections.find((x) => x.name && x.name.value === 'id');
17
- const name = node.selections.find((x) => x.name && x.name.value === 'name');
18
- if (!id && name) {
19
- node.selections = [...node.selections, generateSelection('id')];
20
- return node;
14
+ let hasName = false;
15
+ let hasId = false;
16
+ for (const selection of node.selections) {
17
+ if ('name' in selection) {
18
+ if (selection.name.value === 'name')
19
+ hasName = true;
20
+ else if (selection.name.value === 'id')
21
+ hasId = true;
21
22
  }
22
23
  }
24
+ if (hasName && !hasId) {
25
+ node.selections = [...node.selections, generateSelection('id')];
26
+ return node;
27
+ }
23
28
  };
24
- export const requestMiddleware = (visit, parse) => (request) => {
29
+ export const requestMiddleware = (visit, parse, print) => (request) => {
25
30
  const requestBody = JSON.parse(request.body);
26
31
  const rawQuery = requestBody.query;
27
32
  const parsedQuery = parse(rawQuery);
28
- const updatedQuery = visit(parsedQuery, { enter });
29
- const updatedBody = { ...requestBody, query: updatedQuery.loc.source.body };
33
+ const updatedQuery = visit(parsedQuery, {
34
+ SelectionSet: {
35
+ enter,
36
+ },
37
+ });
30
38
  return {
31
39
  ...request,
32
- body: JSON.stringify(updatedBody),
40
+ body: JSON.stringify({ ...requestBody, query: print(updatedQuery) }),
33
41
  };
34
42
  };
35
43
  export const responseMiddleware = (traverse) => (response) => {
@@ -53,13 +61,13 @@ export default class GqlManager {
53
61
  this.client = null;
54
62
  this.setUrl = async (url) => {
55
63
  if (url) {
56
- const [imported, traverse, { visit, parse }] = await Promise.all([
64
+ const [imported, traverse, { visit, parse, print }] = await Promise.all([
57
65
  import('graphql-request'),
58
66
  import('traverse'),
59
67
  import('graphql/language'),
60
68
  ]);
61
69
  this.client = new imported.GraphQLClient(url, {
62
- requestMiddleware: requestMiddleware(visit, parse),
70
+ requestMiddleware: requestMiddleware(visit, parse, print),
63
71
  responseMiddleware: responseMiddleware(traverse.default),
64
72
  });
65
73
  this.gql = imported.gql;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ensdomains/ensjs",
3
- "version": "3.0.0-alpha.15",
3
+ "version": "3.0.0-alpha.16",
4
4
  "description": "ENS javascript library for contract interaction",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "types": "./dist/cjs/index.d.ts",
@@ -1,7 +1,7 @@
1
+ import { parse, print, visit } from 'graphql'
1
2
  import traverse from 'traverse'
2
- import { visit, parse } from 'graphql'
3
3
 
4
- import { requestMiddleware, responseMiddleware, enter } from './GqlManager'
4
+ import { requestMiddleware, responseMiddleware } from './GqlManager'
5
5
  import { namehash } from './utils/normalise'
6
6
 
7
7
  describe('GqlManager', () => {
@@ -153,8 +153,9 @@ query getNames($id: ID!, $expiryDate: Int) {
153
153
 
154
154
  describe('requestMiddleware', () => {
155
155
  it('should add id to a SelectionSet if name is present and id is not', () => {
156
- const result = requestMiddleware(visit, parse)(mockRequest)
157
- expect(result.body.includes('id')).toBe(true)
156
+ const result = requestMiddleware(visit, parse, print)(mockRequest)
157
+ const body = result.body as string
158
+ expect(body.match(/domain.*id.*id.*domains.*id.*id/)?.length).toBe(1)
158
159
  })
159
160
  })
160
161
  describe('responseMiddleware', () => {
package/src/GqlManager.ts CHANGED
@@ -1,10 +1,17 @@
1
- // @ts-nocheck
1
+ import type {
2
+ Kind,
3
+ parse as Parse,
4
+ print as Print,
5
+ SelectionSetNode,
6
+ visit as Visit,
7
+ } from 'graphql'
8
+ import type Traverse from 'traverse'
2
9
  import { namehash } from './utils/normalise'
3
10
 
4
11
  const generateSelection = (selection: any) => ({
5
- kind: 'Field',
12
+ kind: 'Field' as Kind.FIELD,
6
13
  name: {
7
- kind: 'Name',
14
+ kind: 'Name' as Kind.NAME,
8
15
  value: selection,
9
16
  },
10
17
  arguments: [],
@@ -13,47 +20,58 @@ const generateSelection = (selection: any) => ({
13
20
  selectionSet: undefined,
14
21
  })
15
22
 
16
- export const enter = (node: any) => {
17
- if (node.kind === 'SelectionSet') {
18
- const id = node.selections.find((x) => x.name && x.name.value === 'id')
19
- const name = node.selections.find((x) => x.name && x.name.value === 'name')
23
+ export const enter = (node: SelectionSetNode) => {
24
+ let hasName = false
25
+ let hasId = false
20
26
 
21
- if (!id && name) {
22
- node.selections = [...node.selections, generateSelection('id')]
23
- return node
27
+ for (const selection of node.selections) {
28
+ if ('name' in selection) {
29
+ if (selection.name.value === 'name') hasName = true
30
+ else if (selection.name.value === 'id') hasId = true
24
31
  }
25
32
  }
33
+
34
+ if (hasName && !hasId) {
35
+ node.selections = [...node.selections, generateSelection('id')]
36
+ return node
37
+ }
26
38
  }
27
39
 
28
- export const requestMiddleware = (visit, parse) => (request: any) => {
29
- const requestBody = JSON.parse(request.body)
30
- const rawQuery = requestBody.query
31
- const parsedQuery = parse(rawQuery)
32
- const updatedQuery = visit(parsedQuery, { enter })
33
- const updatedBody = { ...requestBody, query: updatedQuery.loc.source.body }
40
+ export const requestMiddleware =
41
+ (visit: typeof Visit, parse: typeof Parse, print: typeof Print) =>
42
+ (request: any) => {
43
+ const requestBody = JSON.parse(request.body)
44
+ const rawQuery = requestBody.query
45
+ const parsedQuery = parse(rawQuery)
46
+ const updatedQuery = visit(parsedQuery, {
47
+ SelectionSet: {
48
+ enter,
49
+ },
50
+ })
34
51
 
35
- return {
36
- ...request,
37
- body: JSON.stringify(updatedBody),
52
+ return {
53
+ ...request,
54
+ body: JSON.stringify({ ...requestBody, query: print(updatedQuery) }),
55
+ }
38
56
  }
39
- }
40
57
 
41
- export const responseMiddleware = (traverse) => (response: any) => {
42
- traverse(response).forEach(function (responseItem: any) {
43
- if (responseItem instanceof Object && responseItem.name) {
44
- //Name already in hashed form
45
- if (responseItem.name && responseItem.name.includes('[')) {
46
- return
47
- }
58
+ export const responseMiddleware =
59
+ (traverse: typeof Traverse) => (response: any) => {
60
+ traverse(response).forEach(function (responseItem: any) {
61
+ if (responseItem instanceof Object && responseItem.name) {
62
+ //Name already in hashed form
63
+ if (responseItem.name && responseItem.name.includes('[')) {
64
+ return
65
+ }
48
66
 
49
- const hashedName = namehash(responseItem.name)
50
- if (responseItem.id !== hashedName) {
51
- this.update({ ...responseItem, name: hashedName, invalidName: true })
67
+ const hashedName = namehash(responseItem.name)
68
+ if (responseItem.id !== hashedName) {
69
+ this.update({ ...responseItem, name: hashedName, invalidName: true })
70
+ }
52
71
  }
53
- }
54
- })
55
- return response
56
- }
72
+ })
73
+ return response
74
+ }
57
75
 
58
76
  export default class GqlManager {
59
77
  public gql: any = () => null
@@ -61,14 +79,14 @@ export default class GqlManager {
61
79
 
62
80
  public setUrl = async (url: string | null) => {
63
81
  if (url) {
64
- const [imported, traverse, { visit, parse }] = await Promise.all([
82
+ const [imported, traverse, { visit, parse, print }] = await Promise.all([
65
83
  import('graphql-request'),
66
84
  import('traverse'),
67
85
  import('graphql/language'),
68
86
  ])
69
87
 
70
88
  this.client = new imported.GraphQLClient(url, {
71
- requestMiddleware: requestMiddleware(visit, parse),
89
+ requestMiddleware: requestMiddleware(visit, parse, print),
72
90
  responseMiddleware: responseMiddleware(traverse.default),
73
91
  })
74
92
  this.gql = imported.gql