@volar/monaco 2.4.0-alpha.0 → 2.4.0-alpha.10

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/README.md CHANGED
@@ -35,7 +35,7 @@ self.onmessage = () => {
35
35
  languagePlugins: [
36
36
  // ...
37
37
  ],
38
- servicePlugins: [
38
+ languageServicePlugins: [
39
39
  // ...
40
40
  ],
41
41
  });
@@ -49,36 +49,34 @@ self.onmessage = () => {
49
49
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
50
50
  import type * as monaco from 'monaco-editor-core';
51
51
  -import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
52
- +import {
53
- + createTypeScriptWorkerService,
54
- + ServiceEnvironment,
55
- +} from '@volar/monaco/worker';
52
+ +import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
56
53
  +import * as ts from 'typescript';
57
- +import { create as createTypeScriptService } from 'volar-service-typescript';
54
+ +import { create as createTypeScriptPlugins } from 'volar-service-typescript';
55
+ +import { URI } from 'vscode-uri';
58
56
 
59
57
  self.onmessage = () => {
60
58
  worker.initialize((ctx: monaco.worker.IWorkerContext) => {
61
59
  const env: ServiceEnvironment = {
62
60
  workspaceFolder: 'file:///',
63
- + typescript: {
64
- + uriToFileName: uri => uri.substring('file://'.length),
65
- + fileNameToUri: fileName => 'file://' + fileName,
66
- + },
67
61
  };
68
62
  - return createSimpleWorkerService({
69
63
  + return createTypeScriptWorkerService({
70
64
  + typescript: ts,
71
65
  + compilerOptions: {
72
66
  + // ...
67
+ + },
68
+ + uriConverter: {
69
+ + asFileName: uri => uri.fsPath,
70
+ + asUri: fileName => URI.file(fileName),
73
71
  + },
74
72
  workerContext: ctx,
75
73
  env,
76
74
  languagePlugins: [
77
75
  // ...
78
76
  ],
79
- servicePlugins: [
77
+ languageServicePlugins: [
80
78
  // ...
81
- + createTypeScriptService(ts),
79
+ + ...createTypeScriptPlugins(ts),
82
80
  ],
83
81
  });
84
82
  });
@@ -90,11 +88,8 @@ self.onmessage = () => {
90
88
  ```diff
91
89
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
92
90
  import type * as monaco from 'monaco-editor-core';
93
- import {
94
- createTypeScriptWorkerService,
95
- ServiceEnvironment,
96
- + activateAutomaticTypeAcquisition,
97
- } from '@volar/monaco/worker';
91
+ import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
92
+ +import { createNpmFileSystem } from '@volar/jsdelivr';
98
93
  import * as ts from 'typescript';
99
94
  import { create as createTypeScriptService } from 'volar-service-typescript';
100
95
 
@@ -107,7 +102,7 @@ self.onmessage = () => {
107
102
  fileNameToUri: fileName => 'file://' + fileName,
108
103
  },
109
104
  };
110
- + activateAutomaticTypeAcquisition(env);
105
+ + env.fs = createNpmFileSystem();
111
106
  return createTypeScriptWorkerService({
112
107
  typescript: ts,
113
108
  compilerOptions: {
@@ -118,7 +113,7 @@ self.onmessage = () => {
118
113
  languagePlugins: [
119
114
  // ...
120
115
  ],
121
- servicePlugins: [
116
+ languageServicePlugins: [
122
117
  // ...
123
118
  createTypeScriptService(ts),
124
119
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/monaco",
3
- "version": "2.4.0-alpha.0",
3
+ "version": "2.4.0-alpha.10",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,8 +13,8 @@
13
13
  "directory": "packages/monaco"
14
14
  },
15
15
  "dependencies": {
16
- "@volar/language-service": "2.4.0-alpha.0",
17
- "@volar/typescript": "2.4.0-alpha.0",
16
+ "@volar/language-service": "2.4.0-alpha.10",
17
+ "@volar/typescript": "2.4.0-alpha.10",
18
18
  "monaco-languageserver-types": "^0.3.4",
19
19
  "monaco-types": "^0.1.0",
20
20
  "vscode-uri": "^3.0.8"
@@ -22,5 +22,5 @@
22
22
  "devDependencies": {
23
23
  "monaco-editor-core": "latest"
24
24
  },
25
- "gitHead": "007fc74c461e2fd3fb269bf4f3924cc23c35ba56"
25
+ "gitHead": "9f0cb9f2e41167baeb503e8f0eca88e9bea06269"
26
26
  }
package/worker.d.ts CHANGED
@@ -1,19 +1,22 @@
1
- import { LanguagePlugin, LanguageServicePlugin, type LanguageServiceEnvironment } from '@volar/language-service';
1
+ import { Language, LanguagePlugin, LanguageServicePlugin, ProjectContext, type LanguageServiceEnvironment } from '@volar/language-service';
2
2
  import type * as monaco from 'monaco-types';
3
3
  import type * as ts from 'typescript';
4
- import type { URI } from 'vscode-uri';
4
+ import { URI } from 'vscode-uri';
5
5
  export * from '@volar/language-service';
6
- export * from './lib/ata.js';
7
- export declare function createSimpleWorkerService<T = {}>({ env, workerContext, languagePlugins, servicePlugins, extraApis, }: {
6
+ export declare function createSimpleWorkerService<T = {}>({ env, workerContext, languagePlugins, languageServicePlugins, extraApis, setup, }: {
8
7
  env: LanguageServiceEnvironment;
9
8
  workerContext: monaco.worker.IWorkerContext<any>;
10
- languagePlugins?: LanguagePlugin<URI>[];
11
- servicePlugins?: LanguageServicePlugin[];
9
+ languagePlugins: LanguagePlugin<URI>[];
10
+ languageServicePlugins: LanguageServicePlugin[];
12
11
  extraApis?: T;
12
+ setup?(options: {
13
+ language: Language<URI>;
14
+ project: ProjectContext;
15
+ }): void;
13
16
  }): {
14
17
  dispose: () => void;
15
18
  context: import("@volar/language-service").LanguageServiceContext;
16
- getCallHierarchyItems(uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
19
+ getCallHierarchyItems(_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
17
20
  getCallHierarchyIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
18
21
  getCallHierarchyOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
19
22
  getSemanticTokenLegend: () => {
@@ -26,47 +29,47 @@ export declare function createSimpleWorkerService<T = {}>({ env, workerContext,
26
29
  getSignatureHelpTriggerCharacters: () => string[];
27
30
  getSignatureHelpRetriggerCharacters: () => string[];
28
31
  executeCommand(command: string, args: any[], token?: import("@volar/language-service").CancellationToken): any;
29
- getDocumentFormattingEdits: (uri: URI, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
32
+ getDocumentFormattingEdits: (_uri: URI | import("@volar/language-service").UriComponents, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
30
33
  ch: string;
31
34
  position: import("@volar/language-service").Position;
32
35
  } | undefined, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
33
- getFoldingRanges: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
34
- getSelectionRanges: (uri: URI, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
35
- getLinkedEditingRanges: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
36
- getDocumentSymbols: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
37
- getDocumentColors: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
38
- getColorPresentations: (uri: URI, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
39
- getDiagnostics: (uri: URI, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
36
+ getFoldingRanges: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
37
+ getSelectionRanges: (_uri: URI | import("@volar/language-service").UriComponents, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
38
+ getLinkedEditingRanges: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
39
+ getDocumentSymbols: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
40
+ getDocumentColors: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
41
+ getColorPresentations: (_uri: URI | import("@volar/language-service").UriComponents, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
42
+ getDiagnostics: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
40
43
  getWorkspaceDiagnostics: (token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceDocumentDiagnosticReport[]>;
41
- getReferences: (uri: URI, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
42
- getFileReferences: (uri: URI, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
43
- getDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
44
- getTypeDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
45
- getImplementations: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
46
- getRenameRange: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
44
+ getReferences: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
45
+ getFileReferences: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
46
+ getDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
47
+ getTypeDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
48
+ getImplementations: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
49
+ getRenameRange: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
47
50
  range: import("@volar/language-service").Range;
48
51
  placeholder: string;
49
52
  } | {
50
53
  message: string;
51
54
  } | undefined>;
52
- getRenameEdits: (uri: URI, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
53
- getFileRenameEdits: (oldUri: URI, newUri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
54
- getSemanticTokens: (uri: URI, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
55
- getHover: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
56
- getCompletionItems: (uri: URI, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
57
- getCodeActions: (uri: URI, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
58
- getSignatureHelp: (uri: URI, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
59
- getCodeLenses: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
60
- getDocumentHighlights: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
61
- getDocumentLinks: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
55
+ getRenameEdits: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
56
+ getFileRenameEdits: (_oldUri: URI | import("@volar/language-service/lib/types.js").UriComponents, _newUri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
57
+ getSemanticTokens: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
58
+ getHover: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
59
+ getCompletionItems: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
60
+ getCodeActions: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
61
+ getSignatureHelp: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
62
+ getCodeLenses: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
63
+ getDocumentHighlights: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
64
+ getDocumentLinks: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
62
65
  getWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
63
- getAutoInsertSnippet: (uri: URI, selection: import("@volar/language-service").Position, change: {
66
+ getAutoInsertSnippet: (_uri: URI | import("@volar/language-service").UriComponents, selection: import("@volar/language-service").Position, change: {
64
67
  rangeOffset: number;
65
68
  rangeLength: number;
66
69
  text: string;
67
70
  }, token?: import("@volar/language-service").CancellationToken) => Promise<string | undefined>;
68
- getDocumentDropEdits: (uri: URI, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
69
- getInlayHints: (uri: URI, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
71
+ getDocumentDropEdits: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
72
+ getInlayHints: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
70
73
  resolveCodeAction: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction>;
71
74
  resolveCompletionItem: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionItem>;
72
75
  resolveCodeLens: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens>;
@@ -74,7 +77,7 @@ export declare function createSimpleWorkerService<T = {}>({ env, workerContext,
74
77
  resolveInlayHint: (item: import("@volar/language-service").InlayHint, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint>;
75
78
  resolveWorkspaceSymbol: (symbol: import("@volar/language-service").WorkspaceSymbol, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol>;
76
79
  } & T;
77
- export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, servicePlugins, extraApis, }: {
80
+ export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, extraApis, setup, }: {
78
81
  typescript: typeof import('typescript');
79
82
  compilerOptions: ts.CompilerOptions;
80
83
  env: LanguageServiceEnvironment;
@@ -83,13 +86,17 @@ export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts,
83
86
  asFileName(uri: URI): string;
84
87
  };
85
88
  workerContext: monaco.worker.IWorkerContext<any>;
86
- languagePlugins?: LanguagePlugin<URI>[];
87
- servicePlugins?: LanguageServicePlugin[];
89
+ languagePlugins: LanguagePlugin<URI>[];
90
+ languageServicePlugins: LanguageServicePlugin[];
88
91
  extraApis?: T;
92
+ setup?(options: {
93
+ language: Language<URI>;
94
+ project: ProjectContext;
95
+ }): void;
89
96
  }): {
90
97
  dispose: () => void;
91
98
  context: import("@volar/language-service").LanguageServiceContext;
92
- getCallHierarchyItems(uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
99
+ getCallHierarchyItems(_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
93
100
  getCallHierarchyIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
94
101
  getCallHierarchyOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
95
102
  getSemanticTokenLegend: () => {
@@ -102,47 +109,47 @@ export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts,
102
109
  getSignatureHelpTriggerCharacters: () => string[];
103
110
  getSignatureHelpRetriggerCharacters: () => string[];
104
111
  executeCommand(command: string, args: any[], token?: import("@volar/language-service").CancellationToken): any;
105
- getDocumentFormattingEdits: (uri: URI, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
112
+ getDocumentFormattingEdits: (_uri: URI | import("@volar/language-service").UriComponents, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
106
113
  ch: string;
107
114
  position: import("@volar/language-service").Position;
108
115
  } | undefined, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
109
- getFoldingRanges: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
110
- getSelectionRanges: (uri: URI, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
111
- getLinkedEditingRanges: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
112
- getDocumentSymbols: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
113
- getDocumentColors: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
114
- getColorPresentations: (uri: URI, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
115
- getDiagnostics: (uri: URI, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
116
+ getFoldingRanges: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
117
+ getSelectionRanges: (_uri: URI | import("@volar/language-service").UriComponents, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
118
+ getLinkedEditingRanges: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
119
+ getDocumentSymbols: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
120
+ getDocumentColors: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
121
+ getColorPresentations: (_uri: URI | import("@volar/language-service").UriComponents, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
122
+ getDiagnostics: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
116
123
  getWorkspaceDiagnostics: (token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceDocumentDiagnosticReport[]>;
117
- getReferences: (uri: URI, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
118
- getFileReferences: (uri: URI, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
119
- getDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
120
- getTypeDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
121
- getImplementations: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
122
- getRenameRange: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
124
+ getReferences: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
125
+ getFileReferences: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
126
+ getDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
127
+ getTypeDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
128
+ getImplementations: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
129
+ getRenameRange: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
123
130
  range: import("@volar/language-service").Range;
124
131
  placeholder: string;
125
132
  } | {
126
133
  message: string;
127
134
  } | undefined>;
128
- getRenameEdits: (uri: URI, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
129
- getFileRenameEdits: (oldUri: URI, newUri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
130
- getSemanticTokens: (uri: URI, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
131
- getHover: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
132
- getCompletionItems: (uri: URI, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
133
- getCodeActions: (uri: URI, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
134
- getSignatureHelp: (uri: URI, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
135
- getCodeLenses: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
136
- getDocumentHighlights: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
137
- getDocumentLinks: (uri: URI, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
135
+ getRenameEdits: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
136
+ getFileRenameEdits: (_oldUri: URI | import("@volar/language-service/lib/types.js").UriComponents, _newUri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
137
+ getSemanticTokens: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
138
+ getHover: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
139
+ getCompletionItems: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
140
+ getCodeActions: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
141
+ getSignatureHelp: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
142
+ getCodeLenses: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
143
+ getDocumentHighlights: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
144
+ getDocumentLinks: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
138
145
  getWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
139
- getAutoInsertSnippet: (uri: URI, selection: import("@volar/language-service").Position, change: {
146
+ getAutoInsertSnippet: (_uri: URI | import("@volar/language-service").UriComponents, selection: import("@volar/language-service").Position, change: {
140
147
  rangeOffset: number;
141
148
  rangeLength: number;
142
149
  text: string;
143
150
  }, token?: import("@volar/language-service").CancellationToken) => Promise<string | undefined>;
144
- getDocumentDropEdits: (uri: URI, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
145
- getInlayHints: (uri: URI, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
151
+ getDocumentDropEdits: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
152
+ getInlayHints: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
146
153
  resolveCodeAction: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction>;
147
154
  resolveCompletionItem: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionItem>;
148
155
  resolveCodeLens: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens>;
package/worker.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { createLanguageService as _createLanguageService, createLanguage, createUriMap, } from '@volar/language-service';
2
2
  import { createLanguageServiceHost, createSys, resolveFileLanguageId } from '@volar/typescript';
3
+ import { URI } from 'vscode-uri';
3
4
  export * from '@volar/language-service';
4
- export * from './lib/ata.js';
5
5
  const fsFileSnapshots = createUriMap();
6
- export function createSimpleWorkerService({ env, workerContext, languagePlugins = [], servicePlugins = [], extraApis = {}, }) {
6
+ export function createSimpleWorkerService({ env, workerContext, languagePlugins, languageServicePlugins, extraApis = {}, setup, }) {
7
7
  const snapshots = new Map();
8
8
  const language = createLanguage(languagePlugins, createUriMap(false), uri => {
9
9
  const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
@@ -25,9 +25,11 @@ export function createSimpleWorkerService({ env, workerContext, languagePlugins
25
25
  language.scripts.delete(uri);
26
26
  }
27
27
  });
28
- return createWorkerService(language, servicePlugins, env, extraApis);
28
+ const project = {};
29
+ setup?.({ language, project });
30
+ return createWorkerService(language, languageServicePlugins, env, project, extraApis);
29
31
  }
30
- export function createTypeScriptWorkerService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins = [], servicePlugins = [], extraApis = {}, }) {
32
+ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, extraApis = {}, setup, }) {
31
33
  let projectVersion = 0;
32
34
  const modelSnapshot = new WeakMap();
33
35
  const modelVersions = new Map();
@@ -66,42 +68,45 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
66
68
  language.scripts.delete(uri);
67
69
  }
68
70
  });
69
- language.typescript = {
70
- configFileName: undefined,
71
- sys,
72
- asFileName: uriConverter.asFileName,
73
- asScriptId: uriConverter.asUri,
74
- ...createLanguageServiceHost(ts, sys, language, uriConverter.asUri, {
75
- getCurrentDirectory() {
76
- return sys.getCurrentDirectory();
77
- },
78
- getScriptFileNames() {
79
- return workerContext.getMirrorModels().map(model => uriConverter.asFileName(model.uri));
80
- },
81
- getProjectVersion() {
82
- const models = workerContext.getMirrorModels();
83
- if (modelVersions.size === workerContext.getMirrorModels().length) {
84
- if (models.every(model => modelVersions.get(model) === model.version)) {
85
- return projectVersion.toString();
71
+ const project = {
72
+ typescript: {
73
+ configFileName: undefined,
74
+ sys,
75
+ asFileName: uriConverter.asFileName,
76
+ asUri: uriConverter.asUri,
77
+ ...createLanguageServiceHost(ts, sys, language, uriConverter.asUri, {
78
+ getCurrentDirectory() {
79
+ return sys.getCurrentDirectory();
80
+ },
81
+ getScriptFileNames() {
82
+ return workerContext.getMirrorModels().map(model => uriConverter.asFileName(URI.from(model.uri)));
83
+ },
84
+ getProjectVersion() {
85
+ const models = workerContext.getMirrorModels();
86
+ if (modelVersions.size === workerContext.getMirrorModels().length) {
87
+ if (models.every(model => modelVersions.get(model) === model.version)) {
88
+ return projectVersion.toString();
89
+ }
86
90
  }
87
- }
88
- modelVersions.clear();
89
- for (const model of workerContext.getMirrorModels()) {
90
- modelVersions.set(model, model.version);
91
- }
92
- projectVersion++;
93
- return projectVersion.toString();
94
- },
95
- getScriptSnapshot(fileName) {
96
- const uri = uriConverter.asUri(fileName);
97
- return getModelSnapshot(uri);
98
- },
99
- getCompilationSettings() {
100
- return compilerOptions;
101
- },
102
- }),
91
+ modelVersions.clear();
92
+ for (const model of workerContext.getMirrorModels()) {
93
+ modelVersions.set(model, model.version);
94
+ }
95
+ projectVersion++;
96
+ return projectVersion.toString();
97
+ },
98
+ getScriptSnapshot(fileName) {
99
+ const uri = uriConverter.asUri(fileName);
100
+ return getModelSnapshot(uri);
101
+ },
102
+ getCompilationSettings() {
103
+ return compilerOptions;
104
+ },
105
+ }),
106
+ },
103
107
  };
104
- return createWorkerService(language, servicePlugins, env, extraApis);
108
+ setup?.({ language, project });
109
+ return createWorkerService(language, languageServicePlugins, env, project, extraApis);
105
110
  function getModelSnapshot(uri) {
106
111
  const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
107
112
  if (model) {
@@ -119,8 +124,8 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
119
124
  }
120
125
  }
121
126
  }
122
- function createWorkerService(language, servicePlugins, env, extraApis = {}) {
123
- const languageService = _createLanguageService(language, servicePlugins, env);
127
+ function createWorkerService(language, servicePlugins, env, projectContext, extraApis = {}) {
128
+ const languageService = _createLanguageService(language, servicePlugins, env, projectContext);
124
129
  class WorkerService {
125
130
  }
126
131
  ;
package/lib/ata.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import type { LanguageServiceEnvironment } from '@volar/language-service';
2
- import type { URI } from 'vscode-uri';
3
- export declare function activateAutomaticTypeAcquisition(env: LanguageServiceEnvironment, uriConverter: {
4
- asFileName(uri: URI): string;
5
- }, onFetch?: (path: string, content: string) => void): void;
package/lib/ata.js DELETED
@@ -1,228 +0,0 @@
1
- export function activateAutomaticTypeAcquisition(env, uriConverter, onFetch) {
2
- const textCache = new Map();
3
- const jsonCache = new Map();
4
- const npmFs = createJsDelivrNpmFileSystem();
5
- const _fs = env.fs;
6
- env.fs = {
7
- async stat(uri) {
8
- return await npmFs.stat(uri) ?? await _fs?.stat(uri);
9
- },
10
- async readDirectory(uri) {
11
- return [
12
- ...await npmFs.readDirectory(uri),
13
- ...await _fs?.readDirectory(uri) ?? [],
14
- ];
15
- },
16
- async readFile(uri) {
17
- return await npmFs.readFile(uri) ?? await _fs?.readFile(uri);
18
- },
19
- };
20
- function createJsDelivrNpmFileSystem() {
21
- const fetchResults = new Map();
22
- const flatResults = new Map();
23
- return {
24
- async stat(uri) {
25
- const fileName = uriConverter.asFileName(uri);
26
- if (fileName === '/node_modules') {
27
- return {
28
- type: 2,
29
- size: -1,
30
- ctime: -1,
31
- mtime: -1,
32
- };
33
- }
34
- if (fileName.startsWith('/node_modules/')) {
35
- const path = fileName.substring('/node_modules/'.length);
36
- return await _stat(path);
37
- }
38
- },
39
- async readFile(uri) {
40
- const fileName = uriConverter.asFileName(uri);
41
- if (fileName.startsWith('/node_modules/')) {
42
- const path = fileName.substring('/node_modules/'.length);
43
- return await _readFile(path);
44
- }
45
- },
46
- readDirectory(uri) {
47
- const fileName = uriConverter.asFileName(uri);
48
- if (fileName.startsWith('/node_modules/')) {
49
- const path = fileName.substring('/node_modules/'.length);
50
- return _readDirectory(path);
51
- }
52
- return [];
53
- },
54
- };
55
- async function _stat(path) {
56
- const pkgName = getPackageName(path);
57
- if (!pkgName || !await isValidPackageName(pkgName)) {
58
- return;
59
- }
60
- if (!flatResults.has(pkgName)) {
61
- flatResults.set(pkgName, flat(pkgName));
62
- }
63
- const flatResult = await flatResults.get(pkgName);
64
- const filePath = path.slice(pkgName.length);
65
- const file = flatResult.find(file => file.name === filePath);
66
- if (file) {
67
- return {
68
- type: 1,
69
- ctime: new Date(file.time).valueOf(),
70
- mtime: new Date(file.time).valueOf(),
71
- size: file.size,
72
- };
73
- }
74
- else if (flatResult.some(file => file.name.startsWith(filePath + '/'))) {
75
- return {
76
- type: 2,
77
- ctime: -1,
78
- mtime: -1,
79
- size: -1,
80
- };
81
- }
82
- }
83
- async function _readDirectory(path) {
84
- const pkgName = getPackageName(path);
85
- if (!pkgName || !await isValidPackageName(pkgName)) {
86
- return [];
87
- }
88
- if (!flatResults.has(pkgName)) {
89
- flatResults.set(pkgName, flat(pkgName));
90
- }
91
- const flatResult = await flatResults.get(pkgName);
92
- const dirPath = path.slice(pkgName.length);
93
- const files = flatResult
94
- .filter(f => f.name.substring(0, f.name.lastIndexOf('/')) === dirPath)
95
- .map(f => f.name.slice(dirPath.length + 1));
96
- const dirs = flatResult
97
- .filter(f => f.name.startsWith(dirPath + '/') && f.name.substring(dirPath.length + 1).split('/').length >= 2)
98
- .map(f => f.name.slice(dirPath.length + 1).split('/')[0]);
99
- return [
100
- ...files.map(f => [f, 1]),
101
- ...[...new Set(dirs)].map(f => [f, 2]),
102
- ];
103
- }
104
- async function _readFile(path) {
105
- const pkgName = getPackageName(path);
106
- if (!pkgName || !await isValidPackageName(pkgName)) {
107
- return;
108
- }
109
- if (!fetchResults.has(path)) {
110
- fetchResults.set(path, (async () => {
111
- if ((await _stat(path))?.type !== 1) {
112
- return;
113
- }
114
- const text = await fetchText(`https://cdn.jsdelivr.net/npm/${path}`);
115
- if (text !== undefined) {
116
- onFetch?.(path, text);
117
- }
118
- return text;
119
- })());
120
- }
121
- return await fetchResults.get(path);
122
- }
123
- async function flat(pkgNameWithVersion) {
124
- let pkgName = pkgNameWithVersion;
125
- let version = 'latest';
126
- if (pkgNameWithVersion.substring(1).includes('@')) {
127
- pkgName = pkgNameWithVersion.substring(0, pkgNameWithVersion.lastIndexOf('@'));
128
- version = pkgNameWithVersion.substring(pkgNameWithVersion.lastIndexOf('@') + 1);
129
- }
130
- // resolve tag version
131
- if (version === 'latest') {
132
- const data = await fetchJson(`https://data.jsdelivr.com/v1/package/resolve/npm/${pkgName}@latest`);
133
- if (!data?.version) {
134
- return [];
135
- }
136
- version = data.version;
137
- }
138
- const flat = await fetchJson(`https://data.jsdelivr.com/v1/package/npm/${pkgName}@${version}/flat`);
139
- if (!flat) {
140
- return [];
141
- }
142
- return flat.files;
143
- }
144
- async function isValidPackageName(pkgName) {
145
- // @aaa/bbb@latest -> @aaa/bbb
146
- if (pkgName.substring(1).includes('@')) {
147
- pkgName = pkgName.substring(0, pkgName.lastIndexOf('@'));
148
- }
149
- // ignore @aaa/node_modules
150
- if (pkgName.endsWith('/node_modules')) {
151
- return false;
152
- }
153
- // hard code for known invalid package
154
- if (pkgName.startsWith('@typescript/') || pkgName.startsWith('@types/typescript__')) {
155
- return false;
156
- }
157
- // don't check @types if original package already having types
158
- if (pkgName.startsWith('@types/')) {
159
- let originalPkgName = pkgName.slice('@types/'.length);
160
- if (originalPkgName.indexOf('__') >= 0) {
161
- originalPkgName = '@' + originalPkgName.replace('__', '/');
162
- }
163
- const packageJson = await _readFile(`${originalPkgName}/package.json`);
164
- if (packageJson) {
165
- const packageJsonObj = JSON.parse(packageJson);
166
- if (packageJsonObj.types || packageJsonObj.typings) {
167
- return false;
168
- }
169
- const indexDts = await _stat(`${originalPkgName}/index.d.ts`);
170
- if (indexDts?.type === 1) {
171
- return false;
172
- }
173
- }
174
- }
175
- return true;
176
- }
177
- }
178
- /**
179
- * @example
180
- * "a/b/c" -> "a"
181
- * "@a/b/c" -> "@a/b"
182
- * "@a/b@1.2.3/c" -> "@a/b@1.2.3"
183
- */
184
- function getPackageName(path) {
185
- const parts = path.split('/');
186
- let pkgName = parts[0];
187
- if (pkgName.startsWith('@')) {
188
- if (!parts[1]) {
189
- return undefined;
190
- }
191
- pkgName += '/' + parts[1];
192
- }
193
- return pkgName;
194
- }
195
- async function fetchText(url) {
196
- if (!textCache.has(url)) {
197
- textCache.set(url, (async () => {
198
- try {
199
- const res = await fetch(url);
200
- if (res.status === 200) {
201
- return await res.text();
202
- }
203
- }
204
- catch {
205
- // ignore
206
- }
207
- })());
208
- }
209
- return await textCache.get(url);
210
- }
211
- async function fetchJson(url) {
212
- if (!jsonCache.has(url)) {
213
- jsonCache.set(url, (async () => {
214
- try {
215
- const res = await fetch(url);
216
- if (res.status === 200) {
217
- return await res.json();
218
- }
219
- }
220
- catch {
221
- // ignore
222
- }
223
- })());
224
- }
225
- return await jsonCache.get(url);
226
- }
227
- }
228
- //# sourceMappingURL=ata.js.map