From 9e4442fdf47b21650ffa493b8869605bfd79a2b2 Mon Sep 17 00:00:00 2001 From: "yanlong.wang" Date: Tue, 10 Sep 2024 15:37:44 +0800 Subject: [PATCH] wip --- backend/functions/src/services/html-to-md.ts | 126 +++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 backend/functions/src/services/html-to-md.ts diff --git a/backend/functions/src/services/html-to-md.ts b/backend/functions/src/services/html-to-md.ts new file mode 100644 index 0000000..93f75fc --- /dev/null +++ b/backend/functions/src/services/html-to-md.ts @@ -0,0 +1,126 @@ +import { AsyncService, AutoCastable, Prop } from 'civkit'; +import { Logger } from '../shared/services/logger'; + +const pMdAstToMarkdown = import('mdast-util-to-markdown'); +const pUnistVisitParents = import('unist-util-visit-parents'); + + +export class HTMLtoMarkdown extends AsyncService { + + mdAstToMarkdown!: Awaited; + unistVisitParents!: Awaited; + + constructor( + protected logger: Logger, + ) { + super(...arguments); + } + + + override async init() { + await this.dependencyReady(); + + this.mdAstToMarkdown = await pMdAstToMarkdown; + this.unistVisitParents = await pUnistVisitParents; + + this.emit('ready'); + } + +} + + +class MarkdownASTNode extends AutoCastable { + @Prop({ + required: true + }) + type!: string; +} + +class MDCode extends MarkdownASTNode { + @Prop({ + default: 'code' + }) + override type!: 'code'; + + @Prop() + lang?: string; + + @Prop({ + required: true, + default: '' + }) + value!: string; +} + +class MDHTML extends MarkdownASTNode { + @Prop({ + default: 'html' + }) + override type!: 'html'; + + @Prop({ + required: true, + default: '' + }) + value!: string; +} + + +class MarkdownASTParentNode extends MarkdownASTNode { + + @Prop({ + default: [], + arrayOf: MarkdownASTNode + }) + children!: MarkdownASTNode[]; +} + +class MDHeading extends MarkdownASTParentNode { + @Prop({ + default: 'heading' + }) + override type!: 'heading'; + + @Prop({ + required: true, + type: Number, + validate(v: number) { + return v >=1 && v<=6 + } + }) + level!: 1|2|3|4|5|6; +} +class MDList extends MarkdownASTParentNode { + @Prop({ + default: 'list' + }) + override type!: 'list'; + + @Prop({ + default: false, + }) + ordered!: boolean; +} + + +class MDLiteral extends MarkdownASTNode { + @Prop({ + default: 'literal' + }) + override type!: 'literal'; + + @Prop({ + required: true, + default: '' + }) + value!: string; +} + + + + +export class HTMLToMarkdownJob { + + + +}