@lvce-editor/shared-process 0.13.0 → 0.14.1
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/config/defaultKeyBindings.json +1 -784
- package/config/defaultSettings.json +8 -1
- package/extensions/builtin.language-basics-css/extension.json +2 -1
- package/extensions/builtin.language-basics-css/languageConfiguration.json +21 -0
- package/extensions/builtin.language-basics-css/src/tokenizeCss.js +10 -1
- package/extensions/builtin.language-basics-dotenv/extension.json +5 -1
- package/extensions/builtin.language-basics-go/src/tokenizeGo.js +79 -10
- package/extensions/builtin.language-basics-html/languageConfiguration.json +66 -0
- package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +89 -27
- package/extensions/builtin.language-basics-java/src/tokenizeJava.js +6 -5
- package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +29 -1
- package/extensions/builtin.language-basics-json/extension.json +4 -2
- package/extensions/builtin.language-basics-json/src/tokenizeJson.js +3 -0
- package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +18 -5
- package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +26 -0
- package/extensions/builtin.language-basics-vue/src/tokenizeVue.js +1 -1
- package/extensions/builtin.language-basics-xml/extension.json +3 -1
- package/extensions/builtin.theme-atom-one-dark/color-theme.json +2 -2
- package/extensions/builtin.theme-ayu/color-theme.json +6 -2
- package/extensions/builtin.theme-cobalt2/color-theme.json +5 -2
- package/extensions/builtin.theme-slime/color-theme.json +2 -2
- package/package.json +10 -11
- package/src/parts/Assert/Assert.js +1 -6
- package/src/parts/AssertionError/AssertionError.js +6 -0
- package/src/parts/BulkReplacement/BulkReplacement.ipc.js +7 -0
- package/src/parts/BulkReplacement/BulkReplacement.js +20 -0
- package/src/parts/BulkReplacementContent/BulkReplacementContent.js +30 -0
- package/src/parts/ChildProcessError/ChildProcessError.js +45 -0
- package/src/parts/ChromeExtension/ChromeExtension.js +2 -5
- package/src/parts/CleanStack/CleanStack.js +90 -2
- package/src/parts/CliList/CliList.js +3 -0
- package/src/parts/ClipBoard/ClipBoard.js +2 -2
- package/src/parts/ClipBoard/ClipBoardGnome.js +1 -2
- package/src/parts/ClipBoard/ClipBoardNoop.js +2 -2
- package/src/parts/ClipBoard/ClipBoardWindows.js +1 -3
- package/src/parts/Command/Command.js +5 -10
- package/src/parts/Credentials/Credentials.ipc.js +5 -5
- package/src/parts/Credentials/Credentials.js +2 -10
- package/src/parts/Desktop/Desktop.js +22 -0
- package/src/parts/Download/Download.js +2 -2
- package/src/parts/Error/Error.js +1 -1
- package/src/parts/ErrorCodes/ErrorCodes.js +2 -1
- package/src/parts/ErrorHandling/ErrorHandling.js +8 -14
- package/src/parts/ExportStatic/ExportStatic.js +8 -3
- package/src/parts/ExtensionHost/ExtensionHost.js +1 -2
- package/src/parts/ExtensionHost/ExtensionHostKeyBindings.js +0 -12
- package/src/parts/ExtensionHostRpc/ExtensionHostRpc.js +1 -1
- package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +1 -1
- package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
- package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +1 -1
- package/src/parts/ExtensionLink/ExtensionLink.js +0 -19
- package/src/parts/ExtensionList/ExtensionList.js +11 -2
- package/src/parts/ExtensionManagement/ExtensionManagement.js +6 -58
- package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -1
- package/src/parts/ExtensionManagement/ExtensionManagementIconTheme.js +1 -1
- package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -3
- package/src/parts/ExtensionManifestInputType/ExtensionManifestInputType.js +2 -0
- package/src/parts/ExtensionManifests/ExtensionManifests.js +3 -0
- package/src/parts/ExtensionManifests/ExtensionManifestsFromFolder.js +5 -15
- package/src/parts/ExtensionManifests/ExtensionManifestsFromLinkedExtensionsFolder.js +56 -0
- package/src/parts/ExtensionUninstall/ExtensionUninstall.js +18 -0
- package/src/parts/ExtensionUnlink/ExtensionUnlink.js +1 -1
- package/src/parts/Extract/Extract.js +2 -6
- package/src/parts/ExtractZip/ExtractZip.js +1 -1
- package/src/parts/{Error → FileNotFoundError}/FileNotFoundError.js +9 -2
- package/src/parts/FileSystem/FileSystem.js +6 -32
- package/src/parts/FirstNodeWorkerEventType/FirstNodeWorkerEventType.js +5 -0
- package/src/parts/GetDirentType/GetDirentType.js +27 -0
- package/src/parts/GetFirstNodeChildProcessEvent/GetFirstNodeChildProcessEvent.js +39 -0
- package/src/parts/GetFirstNodeWorkerEvent/GetFirstNodeWorkerEvent.js +21 -0
- package/src/parts/GetNewLineIndex/GetNewLineIndex.js +9 -0
- package/src/parts/GetResponse/GetResponse.js +16 -6
- package/src/parts/GetTextSearchRipGrepArgs/GetTextSearchRipGrepArgs.js +14 -0
- package/src/parts/InstallExtension/InstallExtension.ipc.js +6 -0
- package/src/parts/InstallExtension/InstallExtension.js +33 -0
- package/src/parts/IpcParent/IpcParent.js +9 -0
- package/src/parts/IpcParentModule/IpcParentModule.js +12 -0
- package/src/parts/IpcParentType/IpcParentType.js +2 -0
- package/src/parts/IpcParentWithNodeForkedProcess/IpcParentWithNodeForkedProcess.js +49 -0
- package/src/parts/IpcParentWithNodeWorker/IpcParentWithNodeWorker.js +36 -0
- package/src/parts/IsEnoentErrorWindows/IsEnoentErrorWindows.js +3 -0
- package/src/parts/IsIgnoredError/IsIgnoredError.js +14 -0
- package/src/parts/Json/Json.js +3 -5
- package/src/parts/JsonError/JsonError.js +8 -14
- package/src/parts/JsonParsingError/JsonParsingError.js +17 -0
- package/src/parts/Jsonc/Jsonc.js +304 -0
- package/src/parts/JsoncCharCode/JsoncCharCode.js +23 -0
- package/src/parts/JsoncFile/JsoncFile.js +8 -0
- package/src/parts/JsoncTokenType/JsoncTokenType.js +11 -0
- package/src/parts/LimitString/LimitString.js +3 -1
- package/src/parts/MergeStacks/MergeStacks.js +3 -2
- package/src/parts/Module/Module.js +4 -0
- package/src/parts/ModuleId/ModuleId.js +2 -0
- package/src/parts/ModuleMap/ModuleMap.js +4 -0
- package/src/parts/Native/Native.js +1 -1
- package/src/parts/ParentIpc/ParentIpc.js +2 -1
- package/src/parts/Platform/Platform.js +0 -21
- package/src/parts/Preferences/Preferences.js +6 -8
- package/src/parts/PrettyError/PrettyError.js +16 -7
- package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -1
- package/src/parts/RecentlyOpened/RecentlyOpened.js +3 -7
- package/src/parts/RequiresSocket/RequiresSocket.js +1 -0
- package/src/parts/RipGrep/RipGrep.js +1 -1
- package/src/parts/SearchFile/SearchFile.js +4 -9
- package/src/parts/Socket/Socket.js +2 -7
- package/src/parts/Terminal/Terminal.ipc.js +4 -41
- package/src/parts/Terminal/Terminal.js +29 -25
- package/src/parts/TextSearch/TextSearch.js +102 -108
- package/src/parts/ToAbsolutePaths/ToAbsolutePaths.js +9 -0
- package/src/parts/ToTextSearchResult/ToTextSearchResult.js +42 -0
- package/src/parts/Trash/Trash.js +1 -2
- /package/src/parts/{RgPath/RgPath.js → RipGrepPath/RipGrepPath.js} +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import * as CharCode from '../JsoncCharCode/JsoncCharCode.js'
|
|
2
|
+
import * as TokenType from '../JsoncTokenType/JsoncTokenType.js'
|
|
3
|
+
|
|
4
|
+
const createScanner = (text) => {
|
|
5
|
+
let offset = 0
|
|
6
|
+
const length = text.length
|
|
7
|
+
|
|
8
|
+
const scanValue = () => {
|
|
9
|
+
while (offset < length) {
|
|
10
|
+
const code = text.charCodeAt(offset)
|
|
11
|
+
switch (code) {
|
|
12
|
+
case CharCode.CurlyOpen:
|
|
13
|
+
offset++
|
|
14
|
+
return TokenType.CurlyOpen
|
|
15
|
+
case CharCode.CurlyClose:
|
|
16
|
+
offset++
|
|
17
|
+
return TokenType.CurlyClose
|
|
18
|
+
case CharCode.SquareOpen:
|
|
19
|
+
offset++
|
|
20
|
+
return TokenType.SquareOpen
|
|
21
|
+
case CharCode.SquareClose:
|
|
22
|
+
offset++
|
|
23
|
+
return TokenType.SquareClose
|
|
24
|
+
case CharCode.DoubleQuote:
|
|
25
|
+
offset++
|
|
26
|
+
return TokenType.DoubleQuote
|
|
27
|
+
case CharCode.Comma:
|
|
28
|
+
text.slice(offset) //?
|
|
29
|
+
offset++
|
|
30
|
+
return TokenType.Comma
|
|
31
|
+
case CharCode.Zero:
|
|
32
|
+
case CharCode.One:
|
|
33
|
+
case CharCode.Two:
|
|
34
|
+
case CharCode.Three:
|
|
35
|
+
case CharCode.Four:
|
|
36
|
+
case CharCode.Five:
|
|
37
|
+
case CharCode.Six:
|
|
38
|
+
case CharCode.Seven:
|
|
39
|
+
case CharCode.Eight:
|
|
40
|
+
case CharCode.Nine:
|
|
41
|
+
case CharCode.Dot:
|
|
42
|
+
offset++
|
|
43
|
+
return TokenType.Numeric
|
|
44
|
+
case CharCode.CarriageReturn:
|
|
45
|
+
case CharCode.LineFeed:
|
|
46
|
+
case CharCode.Tab:
|
|
47
|
+
case CharCode.Space:
|
|
48
|
+
offset++
|
|
49
|
+
break
|
|
50
|
+
case CharCode.Slash:
|
|
51
|
+
return TokenType.Slash
|
|
52
|
+
default:
|
|
53
|
+
return TokenType.Literal
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return TokenType.Eof
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const scanString = () => {
|
|
60
|
+
while (offset < length) {
|
|
61
|
+
const code = text.charCodeAt(offset)
|
|
62
|
+
if (code === CharCode.DoubleQuote) {
|
|
63
|
+
break
|
|
64
|
+
}
|
|
65
|
+
offset++
|
|
66
|
+
}
|
|
67
|
+
offset++
|
|
68
|
+
const start = offset
|
|
69
|
+
while (offset < length) {
|
|
70
|
+
const code = text.charCodeAt(offset)
|
|
71
|
+
if (code === CharCode.DoubleQuote) {
|
|
72
|
+
break
|
|
73
|
+
}
|
|
74
|
+
offset++
|
|
75
|
+
}
|
|
76
|
+
const result = text.slice(start, offset)
|
|
77
|
+
offset++
|
|
78
|
+
return result
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const scanPropertyName = () => {
|
|
82
|
+
return scanString()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const scanPropertyColon = () => {
|
|
86
|
+
const code = text.charCodeAt(offset)
|
|
87
|
+
offset++
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const goBack = (delta) => {
|
|
91
|
+
offset -= delta
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const scanNumber = () => {
|
|
95
|
+
const start = offset
|
|
96
|
+
outer: while (offset < length) {
|
|
97
|
+
const code = text.charCodeAt(offset)
|
|
98
|
+
switch (code) {
|
|
99
|
+
case CharCode.Zero:
|
|
100
|
+
case CharCode.One:
|
|
101
|
+
case CharCode.Two:
|
|
102
|
+
case CharCode.Three:
|
|
103
|
+
case CharCode.Four:
|
|
104
|
+
case CharCode.Five:
|
|
105
|
+
case CharCode.Six:
|
|
106
|
+
case CharCode.Seven:
|
|
107
|
+
case CharCode.Eight:
|
|
108
|
+
case CharCode.Nine:
|
|
109
|
+
case CharCode.Dot:
|
|
110
|
+
break
|
|
111
|
+
default:
|
|
112
|
+
break outer
|
|
113
|
+
}
|
|
114
|
+
offset++
|
|
115
|
+
}
|
|
116
|
+
const result = text.slice(start, offset)
|
|
117
|
+
result
|
|
118
|
+
return result
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const scanLiteral = () => {
|
|
122
|
+
const start = offset
|
|
123
|
+
outer: while (offset < length) {
|
|
124
|
+
const code = text.charCodeAt(offset)
|
|
125
|
+
switch (code) {
|
|
126
|
+
case CharCode.LineFeed:
|
|
127
|
+
case CharCode.CarriageReturn:
|
|
128
|
+
case CharCode.Tab:
|
|
129
|
+
case CharCode.Space:
|
|
130
|
+
case CharCode.Comma:
|
|
131
|
+
break outer
|
|
132
|
+
default:
|
|
133
|
+
break
|
|
134
|
+
}
|
|
135
|
+
offset++
|
|
136
|
+
}
|
|
137
|
+
const result = text.slice(start, offset)
|
|
138
|
+
return result
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const scanBlockComment = () => {
|
|
142
|
+
while (offset < length) {
|
|
143
|
+
if (text.charCodeAt(offset) === CharCode.Star && text.charCodeAt(offset + 1) === CharCode.Slash) {
|
|
144
|
+
break
|
|
145
|
+
}
|
|
146
|
+
offset++
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const scanLineComment = () => {
|
|
151
|
+
while (offset < length) {
|
|
152
|
+
const code = text.charCodeAt(offset)
|
|
153
|
+
if (code === CharCode.LineFeed) {
|
|
154
|
+
break
|
|
155
|
+
}
|
|
156
|
+
offset++
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const scanComment = () => {
|
|
161
|
+
const code = text.charCodeAt(offset)
|
|
162
|
+
switch (code) {
|
|
163
|
+
case CharCode.Star:
|
|
164
|
+
return scanBlockComment()
|
|
165
|
+
case CharCode.Slash:
|
|
166
|
+
return scanLineComment()
|
|
167
|
+
default:
|
|
168
|
+
break
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return {
|
|
173
|
+
scanValue,
|
|
174
|
+
scanPropertyName,
|
|
175
|
+
scanPropertyColon,
|
|
176
|
+
scanString,
|
|
177
|
+
scanNumber,
|
|
178
|
+
goBack,
|
|
179
|
+
scanLiteral,
|
|
180
|
+
scanComment,
|
|
181
|
+
getOffset() {
|
|
182
|
+
return offset
|
|
183
|
+
},
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const parsePropertyName = (scanner) => {
|
|
188
|
+
const propertyName = scanner.scanPropertyName()
|
|
189
|
+
return propertyName
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const parsePropertyColon = (scanner) => {
|
|
193
|
+
scanner.scanPropertyColon()
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const parseNumber = (scanner) => {
|
|
197
|
+
scanner.goBack(1)
|
|
198
|
+
const rawValue = scanner.scanNumber()
|
|
199
|
+
const value = parseFloat(rawValue)
|
|
200
|
+
return value
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const parseObject = (scanner) => {
|
|
204
|
+
const object = {}
|
|
205
|
+
outer: while (true) {
|
|
206
|
+
const token = scanner.scanValue()
|
|
207
|
+
switch (token) {
|
|
208
|
+
case TokenType.Eof:
|
|
209
|
+
case TokenType.None:
|
|
210
|
+
case TokenType.CurlyClose:
|
|
211
|
+
break outer
|
|
212
|
+
case TokenType.DoubleQuote:
|
|
213
|
+
scanner.goBack(1)
|
|
214
|
+
const propertyName = parsePropertyName(scanner)
|
|
215
|
+
parsePropertyColon(scanner)
|
|
216
|
+
const value = parseValue(scanner)
|
|
217
|
+
object[propertyName] = value
|
|
218
|
+
case TokenType.Comma:
|
|
219
|
+
break
|
|
220
|
+
case TokenType.Slash:
|
|
221
|
+
parseComment(scanner)
|
|
222
|
+
break
|
|
223
|
+
default:
|
|
224
|
+
break
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return object
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const parseString = (scanner) => {
|
|
231
|
+
scanner.goBack(1)
|
|
232
|
+
const value = scanner.scanString()
|
|
233
|
+
return value
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const parseArray = (scanner) => {
|
|
237
|
+
const array = []
|
|
238
|
+
outer: while (true) {
|
|
239
|
+
const token = scanner.scanValue()
|
|
240
|
+
switch (token) {
|
|
241
|
+
case TokenType.Eof:
|
|
242
|
+
case TokenType.None:
|
|
243
|
+
case TokenType.SquareClose:
|
|
244
|
+
break outer
|
|
245
|
+
case TokenType.Slash:
|
|
246
|
+
scanner.scanComment()
|
|
247
|
+
break
|
|
248
|
+
default:
|
|
249
|
+
scanner.goBack(1)
|
|
250
|
+
const value = parseValue(scanner)
|
|
251
|
+
array.push(value)
|
|
252
|
+
break
|
|
253
|
+
case TokenType.Comma:
|
|
254
|
+
break
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return array
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const parseLiteral = (scanner) => {
|
|
261
|
+
const rawValue = scanner.scanLiteral()
|
|
262
|
+
switch (rawValue) {
|
|
263
|
+
case 'true':
|
|
264
|
+
return true
|
|
265
|
+
case 'false':
|
|
266
|
+
return false
|
|
267
|
+
case 'null':
|
|
268
|
+
return null
|
|
269
|
+
default:
|
|
270
|
+
return undefined
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const parseComment = (scanner) => {
|
|
275
|
+
scanner.scanComment()
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const parseValue = (scanner) => {
|
|
279
|
+
const token = scanner.scanValue()
|
|
280
|
+
switch (token) {
|
|
281
|
+
case TokenType.CurlyOpen:
|
|
282
|
+
return parseObject(scanner)
|
|
283
|
+
case TokenType.DoubleQuote:
|
|
284
|
+
return parseString(scanner)
|
|
285
|
+
case TokenType.Numeric:
|
|
286
|
+
return parseNumber(scanner)
|
|
287
|
+
case TokenType.SquareOpen:
|
|
288
|
+
return parseArray(scanner)
|
|
289
|
+
case TokenType.Literal:
|
|
290
|
+
return parseLiteral(scanner)
|
|
291
|
+
case TokenType.Slash:
|
|
292
|
+
parseComment(scanner)
|
|
293
|
+
return parseValue(scanner)
|
|
294
|
+
default:
|
|
295
|
+
token
|
|
296
|
+
return undefined
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export const parse = (text) => {
|
|
301
|
+
const scanner = createScanner(text)
|
|
302
|
+
const result = parseValue(scanner)
|
|
303
|
+
return result
|
|
304
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const CurlyOpen = '{'.charCodeAt(0)
|
|
2
|
+
export const CurlyClose = '}'.charCodeAt(0)
|
|
3
|
+
export const SquareOpen = '['.charCodeAt(0)
|
|
4
|
+
export const SquareClose = ']'.charCodeAt(0)
|
|
5
|
+
export const DoubleQuote = '"'.charCodeAt(0)
|
|
6
|
+
export const Comma = ','.charCodeAt(0)
|
|
7
|
+
export const Zero = '0'.charCodeAt(0)
|
|
8
|
+
export const One = '1'.charCodeAt(0)
|
|
9
|
+
export const Two = '2'.charCodeAt(0)
|
|
10
|
+
export const Three = '3'.charCodeAt(0)
|
|
11
|
+
export const Four = '4'.charCodeAt(0)
|
|
12
|
+
export const Five = '5'.charCodeAt(0)
|
|
13
|
+
export const Six = '6'.charCodeAt(0)
|
|
14
|
+
export const Seven = '7'.charCodeAt(0)
|
|
15
|
+
export const Eight = '8'.charCodeAt(0)
|
|
16
|
+
export const Nine = '9'.charCodeAt(0)
|
|
17
|
+
export const Dot = '.'.charCodeAt(0)
|
|
18
|
+
export const CarriageReturn = '\r'.charCodeAt(0)
|
|
19
|
+
export const LineFeed = '\n'.charCodeAt(0)
|
|
20
|
+
export const Space = ' '.charCodeAt(0)
|
|
21
|
+
export const Tab = '\t'.charCodeAt(0)
|
|
22
|
+
export const Slash = '/'.charCodeAt(0)
|
|
23
|
+
export const Star = '*'.charCodeAt(0)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as FileSystem from '../FileSystem/FileSystem.js'
|
|
2
|
+
import * as Jsonc from '../Jsonc/Jsonc.js'
|
|
3
|
+
|
|
4
|
+
export const readJsonc = async (absolutePath) => {
|
|
5
|
+
const content = await FileSystem.readFile(absolutePath)
|
|
6
|
+
const json = await Jsonc.parse(content)
|
|
7
|
+
return json
|
|
8
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const None = 0
|
|
2
|
+
export const CurlyOpen = 1
|
|
3
|
+
export const CurlyClose = 2
|
|
4
|
+
export const Eof = 3
|
|
5
|
+
export const SquareOpen = 4
|
|
6
|
+
export const SquareClose = 5
|
|
7
|
+
export const DoubleQuote = 6
|
|
8
|
+
export const Comma = 7
|
|
9
|
+
export const Numeric = 8
|
|
10
|
+
export const Slash = 9
|
|
11
|
+
export const Literal = 10
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import * as GetNewLineIndex from '../GetNewLineIndex/GetNewLineIndex.js'
|
|
2
|
+
|
|
1
3
|
export const limitString = (string, limit) => {
|
|
2
4
|
let lines = 0
|
|
3
5
|
let i = 0
|
|
4
6
|
while (i !== -1 && lines < limit) {
|
|
5
|
-
i =
|
|
7
|
+
i = GetNewLineIndex.getNewLineIndex(string, i + 1)
|
|
6
8
|
if (i === -1) {
|
|
7
9
|
break
|
|
8
10
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import * as GetNewLineIndex from '../GetNewLineIndex/GetNewLineIndex.js'
|
|
1
2
|
import * as NormalizeErrorLine from '../NormalizeErrorLine/NormalizeErrorLine.js'
|
|
2
3
|
|
|
3
4
|
export const mergeStacks = (parent, child) => {
|
|
4
5
|
if (!child) {
|
|
5
6
|
return parent
|
|
6
7
|
}
|
|
7
|
-
const parentNewLineIndex =
|
|
8
|
-
const childNewLineIndex =
|
|
8
|
+
const parentNewLineIndex = GetNewLineIndex.getNewLineIndex(parent)
|
|
9
|
+
const childNewLineIndex = GetNewLineIndex.getNewLineIndex(child)
|
|
9
10
|
if (childNewLineIndex === -1) {
|
|
10
11
|
return parent
|
|
11
12
|
}
|
|
@@ -2,6 +2,8 @@ import * as ModuleId from '../ModuleId/ModuleId.js'
|
|
|
2
2
|
|
|
3
3
|
export const load = (moduleId) => {
|
|
4
4
|
switch (moduleId) {
|
|
5
|
+
case ModuleId.BulkReplacement:
|
|
6
|
+
return import('../BulkReplacement/BulkReplacement.ipc.js')
|
|
5
7
|
case ModuleId.ChromeExtension:
|
|
6
8
|
return import('../ChromeExtension/ChromeExtension.ipc.js')
|
|
7
9
|
case ModuleId.ClipBoard:
|
|
@@ -40,6 +42,8 @@ export const load = (moduleId) => {
|
|
|
40
42
|
return import('../WebSocketServer/WebSocketServer.ipc.js')
|
|
41
43
|
case ModuleId.Workspace:
|
|
42
44
|
return import('../Workspace/Workspace.ipc.js')
|
|
45
|
+
case ModuleId.InstallExtension:
|
|
46
|
+
return import('../InstallExtension/InstallExtension.ipc.js')
|
|
43
47
|
default:
|
|
44
48
|
throw new Error(`module ${moduleId} not found`)
|
|
45
49
|
}
|
|
@@ -3,6 +3,8 @@ import * as ModuleId from '../ModuleId/ModuleId.js'
|
|
|
3
3
|
|
|
4
4
|
export const getModuleId = (commandId) => {
|
|
5
5
|
switch (commandId) {
|
|
6
|
+
case 'BulkReplacement.applyBulkReplacement':
|
|
7
|
+
return ModuleId.BulkReplacement
|
|
6
8
|
case 'ChromeExtension.install':
|
|
7
9
|
case 'ChromeExtension.uninstall':
|
|
8
10
|
return ModuleId.ChromeExtension
|
|
@@ -139,6 +141,8 @@ export const getModuleId = (commandId) => {
|
|
|
139
141
|
case 'Workspace.getHomeDir':
|
|
140
142
|
case 'Workspace.resolveRoot':
|
|
141
143
|
return ModuleId.Workspace
|
|
144
|
+
case 'InstallExtension.installExtension':
|
|
145
|
+
return ModuleId.InstallExtension
|
|
142
146
|
default:
|
|
143
147
|
throw new CommandNotFoundError(commandId)
|
|
144
148
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { MessagePort, parentPort } from 'node:worker_threads'
|
|
2
|
-
import VError from 'verror'
|
|
3
2
|
import * as Callback from '../Callback/Callback.js'
|
|
4
3
|
import * as Command from '../Command/Command.js'
|
|
5
4
|
import * as Debug from '../Debug/Debug.js'
|
|
@@ -9,6 +8,7 @@ import * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'
|
|
|
9
8
|
import * as ExtensionHostRpc from '../ExtensionHostRpc/ExtensionHostRpc.js'
|
|
10
9
|
import * as GetResponse from '../GetResponse/GetResponse.js'
|
|
11
10
|
import * as ProtocolType from '../ProtocolType/ProtocolType.js'
|
|
11
|
+
import { VError } from '../VError/VError.js'
|
|
12
12
|
// TODO add tests for this
|
|
13
13
|
|
|
14
14
|
// TODO handle structure: one shared process multiple extension hosts
|
|
@@ -143,6 +143,7 @@ const electronInitialize = (initializeMessage) => {
|
|
|
143
143
|
const response = await GetResponse.getResponse(message, fakeSocket)
|
|
144
144
|
port.postMessage(response)
|
|
145
145
|
} else {
|
|
146
|
+
console.warn(`[shared process] sending messages without id is deprecated: ${message.method}`)
|
|
146
147
|
Command.execute(message.method, fakeSocket, ...message.params)
|
|
147
148
|
}
|
|
148
149
|
} else {
|
|
@@ -2,7 +2,6 @@ import { homedir, tmpdir } from 'node:os'
|
|
|
2
2
|
import { join, resolve, sep } from 'node:path'
|
|
3
3
|
import { pathToFileURL } from 'node:url'
|
|
4
4
|
import { xdgCache, xdgConfig, xdgData, xdgState } from 'xdg-basedir'
|
|
5
|
-
import * as DesktopType from '../DesktopType/DesktopType.js'
|
|
6
5
|
import * as Path from '../Path/Path.js'
|
|
7
6
|
import * as Process from '../Process/Process.js'
|
|
8
7
|
import * as Root from '../Root/Root.js'
|
|
@@ -57,26 +56,6 @@ export const getMarketplaceUrl = () => {
|
|
|
57
56
|
return env.LVCE_MARKETPLACE_URL || 'https://marketplace.22e924c84de072d4b25b.com'
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
export const getDesktop = () => {
|
|
61
|
-
const { ORIGINAL_XDG_CURRENT_DESKTOP, XDG_CURRENT_DESKTOP } = env
|
|
62
|
-
if (ORIGINAL_XDG_CURRENT_DESKTOP && ORIGINAL_XDG_CURRENT_DESKTOP !== 'undefined') {
|
|
63
|
-
if (ORIGINAL_XDG_CURRENT_DESKTOP === 'ubuntu:GNOME') {
|
|
64
|
-
return DesktopType.Gnome
|
|
65
|
-
}
|
|
66
|
-
return ORIGINAL_XDG_CURRENT_DESKTOP
|
|
67
|
-
}
|
|
68
|
-
if (XDG_CURRENT_DESKTOP) {
|
|
69
|
-
if (XDG_CURRENT_DESKTOP === 'ubuntu:GNOME') {
|
|
70
|
-
return DesktopType.Gnome
|
|
71
|
-
}
|
|
72
|
-
return XDG_CURRENT_DESKTOP
|
|
73
|
-
}
|
|
74
|
-
if (isWindows) {
|
|
75
|
-
return DesktopType.Windows
|
|
76
|
-
}
|
|
77
|
-
return DesktopType.Unknown
|
|
78
|
-
}
|
|
79
|
-
|
|
80
59
|
export const getPathSeparator = () => {
|
|
81
60
|
return sep
|
|
82
61
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as
|
|
1
|
+
import * as ErrorCodes from '../ErrorCodes/ErrorCodes.js'
|
|
2
|
+
import * as JsoncFile from '../JsoncFile/JsoncFile.js'
|
|
3
3
|
import * as Platform from '../Platform/Platform.js'
|
|
4
4
|
import * as Process from '../Process/Process.js'
|
|
5
|
-
|
|
5
|
+
import { VError } from '../VError/VError.js'
|
|
6
6
|
// TODO need jsonc parser for settings with comments
|
|
7
7
|
|
|
8
8
|
export const getUserPreferences = async () => {
|
|
@@ -10,16 +10,15 @@ export const getUserPreferences = async () => {
|
|
|
10
10
|
const userSettingsPath = Platform.getUserSettingsPath()
|
|
11
11
|
let json
|
|
12
12
|
try {
|
|
13
|
-
json = await
|
|
13
|
+
json = await JsoncFile.readJsonc(userSettingsPath)
|
|
14
14
|
} catch (error) {
|
|
15
|
-
if (error && error.
|
|
15
|
+
if (error && error.code === ErrorCodes.ENOENT) {
|
|
16
16
|
return {}
|
|
17
17
|
}
|
|
18
18
|
throw error
|
|
19
19
|
}
|
|
20
20
|
return json
|
|
21
21
|
} catch (error) {
|
|
22
|
-
// @ts-ignore
|
|
23
22
|
throw new VError(error, 'failed to get user preferences')
|
|
24
23
|
}
|
|
25
24
|
}
|
|
@@ -28,9 +27,8 @@ export const getUserPreferences = async () => {
|
|
|
28
27
|
export const getDefaultPreferences = async () => {
|
|
29
28
|
try {
|
|
30
29
|
const defaultSettingsPath = Platform.getDefaultSettingsPath()
|
|
31
|
-
return await
|
|
30
|
+
return await JsoncFile.readJsonc(defaultSettingsPath)
|
|
32
31
|
} catch (error) {
|
|
33
|
-
// @ts-ignore
|
|
34
32
|
throw new VError(error, 'Failed to load default preferences')
|
|
35
33
|
}
|
|
36
34
|
}
|
|
@@ -2,7 +2,9 @@ import { codeFrameColumns } from '@babel/code-frame'
|
|
|
2
2
|
import { LinesAndColumns } from 'lines-and-columns'
|
|
3
3
|
import { readFileSync } from 'node:fs'
|
|
4
4
|
import { fileURLToPath } from 'node:url'
|
|
5
|
+
import { AssertionError } from '../AssertionError/AssertionError.js'
|
|
5
6
|
import * as CleanStack from '../CleanStack/CleanStack.js'
|
|
7
|
+
import * as EncodingType from '../EncodingType/EncodingType.js'
|
|
6
8
|
import * as ErrorCodes from '../ErrorCodes/ErrorCodes.js'
|
|
7
9
|
import * as JoinLines from '../JoinLines/JoinLines.js'
|
|
8
10
|
import * as Json from '../Json/Json.js'
|
|
@@ -29,7 +31,7 @@ const prepareModuleNotFoundError = (error) => {
|
|
|
29
31
|
}
|
|
30
32
|
const notFoundModule = match[1]
|
|
31
33
|
const importedFrom = match[2]
|
|
32
|
-
const rawLines = readFileSync(importedFrom,
|
|
34
|
+
const rawLines = readFileSync(importedFrom, EncodingType.Utf8)
|
|
33
35
|
let line = 0
|
|
34
36
|
let column = 0
|
|
35
37
|
const splittedLines = SplitLines.splitLines(rawLines)
|
|
@@ -59,6 +61,13 @@ const prepareModuleNotFoundError = (error) => {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
const getStackLinesToCut = (error) => {
|
|
65
|
+
if (error instanceof AssertionError) {
|
|
66
|
+
return 1
|
|
67
|
+
}
|
|
68
|
+
return 0
|
|
69
|
+
}
|
|
70
|
+
|
|
62
71
|
export const prepare = (error) => {
|
|
63
72
|
if (error && error.code === ErrorCodes.ERR_MODULE_NOT_FOUND) {
|
|
64
73
|
return prepareModuleNotFoundError(error)
|
|
@@ -70,9 +79,9 @@ export const prepare = (error) => {
|
|
|
70
79
|
error = cause
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
|
-
const
|
|
74
|
-
const lines =
|
|
75
|
-
const file = lines[
|
|
82
|
+
const linesToCut = getStackLinesToCut(error)
|
|
83
|
+
const lines = CleanStack.cleanStack(error.stack).slice(linesToCut)
|
|
84
|
+
const file = lines[0]
|
|
76
85
|
let codeFrame = ''
|
|
77
86
|
if (error.codeFrame) {
|
|
78
87
|
codeFrame = error.codeFrame
|
|
@@ -84,22 +93,22 @@ export const prepare = (error) => {
|
|
|
84
93
|
if (match) {
|
|
85
94
|
const [_, path, line, column] = match
|
|
86
95
|
const actualPath = getActualPath(path)
|
|
87
|
-
const rawLines = readFileSync(actualPath,
|
|
96
|
+
const rawLines = readFileSync(actualPath, EncodingType.Utf8)
|
|
88
97
|
const location = {
|
|
89
98
|
start: {
|
|
90
99
|
line: Number.parseInt(line),
|
|
91
100
|
column: Number.parseInt(column),
|
|
92
101
|
},
|
|
93
102
|
}
|
|
94
|
-
|
|
95
103
|
codeFrame = codeFrameColumns(rawLines, location)
|
|
96
104
|
}
|
|
97
105
|
}
|
|
98
|
-
const relevantStack = JoinLines.joinLines(lines
|
|
106
|
+
const relevantStack = JoinLines.joinLines(lines)
|
|
99
107
|
return {
|
|
100
108
|
message,
|
|
101
109
|
stack: relevantStack,
|
|
102
110
|
codeFrame,
|
|
111
|
+
type: error.constructor.name,
|
|
103
112
|
}
|
|
104
113
|
}
|
|
105
114
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as Logger from '../Logger/Logger.js'
|
|
2
|
+
|
|
1
3
|
export const printPrettyError = (prettyError, prefix = '') => {
|
|
2
|
-
|
|
4
|
+
Logger.error(`${prefix}${prettyError.type}: ${prettyError.message}\n\n${prettyError.codeFrame}\n\n${prettyError.stack}\n`)
|
|
3
5
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { dirname } from 'node:path'
|
|
2
|
-
import VError from 'verror'
|
|
3
2
|
import * as Assert from '../Assert/Assert.js'
|
|
4
|
-
import { FileNotFoundError } from '../
|
|
3
|
+
import { FileNotFoundError } from '../FileNotFoundError/FileNotFoundError.js'
|
|
5
4
|
import * as FileSystem from '../FileSystem/FileSystem.js'
|
|
6
5
|
import * as Json from '../Json/Json.js'
|
|
7
6
|
import * as JsonFile from '../JsonFile/JsonFile.js'
|
|
8
7
|
import * as Platform from '../Platform/Platform.js'
|
|
8
|
+
import { VError } from '../VError/VError.js'
|
|
9
9
|
|
|
10
10
|
const isValid = (recentlyOpened) => {
|
|
11
11
|
return recentlyOpened && Array.isArray(recentlyOpened)
|
|
@@ -16,11 +16,7 @@ const addToArrayUnique = (recentlyOpened, path) => {
|
|
|
16
16
|
if (index === -1) {
|
|
17
17
|
return [path, ...recentlyOpened]
|
|
18
18
|
}
|
|
19
|
-
return [
|
|
20
|
-
path,
|
|
21
|
-
...recentlyOpened.slice(0, index),
|
|
22
|
-
...recentlyOpened.slice(index + 1),
|
|
23
|
-
]
|
|
19
|
+
return [path, ...recentlyOpened.slice(0, index), ...recentlyOpened.slice(index + 1)]
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
const getRecentlyOpened = async (recentlyOpenedPath) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as NodeChildProcess from 'node:child_process'
|
|
2
2
|
import * as Assert from '../Assert/Assert.js'
|
|
3
3
|
import * as Exec from '../Exec/Exec.js'
|
|
4
|
-
import * as RgPath from '../
|
|
4
|
+
import * as RgPath from '../RipGrepPath/RipGrepPath.js'
|
|
5
5
|
|
|
6
6
|
export const ripGrepPath = process.env.RIP_GREP_PATH || RgPath.rgPath
|
|
7
7
|
|