@lvce-editor/shared-process 0.10.3 → 0.10.5

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 (30) hide show
  1. package/config/defaultSettings.json +2 -1
  2. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +2 -2
  3. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +5 -0
  4. package/extensions/builtin.language-basics-javascript/extension.json +2 -1
  5. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +21 -6
  6. package/extensions/builtin.language-basics-json/extension.json +6 -2
  7. package/extensions/builtin.language-basics-json/src/tokenizeJson.js +4 -1
  8. package/extensions/builtin.language-basics-markdown/extension.json +1 -1
  9. package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +3 -0
  10. package/extensions/builtin.language-basics-shellscript/extension.json +43 -1
  11. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +1 -1
  12. package/extensions/builtin.language-basics-svelte/README.md +14 -0
  13. package/extensions/builtin.language-basics-svelte/extension.json +13 -0
  14. package/extensions/builtin.language-basics-svelte/src/tokenizeSvelte.js +310 -0
  15. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +31 -12
  16. package/extensions/builtin.theme-atom-one-dark/color-theme.json +12 -0
  17. package/extensions/builtin.theme-ayu/color-theme.json +4 -0
  18. package/extensions/builtin.theme-cobalt2/color-theme.json +8 -0
  19. package/extensions/builtin.theme-cobalt2/extension.json +2 -1
  20. package/extensions/builtin.theme-cobalt2/images/logo.png +0 -0
  21. package/extensions/builtin.theme-gruvbox/color-theme.json +8 -0
  22. package/extensions/builtin.theme-material/color-theme.json +11 -3
  23. package/extensions/builtin.theme-monokai/color-theme.json +17 -1
  24. package/extensions/builtin.theme-noctis-uva/color-theme.json +17 -1
  25. package/extensions/builtin.theme-palenight/color-theme.json +20 -0
  26. package/index.js +5 -2
  27. package/package.json +4 -4
  28. package/src/parts/ExportStatic/ExportStatic.js +81 -21
  29. package/src/parts/Socket/Socket.js +3 -0
  30. package/extensions/builtin.language-basics-html/languageConfiguration.json +0 -66
@@ -29,7 +29,8 @@
29
29
  "workbench.iconTheme": "vscode-icons",
30
30
  "workbench.activityBar.visible": true,
31
31
  "workbench.sideBar.visible": true,
32
- "workbench.saveStateOnVisibilityChange": false,
32
+ "workbench.sideBarLocation": "right",
33
+ "workbench.saveStateOnVisibilityChange": true,
33
34
 
34
35
  "workspace.defaultWorkspace": "fetch:///playground",
35
36
 
@@ -75,8 +75,8 @@ export const TokenMap = {
75
75
  }
76
76
 
77
77
  const RE_SELECTOR = /^[\.a-zA-Z\d\-\:>\+\~\_%]+/
78
- const RE_SELECTOR_ID = /^#\w+/
79
- const RE_WHITESPACE = /^ +/
78
+ const RE_SELECTOR_ID = /^#[\w\-\_]+/
79
+ const RE_WHITESPACE = /^\s+/
80
80
  const RE_CURLY_OPEN = /^\{/
81
81
  const RE_CURLY_CLOSE = /^\}/
82
82
  const RE_PROPERTY_NAME = /^[a-zA-Z\-]+\b/
@@ -84,6 +84,7 @@ const RE_TAGNAME = /^[!\w]+/
84
84
  const RE_TEXT = /^[^<>\n]+/
85
85
  const RE_WHITESPACE = /^\s+/
86
86
  const RE_WORD = /^[^\s]+/
87
+ const RE_ATTRIBUTE_VALUE_UNQUOTED=/^[^<>]+/
87
88
 
88
89
  export const initialLineState = {
89
90
  state: State.TopLevelContent,
@@ -249,7 +250,11 @@ export const tokenizeLine = (line, lineState) => {
249
250
  } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
250
251
  token = TokenType.PunctuationTag
251
252
  state = State.TopLevelContent
253
+ }else if((next=part.match(RE_ATTRIBUTE_VALUE_UNQUOTED))){
254
+ token=TokenType.String
255
+ state=State.InsideOpeningTag
252
256
  } else {
257
+ part
253
258
  throw new Error('no')
254
259
  }
255
260
  break
@@ -7,7 +7,8 @@
7
7
  "id": "javascript",
8
8
  "extensions": [".js", ".es6", ".mjs", ".cjs", ".pac"],
9
9
  "tokenize": "src/tokenizeJavaScript.js",
10
- "configuration": "./languageConfiguration.json"
10
+ "configuration": "./languageConfiguration.json",
11
+ "firstLine": "^#!.*\\bnode"
11
12
  }
12
13
  ]
13
14
  }
@@ -48,6 +48,7 @@ export const TokenType = {
48
48
  KeywordModifier: 882,
49
49
  KeywordReturn: 883,
50
50
  KeywordNew: 884,
51
+ FunctionName: 885,
51
52
  }
52
53
 
53
54
  export const TokenMap = {
@@ -73,6 +74,7 @@ export const TokenMap = {
73
74
  [TokenType.KeywordModifier]: 'KeywordModifier',
74
75
  [TokenType.KeywordReturn]: 'KeywordReturn',
75
76
  [TokenType.KeywordNew]: 'KeywordNew',
77
+ [TokenType.FunctionName]: 'Function',
76
78
  }
77
79
 
78
80
  const RE_KEYWORD =
@@ -102,20 +104,23 @@ const RE_ROUND_CLOSE = /^\)/
102
104
  const RE_DOT = /^\./
103
105
  const RE_EQUAL_SIGN = /^=/
104
106
  const RE_SINGLE_QUOTE = /^'/
105
- const RE_PUNCTUATION = /^[\(\)=\+\-><\.:;\{\}\[\]!,&\|\^\?\*%]/
107
+ const RE_PUNCTUATION = /^[\(\)=\+\-><\.:;\{\}\[\]!,&\|\^\?\*%~]/
106
108
  const RE_SLASH = /^\//
107
109
  const RE_ANYTHING_UNTIL_END = /^.+/s
108
110
  const RE_WHITESPACE = /^\s+/
109
111
  const RE_QUOTE_SINGLE = /^'/
110
112
  const RE_QUOTE_DOUBLE = /^"/
111
113
  const RE_QUOTE_BACKTICK = /^`/
112
- const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
113
- const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
114
+ const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^'\\]+/
115
+ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"\\]+/
114
116
  const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`]+/
117
+ const RE_STRING_ESCAPE = /^\\./
118
+ const RE_SHEBANG = /^#!.*/
119
+ const RE_FUNCTION_CALL_NAME = /^[\w]+(?=\s*(\(|\=\s*function|\=\s*\())/
115
120
 
116
121
  // copied from https://github.com/PrismJS/prism/blob/master/components/prism-javascript.js#L57
117
122
  const RE_REGEX =
118
- /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/
123
+ /^((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/
119
124
 
120
125
  export const initialLineState = {
121
126
  state: State.TopLevelContent,
@@ -179,6 +184,9 @@ export const tokenizeLine = (line, lineState) => {
179
184
  break
180
185
  }
181
186
  state = State.TopLevelContent
187
+ } else if ((next = part.match(RE_FUNCTION_CALL_NAME))) {
188
+ token = TokenType.FunctionName
189
+ state = State.TopLevelContent
182
190
  } else if ((next = part.match(RE_VARIABLE_NAME))) {
183
191
  token = TokenType.VariableName
184
192
  state = State.TopLevelContent
@@ -215,9 +223,10 @@ export const tokenizeLine = (line, lineState) => {
215
223
  } else if ((next = part.match(RE_NUMERIC_OCTAL))) {
216
224
  token = TokenType.Numeric
217
225
  state = State.TopLevelContent
226
+ } else if ((next = part.match(RE_SHEBANG))) {
227
+ token = TokenType.Comment
228
+ state = State.TopLevelContent
218
229
  } else {
219
- line.slice(0, index) //?
220
- part //?
221
230
  throw new Error('no')
222
231
  }
223
232
  break
@@ -262,6 +271,9 @@ export const tokenizeLine = (line, lineState) => {
262
271
  } else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
263
272
  token = TokenType.String
264
273
  state = State.InsideSingleQuoteString
274
+ } else if ((next = part.match(RE_STRING_ESCAPE))) {
275
+ token = TokenType.String
276
+ state = State.InsideSingleQuoteString
265
277
  } else {
266
278
  throw new Error('no')
267
279
  }
@@ -273,6 +285,9 @@ export const tokenizeLine = (line, lineState) => {
273
285
  } else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
274
286
  token = TokenType.String
275
287
  state = State.InsideDoubleQuoteString
288
+ } else if ((next = part.match(RE_STRING_ESCAPE))) {
289
+ token = TokenType.String
290
+ state = State.InsideDoubleQuoteString
276
291
  } else {
277
292
  throw new Error('no')
278
293
  }
@@ -28,7 +28,10 @@
28
28
  ".babelrc",
29
29
  ".prettierrc",
30
30
  ".sublime-project",
31
- ".code-snippets"
31
+ ".code-snippets",
32
+ ".tour",
33
+ ".heapsnapshot",
34
+ ".code-workspace"
32
35
  ],
33
36
  "fileNames": [
34
37
  "composer.lock",
@@ -37,7 +40,8 @@
37
40
  ".imgbotconfig",
38
41
  ".stylelintrc",
39
42
  ".parcelrc",
40
- ".publishrc"
43
+ ".publishrc",
44
+ ".whitesource"
41
45
  ],
42
46
  "tokenize": "src/tokenizeJson.js"
43
47
  }
@@ -91,7 +91,7 @@ const RE_SQUARE_CLOSE = /^\]/
91
91
  const RE_LINE_COMMENT = /^\/\/.*/
92
92
  const RE_ANYTHING = /^.+/s
93
93
  const RE_NUMERIC =
94
- /^((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b/
94
+ /^((0(x|X)[0-9a-fA-F]*)|(\-?([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)\b/
95
95
  const RE_TEXT = /^[^\s\{\}\[\]]+/
96
96
  // const RE_ESCAPED_QUOTE = /^\\"/
97
97
  // const RE_BACK_SLASH = /^\\/
@@ -282,6 +282,9 @@ export const tokenizeLine = (line, lineState) => {
282
282
  } else if ((next = part.match(RE_COMMA))) {
283
283
  token = TokenType.Punctuation
284
284
  state = State.AfterCurlyOpen
285
+ } else if ((next = part.match(RE_ANYTHING))) {
286
+ token = TokenType.Text
287
+ state = State.AfterCurlyOpen
285
288
  } else {
286
289
  part //?
287
290
  throw new Error('no')
@@ -5,7 +5,7 @@
5
5
  "languages": [
6
6
  {
7
7
  "id": "markdown",
8
- "extensions": [".md"],
8
+ "extensions": [".md", ".markdown"],
9
9
  "tokenize": "src/tokenizeMarkdown.js"
10
10
  }
11
11
  ]
@@ -305,6 +305,9 @@ export const tokenizeLine = (line, lineState) => {
305
305
  if ((next = part.match(RE_WORD))) {
306
306
  token = TokenType.String
307
307
  state = State.AfterTripleBackTickAfterLanguageId
308
+ } else if ((next = part.match(RE_WHITESPACE))) {
309
+ token = TokenType.Whitespace
310
+ state = State.AfterTripleBackTick
308
311
  } else {
309
312
  throw new Error('no')
310
313
  }
@@ -5,7 +5,49 @@
5
5
  "languages": [
6
6
  {
7
7
  "id": "shellscript",
8
- "extensions": [".sh"],
8
+ "extensions": [
9
+ ".sh",
10
+ ".bash",
11
+ ".bashrc",
12
+ ".bash_aliases",
13
+ ".bash_profile",
14
+ ".bash_login",
15
+ ".ebuild",
16
+ ".profile",
17
+ ".bash_logout",
18
+ ".xprofile",
19
+ ".xsession",
20
+ ".xsessionrc",
21
+ ".Xsession",
22
+ ".zsh",
23
+ ".zshrc",
24
+ ".zprofile",
25
+ ".zlogin",
26
+ ".zlogout",
27
+ ".zshenv",
28
+ ".zsh-theme",
29
+ ".fish",
30
+ ".ksh",
31
+ ".csh",
32
+ ".cshrc",
33
+ ".tcshrc",
34
+ ".yashrc",
35
+ ".yash_profile"
36
+ ],
37
+ "fileNames": [
38
+ "APKBUILD",
39
+ "PKGBUILD",
40
+ ".envrc",
41
+ ".hushlogin",
42
+ "zshrc",
43
+ "zshenv",
44
+ "zlogin",
45
+ "zprofile",
46
+ "zlogout",
47
+ "bashrc_Apple_Terminal",
48
+ "zshrc_Apple_Terminal"
49
+ ],
50
+ "firstLine": "^#!.*\\b(bash|fish|zsh|sh|ksh|dtksh|pdksh|mksh|ash|dash|yash|sh|csh|jcsh|tcsh|itcsh).*|^#\\s*-\\*-[^*]*mode:\\s*shell-script[^*]*-\\*-",
9
51
  "tokenize": "src/tokenizeShellScript.js"
10
52
  }
11
53
  ]
@@ -50,7 +50,7 @@ const RE_COLON = /^:/
50
50
  const RE_PROPERTY_VALUE = /^[^;\}]+/
51
51
  const RE_SEMICOLON = /^;/
52
52
  const RE_COMMA = /^,/
53
- const RE_ANYTHING = /^.*/s
53
+ const RE_ANYTHING = /^.+/s
54
54
  const RE_ANYTHING_UNTIL_CLOSE_BRACE = /^[^\}]+/
55
55
  const RE_QUOTE_DOUBLE = /^"/
56
56
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
@@ -0,0 +1,14 @@
1
+ # Language Basics Svelte
2
+
3
+ ## Contributing
4
+
5
+ ```sh
6
+ git clone git@github.com:lvce-editor/language-basics-svelte.git &&
7
+ cd language-basics-svelte &&
8
+ npm ci &&
9
+ npm test
10
+ ```
11
+
12
+ ## Gitpod
13
+
14
+ [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/lvce-editor/language-basics-svelte)
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "builtin.language-basics-svelte",
3
+ "version": "0.0.0-dev",
4
+ "name": "Language Basics Svelte",
5
+ "description": "Provides syntax highlighting and bracket matching in Svelte files.",
6
+ "languages": [
7
+ {
8
+ "id": "svelte",
9
+ "extensions": [".svelte"],
10
+ "tokenize": "src/tokenizeSvelte.js"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,310 @@
1
+ /**
2
+ * @enum number
3
+ */
4
+ const State = {
5
+ TopLevelContent: 1,
6
+ AfterOpeningAngleBracket: 2,
7
+ InsideOpeningTag: 3,
8
+ InsideOpeningTagAndHasSeenWhitespace: 4,
9
+ AfterClosingTagAngleBrackets: 5,
10
+ AfterClosingTagName: 6,
11
+ AfterAttributeName: 7,
12
+ AfterAttributeEqualSign: 8,
13
+ InsideAttributeDoubleQuote: 9,
14
+ InsideBlockComment: 10,
15
+ None: 11,
16
+ InsideDoubleQuoteString: 12,
17
+ InsideSingleQuoteString: 13,
18
+ }
19
+
20
+ export const StateMap = {}
21
+
22
+ /**
23
+ * @enum number
24
+ */
25
+ export const TokenType = {
26
+ None: 99999999,
27
+ Numeric: 30,
28
+ String: 50,
29
+ Whitespace: 0,
30
+ Comment: 60,
31
+ Text: 117,
32
+ PunctuationTag: 228,
33
+ TagName: 118,
34
+ AttributeName: 119,
35
+ Punctuation: 10,
36
+ Error: 141,
37
+ PunctuationString: 11,
38
+ NewLine: 891,
39
+ }
40
+
41
+ export const TokenMap = {
42
+ [TokenType.None]: 'None',
43
+ [TokenType.Numeric]: 'Numeric',
44
+ [TokenType.String]: 'String',
45
+ [TokenType.Whitespace]: 'Whitespace',
46
+ [TokenType.Comment]: 'Comment',
47
+ [TokenType.Text]: 'Text',
48
+ [TokenType.PunctuationTag]: 'PunctuationTag',
49
+ [TokenType.TagName]: 'TagName',
50
+ [TokenType.AttributeName]: 'AttributeName',
51
+ [TokenType.Punctuation]: 'Punctuation',
52
+ [TokenType.Error]: 'Error',
53
+ [TokenType.PunctuationString]: 'PunctuationString',
54
+ }
55
+
56
+ const RE_ANGLE_BRACKET_CLOSE = /^>/
57
+ const RE_ANGLE_BRACKET_ONLY = /^</
58
+ const RE_ANGLE_BRACKET_OPEN = /^</
59
+ const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?!\s)/
60
+ const RE_ANY_TEXT = /^[^\n]+/
61
+ const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-]+/
62
+ const RE_BLOCK_COMMENT_CONTENT_1 = /^.+?(?=-->)/s
63
+ const RE_BLOCK_COMMENT_CONTENT_2 = /^.+$/s
64
+ const RE_BLOCK_COMMENT_END = /^-->/
65
+ const RE_BLOCK_COMMENT_START = /^<!--/
66
+ const RE_DASH_DASH = /^\-\-/
67
+ const RE_DOUBLE_QUOTE = /^"/
68
+ const RE_EQUAL_SIGN = /^=/
69
+ const RE_EXCLAMATION_MARK = /^!/
70
+ const RE_INVALID_INSIDE_ClOSING_TAG = /^[^a-zA-Z>]/
71
+ const RE_INVALID_INSIDE_OPENING_TAG = /^[^a-zA-Z>]/
72
+ const RE_NEWLINE = /^\n/
73
+ const RE_NEWLINE_WHITESPACE = /^\n\s*/
74
+ const RE_NOT_TAGNAME = /^[^a-zA-Z\d]+/
75
+ const RE_PUNCTUATION = /^[<;'".,]/
76
+ const RE_PUNCTUATION_SELF_CLOSING = /^\/>/
77
+ const RE_SELF_CLOSING = /^\/>/
78
+ const RE_SINGLE_QUOTE = /^'/
79
+ const RE_SLASH = /^\//
80
+ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
81
+ const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
82
+ const RE_TAG_TEXT = /^[^\s>]+/
83
+ const RE_TAGNAME = /^[!\w]+/
84
+ const RE_TEXT = /^[^<>\n]+/
85
+ const RE_WHITESPACE = /^\s+/
86
+ const RE_WORD = /^[^\s]+/
87
+ const RE_ATTRIBUTE_VALUE_UNQUOTED = /^[^<>]+/
88
+
89
+ export const initialLineState = {
90
+ state: State.TopLevelContent,
91
+ }
92
+
93
+ /**
94
+ *
95
+ * @param {any} lineStateA
96
+ * @param {any} lineStateB
97
+ * @returns
98
+ */
99
+ export const isLineStateEqual = (lineStateA, lineStateB) => {
100
+ return lineStateA.state === lineStateB.state
101
+ }
102
+
103
+ export const hasArrayReturn = true
104
+
105
+ /**
106
+ *
107
+ * @param {string} line
108
+ * @param {any} lineState
109
+ * @returns
110
+ */
111
+ export const tokenizeLine = (line, lineState) => {
112
+ let next = null
113
+ let index = 0
114
+ let tokens = []
115
+ let token = TokenType.None
116
+ let state = lineState.state
117
+ while (index < line.length) {
118
+ const part = line.slice(index)
119
+ switch (state) {
120
+ case State.TopLevelContent:
121
+ if ((next = part.match(RE_ANGLE_BRACKET_OPEN_TAG))) {
122
+ token = TokenType.PunctuationTag
123
+ state = State.AfterOpeningAngleBracket
124
+ } else if ((next = part.match(RE_TEXT))) {
125
+ token = TokenType.Text
126
+ state = State.TopLevelContent
127
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
128
+ token = TokenType.Text
129
+ state = State.TopLevelContent
130
+ } else if ((next = part.match(RE_ANGLE_BRACKET_OPEN))) {
131
+ token = TokenType.Text
132
+ state = State.TopLevelContent
133
+ } else {
134
+ part //?
135
+ throw new Error('no')
136
+ }
137
+ break
138
+ case State.AfterOpeningAngleBracket:
139
+ if ((next = part.match(RE_TAGNAME))) {
140
+ token = TokenType.TagName
141
+ state = State.InsideOpeningTag
142
+ } else if ((next = part.match(RE_SLASH))) {
143
+ token = TokenType.PunctuationTag
144
+ state = State.AfterClosingTagAngleBrackets
145
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
146
+ token = TokenType.PunctuationTag
147
+ state = State.TopLevelContent
148
+ } else if ((next = part.match(RE_ANY_TEXT))) {
149
+ token = TokenType.Text
150
+ state = State.TopLevelContent
151
+ } else {
152
+ part //?
153
+ throw new Error('no')
154
+ }
155
+ break
156
+ case State.InsideOpeningTag:
157
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
158
+ token = TokenType.PunctuationTag
159
+ state = State.TopLevelContent
160
+ } else if ((next = part.match(RE_EXCLAMATION_MARK))) {
161
+ token = TokenType.PunctuationTag
162
+ state = State.InsideOpeningTag
163
+ } else if ((next = part.match(RE_WHITESPACE))) {
164
+ token = TokenType.Whitespace
165
+ state = State.InsideOpeningTagAndHasSeenWhitespace
166
+ } else if ((next = part.match(RE_DASH_DASH))) {
167
+ token = TokenType.Comment
168
+ state = State.InsideBlockComment
169
+ } else if ((next = part.match(RE_TAG_TEXT))) {
170
+ token = TokenType.Text
171
+ state = State.InsideOpeningTag
172
+ } else {
173
+ part //?
174
+ throw new Error('no')
175
+ }
176
+ break
177
+ case State.AfterClosingTagAngleBrackets:
178
+ if ((next = part.match(RE_TAGNAME))) {
179
+ token = TokenType.TagName
180
+ state = State.AfterClosingTagName
181
+ } else if ((next = part.match(RE_ANY_TEXT))) {
182
+ token = TokenType.Text
183
+ state = State.TopLevelContent
184
+ } else {
185
+ part //?
186
+ throw new Error('no')
187
+ }
188
+ break
189
+ case State.AfterClosingTagName:
190
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
191
+ token = TokenType.PunctuationTag
192
+ state = State.TopLevelContent
193
+ } else if ((next = part.match(RE_TEXT))) {
194
+ token = TokenType.Text
195
+ state = State.TopLevelContent
196
+ } else {
197
+ throw new Error('no')
198
+ }
199
+ break
200
+ case State.InsideOpeningTagAndHasSeenWhitespace:
201
+ if ((next = part.match(RE_ATTRIBUTE_NAME))) {
202
+ token = TokenType.AttributeName
203
+ state = State.AfterAttributeName
204
+ } else if ((next = part.match(RE_SELF_CLOSING))) {
205
+ token = TokenType.PunctuationTag
206
+ state = State.TopLevelContent
207
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
208
+ token = TokenType.PunctuationTag
209
+ state = State.TopLevelContent
210
+ } else if ((next = part.match(RE_TAG_TEXT))) {
211
+ token = TokenType.Text
212
+ state = State.TopLevelContent
213
+ } else {
214
+ part //?
215
+ throw new Error('no')
216
+ }
217
+ break
218
+ case State.AfterAttributeName:
219
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
220
+ token = TokenType.PunctuationTag
221
+ state = State.TopLevelContent
222
+ } else if ((next = part.match(RE_EQUAL_SIGN))) {
223
+ token = TokenType.Punctuation
224
+ state = State.AfterAttributeEqualSign
225
+ } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
226
+ token = TokenType.PunctuationString
227
+ state = State.InsideDoubleQuoteString
228
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
229
+ token = TokenType.PunctuationString
230
+ state = State.InsideSingleQuoteString
231
+ } else if ((next = part.match(RE_TAG_TEXT))) {
232
+ token = TokenType.Text
233
+ state = State.InsideOpeningTag
234
+ } else if ((next = part.match(RE_WHITESPACE))) {
235
+ token = TokenType.Whitespace
236
+ state = State.InsideOpeningTagAndHasSeenWhitespace
237
+ } else {
238
+ // TODO check quotation mark
239
+ part //?
240
+ throw new Error('no')
241
+ }
242
+ break
243
+ case State.AfterAttributeEqualSign:
244
+ if ((next = part.match(RE_DOUBLE_QUOTE))) {
245
+ token = TokenType.PunctuationString
246
+ state = State.InsideDoubleQuoteString
247
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
248
+ token = TokenType.PunctuationString
249
+ state = State.InsideSingleQuoteString
250
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
251
+ token = TokenType.PunctuationTag
252
+ state = State.TopLevelContent
253
+ } else if ((next = part.match(RE_ATTRIBUTE_VALUE_UNQUOTED))) {
254
+ token = TokenType.String
255
+ state = State.InsideOpeningTag
256
+ } else {
257
+ part
258
+ throw new Error('no')
259
+ }
260
+ break
261
+ case State.InsideDoubleQuoteString:
262
+ if ((next = part.match(RE_DOUBLE_QUOTE))) {
263
+ token = TokenType.PunctuationString
264
+ state = State.InsideOpeningTag
265
+ } else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
266
+ token = TokenType.String
267
+ state = State.InsideDoubleQuoteString
268
+ } else {
269
+ throw new Error('no')
270
+ }
271
+ break
272
+ case State.InsideSingleQuoteString:
273
+ if ((next = part.match(RE_SINGLE_QUOTE))) {
274
+ token = TokenType.PunctuationString
275
+ state = State.InsideOpeningTag
276
+ } else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
277
+ token = TokenType.String
278
+ state = State.InsideSingleQuoteString
279
+ } else {
280
+ throw new Error('no')
281
+ }
282
+ break
283
+ case State.InsideBlockComment:
284
+ part
285
+ if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_1))) {
286
+ token = TokenType.Comment
287
+ state = State.InsideBlockComment
288
+ } else if ((next = part.match(RE_BLOCK_COMMENT_END))) {
289
+ token = TokenType.Comment
290
+ state = State.TopLevelContent
291
+ } else if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_2))) {
292
+ token = TokenType.Comment
293
+ state = State.InsideBlockComment
294
+ } else {
295
+ throw new Error('no')
296
+ }
297
+ break
298
+ default:
299
+ state
300
+ throw new Error('no')
301
+ }
302
+ const tokenLength = next[0].length
303
+ index += tokenLength
304
+ tokens.push(token, tokenLength)
305
+ }
306
+ return {
307
+ state,
308
+ tokens,
309
+ }
310
+ }
@@ -12,7 +12,8 @@ export const State = {
12
12
  InsideMultiLineString: 8,
13
13
  InsideMultiLineStringAfterWhitespace: 9,
14
14
  AfterPropertyValue: 10,
15
- InsidePropertyNameString: 11,
15
+ InsidePropertyNameStringSingleQuoted: 11,
16
+ InsidePropertyNameStringDoubleQuoted: 12,
16
17
  }
17
18
 
18
19
  export const StateMap = {
@@ -65,7 +66,7 @@ const RE_LINE_COMMENT_START = /^#/
65
66
  const RE_WHITESPACE = /^ +/
66
67
  const RE_CURLY_OPEN = /^\{/
67
68
  const RE_CURLY_CLOSE = /^\}/
68
- const RE_PROPERTY_NAME = /^[\:@\/\\a-zA-Z\-\_\d\.]+(?=\s*:(\s+|$))/
69
+ const RE_PROPERTY_NAME = /^[\p{L}\p{P}\p{S}.\d]+(?=\s*:(\s+|$))/u
69
70
  const RE_PROPERTY_NAME_2 =
70
71
  /^[\:@\/\\a-zA-Z\-\_\d\.\s]*[@\/\\a-zA-Z\-\_\d\.](?=\s*:(\s+|$))/
71
72
  const RE_PROPERTY_VALUE_1 = /^[^&].*(?=\s+#)/s
@@ -73,7 +74,7 @@ const RE_SEMICOLON = /^;/
73
74
  const RE_COMMA = /^,/
74
75
  const RE_ANYTHING = /^.+/s
75
76
  const RE_ANYTHING_BUT_COMMENT = /^[^#]+/
76
- const RE_NUMERIC = /^(([0-9]+\.?[0-9]*)|(\.[0-9]+))(?=\s|$)/
77
+ const RE_NUMERIC = /^(([0-9]+\.?[0-9]*)|(\.[0-9]+))(?=\s*$|\s+#|\s*[\[\]\{\}])/
77
78
  const RE_ANYTHING_UNTIL_CLOSE_BRACE = /^[^\}]+/
78
79
  const RE_BLOCK_COMMENT_START = /^\/\*/
79
80
  const RE_BLOCK_COMMENT_END = /^\*\//
@@ -96,7 +97,9 @@ const RE_WORDS = /^[\w\s]*\w/
96
97
  const RE_MULTI_LINE_STRING_START = /^(?:\||>\-|>)/
97
98
  const RE_KEY_PRE = /^\s*(\-\s*)?/
98
99
  const RE_SINGLE_QUOTE = /^'/
100
+ const RE_DOUBLE_QUOTE = /^"/
99
101
  const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
102
+ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
100
103
  const RE_ALIAS = /^\*.+/
101
104
  const RE_ANCHOR = /^\&.+/
102
105
  const RE_MERGE_KEY = /^<<\:(?=\s)/
@@ -150,6 +153,12 @@ export const tokenizeLine = (line, lineState) => {
150
153
  } else if ((next = part.match(RE_DASH))) {
151
154
  token = TokenType.Punctuation
152
155
  state = State.AfterDash
156
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
157
+ token = TokenType.Punctuation
158
+ state = State.InsidePropertyNameStringSingleQuoted
159
+ } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
160
+ token = TokenType.Punctuation
161
+ state = State.InsidePropertyNameStringDoubleQuoted
153
162
  } else if ((next = part.match(RE_PROPERTY_NAME))) {
154
163
  token = TokenType.YamlPropertyName
155
164
  state = State.AfterPropertyName
@@ -162,9 +171,6 @@ export const tokenizeLine = (line, lineState) => {
162
171
  } else if ((next = part.match(RE_WORDS))) {
163
172
  token = TokenType.Text
164
173
  state = State.TopLevelContent
165
- } else if ((next = part.match(RE_SINGLE_QUOTE))) {
166
- token = TokenType.Punctuation
167
- state = State.InsidePropertyNameString
168
174
  } else if ((next = part.match(RE_MERGE_KEY))) {
169
175
  token = TokenType.Punctuation
170
176
  state = State.AfterPropertyNameAfterColon
@@ -172,7 +178,6 @@ export const tokenizeLine = (line, lineState) => {
172
178
  token = TokenType.Text
173
179
  state = State.TopLevelContent
174
180
  } else {
175
- part //?
176
181
  throw new Error('no')
177
182
  }
178
183
  break
@@ -277,6 +282,12 @@ export const tokenizeLine = (line, lineState) => {
277
282
  } else if ((next = part.match(RE_DASH))) {
278
283
  token = TokenType.Punctuation
279
284
  state = State.AfterDash
285
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
286
+ token = TokenType.Punctuation
287
+ state = State.InsidePropertyNameStringSingleQuoted
288
+ } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
289
+ token = TokenType.Punctuation
290
+ state = State.InsidePropertyNameStringDoubleQuoted
280
291
  } else if ((next = part.match(RE_PROPERTY_NAME))) {
281
292
  token = TokenType.YamlPropertyName
282
293
  state = State.AfterPropertyName
@@ -292,21 +303,29 @@ export const tokenizeLine = (line, lineState) => {
292
303
  } else if ((next = part.match(RE_LINE_COMMENT_START))) {
293
304
  token = TokenType.Comment
294
305
  state = State.InsideLineComment
295
- } else if ((next = part.match(RE_SINGLE_QUOTE))) {
296
- token = TokenType.Punctuation
297
- state = State.InsidePropertyNameString
298
306
  } else {
299
307
  part
300
308
  throw new Error('no')
301
309
  }
302
310
  break
303
- case State.InsidePropertyNameString:
311
+ case State.InsidePropertyNameStringSingleQuoted:
304
312
  if ((next = part.match(RE_SINGLE_QUOTE))) {
305
313
  token = TokenType.Punctuation
306
314
  state = State.AfterPropertyName
307
315
  } else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
308
316
  token = TokenType.String
309
- state = State.InsidePropertyNameString
317
+ state = State.InsidePropertyNameStringSingleQuoted
318
+ } else {
319
+ throw new Error('no')
320
+ }
321
+ break
322
+ case State.InsidePropertyNameStringDoubleQuoted:
323
+ if ((next = part.match(RE_DOUBLE_QUOTE))) {
324
+ token = TokenType.Punctuation
325
+ state = State.AfterPropertyName
326
+ } else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
327
+ token = TokenType.String
328
+ state = State.InsidePropertyNameStringDoubleQuoted
310
329
  } else {
311
330
  throw new Error('no')
312
331
  }
@@ -160,6 +160,18 @@
160
160
  {
161
161
  "name": "YamlPropertyValueString",
162
162
  "foreground": "#98C379"
163
+ },
164
+ {
165
+ "name": "Function",
166
+ "foreground": "#61AFEF"
167
+ },
168
+ {
169
+ "name": "KeywordControl",
170
+ "foreground": "#C678DD"
171
+ },
172
+ {
173
+ "name": "KeywordThis",
174
+ "foreground": "#E06C75"
163
175
  }
164
176
  ]
165
177
  }
@@ -177,6 +177,10 @@
177
177
  {
178
178
  "name": "YamlPropertyValueString",
179
179
  "foreground": "#86B300"
180
+ },
181
+ {
182
+ "name": "KeywordThis",
183
+ "foreground": "#55B4D4"
180
184
  }
181
185
  ]
182
186
  }
@@ -143,6 +143,14 @@
143
143
  {
144
144
  "name": "YamlPropertyValueString",
145
145
  "foreground": "#A5FF90"
146
+ },
147
+ {
148
+ "name": "KeywordThis",
149
+ "foreground": "#FB94FF"
150
+ },
151
+ {
152
+ "name": "KeywordReturn",
153
+ "foreground": "#FF9D00"
146
154
  }
147
155
  ]
148
156
  }
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "id": "builtin.theme-cobalt2",
3
3
  "name": "Cobalt 2 Theme",
4
- "description": "🔥 Official theme by Wes Bos.",
4
+ "description": "Theme based on the the Official Cobalt2 theme by Wes Bos.",
5
+ "icon": "images/logo.png",
5
6
  "colorThemes": [
6
7
  {
7
8
  "id": "cobalt2",
@@ -180,6 +180,14 @@
180
180
  {
181
181
  "name": "YamlPropertyValueString",
182
182
  "foreground": "#A9B665"
183
+ },
184
+ {
185
+ "name": "Function",
186
+ "foreground": "#A9B665"
187
+ },
188
+ {
189
+ "name": "KeywordThis",
190
+ "foreground": "#D3869B"
183
191
  }
184
192
  ]
185
193
  }
@@ -17,7 +17,7 @@
17
17
  "ContextMenuForeground": "rgb(238, 255, 255)",
18
18
 
19
19
  "EditorBackGround": "",
20
- "EditorScrollBarBackground": "",
20
+ "EditorScrollBarBackground": "rgba(238, 255, 255, 0.13)",
21
21
  "EditorCursorBackground": "#ffcc00",
22
22
  "EditorSelectionBackground": "rgba(128, 203, 196, 0.13)",
23
23
 
@@ -117,7 +117,7 @@
117
117
  },
118
118
  {
119
119
  "name": "VariableName",
120
- "foreground": "#f07178"
120
+ "foreground": "#EEFFFF"
121
121
  },
122
122
  {
123
123
  "name": "Macro",
@@ -157,7 +157,7 @@
157
157
  },
158
158
  {
159
159
  "name": "LanguageConstant",
160
- "foreground": "#F78C6C"
160
+ "foreground": "#89DDFF"
161
161
  },
162
162
  {
163
163
  "name": "Heading",
@@ -170,6 +170,14 @@
170
170
  {
171
171
  "name": "YamlPropertyValueString",
172
172
  "foreground": "#C3E88D"
173
+ },
174
+ {
175
+ "name": "KeywordThis",
176
+ "foreground": "#89DDFF"
177
+ },
178
+ {
179
+ "name": "KeywordReturn",
180
+ "foreground": "#89DDFF"
173
181
  }
174
182
  ]
175
183
  }
@@ -17,7 +17,7 @@
17
17
  "MenuBackground": "rgb(30, 31, 28)",
18
18
 
19
19
  "EditorBackGround": "",
20
- "EditorScrollBarBackground": "",
20
+ "EditorScrollBarBackground": "rgba(121, 121, 121, 0.4)",
21
21
  "EditorCursorBackground": "white",
22
22
  "EditorSelectionBackground": "rgba(135, 139, 145, 0.25)",
23
23
 
@@ -130,6 +130,22 @@
130
130
  {
131
131
  "name": "YamlPropertyValueString",
132
132
  "foreground": "#E6DB74"
133
+ },
134
+ {
135
+ "name": "Function",
136
+ "foreground": "#A6E22E"
137
+ },
138
+ {
139
+ "name": "Keyword",
140
+ "foreground": "#66D9EF"
141
+ },
142
+ {
143
+ "name": "KeywordThis",
144
+ "foreground": "#FD971F"
145
+ },
146
+ {
147
+ "name": "KeywordControl",
148
+ "foreground": "#F92672"
133
149
  }
134
150
  ]
135
151
  }
@@ -118,7 +118,7 @@
118
118
  },
119
119
  {
120
120
  "name": "VariableName",
121
- "foreground": "#16a3b6"
121
+ "foreground": "#E4B781"
122
122
  },
123
123
  {
124
124
  "name": "JsonPropertyName",
@@ -163,6 +163,22 @@
163
163
  {
164
164
  "name": "YamlPropertyValueString",
165
165
  "foreground": "#49E9A6"
166
+ },
167
+ {
168
+ "name": "Function",
169
+ "foreground": "#16A3B6"
170
+ },
171
+ {
172
+ "name": "KeywordNew",
173
+ "foreground": "#DF769B"
174
+ },
175
+ {
176
+ "name": "KeywordControl",
177
+ "foreground": "#DF769B"
178
+ },
179
+ {
180
+ "name": "KeywordThis",
181
+ "foreground": "#E66533"
166
182
  }
167
183
  ]
168
184
  }
@@ -172,6 +172,26 @@
172
172
  {
173
173
  "name": "YamlPropertyValueString",
174
174
  "foreground": "#BFC7D5"
175
+ },
176
+ {
177
+ "name": "Function",
178
+ "foreground": "#82AAFF"
179
+ },
180
+ {
181
+ "name": "KeywordThis",
182
+ "foreground": "#FF5370"
183
+ },
184
+ {
185
+ "name": "KeywordNew",
186
+ "foreground": "#C792EA"
187
+ },
188
+ {
189
+ "name": "KeywordControl",
190
+ "foreground": "#89DDFF"
191
+ },
192
+ {
193
+ "name": "KeywordReturn",
194
+ "foreground": "#89DDFF"
175
195
  }
176
196
  ]
177
197
  }
package/index.js CHANGED
@@ -5,9 +5,12 @@ 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 () => {
8
+ export const exportStatic = async ({ extensionPath = process.cwd() } = {}) => {
9
9
  const fn = await import('./src/parts/ExportStatic/ExportStatic.js')
10
10
  const root = process.cwd()
11
+ if (extensionPath !== root) {
12
+ extensionPath = join(root, extensionPath)
13
+ }
11
14
  const pathPrefix = process.env.PATH_PREFIX || ''
12
- await fn.exportStatic({ root, pathPrefix })
15
+ await fn.exportStatic({ root, pathPrefix, extensionPath })
13
16
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/shared-process",
3
- "version": "0.10.3",
3
+ "version": "0.10.5",
4
4
  "description": "Utility package for @lvce-editor/server",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -20,11 +20,11 @@
20
20
  "node": ">=16"
21
21
  },
22
22
  "dependencies": {
23
- "@lvce-editor/extension-host": "0.10.3",
24
- "@lvce-editor/pty-host": "0.10.3",
23
+ "@lvce-editor/extension-host": "0.10.5",
24
+ "@lvce-editor/pty-host": "0.10.5",
25
25
  "debug": "^4.3.4",
26
26
  "execa": "^6.1.0",
27
- "exit-hook": "^3.1.0",
27
+ "exit-hook": "^3.1.1",
28
28
  "got": "^12.5.2",
29
29
  "is-object": "^1.0.2",
30
30
  "lines-and-columns": "^2.0.3",
@@ -405,7 +405,12 @@ const getId = (object) => {
405
405
  return object.id
406
406
  }
407
407
 
408
- const addExtensionThemes = async ({ root, extensionJson, commitHash }) => {
408
+ const addExtensionThemes = async ({
409
+ root,
410
+ extensionPath,
411
+ extensionJson,
412
+ commitHash,
413
+ }) => {
409
414
  const colorThemes = extensionJson.colorThemes || []
410
415
  if (colorThemes.length === 0) {
411
416
  return
@@ -416,7 +421,7 @@ const addExtensionThemes = async ({ root, extensionJson, commitHash }) => {
416
421
  Path.join(root, 'dist', commitHash, 'extensions', `builtin.theme-${id}`)
417
422
  )
418
423
  await FileSystem.copy(
419
- Path.join(root, path),
424
+ Path.join(extensionPath, path),
420
425
  Path.join(root, 'dist', commitHash, 'themes', `${id}.json`)
421
426
  )
422
427
  await replace(
@@ -436,7 +441,7 @@ const addExtensionThemes = async ({ root, extensionJson, commitHash }) => {
436
441
  )
437
442
  )
438
443
  await FileSystem.copyFile(
439
- Path.join(root, 'extension.json'),
444
+ Path.join(extensionPath, 'extension.json'),
440
445
  Path.join(
441
446
  root,
442
447
  'dist',
@@ -447,7 +452,7 @@ const addExtensionThemes = async ({ root, extensionJson, commitHash }) => {
447
452
  )
448
453
  )
449
454
  await FileSystem.copyFile(
450
- Path.join(root, 'color-theme.json'),
455
+ Path.join(extensionPath, 'color-theme.json'),
451
456
  Path.join(
452
457
  root,
453
458
  'dist',
@@ -496,6 +501,7 @@ const toPlaygroundFile = (file) => {
496
501
 
497
502
  const addExtensionLanguages = async ({
498
503
  root,
504
+ extensionPath,
499
505
  extensionJson,
500
506
  commitHash,
501
507
  pathPrefix,
@@ -516,11 +522,11 @@ const addExtensionLanguages = async ({
516
522
  Path.join(root, 'dist', commitHash, 'extensions', extensionId, 'README.md')
517
523
  )
518
524
  await FileSystem.copy(
519
- Path.join(root, 'src'),
525
+ Path.join(extensionPath, 'src'),
520
526
  Path.join(root, 'dist', commitHash, 'extensions', extensionId, 'src')
521
527
  )
522
528
  await FileSystem.copyFile(
523
- Path.join(root, 'extension.json'),
529
+ Path.join(extensionPath, 'extension.json'),
524
530
  Path.join(
525
531
  root,
526
532
  'dist',
@@ -545,23 +551,67 @@ const addExtensionLanguages = async ({
545
551
  Path.join(root, 'dist', commitHash, 'config', 'languages.json'),
546
552
  mergedLanguages
547
553
  )
548
- await FileSystem.remove(Path.join(root, 'dist', commitHash, 'playground'))
549
- await FileSystem.copy(
550
- Path.join(root, 'test', 'cases'),
551
- Path.join(root, 'dist', commitHash, 'playground')
552
- )
554
+ if (await FileSystem.exists(Path.join(extensionPath, 'test', 'cases'))) {
555
+ await FileSystem.remove(Path.join(root, 'dist', commitHash, 'playground'))
556
+ await FileSystem.copy(
557
+ Path.join(extensionPath, 'test', 'cases'),
558
+ Path.join(root, 'dist', commitHash, 'playground')
559
+ )
560
+ const testFiles = await FileSystem.readDir(
561
+ Path.join(extensionPath, 'test', 'cases')
562
+ )
563
+ const fileMap = testFiles.map(toPlaygroundFile)
564
+ await JsonFile.writeJson(
565
+ Path.join(root, 'dist', commitHash, 'config', 'fileMap.json'),
566
+ fileMap
567
+ )
568
+ }
569
+ }
553
570
 
554
- const testFiles = await FileSystem.readDir(Path.join(root, 'test', 'cases'))
555
- const fileMap = testFiles.map(toPlaygroundFile)
571
+ const addExtensionWebExtension = async ({
572
+ root,
573
+ extensionPath,
574
+ commitHash,
575
+ extensionJson,
576
+ pathPrefix,
577
+ }) => {
578
+ if (!extensionJson.browser) {
579
+ return
580
+ }
581
+ const webExtensions = [
582
+ {
583
+ ...extensionJson,
584
+ isWeb: true,
585
+ path: `${pathPrefix}/${commitHash}/extensions/${extensionJson.id}`,
586
+ },
587
+ ]
556
588
  await JsonFile.writeJson(
557
- Path.join(root, 'dist', commitHash, 'config', 'fileMap.json'),
558
- fileMap
589
+ Path.join(root, 'dist', commitHash, 'config', 'webExtensions.json'),
590
+ webExtensions
559
591
  )
592
+ for (const dirent of ['src', 'extension.json']) {
593
+ await FileSystem.copy(
594
+ Path.join(extensionPath, dirent),
595
+ Path.join(
596
+ root,
597
+ 'dist',
598
+ commitHash,
599
+ 'extensions',
600
+ extensionJson.id,
601
+ dirent
602
+ )
603
+ )
604
+ }
560
605
  }
561
606
 
562
- const addExtension = async ({ root, commitHash, pathPrefix }) => {
607
+ const addExtension = async ({
608
+ root,
609
+ extensionPath,
610
+ commitHash,
611
+ pathPrefix,
612
+ }) => {
563
613
  const extensionJson = await readExtensionManifest(
564
- Path.join(root, 'extension.json')
614
+ Path.join(extensionPath, 'extension.json')
565
615
  )
566
616
  const name = extensionJson.name || extensionJson.id || ''
567
617
  const description = extensionJson.description || ''
@@ -574,9 +624,18 @@ const addExtension = async ({ root, commitHash, pathPrefix }) => {
574
624
  root,
575
625
  commitHash,
576
626
  extensionJson,
627
+ extensionPath,
577
628
  })
578
629
  await addExtensionLanguages({
579
630
  root,
631
+ extensionPath,
632
+ commitHash,
633
+ extensionJson,
634
+ pathPrefix,
635
+ })
636
+ await addExtensionWebExtension({
637
+ root,
638
+ extensionPath,
580
639
  commitHash,
581
640
  extensionJson,
582
641
  pathPrefix,
@@ -585,12 +644,12 @@ const addExtension = async ({ root, commitHash, pathPrefix }) => {
585
644
 
586
645
  /**
587
646
  *
588
- * @param {{root:string, pathPrefix:string }} param0
647
+ * @param {{root:string, pathPrefix:string , extensionPath:string }} param0
589
648
  */
590
- export const exportStatic = async ({ root, pathPrefix }) => {
649
+ export const exportStatic = async ({ root, pathPrefix, extensionPath }) => {
591
650
  if (pathPrefix === 'auto') {
592
651
  const extensionJson = await readExtensionManifest(
593
- Path.join(root, 'extension.json')
652
+ Path.join(extensionPath, 'extension.json')
594
653
  )
595
654
  const id = extensionJson.id
596
655
  const [author, name] = id.split('.')
@@ -619,9 +678,10 @@ export const exportStatic = async ({ root, pathPrefix }) => {
619
678
 
620
679
  console.time('addExtension')
621
680
  await addExtension({
622
- root,
681
+ extensionPath,
623
682
  commitHash,
624
683
  pathPrefix,
684
+ root,
625
685
  })
626
686
  console.timeEnd('addExtension')
627
687
  }
@@ -70,6 +70,9 @@ const handleMessage = async (event) => {
70
70
  code: /* UnexpectedError */ -32001,
71
71
  // @ts-ignore
72
72
  message: error.toString(),
73
+ data: {
74
+ code: error.code,
75
+ },
73
76
  },
74
77
  })
75
78
  }
@@ -1,66 +0,0 @@
1
- {
2
- "comments": {
3
- "blockComment": ["<!--", "-->"]
4
- },
5
- "brackets": [
6
- ["<!--", "-->"],
7
- ["<", ">"],
8
- ["{", "}"],
9
- ["(", ")"]
10
- ],
11
- "autoClosingPairs": [
12
- { "open": "{", "close": "}" },
13
- { "open": "[", "close": "]" },
14
- { "open": "(", "close": ")" },
15
- { "open": "'", "close": "'" },
16
- { "open": "\"", "close": "\"" },
17
- { "open": "<!--", "close": "-->", "notIn": ["comment", "string"] }
18
- ],
19
- "surroundingPairs": [
20
- { "open": "'", "close": "'" },
21
- { "open": "\"", "close": "\"" },
22
- { "open": "{", "close": "}" },
23
- { "open": "[", "close": "]" },
24
- { "open": "(", "close": ")" },
25
- { "open": "<", "close": ">" }
26
- ],
27
- "colorizedBracketPairs": [
28
- ["{", "}"],
29
- ["(", ")"]
30
- ],
31
- "folding": {
32
- "markers": {
33
- "start": "^\\s*<!--\\s*#region\\b.*-->",
34
- "end": "^\\s*<!--\\s*#endregion\\b.*-->"
35
- }
36
- },
37
- "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\$\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\s]+)",
38
- "onEnterRules": [
39
- {
40
- "beforeText": {
41
- "pattern": "<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!\\/)>)[^<]*$",
42
- "flags": "i"
43
- },
44
- "afterText": {
45
- "pattern": "^<\\/([_:\\w][_:\\w-.\\d]*)\\s*>",
46
- "flags": "i"
47
- },
48
- "action": {
49
- "indent": "indentOutdent"
50
- }
51
- },
52
- {
53
- "beforeText": {
54
- "pattern": "<(?!(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr))(\\w[\\w\\d]*)([^/>]*(?!\\/)>)[^<]*$",
55
- "flags": "i"
56
- },
57
- "action": {
58
- "indent": "indent"
59
- }
60
- }
61
- ],
62
- "indentationRules": {
63
- "increaseIndentPattern": "<(?!\\?|(?:area|base|br|col|frame|hr|html|img|input|keygen|link|menuitem|meta|param|source|track|wbr)\\b|[^>]*\\/>)([-_\\.A-Za-z0-9]+)(?=\\s|>)\\b[^>]*>(?!.*<\\/\\1>)|<!--(?!.*-->)|\\{[^}\"']*$",
64
- "decreaseIndentPattern": "^\\s*(<\\/(?!html)[-_\\.A-Za-z0-9]+\\b[^>]*>|-->|\\})"
65
- }
66
- }