@musnows/scriverse 0.3.10 → 0.4.0
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.
- package/README.en.md +2 -0
- package/README.md +2 -0
- package/dist/ai.js +292 -19
- package/dist/ai.js.map +1 -1
- package/dist/app.js +50 -6
- package/dist/app.js.map +1 -1
- package/dist/database.js +47 -0
- package/dist/database.js.map +1 -1
- package/dist/public/app.js +994 -194
- package/dist/public/character-markdown.js +12 -0
- package/dist/public/index.html +69 -26
- package/dist/public/model-config.d.ts +1 -0
- package/dist/public/model-config.js +12 -3
- package/dist/public/module-layout.d.ts +17 -0
- package/dist/public/module-layout.js +28 -0
- package/dist/public/page-route.js +1 -1
- package/dist/public/styles.css +191 -59
- package/dist/public/vendor/vditor/dist/css/content-theme/ant-design.css +210 -0
- package/dist/public/vendor/vditor/dist/css/content-theme/dark.css +123 -0
- package/dist/public/vendor/vditor/dist/css/content-theme/light.css +101 -0
- package/dist/public/vendor/vditor/dist/css/content-theme/wechat.css +94 -0
- package/dist/public/vendor/vditor/dist/images/emoji/b3log.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/chainbook.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/doge.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/hacpai.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/huaji.gif +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/latke.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/liandi.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/lute.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/octocat.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/pipe.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/siyuan.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/solo.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/sym.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/trollface.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/vditor.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/wide.png +0 -0
- package/dist/public/vendor/vditor/dist/images/emoji/wulian.png +0 -0
- package/dist/public/vendor/vditor/dist/images/img-loading.svg +1 -0
- package/dist/public/vendor/vditor/dist/images/logo.png +0 -0
- package/dist/public/vendor/vditor/dist/index.css +1823 -0
- package/dist/public/vendor/vditor/dist/index.d.ts +82 -0
- package/dist/public/vendor/vditor/dist/index.js +15995 -0
- package/dist/public/vendor/vditor/dist/index.min.js +1 -0
- package/dist/public/vendor/vditor/dist/js/abcjs/abcjs_basic.min.js +3 -0
- package/dist/public/vendor/vditor/dist/js/echarts/echarts.min.js +45 -0
- package/dist/public/vendor/vditor/dist/js/flowchart.js/flowchart.min.js +8 -0
- package/dist/public/vendor/vditor/dist/js/graphviz/full.render.js +90 -0
- package/dist/public/vendor/vditor/dist/js/graphviz/viz.js +333 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/LICENSE +29 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/highlight.min.js +3835 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/a11y-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/a11y-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/agate.min.css +20 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/an-old-hope.min.css +9 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/androidstudio.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ant-design.min.css +84 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/arduino-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/arta.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ascetic.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-dark-reasonable.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/3024.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/apathy.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/apprentice.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ashes.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-cave-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-cave.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-dune-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-dune.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-estuary-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-estuary.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-forest-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-forest.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-heath-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-heath.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-lakeside-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-lakeside.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-plateau-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-plateau.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-savanna-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-savanna.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-seaside-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-seaside.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-sulphurpool-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-sulphurpool.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atlas.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/bespin.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-bathory.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-burzum.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-dark-funeral.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-gorgoroth.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-immortal.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-khold.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-marduk.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-mayhem.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-nile.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-venom.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brewer.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/bright.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brogrammer.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brush-trees-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brush-trees.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/chalk.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/circus.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/classic-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/classic-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/codeschool.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/colors.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/cupcake.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/cupertino.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/danqing.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darcula.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dark-violet.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darkmoss.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darktooth.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/decaf.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/default-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/default-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dirtysea.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dracula.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/edge-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/edge-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eighties.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/embers.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-gray-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-gray-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/espresso.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eva-dim.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eva.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/flat.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/framer.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/fruit-soda.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gigavolt.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/github.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/google-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/google-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/grayscale-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/grayscale-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/green-screen.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-hard.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-medium.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-pale.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-soft.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-hard.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-medium.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-soft.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/hardcore.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/harmonic16-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/harmonic16-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/heetch-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/heetch-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/helios.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/hopscotch.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/horizon-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/horizon-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/humanoid-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/humanoid-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ia-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ia-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/icy-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ir-black.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/isotope.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/kimber.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/london-tube.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/macintosh.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/marrakesh.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/materia.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-darker.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-lighter.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-palenight.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-vivid.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mellow-purple.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mexico-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mocha.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/monokai.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nebula.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nord.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nova.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ocean.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/oceanicnext.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/one-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/onedark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/outrun-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/papercolor-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/papercolor-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/paraiso.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pasque.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/phd.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pico.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pop.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/porple.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/qualia.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/railscasts.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/rebecca.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine-dawn.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine-moon.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/sagelight.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/sandcastle.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/seti-ui.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/shapeshifter.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/silk-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/silk-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/snazzy.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solar-flare-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solar-flare.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solarized-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solarized-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/spacemacs.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summercamp.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summerfruit-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summerfruit-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/synth-midnight-terminal-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tango.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tender.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tomorrow-night.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tomorrow.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/twilight.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/unikitty-dark.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/unikitty-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/vulcan.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-10-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-10.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-95-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-95.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-high-contrast-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-high-contrast.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-nt-light.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-nt.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/woodland.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/xcode-dusk.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/zenburn.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/brown-paper.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/brown-papersq.png +0 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/codepen-embed.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/color-brewer.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/default.min.css +9 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/devibeans.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/docco.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/far.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/felipec.min.css +7 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/foundation.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github-dark-dimmed.min.css +9 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github-dark.min.css +10 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github.min.css +10 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gml.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/googlecode.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gradient-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gradient-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/grayscale.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/hybrid.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/idea.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/intellij-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ir-black.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/isbl-editor-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/isbl-editor-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/kimbie-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/kimbie-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/lightfair.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/lioshi.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/magula.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/mono-blue.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/monokai-sublime.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/monokai.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/night-owl.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nnfx-dark.min.css +10 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nnfx-light.min.css +10 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nord.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/obsidian.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/panda-syntax-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/panda-syntax-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/paraiso-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/paraiso-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/pojoaque.jpg +0 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/pojoaque.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/purebasic.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/qtcreator-dark.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/qtcreator-light.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/rainbow.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/routeros.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/school-book.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/shades-of-purple.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/srcery.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/stackoverflow-dark.min.css +13 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/stackoverflow-light.min.css +13 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/sunburst.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tokyo-night-dark.min.css +8 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tokyo-night-light.min.css +8 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tomorrow-night-blue.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tomorrow-night-bright.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/vs.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/vs2015.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/xcode.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/styles/xt256.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/highlight.js/third-languages.js +135 -0
- package/dist/public/vendor/vditor/dist/js/i18n/de_DE.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/en_US.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/es_ES.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/fr_FR.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/ja_JP.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/ko_KR.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/pt_BR.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/ru_RU.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/sv_SE.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/vi_VN.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/zh_CN.js +86 -0
- package/dist/public/vendor/vditor/dist/js/i18n/zh_TW.js +86 -0
- package/dist/public/vendor/vditor/dist/js/icons/ant.js +174 -0
- package/dist/public/vendor/vditor/dist/js/icons/material.js +195 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/public/vendor/vditor/dist/js/katex/katex.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/katex/katex.min.js +1 -0
- package/dist/public/vendor/vditor/dist/js/katex/mhchem.min.js +1 -0
- package/dist/public/vendor/vditor/dist/js/lute/lute.min.js +72 -0
- package/dist/public/vendor/vditor/dist/js/markmap/katex.min.css +1 -0
- package/dist/public/vendor/vditor/dist/js/markmap/markmap.min.js +8251 -0
- package/dist/public/vendor/vditor/dist/js/markmap/prism.css +140 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/LICENSE +202 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/a11y/assistive-mml.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/a11y/complexity.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/a11y/explorer.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/a11y/semantic-enrich.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/asciimath.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/mml/entities.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/mml.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/action.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/all-packages.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/ams.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/amscd.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/autoload.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/bbox.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/boldsymbol.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/braket.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/bussproofs.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/cancel.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/color.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/colorV2.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/configMacros.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/enclose.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/extpfeil.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/html.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/mhchem.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/newcommand.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/noerrors.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/noundefined.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/physics.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/require.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/tagFormat.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/textmacros.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/unicode.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/verb.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex-base.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex-full.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/input/tex.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/de.js +104 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/en.js +110 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/es.js +104 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/fr.js +104 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/mathmaps_ie.js +518 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/nemeth.js +104 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/sre-node.js +11 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/sre/sre_browser.js +1633 -0
- package/dist/public/vendor/vditor/dist/js/mathjax/tex-svg-full.js +1 -0
- package/dist/public/vendor/vditor/dist/js/mermaid/mermaid.min.js +2607 -0
- package/dist/public/vendor/vditor/dist/js/plantuml/plantuml-encoder.min.js +1 -0
- package/dist/public/vendor/vditor/dist/js/smiles-drawer/smiles-drawer.min.js +71 -0
- package/dist/public/vendor/vditor/dist/method.d.ts +51 -0
- package/dist/public/vendor/vditor/dist/method.js +2673 -0
- package/dist/public/vendor/vditor/dist/method.min.js +1 -0
- package/dist/public/vendor/vditor/dist/ts/constants.d.ts +45 -0
- package/dist/public/vendor/vditor/dist/ts/devtools/index.d.ts +7 -0
- package/dist/public/vendor/vditor/dist/ts/export/index.d.ts +4 -0
- package/dist/public/vendor/vditor/dist/ts/hint/index.d.ts +14 -0
- package/dist/public/vendor/vditor/dist/ts/ir/expandMarker.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ir/highlightToolbarIR.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ir/index.d.ts +13 -0
- package/dist/public/vendor/vditor/dist/ts/ir/input.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ir/process.d.ts +8 -0
- package/dist/public/vendor/vditor/dist/ts/ir/processKeydown.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/SMILESRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/abcRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/adapterRender.d.ts +41 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/anchorRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/chartRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/codeRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/flowchartRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/getHTML.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/getMarkdown.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/graphvizRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/highlightRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/lazyLoadImageRender.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/markmapRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/mathRender.d.ts +9 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/mediaRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/mermaidRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/mindmapRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/outlineRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/plantumlRender.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/previewRender.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/setLute.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/markdown/speechRender.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/outline/index.d.ts +7 -0
- package/dist/public/vendor/vditor/dist/ts/preview/image.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/preview/index.d.ts +10 -0
- package/dist/public/vendor/vditor/dist/ts/resize/index.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/sv/combineFootnote.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/sv/index.d.ts +13 -0
- package/dist/public/vendor/vditor/dist/ts/sv/inputEvent.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/sv/process.d.ts +11 -0
- package/dist/public/vendor/vditor/dist/ts/sv/processKeydown.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/tip/index.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Both.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Br.d.ts +4 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/CodeTheme.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/ContentTheme.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Counter.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Custom.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Devtools.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Divider.d.ts +4 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/EditMode.d.ts +8 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Emoji.d.ts +7 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Export.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Fullscreen.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Headings.d.ts +7 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Help.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Indent.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Info.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/InsertAfter.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/InsertBefore.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/MenuItem.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Outdent.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Outline.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Preview.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Record.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Redo.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Undo.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/Upload.d.ts +6 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/index.d.ts +10 -0
- package/dist/public/vendor/vditor/dist/ts/toolbar/setToolbar.d.ts +20 -0
- package/dist/public/vendor/vditor/dist/ts/ui/initUI.d.ts +4 -0
- package/dist/public/vendor/vditor/dist/ts/ui/setCodeTheme.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ui/setContentTheme.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ui/setPreviewMode.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/ui/setTheme.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/undo/index.d.ts +19 -0
- package/dist/public/vendor/vditor/dist/ts/upload/getElement.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/upload/index.d.ts +8 -0
- package/dist/public/vendor/vditor/dist/ts/upload/setHeaders.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/Options.d.ts +8 -0
- package/dist/public/vendor/vditor/dist/ts/util/RecordMedia.d.ts +18 -0
- package/dist/public/vendor/vditor/dist/ts/util/addScript.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/util/addStyle.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/code160to32.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/compatibility.d.ts +7 -0
- package/dist/public/vendor/vditor/dist/ts/util/editorCommonEvent.d.ts +9 -0
- package/dist/public/vendor/vditor/dist/ts/util/fixBrowserBehavior.d.ts +39 -0
- package/dist/public/vendor/vditor/dist/ts/util/function.d.ts +3 -0
- package/dist/public/vendor/vditor/dist/ts/util/getSelectText.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/hasClosest.d.ts +9 -0
- package/dist/public/vendor/vditor/dist/ts/util/hasClosestByHeadings.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/util/highlightToolbar.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/hotKey.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/log.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/merge.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/util/processCode.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/util/selection.d.ts +14 -0
- package/dist/public/vendor/vditor/dist/ts/util/toc.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/afterRenderEvent.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/highlightToolbarWYSIWYG.d.ts +4 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/index.d.ts +22 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/inlineTag.d.ts +10 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/input.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/processKeydown.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/renderDomByMd.d.ts +5 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/setHeading.d.ts +2 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/showCode.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/ts/wysiwyg/toolbarEvent.d.ts +1 -0
- package/dist/public/vendor/vditor/dist/types/index.d.ts +921 -0
- package/dist/public/work-permissions.d.ts +5 -2
- package/dist/public/work-permissions.js +40 -13
- package/dist/security.js +11 -0
- package/dist/security.js.map +1 -1
- package/dist/server-runtime.js +5 -2
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +252 -43
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +40 -8
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/work-permissions.js +30 -6
- package/dist/work-permissions.js.map +1 -1
- package/package.json +2 -1
package/dist/store.js
CHANGED
|
@@ -6,6 +6,72 @@ import { paginated, paginationSql } from "./pagination.js";
|
|
|
6
6
|
import { currentRequestActor } from "./request-context.js";
|
|
7
7
|
import { classifyWorkModulePermissions, emptyWorkModulePermissions, fullWorkModulePermissions, storedWorkModulePermissions } from "./work-permissions.js";
|
|
8
8
|
import { countWords, documentShortSearchTerms, id, json, normalizeDocumentSearchText, normalizeParagraphSpacing, now, splitDocumentParagraphs } from "./utils.js";
|
|
9
|
+
function settingsFromInput(settingsMarkdown, settings, fallback = []) {
|
|
10
|
+
if (settingsMarkdown !== undefined)
|
|
11
|
+
return settingsMarkdown.trim() ? [settingsMarkdown] : [];
|
|
12
|
+
return settings ?? fallback;
|
|
13
|
+
}
|
|
14
|
+
function settingsMarkdownFromList(settings) {
|
|
15
|
+
return Array.isArray(settings) ? settings.map(String).filter(Boolean).join("\n\n") : "";
|
|
16
|
+
}
|
|
17
|
+
function knowledgeSectionTitle(contentMarkdown, index) {
|
|
18
|
+
const heading = contentMarkdown.match(/^\s{0,3}#{1,6}\s+(.+?)\s*#*\s*$/mu)?.[1]?.trim();
|
|
19
|
+
return heading || `设定 ${index + 1}`;
|
|
20
|
+
}
|
|
21
|
+
function normalizeKnowledgeSections(sections) {
|
|
22
|
+
return sections.map((section, index) => {
|
|
23
|
+
const contentMarkdown = section.contentMarkdown ?? "";
|
|
24
|
+
return {
|
|
25
|
+
title: section.title.trim() || knowledgeSectionTitle(contentMarkdown, index),
|
|
26
|
+
contentMarkdown,
|
|
27
|
+
summary: section.summary?.trim() ?? "",
|
|
28
|
+
sortOrder: Number.isFinite(section.sortOrder) ? Math.max(0, Math.trunc(section.sortOrder)) : index
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function knowledgeSectionInput(value, index) {
|
|
33
|
+
if (!isRecord(value))
|
|
34
|
+
return null;
|
|
35
|
+
const contentMarkdown = typeof value.contentMarkdown === "string"
|
|
36
|
+
? value.contentMarkdown
|
|
37
|
+
: typeof value.content === "string" ? value.content : "";
|
|
38
|
+
const title = typeof value.title === "string" ? value.title : "";
|
|
39
|
+
return {
|
|
40
|
+
title: title || knowledgeSectionTitle(contentMarkdown, index),
|
|
41
|
+
contentMarkdown,
|
|
42
|
+
summary: typeof value.summary === "string" ? value.summary : "",
|
|
43
|
+
sortOrder: typeof value.sortOrder === "number" ? value.sortOrder : index
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function knowledgeSectionsFromStored(value, fallback = []) {
|
|
47
|
+
const parsed = typeof value === "string" ? json(value, []) : value;
|
|
48
|
+
if (Array.isArray(parsed)) {
|
|
49
|
+
const sections = parsed.map((item, index) => knowledgeSectionInput(item, index)).filter((item) => item !== null);
|
|
50
|
+
if (sections.length > 0 || fallback.length === 0)
|
|
51
|
+
return normalizeKnowledgeSections(sections);
|
|
52
|
+
}
|
|
53
|
+
return normalizeKnowledgeSections(fallback.map((contentMarkdown, index) => ({
|
|
54
|
+
title: knowledgeSectionTitle(contentMarkdown, index),
|
|
55
|
+
contentMarkdown,
|
|
56
|
+
sortOrder: index
|
|
57
|
+
})));
|
|
58
|
+
}
|
|
59
|
+
function knowledgeSectionsFromInput(sections, settingsMarkdown, settings, fallbackSections = []) {
|
|
60
|
+
if (sections !== undefined)
|
|
61
|
+
return normalizeKnowledgeSections(sections);
|
|
62
|
+
if (settingsMarkdown !== undefined || settings !== undefined) {
|
|
63
|
+
const legacySettings = settingsFromInput(settingsMarkdown, settings);
|
|
64
|
+
return knowledgeSectionsFromStored(legacySettings.map((contentMarkdown, index) => ({
|
|
65
|
+
title: knowledgeSectionTitle(contentMarkdown, index),
|
|
66
|
+
contentMarkdown,
|
|
67
|
+
sortOrder: index
|
|
68
|
+
})));
|
|
69
|
+
}
|
|
70
|
+
return fallbackSections;
|
|
71
|
+
}
|
|
72
|
+
function settingsFromKnowledgeSections(sections) {
|
|
73
|
+
return sections.map((section) => section.contentMarkdown).filter((content) => content.trim());
|
|
74
|
+
}
|
|
9
75
|
export const versionedEntityTypes = [
|
|
10
76
|
"work",
|
|
11
77
|
"volume",
|
|
@@ -18,6 +84,65 @@ export const versionedEntityTypes = [
|
|
|
18
84
|
"chapter-outline",
|
|
19
85
|
"foreshadow"
|
|
20
86
|
];
|
|
87
|
+
function isRecord(value) {
|
|
88
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
89
|
+
}
|
|
90
|
+
function invalidFileSnapshot() {
|
|
91
|
+
throw new AppError(409, "FILE_VERSION_INVALID", "正文历史快照已损坏,未执行恢复");
|
|
92
|
+
}
|
|
93
|
+
function parseRestorableFileSnapshot(value, workId) {
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(value);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
invalidFileSnapshot();
|
|
100
|
+
}
|
|
101
|
+
if (!isRecord(parsed) || parsed.id !== workId || !Array.isArray(parsed.volumes) || parsed.volumes.length > 10_000) {
|
|
102
|
+
return invalidFileSnapshot();
|
|
103
|
+
}
|
|
104
|
+
let chapterCount = 0;
|
|
105
|
+
let contentLength = 0;
|
|
106
|
+
const volumes = parsed.volumes.map((volumeValue) => {
|
|
107
|
+
if (!isRecord(volumeValue) || typeof volumeValue.title !== "string" || typeof volumeValue.kind !== "string"
|
|
108
|
+
|| typeof volumeValue.source !== "string" || typeof volumeValue.sortOrder !== "number"
|
|
109
|
+
|| !Number.isFinite(volumeValue.sortOrder) || !Array.isArray(volumeValue.chapters)) {
|
|
110
|
+
return invalidFileSnapshot();
|
|
111
|
+
}
|
|
112
|
+
const description = volumeValue.description === undefined ? "" : volumeValue.description;
|
|
113
|
+
const keywords = volumeValue.keywords === undefined ? [] : volumeValue.keywords;
|
|
114
|
+
if (typeof description !== "string" || !Array.isArray(keywords) || !keywords.every((keyword) => typeof keyword === "string")) {
|
|
115
|
+
return invalidFileSnapshot();
|
|
116
|
+
}
|
|
117
|
+
const chapters = volumeValue.chapters.map((chapterValue) => {
|
|
118
|
+
if (!isRecord(chapterValue) || typeof chapterValue.title !== "string" || typeof chapterValue.content !== "string"
|
|
119
|
+
|| typeof chapterValue.sortOrder !== "number" || !Number.isFinite(chapterValue.sortOrder)
|
|
120
|
+
|| !["正文", "设定", "作者的话", "其他"].includes(String(chapterValue.chapterType))) {
|
|
121
|
+
return invalidFileSnapshot();
|
|
122
|
+
}
|
|
123
|
+
chapterCount += 1;
|
|
124
|
+
contentLength += chapterValue.content.length;
|
|
125
|
+
if (chapterCount > 100_000 || contentLength > 20_000_000)
|
|
126
|
+
return invalidFileSnapshot();
|
|
127
|
+
return {
|
|
128
|
+
title: chapterValue.title,
|
|
129
|
+
content: chapterValue.content,
|
|
130
|
+
sortOrder: chapterValue.sortOrder,
|
|
131
|
+
chapterType: chapterValue.chapterType
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
135
|
+
title: volumeValue.title,
|
|
136
|
+
kind: volumeValue.kind,
|
|
137
|
+
source: volumeValue.source,
|
|
138
|
+
description,
|
|
139
|
+
keywords: [...keywords],
|
|
140
|
+
sortOrder: volumeValue.sortOrder,
|
|
141
|
+
chapters
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
return { volumes };
|
|
145
|
+
}
|
|
21
146
|
function requiredString(row, key) {
|
|
22
147
|
return String(row[key] ?? "");
|
|
23
148
|
}
|
|
@@ -145,6 +270,7 @@ export class Store {
|
|
|
145
270
|
parentRaceId: entity.parentRaceId,
|
|
146
271
|
description: entity.description,
|
|
147
272
|
settings: entity.settings,
|
|
273
|
+
settingsSections: entity.settingsSections,
|
|
148
274
|
memberIds: entity.memberIds
|
|
149
275
|
};
|
|
150
276
|
if (type === "organization")
|
|
@@ -152,6 +278,7 @@ export class Store {
|
|
|
152
278
|
name: entity.name,
|
|
153
279
|
description: entity.description,
|
|
154
280
|
settings: entity.settings,
|
|
281
|
+
settingsSections: entity.settingsSections,
|
|
155
282
|
memberIds: entity.memberIds
|
|
156
283
|
};
|
|
157
284
|
if (type === "timeline-track")
|
|
@@ -655,7 +782,7 @@ export class Store {
|
|
|
655
782
|
.all(`SELECT version.id, version.work_id, version.file_name, version.file_type, version.word_count, version.paragraph_count,
|
|
656
783
|
version.warnings_json, version.created_at, user.display_name AS actor_display_name, user.username AS actor_username
|
|
657
784
|
FROM file_versions version LEFT JOIN users user ON user.id = version.created_by_user_id
|
|
658
|
-
WHERE version.work_id = ? ORDER BY version.created_at DESC`, workId)
|
|
785
|
+
WHERE version.work_id = ? ORDER BY version.created_at DESC, version.id DESC`, workId)
|
|
659
786
|
.map((row) => ({
|
|
660
787
|
id: requiredString(row, "id"),
|
|
661
788
|
workId: requiredString(row, "work_id"),
|
|
@@ -674,7 +801,7 @@ export class Store {
|
|
|
674
801
|
const rows = this.db.all(`SELECT version.id, version.work_id, version.file_name, version.file_type, version.word_count, version.paragraph_count,
|
|
675
802
|
version.warnings_json, version.created_at, user.display_name AS actor_display_name, user.username AS actor_username
|
|
676
803
|
FROM file_versions version LEFT JOIN users user ON user.id = version.created_by_user_id
|
|
677
|
-
WHERE version.work_id = ? ORDER BY version.created_at DESC${page.sql}`, workId, ...page.params);
|
|
804
|
+
WHERE version.work_id = ? ORDER BY version.created_at DESC, version.id DESC${page.sql}`, workId, ...page.params);
|
|
678
805
|
return paginated(rows.map((row) => ({
|
|
679
806
|
id: requiredString(row, "id"),
|
|
680
807
|
workId: requiredString(row, "work_id"),
|
|
@@ -692,8 +819,7 @@ export class Store {
|
|
|
692
819
|
const version = this.db.get("SELECT * FROM file_versions WHERE id = ? AND work_id = ?", fileVersionId, workId);
|
|
693
820
|
if (!version)
|
|
694
821
|
throw notFound("文件版本");
|
|
695
|
-
const
|
|
696
|
-
const volumes = Array.isArray(snapshot.volumes) ? snapshot.volumes : [];
|
|
822
|
+
const { volumes } = parseRestorableFileSnapshot(requiredString(version, "snapshot_json"), workId);
|
|
697
823
|
return this.db.transaction(() => {
|
|
698
824
|
const current = this.getWork(workId);
|
|
699
825
|
this.assertExpectedVersion("work", workId, expectedVersionNo, "作品", Number(current.versionNo));
|
|
@@ -714,20 +840,16 @@ export class Store {
|
|
|
714
840
|
this.db.run("DELETE FROM volumes WHERE work_id = ?", workId);
|
|
715
841
|
for (const volume of volumes) {
|
|
716
842
|
const volumeId = id("volume");
|
|
717
|
-
const chapters = Array.isArray(volume.chapters) ? volume.chapters : [];
|
|
718
843
|
this.insertVolumeWithId(workId, volumeId, {
|
|
719
|
-
title:
|
|
720
|
-
kind:
|
|
721
|
-
source:
|
|
722
|
-
description:
|
|
723
|
-
keywords:
|
|
724
|
-
sortOrder:
|
|
844
|
+
title: volume.title,
|
|
845
|
+
kind: volume.kind,
|
|
846
|
+
source: volume.source,
|
|
847
|
+
description: volume.description,
|
|
848
|
+
keywords: volume.keywords,
|
|
849
|
+
sortOrder: volume.sortOrder
|
|
725
850
|
}, "restore", fileVersionId, `恢复文件版本 ${fileVersionId}`);
|
|
726
|
-
for (const chapter of chapters) {
|
|
727
|
-
|
|
728
|
-
? String(chapter.chapterType)
|
|
729
|
-
: "正文");
|
|
730
|
-
this.insertChapter(workId, volumeId, String(chapter.title ?? "未命名章节"), String(chapter.content ?? ""), Number(chapter.sortOrder ?? 0), "restore", fileVersionId, chapterType);
|
|
851
|
+
for (const chapter of volume.chapters) {
|
|
852
|
+
this.insertChapter(workId, volumeId, chapter.title, chapter.content, chapter.sortOrder, "restore", fileVersionId, chapter.chapterType);
|
|
731
853
|
}
|
|
732
854
|
}
|
|
733
855
|
this.db.run("UPDATE works SET version_no = version_no + 1, updated_at = ? WHERE id = ?", timestamp, workId);
|
|
@@ -1566,9 +1688,11 @@ export class Store {
|
|
|
1566
1688
|
}
|
|
1567
1689
|
insertSettingWithId(workId, settingId, input, source = "create", sourceRef = null, changeNote = "") {
|
|
1568
1690
|
const timestamp = now();
|
|
1691
|
+
const content = input.content;
|
|
1569
1692
|
this.db.transaction(() => {
|
|
1570
1693
|
this.db.run(`INSERT INTO settings (id, work_id, title, category, content, tags_json, status, locked, evidence_json, scope_json, author_note, created_at, updated_at)
|
|
1571
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, settingId, workId, input.title, input.category,
|
|
1694
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, settingId, workId, input.title, input.category, content, JSON.stringify(input.tags ?? []), input.status ?? "draft", input.locked ? 1 : 0, JSON.stringify(input.evidence ?? []), JSON.stringify(input.scope ?? {}), input.authorNote ?? "", timestamp, timestamp);
|
|
1695
|
+
this.syncMarkdownAttachmentReferences(workId, "setting", settingId, content);
|
|
1572
1696
|
this.recordEntityVersion("setting", settingId, source, sourceRef, changeNote || "建立世界观设定", timestamp);
|
|
1573
1697
|
this.audit(workId, source === "restore" ? "setting.restored" : "setting.created", "setting", settingId, {
|
|
1574
1698
|
locked: input.locked ?? false,
|
|
@@ -1596,10 +1720,12 @@ export class Store {
|
|
|
1596
1720
|
}
|
|
1597
1721
|
updateSetting(settingId, input, source = "manual", sourceRef = null, changeNote = "", expectedVersionNo) {
|
|
1598
1722
|
const current = this.getSetting(settingId);
|
|
1723
|
+
const content = input.content ?? String(current.content);
|
|
1599
1724
|
this.db.transaction(() => {
|
|
1600
1725
|
this.assertExpectedVersion("setting", settingId, expectedVersionNo, "设定");
|
|
1601
1726
|
this.db.run(`UPDATE settings SET title = ?, category = ?, content = ?, tags_json = ?, status = ?, locked = ?,
|
|
1602
|
-
evidence_json = ?, scope_json = ?, author_note = ?, updated_at = ? WHERE id = ?`, input.title ?? String(current.title), input.category ?? String(current.category),
|
|
1727
|
+
evidence_json = ?, scope_json = ?, author_note = ?, updated_at = ? WHERE id = ?`, input.title ?? String(current.title), input.category ?? String(current.category), content, JSON.stringify(input.tags ?? current.tags), input.status ?? String(current.status), (input.locked ?? Boolean(current.locked)) ? 1 : 0, JSON.stringify(input.evidence ?? current.evidence), JSON.stringify(input.scope ?? current.scope), input.authorNote ?? String(current.authorNote), now(), settingId);
|
|
1728
|
+
this.syncMarkdownAttachmentReferences(String(current.workId), "setting", settingId, content);
|
|
1603
1729
|
this.recordEntityVersion("setting", settingId, source, sourceRef, changeNote || "更新世界观设定");
|
|
1604
1730
|
this.audit(String(current.workId), "setting.updated", "setting", settingId, { fields: Object.keys(input), source, sourceRef });
|
|
1605
1731
|
});
|
|
@@ -1610,6 +1736,7 @@ export class Store {
|
|
|
1610
1736
|
this.db.transaction(() => {
|
|
1611
1737
|
this.assertExpectedVersion("setting", settingId, expectedVersionNo, "设定");
|
|
1612
1738
|
this.recordEntityVersion("setting", settingId, "delete", null, "删除世界观设定");
|
|
1739
|
+
this.clearMarkdownAttachmentReferences("setting", settingId);
|
|
1613
1740
|
this.db.run("DELETE FROM settings WHERE id = ?", settingId);
|
|
1614
1741
|
this.audit(String(current.workId), "setting.deleted", "setting", settingId);
|
|
1615
1742
|
});
|
|
@@ -1647,10 +1774,13 @@ export class Store {
|
|
|
1647
1774
|
const memberIds = [...new Set(input.memberIds ?? [])];
|
|
1648
1775
|
this.assertCharactersInWork(workId, memberIds);
|
|
1649
1776
|
const memberSnapshots = this.captureCharacterSnapshots(memberIds);
|
|
1777
|
+
const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings);
|
|
1778
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1650
1779
|
const timestamp = now();
|
|
1651
1780
|
this.db.transaction(() => {
|
|
1652
|
-
this.db.run(`INSERT INTO races (id, work_id, parent_race_id, name, normalized_name, description, settings_json, created_at, updated_at)
|
|
1653
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, raceId, workId, parentRaceId, name, normalizedName, input.description ?? "", JSON.stringify(
|
|
1781
|
+
this.db.run(`INSERT INTO races (id, work_id, parent_race_id, name, normalized_name, description, settings_json, settings_sections_json, created_at, updated_at)
|
|
1782
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, raceId, workId, parentRaceId, name, normalizedName, input.description ?? "", JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, timestamp);
|
|
1783
|
+
this.syncMarkdownAttachmentReferences(workId, "race", raceId, settingsMarkdownFromList(settings));
|
|
1654
1784
|
this.replaceRaceMembers(raceId, name, memberIds);
|
|
1655
1785
|
this.recordMembershipVersions(memberSnapshots, "race", raceId, `设为种族“${name}”`);
|
|
1656
1786
|
this.recordEntityVersion("race", raceId, source, sourceRef, changeNote || "建立种族档案", timestamp);
|
|
@@ -1696,9 +1826,13 @@ export class Store {
|
|
|
1696
1826
|
? [...new Set([...current.memberIds, ...(memberIds ?? [])])]
|
|
1697
1827
|
: [];
|
|
1698
1828
|
const memberSnapshots = this.captureCharacterSnapshots(touchedMemberIds);
|
|
1829
|
+
const currentSections = knowledgeSectionsFromStored(current.settingsSections, current.settings);
|
|
1830
|
+
const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings, currentSections);
|
|
1831
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1699
1832
|
this.db.transaction(() => {
|
|
1700
1833
|
this.assertExpectedVersion("race", raceId, expectedVersionNo, "种族");
|
|
1701
|
-
this.db.run(`UPDATE races SET parent_race_id = ?, name = ?, normalized_name = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?`, parentRaceId, name, normalizedName, input.description ?? String(current.description), JSON.stringify(
|
|
1834
|
+
this.db.run(`UPDATE races SET parent_race_id = ?, name = ?, normalized_name = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?`, parentRaceId, name, normalizedName, input.description ?? String(current.description), JSON.stringify(settings), JSON.stringify(settingsSections), now(), raceId);
|
|
1835
|
+
this.syncMarkdownAttachmentReferences(workId, "race", raceId, settingsMarkdownFromList(settings));
|
|
1702
1836
|
if (nameChanged)
|
|
1703
1837
|
this.db.run("UPDATE characters SET species = ?, updated_at = ? WHERE race_id = ?", name, now(), raceId);
|
|
1704
1838
|
if (memberIds)
|
|
@@ -1720,6 +1854,7 @@ export class Store {
|
|
|
1720
1854
|
this.assertExpectedVersion("race", raceId, expectedVersionNo, "种族");
|
|
1721
1855
|
this.recordEntityVersion("race", raceId, "delete", null, "删除种族档案");
|
|
1722
1856
|
this.db.run("UPDATE characters SET race_id = NULL, species = '', updated_at = ? WHERE race_id = ?", now(), raceId);
|
|
1857
|
+
this.clearMarkdownAttachmentReferences("race", raceId);
|
|
1723
1858
|
this.db.run("DELETE FROM races WHERE id = ?", raceId);
|
|
1724
1859
|
this.recordMembershipVersions(memberSnapshots, "race", raceId, `种族“${String(current.name)}”已删除`);
|
|
1725
1860
|
this.audit(String(current.workId), "race.deleted", "race", raceId);
|
|
@@ -1746,15 +1881,19 @@ export class Store {
|
|
|
1746
1881
|
: target.parentRaceId;
|
|
1747
1882
|
const descriptionParts = [String(target.description).trim(), String(source.description).trim()].filter(Boolean);
|
|
1748
1883
|
const description = [...new Set(descriptionParts)].join("\n\n");
|
|
1749
|
-
const
|
|
1884
|
+
const settingsSections = [...knowledgeSectionsFromStored(target.settingsSections, target.settings), ...knowledgeSectionsFromStored(source.settingsSections, source.settings)]
|
|
1885
|
+
.map((section, index) => ({ ...section, sortOrder: index }));
|
|
1886
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1750
1887
|
this.db.transaction(() => {
|
|
1751
1888
|
this.recordEntityVersion("race", sourceRaceId, "delete", mergeId, `合并至种族“${String(target.name)}”`, timestamp);
|
|
1752
|
-
this.db.run("UPDATE races SET parent_race_id = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?", targetParentRaceId, description, JSON.stringify(settings), timestamp, targetRaceId);
|
|
1889
|
+
this.db.run("UPDATE races SET parent_race_id = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?", targetParentRaceId, description, JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, targetRaceId);
|
|
1890
|
+
this.syncMarkdownAttachmentReferences(workId, "race", targetRaceId, settingsMarkdownFromList(settings));
|
|
1753
1891
|
this.db.run("UPDATE characters SET race_id = ?, species = ?, updated_at = ? WHERE race_id = ?", targetRaceId, String(target.name), timestamp, sourceRaceId);
|
|
1754
1892
|
for (const childRaceId of sourceChildren) {
|
|
1755
1893
|
this.db.run("UPDATE races SET parent_race_id = ?, updated_at = ? WHERE id = ?", targetRaceId, timestamp, childRaceId);
|
|
1756
1894
|
this.recordEntityVersion("race", childRaceId, "merge", mergeId, `因种族“${String(source.name)}”合并而迁移父种族`, timestamp);
|
|
1757
1895
|
}
|
|
1896
|
+
this.clearMarkdownAttachmentReferences("race", sourceRaceId);
|
|
1758
1897
|
this.db.run("DELETE FROM races WHERE id = ?", sourceRaceId);
|
|
1759
1898
|
this.recordMembershipVersions(memberSnapshots, "race", targetRaceId, `合并种族“${String(source.name)}”`);
|
|
1760
1899
|
this.recordEntityVersion("race", targetRaceId, "merge", mergeId, `合并种族“${String(source.name)}”`, timestamp);
|
|
@@ -1772,6 +1911,8 @@ export class Store {
|
|
|
1772
1911
|
mapRace(row) {
|
|
1773
1912
|
const raceId = requiredString(row, "id");
|
|
1774
1913
|
const lineage = this.raceLineage(raceId);
|
|
1914
|
+
const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
|
|
1915
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1775
1916
|
const members = this.db.all("SELECT id, name FROM characters WHERE race_id = ? ORDER BY name", requiredString(row, "id")).map((member) => ({
|
|
1776
1917
|
characterId: requiredString(member, "id"),
|
|
1777
1918
|
name: requiredString(member, "name")
|
|
@@ -1782,10 +1923,15 @@ export class Store {
|
|
|
1782
1923
|
parentRaceId: optionalString(row, "parent_race_id"),
|
|
1783
1924
|
name: requiredString(row, "name"),
|
|
1784
1925
|
description: requiredString(row, "description"),
|
|
1785
|
-
settings
|
|
1926
|
+
settings,
|
|
1927
|
+
settingsMarkdown: settingsMarkdownFromList(settings),
|
|
1928
|
+
settingsSections,
|
|
1786
1929
|
lineage: lineage.map((item) => ({ id: item.id, name: item.name })),
|
|
1787
|
-
effectiveSettings: lineage.flatMap((item, index) => item.
|
|
1788
|
-
|
|
1930
|
+
effectiveSettings: lineage.flatMap((item, index) => item.settingsSections.map((section) => ({
|
|
1931
|
+
title: section.title,
|
|
1932
|
+
summary: section.summary,
|
|
1933
|
+
sortOrder: section.sortOrder,
|
|
1934
|
+
value: section.contentMarkdown,
|
|
1789
1935
|
sourceRaceId: item.id,
|
|
1790
1936
|
sourceRaceName: item.name,
|
|
1791
1937
|
inherited: index < lineage.length - 1
|
|
@@ -1835,13 +1981,15 @@ export class Store {
|
|
|
1835
1981
|
if (seen.has(currentId))
|
|
1836
1982
|
throw new AppError(500, "RACE_HIERARCHY_INVALID", "种族层级存在循环");
|
|
1837
1983
|
seen.add(currentId);
|
|
1838
|
-
const row = this.db.get("SELECT id, name, settings_json, parent_race_id FROM races WHERE id = ?", currentId);
|
|
1984
|
+
const row = this.db.get("SELECT id, name, settings_json, settings_sections_json, parent_race_id FROM races WHERE id = ?", currentId);
|
|
1839
1985
|
if (!row)
|
|
1840
1986
|
throw new AppError(500, "RACE_HIERARCHY_INVALID", "种族层级引用了不存在的父种族");
|
|
1987
|
+
const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
|
|
1841
1988
|
lineage.push({
|
|
1842
1989
|
id: requiredString(row, "id"),
|
|
1843
1990
|
name: requiredString(row, "name"),
|
|
1844
|
-
settings:
|
|
1991
|
+
settings: settingsFromKnowledgeSections(settingsSections),
|
|
1992
|
+
settingsSections
|
|
1845
1993
|
});
|
|
1846
1994
|
currentId = optionalString(row, "parent_race_id");
|
|
1847
1995
|
}
|
|
@@ -1867,10 +2015,13 @@ export class Store {
|
|
|
1867
2015
|
const memberIds = [...new Set(input.memberIds ?? [])];
|
|
1868
2016
|
this.assertCharactersInWork(workId, memberIds);
|
|
1869
2017
|
const memberSnapshots = this.captureCharacterSnapshots(memberIds);
|
|
2018
|
+
const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings);
|
|
2019
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1870
2020
|
const timestamp = now();
|
|
1871
2021
|
this.db.transaction(() => {
|
|
1872
|
-
this.db.run(`INSERT INTO organizations (id, work_id, name, normalized_name, description, settings_json, created_at, updated_at)
|
|
1873
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, organizationId, workId, name, normalizedName, input.description ?? "", JSON.stringify(
|
|
2022
|
+
this.db.run(`INSERT INTO organizations (id, work_id, name, normalized_name, description, settings_json, settings_sections_json, created_at, updated_at)
|
|
2023
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, organizationId, workId, name, normalizedName, input.description ?? "", JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, timestamp);
|
|
2024
|
+
this.syncMarkdownAttachmentReferences(workId, "organization", organizationId, settingsMarkdownFromList(settings));
|
|
1874
2025
|
this.replaceOrganizationMembers(organizationId, memberIds);
|
|
1875
2026
|
this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `加入组织“${name}”`);
|
|
1876
2027
|
this.recordEntityVersion("organization", organizationId, source, sourceRef, changeNote || "建立组织档案", timestamp);
|
|
@@ -1909,9 +2060,13 @@ export class Store {
|
|
|
1909
2060
|
this.assertCharactersInWork(workId, memberIds);
|
|
1910
2061
|
const touchedMemberIds = memberIds ? [...new Set([...current.memberIds, ...memberIds])] : [];
|
|
1911
2062
|
const memberSnapshots = this.captureCharacterSnapshots(touchedMemberIds);
|
|
2063
|
+
const currentSections = knowledgeSectionsFromStored(current.settingsSections, current.settings);
|
|
2064
|
+
const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings, currentSections);
|
|
2065
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1912
2066
|
this.db.transaction(() => {
|
|
1913
2067
|
this.assertExpectedVersion("organization", organizationId, expectedVersionNo, "组织");
|
|
1914
|
-
this.db.run(`UPDATE organizations SET name = ?, normalized_name = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?`, name, normalizedName, input.description ?? String(current.description), JSON.stringify(
|
|
2068
|
+
this.db.run(`UPDATE organizations SET name = ?, normalized_name = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?`, name, normalizedName, input.description ?? String(current.description), JSON.stringify(settings), JSON.stringify(settingsSections), now(), organizationId);
|
|
2069
|
+
this.syncMarkdownAttachmentReferences(workId, "organization", organizationId, settingsMarkdownFromList(settings));
|
|
1915
2070
|
if (memberIds) {
|
|
1916
2071
|
this.replaceOrganizationMembers(organizationId, memberIds);
|
|
1917
2072
|
this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `组织“${name}”成员关系变更`);
|
|
@@ -1927,6 +2082,7 @@ export class Store {
|
|
|
1927
2082
|
this.db.transaction(() => {
|
|
1928
2083
|
this.assertExpectedVersion("organization", organizationId, expectedVersionNo, "组织");
|
|
1929
2084
|
this.recordEntityVersion("organization", organizationId, "delete", null, "删除组织档案");
|
|
2085
|
+
this.clearMarkdownAttachmentReferences("organization", organizationId);
|
|
1930
2086
|
this.db.run("DELETE FROM organizations WHERE id = ?", organizationId);
|
|
1931
2087
|
this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `组织“${String(current.name)}”已删除`);
|
|
1932
2088
|
this.audit(String(current.workId), "organization.deleted", "organization", organizationId);
|
|
@@ -1948,15 +2104,19 @@ export class Store {
|
|
|
1948
2104
|
const memberSnapshots = this.captureCharacterSnapshots(memberIds);
|
|
1949
2105
|
const descriptionParts = [String(target.description).trim(), String(source.description).trim()].filter(Boolean);
|
|
1950
2106
|
const description = [...new Set(descriptionParts)].join("\n\n");
|
|
1951
|
-
const
|
|
2107
|
+
const settingsSections = [...knowledgeSectionsFromStored(target.settingsSections, target.settings), ...knowledgeSectionsFromStored(source.settingsSections, source.settings)]
|
|
2108
|
+
.map((section, index) => ({ ...section, sortOrder: index }));
|
|
2109
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1952
2110
|
const sourceMemberships = this.db.all("SELECT character_id, role, note, created_at FROM character_organization_memberships WHERE organization_id = ?", sourceOrganizationId);
|
|
1953
2111
|
this.db.transaction(() => {
|
|
1954
2112
|
this.recordEntityVersion("organization", sourceOrganizationId, "delete", mergeId, `合并至组织“${String(target.name)}”`, timestamp);
|
|
1955
|
-
this.db.run("UPDATE organizations SET description = ?, settings_json = ?, updated_at = ? WHERE id = ?", description, JSON.stringify(settings), timestamp, targetOrganizationId);
|
|
2113
|
+
this.db.run("UPDATE organizations SET description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?", description, JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, targetOrganizationId);
|
|
2114
|
+
this.syncMarkdownAttachmentReferences(workId, "organization", targetOrganizationId, settingsMarkdownFromList(settings));
|
|
1956
2115
|
for (const membership of sourceMemberships) {
|
|
1957
2116
|
this.db.run(`INSERT INTO character_organization_memberships (character_id, organization_id, role, note, created_at, updated_at)
|
|
1958
2117
|
VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(character_id, organization_id) DO NOTHING`, requiredString(membership, "character_id"), targetOrganizationId, requiredString(membership, "role"), requiredString(membership, "note"), requiredString(membership, "created_at"), timestamp);
|
|
1959
2118
|
}
|
|
2119
|
+
this.clearMarkdownAttachmentReferences("organization", sourceOrganizationId);
|
|
1960
2120
|
this.db.run("DELETE FROM organizations WHERE id = ?", sourceOrganizationId);
|
|
1961
2121
|
this.recordMembershipVersions(memberSnapshots, "organization", targetOrganizationId, `合并组织“${String(source.name)}”`);
|
|
1962
2122
|
this.recordEntityVersion("organization", targetOrganizationId, "merge", mergeId, `合并组织“${String(source.name)}”`, timestamp);
|
|
@@ -1965,6 +2125,8 @@ export class Store {
|
|
|
1965
2125
|
return { mergeId, target: this.getOrganization(targetOrganizationId), source };
|
|
1966
2126
|
}
|
|
1967
2127
|
mapOrganization(row) {
|
|
2128
|
+
const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
|
|
2129
|
+
const settings = settingsFromKnowledgeSections(settingsSections);
|
|
1968
2130
|
const members = this.db.all(`SELECT c.id, c.name, m.role, m.note
|
|
1969
2131
|
FROM character_organization_memberships m
|
|
1970
2132
|
JOIN characters c ON c.id = m.character_id
|
|
@@ -1979,7 +2141,9 @@ export class Store {
|
|
|
1979
2141
|
workId: requiredString(row, "work_id"),
|
|
1980
2142
|
name: requiredString(row, "name"),
|
|
1981
2143
|
description: requiredString(row, "description"),
|
|
1982
|
-
settings
|
|
2144
|
+
settings,
|
|
2145
|
+
settingsMarkdown: settingsMarkdownFromList(settings),
|
|
2146
|
+
settingsSections,
|
|
1983
2147
|
memberIds: members.map((member) => member.characterId),
|
|
1984
2148
|
members,
|
|
1985
2149
|
versionNo: this.currentEntityVersionNo("organization", requiredString(row, "id")),
|
|
@@ -2178,21 +2342,27 @@ export class Store {
|
|
|
2178
2342
|
attachmentIdsInMarkdown(contentMarkdown) {
|
|
2179
2343
|
return [...new Set([...contentMarkdown.matchAll(/attachment:\/\/([A-Za-z0-9_-]{1,300})/gu)].map((match) => String(match[1])))];
|
|
2180
2344
|
}
|
|
2181
|
-
|
|
2182
|
-
const
|
|
2183
|
-
const workId = String(section.workId);
|
|
2184
|
-
const attachmentIds = this.attachmentIdsInMarkdown(String(section.contentMarkdown));
|
|
2345
|
+
syncMarkdownAttachmentReferences(workId, entityType, entityId, contentMarkdown) {
|
|
2346
|
+
const attachmentIds = this.attachmentIdsInMarkdown(contentMarkdown);
|
|
2185
2347
|
for (const attachmentId of attachmentIds) {
|
|
2186
2348
|
const attachment = this.getAttachment(attachmentId);
|
|
2187
2349
|
if (attachment.workId !== workId)
|
|
2188
2350
|
throw new AppError(400, "ATTACHMENT_WORK_MISMATCH", "附件不属于当前作品");
|
|
2189
2351
|
}
|
|
2190
|
-
this.db.run("DELETE FROM attachment_references WHERE entity_type =
|
|
2352
|
+
this.db.run("DELETE FROM attachment_references WHERE entity_type = ? AND entity_id = ?", entityType, entityId);
|
|
2191
2353
|
for (const attachmentId of attachmentIds) {
|
|
2192
2354
|
this.db.run(`INSERT INTO attachment_references (attachment_id, work_id, entity_type, entity_id, created_at)
|
|
2193
|
-
VALUES (?, ?,
|
|
2355
|
+
VALUES (?, ?, ?, ?, ?)`, attachmentId, workId, entityType, entityId, now());
|
|
2194
2356
|
}
|
|
2195
2357
|
}
|
|
2358
|
+
clearMarkdownAttachmentReferences(entityType, entityId) {
|
|
2359
|
+
this.db.run("DELETE FROM attachment_references WHERE entity_type = ? AND entity_id = ?", entityType, entityId);
|
|
2360
|
+
}
|
|
2361
|
+
syncCharacterProfileSectionAttachments(section) {
|
|
2362
|
+
const sectionId = String(section.id);
|
|
2363
|
+
const workId = String(section.workId);
|
|
2364
|
+
this.syncMarkdownAttachmentReferences(workId, "character-section", sectionId, String(section.contentMarkdown));
|
|
2365
|
+
}
|
|
2196
2366
|
createCharacterProfileSection(characterId, input, source = "create", sourceRef = null) {
|
|
2197
2367
|
const character = this.getCharacter(characterId);
|
|
2198
2368
|
const sectionId = id("characterSection");
|
|
@@ -2386,7 +2556,7 @@ export class Store {
|
|
|
2386
2556
|
const attachment = this.getAttachment(attachmentId);
|
|
2387
2557
|
const references = Number(this.db.get("SELECT COUNT(*) AS count FROM attachment_references WHERE attachment_id = ?", attachmentId)?.count ?? 0);
|
|
2388
2558
|
if (references > 0)
|
|
2389
|
-
throw new AppError(409, "ATTACHMENT_IN_USE", "
|
|
2559
|
+
throw new AppError(409, "ATTACHMENT_IN_USE", "附件仍被资料引用,无法删除");
|
|
2390
2560
|
const storageKey = String(attachment.storageKey);
|
|
2391
2561
|
this.db.transaction(() => {
|
|
2392
2562
|
this.db.run("DELETE FROM attachments WHERE id = ?", attachmentId);
|
|
@@ -3438,14 +3608,28 @@ export class Store {
|
|
|
3438
3608
|
}
|
|
3439
3609
|
listTasks(workId) {
|
|
3440
3610
|
this.getWork(workId);
|
|
3441
|
-
return this.db.all("SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC", workId).map((row) => this.mapTask(row));
|
|
3611
|
+
return this.db.all("SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC", workId).map((row) => this.mapTask(row));
|
|
3442
3612
|
}
|
|
3443
3613
|
listTasksPage(workId, pagination) {
|
|
3444
3614
|
this.getWork(workId);
|
|
3445
3615
|
const page = paginationSql(pagination);
|
|
3446
|
-
const rows = this.db.all(`SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC${page.sql}`, workId, ...page.params);
|
|
3616
|
+
const rows = this.db.all(`SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC${page.sql}`, workId, ...page.params);
|
|
3447
3617
|
return paginated(rows.map((row) => this.mapTask(row)), pagination);
|
|
3448
3618
|
}
|
|
3619
|
+
listTaskSummariesPage(workId, pagination) {
|
|
3620
|
+
this.getWork(workId);
|
|
3621
|
+
const page = paginationSql(pagination);
|
|
3622
|
+
const rows = this.db.all(`SELECT id, work_id, task_type, scope_json, status, progress, created_at, updated_at
|
|
3623
|
+
FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC${page.sql}`, workId, ...page.params);
|
|
3624
|
+
const chapterSummaries = new Map(this.db.all(`SELECT chapter.id, chapter.title, volume.title AS volume_title
|
|
3625
|
+
FROM chapters chapter JOIN volumes volume ON volume.id = chapter.volume_id
|
|
3626
|
+
WHERE chapter.work_id = ?`, workId).map((row) => [
|
|
3627
|
+
requiredString(row, "id"),
|
|
3628
|
+
`${requiredString(row, "volume_title")} · ${requiredString(row, "title")}`
|
|
3629
|
+
]));
|
|
3630
|
+
const volumeTitles = new Map(this.db.all("SELECT id, title FROM volumes WHERE work_id = ?", workId).map((row) => [requiredString(row, "id"), requiredString(row, "title")]));
|
|
3631
|
+
return paginated(rows.map((row) => this.mapTaskSummary(row, chapterSummaries, volumeTitles)), pagination);
|
|
3632
|
+
}
|
|
3449
3633
|
getTask(taskId) {
|
|
3450
3634
|
const row = this.db.get("SELECT * FROM analysis_tasks WHERE id = ?", taskId);
|
|
3451
3635
|
if (!row)
|
|
@@ -3535,6 +3719,31 @@ export class Store {
|
|
|
3535
3719
|
updatedAt: requiredString(row, "updated_at")
|
|
3536
3720
|
};
|
|
3537
3721
|
}
|
|
3722
|
+
mapTaskSummary(row, chapterSummaries, volumeTitles) {
|
|
3723
|
+
const scope = json(requiredString(row, "scope_json"), {});
|
|
3724
|
+
return {
|
|
3725
|
+
id: requiredString(row, "id"),
|
|
3726
|
+
workId: requiredString(row, "work_id"),
|
|
3727
|
+
taskType: requiredString(row, "task_type"),
|
|
3728
|
+
scope,
|
|
3729
|
+
scopeSummary: this.taskScopeSummaryFromMaps(scope, chapterSummaries, volumeTitles),
|
|
3730
|
+
status: requiredString(row, "status"),
|
|
3731
|
+
progress: numberValue(row, "progress"),
|
|
3732
|
+
createdAt: requiredString(row, "created_at"),
|
|
3733
|
+
updatedAt: requiredString(row, "updated_at")
|
|
3734
|
+
};
|
|
3735
|
+
}
|
|
3736
|
+
taskScopeSummaryFromMaps(scope, chapterSummaries, volumeTitles) {
|
|
3737
|
+
if (typeof scope.chapterId === "string")
|
|
3738
|
+
return chapterSummaries.get(scope.chapterId) ?? "章节已删除";
|
|
3739
|
+
if (scope.type === "volume" && typeof scope.volumeId === "string") {
|
|
3740
|
+
const title = volumeTitles.get(scope.volumeId);
|
|
3741
|
+
return title ? `分卷 · ${title}` : "分卷已删除";
|
|
3742
|
+
}
|
|
3743
|
+
if (scope.type === "book" || Object.keys(scope).length === 0)
|
|
3744
|
+
return "全书";
|
|
3745
|
+
return "未指定范围";
|
|
3746
|
+
}
|
|
3538
3747
|
taskScopeSummary(workId, scope) {
|
|
3539
3748
|
if (typeof scope.chapterId === "string") {
|
|
3540
3749
|
const chapter = this.db.get(`SELECT chapter.title AS title, volume.title AS volume_title
|