11import { readFileSync } from 'node:fs'
22import { resolve } from 'node:path'
33import { fileURLToPath } from 'node:url'
4+ import { Buffer } from 'node:buffer'
45import { viteBundler } from '@vuepress/bundler-vite'
56import { docsearchPlugin } from '@vuepress/plugin-docsearch'
67import { redirectPlugin } from '@vuepress/plugin-redirect'
78import { shikiPlugin } from '@vuepress/plugin-shiki'
89import { registerComponentsPlugin } from '@vuepress/plugin-register-components'
910import { defaultTheme } from '@vuepress/theme-default'
1011import { defineUserConfig } from 'vuepress'
12+
13+ import type { Plugin } from '@vuepress/core'
14+ import type { Markdown } from '@vuepress/markdown'
15+
1116import navbar from './nav'
1217import sidebar from './sidebar'
1318
1419const __dirname = fileURLToPath ( new URL ( '.' , import . meta. url ) )
1520const redirectsFile = new URL ( './redirects' , import . meta. url )
21+
1622export default defineUserConfig ( {
1723 base : '/' ,
1824 dest : './dist' ,
@@ -66,15 +72,13 @@ export default defineUserConfig({
6672 plugins : [
6773 shikiPlugin ( {
6874 langs : [ 'ts' , 'js' , 'json' , 'md' , 'bash' ] ,
69- langAlias : {
70- editor : 'ts' ,
71- } ,
7275 themes : {
7376 light : 'light-plus' ,
7477 dark : 'ayu-mirage' ,
7578 } ,
7679 lineNumbers : false ,
7780 } ) ,
81+ assemblyScriptEditorPlugin ( ) ,
7882 redirectPlugin ( {
7983 config : loadRedirects ( ) ,
8084 } ) ,
@@ -90,6 +94,29 @@ export default defineUserConfig({
9094 ]
9195} )
9296
97+ function assemblyScriptEditorPlugin ( ) : Plugin {
98+ return {
99+ name : 'as-editor' ,
100+ extendsMarkdown ( md : Markdown ) {
101+ const defaultFence = md . renderer . rules . fence
102+
103+ md . renderer . rules . fence = ( tokens , idx , options , env , self ) => {
104+ const token = tokens [ idx ]
105+ const [ lang = '' ] = token . info . trim ( ) . split ( / \s + / u)
106+
107+ if ( lang !== 'editor' ) {
108+ return defaultFence
109+ ? defaultFence ( tokens , idx , options , env , self )
110+ : self . renderToken ( tokens , idx , options )
111+ }
112+
113+ const encoded = Buffer . from ( token . content , 'utf8' ) . toString ( 'base64' )
114+ return `<EditorFrame code="${ encoded } " />`
115+ }
116+ } ,
117+ }
118+ }
119+
93120function loadRedirects ( ) : Record < string , string > {
94121 return Object . fromEntries (
95122 readFileSync ( redirectsFile , 'utf8' )
0 commit comments