@volar/source-map 1.0.0-beta.1 → 1.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/out/index.d.ts +18 -76
  2. package/out/index.js +70 -138
  3. package/package.json +3 -3
package/out/index.d.ts CHANGED
@@ -1,80 +1,22 @@
1
- export interface Range {
2
- start: number;
3
- end: number;
4
- }
5
- export declare enum Mode {
6
- /**
7
- * @case1
8
- * 123456 -> abcdef
9
- * ^ ^ ^ ^
10
- * @case2
11
- * 123456 -> abcdef
12
- * ^ ^ ^ ^
13
- * @case3
14
- * 123456 -> abcdef
15
- * ^^ ^^
16
- */
17
- Offset = 1,
18
- /**
19
- * @case1
20
- * 123456 -> abcdef
21
- * ^ ^ ^ ^
22
- * @case2
23
- * 123456 -> abcdef
24
- * ^ ^ NOT_MATCH
25
- * @case3
26
- * 123456 -> abcdef
27
- * ^^ NOT_MATCH
28
- */
29
- Totally = 2,
30
- /**
31
- * @case1
32
- * 123456 -> abcdef
33
- * ^ ^ ^ ^
34
- * @case2
35
- * 123456 -> abcdef
36
- * ^ ^ ^ ^
37
- * @case3
38
- * 123456 -> abcdef
39
- * ^^ ^ ^
40
- */
41
- Expand = 3
42
- }
43
- export type MappingBase = {
44
- mode: Mode;
45
- sourceRange: Range;
46
- mappedRange: Range;
47
- };
48
- export type Mapping<T> = MappingBase & {
1
+ import { SegmentWithData, SegmentWithoutData } from 'muggle-string';
2
+ export * from 'muggle-string';
3
+ export interface Mapping<T = any> {
4
+ source?: string;
5
+ sourceRange: [number, number];
6
+ generatedRange: [number, number];
49
7
  data: T;
50
- additional?: MappingBase[];
51
- };
8
+ }
52
9
  export declare class SourceMapBase<Data = undefined> {
53
- private __mappings;
54
- private __memo;
55
- get mappings(): Mapping<Data>[];
56
- set mappings(value: Mapping<Data>[]);
57
- constructor(_mappings?: Mapping<Data>[]);
58
- getSourceRange(start: number, end?: number, filter?: (data: Data) => boolean): [{
59
- start: number;
60
- end: number;
61
- }, Data] | undefined;
62
- getMappedRange(start: number, end?: number, filter?: (data: Data) => boolean): [{
63
- start: number;
64
- end: number;
65
- }, Data] | undefined;
66
- getSourceRanges(start: number, end?: number, filter?: (data: Data) => boolean): Generator<[{
67
- start: number;
68
- end: number;
69
- }, Data], void, unknown>;
70
- getMappedRanges(start: number, end?: number, filter?: (data: Data) => boolean): Generator<[{
71
- start: number;
72
- end: number;
73
- }, Data], void, unknown>;
74
- getRanges(startOffset: number, endOffset: number, sourceToTarget: boolean, filter?: (data: Data) => boolean): Generator<[{
75
- start: number;
76
- end: number;
77
- }, Data], void, unknown>;
10
+ readonly mappings: Mapping<Data>[];
11
+ private _memo;
12
+ private get memo();
13
+ constructor(mappings: Mapping<Data>[]);
14
+ toSourceOffset(start: number): readonly [number, Mapping<Data>] | undefined;
15
+ toGeneratedOffset(start: number): readonly [number, Mapping<Data>] | undefined;
16
+ toSourceOffsets(start: number): Generator<readonly [number, Mapping<Data>], void, unknown>;
17
+ toGeneratedOffsets(start: number): Generator<readonly [number, Mapping<Data>], void, unknown>;
18
+ matcing(startOffset: number, from: 'sourceRange' | 'generatedRange', to: 'sourceRange' | 'generatedRange'): Generator<readonly [number, Mapping<Data>], void, unknown>;
19
+ matchOffset(start: number, mappedFromRange: [number, number], mappedToRange: [number, number]): number | undefined;
78
20
  private binarySearchMemo;
79
- private getRange;
80
21
  }
22
+ export declare function buildMappings<T>(chunks: SegmentWithoutData[] | SegmentWithData<T>[]): Mapping<T>[];
package/out/index.js CHANGED
@@ -1,90 +1,42 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
13
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
14
+ };
1
15
  Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.SourceMapBase = exports.Mode = void 0;
3
- const reactivity_1 = require("@vue/reactivity");
4
- var Mode;
5
- (function (Mode) {
6
- /**
7
- * @case1
8
- * 123456 -> abcdef
9
- * ^ ^ ^ ^
10
- * @case2
11
- * 123456 -> abcdef
12
- * ^ ^ ^ ^
13
- * @case3
14
- * 123456 -> abcdef
15
- * ^^ ^^
16
- */
17
- Mode[Mode["Offset"] = 1] = "Offset";
18
- /**
19
- * @case1
20
- * 123456 -> abcdef
21
- * ^ ^ ^ ^
22
- * @case2
23
- * 123456 -> abcdef
24
- * ^ ^ NOT_MATCH
25
- * @case3
26
- * 123456 -> abcdef
27
- * ^^ NOT_MATCH
28
- */
29
- Mode[Mode["Totally"] = 2] = "Totally";
30
- /**
31
- * @case1
32
- * 123456 -> abcdef
33
- * ^ ^ ^ ^
34
- * @case2
35
- * 123456 -> abcdef
36
- * ^ ^ ^ ^
37
- * @case3
38
- * 123456 -> abcdef
39
- * ^^ ^ ^
40
- */
41
- Mode[Mode["Expand"] = 3] = "Expand";
42
- })(Mode = exports.Mode || (exports.Mode = {}));
16
+ exports.buildMappings = exports.SourceMapBase = void 0;
17
+ __exportStar(require("muggle-string"), exports);
18
+ ;
43
19
  class SourceMapBase {
44
- get mappings() {
45
- return this.__mappings.value;
46
- }
47
- set mappings(value) {
48
- this.__mappings.value = value;
49
- }
50
- constructor(_mappings) {
51
- this.__mappings = (0, reactivity_1.shallowRef)([]);
52
- this.__memo = (0, reactivity_1.computed)(() => {
20
+ get memo() {
21
+ if (!this._memo) {
53
22
  const self = this;
54
- const source = createMemo('sourceRange');
55
- const mapped = createMemo('mappedRange');
56
- return {
57
- source,
58
- mapped,
23
+ this._memo = {
24
+ sourceRange: createMemo('sourceRange'),
25
+ generatedRange: createMemo('generatedRange'),
59
26
  };
60
27
  function createMemo(key) {
61
28
  const offsets = new Set();
62
29
  for (const mapping of self.mappings) {
63
- offsets.add(mapping[key].start);
64
- offsets.add(mapping[key].end);
65
- if (mapping.additional) {
66
- for (const addition of mapping.additional) {
67
- offsets.add(addition[key].start);
68
- offsets.add(addition[key].end);
69
- }
70
- }
30
+ offsets.add(mapping[key][0]);
31
+ offsets.add(mapping[key][1]);
71
32
  }
72
33
  const arr = [...offsets].sort((a, b) => a - b).map(offset => ({ offset, mappings: new Set() }));
73
34
  for (const mapping of self.mappings) {
74
- const startIndex = binarySearch(mapping[key].start);
75
- const endIndex = binarySearch(mapping[key].end);
35
+ const startIndex = binarySearch(mapping[key][0]);
36
+ const endIndex = binarySearch(mapping[key][1]);
76
37
  for (let i = startIndex; i <= endIndex; i++) {
77
38
  arr[i].mappings.add(mapping);
78
39
  }
79
- if (mapping.additional) {
80
- for (const addition of mapping.additional) {
81
- const startIndex = binarySearch(addition[key].start);
82
- const endIndex = binarySearch(addition[key].end);
83
- for (let i = startIndex; i <= endIndex; i++) {
84
- arr[i].mappings.add(mapping);
85
- }
86
- }
87
- }
88
40
  }
89
41
  return arr;
90
42
  function binarySearch(start) {
@@ -105,59 +57,52 @@ class SourceMapBase {
105
57
  }
106
58
  }
107
59
  }
108
- });
109
- this.mappings = _mappings !== null && _mappings !== void 0 ? _mappings : [];
60
+ }
61
+ return this._memo;
62
+ }
63
+ constructor(mappings) {
64
+ this.mappings = mappings;
110
65
  }
111
- getSourceRange(start, end, filter) {
112
- for (const mapped of this.getRanges(start, end !== null && end !== void 0 ? end : start, false, filter)) {
66
+ toSourceOffset(start) {
67
+ for (const mapped of this.matcing(start, 'generatedRange', 'sourceRange')) {
113
68
  return mapped;
114
69
  }
115
70
  }
116
- getMappedRange(start, end, filter) {
117
- for (const mapped of this.getRanges(start, end !== null && end !== void 0 ? end : start, true, filter)) {
71
+ toGeneratedOffset(start) {
72
+ for (const mapped of this.matcing(start, 'sourceRange', 'generatedRange')) {
118
73
  return mapped;
119
74
  }
120
75
  }
121
- getSourceRanges(start, end, filter) {
122
- return this.getRanges(start, end !== null && end !== void 0 ? end : start, false, filter);
76
+ toSourceOffsets(start) {
77
+ return this.matcing(start, 'generatedRange', 'sourceRange');
123
78
  }
124
- getMappedRanges(start, end, filter) {
125
- return this.getRanges(start, end !== null && end !== void 0 ? end : start, true, filter);
79
+ toGeneratedOffsets(start) {
80
+ return this.matcing(start, 'sourceRange', 'generatedRange');
126
81
  }
127
- *getRanges(startOffset, endOffset, sourceToTarget, filter) {
128
- const memo = this.__memo.value;
129
- const _memo = sourceToTarget ? memo.source : memo.mapped;
130
- if (_memo.length === 0)
82
+ *matcing(startOffset, from, to) {
83
+ const memo = this.memo[from];
84
+ if (memo.length === 0)
131
85
  return;
132
- const { low: start, high: end, } = startOffset === endOffset ? this.binarySearchMemo(_memo, startOffset) : {
133
- low: this.binarySearchMemo(_memo, startOffset).low,
134
- high: this.binarySearchMemo(_memo, endOffset).high,
135
- };
86
+ const { low: start, high: end, } = this.binarySearchMemo(memo, startOffset);
136
87
  const skip = new Set();
137
88
  for (let i = start; i <= end; i++) {
138
- for (const mapping of _memo[i].mappings) {
89
+ for (const mapping of memo[i].mappings) {
139
90
  if (skip.has(mapping)) {
140
91
  continue;
141
92
  }
142
93
  skip.add(mapping);
143
- if (filter && !filter(mapping.data))
144
- continue;
145
- const mapped = this.getRange(startOffset, endOffset, sourceToTarget, mapping.mode, mapping.sourceRange, mapping.mappedRange, mapping.data);
94
+ const mapped = this.matchOffset(startOffset, mapping[from], mapping[to]);
146
95
  if (mapped) {
147
- yield mapped;
148
- }
149
- else if (mapping.additional) {
150
- for (const other of mapping.additional) {
151
- const mapped = this.getRange(startOffset, endOffset, sourceToTarget, other.mode, other.sourceRange, other.mappedRange, mapping.data);
152
- if (mapped) {
153
- yield mapped;
154
- break; // only return first match additional range
155
- }
156
- }
96
+ yield [mapped, mapping];
157
97
  }
158
98
  }
159
99
  }
160
100
  }
101
+ matchOffset(start, mappedFromRange, mappedToRange) {
102
+ if (start >= mappedFromRange[0] && start <= mappedFromRange[1]) {
103
+ return mappedToRange[0] + start - mappedFromRange[0];
104
+ }
105
+ }
161
106
  binarySearchMemo(array, start) {
162
107
  let low = 0;
163
108
  let high = array.length - 1;
@@ -181,40 +126,27 @@ class SourceMapBase {
181
126
  high: Math.min(Math.max(low, high, 0), array.length - 1),
182
127
  };
183
128
  }
184
- getRange(start, end, sourceToTarget, mode, sourceRange, targetRange, data) {
185
- const mappedToRange = sourceToTarget ? targetRange : sourceRange;
186
- const mappedFromRange = sourceToTarget ? sourceRange : targetRange;
187
- if (mode === Mode.Totally) {
188
- if (start === mappedFromRange.start && end === mappedFromRange.end) {
189
- const _start = mappedToRange.start;
190
- const _end = mappedToRange.end;
191
- return [{
192
- start: Math.min(_start, _end),
193
- end: Math.max(_start, _end),
194
- }, data];
195
- }
196
- }
197
- else if (mode === Mode.Offset) {
198
- if (start >= mappedFromRange.start && end <= mappedFromRange.end) {
199
- const _start = mappedToRange.start + start - mappedFromRange.start;
200
- const _end = mappedToRange.end + end - mappedFromRange.end;
201
- return [{
202
- start: Math.min(_start, _end),
203
- end: Math.max(_start, _end),
204
- }, data];
205
- }
129
+ }
130
+ exports.SourceMapBase = SourceMapBase;
131
+ function buildMappings(chunks) {
132
+ let length = 0;
133
+ const mappings = [];
134
+ for (const segment of chunks) {
135
+ if (typeof segment === 'string') {
136
+ length += segment.length;
206
137
  }
207
- else if (mode === Mode.Expand) {
208
- if (start >= mappedFromRange.start && end <= mappedFromRange.end) {
209
- const _start = mappedToRange.start;
210
- const _end = mappedToRange.end;
211
- return [{
212
- start: Math.min(_start, _end),
213
- end: Math.max(_start, _end),
214
- }, data];
215
- }
138
+ else {
139
+ mappings.push({
140
+ generatedRange: [length, length + segment[0].length],
141
+ source: segment[1],
142
+ sourceRange: typeof segment[2] === 'number' ? [segment[2], segment[2] + segment[0].length] : segment[2],
143
+ // @ts-ignore
144
+ data: segment[3],
145
+ });
146
+ length += segment[0].length;
216
147
  }
217
148
  }
149
+ return mappings;
218
150
  }
219
- exports.SourceMapBase = SourceMapBase;
151
+ exports.buildMappings = buildMappings;
220
152
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/source-map",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.3",
4
4
  "main": "out/index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -13,7 +13,7 @@
13
13
  "directory": "packages/source-map"
14
14
  },
15
15
  "dependencies": {
16
- "@vue/reactivity": "^3.2.38"
16
+ "muggle-string": "^0.1.0"
17
17
  },
18
- "gitHead": "3421929c584e8fafd772b2386c12ffe9b48355f2"
18
+ "gitHead": "b7242f995970b4eedfcf068619497eb845e9ac73"
19
19
  }