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.
@@ -33,23 +33,28 @@ Attr <-
33
33
 
34
34
  */
35
35
  export declare const enum AstNodeType {
36
- RootNode = 0,
37
- TextNode = 1,
38
- LinebreakNode = 2,
39
- TagNode = 3,
40
- StartTagNode = 4,
41
- EndTagNode = 5,
42
- AttrNode = 6
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 declare function nodeTypeToString(nodeType: AstNodeType): string;
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,IAAA;IACR,QAAQ,IAAA;IACR,aAAa,IAAA;IACb,OAAO,IAAA;IACP,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,QAAQ,IAAA;CACX;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAU9D;AAED,8BAAsB,OAAO;IACzB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAGvC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;gBAErB,QAAQ,GAAE,KAAK,CAAC,OAAO,CAAM;IAIzC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI7B,OAAO,IAAI,OAAO;IAUlB,aAAa,IAAI,MAAM;IAMvB,QAAQ,CAAC,KAAK,SAAI,GAAG,MAAM;CAS9B;AAMD,qBAAa,QAAS,SAAQ,OAAO;IACjC,QAAQ,CAAC,QAAQ,wBAAuB;IAE/B,OAAO,IAAI,OAAO;CAW9B;AAMD,qBAAa,QAAS,SAAQ,OAAO;IACjC,QAAQ,CAAC,QAAQ,wBAAuB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;gBAER,GAAG,EAAE,MAAM;IAKd,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,MAAM;CAGnC;AAED,qBAAa,aAAc,SAAQ,OAAO;IACtC,QAAQ,CAAC,QAAQ,6BAA4B;IAEpC,aAAa,IAAI,MAAM;CAGnC;AAMD,qBAAa,QAAS,SAAQ,OAAO;IACjC,QAAQ,CAAC,QAAQ,wBAAuB;IAExC,MAAM,CAAC,QAAQ,CAAC,WAAW,aAAY;IAEvC,IAAI,GAAG,IAAI,MAAM,CAehB;IAED,IAAI,GAAG,IAAI,MAAM,CAmBhB;IAEQ,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,MAAM;CAgBnC;AAMD,qBAAa,YAAa,SAAQ,OAAO;IACrC,QAAQ,CAAC,QAAQ,4BAA2B;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,KAAK,CAAC,QAAQ,CAAM;IAMlE,OAAO,IAAI,OAAO;IAUlB,aAAa,IAAI,MAAM;CAGnC;AAED,qBAAa,UAAW,SAAQ,OAAO;IACnC,QAAQ,CAAC,QAAQ,0BAAyB;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAMjC,OAAO,IAAI,OAAO;IAIlB,aAAa,IAAI,MAAM;CAGnC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAChC,QAAQ,CAAC,QAAQ,uBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA4B;gBAEzC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,aAAa;IAMvE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,CAEhC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAUrB;IAEQ,OAAO,IAAI,OAAO;IAgBlB,QAAQ,CAAC,KAAK,SAAI,GAAG,MAAM;CAavC"}
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.6",
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
- "build": "NODE_ENV=production vite build",
32
- "prepublishOnly": "rm -rf ./dist && yarn build",
33
- "lint": "tsc --noEmit && eslint",
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
  }
@@ -87,6 +87,13 @@ export const htmlTransforms: ReadonlyArray<Transform> = [
87
87
  return '<hr />'
88
88
  },
89
89
  },
90
+ {
91
+ name: 'br',
92
+ isStandalone: true,
93
+ start: () => {
94
+ return '<br />'
95
+ },
96
+ },
90
97
  {
91
98
  name: 'list',
92
99
  start: (tagNode) => {
@@ -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 function nodeTypeToString(nodeType: AstNodeType): string {
53
- switch (nodeType) {
54
- case AstNodeType.RootNode: return 'RootNode'
55
- case AstNodeType.TextNode: return 'TextNode'
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
- // eslint-disable-next-line no-use-before-define
68
- readonly children: Array<AstNode>
69
-
70
- constructor(children: Array<AstNode> = []) {
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 nodeTypeToString(this.nodeType)
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
  }