@vuux/editor
Version:
Vue Nuxt 富文本编辑器
2 lines (1 loc) • 4.89 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./defaults.cjs"),h=require("./Lexer.cjs"),u=require("./Parser.cjs"),p=require("./Hooks.cjs"),d=require("./Renderer.cjs"),T=require("./Tokenizer.cjs"),x=require("./TextRenderer.cjs"),y=require("./helpers.cjs");class v{defaults=w._getDefaults();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=u._Parser;Renderer=d._Renderer;TextRenderer=x._TextRenderer;Lexer=h._Lexer;Tokenizer=T._Tokenizer;Hooks=p._Hooks;constructor(...l){this.use(...l)}walkTokens(l,r){let o=[];for(const n of l)switch(o=o.concat(r.call(this,n)),n.type){case"table":{const e=n;for(const s of e.header)o=o.concat(this.walkTokens(s.tokens,r));for(const s of e.rows)for(const t of s)o=o.concat(this.walkTokens(t.tokens,r));break}case"list":{const e=n;o=o.concat(this.walkTokens(e.items,r));break}default:{const e=n;if(this.defaults.extensions?.childTokens?.[e.type])for(const s of this.defaults.extensions.childTokens[e.type]){const t=e[s].flat(1/0);o=o.concat(this.walkTokens(t,r))}else e.tokens&&(o=o.concat(this.walkTokens(e.tokens,r)))}}return o}use(...l){const r=this.defaults.extensions||{renderers:{},childTokens:{}};for(const o of l){const n={...o};if(n.async=this.defaults.async||n.async||!1,o.extensions){for(const e of o.extensions){if(e.name||console.error("需要扩展名"),"renderer"in e){const s=r.renderers[e.name];s?r.renderers[e.name]=function(...t){let i=e.renderer.apply(this,t);return i===!1&&(i=s.apply(this,t)),i}:r.renderers[e.name]=e.renderer}if("tokenizer"in e){(!e.level||e.level!=="block"&&e.level!=="inline")&&console.error("扩展级别必须为block或inline");const s=r[e.level];s?s.unshift(e.tokenizer):r[e.level]=[e.tokenizer],e.start&&(e.level==="block"?r.startBlock?r.startBlock.push(e.start):r.startBlock=[e.start]:e.level==="inline"&&(r.startInline?r.startInline.push(e.start):r.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(r.childTokens[e.name]=e.childTokens)}n.extensions=r}if(o.renderer){const e=this.defaults.renderer||new d._Renderer(this.defaults);for(const s in o.renderer){if(s in e||console.error(`渲染器'${s}'不存在`),["options","parser"].includes(s))continue;const t=s,i=o.renderer[t],f=e[t];e[t]=(...k)=>{let a=i.apply(e,k);return a===!1&&(a=f.apply(e,k)),a||""}}n.renderer=e}if(o.tokenizer){const e=this.defaults.tokenizer||new T._Tokenizer(this.defaults);for(const s in o.tokenizer){if(s in e||console.error(`标记器'${s}'不存在`),["options","rules","lexer"].includes(s))continue;const t=s,i=o.tokenizer[t],f=e[t];e[t]=(...k)=>{let a=i.apply(e,k);return a===!1&&(a=f.apply(e,k)),a}}n.tokenizer=e}if(o.hooks){const e=this.defaults.hooks||new p._Hooks;for(const s in o.hooks){if(s in e||console.error(`钩子'${s}'不存在`),["options","block"].includes(s))continue;const t=s,i=o.hooks[t],f=e[t];p._Hooks.passThroughHooks.has(s)?e[t]=k=>{if(this.defaults.async&&p._Hooks.passThroughHooksRespectAsync.has(s))return Promise.resolve(i.call(e,k)).then(c=>f.call(e,c));const a=i.call(e,k);return f.call(e,a)}:e[t]=(...k)=>{let a=i.apply(e,k);return a===!1&&(a=f.apply(e,k)),a}}n.hooks=e}if(o.walkTokens){const e=this.defaults.walkTokens,s=o.walkTokens;n.walkTokens=function(t){let i=[];return i.push(s.call(this,t)),e&&(i=i.concat(e.call(this,t))),i}}this.defaults={...this.defaults,...n}}return this}setOptions(l){return this.defaults={...this.defaults,...l},this}lexer(l,r){return h._Lexer.lex(l,r??this.defaults)}parser(l,r){return u._Parser.parse(l,r??this.defaults)}parseMarkdown(l){return(o,n)=>{const e={...n},s={...this.defaults,...e},t=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&e.async===!1)return t(new Error("marked():异步选项被扩展设置为true"));if(typeof o>"u"||o===null)return t(new Error("marked():输入参数未定义或为空"));if(typeof o!="string")return t(new Error("marked():输入参数为类型"+Object.prototype.toString.call(o)+"字符串"));s.hooks&&(s.hooks.options=s,s.hooks.block=l);const i=s.hooks?s.hooks.provideLexer():l?h._Lexer.lex:h._Lexer.lexInline,f=s.hooks?s.hooks.provideParser():l?u._Parser.parse:u._Parser.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(o):o).then(c=>i(c,s)).then(c=>s.hooks?s.hooks.processAllTokens(c):c).then(c=>s.walkTokens?Promise.all(this.walkTokens(c,s.walkTokens)).then(()=>c):c).then(c=>f(c,s)).then(c=>s.hooks?s.hooks.postprocess(c):c).catch(t);s.hooks&&(o=s.hooks.preprocess(o));let k=i(o,s);s.hooks&&(k=s.hooks.processAllTokens(k)),s.walkTokens&&this.walkTokens(k,s.walkTokens);let a=f(k,s);return s.hooks&&(a=s.hooks.postprocess(a)),a}}onError(l,r){return o=>{if(o.message+="请将此报告至https://www.usuuu.com",l){const n="<p>发生错误:</p><pre>"+y.escape(o.message+"",!0)+"</pre>";return r?Promise.resolve(n):n}if(r)return Promise.reject(o);throw o}}}exports.Marked=v;