@lvce-editor/shared-process 0.13.0 → 0.14.0
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 +30 -0
- package/config/defaultSettings.json +6 -0
- 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 +7 -1
- package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +77 -27
- 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-vue/src/tokenizeVue.js +1 -1
- package/extensions/builtin.language-basics-xml/extension.json +3 -1
- package/package.json +9 -10
- 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/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,14 @@
|
|
|
1
|
+
import * as ErrorCodes from '../ErrorCodes/ErrorCodes.js'
|
|
2
|
+
import * as Process from '../Process/Process.js'
|
|
3
|
+
|
|
4
|
+
export const isIgnoredError = (error) => {
|
|
5
|
+
if (error && error.code === ErrorCodes.EPIPE && !process.connected) {
|
|
6
|
+
// parent process is disposed, ignore
|
|
7
|
+
return true
|
|
8
|
+
}
|
|
9
|
+
if (error && error.code === ErrorCodes.ERR_IPC_CHANNEL_CLOSED && !Process.isConnected()) {
|
|
10
|
+
// parent process is disposed, ignore
|
|
11
|
+
return true
|
|
12
|
+
}
|
|
13
|
+
return false
|
|
14
|
+
}
|
package/src/parts/Json/Json.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
// parsing error handling based on https://github.com/sindresorhus/parse-json/blob/main/index.js
|
|
2
2
|
|
|
3
|
+
import { JsonParsingError } from '../JsonParsingError/JsonParsingError.js'
|
|
4
|
+
|
|
3
5
|
export const parse = async (string, filePath) => {
|
|
4
6
|
try {
|
|
5
7
|
return JSON.parse(string)
|
|
6
8
|
} catch (error) {
|
|
7
9
|
const JsonError = await import('../JsonError/JsonError.js')
|
|
8
10
|
const errorProps = JsonError.getErrorPropsFromError(error, string, filePath)
|
|
9
|
-
|
|
10
|
-
jsonError.stack = errorProps.stack
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
jsonError.codeFrame = errorProps.codeFrame
|
|
13
|
-
throw jsonError
|
|
11
|
+
throw new JsonParsingError(errorProps.message, errorProps.codeFrame, errorProps.stack)
|
|
14
12
|
}
|
|
15
13
|
}
|
|
16
14
|
|
|
@@ -16,15 +16,13 @@ export const getErrorPropsFromError = (error, string, filePath) => {
|
|
|
16
16
|
const index = Number(indexMatch[1])
|
|
17
17
|
const location = lines.locationForIndex(index)
|
|
18
18
|
if (location) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
{ highlightCode: false }
|
|
23
|
-
)
|
|
19
|
+
const line = location.line + 1
|
|
20
|
+
const column = location.column + 1
|
|
21
|
+
const codeFrame = codeFrameColumns(string, { start: { line, column } }, { highlightCode: false })
|
|
24
22
|
return {
|
|
25
23
|
codeFrame,
|
|
26
24
|
message: 'Json Parsing Error',
|
|
27
|
-
stack: `at ${filePath}`,
|
|
25
|
+
stack: ` at ${filePath}:${line}:${column}`,
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
}
|
|
@@ -32,7 +30,7 @@ export const getErrorPropsFromError = (error, string, filePath) => {
|
|
|
32
30
|
return {
|
|
33
31
|
codeFrame: ``,
|
|
34
32
|
message: 'Json Parsing Error: Cannot parse empty string',
|
|
35
|
-
stack: `at ${filePath}`,
|
|
33
|
+
stack: ` at ${filePath}`,
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
|
|
@@ -41,22 +39,18 @@ export const getErrorPropsFromError = (error, string, filePath) => {
|
|
|
41
39
|
const index = string.length - 1
|
|
42
40
|
const location = lines.locationForIndex(index)
|
|
43
41
|
if (location) {
|
|
44
|
-
const codeFrame = codeFrameColumns(
|
|
45
|
-
string,
|
|
46
|
-
{ start: { line: location.line + 1, column: location.column + 1 } },
|
|
47
|
-
{ highlightCode: false }
|
|
48
|
-
)
|
|
42
|
+
const codeFrame = codeFrameColumns(string, { start: { line: location.line + 1, column: location.column + 1 } }, { highlightCode: false })
|
|
49
43
|
return {
|
|
50
44
|
codeFrame,
|
|
51
45
|
message: 'Json Parsing Error',
|
|
52
|
-
stack: `at ${filePath}`,
|
|
46
|
+
stack: ` at ${filePath}`,
|
|
53
47
|
}
|
|
54
48
|
}
|
|
55
49
|
}
|
|
56
50
|
return {
|
|
57
51
|
codeFrame: ``,
|
|
58
52
|
message: 'Json Parsing Error',
|
|
59
|
-
stack: `at ${filePath}`,
|
|
53
|
+
stack: ` at ${filePath}`,
|
|
60
54
|
}
|
|
61
55
|
}
|
|
62
56
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as JoinLines from '../JoinLines/JoinLines.js'
|
|
2
|
+
import * as SplitLines from '../SplitLines/SplitLines.js'
|
|
3
|
+
|
|
4
|
+
export class JsonParsingError extends Error {
|
|
5
|
+
constructor(message, codeFrame, stack) {
|
|
6
|
+
super(message)
|
|
7
|
+
this.name = 'JsonParsingError'
|
|
8
|
+
if (codeFrame) {
|
|
9
|
+
this.codeFrame = codeFrame
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (stack) {
|
|
13
|
+
const parentStack = JoinLines.joinLines(SplitLines.splitLines(this.stack).slice(1))
|
|
14
|
+
this.stack = this.name + ': ' + this.message + '\n' + stack + '\n' + parentStack
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -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
|
}
|