@lvce-editor/shared-process 0.10.2 → 0.10.4
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/defaultSettings.json +1 -0
- package/extensions/builtin.language-basics-css/src/tokenizeCss.js +2 -2
- package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +5 -0
- package/extensions/builtin.language-basics-javascript/extension.json +2 -1
- package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +17 -6
- package/extensions/builtin.language-basics-json/extension.json +6 -2
- package/extensions/builtin.language-basics-json/src/tokenizeJson.js +3 -0
- package/extensions/builtin.language-basics-markdown/extension.json +1 -1
- package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +3 -0
- package/extensions/builtin.language-basics-shellscript/extension.json +43 -1
- package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +1 -1
- package/extensions/builtin.language-basics-svelte/README.md +14 -0
- package/extensions/builtin.language-basics-svelte/extension.json +13 -0
- package/extensions/builtin.language-basics-svelte/src/tokenizeSvelte.js +310 -0
- package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +31 -12
- package/index.js +5 -2
- package/package.json +4 -4
- package/src/parts/ExportStatic/ExportStatic.js +87 -19
- package/extensions/builtin.language-basics-html/languageConfiguration.json +0 -66
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"workbench.iconTheme": "vscode-icons",
|
|
30
30
|
"workbench.activityBar.visible": true,
|
|
31
31
|
"workbench.sideBar.visible": true,
|
|
32
|
+
"workbench.sideBarLocation": "right",
|
|
32
33
|
"workbench.saveStateOnVisibilityChange": false,
|
|
33
34
|
|
|
34
35
|
"workspace.defaultWorkspace": "fetch:///playground",
|
|
@@ -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 =
|
|
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
|
}
|
|
@@ -102,20 +102,22 @@ const RE_ROUND_CLOSE = /^\)/
|
|
|
102
102
|
const RE_DOT = /^\./
|
|
103
103
|
const RE_EQUAL_SIGN = /^=/
|
|
104
104
|
const RE_SINGLE_QUOTE = /^'/
|
|
105
|
-
const RE_PUNCTUATION = /^[\(\)=\+\-><\.:;\{\}\[\]
|
|
105
|
+
const RE_PUNCTUATION = /^[\(\)=\+\-><\.:;\{\}\[\]!,&\|\^\?\*%~]/
|
|
106
106
|
const RE_SLASH = /^\//
|
|
107
107
|
const RE_ANYTHING_UNTIL_END = /^.+/s
|
|
108
108
|
const RE_WHITESPACE = /^\s+/
|
|
109
109
|
const RE_QUOTE_SINGLE = /^'/
|
|
110
110
|
const RE_QUOTE_DOUBLE = /^"/
|
|
111
111
|
const RE_QUOTE_BACKTICK = /^`/
|
|
112
|
-
const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
|
|
113
|
-
const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
|
|
112
|
+
const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^'\\]+/
|
|
113
|
+
const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"\\]+/
|
|
114
114
|
const RE_STRING_BACKTICK_QUOTE_CONTENT = /^[^`]+/
|
|
115
|
+
const RE_STRING_ESCAPE = /^\\./
|
|
116
|
+
const RE_SHEBANG = /^#!.*/
|
|
115
117
|
|
|
116
118
|
// copied from https://github.com/PrismJS/prism/blob/master/components/prism-javascript.js#L57
|
|
117
119
|
const RE_REGEX =
|
|
118
|
-
|
|
120
|
+
/^((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/
|
|
119
121
|
|
|
120
122
|
export const initialLineState = {
|
|
121
123
|
state: State.TopLevelContent,
|
|
@@ -215,9 +217,10 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
215
217
|
} else if ((next = part.match(RE_NUMERIC_OCTAL))) {
|
|
216
218
|
token = TokenType.Numeric
|
|
217
219
|
state = State.TopLevelContent
|
|
220
|
+
} else if ((next = part.match(RE_SHEBANG))) {
|
|
221
|
+
token = TokenType.Comment
|
|
222
|
+
state = State.TopLevelContent
|
|
218
223
|
} else {
|
|
219
|
-
line.slice(0, index) //?
|
|
220
|
-
part //?
|
|
221
224
|
throw new Error('no')
|
|
222
225
|
}
|
|
223
226
|
break
|
|
@@ -262,6 +265,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
262
265
|
} else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
|
|
263
266
|
token = TokenType.String
|
|
264
267
|
state = State.InsideSingleQuoteString
|
|
268
|
+
} else if ((next = part.match(RE_STRING_ESCAPE))) {
|
|
269
|
+
token = TokenType.String
|
|
270
|
+
state = State.InsideSingleQuoteString
|
|
265
271
|
} else {
|
|
266
272
|
throw new Error('no')
|
|
267
273
|
}
|
|
@@ -273,6 +279,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
273
279
|
} else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
|
|
274
280
|
token = TokenType.String
|
|
275
281
|
state = State.InsideDoubleQuoteString
|
|
282
|
+
} else if ((next = part.match(RE_STRING_ESCAPE))) {
|
|
283
|
+
token = TokenType.String
|
|
284
|
+
state = State.InsideDoubleQuoteString
|
|
276
285
|
} else {
|
|
277
286
|
throw new Error('no')
|
|
278
287
|
}
|
|
@@ -301,3 +310,5 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
301
310
|
tokens,
|
|
302
311
|
}
|
|
303
312
|
}
|
|
313
|
+
|
|
314
|
+
tokenizeLine(`#!/usr/bin/env node`, initialLineState) //?
|
|
@@ -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
|
}
|
|
@@ -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')
|
|
@@ -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": [
|
|
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 =
|
|
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
|
+
[](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
|
-
|
|
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 = /^[
|
|
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.
|
|
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.
|
|
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
|
}
|
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
|
+
"version": "0.10.4",
|
|
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.
|
|
24
|
-
"@lvce-editor/pty-host": "0.10.
|
|
23
|
+
"@lvce-editor/extension-host": "0.10.4",
|
|
24
|
+
"@lvce-editor/pty-host": "0.10.4",
|
|
25
25
|
"debug": "^4.3.4",
|
|
26
26
|
"execa": "^6.1.0",
|
|
27
|
-
"exit-hook": "^3.1.
|
|
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 ({
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
529
|
+
Path.join(extensionPath, 'extension.json'),
|
|
524
530
|
Path.join(
|
|
525
531
|
root,
|
|
526
532
|
'dist',
|
|
@@ -546,22 +552,66 @@ const addExtensionLanguages = async ({
|
|
|
546
552
|
mergedLanguages
|
|
547
553
|
)
|
|
548
554
|
await FileSystem.remove(Path.join(root, 'dist', commitHash, 'playground'))
|
|
549
|
-
await FileSystem.
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
555
|
+
if (await FileSystem.exists(Path.join(extensionPath, 'test', 'cases'))) {
|
|
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
|
-
|
|
555
|
-
|
|
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', '
|
|
558
|
-
|
|
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 ({
|
|
607
|
+
const addExtension = async ({
|
|
608
|
+
root,
|
|
609
|
+
extensionPath,
|
|
610
|
+
commitHash,
|
|
611
|
+
pathPrefix,
|
|
612
|
+
}) => {
|
|
563
613
|
const extensionJson = await readExtensionManifest(
|
|
564
|
-
Path.join(
|
|
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,9 +644,17 @@ 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 }) => {
|
|
650
|
+
if (pathPrefix === 'auto') {
|
|
651
|
+
const extensionJson = await readExtensionManifest(
|
|
652
|
+
Path.join(extensionPath, 'extension.json')
|
|
653
|
+
)
|
|
654
|
+
const id = extensionJson.id
|
|
655
|
+
const [author, name] = id.split('.')
|
|
656
|
+
pathPrefix = `/${name}`
|
|
657
|
+
}
|
|
591
658
|
const dirents = await FileSystem.readDir(
|
|
592
659
|
Path.join(root, 'node_modules', '@lvce-editor', 'server', 'static')
|
|
593
660
|
)
|
|
@@ -611,9 +678,10 @@ export const exportStatic = async ({ root, pathPrefix }) => {
|
|
|
611
678
|
|
|
612
679
|
console.time('addExtension')
|
|
613
680
|
await addExtension({
|
|
614
|
-
|
|
681
|
+
extensionPath,
|
|
615
682
|
commitHash,
|
|
616
683
|
pathPrefix,
|
|
684
|
+
root,
|
|
617
685
|
})
|
|
618
686
|
console.timeEnd('addExtension')
|
|
619
687
|
}
|
|
@@ -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
|
-
}
|