@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.
Files changed (112) hide show
  1. package/config/defaultKeyBindings.json +1 -784
  2. package/config/defaultSettings.json +8 -1
  3. package/extensions/builtin.language-basics-css/extension.json +2 -1
  4. package/extensions/builtin.language-basics-css/languageConfiguration.json +21 -0
  5. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +10 -1
  6. package/extensions/builtin.language-basics-dotenv/extension.json +5 -1
  7. package/extensions/builtin.language-basics-go/src/tokenizeGo.js +79 -10
  8. package/extensions/builtin.language-basics-html/languageConfiguration.json +66 -0
  9. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +89 -27
  10. package/extensions/builtin.language-basics-java/src/tokenizeJava.js +6 -5
  11. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +29 -1
  12. package/extensions/builtin.language-basics-json/extension.json +4 -2
  13. package/extensions/builtin.language-basics-json/src/tokenizeJson.js +3 -0
  14. package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +18 -5
  15. package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +26 -0
  16. package/extensions/builtin.language-basics-vue/src/tokenizeVue.js +1 -1
  17. package/extensions/builtin.language-basics-xml/extension.json +3 -1
  18. package/extensions/builtin.theme-atom-one-dark/color-theme.json +2 -2
  19. package/extensions/builtin.theme-ayu/color-theme.json +6 -2
  20. package/extensions/builtin.theme-cobalt2/color-theme.json +5 -2
  21. package/extensions/builtin.theme-slime/color-theme.json +2 -2
  22. package/package.json +10 -11
  23. package/src/parts/Assert/Assert.js +1 -6
  24. package/src/parts/AssertionError/AssertionError.js +6 -0
  25. package/src/parts/BulkReplacement/BulkReplacement.ipc.js +7 -0
  26. package/src/parts/BulkReplacement/BulkReplacement.js +20 -0
  27. package/src/parts/BulkReplacementContent/BulkReplacementContent.js +30 -0
  28. package/src/parts/ChildProcessError/ChildProcessError.js +45 -0
  29. package/src/parts/ChromeExtension/ChromeExtension.js +2 -5
  30. package/src/parts/CleanStack/CleanStack.js +90 -2
  31. package/src/parts/CliList/CliList.js +3 -0
  32. package/src/parts/ClipBoard/ClipBoard.js +2 -2
  33. package/src/parts/ClipBoard/ClipBoardGnome.js +1 -2
  34. package/src/parts/ClipBoard/ClipBoardNoop.js +2 -2
  35. package/src/parts/ClipBoard/ClipBoardWindows.js +1 -3
  36. package/src/parts/Command/Command.js +5 -10
  37. package/src/parts/Credentials/Credentials.ipc.js +5 -5
  38. package/src/parts/Credentials/Credentials.js +2 -10
  39. package/src/parts/Desktop/Desktop.js +22 -0
  40. package/src/parts/Download/Download.js +2 -2
  41. package/src/parts/Error/Error.js +1 -1
  42. package/src/parts/ErrorCodes/ErrorCodes.js +2 -1
  43. package/src/parts/ErrorHandling/ErrorHandling.js +8 -14
  44. package/src/parts/ExportStatic/ExportStatic.js +8 -3
  45. package/src/parts/ExtensionHost/ExtensionHost.js +1 -2
  46. package/src/parts/ExtensionHost/ExtensionHostKeyBindings.js +0 -12
  47. package/src/parts/ExtensionHostRpc/ExtensionHostRpc.js +1 -1
  48. package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +1 -1
  49. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
  50. package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +1 -1
  51. package/src/parts/ExtensionLink/ExtensionLink.js +0 -19
  52. package/src/parts/ExtensionList/ExtensionList.js +11 -2
  53. package/src/parts/ExtensionManagement/ExtensionManagement.js +6 -58
  54. package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -1
  55. package/src/parts/ExtensionManagement/ExtensionManagementIconTheme.js +1 -1
  56. package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -3
  57. package/src/parts/ExtensionManifestInputType/ExtensionManifestInputType.js +2 -0
  58. package/src/parts/ExtensionManifests/ExtensionManifests.js +3 -0
  59. package/src/parts/ExtensionManifests/ExtensionManifestsFromFolder.js +5 -15
  60. package/src/parts/ExtensionManifests/ExtensionManifestsFromLinkedExtensionsFolder.js +56 -0
  61. package/src/parts/ExtensionUninstall/ExtensionUninstall.js +18 -0
  62. package/src/parts/ExtensionUnlink/ExtensionUnlink.js +1 -1
  63. package/src/parts/Extract/Extract.js +2 -6
  64. package/src/parts/ExtractZip/ExtractZip.js +1 -1
  65. package/src/parts/{Error → FileNotFoundError}/FileNotFoundError.js +9 -2
  66. package/src/parts/FileSystem/FileSystem.js +6 -32
  67. package/src/parts/FirstNodeWorkerEventType/FirstNodeWorkerEventType.js +5 -0
  68. package/src/parts/GetDirentType/GetDirentType.js +27 -0
  69. package/src/parts/GetFirstNodeChildProcessEvent/GetFirstNodeChildProcessEvent.js +39 -0
  70. package/src/parts/GetFirstNodeWorkerEvent/GetFirstNodeWorkerEvent.js +21 -0
  71. package/src/parts/GetNewLineIndex/GetNewLineIndex.js +9 -0
  72. package/src/parts/GetResponse/GetResponse.js +16 -6
  73. package/src/parts/GetTextSearchRipGrepArgs/GetTextSearchRipGrepArgs.js +14 -0
  74. package/src/parts/InstallExtension/InstallExtension.ipc.js +6 -0
  75. package/src/parts/InstallExtension/InstallExtension.js +33 -0
  76. package/src/parts/IpcParent/IpcParent.js +9 -0
  77. package/src/parts/IpcParentModule/IpcParentModule.js +12 -0
  78. package/src/parts/IpcParentType/IpcParentType.js +2 -0
  79. package/src/parts/IpcParentWithNodeForkedProcess/IpcParentWithNodeForkedProcess.js +49 -0
  80. package/src/parts/IpcParentWithNodeWorker/IpcParentWithNodeWorker.js +36 -0
  81. package/src/parts/IsEnoentErrorWindows/IsEnoentErrorWindows.js +3 -0
  82. package/src/parts/IsIgnoredError/IsIgnoredError.js +14 -0
  83. package/src/parts/Json/Json.js +3 -5
  84. package/src/parts/JsonError/JsonError.js +8 -14
  85. package/src/parts/JsonParsingError/JsonParsingError.js +17 -0
  86. package/src/parts/Jsonc/Jsonc.js +304 -0
  87. package/src/parts/JsoncCharCode/JsoncCharCode.js +23 -0
  88. package/src/parts/JsoncFile/JsoncFile.js +8 -0
  89. package/src/parts/JsoncTokenType/JsoncTokenType.js +11 -0
  90. package/src/parts/LimitString/LimitString.js +3 -1
  91. package/src/parts/MergeStacks/MergeStacks.js +3 -2
  92. package/src/parts/Module/Module.js +4 -0
  93. package/src/parts/ModuleId/ModuleId.js +2 -0
  94. package/src/parts/ModuleMap/ModuleMap.js +4 -0
  95. package/src/parts/Native/Native.js +1 -1
  96. package/src/parts/ParentIpc/ParentIpc.js +2 -1
  97. package/src/parts/Platform/Platform.js +0 -21
  98. package/src/parts/Preferences/Preferences.js +6 -8
  99. package/src/parts/PrettyError/PrettyError.js +16 -7
  100. package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -1
  101. package/src/parts/RecentlyOpened/RecentlyOpened.js +3 -7
  102. package/src/parts/RequiresSocket/RequiresSocket.js +1 -0
  103. package/src/parts/RipGrep/RipGrep.js +1 -1
  104. package/src/parts/SearchFile/SearchFile.js +4 -9
  105. package/src/parts/Socket/Socket.js +2 -7
  106. package/src/parts/Terminal/Terminal.ipc.js +4 -41
  107. package/src/parts/Terminal/Terminal.js +29 -25
  108. package/src/parts/TextSearch/TextSearch.js +102 -108
  109. package/src/parts/ToAbsolutePaths/ToAbsolutePaths.js +9 -0
  110. package/src/parts/ToTextSearchResult/ToTextSearchResult.js +42 -0
  111. package/src/parts/Trash/Trash.js +1 -2
  112. /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 = string.indexOf('\n', i + 1)
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 = parent.indexOf('\n')
8
- const childNewLineIndex = child.indexOf('\n')
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
  }
@@ -17,3 +17,5 @@ export const Workspace = 16
17
17
  export const ChromeExtension = 17
18
18
  export const Download = 18
19
19
  export const GitLsFiles = 19
20
+ export const BulkReplacement = 20
21
+ export const InstallExtension = 21
@@ -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,5 @@
1
1
  import open from 'open'
2
- import VError from 'verror'
2
+ import { VError } from '../VError/VError.js'
3
3
 
4
4
  export const openFolder = async (path) => {
5
5
  try {
@@ -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 VError from 'verror'
2
- import * as JsonFile from '../JsonFile/JsonFile.js'
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 JsonFile.readJson(userSettingsPath)
13
+ json = await JsoncFile.readJsonc(userSettingsPath)
14
14
  } catch (error) {
15
- if (error && error.message.includes('File not found')) {
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 JsonFile.readJson(defaultSettingsPath)
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, 'utf-8')
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 cleanedStack = CleanStack.cleanStack(error.stack)
74
- const lines = SplitLines.splitLines(cleanedStack)
75
- const file = lines[1]
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, 'utf-8')
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.slice(1))
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
- console.error(`${prefix}Error: ${prettyError.message}\n\n${prettyError.codeFrame}\n\n${prettyError.stack}`)
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 '../Error/FileNotFoundError.js'
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) => {
@@ -6,6 +6,7 @@ const METHODS_THAT_REQUIRE_SOCKET = new Set([
6
6
  'ExtensionHost.start',
7
7
  'ExtensionHost.send',
8
8
  'ExtensionHost.watchColorTheme',
9
+ 'Terminal.create',
9
10
  ])
10
11
 
11
12
  export const requiresSocket = (method) => {
@@ -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 '../RgPath/RgPath.js'
4
+ import * as RgPath from '../RipGrepPath/RipGrepPath.js'
5
5
 
6
6
  export const ripGrepPath = process.env.RIP_GREP_PATH || RgPath.rgPath
7
7