gazetta 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin-dist/assets/index-B6pVot0Y.css +1 -0
- package/admin-dist/assets/index-DniLwxJA.js +609 -0
- package/admin-dist/assets/{vendor-primevue-BnR1c_bQ.js → vendor-primevue-C0Q_YTCb.js} +330 -431
- package/admin-dist/assets/vendor-vue-D3wBSmDf.js +1 -0
- package/admin-dist/index.html +4 -4
- package/dist/admin-api/index.d.ts +26 -5
- package/dist/admin-api/index.d.ts.map +1 -1
- package/dist/admin-api/index.js +175 -13
- package/dist/admin-api/index.js.map +1 -1
- package/dist/admin-api/routes/compare.d.ts +3 -1
- package/dist/admin-api/routes/compare.d.ts.map +1 -1
- package/dist/admin-api/routes/compare.js +34 -24
- package/dist/admin-api/routes/compare.js.map +1 -1
- package/dist/admin-api/routes/fields.d.ts +2 -2
- package/dist/admin-api/routes/fields.d.ts.map +1 -1
- package/dist/admin-api/routes/fields.js +10 -3
- package/dist/admin-api/routes/fields.js.map +1 -1
- package/dist/admin-api/routes/fragments.d.ts +2 -2
- package/dist/admin-api/routes/fragments.d.ts.map +1 -1
- package/dist/admin-api/routes/fragments.js +94 -19
- package/dist/admin-api/routes/fragments.js.map +1 -1
- package/dist/admin-api/routes/history.d.ts +23 -0
- package/dist/admin-api/routes/history.d.ts.map +1 -0
- package/dist/admin-api/routes/history.js +143 -0
- package/dist/admin-api/routes/history.js.map +1 -0
- package/dist/admin-api/routes/pages.d.ts +2 -2
- package/dist/admin-api/routes/pages.d.ts.map +1 -1
- package/dist/admin-api/routes/pages.js +120 -20
- package/dist/admin-api/routes/pages.js.map +1 -1
- package/dist/admin-api/routes/preview.d.ts +2 -2
- package/dist/admin-api/routes/preview.d.ts.map +1 -1
- package/dist/admin-api/routes/preview.js +50 -15
- package/dist/admin-api/routes/preview.js.map +1 -1
- package/dist/admin-api/routes/publish.d.ts +3 -1
- package/dist/admin-api/routes/publish.d.ts.map +1 -1
- package/dist/admin-api/routes/publish.js +306 -65
- package/dist/admin-api/routes/publish.js.map +1 -1
- package/dist/admin-api/routes/site.d.ts +2 -2
- package/dist/admin-api/routes/site.d.ts.map +1 -1
- package/dist/admin-api/routes/site.js +27 -4
- package/dist/admin-api/routes/site.js.map +1 -1
- package/dist/admin-api/routes/templates.d.ts +2 -2
- package/dist/admin-api/routes/templates.d.ts.map +1 -1
- package/dist/admin-api/routes/templates.js +19 -9
- package/dist/admin-api/routes/templates.js.map +1 -1
- package/dist/admin-api/schemas/compare.d.ts +29 -0
- package/dist/admin-api/schemas/compare.d.ts.map +1 -0
- package/dist/admin-api/schemas/compare.js +30 -0
- package/dist/admin-api/schemas/compare.js.map +1 -0
- package/dist/admin-api/schemas/dependents.d.ts +15 -0
- package/dist/admin-api/schemas/dependents.d.ts.map +1 -0
- package/dist/admin-api/schemas/dependents.js +14 -0
- package/dist/admin-api/schemas/dependents.js.map +1 -0
- package/dist/admin-api/schemas/fetch.d.ts +12 -0
- package/dist/admin-api/schemas/fetch.d.ts.map +1 -0
- package/dist/admin-api/schemas/fetch.js +11 -0
- package/dist/admin-api/schemas/fetch.js.map +1 -0
- package/dist/admin-api/schemas/fields.d.ts +11 -0
- package/dist/admin-api/schemas/fields.d.ts.map +1 -0
- package/dist/admin-api/schemas/fields.js +11 -0
- package/dist/admin-api/schemas/fields.js.map +1 -0
- package/dist/admin-api/schemas/fragments.d.ts +27 -0
- package/dist/admin-api/schemas/fragments.d.ts.map +1 -0
- package/dist/admin-api/schemas/fragments.js +26 -0
- package/dist/admin-api/schemas/fragments.js.map +1 -0
- package/dist/admin-api/schemas/history.d.ts +73 -0
- package/dist/admin-api/schemas/history.d.ts.map +1 -0
- package/dist/admin-api/schemas/history.js +35 -0
- package/dist/admin-api/schemas/history.js.map +1 -0
- package/dist/admin-api/schemas/index.d.ts +32 -0
- package/dist/admin-api/schemas/index.d.ts.map +1 -0
- package/dist/admin-api/schemas/index.js +32 -0
- package/dist/admin-api/schemas/index.js.map +1 -0
- package/dist/admin-api/schemas/pages.d.ts +46 -0
- package/dist/admin-api/schemas/pages.d.ts.map +1 -0
- package/dist/admin-api/schemas/pages.js +47 -0
- package/dist/admin-api/schemas/pages.js.map +1 -0
- package/dist/admin-api/schemas/publish.d.ts +67 -0
- package/dist/admin-api/schemas/publish.d.ts.map +1 -0
- package/dist/admin-api/schemas/publish.js +60 -0
- package/dist/admin-api/schemas/publish.js.map +1 -0
- package/dist/admin-api/schemas/site.d.ts +28 -0
- package/dist/admin-api/schemas/site.d.ts.map +1 -0
- package/dist/admin-api/schemas/site.js +24 -0
- package/dist/admin-api/schemas/site.js.map +1 -0
- package/dist/admin-api/schemas/targets.d.ts +36 -0
- package/dist/admin-api/schemas/targets.d.ts.map +1 -0
- package/dist/admin-api/schemas/targets.js +19 -0
- package/dist/admin-api/schemas/targets.js.map +1 -0
- package/dist/admin-api/schemas/templates.d.ts +17 -0
- package/dist/admin-api/schemas/templates.d.ts.map +1 -0
- package/dist/admin-api/schemas/templates.js +16 -0
- package/dist/admin-api/schemas/templates.js.map +1 -0
- package/dist/admin-api/source-context.d.ts +165 -0
- package/dist/admin-api/source-context.d.ts.map +1 -0
- package/dist/admin-api/source-context.js +95 -0
- package/dist/admin-api/source-context.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/assemble.d.ts.map +1 -1
- package/dist/assemble.js +4 -1
- package/dist/assemble.js.map +1 -1
- package/dist/cli/bootstrap.d.ts +48 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +85 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/history.d.ts +45 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +165 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/index.js +691 -113
- package/dist/cli/index.js.map +1 -1
- package/dist/compare.d.ts +15 -5
- package/dist/compare.d.ts.map +1 -1
- package/dist/compare.js +83 -45
- package/dist/compare.js.map +1 -1
- package/dist/concurrency.d.ts +63 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +134 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/content-root.d.ts +38 -0
- package/dist/content-root.d.ts.map +1 -0
- package/dist/content-root.js +29 -0
- package/dist/content-root.js.map +1 -0
- package/dist/editor/mount.d.ts +1 -1
- package/dist/editor/mount.d.ts.map +1 -1
- package/dist/editor/mount.js +61 -29
- package/dist/editor/mount.js.map +1 -1
- package/dist/hash.d.ts +47 -1
- package/dist/hash.d.ts.map +1 -1
- package/dist/hash.js +107 -10
- package/dist/hash.js.map +1 -1
- package/dist/history-provider.d.ts +49 -0
- package/dist/history-provider.d.ts.map +1 -0
- package/dist/history-provider.js +226 -0
- package/dist/history-provider.js.map +1 -0
- package/dist/history-recorder.d.ts +98 -0
- package/dist/history-recorder.d.ts.map +1 -0
- package/dist/history-recorder.js +160 -0
- package/dist/history-recorder.js.map +1 -0
- package/dist/history-restorer.d.ts +46 -0
- package/dist/history-restorer.d.ts.map +1 -0
- package/dist/history-restorer.js +105 -0
- package/dist/history-restorer.js.map +1 -0
- package/dist/history.d.ts +111 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +26 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +74 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +150 -0
- package/dist/locale.js.map +1 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +16 -1
- package/dist/manifest.js.map +1 -1
- package/dist/providers/azure-blob.d.ts.map +1 -1
- package/dist/providers/azure-blob.js.map +1 -1
- package/dist/providers/r2.d.ts.map +1 -1
- package/dist/providers/r2.js +7 -4
- package/dist/providers/r2.js.map +1 -1
- package/dist/providers/s3.d.ts.map +1 -1
- package/dist/providers/s3.js +23 -15
- package/dist/providers/s3.js.map +1 -1
- package/dist/publish-locale.d.ts +44 -0
- package/dist/publish-locale.d.ts.map +1 -0
- package/dist/publish-locale.js +103 -0
- package/dist/publish-locale.js.map +1 -0
- package/dist/publish-rendered.d.ts +17 -5
- package/dist/publish-rendered.d.ts.map +1 -1
- package/dist/publish-rendered.js +114 -66
- package/dist/publish-rendered.js.map +1 -1
- package/dist/publish.d.ts +39 -3
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +166 -17
- package/dist/publish.js.map +1 -1
- package/dist/renderer.d.ts +14 -4
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +35 -23
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.d.ts +7 -2
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +66 -15
- package/dist/resolver.js.map +1 -1
- package/dist/robots.d.ts +22 -0
- package/dist/robots.d.ts.map +1 -0
- package/dist/robots.js +25 -0
- package/dist/robots.js.map +1 -0
- package/dist/seo.d.ts +56 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +72 -0
- package/dist/seo.js.map +1 -0
- package/dist/serve.d.ts +41 -3
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +206 -65
- package/dist/serve.js.map +1 -1
- package/dist/sidecars.d.ts +60 -0
- package/dist/sidecars.d.ts.map +1 -0
- package/dist/sidecars.js +231 -0
- package/dist/sidecars.js.map +1 -0
- package/dist/site-loader.d.ts +74 -6
- package/dist/site-loader.d.ts.map +1 -1
- package/dist/site-loader.js +149 -36
- package/dist/site-loader.js.map +1 -1
- package/dist/sitemap.d.ts +45 -0
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +67 -0
- package/dist/sitemap.js.map +1 -0
- package/dist/source-sidecars.d.ts +32 -0
- package/dist/source-sidecars.d.ts.map +1 -0
- package/dist/source-sidecars.js +98 -0
- package/dist/source-sidecars.js.map +1 -0
- package/dist/targets.d.ts +47 -1
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +78 -9
- package/dist/targets.js.map +1 -1
- package/dist/template-loader.d.ts +7 -3
- package/dist/template-loader.d.ts.map +1 -1
- package/dist/template-loader.js +27 -12
- package/dist/template-loader.js.map +1 -1
- package/dist/templates-scan-worker.js +1 -1
- package/dist/templates-scan-worker.js.map +1 -1
- package/dist/templates-scan.d.ts.map +1 -1
- package/dist/templates-scan.js +1 -1
- package/dist/templates-scan.js.map +1 -1
- package/dist/types.d.ts +116 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +28 -5
- package/dist/types.js.map +1 -1
- package/dist/workers/cloudflare-r2.d.ts +11 -2
- package/dist/workers/cloudflare-r2.d.ts.map +1 -1
- package/dist/workers/cloudflare-r2.js +120 -55
- package/dist/workers/cloudflare-r2.js.map +1 -1
- package/package.json +11 -2
- package/admin-dist/assets/index-Bh_y1d_l.css +0 -1
- package/admin-dist/assets/index-DjGNi6yy.js +0 -608
- package/admin-dist/assets/vendor-vue-DSjyxCX6.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,D as t,E as n,F as r,G as i,H as a,J as o,K as s,O as c,Q as l,R as u,U as d,V as f,W as p,X as ee,Y as m,Z as te,et as h,k as g,q as ne,y as _}from"./vendor-primevue-C0Q_YTCb.js";var v=typeof window<`u`,y,b=e=>y=e,x=Symbol();function S(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var C;(function(e){e.direct=`direct`,e.patchObject=`patch object`,e.patchFunction=`patch function`})(C||={});var w=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function re(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function T(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){ie(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function E(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function D(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var O=typeof navigator==`object`?navigator:{userAgent:``},k=/Macintosh/.test(O.userAgent)&&/AppleWebKit/.test(O.userAgent)&&!/Safari/.test(O.userAgent),ie=v?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!k?ae:`msSaveOrOpenBlob`in O?oe:A:()=>{};function ae(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?D(r):E(r.href)?T(e,t,n):(r.target=`_blank`,D(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){D(r)},0))}function oe(e,t=`download`,n){if(typeof e==`string`)if(E(e))T(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){D(t)})}else navigator.msSaveOrOpenBlob(re(e,n),t)}function A(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return T(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(w.HTMLElement))||`safari`in w,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||k)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:se}=Object;function ce(){let e=f(!0),t=e.run(()=>o({})),n=[],r=[],a=i({install(e){b(a),a._a=e,e.provide(x,a),e.config.globalProperties.$pinia=a,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return a}var j=()=>{};function M(e,t,n,r=j){e.add(t);let i=()=>{e.delete(t)&&r()};return!n&&a()&&s(i),i}function N(e,...t){e.forEach(e=>{e(...t)})}var le=e=>e(),P=Symbol(),F=Symbol();function I(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!t.hasOwnProperty(n))continue;let r=t[n],i=e[n];S(i)&&S(r)&&e.hasOwnProperty(n)&&!p(r)&&!d(r)?e[n]=I(i,r):e[n]=r}return e}var ue=Symbol();function de(e){return!S(e)||!Object.prototype.hasOwnProperty.call(e,ue)}var{assign:L}=Object;function fe(e){return!!(p(e)&&e.effect)}function pe(e,t,n,r){let{state:a,actions:o,getters:s}=t,c=n.state.value[e],u;function d(){return c||(n.state.value[e]=a?a():{}),L(l(n.state.value[e]),o,Object.keys(s||{}).reduce((t,r)=>(t[r]=i(_(()=>{b(n);let t=n._s.get(e);return s[r].call(t,t)})),t),{}))}return u=me(e,d,t,n,r,!0),u}function me(t,n,r={},i,a,s){let c,l=L({actions:{}},r),ee={deep:!0},m,h,g=new Set,_=new Set,v=i.state.value[t];!s&&!v&&(i.state.value[t]={}),o({});let y;function x(n){let r;m=h=!1,typeof n==`function`?(n(i.state.value[t]),r={type:C.patchFunction,storeId:t,events:void 0}):(I(i.state.value[t],n),r={type:C.patchObject,payload:n,storeId:t,events:void 0});let a=y=Symbol();e().then(()=>{y===a&&(m=!0)}),h=!0,N(g,r,i.state.value[t])}let S=s?function(){let{state:e}=r,t=e?e():{};this.$patch(e=>{L(e,t)})}:j;function w(){c.stop(),g.clear(),_.clear(),i._s.delete(t)}let re=(e,n=``)=>{if(P in e)return e[F]=n,e;let r=function(){b(i);let n=Array.from(arguments),a=new Set,o=new Set;function s(e){a.add(e)}function c(e){o.add(e)}N(_,{args:n,name:r[F],store:T,after:s,onError:c});let l;try{l=e.apply(this&&this.$id===t?this:T,n)}catch(e){throw N(o,e),e}return l instanceof Promise?l.then(e=>(N(a,e),e)).catch(e=>(N(o,e),Promise.reject(e))):(N(a,l),l)};return r[P]=!0,r[F]=n,r},T=ne({_p:i,$id:t,$onAction:M.bind(null,_),$patch:x,$reset:S,$subscribe(e,n={}){let r=M(g,e,n.detached,()=>a()),a=c.run(()=>u(()=>i.state.value[t],r=>{(n.flush===`sync`?h:m)&&e({storeId:t,type:C.direct,events:void 0},r)},L({},ee,n)));return r},$dispose:w});i._s.set(t,T);let E=(i._a&&i._a.runWithContext||le)(()=>i._e.run(()=>(c=f()).run(()=>n({action:re}))));for(let e in E){let n=E[e];p(n)&&!fe(n)||d(n)?s||(v&&de(n)&&(p(n)?n.value=v[e]:I(n,v[e])),i.state.value[t][e]=n):typeof n==`function`&&(E[e]=re(n,e),l.actions[e]=n)}return L(T,E),L(te(T),E),Object.defineProperty(T,`$state`,{get:()=>i.state.value[t],set:e=>{x(t=>{L(t,e)})}}),i._p.forEach(e=>{L(T,c.run(()=>e({store:T,app:i._a,pinia:i,options:l})))}),v&&s&&r.hydrate&&r.hydrate(T.$state,v),m=!0,h=!0,T}function he(e,t,n){let r,i=typeof t==`function`;r=i?n:t;function a(n,a){let o=c();return n||=o?g(x,null):null,n&&b(n),n=y,n._s.has(e)||(i?me(e,t,r,n):pe(e,r,n)),n._s.get(e)}return a.$id=e,a}var R=typeof document<`u`;function ge(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function _e(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&ge(e.default)}var z=Object.assign;function ve(e,t){let n={};for(let r in t){let i=t[r];n[r]=V(i)?i.map(e):e(i)}return n}var B=()=>{},V=Array.isArray;function ye(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var H=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),be=Symbol(``);H.MATCHER_NOT_FOUND,H.NAVIGATION_GUARD_REDIRECT,H.NAVIGATION_ABORTED,H.NAVIGATION_CANCELLED,H.NAVIGATION_DUPLICATED;function U(e,t){return z(Error(),{type:e,[be]:!0},t)}function W(e,t){return e instanceof Error&&be in e&&(t==null||!!(e.type&t))}var xe=Symbol(``),Se=Symbol(``),Ce=Symbol(``),we=Symbol(``),Te=Symbol(``);function Ee(){return g(Ce)}function De(e){return g(we)}var Oe=/#/g,ke=/&/g,Ae=/\//g,je=/=/g,Me=/\?/g,Ne=/\+/g,Pe=/%5B/g,Fe=/%5D/g,Ie=/%5E/g,Le=/%60/g,Re=/%7B/g,ze=/%7C/g,Be=/%7D/g,Ve=/%20/g;function He(e){return e==null?``:encodeURI(``+e).replace(ze,`|`).replace(Pe,`[`).replace(Fe,`]`)}function Ue(e){return He(e).replace(Re,`{`).replace(Be,`}`).replace(Ie,`^`)}function We(e){return He(e).replace(Ne,`%2B`).replace(Ve,`+`).replace(Oe,`%23`).replace(ke,`%26`).replace(Le,"`").replace(Re,`{`).replace(Be,`}`).replace(Ie,`^`)}function Ge(e){return We(e).replace(je,`%3D`)}function Ke(e){return He(e).replace(Oe,`%23`).replace(Me,`%3F`)}function qe(e){return Ke(e).replace(Ae,`%2F`)}function G(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var Je=/\/$/,Ye=e=>e.replace(Je,``);function Xe(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=rt(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:G(o)}}function Ze(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Qe(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function $e(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&K(t.matched[r],n.matched[i])&&et(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function K(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function et(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!tt(e[n],t[n]))return!1;return!0}function tt(e,t){return V(e)?nt(e,t):V(t)?nt(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function nt(e,t){return V(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function rt(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`)if(s===`..`)a>1&&a--;else break;return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var q={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},it=function(e){return e.pop=`pop`,e.push=`push`,e}({}),at=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function ot(e){if(!e)if(R){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`;return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),Ye(e)}var st=/^[^#]+#/;function ct(e,t){return e.replace(st,`#`)+t}function lt(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var J=()=>({left:window.scrollX,top:window.scrollY});function ut(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=lt(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function dt(e,t){return(history.state?history.state.position-t:-1)+e}var ft=new Map;function pt(e,t){ft.set(e,t)}function mt(e){let t=ft.get(e);return ft.delete(e),t}function ht(e){return typeof e==`string`||e&&typeof e==`object`}function gt(e){return typeof e==`string`||typeof e==`symbol`}function _t(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(Ne,` `),i=r.indexOf(`=`),a=G(i<0?r:r.slice(0,i)),o=i<0?null:G(r.slice(i+1));if(a in t){let e=t[a];V(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function vt(e){let t=``;for(let n in e){let r=e[n];if(n=Ge(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(V(r)?r.map(e=>e&&We(e)):[r&&We(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function yt(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=V(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function Y(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function X(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(U(H.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):ht(e)?c(U(H.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function bt(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e]))if(ge(s)){let c=(s.__vccOpts||s)[t];c&&a.push(X(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=_e(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&X(c,n,r,o,e,i)()}))}}return a}function xt(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>K(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>K(e,s))||i.push(s))}return[n,r,i]}var St=()=>location.protocol+`//`+location.host;function Ct(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Qe(n,``)}return Qe(n,e)+r+i}function wt(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Ct(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:it.pop,direction:u?u>0?at.forward:at.back:at.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(z({},e.state,{scroll:J()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function Tt(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?J():null}}function Et(e){let{history:t,location:n}=window,r={value:Ct(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:St()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,z({},t.state,Tt(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=z({},i.value,t.state,{forward:e,scroll:J()});a(o.current,o,!0),a(e,z({},Tt(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Dt(e){e=ot(e);let t=Et(e),n=wt(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=z({location:``,base:e,go:r,createHref:ct.bind(null,e)},t,n);return Object.defineProperty(i,`location`,{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,`state`,{enumerable:!0,get:()=>t.state.value}),i}var Z=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Q=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Q||{}),Ot={type:Z.Static,value:``},kt=/[a-zA-Z0-9_]/;function At(e){if(!e)return[[]];if(e===`/`)return[[Ot]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Q.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Q.Static?a.push({type:Z.Static,value:l}):n===Q.Param||n===Q.ParamRegExp||n===Q.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:Z.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;){if(c=e[s++],c===`\\`&&n!==Q.ParamRegExp){r=n,n=Q.EscapeNext;continue}switch(n){case Q.Static:c===`/`?(l&&d(),o()):c===`:`?(d(),n=Q.Param):f();break;case Q.EscapeNext:f(),n=r;break;case Q.Param:c===`(`?n=Q.ParamRegExp:kt.test(c)?f():(d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case Q.ParamRegExp:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=Q.ParamRegExpEnd:u+=c;break;case Q.ParamRegExpEnd:d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`);break}}return n===Q.ParamRegExp&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var jt=`[^/]+?`,Mt={sensitive:!1,strict:!1,start:!0,end:!0},$=function(e){return e[e._multiplier=10]=`_multiplier`,e[e.Root=90]=`Root`,e[e.Segment=40]=`Segment`,e[e.SubSegment=30]=`SubSegment`,e[e.Static=40]=`Static`,e[e.Dynamic=20]=`Dynamic`,e[e.BonusCustomRegExp=10]=`BonusCustomRegExp`,e[e.BonusWildcard=-50]=`BonusWildcard`,e[e.BonusRepeatable=-20]=`BonusRepeatable`,e[e.BonusOptional=-8]=`BonusOptional`,e[e.BonusStrict=.7000000000000001]=`BonusStrict`,e[e.BonusCaseSensitive=.25]=`BonusCaseSensitive`,e}($||{}),Nt=/[.+*?^${}()[\]/\\]/g;function Pt(e,t){let n=z({},Mt,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[$.Root];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=$.Segment+(n.sensitive?$.BonusCaseSensitive:0);if(o.type===Z.Static)r||(i+=`/`),i+=o.value.replace(Nt,`\\$&`),s+=$.Static;else if(o.type===Z.Param){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||jt;if(u!==jt){s+=$.BonusCustomRegExp;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=$.Dynamic,c&&(s+=$.BonusOptional),n&&(s+=$.BonusRepeatable),u===`.*`&&(s+=$.BonusWildcard)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=$.BonusStrict}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===Z.Static)n+=e.value;else if(e.type===Z.Param){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(V(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=V(c)?c.join(`/`):c;if(!l)if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`);n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Ft(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===$.Static+$.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===$.Static+$.Segment?1:-1:0}function It(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Ft(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(Lt(r))return 1;if(Lt(i))return-1}return i.length-r.length}function Lt(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var Rt={strict:!1,end:!0,sensitive:!1};function zt(e,t,n){let r=z(Pt(At(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Bt(e,t){let n=[],r=new Map;t=ye(Rt,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=Ht(e);s.aliasOf=r&&r.record;let l=ye(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(Ht(z({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=zt(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!Wt(d)&&o(e.name)),Jt(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:B}function o(e){if(gt(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Kt(e,n);n.splice(t,0,e),e.record.name&&!Wt(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw U(H.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=z(Vt(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Vt(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw U(H.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=z({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:Gt(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Vt(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Ht(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ut(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,`mods`,{value:{}}),t}function Ut(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function Wt(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Gt(e){return e.reduce((e,t)=>z(e,t.meta),{})}function Kt(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;It(e,t[i])<0?r=i:n=i+1}let i=qt(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function qt(e){let t=e;for(;t=t.parent;)if(Jt(t)&&It(e,t)===0)return t}function Jt({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Yt(e){let t=g(Ce),n=g(we),r=_(()=>{let n=h(e.to);return t.resolve(n)}),i=_(()=>{let{matched:e}=r.value,{length:t}=e,i=e[t-1],a=n.matched;if(!i||!a.length)return-1;let o=a.findIndex(K.bind(null,i));if(o>-1)return o;let s=en(e[t-2]);return t>1&&en(i)===s&&a[a.length-1].path!==s?a.findIndex(K.bind(null,e[t-2])):o}),a=_(()=>i.value>-1&&$t(n.params,r.value.params)),o=_(()=>i.value>-1&&i.value===n.matched.length-1&&et(n.params,r.value.params));function s(n={}){if(Qt(n)){let n=t[h(e.replace)?`replace`:`push`](h(e.to)).catch(B);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:r,href:_(()=>r.value.href),isActive:a,isExactActive:o,navigate:s}}function Xt(e){return e.length===1?e[0]:e}var Zt=n({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:Yt,setup(e,{slots:n}){let r=ne(Yt(e)),{options:i}=g(Ce),a=_(()=>({[tn(e.activeClass,i.linkActiveClass,`router-link-active`)]:r.isActive,[tn(e.exactActiveClass,i.linkExactActiveClass,`router-link-exact-active`)]:r.isExactActive}));return()=>{let i=n.default&&Xt(n.default(r));return e.custom?i:t(`a`,{"aria-current":r.isExactActive?e.ariaCurrentValue:null,href:r.href,onClick:r.navigate,class:a.value},i)}}});function Qt(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function $t(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!V(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function en(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var tn=(e,t,n)=>e??t??n,nn=n({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:n,slots:i}){let a=g(Te),s=_(()=>e.route||a.value),c=g(Se,0),l=_(()=>{let e=h(c),{matched:t}=s.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),d=_(()=>s.value.matched[l.value]);r(Se,_(()=>l.value+1)),r(xe,d),r(Te,s);let f=o();return u(()=>[f.value,d.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!K(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=s.value,a=e.name,o=d.value,c=o&&o.components[a];if(!c)return rn(i.default,{Component:c,route:r});let l=o.props[a],u=t(c,z({},l?l===!0?r.params:typeof l==`function`?l(r):l:null,n,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[a]=null)},ref:f}));return rn(i.default,{Component:u,route:r})||u}}});function rn(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var an=nn;function on(t){let n=Bt(t.routes,t),r=t.parseQuery||_t,i=t.stringifyQuery||vt,a=t.history,o=Y(),s=Y(),c=Y(),l=ee(q),u=q;R&&t.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let d=ve.bind(null,e=>``+e),f=ve.bind(null,qe),p=ve.bind(null,G);function te(e,t){let r,i;return gt(e)?(r=n.getRecordMatcher(e),i=t):i=e,n.addRoute(i,r)}function g(e){let t=n.getRecordMatcher(e);t&&n.removeRoute(t)}function ne(){return n.getRoutes().map(e=>e.record)}function _(e){return!!n.getRecordMatcher(e)}function v(e,t){if(t=z({},t||l.value),typeof e==`string`){let i=Xe(r,e,t.path),o=n.resolve({path:i.path},t),s=a.createHref(i.fullPath);return z(i,o,{params:p(o.params),hash:G(i.hash),redirectedFrom:void 0,href:s})}let o;if(e.path!=null)o=z({},e,{path:Xe(r,e.path,t.path).path});else{let n=z({},e.params);for(let e in n)n[e]??delete n[e];o=z({},e,{params:f(n)}),t.params=f(t.params)}let s=n.resolve(o,t),c=e.hash||``;s.params=d(p(s.params));let u=Ze(i,z({},e,{hash:Ue(c),path:s.path})),ee=a.createHref(u);return z({fullPath:u,hash:c,query:i===vt?yt(e.query):e.query||{}},s,{redirectedFrom:void 0,href:ee})}function y(e){return typeof e==`string`?Xe(r,e,l.value.path):z({},e)}function b(e,t){if(u!==e)return U(H.NAVIGATION_CANCELLED,{from:t,to:e})}function x(e){return w(e)}function S(e){return x(z(y(e),{replace:!0}))}function C(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=y(i):{path:i},i.params={}),z({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function w(e,t){let n=u=v(e),r=l.value,a=e.state,o=e.force,s=e.replace===!0,c=C(n,r);if(c)return w(z(y(c),{state:typeof c==`object`?z({},a,c.state):a,force:o,replace:s}),t||n);let d=n;d.redirectedFrom=t;let f;return!o&&$e(i,r,n)&&(f=U(H.NAVIGATION_DUPLICATED,{to:d,from:r}),M(r,r,!0,!1)),(f?Promise.resolve(f):E(d,r)).catch(e=>W(e)?W(e,H.NAVIGATION_GUARD_REDIRECT)?e:j(e):se(e,d,r)).then(e=>{if(e){if(W(e,H.NAVIGATION_GUARD_REDIRECT))return w(z({replace:s},y(e.to),{state:typeof e.to==`object`?z({},a,e.to.state):a,force:o}),t||d)}else e=O(d,r,!0,s,a);return D(d,r,e),e})}function re(e,t){let n=b(e,t);return n?Promise.reject(n):Promise.resolve()}function T(e){let t=P.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function E(e,t){let n,[r,i,a]=xt(e,t);n=bt(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(X(r,e,t))});let c=re.bind(null,e,t);return n.push(c),I(n).then(()=>{n=[];for(let r of o.list())n.push(X(r,e,t));return n.push(c),I(n)}).then(()=>{n=bt(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(X(r,e,t))});return n.push(c),I(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter)if(V(r.beforeEnter))for(let i of r.beforeEnter)n.push(X(i,e,t));else n.push(X(r.beforeEnter,e,t));return n.push(c),I(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=bt(a,`beforeRouteEnter`,e,t,T),n.push(c),I(n))).then(()=>{n=[];for(let r of s.list())n.push(X(r,e,t));return n.push(c),I(n)}).catch(e=>W(e,H.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function D(e,t,n){c.list().forEach(r=>T(()=>r(e,t,n)))}function O(e,t,n,r,i){let o=b(e,t);if(o)return o;let s=t===q,c=R?history.state:{};n&&(r||s?a.replace(e.fullPath,z({scroll:s&&c&&c.scroll},i)):a.push(e.fullPath,i)),l.value=e,M(e,t,n,s),j()}let k;function ie(){k||=a.listen((e,t,n)=>{if(!F.listening)return;let r=v(e),i=C(r,F.currentRoute.value);if(i){w(z(i,{replace:!0,force:!0}),r).catch(B);return}u=r;let o=l.value;R&&pt(dt(o.fullPath,n.delta),J()),E(r,o).catch(e=>W(e,H.NAVIGATION_ABORTED|H.NAVIGATION_CANCELLED)?e:W(e,H.NAVIGATION_GUARD_REDIRECT)?(w(z(y(e.to),{force:!0}),r).then(e=>{W(e,H.NAVIGATION_ABORTED|H.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===it.pop&&a.go(-1,!1)}).catch(B),Promise.reject()):(n.delta&&a.go(-n.delta,!1),se(e,r,o))).then(e=>{e||=O(r,o,!1),e&&(n.delta&&!W(e,H.NAVIGATION_CANCELLED)?a.go(-n.delta,!1):n.type===it.pop&&W(e,H.NAVIGATION_ABORTED|H.NAVIGATION_DUPLICATED)&&a.go(-1,!1)),D(r,o,e)}).catch(B)})}let ae=Y(),oe=Y(),A;function se(e,t,n){j(e);let r=oe.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function ce(){return A&&l.value!==q?Promise.resolve():new Promise((e,t)=>{ae.add([e,t])})}function j(e){return A||(A=!e,ie(),ae.list().forEach(([t,n])=>e?n(e):t()),ae.reset()),e}function M(n,r,i,a){let{scrollBehavior:o}=t;if(!R||!o)return Promise.resolve();let s=!i&&mt(dt(n.fullPath,0))||(a||!i)&&history.state&&history.state.scroll||null;return e().then(()=>o(n,r,s)).then(e=>e&&ut(e)).catch(e=>se(e,n,r))}let N=e=>a.go(e),le,P=new Set,F={currentRoute:l,listening:!0,addRoute:te,removeRoute:g,clearRoutes:n.clearRoutes,hasRoute:_,getRoutes:ne,resolve:v,options:t,push:x,replace:S,go:N,back:()=>N(-1),forward:()=>N(1),beforeEach:o.add,beforeResolve:s.add,afterEach:c.add,onError:oe.add,isReady:ce,install(e){e.component(`RouterLink`,Zt),e.component(`RouterView`,an),e.config.globalProperties.$router=F,Object.defineProperty(e.config.globalProperties,`$route`,{enumerable:!0,get:()=>h(l)}),R&&!le&&l.value===q&&(le=!0,x(a.location).catch(e=>{}));let t={};for(let e in q)Object.defineProperty(t,e,{get:()=>l.value[e],enumerable:!0});e.provide(Ce,F),e.provide(we,m(t)),e.provide(Te,l);let n=e.unmount;P.add(e),e.unmount=function(){P.delete(e),P.size<1&&(u=q,k&&k(),k=null,l.value=q,le=!1,A=!1),n()}}};function I(e){return e.reduce((e,t)=>e.then(()=>T(t)),Promise.resolve())}return F}export{ce as a,Ee as i,Dt as n,he as o,De as r,on as t};
|
package/admin-dist/index.html
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
<title>Gazetta CMS</title>
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%238b5cf6'/%3E%3Crect x='7' y='7' width='8' height='8' rx='2' fill='white'/%3E%3Crect x='17' y='7' width='8' height='8' rx='2' fill='white' opacity='.6'/%3E%3Crect x='7' y='17' width='8' height='8' rx='2' fill='white' opacity='.6'/%3E%3Crect x='17' y='17' width='8' height='8' rx='2' fill='white' opacity='.3'/%3E%3C/svg%3E">
|
|
8
8
|
<link rel="stylesheet" href="https://unpkg.com/primeicons/primeicons.css">
|
|
9
|
-
<script type="module" crossorigin src="/admin/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/admin/assets/index-DniLwxJA.js"></script>
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/admin/assets/rolldown-runtime-COnpUsM8.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-react-BipDVGow.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-tiptap-IyO99U4R.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-primevue-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-primevue-C0Q_YTCb.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-rjsf-HKBAjOmQ.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-vue-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/admin/assets/index-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/admin/assets/vendor-vue-D3wBSmDf.js">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/admin/assets/index-B6pVot0Y.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body>
|
|
19
19
|
<div id="app"></div>
|
|
@@ -1,19 +1,40 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import type { StorageProvider, TargetConfig } from '../types.js';
|
|
3
|
+
import { type SourceContext } from './source-context.js';
|
|
3
4
|
export interface AdminAppOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Pre-built SourceContext — preferred when the caller controls source-content
|
|
7
|
+
* resolution (e.g., derived from a TargetRegistry via createSourceContextFromRegistry).
|
|
8
|
+
* When provided, `storage` is optional (the context carries its own).
|
|
9
|
+
*/
|
|
10
|
+
source?: SourceContext;
|
|
4
11
|
siteDir: string;
|
|
5
|
-
storage
|
|
12
|
+
/** Fallback source storage when `source` is not provided. */
|
|
13
|
+
storage?: StorageProvider;
|
|
6
14
|
/** Directory containing template packages. Defaults to siteDir/templates. */
|
|
7
15
|
templatesDir?: string;
|
|
8
16
|
/** Directory containing admin customizations (editors, fields). Defaults to siteDir/admin. */
|
|
9
17
|
adminDir?: string;
|
|
10
18
|
/** Production mode — editors/fields are pre-bundled at /admin/editors/*.js */
|
|
11
19
|
production?: boolean;
|
|
12
|
-
/** Pre-initialized
|
|
20
|
+
/** @deprecated Pre-initialized target providers. Pass `targetConfigs` for lazy init. */
|
|
13
21
|
targets?: Map<string, StorageProvider>;
|
|
14
|
-
/**
|
|
22
|
+
/** Target configurations — providers are initialized lazily on first publish/fetch/compare. */
|
|
15
23
|
targetConfigs?: Record<string, TargetConfig>;
|
|
16
24
|
}
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
type AdminApp = Hono & {
|
|
26
|
+
invalidateTemplatesCache(): void;
|
|
27
|
+
invalidateSourceSidecars(): void;
|
|
28
|
+
writeSourceSidecar(kind: 'page' | 'fragment', name: string): Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create an admin API Hono app. Accepts a single options object.
|
|
32
|
+
*
|
|
33
|
+
* Target providers can be supplied either already-initialized via `targets`
|
|
34
|
+
* (legacy), or as configs via `targetConfigs` (lazy init on first use).
|
|
35
|
+
* Exactly one of these is expected when publish/fetch/compare routes are
|
|
36
|
+
* used; both may be present (pre-initialized entries override configs).
|
|
37
|
+
*/
|
|
38
|
+
export declare function createAdminApp(opts: AdminAppOptions): AdminApp;
|
|
39
|
+
export {};
|
|
19
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQhE,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAA;AAY5B,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wFAAwF;IACxF,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAC7C;AAED,KAAK,QAAQ,GAAG,IAAI,GAAG;IACrB,wBAAwB,IAAI,IAAI,CAAA;IAChC,wBAAwB,IAAI,IAAI,CAAA;IAChC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,QAAQ,CA+H9D"}
|
package/dist/admin-api/index.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { logger } from 'hono/logger';
|
|
4
|
+
import { scanTemplates } from '../templates-scan.js';
|
|
5
|
+
import { memoizeAsync } from '../concurrency.js';
|
|
6
|
+
import { createSourceSidecarWriter } from '../source-sidecars.js';
|
|
7
|
+
import { createContentRoot } from '../content-root.js';
|
|
8
|
+
import { createTargetRegistryView } from '../targets.js';
|
|
9
|
+
import { createHistoryProvider } from '../history-provider.js';
|
|
10
|
+
import { isHistoryEnabled, getHistoryRetention } from '../types.js';
|
|
11
|
+
import { createSourceContext, staticSourceResolver, registrySourceResolver, } from './source-context.js';
|
|
4
12
|
import { authMiddleware } from './middleware/auth.js';
|
|
5
13
|
import { siteRoutes } from './routes/site.js';
|
|
6
14
|
import { pageRoutes } from './routes/pages.js';
|
|
@@ -10,23 +18,177 @@ import { previewRoutes } from './routes/preview.js';
|
|
|
10
18
|
import { publishRoutes } from './routes/publish.js';
|
|
11
19
|
import { compareRoutes } from './routes/compare.js';
|
|
12
20
|
import { fieldRoutes } from './routes/fields.js';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
import { historyRoutes } from './routes/history.js';
|
|
22
|
+
/**
|
|
23
|
+
* Create an admin API Hono app. Accepts a single options object.
|
|
24
|
+
*
|
|
25
|
+
* Target providers can be supplied either already-initialized via `targets`
|
|
26
|
+
* (legacy), or as configs via `targetConfigs` (lazy init on first use).
|
|
27
|
+
* Exactly one of these is expected when publish/fetch/compare routes are
|
|
28
|
+
* used; both may be present (pre-initialized entries override configs).
|
|
29
|
+
*/
|
|
30
|
+
export function createAdminApp(opts) {
|
|
17
31
|
const app = new Hono();
|
|
18
32
|
app.use(logger());
|
|
19
33
|
app.use('/api/*', authMiddleware());
|
|
20
34
|
const templatesDir = opts.templatesDir ?? join(opts.siteDir, 'templates');
|
|
21
35
|
const adminDir = opts.adminDir ?? join(opts.siteDir, 'admin');
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
// scanTemplates spawns a worker thread per template (jiti import + graph
|
|
37
|
+
// hash). On a 50-template project that's ~5s of CPU on every publish +
|
|
38
|
+
// compare. Memoize at the server lifetime — the CLI's file watcher calls
|
|
39
|
+
// invalidateTemplatesCache() below on any template change.
|
|
40
|
+
//
|
|
41
|
+
// Keyed by (dir, root) as a string; different sites on one server would
|
|
42
|
+
// each get their own cache entry. For now there's only one site per
|
|
43
|
+
// server so a single memoize is enough; swap for a Map<key, Memoized> if
|
|
44
|
+
// we go multi-site per process.
|
|
45
|
+
const cachedScan = memoizeAsync(async () => scanTemplates(templatesDir, opts.siteDir.replace(/[\\/]sites[\\/][^\\/]+$/, '')));
|
|
46
|
+
const scan = (tDir, root) => (tDir === templatesDir ? cachedScan.get() : scanTemplates(tDir, root));
|
|
47
|
+
// Prefer an externally-provided SourceContext. Fall back to constructing
|
|
48
|
+
// one from opts.storage + opts.siteDir, which is the legacy shape.
|
|
49
|
+
let source;
|
|
50
|
+
let sidecarWriter;
|
|
51
|
+
if (opts.source) {
|
|
52
|
+
source = opts.source;
|
|
53
|
+
sidecarWriter =
|
|
54
|
+
opts.source.sidecarWriter ??
|
|
55
|
+
createSourceSidecarWriter({
|
|
56
|
+
contentRoot: opts.source.contentRoot,
|
|
57
|
+
scanTemplates: () => cachedScan.get(),
|
|
58
|
+
templatesDir,
|
|
59
|
+
manifest: opts.source.manifest,
|
|
60
|
+
});
|
|
61
|
+
// Backfill history on the source if the caller didn't supply one —
|
|
62
|
+
// dev bootstrap builds a bare SourceContext and relies on admin-api
|
|
63
|
+
// to wire history per the target's config. Skip when the target's
|
|
64
|
+
// site.yaml has `history.enabled: false`, or when there's no
|
|
65
|
+
// matching targetConfig (legacy single-storage path).
|
|
66
|
+
const sourceHistory = opts.source.history ?? buildHistoryForSource(opts, source);
|
|
67
|
+
if (!opts.source.sidecarWriter || !opts.source.history) {
|
|
68
|
+
source = { ...opts.source, sidecarWriter, history: sourceHistory };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (!opts.storage) {
|
|
73
|
+
throw new Error('createAdminApp: either `source` or `storage` must be provided');
|
|
74
|
+
}
|
|
75
|
+
const bootstrapRoot = createContentRoot(opts.storage, opts.siteDir);
|
|
76
|
+
sidecarWriter = createSourceSidecarWriter({
|
|
77
|
+
contentRoot: bootstrapRoot,
|
|
78
|
+
scanTemplates: () => cachedScan.get(),
|
|
79
|
+
templatesDir,
|
|
80
|
+
});
|
|
81
|
+
source = createSourceContext({
|
|
82
|
+
storage: opts.storage,
|
|
83
|
+
siteDir: opts.siteDir,
|
|
84
|
+
sidecarWriter,
|
|
85
|
+
history: buildHistoryForLegacySource(opts),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
// Build the per-request source resolver. When target configs are
|
|
89
|
+
// declared, routes honor `?target=<name>` to read from any known
|
|
90
|
+
// target. Providers are initialized lazily so dev startup doesn't
|
|
91
|
+
// pay the cost of connecting every cloud target just to serve the
|
|
92
|
+
// editable local one.
|
|
93
|
+
//
|
|
94
|
+
// Without target configs (tests, single-target setups), the resolver
|
|
95
|
+
// is static — always returns the bootstrap source.
|
|
96
|
+
let resolveSource;
|
|
97
|
+
if (opts.targetConfigs && Object.keys(opts.targetConfigs).length > 0) {
|
|
98
|
+
// Start with whatever pre-initialized providers the caller supplied
|
|
99
|
+
// (typically the editable source target from bootstrap). Missing
|
|
100
|
+
// providers are built on demand via lazyInit below.
|
|
101
|
+
const providers = new Map(opts.targets ?? []);
|
|
102
|
+
const registry = createTargetRegistryView(providers, opts.targetConfigs);
|
|
103
|
+
resolveSource = registrySourceResolver({
|
|
104
|
+
registry,
|
|
105
|
+
projectSiteDir: source.projectSiteDir,
|
|
106
|
+
sidecarWriter,
|
|
107
|
+
manifest: source.manifest,
|
|
108
|
+
// The registry's filesystem targets are already content-rooted
|
|
109
|
+
// (path=./targets/<key>); siteDir on the resolved context is empty.
|
|
110
|
+
siteDir: '',
|
|
111
|
+
lazyInit: async (name) => {
|
|
112
|
+
const config = opts.targetConfigs[name];
|
|
113
|
+
if (!config)
|
|
114
|
+
return;
|
|
115
|
+
const { createStorageProvider } = await import('../targets.js');
|
|
116
|
+
const storage = await createStorageProvider(config.storage, source.projectSiteDir, name);
|
|
117
|
+
const maybeInit = storage;
|
|
118
|
+
if (typeof maybeInit.init === 'function')
|
|
119
|
+
await maybeInit.init();
|
|
120
|
+
providers.set(name, storage);
|
|
121
|
+
},
|
|
122
|
+
// Build a HistoryProvider per target, honoring the site.yaml
|
|
123
|
+
// `history` block (enabled/retention). Returns undefined when the
|
|
124
|
+
// target has history turned off — routes no-op on absent provider.
|
|
125
|
+
buildHistory: (name, storage) => {
|
|
126
|
+
const config = opts.targetConfigs[name];
|
|
127
|
+
if (!config || !isHistoryEnabled(config))
|
|
128
|
+
return undefined;
|
|
129
|
+
return createHistoryProvider({ storage, retention: getHistoryRetention(config) });
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
resolveSource = staticSourceResolver(source);
|
|
135
|
+
}
|
|
136
|
+
app.route('/', siteRoutes(resolveSource));
|
|
137
|
+
app.route('/', pageRoutes(resolveSource));
|
|
138
|
+
app.route('/', fragmentRoutes(resolveSource));
|
|
139
|
+
app.route('/', templateRoutes(resolveSource, templatesDir, adminDir, opts.production));
|
|
140
|
+
app.route('/', previewRoutes(resolveSource, templatesDir));
|
|
141
|
+
app.route('/', publishRoutes(resolveSource, opts.targets, opts.targetConfigs, templatesDir, scan));
|
|
142
|
+
app.route('/', compareRoutes(resolveSource, opts.targets, opts.targetConfigs, templatesDir, scan));
|
|
143
|
+
app.route('/', fieldRoutes(resolveSource, adminDir));
|
|
144
|
+
app.route('/', historyRoutes(resolveSource, opts.targets, opts.targetConfigs));
|
|
145
|
+
// Exposed for the CLI's template file watcher: clears the memoized scan
|
|
146
|
+
// so the next publish/compare picks up template edits. Not part of the
|
|
147
|
+
// Hono Request interface — the CLI casts the return.
|
|
148
|
+
const appWithInvalidate = app;
|
|
149
|
+
appWithInvalidate.invalidateTemplatesCache = () => cachedScan.invalidate();
|
|
150
|
+
appWithInvalidate.invalidateSourceSidecars = () => sidecarWriter.invalidate();
|
|
151
|
+
appWithInvalidate.writeSourceSidecar = (kind, name) => sidecarWriter.writeFor(kind, name);
|
|
152
|
+
return appWithInvalidate;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build a HistoryProvider for the caller-supplied source. Used when
|
|
156
|
+
* the bootstrap gives us a SourceContext without history pre-wired
|
|
157
|
+
* (dev server, CLI scripts). Picks up the source target's config from
|
|
158
|
+
* `opts.targetConfigs` — respects `history.enabled: false`, honors the
|
|
159
|
+
* configured retention. Returns undefined when we can't identify the
|
|
160
|
+
* target or history is disabled.
|
|
161
|
+
*/
|
|
162
|
+
function buildHistoryForSource(opts, source) {
|
|
163
|
+
const name = source.targetName;
|
|
164
|
+
const config = name ? opts.targetConfigs?.[name] : undefined;
|
|
165
|
+
if (!config || !isHistoryEnabled(config))
|
|
166
|
+
return undefined;
|
|
167
|
+
return createHistoryProvider({
|
|
168
|
+
storage: source.storage,
|
|
169
|
+
retention: getHistoryRetention(config),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Legacy path: caller passed raw `opts.storage` rather than a
|
|
174
|
+
* SourceContext. No target name is available; default history to
|
|
175
|
+
* enabled with default retention, assuming the common single-target
|
|
176
|
+
* setup. Skipped when targetConfigs is absent — historical behavior
|
|
177
|
+
* (tests that rely on no `.gazetta/` writes happening).
|
|
178
|
+
*/
|
|
179
|
+
function buildHistoryForLegacySource(opts) {
|
|
180
|
+
const configs = opts.targetConfigs;
|
|
181
|
+
if (!configs)
|
|
182
|
+
return undefined;
|
|
183
|
+
// Pick the first editable target's config as the best-effort stand-in.
|
|
184
|
+
// Non-editable targets don't receive saves anyway, so the legacy
|
|
185
|
+
// single-storage path is necessarily an editable one.
|
|
186
|
+
const firstEditable = Object.entries(configs).find(([, c]) => isHistoryEnabled(c));
|
|
187
|
+
if (!firstEditable)
|
|
188
|
+
return undefined;
|
|
189
|
+
return createHistoryProvider({
|
|
190
|
+
storage: opts.storage,
|
|
191
|
+
retention: getHistoryRetention(firstEditable[1]),
|
|
192
|
+
});
|
|
31
193
|
}
|
|
32
194
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin-api/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import type { StorageProvider, TargetConfig } from '../../types.js';
|
|
3
|
-
|
|
3
|
+
import type { TemplateInfo } from '../../templates-scan.js';
|
|
4
|
+
import type { SourceContextResolver } from '../source-context.js';
|
|
5
|
+
export declare function compareRoutes(resolve: SourceContextResolver, preInitTargets?: Map<string, StorageProvider>, targetConfigs?: Record<string, TargetConfig>, templatesDir?: string, scanTemplatesInjected?: (templatesDir: string, projectRoot: string) => Promise<TemplateInfo[]>): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
4
6
|
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEjE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,qBAAqB,EAC9B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EAC7C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC5C,YAAY,CAAC,EAAE,MAAM,EACrB,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,8EAiE/F"}
|
|
@@ -1,48 +1,58 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { getType } from '../../types.js';
|
|
4
4
|
import { compareTargets } from '../../compare.js';
|
|
5
|
-
export function compareRoutes(
|
|
5
|
+
export function compareRoutes(resolve, preInitTargets, targetConfigs, templatesDir, scanTemplatesInjected) {
|
|
6
6
|
const app = new Hono();
|
|
7
7
|
let targets = preInitTargets ?? null;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
: (!targetConfigs || Object.keys(targetConfigs).length === 0)
|
|
11
|
-
? Promise.resolve(new Map())
|
|
12
|
-
: (async () => {
|
|
13
|
-
const { createTargetRegistry } = await import('../../targets.js');
|
|
14
|
-
targets = await createTargetRegistry(targetConfigs, siteDir);
|
|
15
|
-
return targets;
|
|
16
|
-
})();
|
|
17
|
-
if (!preInitTargets) {
|
|
18
|
-
initPromise.then(t => { targets = t; }).catch(() => { targets = new Map(); });
|
|
19
|
-
}
|
|
20
|
-
async function getTargets() {
|
|
8
|
+
let targetsInitPromise = null;
|
|
9
|
+
async function getTargets(projectSiteDir) {
|
|
21
10
|
if (targets)
|
|
22
11
|
return targets;
|
|
23
|
-
|
|
12
|
+
if (!targetConfigs || Object.keys(targetConfigs).length === 0) {
|
|
13
|
+
targets = new Map();
|
|
14
|
+
return targets;
|
|
15
|
+
}
|
|
16
|
+
if (!targetsInitPromise) {
|
|
17
|
+
const { createTargetRegistry } = await import('../../targets.js');
|
|
18
|
+
targetsInitPromise = createTargetRegistry(targetConfigs, projectSiteDir)
|
|
19
|
+
.then(t => {
|
|
20
|
+
targets = t;
|
|
21
|
+
return t;
|
|
22
|
+
})
|
|
23
|
+
.catch(() => {
|
|
24
|
+
targets = new Map();
|
|
25
|
+
return new Map();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return targetsInitPromise;
|
|
24
29
|
}
|
|
25
30
|
app.get('/api/compare', async (c) => {
|
|
31
|
+
// `target` = compare destination (what we're diffing against)
|
|
32
|
+
// `source` = source of the compare (which editable target to read from);
|
|
33
|
+
// defaults to the resolver's default editable target
|
|
26
34
|
const targetName = c.req.query('target');
|
|
27
35
|
if (!targetName)
|
|
28
36
|
return c.json({ error: 'Missing "target" query parameter' }, 400);
|
|
29
|
-
const
|
|
37
|
+
const source = await resolve(c.req.query('source'));
|
|
38
|
+
const { projectSiteDir } = source;
|
|
39
|
+
const t = await getTargets(projectSiteDir);
|
|
30
40
|
const targetStorage = t.get(targetName);
|
|
31
41
|
if (!targetStorage)
|
|
32
42
|
return c.json({ error: `Unknown target: ${targetName}` }, 400);
|
|
33
|
-
const tdir = templatesDir ?? join(
|
|
34
|
-
|
|
35
|
-
const projectRoot = siteDir.replace(/[\\/]sites[\\/][^\\/]+$/, '');
|
|
43
|
+
const tdir = templatesDir ?? join(projectSiteDir, 'templates');
|
|
44
|
+
const projectRoot = projectSiteDir.replace(/[\\/]sites[\\/][^\\/]+$/, '');
|
|
36
45
|
const targetConfig = targetConfigs?.[targetName];
|
|
37
|
-
const
|
|
46
|
+
const type = targetConfig ? getType(targetConfig) : 'dynamic';
|
|
38
47
|
try {
|
|
39
48
|
const result = await compareTargets({
|
|
40
|
-
|
|
49
|
+
sourceRoot: source.contentRoot,
|
|
41
50
|
target: targetStorage,
|
|
42
|
-
siteDir,
|
|
43
51
|
templatesDir: tdir,
|
|
44
52
|
projectRoot,
|
|
45
|
-
|
|
53
|
+
type,
|
|
54
|
+
scanTemplates: scanTemplatesInjected,
|
|
55
|
+
manifest: source.manifest,
|
|
46
56
|
});
|
|
47
57
|
return c.json(result);
|
|
48
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/admin-api/routes/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/admin-api/routes/compare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function fieldRoutes(
|
|
2
|
+
import type { SourceContextResolver } from '../source-context.js';
|
|
3
|
+
export declare function fieldRoutes(resolve: SourceContextResolver, adminDir?: string): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
4
4
|
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAIjE,wBAAgB,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM,8EAyB5E"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { createFilesystemProvider } from '../../providers/filesystem.js';
|
|
3
4
|
const FIELD_EXTENSIONS = ['.ts', '.tsx'];
|
|
4
|
-
export function fieldRoutes(
|
|
5
|
+
export function fieldRoutes(resolve, adminDir) {
|
|
5
6
|
const app = new Hono();
|
|
6
|
-
|
|
7
|
+
// Custom fields live at project level, outside target content storage.
|
|
8
|
+
const storage = createFilesystemProvider();
|
|
7
9
|
app.get('/api/fields', async (c) => {
|
|
8
|
-
|
|
10
|
+
// projectSiteDir is target-invariant (it's the on-disk project path).
|
|
11
|
+
// We still go through resolve() so the single source-lookup codepath
|
|
12
|
+
// serves this route too — keeps the handler shape uniform.
|
|
13
|
+
const source = await resolve(c.req.query('target'));
|
|
14
|
+
const fieldsDir = join(adminDir ?? join(source.projectSiteDir, 'admin'), 'fields');
|
|
15
|
+
if (!(await storage.exists(fieldsDir)))
|
|
9
16
|
return c.json([]);
|
|
10
17
|
const entries = await storage.readDir(fieldsDir);
|
|
11
18
|
const fields = entries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/admin-api/routes/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/admin-api/routes/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AAGxE,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AAExC,MAAM,UAAU,WAAW,CAAC,OAA8B,EAAE,QAAiB;IAC3E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,uEAAuE;IACvE,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAA;IAE1C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;QAC/B,sEAAsE;QACtE,qEAAqE;QACrE,2DAA2D;QAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAA;QAElF,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,OAAO;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;aACjF,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;QAChD,CAAC,CAAC,CAAA;QACJ,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function fragmentRoutes(
|
|
2
|
+
import type { SourceContextResolver } from '../source-context.js';
|
|
3
|
+
export declare function fragmentRoutes(resolve: SourceContextResolver): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
4
4
|
//# sourceMappingURL=fragments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../../src/admin-api/routes/fragments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAIjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,8EAmJ5D"}
|