@heycys/gallery 0.2.1 → 0.2.3
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/THIRD-PARTY-NOTICES.md +1 -1
- package/browser/editor/page/annotate/index.mjs +3 -2
- package/browser/editor/page/board/index.mjs +2 -1
- package/browser/editor/page/board/settings.mjs +2 -1
- package/browser/editor/page/core.mjs +3 -2
- package/browser/editor/page/custom-page.mjs +4 -3
- package/browser/editor/page/editor.mjs +13 -7
- package/browser/editor/page/emoji-picker/support.mjs +3 -2
- package/browser/editor/page/links/index.mjs +1 -12
- package/browser/editor/page/links/pages.mjs +3 -2
- package/browser/editor/page/outline/folds.mjs +3 -0
- package/browser/editor/page/post.mjs +2 -1
- package/browser/editor/page/present-links.mjs +4 -3
- package/browser/editor/page/present-shell.mjs +3 -58
- package/browser/editor/page/session.mjs +3 -37
- package/browser/editor/page/storage.mjs +5 -5
- package/browser/shared/component-catalog.mjs +2 -2
- package/browser/shared/drafts.mjs +26 -51
- package/browser/shared/emoji/icon-value.mjs +2 -1
- package/browser/shared/extension-manifest.mjs +90 -0
- package/browser/shared/extensions.mjs +26 -16
- package/browser/shared/http.mjs +1 -1
- package/browser/shared/i18n/en.mjs +46 -15
- package/browser/shared/media.mjs +2 -1
- package/browser/shared/outline.mjs +11 -51
- package/browser/shared/page-address.mjs +8 -15
- package/browser/shared/paths.mjs +2 -1
- package/browser/shared/preferences.mjs +3 -1
- package/browser/shared/preview-server.mjs +51 -63
- package/browser/shared/service-location.mjs +18 -0
- package/browser/shared/session.mjs +3 -6
- package/browser/shared/workspace-address.mjs +22 -0
- package/browser/shared/workspace-columns.mjs +1 -2
- package/browser/shared/workspace-registry.mjs +6 -40
- package/browser/shared/workspace.mjs +3 -6
- package/browser/shared/writing-preferences.mjs +6 -4
- package/dist/{chunk-5MEXZ2UF.mjs → chunk-225ALKYI.mjs} +1 -1
- package/dist/{chunk-7N2LPG33.mjs → chunk-2HS7ZBPU.mjs} +1 -1
- package/dist/chunk-3F57LEN5.mjs +2 -0
- package/dist/{chunk-MKTX5PGV.mjs → chunk-43B75J5T.mjs} +1 -1
- package/dist/{chunk-VKSRM7EY.mjs → chunk-4B2TB5K2.mjs} +1 -1
- package/dist/{chunk-LV24RY2E.mjs → chunk-4K5KC6V2.mjs} +1 -1
- package/dist/chunk-5GK7HS62.mjs +2 -0
- package/dist/chunk-6GV3CBB2.mjs +2 -0
- package/dist/{chunk-TOE6DPLH.mjs → chunk-6NLXUKAY.mjs} +1 -1
- package/dist/{chunk-ZCP7BTOZ.mjs → chunk-6QBHU4DF.mjs} +1 -1
- package/dist/{chunk-QXVNUASA.mjs → chunk-6QWQXHAV.mjs} +1 -1
- package/dist/chunk-6XD6U3QA.mjs +5 -0
- package/dist/{chunk-DKR7LFIY.mjs → chunk-6Y3HYOBM.mjs} +1 -1
- package/dist/{chunk-36FIRJIF.mjs → chunk-742D2WWJ.mjs} +2 -2
- package/dist/{chunk-7M7UPWU6.mjs → chunk-7EFHNQ5B.mjs} +1 -1
- package/dist/{chunk-2GKGEVMR.mjs → chunk-7UZUQQ7Q.mjs} +25 -24
- package/dist/{chunk-VPVOAJ7X.mjs → chunk-AGDILNWB.mjs} +1 -1
- package/dist/{chunk-5IIH335D.mjs → chunk-ALZ6ZENZ.mjs} +1 -1
- package/dist/{chunk-G4YP7GVC.mjs → chunk-BFJGHSQN.mjs} +1 -1
- package/dist/{chunk-AMDGVDNV.mjs → chunk-BQNTTFPL.mjs} +1 -1
- package/dist/chunk-BX5AKINW.mjs +15 -0
- package/dist/{chunk-PAFSFVYB.mjs → chunk-BYNPEUDS.mjs} +1 -1
- package/dist/{chunk-74RPP2M2.mjs → chunk-C564NU2H.mjs} +1 -1
- package/dist/{chunk-DH6GMDNN.mjs → chunk-CRDG6EF2.mjs} +1 -1
- package/dist/{chunk-7XDYK3UC.mjs → chunk-E7656LR7.mjs} +1 -1
- package/dist/{chunk-KFZBYDIS.mjs → chunk-ECZBLQKK.mjs} +1 -1
- package/dist/{chunk-ZEY2RLBT.mjs → chunk-ERLAIBOA.mjs} +2 -2
- package/dist/{chunk-YFJU3O7G.mjs → chunk-FJLM7YE7.mjs} +1 -1
- package/dist/{chunk-AFGUR7SY.mjs → chunk-FNCCVGKX.mjs} +1 -1
- package/dist/{chunk-VNUWREXU.mjs → chunk-FOJ3K5Z3.mjs} +1 -1
- package/dist/{chunk-WCWYNFDF.mjs → chunk-FQ72LZHB.mjs} +1 -1
- package/dist/chunk-G7N7YFVD.mjs +2 -0
- package/dist/chunk-GIRXJBGC.mjs +2 -0
- package/dist/{chunk-VA3KAQZD.mjs → chunk-GKOBB6DH.mjs} +1 -1
- package/dist/chunk-GMJD7ID3.mjs +2 -0
- package/dist/chunk-GQJMVSSN.mjs +2 -0
- package/dist/{chunk-QZ35UAB4.mjs → chunk-GRAXKKG4.mjs} +1 -1
- package/dist/{chunk-SAHS56QM.mjs → chunk-HX4DLE3J.mjs} +1 -1
- package/dist/{chunk-2RKIHJI2.mjs → chunk-HYMEEXKN.mjs} +1 -1
- package/dist/{chunk-QK3VISCA.mjs → chunk-IA4PSIMD.mjs} +1 -1
- package/dist/chunk-IS7N3N6Q.mjs +168 -0
- package/dist/{chunk-CZ5KJSGK.mjs → chunk-JJNHKGTD.mjs} +1 -1
- package/dist/chunk-JPG2LBQM.mjs +11 -0
- package/dist/chunk-JYK5WJPM.mjs +2 -0
- package/dist/{chunk-LE44MD3O.mjs → chunk-KLQP46Y3.mjs} +1 -1
- package/dist/chunk-L55NOXBE.mjs +4 -0
- package/dist/{chunk-FXQBADMN.mjs → chunk-LCB6MARS.mjs} +1 -1
- package/dist/{chunk-SOD23RGL.mjs → chunk-LJLVCU6W.mjs} +8 -8
- package/dist/{chunk-NAGMRVW4.mjs → chunk-LKX55H76.mjs} +1 -1
- package/dist/chunk-LMUZQK5O.mjs +2 -0
- package/dist/{chunk-CG3UHDKH.mjs → chunk-M4NRDYI5.mjs} +1 -1
- package/dist/{chunk-HM4E43VM.mjs → chunk-MAFIGVXY.mjs} +1 -1
- package/dist/chunk-NLDF35P5.mjs +2 -0
- package/dist/{chunk-3OFXMN6N.mjs → chunk-NMF3IPYA.mjs} +1 -1
- package/dist/chunk-ONKC4BCC.mjs +2 -0
- package/dist/{chunk-CPS4SRPF.mjs → chunk-OU6ZZVBX.mjs} +2 -2
- package/dist/{chunk-NWRZXELO.mjs → chunk-PAREWQGB.mjs} +1 -1
- package/dist/{chunk-BYSF5UMM.mjs → chunk-PKVK6WFC.mjs} +2 -2
- package/dist/{chunk-4AMTKWDO.mjs → chunk-PUOQ65NC.mjs} +1 -1
- package/dist/{chunk-L7W624FD.mjs → chunk-QJAVCTY7.mjs} +1 -1
- package/dist/{chunk-6MPKCH3P.mjs → chunk-QNECWMGR.mjs} +1 -1
- package/dist/{chunk-HBAUKKQH.mjs → chunk-QP7BOHE4.mjs} +1 -1
- package/dist/chunk-QVGOPHOF.mjs +2 -0
- package/dist/{chunk-NFABH3QW.mjs → chunk-RRKJMHNX.mjs} +2 -2
- package/dist/chunk-S3SX3COT.mjs +20 -0
- package/dist/chunk-SQ3FQCCN.mjs +8 -0
- package/dist/{chunk-ZO7SFB2E.mjs → chunk-SQ6Y2ZMA.mjs} +2 -2
- package/dist/{chunk-3A5I2GJK.mjs → chunk-T4Y2ZSVX.mjs} +1 -1
- package/dist/{chunk-VG5JEIUQ.mjs → chunk-TKWEX4FD.mjs} +2 -2
- package/dist/{chunk-CCSGFCLZ.mjs → chunk-U3SSPL4K.mjs} +1 -1
- package/dist/{chunk-DHB7UZ7F.mjs → chunk-U5XL7D6A.mjs} +1 -1
- package/dist/{chunk-JXLSHVJ2.mjs → chunk-UMHUSOPJ.mjs} +1 -1
- package/dist/chunk-UTF7GBQU.mjs +4 -0
- package/dist/chunk-UTMAY3WK.mjs +2 -0
- package/dist/{chunk-S2Y7VI4H.mjs → chunk-V4ZHRALW.mjs} +2 -2
- package/dist/{chunk-GWOYMENX.mjs → chunk-V6XZ4VIR.mjs} +1 -1
- package/dist/{chunk-WTEGUPFG.mjs → chunk-VRPVVMRB.mjs} +1 -1
- package/dist/{chunk-XKOHV4H6.mjs → chunk-W5NPH5UA.mjs} +1 -1
- package/dist/{chunk-VGTMLQWZ.mjs → chunk-WD4U6XXT.mjs} +1 -1
- package/dist/{chunk-4DNHHJSL.mjs → chunk-XBNFXWAW.mjs} +1 -1
- package/dist/chunk-XZV72SQ4.mjs +2 -0
- package/dist/{chunk-QJ3TFJLQ.mjs → chunk-Y34NR5JL.mjs} +1 -1
- package/dist/{chunk-YBB5LWZK.mjs → chunk-YFJB534W.mjs} +1 -1
- package/dist/{chunk-V5JRSGZF.mjs → chunk-YN37ZDLW.mjs} +1 -1
- package/dist/chunk-Z6OKLRHC.mjs +2 -0
- package/dist/chunk-ZLS2FRS6.mjs +3 -0
- package/dist/{chunk-JI6T3A4Y.mjs → chunk-ZMHUDYLV.mjs} +1 -1
- package/dist/{chunk-KH24LWAT.mjs → chunk-ZTHICSSF.mjs} +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/server.mjs +1 -1
- package/dist/worker.mjs +1 -1
- package/kit/math.js +1 -1
- package/kit/runtime.js +13 -2
- package/kit/state.js +2 -0
- package/kit/ui.js +5 -1
- package/package.json +1 -1
- package/release.json +7 -7
- package/skill/SKILL.md +13 -13
- package/skill/references/building-blocks.md +1 -1
- package/skill/references/extensions.md +45 -9
- package/web/assets/index-D8P8uhDW.js +15 -0
- package/web/assets/{index-xP0uw3a0.css → index-FLb9jCfl.css} +1 -1
- package/web/index.html +2 -2
- package/dist/chunk-46ACXOU5.mjs +0 -2
- package/dist/chunk-5DPABPBI.mjs +0 -2
- package/dist/chunk-5L26JUYA.mjs +0 -2
- package/dist/chunk-AEMVZYZQ.mjs +0 -166
- package/dist/chunk-ASAXY2DJ.mjs +0 -2
- package/dist/chunk-DAMVDXR3.mjs +0 -2
- package/dist/chunk-DLFZJJEE.mjs +0 -2
- package/dist/chunk-EKNHM3P4.mjs +0 -2
- package/dist/chunk-FCK6NXON.mjs +0 -3
- package/dist/chunk-FX42XU6J.mjs +0 -2
- package/dist/chunk-HATA2W7X.mjs +0 -2
- package/dist/chunk-JJNRIFND.mjs +0 -8
- package/dist/chunk-JL6R4FG4.mjs +0 -4
- package/dist/chunk-KUILYI7H.mjs +0 -4
- package/dist/chunk-NIW7F7LU.mjs +0 -4
- package/dist/chunk-OU3S466R.mjs +0 -20
- package/dist/chunk-QCEATQC4.mjs +0 -2
- package/dist/chunk-TDWJKOLN.mjs +0 -2
- package/dist/chunk-UGO5N3EI.mjs +0 -15
- package/dist/chunk-XMKHCUI6.mjs +0 -15
- package/dist/chunk-XQRUG4G3.mjs +0 -2
- package/dist/chunk-YPPJVDQI.mjs +0 -2
- package/dist/chunk-ZANMKAWS.mjs +0 -2
- package/web/assets/index-BHC5ZOMh.js +0 -15
- /package/dist/{chunk-N3DSBH5S.mjs → chunk-A55HN5OK.mjs} +0 -0
- /package/dist/{chunk-KNZJT4ET.mjs → chunk-QAIHRH3I.mjs} +0 -0
- /package/dist/{chunk-ZW2A6GBW.mjs → chunk-QR6A54KJ.mjs} +0 -0
- /package/dist/{chunk-74UW7QSL.mjs → chunk-UH4SIXTR.mjs} +0 -0
- /package/dist/{chunk-EKGYYOSP.mjs → chunk-W7XHE4CT.mjs} +0 -0
- /package/dist/{chunk-5MMN3N5J.mjs → chunk-YEY3RSFQ.mjs} +0 -0
package/dist/chunk-ASAXY2DJ.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a as D,b as M}from"./chunk-HBAUKKQH.mjs";import{c as v,d as j}from"./chunk-KUILYI7H.mjs";import{b as k,f as A}from"./chunk-4OZWXZE5.mjs";import L from"node:fs/promises";import y from"node:path";import{readAnnouncement as _}from"../browser/shared/preview-server.mjs";import{nameProblem as B,nameStops as b,ownName as K,workspaceLabels as Q,workspaceName as x,writeWorkspaceName as R}from"../browser/shared/workspace-name.mjs";import{forgetWorkspace as U,isTemporary as q,isWorkspace as C,isWorkspaceId as z,readRegistry as F,registerQuietly as W,registerWorkspace as G,SCAN_DEPTH as P,SCAN_LIMIT as J,scanForWorkspaces as V,workspaceId as X,workspaceKey as l}from"../browser/shared/workspace-registry.mjs";import{defaultWorkspace as Y,documentsFolder as T,ensureWorkspace as Z,layoutOf as ee}from"../browser/shared/workspace.mjs";import{clashingIds as oe}from"../browser/shared/drafts.mjs";var $=(o,r)=>`${o} ${r}${o===1?"":"s"}`,I=(o,r)=>l(o)===l(r);function se(o){if(K(o)||I(o,Y()))return null;let{name:r}=x(o,{stops:b()});return`\u5DE5\u4F5C\u533A\u540D\u5B57\uFF1A\u6CA1\u6709\uFF08\u522B\u5904\u6309\u6587\u4EF6\u5939\u53EB\u5B83"${r}"\uFF09\uFF1B\u8FD9\u4E2A\u5DE5\u4F5C\u533A\u662F\u4E3A\u4E00\u4E2A\u9879\u76EE\u5EFA\u7684\uFF0C\u5C31\u7528 gallery workspaces --name "<\u9879\u76EE\u540D>" \u5199\u4E0A\u9879\u76EE\u540D`}async function re(o,r){let c=B(r);if(c)throw new k(c);try{let{ours:t,reads:i}=await Z(o);t||(console.error(j(o,i)),process.exit(1))}catch(t){if(!t.code)throw t;console.error(v(o,t.code)),process.exit(1)}let s;try{s=await R(o,r)}catch(t){console.error(t.code?v(o,t.code):t.message),process.exit(1)}await W(o),console.log(`\u5DE5\u4F5C\u533A\uFF1A${o}`),console.log(`\u540D\u5B57\uFF1A${s.name} (in ${ee(o).marker}${s.before&&s.before!==s.name?`; it was "${s.before}"`:""}): the sidebar and gallery workspaces call it so.`)}async function te(o,r){let c=await U(o);c.length||(console.error(`No registered workspace is ${z(o)?o:y.resolve(o)}: gallery workspaces lists them, with their paths and ws- ids.`),process.exit(1));for(let s of c)console.log(`Forgot ${s} (only the registry changed: nothing on disk).${I(s,r)?" It is the current workspace: the next command run in it registers it again.":""}`)}async function ne(o){let r=y.resolve(o??T());await L.stat(r).then(n=>n.isDirectory(),()=>!1)||(console.error(`No such folder: ${r} (--scan names a folder to look in).`),process.exit(1));let c=new Set(F().workspaces.map(({root:n})=>l(n))),{found:s,read:t,cut:i}=await V(r);console.log(`Scanned ${r}, ${P} levels down (${$(t,"folder")}): ${s.length?`${$(s.length,"workspace")}.`:"no workspace."}`);let f=b();for(let n of s){let{name:h}=x(n,{stops:f});if(c.has(l(n))){await W(n),console.log(` \u5DF2\u767B\u8BB0\uFF1A${n}\uFF08${h}\uFF09`);continue}let g;try{g=await G(n)}catch(m){console.log(` \u6CA1\u80FD\u767B\u8BB0\uFF08${m.code??m.message}\uFF09\uFF1A${n}`);continue}console.log(g==="temporary"?` \u4E0D\u767B\u8BB0\uFF08\u5728\u7CFB\u7EDF\u7684\u4E34\u65F6\u6587\u4EF6\u5939\u91CC\uFF09\uFF1A${n}`:` \u65B0\u767B\u8BB0\uFF1A${n}\uFF08${h}\uFF09`)}i&&console.log(`Stopped after ${$(J,"folder")}: gallery workspaces --scan <a folder further down> looks at the rest.`),s.length&&console.log("gallery workspaces lists them; gallery list <words> --all searches their documents.")}async function ae(o){let r=C(o),c=q(o);r&&await W(o);let s=F().workspaces,t=[o,...s.map(({root:e})=>e).filter(e=>!I(e,o))],i=new Map(s.map(({root:e,seen:a})=>[l(e),Date.parse(a)])),f=T(),n=b({documents:f}),h=await Promise.all(t.map(async e=>{let a=C(e),w=a?await D(e):[],p=a?await _({reportsDirectory:e}):null;return{root:e,there:a,count:w.length,edited:w.reduce((d,{edited:u})=>Math.max(d,u),0),port:p?.port??null,named:{root:e,...x(e,{stops:n})}}})),[g,...m]=h;m.sort((e,a)=>a.there-e.there||a.edited-e.edited||(i.get(l(a.root))??0)-(i.get(l(e.root))??0));let N=[g,...m],E=new Map(Q(N.map(({named:e})=>e)).map(e=>[l(e.root),e])),O=s.length;console.log(`${$(O,"workspace")} on this machine's registry; the current one first (*):`);for(let e of N){let{name:a,own:w,above:p}=E.get(l(e.root)),d=e===g,u=[...w||!e.there?[]:["\u6CA1\u6709\u8D77\u540D\uFF1A\u7528\u7684\u662F\u6587\u4EF6\u5939\u7684\u540D\u5B57"],...e.there?[]:[d?"\u8FD8\u6CA1\u6709\u5EFA":"\u4E0D\u5728\u4E86\uFF1A\u6587\u4EF6\u5939\u6216\u5B83\u7684 gallery.json \u627E\u4E0D\u5230\u4E86"],...d&&e.there&&c?["\u5728\u7CFB\u7EDF\u7684\u4E34\u65F6\u6587\u4EF6\u5939\u91CC\uFF1A\u4E0D\u767B\u8BB0"]:[]],H=p?y.isAbsolute(p)?`\uFF08${p}\uFF09`:`\uFF08\u4E0A\u4E00\u7EA7\uFF1A${p}\uFF09`:"";console.log(`${d?"*":" "} ${a}${H} ${X(e.root)}${u.length?` \uFF08${u.join("\uFF1B")}\uFF09`:""}`),console.log(` \u8DEF\u5F84\uFF1A${e.root}`),e.there&&console.log(` \u6587\u6863\uFF1A${e.count?`${e.count} \u7BC7\uFF1B\u4E0A\u6B21\u7F16\u8F91\uFF1A${M(e.edited)}`:"\u6CA1\u6709"}`),e.port&&console.log(` \u670D\u52A1\uFF1Ahttp://127.0.0.1:${e.port}/`)}for(let{id:e,roots:a}of oe())console.log(`${e} \u662F ${a.length} \u4E2A\u767B\u8BB0\u7684\u5DE5\u4F5C\u533A\u5171\u7528\u7684\u7F16\u53F7\uFF08${a.join("\u3001")}\uFF09\uFF1A\u4FA7\u8FB9\u680F\u91CC\u5B83\u4EEC\u7684\u5E95\u7A3F\u90FD\u627E\u4E0D\u5230\uFF1Bgallery workspaces --forget <\u8DEF\u5F84> \u53BB\u6389\u5176\u4E2D\u4E00\u4E2A`);let S=r?se(o):null;S&&console.log(S),m.some(({there:e})=>!e)&&console.log("One no longer there stays registered (a drive may come back): gallery workspaces --forget <\u8DEF\u5F84> takes it off, nothing on disk changed."),O<=1&&console.log(`gallery workspaces --scan registers the workspaces already on this machine (in the Documents folder, ${P} levels down; or --scan <folder>).`),console.log("gallery list <words> --all searches the documents of them all; every command takes --workspace <\u8DEF\u5F84> to work in one.")}async function ue(o,r){let{positional:c,options:s,values:t}=A({options:["--scan"],values:["--name","--forget"],argv:o});if([s.has("--scan"),t.has("--name"),t.has("--forget")].filter(Boolean).length>1)throw new k("One of --scan, --name and --forget at a time.");if(c.length>(s.has("--scan")?1:0))throw new k(s.has("--scan")?"--scan takes one folder at most.":"gallery workspaces names no folder: --scan <folder> looks in one, --workspace <dir> names the current workspace.");let f=y.resolve(r.workspace);return t.has("--name")?re(f,t.get("--name")):t.has("--forget")?te(t.get("--forget"),f):s.has("--scan")?ne(c[0]):ae(f)}export{se as a,ue as b};
|
package/dist/chunk-DAMVDXR3.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a,b,c,d,e,f,g,h}from"./chunk-5L26JUYA.mjs";import"./chunk-S2Y7VI4H.mjs";import"./chunk-JJNRIFND.mjs";import"./chunk-JEUK3ZO7.mjs";import"./chunk-QXVNUASA.mjs";import"./chunk-2OHANJ6Q.mjs";import"./chunk-2GKGEVMR.mjs";import"./chunk-VKSRM7EY.mjs";import"./chunk-LE44MD3O.mjs";import"./chunk-4OZWXZE5.mjs";import"./chunk-SAHS56QM.mjs";import"./chunk-YFJU3O7G.mjs";import"./chunk-2RKIHJI2.mjs";import"./chunk-7XDYK3UC.mjs";import"./chunk-VG5JEIUQ.mjs";import"./chunk-N3DSBH5S.mjs";import"./chunk-5L7RYZCL.mjs";export{c as HOME_NOT_MADE,g as emptyRequiredOf,d as missingPageSaid,a as pageAddressOf,b as pageAloneOf,h as run,e as setsOf,f as settingsGiven};
|
package/dist/chunk-DLFZJJEE.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a}from"./chunk-AEMVZYZQ.mjs";import"./chunk-DR73Y2UJ.mjs";import"./chunk-CG3UHDKH.mjs";import"./chunk-4AMTKWDO.mjs";import"./chunk-QXVNUASA.mjs";import"./chunk-FCK6NXON.mjs";import"./chunk-OU3S466R.mjs";import"./chunk-CZ5KJSGK.mjs";import"./chunk-UGO5N3EI.mjs";import"./chunk-5IIH335D.mjs";import"./chunk-QK3VISCA.mjs";import"./chunk-2OHANJ6Q.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-TOE6DPLH.mjs";import"./chunk-WTEGUPFG.mjs";import"./chunk-VKSRM7EY.mjs";import"./chunk-LE44MD3O.mjs";import"./chunk-XMKHCUI6.mjs";import"./chunk-SAHS56QM.mjs";import"./chunk-KH24LWAT.mjs";import"./chunk-YFJU3O7G.mjs";import"./chunk-NWRZXELO.mjs";import"./chunk-G4YP7GVC.mjs";import"./chunk-DHB7UZ7F.mjs";import"./chunk-2RKIHJI2.mjs";import"./chunk-JXLSHVJ2.mjs";import"./chunk-XKOHV4H6.mjs";import"./chunk-KFZBYDIS.mjs";import"./chunk-7XDYK3UC.mjs";import"./chunk-VG5JEIUQ.mjs";import"./chunk-N3DSBH5S.mjs";import"./chunk-5L7RYZCL.mjs";export{a as startProductionServer};
|
package/dist/chunk-EKNHM3P4.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{b as n,f as i}from"./chunk-4OZWXZE5.mjs";import"./chunk-5L7RYZCL.mjs";import{reportsDirectory as r}from"../browser/shared/paths.mjs";import{answerOf as a,readAnnouncement as d,stopServer as l}from"../browser/shared/preview-server.mjs";async function m(p){let{positional:s}=i({argv:p});if(s.length>0)throw new n(`gallery stop takes no arguments: ${s[0]}`);let o=await d({reportsDirectory:r}),t=o?await a(o,r,1e4):"no";if(t==="no")return void console.log(`No Gallery server runs for ${r}.`);t==="busy"&&(console.error(`The Gallery server on port ${o.port} (pid ${o.pid}) took the request and gave no answer in 10s: it is busy or stuck. Run gallery stop again in a while, or end process ${o.pid} yourself.`),process.exit(1)),o.kind==="dev"&&(console.error(`This workspace's server is npm run dev's (port ${o.port}, pid ${o.pid}): stop it where it runs.`),process.exit(1));let e=await l(o);e.ok||(console.error(e.message),process.exit(1)),console.log(`Stopped the server on port ${o.port} (pid ${o.pid})${e.killed?": it did not stop by itself in 10s, so its process was ended":""}.`)}export{m as run};
|
package/dist/chunk-FCK6NXON.mjs
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{b as E}from"./chunk-WTEGUPFG.mjs";import{g as M}from"./chunk-SAHS56QM.mjs";import{a as O}from"./chunk-2RKIHJI2.mjs";import{e as I,j as S}from"./chunk-KFZBYDIS.mjs";import d from"node:fs/promises";import b from"node:path";import{isInstance as T}from"../browser/shared/components/index.mjs";import{ATTRIBUTE as _}from"../browser/shared/components/installed.mjs";import{exportSourceOf as q}from"../browser/shared/export-wrap.mjs";import{sha256 as w}from"../browser/shared/files.mjs";import{attr as g,hasClass as y}from"../browser/shared/html-tree.mjs";import{editStateDirectory as F,exportsDirectory as z,qaDirectory as G,reportsDirectory as H}from"../browser/shared/paths.mjs";import{documentDirectory as K,documentFiles as Q}from"../browser/shared/workspace.mjs";function V(t,e=null){return t.tagName==="figure"&&y(t,"doc-figure")||t.tagName==="div"&&(y(t,"doc-code")||y(t,"doc-diff"))||e===D||T(t)||y(t,"doc-flow")||y(t,"doc-sheet-shell")||g(t,"data-doc-sheets")!==void 0?0:t.tagName==="figure"||y(t,"doc-columns")?1:y(t,"doc-table-wrap")?2:3}function X(t){let e=new Map,n=new Map;for(let i of I(t).units)i.blockId&&!n.has(i.blockId)&&n.set(i.blockId,i.kind);let a=new Map,r=new Map,o=new Map,f=i=>!!i.tagName&&g(i,"data-block-id")!==void 0,u=(i,c)=>{if(i.nodeName==="#text")return i.value;if(!i.tagName||i.tagName==="template")return"";let s=g(i,"data-doc-chart-data")?.trim();s&&a.get(c).push(s);let l=g(i,"data-doc-chart-source")?.trim();l&&!r.has(l)&&r.set(l,c);let h=i.attrs.map(({name:k,value:N})=>`${k}="${N}"`).sort().join(" ");return`<${i.tagName} ${h}>${(i.childNodes??[]).map(k=>f(k)?"":u(k,c)).join("")}</${i.tagName}>`},m=(i,c)=>{for(let s of i.childNodes??[]){if(!s.tagName||s.tagName==="template")continue;let l=g(s,"data-block-id"),h=c;if(l!==void 0&&!e.has(l)){let k=[s.tagName,...(g(s,"class")??"").split(/\s+/).filter(Boolean).slice(0,1)].join("."),N=o.get(c)??0;o.set(c,N+1),a.set(l,[]);let v=V(s,n.get(l)),x=s.sourceCodeLocation,U=x?(x.endOffset??x.startTag?.endOffset??x.startOffset)-x.startOffset:0,B=u(s,l).replace(R," ");e.set(l,{hash:w(B).slice(0,16),bare:w(B.replace(`data-block-id="${l}"`,"")).slice(0,16),rank:v,card:v<3,whole:n.get(l)===D,figure:n.get(l)===tt,tag:k,parent:c,at:N,size:U,package:T(s)?g(s,_)??null:null}),h=l}m(s,h)}};m(O(t),null);let p=new Map([...e].map(([i,{hash:c,bare:s}])=>[i,{hash:c,bare:s}]));for(let[i,c]of a){let s=c.map(l=>p.get(r.get(l))).filter(Boolean);s.length&&(e.get(i).hash=w([p.get(i).hash,...s.map(({hash:l})=>l)].join("|")).slice(0,16),e.get(i).bare=w([p.get(i).bare,...s.map(({bare:l})=>l)].join("|")).slice(0,16))}return e}function Y(t){let e=[],n=a=>{for(let r of a.childNodes??[])if(!(!r.tagName||r.tagName==="template"||g(r,"data-block-id")!==void 0))if(r.tagName==="script"||r.tagName==="style"){let o=r.attrs.map(({name:f,value:u})=>`${f}="${u}"`).sort().join(" ");e.push(`<${r.tagName} ${o}>${(r.childNodes??[]).map(f=>f.value??"").join("")}`.replace(R," "))}else n(r)};return n(O(t)),e.length?w(e.join("|")).slice(0,16):""}var Z=t=>Object.fromEntries(M(t).map(({id:e,stamp:n})=>[e,n])),D="block",tt="figure",R=/[ \t\n\f\r]+/g,et=["export","preview"];function st(t){if(t==null)return null;try{let{blocks:e,places:n,moved:a,unseen:r,from:o,time:f,idless:u,page:m,packages:p}=JSON.parse(t)??{};if(!e||typeof e!="object"||Array.isArray(e))return null;let i=n&&typeof n=="object"&&!Array.isArray(n)?n:{},c=s=>Array.isArray(s)?s.filter(l=>typeof l=="string"):[];return{blocks:Object.fromEntries(Object.entries(e).filter(([,s])=>typeof s=="string")),places:Object.fromEntries(Object.entries(i).filter(([,s])=>Array.isArray(s)&&s.length===2&&(s[0]===null||typeof s[0]=="string")&&Number.isInteger(s[1]))),moved:c(a),unseen:c(r),...et.includes(o)?{from:o,time:Number.isFinite(f)?f:null}:{},...c(u).length?{idless:c(u)}:{},...typeof m=="string"?{page:m}:{},...p&&typeof p=="object"&&!Array.isArray(p)?{packages:Object.fromEntries(Object.entries(p).filter(([,s])=>typeof s=="string"))}:{}}}catch{return null}}var $="ge-idless-";function nt(t,{from:e,time:n}){let a=0,{text:r}=S(E(t).text,()=>`${$}${a++}`),o=Z(r),f={blocks:{},places:{},moved:[],unseen:[],from:e,time:n,page:Y(r),...Object.keys(o).length?{packages:o}:{}},u=[];for(let[m,{hash:p,bare:i,card:c,parent:s,at:l}]of X(r)){if(m.startsWith($)){u.push(i);continue}f.blocks[m]=p,s?.startsWith($)||(f.places[m]=[s,l]),c&&f.unseen.push(m)}return u.length?{...f,idless:u}:f}function yt(t,e){if(!e?.idless?.length)return e;let n=new Map;for(let o of e.idless)n.set(o,(n.get(o)??0)+1);let a={...e,blocks:{...e.blocks},unseen:[...e.unseen]};for(let[o,{hash:f,bare:u,card:m}]of t)Object.hasOwn(e.blocks,o)||!n.get(u)||(n.set(u,n.get(u)-1),a.blocks[o]=f,m&&a.unseen.push(o));let r=[...n].flatMap(([o,f])=>Array(f).fill(o));return r.length?a.idless=r:delete a.idless,a}var at=/<[^>]*\sdata-doc-placeholder\b/,j=t=>b.join(G,t),L=t=>b.join(j(t),"blocks.json"),P=t=>b.join(j(t),"exported.html");async function W(t){return st(await d.readFile(L(t),"utf8").catch(()=>null))!==null}async function C(t,e,n){let a=async c=>d.readFile(c).then(s=>({bytes:s,file:c}),()=>null),r=await a(P(t)),o=[r];if(e){let c=e.slice(0,16),s=b.join(F,"history",t),l=await d.readdir(s).catch(()=>[]);o.push(...await Promise.all(l.filter(h=>h.endsWith(`-${c}.html`)).map(h=>a(b.join(s,h))))),o.push(await a(b.join(F,"snapshots",`${c}.html`)))}let f=r?(await d.stat(r.file).catch(()=>null))?.mtimeMs??null:null,m=!(r&&e&&n!==null&&f!==null&&f>n&&w(r.bytes)!==e)&&e&&o.find(c=>c&&w(c.bytes)===e),p=m||r;if(!p)return null;let i=m&&n!==null?n:p===r?f??n:(await d.stat(p.file).catch(()=>null))?.mtimeMs??n;return{text:p.bytes.toString("utf8"),time:i??null}}async function A(t){let e=b.join(z,`${t}.html`),[n,a]=await Promise.all([d.readFile(e,"utf8").catch(()=>null),d.stat(e).catch(()=>null)]);return n===null||!a?null:{said:q(n),time:a.mtimeMs}}async function J(t,e,n){if(at.test(e))return!1;let a=nt(e,n);return!Object.keys(a.blocks).length&&!a.idless?!1:(await d.mkdir(j(t),{recursive:!0}),await d.writeFile(L(t),`${JSON.stringify(a)}
|
|
3
|
-
`),!0)}async function bt(t){let e=new Map(await Promise.all(t.map(async a=>[a,await A(a).catch(()=>null)])));return{keep:async(a,r=null)=>{for(let o of a)try{if(!await W(o)){let m=e.get(o),p=await C(o,m?.said??null,m?.time??null);p&&await J(o,p.text,{from:"export",time:p.time})}let[f,u]=await Promise.all([d.readFile(Q(K(o,H)).html),r?{said:r.get(o)??null}:A(o)]);u?.said&&w(f)===u.said&&(await d.mkdir(j(o),{recursive:!0}),await d.writeFile(P(o),f))}catch{}}}}async function kt(t,e){try{if(await W(t))return!1;let n=await A(t),a=await C(t,n?.said??null,n?.time??null);return await J(t,a?.text??e,a?{from:"export",time:a.time}:{from:"preview",time:Date.now()})}catch{return!1}}export{V as a,X as b,Y as c,Z as d,et as e,st as f,nt as g,yt as h,W as i,C as j,bt as k,kt as l};
|
package/dist/chunk-FX42XU6J.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{c as i,d as u}from"./chunk-KUILYI7H.mjs";import{j as f,k as p}from"./chunk-VKSRM7EY.mjs";import{u as c}from"./chunk-LE44MD3O.mjs";import{b as d,f as h}from"./chunk-4OZWXZE5.mjs";import w from"node:fs/promises";import y from"node:path";import{reportsDirectory as b}from"../browser/shared/paths.mjs";import{sameDirectory as x}from"../browser/shared/preview-server.mjs";import{copyOldDocuments as j,ensureWorkspace as v,layoutOf as D}from"../browser/shared/workspace.mjs";import{nameProblem as G,writeWorkspaceName as N}from"../browser/shared/workspace-name.mjs";import{registerQuietly as O}from"../browser/shared/workspace-registry.mjs";var g=(o,t)=>`${o} ${t}${o===1?"":"s"}`;function C(o,t,r){let{preferences:s}=D(r);return[o.copied.length?`Copied ${g(o.copied.length,"document")} from ${t}: ${o.copied.join(", ")}`:`Copied no documents from ${t}.`,...o.skipped.length?[`Skipped (the slug is taken here, or the folder's name is no slug): ${o.skipped.join(", ")}`]:[],...o.kept.length?[`Left behind (a name a workspace keeps for itself, for its custom blocks here, which no new document takes): ${o.kept.join(", ")}`]:[],...o.preferences==="copied"?[`\u5199\u4F5C\u504F\u597D\uFF1Acopied (${s})`]:o.preferences==="kept"?[`\u5199\u4F5C\u504F\u597D\uFF1Akept the workspace's (${s}); the old one was not copied`]:[],...o.outline?[`Sidebar order: ${o.outline}`]:[],...o.page?[`\u5199\u4F5C\u504F\u597D's page: ${o.page==="copied"?"copied":"kept the workspace's"}`]:[],...o.emoji?[`Emoji library: ${o.emoji} added`]:[],...o.history?[`Recent versions: ${g(o.history,"document")}`]:[],...o.packages.length?[`Custom blocks: ${o.packages.join(", ")}`]:[]]}async function U(o){let{values:t}=h({values:["--from","--name"],argv:o}),r=b,s=t.get("--name"),l=s===void 0?null:G(s);if(l)throw new d(l);let m;try{let{made:e,ours:n,reads:k}=await v(r);n||(console.error(u(r,k)),process.exit(1)),m=e}catch(e){if(!e.code)throw e;console.error(i(r,e.code)),process.exit(1)}if(console.log(`\u5DE5\u4F5C\u533A\uFF1A${r}\uFF08${m?"\u65B0\u5EFA":"\u5DF2\u6709"}\uFF09`),s!==void 0)try{let e=await N(r,s);console.log(`\u540D\u5B57\uFF1A${e.name}${e.before&&e.before!==e.name?` (it was "${e.before}")`:""}`)}catch(e){console.error(e.code?i(r,e.code):e.message),process.exit(1)}if(await O(r),t.has("--from")){let e=y.resolve(t.get("--from"));await w.stat(e).then(n=>n.isDirectory(),()=>!1)||(console.error(`No such folder: ${e} (--from names an older Gallery's reports/ folder).`),process.exit(1)),x(e,r)&&(console.error(`${e} is this workspace: --from names another folder (an older Gallery's reports/).`),process.exit(1));for(let n of C(await j({from:e,to:r}),e,r))console.log(n)}let $=await c(r);for(let e of $.packs)e.failed?console.warn(`\u5757\u5305\uFF1AGallery's pack ${e.id} was not installed (${e.failed}); a later start tries again.`):e.first&&console.log(`\u5757\u5305\uFF1A${e.name.zh} (${e.id} ${e.version}, ${e.added.length+e.same.length+e.updated.length} blocks)${e.id==="gallery-soft"?", switched off: \u8BBE\u7F6E \u203A \u7EC4\u4EF6\u5217\u8868 turns it on":""}`);let a=await f(r);a.did==="made"?console.log(`\u9996\u9875\uFF1A${a.file} (the home page, its cards Gallery's today and note; the workbench opens it first)`):a.did==="failed"&&console.warn(`\u9996\u9875\uFF1A${p(a)}`),console.log('Next: gallery new <slug> "<title>" makes a document; gallery open opens the workbench.')}export{C as a,U as b};
|
package/dist/chunk-HATA2W7X.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a,b,c,d,e,f,g,h}from"./chunk-BYSF5UMM.mjs";import"./chunk-3OFXMN6N.mjs";import"./chunk-SOD23RGL.mjs";import"./chunk-4DNHHJSL.mjs";import"./chunk-342HXE3Q.mjs";import"./chunk-3A5I2GJK.mjs";import"./chunk-5L26JUYA.mjs";import"./chunk-S2Y7VI4H.mjs";import"./chunk-XQRUG4G3.mjs";import"./chunk-JJNRIFND.mjs";import"./chunk-JEUK3ZO7.mjs";import"./chunk-CG3UHDKH.mjs";import"./chunk-4AMTKWDO.mjs";import"./chunk-QXVNUASA.mjs";import"./chunk-FCK6NXON.mjs";import"./chunk-OU3S466R.mjs";import"./chunk-QK3VISCA.mjs";import"./chunk-2OHANJ6Q.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-TOE6DPLH.mjs";import"./chunk-WTEGUPFG.mjs";import"./chunk-2GKGEVMR.mjs";import"./chunk-VKSRM7EY.mjs";import"./chunk-LE44MD3O.mjs";import"./chunk-4OZWXZE5.mjs";import"./chunk-XMKHCUI6.mjs";import"./chunk-SAHS56QM.mjs";import"./chunk-KH24LWAT.mjs";import"./chunk-YFJU3O7G.mjs";import"./chunk-NWRZXELO.mjs";import"./chunk-G4YP7GVC.mjs";import"./chunk-DHB7UZ7F.mjs";import"./chunk-2RKIHJI2.mjs";import"./chunk-JXLSHVJ2.mjs";import"./chunk-XKOHV4H6.mjs";import"./chunk-KFZBYDIS.mjs";import"./chunk-7XDYK3UC.mjs";import"./chunk-VG5JEIUQ.mjs";import"./chunk-N3DSBH5S.mjs";import"./chunk-5L7RYZCL.mjs";export{a as PAGE_ASIDE,b as PAGE_INSIDE_ALONE,e as cardChangesOf,c as firstInstance,d as outsideWhat,g as pageHost,f as pageSaves,h as pageTryCommand};
|
package/dist/chunk-JJNRIFND.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{spawn as J}from"node:child_process";import P from"node:fs";import m from"node:fs/promises";import Q from"node:os";import k from"node:path";import{escapeMarkup as X}from"../browser/shared/escape.mjs";import{spawn as C}from"node:child_process";import{existsSync as H,readFileSync as M}from"node:fs";import w from"node:path";var V=e=>!["","0",void 0].includes(e),z=(e,r)=>(r.PATH??"").split(w.delimiter).some(t=>t&&H(w.join(t,e))),U=()=>{try{return process.platform==="linux"&&/microsoft/i.test(M("/proc/version","utf8"))}catch{return!1}};function K(e,{platform:r=process.platform,env:t=process.env,wsl:s=U()}={}){let n=encodeURI(e);return V(t.GALLERY_NO_BROWSER)?{skip:"GALLERY_NO_BROWSER is set"}:r==="win32"?{command:w.join(t.SystemRoot||t.windir||"C:\\Windows","System32","rundll32.exe"),args:["url.dll,FileProtocolHandler",n]}:r==="darwin"?{command:"open",args:[n]}:s?{command:"cmd.exe",args:["/c","start",'""',n.replace(/[&^]/g,"^$&")]}:!t.DISPLAY&&!t.WAYLAND_DISPLAY?{skip:"no display here (neither DISPLAY nor WAYLAND_DISPLAY is set)"}:z("xdg-open",t)?{command:"xdg-open",args:[n]}:{skip:"xdg-open is not installed"}}var q="Opened it in the default browser (if that is not Chrome or Edge, open the address there to edit).",T=e=>e.opened?q:`Not opened in a browser: ${e.why}.`;async function O(e,r){let t=K(e,r);return t.skip?{opened:!1,why:t.skip}:new Promise(s=>{let n;try{n=C(t.command,t.args,{detached:!0,stdio:"ignore",windowsHide:!0})}catch(o){return s({opened:!1,why:`${w.basename(t.command)} did not start (${o.code??o.message})`})}n.once("error",o=>s({opened:!1,why:`${w.basename(t.command)} did not start (${o.code??o.message})`})),n.once("spawn",()=>{n.unref(),s({opened:!0})})})}import{packageRoot as Z,previewLogFile as f,projectRoot as G,release as I,reportsDirectory as h}from"../browser/shared/paths.mjs";import{fullAddress as ee}from"../browser/shared/page-address.mjs";import{findPreviewServer as te,galleryVersion as F,portIsFree as re,previewServerFor as ne,readAnnouncement as oe}from"../browser/shared/preview-server.mjs";import{documentLinks as se}from"../browser/shared/reports.mjs";import{documentDirectory as ie,documentFiles as ae,layoutOf as ce}from"../browser/shared/workspace.mjs";var $="\u4EA4\u7ED9\u7528\u6237\uFF08\u73B0\u5728\u5C31\u628A\u8FD9\u4E2A\u5730\u5740\u7ED9\u7528\u6237\uFF1B\u7528 Chrome \u6216 Edge \u6253\u5F00\uFF09\uFF1A",le="Agent \u81EA\u7528\uFF08\u53EA\u6709\u6587\u6863\u9875\uFF0C\u4E0D\u4EA4\u7ED9\u7528\u6237\uFF09\uFF1A",de=e=>`send the user ${e} now, in a message of its own, before any other step; then `;function Ve(e,r){let t=e.at(-1)??"";return`Next: ${t.startsWith($)?de(t.slice($.length)):""}${r}`}async function ze(e,r){let t=e.at(-1)??"";return t.startsWith($)?r.has("--no-browser")?"Not opened in a browser (--no-browser).":T(await O(t.slice($.length))):null}var D="GALLERY_NO_PREVIEW",pe=e=>!["","0",void 0].includes(e),Ue=e=>e.has("--no-preview")||pe(process.env[D]),ue=4317,fe=20,me=(e=process.env)=>{let r=Number(e.GALLERY_PORT);return Number.isInteger(r)&&r>0&&r<65536?r:ue},we=6e4,he=5*1024*1024,$e=k.join(G,"node_modules","vite","bin","vite.js"),ye=k.join(Z,"dist","server.mjs"),ge=e=>new Promise(r=>setTimeout(r,e)),A={reportsDirectory:h},Y=ce(h),R=(e,r)=>`http://127.0.0.1:${e}/generated/${r}.html`,ve=(e,r)=>`${R(e,r)}?agent`,j=e=>`http://127.0.0.1:${e}/`,xe=(e,r)=>se().then(({links:t})=>t,()=>null).then(t=>ee(`http://127.0.0.1:${e}`,r,t));async function ke({first:e=me(),count:r=fe}={}){let t=Number((await m.readFile(Y.lastPortFile,"utf8").catch(()=>"")).trim()),s=Array.from({length:Math.max(0,r)},(n,o)=>e+o);return Number.isInteger(t)&&t>0&&t<65536?[t,...s.filter(n=>n!==t)]:s}async function Le(){return await m.mkdir(k.dirname(f),{recursive:!0}),await m.stat(f).then(r=>r.size,()=>0)>he&&await m.rename(f,`${f}.1`).catch(()=>{}),P.openSync(f,"a")}async function Se(e,r){if(!I){let{writeSharedAssets:p}=await import("./chunk-DH6GMDNN.mjs");await p()}let t=await Le();P.writeSync(t,`
|
|
3
|
-
[${new Date().toISOString()}] ${r}: Gallery ${F} on 127.0.0.1:${e} for ${h}
|
|
4
|
-
`);let[s,n]=I?[[ye,"--port",String(e)],Q.homedir()]:[[$e,"--host","127.0.0.1","--port",String(e),"--strictPort"],G],o=J(process.execPath,s,{cwd:n,env:{...process.env,GALLERY_WORKSPACE:k.resolve(h),GALLERY_SERVER_KIND:"cli"},detached:!0,stdio:["ignore",t,t],windowsHide:!0});return P.closeSync(t),o.unref(),o}async function be({slug:e=null,command:r=`gallery open${e?` ${e}`:""}`,ports:t=null,starting:s=we,baseline:n=!1}={}){let o=()=>!0;if(e){let a=ae(ie(e,h)),c=await m.readFile(a.html,"utf8").catch(()=>null);if(c===null)return{ok:!1,reason:"missing",message:`No document "${e}": ${a.html} does not exist (gallery new ${e} "<\u6807\u9898>" makes one; gallery list lists those there are).`};n&&await import("./chunk-5MEXZ2UF.mjs").then(({previewBaseline:x})=>x(e,c));let i=await m.readFile(a.json,"utf8").then(JSON.parse).catch(()=>({})),v=[/<title>([^<]*)<\/title>/i.exec(c)?.[1]?.trim(),typeof i.title=="string"?i.title.trim():""].filter(Boolean);o=x=>v.length===0||v.some(_=>x.includes(_)||x.includes(X(_)))}let p=t??await ke(),L=p.length?`${Math.min(...p)} to ${Math.max(...p)}`:"none",S=`gallery open${e?` ${e}`:""}`,E=async(a,c=[])=>{let i=await ne({...A,ports:p.slice(a),start:v=>Se(v,r)});return i.busy?.newer?{failed:{ok:!1,reason:"newer",message:`A newer Gallery (${i.busy.version}) serves this workspace (port ${i.busy.port}, pid ${i.busy.pid}) and gave no answer in 10s; this is Gallery ${F}. Update this one (npm i -g @heycys/gallery@latest), or run ${S} again in a while.`}}:i.busy?{failed:{ok:!1,reason:"busy",message:`This workspace's Gallery server (port ${i.busy.port}, pid ${i.busy.pid}) took the request and gave no answer in 10s: it is busy or stuck. Run ${S} again in a while, or stop that process first (gallery stop): a second server of this workspace is not started beside it.`}}:i.stuck?{failed:{ok:!1,reason:"stuck",message:`An older Gallery's server serves this workspace and did not stop: ${i.stuck.message}`}}:i.port===null?{failed:{ok:!1,reason:"ports",message:`No server of this workspace runs, and no port from ${L} is free to start one on: stop a server on one of them (or name another first port: GALLERY_PORT=<n>), then run ${S}.`}}:{...i,passed:[...c,...i.passed]}},u=await E(0);if(u.failed)return u.failed;let{port:l,started:d,passed:b,replaced:W}=u,y=u.running??null,N=Date.now()+s,g="",B=async()=>{if(e){let c=await fetch(`${R(l,e)}?present`,{signal:AbortSignal.timeout(5e3)}).catch(()=>null),i=c?.ok?await c.text():"";return g=c?i?`HTTP ${c.status} without the title`:`HTTP ${c.status}`:"no answer",!!(i&&o(i))}let a=await fetch(`http://127.0.0.1:${l}/__gallery/workspace/info`,{signal:AbortSignal.timeout(5e3)}).catch(()=>null);return g=a?`HTTP ${a.status}`:"no answer",!!a?.ok};for(;;await ge(300)){if(Date.now()>N)return{ok:!1,reason:"timeout",message:`${e?R(l,e):j(l)} did not answer${e?" with the document's title":""} in ${s/1e3}s (${g})${d?`; the server's output is in ${f}`:""}.`};if(d){let a=await te({...A,answering:!0});if(a&&a.pid!==d.pid){if(d.exitCode===null)try{process.kill(d.pid)}catch{}({port:l}=a),y={pid:a.pid,kind:(await oe(A))?.kind??"cli",version:null},d=null;continue}if(!a&&d.exitCode===null){g="the server started has not announced itself yet";continue}if(!a){if(!await re(l)){if(u=await E(p.indexOf(l)+1,[...b,`${l} (taken by another program while the server started)`]),u.failed)return u.failed;({port:l,started:d,passed:b}=u),y=u.running??null,N=Date.now()+s;continue}let c=await m.readFile(f,"utf8").catch(()=>"");return{ok:!1,reason:"stopped",message:`The Gallery server on port ${l} stopped (exit ${d.exitCode}). Its last words (${f}):
|
|
5
|
-
${c.split(`
|
|
6
|
-
`).slice(-15).join(`
|
|
7
|
-
`)}`}}}if(await B())break}return await m.writeFile(Y.lastPortFile,`${l}
|
|
8
|
-
`).catch(()=>{}),{ok:!0,port:l,pid:d?.pid??y?.pid??null,kind:y?.kind??"cli",started:!!d,replaced:W??null,passed:b}}var Ae=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`;function Pe({port:e,pid:r,kind:t,started:s,replaced:n,passed:o=[]}){let p=[`pid ${r}`,...t==="dev"?["npm run dev's"]:[],...s?[`started now${o.length?`, after passing over ${Ae(o)}`:""}`]:[],...n?[`it replaced Gallery ${n.version??"an older version"}'s server, pid ${n.pid}`]:[]],L=s?`; its log: ${f}`:"";return`This workspace's Gallery server runs on port ${e} (${p.join(", ")}${L}). This command is done; the server runs on after it (nothing to wait for or keep running).`}async function Re(e,r,t=null){return[Pe(r),...e?[`${le}${ve(r.port,e)}`]:[],`${$}${e?await xe(r.port,{slug:e,block:t}):j(r.port)}`]}async function Ke(e,{skipped:r,command:t,ports:s=null}){let n=`gallery open ${e} starts it and prints the address to give the user`;if(r)return[`Preview: not started (--no-preview or ${D}): ${n}.`];let o=await be({slug:e,command:t,ports:s});return o.ok?Re(e,o):[`Preview: not started: ${o.message}`,`When that is fixed, ${n}.`]}export{$ as a,le as b,Ve as c,ze as d,Ue as e,ve as f,j as g,ke as h,be as i,Pe as j,Re as k,Ke as l};
|
package/dist/chunk-JL6R4FG4.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{b as i,f as a}from"./chunk-4OZWXZE5.mjs";import"./chunk-5L7RYZCL.mjs";import u from"node:path";import d from"node:fs/promises";import{SIDEBAR_FILE as g,readSidebarText as b}from"../browser/shared/extension-sidebar.mjs";import{extensionSource as k,listExtensions as v,readExtension as N}from"../browser/shared/extensions.mjs";import{isExtensionId as x}from"../browser/shared/outline-shape.mjs";import{withOutlineLock as E}from"../browser/shared/outline.mjs";import{reportsDirectory as c}from"../browser/shared/paths.mjs";import{defaultWorkspace as y,ensureWorkspace as S,layoutOf as f}from"../browser/shared/workspace.mjs";var w=n=>`${n} ${n===1?"entry":"entries"}`;function I(n){if(n.length>0)throw new i("list takes nothing: gallery extension check <id> reads one.");return v(c,{all:!0}).then(t=>{if(console.log(`Public columns: ${f(y()).extensions} (gallery extension new <id> "<title>"; --local for this project).`),t.length===0){console.log(`No extensions visible from ${c}. Use gallery extension new <id> "<title>" (references/extensions.md says how to fill its entries).`);return}console.log(`${t.length} extension${t.length===1?"":"s"} visible from ${c}:`);for(let o of t){let e=o.missing?`no ${g}: it gives the sidebar no column`:o.error?`\u6761\u76EE\u8BFB\u4E0D\u51FA\u6765\uFF1A${o.error.message}`:`${o.title}, ${w(o.count)}${o.notes.length?`, ${o.notes.length} note${o.notes.length===1?"":"s"}`:""}`;console.log(` ${o.id} ${e}`),console.log(` ${o.file}`)}console.log("gallery extension check <id> prints what the sidebar shows of one.")})}function p(n,t,o=[]){for(let e of n){let s=e.url?e.url:"(no address: a click opens and closes what is under it)";o.push(`${" ".repeat(t)}${e.id} ${e.icon?`${e.icon} `:""}${e.title} ${s}`),p(e.children??[],t+1,o)}return o}async function A(n){if(n.length!==1)throw new i("Name one extension: gallery extension check <id>.");let[t]=n;if(!x(t))throw new i(`Not an extension's id: ${t} (its folder's name under extensions/: lowercase letters, digits and dashes, 48 at most).`);let o=await k(c,t);o||(console.error(`No extension "${t}" visible from ${c}: gallery extension list shows them.`),process.exit(1));let e=await N(o.root,t),s=o.file;e.missing&&(console.error(`FAIL ${s}: there is no ${g}; the folder gives the sidebar no column until it has one (references/extensions.md says how it is written).`),process.exit(1)),e.error&&(console.error(`FAIL ${s}: ${e.error.message}`),console.error(`The sidebar shows the column "${e.title}" with one row: \u6761\u76EE\u8BFB\u4E0D\u51FA\u6765\uFF1A${e.error.message}`),process.exit(1)),console.log(`The sidebar shows the column ${e.title}${e.icon?` (${e.icon})`:""}, ${w(e.count)}, in the order the file gives (an entry with an address opens it beside the sidebar, one without opens and closes what is under it):`),console.log(e.title);for(let r of p(e.entries,1))console.log(r);for(let r of e.notes)console.log(`note: ${r.message}`);console.log(`OK ${t}: ${w(e.count)} (${s})`)}async function L(n,t){if(n.length!==2||!x(n[0]))throw new i('Use gallery extension new <id> "<title>" [--local].');let[o,e]=n,s=b(JSON.stringify({title:e,entries:[]}));if(s.error)throw new i(s.error.message);let r=t?c:y();if(!(await S(r)).ours)throw new i(`Not a Gallery workspace: ${r}`);let $=u.join(f(r).extensions,o),h=u.join($,g);await E(r,async()=>{for(let l of[f(r).extensions,$]){await d.mkdir(l,{recursive:!0});let m=await d.lstat(l);if(!m.isDirectory()||m.isSymbolicLink())throw new i(`Not an ordinary directory: ${l}`)}try{await d.writeFile(h,JSON.stringify({title:s.sidebar.title,entries:[]},null,2)+`
|
|
3
|
-
`,{flag:"wx"})}catch(l){throw l.code==="EEXIST"?new i(`Already exists: ${h}. Read and edit this file instead.`):l}}),console.log(`Created ${t?"project":"public"} extension ${o}
|
|
4
|
-
${h}`)}async function B(n){let[t,...o]=n;if(t==="new"){let{positional:e,options:s}=a({argv:o,options:["--local"]});return L(e,s.has("--local"))}if(t==="list"){let{positional:e}=a({argv:o});return I(e)}if(t==="check"){let{positional:e}=a({argv:o});return A(e)}throw new i(t?`No such action: extension ${t} (new, list, check).`:"Say what to do: gallery extension new <id> <title>, list or check <id>.")}export{B as run};
|
package/dist/chunk-KUILYI7H.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a as w,b as k,c as f,g as u}from"./chunk-2GKGEVMR.mjs";import{readFileSync as x,realpathSync as E}from"node:fs";import p from"node:path";import{fileURLToPath as $}from"node:url";var S=p.dirname($(import.meta.url));function v(t=S){for(let e=t;;e=p.dirname(e)){try{let a=JSON.parse(x(p.join(e,"package.json"),"utf8"));if(a.name==="@heycys/gallery")return a.version}catch{}if(p.dirname(e)===e)return"0.0.0"}}var O={init:()=>import("./chunk-46ACXOU5.mjs"),new:()=>import("./chunk-QCEATQC4.mjs"),import:()=>import("./chunk-VNUWREXU.mjs"),open:()=>import("./chunk-L7W624FD.mjs"),serve:()=>import("./chunk-NIW7F7LU.mjs"),stop:()=>import("./chunk-EKNHM3P4.mjs"),check:()=>import("./chunk-5DPABPBI.mjs"),export:()=>import("./chunk-WCWYNFDF.mjs"),qa:()=>import("./chunk-AFGUR7SY.mjs"),list:()=>import("./chunk-6MPKCH3P.mjs"),workspaces:()=>import("./chunk-PAFSFVYB.mjs"),move:()=>import("./chunk-VA3KAQZD.mjs"),set:()=>import("./chunk-7M7UPWU6.mjs"),link:()=>import("./chunk-ZANMKAWS.mjs"),extension:()=>import("./chunk-JL6R4FG4.mjs"),block:()=>import("./chunk-YBB5LWZK.mjs"),page:()=>import("./chunk-DAMVDXR3.mjs"),skill:()=>import("./chunk-VGTMLQWZ.mjs")},j=new Set(["stop","init","skill","workspaces"]),N=(t,e)=>`${t.split(`
|
|
3
|
-
`)[0]} (gallery ${e?`${e} --help`:"help"} says more)`,g=t=>/^--.|^-[A-Za-z]/.test(t);function A(t){let e=t.indexOf("--"),a=e===-1?t:t.slice(0,e),h=e===-1?[]:t.slice(e),n=[],s=null;for(let r=0;r<a.length;r++){let o=a[r];if(o==="--workspace"||o.startsWith("--workspace=")){let c=o.includes("=")?o.slice(o.indexOf("=")+1):r+1<a.length&&!g(a[r+1])?a[++r]:"";if(!c)return{error:"--workspace takes a folder: --workspace <dir>",usage:u};if(s!==null&&p.resolve(s)!==p.resolve(c))return{error:`Two workspaces named: ${s} and ${c}.`,usage:u};s=c;continue}n.push(o)}if(n[0]==="--version"||n[0]==="-v"||n[0]==="-V")return n.length===1&&h.length===0?{version:!0}:{error:"--version takes nothing else.",usage:u};if(n.length===0||n[0]==="help"||n[0]==="--help"||n[0]==="-h"){let r=n[0]==="help"?n[1]:void 0;return r===void 0?{help:u}:Object.hasOwn(f,r)?{help:f[r]}:{error:`No such command: ${r} (${w.join(", ")}).`,usage:u}}let[d,...m]=n,l=k[d]??d;if(!Object.hasOwn(O,l))return{error:g(l)?`Unknown option: ${l} (the command comes first: gallery <command> [options]).`:`No such command: ${l} (${w.join(", ")}).`,usage:u};let i=[...m,...h];if(m.some(r=>r==="--help"||r==="-h"))return{help:f[l]};if(l==="init"){let r=new Set(["--from","--name"]),o=[];for(let c=0;c<m.length;c++)r.has(m[c])?c++:g(m[c])||o.push(m[c]);if(o.push(...h.slice(1)),o.length>1)return{error:"Name one folder at most.",usage:f.init,command:l};if(o.length===1){if(s!==null&&p.resolve(s)!==p.resolve(o[0]))return{error:`Two workspaces named: ${o[0]} and --workspace ${s}.`,usage:f.init,command:l};s=o[0]}}return{command:l,argv:i,flag:s}}var L=(t,e)=>`Cannot write the workspace ${t} (${e}): allow Gallery to write there, or pass --workspace <a folder you may write>.`,G=(t,e=!0)=>e?`${p.join(t,"gallery.json")} is not Gallery's (another program's file of that name): pass --workspace <another folder> for Gallery's documents.`:`${p.join(t,"gallery.json")} does not read as JSON: mend the file, or pass --workspace <another folder> for Gallery's documents.`;async function b(t=process.argv.slice(2)){process.stdout.on("error",i=>{throw i.code==="EPIPE"&&process.exit(process.exitCode??0),i});let e=A(t);if(e.version){let i=v();console.log(i);try{let{versionNotes:r}=await import("./chunk-TANZRINB.mjs");for(let o of r(i))console.log(o)}catch{}return}if(e.help)return void console.log(e.help);e.error&&(console.error(`${e.error}
|
|
4
|
-
${N(e.usage,e.command)}`),process.exit(2));let{command:a,flag:h}=e,{findWorkspace:n}=await import("../browser/shared/workspace.mjs"),s=n({flag:h});if(process.env.GALLERY_WORKSPACE=s.root,!j.has(a)){let{ensureWorkspace:i}=await import("../browser/shared/workspace.mjs");try{let{ours:o,reads:c}=await i(s.root);o||(console.error(G(s.root,c)),process.exit(1))}catch(o){if(!o.code)throw o;console.error(L(s.root,o.code)),process.exit(1)}let{registerQuietly:r}=await import("../browser/shared/workspace-registry.mjs");await r(s.root)}let{UsageError:d,usageFailureText:m}=await import("./chunk-GPIWQ4X4.mjs"),l=await O[a]();try{await l.run(e.argv,{command:a,workspace:s.root,how:s.how,version:v()})}catch(i){if(!(i instanceof d))throw i;console.error(m(f[a],i.message,i.synopsis)),process.exit(2)}}var y=t=>{try{return E.native(t)}catch{return null}};process.argv[1]&&y(process.argv[1])===y($(import.meta.url))&&b();export{v as a,A as b,L as c,G as d,b as e};
|
package/dist/chunk-NIW7F7LU.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{g as n,h as g}from"./chunk-JJNRIFND.mjs";import{b as m,f as d}from"./chunk-4OZWXZE5.mjs";import"./chunk-5L7RYZCL.mjs";import{spawn as P}from"node:child_process";import h from"node:fs/promises";import R from"node:path";import{projectRoot as v,release as k,reportsDirectory as t}from"../browser/shared/paths.mjs";import{answerOf as S,findPreviewServer as x,portIsFree as E,readAnnouncement as G}from"../browser/shared/preview-server.mjs";import{layoutOf as $}from"../browser/shared/workspace.mjs";var b=a=>new Promise(s=>setTimeout(s,a));async function O(a){let{positional:s,values:l}=d({values:["--port"],argv:a});if(s.length>0)throw new m(`gallery serve takes no arguments: ${s[0]}`);let o=l.has("--port")?Number(l.get("--port")):null;if(o!==null&&!(Number.isInteger(o)&&o>0&&o<65536))throw new m(`--port takes a port number: ${l.get("--port")}`);let i=await G({reportsDirectory:t}),f=i?await S(i,t,1e4):"no";f!=="no"&&(console.error(`This workspace's Gallery server runs already: ${n(i.port)} (pid ${i.pid}${f==="busy"?", not answering now":""}). gallery stop stops it; one server serves a workspace.`),process.exit(1));let r=null;if(o!==null)await E(o)||(console.error(`Port ${o} is taken: name another (--port), or leave it out for the first free one.`),process.exit(1)),r=o;else{for(let e of await g())if(await E(e)){r=e;break}r===null&&(console.error("No port from 4317 is free: name one (--port <n>)."),process.exit(1))}if(k){process.env.GALLERY_SERVER_KIND="cli";let{startProductionServer:e}=await import("./chunk-DLFZJJEE.mjs");await e({port:r,kind:"cli"}),await h.writeFile($(t).lastPortFile,`${r}
|
|
3
|
-
`).catch(()=>{}),console.log(`Gallery serves ${t} at ${n(r)} (Chrome or Edge). Ctrl+C stops it.`);return}let{writeSharedAssets:y}=await import("./chunk-DH6GMDNN.mjs");await y();let c=P(process.execPath,[R.join(v,"node_modules","vite","bin","vite.js"),"--host","127.0.0.1","--port",String(r),"--strictPort"],{cwd:v,env:{...process.env,GALLERY_WORKSPACE:t,GALLERY_SERVER_KIND:"cli"},stdio:"inherit"});for(let e of["SIGINT","SIGTERM"])process.on(e,()=>c.kill(e));let w=new Promise(e=>c.once("exit",(u,p)=>e(u??(p?1:0))));for(;;){let e=await Promise.race([w.then(p=>({code:p})),b(300).then(()=>null)]);if(e&&process.exit(e.code),(await x({reportsDirectory:t,answering:!0,timeout:2e3}))?.pid===c.pid)break}await h.writeFile($(t).lastPortFile,`${r}
|
|
4
|
-
`).catch(()=>{}),console.log(`Gallery serves ${t} at ${n(r)} (Chrome or Edge). Ctrl+C stops it.`),process.exit(await w)}export{O as run};
|
package/dist/chunk-OU3S466R.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a as Re,b as Ie}from"./chunk-QK3VISCA.mjs";import{b as Ee}from"./chunk-F4ZA6JRZ.mjs";import{a as ge,b as Me,c as pt,d as Ae,e as Ne,f as Te}from"./chunk-TOE6DPLH.mjs";import{b as ve,c as Oe,e as je,g as Ht}from"./chunk-WTEGUPFG.mjs";import{a as pe}from"./chunk-JXLSHVJ2.mjs";import{a as ke,d as be,e as $e,f as xe,g as Se}from"./chunk-XKOHV4H6.mjs";import{e as we,f as he,g as ye,h as Ct}from"./chunk-KFZBYDIS.mjs";import{a as _,m as me}from"./chunk-7XDYK3UC.mjs";import{g as ue,u as de}from"./chunk-VG5JEIUQ.mjs";var On=3e4,jn=12e4,Mn=1500,De=1e4,Fe=l=>l.reduce((i,{key:w,tag:u})=>i.set(`${w}
|
|
3
|
-
${u}`,(i.get(`${w}
|
|
4
|
-
${u}`)??0)+1),new Map);function Pe({now:l=Date.now,hold:i=On,limit:w=jn,quiet:u=Mn}={}){let k=new Map,d=new Map,O=new Map,h=new Map,c=new Map;return{wrote(p,b){h.set(p,_(b))},judge(p,{source:b,mtime:I}){if(b===null)return k.delete(p),O.delete(p),{held:!1,signs:[],wait:0,own:!1};let N=_(b),$=c.get(p)?.hash===N?c.get(p).signs:null;$||($=Me(b),c.set(p,{hash:N,signs:$}));let Z=l(),W=(J,Q=!1)=>(k.delete(p),d.set(p,Fe($)),O.set(p,b),{held:!1,signs:[],wait:J,own:Q});if(h.get(p)===N)return W(0,!0);let L=d.get(p)??new Map,H=Fe($);if([...H].some(([J,Q])=>Q>(L.get(J)??0))){let J=Math.min(I,Z),Q=k.get(p)??J;k.set(p,Q);let st=Math.min(i-(Z-J),w-(Z-Q));if(st>0)return{held:!0,signs:$.filter(({key:s,tag:g})=>H.get(`${s}
|
|
5
|
-
${g}`)>(L.get(`${s}
|
|
6
|
-
${g}`)??0)),wait:st,own:!1,taken:O.get(p)}}return W(Math.min(u,Math.max(0,u-(Z-I))))}}}import{createHmac as tr,randomBytes as qt}from"node:crypto";import{existsSync as er,mkdirSync as nr,readFileSync as rr,writeFileSync as or}from"node:fs";import z from"node:fs/promises";import P from"node:path";import{FILE as ar}from"../browser/shared/annotations.mjs";import{escapeTyped as sr}from"../browser/shared/escape.mjs";import{writeAtomic as Ft}from"../browser/shared/files.mjs";import{sendJson as C}from"../browser/shared/http.mjs";import{REQUEST_ID as Qt}from"../browser/shared/ids.mjs";import{UPLOAD_REQUEST_LIMIT as ir}from"../browser/shared/media.mjs";import{reportsDirectory as cr}from"../browser/shared/paths.mjs";import{sameDirectory as fr}from"../browser/shared/preview-server.mjs";import{slugPattern as rt}from"../browser/shared/reports.mjs";import{TODO_MOST as lr}from"../browser/shared/workspace-query.mjs";import{documentDirectory as ur,documentFiles as Mt,isDocumentSource as dr}from"../browser/shared/workspace.mjs";import zt from"node:fs/promises";import Je from"node:path";import{checkAnnotations as An,cleanAnchor as Nn,cleanItem as _e,FILE as Tn,itemsText as En,readItems as Rn,treeText as Le}from"../browser/shared/annotations.mjs";import{writeAtomic as In}from"../browser/shared/files.mjs";import{slugPattern as Fn}from"../browser/shared/reports.mjs";import{documentDirectory as Ue,documentFiles as Dn}from"../browser/shared/workspace.mjs";var Pn=600*1e3,Jn=600*1e3;function _n(l){let{units:i,boxes:w}=ye(l),u=[...i].sort((h,c)=>h.elStart-c.elStart),k=new Map(u.map((h,c)=>[h.id,c])),d=new Map(u.map(h=>[h.id,Le(h.node)])),O={h2:null,h3:null,h4:null};return u.map(h=>{let c=[];for(let N=h;N;N=N.parent===null?null:i[N.parent]){let $=w[N.box];if($?.kind==="panel"&&$.key!==null){let W=i.find(L=>L.kind==="tab"&&L.parent===$.unit&&L.key===$.key);W&&c.unshift({tab:d.get(W.id)})}let Z=$?.unit===null||$?.unit===void 0?null:i[$.unit];if(Z?.tag==="details"&&$.kind==="details"){let W=Z.node.childNodes.find(L=>L.tagName==="summary");W&&c.push({details:Le(W)})}}let p=c.find(N=>N.tab)?.tab,b=c.find(N=>N.details)?.details,I=[p,O.h2,O.h3,O.h4,b].filter(Boolean);return h.tag==="h2"?Object.assign(O,{h2:d.get(h.id),h3:null,h4:null}):h.tag==="h3"?Object.assign(O,{h3:d.get(h.id),h4:null}):h.tag==="h4"&&(O.h4=d.get(h.id)),{id:h.blockId,text:d.get(h.id),parent:h.parent===null?null:k.get(h.parent)??null,where:I,heading:/^h[2-4]$/.test(h.tag)}})}function We({reportsDirectory:l,read:i,write:w=In,dropped:u=()=>{},now:k=Date.now}){let d=new Map,O=new Map,h=new Map,c=(s,g)=>{let r=h.get(s);if(r?.text===g)return r.units;let a=_n(g);return h.set(s,{text:g,units:a}),a},p=s=>Je.join(Ue(s,l),Tn),b=s=>typeof s=="string"&&Fn.test(s);async function I(s){let g=await zt.readFile(p(s),"utf8").catch(()=>null);return{text:g,items:g===null?[]:Rn(g)}}async function N(s,g,r){let a=En(g);return a===r||(a===null?await zt.rm(p(s),{force:!0}):await w(p(s),a)),$(a)}let $=s=>s===null?"":_(s),Z=s=>{let g=d.get(s)??new Map;for(let[r,a]of g)k()-a>Pn&&g.delete(r);return[...g.keys()]},W=(s,g)=>g.forEach(r=>d.get(s)?.delete(r)),L=s=>{let g=O.get(s)??O.set(s,new Map).get(s);for(let[r,a]of g)k()-a>Jn&&g.delete(r);return g};async function H(s,{keep:g=null,items:r=null,before:a=void 0}={}){let S=r?{items:r,text:a}:await I(s),v=await i(s).catch(()=>null);if(!v)return{items:S.items,units:[],places:new Map,version:$(S.text),missing:!0};let D=c(s,v.text),T=L(s),x=An(S.items,D,{keep:new Set([...T.keys(),g])});for(let M of T.keys())x.waiting.has(M)||T.delete(M);if(x.dropped.length>0){let M=d.get(s)??d.set(s,new Map).get(s);for(let ot of x.dropped)M.set(ot.id,k())}let A=x.changed||r?await N(s,x.items,S.text):$(S.text);return x.dropped.length>0&&u(s,x.dropped),{items:x.items,units:D,places:x.places,version:A,missing:!1}}let F=(s,{items:g,version:r})=>({ok:!0,version:r,items:g,dropped:Z(s)});async function J(s){if(!b(s))return[400,{ok:!1,reason:"body"}];let g=await H(s);return g.missing?[404,{ok:!1,reason:"missing"}]:[200,F(s,g)]}async function Q(s){if(!b(s))return[400,{ok:!1,reason:"body"}];let g=await H(s);if(g.missing)return[404,{ok:!1,reason:"missing"}];let r=null,a=Dn(Ue(s,l));try{r=JSON.parse(await zt.readFile(a.json,"utf8"))}catch{}let S=await i(s).catch(()=>null),v=/<h1\b[^>]*>([\s\S]*?)<\/h1>/i.exec(S?.text??"")?.[1]?.replace(/<[^>]*>/g,"").trim(),D=typeof r?.title=="string"&&r.title.trim()?r.title.trim():v||s,T=g.units.some(A=>A.heading),x=g.items.map(A=>{let M=g.units[g.places.get(A.id)?.at],ot=M?.where?.length?M.where:M?.heading?[M.text]:[];return{where:ot,top:T&&ot.length===0,blocks:A.anchor.blocks.filter(B=>g.units.some(nt=>nt.id===B)),whole:A.anchor.kind==="blocks",quote:A.anchor.quote,text:A.text}});return[200,{ok:!0,title:D,path:Je.resolve(a.html),items:x}]}async function st(s){let{slug:g}=s??{};if(!b(g))return[400,{ok:!1,reason:"body"}];if(!await i(g).catch(()=>null))return[404,{ok:!1,reason:"missing"}];let r=await I(g);if(s.anchors&&typeof s.anchors=="object"&&!Array.isArray(s.anchors)){let T=r.items.map(A=>{let M=Object.hasOwn(s.anchors,A.id)?Nn(s.anchors[A.id]):null;return M&&M.kind===A.anchor.kind?{...A,anchor:M}:A}),x=await N(g,T,r.text);return[200,F(g,{items:T,version:x})]}let a=r.items,S=null,v=null;if(s.put!==void 0){let T=a.find(A=>A.id===s.put?.id),x=_e({...s.put,created:T?.created??s.put?.created});if(!x)return[400,{ok:!1,reason:"item"}];a=T?a.map(A=>A.id===x.id?x:A):[...a,x],S=x.id,T||L(g).set(x.id,k()),W(g,[x.id])}else if(typeof s.remove=="string")a=a.filter(T=>T.id!==s.remove);else if(s.clear===!0)v=a,a=[];else if(Array.isArray(s.restore)){let T=new Map(a.map(M=>[M.id,M])),x=s.restore.map(M=>_e(M,M?.updated)).filter(M=>M&&!(T.get(M.id)?.updated>M.updated)),A=new Set(x.map(M=>M.id));for(let M of A)T.has(M)||L(g).set(M,k());a=[...a.filter(M=>!A.has(M.id)),...x],W(g,[...A])}else return[400,{ok:!1,reason:"body"}];let D=await H(g,{keep:S,items:a,before:r.text});return[200,{...F(g,D),...v?{removed:v}:{}}]}async function q(s){if(!b(s))return;let{text:g}=await I(s);g!==null&&await H(s)}return{list:J,copy:Q,change:st,afterWrite:q}}import wt from"node:fs/promises";import ht from"node:path";import{writeAtomic as Be}from"../browser/shared/files.mjs";import{slugPattern as Gt}from"../browser/shared/reports.mjs";var It=1,Ot={seen:"seen.html",base:"base.html",state:"state.json"},Ln=4,Un=1800*1e3;function Ye({stateDirectory:l=null,shown:i,folderOf:w,isPage:u=()=>!1,log:k=null,now:d=Date.now,quiet:O=Un}){let h=new Map,c=r=>ht.join(l,"changes",r),p=Promise.resolve(),b=r=>{let a=p.then(r);return p=a.catch(S=>k?.(`changes: ${S.message}`)),a};async function I(r){if(!l)return h.get(r)?.state??null;try{let a=JSON.parse(await wt.readFile(ht.join(c(r),Ot.state),"utf8"));return a?.v===It&&typeof a.seen=="string"?a:null}catch{return null}}async function N(r,a){return l?wt.readFile(ht.join(c(r),Ot[a]),"utf8").catch(()=>null):h.get(r)?.[a]??null}async function $(r,a,S={}){if(!l){let v=h.get(r)??{};h.set(r,{...v,...S,state:a});return}await wt.mkdir(c(r),{recursive:!0});for(let[v,D]of Object.entries(S))D===null?await wt.rm(ht.join(c(r),Ot[v]),{force:!0}):await Be(ht.join(c(r),Ot[v]),D);await Be(ht.join(c(r),Ot.state),`${JSON.stringify(a)}
|
|
7
|
-
`)}async function Z(r){h.delete(r),l&&await wt.rm(c(r),{recursive:!0,force:!0,maxRetries:3})}let W=async r=>Math.round((await wt.stat(w(r)).catch(()=>null))?.birthtimeMs??0),L=r=>r?.base?`${r.since}|${r.writes}`:null,H=r=>Number.isFinite(r?.draft)&&d()-r.draft<O?r.draft:null,F=(r,a,S,v=H(r))=>[{v:It,born:r?.born??0,seen:a,...v===null?{}:{draft:v}},{seen:S,base:null}];async function J(r){let a=await I(r);if(!a)return null;let S=await W(r);return a.born&&S&&a.born!==S?(await Z(r),null):a}async function Q(r,a){if(typeof a!="string"||!Gt.test(r)||u(r))return!1;let S=_(a),v=await J(r);if(!v)return await $(r,{v:It,born:await W(r),seen:S},{seen:a}),!1;if(v.seen===S)return!1;let D=await N(r,"seen"),T=new Date(d()).toISOString();if(D===null)return await $(r,...F(v,S,a)),!1;let x=i(D),A=i(a);if(!v.base){if(!pt(x,A))return await $(r,...F(v,S,a)),!1;if(H(v)!==null||Ae(x))return await $(r,...F(v,S,a,d())),!1;let{draft:B,...nt}=v;return await $(r,{...nt,seen:S,base:_(x),since:T,at:T,writes:1},{seen:a,base:x}),!0}let M=await N(r,"base");if(M===null||!pt(M,A))return await $(r,...F(v,S,a)),!0;let ot=pt(x,A)!==null;return await $(r,{...v,seen:S,...ot?{at:T,writes:v.writes+1}:{}},{seen:a}),ot}async function st(r,a,S,v){if(!Gt.test(r)||u(r))return!1;let D=await J(r),T=_(a);if(!D?.base)return await $(r,...F(D??{born:await W(r)},T,a,v?null:H(D))),!1;let x=await N(r,"base");if(x!==null&&S)try{x=S(x)}catch(A){k?.(`changes: ${r}: the baseline did not take the edit (${A.message})`)}return x===null||!pt(x,i(a))?(await $(r,...F(D,T,a)),!0):(await $(r,{...D,seen:T,base:_(x)},{seen:a,base:x}),!1)}async function q(r,a){if(!Gt.test(r)||u(r))return{ended:!1,moved:!1};let S=typeof a=="string"?await Q(r,a):!1,v=await J(r);if(v?.draft===void 0)return{ended:!1,moved:S};let{draft:D,...T}=v;return await $(r,T),{ended:H(v)!==null,moved:S}}let s=new Map;async function g(r,a){await Q(r,a);let S=i(a),v=_(S),D=await J(r);if(!D?.base)return{pending:!1,version:v};let T=`${r} ${D.base} ${v}`,x=s.get(T);if(x===void 0){let A=await N(r,"base");for(x=A===null?null:pt(A,S),s.set(T,x);s.size>Ln;)s.delete(s.keys().next().value)}return x?{pending:!0,version:v,stamp:L(D),since:D.since,writes:D.writes,...x}:{pending:!1,version:v}}return{look:(r,a)=>b(()=>Q(r,a)),wrote:(r,a,S=null,{reader:v=!1}={})=>b(()=>st(r,a,S,v)),endDraft:(r,a=null)=>b(()=>q(r,a)),read:(r,a)=>b(()=>g(r,a)),stamp:r=>b(async()=>L(await J(r))),snapshot:r=>b(async()=>{let a=await J(r);return a?{state:a,seen:await N(r,"seen"),base:await N(r,"base")}:null}),clear:r=>b(async()=>{let a=await J(r);a?.base&&await $(r,{v:It,born:a.born,seen:a.seen},{base:null})}),restore:(r,a)=>b(async()=>{a?.state&&await $(r,a.state,{seen:a.seen,base:a.base})}),forget:r=>b(()=>Z(r)),idle:()=>b(async()=>{})}}import{randomBytes as Wn}from"node:crypto";import ct from"node:fs/promises";import yt from"node:path";import{FILE as Bn,readItems as Yn}from"../browser/shared/annotations.mjs";import{writeAtomic as Zn}from"../browser/shared/files.mjs";import{documentDirectory as Cn}from"../browser/shared/workspace.mjs";var Hn=20,He=/^\d{8}T\d{6}Z-[a-f0-9]{8}\.json$/,Ze=80,ze=({stateDirectory:l,slug:i})=>yt.join(l,"dropped-annotations",i),Ge=l=>({id:l.id,text:l.text,quote:l.anchor?.quote??"",kind:l.anchor?.kind??"text"});async function Ke({stateDirectory:l,reportsDirectory:i,slug:w,time:u,items:k}){let d=ze({stateDirectory:l,reportsDirectory:i,slug:w});await ct.mkdir(d,{recursive:!0});let O=u.replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z");await Zn(yt.join(d,`${O}-${Wn(4).toString("hex")}.json`),JSON.stringify({time:u,items:k}));let h=(await ct.readdir(d)).filter(c=>He.test(c)).sort();await Promise.all(h.slice(0,Math.max(0,h.length-Hn)).map(c=>ct.rm(yt.join(d,c),{force:!0})))}async function qr({stateDirectory:l,reportsDirectory:i,slug:w}){let u=ze({stateDirectory:l,reportsDirectory:i,slug:w}),k=(await ct.readdir(u).catch(()=>[])).filter(h=>He.test(h)).sort();if(k.length===0)return[];let d=new Set(Yn(await ct.readFile(yt.join(Cn(w,i),Bn),"utf8").catch(()=>"")).map(h=>h.id)),O=[];for(let h of k){let c=yt.join(u,h);try{let p=JSON.parse(await ct.readFile(c,"utf8")),b=Array.isArray(p?.items)?p.items.filter(I=>typeof I?.id=="string"&&!d.has(I.id)):[];typeof p?.time=="string"&&b.length&&O.push({time:p.time,items:b})}catch{}await ct.rm(c,{force:!0}).catch(()=>{})}return O}var zn=(l,i=new Date)=>{let w=new Date(l),u=d=>String(d).padStart(2,"0"),k=`${u(w.getHours())}:${u(w.getMinutes())}`;return w.toDateString()===i.toDateString()?k:`${w.getFullYear()}-${u(w.getMonth()+1)}-${u(w.getDate())} ${k}`},Ce=l=>{let i=String(l??"").replace(/\s+/g," ").trim();return JSON.stringify(i.length>Ze?`${i.slice(0,Ze-1)}\u2026`:i)};function Kt(l,{time:i=null,items:w},{today:u=new Date}={}){let k=yt.resolve(l),d=`${w.length} \u6279\u6CE8 (annotation${w.length===1?"":"s"})`;return[`annotations ${k}: ${i?`at ${zn(i,u)}, `:""}Gallery deleted ${d} whose words are gone from the document (rewritten or deleted):`,...w.map(({id:O,text:h,quote:c,kind:p})=>` ${O} ${Ce(h)} on ${p==="blocks"?"the blocks ":""}${Ce(c)}`)]}function Xr(l,i,{today:w=new Date}={}){return i.length?[...i.flatMap(u=>Kt(l,u,{today:w}))," they were the reader's: say in your hand-off which your edit carried out and which you left, and never write them back"]:[]}import{randomBytes as Gn}from"node:crypto";import gt from"node:fs/promises";import jt from"node:path";import{writeAtomic as Kn}from"../browser/shared/files.mjs";var Qn=20,Qe=/^\d{8}T\d{6}Z-[a-f0-9]{8}\.json$/,Ve=({stateDirectory:l,slug:i})=>jt.join(l,"rewrites",i);async function qe({stateDirectory:l,reportsDirectory:i,slug:w,time:u,changes:k}){let d=Ve({stateDirectory:l,reportsDirectory:i,slug:w});await gt.mkdir(d,{recursive:!0});let O=u.replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z");await Kn(jt.join(d,`${O}-${Gn(4).toString("hex")}.json`),JSON.stringify({time:u,changes:k}));let h=(await gt.readdir(d)).filter(c=>Qe.test(c)).sort();await Promise.all(h.slice(0,Math.max(0,h.length-Qn)).map(c=>gt.rm(jt.join(d,c),{force:!0})))}async function Xe({stateDirectory:l,reportsDirectory:i,slug:w}){let u=Ve({stateDirectory:l,reportsDirectory:i,slug:w}),k=(await gt.readdir(u).catch(()=>[])).filter(O=>Qe.test(O)).sort(),d=[];for(let O of k){let h=jt.join(u,O);try{let c=JSON.parse(await gt.readFile(h,"utf8"));typeof c?.time=="string"&&Array.isArray(c.changes)&&d.push(c)}catch{}await gt.rm(h,{force:!0}).catch(()=>{})}return d}var Vn=(l,i=new Date)=>{let w=new Date(l),u=d=>String(d).padStart(2,"0"),k=`${u(w.getHours())}:${u(w.getMinutes())}`;return w.toDateString()===i.toDateString()?k:`${w.getFullYear()}-${u(w.getMonth()+1)}-${u(w.getDate())} ${k}`};function ao(l,i,{today:w=new Date}={}){if(!i.length)return[];let u=jt.resolve(l),k=[];for(let{time:d,changes:O}of i){let h=[];for(let{line:c,rule:p,key:b}of[...O].sort((I,N)=>I.line-N.line)){let I=`line ${c} ${p}${b?` ${b}`:""}`;h.includes(I)||h.push(I)}k.push(`preview ${u}: at ${Vn(d,w)}, when the reader edited the page, the preview wrote your natural HTML as the kit's markup: ${h.join(", ")}`),k.push(...O.filter(c=>c.note).map(({line:c,rule:p,note:b})=>` line ${c}, ${p}: ${b}`))}return k.push(" re-read the file before editing it (those lines are the file's as you had left it)"),k}import{todoRef as qn}from"../browser/shared/workspace-query.mjs";var Xn=(l,i)=>l.length===i.length&&l.every((w,u)=>w===i[u]);function tn(l,i,w,u){let k=Ie(i),d=Re(w,{at:!0}),O=null,h=c=>(O??=we(w).units).find(p=>p.elStart===c)??null;return u.map(c=>{let p=qn(c?.ref);if(!p||p.slug!==l||typeof c.done!="boolean")return{reason:"ref"};let b=p.block?d.find(N=>N.block===p.block)??null:null;if(b&&b.text!==p.text)return{reason:"changed"};if(!b){let N=d.filter($=>$.text===p.text&&Xn($.path,p.path));if(p.version===k)b=N.find($=>$.nth===p.nth)??null;else{if(N.length>1)return{reason:"ambiguous"};b=N[0]??null}}if(!b)return{reason:"changed"};let I=h(b.at);return I?{unit:I,done:b.done,want:c.done}:{reason:"locked"}})}function en(l,i){let w=new Map,u=i.map(c=>{if(!c.unit)return!1;let p=w.has(c.unit.id)?w.get(c.unit.id):c.done;return w.set(c.unit.id,c.want),p!==c.want}),k=new Map;for(let c of i)c.unit&&w.get(c.unit.id)!==c.done&&k.set(c.unit.id,c);if(k.size===0)return{commit:null,changed:u};let d=[],O=[],h=new Map;for(let[c,p]of k){let b=`todo${d.length}`,I=p.unit.blockId?{key:b,id:p.unit.blockId}:{key:b,open:c,hash:me(l,p.unit)};d.push({key:b,unit:I,attribute:"data-checked",value:w.get(c)?"":null}),O.push(I),h.set(c,b)}return{commit:{units:d,touch:O,keys:h},changed:u}}import{EMPTY_STYLE as mr,emptyWordsScript as pr,showEmpty as wr}from"../browser/editor/components/placeholder.mjs";import{TOKENS as hr}from"../browser/editor/page/look.mjs";import{MARGIN_STYLE as yr,earlyMarginScript as gr}from"../browser/editor/page/margin.mjs";var Vt=/^[a-f0-9]{16}$/,Xt=2*1024*1024,kr=ir,nn=50,rn=/^\d{8}T\d{6}Z-[a-f0-9]{16}\.html$/,br=30,on=3,an=200,ft="\u6587\u4EF6\u4E00\u518D\u88AB\u4FEE\u6539\uFF08\u4F8B\u5982 AI \u6B63\u5728\u5199\u5165\uFF09\uFF0C\u7A0D\u540E\u518D\u540C\u6B65",$r="\u8FD9\u6B21\u7684\u4FEE\u6539\u592A\u5927\uFF0C\u4E00\u6B21\u5B58\u4E0D\u4E0B",xr=250,lt=Symbol("again"),Sr="/__gallery/edit/src/editor/page/editor.mjs",vr=l=>new Promise(i=>setTimeout(i,l));function Or(l,i=Xt){return new Promise((w,u)=>{let k=[],d=0;l.on("data",O=>{d+=O.length,d>i?k.length=0:k.push(O)}),l.on("end",()=>d>i?u(new Error("too-large")):w(Buffer.concat(k).toString("utf8"))),l.on("error",u)})}function jr(l){if(!l)return qt(16).toString("hex");let i=P.join(l,"token");try{let u=rr(i,"utf8").trim();if(/^[a-f0-9]{32}$/.test(u))return u}catch{}let w=qt(16).toString("hex");try{nr(l,{recursive:!0,mode:448}),or(i,w,{mode:384})}catch{}return w}function Wo({reportsDirectory:l=cr,stateDirectory:i=null,write:w=Ft,ids:u=!0,finish:k=p=>p,log:d=null,settling:O={},reviewing:h={},onChanges:c=()=>{}}={}){let p=jr(i),b=Pe(O),I=O.wait??De,N=new Map,$=async(t,n,e,o="reader")=>{let f=await w(t,n,e);if(f!==!1&&dr(P.basename(t))){let y=P.basename(P.dirname(t));b.wrote(y,n),N.set(y,{hash:_(n),by:o})}return f},Z=t=>ur(t,l),W=t=>Mt(Z(t)).html,L=new Map,H=i&&P.join(i,"snapshots"),F=Promise.resolve(),J=Promise.resolve(),Q=async(t,n,e,{by:o="time"}={})=>{let f=(await z.readdir(t)).filter(m=>n.test(m));if(f.length<=e)return;let y=o==="name"?f.sort():(await Promise.all(f.map(async m=>({name:m,time:(await z.stat(P.join(t,m))).mtimeMs})))).sort((m,j)=>m.time-j.time).map(({name:m})=>m);await Promise.all(y.slice(0,y.length-e).map(m=>z.rm(P.join(t,m),{force:!0})))},st=(t,n)=>{H&&(F=F.then(async()=>{let e=P.join(H,`${t}.html`),o=new Date;try{await z.utimes(e,o,o);return}catch{}await z.mkdir(H,{recursive:!0}),await Ft(e,n),await Q(H,/^[a-f0-9]{16}\.html$/,nn)}).catch(()=>{}))},q=(t,n)=>{i&&(F=F.then(async()=>{let e=P.join(i,"history",t),o=_(n);if(await z.mkdir(e,{recursive:!0}),(await z.readdir(e)).filter(m=>rn.test(m)).sort().at(-1)?.endsWith(`-${o}.html`))return;let y=new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d+Z$/,"Z");await Ft(P.join(e,`${y}-${o}.html`),n),await Q(e,rn,br,{by:"name"})}).catch(()=>{}))},s=new Map,g=t=>i&&P.join(i,"receipts",t),r=(t,n,e,o)=>{for(s.set(`${t} ${n}`,{digest:e,answer:o});s.size>an*4;)s.delete(s.keys().next().value);let f=g(t);f&&(F=F.then(async()=>{await z.mkdir(f,{recursive:!0}),await Ft(P.join(f,`${n}.json`),JSON.stringify({digest:e,answer:o})),await Q(f,{test:y=>y.endsWith(".json")&&Qt.test(y.slice(0,-5))},an)}).catch(()=>{}))},a=async(t,n)=>{let e=s.get(`${t} ${n}`);if(e)return e;let o=g(t);if(!o)return null;await F;try{let f=JSON.parse(await z.readFile(P.join(o,`${n}.json`),"utf8"));return typeof f?.digest=="string"&&f.answer?.ok?f:null}catch{return null}},S=new Map,v=(t,n)=>{let e=new Date().toISOString();if(!i)return void S.set(t,[...S.get(t)??[],{time:e,changes:n}].slice(-20));F=F.then(()=>qe({stateDirectory:i,reportsDirectory:l,slug:t,time:e,changes:n})).catch(()=>{})},D=async t=>{if(!i){let n=S.get(t)??[];return S.delete(t),n}return await F,Xe({stateDirectory:i,reportsDirectory:l,slug:t})},T=(t,n)=>{for(L.delete(t),L.set(t,n);L.size>nn;)L.delete(L.keys().next().value);st(t,n)},x=async t=>{if(L.has(t))return L.get(t);if(!H||!Vt.test(t))return null;await F;let n=await z.readFile(P.join(H,`${t}.html`),"utf8").catch(()=>null);return n===null||_(n)!==t?null:(T(t,n),n)},A=new Map,M=t=>{let n=A.get(t);if(n)return n;let e=ve(t,{finish:k});for(A.set(t,e);A.size>8;)A.delete(A.keys().next().value);return e},ot=P.join(P.resolve(l),".gallery","pages"),B=Ye({...h,stateDirectory:i,shown:t=>M(t).text,folderOf:Z,log:d,isPage:t=>P.resolve(Z(t)).startsWith(ot+P.sep)}),nt=(t,n)=>n.then(e=>{e&&c(t)},e=>d?.(`${t}: the Agent's changes not kept (${e.message})`));async function Dt(t,n=void 0){if(typeof t!="string"||!rt.test(t))return null;let e=W(t),o=n!==void 0?n:await z.readFile(e,"utf8").catch(()=>null);if(o===null)return null;let{text:f,changes:y}=M(o);return{file:e,source:o,text:f,version:_(f),changes:y}}async function it(t){if(typeof t!="string"||!rt.test(t))return{source:null,held:!1,signs:[],wait:0,own:!1};let n=W(t),e=await z.readFile(n,"utf8").catch(()=>null),o=(await z.stat(n).catch(()=>null))?.mtimeMs??0;return{source:e,...b.judge(t,{source:e,mtime:o})}}async function kt(t,n=Date.now()+I){for(;;){let e=await it(t);if(!e.held||Date.now()>=n)return e;await vr(Math.max(0,Math.min(xr,n-Date.now())))}}async function Pt(t,{wait:n=I}={}){let e=await kt(t,Date.now()+n),o=await Dt(t,e.held&&e.taken!==void 0?e.taken:e.source);return o&&{...o,held:e.held===!0}}function sn(t,n,{editor:e=Sr,kitTags:o=()=>[]}={}){let{html:f,map:y}=ge(n);T(y.version,n);let m=ue(l),j=de(m).map(({assets:Y,...X})=>({...X,kit:o(Y)})),E=`<script type="application/json" id="doc-edit-map" data-doc-dev>${JSON.stringify({slug:t,token:p,...y,components:j,hidden:m.settings.hidden}).replace(/</g,"\\u003c")}</script>
|
|
8
|
-
<script data-doc-dev>document.currentScript.remove(); import(${JSON.stringify(e)});</script>`,U=`<style data-doc-dev>.doc-display { display: none; }</style>
|
|
9
|
-
<style data-doc-dev data-ge-palette>${hr}</style>
|
|
10
|
-
<style data-doc-dev>${mr}</style>
|
|
11
|
-
<script data-doc-dev>${pr()}</script>
|
|
12
|
-
<script data-doc-dev>document.currentScript.remove(); document.documentElement.setAttribute("data-ge-order", "file");</script>
|
|
13
|
-
<style data-doc-dev data-ge-margin-style>${yr}</style>
|
|
14
|
-
<script data-doc-dev>document.currentScript.remove(); ${gr(t,{notes:er(P.join(Z(t),ar))})}</script>`;return{html:wr(f),snippet:E,head:U}}let cn=t=>T(_(t),t);function te(t){if(t.method!=="POST")return[405,{ok:!1,reason:"method"}];let n=t.headers.host??"",e=t.socket.localPort;return n!==`127.0.0.1:${e}`&&n!==`localhost:${e}`?[403,{ok:!1,reason:"host"}]:t.headers.origin!==`http://${n}`?[403,{ok:!1,reason:"origin"}]:t.headers["x-gallery-token"]!==p?[403,{ok:!1,reason:"token"}]:null}async function ut(t,n=Xt){let e=te(t);if(e)return{error:e};if(!/^application\/json\b/i.test(t.headers["content-type"]??""))return{error:[415,{ok:!1,reason:"type"}]};try{return{body:JSON.parse(await Or(t,n))}}catch(o){return{error:o.message==="too-large"?[413,{ok:!1,reason:"body",message:$r}]:[400,{ok:!1,reason:"body"}]}}}async function Jt(t,n){let{slug:e,opening:o,known:f=null,texts:y=[],units:m=[],touch:j=[],pageIds:R=null,request:E=null,agent:U=!1}=t;if(typeof e!="string"||!rt.test(e)||![y,m,j].every(Array.isArray))return[400,{ok:!1,reason:"body"}];if(E!==null&&(typeof E!="string"||!Qt.test(E)))return[400,{ok:!1,reason:"body"}];let Y=E===null?null:_(JSON.stringify([o??null,y,m,j])),X=await ee(t);if(X)return X;let G=et=>(E!==null&&r(e,E,Y,et),[200,et]),K=W(e),tt=typeof o=="string"&&Vt.test(o)?await x(o):null,V=et=>tr("sha256",p).update(`${e}
|
|
15
|
-
${et}`).digest("hex").slice(0,32);for(let et=1;;et++){let{source:at,held:Tt}=await it(e);if(at===null)return[404,{ok:!1,reason:"missing"}];if(Tt)return Date.now()<n?lt:[409,{ok:!1,reason:"busy",message:ft}];nt(e,B.look(e,at));let{text:vt,changes:Zt}=M(at),se=[],Et=be({current:vt,opening:tt,texts:y,units:m,touch:j,ids:u?()=>{let Rt=typeof u=="function"?u():Ct();return se.push(Rt),Rt}:!1,seal:V,pageIds:R}),{title:ie,icon:ce,...fe}=Et,mt=Et.text===vt?vt:k(Et.text);mt!==Et.text&&(fe.version=_(mt));let le={...fe,foreign:typeof f=="string"&&_(vt)!==f};if(mt===vt)return G({ok:!0,...le,wrote:!1,notes:[]});if(q(e,at),!await $(K,mt,{expect:at},U===!0?"agent":"reader")){if(et===on)return[409,{ok:!1,reason:"busy",message:ft}];continue}q(e,mt),nt(e,B.wrote(e,mt,Rt=>{let vn=0;return Ne(Rt,{opening:tt,texts:y,units:m,touch:j,pageIds:R,seal:V,ids:u?()=>se[vn++]??(typeof u=="function"?u():Ct()):!1})},{reader:U!==!0})),Zt.length&&(d&&d(Ht(K,Zt).join(`
|
|
16
|
-
`)),v(e,Zt));let Sn=[...ie?await At(P.dirname(K),ie):[],...ce!==void 0?await _t(P.dirname(K),ce):[]];return G({ok:!0,...le,wrote:!0,notes:Sn})}}async function fn(t,n){return typeof t!="string"||!rt.test(t)?[404,{ok:!1,reason:"missing",message:"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"}]:!Array.isArray(n)||n.length===0||n.length>lr?[400,{ok:!1,reason:"body"}]:Lt({slug:t},async(e,o)=>{let{source:f,held:y}=await it(t);if(f===null)return[404,{ok:!1,reason:"missing",message:"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"}];if(y)return Date.now()<o?lt:[409,{ok:!1,reason:"busy",message:ft}];let{text:m}=M(f),j=tn(t,f,m,n),{commit:R,changed:E}=en(m,j),U=j.map((V,et)=>V.reason?{ok:!1,reason:V.reason}:{ok:!0,changed:E[et],block:V.unit.blockId??null});if(!R)return[200,{ok:!0,results:U,wrote:!1}];let Y=_(m);T(Y,m);let X=await Jt({slug:t,opening:Y,units:R.units,touch:R.touch},o);if(X===lt)return lt;let[G,K]=X;if(!K.ok)return[G,K];let tt=new Map((K.units??[]).map(V=>[V.key,V]));return[200,{ok:!0,wrote:K.wrote===!0,results:U.map((V,et)=>{if(!V.ok)return V;let at=R.keys.get(j[et].unit.id);if(at===void 0)return V;let Tt=tt.get(at);return Tt?.status!=="applied"?{ok:!1,reason:Tt?.reason==="ambiguous"?"ambiguous":"changed"}:{...V,block:K.ids?.[at]??V.block}})}]})}async function ee({slug:t,opening:n,texts:e=[],units:o=[],touch:f=[],request:y=null}){if(typeof t!="string"||!rt.test(t)||typeof y!="string"||!Qt.test(y)||![e,o,f].every(Array.isArray))return null;let m=await a(t,y);return m?m.digest===_(JSON.stringify([n??null,e,o,f]))?[200,{...m.answer,again:!0}]:[409,{ok:!1,reason:"request",message:"\u540C\u4E00\u6B21\u4FDD\u5B58\u7684\u5185\u5BB9\u4E0D\u4E00\u81F4"}]:null}async function ln(t,n){let{slug:e,opening:o,texts:f=[],units:y=[],instances:m=[],pageIds:j=null}=t;if(typeof e!="string"||!rt.test(e)||!Array.isArray(f)||!Array.isArray(y)||!Array.isArray(m))return[400,{ok:!1,reason:"body"}];let{source:R,held:E}=await it(e);if(E)return Date.now()<n?lt:[409,{ok:!1,reason:"busy",message:ft}];let U=await Dt(e,R);if(U===null)return[404,{ok:!1,reason:"missing"}];let{text:Y,version:X}=U,G=typeof o=="string"&&Vt.test(o)?await x(o):null;return[200,{ok:!0,version:X,reverted:Se({current:Y,opening:G,texts:f,pageIds:j}),units:$e({current:Y,units:y}),parts:xe({current:Y,instances:m,pageIds:j})}]}let un=600*1e3,bt=new Map;async function ne(t,n){let e=Z(t),o=null;try{o=JSON.parse(await z.readFile(Mt(e).json,"utf8"))}catch{}let{title:f,icon:y}=je(n,o);f&&typeof o?.title=="string"&&o.title!==f.to&&await At(e,{from:o.title,to:f.to,synced:!0}),y&&!y.missing&&await _t(e,y.to)}async function dn(t,n){let{slug:e,action:o,stamp:f=null,undo:y=null}=t;if(typeof e!="string"||!rt.test(e)||!["accept","revert","undo"].includes(o))return[400,{ok:!1,reason:"body"}];let m=W(e),{source:j,held:R}=await it(e);if(j===null)return[404,{ok:!1,reason:"missing"}];if(R)return Date.now()<n?lt:[409,{ok:!1,reason:"busy",message:ft}];if(o==="undo"){for(let[K,tt]of bt)Date.now()-tt.at>un&&bt.delete(K);let G=typeof y=="string"?bt.get(y):null;return!G||G.slug!==e?[404,{ok:!1,reason:"gone",message:"\u64A4\u9500\u5DF2\u7ECF\u8FC7\u671F"}]:j!==G.after?[409,{ok:!1,reason:"moved-on",message:"\u64A4\u56DE\u4E4B\u540E\u6587\u6863\u53C8\u6539\u8FC7\u4E86\uFF0C\u6CA1\u6CD5\u64A4\u9500"}]:(q(e,j),await $(m,G.before,{expect:j})?(q(e,G.before),bt.delete(y),await ne(e,G.before),await B.restore(e,G.saved),await B.wrote(e,G.before),c(e),[200,{ok:!0,version:_(M(G.before).text)}]):[409,{ok:!1,reason:"busy",message:ft}])}await B.look(e,j);let E=await B.snapshot(e),U=E?.state?.base?`${E.state.since}|${E.state.writes}`:null;if(U===null)return[200,{ok:!0,none:!0}];if(U!==f)return[409,{ok:!1,reason:"changed",message:"Agent \u521A\u521A\u53C8\u6539\u4E86\u6587\u6863\uFF0C\u518D\u770B\u4E00\u773C"}];if(o==="accept")return await B.clear(e),c(e),[200,{ok:!0}];let Y=E.base;if(q(e,j),!await $(m,Y,{expect:j}))return[409,{ok:!1,reason:"busy",message:ft}];q(e,Y),await ne(e,Y);let X=qt(8).toString("hex");return bt.set(X,{slug:e,before:j,after:Y,saved:E,at:Date.now()}),await B.clear(e),await B.wrote(e,Y),c(e),[200,{ok:!0,version:_(M(Y).text),undo:X}]}async function mn(t,n){let e=await ut(t);if(e.error)return C(n,...e.error);let o=e.body??{};try{if(o.action!=="read")return C(n,...await Lt(o,dn));if(typeof o.slug!="string"||!rt.test(o.slug))return C(n,400,{ok:!1,reason:"body"});let f=await Pt(o.slug,{wait:0});return f===null?C(n,404,{ok:!1,reason:"missing"}):C(n,200,{ok:!0,...await B.read(o.slug,f.source)})}catch(f){return C(n,500,{ok:!1,reason:"write",message:f.message})}}async function At(t,{from:n,to:e,synced:o}){let f=["\u6807\u9898\u5DF2\u66F4\u65B0",...o?[]:["\u5355\u72EC\u6253\u5F00\u6216\u5BFC\u51FA\u65F6\u7684\u9875\u9762\u540D\u79F0\u539F\u672C\u5C31\u548C\u6807\u9898\u4E0D\u540C\uFF0C\u6CA1\u6709\u8DDF\u7740\u6539"]],y=Mt(t).json,m=await z.readFile(y,"utf8").catch(()=>""),j=null;try{j=JSON.parse(m)}catch{}if(j?.title!==n)return[...f,"\u641C\u7D22\u548C\u4FA7\u680F\u91CC\uFF08\u6CA1\u6253\u5F00\u8FD9\u4EFD\u6587\u6863\u65F6\uFF09\u7684\u6587\u6863\u540D\u539F\u672C\u5C31\u548C\u6807\u9898\u4E0D\u540C\uFF0C\u6CA1\u6709\u8DDF\u7740\u6539"];let R=new RegExp(`("title"\\s*:\\s*)${JSON.stringify(n).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}`),E=R.test(m)?m.replace(R,(U,Y)=>Y+JSON.stringify(e)):`${JSON.stringify({...j,title:e},null,2)}
|
|
17
|
-
`;try{await $(y,E)}catch(U){return d?.(`${P.basename(y)}'s title was not written (${U.code??U.message}): ${y}`),[...f,"\u641C\u7D22\u548C\u4FA7\u680F\u91CC\uFF08\u6CA1\u6253\u5F00\u8FD9\u4EFD\u6587\u6863\u65F6\uFF09\u7684\u6587\u6863\u540D\u6CA1\u80FD\u8DDF\u7740\u6539"]}return f}async function _t(t,n){let e=Mt(t).json,o=null;try{o=JSON.parse(await z.readFile(e,"utf8"))}catch{}if(!o||typeof o!="object")return d?.(`${P.basename(e)} could not be read, so its icon was not written: ${e}`),["\u9875\u9762\u56FE\u6807\u5DF2\u66F4\u6362\uFF0C\u4F46\u641C\u7D22\u548C\u4FA7\u680F\u91CC\uFF08\u6CA1\u6253\u5F00\u8FD9\u4EFD\u6587\u6863\u65F6\uFF09\u7684\u56FE\u6807\u6CA1\u80FD\u8DDF\u7740\u6362"];if((o.icon??null)===n)return[];let{icon:f,...y}=o,m=n===null?y:{...y,icon:n};try{await $(e,`${JSON.stringify(m,null,2)}
|
|
18
|
-
`)}catch(j){return d?.(`${P.basename(e)}'s icon was not written (${j.code??j.message}): ${e}`),["\u9875\u9762\u56FE\u6807\u5DF2\u66F4\u6362\uFF0C\u4F46\u641C\u7D22\u548C\u4FA7\u680F\u91CC\uFF08\u6CA1\u6253\u5F00\u8FD9\u4EFD\u6587\u6863\u65F6\uFF09\u7684\u56FE\u6807\u6CA1\u80FD\u8DDF\u7740\u6362"]}return[]}async function pn(t,n){let e=typeof n=="string"?n.replace(/\s+/g," ").trim():"";if(!e)return{ok:!1,reason:"title",message:"\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A"};let o=W(t),f=await z.readFile(o,"utf8").catch(()=>null);if(f===null)return{ok:!1,reason:"missing"};nt(t,B.look(t,f));let y=pe(f),m=he(y).find(E=>E.kind==="title");if(!m)return{ok:!1,reason:"no-title",message:"\u8FD9\u4EFD\u6587\u6863\u6CA1\u6709\u6807\u9898"};let j=sr(e),R=ke({current:y,edits:[{id:m.id,parts:[{keep:!0,html:j}]}],ids:u});return R.ok?R.text!==f&&!await $(o,R.text,{expect:f})?{ok:!1,reason:"changed-again"}:(R.text!==f&&nt(t,B.wrote(t,R.text,E=>Te(E,j))),{ok:!0,title:e,notes:R.title?await At(P.dirname(o),R.title):[]}):{ok:!1,reason:"conflict"}}let $t=t=>(n,e)=>{let o=J.then(()=>t(n));return J=o.catch(()=>{}),o.then(([f,y])=>C(e,f,y),f=>C(e,500,{ok:!1,reason:"write",message:f.message}))},re=(t,{early:n=null}={})=>async(e,o)=>{let f=await ut(e);if(f.error)return C(o,...f.error);let y=f.body??{};try{let m=n&&await n(y);return m?C(o,...m):C(o,...await Lt(y,t))}catch(m){return C(o,500,{ok:!1,reason:"write",message:m.message})}};async function Lt(t,n){let e=Date.now()+I;for(;;){await kt(t.slug,e);let o=J.then(()=>n(t,e));J=o.catch(()=>{});let f=await o;if(f!==lt)return f}}async function Ut(t,{reader:n=!1}={}){if(typeof t!="string"||!rt.test(t))return{ok:!1,reason:"missing",message:"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"};let e=Z(t),{html:o,json:f}=Mt(e);for(let y=1;;y++){let{source:m,held:j}=n?await it(t):{source:await z.readFile(o,"utf8").catch(()=>null),held:!1};if(m===null)return{ok:!1,reason:"missing",message:"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"};if(j)return{ok:!1,reason:"busy",message:"\u6587\u4EF6\u4E00\u518D\u88AB\u4FEE\u6539\uFF08\u4F8B\u5982 AI \u6B63\u5728\u5199\u5165\uFF09\uFF0C\u6CA1\u6709\u5199\u5165"};nt(t,B.look(t,m));let R=null;try{R=JSON.parse(await z.readFile(f,"utf8"))}catch{}let{text:E,changes:U,added:Y,given:X,repeated:G,title:K,icon:tt}=Oe(m,{finish:k,next:typeof u=="function"?u:void 0,metadata:R});if(E!==m){if(q(t,m),!await $(o,E,{expect:m},n?"reader":"agent")){if(y===on)return{ok:!1,reason:"busy",message:"\u6587\u4EF6\u4E00\u518D\u88AB\u4FEE\u6539\uFF08\u4F8B\u5982 AI \u6B63\u5728\u5199\u5165\uFF09\uFF0C\u6CA1\u6709\u5199\u5165"};continue}q(t,E),nt(t,B.wrote(t,E)),n&&U.length&&(d&&d(Ht(o,U).join(`
|
|
19
|
-
`)),v(t,U))}return K&&typeof R?.title=="string"&&R.title!==K.to&&await At(e,{from:R.title,to:K.to,synced:K.page}),tt&&!tt.missing&&await _t(e,tt.to),{ok:!0,changes:E===m?[]:U,added:E===m?0:Y,given:E===m?[]:X,repeated:G,written:E!==m,title:K,icon:tt}}}let wn=async(t,{reader:n=!1}={})=>{n&&await kt(t);let e=J.then(()=>Ut(t,{reader:n}));return J=e.catch(()=>{}),e};async function Wt(t){let n=await ut(t);if(n.error)return{refused:n.error};let{slug:e,workspace:o}=n.body??{};return typeof e!="string"||!rt.test(e)||typeof o!="string"?{refused:[400,{ok:!1,reason:"body"}]}:fr(o,l)?{slug:e}:{refused:[409,{ok:!1,reason:"elsewhere",message:"\u8FD9\u4E2A\u9884\u89C8\u670D\u52A1\u5668\u7BA1\u7684\u662F\u53E6\u4E00\u4E2A\u76EE\u5F55\u7684\u6587\u6863"}]}}async function hn(t,n){try{let e=J.then(async()=>{let{slug:y,refused:m}=await Wt(t);if(m)return{answer:m};let j=await Ut(y);return{slug:j.ok?y:null,answer:[j.ok?200:j.reason==="missing"?404:409,j]}});J=e.catch(()=>{});let{slug:o,answer:f}=await e;return o&&await Yt(o),C(n,...f)}catch(e){return C(n,500,{ok:!1,reason:"write",message:e.message})}}async function yn(t){let{slug:n,refused:e}=await Wt(t);return e||(await Yt(n),[200,{ok:!0}])}async function oe(t){let{source:n}=await kt(t),{ended:e,moved:o}=await B.endDraft(t,n);return o&&c(t),e}async function gn(t){let{slug:n,refused:e}=await Wt(t);return e||[200,{ok:!0,ended:await oe(n)}]}let dt=Ee({reportsDirectory:l}),xt=We({reportsDirectory:l,read:t=>Pt(t,{wait:0}),write:$,dropped:(t,n)=>{let e=n.map(Ge);d&&d(Kt(P.join(Z(t),"annotations.json"),{items:e}).join(`
|
|
20
|
-
`)),i&&(F=F.then(()=>Ke({stateDirectory:i,reportsDirectory:l,slug:t,time:new Date().toISOString(),items:e})).catch(()=>{}))}}),ae=Promise.resolve(),Bt=t=>{let n=ae.then(t);return ae=n.catch(()=>{}),n},kn=t=>(n,e)=>Bt(()=>t(n)).then(([o,f])=>C(e,o,f),o=>C(e,500,{ok:!1,reason:"write",message:o.message})),bn=300,St=new Map;async function Yt(t){let n=St.get(t);n&&(clearTimeout(n.timer),St.delete(t));let e=Bt(()=>xt.afterWrite(t));n&&e.then(n.resolve,n.reject),await e.catch(o=>d?.(`${t}: annotations not checked: ${o.message}`)),await F}let $n=t=>{let n=t.headers.host??"",e=t.socket.localPort;return n!==`127.0.0.1:${e}`&&n!==`localhost:${e}`?[403,{ok:!1,reason:"host"}]:t.headers["x-gallery-token"]!==p?[403,{ok:!1,reason:"token"}]:null};async function xn(t){if(t.method==="GET"){let e=$n(t);if(e)return e;let o=new URL(t.url??"/","http://localhost").searchParams;return o.get("as")==="copy"?xt.copy(o.get("slug")):xt.list(o.get("slug"))}let n=await ut(t);return n.error??xt.change(n.body)}let Nt=(t,n=Xt)=>async e=>{let o=await ut(e,n);return o.error??t(o.body)};return{token:p,preview:sn,opened:cn,check:ut,checkHeaders:te,upload:$t(Nt(dt.upload,kr)),addEmoji:$t(Nt(dt.addEmoji)),unfurl:$t(Nt(dt.unfurl)),annotations:kn(xn),checkAnnotations(t){let n=St.get(t);return n||(n={timer:0},n.done=new Promise((e,o)=>Object.assign(n,{resolve:e,reject:o})),St.set(t,n)),clearTimeout(n.timer),n.timer=setTimeout(()=>{St.delete(t),Bt(()=>xt.afterWrite(t)).then(n.resolve,n.reject)},bn),n.done},frameable:$t(Nt(dt.frameable)),listEmojis:dt.listEmojis,readEmoji:dt.readEmoji,respond:$t,keepVersion:q,renameReport:pn,read:Dt,settled:it,writerOf:(t,n)=>typeof n=="string"&&N.get(t)?.hash===_(n)?N.get(t).by:null,whenTaken:kt,readTaken:Pt,takeRewrites:D,handIn:wn,handInReport:Ut,handInRequest:hn,settleRequest:(t,n)=>yn(t).then(([e,o])=>C(n,e,o),e=>C(n,500,{ok:!1,reason:"write",message:e.message})),settleNotes:Yt,roundRequest:(t,n)=>gn(t).then(([e,o])=>C(n,e,o),e=>C(n,500,{ok:!1,reason:"write",message:e.message})),beginRound:oe,commit:re(Jt,{early:ee}),handleCommit:Jt,setTodos:fn,reverted:re(ln),changes:mn,noteTaken:(t,n)=>B.look(t,n),forgetChanges:t=>B.forget(t),stored:async()=>{await B.idle(),await F}}}export{qr as a,Xr as b,Xe as c,ao as d,On as e,jn as f,Mn as g,Wo as h};
|
package/dist/chunk-QCEATQC4.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a,b,c}from"./chunk-7N2LPG33.mjs";import"./chunk-JJNRIFND.mjs";import"./chunk-ASAXY2DJ.mjs";import"./chunk-HBAUKKQH.mjs";import"./chunk-YPPJVDQI.mjs";import"./chunk-JEUK3ZO7.mjs";import"./chunk-KUILYI7H.mjs";import"./chunk-2GKGEVMR.mjs";import"./chunk-4OZWXZE5.mjs";import"./chunk-NWRZXELO.mjs";import"./chunk-JXLSHVJ2.mjs";import"./chunk-N3DSBH5S.mjs";import"./chunk-5L7RYZCL.mjs";export{a as DEFAULT_DESCRIPTION,c as run,b as slugRefused};
|
package/dist/chunk-TDWJKOLN.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a,b,c,d,e,f,g}from"./chunk-XQRUG4G3.mjs";import"./chunk-OU3S466R.mjs";import"./chunk-QK3VISCA.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-TOE6DPLH.mjs";import"./chunk-WTEGUPFG.mjs";import"./chunk-XMKHCUI6.mjs";import"./chunk-SAHS56QM.mjs";import"./chunk-KH24LWAT.mjs";import"./chunk-YFJU3O7G.mjs";import"./chunk-NWRZXELO.mjs";import"./chunk-G4YP7GVC.mjs";import"./chunk-DHB7UZ7F.mjs";import"./chunk-2RKIHJI2.mjs";import"./chunk-JXLSHVJ2.mjs";import"./chunk-XKOHV4H6.mjs";import"./chunk-KFZBYDIS.mjs";import"./chunk-7XDYK3UC.mjs";import"./chunk-VG5JEIUQ.mjs";import"./chunk-N3DSBH5S.mjs";import"./chunk-5L7RYZCL.mjs";export{a as handInReports,e as idLines,f as inStepLines,d as noteNew,b as previewSettled,g as rereadLine,c as roundBegins};
|
package/dist/chunk-UGO5N3EI.mjs
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { createRequire as __galleryRequire } from "node:module"; import { fileURLToPath as __galleryPath } from "node:url"; const require = __galleryRequire(import.meta.url); const __filename = __galleryPath(import.meta.url); const __dirname = __galleryPath(new URL(".", import.meta.url));
|
|
2
|
-
import{a as ae,b as se}from"./chunk-5IIH335D.mjs";import{a as It}from"./chunk-JXLSHVJ2.mjs";import{f as Wt}from"./chunk-VG5JEIUQ.mjs";import{b as ie,e as Ce}from"./chunk-N3DSBH5S.mjs";import{randomBytes as _t}from"node:crypto";import j from"node:fs/promises";import g from"node:path";import{writeAtomic as z}from"../browser/shared/files.mjs";import{sendJson as Q}from"../browser/shared/http.mjs";import{said as rt,saying as Ut}from"../browser/shared/i18n/index.mjs";import{reportsDirectory as an}from"../browser/shared/paths.mjs";import{moveDocument as sn,outlineAndFile as cn,ownsOutline as ln,sharedOutline as me,placeIn as jt,readOutline as pe,validOutline as ke,withOutlineLock as he,writeHead as un,writeOutline as fn,writtenAs as dn}from"../browser/shared/outline.mjs";Ce();import Ot from"node:fs/promises";import Nt from"node:path";import{attr as Fe,walk as Je}from"../browser/shared/html-tree.mjs";import{escapeAttribute as Ge}from"../browser/shared/escape.mjs";import{COMPONENTS_FOLDER as Me,DOCUMENT_FOLDERS as We,SHARED_FOLDERS as Ye,documentFiles as ce,packageFolders as He,readLink as Be}from"../browser/shared/workspace.mjs";async function Yt(w,b){let c=await Ot.readdir(Nt.join(w,b),{withFileTypes:!0});if(!Ye.includes(b))return c.map(({name:A})=>A);let _=b===Me?new Set(He(w).map(({id:A})=>A.split("/")[0])):new Set;return c.filter(A=>A.isFile()||We.includes(A.name)&&!_.has(A.name)).map(({name:A})=>A)}async function Ht(w,b,c,_,{names:A=new Map}={}){let L=Nt.join(w,b),wt=await Ot.access(ce(L).html).then(()=>!0,()=>!1)?null:await Be(L),B=new Set(["",...await Yt(w,b)]);if(await Ot.cp(L,c,{recursive:!0,errorOnExist:!0,force:!1,filter:a=>B.has(Nt.relative(L,a).split(Nt.sep)[0])}),wt)return[];let st=ce(c).html,N=await Ot.readFile(st,"utf8"),G=It(N),ct=new Map,lt=new Set;Je(ie(G.replace(/^\uFEFF/," "),{sourceCodeLocationInfo:!0}),a=>{let M=Fe(a,"data-doc-component");M&<.add(M);for(let{name:J,value:W}of a.attrs??[]){let I=a.sourceCodeLocation?.attrs?.[J];if(!I)continue;let F=/^(\.\.\/)([a-z0-9]+(?:-[a-z0-9]+)*)(\/.*)$/.exec(W),Z=J==="data-doc-id"&&W===b?_:["href","src","poster"].includes(J)&&F&&A.has(F[2])?`../${A.get(F[2])}${F[3]}`:W;Z!==W&&ct.set(I.startOffset,{to:I.endOffset,text:`${J}="${Ge(Z)}"`})}});let V=[...ct].sort(([a],[M])=>M-a).reduce((a,[M,J])=>a.slice(0,M)+J.text+a.slice(J.to),G);return await Ot.writeFile(st,V),[...lt]}import{storedHead as wn}from"../browser/shared/sidebar-head.mjs";import{DOCS as Tt,columnWorkspaceId as mn,entryWorkspace as pn,entryPattern as kn,isForeign as ge,isTop as ft,topOf as pt}from"../browser/shared/outline-shape.mjs";import{addDraft as ye,addWorkspace as hn,draftEntry as bt,draftFacts as Oe,draftOf as Kt,findDraft as gn,foreignMarker as yn,projectChoices as On,registeredIds as je,workspaceNames as jn,workspaceOf as X}from"../browser/shared/drafts.mjs";import{forgetSnapshot as nt,shownWorkspaces as bn}from"../browser/shared/workspace-columns.mjs";import{nameStops as Sn}from"../browser/shared/workspace-name.mjs";import{registerWorkspace as vn,workspaceId as Ct,workspaceKey as be}from"../browser/shared/workspace-registry.mjs";import{spawn as fe}from"node:child_process";import Ve from"node:http";import Ue from"node:os";import Vt from"node:path";import{NO_DEFAULT_TREE as Ke}from"../browser/shared/drafts.mjs";import{said as le}from"../browser/shared/i18n/index.mjs";import{packageRoot as ze}from"../browser/shared/paths.mjs";import{answerOf as ue,compareVersions as Xe,galleryVersion as Qe,readAnnouncement as Bt}from"../browser/shared/preview-server.mjs";import{isWorkspace as Ze,readRegistry as De,workspaceId as qe,workspaceKey as $t}from"../browser/shared/workspace-registry.mjs";var Rt={rename:{to:"workspace",fields:["slug","title"]},create:{to:"workspace",fields:["title","description","language"]},trash:{to:"workspace",fields:["slug","kind"]},"link-set":{to:"workspace",fields:["slug","url","title","icon"]},"copy-from":{to:"workspace",fields:["sourceWs","slug","parent","index"]},link:{to:"workspace",fields:["url","title","parent","first"]},restore:{to:"workspace",fields:["id"]},duplicate:{to:"workspace",fields:["slug","suffix","untitled"]},look:{to:"workspace",fields:["slug","look"]},looks:{to:"workspace",fields:["slug"]},markdown:{to:"transfer",fields:["slug"]},import:{to:"transfer",fields:["uploads","parent","from","language"]},annotations:{to:"edit",fields:["slug","restore"]},export:{to:"transfer",fields:["slug","options"],file:"out",timeout:6e5},upload:{to:"transfer",fields:[],query:["name"],file:"in",timeout:36e5}},tn=["content-type","content-length","content-disposition","x-file-name","cache-control"],en=9e4,nn=w=>!["","0",void 0].includes(w);function rn(w,{platform:b=process.platform,env:c=process.env}={}){return nn(c.GALLERY_NO_BROWSER)?{skip:"GALLERY_NO_BROWSER is set"}:b==="win32"?{command:Vt.join(c.SystemRoot||c.windir||"C:\\Windows","explorer.exe"),args:[`/select,"${w}"`],verbatim:!0}:b==="darwin"?{command:"open",args:["-R",w]}:!c.DISPLAY&&!c.WAYLAND_DISPLAY?{skip:"no display here (neither DISPLAY nor WAYLAND_DISPLAY is set)"}:{command:"xdg-open",args:[Vt.dirname(w)]}}function de(w,b){let c=rn(w,b);return c.skip?Promise.resolve({opened:!1,why:c.skip}):new Promise(_=>{let A;try{A=fe(c.command,c.args,{detached:!0,stdio:"ignore",windowsHide:!1,windowsVerbatimArguments:!!c.verbatim})}catch(L){return _({opened:!1,why:L.code??L.message})}A.once("error",L=>_({opened:!1,why:L.code??L.message})),A.once("spawn",()=>{A.unref(),_({opened:!0})})})}function on(w){let b=/^http:\/\/127\.0\.0\.1:(\d{1,5})$/.exec(String(w??"")),c=b?Number(b[1]):0;return c>0&&c<65536?c:null}function we({root:w,changed:b=()=>{},log:c=()=>{},gallery:_=Vt.join(ze,"bin","gallery.mjs")}){let A=$t(w),L=new Map;function Et(y){let k={...process.env,[Ke]:"1",GALLERY_NO_UPDATE_CHECK:"1"};return delete k.GALLERY_WORKSPACE,delete k.GALLERY_SERVER_KIND,k.GALLERY_VITE_CACHE_DIR&&(k.GALLERY_VITE_CACHE_DIR=`${k.GALLERY_VITE_CACHE_DIR}-${qe(y)}`),new Promise(v=>{let O=[],S;try{S=fe(process.execPath,[_,"--workspace",y,"open","--no-browser"],{cwd:Ue.homedir(),env:k,stdio:["ignore","pipe","pipe"],windowsHide:!0})}catch($){return v({ok:!1,message:$.message})}S.stdout.on("data",$=>O.push(String($))),S.stderr.on("data",$=>O.push(String($)));let P=setTimeout(()=>S.kill(),en);S.once("error",$=>{clearTimeout(P),v({ok:!1,message:$.message})}),S.once("exit",$=>{clearTimeout(P);let m=O.join("").trim().split(/\r?\n/).filter(Boolean);v($===0?{ok:!0}:{ok:!1,message:m.slice(-3).join(" ")||`gallery open ended with ${$}`})})})}async function wt(y){let k=await Bt({reportsDirectory:y});return!k||await ue(k,y,5e3)!=="yes"||k.kind!=="dev"&&Xe(k.version,Qe)<0?null:{port:k.port,token:k.token,pid:k.pid}}async function B(y,{start:k=!0}={}){if($t(y)===A)return{refused:"self",message:"\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A"};if(!Ze(y))return{refused:"workspace",message:le("\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A{0} \u4E0D\u5728\u4E86",y)};let v=await wt(y);if(v||!k)return v??{refused:"start",message:"\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u5728\u8FD0\u884C"};let O=$t(y);L.has(O)||(c(`starting the server of ${y}`),L.set(O,Et(y).finally(()=>L.delete(O))));let S=await L.get(O);return await wt(y)??{refused:"start",message:S.ok?"\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u56DE\u7B54":le("\u6CA1\u80FD\u542F\u52A8\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\uFF1A{0}",S.message)}}let st=(y,k,v,O)=>{let S=Rt[k],P=Object.fromEntries(S.fields.filter(m=>v?.[m]!==void 0).map(m=>[m,v[m]]));k==="trash"&&P.kind!=="link"&&delete P.kind;let $=new URLSearchParams((S.query??[]).filter(m=>O?.[m]!==void 0).map(m=>[m,String(O[m])]));return{fields:P,host:`127.0.0.1:${y.port}`,path:`/__gallery/${S.to}/${k}${$.size?`?${$}`:""}`}};async function N(y,k,v){if(!Object.hasOwn(Rt,k)||Rt[k].file)return[404,{ok:!1,reason:"unknown",message:"\u8FD9\u4E2A\u547D\u4EE4\u4E0D\u80FD\u8F6C\u7ED9\u522B\u7684\u5DE5\u4F5C\u533A"}];let O=await B(y);if(O.refused)return[409,{ok:!1,reason:O.refused,message:O.message}];let{fields:S,host:P,path:$}=st(O,k,v);try{let m=await fetch(`http://${P}${$}`,{method:"POST",headers:{"Content-Type":"application/json",Origin:`http://${P}`,"X-Gallery-Token":O.token},body:JSON.stringify(S),signal:AbortSignal.timeout(3e4)}),D=await m.json().catch(()=>null);return D&&typeof D.ok=="boolean"?[m.status,D]:[502,{ok:!1,reason:"answer",message:"\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u7ED9\u51FA\u7ED3\u679C"}]}catch{return[502,{ok:!1,reason:"answer",message:"\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u56DE\u7B54"}]}}async function G(y,k,{body:v={},query:O={},request:S=null,response:P}){let $=Rt[k];if(!$?.file)return[404,{ok:!1,reason:"unknown",message:"\u8FD9\u4E2A\u547D\u4EE4\u4E0D\u80FD\u8F6C\u7ED9\u522B\u7684\u5DE5\u4F5C\u533A"}];let m=await B(y);if(m.refused)return[409,{ok:!1,reason:m.refused,message:m.message}];let{fields:D,host:ot,path:U}=st(m,k,v,O);return new Promise(mt=>{let K={Origin:`http://${ot}`,"X-Gallery-Token":m.token},q=$.file==="out"?Buffer.from(JSON.stringify(D)):null;q?Object.assign(K,{"Content-Type":"application/json","Content-Length":q.length}):Object.assign(K,{"Content-Type":"application/octet-stream",...S.headers["content-length"]?{"Content-Length":S.headers["content-length"]}:{}});let kt=[502,{ok:!1,reason:"answer",message:"\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u56DE\u7B54"}],it=Ve.request({host:"127.0.0.1",port:m.port,path:U,method:"POST",headers:K,timeout:$.timeout},R=>{P.writeHead(R.statusCode??502,Object.fromEntries(tn.filter(Y=>R.headers[Y]!==void 0).map(Y=>[Y,R.headers[Y]]))),R.pipe(P),R.once("end",()=>mt(null)),R.once("error",()=>{P.destroy(),mt(null)})});it.once("timeout",()=>it.destroy()),it.once("error",()=>{P.headersSent?(P.destroy(),mt(null)):mt(kt)}),P.once("close",()=>{P.writableEnded||it.destroy()}),q?it.end(q):S.pipe(it)})}let ct=new Map;async function lt(y){let k=on(y);if(k===null)return!1;let v=ct.get(k);if(v&&Date.now()-v.at<6e4)return v.answer;let O=(async()=>{for(let{root:S}of De().workspaces){let P=await Bt({reportsDirectory:S});if(P?.port===k&&await ue(P,S,3e3)==="yes")return!0}return!1})();return ct.set(k,{at:Date.now(),answer:O}),O}let V=new Map,a=new Map,M=new Set,J=!1;async function W(y,k,v){let O=new AbortController,S={controller:O,port:v.port};a.set(y,S);try{let P=await fetch(`http://127.0.0.1:${v.port}/__gallery/events?workspace=own`,{signal:O.signal});if(!P.ok||!P.body)return;M.has(y)&&b(k),M.add(y);let $=new TextDecoder,m="";for await(let D of P.body){m+=$.decode(D,{stream:!0});for(let ot=m.indexOf(`
|
|
3
|
-
|
|
4
|
-
`);ot>=0;ot=m.indexOf(`
|
|
5
|
-
|
|
6
|
-
`)){let U=m.slice(0,ot);m=m.slice(ot+2),/^data: workspace /m.test(U)&&b(k)}}}catch{}finally{a.get(y)===S&&a.delete(y)}}async function I(){for(let[y,k]of a)V.has(y)||k.controller.abort();for(let[y,k]of V){if(J||a.has(y)||$t(k)===A)continue;let v=await Bt({reportsDirectory:k});v&&!a.has(y)&&!J&&W(y,k,v)}}let F=Promise.resolve(),Z=setInterval(()=>{F=F.then(I).catch(()=>{})},3e3);Z.unref();function Mt(y){V.clear();for(let[k,v]of y)v&&V.set(k,v);F=F.then(I).catch(()=>{})}function At(){J=!0,clearInterval(Z);for(let{controller:y}of a.values())y.abort();a.clear()}return{serverOf:B,forward:N,relay:G,shellVouched:lt,follow:Mt,close:At,get following(){return[...a.keys()]}}}import{LINK_FILE as zt,linkStem as xn,linkValue as St,ownAddress as Xt,readLinkText as En}from"../browser/shared/web-links.mjs";import{sameDirectory as dt}from"../browser/shared/preview-server.mjs";import{listReportSlugs as An,slugPattern as T}from"../browser/shared/reports.mjs";import{PAGE_SLUG as Pn,SHARED_FOLDERS as Se,defaultWorkspace as Ln,documentDirectory as In,documentFiles as vt,ensureWorkspace as Nn,idHolder as $n,isDocSlug as Rn,layoutOf as Ft,listTrash as _n,newDocSlug as Jt,pageSlug as Tn,readLink as Qt,slugTaken as Cn,trashIdPattern as ve}from"../browser/shared/workspace.mjs";import{createPage as Fn,headOf as xe,listPages as Jn,newPageSlug as Gn,pageFiles as xt,readPageMeta as Zt,renamePage as Mn}from"../browser/shared/pages.mjs";import{editExtension as Wn,extensionSource as Yn,listExtensions as Hn}from"../browser/shared/extensions.mjs";import{effectiveLook as Dt,ownLookFor as Bn,ownLookOf as Vn,sameLook as Un,withLookField as Ee}from"../browser/shared/document-look.mjs";import{workspaceLook as qt,writeWorkspaceLook as Kn}from"../browser/shared/workspace-look.mjs";import{findIn as zn,tidyQuery as Xn}from"../browser/shared/search.mjs";var Qn=([w,b,c,..._])=>_.length?rt("\u68C0\u67E5\u6CA1\u6709\u901A\u8FC7\uFF1A{0}\uFF1B{1}\uFF1B{2} \u7B49 {3} \u6761",w,b,c,_.length+3):c!==void 0?rt("\u68C0\u67E5\u6CA1\u6709\u901A\u8FC7\uFF1A{0}\uFF1B{1}\uFF1B{2}",w,b,c):b!==void 0?rt("\u68C0\u67E5\u6CA1\u6709\u901A\u8FC7\uFF1A{0}\uFF1B{1}",w,b):rt("\u68C0\u67E5\u6CA1\u6709\u901A\u8FC7\uFF1A{0}",w),Gt=w=>w==="en"?"en":null,Zn=32*1024*1024;async function at(w,b){for(let c=0;;c++)try{return await j.rename(w,b)}catch(_){if(!["EPERM","EBUSY","EACCES"].includes(_.code))throw _;if(c>=5)break;await new Promise(A=>setTimeout(A,60*(c+1)))}await j.cp(w,b,{recursive:!0,errorOnExist:!0,force:!1}),await j.rm(w,{recursive:!0,force:!0,maxRetries:5})}var Dn=w=>g.resolve(w);function Ur({edits:w,reports:b,reportsDirectory:c=an,server:_={kind:"dev",version:null,stop:null},components:A=null,changed:L=()=>{},relayed:Et=L,index:wt=null,web:B=null,elsewhere:st=null}){let{trash:N}=Ft(c),G=st??we({root:c,changed:t=>{t&&nt(t),Et()}}),ct=null,lt=()=>ct??=Sn(),V=wt??se({root:c,read:ae(w),draw:(t,e)=>b.words(t,e)}),a=(t,e,n)=>[t,{ok:!1,reason:e,...Ut(n)}],M=t=>j.readFile(t,"utf8").then(JSON.parse).catch(()=>null),J=t=>In(t,c),W=t=>vt(J(t)),I=t=>g.join(c,t),F=t=>K(vt(I(t)).html),Z=t=>Promise.resolve(w.forgetChanges?.(t)).catch(()=>{}),Mt=t=>Yt(c,t),At=async(t,e,n)=>{await j.mkdir(n,{recursive:!0});let o=[];try{for(let r of t)await at(g.join(e,r),g.join(n,r)),o.push(r)}catch(r){for(let i of o)await at(g.join(n,i),g.join(e,i));throw r}},y=async(t,e)=>{if(!Se.includes(t))return at(I(t),e);await At(await Mt(t),I(t),e),await j.rmdir(I(t)).catch(()=>{})},k=async(t,e)=>Se.includes(t)&&!await F(t)&&(await Promise.all((await j.readdir(e)).map(n=>K(g.join(I(t),n))))).every(n=>!n),v=async t=>await M(vt(t).json)??{},O=async t=>{let{title:e=t,description:n="",type:o,instructions:r,icon:i,look:s}=await v(J(t)),l=r===!0?{}:Dt(s,qt(c));return{slug:t,title:e,description:n,...o?{type:o}:{},...typeof i=="string"&&i?{icon:i}:{},...r===!0?{instructions:!0}:{},...Object.keys(l).length?{look:l}:{}}},S=async t=>{let e=await Qt(I(t));return e&&{slug:t,title:e.title,description:"",kind:"link",url:e.url,...e.icon?{icon:e.icon}:{},...e.siteIcon?{siteIcon:e.siteIcon}:{}}},P=async(t,e,n=[])=>{let o=Kt(t),r=o&&n.find(({id:et})=>et===o.ws),i=r?.facts.get(o.slug);if(i){let et=g.join(r.root,o.slug);return{slug:t,title:i.title,description:i.description,kind:i.kind==="link"?"link":"draft",workspace:o.ws,...i.icon?{icon:i.icon}:{},...i.kind==="link"?{url:i.url,siteIcon:i.siteIcon}:{},path:i.path,folder:et,root:r.root}}let{ws:s,title:l,description:u,icon:f,path:h,folder:d,root:p,missing:x,kind:H,url:E,siteIcon:C}=await Oe(t,e);return{slug:t,title:l,description:u,kind:H==="link"?"link":"draft",workspace:s,...H==="link"?{url:E,siteIcon:C}:{},...f?{icon:f}:{},...h?{path:h,folder:d,root:p}:{},...x?{missing:x}:{}}},$=async(t,e,n,o)=>ge(t)?P(t,n,o):e.includes(t)?await S(t)??{slug:t,title:t,description:"",kind:"link",url:""}:O(t),m=Ct(c),D=()=>be(Ln())===be(c),ot=(t,e)=>{let n=t.shown.find(({isDefault:l})=>l)?.id??(D()?m:null),o=new Set([...t.drafts.map(l=>Kt(l)?.ws),...t.groups.map(({workspace:l})=>l),...t.shown.map(({id:l})=>l)].filter(Boolean)),r=new Set(t.groups.filter(({workspace:l,title:u})=>l&&!u).map(({workspace:l})=>l));t.groups.find(({id:l})=>l===Tt)?.title||r.add(m),r.delete(n);let i=jn(new Set([...o,m]),{ids:new Map([...e,[m,[c]]]),stops:lt(),among:r});G.follow(new Map([...i].filter(([l])=>l!==m).map(([l,{root:u}])=>[l,u])));let s=Object.fromEntries([...o].map(l=>[l,{...i.get(l)??{missing:X(l,e).refused??"unknown"},...l===n?{default:!0}:{}}]));return s[m]={...i.get(m),there:!0,self:!0,...m===n?{default:!0}:{}},s},U=()=>Tn(c),mt=async(t,e)=>{let n=await v(J(t));await z(W(t).json,`${JSON.stringify({...n,[e]:!0},null,2)}
|
|
7
|
-
`)},K=t=>j.access(t).then(()=>!0,()=>!1),q=async(t,{own:e=null}={})=>{let n=new Set((await ht()).map(({slug:o})=>o));n.delete(e);for(let o=1;;o++){let r=o===1?t:`${t}-${o}`;if(!Cn(r,c)&&!n.has(r))return r}},kt=async t=>{let e=await q(t.slug,{own:t.slug});return Rn(t.slug)?e===t.slug&&!await $n(t.slug,c)?e:Jt(c):e},it=async(t,e)=>{let n=W(t).html,o=await j.readFile(n,"utf8"),r=It(o).replace(`data-doc-id="${e}"`,`data-doc-id="${t}"`);r!==o&&await z(n,r)},R=()=>pe(c),Y=async t=>{await fn(c,t),L()},tt=t=>he(c,t);async function Pt(t,e="",n=1/0){await tt(async()=>{let o=await R();jt(o,t,e,n),await Y(o)})}async function Lt(t,{parent:e="",after:n=null,first:o=!1}={}){await tt(async()=>{let r=await R();for(let s of Object.values(r.children))s.includes(t)&&s.splice(s.indexOf(t),1);let i=typeof n=="string"?Object.keys(r.children).find(s=>r.children[s].includes(n)):void 0;i!==void 0?jt(r,t,i,r.children[i].indexOf(n)+1):jt(r,t,typeof e=="string"?e:"",o===!0?0:1/0),await Y(r)})}function Ae(t,e){let n=new Set(Object.values(t.children).flat()),o={...t.children};for(let{id:r}of e.groups){if(r===Tt)continue;let i=s=>{let l=(e.children[s]??[]).filter(u=>!n.has(u));(ft(s)||l.length)&&(o[s]=l),l.forEach(i)};i(pt(r))}return{groups:e.groups,children:o}}function te(t){return tt(async()=>{let e=await R();for(let[n,o]of Object.entries(e.children)){let r=o.indexOf(t);if(!(r<0))return o.splice(r,1,...e.children[t]??[]),delete e.children[t],await Y(e),{parent:n,index:r}}return{parent:"",index:1/0}})}let Pe=(t,e)=>V.lines(t,e),ee=t=>M(g.join(N,t,"entry.json")),ht=()=>_n(c);async function Le(t){let e=await Zt(t,c);if(!e)return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u9875\u9762");let n=`${Date.now().toString(36)}-${_t(3).toString("hex")}`;try{await j.mkdir(g.join(N,n),{recursive:!0}),await at(xt(t,c).folder,g.join(N,n,"page"))}catch(r){throw await j.rm(g.join(N,n),{recursive:!0,force:!0}).catch(()=>{}),r}let o={id:n,kind:"page",slug:t,title:e.title,at:Date.now(),parent:"",index:-1};return await z(g.join(N,n,"entry.json"),`${JSON.stringify(o,null,2)}
|
|
8
|
-
`),[200,{ok:!0,entry:o}]}async function Ie(t){let e=g.join(N,t.id,"page"),n=await kt(t);if(await j.mkdir(Ft(c).customPages,{recursive:!0}),await at(e,xt(n,c).folder),n!==t.slug){let{html:o}=xt(n,c),r=await j.readFile(o,"utf8").catch(()=>null),i=r?.replace(`data-page-id="${t.slug}"`,`data-page-id="${n}"`);r!==null&&i!==r&&await z(o,i)}return await j.rm(g.join(N,t.id),{recursive:!0,force:!0}),[200,{ok:!0,page:await Zt(n,c),entry:{...t,slug:n}}]}async function Ne(t){let e=await Qt(I(t));if(!e)return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u94FE\u63A5");let n=`${Date.now().toString(36)}-${_t(3).toString("hex")}`,o=await R(),{parent:r,index:i}=await te(t);try{await j.mkdir(g.join(N,n),{recursive:!0}),await at(I(t),g.join(N,n,"link"))}catch(l){throw await tt(()=>Y(o)),await j.rm(g.join(N,n),{recursive:!0,force:!0}).catch(()=>{}),l}let s={id:n,kind:"link",slug:t,title:e.title,at:Date.now(),parent:r,index:Number.isFinite(i)?i:-1};return await z(g.join(N,n,"entry.json"),`${JSON.stringify(s,null,2)}
|
|
9
|
-
`),[200,{ok:!0,entry:s}]}async function $e(t){let e=g.join(N,t.id,"link"),n=await kt(t);return await at(e,I(n)),await j.rm(g.join(N,t.id),{recursive:!0,force:!0}),await Pt(n,t.parent,t.index<0?1/0:t.index),[200,{ok:!0,report:await S(n),entry:{...t,slug:n}}]}function Re(t,{parent:e,after:n,first:o}){let r=s=>ft(s)?Object.hasOwn(t.children,s):Object.values(t.children).some(l=>l.includes(s));if(n!=null){let s=Object.keys(t.children).find(l=>t.children[l].includes(n));return s===void 0?{refused:[404,"after","\u627E\u4E0D\u5230\u8981\u653E\u5728\u5B83\u540E\u9762\u7684\u6761\u76EE"]}:e!=null&&e!==s?{refused:[409,"level","\u8981\u653E\u5728\u5B83\u540E\u9762\u7684\u6761\u76EE\u4E0D\u5728\u8FD9\u4E00\u5C42"]}:{parent:s,index:t.children[s].indexOf(n)+1}}let i=e??pt(Tt);return ft(i)&&t.groups.some(s=>s.extension&&pt(s.id)===i)?{refused:[409,"extension","\u6269\u5C55\u7684\u680F\u91CC\u653E\u4E0D\u4E86\u522B\u7684\u6761\u76EE"]}:r(i)?{parent:i,index:o?0:(t.children[i]??[]).length}:{refused:[404,"parent",ft(i)?"\u627E\u4E0D\u5230\u8FD9\u4E00\u680F":"\u627E\u4E0D\u5230\u8981\u653E\u5230\u5B83\u4E0B\u9762\u7684\u6761\u76EE"]}}let ut=new Map;function _e(t){let e=ut.get(t);if(e&&Date.now()-e.at<36e5)return e.answer;let n=B?B.frameable(t).catch(()=>({frameable:!0,reason:"unknown"})):Promise.resolve({frameable:!0,reason:"unknown"});return ut.size>=500&&ut.delete(ut.keys().next().value),ut.set(t,{at:Date.now(),answer:n}),n.then(o=>{["auth","unknown"].includes(o.reason)&&ut.get(t)?.answer===n&&ut.delete(t)}),n}function ne(t,e){return B?.icon?(async()=>{let n=await B.icon(e).catch(()=>null);if(!n)return null;let o=g.join(I(t),zt),r=await j.readFile(o,"utf8").catch(()=>null),i=r===null?null:En(r);if(!i||i.url!==e||i.siteIcon===n)return null;let s=St({...i,siteIcon:n});return s.refused||!s.value.siteIcon||!await z(o,`${JSON.stringify(s.value,null,2)}
|
|
10
|
-
`,{expect:r})?null:(L(),n)})().catch(()=>null):Promise.resolve(null)}let re={info:async()=>[200,{ok:!0,version:1,gallery:_.version,token:w.token,commands:[...Object.keys(gt)],server:{pid:process.pid,workspace:g.resolve(c),kind:_.kind}}],async outline(){let{outline:t,others:e}=await cn(c),n=await U(),o=[...Object.values(t.children).flat(),...n?[n]:[]],r=je(),i=async p=>[p,await $(p,t.links,r,e)],[s,l,u,f]=await Promise.all([Promise.all(o.map(i)),Jn(c),ht(),Hn(c)]),h=f.map(({id:p,file:x,title:H,icon:E,entries:C,count:et,error:yt})=>({id:p,file:x,title:H,...E?{icon:E}:{},entries:C,count:et,...yt?{error:Ut(yt)}:{}})),d=await xe(c,l);return[200,{ok:!0,outline:t,instructions:n,reports:Object.fromEntries(s),pages:l,head:d,trash:u,workspaces:ot(t,r),self:m,shared:me(c),extensions:h}]},trash:async()=>[200,{ok:!0,entries:await ht()}],async stats(t){let e=t.get("slug")??"",n=T.test(e)?await V.facts(e).catch(()=>null):null;return n?[200,{ok:!0,edited:n.edited,words:n.words}]:a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863")},async query(t){let e;try{e=JSON.parse(t.get("options")??"{}")}catch{return[400,{ok:!1,reason:"options",message:"options is JSON"}]}return V.query(t.get("kind")??"",e,{doc:t.get("doc")})},components:async()=>[200,{ok:!0,...A.read()}],async source(t){let e=t.get("slug")??"",n=t.get("kind")==="page";if(!T.test(e))return a(404,"missing",n?"\u627E\u4E0D\u5230\u8FD9\u4E2A\u9875\u9762":"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let o=g.resolve(n?xt(e,c).html:W(e).html);return await K(o)?[200,{ok:!0,path:o}]:a(404,"missing",n?"\u627E\u4E0D\u5230\u8FD9\u4E2A\u9875\u9762":"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863")},projects:async()=>[200,{ok:!0,workspaces:await On(c,{stops:lt()})}],shell:async t=>[200,{ok:!0,shell:await G.shellVouched(t.get("origin"))}],async search(t){let e=Xn(t.get("q")??"");if(!e)return[200,{ok:!0,results:[]}];let{children:n,groups:o,links:r}=await R(),i=[],s=d=>(n[d]??[]).forEach(p=>{!r.includes(p)&&!ge(p)&&i.push(p),s(p)});for(let{id:d}of o)s(pt(d));let l=e.toLowerCase(),u=new Map(await Promise.all(i.map(async d=>[d,await O(d)]))),f=JSON.stringify([...u].map(([d,{title:p}])=>[d,p])),h=(await Promise.all(i.map(async d=>{let p=await Pe(d,f);if(!p)return null;let x=String(u.get(d).title).toLowerCase().includes(l),{count:H,hits:E}=zn(p,e);return x||H?{slug:d,title:x,count:H,hits:E}:null}))).filter(Boolean);return h.sort((d,p)=>Number(p.title)-Number(d.title)||p.count-d.count),[200,{ok:!0,results:h.slice(0,50)}]}},gt={async"extension-edit"({id:t,...e}){let n=await Yn(c,t),o=await he(n?.root??c,()=>Wn(n?.root??c,t,e),{local:!0});return o.ok?(o.written&&L(),[200,{ok:!0}]):a(o.status,o.reason,o.error)},async outline({outline:t,base:e}){return!ke(t)||e!==void 0&&!ke(e)?a(400,"outline","\u6587\u6863\u76EE\u5F55\u7684\u7ED3\u6784\u4E0D\u5BF9\uFF1A\u6BCF\u4EFD\u6587\u6863\u53EA\u80FD\u51FA\u73B0\u4E00\u6B21"):me(c)&&!ln(c,t)?a(409,"cross-workspace","\u8DE8\u5DE5\u4F5C\u533A\u8BF7\u590D\u5236\uFF0C\u4E0D\u80FD\u53EA\u79FB\u52A8\u76EE\u5F55\u4F4D\u7F6E"):await tt(async()=>{let o=await R();return e!==void 0&&!dn(e,o)?!1:(await Y(t.groups?t:Ae(t,o)),!0)})?[200,{ok:!0,outline:await R()}]:a(409,"stale","\u6587\u6863\u76EE\u5F55\u521A\u5728\u522B\u5904\u6539\u8FC7")},async move({slug:t,parent:e,after:n=null,first:o=!1,workspace:r}){if(typeof r=="string"&&!dt(r,c))return a(409,"elsewhere","\u8FD9\u4E2A\u9884\u89C8\u670D\u52A1\u5668\u7BA1\u7684\u662F\u53E6\u4E00\u4E2A\u76EE\u5F55\u7684\u6587\u6863");let i=u=>typeof u=="string"&&T.test(u);if(!i(t)||e!==void 0&&e!==""&&!i(e)||n!==null&&!i(n)||typeof o!="boolean")return a(400,"body","\u8BF7\u6C42\u683C\u5F0F\u4E0D\u5BF9");let s=await U();if(s!==null&&[t,e,n].includes(s))return a(409,"instructions","\u5199\u4F5C\u504F\u597D\u4E0D\u5728\u6587\u6863\u76EE\u5F55\u91CC\uFF0C\u4E0D\u80FD\u79FB\u52A8\uFF0C\u4E0B\u9762\u4E5F\u4E0D\u80FD\u653E\u6587\u6863");let l=await sn(c,t,{parent:e,after:n,first:o});if(l.written&&L(),!l.ok){let[u,f]={missing:[404,"\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"],parent:[404,"\u627E\u4E0D\u5230\u8981\u653E\u5230\u5B83\u4E0B\u9762\u7684\u6587\u6863"],after:[404,"\u627E\u4E0D\u5230\u8981\u653E\u5728\u5B83\u540E\u9762\u7684\u6587\u6863"],level:[409,"\u8981\u653E\u5728\u5B83\u540E\u9762\u7684\u6587\u6863\u4E0D\u5728\u8FD9\u4E00\u5C42"],itself:[409,"\u6587\u6863\u4E0D\u80FD\u653E\u5728\u5B83\u81EA\u5DF1\u540E\u9762"],inside:[409,"\u6587\u6863\u4E0D\u80FD\u79FB\u5230\u5B83\u81EA\u5DF1\u6216\u5B83\u4E0B\u9762\u7684\u6587\u6863\u4E0B\u9762"],"cross-workspace":[409,"\u8DE8\u5DE5\u4F5C\u533A\u8BF7\u590D\u5236\uFF0C\u4E0D\u80FD\u53EA\u79FB\u52A8\u76EE\u5F55\u4F4D\u7F6E"]}[l.reason];return a(u,l.reason,f)}return[200,{ok:!0,...l,outline:await R()}]},async create({title:t,description:e,parent:n="",after:o=null,first:r=!1,language:i}){let s=typeof t=="string"?t.replace(/\s+/g," ").trim().slice(0,200):"",l=await Jt(c);return await Z(l),await b.create(l,s,typeof e=="string"&&e.trim()?e.trim():"\u65B0\u6587\u6863",{lang:Gt(i)}),await Lt(l,{parent:n,after:o,first:r}),[200,{ok:!0,report:await O(l)}]},async instructions({title:t,description:e,language:n}){let o=await U();if(o)return[200,{ok:!0,report:await O(o)}];let r=await q(Pn),i=(s,l)=>typeof s=="string"&&s.trim()?s.trim().slice(0,200):l;return await b.create(r,i(t,"\u5199\u4F5C\u504F\u597D"),i(e,"Agent \u6BCF\u6B21\u5199\u62A5\u544A\u524D\u90FD\u4F1A\u5148\u8BFB\u7684\u5199\u4F5C\u504F\u597D"),{lang:Gt(n),page:!0}),await mt(r,"instructions"),[200,{ok:!0,report:await O(r)}]},async components({id:t,hidden:e,shown:n,disabled:o,unlisted:r,net:i,pack:s,enabled:l}){try{return[200,{ok:!0,...await A.write(s!==void 0?{pack:s,enabled:l}:{id:t,hidden:e,shown:n,disabled:o,unlisted:r,net:i})}]}catch(u){return a(409,"components",u)}},async duplicate({slug:t,suffix:e,untitled:n}){if(typeof t!="string"||!T.test(t)||!await F(t))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let o=await Jt(c);await Z(o),await Ht(c,t,I(o),o);let{title:r}=await O(t),i=r||(typeof n=="string"&&n.trim()?n.trim().slice(0,50):"\u672A\u547D\u540D\u6587\u6863"),s=await w.renameReport(o,`${i}${typeof e=="string"&&e.length>0&&e.length<=20?e:"\uFF08\u526F\u672C\uFF09"}`),l=await R(),[u,f]=Object.entries(l.children).find(([,h])=>h.includes(t))??["",null];return await Pt(o,u,f?f.indexOf(t)+1:1/0),[200,{ok:!0,report:await O(o),notes:s.notes??[]}]},async"copy-from"({sourceWs:t,slug:e,parent:n="",index:o=0}){let r=typeof t=="string"?X(t):{};if(!r.root||t===m||typeof e!="string"||!T.test(e)||typeof n!="string"||!ft(n)&&!kn.test(n)||!Number.isInteger(o)||o<0)return a(400,"body","\u8BF7\u6C42\u683C\u5F0F\u4E0D\u5BF9");let i=await pe(r.root);if(!Object.values(i.children).some(d=>d.includes(e)))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let s=[],l=d=>{if(!T.test(d)||s.includes(d))throw new Error("\u6587\u6863\u76EE\u5F55\u7684\u7ED3\u6784\u4E0D\u5BF9\uFF1A\u6BCF\u4EFD\u6587\u6863\u53EA\u80FD\u51FA\u73B0\u4E00\u6B21");s.push(d);for(let p of i.children[d]??[])l(p)};l(e);let u=new Map;for(let d of s){let p;do p=await Jt(c);while([...u.values()].includes(p));u.set(d,p)}let f=g.join(Ft(c).gallery,`copy-${_t(8).toString("hex")}`),h=[];try{await j.mkdir(f,{recursive:!0});let d=new Set;for(let x of s)for(let H of await Ht(r.root,x,g.join(f,u.get(x)),u.get(x),{names:u}))d.add(H);let p=[];if(d.size){let x=Wt(r.root),H=Wt(c);for(let E of d){let C=x.packages.get(E),et=H.packages.get(E);if(!C||et&&et.stamp!==C.stamp||H.problems.has(E))throw Object.assign(new Error,rt("\u81EA\u5B9A\u4E49\u5757 {0} \u7F3A\u5931\u6216\u7248\u672C\u51B2\u7A81\uFF0C\u672A\u590D\u5236",E));if(et)continue;let yt=g.join(f,"packages",...E.split("/"));await j.cp(C.folder,yt,{recursive:!0,force:!1,errorOnExist:!0}),p.push({staged:yt,to:g.join(Ft(c).components,...E.split("/"))})}}return await tt(async()=>{let x=await R();if((ft(n)?mn(x.groups.find(E=>pt(E.id)===n),m):pn(n,m))!==m||(ft(n)?!x.groups.some(E=>pt(E.id)===n&&!E.extension):!Object.values(x.children).some(E=>E.includes(n))))throw new Error("\u627E\u4E0D\u5230\u8981\u653E\u5230\u5B83\u4E0B\u9762\u7684\u6587\u6863");for(let{staged:E,to:C}of p){if(await K(C))throw new Error("\u6587\u6863\u76EE\u5F55\u521A\u5728\u522B\u5904\u6539\u8FC7");await j.mkdir(g.dirname(C),{recursive:!0}),await j.rename(E,C),h.push(C)}for(let E of s){let C=u.get(E);await j.rename(g.join(f,C),I(C)),h.push(I(C))}nt(c),jt(x,u.get(e),n,o);for(let E of s)i.children[E]?.length&&(x.children[u.get(E)]=i.children[E].map(C=>u.get(C)));await Y(x)}),[200,{ok:!0,slug:u.get(e),count:s.length}]}catch(d){for(let p of h)await j.rm(p,{recursive:!0,force:!0});return nt(c),a(409,"copy",d.text?d:d.message)}finally{await j.rm(f,{recursive:!0,force:!0})}},async look({slug:t,look:e}){if(typeof t!="string"||!T.test(t)||!await F(t))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");if(t===await U())return a(409,"instructions","\u5199\u4F5C\u504F\u597D\u6CA1\u6709\u5B57\u4F53\u4E0E\u5E03\u5C40");if(e!==null&&(typeof e!="object"||Array.isArray(e)))return a(400,"look","\u5B57\u4F53\u4E0E\u5E03\u5C40\u4E0D\u5BF9");let n=W(t).json,o=null;try{o=JSON.parse(await j.readFile(n,"utf8"))}catch{}if(!o||typeof o!="object"||Array.isArray(o))return a(409,"metadata","\u8FD9\u4EFD\u6587\u6863\u7684\u6807\u9898\u548C\u8BF4\u660E\u8BFB\u4E0D\u51FA\u6765");let r=Ee(o,Bn(e,qt(c)));return JSON.stringify(r)!==JSON.stringify(o)&&await z(n,`${JSON.stringify(r,null,2)}
|
|
11
|
-
`),[200,{ok:!0,report:await O(t)}]},async looks({slug:t}){if(typeof t!="string"||!T.test(t)||!await F(t))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let e=await U();if(t===e)return a(409,"instructions","\u5199\u4F5C\u504F\u597D\u6CA1\u6709\u5B57\u4F53\u4E0E\u5E03\u5C40");let n=await M(W(t).json);if(!n||typeof n!="object"||Array.isArray(n))return a(409,"metadata","\u8FD9\u4EFD\u6587\u6863\u7684\u6807\u9898\u548C\u8BF4\u660E\u8BFB\u4E0D\u51FA\u6765");let o=qt(c),r=Dt(n.look,o);try{await Kn(c,r)}catch(u){return a(409,"workspace",u)}let i=0,s=(await An(c)).filter(u=>u!==e).map(u=>({json:W(u).json,self:u===t})),l=(await ht()).filter(({kind:u})=>u==="document").map(({id:u})=>({json:vt(g.join(N,u,"report")).json,self:!1}));for(let{json:u,self:f}of[...s,...l])for(let h=0;h<3;h++){let d=await j.readFile(u,"utf8").catch(()=>null),p=null;try{p=JSON.parse(d??"")}catch{}if(!p||typeof p!="object"||Array.isArray(p)||!Object.hasOwn(p,"look")||p.instructions===!0)break;let x=await z(u,`${JSON.stringify(Ee(p,{}),null,2)}
|
|
12
|
-
`,{expect:d}).catch(()=>null);if(x===null)break;if(x){!f&&Object.keys(Vn(p.look)).length>0&&!Un(Dt(p.look,o),r)&&i++;break}}return[200,{ok:!0,look:r,replaced:i,report:await O(t)}]},async head({order:t}){let e=wn(t);return e?(await tt(()=>un(c,e)),L(),[200,{ok:!0,head:await xe(c)}]):a(400,"head","\u4FA7\u680F\u5934\u90E8\u7684\u987A\u5E8F\u4E0D\u5BF9")},async"new-page"({title:t,after:e=null,language:n}){let o=typeof t=="string"?t.replace(/\s+/g," ").trim():"";if(!o||o.length>200)return a(400,"title","\u6807\u9898\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u8D85\u8FC7 200 \u4E2A\u5B57");if(e!==null&&(typeof e!="string"||!T.test(e)))return a(400,"body","\u8BF7\u6C42\u683C\u5F0F\u4E0D\u5BF9");let r=await Gn(c);return await Fn(r,o,{root:c,blank:!0,after:e,...Gt(n)?{lang:Gt(n)}:{}}),L(),[200,{ok:!0,page:await Zt(r,c)}]},async rename({slug:t,title:e,kind:n="document"}){if(typeof t!="string"||!T.test(t))return a(400,"slug","\u6587\u6863\u540D\u4E0D\u5BF9");if(n==="page"){let r;try{r=await Mn(t,e,c)}catch{return a(400,"title","\u6807\u9898\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u8D85\u8FC7 200 \u4E2A\u5B57")}return r?[200,{ok:!0,page:r}]:a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u9875\u9762")}let o=await w.renameReport(t,e);return o.ok?[200,{ok:!0,report:await O(t),notes:o.notes}]:a({title:400,missing:404}[o.reason]??409,o.reason,o.message??"\u6539\u540D\u6CA1\u6709\u6210\u529F")},async trash({slug:t,kind:e="document"}){if(typeof t!="string"||!T.test(t))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");if(e==="page")return Le(t);if(e==="link")return Ne(t);if(t===await U())return a(409,"instructions","\u5199\u4F5C\u504F\u597D\u4E0D\u80FD\u79FB\u5230\u56DE\u6536\u533A");if(!await F(t))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let{title:n}=await O(t),o=`${Date.now().toString(36)}-${_t(3).toString("hex")}`,r=await R(),{parent:i,index:s}=await te(t);try{await j.mkdir(g.join(N,o),{recursive:!0}),await y(t,g.join(N,o,"report"))}catch(u){throw await tt(()=>Y(r)),await j.rm(g.join(N,o),{recursive:!0,force:!0}).catch(()=>{}),u}let l={id:o,kind:"document",slug:t,title:n,at:Date.now(),parent:i,index:Number.isFinite(s)?s:-1};return await z(g.join(N,o,"entry.json"),`${JSON.stringify(l,null,2)}
|
|
13
|
-
`),[200,{ok:!0,entry:l}]},async restore({id:t}){let e=typeof t=="string"&&ve.test(t)?await ee(t):null;if(!e)return a(404,"missing","\u56DE\u6536\u533A\u91CC\u6CA1\u6709\u8FD9\u4E00\u9879");if(e.kind==="page")return Ie(e);if(e.kind==="link")return $e(e);let n=g.join(N,t,"report"),o=await k(e.slug,n),r=o?e.slug:await kt(e);return o?await At(await j.readdir(n),n,I(r)):await at(n,I(r)),r!==e.slug&&await it(r,e.slug),await j.rm(g.join(N,t),{recursive:!0,force:!0}),await Pt(r,e.parent,e.index<0?1/0:e.index),[200,{ok:!0,report:await O(r),entry:{...e,kind:"document",slug:r}}]},async destroy({id:t}){let e=typeof t=="string"&&ve.test(t)?await ee(t):null;return e?((e.kind??"document")==="document"&&!await F(e.slug)&&await Z(e.slug),await j.rm(g.join(N,t),{recursive:!0,force:!0}),[200,{ok:!0}]):a(404,"missing","\u56DE\u6536\u533A\u91CC\u6CA1\u6709\u8FD9\u4E00\u9879")},async link({url:t,title:e,icon:n=null,parent:o,after:r=null,first:i=!1},{port:s,wait:l=!1}={}){let u=St({url:t,title:e,icon:n});if(u.refused)return a(400,u.refused,u.message);if(Xt(u.value.url,s))return a(409,"own","\u8FD9\u662F Gallery \u81EA\u5DF1\u7684\u5730\u5740\uFF0C\u8BF7\u76F4\u63A5\u94FE\u63A5\u6587\u6863");if(o!=null&&typeof o!="string"||r!==null&&typeof r!="string"||typeof i!="boolean")return a(400,"body","\u8BF7\u6C42\u683C\u5F0F\u4E0D\u5BF9");let f=await tt(async()=>{let d=await R(),p=Re(d,{parent:o,after:r,first:i||o==null&&r===null});if(p.refused)return p;let x=await q(xn(u.value.title,u.value.url));return await j.mkdir(I(x),{recursive:!0}),await z(g.join(I(x),zt),`${JSON.stringify(u.value,null,2)}
|
|
14
|
-
`),jt(d,x,p.parent,p.index),await Y(d),{slug:x,parent:p.parent,index:p.index}});if(f.refused)return a(...f.refused);let h=ne(f.slug,u.value.url);return l&&await h,[200,{ok:!0,link:await S(f.slug),parent:f.parent,index:f.index,outline:await R()}]},async"link-set"({slug:t,url:e,title:n,icon:o},{port:r,wait:i=!1}={}){let s=typeof t=="string"&&T.test(t)?await Qt(I(t)):null;if(!s)return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u94FE\u63A5");let l=e??s.url,u=St({url:l,title:n??s.title,icon:o===void 0?s.icon??null:o,siteIcon:s.siteIcon??null});if(u.refused)return a(400,u.refused,u.message);let f=u.value.url!==s.url;if(f&&Xt(u.value.url,r))return a(409,"own","\u8FD9\u662F Gallery \u81EA\u5DF1\u7684\u5730\u5740\uFF0C\u8BF7\u76F4\u63A5\u94FE\u63A5\u6587\u6863");if(f&&delete u.value.siteIcon,JSON.stringify(u.value)!==JSON.stringify(s)&&await z(g.join(I(t),zt),`${JSON.stringify(u.value,null,2)}
|
|
15
|
-
`),f){let h=ne(t,u.value.url);i&&await h}return[200,{ok:!0,link:await S(t)}]},async"draft-add"({path:t,confirm:e=!1,after:n=null}){let o=await gn(t),r=typeof n=="string"?n:null;if(o.kind==="missing")return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u6587\u4EF6\u6216\u6587\u4EF6\u5939");if(o.kind==="plain")return a(409,"plain","\u8FD9\u4E0D\u662F Gallery \u7684\u5E95\u7A3F\u6216\u5DE5\u4F5C\u533A\uFF0C\u53EF\u4EE5\u7528\u300C\u5BFC\u5165\u300D\u628A\u6587\u4EF6\u590D\u5236\u8FDB\u6765");if(o.kind==="nested")return a(409,"nested","\u8FD9\u4EFD\u5E95\u7A3F\u4E0D\u5728\u5B83\u5DE5\u4F5C\u533A\u7684\u7B2C\u4E00\u5C42\uFF08\u5728\u56DE\u6536\u533A\u91CC\uFF0C\u6216\u662F\u5199\u4F5C\u504F\u597D\uFF09\uFF0C\u4E0D\u80FD\u6DFB\u52A0");if(o.kind==="name")return a(409,"name","\u8FD9\u4E2A\u6587\u4EF6\u5939\u7684\u540D\u5B57\u4E0D\u662F Gallery \u6587\u6863\u7684\u5199\u6CD5\uFF08\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26\uFF09\uFF0C\u4E0D\u80FD\u6DFB\u52A0");let i=o.kind==="workspace"?o.root:o.kind==="folder"?null:o.root,s=!i||!bn(c).some(h=>dt(h.root,i));if(!i){let h=o.kind==="folder"?o.folder:o.parent;if(yn(h))return a(409,"marker",rt("{0} \u91CC\u7684 gallery.json \u662F\u522B\u7684\u7A0B\u5E8F\u7684\uFF0C\u4E0D\u80FD\u628A\u5B83\u767B\u8BB0\u6210\u5DE5\u4F5C\u533A",h));if(e!==!0)return[409,{ok:!1,reason:"unregistered",folder:h,...Ut(rt("\u4F1A\u628A {0} \u767B\u8BB0\u6210\u4E00\u4E2A\u5DE5\u4F5C\u533A\uFF08\u5728\u91CC\u9762\u653E gallery.json \u548C .gallery/\uFF09",h))}];if(!(await Nn(h)).ours)return a(409,"marker",rt("{0} \u91CC\u7684 gallery.json \u662F\u522B\u7684\u7A0B\u5E8F\u7684\uFF0C\u4E0D\u80FD\u628A\u5B83\u767B\u8BB0\u6210\u5DE5\u4F5C\u533A",h));i=h}let l=o.kind==="workspace"||o.kind==="folder";if(dt(i,c))return[200,{ok:!0,kind:l?"workspace":"draft",own:!0,existing:!0,...l?{column:Tt}:{entry:o.slug}}];let u=await vn(i,{force:!0}).catch(()=>"failed"),f=X(Ct(i));return f.refused==="ambiguous"?a(409,"ambiguous",rt("\u672C\u673A\u767B\u8BB0\u7684 {0} \u4E2A\u5DE5\u4F5C\u533A\u7F16\u53F7\u76F8\u540C\uFF08{1}\uFF09\uFF0C\u5148\u7528 gallery workspaces --forget \u53BB\u6389\u5176\u4E2D\u4E00\u4E2A",f.roots.length,Ct(i))):!f.root||!dt(f.root,i)?u==="temporary"?a(409,"temporary","\u8FD9\u4E2A\u5DE5\u4F5C\u533A\u5728\u7CFB\u7EDF\u7684\u4E34\u65F6\u6587\u4EF6\u5939\u91CC\uFF0C\u4E0D\u80FD\u6DFB\u52A0"):a(409,"registry","\u6CA1\u80FD\u628A\u5B83\u7684\u5DE5\u4F5C\u533A\u8BB0\u8FDB\u672C\u673A\u7684\u767B\u8BB0\u8868"):(nt(i),l?[200,{ok:!0,kind:"workspace",...await hn(c,i,{changed:L,after:r})}]:[200,{ok:!0,kind:"draft",...await ye(c,i,o.slug,{changed:L,pick:!0,after:r,fresh:s})}])},async"draft-join"({root:t,slug:e}){if(typeof t!="string"||typeof e!="string"||!T.test(e))return a(400,"body","\u8BF7\u6C42\u683C\u5F0F\u4E0D\u5BF9");if(dt(t,c))return a(409,"own","\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A");let n=X(Ct(t));return!n.root||!dt(n.root,t)?a(409,"registry","\u8FD9\u4E2A\u5DE5\u4F5C\u533A\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC"):await K(vt(g.join(t,e)).html)?(nt(t),[200,{ok:!0,...await ye(c,t,e,{changed:L})}]):a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863")},async export({slug:t}){if(typeof t!="string"||!T.test(t)||!await K(J(t)))return a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863");let{problems:e=[],file:n,refused:o}=await b.export(t);return o?a(o.reason==="missing"?404:409,o.reason,o.message):e.length?a(422,"check",Qn(e)):[200,{ok:!0,path:Dn(n)}]}},oe={async frameable({url:t},{port:e}){let n=typeof t=="string"?St({url:t,title:"-"}):{refused:"url"};return n.refused?a(400,"url","\u8FD9\u4E0D\u662F\u4E00\u4E2A\u7F51\u5740"):Xt(n.value.url,e)?[200,{ok:!0,frameable:!1,reason:"own"}]:[200,{ok:!0,...await _e(n.value.url)}]},async elsewhere({ws:t}){let e=typeof t=="string"?X(t):{refused:"unknown"};if(e.refused)return a(409,e.refused,e.refused==="ambiguous"?"\u672C\u673A\u767B\u8BB0\u7684\u5DE5\u4F5C\u533A\u91CC\u6709\u4E24\u4E2A\u7528\u7684\u662F\u540C\u4E00\u4E2A\u7F16\u53F7\uFF0C\u5148\u7528 gallery workspaces --forget \u53BB\u6389\u5176\u4E2D\u4E00\u4E2A":"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC");let n=await G.serverOf(e.root);return n.refused?a(409,n.refused,n.message):[200,{ok:!0,origin:`http://127.0.0.1:${n.port}`}]},async"draft-command"({ws:t,name:e,...n}){let o=typeof t=="string"?X(t):{refused:"unknown"};if(o.refused)return a(409,o.refused,"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC");let r=await G.forward(o.root,e,n);return r[1]?.ok&&nt(o.root),r},async"draft-duplicate"({ws:t,slug:e,suffix:n,untitled:o}){if(t===m)return a(409,"self","\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A");let r=typeof t=="string"?X(t):{refused:"unknown"};if(r.refused)return a(409,r.refused,"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC");let[i,s]=await G.forward(r.root,"duplicate",{slug:e,suffix:n,untitled:o});if(!s?.ok)return[i,s];let l=s.report?.slug;if(typeof l!="string"||!T.test(l))return a(502,"answer","\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u7ED9\u51FA\u7ED3\u679C");let u=bt(t,l);return nt(r.root),await Lt(u,{after:bt(t,e)}),[200,{ok:!0,entry:u,report:{...s.report,slug:u,kind:"draft",workspace:t}}]},async"draft-import"({ws:t,uploads:e,parent:n="",from:o,language:r}){if(t===m)return a(409,"self","\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A");let i=typeof t=="string"?X(t):{refused:"unknown"};if(i.refused)return a(409,i.refused,"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC");let[s,l]=await G.forward(i.root,"import",{uploads:e,parent:n,from:o,language:r});if(!l?.ok)return[s,l];nt(i.root);let u=(Array.isArray(l.reports)?l.reports:[]).filter(h=>typeof h=="string"&&T.test(h)).map(h=>bt(t,h)),f=typeof n=="string"&&T.test(n)?bt(t,n):null;if(f&&u.length&&Object.values((await R()).children).some(h=>h.includes(f)))for(let h of u)await Lt(h,{parent:f});return[200,{...l,reports:u}]},async"draft-create"({ws:t,title:e,description:n,language:o,parent:r="",after:i=null,first:s=!1}){if(t===m)return a(409,"self","\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A");let l=typeof t=="string"?X(t):{refused:"unknown"};if(l.refused)return a(409,l.refused,"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC");let[u,f]=await G.forward(l.root,"create",{title:e,description:n,language:o});if(!f?.ok)return[u,f];let h=f.report?.slug;if(typeof h!="string"||!T.test(h))return a(502,"answer","\u5B83\u6240\u5728\u5DE5\u4F5C\u533A\u7684\u670D\u52A1\u6CA1\u6709\u7ED9\u51FA\u7ED3\u679C");let d=bt(t,h);return nt(l.root),await Lt(d,{parent:r,after:i,first:s}),[200,{ok:!0,entry:d,report:{...f.report,slug:d,kind:"draft",workspace:t}}]},async reveal({entry:t,ws:e,page:n}){let o=je(),r=null;return typeof n=="string"?r=T.test(n)?xt(n,c).folder:null:typeof t=="string"&&Kt(t)?r=(await Oe(t,o)).folder:e===m?r=g.resolve(c):typeof e=="string"&&(r=X(e,o).root??null),!r||!await K(r)?a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4E2A\u6587\u4EF6\u5939"):[200,{ok:!0,path:r,...await de(r)}]},async title({url:t}){let e=typeof t=="string"?St({url:t,title:"-"}):{refused:"url"};if(e.refused)return a(400,"url","\u8FD9\u4E0D\u662F\u4E00\u4E2A\u7F51\u5740");let n=B?await B.title(e.value.url).catch(()=>""):"",o=typeof n=="string"?n:n?.title,r=["auth","unknown"].includes(n?.reason)?n.reason:void 0;return[200,{ok:!0,title:typeof o=="string"?o.slice(0,200):"",...r?{reason:r}:{}}]}};function Te(t,e,n){if(t.method==="GET"&&Object.hasOwn(re,n)){let r=t.headers.host??"",i=t.socket.localPort;return r!==`127.0.0.1:${i}`&&r!==`localhost:${i}`?Q(e,403,{ok:!1,reason:"host"}):re[n](new URL(t.url??"/","http://localhost").searchParams).then(([s,l])=>Q(e,s,l),s=>Q(e,...a(500,"read",s)))}if(t.method==="POST"&&n==="stop")return w.respond(async r=>{let i=await w.check(r);return i.error?i.error:_.kind!=="cli"||typeof _.stop!="function"?a(409,"dev","\u8FD9\u662F npm run dev \u7684\u670D\u52A1\u5668\uFF1A\u5728\u8FD0\u884C\u5B83\u7684\u5730\u65B9\u505C\u6B62\u5B83"):(e.once("finish",()=>_.stop()),[200,{ok:!0,pid:process.pid}])})(t,e);if(t.method==="POST"&&n==="pack-install")return w.respond(async r=>{let i=await w.check(r,Zn);if(i.error)return i.error;if(!A?.install)return a(404,"unknown");try{return[200,{ok:!0,...A.install(i.body??{})}]}catch(s){if(!s.code)throw s;return a(409,s.code,s)}})(t,e);if(t.method==="POST"&&n==="todo")return(async()=>{let r=await w.check(t);if(r.error)return r.error;let{slug:i,items:s}=r.body??{};return typeof i!="string"||!T.test(i)||!Array.isArray(s)?[400,{ok:!1,reason:"body"}]:!await F(i)||i===await U()?a(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"):w.setTodos(i,s)})().then(([r,i])=>Q(e,r,i),r=>Q(e,...a(500,"write",r.message)));if(t.method==="POST"&&(n==="draft-export"||n==="draft-upload"))return(async()=>{let r=n==="draft-upload",i=new URL(t.url??"/","http://localhost").searchParams,s={};if(r){let f=w.checkHeaders(t);if(f)return f;if(!/^application\/octet-stream\b/i.test(t.headers["content-type"]??""))return[415,{ok:!1,reason:"type"}]}else{let f=await w.check(t);if(f.error)return f.error;s=f.body&&typeof f.body=="object"?f.body:{}}let l=r?i.get("ws"):s.ws,u=typeof l=="string"?X(l):{refused:"unknown"};return u.refused?a(409,u.refused,"\u627E\u4E0D\u5230\u5B83\u6240\u5728\u7684\u5DE5\u4F5C\u533A\uFF1A\u5B83\u4E0D\u5728\u672C\u673A\u7684\u767B\u8BB0\u8868\u91CC"):l===m?a(409,"self","\u8FD9\u662F\u5F53\u524D\u7684\u5DE5\u4F5C\u533A"):G.relay(u.root,r?"upload":"export",{body:s,query:{name:i.get("name")??void 0},request:t,response:e})})().then(r=>{r&&(t.resume(),Q(e,...r))},r=>{t.resume(),e.headersSent?e.destroy():Q(e,...a(500,"read",r))});let o={port:t.socket.localPort};return t.method==="POST"&&Object.hasOwn(gt,n)?w.respond(async r=>{let i=await w.check(r);if(i.error)return i.error;let s=i.body&&typeof i.body=="object"?i.body:{};return typeof s.workspace=="string"&&!dt(s.workspace,c)?a(409,"elsewhere","\u8FD9\u4E2A\u9884\u89C8\u670D\u52A1\u5668\u7BA1\u7684\u662F\u53E6\u4E00\u4E2A\u76EE\u5F55\u7684\u6587\u6863"):gt[n](s,o)})(t,e):t.method==="POST"&&Object.hasOwn(oe,n)?(async()=>{let r=await w.check(t);return r.error?r.error:oe[n](r.body&&typeof r.body=="object"?r.body:{},o)})().then(([r,i])=>Q(e,r,i),r=>Q(e,...a(500,"read",r))):Q(e,404,{ok:!1,reason:"unknown"})}return{handle:Te,outline:R,trashEntries:ht,place:Pt,freeSlug:q,index:V,run:(t,e,n={})=>Object.hasOwn(gt,t)?gt[t](e??{},{wait:!0,...n}):Promise.resolve(a(404,"unknown","\u6CA1\u6709\u8FD9\u4E2A\u547D\u4EE4")),close:()=>G.close()}}export{Ur as a};
|