bbcode-compiler 0.1.6 → 0.1.7
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/README.md +1 -3
- package/dist/generator/transforms/htmlTransforms.d.ts.map +1 -1
- package/dist/index.js +91 -44
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +91 -44
- package/dist/index.umd.cjs.map +1 -1
- package/dist/parser/AstNode.d.ts +19 -9
- package/dist/parser/AstNode.d.ts.map +1 -1
- package/package.json +24 -4
- package/src/generator/transforms/htmlTransforms.ts +7 -0
- package/src/parser/AstNode.ts +96 -23
package/dist/parser/AstNode.d.ts
CHANGED
|
@@ -33,23 +33,28 @@ Attr <-
|
|
|
33
33
|
|
|
34
34
|
*/
|
|
35
35
|
export declare const enum AstNodeType {
|
|
36
|
-
RootNode =
|
|
37
|
-
TextNode =
|
|
38
|
-
LinebreakNode =
|
|
39
|
-
TagNode =
|
|
40
|
-
StartTagNode =
|
|
41
|
-
EndTagNode =
|
|
42
|
-
AttrNode =
|
|
36
|
+
RootNode = "RootNode",
|
|
37
|
+
TextNode = "TextNode",
|
|
38
|
+
LinebreakNode = "LinebreakNode",
|
|
39
|
+
TagNode = "TagNode",
|
|
40
|
+
StartTagNode = "StartTagNode",
|
|
41
|
+
EndTagNode = "EndTagNode",
|
|
42
|
+
AttrNode = "AttrNode"
|
|
43
43
|
}
|
|
44
|
-
export
|
|
44
|
+
export type AstNodeJson = {
|
|
45
|
+
type: AstNodeType;
|
|
46
|
+
data?: Record<string, string | AstNodeJson>;
|
|
47
|
+
children?: Array<AstNodeJson>;
|
|
48
|
+
};
|
|
45
49
|
export declare abstract class AstNode {
|
|
46
|
-
readonly abstract nodeType: AstNodeType;
|
|
47
50
|
readonly children: Array<AstNode>;
|
|
51
|
+
readonly abstract nodeType: AstNodeType;
|
|
48
52
|
constructor(children?: Array<AstNode>);
|
|
49
53
|
addChild(node: AstNode): void;
|
|
50
54
|
isValid(): boolean;
|
|
51
55
|
toShortString(): string;
|
|
52
56
|
toString(depth?: number): string;
|
|
57
|
+
toJSON(): AstNodeJson;
|
|
53
58
|
}
|
|
54
59
|
export declare class RootNode extends AstNode {
|
|
55
60
|
readonly nodeType = AstNodeType.RootNode;
|
|
@@ -61,6 +66,7 @@ export declare class TextNode extends AstNode {
|
|
|
61
66
|
constructor(str: string);
|
|
62
67
|
isValid(): boolean;
|
|
63
68
|
toShortString(): string;
|
|
69
|
+
toJSON(): AstNodeJson;
|
|
64
70
|
}
|
|
65
71
|
export declare class LinebreakNode extends AstNode {
|
|
66
72
|
readonly nodeType = AstNodeType.LinebreakNode;
|
|
@@ -73,6 +79,7 @@ export declare class AttrNode extends AstNode {
|
|
|
73
79
|
get val(): string;
|
|
74
80
|
isValid(): boolean;
|
|
75
81
|
toShortString(): string;
|
|
82
|
+
toJSON(): AstNodeJson;
|
|
76
83
|
}
|
|
77
84
|
export declare class StartTagNode extends AstNode {
|
|
78
85
|
readonly nodeType = AstNodeType.StartTagNode;
|
|
@@ -81,6 +88,7 @@ export declare class StartTagNode extends AstNode {
|
|
|
81
88
|
constructor(tagName: string, ogTag: string, attrNodes?: Array<AttrNode>);
|
|
82
89
|
isValid(): boolean;
|
|
83
90
|
toShortString(): string;
|
|
91
|
+
toJSON(): AstNodeJson;
|
|
84
92
|
}
|
|
85
93
|
export declare class EndTagNode extends AstNode {
|
|
86
94
|
readonly nodeType = AstNodeType.EndTagNode;
|
|
@@ -89,6 +97,7 @@ export declare class EndTagNode extends AstNode {
|
|
|
89
97
|
constructor(tagName: string, ogTag: string);
|
|
90
98
|
isValid(): boolean;
|
|
91
99
|
toShortString(): string;
|
|
100
|
+
toJSON(): AstNodeJson;
|
|
92
101
|
}
|
|
93
102
|
export declare class TagNode extends AstNode {
|
|
94
103
|
readonly nodeType = AstNodeType.TagNode;
|
|
@@ -101,5 +110,6 @@ export declare class TagNode extends AstNode {
|
|
|
101
110
|
get ogEndTag(): string;
|
|
102
111
|
isValid(): boolean;
|
|
103
112
|
toString(depth?: number): string;
|
|
113
|
+
toJSON(): AstNodeJson;
|
|
104
114
|
}
|
|
105
115
|
//# sourceMappingURL=AstNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AstNode.d.ts","sourceRoot":"","sources":["../../src/parser/AstNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCE;AAQF,0BAAkB,WAAW;IACzB,QAAQ,
|
|
1
|
+
{"version":3,"file":"AstNode.d.ts","sourceRoot":"","sources":["../../src/parser/AstNode.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bbcode-compiler",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"description": "Parses BBCode and generates HTML ",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"private": false,
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"dist/*",
|
|
19
19
|
"src/*"
|
|
20
20
|
],
|
|
21
|
+
"homepage": "https://trinovantes.github.io/bbcode-compiler/",
|
|
21
22
|
"repository": {
|
|
22
23
|
"type": "git",
|
|
23
24
|
"url": "https://github.com/Trinovantes/bbcode-compiler"
|
|
@@ -28,9 +29,14 @@
|
|
|
28
29
|
"url": "https://www.stephenli.ca"
|
|
29
30
|
},
|
|
30
31
|
"scripts": {
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
32
|
+
"demoDev": " vite --config vite.config.demo.ts",
|
|
33
|
+
"demoBuild": " vite build --config vite.config.demo.ts",
|
|
34
|
+
"demoPreview": "vite preview --config vite.config.demo.ts",
|
|
35
|
+
"clean": "rm -rf ./dist ./demo/dist",
|
|
36
|
+
"build": "yarn clean && vite build",
|
|
37
|
+
"prepublishOnly": "yarn build",
|
|
38
|
+
"postinstall": "patch-package",
|
|
39
|
+
"lint": "vue-tsc --noEmit && eslint",
|
|
34
40
|
"test": "vitest",
|
|
35
41
|
"benchmark": " node --loader ts-node/esm --experimental-specifier-resolution=node tests/benchmarks/benchmark.ts",
|
|
36
42
|
"profile": " node --loader ts-node/esm --experimental-specifier-resolution=node --prof --no-logfile-per-isolate tests/benchmarks/profile.ts && node --prof-process v8.log > v8.txt"
|
|
@@ -38,12 +44,17 @@
|
|
|
38
44
|
"devDependencies": {
|
|
39
45
|
"@bbob/html": "^3.0.0",
|
|
40
46
|
"@bbob/preset-html5": "^3.0.0",
|
|
47
|
+
"@eslint/compat": "^1.1.0",
|
|
41
48
|
"@eslint/js": "^9.4.0",
|
|
49
|
+
"@quasar/extras": "^1.16.11",
|
|
50
|
+
"@quasar/vite-plugin": "^1.7.0",
|
|
42
51
|
"@stylistic/eslint-plugin": "^2.1.0",
|
|
43
52
|
"@thoughtsunificator/bbcode-parser-template": "^1.0.9",
|
|
44
53
|
"@types/benchmark": "^2.1.1",
|
|
54
|
+
"@types/lodash.debounce": "^4.0.9",
|
|
45
55
|
"@types/markdown-it": "^14.1.1",
|
|
46
56
|
"@types/node": "^20.7.0",
|
|
57
|
+
"@vitejs/plugin-vue": "^5.0.5",
|
|
47
58
|
"bbcode": "^0.1.5",
|
|
48
59
|
"bbcode-parser": "^1.0.10",
|
|
49
60
|
"bbcodejs": "^0.0.4",
|
|
@@ -51,13 +62,22 @@
|
|
|
51
62
|
"eslint": "^9.4.0",
|
|
52
63
|
"eslint-plugin-n": "^17.7.0",
|
|
53
64
|
"eslint-plugin-vue": "^9.9.0",
|
|
65
|
+
"lodash.debounce": "^4.0.8",
|
|
66
|
+
"lz-string": "^1.5.0",
|
|
54
67
|
"markdown-it": "^14.0.0",
|
|
68
|
+
"mitt": "^3.0.1",
|
|
69
|
+
"monaco-editor": "^0.50.0",
|
|
70
|
+
"patch-package": "^8.0.0",
|
|
71
|
+
"quasar": "^2.16.4",
|
|
72
|
+
"sass": "^1.77.6",
|
|
73
|
+
"shiki": "^1.9.0",
|
|
55
74
|
"ts-bbcode-parser": "^1.0.4",
|
|
56
75
|
"ts-node": "^10.8.1",
|
|
57
76
|
"typescript": "^5.0.2",
|
|
58
77
|
"typescript-eslint": "^8.0.0-alpha.24",
|
|
59
78
|
"vite-plugin-dts": "^3.9.1",
|
|
60
79
|
"vitest": "^1.2.1",
|
|
80
|
+
"vue": "^3.4.30",
|
|
61
81
|
"ya-bbcode": "^4.0.0"
|
|
62
82
|
}
|
|
63
83
|
}
|
package/src/parser/AstNode.ts
CHANGED
|
@@ -40,35 +40,28 @@ import { nodeIsType } from './nodeIsType.js'
|
|
|
40
40
|
// ----------------------------------------------------------------------------
|
|
41
41
|
|
|
42
42
|
export const enum AstNodeType {
|
|
43
|
-
RootNode,
|
|
44
|
-
TextNode,
|
|
45
|
-
LinebreakNode,
|
|
46
|
-
TagNode,
|
|
47
|
-
StartTagNode,
|
|
48
|
-
EndTagNode,
|
|
49
|
-
AttrNode,
|
|
43
|
+
RootNode = 'RootNode',
|
|
44
|
+
TextNode = 'TextNode',
|
|
45
|
+
LinebreakNode = 'LinebreakNode',
|
|
46
|
+
TagNode = 'TagNode',
|
|
47
|
+
StartTagNode = 'StartTagNode',
|
|
48
|
+
EndTagNode = 'EndTagNode',
|
|
49
|
+
AttrNode = 'AttrNode',
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
export
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
case AstNodeType.LinebreakNode: return 'LinebreakNode'
|
|
57
|
-
case AstNodeType.TagNode: return 'TagNode'
|
|
58
|
-
case AstNodeType.StartTagNode: return 'StartTagNode'
|
|
59
|
-
case AstNodeType.EndTagNode: return 'EndTagNode'
|
|
60
|
-
case AstNodeType.AttrNode: return 'AttrNode'
|
|
61
|
-
}
|
|
52
|
+
export type AstNodeJson = {
|
|
53
|
+
type: AstNodeType
|
|
54
|
+
data?: Record<string, string | AstNodeJson>
|
|
55
|
+
children?: Array<AstNodeJson>
|
|
62
56
|
}
|
|
63
57
|
|
|
64
58
|
export abstract class AstNode {
|
|
65
59
|
readonly abstract nodeType: AstNodeType
|
|
66
60
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.children = children
|
|
61
|
+
constructor(
|
|
62
|
+
readonly children: Array<AstNode> = [],
|
|
63
|
+
) {
|
|
64
|
+
// nop
|
|
72
65
|
}
|
|
73
66
|
|
|
74
67
|
addChild(node: AstNode): void {
|
|
@@ -86,7 +79,7 @@ export abstract class AstNode {
|
|
|
86
79
|
}
|
|
87
80
|
|
|
88
81
|
toShortString(): string {
|
|
89
|
-
return
|
|
82
|
+
return this.nodeType
|
|
90
83
|
}
|
|
91
84
|
|
|
92
85
|
// For debugging purposes only
|
|
@@ -100,6 +93,18 @@ export abstract class AstNode {
|
|
|
100
93
|
|
|
101
94
|
return s
|
|
102
95
|
}
|
|
96
|
+
|
|
97
|
+
toJSON(): AstNodeJson {
|
|
98
|
+
const json: AstNodeJson = {
|
|
99
|
+
type: this.nodeType,
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (this.children.length > 0) {
|
|
103
|
+
json.children = this.children.map((child) => child.toJSON())
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return json
|
|
107
|
+
}
|
|
103
108
|
}
|
|
104
109
|
|
|
105
110
|
// ----------------------------------------------------------------------------
|
|
@@ -142,6 +147,16 @@ export class TextNode extends AstNode {
|
|
|
142
147
|
override toShortString(): string {
|
|
143
148
|
return `${super.toShortString()} "${this.str}"`
|
|
144
149
|
}
|
|
150
|
+
|
|
151
|
+
override toJSON(): AstNodeJson {
|
|
152
|
+
const json = super.toJSON()
|
|
153
|
+
|
|
154
|
+
json.data = {
|
|
155
|
+
str: this.str,
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return json
|
|
159
|
+
}
|
|
145
160
|
}
|
|
146
161
|
|
|
147
162
|
export class LinebreakNode extends AstNode {
|
|
@@ -219,6 +234,30 @@ export class AttrNode extends AstNode {
|
|
|
219
234
|
|
|
220
235
|
return s
|
|
221
236
|
}
|
|
237
|
+
|
|
238
|
+
override toJSON(): AstNodeJson {
|
|
239
|
+
const json: AstNodeJson = {
|
|
240
|
+
type: this.nodeType,
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
switch (this.children.length) {
|
|
244
|
+
case 1: {
|
|
245
|
+
json.data = {
|
|
246
|
+
key: this.key,
|
|
247
|
+
}
|
|
248
|
+
break
|
|
249
|
+
}
|
|
250
|
+
case 2: {
|
|
251
|
+
json.data = {
|
|
252
|
+
key: this.key,
|
|
253
|
+
val: this.val,
|
|
254
|
+
}
|
|
255
|
+
break
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return json
|
|
260
|
+
}
|
|
222
261
|
}
|
|
223
262
|
|
|
224
263
|
// ----------------------------------------------------------------------------
|
|
@@ -249,6 +288,16 @@ export class StartTagNode extends AstNode {
|
|
|
249
288
|
override toShortString(): string {
|
|
250
289
|
return `${super.toShortString()} ${this.ogTag}`
|
|
251
290
|
}
|
|
291
|
+
|
|
292
|
+
override toJSON(): AstNodeJson {
|
|
293
|
+
const json = super.toJSON()
|
|
294
|
+
|
|
295
|
+
json.data = {
|
|
296
|
+
tag: this.tagName,
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return json
|
|
300
|
+
}
|
|
252
301
|
}
|
|
253
302
|
|
|
254
303
|
export class EndTagNode extends AstNode {
|
|
@@ -269,6 +318,16 @@ export class EndTagNode extends AstNode {
|
|
|
269
318
|
override toShortString(): string {
|
|
270
319
|
return `${super.toShortString()} ${this.ogTag}`
|
|
271
320
|
}
|
|
321
|
+
|
|
322
|
+
override toJSON(): AstNodeJson {
|
|
323
|
+
const json = super.toJSON()
|
|
324
|
+
|
|
325
|
+
json.data = {
|
|
326
|
+
tag: this.tagName,
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return json
|
|
330
|
+
}
|
|
272
331
|
}
|
|
273
332
|
|
|
274
333
|
export class TagNode extends AstNode {
|
|
@@ -335,4 +394,18 @@ export class TagNode extends AstNode {
|
|
|
335
394
|
|
|
336
395
|
return s
|
|
337
396
|
}
|
|
397
|
+
|
|
398
|
+
override toJSON(): AstNodeJson {
|
|
399
|
+
const json = super.toJSON()
|
|
400
|
+
|
|
401
|
+
json.data = {
|
|
402
|
+
startTag: this._startTag.toJSON(),
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
if (this._endTag) {
|
|
406
|
+
json.data.endTag = this._endTag.toJSON()
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return json
|
|
410
|
+
}
|
|
338
411
|
}
|