@mo36924/graphql-plugin 5.4.0 → 5.4.2
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/dist/index.cjs +30 -6
- package/dist/index.d.ts +3 -3
- package/dist/index.js +26 -2
- package/dist/volar.cjs +154 -0
- package/dist/volar.d.ts +12 -0
- package/dist/volar.js +151 -0
- package/package.json +10 -3
package/dist/index.cjs
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
var graphql = require('@mo36924/graphql');
|
4
|
-
var graphql$
|
3
|
+
var graphql$1 = require('@mo36924/graphql');
|
4
|
+
var graphql$2 = require('graphql');
|
5
5
|
var graphqlLanguageService = require('graphql-language-service');
|
6
|
+
var packages_graphqlPlugin_dist_volar = require('./volar.cjs');
|
7
|
+
require('@volar/typescript/lib/quickstart/createLanguageServicePlugin');
|
8
|
+
require('typescript');
|
6
9
|
|
7
|
-
const
|
10
|
+
const graphql = ({ typescript: ts })=>{
|
8
11
|
const isQueryTag = (node)=>ts.isTaggedTemplateExpression(node) && ts.isIdentifier(node.tag) && node.tag.escapedText === "gql";
|
9
12
|
const getScriptElementKind = (completionItemKind)=>{
|
10
13
|
switch(completionItemKind){
|
@@ -65,7 +68,7 @@ const init = ({ typescript: ts })=>{
|
|
65
68
|
};
|
66
69
|
return {
|
67
70
|
create (info) {
|
68
|
-
const { schema } = graphql.getSchema(info.project.getCurrentDirectory());
|
71
|
+
const { schema } = graphql$1.getSchema(info.project.getCurrentDirectory());
|
69
72
|
const languageService = info.languageService;
|
70
73
|
if (!schema) {
|
71
74
|
return languageService;
|
@@ -198,7 +201,7 @@ const init = ({ typescript: ts })=>{
|
|
198
201
|
});
|
199
202
|
}
|
200
203
|
} catch (error) {
|
201
|
-
if (error instanceof graphql$
|
204
|
+
if (error instanceof graphql$2.GraphQLError) {
|
202
205
|
diagnostics.push({
|
203
206
|
category: ts.DiagnosticCategory.Error,
|
204
207
|
code: 9999,
|
@@ -220,4 +223,25 @@ const init = ({ typescript: ts })=>{
|
|
220
223
|
};
|
221
224
|
};
|
222
225
|
|
223
|
-
|
226
|
+
const pluginModuleFactory = (mod)=>{
|
227
|
+
const pluginModules = [
|
228
|
+
graphql(mod),
|
229
|
+
packages_graphqlPlugin_dist_volar.volar(mod)
|
230
|
+
];
|
231
|
+
return {
|
232
|
+
create (createInfo) {
|
233
|
+
return pluginModules.reduce((languageService, module)=>module.create({
|
234
|
+
...createInfo,
|
235
|
+
languageService
|
236
|
+
}), createInfo.languageService);
|
237
|
+
},
|
238
|
+
getExternalFiles (proj, updateLevel) {
|
239
|
+
return pluginModules.flatMap((module)=>module.getExternalFiles?.(proj, updateLevel) ?? []);
|
240
|
+
},
|
241
|
+
onConfigurationChanged (config) {
|
242
|
+
pluginModules.forEach((module)=>module.onConfigurationChanged?.(config));
|
243
|
+
}
|
244
|
+
};
|
245
|
+
};
|
246
|
+
|
247
|
+
module.exports = pluginModuleFactory;
|
package/dist/index.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
1
|
+
import ts from 'typescript';
|
2
2
|
|
3
|
-
declare const
|
3
|
+
declare const pluginModuleFactory: ts.server.PluginModuleFactory;
|
4
4
|
|
5
|
-
export {
|
5
|
+
export { pluginModuleFactory as default };
|
package/dist/index.js
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
import { getSchema } from '@mo36924/graphql';
|
2
2
|
import { GraphQLError } from 'graphql';
|
3
3
|
import { getDiagnostics, DIAGNOSTIC_SEVERITY, Position, getAutocompleteSuggestions, CompletionItemKind, getTokenAtPosition, getHoverInformation } from 'graphql-language-service';
|
4
|
+
import { volar } from './volar.js';
|
5
|
+
import '@volar/typescript/lib/quickstart/createLanguageServicePlugin';
|
6
|
+
import 'typescript';
|
4
7
|
|
5
|
-
const
|
8
|
+
const graphql = ({ typescript: ts })=>{
|
6
9
|
const isQueryTag = (node)=>ts.isTaggedTemplateExpression(node) && ts.isIdentifier(node.tag) && node.tag.escapedText === "gql";
|
7
10
|
const getScriptElementKind = (completionItemKind)=>{
|
8
11
|
switch(completionItemKind){
|
@@ -218,4 +221,25 @@ const init = ({ typescript: ts })=>{
|
|
218
221
|
};
|
219
222
|
};
|
220
223
|
|
221
|
-
|
224
|
+
const pluginModuleFactory = (mod)=>{
|
225
|
+
const pluginModules = [
|
226
|
+
graphql(mod),
|
227
|
+
volar(mod)
|
228
|
+
];
|
229
|
+
return {
|
230
|
+
create (createInfo) {
|
231
|
+
return pluginModules.reduce((languageService, module)=>module.create({
|
232
|
+
...createInfo,
|
233
|
+
languageService
|
234
|
+
}), createInfo.languageService);
|
235
|
+
},
|
236
|
+
getExternalFiles (proj, updateLevel) {
|
237
|
+
return pluginModules.flatMap((module)=>module.getExternalFiles?.(proj, updateLevel) ?? []);
|
238
|
+
},
|
239
|
+
onConfigurationChanged (config) {
|
240
|
+
pluginModules.forEach((module)=>module.onConfigurationChanged?.(config));
|
241
|
+
}
|
242
|
+
};
|
243
|
+
};
|
244
|
+
|
245
|
+
export { pluginModuleFactory as default };
|
package/dist/volar.cjs
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var graphql = require('@mo36924/graphql');
|
4
|
+
var createLanguageServicePlugin = require('@volar/typescript/lib/quickstart/createLanguageServicePlugin');
|
5
|
+
var graphql$1 = require('graphql');
|
6
|
+
var ts = require('typescript');
|
7
|
+
|
8
|
+
/// <reference types="@volar/typescript" />
|
9
|
+
const tag = "gql";
|
10
|
+
const data = {
|
11
|
+
completion: true,
|
12
|
+
format: false,
|
13
|
+
navigation: true,
|
14
|
+
semantic: true,
|
15
|
+
structure: true,
|
16
|
+
verification: true
|
17
|
+
};
|
18
|
+
const getText = (snapshot)=>snapshot.getText(0, snapshot.getLength());
|
19
|
+
const getCodeMappings = (text)=>[
|
20
|
+
{
|
21
|
+
sourceOffsets: [
|
22
|
+
0
|
23
|
+
],
|
24
|
+
generatedOffsets: [
|
25
|
+
0
|
26
|
+
],
|
27
|
+
lengths: [
|
28
|
+
text.length
|
29
|
+
],
|
30
|
+
data
|
31
|
+
}
|
32
|
+
];
|
33
|
+
const getLanguagePlugin = (cwd)=>{
|
34
|
+
let { schema } = graphql.getSchema(cwd);
|
35
|
+
schema ?? (schema = graphql$1.buildSchema("scalar _"));
|
36
|
+
const transform = (sourceFile)=>{
|
37
|
+
const code = sourceFile.text;
|
38
|
+
const sourceOffsets = [
|
39
|
+
0
|
40
|
+
];
|
41
|
+
const generatedOffsets = [
|
42
|
+
0
|
43
|
+
];
|
44
|
+
const lengths = [];
|
45
|
+
let offset = 0;
|
46
|
+
let generatedCode = "";
|
47
|
+
ts.forEachChild(sourceFile, function cb(node) {
|
48
|
+
if (ts.isTaggedTemplateExpression(node) && ts.isIdentifier(node.tag) && node.tag.text === tag && !node.typeArguments) {
|
49
|
+
const typeArguments = graphql.getGqlTypeArguments(schema, node);
|
50
|
+
if (typeArguments) {
|
51
|
+
const end = node.tag.end;
|
52
|
+
generatedCode += code.substring(offset, end) + typeArguments;
|
53
|
+
sourceOffsets.push(end);
|
54
|
+
generatedOffsets.push(generatedCode.length);
|
55
|
+
lengths.push(end - offset);
|
56
|
+
offset = end;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
ts.forEachChild(node, cb);
|
60
|
+
});
|
61
|
+
generatedCode += code.substring(offset);
|
62
|
+
lengths.push(code.length - offset);
|
63
|
+
const snapshot = ts.ScriptSnapshot.fromString(generatedCode);
|
64
|
+
return {
|
65
|
+
snapshot,
|
66
|
+
mappings: [
|
67
|
+
{
|
68
|
+
sourceOffsets,
|
69
|
+
generatedOffsets,
|
70
|
+
lengths,
|
71
|
+
data
|
72
|
+
}
|
73
|
+
]
|
74
|
+
};
|
75
|
+
};
|
76
|
+
const languagePlugin = {
|
77
|
+
getLanguageId () {
|
78
|
+
return undefined;
|
79
|
+
},
|
80
|
+
createVirtualCode (scriptId, languageId, snapshot) {
|
81
|
+
if (languageId !== "typescript" && languageId !== "typescriptreact" || scriptId.includes("node_modules") || scriptId.endsWith(".d.ts")) {
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
const text = getText(snapshot);
|
85
|
+
if (!text.includes("gql")) {
|
86
|
+
return {
|
87
|
+
id: scriptId,
|
88
|
+
languageId,
|
89
|
+
snapshot,
|
90
|
+
mappings: getCodeMappings(text)
|
91
|
+
};
|
92
|
+
}
|
93
|
+
const sourceFile = ts.createSourceFile(scriptId, text, 99);
|
94
|
+
const result = transform(sourceFile);
|
95
|
+
return {
|
96
|
+
id: scriptId,
|
97
|
+
languageId,
|
98
|
+
...result,
|
99
|
+
source: {
|
100
|
+
sourceFile,
|
101
|
+
snapshot
|
102
|
+
}
|
103
|
+
};
|
104
|
+
},
|
105
|
+
updateVirtualCode (scriptId, virtualCode, snapshot) {
|
106
|
+
const text = getText(snapshot);
|
107
|
+
if (!text.includes("gql")) {
|
108
|
+
return {
|
109
|
+
...virtualCode,
|
110
|
+
snapshot,
|
111
|
+
mappings: getCodeMappings(text),
|
112
|
+
source: undefined
|
113
|
+
};
|
114
|
+
}
|
115
|
+
let sourceFile;
|
116
|
+
if (virtualCode.source) {
|
117
|
+
const change = snapshot.getChangeRange(virtualCode.source.snapshot);
|
118
|
+
if (change) {
|
119
|
+
sourceFile = virtualCode.source.sourceFile.update(text, change);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
sourceFile ?? (sourceFile = ts.createSourceFile(scriptId, text, 99));
|
123
|
+
const result = transform(sourceFile);
|
124
|
+
return {
|
125
|
+
...virtualCode,
|
126
|
+
...result,
|
127
|
+
source: {
|
128
|
+
sourceFile,
|
129
|
+
snapshot
|
130
|
+
}
|
131
|
+
};
|
132
|
+
},
|
133
|
+
typescript: {
|
134
|
+
extraFileExtensions: [],
|
135
|
+
getServiceScript (code) {
|
136
|
+
const isTs = code.languageId === "typescript";
|
137
|
+
return {
|
138
|
+
code,
|
139
|
+
extension: isTs ? ".ts" : ".tsx",
|
140
|
+
scriptKind: isTs ? ts.ScriptKind.TS : ts.ScriptKind.TSX
|
141
|
+
};
|
142
|
+
}
|
143
|
+
}
|
144
|
+
};
|
145
|
+
return languagePlugin;
|
146
|
+
};
|
147
|
+
const volar = createLanguageServicePlugin.createLanguageServicePlugin((_ts, info)=>({
|
148
|
+
languagePlugins: [
|
149
|
+
getLanguagePlugin(info.project.getCurrentDirectory())
|
150
|
+
]
|
151
|
+
}));
|
152
|
+
|
153
|
+
exports.getLanguagePlugin = getLanguagePlugin;
|
154
|
+
exports.volar = volar;
|
package/dist/volar.d.ts
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
import { LanguagePlugin, VirtualCode } from '@volar/language-core';
|
2
|
+
import ts from 'typescript';
|
3
|
+
|
4
|
+
declare const getLanguagePlugin: (cwd?: string) => LanguagePlugin<string, VirtualCode & {
|
5
|
+
source?: {
|
6
|
+
sourceFile: ts.SourceFile;
|
7
|
+
snapshot: ts.IScriptSnapshot;
|
8
|
+
};
|
9
|
+
}>;
|
10
|
+
declare const volar: ts.server.PluginModuleFactory;
|
11
|
+
|
12
|
+
export { getLanguagePlugin, volar };
|
package/dist/volar.js
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
import { getSchema, getGqlTypeArguments } from '@mo36924/graphql';
|
2
|
+
import { createLanguageServicePlugin } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin';
|
3
|
+
import { buildSchema } from 'graphql';
|
4
|
+
import ts from 'typescript';
|
5
|
+
|
6
|
+
/// <reference types="@volar/typescript" />
|
7
|
+
const tag = "gql";
|
8
|
+
const data = {
|
9
|
+
completion: true,
|
10
|
+
format: false,
|
11
|
+
navigation: true,
|
12
|
+
semantic: true,
|
13
|
+
structure: true,
|
14
|
+
verification: true
|
15
|
+
};
|
16
|
+
const getText = (snapshot)=>snapshot.getText(0, snapshot.getLength());
|
17
|
+
const getCodeMappings = (text)=>[
|
18
|
+
{
|
19
|
+
sourceOffsets: [
|
20
|
+
0
|
21
|
+
],
|
22
|
+
generatedOffsets: [
|
23
|
+
0
|
24
|
+
],
|
25
|
+
lengths: [
|
26
|
+
text.length
|
27
|
+
],
|
28
|
+
data
|
29
|
+
}
|
30
|
+
];
|
31
|
+
const getLanguagePlugin = (cwd)=>{
|
32
|
+
let { schema } = getSchema(cwd);
|
33
|
+
schema ?? (schema = buildSchema("scalar _"));
|
34
|
+
const transform = (sourceFile)=>{
|
35
|
+
const code = sourceFile.text;
|
36
|
+
const sourceOffsets = [
|
37
|
+
0
|
38
|
+
];
|
39
|
+
const generatedOffsets = [
|
40
|
+
0
|
41
|
+
];
|
42
|
+
const lengths = [];
|
43
|
+
let offset = 0;
|
44
|
+
let generatedCode = "";
|
45
|
+
ts.forEachChild(sourceFile, function cb(node) {
|
46
|
+
if (ts.isTaggedTemplateExpression(node) && ts.isIdentifier(node.tag) && node.tag.text === tag && !node.typeArguments) {
|
47
|
+
const typeArguments = getGqlTypeArguments(schema, node);
|
48
|
+
if (typeArguments) {
|
49
|
+
const end = node.tag.end;
|
50
|
+
generatedCode += code.substring(offset, end) + typeArguments;
|
51
|
+
sourceOffsets.push(end);
|
52
|
+
generatedOffsets.push(generatedCode.length);
|
53
|
+
lengths.push(end - offset);
|
54
|
+
offset = end;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
ts.forEachChild(node, cb);
|
58
|
+
});
|
59
|
+
generatedCode += code.substring(offset);
|
60
|
+
lengths.push(code.length - offset);
|
61
|
+
const snapshot = ts.ScriptSnapshot.fromString(generatedCode);
|
62
|
+
return {
|
63
|
+
snapshot,
|
64
|
+
mappings: [
|
65
|
+
{
|
66
|
+
sourceOffsets,
|
67
|
+
generatedOffsets,
|
68
|
+
lengths,
|
69
|
+
data
|
70
|
+
}
|
71
|
+
]
|
72
|
+
};
|
73
|
+
};
|
74
|
+
const languagePlugin = {
|
75
|
+
getLanguageId () {
|
76
|
+
return undefined;
|
77
|
+
},
|
78
|
+
createVirtualCode (scriptId, languageId, snapshot) {
|
79
|
+
if (languageId !== "typescript" && languageId !== "typescriptreact" || scriptId.includes("node_modules") || scriptId.endsWith(".d.ts")) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
const text = getText(snapshot);
|
83
|
+
if (!text.includes("gql")) {
|
84
|
+
return {
|
85
|
+
id: scriptId,
|
86
|
+
languageId,
|
87
|
+
snapshot,
|
88
|
+
mappings: getCodeMappings(text)
|
89
|
+
};
|
90
|
+
}
|
91
|
+
const sourceFile = ts.createSourceFile(scriptId, text, 99);
|
92
|
+
const result = transform(sourceFile);
|
93
|
+
return {
|
94
|
+
id: scriptId,
|
95
|
+
languageId,
|
96
|
+
...result,
|
97
|
+
source: {
|
98
|
+
sourceFile,
|
99
|
+
snapshot
|
100
|
+
}
|
101
|
+
};
|
102
|
+
},
|
103
|
+
updateVirtualCode (scriptId, virtualCode, snapshot) {
|
104
|
+
const text = getText(snapshot);
|
105
|
+
if (!text.includes("gql")) {
|
106
|
+
return {
|
107
|
+
...virtualCode,
|
108
|
+
snapshot,
|
109
|
+
mappings: getCodeMappings(text),
|
110
|
+
source: undefined
|
111
|
+
};
|
112
|
+
}
|
113
|
+
let sourceFile;
|
114
|
+
if (virtualCode.source) {
|
115
|
+
const change = snapshot.getChangeRange(virtualCode.source.snapshot);
|
116
|
+
if (change) {
|
117
|
+
sourceFile = virtualCode.source.sourceFile.update(text, change);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
sourceFile ?? (sourceFile = ts.createSourceFile(scriptId, text, 99));
|
121
|
+
const result = transform(sourceFile);
|
122
|
+
return {
|
123
|
+
...virtualCode,
|
124
|
+
...result,
|
125
|
+
source: {
|
126
|
+
sourceFile,
|
127
|
+
snapshot
|
128
|
+
}
|
129
|
+
};
|
130
|
+
},
|
131
|
+
typescript: {
|
132
|
+
extraFileExtensions: [],
|
133
|
+
getServiceScript (code) {
|
134
|
+
const isTs = code.languageId === "typescript";
|
135
|
+
return {
|
136
|
+
code,
|
137
|
+
extension: isTs ? ".ts" : ".tsx",
|
138
|
+
scriptKind: isTs ? ts.ScriptKind.TS : ts.ScriptKind.TSX
|
139
|
+
};
|
140
|
+
}
|
141
|
+
}
|
142
|
+
};
|
143
|
+
return languagePlugin;
|
144
|
+
};
|
145
|
+
const volar = createLanguageServicePlugin((_ts, info)=>({
|
146
|
+
languagePlugins: [
|
147
|
+
getLanguagePlugin(info.project.getCurrentDirectory())
|
148
|
+
]
|
149
|
+
}));
|
150
|
+
|
151
|
+
export { getLanguagePlugin, volar };
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@mo36924/graphql-plugin",
|
3
3
|
"type": "module",
|
4
|
-
"version": "5.4.
|
4
|
+
"version": "5.4.2",
|
5
5
|
"description": "graphql-plugin",
|
6
6
|
"author": "mo36924",
|
7
7
|
"license": "MIT",
|
@@ -21,6 +21,12 @@
|
|
21
21
|
"import": "./dist/index.js",
|
22
22
|
"require": "./dist/index.cjs",
|
23
23
|
"default": "./dist/index.js"
|
24
|
+
},
|
25
|
+
"./volar": {
|
26
|
+
"types": "./dist/volar.d.ts",
|
27
|
+
"import": "./dist/volar.js",
|
28
|
+
"require": "./dist/volar.cjs",
|
29
|
+
"default": "./dist/volar.js"
|
24
30
|
}
|
25
31
|
},
|
26
32
|
"main": "./dist/index.cjs",
|
@@ -41,11 +47,12 @@
|
|
41
47
|
"dist"
|
42
48
|
],
|
43
49
|
"dependencies": {
|
44
|
-
"@mo36924/graphql": "^5.4.
|
50
|
+
"@mo36924/graphql": "^5.4.2",
|
51
|
+
"@volar/typescript": "^2.4.10",
|
45
52
|
"graphql": "^16.9.0",
|
46
53
|
"graphql-language-service": "^5.3.0",
|
47
54
|
"typescript": "^5.6.3",
|
48
55
|
"vscode-languageserver-types": "^3.17.5"
|
49
56
|
},
|
50
|
-
"gitHead": "
|
57
|
+
"gitHead": "57e62171edc5313ea100277a08cca72130ebca42"
|
51
58
|
}
|