submodule-version 2.1.3 → 2.3.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.
Files changed (48) hide show
  1. package/dist/runner/handleErrors/handleBuildGraphError.js +2 -2
  2. package/dist/runner/handleErrors/handleBuildGraphError.js.map +1 -1
  3. package/dist/src/__tests__/versionUtil.test.js +14 -0
  4. package/dist/src/__tests__/versionUtil.test.js.map +1 -1
  5. package/dist/src/buildGraph/GraphError.js.map +1 -0
  6. package/dist/src/buildGraph/buildGraph.d.ts +8 -0
  7. package/dist/src/buildGraph/buildGraph.js +100 -0
  8. package/dist/src/buildGraph/buildGraph.js.map +1 -0
  9. package/dist/src/{Graph → buildGraph}/index.d.ts +1 -1
  10. package/dist/src/buildGraph/index.js +8 -0
  11. package/dist/src/buildGraph/index.js.map +1 -0
  12. package/dist/src/git/git.d.ts +19 -0
  13. package/dist/src/git/git.js +215 -2
  14. package/dist/src/git/git.js.map +1 -1
  15. package/dist/src/index.d.ts +1 -0
  16. package/dist/src/index.js +3 -1
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/{PkgJSONManager.d.ts → pkgJSONManager.d.ts} +2 -4
  19. package/dist/src/pkgJSONManager.js +41 -0
  20. package/dist/src/pkgJSONManager.js.map +1 -0
  21. package/dist/src/sv.d.ts +16 -3
  22. package/dist/src/sv.js +179 -16
  23. package/dist/src/sv.js.map +1 -1
  24. package/dist/src/versionUtil.d.ts +1 -0
  25. package/dist/src/versionUtil.js +9 -0
  26. package/dist/src/versionUtil.js.map +1 -1
  27. package/package.json +1 -1
  28. package/runner/handleErrors/handleBuildGraphError.ts +1 -1
  29. package/src/__tests__/versionUtil.test.ts +17 -0
  30. package/src/buildGraph/buildGraph.ts +150 -0
  31. package/src/{Graph → buildGraph}/index.ts +1 -1
  32. package/src/git/git.ts +331 -2
  33. package/src/index.ts +1 -0
  34. package/src/{PkgJSONManager.ts → pkgJSONManager.ts} +6 -20
  35. package/src/sv.ts +220 -21
  36. package/src/versionUtil.ts +13 -0
  37. package/dist/src/Graph/Graph.d.ts +0 -12
  38. package/dist/src/Graph/Graph.js +0 -85
  39. package/dist/src/Graph/Graph.js.map +0 -1
  40. package/dist/src/Graph/GraphError.js.map +0 -1
  41. package/dist/src/Graph/index.js +0 -8
  42. package/dist/src/Graph/index.js.map +0 -1
  43. package/dist/src/PkgJSONManager.js +0 -53
  44. package/dist/src/PkgJSONManager.js.map +0 -1
  45. package/src/Graph/Graph.ts +0 -121
  46. /package/dist/src/{Graph → buildGraph}/GraphError.d.ts +0 -0
  47. /package/dist/src/{Graph → buildGraph}/GraphError.js +0 -0
  48. /package/src/{Graph → buildGraph}/GraphError.ts +0 -0
package/dist/src/sv.js CHANGED
@@ -1,24 +1,28 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.SV = void 0;
4
- const PkgJSONManager_1 = require("./PkgJSONManager");
5
- const Graph_1 = require("./Graph");
7
+ const path_1 = __importDefault(require("path"));
8
+ const pkgJSONManager_1 = require("./pkgJSONManager");
9
+ const buildGraph_1 = require("./buildGraph");
6
10
  const runOptions_1 = require("./runOptions");
7
11
  const versionUtil_1 = require("./versionUtil");
8
12
  const git_1 = require("./git");
9
13
  class SV {
10
14
  constructor(projectDir, modulesDir = 'addons') {
11
- this.buildGraph = () => this.graph.build();
15
+ this.buildGraph = buildGraph_1.buildGraph;
16
+ // eslint-disable-next-line class-methods-use-this
12
17
  this.install = async (gitUrl, parentModule) => {
13
18
  const { url, version, name } = git_1.git.parseUrl(gitUrl);
14
19
  if (!name) {
15
20
  throw new Error('NOT_A_GIT_URL');
16
21
  }
17
- const targetPkg = await this.pkgJSONManager.read(parentModule);
18
- let installedPkg = await this.pkgJSONManager.read(name);
22
+ const targetPkg = await pkgJSONManager_1.pkgJSONManager.read(parentModule);
23
+ const installedPkg = await pkgJSONManager_1.pkgJSONManager.read(name);
19
24
  if (!installedPkg) {
20
25
  await git_1.git.addSumbmodule(url);
21
- installedPkg = this.pkgJSONManager.read(name);
22
26
  }
23
27
  const versions = await git_1.git.listVersions(name);
24
28
  const latestVersion = versionUtil_1.versionUtil.latest(versions);
@@ -30,11 +34,12 @@ class SV {
30
34
  targetPkg.sv = {};
31
35
  }
32
36
  targetPkg.sv[url] = requestedVersion ? `^${requestedVersion}` : '*';
33
- await this.pkgJSONManager.write(targetPkg, parentModule);
34
- await this.graph.build();
37
+ await pkgJSONManager_1.pkgJSONManager.write(targetPkg, parentModule);
38
+ await (0, buildGraph_1.buildGraph)();
35
39
  };
40
+ // eslint-disable-next-line class-methods-use-this
36
41
  this.update = async () => {
37
- const graph = await this.graph.build();
42
+ const graph = await (0, buildGraph_1.buildGraph)();
38
43
  if (!graph)
39
44
  return;
40
45
  await Promise.all(Object.entries(graph).map(async ([name, data]) => {
@@ -45,25 +50,183 @@ class SV {
45
50
  }
46
51
  }));
47
52
  };
53
+ /*
54
+ * Устанавливает конкретную версию аддона: checkout на тег + запись constraint'а
55
+ * в package.json проекта (иначе buildGraph вернёт latest(used)).
56
+ * constraint по умолчанию — точный пин выбранной версии; при обновлении до
57
+ * последней имеет смысл передать `^<version>`, чтобы новые версии продолжали приходить.
58
+ */
59
+ // eslint-disable-next-line class-methods-use-this
60
+ this.setVersion = async (name, version, constraint) => {
61
+ const versions = await git_1.git.listVersions(name);
62
+ if (!versions.includes(version)) {
63
+ throw new Error('REQUESTED_VERSION_NOT_EXISTS');
64
+ }
65
+ const dir = path_1.default.join(runOptions_1.RunOptions.modulesDir, name);
66
+ const dirty = await git_1.git.hasChanges(dir);
67
+ /*
68
+ * checkout с локальными изменениями транзакционен: git переносит их на
69
+ * новую версию, а если перенести нельзя — отказывается, НЕ трогая дерево.
70
+ * Значит при ошибке мы гарантированно остаёмся на исходной версии с теми
71
+ * же изменениями — сообщаем, что перенос нужно сделать вручную.
72
+ */
73
+ try {
74
+ await git_1.git.checkout(name, version);
75
+ }
76
+ catch (e) {
77
+ if (dirty) {
78
+ throw new git_1.GitError('GIT_DIRTY_SWITCH_CONFLICT');
79
+ }
80
+ throw e;
81
+ }
82
+ const json = await pkgJSONManager_1.pkgJSONManager.read();
83
+ if (!json?.sv)
84
+ return;
85
+ const key = Object.keys(json.sv).find(k => k.endsWith(`${name}.git`));
86
+ const nextConstraint = constraint || version;
87
+ if (key && json.sv[key] !== nextConstraint) {
88
+ json.sv[key] = nextConstraint;
89
+ await pkgJSONManager_1.pkgJSONManager.write(json);
90
+ }
91
+ };
92
+ /*
93
+ * Constraint корневого проекта на аддон (ключ в sv ищем по имени, как в remove).
94
+ */
95
+ // eslint-disable-next-line class-methods-use-this
96
+ this.getConstraint = async (name) => {
97
+ const json = await pkgJSONManager_1.pkgJSONManager.read();
98
+ if (!json?.sv)
99
+ return null;
100
+ const key = Object.keys(json.sv).find(k => k.endsWith(`${name}.git`));
101
+ return key ? json.sv[key] : null;
102
+ };
103
+ // eslint-disable-next-line class-methods-use-this
104
+ this.setConstraint = async (name, constraint) => {
105
+ const json = await pkgJSONManager_1.pkgJSONManager.read();
106
+ if (!json?.sv)
107
+ return;
108
+ const key = Object.keys(json.sv).find(k => k.endsWith(`${name}.git`));
109
+ if (key && json.sv[key] !== constraint) {
110
+ json.sv[key] = constraint;
111
+ await pkgJSONManager_1.pkgJSONManager.write(json);
112
+ }
113
+ };
114
+ // eslint-disable-next-line class-methods-use-this
48
115
  this.remove = async (submoduleName, parentModule) => {
49
116
  await git_1.git.rm(submoduleName);
50
- const json = await this.pkgJSONManager.read(parentModule);
117
+ const json = await pkgJSONManager_1.pkgJSONManager.read(parentModule);
51
118
  if (!json.sv)
52
119
  return;
53
- const sv = Object.keys(json.sv).reduce((acc, k) => {
120
+ json.sv = Object.keys(json.sv).reduce((acc, k) => {
54
121
  if (k.endsWith(`${submoduleName}.git`)) {
55
122
  return acc;
56
123
  }
57
124
  return { ...acc, [k]: json.sv[k] };
58
125
  }, {});
59
- json.sv = sv;
60
- await this.pkgJSONManager.write(json, parentModule);
61
- await this.graph.build();
126
+ await pkgJSONManager_1.pkgJSONManager.write(json, parentModule);
127
+ await (0, buildGraph_1.buildGraph)();
128
+ };
129
+ // eslint-disable-next-line class-methods-use-this
130
+ this.hasChanges = async (module) => {
131
+ const dir = module
132
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
133
+ : runOptions_1.RunOptions.cwd;
134
+ /* Сначала дешёвая проверка рабочей копии; если чисто — смотрим,
135
+ * нет ли незапушенных коммитов (идёт fetch в remote) */
136
+ if (await git_1.git.hasChanges(dir))
137
+ return true;
138
+ return git_1.git.hasUnpushedCommits(dir);
139
+ };
140
+ // eslint-disable-next-line class-methods-use-this
141
+ this.hasUncommittedChanges = async (module) => {
142
+ const dir = module
143
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
144
+ : runOptions_1.RunOptions.cwd;
145
+ return git_1.git.hasChanges(dir);
146
+ };
147
+ // eslint-disable-next-line class-methods-use-this
148
+ this.currentVersion = async (module) => {
149
+ const dir = module
150
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
151
+ : runOptions_1.RunOptions.cwd;
152
+ const tags = await git_1.git.tagsAtHead(dir);
153
+ return versionUtil_1.versionUtil.latest(tags) || null;
154
+ };
155
+ // eslint-disable-next-line class-methods-use-this
156
+ this.latestVersion = async (module) => {
157
+ const dir = module
158
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
159
+ : runOptions_1.RunOptions.cwd;
160
+ const versions = await git_1.git.listTags(dir);
161
+ return versionUtil_1.versionUtil.latest(versions) || '0.0.0';
162
+ };
163
+ // eslint-disable-next-line class-methods-use-this
164
+ this.getRemote = async (module) => {
165
+ const dir = module
166
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
167
+ : runOptions_1.RunOptions.cwd;
168
+ return git_1.git.getRemote(dir);
169
+ };
170
+ this.isPublished = async (module) => {
171
+ const dir = module
172
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
173
+ : runOptions_1.RunOptions.cwd;
174
+ if (!await git_1.git.isGitRepo(dir))
175
+ return false;
176
+ return !!(await this.getRemote(module));
177
+ };
178
+ this.publish = async (opts) => {
179
+ const { module, repoUrl, message, bump } = opts;
180
+ const dir = module
181
+ ? path_1.default.join(runOptions_1.RunOptions.modulesDir, module)
182
+ : runOptions_1.RunOptions.cwd;
183
+ if (!await this.isPublished(module)) {
184
+ if (!repoUrl) {
185
+ throw new git_1.GitError('GIT_REPO_URL_REQUIRED');
186
+ }
187
+ if (!await git_1.git.isGitRepo(dir)) {
188
+ await git_1.git.init(dir);
189
+ }
190
+ await git_1.git.addRemote(dir, repoUrl);
191
+ }
192
+ /* Публикация не последней версии запрещена: HEAD на теге, отличном
193
+ * от последнего, — обновлять такую базу можно только вручную */
194
+ const currentTag = await this.currentVersion(module);
195
+ const latestKnown = await this.latestVersion(module);
196
+ if (currentTag && latestKnown && currentTag !== latestKnown) {
197
+ throw new git_1.GitError('GIT_NOT_LATEST_VERSION');
198
+ }
199
+ /* Аддоны checkout'нуты на тег: поднимаем ветку до sync/commit,
200
+ * иначе коммиты и push уйдут в detached HEAD */
201
+ await git_1.git.ensureBranch(dir);
202
+ if (await git_1.git.isRemoteAhead(dir)) {
203
+ await git_1.git.pullRebaseAutostash(dir);
204
+ }
205
+ const dirty = await git_1.git.hasChanges(dir);
206
+ const headTag = await this.currentVersion(module);
207
+ /* Дерево чистое и HEAD уже отмечен версионным тегом:
208
+ * коммитить и бампить нечего — просто доставляем ветку и тег на remote */
209
+ if (!dirty && headTag) {
210
+ await git_1.git.push(dir, headTag);
211
+ return headTag;
212
+ }
213
+ const next = versionUtil_1.versionUtil.bump(await this.latestVersion(module), bump);
214
+ /* Фиксируем версию и в package.json, чтобы она не расходилась с git-тегом */
215
+ const pkg = await pkgJSONManager_1.pkgJSONManager.read(module);
216
+ if (pkg) {
217
+ pkg.version = next;
218
+ await pkgJSONManager_1.pkgJSONManager.write(pkg, module);
219
+ }
220
+ /* Перечитываем: запись версии в package.json сама по себе даёт изменения */
221
+ if (await git_1.git.hasChanges(dir)) {
222
+ await git_1.git.commitAll(dir, message || 'Update');
223
+ }
224
+ await git_1.git.addTag(dir, next);
225
+ await git_1.git.push(dir, next);
226
+ return next;
62
227
  };
63
228
  runOptions_1.RunOptions.cwd = projectDir;
64
229
  runOptions_1.RunOptions.modulesDir = modulesDir;
65
- this.pkgJSONManager = new PkgJSONManager_1.PkgJSONManager();
66
- this.graph = new Graph_1.Graph(this.pkgJSONManager);
67
230
  }
68
231
  }
69
232
  exports.SV = SV;
@@ -1 +1 @@
1
- {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare const versionUtil: {
8
8
  pick: (allVersions: string[], v: string) => string[];
9
9
  validate: (v: string, relative?: boolean) => boolean;
10
10
  latest: (versions: string[]) => string;
11
+ bump: (version: string, kind: "release" | "minor" | "major") => string;
11
12
  };
12
13
  export {};
@@ -59,10 +59,19 @@ const latest = (versions) => (cleanup([...versions].sort((v1, v2) => {
59
59
  return v2Val - v1Val;
60
60
  }, 0);
61
61
  })[0] || ''));
62
+ const bump = (version, kind) => {
63
+ const [major, minor, patch] = toArray(version);
64
+ if (kind === 'major')
65
+ return `${major + 1}.0.0`;
66
+ if (kind === 'minor')
67
+ return `${major}.${minor + 1}.0`;
68
+ return `${major}.${minor}.${patch + 1}`;
69
+ };
62
70
  exports.versionUtil = {
63
71
  compare,
64
72
  pick,
65
73
  validate,
66
74
  latest,
75
+ bump,
67
76
  };
68
77
  //# sourceMappingURL=versionUtil.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "submodule-version",
3
3
  "description": "Git <S>ubmodule <V>ersioning tool",
4
- "version": "2.1.3",
4
+ "version": "2.3.0",
5
5
  "repository": "github:guljeny/submodule-version",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
@@ -1,4 +1,4 @@
1
- import { GraphError } from '../../src/Graph';
1
+ import { GraphError } from '../../src/buildGraph';
2
2
  import { log } from '../log';
3
3
  import chalk from 'chalk';
4
4
 
@@ -58,3 +58,20 @@ describe('Compare', () => {
58
58
  expect(versionUtil.compare([1, 2, 3], [1, 2, 4], 2)).toBe(false);
59
59
  });
60
60
  });
61
+
62
+ describe('Bump', () => {
63
+ it('Release', () => {
64
+ expect(versionUtil.bump('0.0.0', 'release')).toBe('0.0.1');
65
+ expect(versionUtil.bump('1.2.3', 'release')).toBe('1.2.4');
66
+ });
67
+
68
+ it('Minor', () => {
69
+ expect(versionUtil.bump('0.0.0', 'minor')).toBe('0.1.0');
70
+ expect(versionUtil.bump('1.2.3', 'minor')).toBe('1.3.0');
71
+ });
72
+
73
+ it('Major', () => {
74
+ expect(versionUtil.bump('0.0.0', 'major')).toBe('1.0.0');
75
+ expect(versionUtil.bump('1.2.3', 'major')).toBe('2.0.0');
76
+ });
77
+ });
@@ -0,0 +1,150 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { pkgJSONManager } from '../pkgJSONManager';
4
+ import { versionUtil } from '../versionUtil';
5
+ import { git } from '../git';
6
+ import { RunOptions } from '../runOptions';
7
+ import { GraphError } from './GraphError';
8
+
9
+ type TSV = Record<string, string>;
10
+
11
+ interface ITreeEntry {
12
+ meta: {
13
+ version: string;
14
+ sv: TSV;
15
+ };
16
+ parents: Record<string, string>;
17
+ }
18
+
19
+ type TBaseTree = Record<string, ITreeEntry>;
20
+
21
+ export interface IGraphEntry {
22
+ versions: string[];
23
+ parents: Record<string, string>;
24
+ used: string[];
25
+ allowedVersions: string[];
26
+ version: string;
27
+ }
28
+
29
+ export const buildGraph = async (): Promise<Record<string, IGraphEntry>> => {
30
+ const baseJson = await pkgJSONManager.read();
31
+ const baseTree: TBaseTree = {};
32
+
33
+ if (!baseJson) {
34
+ throw new Error('NOT_A_NPM');
35
+ }
36
+
37
+ if (!baseJson.sv) {
38
+ /** There is no dependencies, graph is empty */
39
+ return {};
40
+ }
41
+
42
+ const recursiveBuilder = async (dependencies: TSV = {}, parent = '*') => {
43
+ await Promise.all(
44
+ Object.entries(dependencies).map(async ([url, version]) => {
45
+ const { name } = git.parseUrl(url);
46
+ const { cwd, modulesDir } = RunOptions;
47
+ const moduleDir = path.join(cwd, modulesDir, name);
48
+ const isInstalled = fs.existsSync(moduleDir);
49
+
50
+ if (version && !versionUtil.validate(version, true)) {
51
+ throw new GraphError('UNKNOWN_VERSION', { name, version, parent });
52
+ }
53
+
54
+ if (!isInstalled) {
55
+ await git.addSumbmodule(url);
56
+ }
57
+
58
+ const existEntry = baseTree[name] || null;
59
+
60
+ const mJson = existEntry
61
+ ? null
62
+ : await pkgJSONManager.read(name);
63
+
64
+ const meta = {
65
+ version: existEntry?.meta.version
66
+ || mJson?.version
67
+ || version
68
+ || '*',
69
+ sv: existEntry?.meta.sv || mJson?.sv || {},
70
+ };
71
+
72
+ const parents = existEntry?.parents || {};
73
+
74
+ baseTree[name] = {
75
+ meta,
76
+ parents: { ...parents, [parent]: version },
77
+ };
78
+
79
+ await recursiveBuilder(meta.sv, name);
80
+ }),
81
+ );
82
+ };
83
+
84
+ await recursiveBuilder(baseJson.sv, baseJson.name);
85
+
86
+ const graph = await Promise.all(
87
+ Object.entries(baseTree).map(async ([name, data]) => {
88
+ const versions = await git.listVersions(name);
89
+ const { parents, meta } = data;
90
+
91
+ const used = Object.entries(parents).reduce((selective, [, v]) => (
92
+ versionUtil.pick(selective, v)
93
+ ), versions);
94
+
95
+ const allowedVersions = Object.entries(parents)
96
+ .filter(([parent]) => parent !== baseJson.name)
97
+ .reduce((selective, [, v]) => (
98
+ versionUtil.pick(selective, v)
99
+ ), versions);
100
+
101
+ // No compatible version found and module has version tags
102
+ if (!used.length && versions.length) {
103
+ throw new GraphError('VERSION_CONFLICT', { parents, name });
104
+ }
105
+
106
+ /**
107
+ * Текущая версия — тег, на котором реально стоит HEAD. Сравнивать с
108
+ * package.json нельзя: его version не обязан совпадать с тегами,
109
+ * и такое сравнение отрывает HEAD (checkout на тег) при каждом buildGraph
110
+ * Checkout делаем только на чистой копии без локальной работы:
111
+ * незакоммиченные изменения или незапушенные коммиты
112
+ * важнее резолва версий.
113
+ */
114
+ const current = await git.currentVersion(name);
115
+
116
+ if (!current || !used.includes(current)) {
117
+ const latest = versionUtil.latest(used);
118
+
119
+ const moduleDir = path.join(
120
+ RunOptions.cwd,
121
+ RunOptions.modulesDir,
122
+ name,
123
+ );
124
+
125
+ const [hasChanges, hasUnpushed] = await Promise.all([
126
+ git.hasChanges(moduleDir),
127
+ git.hasUnpushedCommits(moduleDir),
128
+ ]);
129
+
130
+ const allChangesDone = !hasChanges && !hasUnpushed;
131
+
132
+ if (latest && latest !== current && allChangesDone) {
133
+ await git.checkout(name, latest);
134
+ }
135
+ }
136
+
137
+ const version = current || meta.version;
138
+
139
+ return {
140
+ name,
141
+ data: { versions, parents, used, allowedVersions, version },
142
+ };
143
+ }),
144
+ );
145
+
146
+ return graph.reduce((acc, { name, data }) => ({
147
+ ...acc,
148
+ [name]: data,
149
+ }), {} as Record<string, IGraphEntry>);
150
+ };
@@ -1,2 +1,2 @@
1
- export { Graph } from './Graph';
1
+ export { buildGraph } from './buildGraph';
2
2
  export { GraphError } from './GraphError';