bbcode-compiler 0.1.9 → 0.1.11

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 (73) hide show
  1. package/dist/index.d.ts +1 -16
  2. package/dist/index.js +866 -1038
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.umd.cjs +914 -1063
  5. package/dist/index.umd.cjs.map +1 -1
  6. package/dist/src/generateHtml.d.ts +2 -0
  7. package/dist/src/generateHtml.d.ts.map +1 -0
  8. package/dist/{generator → src/generator}/Generator.d.ts +2 -3
  9. package/dist/src/generator/Generator.d.ts.map +1 -0
  10. package/dist/{generator → src/generator}/transforms/Transform.d.ts +1 -2
  11. package/dist/src/generator/transforms/Transform.d.ts.map +1 -0
  12. package/dist/src/generator/transforms/htmlTransforms.d.ts +3 -0
  13. package/dist/src/generator/transforms/htmlTransforms.d.ts.map +1 -0
  14. package/dist/{generator → src/generator}/utils/getTagImmediateAttrVal.d.ts +1 -2
  15. package/dist/src/generator/utils/getTagImmediateAttrVal.d.ts.map +1 -0
  16. package/dist/{generator → src/generator}/utils/getTagImmediateText.d.ts +1 -2
  17. package/dist/src/generator/utils/getTagImmediateText.d.ts.map +1 -0
  18. package/dist/{generator → src/generator}/utils/getWidthHeightAttr.d.ts +1 -2
  19. package/dist/src/generator/utils/getWidthHeightAttr.d.ts.map +1 -0
  20. package/dist/src/generator/utils/isDangerousUrl.d.ts.map +1 -0
  21. package/dist/{generator → src/generator}/utils/isOrderedList.d.ts +1 -2
  22. package/dist/src/generator/utils/isOrderedList.d.ts.map +1 -0
  23. package/dist/src/index.d.ts +16 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/{lexer → src/lexer}/Lexer.d.ts +1 -2
  26. package/dist/src/lexer/Lexer.d.ts.map +1 -0
  27. package/dist/{lexer → src/lexer}/Token.d.ts +1 -2
  28. package/dist/src/lexer/Token.d.ts.map +1 -0
  29. package/dist/src/lexer/TokenType.d.ts +5 -0
  30. package/dist/src/lexer/TokenType.d.ts.map +1 -0
  31. package/dist/{parser → src/parser}/AstNode.d.ts +10 -18
  32. package/dist/src/parser/AstNode.d.ts.map +1 -0
  33. package/dist/{parser → src/parser}/Parser.d.ts +3 -4
  34. package/dist/src/parser/Parser.d.ts.map +1 -0
  35. package/dist/src/parser/nodeIsType.d.ts +13 -0
  36. package/dist/src/parser/nodeIsType.d.ts.map +1 -0
  37. package/package.json +81 -82
  38. package/src/generateHtml.ts +4 -4
  39. package/src/generator/Generator.ts +7 -7
  40. package/src/generator/transforms/Transform.ts +1 -1
  41. package/src/generator/transforms/htmlTransforms.ts +6 -6
  42. package/src/generator/utils/getTagImmediateAttrVal.ts +1 -1
  43. package/src/generator/utils/getTagImmediateText.ts +4 -4
  44. package/src/generator/utils/getWidthHeightAttr.ts +1 -1
  45. package/src/generator/utils/isOrderedList.ts +1 -1
  46. package/src/index.ts +15 -15
  47. package/src/lexer/Lexer.ts +9 -9
  48. package/src/lexer/Token.ts +12 -12
  49. package/src/lexer/TokenType.ts +39 -40
  50. package/src/parser/AstNode.ts +30 -29
  51. package/src/parser/Parser.ts +28 -28
  52. package/src/parser/nodeIsType.ts +8 -8
  53. package/dist/generateHtml.d.ts +0 -2
  54. package/dist/generateHtml.d.ts.map +0 -1
  55. package/dist/generator/Generator.d.ts.map +0 -1
  56. package/dist/generator/transforms/Transform.d.ts.map +0 -1
  57. package/dist/generator/transforms/htmlTransforms.d.ts +0 -4
  58. package/dist/generator/transforms/htmlTransforms.d.ts.map +0 -1
  59. package/dist/generator/utils/getTagImmediateAttrVal.d.ts.map +0 -1
  60. package/dist/generator/utils/getTagImmediateText.d.ts.map +0 -1
  61. package/dist/generator/utils/getWidthHeightAttr.d.ts.map +0 -1
  62. package/dist/generator/utils/isDangerousUrl.d.ts.map +0 -1
  63. package/dist/generator/utils/isOrderedList.d.ts.map +0 -1
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/lexer/Lexer.d.ts.map +0 -1
  66. package/dist/lexer/Token.d.ts.map +0 -1
  67. package/dist/lexer/TokenType.d.ts +0 -17
  68. package/dist/lexer/TokenType.d.ts.map +0 -1
  69. package/dist/parser/AstNode.d.ts.map +0 -1
  70. package/dist/parser/Parser.d.ts.map +0 -1
  71. package/dist/parser/nodeIsType.d.ts +0 -14
  72. package/dist/parser/nodeIsType.d.ts.map +0 -1
  73. /package/dist/{generator → src/generator}/utils/isDangerousUrl.d.ts +0 -0
package/package.json CHANGED
@@ -1,84 +1,83 @@
1
1
  {
2
- "name": "bbcode-compiler",
3
- "type": "module",
4
- "version": "0.1.9",
5
- "description": "Parses BBCode and generates HTML ",
6
- "license": "MIT",
7
- "private": false,
8
- "sideEffects": false,
9
- "types": "./dist/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.umd.cjs"
14
- }
15
- },
16
- "files": [
17
- "README.md",
18
- "dist/*",
19
- "src/*"
20
- ],
21
- "homepage": "https://trinovantes.github.io/bbcode-compiler/",
22
- "repository": {
23
- "type": "git",
24
- "url": "https://github.com/Trinovantes/bbcode-compiler"
25
- },
26
- "author": {
27
- "name": "Stephen",
28
- "email": "hello@stephenli.ca",
29
- "url": "https://www.stephenli.ca"
30
- },
31
- "scripts": {
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
- "prepare": "patch-package",
39
- "lint": "vue-tsc --noEmit && eslint",
40
- "test": "vitest",
41
- "benchmark": "tsx tests/benchmarks/benchmark.ts",
42
- "profile": "tsx --prof --no-logfile-per-isolate tests/benchmarks/profile.ts && node --prof-process v8.log > v8.txt"
43
- },
44
- "devDependencies": {
45
- "@bbob/html": "^3.0.0",
46
- "@bbob/preset-html5": "^3.0.0",
47
- "@eslint/compat": "^1.1.0",
48
- "@eslint/js": "^9.4.0",
49
- "@quasar/extras": "^1.16.11",
50
- "@quasar/vite-plugin": "^1.7.0",
51
- "@stylistic/eslint-plugin": "^2.1.0",
52
- "@thoughtsunificator/bbcode-parser-template": "^1.0.9",
53
- "@types/benchmark": "^2.1.1",
54
- "@types/lodash.debounce": "^4.0.9",
55
- "@types/markdown-it": "^14.1.1",
56
- "@types/node": "^20.7.0",
57
- "@vitejs/plugin-vue": "^5.0.5",
58
- "bbcode": "^0.1.5",
59
- "bbcode-parser": "^1.0.10",
60
- "bbcodejs": "^0.0.4",
61
- "benchmark": "^2.1.4",
62
- "eslint": "^9.4.0",
63
- "eslint-plugin-n": "^17.7.0",
64
- "eslint-plugin-vue": "^9.9.0",
65
- "lodash.debounce": "^4.0.8",
66
- "lz-string": "^1.5.0",
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",
74
- "ts-bbcode-parser": "^1.0.4",
75
- "ts-node": "^10.8.1",
76
- "tsx": "^4.15.7",
77
- "typescript": "^5.0.2",
78
- "typescript-eslint": "^8.0.0-alpha.24",
79
- "vite-plugin-dts": "^3.9.1",
80
- "vitest": "^1.2.1",
81
- "vue": "^3.4.30",
82
- "ya-bbcode": "^4.0.0"
2
+ "name": "bbcode-compiler",
3
+ "type": "module",
4
+ "version": "0.1.11",
5
+ "description": "Parses BBCode and generates HTML ",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "sideEffects": false,
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.umd.cjs"
83
14
  }
84
- }
15
+ },
16
+ "files": [
17
+ "README.md",
18
+ "dist/*",
19
+ "src/*"
20
+ ],
21
+ "homepage": "https://trinovantes.github.io/bbcode-compiler/",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/Trinovantes/bbcode-compiler"
25
+ },
26
+ "author": {
27
+ "name": "Stephen",
28
+ "email": "hello@stephenli.ca",
29
+ "url": "https://www.stephenli.ca"
30
+ },
31
+ "devDependencies": {
32
+ "@bbob/html": "^4.3.1",
33
+ "@bbob/preset-html5": "^4.3.1",
34
+ "@eslint/compat": "^2.0.3",
35
+ "@eslint/js": "^10.0.1",
36
+ "@quasar/extras": "^1.17.0",
37
+ "@quasar/vite-plugin": "^1.11.0",
38
+ "@stylistic/eslint-plugin": "^5.10.0",
39
+ "@thoughtsunificator/bbcode-parser-template": "^1.0.9",
40
+ "@types/benchmark": "^2.1.5",
41
+ "@types/lodash.debounce": "^4.0.9",
42
+ "@types/markdown-it": "^14.1.2",
43
+ "@types/node": "^24.12.0",
44
+ "@vitejs/plugin-vue": "^6.0.5",
45
+ "bbcode": "^0.1.5",
46
+ "bbcode-parser": "^1.0.10",
47
+ "bbcodejs": "^0.0.4",
48
+ "benchmark": "^2.1.4",
49
+ "eslint": "^10.1.0",
50
+ "eslint-plugin-n": "^17.24.0",
51
+ "eslint-plugin-vue": "^10.8.0",
52
+ "globals": "^17.4.0",
53
+ "lodash.debounce": "^4.0.8",
54
+ "lz-string": "^1.5.0",
55
+ "markdown-it": "^14.1.1",
56
+ "mitt": "^3.0.1",
57
+ "monaco-editor": "^0.55.1",
58
+ "quasar": "^2.19.1",
59
+ "sass": "^1.98.0",
60
+ "shiki": "^4.0.2",
61
+ "ts-bbcode-parser": "^1.0.4",
62
+ "typescript": "^6.0.2",
63
+ "typescript-eslint": "^8.57.2",
64
+ "vite": "^8.0.2",
65
+ "vite-plugin-dts": "^4.5.4",
66
+ "vitest": "^4.1.1",
67
+ "vue": "^3.5.30",
68
+ "vue-eslint-parser": "^10.4.0",
69
+ "vue-tsc": "^3.2.6",
70
+ "ya-bbcode": "^5.0.0"
71
+ },
72
+ "scripts": {
73
+ "demoDev": " vite --config vite.config.demo.ts",
74
+ "demoBuild": " vite build --config vite.config.demo.ts",
75
+ "demoPreview": "vite preview --config vite.config.demo.ts",
76
+ "clean": "rm -rf ./dist ./demo/dist",
77
+ "build": "vite build",
78
+ "lint": "vue-tsc && eslint",
79
+ "test": "vitest",
80
+ "benchmark": "bun ./tests/benchmarks/benchmark.ts",
81
+ "prof": "node --prof --no-logfile-per-isolate tests/benchmarks/profile.ts && node --prof-process v8.log > v8.txt"
82
+ }
83
+ }
@@ -1,7 +1,7 @@
1
- import { Generator } from './generator/Generator.js'
2
- import { htmlTransforms } from './generator/transforms/htmlTransforms.js'
3
- import { Lexer } from './lexer/Lexer.js'
4
- import { Parser } from './parser/Parser.js'
1
+ import { Generator } from './generator/Generator.ts'
2
+ import { htmlTransforms } from './generator/transforms/htmlTransforms.ts'
3
+ import { Lexer } from './lexer/Lexer.ts'
4
+ import { Parser } from './parser/Parser.ts'
5
5
 
6
6
  export function generateHtml(input: string, transforms = htmlTransforms): string {
7
7
  const lexer = new Lexer()
@@ -1,7 +1,7 @@
1
- import { AstNode, AstNodeType, RootNode } from '../parser/AstNode.js'
2
- import { nodeIsType } from '../parser/nodeIsType.js'
3
- import { htmlTransforms } from './transforms/htmlTransforms.js'
4
- import type { Transform } from './transforms/Transform.js'
1
+ import { AstNode, RootNode } from '../parser/AstNode.ts'
2
+ import { nodeIsType } from '../parser/nodeIsType.ts'
3
+ import { htmlTransforms } from './transforms/htmlTransforms.ts'
4
+ import type { Transform } from './transforms/Transform.ts'
5
5
 
6
6
  export class Generator {
7
7
  transforms: ReadonlyMap<string, Transform>
@@ -14,7 +14,7 @@ export class Generator {
14
14
  const stringify = (node: AstNode): string => {
15
15
  let output = ''
16
16
 
17
- if (nodeIsType(node, AstNodeType.TagNode)) {
17
+ if (nodeIsType(node, 'TagNode')) {
18
18
  const tagName = node.tagName
19
19
  const transform = this.transforms.get(tagName)
20
20
  if (!transform) {
@@ -42,9 +42,9 @@ export class Generator {
42
42
  } else {
43
43
  output += renderedEndTag
44
44
  }
45
- } else if (nodeIsType(node, AstNodeType.TextNode)) {
45
+ } else if (nodeIsType(node, 'TextNode')) {
46
46
  output += node.str
47
- } else if (nodeIsType(node, AstNodeType.LinebreakNode)) {
47
+ } else if (nodeIsType(node, 'LinebreakNode')) {
48
48
  output += '\n'
49
49
  } else {
50
50
  for (const child of node.children) {
@@ -1,4 +1,4 @@
1
- import type { TagNode } from '../../parser/AstNode.js'
1
+ import type { TagNode } from '../../parser/AstNode.ts'
2
2
 
3
3
  export type Transform = {
4
4
  name: string
@@ -1,9 +1,9 @@
1
- import { getTagImmediateAttrVal } from '../utils/getTagImmediateAttrVal.js'
2
- import { getTagImmediateText } from '../utils/getTagImmediateText.js'
3
- import { getWidthHeightAttr } from '../utils/getWidthHeightAttr.js'
4
- import { isDangerousUrl } from '../utils/isDangerousUrl.js'
5
- import { isOrderedList } from '../utils/isOrderedList.js'
6
- import type { Transform } from './Transform.js'
1
+ import { getTagImmediateAttrVal } from '../utils/getTagImmediateAttrVal.ts'
2
+ import { getTagImmediateText } from '../utils/getTagImmediateText.ts'
3
+ import { getWidthHeightAttr } from '../utils/getWidthHeightAttr.ts'
4
+ import { isDangerousUrl } from '../utils/isDangerousUrl.ts'
5
+ import { isOrderedList } from '../utils/isOrderedList.ts'
6
+ import type { Transform } from './Transform.ts'
7
7
 
8
8
  export const htmlTransforms: ReadonlyArray<Transform> = [
9
9
  {
@@ -1,4 +1,4 @@
1
- import type { TagNode } from '../../parser/AstNode.js'
1
+ import type { TagNode } from '../../parser/AstNode.ts'
2
2
 
3
3
  /**
4
4
  * Gets the text of the immediate attribute of the current TagNode
@@ -1,5 +1,5 @@
1
- import { AstNodeType, TagNode } from '../../parser/AstNode.js'
2
- import { nodeIsType } from '../../parser/nodeIsType.js'
1
+ import { TagNode } from '../../parser/AstNode.ts'
2
+ import { nodeIsType } from '../../parser/nodeIsType.ts'
3
3
 
4
4
  /**
5
5
  * Gets the text of the immediate descendant of the current TagNode
@@ -16,7 +16,7 @@ export function getTagImmediateText(tagNode: TagNode): string | undefined {
16
16
  }
17
17
 
18
18
  const child = tagNode.children[0]
19
- if (!nodeIsType(child, AstNodeType.RootNode)) {
19
+ if (!nodeIsType(child, 'RootNode')) {
20
20
  return undefined
21
21
  }
22
22
 
@@ -25,7 +25,7 @@ export function getTagImmediateText(tagNode: TagNode): string | undefined {
25
25
  }
26
26
 
27
27
  const textNode = child.children[0]
28
- if (!nodeIsType(textNode, AstNodeType.TextNode)) {
28
+ if (!nodeIsType(textNode, 'TextNode')) {
29
29
  return undefined
30
30
  }
31
31
 
@@ -1,4 +1,4 @@
1
- import type { TagNode } from '../../parser/AstNode.js'
1
+ import type { TagNode } from '../../parser/AstNode.ts'
2
2
 
3
3
  /**
4
4
  * Gets the width/height attributes of the TagNode if they exist
@@ -1,4 +1,4 @@
1
- import type { TagNode } from '../../parser/AstNode.js'
1
+ import type { TagNode } from '../../parser/AstNode.ts'
2
2
 
3
3
  /**
4
4
  * Determines if the StartTag has an attribute of "1" to indicate that it's an ordered list
package/src/index.ts CHANGED
@@ -1,18 +1,18 @@
1
- export * from './generateHtml.js'
1
+ export * from './generateHtml.ts'
2
2
 
3
- export * from './lexer/Lexer.js'
4
- export * from './lexer/Token.js'
5
- export * from './lexer/TokenType.js'
3
+ export * from './lexer/Lexer.ts'
4
+ export * from './lexer/Token.ts'
5
+ export * from './lexer/TokenType.ts'
6
6
 
7
- export * from './parser/Parser.js'
8
- export * from './parser/AstNode.js'
9
- export * from './parser/nodeIsType.js'
7
+ export * from './parser/Parser.ts'
8
+ export * from './parser/AstNode.ts'
9
+ export * from './parser/nodeIsType.ts'
10
10
 
11
- export * from './generator/Generator.js'
12
- export * from './generator/transforms/Transform.js'
13
- export * from './generator/transforms/htmlTransforms.js'
14
- export * from './generator/utils/getWidthHeightAttr.js'
15
- export * from './generator/utils/getTagImmediateAttrVal.js'
16
- export * from './generator/utils/getTagImmediateText.js'
17
- export * from './generator/utils/isDangerousUrl.js'
18
- export * from './generator/utils/isOrderedList.js'
11
+ export * from './generator/Generator.ts'
12
+ export * from './generator/transforms/Transform.ts'
13
+ export * from './generator/transforms/htmlTransforms.ts'
14
+ export * from './generator/utils/getWidthHeightAttr.ts'
15
+ export * from './generator/utils/getTagImmediateAttrVal.ts'
16
+ export * from './generator/utils/getTagImmediateText.ts'
17
+ export * from './generator/utils/isDangerousUrl.ts'
18
+ export * from './generator/utils/isOrderedList.ts'
@@ -1,5 +1,5 @@
1
- import { symbolTable, TokenType } from './TokenType.js'
2
- import type { Token } from './Token.js'
1
+ import { symbolTable } from './TokenType.ts'
2
+ import type { Token } from './Token.ts'
3
3
 
4
4
  export class Lexer {
5
5
  tokenize(input: Readonly<string>): Array<Token> {
@@ -25,7 +25,7 @@ export class Lexer {
25
25
  const length = match.index - offset
26
26
  if (length > 0) {
27
27
  tokens.push({
28
- type: TokenType.STR,
28
+ type: 'STR',
29
29
  offset,
30
30
  length,
31
31
  })
@@ -37,21 +37,21 @@ export class Lexer {
37
37
  // In the regex '[/' takes precedence over '['
38
38
  if (match[0] === '[/') {
39
39
  tokens.push({
40
- type: TokenType.L_BRACKET,
40
+ type: 'L_BRACKET',
41
41
  offset,
42
42
  length: 1,
43
43
  })
44
44
  offset += 1
45
45
 
46
46
  tokens.push({
47
- type: TokenType.BACKSLASH,
47
+ type: 'BACKSLASH',
48
48
  offset,
49
49
  length: 1,
50
50
  })
51
51
  offset += 1
52
52
  } else if (match[0].startsWith('[')) {
53
53
  tokens.push({
54
- type: TokenType.L_BRACKET,
54
+ type: 'L_BRACKET',
55
55
  offset,
56
56
  length: 1,
57
57
  })
@@ -59,14 +59,14 @@ export class Lexer {
59
59
 
60
60
  const length = match[0].length - 1
61
61
  tokens.push({
62
- type: TokenType.STR,
62
+ type: 'STR',
63
63
  offset,
64
64
  length,
65
65
  })
66
66
  offset += length
67
67
  } else {
68
68
  tokens.push({
69
- type: symbolTable[match[0]] ?? TokenType.STR,
69
+ type: symbolTable[match[0]] ?? 'STR',
70
70
  offset,
71
71
  length: 1,
72
72
  })
@@ -78,7 +78,7 @@ export class Lexer {
78
78
  const length = input.length - offset
79
79
  if (length > 0) {
80
80
  tokens.push({
81
- type: TokenType.STR,
81
+ type: 'STR',
82
82
  offset,
83
83
  length,
84
84
  })
@@ -1,4 +1,4 @@
1
- import { TokenType } from './TokenType.js'
1
+ import type { TokenType } from './TokenType.ts'
2
2
 
3
3
  export type Token = {
4
4
  type: TokenType
@@ -11,49 +11,49 @@ export function stringifyTokens(ogText: string, tokens: ReadonlyArray<Token>): s
11
11
 
12
12
  for (const token of tokens) {
13
13
  switch (token.type) {
14
- case TokenType.STR: {
14
+ case 'STR': {
15
15
  s += ogText.substring(token.offset, token.offset + token.length)
16
16
  break
17
17
  }
18
- case TokenType.LINEBREAK: {
18
+ case 'LINEBREAK': {
19
19
  s += '\n'
20
20
  break
21
21
  }
22
22
 
23
- case TokenType.L_BRACKET: {
23
+ case 'L_BRACKET': {
24
24
  s += '['
25
25
  break
26
26
  }
27
- case TokenType.R_BRACKET: {
27
+ case 'R_BRACKET': {
28
28
  s += ']'
29
29
  break
30
30
  }
31
- case TokenType.BACKSLASH: {
31
+ case 'BACKSLASH': {
32
32
  s += '/'
33
33
  break
34
34
  }
35
- case TokenType.EQUALS: {
35
+ case 'EQUALS': {
36
36
  s += '='
37
37
  break
38
38
  }
39
39
 
40
- case TokenType.XSS_AMP: {
40
+ case 'XSS_AMP': {
41
41
  s += '&amp;'
42
42
  break
43
43
  }
44
- case TokenType.XSS_LT: {
44
+ case 'XSS_LT': {
45
45
  s += '&lt;'
46
46
  break
47
47
  }
48
- case TokenType.XSS_GT: {
48
+ case 'XSS_GT': {
49
49
  s += '&gt;'
50
50
  break
51
51
  }
52
- case TokenType.XSS_D_QUOTE: {
52
+ case 'XSS_D_QUOTE': {
53
53
  s += '&quot;'
54
54
  break
55
55
  }
56
- case TokenType.XSS_S_QUOTE: {
56
+ case 'XSS_S_QUOTE': {
57
57
  s += '&#x27;'
58
58
  break
59
59
  }
@@ -1,47 +1,46 @@
1
- export const enum TokenType {
2
- STR,
3
- LINEBREAK,
1
+ export type TokenType =
2
+ | 'STR'
3
+ | 'LINEBREAK'
4
4
 
5
5
  // BBCode symbols
6
- L_BRACKET,
7
- R_BRACKET,
8
- BACKSLASH,
9
- EQUALS,
6
+ | 'L_BRACKET'
7
+ | 'R_BRACKET'
8
+ | 'BACKSLASH'
9
+ | 'EQUALS'
10
10
 
11
11
  // XSS symbols
12
- XSS_AMP,
13
- XSS_LT,
14
- XSS_GT,
15
- XSS_D_QUOTE,
16
- XSS_S_QUOTE,
17
- }
12
+ | 'XSS_AMP'
13
+ | 'XSS_LT'
14
+ | 'XSS_GT'
15
+ | 'XSS_D_QUOTE'
16
+ | 'XSS_S_QUOTE'
18
17
 
19
18
  export function tokenTypeToString(tokenType: TokenType): string {
20
19
  switch (tokenType) {
21
- case TokenType.STR: return 'STR'
22
- case TokenType.LINEBREAK: return 'LINEBREAK'
20
+ case 'STR': return 'STR'
21
+ case 'LINEBREAK': return 'LINEBREAK'
23
22
 
24
- case TokenType.L_BRACKET: return 'L_BRACKET'
25
- case TokenType.R_BRACKET: return 'R_BRACKET'
26
- case TokenType.BACKSLASH: return 'BACKSLASH'
27
- case TokenType.EQUALS: return 'EQUALS'
23
+ case 'L_BRACKET': return 'L_BRACKET'
24
+ case 'R_BRACKET': return 'R_BRACKET'
25
+ case 'BACKSLASH': return 'BACKSLASH'
26
+ case 'EQUALS': return 'EQUALS'
28
27
 
29
- case TokenType.XSS_AMP: return 'XSS_AMP'
30
- case TokenType.XSS_LT: return 'XSS_LT'
31
- case TokenType.XSS_GT: return 'XSS_GT'
32
- case TokenType.XSS_D_QUOTE: return 'XSS_D_QUOTE'
33
- case TokenType.XSS_S_QUOTE: return 'XSS_S_QUOTE'
28
+ case 'XSS_AMP': return 'XSS_AMP'
29
+ case 'XSS_LT': return 'XSS_LT'
30
+ case 'XSS_GT': return 'XSS_GT'
31
+ case 'XSS_D_QUOTE': return 'XSS_D_QUOTE'
32
+ case 'XSS_S_QUOTE': return 'XSS_S_QUOTE'
34
33
  }
35
34
  }
36
35
 
37
36
  export function isStringToken(tokenType: TokenType): boolean {
38
37
  switch (tokenType) {
39
- case TokenType.XSS_AMP:
40
- case TokenType.XSS_LT:
41
- case TokenType.XSS_GT:
42
- case TokenType.XSS_D_QUOTE:
43
- case TokenType.XSS_S_QUOTE:
44
- case TokenType.STR: {
38
+ case 'XSS_AMP':
39
+ case 'XSS_LT':
40
+ case 'XSS_GT':
41
+ case 'XSS_D_QUOTE':
42
+ case 'XSS_S_QUOTE':
43
+ case 'STR': {
45
44
  return true
46
45
  }
47
46
  }
@@ -50,16 +49,16 @@ export function isStringToken(tokenType: TokenType): boolean {
50
49
  }
51
50
 
52
51
  export const symbolTable: Record<string, TokenType | undefined> = {
53
- '\n': TokenType.LINEBREAK,
52
+ '\n': 'LINEBREAK',
54
53
 
55
- '[': TokenType.L_BRACKET,
56
- ']': TokenType.R_BRACKET,
57
- '/': TokenType.BACKSLASH,
58
- '=': TokenType.EQUALS,
54
+ '[': 'L_BRACKET',
55
+ ']': 'R_BRACKET',
56
+ '/': 'BACKSLASH',
57
+ '=': 'EQUALS',
59
58
 
60
- '&': TokenType.XSS_AMP,
61
- '<': TokenType.XSS_LT,
62
- '>': TokenType.XSS_GT,
63
- '"': TokenType.XSS_D_QUOTE,
64
- "'": TokenType.XSS_S_QUOTE,
59
+ '&': 'XSS_AMP',
60
+ '<': 'XSS_LT',
61
+ '>': 'XSS_GT',
62
+ '"': 'XSS_D_QUOTE',
63
+ "'": 'XSS_S_QUOTE',
65
64
  }