@lvce-editor/shared-process 0.11.9 → 0.11.10

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 (42) hide show
  1. package/config/defaultKeyBindings.json +25 -0
  2. package/config/defaultSettings.json +2 -7
  3. package/extensions/builtin.language-basics-coffeescript/src/tokenizeCoffeeScript.js +232 -3
  4. package/extensions/builtin.language-basics-cpp/src/tokenizeCpp.js +14 -0
  5. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +8 -0
  6. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +52 -4
  7. package/extensions/builtin.language-basics-python/src/tokenizePython.js +1 -1
  8. package/extensions/builtin.language-basics-ruby/README.md +14 -0
  9. package/extensions/builtin.language-basics-ruby/extension.json +48 -0
  10. package/extensions/builtin.language-basics-ruby/src/tokenizeRuby.js +241 -0
  11. package/extensions/builtin.language-basics-scss/README.md +14 -0
  12. package/extensions/builtin.language-basics-scss/extension.json +12 -0
  13. package/extensions/builtin.language-basics-scss/src/tokenizeScss.js +28 -0
  14. package/extensions/builtin.language-basics-shellscript/extension.json +2 -1
  15. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +75 -23
  16. package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +87 -13
  17. package/extensions/builtin.language-basics-xml/extension.json +2 -1
  18. package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +7 -0
  19. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +8 -1
  20. package/extensions/builtin.theme-cobalt2/color-theme.json +4 -0
  21. package/extensions/builtin.theme-gruvbox/color-theme.json +4 -0
  22. package/extensions/builtin.theme-palenight/color-theme.json +4 -0
  23. package/extensions/builtin.theme-slime/color-theme.json +9 -1
  24. package/package.json +5 -5
  25. package/src/parts/Cli/Cli.js +2 -2
  26. package/src/parts/CliInstall/CliInstall.js +21 -6
  27. package/src/parts/CliList/CliList.js +3 -2
  28. package/src/parts/CliUnlink/CliUnlink.js +1 -1
  29. package/src/parts/DownloadAndExtract/DownloadAndExtract.js +18 -8
  30. package/src/parts/ErrorHandling/ErrorHandling.js +4 -9
  31. package/src/parts/ExportStatic/ExportStatic.js +57 -330
  32. package/src/parts/ExtensionHost/ExtensionHost.js +4 -7
  33. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -4
  34. package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -4
  35. package/src/parts/FileSystem/FileSystem.js +5 -15
  36. package/src/parts/GetResponse/GetResponse.js +10 -14
  37. package/src/parts/JsonRpc/JsonRpc.js +3 -6
  38. package/src/parts/JsonRpcErrorCode/JsonRpcErrorCode.js +2 -0
  39. package/src/parts/JsonRpcVersion/JsonRpcVersion.js +1 -0
  40. package/src/parts/OutputChannel/OutputChannel.ipc.js +3 -2
  41. package/src/parts/Terminal/Terminal.js +5 -4
  42. package/src/sharedProcessMain.js +2 -5
@@ -68,7 +68,8 @@
68
68
  ".xoml",
69
69
  ".xpdl",
70
70
  ".xsd",
71
- ".xul"
71
+ ".xul",
72
+ ".tmtheme"
72
73
  ],
73
74
  "fileNames": [".project"],
74
75
  "tokenize": "src/tokenizeXml.js"
@@ -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
  }
@@ -151,6 +151,10 @@
151
151
  {
152
152
  "name": "KeywordReturn",
153
153
  "foreground": "#FF9D00"
154
+ },
155
+ {
156
+ "name": "KeywordOperator",
157
+ "foreground": "#FF9D00"
154
158
  }
155
159
  ]
156
160
  }
@@ -137,6 +137,10 @@
137
137
  "name": "KeywordControl",
138
138
  "foreground": "#EA6962"
139
139
  },
140
+ {
141
+ "name": "KeywordOperator",
142
+ "foreground": "#EA6962"
143
+ },
140
144
  {
141
145
  "name": "Regex",
142
146
  "foreground": "#D8A657"
@@ -192,6 +192,10 @@
192
192
  {
193
193
  "name": "KeywordReturn",
194
194
  "foreground": "#89DDFF"
195
+ },
196
+ {
197
+ "name": "KeywordOperator",
198
+ "foreground": "#89DDFF"
195
199
  }
196
200
  ]
197
201
  }
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/shared-process",
3
- "version": "0.11.9",
3
+ "version": "0.11.10",
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.9",
21
- "@lvce-editor/extension-host-helper-process": "0.11.9",
22
- "@lvce-editor/pty-host": "0.11.9",
20
+ "@lvce-editor/extension-host": "0.11.10",
21
+ "@lvce-editor/extension-host-helper-process": "0.11.10",
22
+ "@lvce-editor/pty-host": "0.11.10",
23
23
  "debug": "^4.3.4",
24
24
  "execa": "^6.1.0",
25
25
  "exit-hook": "^3.1.4",
@@ -29,7 +29,7 @@
29
29
  "open": "^8.4.0",
30
30
  "p-queue": "^7.3.0",
31
31
  "parse-json": "^6.0.2",
32
- "tail": "^2.2.4",
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",
@@ -16,12 +16,12 @@ const getModule = (argv0) => {
16
16
  }
17
17
  }
18
18
 
19
- export const handleCliArgs = async (argv, console, process) => {
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, console, process)
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, console) => {
5
- const extension = argv[1]
6
- if (!extension) {
7
- Logger.error('extension argument is required')
8
- return
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, console) => {
12
+ export const handleCliArgs = async (argv) => {
12
13
  const extensions = await ExtensionList.list()
13
14
  const output = getOutput(extensions)
14
- console.info(output)
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, console, process) => {
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
- await pipeline(
8
- got.stream(url),
9
- createGunzip(),
10
- tar.extract(outDir, {
11
- strip,
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: '2.0',
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
  }