@coze-editor/code-language-shared 0.1.0-alpha.0fd19e

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 coze-dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,104 @@
1
+ // src/index.ts
2
+ import {
3
+ MarkupContent
4
+ } from "vscode-languageserver-types";
5
+ import { TextDocument as TextDocument2 } from "vscode-languageserver-textdocument";
6
+
7
+ // src/text-document.ts
8
+ import { TextDocument } from "vscode-languageserver-textdocument";
9
+ import { FacetCombineStrategy } from "@coze-editor/utils";
10
+ import { Facet, StateField } from "@codemirror/state";
11
+ var transformerFacet = Facet.define({
12
+ combine: FacetCombineStrategy.Last
13
+ });
14
+ var uriFacet = Facet.define({
15
+ combine: FacetCombineStrategy.Last
16
+ });
17
+ var languageIdFacet = Facet.define({
18
+ combine: FacetCombineStrategy.Last
19
+ });
20
+ function identical(value) {
21
+ return value;
22
+ }
23
+ function transform(oldDocument, state) {
24
+ const uri = getURI(state);
25
+ const languageId = getLanguageId(state);
26
+ const transformer = state.facet(transformerFacet);
27
+ const version = oldDocument ? oldDocument.version + 1 : 0;
28
+ if (typeof transformer === "function") {
29
+ const { code, mapping } = transformer(state.doc.toString());
30
+ return {
31
+ textDocument: TextDocument.create(uri, languageId, version, code),
32
+ originalRangeFor: (range) => mapping.originalRangeFor(range),
33
+ generatedRangeFor: (range) => mapping.generatedRangeFor(range),
34
+ originalOffsetFor: (offset) => mapping.originalOffsetFor(offset),
35
+ generatedOffsetFor: (offset) => mapping.generatedOffsetFor(offset)
36
+ };
37
+ }
38
+ return {
39
+ textDocument: TextDocument.create(
40
+ uri,
41
+ languageId,
42
+ version,
43
+ state.doc.toString()
44
+ ),
45
+ originalRangeFor: identical,
46
+ generatedRangeFor: identical,
47
+ originalOffsetFor: identical,
48
+ generatedOffsetFor: identical
49
+ };
50
+ }
51
+ var textDocumentField = StateField.define({
52
+ create(state) {
53
+ return transform(null, state);
54
+ },
55
+ update(document, tr) {
56
+ if (tr.docChanged) {
57
+ return transform(document.textDocument, tr.state);
58
+ }
59
+ return document;
60
+ }
61
+ });
62
+ function getURI(state) {
63
+ return state.facet(uriFacet);
64
+ }
65
+ function getLanguageId(state) {
66
+ return state.facet(languageIdFacet) ?? "unknown";
67
+ }
68
+
69
+ // src/index.ts
70
+ var MarkerTag = /* @__PURE__ */ ((MarkerTag2) => {
71
+ MarkerTag2[MarkerTag2["Unnecessary"] = 1] = "Unnecessary";
72
+ MarkerTag2[MarkerTag2["Deprecated"] = 2] = "Deprecated";
73
+ return MarkerTag2;
74
+ })(MarkerTag || {});
75
+ var offsetToPosition = (document, offset) => {
76
+ const line = document.lineAt(offset);
77
+ return {
78
+ line: line.number - 1,
79
+ character: offset - line.from
80
+ };
81
+ };
82
+ var positionToOffset = (document, position) => {
83
+ if (position.line >= document.lines) {
84
+ return void 0;
85
+ }
86
+ const line = document.line(position.line + 1);
87
+ const offset = line.from + position.character;
88
+ if (offset > line.to) {
89
+ return void 0;
90
+ }
91
+ return offset;
92
+ };
93
+ export {
94
+ MarkerTag,
95
+ MarkupContent,
96
+ TextDocument2 as TextDocument,
97
+ languageIdFacet,
98
+ offsetToPosition,
99
+ positionToOffset,
100
+ textDocumentField,
101
+ transformerFacet,
102
+ uriFacet
103
+ };
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts","../../src/text-document.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n type CompletionItem,\n type CompletionList,\n MarkupContent,\n type SignatureHelp,\n} from 'vscode-languageserver-types';\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { type Severity } from '@coze-editor/extension-lint';\nimport { type Extension, type Text as CMText } from '@codemirror/state';\nimport { type LRLanguage, type StreamLanguage } from '@codemirror/language';\n\nexport interface LanguageConfig {\n language: LRLanguage | StreamLanguage<any>;\n extensions?: Extension[];\n languageService?: LanguageService;\n}\n\nexport interface CodeAction {\n changes: {\n from: number;\n insert: string;\n to?: number;\n };\n}\n\nexport interface Link {\n target: string;\n range: {\n from: number;\n to: number;\n };\n}\n\nexport interface LanguageServiceOptions {\n lintDelay?: number;\n}\n\ninterface CommonContext {\n textDocument: TextDocument;\n}\n\ntype ContextWithOffset = CommonContext & {\n offset: number;\n};\n\nexport enum MarkerTag {\n Unnecessary = 1,\n Deprecated = 2,\n}\n\nexport { MarkupContent };\n\ninterface Diagnostic {\n from: number;\n to: number;\n severity: Severity;\n message: string;\n tags?: MarkerTag[];\n}\n\nexport { Diagnostic };\n\ninterface DefinitionLocation {\n from: number;\n to: number;\n}\n\nexport interface LanguageService {\n options?: LanguageServiceOptions;\n onTextDocumentDidChange?: (context: CommonContext) => void;\n doValidation?: (context: CommonContext) => Promise<Diagnostic[]>;\n doComplete?: (\n context: ContextWithOffset,\n ) => Promise<CompletionList | null | undefined>;\n resolveCompletionItem?: (\n context: ContextWithOffset,\n entry: CompletionItem,\n ) => Promise<CompletionItem>;\n doHover?: (\n context: ContextWithOffset,\n ) => Promise<MarkupContent | string | undefined>;\n doSignatureHelp?: (\n context: ContextWithOffset,\n ) => Promise<SignatureHelp | null | undefined> | undefined;\n findDefinition?: (\n context: ContextWithOffset,\n ) => Promise<DefinitionLocation[] | null | undefined>;\n findLinks?: (context: CommonContext) => Promise<Link[]>;\n [key: string]: any;\n}\n\n// 0-based\nexport const offsetToPosition = (\n document: CMText,\n offset: number,\n): { line: number; character: number } => {\n const line = document.lineAt(offset);\n return {\n line: line.number - 1,\n character: offset - line.from,\n };\n};\n\n// 0-based\nexport const positionToOffset = (\n document: CMText,\n position: { line: number; character: number },\n): number | undefined => {\n if (position.line >= document.lines) {\n return undefined;\n }\n const line = document.line(position.line + 1);\n const offset = line.from + position.character;\n if (offset > line.to) {\n return undefined;\n }\n return offset;\n};\n\nexport {\n uriFacet,\n languageIdFacet,\n transformerFacet,\n textDocumentField,\n type Transformer,\n} from './text-document';\n\nexport { TextDocument };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { FacetCombineStrategy } from '@coze-editor/utils';\nimport { type EditorState, Facet, StateField } from '@codemirror/state';\n\ninterface Range {\n from: number;\n to: number;\n}\ninterface Mapping {\n originalRangeFor: (range: Range) => Range | undefined;\n generatedRangeFor: (range: Range) => Range | undefined;\n originalOffsetFor: (offset: number) => number | undefined;\n generatedOffsetFor: (offset: number) => number | undefined;\n}\ntype Transformer = (text: string) => {\n code: string;\n mapping: Mapping;\n};\n\nconst transformerFacet = Facet.define<Transformer, Transformer>({\n combine: FacetCombineStrategy.Last,\n});\n\nconst uriFacet = Facet.define<string, string>({\n combine: FacetCombineStrategy.Last,\n});\n\nconst languageIdFacet = Facet.define<string, string>({\n combine: FacetCombineStrategy.Last,\n});\n\nfunction identical<T>(value: T): T {\n return value;\n}\n\ntype TextDocumentWithMapping = {\n textDocument: TextDocument;\n} & Mapping;\n\nfunction transform(\n oldDocument: TextDocument | null,\n state: EditorState,\n): TextDocumentWithMapping {\n const uri = getURI(state);\n const languageId = getLanguageId(state);\n const transformer = state.facet(transformerFacet);\n const version = oldDocument ? oldDocument.version + 1 : 0;\n\n if (typeof transformer === 'function') {\n const { code, mapping } = transformer(state.doc.toString());\n\n return {\n textDocument: TextDocument.create(uri, languageId, version, code),\n originalRangeFor: (range: Range) => mapping.originalRangeFor(range),\n generatedRangeFor: (range: Range) => mapping.generatedRangeFor(range),\n originalOffsetFor: (offset: number) => mapping.originalOffsetFor(offset),\n generatedOffsetFor: (offset: number) =>\n mapping.generatedOffsetFor(offset),\n };\n }\n\n return {\n textDocument: TextDocument.create(\n uri,\n languageId,\n version,\n state.doc.toString(),\n ),\n originalRangeFor: identical<Range>,\n generatedRangeFor: identical<Range>,\n originalOffsetFor: identical<number>,\n generatedOffsetFor: identical<number>,\n };\n}\n\nconst textDocumentField = StateField.define<TextDocumentWithMapping>({\n create(state) {\n return transform(null, state);\n },\n update(document, tr) {\n if (tr.docChanged) {\n return transform(document.textDocument, tr.state);\n }\n\n return document;\n },\n});\n\nfunction getURI(state: EditorState) {\n return state.facet(uriFacet);\n}\n\nfunction getLanguageId(state: EditorState) {\n return state.facet(languageIdFacet) ?? 'unknown';\n}\n\nexport {\n uriFacet,\n languageIdFacet,\n transformerFacet,\n textDocumentField,\n type Transformer,\n};\n"],"mappings":";AAGA;AAAA,EAGE;AAAA,OAEK;AACP,SAAS,gBAAAA,qBAAoB;;;ACN7B,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAA2B,OAAO,kBAAkB;AAiBpD,IAAM,mBAAmB,MAAM,OAAiC;AAAA,EAC9D,SAAS,qBAAqB;AAChC,CAAC;AAED,IAAM,WAAW,MAAM,OAAuB;AAAA,EAC5C,SAAS,qBAAqB;AAChC,CAAC;AAED,IAAM,kBAAkB,MAAM,OAAuB;AAAA,EACnD,SAAS,qBAAqB;AAChC,CAAC;AAED,SAAS,UAAa,OAAa;AACjC,SAAO;AACT;AAMA,SAAS,UACP,aACA,OACyB;AACzB,QAAM,MAAM,OAAO,KAAK;AACxB,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,cAAc,MAAM,MAAM,gBAAgB;AAChD,QAAM,UAAU,cAAc,YAAY,UAAU,IAAI;AAExD,MAAI,OAAO,gBAAgB,YAAY;AACrC,UAAM,EAAE,MAAM,QAAQ,IAAI,YAAY,MAAM,IAAI,SAAS,CAAC;AAE1D,WAAO;AAAA,MACL,cAAc,aAAa,OAAO,KAAK,YAAY,SAAS,IAAI;AAAA,MAChE,kBAAkB,CAAC,UAAiB,QAAQ,iBAAiB,KAAK;AAAA,MAClE,mBAAmB,CAAC,UAAiB,QAAQ,kBAAkB,KAAK;AAAA,MACpE,mBAAmB,CAAC,WAAmB,QAAQ,kBAAkB,MAAM;AAAA,MACvE,oBAAoB,CAAC,WACnB,QAAQ,mBAAmB,MAAM;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,aAAa;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,IAAI,SAAS;AAAA,IACrB;AAAA,IACA,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EACtB;AACF;AAEA,IAAM,oBAAoB,WAAW,OAAgC;AAAA,EACnE,OAAO,OAAO;AACZ,WAAO,UAAU,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,OAAO,UAAU,IAAI;AACnB,QAAI,GAAG,YAAY;AACjB,aAAO,UAAU,SAAS,cAAc,GAAG,KAAK;AAAA,IAClD;AAEA,WAAO;AAAA,EACT;AACF,CAAC;AAED,SAAS,OAAO,OAAoB;AAClC,SAAO,MAAM,MAAM,QAAQ;AAC7B;AAEA,SAAS,cAAc,OAAoB;AACzC,SAAO,MAAM,MAAM,eAAe,KAAK;AACzC;;;ADjDO,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,iBAAc,KAAd;AACA,EAAAA,sBAAA,gBAAa,KAAb;AAFU,SAAAA;AAAA,GAAA;AA+CL,IAAM,mBAAmB,CAC9B,UACA,WACwC;AACxC,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,SAAO;AAAA,IACL,MAAM,KAAK,SAAS;AAAA,IACpB,WAAW,SAAS,KAAK;AAAA,EAC3B;AACF;AAGO,IAAM,mBAAmB,CAC9B,UACA,aACuB;AACvB,MAAI,SAAS,QAAQ,SAAS,OAAO;AACnC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,SAAS,KAAK,SAAS,OAAO,CAAC;AAC5C,QAAM,SAAS,KAAK,OAAO,SAAS;AACpC,MAAI,SAAS,KAAK,IAAI;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":["TextDocument","MarkerTag"]}
@@ -0,0 +1,97 @@
1
+ import { CompletionList, CompletionItem, MarkupContent, SignatureHelp } from 'vscode-languageserver-types';
2
+ export { MarkupContent } from 'vscode-languageserver-types';
3
+ import { TextDocument } from 'vscode-languageserver-textdocument';
4
+ export { TextDocument } from 'vscode-languageserver-textdocument';
5
+ import { Severity } from '@coze-editor/extension-lint';
6
+ import { Facet, StateField, Extension, Text } from '@codemirror/state';
7
+ import { LRLanguage, StreamLanguage } from '@codemirror/language';
8
+
9
+ interface Range {
10
+ from: number;
11
+ to: number;
12
+ }
13
+ interface Mapping {
14
+ originalRangeFor: (range: Range) => Range | undefined;
15
+ generatedRangeFor: (range: Range) => Range | undefined;
16
+ originalOffsetFor: (offset: number) => number | undefined;
17
+ generatedOffsetFor: (offset: number) => number | undefined;
18
+ }
19
+ type Transformer = (text: string) => {
20
+ code: string;
21
+ mapping: Mapping;
22
+ };
23
+ declare const transformerFacet: Facet<Transformer, Transformer>;
24
+ declare const uriFacet: Facet<string, string>;
25
+ declare const languageIdFacet: Facet<string, string>;
26
+ type TextDocumentWithMapping = {
27
+ textDocument: TextDocument;
28
+ } & Mapping;
29
+ declare const textDocumentField: StateField<TextDocumentWithMapping>;
30
+
31
+ interface LanguageConfig {
32
+ language: LRLanguage | StreamLanguage<any>;
33
+ extensions?: Extension[];
34
+ languageService?: LanguageService;
35
+ }
36
+ interface CodeAction {
37
+ changes: {
38
+ from: number;
39
+ insert: string;
40
+ to?: number;
41
+ };
42
+ }
43
+ interface Link {
44
+ target: string;
45
+ range: {
46
+ from: number;
47
+ to: number;
48
+ };
49
+ }
50
+ interface LanguageServiceOptions {
51
+ lintDelay?: number;
52
+ }
53
+ interface CommonContext {
54
+ textDocument: TextDocument;
55
+ }
56
+ type ContextWithOffset = CommonContext & {
57
+ offset: number;
58
+ };
59
+ declare enum MarkerTag {
60
+ Unnecessary = 1,
61
+ Deprecated = 2
62
+ }
63
+
64
+ interface Diagnostic {
65
+ from: number;
66
+ to: number;
67
+ severity: Severity;
68
+ message: string;
69
+ tags?: MarkerTag[];
70
+ }
71
+
72
+ interface DefinitionLocation {
73
+ from: number;
74
+ to: number;
75
+ }
76
+ interface LanguageService {
77
+ options?: LanguageServiceOptions;
78
+ onTextDocumentDidChange?: (context: CommonContext) => void;
79
+ doValidation?: (context: CommonContext) => Promise<Diagnostic[]>;
80
+ doComplete?: (context: ContextWithOffset) => Promise<CompletionList | null | undefined>;
81
+ resolveCompletionItem?: (context: ContextWithOffset, entry: CompletionItem) => Promise<CompletionItem>;
82
+ doHover?: (context: ContextWithOffset) => Promise<MarkupContent | string | undefined>;
83
+ doSignatureHelp?: (context: ContextWithOffset) => Promise<SignatureHelp | null | undefined> | undefined;
84
+ findDefinition?: (context: ContextWithOffset) => Promise<DefinitionLocation[] | null | undefined>;
85
+ findLinks?: (context: CommonContext) => Promise<Link[]>;
86
+ [key: string]: any;
87
+ }
88
+ declare const offsetToPosition: (document: Text, offset: number) => {
89
+ line: number;
90
+ character: number;
91
+ };
92
+ declare const positionToOffset: (document: Text, position: {
93
+ line: number;
94
+ character: number;
95
+ }) => number | undefined;
96
+
97
+ export { type CodeAction, type Diagnostic, type LanguageConfig, type LanguageService, type LanguageServiceOptions, type Link, MarkerTag, type Transformer, languageIdFacet, offsetToPosition, positionToOffset, textDocumentField, transformerFacet, uriFacet };
@@ -0,0 +1,97 @@
1
+ import { CompletionList, CompletionItem, MarkupContent, SignatureHelp } from 'vscode-languageserver-types';
2
+ export { MarkupContent } from 'vscode-languageserver-types';
3
+ import { TextDocument } from 'vscode-languageserver-textdocument';
4
+ export { TextDocument } from 'vscode-languageserver-textdocument';
5
+ import { Severity } from '@coze-editor/extension-lint';
6
+ import { Facet, StateField, Extension, Text } from '@codemirror/state';
7
+ import { LRLanguage, StreamLanguage } from '@codemirror/language';
8
+
9
+ interface Range {
10
+ from: number;
11
+ to: number;
12
+ }
13
+ interface Mapping {
14
+ originalRangeFor: (range: Range) => Range | undefined;
15
+ generatedRangeFor: (range: Range) => Range | undefined;
16
+ originalOffsetFor: (offset: number) => number | undefined;
17
+ generatedOffsetFor: (offset: number) => number | undefined;
18
+ }
19
+ type Transformer = (text: string) => {
20
+ code: string;
21
+ mapping: Mapping;
22
+ };
23
+ declare const transformerFacet: Facet<Transformer, Transformer>;
24
+ declare const uriFacet: Facet<string, string>;
25
+ declare const languageIdFacet: Facet<string, string>;
26
+ type TextDocumentWithMapping = {
27
+ textDocument: TextDocument;
28
+ } & Mapping;
29
+ declare const textDocumentField: StateField<TextDocumentWithMapping>;
30
+
31
+ interface LanguageConfig {
32
+ language: LRLanguage | StreamLanguage<any>;
33
+ extensions?: Extension[];
34
+ languageService?: LanguageService;
35
+ }
36
+ interface CodeAction {
37
+ changes: {
38
+ from: number;
39
+ insert: string;
40
+ to?: number;
41
+ };
42
+ }
43
+ interface Link {
44
+ target: string;
45
+ range: {
46
+ from: number;
47
+ to: number;
48
+ };
49
+ }
50
+ interface LanguageServiceOptions {
51
+ lintDelay?: number;
52
+ }
53
+ interface CommonContext {
54
+ textDocument: TextDocument;
55
+ }
56
+ type ContextWithOffset = CommonContext & {
57
+ offset: number;
58
+ };
59
+ declare enum MarkerTag {
60
+ Unnecessary = 1,
61
+ Deprecated = 2
62
+ }
63
+
64
+ interface Diagnostic {
65
+ from: number;
66
+ to: number;
67
+ severity: Severity;
68
+ message: string;
69
+ tags?: MarkerTag[];
70
+ }
71
+
72
+ interface DefinitionLocation {
73
+ from: number;
74
+ to: number;
75
+ }
76
+ interface LanguageService {
77
+ options?: LanguageServiceOptions;
78
+ onTextDocumentDidChange?: (context: CommonContext) => void;
79
+ doValidation?: (context: CommonContext) => Promise<Diagnostic[]>;
80
+ doComplete?: (context: ContextWithOffset) => Promise<CompletionList | null | undefined>;
81
+ resolveCompletionItem?: (context: ContextWithOffset, entry: CompletionItem) => Promise<CompletionItem>;
82
+ doHover?: (context: ContextWithOffset) => Promise<MarkupContent | string | undefined>;
83
+ doSignatureHelp?: (context: ContextWithOffset) => Promise<SignatureHelp | null | undefined> | undefined;
84
+ findDefinition?: (context: ContextWithOffset) => Promise<DefinitionLocation[] | null | undefined>;
85
+ findLinks?: (context: CommonContext) => Promise<Link[]>;
86
+ [key: string]: any;
87
+ }
88
+ declare const offsetToPosition: (document: Text, offset: number) => {
89
+ line: number;
90
+ character: number;
91
+ };
92
+ declare const positionToOffset: (document: Text, position: {
93
+ line: number;
94
+ character: number;
95
+ }) => number | undefined;
96
+
97
+ export { type CodeAction, type Diagnostic, type LanguageConfig, type LanguageService, type LanguageServiceOptions, type Link, MarkerTag, type Transformer, languageIdFacet, offsetToPosition, positionToOffset, textDocumentField, transformerFacet, uriFacet };
package/dist/index.js ADDED
@@ -0,0 +1,134 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/index.ts
20
+ var index_exports = {};
21
+ __export(index_exports, {
22
+ MarkerTag: () => MarkerTag,
23
+ MarkupContent: () => import_vscode_languageserver_types.MarkupContent,
24
+ TextDocument: () => import_vscode_languageserver_textdocument2.TextDocument,
25
+ languageIdFacet: () => languageIdFacet,
26
+ offsetToPosition: () => offsetToPosition,
27
+ positionToOffset: () => positionToOffset,
28
+ textDocumentField: () => textDocumentField,
29
+ transformerFacet: () => transformerFacet,
30
+ uriFacet: () => uriFacet
31
+ });
32
+ module.exports = __toCommonJS(index_exports);
33
+ var import_vscode_languageserver_types = require("vscode-languageserver-types");
34
+ var import_vscode_languageserver_textdocument2 = require("vscode-languageserver-textdocument");
35
+
36
+ // src/text-document.ts
37
+ var import_vscode_languageserver_textdocument = require("vscode-languageserver-textdocument");
38
+ var import_utils = require("@coze-editor/utils");
39
+ var import_state = require("@codemirror/state");
40
+ var transformerFacet = import_state.Facet.define({
41
+ combine: import_utils.FacetCombineStrategy.Last
42
+ });
43
+ var uriFacet = import_state.Facet.define({
44
+ combine: import_utils.FacetCombineStrategy.Last
45
+ });
46
+ var languageIdFacet = import_state.Facet.define({
47
+ combine: import_utils.FacetCombineStrategy.Last
48
+ });
49
+ function identical(value) {
50
+ return value;
51
+ }
52
+ function transform(oldDocument, state) {
53
+ const uri = getURI(state);
54
+ const languageId = getLanguageId(state);
55
+ const transformer = state.facet(transformerFacet);
56
+ const version = oldDocument ? oldDocument.version + 1 : 0;
57
+ if (typeof transformer === "function") {
58
+ const { code, mapping } = transformer(state.doc.toString());
59
+ return {
60
+ textDocument: import_vscode_languageserver_textdocument.TextDocument.create(uri, languageId, version, code),
61
+ originalRangeFor: (range) => mapping.originalRangeFor(range),
62
+ generatedRangeFor: (range) => mapping.generatedRangeFor(range),
63
+ originalOffsetFor: (offset) => mapping.originalOffsetFor(offset),
64
+ generatedOffsetFor: (offset) => mapping.generatedOffsetFor(offset)
65
+ };
66
+ }
67
+ return {
68
+ textDocument: import_vscode_languageserver_textdocument.TextDocument.create(
69
+ uri,
70
+ languageId,
71
+ version,
72
+ state.doc.toString()
73
+ ),
74
+ originalRangeFor: identical,
75
+ generatedRangeFor: identical,
76
+ originalOffsetFor: identical,
77
+ generatedOffsetFor: identical
78
+ };
79
+ }
80
+ var textDocumentField = import_state.StateField.define({
81
+ create(state) {
82
+ return transform(null, state);
83
+ },
84
+ update(document, tr) {
85
+ if (tr.docChanged) {
86
+ return transform(document.textDocument, tr.state);
87
+ }
88
+ return document;
89
+ }
90
+ });
91
+ function getURI(state) {
92
+ return state.facet(uriFacet);
93
+ }
94
+ function getLanguageId(state) {
95
+ return state.facet(languageIdFacet) ?? "unknown";
96
+ }
97
+
98
+ // src/index.ts
99
+ var MarkerTag = /* @__PURE__ */ ((MarkerTag2) => {
100
+ MarkerTag2[MarkerTag2["Unnecessary"] = 1] = "Unnecessary";
101
+ MarkerTag2[MarkerTag2["Deprecated"] = 2] = "Deprecated";
102
+ return MarkerTag2;
103
+ })(MarkerTag || {});
104
+ var offsetToPosition = (document, offset) => {
105
+ const line = document.lineAt(offset);
106
+ return {
107
+ line: line.number - 1,
108
+ character: offset - line.from
109
+ };
110
+ };
111
+ var positionToOffset = (document, position) => {
112
+ if (position.line >= document.lines) {
113
+ return void 0;
114
+ }
115
+ const line = document.line(position.line + 1);
116
+ const offset = line.from + position.character;
117
+ if (offset > line.to) {
118
+ return void 0;
119
+ }
120
+ return offset;
121
+ };
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ MarkerTag,
125
+ MarkupContent,
126
+ TextDocument,
127
+ languageIdFacet,
128
+ offsetToPosition,
129
+ positionToOffset,
130
+ textDocumentField,
131
+ transformerFacet,
132
+ uriFacet
133
+ });
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/text-document.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n type CompletionItem,\n type CompletionList,\n MarkupContent,\n type SignatureHelp,\n} from 'vscode-languageserver-types';\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { type Severity } from '@coze-editor/extension-lint';\nimport { type Extension, type Text as CMText } from '@codemirror/state';\nimport { type LRLanguage, type StreamLanguage } from '@codemirror/language';\n\nexport interface LanguageConfig {\n language: LRLanguage | StreamLanguage<any>;\n extensions?: Extension[];\n languageService?: LanguageService;\n}\n\nexport interface CodeAction {\n changes: {\n from: number;\n insert: string;\n to?: number;\n };\n}\n\nexport interface Link {\n target: string;\n range: {\n from: number;\n to: number;\n };\n}\n\nexport interface LanguageServiceOptions {\n lintDelay?: number;\n}\n\ninterface CommonContext {\n textDocument: TextDocument;\n}\n\ntype ContextWithOffset = CommonContext & {\n offset: number;\n};\n\nexport enum MarkerTag {\n Unnecessary = 1,\n Deprecated = 2,\n}\n\nexport { MarkupContent };\n\ninterface Diagnostic {\n from: number;\n to: number;\n severity: Severity;\n message: string;\n tags?: MarkerTag[];\n}\n\nexport { Diagnostic };\n\ninterface DefinitionLocation {\n from: number;\n to: number;\n}\n\nexport interface LanguageService {\n options?: LanguageServiceOptions;\n onTextDocumentDidChange?: (context: CommonContext) => void;\n doValidation?: (context: CommonContext) => Promise<Diagnostic[]>;\n doComplete?: (\n context: ContextWithOffset,\n ) => Promise<CompletionList | null | undefined>;\n resolveCompletionItem?: (\n context: ContextWithOffset,\n entry: CompletionItem,\n ) => Promise<CompletionItem>;\n doHover?: (\n context: ContextWithOffset,\n ) => Promise<MarkupContent | string | undefined>;\n doSignatureHelp?: (\n context: ContextWithOffset,\n ) => Promise<SignatureHelp | null | undefined> | undefined;\n findDefinition?: (\n context: ContextWithOffset,\n ) => Promise<DefinitionLocation[] | null | undefined>;\n findLinks?: (context: CommonContext) => Promise<Link[]>;\n [key: string]: any;\n}\n\n// 0-based\nexport const offsetToPosition = (\n document: CMText,\n offset: number,\n): { line: number; character: number } => {\n const line = document.lineAt(offset);\n return {\n line: line.number - 1,\n character: offset - line.from,\n };\n};\n\n// 0-based\nexport const positionToOffset = (\n document: CMText,\n position: { line: number; character: number },\n): number | undefined => {\n if (position.line >= document.lines) {\n return undefined;\n }\n const line = document.line(position.line + 1);\n const offset = line.from + position.character;\n if (offset > line.to) {\n return undefined;\n }\n return offset;\n};\n\nexport {\n uriFacet,\n languageIdFacet,\n transformerFacet,\n textDocumentField,\n type Transformer,\n} from './text-document';\n\nexport { TextDocument };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { TextDocument } from 'vscode-languageserver-textdocument';\nimport { FacetCombineStrategy } from '@coze-editor/utils';\nimport { type EditorState, Facet, StateField } from '@codemirror/state';\n\ninterface Range {\n from: number;\n to: number;\n}\ninterface Mapping {\n originalRangeFor: (range: Range) => Range | undefined;\n generatedRangeFor: (range: Range) => Range | undefined;\n originalOffsetFor: (offset: number) => number | undefined;\n generatedOffsetFor: (offset: number) => number | undefined;\n}\ntype Transformer = (text: string) => {\n code: string;\n mapping: Mapping;\n};\n\nconst transformerFacet = Facet.define<Transformer, Transformer>({\n combine: FacetCombineStrategy.Last,\n});\n\nconst uriFacet = Facet.define<string, string>({\n combine: FacetCombineStrategy.Last,\n});\n\nconst languageIdFacet = Facet.define<string, string>({\n combine: FacetCombineStrategy.Last,\n});\n\nfunction identical<T>(value: T): T {\n return value;\n}\n\ntype TextDocumentWithMapping = {\n textDocument: TextDocument;\n} & Mapping;\n\nfunction transform(\n oldDocument: TextDocument | null,\n state: EditorState,\n): TextDocumentWithMapping {\n const uri = getURI(state);\n const languageId = getLanguageId(state);\n const transformer = state.facet(transformerFacet);\n const version = oldDocument ? oldDocument.version + 1 : 0;\n\n if (typeof transformer === 'function') {\n const { code, mapping } = transformer(state.doc.toString());\n\n return {\n textDocument: TextDocument.create(uri, languageId, version, code),\n originalRangeFor: (range: Range) => mapping.originalRangeFor(range),\n generatedRangeFor: (range: Range) => mapping.generatedRangeFor(range),\n originalOffsetFor: (offset: number) => mapping.originalOffsetFor(offset),\n generatedOffsetFor: (offset: number) =>\n mapping.generatedOffsetFor(offset),\n };\n }\n\n return {\n textDocument: TextDocument.create(\n uri,\n languageId,\n version,\n state.doc.toString(),\n ),\n originalRangeFor: identical<Range>,\n generatedRangeFor: identical<Range>,\n originalOffsetFor: identical<number>,\n generatedOffsetFor: identical<number>,\n };\n}\n\nconst textDocumentField = StateField.define<TextDocumentWithMapping>({\n create(state) {\n return transform(null, state);\n },\n update(document, tr) {\n if (tr.docChanged) {\n return transform(document.textDocument, tr.state);\n }\n\n return document;\n },\n});\n\nfunction getURI(state: EditorState) {\n return state.facet(uriFacet);\n}\n\nfunction getLanguageId(state: EditorState) {\n return state.facet(languageIdFacet) ?? 'unknown';\n}\n\nexport {\n uriFacet,\n languageIdFacet,\n transformerFacet,\n textDocumentField,\n type Transformer,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,yCAKO;AACP,IAAAA,6CAA6B;;;ACN7B,gDAA6B;AAC7B,mBAAqC;AACrC,mBAAoD;AAiBpD,IAAM,mBAAmB,mBAAM,OAAiC;AAAA,EAC9D,SAAS,kCAAqB;AAChC,CAAC;AAED,IAAM,WAAW,mBAAM,OAAuB;AAAA,EAC5C,SAAS,kCAAqB;AAChC,CAAC;AAED,IAAM,kBAAkB,mBAAM,OAAuB;AAAA,EACnD,SAAS,kCAAqB;AAChC,CAAC;AAED,SAAS,UAAa,OAAa;AACjC,SAAO;AACT;AAMA,SAAS,UACP,aACA,OACyB;AACzB,QAAM,MAAM,OAAO,KAAK;AACxB,QAAM,aAAa,cAAc,KAAK;AACtC,QAAM,cAAc,MAAM,MAAM,gBAAgB;AAChD,QAAM,UAAU,cAAc,YAAY,UAAU,IAAI;AAExD,MAAI,OAAO,gBAAgB,YAAY;AACrC,UAAM,EAAE,MAAM,QAAQ,IAAI,YAAY,MAAM,IAAI,SAAS,CAAC;AAE1D,WAAO;AAAA,MACL,cAAc,uDAAa,OAAO,KAAK,YAAY,SAAS,IAAI;AAAA,MAChE,kBAAkB,CAAC,UAAiB,QAAQ,iBAAiB,KAAK;AAAA,MAClE,mBAAmB,CAAC,UAAiB,QAAQ,kBAAkB,KAAK;AAAA,MACpE,mBAAmB,CAAC,WAAmB,QAAQ,kBAAkB,MAAM;AAAA,MACvE,oBAAoB,CAAC,WACnB,QAAQ,mBAAmB,MAAM;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,uDAAa;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,IAAI,SAAS;AAAA,IACrB;AAAA,IACA,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EACtB;AACF;AAEA,IAAM,oBAAoB,wBAAW,OAAgC;AAAA,EACnE,OAAO,OAAO;AACZ,WAAO,UAAU,MAAM,KAAK;AAAA,EAC9B;AAAA,EACA,OAAO,UAAU,IAAI;AACnB,QAAI,GAAG,YAAY;AACjB,aAAO,UAAU,SAAS,cAAc,GAAG,KAAK;AAAA,IAClD;AAEA,WAAO;AAAA,EACT;AACF,CAAC;AAED,SAAS,OAAO,OAAoB;AAClC,SAAO,MAAM,MAAM,QAAQ;AAC7B;AAEA,SAAS,cAAc,OAAoB;AACzC,SAAO,MAAM,MAAM,eAAe,KAAK;AACzC;;;ADjDO,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,sBAAA,iBAAc,KAAd;AACA,EAAAA,sBAAA,gBAAa,KAAb;AAFU,SAAAA;AAAA,GAAA;AA+CL,IAAM,mBAAmB,CAC9B,UACA,WACwC;AACxC,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,SAAO;AAAA,IACL,MAAM,KAAK,SAAS;AAAA,IACpB,WAAW,SAAS,KAAK;AAAA,EAC3B;AACF;AAGO,IAAM,mBAAmB,CAC9B,UACA,aACuB;AACvB,MAAI,SAAS,QAAQ,SAAS,OAAO;AACnC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,SAAS,KAAK,SAAS,OAAO,CAAC;AAC5C,QAAM,SAAS,KAAK,OAAO,SAAS;AACpC,MAAI,SAAS,KAAK,IAAI;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":["import_vscode_languageserver_textdocument","MarkerTag"]}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@coze-editor/code-language-shared",
3
+ "version": "0.1.0-alpha.0fd19e",
4
+ "description": "code-languages",
5
+ "license": "MIT",
6
+ "author": "fengzilong",
7
+ "maintainers": [],
8
+ "sideEffects": [
9
+ "**/*.css",
10
+ "**/*.less",
11
+ "**/*.sass",
12
+ "**/*.scss"
13
+ ],
14
+ "main": "./dist/esm/index.js",
15
+ "module": "./dist/esm/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "lint": "eslint && tsc --noEmit"
23
+ },
24
+ "dependencies": {
25
+ "@coze-editor/extension-lint": "0.1.0-alpha.0fd19e",
26
+ "@coze-editor/utils": "0.1.0-alpha.0fd19e",
27
+ "mitt": "^3.0.1",
28
+ "vscode-languageserver-textdocument": "^1.0.12",
29
+ "vscode-languageserver-types": "^3.17.5"
30
+ },
31
+ "devDependencies": {
32
+ "@codemirror/autocomplete": "^6.18.0",
33
+ "@codemirror/language": "^6.10.1",
34
+ "@codemirror/state": "^6.4.1",
35
+ "@codemirror/view": "^6.26.1",
36
+ "@coze-arch/ts-config": "workspace:*",
37
+ "@coze-editor/eslint-config": "workspace:*",
38
+ "@types/node": "^22",
39
+ "eslint": "9.14.0",
40
+ "tsup": "^8.0.1",
41
+ "typescript": "^5.8.2"
42
+ },
43
+ "peerDependencies": {
44
+ "@codemirror/autocomplete": "^6.18.0",
45
+ "@codemirror/language": "^6.0.0",
46
+ "@codemirror/state": "^6.4.1",
47
+ "@codemirror/view": "^6.26.1"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public",
51
+ "registry": "https://registry.npmjs.org"
52
+ },
53
+ "test:main": "./src/index.ts"
54
+ }