valaxy 0.0.2 → 0.0.5

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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/bin/valaxy.js +11 -0
  4. package/dist/build-LSWX3GTV.mjs +1 -0
  5. package/dist/build-QCHURQKL.js +1 -0
  6. package/dist/chunk-7NQGUR4O.mjs +1 -0
  7. package/dist/chunk-DEKAH6ZE.js +1 -0
  8. package/dist/chunk-TIPISWPV.mjs +10 -0
  9. package/dist/chunk-ZX4FV7OA.js +10 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.js +2 -0
  12. package/dist/cli.mjs +2 -0
  13. package/dist/index.d.ts +203 -0
  14. package/dist/index.js +1 -0
  15. package/dist/index.mjs +1 -0
  16. package/package.json +75 -3
  17. package/src/client/App.vue +16 -0
  18. package/src/client/components/AppLink.vue +20 -0
  19. package/src/client/components/PostCard.vue +69 -0
  20. package/src/client/components/PostList.vue +50 -0
  21. package/src/client/components/README.md +7 -0
  22. package/src/client/components/ValaxyCopyright.vue +80 -0
  23. package/src/client/components/ValaxyFooter.vue +53 -0
  24. package/src/client/components/ValaxyHamburger.vue +21 -0
  25. package/src/client/components/ValaxyMd.vue +71 -0
  26. package/src/client/components/ValaxyOverlay.vue +44 -0
  27. package/src/client/components/ValaxyPagination.vue +122 -0
  28. package/src/client/components/ValaxyRightSidebar.vue +32 -0
  29. package/src/client/components/ValaxySidebar.vue +35 -0
  30. package/src/client/components/ValaxyToc.vue +70 -0
  31. package/src/client/composables/category.ts +101 -0
  32. package/src/client/composables/comments/index.ts +1 -0
  33. package/src/client/composables/comments/waline.ts +60 -0
  34. package/src/client/composables/common.ts +27 -0
  35. package/src/client/composables/dark.ts +4 -0
  36. package/src/client/composables/features/index.ts +1 -0
  37. package/src/client/composables/features/katex.ts +15 -0
  38. package/src/client/composables/helper.ts +26 -0
  39. package/src/client/composables/index.ts +17 -0
  40. package/src/client/composables/layout.ts +7 -0
  41. package/src/client/composables/post.ts +96 -0
  42. package/src/client/composables/search/algolia.ts +114 -0
  43. package/src/client/composables/search/index.ts +0 -0
  44. package/src/client/composables/sidebar.ts +128 -0
  45. package/src/client/composables/tag.ts +70 -0
  46. package/src/client/composables/widgets/aplayer.ts +23 -0
  47. package/src/client/composables/widgets/backToTop.ts +28 -0
  48. package/src/client/composables/widgets/codepen.ts +12 -0
  49. package/src/client/composables/widgets/index.ts +3 -0
  50. package/src/client/index.html +24 -0
  51. package/src/client/layouts/404.vue +25 -0
  52. package/src/client/layouts/README.md +14 -0
  53. package/src/client/locales/README.md +7 -0
  54. package/src/client/locales/en.yml +107 -0
  55. package/src/client/locales/zh-CN.yml +106 -0
  56. package/src/client/main.ts +30 -0
  57. package/src/client/modules/README.md +11 -0
  58. package/src/client/modules/nprogress.ts +14 -0
  59. package/src/client/modules/pinia.ts +17 -0
  60. package/src/client/modules/pwa.ts +12 -0
  61. package/src/client/modules/valaxy.ts +42 -0
  62. package/src/client/pages/README.md +20 -0
  63. package/src/client/pages/[...all].vue +15 -0
  64. package/src/client/pages/about/index.md +5 -0
  65. package/src/client/pages/hi/[name].vue +52 -0
  66. package/src/client/pages/index.vue +3 -0
  67. package/src/client/pages/page/[page].vue +12 -0
  68. package/src/client/pages/posts/index.md +5 -0
  69. package/src/client/public/_headers +3 -0
  70. package/src/client/public/favicon.svg +21 -0
  71. package/src/client/public/pwa-192x192.png +0 -0
  72. package/src/client/public/pwa-512x512.png +0 -0
  73. package/src/client/public/safari-pinned-tab.svg +41 -0
  74. package/src/client/shims.d.ts +36 -0
  75. package/src/client/stores/app.ts +14 -0
  76. package/src/client/stores/user.ts +35 -0
  77. package/src/client/styles/common/button.scss +29 -0
  78. package/src/client/styles/common/code.scss +35 -0
  79. package/src/client/styles/common/hamburger.scss +56 -0
  80. package/src/client/styles/common/markdown.scss +43 -0
  81. package/src/client/styles/common/scrollbar.scss +34 -0
  82. package/src/client/styles/common/sidebar.scss +30 -0
  83. package/src/client/styles/common/transition.scss +23 -0
  84. package/src/client/styles/css-vars/dark.scss +17 -0
  85. package/src/client/styles/css-vars/index.scss +18 -0
  86. package/src/client/styles/css-vars/light.scss +9 -0
  87. package/src/client/styles/global/helper.scss +3 -0
  88. package/src/client/styles/global/index.scss +38 -0
  89. package/src/client/styles/global/nprogress.scss +14 -0
  90. package/src/client/styles/global/reset.scss +20 -0
  91. package/src/client/styles/index.scss +18 -0
  92. package/src/client/styles/mixins/config.scss +1 -0
  93. package/src/client/styles/mixins/index.scss +2 -0
  94. package/src/client/styles/mixins/size.scss +49 -0
  95. package/src/client/styles/mixins/variable.scss +30 -0
  96. package/src/client/styles/palette.scss +61 -0
  97. package/src/client/styles/vars.scss +39 -0
  98. package/src/client/styles/widgets/banner.scss +116 -0
  99. package/src/client/types.ts +3 -0
  100. package/src/client/utils/helper.ts +30 -0
  101. package/src/client/utils/index.ts +2 -0
  102. package/src/client/utils/time.ts +23 -0
  103. package/src/core/config.ts +51 -0
  104. package/src/core/index.ts +5 -0
  105. package/src/core/utils.ts +1 -0
  106. package/src/index.ts +2 -0
  107. package/src/node/build.ts +12 -0
  108. package/src/node/cli.ts +177 -0
  109. package/src/node/config.ts +43 -0
  110. package/src/node/index.ts +1 -0
  111. package/src/node/markdown/headings.ts +24 -0
  112. package/src/node/markdown/index.ts +74 -0
  113. package/src/node/markdown/markdown-it-container.ts +53 -0
  114. package/src/node/markdown/markdown-it-katex.ts +200 -0
  115. package/src/node/markdown/parseHeader.ts +70 -0
  116. package/src/node/markdown/slugify.ts +24 -0
  117. package/src/node/options.ts +90 -0
  118. package/src/node/plugins/index.ts +91 -0
  119. package/src/node/plugins/markdown.ts +62 -0
  120. package/src/node/plugins/preset.ts +171 -0
  121. package/src/node/plugins/unocss.ts +106 -0
  122. package/src/node/plugins/valaxy.ts +1 -0
  123. package/src/node/server.ts +21 -0
  124. package/src/node/shims.d.ts +23 -0
  125. package/src/node/utils/cli.ts +105 -0
  126. package/src/node/utils/index.ts +26 -0
  127. package/src/node/vite.ts +83 -0
  128. package/src/types/config.ts +250 -0
  129. package/src/types/index.ts +2 -0
  130. package/src/types/posts.ts +107 -0
  131. package/tsup.config.ts +17 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 云游君 YunYouJun <me@yunyoujun.cn>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Valaxy
2
2
 
3
- 📄 Vite & Vue powered static blog generator.
3
+ 🌌 Next Generation Static Blog Framework, powered by Vite & Vue.
4
4
 
5
5
  Read [YunYouJun/valaxy](https://github.com/YunYouJun/valaxy) for more info.
package/bin/valaxy.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ 'use strict'
3
+ /* eslint-disable @typescript-eslint/no-var-requires */
4
+ // const path = require('path')
5
+
6
+ function main() {
7
+ const { run } = require('../dist/cli')
8
+ run()
9
+ }
10
+
11
+ main()
@@ -0,0 +1 @@
1
+ import{f as i}from"./chunk-TIPISWPV.mjs";import{mergeConfig as t,build as r}from"vite";async function m(o,n={}){let e=t(n,i(o));await r(e)}export{m as build};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZX4FV7OAjs = require('./chunk-ZX4FV7OA.js');var _vite = require('vite');async function a(o,n={}){let e=_vite.mergeConfig.call(void 0, n,_chunkZX4FV7OAjs.f.call(void 0, o));await _vite.build.call(void 0, e)}exports.build = a;
@@ -0,0 +1 @@
1
+ import{f as e}from"./chunk-TIPISWPV.mjs";import{createServer as i,mergeConfig as n}from"vite";async function f(r,o={},t={}){return process.env.EDITOR=process.env.EDITOR||"code",await i(n(o,e(r,t)))}export{f as a};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZX4FV7OAjs = require('./chunk-ZX4FV7OA.js');var _vite = require('vite');async function c(r,o={},t={}){return process.env.EDITOR=process.env.EDITOR||"code",await _vite.createServer.call(void 0, _vite.mergeConfig.call(void 0, o,_chunkZX4FV7OAjs.f.call(void 0, r,t)))}exports.a = c;
@@ -0,0 +1,10 @@
1
+ var oe=Object.create;var $=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames,A=Object.getOwnPropertySymbols,se=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty,le=Object.prototype.propertyIsEnumerable;var T=(e,r,t)=>r in e?$(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,D=(e,r)=>{for(var t in r||(r={}))F.call(r,t)&&T(e,t,r[t]);if(A)for(var t of A(r))le.call(r,t)&&T(e,t,r[t]);return e};var b=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(r,t)=>(typeof require!="undefined"?require:r)[t]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var ce=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of ae(r))!F.call(e,o)&&o!==t&&$(e,o,{get:()=>r[o],enumerable:!(i=ie(r,o))||i.enumerable});return e};var E=(e,r,t)=>(t=e!=null?oe(se(e)):{},ce(r||!e||!e.__esModule?$(t,"default",{value:e,enumerable:!0}):t,e));import v from"path";import er from"vite-ssg-sitemap";import{searchForWorkspaceRoot as P}from"vite";import ee from"fs";import qe from"consola";import We from"markdown-it";import ze from"gray-matter";import Ge from"@vitejs/plugin-vue";import Je from"vite-plugin-pages";import Ke from"vite-plugin-vue-layouts";import Be from"unplugin-vue-components/vite";import{VitePWA as Xe}from"vite-plugin-pwa";import Qe from"@intlify/vite-plugin-vue-i18n";import Ze from"vite-plugin-inspect";import re from"chalk";import z from"markdown-it-anchor";import we from"markdown-it-emoji";import $e from"markdown-it-prism";import Ce from"markdown-it-link-attributes";import Ve from"markdown-it-table-of-contents";import Y from"katex";function L(e,r){let t=e.posMax,i=!0,o=!0,a=r>0?e.src.charCodeAt(r-1):-1,n=r+1<=t?e.src.charCodeAt(r+1):-1;return(a===32||a===9||n>=48&&n<=57)&&(o=!1),(n===32||n===9)&&(i=!1),{can_open:i,can_close:o}}function me(e,r){let t,i,o,a;if(e.src[e.pos]!=="$")return!1;if(o=L(e,e.pos),!o.can_open)return r||(e.pending+="$"),e.pos+=1,!0;let n=e.pos+1;for(t=n;(t=e.src.indexOf("$",t))!==-1;){for(a=t-1;e.src[a]==="\\";)a-=1;if((t-a)%2===1)break;t+=1}return t===-1?(r||(e.pending+="$"),e.pos=n,!0):t-n===0?(r||(e.pending+="$$"),e.pos=n+1,!0):(o=L(e,t),o.can_close?(r||(i=e.push("math_inline","math",0),i.markup="$",i.content=e.src.slice(n,t)),e.pos=t+1,!0):(r||(e.pending+="$"),e.pos=n,!0))}function pe(e,r,t,i){let o,a,n,l,m=!1,c=e.bMarks[r]+e.tShift[r],d=e.eMarks[r];if(c+2>d||e.src.slice(c,c+2)!=="$$")return!1;if(c+=2,o=e.src.slice(c,d),i)return!0;for(o.trim().slice(-2)==="$$"&&(o=o.trim().slice(0,-2),m=!0),n=r;!m&&(n++,!(n>=t||(c=e.bMarks[n]+e.tShift[n],d=e.eMarks[n],c<d&&e.tShift[n]<e.blkIndent)));)e.src.slice(c,d).trim().slice(-2)==="$$"&&(l=e.src.slice(0,d).lastIndexOf("$$"),a=e.src.slice(c,l),m=!0);e.line=n+1;let u=e.push("math_block","math",0);return u.block=!0,u.content=(o&&o.trim()?`${o}
2
+ `:"")+e.getLines(r+1,n,e.tShift[r],!0)+(a&&a.trim()?a:""),u.map=[r,e.line],u.markup="$$",!0}function C(e,r){r=r||{};let t=function(n){r.displayMode=!1;try{return Y.renderToString(n,r)}catch(l){return r.throwOnError&&console.warn(l),n}},i=function(n,l){return t(n[l].content)},o=function(n){r.displayMode=!0;try{return`<p>${Y.renderToString(n,r)}</p>`}catch(l){return r.throwOnError&&console.warn(l),n}},a=function(n,l){return`${o(n[l].content)}
3
+ `};e.inline.ruler.after("escape","math_inline",me),e.block.ruler.after("blockquote","math_block",pe,{alt:["paragraph","reference","blockquote","list"]}),e.renderer.rules.math_inline=i,e.renderer.rules.math_block=a}import N from"markdown-it-container";function h(e,r){return[N,e,{render(t,i){let o=t[i],a=o.info.trim().slice(e.length).trim();return o.nesting===1?e==="details"?`<details class="${e} custom-block">${a?`<summary>${a}</summary>`:""}
4
+ `:`<div class="${e} custom-block"><p class="custom-block-title">${a||r}</p>
5
+ `:e==="details"?`</details>
6
+ `:`</div>
7
+ `}}]}var U=e=>{e.use(...h("tip","TIP")).use(...h("info","INFO")).use(...h("warning","WARNING")).use(...h("danger","WARNING")).use(...h("details","Details")).use(N,"v-pre",{render:(r,t)=>r[t].nesting===1?`<div v-pre>
8
+ `:`</div>
9
+ `})};import fe from"markdown-it-emoji/lib/data/full.json";var ue=e=>e.replace(/:(.+?):/g,(r,t)=>fe[t]||r),de=e=>e.replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#x3A;/g,":").replace(/&lt;/g,"<").replace(/&gt;/g,">"),ge=e=>e.replace(/(\[(.[^\]]+)\]\((.[^)]+)\))/g,"$2").replace(/(`|\*{1,3}|_)(.*?[^\\])\1/g,"$2").replace(/(\\)(\*|_|`|\!|<|\$)/g,"$2"),ye=e=>e.replace(/\{#([a-z0-9\-_]+?)\}\s*$/,""),he=e=>e.trim(),xe=e=>String(e).replace(/(^|[^><`\\])<.*>([^><`]|$)/g,"$1$2"),H=(...e)=>e.length===0?r=>r:e.length===1?e[0]:e.reduce((r,t)=>i=>t(r(i))),V=H(de,ue,ye,ge,he),q=H(xe,V);import{remove as ve}from"diacritics";var ke=/[\u0000-\u001F]/g,be=/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.…?/]+/g,x=e=>ve(e).replace(ke,"").replace(be,"-").replace(/\-{2,}/g,"-").replace(/^\-+|\-+$/g,"").replace(/^(\d)/,"_$1").toLowerCase();var W=(e,r=["h2","h3"])=>{e.renderer.rules.heading_open=(t,i,o,a,n)=>{let l=t[i];if(r.includes(l.tag)){let m=t[i+1].content,c=l.attrs.find(([g])=>g==="id"),d=c&&c[1],u=e.__data;(u.headers||(u.headers=[])).push({level:parseInt(l.tag.slice(1),10),title:q(m),slug:d||x(m)})}return n.renderToken(t,i,o)}};function w(e,r={}){e.use(U).use(W),e.use($e),e.use(Ce,{matcher:i=>/^https?:\/\//.test(i),attrs:{target:"_blank",rel:"noopener"}}),e.use(C,r.katex).use(z,{slugify:x,permalink:z.permalink.ariaHidden({})}).use(Ve,D({slugify:x,includeLevel:[2,3],format:V},r.toc)).use(we);let t=e.render;return e.render=(...i)=>(e.__data={},t.call(e,...i)),e}import Pe from"path";import Ie from"vite-plugin-md";import{dirname as Oe}from"path";import Me from"consola";function O(e){return e.replace(/\\/g,"/")}function Re(e,r){return r.startsWith(e)?r:e+r}function G(e){return`/@fs${Re("/",O(e))}`}function Or(e){try{return Oe(b.resolve(e))}catch{}throw Me.error(`Failed to resolve package ${e}`),new Error(`Failed to resolve package ${e}`)}var M="<!-- more -->";function J(e){let r,t=e.config.markdownIt;return[Ie(Object.assign({wrapperComponent:"ValaxyMd",headEnabled:!0,frontmatter:!0,excerpt:M,builders:[],markdownItSetup(o){t.config&&t.config(o),r=w(o,t)}},e.config.markdown)),{name:"valaxy:md",handleHotUpdate(o){let{file:a,server:n}=o;a.endsWith(".md")&&n.ws.send({type:"custom",event:"valaxy:pageHeaders",data:{path:`/${O(Pe.relative(`${e.userRoot}/pages`,a))}`,pageHeaders:r.__data.headers}})}}]}import _e from"defu";import Se from"unocss/vite";import{presetAttributify as je,presetIcons as Ae,presetTypography as Te,presetUno as Fe,presetWebFonts as De,transformerDirectives as Ee,transformerVariantGroup as Ye}from"unocss";var Le=e=>{var o,a,n,l;let r=["i-ri-archive-line","i-ri-folder-2-line","i-ri-price-tag-3-line","i-ri-cloud-line"],t="animate-fade-in prose prose-sm m-auto text-left".split(" ").concat(["rotate-y-180"]).concat(r);e.social.length&&e.social.forEach(m=>t.push(m.icon)),(a=(o=e.themeConfig.footer)==null?void 0:o.icon)!=null&&a.name&&t.push((l=(n=e.themeConfig.footer)==null?void 0:n.icon)==null?void 0:l.name),e.sponsor.methods.length&&e.sponsor.methods.forEach(m=>t.push(m.icon));let i=e.themeConfig.types;if(i)for(let m in i)t.push(i[m].icon);return t},Ne=e=>{let r={shortcuts:[["yun-main","lt-md:pl-0"],["yun-card","transition yun-transition shadow hover:shadow-lg"],["btn","px-4 py-1 rounded inline-block bg-sky-600 text-white cursor-pointer hover:bg-sky-700 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50"],["icon-btn","inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-sky-600"],["val-card","transition shadow hover:shadow-lg"]],presets:[Fe(),je(),Ae({scale:1.2}),Te(),De({fonts:{serif:"Noto Serif SC"}})],rules:[["yun-transition",{"transition-duration":"var(--yun-transition-duration)"}],["yun-text-light",{color:"var(--yun-c-text-light)"}],["font-serif",{"font-family":"var(--yun-font-serif)"}],["font-sans",{"font-family":"var(--yun-font-sans)"}],["font-mono",{"font-family":"var(--yun-font-mono)"}]],transformers:[Ee(),Ye()],safelist:Le(e.config)};return _e(e.config.unocss,r)},K=e=>{let r=Ne(e);return Se(r)};import He from"fs";import{join as R}from"path";import{loadConfig as Ue}from"unconfig";import X from"defu";var B={url:"",lang:"en",title:"Valaxy Blog",subtitle:"Next Generation Static Blog Framework.",author:{avatar:"https://cdn.jsdelivr.net/gh/YunYouJun/yun/images/meme/yun-good-with-bg.jpg",name:"YunYouJun",status:{emoji:"\u{1F60A}",message:"All at sea."}},social:[],description:"A blog generated by Valaxy.",license:{enabled:!0,language:"",type:"by-nc-sa"},sponsor:{enable:!0,title:"\u6211\u5F88\u53EF\u7231\uFF0C\u8BF7\u7ED9\u6211\u94B1",methods:[{name:"\u652F\u4ED8\u5B9D",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/alipay-qrcode.jpg",color:"#00A3EE",icon:"i-ri-alipay-line"},{name:"QQ \u652F\u4ED8",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/qqpay-qrcode.png",color:"#12B7F5",icon:"i-ri-qq-line"},{name:"\u5FAE\u4FE1\u652F\u4ED8",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/wechatpay-qrcode.jpg",color:"#2DC100",icon:"i-ri-wechat-pay-line"}]},search:{algolia:{enable:!1,appId:"",apiKey:"",indexName:"",chunkSize:5e3}},comment:{waline:{enable:!1,serverURL:""}},theme:"yun",themeConfig:{},unocss:{},markdown:{excerpt:"<!-- more -->"},markdownIt:{toc:{listType:"ol"},katex:{}}};async function Q(e={}){let{config:r,sources:t}=await Ue({sources:[{files:"valaxy.config",extensions:["ts","js","mjs","cjs","json"]}],merge:!1}),i=t[0],o=X(r,B),a=e.theme||o.theme||"yun";try{let{defaultThemeConfig:n}=await Promise.resolve().then(()=>E(b(`valaxy-theme-${a}`)));o.themeConfig=X(o.themeConfig,n)}catch{console.error(`valaxy-theme-${a} doesn't have default config`)}return{config:o,configFile:i,theme:a}}var y="@valaxyjs/config";function Z(e,r={}){let t="/@valaxy",i=e.config,o=[e.userRoot,e.themeRoot];function a(){let n=[];for(let l of o){let m=[R(l,"styles","vars.scss"),R(l,"styles","index.css"),R(l,"styles","index.scss")];for(let c of m)if(He.existsSync(c)){n.push(`import "${G(c)}"`);continue}}return n.join(`
10
+ `)}return{name:"Valaxy",configureServer(n){n.watcher.add([e.configFile,e.userRoot,e.themeRoot])},resolveId(n){return n.startsWith(t)?n:null},load(n){if(n===`/${y}`)return`export default ${JSON.stringify(JSON.stringify(i))}`;if(n==="/@valaxyjs/styles")return a();if(n.startsWith(t))return""},async handleHotUpdate(n){var s;let{file:l,server:m}=n;if(l!==e.configFile)return;let{config:c}=await Q();(s=r.onConfigReload)==null||s.call(r,c,e.config),Object.assign(e.config,c),i=c;let d=[`/${y}`];return[...Array.from(d).map(g=>m.moduleGraph.getModuleById(g))].filter(g=>!!g)}}}function te(e,r={},t="dev"){let{clientRoot:i,themeRoot:o,userRoot:a}=e,n=J(e),l=K(e),m=Z(e,r),c=new We({html:!0}),d=w(c,e.config.markdownIt),u=[i,o,a];return[Ge({include:[/\.vue$/,/\.md$/],template:{compilerOptions:{isCustomElement:s=>["meting-js"].includes(s)}}}),m,n,Je({extensions:["vue","md"],dirs:u.map(s=>`${s}/pages`),extendRoute(s){var S;let g=s.component;s.meta||(s.meta={}),s.path==="/"&&(s.meta.layout="home"),u.forEach(ne=>{let j=ne+s.component;ee.existsSync(j)&&(g=j)});let I=ee.readFileSync(g,"utf-8"),{data:k,excerpt:_}=ze(I,{excerpt_separator:M});return s.path.startsWith("/posts/")&&(s.meta.layout="post",k.date||qe.warn(`You forgot to write ${re.yellow("date")} for post: ${re.dim(`${s.component}`)}`)),s.meta=Object.assign(s.meta,{frontmatter:Object.assign({date:new Date},k),excerpt:_?c.render(_):""}),c.render(I),s.meta.headers=(S=d.__data)==null?void 0:S.headers,s.meta.frontmatter.updated&&(s.meta.frontmatter.updated=s.meta.frontmatter.date),k.layout&&(s.meta.layout=k.layout),s}}),Ke({layoutsDirs:u.map(s=>`${s}/layouts`)}),Be({extensions:["vue","md"],include:[/\.vue$/,/\.vue\?vue/,/\.md$/],allowOverrides:!0,dirs:u.map(s=>`${s}/components`)}),l,Xe({registerType:"autoUpdate",includeAssets:["favicon.svg","safari-pinned-tab.svg"],manifest:{name:"Theme Yun",short_name:"Yun",theme_color:"#ffffff",icons:[{src:"/pwa-192x192.png",sizes:"192x192",type:"image/png"},{src:"/pwa-512x512.png",sizes:"512x512",type:"image/png"},{src:"/pwa-512x512.png",sizes:"512x512",type:"image/png",purpose:"any maskable"}]}}),Qe({runtimeOnly:!0,compositionOnly:!0,include:u.map(s=>`${s}/locales/**`)}),t==="dev"&&Ze()]}function kt(e,r={},t="dev"){let{configFile:i}=e,o={resolve:{alias:{"@/":`${e.userRoot}/`,"~/":`${e.clientRoot}/`,"@valaxyjs/client":`${e.clientRoot}/`,"valaxy/package.json":`${v.resolve(e.clientRoot,"../../package.json")}`,valaxy:`${v.resolve(e.clientRoot,"..")}`,[y]:`/${y}`,"@valaxyjs/core":`${v.resolve(e.clientRoot,"../core")}`,[`valaxy-theme-${e.theme}`]:`${v.resolve(e.themeRoot)}/`}},root:e.clientRoot,plugins:te(e,r,t),server:{fs:{allow:[P(e.clientRoot),P(e.userRoot),P(e.themeRoot)]}},optimizeDeps:{entries:[v.resolve(e.clientRoot,"main.ts"),i],include:["vue","vue-router","@vueuse/core","@vueuse/head"],exclude:["vue-demi"]}};return t==="build"&&(o.ssgOptions={script:"async",formatting:"minify",onFinished(){er()}}),o}export{b as a,E as b,Or as c,Le as d,Q as e,kt as f};
@@ -0,0 +1,10 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var ne=Object.create;var w=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames,j=Object.getOwnPropertySymbols,ae=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty,se=Object.prototype.propertyIsEnumerable;var A=(e,r,t)=>r in e?w(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,F=(e,r)=>{for(var t in r||(r={}))T.call(r,t)&&A(e,t,r[t]);if(j)for(var t of j(r))se.call(r,t)&&A(e,t,r[t]);return e};var k=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(r,t)=>(typeof require!="undefined"?require:r)[t]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var le=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of ie(r))!T.call(e,o)&&o!==t&&w(e,o,{get:()=>r[o],enumerable:!(i=oe(r,o))||i.enumerable});return e};var D=(e,r,t)=>(t=e!=null?ne(ae(e)):{},le(r||!e||!e.__esModule?w(t,"default",{value:e,enumerable:!0}):t,e));var _path = require('path'); var _path2 = _interopRequireDefault(_path);var _vitessgsitemap = require('vite-ssg-sitemap'); var _vitessgsitemap2 = _interopRequireDefault(_vitessgsitemap);var _vite = require('vite');var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var _consola = require('consola'); var _consola2 = _interopRequireDefault(_consola);var _markdownit = require('markdown-it'); var _markdownit2 = _interopRequireDefault(_markdownit);var _graymatter = require('gray-matter'); var _graymatter2 = _interopRequireDefault(_graymatter);var _pluginvue = require('@vitejs/plugin-vue'); var _pluginvue2 = _interopRequireDefault(_pluginvue);var _vitepluginpages = require('vite-plugin-pages'); var _vitepluginpages2 = _interopRequireDefault(_vitepluginpages);var _vitepluginvuelayouts = require('vite-plugin-vue-layouts'); var _vitepluginvuelayouts2 = _interopRequireDefault(_vitepluginvuelayouts);var _vite3 = require('unplugin-vue-components/vite'); var _vite4 = _interopRequireDefault(_vite3);var _vitepluginpwa = require('vite-plugin-pwa');var _vitepluginvuei18n = require('@intlify/vite-plugin-vue-i18n'); var _vitepluginvuei18n2 = _interopRequireDefault(_vitepluginvuei18n);var _viteplugininspect = require('vite-plugin-inspect'); var _viteplugininspect2 = _interopRequireDefault(_viteplugininspect);var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);var _markdownitanchor = require('markdown-it-anchor'); var _markdownitanchor2 = _interopRequireDefault(_markdownitanchor);var _markdownitemoji = require('markdown-it-emoji'); var _markdownitemoji2 = _interopRequireDefault(_markdownitemoji);var _markdownitprism = require('markdown-it-prism'); var _markdownitprism2 = _interopRequireDefault(_markdownitprism);var _markdownitlinkattributes = require('markdown-it-link-attributes'); var _markdownitlinkattributes2 = _interopRequireDefault(_markdownitlinkattributes);var _markdownittableofcontents = require('markdown-it-table-of-contents'); var _markdownittableofcontents2 = _interopRequireDefault(_markdownittableofcontents);var _katex = require('katex'); var _katex2 = _interopRequireDefault(_katex);function Y(e,r){let t=e.posMax,i=!0,o=!0,a=r>0?e.src.charCodeAt(r-1):-1,n=r+1<=t?e.src.charCodeAt(r+1):-1;return(a===32||a===9||n>=48&&n<=57)&&(o=!1),(n===32||n===9)&&(i=!1),{can_open:i,can_close:o}}function ce(e,r){let t,i,o,a;if(e.src[e.pos]!=="$")return!1;if(o=Y(e,e.pos),!o.can_open)return r||(e.pending+="$"),e.pos+=1,!0;let n=e.pos+1;for(t=n;(t=e.src.indexOf("$",t))!==-1;){for(a=t-1;e.src[a]==="\\";)a-=1;if((t-a)%2===1)break;t+=1}return t===-1?(r||(e.pending+="$"),e.pos=n,!0):t-n===0?(r||(e.pending+="$$"),e.pos=n+1,!0):(o=Y(e,t),o.can_close?(r||(i=e.push("math_inline","math",0),i.markup="$",i.content=e.src.slice(n,t)),e.pos=t+1,!0):(r||(e.pending+="$"),e.pos=n,!0))}function me(e,r,t,i){let o,a,n,l,m=!1,c=e.bMarks[r]+e.tShift[r],u=e.eMarks[r];if(c+2>u||e.src.slice(c,c+2)!=="$$")return!1;if(c+=2,o=e.src.slice(c,u),i)return!0;for(o.trim().slice(-2)==="$$"&&(o=o.trim().slice(0,-2),m=!0),n=r;!m&&(n++,!(n>=t||(c=e.bMarks[n]+e.tShift[n],u=e.eMarks[n],c<u&&e.tShift[n]<e.blkIndent)));)e.src.slice(c,u).trim().slice(-2)==="$$"&&(l=e.src.slice(0,u).lastIndexOf("$$"),a=e.src.slice(c,l),m=!0);e.line=n+1;let f=e.push("math_block","math",0);return f.block=!0,f.content=(o&&o.trim()?`${o}
2
+ `:"")+e.getLines(r+1,n,e.tShift[r],!0)+(a&&a.trim()?a:""),f.map=[r,e.line],f.markup="$$",!0}function $(e,r){r=r||{};let t=function(n){r.displayMode=!1;try{return _katex2.default.renderToString(n,r)}catch(l){return r.throwOnError&&console.warn(l),n}},i=function(n,l){return t(n[l].content)},o=function(n){r.displayMode=!0;try{return`<p>${_katex2.default.renderToString(n,r)}</p>`}catch(l){return r.throwOnError&&console.warn(l),n}},a=function(n,l){return`${o(n[l].content)}
3
+ `};e.inline.ruler.after("escape","math_inline",ce),e.block.ruler.after("blockquote","math_block",me,{alt:["paragraph","reference","blockquote","list"]}),e.renderer.rules.math_inline=i,e.renderer.rules.math_block=a}var _markdownitcontainer = require('markdown-it-container'); var _markdownitcontainer2 = _interopRequireDefault(_markdownitcontainer);function y(e,r){return[_markdownitcontainer2.default,e,{render(t,i){let o=t[i],a=o.info.trim().slice(e.length).trim();return o.nesting===1?e==="details"?`<details class="${e} custom-block">${a?`<summary>${a}</summary>`:""}
4
+ `:`<div class="${e} custom-block"><p class="custom-block-title">${a||r}</p>
5
+ `:e==="details"?`</details>
6
+ `:`</div>
7
+ `}}]}var N=e=>{e.use(...y("tip","TIP")).use(...y("info","INFO")).use(...y("warning","WARNING")).use(...y("danger","WARNING")).use(...y("details","Details")).use(_markdownitcontainer2.default,"v-pre",{render:(r,t)=>r[t].nesting===1?`<div v-pre>
8
+ `:`</div>
9
+ `})};var _fulljson = require('markdown-it-emoji/lib/data/full.json'); var _fulljson2 = _interopRequireDefault(_fulljson);var fe=e=>e.replace(/:(.+?):/g,(r,t)=>_fulljson2.default[t]||r),ue=e=>e.replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#x3A;/g,":").replace(/&lt;/g,"<").replace(/&gt;/g,">"),de=e=>e.replace(/(\[(.[^\]]+)\]\((.[^)]+)\))/g,"$2").replace(/(`|\*{1,3}|_)(.*?[^\\])\1/g,"$2").replace(/(\\)(\*|_|`|\!|<|\$)/g,"$2"),ge=e=>e.replace(/\{#([a-z0-9\-_]+?)\}\s*$/,""),ye=e=>e.trim(),he=e=>String(e).replace(/(^|[^><`\\])<.*>([^><`]|$)/g,"$1$2"),U=(...e)=>e.length===0?r=>r:e.length===1?e[0]:e.reduce((r,t)=>i=>t(r(i))),C=U(ue,fe,ge,de,ye),H=U(he,C);var _diacritics = require('diacritics');var ve=/[\u0000-\u001F]/g,ke=/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.…?/]+/g,h=e=>_diacritics.remove.call(void 0, e).replace(ve,"").replace(ke,"-").replace(/\-{2,}/g,"-").replace(/^\-+|\-+$/g,"").replace(/^(\d)/,"_$1").toLowerCase();var q=(e,r=["h2","h3"])=>{e.renderer.rules.heading_open=(t,i,o,a,n)=>{let l=t[i];if(r.includes(l.tag)){let m=t[i+1].content,c=l.attrs.find(([d])=>d==="id"),u=c&&c[1],f=e.__data;(f.headers||(f.headers=[])).push({level:parseInt(l.tag.slice(1),10),title:H(m),slug:u||h(m)})}return n.renderToken(t,i,o)}};function b(e,r={}){e.use(N).use(q),e.use(_markdownitprism2.default),e.use(_markdownitlinkattributes2.default,{matcher:i=>/^https?:\/\//.test(i),attrs:{target:"_blank",rel:"noopener"}}),e.use($,r.katex).use(_markdownitanchor2.default,{slugify:h,permalink:_markdownitanchor2.default.permalink.ariaHidden({})}).use(_markdownittableofcontents2.default,F({slugify:h,includeLevel:[2,3],format:C},r.toc)).use(_markdownitemoji2.default);let t=e.render;return e.render=(...i)=>(e.__data={},t.call(e,...i)),e}var _vitepluginmd = require('vite-plugin-md'); var _vitepluginmd2 = _interopRequireDefault(_vitepluginmd);function V(e){return e.replace(/\\/g,"/")}function Me(e,r){return r.startsWith(e)?r:e+r}function z(e){return`/@fs${Me("/",V(e))}`}function Vr(e){try{return _path.dirname.call(void 0, k.resolve(e))}catch (e2){}throw _consola2.default.error(`Failed to resolve package ${e}`),new Error(`Failed to resolve package ${e}`)}var O="<!-- more -->";function G(e){let r,t=e.config.markdownIt;return[_vitepluginmd2.default.call(void 0, Object.assign({wrapperComponent:"ValaxyMd",headEnabled:!0,frontmatter:!0,excerpt:O,builders:[],markdownItSetup(o){t.config&&t.config(o),r=b(o,t)}},e.config.markdown)),{name:"valaxy:md",handleHotUpdate(o){let{file:a,server:n}=o;a.endsWith(".md")&&n.ws.send({type:"custom",event:"valaxy:pageHeaders",data:{path:`/${V(_path2.default.relative(`${e.userRoot}/pages`,a))}`,pageHeaders:r.__data.headers}})}}]}var _defu = require('defu'); var _defu2 = _interopRequireDefault(_defu);var _vite5 = require('unocss/vite'); var _vite6 = _interopRequireDefault(_vite5);var _unocss = require('unocss');var Ye=e=>{var o,a,n,l;let r=["i-ri-archive-line","i-ri-folder-2-line","i-ri-price-tag-3-line","i-ri-cloud-line"],t="animate-fade-in prose prose-sm m-auto text-left".split(" ").concat(["rotate-y-180"]).concat(r);e.social.length&&e.social.forEach(m=>t.push(m.icon)),(a=(o=e.themeConfig.footer)==null?void 0:o.icon)!=null&&a.name&&t.push((l=(n=e.themeConfig.footer)==null?void 0:n.icon)==null?void 0:l.name),e.sponsor.methods.length&&e.sponsor.methods.forEach(m=>t.push(m.icon));let i=e.themeConfig.types;if(i)for(let m in i)t.push(i[m].icon);return t},Le=e=>{let r={shortcuts:[["yun-main","lt-md:pl-0"],["yun-card","transition yun-transition shadow hover:shadow-lg"],["btn","px-4 py-1 rounded inline-block bg-sky-600 text-white cursor-pointer hover:bg-sky-700 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50"],["icon-btn","inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-sky-600"],["val-card","transition shadow hover:shadow-lg"]],presets:[_unocss.presetUno.call(void 0, ),_unocss.presetAttributify.call(void 0, ),_unocss.presetIcons.call(void 0, {scale:1.2}),_unocss.presetTypography.call(void 0, ),_unocss.presetWebFonts.call(void 0, {fonts:{serif:"Noto Serif SC"}})],rules:[["yun-transition",{"transition-duration":"var(--yun-transition-duration)"}],["yun-text-light",{color:"var(--yun-c-text-light)"}],["font-serif",{"font-family":"var(--yun-font-serif)"}],["font-sans",{"font-family":"var(--yun-font-sans)"}],["font-mono",{"font-family":"var(--yun-font-mono)"}]],transformers:[_unocss.transformerDirectives.call(void 0, ),_unocss.transformerVariantGroup.call(void 0, )],safelist:Ye(e.config)};return _defu2.default.call(void 0, e.config.unocss,r)},J=e=>{let r=Le(e);return _vite6.default.call(void 0, r)};var _unconfig = require('unconfig');var K={url:"",lang:"en",title:"Valaxy Blog",subtitle:"Next Generation Static Blog Framework.",author:{avatar:"https://cdn.jsdelivr.net/gh/YunYouJun/yun/images/meme/yun-good-with-bg.jpg",name:"YunYouJun",status:{emoji:"\u{1F60A}",message:"All at sea."}},social:[],description:"A blog generated by Valaxy.",license:{enabled:!0,language:"",type:"by-nc-sa"},sponsor:{enable:!0,title:"\u6211\u5F88\u53EF\u7231\uFF0C\u8BF7\u7ED9\u6211\u94B1",methods:[{name:"\u652F\u4ED8\u5B9D",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/alipay-qrcode.jpg",color:"#00A3EE",icon:"i-ri-alipay-line"},{name:"QQ \u652F\u4ED8",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/qqpay-qrcode.png",color:"#12B7F5",icon:"i-ri-qq-line"},{name:"\u5FAE\u4FE1\u652F\u4ED8",url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/wechatpay-qrcode.jpg",color:"#2DC100",icon:"i-ri-wechat-pay-line"}]},search:{algolia:{enable:!1,appId:"",apiKey:"",indexName:"",chunkSize:5e3}},comment:{waline:{enable:!1,serverURL:""}},theme:"yun",themeConfig:{},unocss:{},markdown:{excerpt:"<!-- more -->"},markdownIt:{toc:{listType:"ol"},katex:{}}};async function X(e={}){let{config:r,sources:t}=await _unconfig.loadConfig.call(void 0, {sources:[{files:"valaxy.config",extensions:["ts","js","mjs","cjs","json"]}],merge:!1}),i=t[0],o=_defu2.default.call(void 0, r,K),a=e.theme||o.theme||"yun";try{let{defaultThemeConfig:n}=await Promise.resolve().then(()=>D(k(`valaxy-theme-${a}`)));o.themeConfig=_defu2.default.call(void 0, o.themeConfig,n)}catch (e3){console.error(`valaxy-theme-${a} doesn't have default config`)}return{config:o,configFile:i,theme:a}}var g="@valaxyjs/config";function Q(e,r={}){let t="/@valaxy",i=e.config,o=[e.userRoot,e.themeRoot];function a(){let n=[];for(let l of o){let m=[_path.join.call(void 0, l,"styles","vars.scss"),_path.join.call(void 0, l,"styles","index.css"),_path.join.call(void 0, l,"styles","index.scss")];for(let c of m)if(_fs2.default.existsSync(c)){n.push(`import "${z(c)}"`);continue}}return n.join(`
10
+ `)}return{name:"Valaxy",configureServer(n){n.watcher.add([e.configFile,e.userRoot,e.themeRoot])},resolveId(n){return n.startsWith(t)?n:null},load(n){if(n===`/${g}`)return`export default ${JSON.stringify(JSON.stringify(i))}`;if(n==="/@valaxyjs/styles")return a();if(n.startsWith(t))return""},async handleHotUpdate(n){var s;let{file:l,server:m}=n;if(l!==e.configFile)return;let{config:c}=await X();(s=r.onConfigReload)==null||s.call(r,c,e.config),Object.assign(e.config,c),i=c;let u=[`/${g}`];return[...Array.from(u).map(d=>m.moduleGraph.getModuleById(d))].filter(d=>!!d)}}}function re(e,r={},t="dev"){let{clientRoot:i,themeRoot:o,userRoot:a}=e,n=G(e),l=J(e),m=Q(e,r),c=new (0, _markdownit2.default)({html:!0}),u=b(c,e.config.markdownIt),f=[i,o,a];return[_pluginvue2.default.call(void 0, {include:[/\.vue$/,/\.md$/],template:{compilerOptions:{isCustomElement:s=>["meting-js"].includes(s)}}}),m,n,_vitepluginpages2.default.call(void 0, {extensions:["vue","md"],dirs:f.map(s=>`${s}/pages`),extendRoute(s){var _;let d=s.component;s.meta||(s.meta={}),s.path==="/"&&(s.meta.layout="home"),f.forEach(te=>{let S=te+s.component;_fs2.default.existsSync(S)&&(d=S)});let P=_fs2.default.readFileSync(d,"utf-8"),{data:v,excerpt:I}=_graymatter2.default.call(void 0, P,{excerpt_separator:O});return s.path.startsWith("/posts/")&&(s.meta.layout="post",v.date||_consola2.default.warn(`You forgot to write ${_chalk2.default.yellow("date")} for post: ${_chalk2.default.dim(`${s.component}`)}`)),s.meta=Object.assign(s.meta,{frontmatter:Object.assign({date:new Date},v),excerpt:I?c.render(I):""}),c.render(P),s.meta.headers=(_=u.__data)==null?void 0:_.headers,s.meta.frontmatter.updated&&(s.meta.frontmatter.updated=s.meta.frontmatter.date),v.layout&&(s.meta.layout=v.layout),s}}),_vitepluginvuelayouts2.default.call(void 0, {layoutsDirs:f.map(s=>`${s}/layouts`)}),_vite4.default.call(void 0, {extensions:["vue","md"],include:[/\.vue$/,/\.vue\?vue/,/\.md$/],allowOverrides:!0,dirs:f.map(s=>`${s}/components`)}),l,_vitepluginpwa.VitePWA.call(void 0, {registerType:"autoUpdate",includeAssets:["favicon.svg","safari-pinned-tab.svg"],manifest:{name:"Theme Yun",short_name:"Yun",theme_color:"#ffffff",icons:[{src:"/pwa-192x192.png",sizes:"192x192",type:"image/png"},{src:"/pwa-512x512.png",sizes:"512x512",type:"image/png"},{src:"/pwa-512x512.png",sizes:"512x512",type:"image/png",purpose:"any maskable"}]}}),_vitepluginvuei18n2.default.call(void 0, {runtimeOnly:!0,compositionOnly:!0,include:f.map(s=>`${s}/locales/**`)}),t==="dev"&&_viteplugininspect2.default.call(void 0, )]}function vt(e,r={},t="dev"){let{configFile:i}=e,o={resolve:{alias:{"@/":`${e.userRoot}/`,"~/":`${e.clientRoot}/`,"@valaxyjs/client":`${e.clientRoot}/`,"valaxy/package.json":`${_path2.default.resolve(e.clientRoot,"../../package.json")}`,valaxy:`${_path2.default.resolve(e.clientRoot,"..")}`,[g]:`/${g}`,"@valaxyjs/core":`${_path2.default.resolve(e.clientRoot,"../core")}`,[`valaxy-theme-${e.theme}`]:`${_path2.default.resolve(e.themeRoot)}/`}},root:e.clientRoot,plugins:re(e,r,t),server:{fs:{allow:[_vite.searchForWorkspaceRoot.call(void 0, e.clientRoot),_vite.searchForWorkspaceRoot.call(void 0, e.userRoot),_vite.searchForWorkspaceRoot.call(void 0, e.themeRoot)]}},optimizeDeps:{entries:[_path2.default.resolve(e.clientRoot,"main.ts"),i],include:["vue","vue-router","@vueuse/core","@vueuse/head"],exclude:["vue-demi"]}};return t==="build"&&(o.ssgOptions={script:"async",formatting:"minify",onFinished(){_vitessgsitemap2.default.call(void 0, )}}),o}exports.a = k; exports.b = D; exports.c = Vr; exports.d = Ye; exports.e = X; exports.f = vt;
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare function run(): void;
2
+
3
+ export { run };
package/dist/cli.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkDEKAH6ZEjs = require('./chunk-DEKAH6ZE.js');var _chunkZX4FV7OAjs = require('./chunk-ZX4FV7OA.js');var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var _path = require('path'); var _path2 = _interopRequireDefault(_path);var _child_process = require('child_process');var _yargs = require('yargs'); var _yargs2 = _interopRequireDefault(_yargs);var _open = require('open'); var _open2 = _interopRequireDefault(_open);var _node = require('vite-ssg/node');var _consola = require('consola'); var _consola2 = _interopRequireDefault(_consola);var c="0.0.5";var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);var F=_debug2.default.call(void 0, "valaxy:options");function N(e){return e.startsWith("/")||/^\.\.?[\/\\]/.test(e)}function D(e,i){return e?N(e)?_path.resolve.call(void 0, _path.dirname.call(void 0, i),e):_chunkZX4FV7OAjs.c.call(void 0, `valaxy-theme-${e}/package.json`):""}async function g(e){let i=_path.resolve.call(void 0, _chunkZX4FV7OAjs.c.call(void 0, "valaxy/package.json"),"src/client"),r=_path.resolve.call(void 0, e.userRoot||process.cwd()),{config:n,configFile:t,theme:s}=await _chunkZX4FV7OAjs.e.call(void 0, e),a=D(s,r),l={clientRoot:i,userRoot:r,themeRoot:a,theme:s,config:n,configFile:t||""};return F(l),l}var _readline = require('readline'); var k = _interopRequireWildcard(_readline);var _os = require('os'); var _os2 = _interopRequireDefault(_os);var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);var u;function v(e,i,r){console.log(),console.log(` ${_chalk2.default.bold("\u{1F30C} Valaxy")} ${_chalk2.default.blue(`v${c}`)}`),console.log(),console.log(`${_chalk2.default.dim(" \u{1FA90} theme ")} > ${e.theme?_chalk2.default.green(e.theme):_chalk2.default.gray("none")}`),console.log(` ${_chalk2.default.dim("\u{1F4C1}")} ${_chalk2.default.dim(_path2.default.resolve(e.userRoot))}`),i&&(console.log(),console.log(`${_chalk2.default.dim(" Preview ")} > ${_chalk2.default.cyan(`http://localhost:${_chalk2.default.bold(i)}/`)}`),r&&Object.values(_os2.default.networkInterfaces()).forEach(n=>(n||[]).filter(t=>t.family==="IPv4"&&!t.address.includes("127.0.0.1")).forEach(({address:t})=>{console.log(`${_chalk2.default.dim(" Network ")} > ${_chalk2.default.blue(`http://${t}:${_chalk2.default.bold(i)}/`)}`)})),console.log(),console.log(`${_chalk2.default.dim(" shortcuts ")} > ${_chalk2.default.underline("r")}${_chalk2.default.dim("estart | ")}${_chalk2.default.underline("o")}${_chalk2.default.dim("pen | ")}${_chalk2.default.underline("e")}${_chalk2.default.dim("dit")}`)),console.log()}async function m(e,i){u&&await u.close();try{let r=_chunkZX4FV7OAjs.d.call(void 0, e.config).concat(e.config.unocss.safelist||[]);u=await _chunkDEKAH6ZEjs.a.call(void 0, e,i,{onConfigReload(n,t){let s=!1;n.social.some((l,b)=>!r.includes(l.icon)&&l.icon!==t.social[b].icon)&&(_consola2.default.info("Find new icon, reload server..."),_consola2.default.info(`If you do not want to reload it, write icon name in ${_chalk2.default.green("config.unocss.safelist")}.`),_consola2.default.info('For example: ["i-ri-cloud-line"]'),console.log(),s=!0),s&&m(e,i)}}),await u.listen()}catch(r){_consola2.default.error(`failed to start server. error:
2
+ `),console.error(r),process.exit(1)}}function V(e){process.stdin.resume(),process.stdin.setEncoding("utf8"),k.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("keypress",(i,r)=>{if(r.ctrl&&r.name==="c")process.exit();else{let[n]=e.filter(t=>t.name===i);if(n)try{n.action()}catch(t){console.error(`Failed to execute shortcut ${n.fullName}`,t)}}})}var h=_yargs2.default.scriptName("valaxy").usage("$0 [args]").version(c).showHelpOnFail(!1).alias("h","help").alias("v","version");h.command("* [root]","Start a local server for Valaxy",e=>O(e).option("port",{alias:"p",type:"number",describe:"port"}).option("open",{alias:"o",default:!1,type:"boolean",describe:"open in browser"}).option("remote",{default:!0,type:"boolean",describe:"listen public host and enable remote control"}).option("log",{default:"warn",type:"string",choices:["error","warn","info","silent"],describe:"log level"}).strict().help(),async({root:e,port:i,open:r,remote:n,log:t})=>{_fs2.default.existsSync(_path2.default.resolve(e,"pages"))||process.exit(0);let s=i||4859,a=await g({userRoot:e}),l={server:{watch:{ignored:[`!${a.themeRoot}/**`,`${a.userRoot}/**.md`]},port:s,strictPort:!0,open:r,host:n?"0.0.0.0":"localhost"},logLevel:t};await m(a,l),v(a,s,n),V([{name:"r",fullName:"restart",action(){m(a,l)}},{name:"o",fullName:"open",action(){_open2.default.call(void 0, `http://localhost:${s}`)}},{name:"e",fullName:"edit",action(){_child_process.exec.call(void 0, `code "${e}"`)}}])});h.command("build [root]","build your blog to static content",e=>O(e).option("ssg",{alias:"s",type:"boolean",default:!1,describe:"static site generate"}).option("output",{alias:"o",type:"string",default:"dist",describe:"output dir"}).option("base",{type:"string",describe:"output base"}).strict().help(),async({ssg:e,root:i,base:r,output:n})=>{let t=await g({userRoot:i});if(v(t),e){_consola2.default.info("use vite-ssg to do ssg build...");try{await _node.build.call(void 0, {mode:"production"})}catch(s){_consola2.default.error("[vite-ssg] An internal error occurred."),console.log(s)}}else{let{build:s}=await Promise.resolve().then(()=>_chunkZX4FV7OAjs.b.call(void 0, _chunkZX4FV7OAjs.a.call(void 0, "./build-QCHURQKL.js")));_consola2.default.info("use vite do spa build..."),await s(t,{base:r,build:{emptyOutDir:!0,outDir:_path2.default.resolve(t.userRoot,n)}})}});function O(e){return e.positional("root",{default:".",type:"string",describe:"root folder of your source files"})}function de(){h.help().parse()}exports.run = de;
package/dist/cli.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import{a as $}from"./chunk-7NQGUR4O.mjs";import{a as S,b as I,c as d,d as x,e as w}from"./chunk-TIPISWPV.mjs";import A from"fs";import O from"path";import{exec as H}from"child_process";import B from"yargs";import J from"open";import{build as M}from"vite-ssg/node";import y from"consola";var c="0.0.5";import{dirname as E,resolve as f}from"path";import F from"debug";var N=F("valaxy:options");function D(e){return e.startsWith("/")||/^\.\.?[\/\\]/.test(e)}function L(e,i){return e?D(e)?f(E(i),e):d(`valaxy-theme-${e}/package.json`):""}async function g(e){let i=f(d("valaxy/package.json"),"src/client"),r=f(e.userRoot||process.cwd()),{config:n,configFile:t,theme:s}=await w(e),a=L(s,r),l={clientRoot:i,userRoot:r,themeRoot:a,theme:s,config:n,configFile:t||""};return N(l),l}import*as V from"readline";import P from"path";import Y from"os";import o from"chalk";import p from"consola";var u;function v(e,i,r){console.log(),console.log(` ${o.bold("\u{1F30C} Valaxy")} ${o.blue(`v${c}`)}`),console.log(),console.log(`${o.dim(" \u{1FA90} theme ")} > ${e.theme?o.green(e.theme):o.gray("none")}`),console.log(` ${o.dim("\u{1F4C1}")} ${o.dim(P.resolve(e.userRoot))}`),i&&(console.log(),console.log(`${o.dim(" Preview ")} > ${o.cyan(`http://localhost:${o.bold(i)}/`)}`),r&&Object.values(Y.networkInterfaces()).forEach(n=>(n||[]).filter(t=>t.family==="IPv4"&&!t.address.includes("127.0.0.1")).forEach(({address:t})=>{console.log(`${o.dim(" Network ")} > ${o.blue(`http://${t}:${o.bold(i)}/`)}`)})),console.log(),console.log(`${o.dim(" shortcuts ")} > ${o.underline("r")}${o.dim("estart | ")}${o.underline("o")}${o.dim("pen | ")}${o.underline("e")}${o.dim("dit")}`)),console.log()}async function m(e,i){u&&await u.close();try{let r=x(e.config).concat(e.config.unocss.safelist||[]);u=await $(e,i,{onConfigReload(n,t){let s=!1;n.social.some((l,b)=>!r.includes(l.icon)&&l.icon!==t.social[b].icon)&&(p.info("Find new icon, reload server..."),p.info(`If you do not want to reload it, write icon name in ${o.green("config.unocss.safelist")}.`),p.info('For example: ["i-ri-cloud-line"]'),console.log(),s=!0),s&&m(e,i)}}),await u.listen()}catch(r){p.error(`failed to start server. error:
2
+ `),console.error(r),process.exit(1)}}function C(e){process.stdin.resume(),process.stdin.setEncoding("utf8"),V.emitKeypressEvents(process.stdin),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.on("keypress",(i,r)=>{if(r.ctrl&&r.name==="c")process.exit();else{let[n]=e.filter(t=>t.name===i);if(n)try{n.action()}catch(t){console.error(`Failed to execute shortcut ${n.fullName}`,t)}}})}var h=B.scriptName("valaxy").usage("$0 [args]").version(c).showHelpOnFail(!1).alias("h","help").alias("v","version");h.command("* [root]","Start a local server for Valaxy",e=>j(e).option("port",{alias:"p",type:"number",describe:"port"}).option("open",{alias:"o",default:!1,type:"boolean",describe:"open in browser"}).option("remote",{default:!0,type:"boolean",describe:"listen public host and enable remote control"}).option("log",{default:"warn",type:"string",choices:["error","warn","info","silent"],describe:"log level"}).strict().help(),async({root:e,port:i,open:r,remote:n,log:t})=>{A.existsSync(O.resolve(e,"pages"))||process.exit(0);let s=i||4859,a=await g({userRoot:e}),l={server:{watch:{ignored:[`!${a.themeRoot}/**`,`${a.userRoot}/**.md`]},port:s,strictPort:!0,open:r,host:n?"0.0.0.0":"localhost"},logLevel:t};await m(a,l),v(a,s,n),C([{name:"r",fullName:"restart",action(){m(a,l)}},{name:"o",fullName:"open",action(){J(`http://localhost:${s}`)}},{name:"e",fullName:"edit",action(){H(`code "${e}"`)}}])});h.command("build [root]","build your blog to static content",e=>j(e).option("ssg",{alias:"s",type:"boolean",default:!1,describe:"static site generate"}).option("output",{alias:"o",type:"string",default:"dist",describe:"output dir"}).option("base",{type:"string",describe:"output base"}).strict().help(),async({ssg:e,root:i,base:r,output:n})=>{let t=await g({userRoot:i});if(v(t),e){y.info("use vite-ssg to do ssg build...");try{await M({mode:"production"})}catch(s){y.error("[vite-ssg] An internal error occurred."),console.log(s)}}else{let{build:s}=await Promise.resolve().then(()=>I(S("./build-LSWX3GTV.mjs")));y.info("use vite do spa build..."),await s(t,{base:r,build:{emptyOutDir:!0,outDir:O.resolve(t.userRoot,n)}})}});function j(e){return e.positional("root",{default:".",type:"string",describe:"root folder of your source files"})}function fe(){h.help().parse()}export{fe as run};
@@ -0,0 +1,203 @@
1
+ import * as vite from 'vite';
2
+ import { InlineConfig } from 'vite';
3
+ import { VitePluginConfig } from 'unocss/vite';
4
+ import MarkdownIt from 'markdown-it';
5
+ import Anchor from 'markdown-it-anchor';
6
+ import { KatexOptions } from 'katex';
7
+ import Markdown from 'vite-plugin-md';
8
+
9
+ interface MarkdownOptions extends MarkdownIt.Options {
10
+ config?: (md: MarkdownIt) => void;
11
+ anchor?: {
12
+ permalink?: Anchor.AnchorOptions['permalink'];
13
+ };
14
+ toc?: any;
15
+ katex?: KatexOptions;
16
+ }
17
+
18
+ declare type ViteMdOptions = Parameters<typeof Markdown>[0];
19
+
20
+ declare type ValaxyThemeConfig = Record<string, any>;
21
+ interface SocialLink {
22
+ /**
23
+ * The title of your link
24
+ */
25
+ name: string;
26
+ link: string;
27
+ /**
28
+ * 图标名称
29
+ * https://icones.js.org/
30
+ */
31
+ icon: string;
32
+ color: string;
33
+ }
34
+ interface ValaxyConfig<T = ValaxyThemeConfig> {
35
+ /**
36
+ * Default language
37
+ * @description 默认语言
38
+ * @default 'en'
39
+ */
40
+ lang: string;
41
+ /**
42
+ * You site url in web, required for ssg, do not add / in end
43
+ * @description 站点的 URL,SSG 需要(譬如生成版权处文章永久链接),不要在末尾添加 /
44
+ */
45
+ url: string;
46
+ /**
47
+ * Site title
48
+ * @description 站点标题
49
+ */
50
+ title: string;
51
+ /**
52
+ * 副标题
53
+ */
54
+ subtitle: string;
55
+ /**
56
+ * 站点描述
57
+ */
58
+ description: string;
59
+ /**
60
+ * The owner of this blog
61
+ * @description 博客作者
62
+ */
63
+ author: {
64
+ /**
65
+ * Your name
66
+ * @description 你的名字
67
+ */
68
+ name: string;
69
+ avatar: string;
70
+ /**
71
+ * The status of you
72
+ * @description 状态
73
+ */
74
+ status: {
75
+ emoji: string;
76
+ /**
77
+ * show when hover emoji
78
+ * @description 当鼠标悬浮在图标上时显示
79
+ */
80
+ message: string;
81
+ };
82
+ };
83
+ /**
84
+ * 社交链接
85
+ */
86
+ social: SocialLink[];
87
+ /**
88
+ * search
89
+ */
90
+ search: {
91
+ algolia: {
92
+ enable: boolean;
93
+ appId: string;
94
+ apiKey: string;
95
+ indexName: string;
96
+ chunkSize: number;
97
+ };
98
+ };
99
+ /**
100
+ * comment: waline/...
101
+ */
102
+ comment: {
103
+ waline: {
104
+ enable: boolean;
105
+ serverURL: string;
106
+ };
107
+ };
108
+ /**
109
+ * The name of theme
110
+ * @description 主题名称
111
+ */
112
+ theme: string;
113
+ /**
114
+ * The config of theme
115
+ * @description 主题配置
116
+ */
117
+ themeConfig: T;
118
+ /**
119
+ * Unocss Config
120
+ */
121
+ unocss: VitePluginConfig;
122
+ /**
123
+ * The license of your posts
124
+ * @description 文章所使用的协议,默认使用 Creative Commons
125
+ * @default https://creativecommons.org/licenses/
126
+ */
127
+ license: {
128
+ /**
129
+ * Whether to show at the bottom of the article
130
+ * @description 是否显示在文章底部
131
+ * @default true
132
+ */
133
+ enabled: boolean;
134
+ /**
135
+ * Creative License Language, same with your config.lang
136
+ * when lang === 'zh-CN', use 'zh'
137
+ * @description 默认与站点语言相同
138
+ * @default 'en'
139
+ */
140
+ language: string;
141
+ /**
142
+ * Type of license
143
+ * @description 证书类型
144
+ * @default 'by-nc-sa'
145
+ */
146
+ type: 'zero' | 'by-sa' | 'by-nd' | 'by-nc' | 'by-nc-sa' | 'by-nc-nd';
147
+ };
148
+ /**
149
+ * donate for author
150
+ * @description 打赏/赞助
151
+ */
152
+ sponsor: {
153
+ enable: boolean;
154
+ title: string;
155
+ methods: {
156
+ name: string;
157
+ url: string;
158
+ color: string;
159
+ icon: string;
160
+ }[];
161
+ };
162
+ /**
163
+ * for markdown
164
+ */
165
+ markdown: ViteMdOptions;
166
+ markdownIt: MarkdownOptions;
167
+ }
168
+
169
+ interface ResolvedValaxyOptions {
170
+ /**
171
+ * Client root path
172
+ * @default 'valaxy/src/client'
173
+ */
174
+ clientRoot: string;
175
+ /**
176
+ * User root path
177
+ * @default process.cwd()
178
+ */
179
+ userRoot: string;
180
+ /**
181
+ * Theme root path
182
+ */
183
+ themeRoot: string;
184
+ /**
185
+ * Theme name
186
+ */
187
+ theme: string;
188
+ /**
189
+ * Valaxy Config
190
+ */
191
+ config: ValaxyConfig;
192
+ /**
193
+ * config file path
194
+ */
195
+ configFile: string;
196
+ }
197
+ interface ValaxyServerOptions {
198
+ onConfigReload?: (newConfig: ValaxyConfig, config: ValaxyConfig) => void;
199
+ }
200
+
201
+ declare function createServer(options: ResolvedValaxyOptions, viteConfig?: InlineConfig, serverOptions?: ValaxyServerOptions): Promise<vite.ViteDevServer>;
202
+
203
+ export { createServer };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkDEKAH6ZEjs = require('./chunk-DEKAH6ZE.js');require('./chunk-ZX4FV7OA.js');exports.createServer = _chunkDEKAH6ZEjs.a;
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{a as o}from"./chunk-7NQGUR4O.mjs";import"./chunk-TIPISWPV.mjs";export{o as createServer};
package/package.json CHANGED
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "name": "valaxy",
3
- "version": "0.0.2",
3
+ "version": "0.0.5",
4
4
  "description": "📄 Vite & Vue powered static blog generator.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
5
7
  "keywords": [
6
8
  "vite",
7
9
  "vue",
@@ -13,5 +15,75 @@
13
15
  "url": "https://www.yunyoujun.cn"
14
16
  },
15
17
  "license": "MIT",
16
- "repository": "https://github.com/YunYouJun/valaxy"
17
- }
18
+ "homepage": "https://valaxy.yyj.moe",
19
+ "repository": "https://github.com/YunYouJun/valaxy",
20
+ "bin": {
21
+ "vala": "./bin/valaxy.js",
22
+ "valaxy": "./bin/valaxy.js"
23
+ },
24
+ "devDependencies": {
25
+ "@ctrl/tinycolor": "^3.4.0",
26
+ "@iconify-json/carbon": "^1.1.1",
27
+ "@iconify-json/ri": "^1.1.1",
28
+ "@intlify/vite-plugin-vue-i18n": "^3.3.1",
29
+ "@types/katex": "^0.14.0",
30
+ "@types/markdown-it-link-attributes": "^3.0.1",
31
+ "@types/nprogress": "^0.2.0",
32
+ "@types/yargs": "^17.0.10",
33
+ "@unocss/reset": "^0.30.8",
34
+ "@vitejs/plugin-vue": "^2.3.1",
35
+ "chalk": "4",
36
+ "consola": "^2.15.3",
37
+ "critters": "^0.0.16",
38
+ "cross-env": "^7.0.3",
39
+ "debug": "^4.3.4",
40
+ "diacritics": "^1.3.0",
41
+ "https-localhost": "^4.7.1",
42
+ "katex": "^0.15.3",
43
+ "markdown-it-anchor": "^8.4.1",
44
+ "markdown-it-container": "^3.0.0",
45
+ "markdown-it-emoji": "^2.0.0",
46
+ "markdown-it-link-attributes": "^4.0.0",
47
+ "markdown-it-prism": "^2.2.3",
48
+ "markdown-it-table-of-contents": "^0.6.0",
49
+ "open": "^8.4.0",
50
+ "sass": "^1.49.10",
51
+ "star-markdown-css": "^0.3.0",
52
+ "type-fest": "^2.12.2",
53
+ "unocss": "^0.30.8",
54
+ "unplugin-vue-components": "^0.18.5",
55
+ "vite": "^2.9.1",
56
+ "vite-plugin-inspect": "^0.4.3",
57
+ "vite-plugin-md": "^0.12.4",
58
+ "vite-plugin-pages": "^0.22.0",
59
+ "vite-plugin-pwa": "^0.11.13",
60
+ "vite-plugin-vue-layouts": "^0.6.0",
61
+ "vite-ssg": "^0.19.0",
62
+ "vite-ssg-sitemap": "^0.2.0",
63
+ "vue-tsc": "^0.33.9"
64
+ },
65
+ "dependencies": {
66
+ "@vueuse/core": "^8.2.3",
67
+ "@vueuse/head": "^0.7.5",
68
+ "dayjs": "^1.11.0",
69
+ "fast-deep-equal": "^3.1.3",
70
+ "nprogress": "^0.2.0",
71
+ "pinia": "^2.0.13",
72
+ "prism-theme-vars": "^0.2.2",
73
+ "unconfig": "^0.3.2",
74
+ "vue": "^3.2.31",
75
+ "vue-demi": "^0.12.5",
76
+ "vue-i18n": "^9.1.9",
77
+ "vue-router": "^4.0.14",
78
+ "yargs": "^17.4.0"
79
+ },
80
+ "scripts": {
81
+ "build": "tsup-node",
82
+ "dev": "tsup-node --watch",
83
+ "lint": "eslint \"**/*.{vue,ts,js}\"",
84
+ "preview": "vite preview",
85
+ "preview-https": "serve dist",
86
+ "typecheck": "vue-tsc --noEmit"
87
+ },
88
+ "readme": "# Valaxy\n\n🌌 Next Generation Static Blog Framework, powered by Vite & Vue.\n\nRead [YunYouJun/valaxy](https://github.com/YunYouJun/valaxy) for more info.\n"
89
+ }
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ // https://github.com/vueuse/head
3
+ // you can use this to manipulate the document head in any components,
4
+ // they will be rendered correctly in the html results with vite-ssg
5
+ import { useHead } from '@vueuse/head'
6
+ useHead({
7
+ title: 'Theme Yun',
8
+ meta: [
9
+ { name: 'description', content: 'Theme Yun' },
10
+ ],
11
+ })
12
+ </script>
13
+
14
+ <template>
15
+ <router-view />
16
+ </template>
@@ -0,0 +1,20 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+
4
+ const props = defineProps<{
5
+ to: string
6
+ }>()
7
+
8
+ const isExternalLink = computed(() => {
9
+ return typeof props.to === 'string' && props.to.startsWith('http')
10
+ })
11
+ </script>
12
+
13
+ <template>
14
+ <a v-if="isExternalLink" v-bind="$attrs" :href="to" target="_blank">
15
+ <slot />
16
+ </a>
17
+ <router-link v-else v-bind="$props">
18
+ <slot />
19
+ </router-link>
20
+ </template>
@@ -0,0 +1,69 @@
1
+ <script lang="ts" setup>
2
+ import { useI18n } from 'vue-i18n'
3
+ import type { Post } from '../../types'
4
+ import { usePostProperty } from '~/composables'
5
+
6
+ const props = defineProps<{
7
+ post: Post
8
+ }>()
9
+
10
+ const { t } = useI18n()
11
+
12
+ const { icon, styles } = usePostProperty(props.post.type)
13
+ </script>
14
+
15
+ <template>
16
+ <YunCard m="y-4 auto" class="post-card" :style="styles">
17
+ <div v-if="post.top" class="post-top-icon">
18
+ <div i-ri-pushpin-line />
19
+ </div>
20
+
21
+ <AppLink
22
+ class="post-title-link"
23
+ :to="post.path || ''"
24
+ m="t-3"
25
+ >
26
+ <div class="flex justify-center items-center title text-2xl" font="serif black">
27
+ <div v-if="post.type" class="inline-flex" m="r-1" :class="icon" />{{ post.title }}
28
+ </div>
29
+ </AppLink>
30
+
31
+ <YunPostMeta m="b-4" :frontmatter="post" />
32
+
33
+ <div v-if="post.excerpt" class="markdown-body" text="left" w="full" p="x-6 lt-sm:4" v-html="post.excerpt" />
34
+
35
+ <a
36
+ v-if="post.url"
37
+ :href="post.url"
38
+ class="post-link-btn shadow hover:shadow-md"
39
+ rounded
40
+ target="_blank"
41
+ m="b-4"
42
+ >
43
+ {{ t('post.view_link') }}
44
+ </a>
45
+
46
+ <div v-if="post.categories || post.tags" w="full" class="yun-card-actions flex justify-between" border="t" text="sm">
47
+ <router-link
48
+ v-if="post.categories"
49
+ :to="{
50
+ path: '/categories/',
51
+ query: {category: Array.isArray(post.categories) ? post.categories[post.categories.length - 1] : post.categories}
52
+ }"
53
+ class="post-categories inline-flex justify-center items-center" m="l-2"
54
+ >
55
+ <div m="x-1" i-ri-folder-2-line />
56
+ {{ Array.isArray(post.categories) ? post.categories.join(' > ') : post.categories }}
57
+ </router-link>
58
+
59
+ <div class="post-tags inline-flex" m="r-2">
60
+ <template v-if="post.tags">
61
+ <router-link v-for="tag,i in post.tags" :key="i" :to="{path: '/tags/', query: {tag: tag}}" m="x-1" class="post-tag inline-flex justify-center items-center">
62
+ <div m="r-1" i-ri-price-tag-3-line />
63
+ {{ tag }}
64
+ </router-link>
65
+ </template>
66
+ </div>
67
+ </div>
68
+ </YunCard>
69
+ </template>
@@ -0,0 +1,50 @@
1
+ <script setup lang="ts">
2
+ import { computed, ref } from 'vue'
3
+ import type { Post } from 'valaxy'
4
+ import { usePostList } from '~/composables'
5
+
6
+ const props = withDefaults(defineProps<{
7
+ type?: string
8
+ posts?: Post[]
9
+ curPage?: number
10
+ }>(), {
11
+ curPage: 1,
12
+ })
13
+
14
+ const pageSize = ref(7)
15
+
16
+ const routes = usePostList({ type: props.type || '' })
17
+ const posts = computed(() => props.posts || routes.value)
18
+ const displayedPosts = computed(() => posts.value.slice((props.curPage - 1) * pageSize.value, props.curPage * pageSize.value))
19
+ </script>
20
+
21
+ <template>
22
+ <ul w="full" p="x-4 lt-sm:0">
23
+ <template v-if="!displayedPosts.length">
24
+ <div py2 op50>
25
+ 博主还什么都没写哦~
26
+ </div>
27
+ </template>
28
+
29
+ <Transition v-for="route, i in displayedPosts" :key="i" name="fade">
30
+ <PostCard :post="route" />
31
+ </Transition>
32
+ </ul>
33
+
34
+ <ValaxyPagination :cur-page="curPage" :page-size="pageSize" :total="posts.length" />
35
+ </template>
36
+
37
+ <style lang="scss">
38
+ .yun-card-actions {
39
+ border-top: 1px solid rgba(122, 122, 122, 0.15);
40
+ min-height: 2.5rem;
41
+ }
42
+
43
+ .post-categories {
44
+ color: var(--yun-c-text);
45
+ }
46
+
47
+ .post-tag {
48
+ color: var(--yun-c-text);
49
+ }
50
+ </style>