From 3ecd059ff06cea5bef2da6a4caf7f7b89294240e Mon Sep 17 00:00:00 2001 From: Nikolay Kostyurin Date: Mon, 3 Jun 2024 01:16:43 +0200 Subject: [PATCH] refactor: move types to separate package --- lerna.json | 3 +- nx.json | 4 +- packages/bbob-core/package.json | 3 +- packages/bbob-core/src/index.ts | 16 ++++--- packages/bbob-core/src/utils.ts | 4 +- packages/bbob-html/package.json | 3 +- packages/bbob-html/src/index.ts | 5 +- packages/bbob-parser/package.json | 3 +- packages/bbob-parser/src/Token.ts | 11 +++-- packages/bbob-parser/src/index.ts | 1 - packages/bbob-parser/src/lexer.ts | 2 +- packages/bbob-parser/src/parse.ts | 20 +------- packages/bbob-parser/src/types.ts | 15 ------ packages/bbob-plugin-helper/package.json | 3 ++ packages/bbob-plugin-helper/src/TagNode.ts | 4 +- packages/bbob-plugin-helper/src/helpers.ts | 3 +- packages/bbob-plugin-helper/src/index.ts | 1 - packages/bbob-preset-html5/package.json | 3 +- packages/bbob-preset-html5/src/defaultTags.ts | 5 +- packages/bbob-preset-react/package.json | 5 +- packages/bbob-preset-react/src/index.ts | 2 +- packages/bbob-preset-vue/package.json | 6 +-- packages/bbob-preset-vue/src/index.ts | 3 +- packages/bbob-preset/package.json | 2 +- packages/bbob-preset/src/index.ts | 1 - packages/bbob-preset/src/preset.ts | 11 ++--- packages/bbob-react/package.json | 3 +- packages/bbob-react/src/Component.ts | 9 +++- packages/bbob-react/src/render.ts | 14 +++--- packages/bbob-types/.eslintignore | 4 ++ packages/bbob-types/.gitignore | 8 ++++ packages/bbob-types/.npmignore | 7 +++ packages/bbob-types/package.json | 34 +++++++++++++ .../src/types.ts => bbob-types/src/core.ts} | 35 +++++++------- packages/bbob-types/src/index.ts | 4 ++ packages/bbob-types/src/parser.ts | 44 +++++++++++++++++ .../src/types.ts => bbob-types/src/preset.ts} | 26 +++++----- .../src/types.ts | 0 packages/bbob-types/tsconfig.json | 10 ++++ packages/bbob-vue2/package.json | 3 +- packages/bbob-vue2/src/Component.ts | 2 +- packages/bbob-vue2/src/render.ts | 34 ++++++------- packages/bbob-vue3/package.json | 3 +- packages/bbob-vue3/src/Component.ts | 2 +- packages/bbob-vue3/src/render.ts | 5 +- pnpm-lock.yaml | 48 ++++++++++++++----- tsconfig.json | 1 + 47 files changed, 277 insertions(+), 158 deletions(-) delete mode 100644 packages/bbob-parser/src/types.ts create mode 100644 packages/bbob-types/.eslintignore create mode 100644 packages/bbob-types/.gitignore create mode 100644 packages/bbob-types/.npmignore create mode 100644 packages/bbob-types/package.json rename packages/{bbob-core/src/types.ts => bbob-types/src/core.ts} (52%) create mode 100644 packages/bbob-types/src/index.ts create mode 100644 packages/bbob-types/src/parser.ts rename packages/{bbob-preset/src/types.ts => bbob-types/src/preset.ts} (52%) rename packages/{bbob-plugin-helper => bbob-types}/src/types.ts (100%) create mode 100644 packages/bbob-types/tsconfig.json diff --git a/lerna.json b/lerna.json index 385a8642..f468f2c6 100644 --- a/lerna.json +++ b/lerna.json @@ -16,7 +16,8 @@ "packages/bbob-preset-vue", "packages/bbob-react", "packages/bbob-vue2", - "packages/bbob-vue3" + "packages/bbob-vue3", + "packages/bbob-types" ], "publishConfig": { "access": "public", diff --git a/nx.json b/nx.json index 0fda0372..452edfb1 100644 --- a/nx.json +++ b/nx.json @@ -9,8 +9,8 @@ "build": { "dependsOn": [ "^types", - "^build:commonjs", "^build:es", + "^build:commonjs", "^build:umd" ], "outputs": ["{projectRoot}/lib", "{projectRoot}/es", "{projectRoot}/dist"], @@ -48,7 +48,7 @@ }, "build:umd": { "dependsOn": [ - "^build:es", + "build:es", "^build:umd" ], "outputs": ["{projectRoot}/dist"], diff --git a/packages/bbob-core/package.json b/packages/bbob-core/package.json index 8af558b4..3de9fab9 100644 --- a/packages/bbob-core/package.json +++ b/packages/bbob-core/package.json @@ -21,7 +21,8 @@ ], "dependencies": { "@bbob/parser": "*", - "@bbob/plugin-helper": "*" + "@bbob/plugin-helper": "*", + "@bbob/types": "*" }, "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/bbob-core/src/index.ts b/packages/bbob-core/src/index.ts index 7dadc055..40d41508 100644 --- a/packages/bbob-core/src/index.ts +++ b/packages/bbob-core/src/index.ts @@ -1,13 +1,17 @@ +import type { + BBobCore, + BBobCoreOptions, + BBobCoreTagNodeTree, + BBobPlugins, + IterateCallback, + NodeContent, + PartialNodeContent +} from "@bbob/types"; + import { parse } from '@bbob/parser'; import { iterate, match } from './utils'; import { C1, C2 } from './errors' -import type { IterateCallback } from './utils'; -import type { NodeContent, PartialNodeContent } from "@bbob/plugin-helper"; -import type { BBobCore, BBobCoreOptions, BBobCoreTagNodeTree, BBobPlugins } from "./types"; - -export * from './types' - export function createTree(tree: NodeContent[], options: Options) { const extendedTree = tree as BBobCoreTagNodeTree diff --git a/packages/bbob-core/src/utils.ts b/packages/bbob-core/src/utils.ts index d271e780..281ffdf3 100644 --- a/packages/bbob-core/src/utils.ts +++ b/packages/bbob-core/src/utils.ts @@ -1,9 +1,9 @@ /* eslint-disable no-plusplus */ +import { IterateCallback } from "@bbob/types"; + const isObj = (value: unknown): value is Record => (typeof value === 'object' && value !== null); const isBool = (value: unknown): value is boolean => (typeof value === 'boolean'); -export type IterateCallback = (node: Content) => Content - export function iterate | Content>(t: Iterable, cb: IterateCallback): Iterable { const tree = t; diff --git a/packages/bbob-html/package.json b/packages/bbob-html/package.json index 391ba43b..bca29e61 100644 --- a/packages/bbob-html/package.json +++ b/packages/bbob-html/package.json @@ -10,7 +10,8 @@ ], "dependencies": { "@bbob/core": "*", - "@bbob/plugin-helper": "*" + "@bbob/plugin-helper": "*", + "@bbob/types": "*" }, "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/bbob-html/src/index.ts b/packages/bbob-html/src/index.ts index b49481ea..9122cce1 100644 --- a/packages/bbob-html/src/index.ts +++ b/packages/bbob-html/src/index.ts @@ -1,5 +1,6 @@ -import core, { BBobCoreOptions, BBobPlugins } from '@bbob/core'; -import { attrsToString, isTagNode, TagNode, TagNodeTree } from '@bbob/plugin-helper'; +import core from '@bbob/core'; +import { attrsToString, isTagNode, TagNode } from '@bbob/plugin-helper'; +import type { BBobCoreOptions, BBobPlugins, TagNodeTree } from '@bbob/types'; const SELFCLOSE_END_TAG = '/>'; const CLOSE_START_TAG = ' { * @export * @class Token */ -class Token { - private t: number // type - private v: string // value - private l: number // line - private r: number // row +class Token implements TokenInterface { + readonly t: number // type + readonly v: string // value + readonly l: number // line + readonly r: number // row constructor(type?: number, value?: TokenValue, row: number = 0, col: number = 0) { this[TOKEN_LINE_ID] = row; diff --git a/packages/bbob-parser/src/index.ts b/packages/bbob-parser/src/index.ts index 82e60e86..2c7f3575 100644 --- a/packages/bbob-parser/src/index.ts +++ b/packages/bbob-parser/src/index.ts @@ -2,4 +2,3 @@ export { TagNode } from '@bbob/plugin-helper'; export { default } from './parse'; export * from './parse'; export * from './lexer' -export * from './types' diff --git a/packages/bbob-parser/src/lexer.ts b/packages/bbob-parser/src/lexer.ts index 0ca91c3b..83634733 100644 --- a/packages/bbob-parser/src/lexer.ts +++ b/packages/bbob-parser/src/lexer.ts @@ -10,12 +10,12 @@ import { EQ, N, } from '@bbob/plugin-helper'; +import type { LexerOptions, LexerTokenizer } from "@bbob/types"; import { Token, TYPE_ATTR_NAME, TYPE_ATTR_VALUE, TYPE_NEW_LINE, TYPE_SPACE, TYPE_TAG, TYPE_WORD, } from './Token'; import { CharGrabber, createCharGrabber, trimChar, unquote } from './utils'; -import type { LexerOptions, LexerTokenizer } from "./types"; // for cases const EM = '!'; diff --git a/packages/bbob-parser/src/parse.ts b/packages/bbob-parser/src/parse.ts index b5af8002..e1a07597 100644 --- a/packages/bbob-parser/src/parse.ts +++ b/packages/bbob-parser/src/parse.ts @@ -1,3 +1,5 @@ +import type { NodeContent, TagNodeTree, LexerTokenizer, ParseOptions } from "@bbob/types"; + import { CLOSE_BRAKET, OPEN_BRAKET, @@ -7,26 +9,8 @@ import { import { createLexer } from "./lexer"; -import type { NodeContent, TagNodeTree } from "@bbob/plugin-helper"; -import type { LexerTokenizer, LexerOptions } from "./types"; import type { Token } from "./Token"; -type ParseError = { - tagName: string; - lineNumber: number; - columnNumber: number; -}; - -export interface ParseOptions { - createTokenizer?: (input: string, options?: LexerOptions) => LexerTokenizer; - openTag?: string; - closeTag?: string; - onlyAllowTags?: string[]; - contextFreeTags?: string[]; - enableEscapeTags?: boolean; - onError?: (error: ParseError) => void; -} - class NodeList { private n: Value[]; diff --git a/packages/bbob-parser/src/types.ts b/packages/bbob-parser/src/types.ts deleted file mode 100644 index c2dd1b73..00000000 --- a/packages/bbob-parser/src/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type Token from "./Token"; - -export interface LexerTokenizer { - tokenize: () => Token[]; - isTokenNested?: (token: Token) => boolean; -} - -export type LexerOptions = { - openTag?: string; - closeTag?: string; - onlyAllowTags?: string[]; - enableEscapeTags?: boolean; - contextFreeTags?: string[]; - onToken?: (token?: Token) => void; -}; diff --git a/packages/bbob-plugin-helper/package.json b/packages/bbob-plugin-helper/package.json index f4d9464a..833e731b 100644 --- a/packages/bbob-plugin-helper/package.json +++ b/packages/bbob-plugin-helper/package.json @@ -20,6 +20,9 @@ "browser": "dist/index.js", "browserName": "BbobPluginHelper", "types": "types/index.d.ts", + "dependencies": { + "@bbob/types": "*" + }, "exports": { ".": { "types": "./types/index.d.ts", diff --git a/packages/bbob-plugin-helper/src/TagNode.ts b/packages/bbob-plugin-helper/src/TagNode.ts index 49866bd0..902842da 100644 --- a/packages/bbob-plugin-helper/src/TagNode.ts +++ b/packages/bbob-plugin-helper/src/TagNode.ts @@ -1,3 +1,5 @@ +import type { NodeContent, TagNodeObject, TagNodeTree } from "@bbob/types"; + import { OPEN_BRAKET, CLOSE_BRAKET, SLASH } from './char'; import { getUniqAttr, @@ -8,8 +10,6 @@ import { isTagNode, } from './helpers'; -import type { NodeContent, TagNodeObject, TagNodeTree } from "./types"; - const getTagAttrs = (tag: string, params: Record) => { const uniqAttr = getUniqAttr(params); diff --git a/packages/bbob-plugin-helper/src/helpers.ts b/packages/bbob-plugin-helper/src/helpers.ts index 7ca6a83b..f999e6f1 100644 --- a/packages/bbob-plugin-helper/src/helpers.ts +++ b/packages/bbob-plugin-helper/src/helpers.ts @@ -1,6 +1,7 @@ +import type { NodeContent, StringNode } from "@bbob/types"; + import { N } from './char'; import type { TagNode } from "./TagNode"; -import type { NodeContent, StringNode } from "./types"; function isTagNode(el: unknown): el is TagNode { return typeof el === 'object' && el !== null && 'tag' in el; diff --git a/packages/bbob-plugin-helper/src/index.ts b/packages/bbob-plugin-helper/src/index.ts index 3c93b97e..3cfcb823 100644 --- a/packages/bbob-plugin-helper/src/index.ts +++ b/packages/bbob-plugin-helper/src/index.ts @@ -1,4 +1,3 @@ export * from "./helpers"; export * from "./char"; export * from "./TagNode"; -export * from "./types"; diff --git a/packages/bbob-preset-html5/package.json b/packages/bbob-preset-html5/package.json index 58a29380..3215e6ea 100644 --- a/packages/bbob-preset-html5/package.json +++ b/packages/bbob-preset-html5/package.json @@ -9,7 +9,8 @@ ], "dependencies": { "@bbob/plugin-helper": "*", - "@bbob/preset": "*" + "@bbob/preset": "*", + "@bbob/types": "*" }, "devDependencies": { "@bbob/core": "*", diff --git a/packages/bbob-preset-html5/src/defaultTags.ts b/packages/bbob-preset-html5/src/defaultTags.ts index 88b54d3d..8ef7d02e 100644 --- a/packages/bbob-preset-html5/src/defaultTags.ts +++ b/packages/bbob-preset-html5/src/defaultTags.ts @@ -5,9 +5,8 @@ import { isTagNode, TagNode, } from "@bbob/plugin-helper"; -import type { NodeContent, TagNodeTree, TagNodeObject } from "@bbob/plugin-helper"; -import type { PresetTagsDefinition } from "@bbob/preset"; -import type { BBobPluginOptions } from "@bbob/core"; + +import type { BBobPluginOptions, PresetTagsDefinition, NodeContent, TagNodeTree, TagNodeObject } from "@bbob/types"; const isStartsWith = (node: string, type: string) => node[0] === type; diff --git a/packages/bbob-preset-react/package.json b/packages/bbob-preset-react/package.json index 8e9415a8..a9d46e2b 100644 --- a/packages/bbob-preset-react/package.json +++ b/packages/bbob-preset-react/package.json @@ -9,10 +9,7 @@ ], "dependencies": { "@bbob/preset-html5": "*", - "@bbob/preset": "*" - }, - "devDependencies": { - "@bbob/core": "*" + "@bbob/types": "*" }, "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/bbob-preset-react/src/index.ts b/packages/bbob-preset-react/src/index.ts index 6664b8d6..e3d545d0 100644 --- a/packages/bbob-preset-react/src/index.ts +++ b/packages/bbob-preset-react/src/index.ts @@ -1,5 +1,5 @@ import presetHTML5 from '@bbob/preset-html5'; -import type { PresetTagsDefinition } from '@bbob/preset-html5'; +import type { PresetTagsDefinition } from '@bbob/types'; const tagAttr = (style: Record) => ({ attrs: { diff --git a/packages/bbob-preset-vue/package.json b/packages/bbob-preset-vue/package.json index 3eee6ec1..d424f058 100644 --- a/packages/bbob-preset-vue/package.json +++ b/packages/bbob-preset-vue/package.json @@ -8,10 +8,8 @@ "vue" ], "dependencies": { - "@bbob/preset-html5": "*" - }, - "devDependencies": { - "@bbob/core": "*" + "@bbob/preset-html5": "*", + "@bbob/types": "*" }, "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/bbob-preset-vue/src/index.ts b/packages/bbob-preset-vue/src/index.ts index 2bde6da7..fb2991e8 100644 --- a/packages/bbob-preset-vue/src/index.ts +++ b/packages/bbob-preset-vue/src/index.ts @@ -1,5 +1,6 @@ import presetHTML5 from '@bbob/preset-html5'; -import type { PresetTagsDefinition } from '@bbob/preset-html5'; + +import type { PresetTagsDefinition } from '@bbob/types'; export const tagAttr = (style: Record) => ({ attrs: { diff --git a/packages/bbob-preset/package.json b/packages/bbob-preset/package.json index 7b6fc0c4..2c601580 100644 --- a/packages/bbob-preset/package.json +++ b/packages/bbob-preset/package.json @@ -16,7 +16,7 @@ ], "dependencies": { "@bbob/plugin-helper": "*", - "@bbob/core": "*" + "@bbob/types": "*" }, "main": "lib/index.js", "module": "es/index.js", diff --git a/packages/bbob-preset/src/index.ts b/packages/bbob-preset/src/index.ts index a47d5c41..15a762cc 100644 --- a/packages/bbob-preset/src/index.ts +++ b/packages/bbob-preset/src/index.ts @@ -1,3 +1,2 @@ export { default } from "./preset"; export * from "./preset"; -export * from "./types"; diff --git a/packages/bbob-preset/src/preset.ts b/packages/bbob-preset/src/preset.ts index 9413cf36..0e555e0e 100644 --- a/packages/bbob-preset/src/preset.ts +++ b/packages/bbob-preset/src/preset.ts @@ -1,15 +1,14 @@ +import { isTagNode } from "@bbob/plugin-helper"; + import type { BBobCoreTagNodeTree, BBobPluginOptions, -} from "@bbob/core"; -import { isTagNode } from "@bbob/plugin-helper"; -import type { - PresetFactory, PresetExtendCallback, + PresetFactory, PresetOptions, PresetTagsDefinition, - ProcessorFunction, -} from "./types"; + ProcessorFunction +} from "@bbob/types"; export function process( tags: Tags, diff --git a/packages/bbob-react/package.json b/packages/bbob-react/package.json index cba801d5..592184a7 100644 --- a/packages/bbob-react/package.json +++ b/packages/bbob-react/package.json @@ -11,7 +11,8 @@ "dependencies": { "@bbob/core": "*", "@bbob/html": "*", - "@bbob/plugin-helper": "*" + "@bbob/plugin-helper": "*", + "@bbob/types": "*" }, "peerDependencies": { "react": "> 15.0" diff --git a/packages/bbob-react/src/Component.ts b/packages/bbob-react/src/Component.ts index 0b504f19..038b26d1 100644 --- a/packages/bbob-react/src/Component.ts +++ b/packages/bbob-react/src/Component.ts @@ -1,8 +1,13 @@ import React, { ReactNode } from 'react'; -import type { BBobPlugins, BBobCoreOptions } from '@bbob/core'; +import type { BBobPlugins, BBobCoreOptions } from '@bbob/types'; + import { render } from './render'; -const content = (children: ReactNode, plugins?: BBobPlugins, options?: BBobCoreOptions) => React.Children.map(children, (child) => (typeof child === 'string' ? render(child, plugins, options) : child)); +const content = (children: ReactNode, plugins?: BBobPlugins, options?: BBobCoreOptions) => + React.Children.map(children, + (child) => + (typeof child === 'string' ? render(child, plugins, options) : child) + ); export type BBobReactComponentProps = { children: ReactNode diff --git a/packages/bbob-react/src/render.ts b/packages/bbob-react/src/render.ts index 6b1752a2..5ee2bcb3 100644 --- a/packages/bbob-react/src/render.ts +++ b/packages/bbob-react/src/render.ts @@ -1,20 +1,22 @@ /* eslint-disable no-use-before-define */ import React, { ReactNode } from "react"; import { render as htmlrender } from "@bbob/html"; -import core, { - BBobCoreOptions, - BBobCoreTagNodeTree, - BBobPlugins, -} from "@bbob/core"; +import core from "@bbob/core"; import { isTagNode, isStringNode, isEOL, TagNode, - TagNodeTree, } from "@bbob/plugin-helper"; +import type { + BBobCoreOptions, + BBobCoreTagNodeTree, + BBobPlugins, + TagNodeTree, +} from "@bbob/types"; + const toAST = ( source: string, plugins?: BBobPlugins, diff --git a/packages/bbob-types/.eslintignore b/packages/bbob-types/.eslintignore new file mode 100644 index 00000000..dc879671 --- /dev/null +++ b/packages/bbob-types/.eslintignore @@ -0,0 +1,4 @@ +dist +es +lib +test diff --git a/packages/bbob-types/.gitignore b/packages/bbob-types/.gitignore new file mode 100644 index 00000000..3f22f0b7 --- /dev/null +++ b/packages/bbob-types/.gitignore @@ -0,0 +1,8 @@ +coverage +dist +lib +es +types +test/*.d.ts +test/*.map +tsconfig.tsbuildinfo diff --git a/packages/bbob-types/.npmignore b/packages/bbob-types/.npmignore new file mode 100644 index 00000000..c1046191 --- /dev/null +++ b/packages/bbob-types/.npmignore @@ -0,0 +1,7 @@ +pnpm-lock.yaml +coverage +src +!dist +!lib +!es +*.test.js diff --git a/packages/bbob-types/package.json b/packages/bbob-types/package.json new file mode 100644 index 00000000..1b9934c6 --- /dev/null +++ b/packages/bbob-types/package.json @@ -0,0 +1,34 @@ +{ + "name": "@bbob/types", + "version": "3.0.2", + "description": "Shared Typescript types of @bbob", + "keywords": [ + "bbcode", + "types" + ], + "files": [ + "dist", + "lib", + "src", + "es", + "types" + ], + "types": "types/index.d.ts", + "module": "types/index.d.ts", + "homepage": "https://github.com/JiLiZART/bbob", + "author": "Nikolay Kostyurin ", + "license": "MIT", + "bugs": { + "url": "https://github.com/JiLiZART/bbob/issues" + }, + "repository": { + "type": "git", + "url": "git://github.com/JiLiZART/bbob.git" + }, + "scripts": { + "types": "pkg-task" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/" + } +} diff --git a/packages/bbob-core/src/types.ts b/packages/bbob-types/src/core.ts similarity index 52% rename from packages/bbob-core/src/types.ts rename to packages/bbob-types/src/core.ts index cef7755e..b3657423 100644 --- a/packages/bbob-core/src/types.ts +++ b/packages/bbob-types/src/core.ts @@ -1,27 +1,24 @@ -import type { ParseOptions, TagNode } from "@bbob/parser"; -import type { - NodeContent, - PartialNodeContent, - TagNodeTree, -} from "@bbob/plugin-helper"; -import type { IterateCallback, iterate } from "./utils"; +import { ParseOptions } from "./parser"; +import { NodeContent, PartialNodeContent, TagNodeObject, TagNodeTree } from "./types"; export interface BBobCoreOptions< - Data = unknown | null, - Options extends ParseOptions = ParseOptions + Data = unknown | null, + Options extends ParseOptions = ParseOptions > extends ParseOptions { skipParse?: boolean; - parser?: (source: string, options?: Options) => TagNode[]; + parser?: (source: string, options?: Options) => TagNodeObject[]; render?: (ast?: TagNodeTree, options?: Options) => string; data?: Data; } +export type IterateCallback = (node: Content) => Content + export interface BBobPluginOptions< - Options extends ParseOptions = ParseOptions + Options extends ParseOptions = ParseOptions, > { parse: BBobCoreOptions["parser"]; render: (ast?: TagNodeTree, options?: Options) => string; - iterate: typeof iterate; + iterate: | Content>(t: Iterable, cb: IterateCallback) => Iterable; data: unknown | null; } @@ -30,16 +27,16 @@ export interface BBobPluginFunction { } export interface BBobCore< - InputValue = string | TagNode[], - Options extends BBobCoreOptions = BBobCoreOptions + InputValue = string | TagNodeObject[], + Options extends BBobCoreOptions = BBobCoreOptions > { process( - input: InputValue, - opts?: Options + input: InputValue, + opts?: Options ): { readonly html: string; tree: BBobCoreTagNodeTree; - raw: TagNode[] | string; + raw: TagNodeObject[] | string; messages: unknown[]; }; } @@ -49,8 +46,8 @@ export interface BBobCoreTagNodeTree extends Array { options: BBobCoreOptions; walk: (cb: IterateCallback) => BBobCoreTagNodeTree; match: ( - expression: PartialNodeContent | PartialNodeContent[], - cb: IterateCallback + expression: PartialNodeContent | PartialNodeContent[], + cb: IterateCallback ) => BBobCoreTagNodeTree; } diff --git a/packages/bbob-types/src/index.ts b/packages/bbob-types/src/index.ts new file mode 100644 index 00000000..966399af --- /dev/null +++ b/packages/bbob-types/src/index.ts @@ -0,0 +1,4 @@ +export * from './types' +export * from './parser' +export * from './core' +export * from './preset' diff --git a/packages/bbob-types/src/parser.ts b/packages/bbob-types/src/parser.ts new file mode 100644 index 00000000..8a61281e --- /dev/null +++ b/packages/bbob-types/src/parser.ts @@ -0,0 +1,44 @@ +import { TagNodeTree } from "./types"; + +export interface ParseError { + tagName: string; + lineNumber: number; + columnNumber: number; +} + +export interface TagNode { + readonly tag: string + attrs?: Record + content?: TagNodeTree +} + +export interface Token { + readonly t: number // type + readonly v: string // value + readonly l: number // line + readonly r: number // row +} + +export interface LexerTokenizer { + tokenize: () => Token[]; + isTokenNested?: (token: Token) => boolean; +} + +export interface LexerOptions { + openTag?: string; + closeTag?: string; + onlyAllowTags?: string[]; + enableEscapeTags?: boolean; + contextFreeTags?: string[]; + onToken?: (token?: Token) => void; +} + +export interface ParseOptions { + createTokenizer?: (input: string, options?: LexerOptions) => LexerTokenizer; + openTag?: string; + closeTag?: string; + onlyAllowTags?: string[]; + contextFreeTags?: string[]; + enableEscapeTags?: boolean; + onError?: (error: ParseError) => void; +} diff --git a/packages/bbob-preset/src/types.ts b/packages/bbob-types/src/preset.ts similarity index 52% rename from packages/bbob-preset/src/types.ts rename to packages/bbob-types/src/preset.ts index bae969b9..6f9808d4 100644 --- a/packages/bbob-preset/src/types.ts +++ b/packages/bbob-types/src/preset.ts @@ -1,19 +1,21 @@ -import type { TagNodeObject } from "@bbob/plugin-helper"; -import type { BBobCoreTagNodeTree, BBobPluginFunction, BBobPluginOptions } from "@bbob/core"; -import type { process } from "./preset"; -type PartialRecord = Partial> +import { BBobCoreTagNodeTree, BBobPluginFunction, BBobPluginOptions } from "./core"; +import { TagNodeObject } from "./types"; -export type { TagNodeObject } from "@bbob/plugin-helper"; -export type { BBobCoreTagNodeTree, BBobPluginFunction, BBobPluginOptions } from "@bbob/core"; +export type PartialRecord = Partial> -export type PresetTagsDefinition = PartialRecord +export type PresetTagsDefinition = Record export type PresetOptions = Record -export type ProcessorFunction = typeof process; +export type ProcessorFunction = ( + tags: Tags, + tree: BBobCoreTagNodeTree, + core: BBobPluginOptions, + options: Options +) => BBobCoreTagNodeTree -export type ProcessorReturnType = ReturnType>; +// export type ProcessorReturnType = ReturnType; export interface PresetTagFunction { ( @@ -27,8 +29,8 @@ export interface PresetExtendCallback extends BBobPluginFunction { - (tree: BBobCoreTagNodeTree, core?: BBobPluginOptions): ProcessorReturnType; +export interface PresetExecutor extends BBobPluginFunction { + (tree: BBobCoreTagNodeTree, core?: BBobPluginOptions): BBobCoreTagNodeTree; options: Options; } @@ -36,7 +38,7 @@ export interface PresetFactory< Tags extends PresetTagsDefinition = PresetTagsDefinition, RootOptions extends PresetOptions = PresetOptions, > { - (opts?: Options): PresetExecutor; + (opts?: Options): PresetExecutor; options?: RootOptions; extend: ( cb: PresetExtendCallback diff --git a/packages/bbob-plugin-helper/src/types.ts b/packages/bbob-types/src/types.ts similarity index 100% rename from packages/bbob-plugin-helper/src/types.ts rename to packages/bbob-types/src/types.ts diff --git a/packages/bbob-types/tsconfig.json b/packages/bbob-types/tsconfig.json new file mode 100644 index 00000000..385f1a81 --- /dev/null +++ b/packages/bbob-types/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "./types" + }, + "include": [ + "./src/**/*" + ] +} diff --git a/packages/bbob-vue2/package.json b/packages/bbob-vue2/package.json index b1b16431..0abf40b5 100644 --- a/packages/bbob-vue2/package.json +++ b/packages/bbob-vue2/package.json @@ -11,7 +11,8 @@ "dependencies": { "@bbob/core": "*", "@bbob/html": "*", - "@bbob/plugin-helper": "*" + "@bbob/plugin-helper": "*", + "@bbob/types": "*" }, "peerDependencies": { "vue": "2.x" diff --git a/packages/bbob-vue2/src/Component.ts b/packages/bbob-vue2/src/Component.ts index 6dfb8df4..bf645f65 100644 --- a/packages/bbob-vue2/src/Component.ts +++ b/packages/bbob-vue2/src/Component.ts @@ -1,7 +1,7 @@ import { defineComponent } from 'vue'; +import type { BBobCoreOptions, BBobPlugins } from '@bbob/types'; import { render } from './render'; -import type { BBobCoreOptions, BBobPlugins } from '@bbob/core'; export type BBobVueComponentProps = { container: string diff --git a/packages/bbob-vue2/src/render.ts b/packages/bbob-vue2/src/render.ts index 7a8b386e..c5cee0ea 100644 --- a/packages/bbob-vue2/src/render.ts +++ b/packages/bbob-vue2/src/render.ts @@ -1,36 +1,36 @@ /* eslint-disable no-use-before-define,import/prefer-default-export */ -import core, { BBobPlugins, BBobCoreOptions } from '@bbob/core'; +import core from '@bbob/core'; import * as html from '@bbob/html'; import { isStringNode, isTagNode } from '@bbob/plugin-helper'; -import type { TagNodeTree, TagNode } from "@bbob/plugin-helper"; +import type { TagNodeTree, TagNode, BBobPlugins, BBobCoreOptions } from '@bbob/types'; import type { CreateElement, VNodeChildrenArrayContents } from 'vue'; import type { StyleValue } from 'vue/types/jsx'; const toAST = (source: string, plugins: BBobPlugins = [], options: BBobCoreOptions = {}) => core(plugins) - .process(source, { - ...options, - render: (input) => html.render(input, { stripTags: true }), - }).tree; + .process(source, { + ...options, + render: (input) => html.render(input, { stripTags: true }), + }).tree; -const isContentEmpty = (content: TagNodeTree) => (!content || Array.isArray(content) && content?.length === 0); +const isContentEmpty = (content?: TagNodeTree) => (!content || Array.isArray(content) && content?.length === 0); function tagToVueNode(createElement: CreateElement, node: TagNode, index: number) { const { class: className, style, ...domProps } = node.attrs || {}; return createElement( - node.tag, - { - key: index, - class: className, - style: style as StyleValue, - domProps, - }, - isContentEmpty(node.content) ? null : renderToVueNodes(createElement, node.content), + node.tag, + { + key: index, + class: className, + style: style as StyleValue, + domProps, + }, + isContentEmpty(node.content) ? null : renderToVueNodes(createElement, node.content), ); } -function renderToVueNodes(createElement: CreateElement, nodes: TagNodeTree) { +function renderToVueNodes(createElement: CreateElement, nodes?: TagNodeTree) { if (Array.isArray(nodes)) { return nodes.reduce((arr, node, index) => { if (isTagNode(node)) { @@ -38,7 +38,7 @@ function renderToVueNodes(createElement: CreateElement, nodes: TagNodeTree) { } else if (isStringNode(node)) { arr.push(String(node)); } - + return arr; }, [] as VNodeChildrenArrayContents); } diff --git a/packages/bbob-vue3/package.json b/packages/bbob-vue3/package.json index 6297e86a..bb7f1f82 100644 --- a/packages/bbob-vue3/package.json +++ b/packages/bbob-vue3/package.json @@ -11,7 +11,8 @@ "dependencies": { "@bbob/core": "*", "@bbob/html": "*", - "@bbob/plugin-helper": "*" + "@bbob/plugin-helper": "*", + "@bbob/types": "*" }, "peerDependencies": { "vue": "3.x" diff --git a/packages/bbob-vue3/src/Component.ts b/packages/bbob-vue3/src/Component.ts index bbff78b4..e6b7e126 100644 --- a/packages/bbob-vue3/src/Component.ts +++ b/packages/bbob-vue3/src/Component.ts @@ -1,7 +1,7 @@ import { defineComponent, h, VNode } from "vue"; import { render } from "./render"; -import type { BBobPlugins, BBobCoreOptions } from "@bbob/core"; +import type { BBobPlugins, BBobCoreOptions } from "@bbob/types"; type VueComponentProps = { container: string; diff --git a/packages/bbob-vue3/src/render.ts b/packages/bbob-vue3/src/render.ts index 90517a80..4f5bf6c9 100644 --- a/packages/bbob-vue3/src/render.ts +++ b/packages/bbob-vue3/src/render.ts @@ -1,11 +1,12 @@ /* eslint-disable no-use-before-define,import/prefer-default-export */ -import core, { BBobCoreOptions, BBobPlugins } from "@bbob/core"; +import core from "@bbob/core"; import * as html from "@bbob/html"; import { h, VNodeArrayChildren } from "vue"; +import type { BBobCoreOptions, BBobPlugins, TagNodeTree } from "@bbob/types"; + import { TagNode, - TagNodeTree, isStringNode, isTagNode, } from "@bbob/plugin-helper"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 558528d2..311e7b5a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,6 +219,9 @@ importers: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types packages/bbob-html: dependencies: @@ -228,23 +231,33 @@ importers: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types packages/bbob-parser: dependencies: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types - packages/bbob-plugin-helper: {} + packages/bbob-plugin-helper: + dependencies: + '@bbob/types': + specifier: '*' + version: link:../bbob-types packages/bbob-preset: dependencies: - '@bbob/core': - specifier: '*' - version: link:../bbob-core '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types packages/bbob-preset-html5: dependencies: @@ -254,6 +267,9 @@ importers: '@bbob/preset': specifier: '*' version: link:../bbob-preset + '@bbob/types': + specifier: '*' + version: link:../bbob-types devDependencies: '@bbob/core': specifier: '*' @@ -264,26 +280,21 @@ importers: packages/bbob-preset-react: dependencies: - '@bbob/preset': - specifier: '*' - version: link:../bbob-preset '@bbob/preset-html5': specifier: '*' version: link:../bbob-preset-html5 - devDependencies: - '@bbob/core': + '@bbob/types': specifier: '*' - version: link:../bbob-core + version: link:../bbob-types packages/bbob-preset-vue: dependencies: '@bbob/preset-html5': specifier: '*' version: link:../bbob-preset-html5 - devDependencies: - '@bbob/core': + '@bbob/types': specifier: '*' - version: link:../bbob-core + version: link:../bbob-types packages/bbob-react: dependencies: @@ -296,6 +307,9 @@ importers: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types devDependencies: '@bbob/preset-react': specifier: ^3.0.2 @@ -316,6 +330,8 @@ importers: specifier: 18.x version: 18.2.0(react@18.2.0) + packages/bbob-types: {} + packages/bbob-vue2: dependencies: '@bbob/core': @@ -327,6 +343,9 @@ importers: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types devDependencies: '@bbob/preset-vue': specifier: '*' @@ -352,6 +371,9 @@ importers: '@bbob/plugin-helper': specifier: '*' version: link:../bbob-plugin-helper + '@bbob/types': + specifier: '*' + version: link:../bbob-types devDependencies: '@bbob/preset-vue': specifier: '*' diff --git a/tsconfig.json b/tsconfig.json index d98f215f..caef933e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "dom.iterable", "esnext" ], + "baseUrl": ".", "checkJs": false, "skipLibCheck": true, "strict": true,