{"version":3,"mappings":"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","names":["globalLang","reactive","initialized","useGlobalLang","initialTag","tag","watch","value","globalTheme","oldValue","initialThemeName","useGlobalTheme","lang","theme","happyHacking","blur","target","focus","onClickOutside","useOnClickOutside","props","__props","currentURL","currentOrigin","route","useRoute","origin","formSubmit","form","event","action","assignValuesFromEvent","error","values","key","useForm","router","useRouter","submit","url","indent","computed","_a","slug","text","headlineElement","ref","headlineId","formatNode","hovered","jumpToHeadline","scrollForHash","hash","nextTick","scrollIntoView","safeHtml","html","sanitizeHtml","who","nodes","parse","elementPlugin","element","plugin","isElement","highlightedHtml","hljs","onMounted","__vitePreload","noHighlight","softLineBreakElement","needBreak","previousChar","previousElement","isCJKAndFullwidthPunctuation","char","isExternalLink","link","stateResolveLink","state","components","Paragraph","Table","Headline","ThematicBreak","HtmlBlock","CodeBlock","BlockQuote","List","Item","OrderedList","OrderedItem","Emphasis","Strong","HardLineBreak","SoftLineBreak","Link","FootnoteRef","Image","Code","HtmlInline","Text","component","leftPad","line","size","formatDate","t","YYYY","MM","DD","formatTime","opts","hh","mm","ss","mi","formatDateTime","date","time","normalizeAttributes","attributes","title","subtitle","translators","authors","keywords","venue","normalizeDate","parsed","names","showAttributes","keys","name","Default","Dedication","Activity","ElementPlugin","propsBuilder","authorAvatarURL","author","join","AuthorContactSchema","z","AuthorConfigSchema","loadAuthorConfig","json","loadAuthor","avatarURL","documentTitle","document","firstHeadline","documentFirstHeadline","node","loadConfig","parseDocument","stateRefresh","config","store","Kv.createStore","Kv.set","stateLoad","options","cachedConfig","Kv.get","watchEffect","plugins","Plugins.ElementPlugin","markRaw","Readonlylink","ctx","Mimor","stateCreate","kind","stateIsMarkdown","globalHistory","useHistory","record","sortGlobalHistoryRecord","entries","x","y","stringTrimEnd","input","pattern","prefix","response","contentType","history","newState","stateTitle","stateLoadFromCacheFirst","cached","useDefaultAuthorList","promiseAllFulfilled","promises","results","result","list","cachedAuthors","activityURL","sortActivities","activities","comparisonFromBoolean","p","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","globalFollowing","listText","useFollowing","loadList","following","isFollowed","follow","unfollow","stateCurrentDocument","currentQuery","qs","stateReactivelyUpdateRoute","isValidDate","loadActivity","path","loadActivitiesFromAuthors","loadActivitiesFromAuthor","paths","texts","documents","useStateOptions","statePaths","stateNextPath","index","statePrevPath","topElement","BookConfigSchema","loadBookConfig","frontMatter","useEventListener","stateListenMessage","stateListen","save","isCurrentAuthor","toggle","stateActivitiesForShow","activity","stateReactivelyUpdateActivities","stateReactivelyUpdateAuthors","stateWatch","cachedActivities","showNav","slotElement","slotElementMobile","ManualConfigSchema","loadManualConfig","currentDocument","routes","Home","About","AuthorList","Author","ArticleEntrance","Article","EmbeddedArticle","BookEntrance","Book","ManualEntrance","Manual","History","Following","PageNotFound","createRouter","createWebHistory","app","createApp","App","createHead","Directives.focus","Directives.blur","Directives.onClickOutside"],"ignoreList":[],"sources":["../../src/components/lang/useGlobalLang.ts","../../src/models/theme/globalTheme.ts","../../src/models/theme/initialThemeName.ts","../../src/models/theme/useGlobalTheme.ts","../../src/App.vue","../../src/console/happyHacking.ts","../../src/directives/blur.ts","../../src/directives/focus.ts","../../src/directives/onClickOutside.ts","../../src/components/lang/Lang.vue","../../src/layouts/page-layout/PageFoot.vue","../../src/components/utils/Hyperlink.vue","../../src/utils/currentURL.ts","../../src/utils/currentOrigin.ts","../../src/layouts/page-layout/PageMenu.vue","../../src/layouts/page-layout/PageLayout.vue","../../src/pages/about/About.vue","../../src/components/form/formSubmit.ts","../../src/components/form/useForm.ts","../../src/pages/article-entrance/ArticleEntrance.vue","../../src/components/md/nodes/leaf-blocks/MdParagraph.vue","../../src/utils/slug.ts","../../src/components/md/nodes/leaf-blocks/MdHeadline.vue","../../src/utils/safeHtml.ts","../../src/components/md/nodes/leaf-blocks/MdHtmlBlock.vue","../../src/components/highlight/Highlight.vue","../../src/components/md/nodes/leaf-blocks/MdCodeBlock.vue","../../src/components/md/nodes/inlines/MdSoftLineBreak.vue","../../src/components/md/isExternalLink.ts","../../src/components/md/stateResolveLink.ts","../../src/components/md/nodes/inlines/MdHtmlInline.vue","../../src/components/md/nodes/index.ts","../../src/components/md/MdNode.vue","../../src/utils/leftPad.ts","../../src/utils/formatDate.ts","../../src/components/md/normalizeAttributes.ts","../../src/components/md/pages/default/MdDefaultAttributes.vue","../../src/components/md/pages/default/MdDefaultTitle.vue","../../src/components/md/pages/default/MdDefault.vue","../../src/components/md/pages/index.ts","../../src/components/md/Plugin.ts","../../src/md-plugins/mimor/Mimor.vue","../../src/md-plugins/readonlylink/ReadonlylinkArticle.vue","../../src/models/author/authorAvatarURL.ts","../../src/models/author/AuthorContact.ts","../../src/models/author/AuthorConfig.ts","../../src/models/author/loadAuthorConfig.ts","../../src/models/author/loadAuthor.ts","../../src/md-plugins/readonlylink/ReadonlylinkAuthor.vue","../../src/components/md/documentTitle.ts","../../src/md-plugins/readonlylink/loadConfig.ts","../../src/md-plugins/readonlylink/stateRefresh.ts","../../src/md-plugins/readonlylink/ReadonlylinkLoaded.vue","../../src/md-plugins/readonlylink/stateLoad.ts","../../src/md-plugins/readonlylink/Readonlylink.vue","../../src/md-plugins/index.ts","../../src/components/md/stateCreate.ts","../../src/components/md/MdPage.vue","../../src/pages/article/ArticleMarkdown.vue","../../src/pages/article/ArticlePlaintext.vue","../../src/pages/article/stateIsMarkdown.ts","../../src/models/history/useHistory.ts","../../src/utils/stringTrimEnd.ts","../../src/pages/article/stateLoad.ts","../../src/pages/article/stateRefresh.ts","../../src/pages/article/stateTitle.ts","../../src/pages/article/ArticleLoaded.vue","../../src/pages/article/stateLoadFromCacheFirst.ts","../../src/pages/article/Article.vue","../../src/models/author-list/useDefaultAuthorList.ts","../../src/utils/promiseAllFulfilled.ts","../../src/pages/author-list/stateRefresh.ts","../../src/pages/author-list/AuthorListLoaded.vue","../../src/pages/author-list/stateLoad.ts","../../src/pages/author-list/AuthorList.vue","../../src/components/activity/Activity.vue","../../src/models/activity/sortActivities.ts","../../src/pages/author/AuthorAvatar.vue","../../src/components/icons/BilibiliLineIcon.vue","../../src/components/icons/GithubIcon.vue","../../src/components/icons/MimorIcon.vue","../../src/components/icons/TwitterIcon.vue","../../src/models/following/globalFollowing.ts","../../src/models/following/useFollowing.ts","../../src/pages/author/AuthorMenu.vue","../../src/pages/author/AuthorTabbar.vue","../../src/pages/author/AuthorPage.vue","../../src/pages/author/stateCurrentDocument.ts","../../src/pages/author/stateReactivelyUpdateRoute.ts","../../src/utils/isValidDate.ts","../../src/models/activity/loadActivity.ts","../../src/models/activity/loadActivitiesFromAuthors.ts","../../src/pages/author/stateLoad.ts","../../src/pages/author/stateRefresh.ts","../../src/pages/author/stateTitle.ts","../../src/pages/author/AuthorLoaded.vue","../../src/pages/author/stateLoadFromCacheFirst.ts","../../src/pages/author/Author.vue","../../src/pages/book-entrance/BookEntrance.vue","../../src/pages/book/BookContents.vue","../../src/pages/book/statePaths.ts","../../src/pages/book/stateNextPath.ts","../../src/pages/book/statePrevPath.ts","../../src/pages/book/BookPage.vue","../../src/pages/book/BookTitlePage.vue","../../src/pages/book/stateCurrentDocument.ts","../../src/models/book/BookConfig.ts","../../src/models/book/loadBookConfig.ts","../../src/pages/book/stateLoad.ts","../../src/pages/book/stateRefresh.ts","../../src/pages/book/stateTitle.ts","../../src/pages/book/BookLoaded.vue","../../src/pages/book/stateLoadFromCacheFirst.ts","../../src/pages/book/Book.vue","../../src/pages/embedded-article/stateListenMessage.ts","../../src/pages/embedded-article/stateListen.ts","../../src/pages/embedded-article/EmbeddedArticle.vue","../../src/pages/errors/PageNotFound.vue","../../src/pages/following/FollowingEditor.vue","../../src/pages/following/FollowingAuthor.vue","../../src/pages/following/stateActivitiesForShow.ts","../../src/pages/following/stateReactivelyUpdateActivities.ts","../../src/pages/following/stateReactivelyUpdateAuthors.ts","../../src/pages/following/stateReactive.ts","../../src/pages/following/FollowingLoaded.vue","../../src/pages/following/stateRefresh.ts","../../src/pages/following/stateLoad.ts","../../src/pages/following/Following.vue","../../src/pages/history/HistoryEntry.vue","../../src/pages/history/HistoryLoaded.vue","../../src/pages/history/stateLoad.ts","../../src/pages/history/History.vue","../../src/pages/home/stateRefresh.ts","../../src/pages/home/HomeLoaded.vue","../../src/pages/home/stateLoad.ts","../../src/pages/home/Home.vue","../../src/pages/manual-entrance/ManualEntrance.vue","../../src/pages/manual/ManualLayout.vue","../../src/pages/manual/statePaths.ts","../../src/pages/manual/stateNextPath.ts","../../src/pages/manual/statePrevPath.ts","../../src/pages/manual/ManualPage.vue","../../src/pages/manual/stateCurrentDocument.ts","../../src/pages/manual/stateReactivelyUpdateRoute.ts","../../src/models/manual/ManualConfig.ts","../../src/models/manual/loadManualConfig.ts","../../src/pages/manual/stateLoad.ts","../../src/pages/manual/stateRefresh.ts","../../src/pages/manual/stateTitle.ts","../../src/pages/manual/ManualLoaded.vue","../../src/pages/manual/stateLoadFromCacheFirst.ts","../../src/pages/manual/Manual.vue","../../src/pages/routes.ts","../../src/router/index.ts","../../src/main.ts"],"sourcesContent":["import { reactive, watch } from 'vue'\n\ntype Lang = {\n knownTags: Array\n tag: string\n isZh(): boolean\n isEn(): boolean\n}\n\nconst globalLang: Lang = reactive({\n knownTags: ['zh', 'en'],\n tag: 'en',\n\n isZh() {\n return this.tag.startsWith('zh')\n },\n\n isEn() {\n return !this.isZh()\n },\n})\n\nlet initialized = false\n\nexport function useGlobalLang(): Lang {\n if (initialized) {\n return globalLang\n }\n\n globalLang.tag = initialTag()\n\n initialized = true\n\n return globalLang\n}\n\nfunction initialTag(): string {\n const tag = window.localStorage.getItem('lang')\n if (tag) {\n return tag\n }\n\n if (window.navigator.language.startsWith('zh')) {\n return 'zh'\n }\n\n return 'en'\n}\n\nwatch(\n () => globalLang.tag,\n (value) => {\n window.localStorage.setItem('lang', value)\n },\n)\n\nexport function langTagName(tag: string): string {\n switch (tag) {\n case 'zh':\n return '中文'\n case 'en':\n return 'English'\n default:\n return 'English'\n }\n}\n","import { reactive, watch } from 'vue'\nimport { Theme } from './Theme'\n\nexport const globalTheme: Theme = reactive({\n name: 'system',\n knownThemeNames: ['system', 'light', 'dark'],\n})\n\nwatch(\n () => globalTheme.name,\n (value, oldValue) => {\n if (oldValue) {\n document.documentElement.classList.remove(oldValue)\n }\n\n if (value === 'system') {\n window.localStorage.removeItem('theme')\n } else {\n window.localStorage.setItem('theme', value)\n document.documentElement.classList.add(value)\n }\n },\n)\n","export function initialThemeName(): string {\n if (\n window.localStorage.getItem('theme') === 'dark' ||\n (!window.localStorage.getItem('theme') &&\n window.matchMedia('(prefers-color-scheme: dark)').matches)\n ) {\n document.documentElement.classList.add('dark')\n return 'dark'\n } else {\n document.documentElement.classList.remove('dark')\n return 'system'\n }\n}\n","import { Theme } from './Theme'\nimport { globalTheme } from './globalTheme'\nimport { initialThemeName } from './initialThemeName'\n\nlet initialized = false\n\nexport function useGlobalTheme(): Theme {\n if (initialized) return globalTheme\n\n globalTheme.name = initialThemeName()\n initialized = true\n return globalTheme\n}\n","\n\n\n","export function happyHacking(): void {\n console.group('From readonly.link developers:')\n console.log(`Welcome to the console of readonly.link :)`)\n console.log(`This project is open source.`)\n console.log(\n `The source code is at https://github.com/readonlylink/readonlylink`,\n )\n console.log(`The source map is included.`)\n console.log(`Happy hacking!`)\n console.groupEnd()\n}\n","import { Directive } from 'vue'\n\nexport const blur: Directive = {\n mounted: (target) => target.blur(),\n}\n","import { Directive } from 'vue'\n\nexport const focus: Directive = {\n mounted: (target) => target.focus(),\n}\n","import { onClickOutside as useOnClickOutside } from '@vueuse/core'\nimport { Directive } from 'vue'\n\nexport const onClickOutside: Directive = {\n mounted: (target, { value }) => useOnClickOutside(target, value),\n}\n","\n\n\n","\n\n\n","\n\n\n","export function currentURL() {\n return new URL(window.location.href)\n}\n","import { currentURL } from './currentURL'\n\nexport function currentOrigin() {\n const url = currentURL()\n return url.origin\n}\n","\n\n\n","\n\n\n","\n\n\n","import { Form, FormValues } from './Form'\n\ntype Action = (values: T) => Promise\n\nexport async function formSubmit(\n form: Form,\n event: Event,\n action: Action,\n): Promise {\n form.processing = true\n\n try {\n assignValuesFromEvent(event, form.values)\n await action(form.values)\n } catch (error) {\n if (error instanceof Error) {\n form.error = error\n } else {\n form.error = new Error(`unknown error`)\n console.error({ message: 'unknown error', error })\n }\n }\n\n form.processing = false\n}\n\nfunction assignValuesFromEvent(event: Event, values: FormValues): void {\n const target: any = event.target\n\n for (const key of Object.keys(values)) {\n if (target.hasOwnProperty(key)) {\n if (target[key].type === 'checkbox') {\n values[key] = target[key].checked\n } else {\n values[key] = target[key].value\n }\n }\n }\n}\n","import { reactive } from 'vue'\nimport { Form, FormValues } from './Form'\n\nexport function useForm(values: T): Form {\n return reactive({\n values,\n processing: false,\n }) as Form\n}\n","\n\n\n","\n\n\n","export function slug(text: string): string {\n return text\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\-_ 0-9]+/gu, '')\n .replace(/\\s/gu, '-')\n .replace(/_/g, '-')\n .replace(/\\-+/g, '-')\n .replace(/\\-$/g, '')\n .replace(/^\\-/g, '')\n}\n","\n\n\n","import sanitizeHtml from 'sanitize-html'\n\n// NOTE https://github.com/apostrophecms/sanitize-html#default-options\n\nexport function safeHtml(html: string): string {\n return sanitizeHtml(html, {\n allowedTags: [\n 'address',\n 'article',\n 'aside',\n 'footer',\n 'header',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hgroup',\n 'main',\n 'nav',\n 'section',\n 'blockquote',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'figcaption',\n 'figure',\n 'hr',\n 'li',\n 'main',\n 'ol',\n 'p',\n 'pre',\n 'ul',\n 'a',\n 'abbr',\n 'b',\n 'bdi',\n 'bdo',\n 'br',\n 'cite',\n 'code',\n 'data',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'mark',\n 'q',\n 'rb',\n 'rp',\n 'rt',\n 'rtc',\n 'ruby',\n 's',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'time',\n 'u',\n 'var',\n 'wbr',\n 'caption',\n 'col',\n 'colgroup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'img',\n 'svg',\n 'path',\n 'video',\n 'source',\n 'iframe',\n ],\n disallowedTagsMode: 'discard',\n allowedAttributes: {\n '*': ['class', 'style', 'width', 'height'],\n a: ['href', 'name', 'target'],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height', 'loading'],\n source: ['src', 'type'],\n video: ['controls', 'class', 'style', 'width', 'height'],\n iframe: ['src', 'frameborder', 'scrolling'],\n svg: ['xmlns', 'width', 'height', 'viewbox', 'preserveaspectratio'],\n path: ['d'],\n },\n // Lots of these won't come up by default because we don\"t allow them\n selfClosing: ['img', 'br', 'hr'],\n // URL schemes we permit\n allowedSchemes: ['http', 'https', 'ftp', 'mailto', 'tel'],\n allowedSchemesByTag: {},\n allowedSchemesAppliedToAttributes: ['href', 'src', 'cite'],\n allowProtocolRelative: true,\n enforceHtmlBoundary: false,\n })\n}\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","export function isExternalLink(link: string) {\n return (\n link.startsWith('http://') ||\n link.startsWith('https://') ||\n link.startsWith('data:') ||\n link.startsWith('mailto:')\n )\n}\n","import { isExternalLink } from './isExternalLink'\nimport { State } from './State'\n\nexport function stateResolveLink(state: State, link: string): string {\n if (isExternalLink(link)) {\n return link\n }\n\n if (!state.url) {\n return link\n }\n\n return new URL(link, state.url).href\n}\n","\n\n\n","// organize-imports-ignore\n\nimport Paragraph from './leaf-blocks/MdParagraph.vue'\nimport Table from './leaf-blocks/MdTable.vue'\nimport Headline from './leaf-blocks/MdHeadline.vue'\nimport ThematicBreak from './leaf-blocks/MdThematicBreak.vue'\nimport HtmlBlock from './leaf-blocks/MdHtmlBlock.vue'\nimport CodeBlock from './leaf-blocks/MdCodeBlock.vue'\n\nimport BlockQuote from './container-blocks/MdBlockQuote.vue'\nimport List from './container-blocks/MdList.vue'\nimport Item from './container-blocks/MdItem.vue'\nimport OrderedList from './container-blocks/MdOrderedList.vue'\nimport OrderedItem from './container-blocks/MdOrderedItem.vue'\n\nimport Emphasis from './inlines/MdEmphasis.vue'\nimport Strong from './inlines/MdStrong.vue'\nimport HardLineBreak from './inlines/MdHardLineBreak.vue'\nimport SoftLineBreak from './inlines/MdSoftLineBreak.vue'\nimport Link from './inlines/MdLink.vue'\nimport FootnoteRef from './inlines/MdFootnoteRef.vue'\nimport Image from './inlines/MdImage.vue'\nimport Code from './inlines/MdCode.vue'\nimport HtmlInline from './inlines/MdHtmlInline.vue'\nimport Text from './inlines/MdText.vue'\nimport { Component } from 'vue'\n\nexport const components: Record = {\n Paragraph,\n Table,\n Headline,\n ThematicBreak,\n HtmlBlock,\n CodeBlock,\n\n BlockQuote,\n List,\n Item,\n OrderedList,\n OrderedItem,\n\n Emphasis,\n Strong,\n HardLineBreak,\n SoftLineBreak,\n Link,\n FootnoteRef,\n Image,\n Code,\n HtmlInline,\n Text,\n}\n","\n\n\n","export function leftPad(\n line: string,\n size: number,\n char: string = ' ',\n): string {\n return char.repeat(size - line.length) + line\n}\n","import { leftPad } from './leftPad'\n\nexport function formatDate(t: Date | number | string): string {\n if (typeof t === 'string') t = new Date(t)\n if (typeof t === 'number') t = new Date(t)\n\n const YYYY = t.getFullYear()\n const MM = leftPad((t.getMonth() + 1).toString(), 2, '0')\n const DD = leftPad(t.getDate().toString(), 2, '0')\n\n return `${YYYY}-${MM}-${DD}`\n}\n\nexport function formatTime(\n t: Date | number | string,\n opts?: { withMilliseconds?: boolean },\n): string {\n if (typeof t === 'string') t = new Date(t)\n if (typeof t === 'number') t = new Date(t)\n\n const hh = leftPad(t.getHours().toString(), 2, '0')\n const mm = leftPad(t.getMinutes().toString(), 2, '0')\n const ss = leftPad(t.getSeconds().toString(), 2, '0')\n\n const mi = leftPad((t.getTime() % 1000).toString(), 3, '0')\n\n if (opts?.withMilliseconds) {\n return `${hh}:${mm}:${ss}.${mi}`\n } else {\n return `${hh}:${mm}:${ss}`\n }\n}\n\nexport function formatDateTime(\n t: Date | number,\n opts?: { withMilliseconds?: boolean },\n): string {\n if (typeof t === 'number') t = new Date(t)\n\n const date = formatDate(t)\n const time = formatTime(t, opts)\n\n return `${date} ${time}`\n}\n\nexport function formatAgo(\n t: Date | number | string,\n options: { lang: string },\n): string {\n if (typeof t === 'string') t = new Date(t)\n if (typeof t === 'number') t = new Date(t)\n\n const detla = Date.now() - t.getTime()\n\n const A_MONTH = 30 * 24 * 60 * 60 * 1000\n\n if (detla > A_MONTH) {\n return formatDate(t)\n }\n\n return formatDetla(detla, options)\n}\n\nexport function formatDetla(t: number, options: { lang: string }): string {\n const { lang } = options\n\n const s = Math.floor(t / 1000)\n const m = Math.floor(s / 60)\n const h = Math.floor(m / 60)\n const d = Math.floor(h / 24)\n\n if (d) return lang.startsWith('zh') ? `${d} 天前` : `${d} days ago`\n if (h) return lang.startsWith('zh') ? `${h} 小时前` : `${h} hours ago`\n if (m) return lang.startsWith('zh') ? `${m} 分钟前` : `${m} minutes ago`\n else return lang.startsWith('zh') ? `刚才` : `just now`\n}\n","import { formatDate } from '../../utils/formatDate'\n\nexport type Attributes = {\n title?: string\n subtitle?: string\n translators: Array\n authors: Array\n keywords: Array\n venue?: string\n date?: string\n}\n\nexport function normalizeAttributes(attributes: any): Attributes {\n let title = undefined\n if (typeof attributes.title === 'string') title = attributes.title\n\n let subtitle = undefined\n if (typeof attributes.subtitle === 'string') title = attributes.subtitle\n\n const translators = []\n if (attributes.translator) translators.push(attributes.translator)\n if (attributes.translators) translators.push(...attributes.translators)\n\n const authors = []\n if (attributes.author) authors.push(attributes.author)\n if (attributes.authors) authors.push(...attributes.authors)\n\n const keywords = []\n if (attributes.keywords) keywords.push(...attributes.keywords)\n if (attributes.tags) keywords.push(...attributes.tags)\n\n let venue = attributes.venue\n\n let date = undefined\n if (attributes.year) date = attributes.year\n if (attributes.date) date = normalizeDate(attributes.date)\n\n return {\n title,\n subtitle,\n translators,\n authors,\n keywords,\n venue,\n date,\n }\n}\n\nexport function normalizeDate(date: any): string | undefined {\n if (typeof date === 'number') {\n if (date < 10000) return date.toString()\n else return formatDate(date)\n } else if (date instanceof Date) {\n return formatDate(date)\n } else if (typeof date === 'string') {\n const parsed = new Date(date)\n if (Number.isNaN(parsed.getTime())) return date\n else return formatDate(parsed)\n }\n}\n","\n\n\n","\n\n\n","\n\n\n","import { Component } from 'vue'\nimport Activity from './activity/MdActivity.vue'\nimport Dedication from './dedication/MdDedication.vue'\nimport Default from './default/MdDefault.vue'\n\nexport const components: Record = {\n Default,\n Dedication,\n Activity,\n}\n","import { XElement } from '@xieyuheng/x-node'\nimport { Component } from 'vue'\nimport { State } from './State'\n\nexport type Plugin = ElementPlugin\n\nexport type PropsBuilder = (ctx: {\n state: State\n element: XElement\n}) => Record\n\nexport type ElementPlugin = {\n '@kind': 'ElementPlugin'\n tag: string\n component: Component\n propsBuilder: PropsBuilder\n}\n\nexport function ElementPlugin(\n tag: string,\n component: Component,\n propsBuilder: PropsBuilder,\n): ElementPlugin {\n return {\n '@kind': 'ElementPlugin',\n tag,\n component,\n propsBuilder,\n }\n}\n","\n\n\n","\n\n\n","import { join } from 'path-browserify'\nimport { useGlobalTheme } from '../theme'\nimport { Author } from './Author'\n\nexport function authorAvatarURL(author: Author): URL {\n const theme = useGlobalTheme()\n\n if (typeof author.config.avatar === 'string') {\n return new URL(\n join(author.config.src || '', author.config.avatar),\n author.url,\n )\n }\n\n if (theme.name === 'dark') {\n return new URL(\n join(author.config.src || '', author.config.avatar.dark),\n author.url,\n )\n } else {\n return new URL(\n join(author.config.src || '', author.config.avatar.light),\n author.url,\n )\n }\n}\n","import { z, ZodType } from 'zod'\n\nexport type AuthorContact = {\n bilibili?: string\n github?: string\n email?: string\n twitter?: string\n mimor?: string\n}\n\nexport const AuthorContactSchema: ZodType = z.object({\n bilibili: z.optional(z.string()),\n github: z.optional(z.string()),\n email: z.optional(z.string()),\n twitter: z.optional(z.string()),\n mimor: z.optional(z.string()),\n})\n","import { z, ZodType } from 'zod'\nimport { AuthorContact, AuthorContactSchema } from './AuthorContact'\n\nexport type AuthorConfig = {\n kind: 'Author'\n name: string\n tagline?: string\n avatar: string | { light: string; dark: string }\n homepage: string\n src?: string\n activities: Array\n tabs?: Record\n contact?: AuthorContact\n}\n\nexport const AuthorConfigSchema: ZodType = z.object({\n kind: z.literal('Author'),\n name: z.string(),\n tagline: z.optional(z.string()),\n avatar: z.union([\n z.string(),\n z.object({\n light: z.string(),\n dark: z.string(),\n }),\n ]),\n homepage: z.string(),\n src: z.optional(z.string()),\n activities: z.array(z.string()),\n tabs: z.optional(z.record(z.string(), z.string())),\n contact: z.optional(AuthorContactSchema),\n})\n","import {\n AuthorConfig,\n AuthorConfigSchema,\n} from '../../models/author/AuthorConfig'\n\nexport async function loadAuthorConfig(\n url: string | URL,\n): Promise {\n const response = await fetch(url)\n const json = await response.json()\n return AuthorConfigSchema.parse(json)\n}\n","import { Author } from '../../models/author/Author'\nimport { loadAuthorConfig } from './loadAuthorConfig'\n\nexport async function loadAuthor(url: string): Promise {\n return { url, config: await loadAuthorConfig(url) }\n}\n","\n\n\n","import { Document, Nodes, formatNode } from '@xieyuheng/x-markdown'\n\nexport function documentTitle(document: Document): string | undefined {\n if (document.attributes.title) {\n return document.attributes.title\n }\n\n const firstHeadline = documentFirstHeadline(document)\n if (firstHeadline !== undefined) {\n return formatNode(firstHeadline)\n }\n\n return undefined\n}\n\nfunction documentFirstHeadline(document: Document): Nodes.Headline | undefined {\n return document.children.find((node) => node.kind === 'Headline') as\n | Nodes.Headline\n | undefined\n}\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { documentTitle } from '../../components/md/documentTitle'\nimport { Config } from './Config'\n\nexport async function loadConfig(url: string): Promise {\n if (url.endsWith('.md')) {\n const response = await fetch(url)\n const text = await response.text()\n const document = parseDocument(text)\n\n return {\n kind: 'Article',\n title: documentTitle(document) || url,\n attributes: document.attributes,\n }\n }\n\n const response = await fetch(url)\n const json = await response.json()\n return json\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { loadConfig } from './loadConfig'\n\nexport async function stateRefresh(state: State): Promise {\n const config = await loadConfig(state.url)\n state.config = config\n const store = Kv.createStore('readonly.link/', 'configs')\n await Kv.set(state.url, config, store)\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { loadConfig } from './loadConfig'\n\nexport type StateOptions = {\n url: string\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const { url } = options\n\n const store = Kv.createStore('readonly.link/', 'configs')\n const cachedConfig = await Kv.get(url, store)\n if (cachedConfig) {\n return {\n url,\n config: cachedConfig,\n isLoadedFromCache: true,\n }\n } else {\n const config = await loadConfig(url)\n await Kv.set(url, config, store)\n return {\n url,\n config,\n isLoadedFromCache: false,\n }\n }\n}\n","\n\n\n","import { markRaw } from 'vue'\nimport * as Plugins from '../components/md/Plugin'\nimport { stateResolveLink } from '../components/md/stateResolveLink'\nimport Mimor from './mimor/Mimor.vue'\nimport Readonlylink from './readonlylink/Readonlylink.vue'\n\nexport const plugins = [\n Plugins.ElementPlugin('readonlylink', markRaw(Readonlylink), (ctx) => ({\n url: stateResolveLink(ctx.state, ctx.element.attributes.href),\n })),\n\n Plugins.ElementPlugin('mimor', markRaw(Mimor), (ctx) => ({\n src: stateResolveLink(ctx.state, ctx.element.attributes.src),\n })),\n]\n","import { Document } from '@xieyuheng/x-markdown'\nimport { plugins } from '../../md-plugins'\nimport { State } from './State'\n\nexport type StateOptions = {\n url?: URL\n document: Document\n}\n\nexport function stateCreate(options: StateOptions): State {\n const { url, document } = options\n\n return {\n url,\n document,\n plugins,\n }\n}\n","\n\n\n","\n\n\n","\n\n\n","import { State } from './State'\n\nexport function stateIsMarkdown(state: State): boolean {\n return state.url.endsWith('.md') || state.contentType === 'text/markdown'\n}\n","import * as Kv from 'idb-keyval'\nimport { reactive, watch } from 'vue'\nimport { History, HistoryEntry } from './History'\n\nconst globalHistory: History = reactive({\n record: {},\n})\n\nlet initialized = false\n\nexport async function useHistory(): Promise {\n if (initialized) {\n return globalHistory\n }\n\n const record = await Kv.get('readonly.link/globalHistory.record')\n if (record) {\n globalHistory.record = record\n }\n // globalHistory.record = {}\n\n initialized = true\n\n return globalHistory\n}\n\nwatch(\n () => globalHistory.record,\n async (value) => {\n const record: Record = {}\n for (const [key, value] of Object.entries(globalHistory.record)) {\n record[key] = { ...value }\n }\n\n await Kv.set('readonly.link/globalHistory.record', record)\n },\n {\n deep: true,\n },\n)\n\nexport function sortGlobalHistoryRecord(): void {\n const entries = Object.entries(globalHistory.record)\n\n entries.sort(([, x], [, y]) => (x.time > y.time ? -1 : 1))\n\n for (const [key, value] of entries) {\n delete globalHistory.record[key]\n globalHistory.record[key] = value\n }\n}\n","export function stringTrimEnd(input: string, pattern: string): string {\n if (input.endsWith(pattern)) {\n const prefix = input.slice(0, input.length - pattern.length)\n return stringTrimEnd(prefix, pattern)\n }\n\n return input\n}\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { useHistory } from '../../models/history/useHistory'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\n\nexport type StateOptions = {\n url: string\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const url = stringTrimEnd(options.url, '/')\n const response = await fetch(url)\n const contentType = response.headers.get('content-type') || ''\n const text = await response.text()\n const document = parseDocument(text)\n\n const history = await useHistory()\n history.record[url] = { time: Date.now(), url }\n\n return {\n url,\n text,\n contentType,\n document,\n }\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateLoad } from './stateLoad'\n\nexport async function stateRefresh(state: State): Promise {\n const store = Kv.createStore('readonly.link/articles', 'cache')\n const newState = await stateLoad(state)\n Object.assign(state, newState)\n await Kv.set(state.url, newState, store)\n}\n","import { documentTitle } from '../../components/md/documentTitle'\nimport { State } from './State'\n\nexport function stateTitle(state: State): string {\n return documentTitle(state.document) || state.url\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\nimport { StateOptions, stateLoad } from './stateLoad'\n\nexport async function stateLoadFromCacheFirst(\n options: StateOptions,\n): Promise {\n const url = stringTrimEnd(options.url, '/')\n\n const store = Kv.createStore('readonly.link/articles', 'cache')\n const cached = await Kv.get(url, store)\n if (cached) {\n return {\n ...cached,\n url,\n isLoadedFromCache: true,\n }\n } else {\n const state = await stateLoad(options)\n await Kv.set(url, state, store)\n return state\n }\n}\n","\n\n\n","export function useDefaultAuthorList(): Array {\n return [\n 'https://readonly.link/contents/author.json',\n 'https://inner.xieyuheng.com/author.json',\n 'https://shadowrz.github.io/author.json',\n 'https://code-of-cicada.fidb.app/docs/author.json',\n 'https://code-of-fidb.fidb.app/docs/author.json',\n 'https://mimor.app/contents/author.json',\n ]\n}\n","export async function promiseAllFulfilled(\n promises: Array>,\n): Promise> {\n const results = await Promise.allSettled(promises)\n\n const values: Array = []\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value)\n }\n }\n\n return values\n}\n","import * as Kv from 'idb-keyval'\nimport { loadAuthor } from '../../models/author'\nimport { useDefaultAuthorList } from '../../models/author-list'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { State } from './State'\n\nexport async function stateRefresh(state: State): Promise {\n const list = useDefaultAuthorList()\n const authors = await promiseAllFulfilled(list.map(loadAuthor))\n state.authors = authors\n await Kv.set('readonly.link/AuthorList/state.authors', authors)\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { useDefaultAuthorList } from '../../models/author-list'\nimport { State } from './State'\nimport { stateRefresh } from './stateRefresh'\n\nexport async function stateLoad(): Promise {\n const list = useDefaultAuthorList()\n const state: State = {\n list,\n authors: [],\n }\n\n const cachedAuthors = await Kv.get('readonly.link/AuthorList/state.authors')\n if (cachedAuthors) {\n state.authors = cachedAuthors\n state.isLoadedFromCache = true\n } else {\n await stateRefresh(state)\n }\n\n return state\n}\n","\n\n\n","\n\n\n","import { Activity } from '../../models/activity/Activity'\n\nexport function sortActivities(activities: Array): Array {\n activities = [...activities]\n\n activities.sort((x, y) =>\n comparisonFromBoolean(\n new Date(x.document.attributes.date) <\n new Date(y.document.attributes.date),\n ),\n )\n\n return activities\n}\n\nfunction comparisonFromBoolean(p: boolean): 1 | -1 {\n return p ? 1 : -1\n}\n","\n\n\n","\n","\n","\n","\n","import { reactive, watch } from 'vue'\nimport { Following } from './Following'\n\nexport const globalFollowing: Following = reactive({\n list: [],\n})\n\nwatch(\n () => globalFollowing.list,\n (value) => {\n const listText = value.join('\\n')\n window.localStorage.setItem('globalFollowing.list', listText)\n },\n {\n deep: true,\n },\n)\n","import { Following } from './Following'\nimport { globalFollowing } from './globalFollowing'\n\nlet initialized = false\n\nexport function useFollowing(): Following {\n if (initialized) {\n return globalFollowing\n }\n\n globalFollowing.list = loadList()\n\n initialized = true\n\n return globalFollowing\n}\n\nfunction loadList(): Array {\n const listText = window.localStorage.getItem('globalFollowing.list')\n if (!listText) {\n return []\n }\n\n return listText.split('\\n')\n}\n","\n\n\n","\n\n\n","\n\n\n","import { Document } from '@xieyuheng/x-markdown'\nimport { State } from './State'\n\nexport function stateCurrentDocument(state: State): Document | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n return state.documents[state.path]\n}\n","import qs from 'qs'\nimport { watch } from 'vue'\nimport { Router } from 'vue-router'\nimport { State } from './State'\n\nfunction currentQuery() {\n const url = new URL(window.location.href)\n const query = qs.parse(url.search, { ignoreQueryPrefix: true })\n return query\n}\n\nexport function stateReactivelyUpdateRoute(state: State, router: Router): void {\n watch(\n () => state.path,\n (value) => {\n if (value === undefined) {\n router.replace({\n path: `/authors/${state.url}`,\n query: {\n ...(currentQuery() as any),\n },\n })\n } else {\n router.replace({\n path: `/authors/${state.url}/-/${value}`,\n query: {\n ...(currentQuery() as any),\n },\n })\n }\n },\n {\n immediate: true,\n },\n )\n}\n","export function isValidDate(date: any): boolean {\n return !Number.isNaN(new Date(date).getTime())\n}\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { join } from 'path-browserify'\nimport { isValidDate } from '../../utils/isValidDate'\nimport { Author } from '../author/Author'\nimport { Activity } from './Activity'\n\nexport async function loadActivity(\n author: Author,\n path: string,\n): Promise {\n const who = 'loadActivity'\n\n const response = await fetch(\n new URL(join(author.config.src || '', path), author.url),\n )\n\n const text = await response.text()\n const document = parseDocument(text)\n if (!isValidDate(document.attributes.date)) {\n throw new Error(\n `[${who}] document has no valid date attribute: ${document.attributes.date}`,\n )\n }\n\n document.attributes.kind = 'Activity'\n\n return { author, path, text, document }\n}\n","import { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { Author } from '../author/Author'\nimport { Activity } from './Activity'\nimport { loadActivity } from './loadActivity'\n\nexport async function loadActivitiesFromAuthors(\n authors: Array,\n): Promise> {\n return (\n await promiseAllFulfilled(authors.map(loadActivitiesFromAuthor))\n ).flatMap((activities) => activities)\n}\n\nasync function loadActivitiesFromAuthor(\n author: Author,\n): Promise> {\n return await promiseAllFulfilled(\n author.config.activities.map((path) => loadActivity(author, path)),\n )\n}\n","import { Document, parseDocument } from '@xieyuheng/x-markdown'\nimport { join } from 'path-browserify'\nimport { loadActivitiesFromAuthors } from '../../models/activity/loadActivitiesFromAuthors'\nimport { loadAuthor } from '../../models/author'\nimport { useHistory } from '../../models/history/useHistory'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\n\nexport type StateOptions = {\n url: string\n path?: string\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const { path } = options\n const url = stringTrimEnd(options.url, '/')\n\n const history = await useHistory()\n history.record[url] = { time: Date.now(), url }\n\n const author = await loadAuthor(url)\n const config = author.config\n\n const paths = [...Object.values(config.tabs || {}), config.homepage]\n const texts: Record = Object.fromEntries(\n await promiseAllFulfilled(\n paths.map(async (path) => {\n const response = await fetch(new URL(join(config.src || '', path), url))\n const text = await response.text()\n return [path, text]\n }),\n ),\n )\n\n const documents: Record = {}\n for (const [path, text] of Object.entries(texts)) {\n documents[path] = parseDocument(text)\n }\n\n const activities = await loadActivitiesFromAuthors([author])\n\n return {\n url,\n path,\n config,\n activities,\n author,\n documents,\n }\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateLoad } from './stateLoad'\n\nexport async function stateRefresh(state: State): Promise {\n const store = Kv.createStore('readonly.link/authors', 'cache')\n const newState = await stateLoad(state)\n delete newState.path\n Object.assign(state, newState)\n await Kv.set(state.url, newState, store)\n}\n","import { State } from './State'\n\nexport function stateTitle(state: State): string {\n if (state.path === undefined) {\n return state.config.name\n }\n\n if (state.path === state.config.homepage) {\n return state.config.name\n }\n\n if (state.path === 'activities') {\n return `activities | ${state.config.name}`\n }\n\n for (const [name, path] of Object.entries(state.config.tabs || {})) {\n if (path === state.path) {\n return `${name} | ${state.config.name}`\n }\n }\n\n return state.config.name\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\nimport { StateOptions, stateLoad } from './stateLoad'\n\nexport async function stateLoadFromCacheFirst(\n options: StateOptions,\n): Promise {\n const { path } = options\n const url = stringTrimEnd(options.url, '/')\n\n const store = Kv.createStore('readonly.link/authors', 'cache')\n const cached = await Kv.get(url, store)\n if (cached) {\n return {\n ...cached,\n path,\n url,\n isLoadedFromCache: true,\n }\n } else {\n const state = await stateLoad(options)\n await Kv.set(url, state, store)\n return state\n }\n}\n","\n\n\n","\n\n\n","\n\n\n","import { State } from './State'\n\nexport function statePaths(state: State): Array {\n return Object.keys(state.texts)\n}\n","import { State } from './State'\nimport { statePaths } from './statePaths'\n\nexport function stateNextPath(state: State): string | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n const paths = statePaths(state)\n const index = paths.indexOf(state.path)\n return paths[index + 1]\n}\n","import { State } from './State'\nimport { statePaths } from './statePaths'\n\nexport function statePrevPath(state: State): string | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n const paths = statePaths(state)\n const index = paths.indexOf(state.path)\n return paths[index - 1]\n}\n","\n\n\n","\n\n\n","import { Document } from '@xieyuheng/x-markdown'\nimport { State } from './State'\n\nexport function stateCurrentDocument(state: State): Document | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n return state.documents[state.path]\n}\n","import { z, ZodType } from 'zod'\n\nexport type BookConfig = {\n kind: 'Book'\n title: string\n subtitle?: string\n version?: string\n authors: Array\n translators?: Array\n year?: string\n date?: string\n src: string\n contents: Array\n}\n\nexport const BookConfigSchema: ZodType = z.object({\n kind: z.literal('Book'),\n title: z.string(),\n subtitle: z.optional(z.string()),\n version: z.optional(z.string()),\n authors: z.array(z.string()),\n translators: z.optional(z.array(z.string())),\n year: z.optional(z.string()),\n date: z.optional(z.string()),\n src: z.string(),\n contents: z.array(z.string()),\n})\n","import { BookConfig, BookConfigSchema } from './BookConfig'\n\nexport async function loadBookConfig(options: {\n url: string\n}): Promise {\n const { url } = options\n\n const response = await fetch(url)\n const json = await response.json()\n\n return BookConfigSchema.parse(json)\n}\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { join } from 'path-browserify'\nimport { loadBookConfig } from '../../models/book/loadBookConfig'\nimport { useHistory } from '../../models/history/useHistory'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\n\nexport type StateOptions = {\n url: string\n path?: string\n frontMatter?: string\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const { path, frontMatter } = options\n\n const url = stringTrimEnd(options.url, '/')\n const config = await loadBookConfig({ url })\n\n const texts: Record = Object.fromEntries(\n await promiseAllFulfilled(\n config.contents.map(async (path) => {\n const response = await fetch(new URL(join(config.src, path), url))\n const text = await response.text()\n return [path, text]\n }),\n ),\n )\n\n const documents = Object.fromEntries(\n Object.entries(texts).map(([path, text]) => [path, parseDocument(text)]),\n )\n\n const history = await useHistory()\n history.record[url] = { time: Date.now(), url }\n\n return {\n url,\n path,\n frontMatter,\n config,\n texts,\n documents,\n }\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateLoad } from './stateLoad'\n\nexport async function stateRefresh(state: State): Promise {\n const store = Kv.createStore('readonly.link/books', 'cache')\n const newState = await stateLoad(state)\n delete newState.path\n delete newState.frontMatter\n Object.assign(state, newState)\n await Kv.set(state.url, newState, store)\n}\n","import { documentTitle } from '../../components/md/documentTitle'\nimport { State } from './State'\nimport { stateCurrentDocument } from './stateCurrentDocument'\n\nexport function stateTitle(state: State): string {\n const document = stateCurrentDocument(state)\n\n if (document === undefined) {\n return state.config.title\n }\n\n const subtitle = documentTitle(document)\n if (subtitle === undefined) {\n return state.config.title\n }\n\n return [subtitle, state.config.title].join(' | ')\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\nimport { StateOptions, stateLoad } from './stateLoad'\n\nexport async function stateLoadFromCacheFirst(\n options: StateOptions,\n): Promise {\n const { path, frontMatter } = options\n const url = stringTrimEnd(options.url, '/')\n\n const store = Kv.createStore('readonly.link/books', 'cache')\n const cached = await Kv.get(url, store)\n if (cached) {\n return {\n ...cached,\n path,\n frontMatter,\n url,\n isLoadedFromCache: true,\n }\n } else {\n const state = await stateLoad(options)\n await Kv.set(url, state, store)\n return state\n }\n}\n","\n\n\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { useGlobalTheme } from '../../models/theme'\nimport { State } from './State'\n\nexport function stateListenMessage(state: State): void {\n const theme = useGlobalTheme()\n\n window.addEventListener('message', (event) => {\n console.log({\n who: 'EmbeddedArticle',\n message: 'receive message',\n data: event.data,\n })\n\n if (typeof event.data.theme === 'string') {\n theme.name = event.data.theme\n }\n\n if (event.data.document) {\n state.document = event.data.document\n } else if (typeof event.data.text === 'string') {\n state.document = parseDocument(event.data.text)\n }\n })\n}\n","import { State } from './State'\nimport { stateListenMessage } from './stateListenMessage'\n\nexport function stateListen(state: State): void {\n stateListenMessage(state)\n}\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","import { Activity } from '../../models/activity/Activity'\nimport { sortActivities } from '../../models/activity/sortActivities'\nimport { State } from './State'\n\nexport function stateActivitiesForShow(state: State): Array {\n const activities = state.activities.filter(\n (activity) =>\n state.currentAuthor === undefined ||\n activity.author.url === state.currentAuthor.url,\n )\n\n return sortActivities(activities)\n}\n","import { watch } from 'vue'\nimport { loadActivitiesFromAuthors } from '../../models/activity/loadActivitiesFromAuthors'\nimport { State } from './State'\n\nexport function stateReactivelyUpdateActivities(state: State) {\n watch(\n () => state.authors,\n async () => {\n state.activities = await loadActivitiesFromAuthors(state.authors)\n },\n {\n immediate: true,\n deep: true,\n },\n )\n}\n","import { watch } from 'vue'\nimport { loadAuthor } from '../../models/author'\nimport { useFollowing } from '../../models/following'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { State } from './State'\n\nexport function stateReactivelyUpdateAuthors(state: State) {\n const following = useFollowing()\n\n watch(\n () => following.list,\n async (value) => {\n state.list = value\n state.authors = await promiseAllFulfilled(state.list.map(loadAuthor))\n },\n {\n deep: true,\n },\n )\n}\n","import { State } from './State'\nimport { stateReactivelyUpdateActivities } from './stateReactivelyUpdateActivities'\nimport { stateReactivelyUpdateAuthors } from './stateReactivelyUpdateAuthors'\n\nexport function stateWatch(state: State): void {\n stateReactivelyUpdateAuthors(state)\n stateReactivelyUpdateActivities(state)\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { loadActivitiesFromAuthors } from '../../models/activity/loadActivitiesFromAuthors'\nimport { loadAuthor } from '../../models/author'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { State } from './State'\n\nexport async function stateRefresh(state: State): Promise {\n const authors = await promiseAllFulfilled(state.list.map(loadAuthor))\n const activities = await loadActivitiesFromAuthors(authors)\n state.authors = authors\n state.activities = activities\n await Kv.set('readonly.link/Following/state.authors', authors)\n await Kv.set('readonly.link/Following/state.activities', activities)\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateRefresh } from './stateRefresh'\n\nexport type StateOptions = {\n kind?: string\n list: Array\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const { kind, list } = options\n\n const state: State = {\n kind,\n list,\n authors: [],\n activities: [],\n }\n\n const cachedAuthors = await Kv.get('readonly.link/Following/state.authors')\n const cachedActivities = await Kv.get(\n 'readonly.link/Following/state.activities',\n )\n if (cachedAuthors && cachedActivities) {\n state.authors = cachedAuthors\n state.activities = cachedActivities\n state.isLoadedFromCache = true\n } else {\n await stateRefresh(state)\n }\n\n return state\n}\n","\n\n\n","\n\n\n","\n\n\n","import {\n sortGlobalHistoryRecord,\n useHistory,\n} from '../../models/history/useHistory'\nimport { State } from './State'\n\nexport type StateOptions = {}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const history = await useHistory()\n\n sortGlobalHistoryRecord()\n\n return {\n history,\n }\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { loadActivitiesFromAuthors } from '../../models/activity/loadActivitiesFromAuthors'\nimport { loadAuthor } from '../../models/author'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { State } from './State'\n\nexport async function stateRefresh(state: State): Promise {\n const authors = await promiseAllFulfilled(state.list.map(loadAuthor))\n const activities = await loadActivitiesFromAuthors(authors)\n state.activities = activities\n await Kv.set('readonly.link/Home/state.activities', activities)\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateRefresh } from './stateRefresh'\n\nexport type StateOptions = {\n list: Array\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const { list } = options\n\n const state: State = {\n list,\n activities: [],\n }\n\n const cachedActivities = await Kv.get('readonly.link/Home/state.activities')\n if (cachedActivities) {\n state.activities = cachedActivities\n state.isLoadedFromCache = true\n } else {\n await stateRefresh(state)\n }\n\n return state\n}\n","\n\n\n","\n\n\n","\n\n\n","import { State } from './State'\n\nexport function statePaths(state: State): Array {\n return Object.keys(state.texts)\n}\n","import { State } from './State'\nimport { statePaths } from './statePaths'\n\nexport function stateNextPath(state: State): string | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n const paths = statePaths(state)\n const index = paths.indexOf(state.path)\n return paths[index + 1]\n}\n","import { State } from './State'\nimport { statePaths } from './statePaths'\n\nexport function statePrevPath(state: State): string | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n const paths = statePaths(state)\n const index = paths.indexOf(state.path)\n return paths[index - 1]\n}\n","\n\n\n","import { Document } from '@xieyuheng/x-markdown'\nimport { State } from './State'\n\nexport function stateCurrentDocument(state: State): Document | undefined {\n if (state.path === undefined) {\n return undefined\n }\n\n return state.documents[state.path]\n}\n","import qs from 'qs'\nimport { watch } from 'vue'\nimport { Router } from 'vue-router'\nimport { State } from './State'\n\nfunction currentQuery() {\n const url = new URL(window.location.href)\n const query = qs.parse(url.search, { ignoreQueryPrefix: true })\n return query\n}\n\nexport function stateReactivelyUpdateRoute(state: State, router: Router): void {\n watch(\n () => state.path,\n (value) => {\n if (value === undefined) {\n router.replace({\n path: `/manuals/${state.url}`,\n query: {\n ...(currentQuery() as any),\n },\n })\n } else {\n router.replace({\n path: `/manuals/${state.url}/-/${value}`,\n query: {\n ...(currentQuery() as any),\n },\n })\n }\n },\n {\n immediate: true,\n },\n )\n}\n","import { z, ZodType } from 'zod'\n\nexport type ManualConfig = {\n kind: 'Manual'\n title: string\n subtitle?: string\n version?: string\n authors: Array\n translators?: Array\n year?: string\n date?: string\n src: string\n main: string\n sections: Record>\n}\n\nexport const ManualConfigSchema: ZodType = z.object({\n kind: z.literal('Manual'),\n title: z.string(),\n subtitle: z.optional(z.string()),\n version: z.optional(z.string()),\n authors: z.array(z.string()),\n translators: z.optional(z.array(z.string())),\n year: z.optional(z.string()),\n date: z.optional(z.string()),\n src: z.string(),\n main: z.string(),\n sections: z.record(z.string(), z.array(z.string())),\n})\n","import { ManualConfig, ManualConfigSchema } from './ManualConfig'\n\nexport async function loadManualConfig(options: {\n url: string\n}): Promise {\n const { url } = options\n\n const response = await fetch(url)\n const json = await response.json()\n\n return ManualConfigSchema.parse(json)\n}\n","import { parseDocument } from '@xieyuheng/x-markdown'\nimport { join } from 'path-browserify'\nimport { useHistory } from '../../models/history/useHistory'\nimport { loadManualConfig } from '../../models/manual/loadManualConfig'\nimport { promiseAllFulfilled } from '../../utils/promiseAllFulfilled'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\n\nexport type StateOptions = {\n url: string\n path?: string\n}\n\nexport async function stateLoad(options: StateOptions): Promise {\n const url = stringTrimEnd(options.url, '/')\n const config = await loadManualConfig({ url })\n const path = options.path || config.main\n\n const texts: Record = Object.fromEntries(\n await promiseAllFulfilled(\n Object.values(config.sections).flatMap((paths) =>\n paths.map(async (path) => {\n const response = await fetch(new URL(join(config.src, path), url))\n const text = await response.text()\n return [path, text]\n }),\n ),\n ),\n )\n\n const documents = Object.fromEntries(\n Object.entries(texts).map(([path, text]) => [path, parseDocument(text)]),\n )\n\n const history = await useHistory()\n history.record[url] = { time: Date.now(), url }\n\n return {\n url,\n path,\n config,\n texts,\n documents,\n }\n}\n","import * as Kv from 'idb-keyval'\nimport { State } from './State'\nimport { stateLoad } from './stateLoad'\n\nexport async function stateRefresh(state: State): Promise {\n const store = Kv.createStore('readonly.link/manuals', 'cache')\n const newState = await stateLoad(state)\n delete newState.path\n Object.assign(state, newState)\n await Kv.set(state.url, newState, store)\n}\n","import { State } from './State'\nimport { stateCurrentDocument } from './stateCurrentDocument'\n\nexport function stateTitle(state: State): string {\n const document = stateCurrentDocument(state)\n\n if (document === undefined) {\n return state.config.title\n }\n\n return [document.attributes.title, state.config.title].join(' | ')\n}\n","\n\n\n","import * as Kv from 'idb-keyval'\nimport { stringTrimEnd } from '../../utils/stringTrimEnd'\nimport { State } from './State'\nimport { StateOptions, stateLoad } from './stateLoad'\n\nexport async function stateLoadFromCacheFirst(\n options: StateOptions,\n): Promise {\n const { path } = options\n const url = stringTrimEnd(options.url, '/')\n\n const store = Kv.createStore('readonly.link/manuals', 'cache')\n const cached = await Kv.get(url, store)\n if (cached) {\n return {\n ...cached,\n path,\n url,\n isLoadedFromCache: true,\n }\n } else {\n const state = await stateLoad(options)\n await Kv.set(url, state, store)\n return state\n }\n}\n","\n\n\n","import { RouteRecordRaw } from 'vue-router'\nimport About from './about/About.vue'\nimport ArticleEntrance from './article-entrance/ArticleEntrance.vue'\nimport Article from './article/Article.vue'\nimport AuthorList from './author-list/AuthorList.vue'\nimport Author from './author/Author.vue'\nimport BookEntrance from './book-entrance/BookEntrance.vue'\nimport Book from './book/Book.vue'\nimport EmbeddedArticle from './embedded-article//EmbeddedArticle.vue'\nimport PageNotFound from './errors/PageNotFound.vue'\nimport Following from './following/Following.vue'\nimport History from './history/History.vue'\nimport Home from './home/Home.vue'\nimport ManualEntrance from './manual-entrance/ManualEntrance.vue'\nimport Manual from './manual/Manual.vue'\n\nexport const routes: Array = [\n { path: '/', component: Home },\n { path: '/about', component: About },\n\n { path: '/authors', component: AuthorList },\n { path: '/authors/', component: AuthorList },\n { path: '/authors/:url(.*)', component: Author },\n { path: '/authors/:url(.*)/-/:path(.*)', component: Author },\n\n { path: '/articles', component: ArticleEntrance },\n { path: '/articles/', component: ArticleEntrance },\n { path: '/articles/:url(.*)', component: Article },\n\n { path: '/embedded-article', component: EmbeddedArticle },\n\n { path: '/books', component: BookEntrance },\n { path: '/books/', component: BookEntrance },\n { path: '/books/:url(.*)', component: Book },\n { path: '/books/:url(.*)/-/:path(.*)', component: Book },\n\n { path: '/manuals', component: ManualEntrance },\n { path: '/manuals/', component: ManualEntrance },\n { path: '/manuals/:url(.*)', component: Manual },\n { path: '/manuals/:url(.*)/-/:path(.*)', component: Manual },\n\n { path: '/history', component: History },\n { path: '/following', component: Following },\n\n { path: '/:pathMatch(.*)', component: PageNotFound },\n]\n","import { createRouter, createWebHistory } from 'vue-router'\nimport { routes } from '../pages/routes'\n\nconst router = createRouter({\n history: createWebHistory(import.meta.env.BASE_URL),\n routes,\n})\n\nexport default router\n","import { createHead } from '@vueuse/head'\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport { happyHacking } from './console/happyHacking'\nimport * as Directives from './directives'\nimport router from './router'\nimport './styles/index.css'\n\nconst app = createApp(App)\n\napp.use(router)\napp.use(createHead())\n\napp.directive('focus', Directives.focus)\napp.directive('blur', Directives.blur)\napp.directive('on-click-outside', Directives.onClickOutside)\n\napp.mount('#app')\n\nhappyHacking()\n"],"file":"assets/index-C1MJOs6d.js"}