@lvce-editor/shared-process 0.11.9 → 0.11.11
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 +25 -0
- package/config/defaultSettings.json +2 -7
- package/extensions/builtin.language-basics-coffeescript/src/tokenizeCoffeeScript.js +232 -3
- package/extensions/builtin.language-basics-cpp/src/tokenizeCpp.js +14 -0
- package/extensions/builtin.language-basics-css/src/tokenizeCss.js +8 -0
- package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +52 -4
- package/extensions/builtin.language-basics-python/src/tokenizePython.js +1 -1
- package/extensions/builtin.language-basics-ruby/README.md +14 -0
- package/extensions/builtin.language-basics-ruby/extension.json +48 -0
- package/extensions/builtin.language-basics-ruby/src/tokenizeRuby.js +241 -0
- package/extensions/builtin.language-basics-scss/README.md +14 -0
- package/extensions/builtin.language-basics-scss/extension.json +12 -0
- package/extensions/builtin.language-basics-scss/src/tokenizeScss.js +28 -0
- package/extensions/builtin.language-basics-shellscript/extension.json +2 -1
- package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +75 -23
- package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +87 -13
- package/extensions/builtin.language-basics-xml/extension.json +2 -1
- package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +7 -0
- package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +8 -1
- package/extensions/builtin.theme-cobalt2/color-theme.json +4 -0
- package/extensions/builtin.theme-gruvbox/color-theme.json +4 -0
- package/extensions/builtin.theme-palenight/color-theme.json +4 -0
- package/extensions/builtin.theme-slime/color-theme.json +9 -1
- package/index.js +4 -5
- package/package.json +6 -6
- package/src/parts/Cli/Cli.js +2 -2
- package/src/parts/CliInstall/CliInstall.js +21 -6
- package/src/parts/CliList/CliList.js +3 -2
- package/src/parts/CliUnlink/CliUnlink.js +1 -1
- package/src/parts/DownloadAndExtract/DownloadAndExtract.js +18 -8
- package/src/parts/ErrorHandling/ErrorHandling.js +4 -9
- package/src/parts/ExportStatic/ExportStatic.js +58 -331
- package/src/parts/ExtensionHost/ExtensionHost.js +4 -7
- package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -4
- package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -4
- package/src/parts/FileSystem/FileSystem.js +5 -15
- package/src/parts/GetResponse/GetResponse.js +10 -14
- package/src/parts/JsonRpc/JsonRpc.js +3 -6
- package/src/parts/JsonRpcErrorCode/JsonRpcErrorCode.js +2 -0
- package/src/parts/JsonRpcVersion/JsonRpcVersion.js +1 -0
- package/src/parts/OutputChannel/OutputChannel.ipc.js +3 -2
- package/src/parts/Terminal/Terminal.js +5 -4
- package/src/sharedProcessMain.js +2 -5
|
@@ -83,6 +83,7 @@ const RE_TAGNAME = /^[!\w\-]+/
|
|
|
83
83
|
const RE_TEXT = /^[^<>\n]+/
|
|
84
84
|
const RE_WHITESPACE = /^\s+/
|
|
85
85
|
const RE_WORD = /^[^\s]+/
|
|
86
|
+
const RE_QUESTION_MARK_TAG_NAME = /^\?\w+/
|
|
86
87
|
|
|
87
88
|
export const initialLineState = {
|
|
88
89
|
state: State.TopLevelContent,
|
|
@@ -143,6 +144,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
143
144
|
} else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
|
|
144
145
|
token = TokenType.PunctuationTag
|
|
145
146
|
state = State.TopLevelContent
|
|
147
|
+
} else if ((next = part.match(RE_QUESTION_MARK_TAG_NAME))) {
|
|
148
|
+
token = TokenType.TagName
|
|
149
|
+
state = State.InsideOpeningTag
|
|
146
150
|
} else if ((next = part.match(RE_ANY_TEXT))) {
|
|
147
151
|
token = TokenType.Text
|
|
148
152
|
state = State.TopLevelContent
|
|
@@ -205,6 +209,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
205
209
|
} else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
|
|
206
210
|
token = TokenType.PunctuationTag
|
|
207
211
|
state = State.TopLevelContent
|
|
212
|
+
} else if ((next = part.match(RE_DOUBLE_QUOTE))) {
|
|
213
|
+
token = TokenType.PunctuationString
|
|
214
|
+
state = State.InsideDoubleQuoteString
|
|
208
215
|
} else if ((next = part.match(RE_TAG_TEXT))) {
|
|
209
216
|
token = TokenType.Text
|
|
210
217
|
state = State.TopLevelContent
|
|
@@ -109,6 +109,7 @@ export const initialLineState = {
|
|
|
109
109
|
tokens: [],
|
|
110
110
|
indent: '',
|
|
111
111
|
keyOffset: 0,
|
|
112
|
+
stack: [],
|
|
112
113
|
}
|
|
113
114
|
|
|
114
115
|
export const hasArrayReturn = true
|
|
@@ -137,6 +138,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
137
138
|
let token = TokenType.None
|
|
138
139
|
let state = lineState.state
|
|
139
140
|
let keyOffset = lineState.keyOffset
|
|
141
|
+
const stack = lineState.stack
|
|
140
142
|
while (index < line.length) {
|
|
141
143
|
const part = line.slice(index)
|
|
142
144
|
switch (state) {
|
|
@@ -184,7 +186,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
184
186
|
case State.InsideLineComment:
|
|
185
187
|
if ((next = part.match(RE_ANYTHING))) {
|
|
186
188
|
token = TokenType.Comment
|
|
187
|
-
state = State.TopLevelContent
|
|
189
|
+
state = stack.pop() || State.TopLevelContent
|
|
188
190
|
} else {
|
|
189
191
|
throw new Error('no')
|
|
190
192
|
}
|
|
@@ -245,6 +247,10 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
245
247
|
if ((next = part.match(RE_WHITESPACE))) {
|
|
246
248
|
token = TokenType.Whitespace
|
|
247
249
|
state = State.AfterPipe
|
|
250
|
+
} else if ((next = part.match(RE_LINE_COMMENT_START))) {
|
|
251
|
+
token = TokenType.Comment
|
|
252
|
+
state = State.InsideLineComment
|
|
253
|
+
stack.push(State.AfterPipe)
|
|
248
254
|
} else {
|
|
249
255
|
throw new Error('no')
|
|
250
256
|
}
|
|
@@ -387,5 +393,6 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
387
393
|
state,
|
|
388
394
|
tokens,
|
|
389
395
|
keyOffset,
|
|
396
|
+
stack,
|
|
390
397
|
}
|
|
391
398
|
}
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
|
|
31
31
|
"MainBackground": "#1e2324",
|
|
32
32
|
|
|
33
|
+
"MenuItemHoverBackground": "rgb(81, 95, 89)",
|
|
34
|
+
|
|
33
35
|
"PanelBackground": "#1b2020",
|
|
34
36
|
"PanelBorderTopColor": "rgba(128, 128, 128, 0.35)",
|
|
35
37
|
"PanelTabForeground": "rgba(231, 231, 231, 0.6)",
|
|
@@ -52,7 +54,9 @@
|
|
|
52
54
|
"TitleBarBackground": "rgb(40, 46, 47)",
|
|
53
55
|
"TitleBarBorderBottomColor": "#222",
|
|
54
56
|
"TitleBarColor": "#cccccc",
|
|
55
|
-
"TitleBarColorInactive": "rgba(204, 204, 204, 0.6)"
|
|
57
|
+
"TitleBarColorInactive": "rgba(204, 204, 204, 0.6)",
|
|
58
|
+
|
|
59
|
+
"WorkbenchForeground": "#cccccc"
|
|
56
60
|
},
|
|
57
61
|
"tokenColors": [
|
|
58
62
|
{
|
|
@@ -230,6 +234,10 @@
|
|
|
230
234
|
{
|
|
231
235
|
"name": "KeywordThis",
|
|
232
236
|
"foreground": "#BE9296"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"name": "KeywordOperator",
|
|
240
|
+
"foreground": "#B4B4B4"
|
|
233
241
|
}
|
|
234
242
|
]
|
|
235
243
|
}
|
package/index.js
CHANGED
|
@@ -5,12 +5,11 @@ const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
|
5
5
|
|
|
6
6
|
export const sharedProcessPath = join(__dirname, 'src', 'sharedProcessMain.js')
|
|
7
7
|
|
|
8
|
-
export const exportStatic = async ({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
8
|
+
export const exportStatic = async ({ extensionPath = process.cwd(), testPath = '', root = '' } = {}) => {
|
|
9
|
+
if (!root) {
|
|
10
|
+
throw new Error(`root argument is required`)
|
|
11
|
+
}
|
|
12
12
|
const fn = await import('./src/parts/ExportStatic/ExportStatic.js')
|
|
13
|
-
const root = process.cwd()
|
|
14
13
|
if (extensionPath !== root) {
|
|
15
14
|
extensionPath = join(root, extensionPath)
|
|
16
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/shared-process",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.11",
|
|
4
4
|
"description": "Utility package for @lvce-editor/server",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@babel/code-frame": "^7.18.6",
|
|
20
|
-
"@lvce-editor/extension-host": "0.11.
|
|
21
|
-
"@lvce-editor/extension-host-helper-process": "0.11.
|
|
22
|
-
"@lvce-editor/pty-host": "0.11.
|
|
20
|
+
"@lvce-editor/extension-host": "0.11.11",
|
|
21
|
+
"@lvce-editor/extension-host-helper-process": "0.11.11",
|
|
22
|
+
"@lvce-editor/pty-host": "0.11.11",
|
|
23
23
|
"debug": "^4.3.4",
|
|
24
24
|
"execa": "^6.1.0",
|
|
25
25
|
"exit-hook": "^3.1.4",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"open": "^8.4.0",
|
|
30
30
|
"p-queue": "^7.3.0",
|
|
31
31
|
"parse-json": "^6.0.2",
|
|
32
|
-
"tail": "^2.2.
|
|
32
|
+
"tail": "^2.2.5",
|
|
33
33
|
"tar-fs": "^2.1.1",
|
|
34
34
|
"tmp-promise": "^3.0.3",
|
|
35
35
|
"trash": "^8.1.0",
|
|
36
36
|
"verror": "^1.10.1",
|
|
37
|
-
"ws": "^8.
|
|
37
|
+
"ws": "^8.12.0",
|
|
38
38
|
"xdg-basedir": "^5.1.0"
|
|
39
39
|
},
|
|
40
40
|
"optionalDependencies": {
|
package/src/parts/Cli/Cli.js
CHANGED
|
@@ -16,12 +16,12 @@ const getModule = (argv0) => {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export const handleCliArgs = async (argv
|
|
19
|
+
export const handleCliArgs = async (argv) => {
|
|
20
20
|
const argv0 = argv[0]
|
|
21
21
|
const module = await getModule(argv0)
|
|
22
22
|
// console.log('handle cli args')
|
|
23
23
|
try {
|
|
24
|
-
await module.handleCliArgs(argv
|
|
24
|
+
await module.handleCliArgs(argv)
|
|
25
25
|
} catch (error) {
|
|
26
26
|
Logger.error(error)
|
|
27
27
|
Process.setExitCode(1)
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import * as ExtensionInstall from '../ExtensionInstall/ExtensionInstall.js'
|
|
2
2
|
import * as Logger from '../Logger/Logger.js'
|
|
3
|
+
import * as Process from '../Process/Process.js'
|
|
3
4
|
|
|
4
|
-
export const handleCliArgs = async (argv
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export const handleCliArgs = async (argv) => {
|
|
6
|
+
try {
|
|
7
|
+
const extension = argv[1]
|
|
8
|
+
if (!extension) {
|
|
9
|
+
Logger.error('extension argument is required')
|
|
10
|
+
return
|
|
11
|
+
}
|
|
12
|
+
await ExtensionInstall.install(extension)
|
|
13
|
+
} catch (error) {
|
|
14
|
+
if (error && error.message && error.message.includes('Response code')) {
|
|
15
|
+
Logger.error(error.message)
|
|
16
|
+
Process.setExitCode(128)
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
if (error && error.message && error.message.includes('getaddrinfo EAI_AGAIN')) {
|
|
20
|
+
Logger.error(error.message)
|
|
21
|
+
Process.setExitCode(128)
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
throw error
|
|
9
25
|
}
|
|
10
|
-
await ExtensionInstall.install(extension)
|
|
11
26
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as ExtensionList from '../ExtensionList/ExtensionList.js'
|
|
2
|
+
import * as Logger from '../Logger/Logger.js'
|
|
2
3
|
|
|
3
4
|
const getOutputLine = (extension) => {
|
|
4
5
|
return `${extension.id}: ${extension.version}`
|
|
@@ -8,8 +9,8 @@ const getOutput = (extensions) => {
|
|
|
8
9
|
return extensions.map(getOutputLine).join('\n')
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export const handleCliArgs = async (argv
|
|
12
|
+
export const handleCliArgs = async (argv) => {
|
|
12
13
|
const extensions = await ExtensionList.list()
|
|
13
14
|
const output = getOutput(extensions)
|
|
14
|
-
|
|
15
|
+
Logger.info(output)
|
|
15
16
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as ExtensionUnlink from '../ExtensionUnlink/ExtensionUnlink.js'
|
|
2
2
|
import * as Process from '../Process/Process.js'
|
|
3
3
|
|
|
4
|
-
export const handleCliArgs = async (argv
|
|
4
|
+
export const handleCliArgs = async (argv) => {
|
|
5
5
|
const path = argv.length > 1 ? argv[1] : Process.cwd()
|
|
6
6
|
await ExtensionUnlink.unlink(path)
|
|
7
7
|
}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import got from 'got'
|
|
1
|
+
import got, { RequestError } from 'got'
|
|
2
2
|
import { pipeline } from 'stream/promises'
|
|
3
3
|
import tar from 'tar-fs'
|
|
4
4
|
import { createGunzip } from 'zlib'
|
|
5
|
+
import { VError } from '../VError/VError.js'
|
|
5
6
|
|
|
6
7
|
export const downloadAndExtractTarGz = async ({ url, outDir, strip }) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
try {
|
|
9
|
+
await pipeline(
|
|
10
|
+
got.stream(url),
|
|
11
|
+
createGunzip(),
|
|
12
|
+
tar.extract(outDir, {
|
|
13
|
+
strip,
|
|
14
|
+
})
|
|
15
|
+
)
|
|
16
|
+
} catch (error) {
|
|
17
|
+
// console.log({ error })
|
|
18
|
+
if (error && error instanceof RequestError) {
|
|
19
|
+
console.log('is req error')
|
|
20
|
+
throw new VError(`Failed to download ${url}: ${error.message}`)
|
|
21
|
+
}
|
|
22
|
+
throw error
|
|
23
|
+
}
|
|
14
24
|
}
|
|
@@ -2,6 +2,7 @@ import * as ErrorCodes from '../ErrorCodes/ErrorCodes.js'
|
|
|
2
2
|
import * as PrettyError from '../PrettyError/PrettyError.js'
|
|
3
3
|
import * as Socket from '../Socket/Socket.js'
|
|
4
4
|
import * as Process from '../Process/Process.js'
|
|
5
|
+
import * as JsonRpcVersion from '../JsonRpcVersion/JsonRpcVersion.js'
|
|
5
6
|
|
|
6
7
|
export const state = {
|
|
7
8
|
seenErrors: [],
|
|
@@ -17,9 +18,7 @@ const preparePrettyError = (error) => {
|
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
const printPrettyError = (prettyError) => {
|
|
20
|
-
console.error(
|
|
21
|
-
`${prettyError.message}\n${prettyError.codeFrame}\n${prettyError.stack}`
|
|
22
|
-
)
|
|
21
|
+
console.error(`${prettyError.message}\n${prettyError.codeFrame}\n${prettyError.stack}`)
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
export const handleError = (error) => {
|
|
@@ -29,7 +28,7 @@ export const handleError = (error) => {
|
|
|
29
28
|
state.seenErrors.push(error.message)
|
|
30
29
|
const prettyError = preparePrettyError(error)
|
|
31
30
|
Socket.send({
|
|
32
|
-
jsonrpc:
|
|
31
|
+
jsonrpc: JsonRpcVersion.Two,
|
|
33
32
|
method: /* Dialog.showErrorDialogWithOptions */ 'Dialog.showMessage',
|
|
34
33
|
params: [
|
|
35
34
|
{
|
|
@@ -62,11 +61,7 @@ export const handleUncaughtExceptionMonitor = (error, origin) => {
|
|
|
62
61
|
// parent process is disposed, ignore
|
|
63
62
|
return
|
|
64
63
|
}
|
|
65
|
-
if (
|
|
66
|
-
error &&
|
|
67
|
-
error.code === ErrorCodes.ERR_IPC_CHANNEL_CLOSED &&
|
|
68
|
-
!Process.isConnected()
|
|
69
|
-
) {
|
|
64
|
+
if (error && error.code === ErrorCodes.ERR_IPC_CHANNEL_CLOSED && !Process.isConnected()) {
|
|
70
65
|
// parent process is disposed, ignore
|
|
71
66
|
return
|
|
72
67
|
}
|