@heycys/gallery 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/THIRD-PARTY-NOTICES.md +1 -1
  2. package/browser/editor/page/annotate/index.mjs +3 -2
  3. package/browser/editor/page/board/index.mjs +2 -1
  4. package/browser/editor/page/board/settings.mjs +2 -1
  5. package/browser/editor/page/core.mjs +3 -2
  6. package/browser/editor/page/custom-page.mjs +4 -3
  7. package/browser/editor/page/editor.mjs +9 -5
  8. package/browser/editor/page/emoji-picker/support.mjs +3 -2
  9. package/browser/editor/page/links/index.mjs +1 -12
  10. package/browser/editor/page/links/pages.mjs +3 -2
  11. package/browser/editor/page/outline/folds.mjs +3 -0
  12. package/browser/editor/page/post.mjs +2 -1
  13. package/browser/editor/page/present-links.mjs +4 -3
  14. package/browser/editor/page/present-shell.mjs +3 -58
  15. package/browser/editor/page/session.mjs +3 -37
  16. package/browser/editor/page/storage.mjs +5 -5
  17. package/browser/shared/component-catalog.mjs +2 -2
  18. package/browser/shared/drafts.mjs +26 -51
  19. package/browser/shared/emoji/icon-value.mjs +2 -1
  20. package/browser/shared/extension-manifest.mjs +90 -0
  21. package/browser/shared/extensions.mjs +26 -16
  22. package/browser/shared/http.mjs +1 -1
  23. package/browser/shared/i18n/en.mjs +46 -15
  24. package/browser/shared/media.mjs +2 -1
  25. package/browser/shared/outline.mjs +11 -51
  26. package/browser/shared/page-address.mjs +8 -15
  27. package/browser/shared/paths.mjs +2 -1
  28. package/browser/shared/preferences.mjs +3 -1
  29. package/browser/shared/preview-server.mjs +51 -63
  30. package/browser/shared/service-location.mjs +18 -0
  31. package/browser/shared/session.mjs +3 -6
  32. package/browser/shared/workspace-address.mjs +19 -0
  33. package/browser/shared/workspace-columns.mjs +1 -2
  34. package/browser/shared/workspace-registry.mjs +6 -40
  35. package/browser/shared/workspace.mjs +3 -6
  36. package/browser/shared/writing-preferences.mjs +6 -4
  37. package/dist/{chunk-BYSF5UMM.mjs → chunk-236JJXWY.mjs} +2 -2
  38. package/dist/{chunk-3A5I2GJK.mjs → chunk-2KAVXMKG.mjs} +1 -1
  39. package/dist/chunk-2T4PZQEP.mjs +2 -0
  40. package/dist/{chunk-SAHS56QM.mjs → chunk-3SKOU6OZ.mjs} +1 -1
  41. package/dist/{chunk-S2Y7VI4H.mjs → chunk-3XZOA7AH.mjs} +2 -2
  42. package/dist/{chunk-MKTX5PGV.mjs → chunk-43B75J5T.mjs} +1 -1
  43. package/dist/{chunk-VKSRM7EY.mjs → chunk-4B2TB5K2.mjs} +1 -1
  44. package/dist/{chunk-LV24RY2E.mjs → chunk-4K5KC6V2.mjs} +1 -1
  45. package/dist/{chunk-SOD23RGL.mjs → chunk-4KUO7R2M.mjs} +8 -8
  46. package/dist/chunk-4SNV4HA5.mjs +2 -0
  47. package/dist/chunk-53XDTHTG.mjs +4 -0
  48. package/dist/chunk-5XV3YYLG.mjs +2 -0
  49. package/dist/{chunk-VNUWREXU.mjs → chunk-65NTKF4N.mjs} +1 -1
  50. package/dist/chunk-6GV3CBB2.mjs +2 -0
  51. package/dist/{chunk-DH6GMDNN.mjs → chunk-6L6V7YR2.mjs} +1 -1
  52. package/dist/{chunk-TOE6DPLH.mjs → chunk-6NLXUKAY.mjs} +1 -1
  53. package/dist/chunk-6Q7ASAXJ.mjs +3 -0
  54. package/dist/{chunk-ZCP7BTOZ.mjs → chunk-6QBHU4DF.mjs} +1 -1
  55. package/dist/{chunk-QXVNUASA.mjs → chunk-6QWQXHAV.mjs} +1 -1
  56. package/dist/chunk-6XD6U3QA.mjs +5 -0
  57. package/dist/{chunk-36FIRJIF.mjs → chunk-742D2WWJ.mjs} +2 -2
  58. package/dist/{chunk-7M7UPWU6.mjs → chunk-7EFHNQ5B.mjs} +1 -1
  59. package/dist/{chunk-JI6T3A4Y.mjs → chunk-7ISBBDJR.mjs} +1 -1
  60. package/dist/{chunk-2GKGEVMR.mjs → chunk-7UZUQQ7Q.mjs} +25 -24
  61. package/dist/{chunk-VPVOAJ7X.mjs → chunk-AGDILNWB.mjs} +1 -1
  62. package/dist/{chunk-5IIH335D.mjs → chunk-ALZ6ZENZ.mjs} +1 -1
  63. package/dist/{chunk-G4YP7GVC.mjs → chunk-BFJGHSQN.mjs} +1 -1
  64. package/dist/chunk-BLNQUR5R.mjs +168 -0
  65. package/dist/chunk-BMX3VUHY.mjs +2 -0
  66. package/dist/chunk-BN7M3IN7.mjs +8 -0
  67. package/dist/{chunk-AMDGVDNV.mjs → chunk-BQNTTFPL.mjs} +1 -1
  68. package/dist/chunk-C257H6IA.mjs +2 -0
  69. package/dist/{chunk-74RPP2M2.mjs → chunk-C564NU2H.mjs} +1 -1
  70. package/dist/chunk-CHQU37CA.mjs +2 -0
  71. package/dist/{chunk-WCWYNFDF.mjs → chunk-E4IHAIJ7.mjs} +1 -1
  72. package/dist/{chunk-7XDYK3UC.mjs → chunk-E7656LR7.mjs} +1 -1
  73. package/dist/{chunk-KFZBYDIS.mjs → chunk-ECZBLQKK.mjs} +1 -1
  74. package/dist/{chunk-PAFSFVYB.mjs → chunk-ERE2BXYV.mjs} +1 -1
  75. package/dist/{chunk-ZEY2RLBT.mjs → chunk-ERLAIBOA.mjs} +2 -2
  76. package/dist/chunk-FFV733MA.mjs +2 -0
  77. package/dist/{chunk-CZ5KJSGK.mjs → chunk-GJJRBGMY.mjs} +1 -1
  78. package/dist/{chunk-VA3KAQZD.mjs → chunk-GKOBB6DH.mjs} +1 -1
  79. package/dist/chunk-GMJD7ID3.mjs +2 -0
  80. package/dist/{chunk-QZ35UAB4.mjs → chunk-GRAXKKG4.mjs} +1 -1
  81. package/dist/{chunk-2RKIHJI2.mjs → chunk-HYMEEXKN.mjs} +1 -1
  82. package/dist/{chunk-DKR7LFIY.mjs → chunk-IA2SIEJQ.mjs} +1 -1
  83. package/dist/{chunk-QK3VISCA.mjs → chunk-IA4PSIMD.mjs} +1 -1
  84. package/dist/chunk-JPG2LBQM.mjs +11 -0
  85. package/dist/{chunk-VGTMLQWZ.mjs → chunk-JXXHAXYH.mjs} +1 -1
  86. package/dist/{chunk-5MEXZ2UF.mjs → chunk-K3JKPFL5.mjs} +1 -1
  87. package/dist/{chunk-LE44MD3O.mjs → chunk-KLQP46Y3.mjs} +1 -1
  88. package/dist/{chunk-NAGMRVW4.mjs → chunk-LKX55H76.mjs} +1 -1
  89. package/dist/chunk-LMUZQK5O.mjs +2 -0
  90. package/dist/{chunk-CG3UHDKH.mjs → chunk-M4NRDYI5.mjs} +1 -1
  91. package/dist/{chunk-HM4E43VM.mjs → chunk-MAFIGVXY.mjs} +1 -1
  92. package/dist/{chunk-4DNHHJSL.mjs → chunk-MKIBJTJZ.mjs} +1 -1
  93. package/dist/{chunk-L7W624FD.mjs → chunk-MNWJ4EZY.mjs} +1 -1
  94. package/dist/{chunk-FXQBADMN.mjs → chunk-NHP66IWR.mjs} +1 -1
  95. package/dist/{chunk-YBB5LWZK.mjs → chunk-OEIJLMPI.mjs} +1 -1
  96. package/dist/{chunk-NWRZXELO.mjs → chunk-PAREWQGB.mjs} +1 -1
  97. package/dist/{chunk-7N2LPG33.mjs → chunk-PDZR3L3C.mjs} +1 -1
  98. package/dist/{chunk-YFJU3O7G.mjs → chunk-PLB7L22J.mjs} +1 -1
  99. package/dist/{chunk-4AMTKWDO.mjs → chunk-PUOQ65NC.mjs} +1 -1
  100. package/dist/chunk-Q4MS6OFC.mjs +2 -0
  101. package/dist/{chunk-3OFXMN6N.mjs → chunk-Q7P3Q5YX.mjs} +1 -1
  102. package/dist/{chunk-6MPKCH3P.mjs → chunk-QNECWMGR.mjs} +1 -1
  103. package/dist/{chunk-HBAUKKQH.mjs → chunk-QP7BOHE4.mjs} +1 -1
  104. package/dist/chunk-QVGOPHOF.mjs +2 -0
  105. package/dist/{chunk-NFABH3QW.mjs → chunk-RRKJMHNX.mjs} +2 -2
  106. package/dist/chunk-S3SX3COT.mjs +20 -0
  107. package/dist/{chunk-ZO7SFB2E.mjs → chunk-SQ6Y2ZMA.mjs} +2 -2
  108. package/dist/{chunk-VG5JEIUQ.mjs → chunk-TKWEX4FD.mjs} +2 -2
  109. package/dist/{chunk-CCSGFCLZ.mjs → chunk-U3SSPL4K.mjs} +1 -1
  110. package/dist/{chunk-DHB7UZ7F.mjs → chunk-U5XL7D6A.mjs} +1 -1
  111. package/dist/{chunk-CPS4SRPF.mjs → chunk-ULXSPX5H.mjs} +2 -2
  112. package/dist/{chunk-JXLSHVJ2.mjs → chunk-UMHUSOPJ.mjs} +1 -1
  113. package/dist/chunk-USIHBCSW.mjs +15 -0
  114. package/dist/{chunk-GWOYMENX.mjs → chunk-V6XZ4VIR.mjs} +1 -1
  115. package/dist/{chunk-AFGUR7SY.mjs → chunk-VPMRP2TL.mjs} +1 -1
  116. package/dist/{chunk-WTEGUPFG.mjs → chunk-VRPVVMRB.mjs} +1 -1
  117. package/dist/chunk-VZ2RQ3AM.mjs +2 -0
  118. package/dist/{chunk-XKOHV4H6.mjs → chunk-W5NPH5UA.mjs} +1 -1
  119. package/dist/chunk-WFGPMCTZ.mjs +4 -0
  120. package/dist/chunk-XZCFPKGO.mjs +2 -0
  121. package/dist/{chunk-QJ3TFJLQ.mjs → chunk-Y34NR5JL.mjs} +1 -1
  122. package/dist/{chunk-V5JRSGZF.mjs → chunk-YN37ZDLW.mjs} +1 -1
  123. package/dist/chunk-ZFGMJVJC.mjs +2 -0
  124. package/dist/{chunk-KH24LWAT.mjs → chunk-ZTHICSSF.mjs} +1 -1
  125. package/dist/cli.mjs +1 -1
  126. package/dist/server.mjs +1 -1
  127. package/dist/worker.mjs +1 -1
  128. package/kit/math.js +1 -1
  129. package/kit/runtime.js +12 -2
  130. package/kit/state.js +2 -0
  131. package/kit/ui.js +5 -1
  132. package/package.json +1 -1
  133. package/release.json +7 -7
  134. package/skill/SKILL.md +13 -13
  135. package/skill/references/building-blocks.md +1 -1
  136. package/skill/references/extensions.md +45 -9
  137. package/web/assets/{index-xP0uw3a0.css → index-FLb9jCfl.css} +1 -1
  138. package/web/assets/index-czjrXVjf.js +15 -0
  139. package/web/index.html +2 -2
  140. package/dist/chunk-46ACXOU5.mjs +0 -2
  141. package/dist/chunk-5DPABPBI.mjs +0 -2
  142. package/dist/chunk-5L26JUYA.mjs +0 -2
  143. package/dist/chunk-AEMVZYZQ.mjs +0 -166
  144. package/dist/chunk-ASAXY2DJ.mjs +0 -2
  145. package/dist/chunk-DAMVDXR3.mjs +0 -2
  146. package/dist/chunk-DLFZJJEE.mjs +0 -2
  147. package/dist/chunk-EKNHM3P4.mjs +0 -2
  148. package/dist/chunk-FCK6NXON.mjs +0 -3
  149. package/dist/chunk-FX42XU6J.mjs +0 -2
  150. package/dist/chunk-HATA2W7X.mjs +0 -2
  151. package/dist/chunk-JJNRIFND.mjs +0 -8
  152. package/dist/chunk-JL6R4FG4.mjs +0 -4
  153. package/dist/chunk-KUILYI7H.mjs +0 -4
  154. package/dist/chunk-NIW7F7LU.mjs +0 -4
  155. package/dist/chunk-OU3S466R.mjs +0 -20
  156. package/dist/chunk-QCEATQC4.mjs +0 -2
  157. package/dist/chunk-TDWJKOLN.mjs +0 -2
  158. package/dist/chunk-UGO5N3EI.mjs +0 -15
  159. package/dist/chunk-XMKHCUI6.mjs +0 -15
  160. package/dist/chunk-XQRUG4G3.mjs +0 -2
  161. package/dist/chunk-YPPJVDQI.mjs +0 -2
  162. package/dist/chunk-ZANMKAWS.mjs +0 -2
  163. package/web/assets/index-BHC5ZOMh.js +0 -15
  164. /package/dist/{chunk-N3DSBH5S.mjs → chunk-A55HN5OK.mjs} +0 -0
  165. /package/dist/{chunk-KNZJT4ET.mjs → chunk-QAIHRH3I.mjs} +0 -0
  166. /package/dist/{chunk-ZW2A6GBW.mjs → chunk-QR6A54KJ.mjs} +0 -0
  167. /package/dist/{chunk-74UW7QSL.mjs → chunk-UH4SIXTR.mjs} +0 -0
  168. /package/dist/{chunk-EKGYYOSP.mjs → chunk-W7XHE4CT.mjs} +0 -0
  169. /package/dist/{chunk-5MMN3N5J.mjs → chunk-YEY3RSFQ.mjs} +0 -0
@@ -0,0 +1,168 @@
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 zn,b as Gn}from"./chunk-6GV3CBB2.mjs";import{a as Kn}from"./chunk-DR73Y2UJ.mjs";import{b as Bn}from"./chunk-M4NRDYI5.mjs";import{a as Mn,i as Un,j as Hn}from"./chunk-PUOQ65NC.mjs";import{a as Dn,b as Wn}from"./chunk-6QWQXHAV.mjs";import{k as Qe}from"./chunk-6Q7ASAXJ.mjs";import{h as Tn,i as Rn}from"./chunk-S3SX3COT.mjs";import{a as Ln}from"./chunk-GJJRBGMY.mjs";import{a as Nn}from"./chunk-JPG2LBQM.mjs";import{a as An,b as In}from"./chunk-ALZ6ZENZ.mjs";import{a as Fn}from"./chunk-2OHANJ6Q.mjs";import{a as On,b as qe,d as Cn,e as _n,f as Pn,g as jn}from"./chunk-7M2BQQGZ.mjs";import{b as Et,e as cn,g as Ot,h as ln,j as dn,k as fn}from"./chunk-4B2TB5K2.mjs";import{a as Qt,d as qt,e as en,f as tn,k as nn,l as on,m as an,r as rn,t as bt,u as sn}from"./chunk-KLQP46Y3.mjs";import{b as yn,c as kn,d as _e,e as vn,f as xn,g as Ze,i as $n,m as Sn,p as bn,q as En}from"./chunk-USIHBCSW.mjs";import{d as gn,e as Fe,f as Xe,g as Ct,h as wn,k as Ve}from"./chunk-PLB7L22J.mjs";import{b as mn,c as un}from"./chunk-PAREWQGB.mjs";import{i as Ke,j as Je,k as Ye}from"./chunk-BFJGHSQN.mjs";import{d as hn}from"./chunk-U5XL7D6A.mjs";import{a as pn}from"./chunk-HYMEEXKN.mjs";import{a as We}from"./chunk-E7656LR7.mjs";import{c as $t,g as se,j as Jt,k as Yt,p as Xt,q as Vt,v as Zt,w as St}from"./chunk-TKWEX4FD.mjs";import wt from"node:fs";import oi from"node:fs/promises";import ai from"node:http";import{kitPublicDirectory as ri,release as si,releaseFile as yt,vendorDirectory as ii,workbenchDirectory as ci}from"../browser/shared/paths.mjs";import{serviceLocation as li}from"../browser/shared/service-location.mjs";import{serve as ga}from"../browser/shared/http.mjs";import{defaultWorkspace as di,ensureWorkspace as fi,layoutOf as mi}from"../browser/shared/workspace.mjs";import Jn from"node:fs";import Sa from"node:fs/promises";import _t from"node:path";import ba from"node:http";import Vn from"node:net";import{spawn as Yn}from"node:child_process";import{extensionDirectory as Ea,extensionFile as Oa,listCapabilities as et,setExtensionEnabled as Ca}from"../browser/shared/extension-manifest.mjs";import{serviceLocation as _a}from"../browser/shared/service-location.mjs";import{sendJson as ie,serve as Pa}from"../browser/shared/http.mjs";var Xn=e=>new Promise(a=>setTimeout(a,e)),ja=()=>new Promise((e,a)=>{let t=Vn.createServer();t.once("error",a),t.listen(0,"127.0.0.1",()=>{let{port:o}=t.address();t.close(()=>e(o))})}),Ta=e=>new Promise(a=>{let t=Vn.connect(e,"127.0.0.1");t.setTimeout(250),t.once("connect",()=>{t.destroy(),a(!0)}),t.once("error",()=>a(!1)),t.once("timeout",()=>{t.destroy(),a(!1)})}),Ra={".js":"text/javascript",".mjs":"text/javascript",".css":"text/css",".json":"application/json",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".woff2":"font/woff2"};function Zn({edits:e}){let a=new Map,t=Promise.resolve(),o=0,i=n=>{o++;let c=t.then(n);return t=c.catch(()=>{}),c.finally(()=>{o--})},f=!1,s=async n=>{let c=a.get(n);c&&(await l(c),a.delete(n))},m=setInterval(()=>{et().then(async n=>{for(let c of a.values()){let v=n.find(T=>T.id===c.id);(!v?.enabled||v.manifest.revision!==c.revision)&&await s(c.id)}}).catch(()=>{})},1e3);m.unref();function l(n){return n.stopping??=g(n)}async function g(n){n.stopped=!0,clearTimeout(n.timer),await n.starting?.catch(()=>{});let c=n.child;c&&c.exitCode===null&&c.signalCode===null&&(process.platform==="win32"?await new Promise(v=>{let T=Yn("taskkill",["/pid",String(c.pid),"/t","/f"],{windowsHide:!0,stdio:"ignore"});T.once("error",v),T.once("exit",v)}):(c.kill("SIGTERM"),await Promise.race([new Promise(v=>c.once("exit",v)),Xn(1500)]),c.exitCode===null&&c.kill("SIGKILL"))),n.log?.end()}async function k(n){if(f||n.stopped)return;let c=(await et()).find(O=>O.id===n.id);if(!c?.enabled||c.manifest.revision!==n.revision){n.stopped=!0,n.log.end(),a.delete(n.id);return}if(n.port=await ja(),f||n.stopped)return;let[v,...T]=c.manifest.server.command,p=Yn(v==="node"?process.execPath:v,T,{cwd:c.folder,windowsHide:!0,shell:!1,env:{...process.env,PORT:String(n.port),GALLERY_EXTENSION_PORT:String(n.port),GALLERY_EXTENSION_HOST:"127.0.0.1",GALLERY_EXTENSION_ID:n.id},stdio:["ignore","pipe","pipe"]});n.child=p;let M=Date.now();p.stdout?.pipe(n.log,{end:!1}),p.stderr?.pipe(n.log,{end:!1});let x=!1,$=O=>{x||(x=!0,n.log.write(`[${new Date().toISOString()}] ${O?.message??"Backend exited"}
3
+ `),!(f||n.stopped)&&(n.failures=Date.now()-M>3e4?0:n.failures+1,n.timer=setTimeout(()=>{n.starting=k(n).finally(()=>{n.starting=null}),n.starting.catch(w=>n.log.write(w.message+`
4
+ `))},Math.min(3e4,500*2**Math.min(n.failures,6))),n.timer.unref()))};p.once("error",$),p.once("exit",()=>$())}async function S(n){if(o||f)throw new Error("\u6269\u5C55\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5");let c=a.get(n.id);if(c&&c.revision!==n.manifest.revision&&(await l(c),a.delete(n.id),c=null),!c){let T=_t.join(_a().data,"logs","extensions",`${n.id}.log`);Jn.mkdirSync(_t.dirname(T),{recursive:!0}),c={id:n.id,revision:n.manifest.revision,failures:0,stopped:!1,log:Jn.createWriteStream(T,{flags:"a"})},c.log.on("error",()=>{}),a.set(n.id,c),c.starting=k(c).finally(()=>{c.starting=null})}await c.starting;let v=Date.now()+1e4;for(;!f&&!c.stopped&&Date.now()<v;){if(c.child?.exitCode===null&&!c.child.signalCode&&await Ta(c.port))return c.port;await Xn(100)}throw new Error("\u6269\u5C55\u540E\u53F0\u6682\u672A\u5C31\u7EEA\uFF0C\u8BF7\u67E5\u770B\u6269\u5C55\u65E5\u5FD7")}async function b(n,c){let v=new URL(n.url,"http://localhost");if(!v.pathname.startsWith("/__gallery/extensions"))return!1;let T=`127.0.0.1:${n.socket.localPort}`;if(n.headers.host!==T)return ie(c,403,{ok:!1,reason:"host"}),!0;try{if(v.pathname==="/__gallery/extensions"&&n.method==="GET")return ie(c,200,{ok:!0,extensions:await et()}),!0;let p=/^\/__gallery\/extensions\/(install|remove)$/.exec(v.pathname)?.[1];if(p){let R=await e.check(n,65536);if(R.error)ie(c,...R.error);else if(p==="install"){let z=await i(()=>zn(R.body.path,{inService:!0,beforeReplace:s}));ie(c,200,{ok:!0,installed:z})}else await i(()=>Gn(R.body.id,{inService:!0,beforeReplace:s})),ie(c,200,{ok:!0});return!0}if(v.pathname==="/__gallery/extensions"&&n.method==="POST"){let R=await e.check(n,65536);return R.error?ie(c,...R.error):(await i(async()=>{await Ca(R.body),R.body.enabled||await s(R.body.id)}),ie(c,200,{ok:!0})),!0}let M=/^\/__gallery\/extensions\/([^/]+)\/(files|api)\/(.*)$/.exec(v.pathname);if(!M)return ie(c,404,{ok:!1}),!0;if(o||f)return ie(c,503,{ok:!1,message:"\u6269\u5C55\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"}),!0;let[,x,$,O]=M,w=(await et()).find(R=>R.id===x);if(!w?.enabled)return ie(c,403,{ok:!1,reason:"disabled"}),!0;if($==="files"){if(n.method!=="GET"&&n.method!=="HEAD")return ie(c,405,{ok:!1}),!0;let R=await Oa(Ea(x),decodeURIComponent(O));return Pa(c,{type:Ra[_t.extname(R)]??"application/octet-stream",headers:{"X-Content-Type-Options":"nosniff","Cache-Control":"no-cache"},body:n.method==="HEAD"?void 0:await Sa.readFile(R)}),!0}let _={...n.headers};if(!_.origin&&["GET","HEAD"].includes(n.method))try{_.origin=new URL(_.referer).origin}catch{}let C=e.checkHeaders({method:"POST",headers:_,socket:n.socket});if(C)return ie(c,...C),!0;if(!w.manifest.server)return ie(c,404,{ok:!1,reason:"backend"}),!0;let P=await S(w),J={...n.headers,host:`127.0.0.1:${P}`};delete J["x-gallery-token"],delete J.cookie;let G=ba.request({host:"127.0.0.1",port:P,method:n.method,path:"/"+O+v.search,headers:J},R=>{let z={...R.headers};delete z["access-control-allow-origin"],delete z["set-cookie"],c.writeHead(R.statusCode,z),R.pipe(c)});return G.setTimeout(3e4,()=>G.destroy(new Error("\u6269\u5C55\u540E\u53F0\u8BF7\u6C42\u8D85\u65F6"))),G.once("error",R=>{c.headersSent?c.destroy():ie(c,502,{ok:!1,message:R.message})}),c.once("close",()=>G.destroy()),n.pipe(G),!0}catch(p){return ie(c,400,{ok:!1,message:p.message}),!0}}return{handle:b,async close(){f=!0,clearInterval(m),await t,await Promise.all([...a.values()].map(l)),a.clear()}}}import ca from"node:fs";import{serviceLocation as Gs}from"../browser/shared/service-location.mjs";import we from"node:fs/promises";import X from"node:path";import{assetFile as Fa,referencedFile as Qn}from"../browser/shared/media.mjs";import{pageAssetAddress as La}from"../browser/shared/pages.mjs";function Pt(e,a){if(!/assets\//i.test(e))return e;let t=Je(e,o=>Qn(o)!==null);return Ke(e,Ye(t,o=>{let i=Qn(o.value);return Fa(i)?`${La(a,i)}${/[?#].*$/.exec(o.value.trim())?.[0]??""}`:null}))}function qn(e,{reportsDirectory:a,kit:t,slug:o=null}={}){let{html:i,packages:f}=xn(o?Pt(e,o):e,{reportsDirectory:a,kit:t,page:!0});return{html:i,packages:f}}import{Z as Aa}from"../browser/shared/layers.mjs";import{escapeMarkup as jt}from"../browser/shared/escape.mjs";import{layoutNotesScript as Ia}from"../browser/shared/qa-levels.mjs";var tt=30,Na=`
5
+ [data-doc-dev].doc-checks { position: fixed; z-index: ${Aa.checks}; left: 12px; bottom: 12px; max-width: min(520px, calc(100vw - 24px));
6
+ font: 13px/1.5 system-ui, sans-serif; color: light-dark(#37352f, #e3e2e0); }
7
+ [data-doc-dev].doc-checks[hidden] { display: none; }
8
+ [data-doc-dev].doc-checks > summary { display: inline-flex; gap: 6px; align-items: center; padding: 4px 10px; border-radius: 999px; cursor: pointer;
9
+ list-style: none; color: light-dark(#a1352b, #f19c92); background: light-dark(#fce9e7, #3b2321);
10
+ box-shadow: 0 0 0 1px light-dark(rgb(161 53 43 / 18%), rgb(241 156 146 / 22%)); user-select: none; }
11
+ [data-doc-dev].doc-checks > summary::-webkit-details-marker { display: none; }
12
+ [data-doc-dev].doc-checks > div { margin-top: 6px; padding: 8px 12px; max-height: 50vh; overflow: auto; border-radius: 10px;
13
+ background: light-dark(#ffffff, #252525); box-shadow: 0 0 0 1px light-dark(rgb(42 28 0 / 7%), #383836), 0 20px 24px light-dark(rgb(25 25 25 / 5%), rgb(0 0 0 / 20%)); }
14
+ [data-doc-dev].doc-checks ul { margin: 0; padding-left: 18px; }
15
+ [data-doc-dev].doc-checks li { margin: 2px 0; overflow-wrap: anywhere; }
16
+ [data-doc-dev].doc-checks p { margin: 6px 0 0; color: light-dark(#787774, #9b9a97); }
17
+ [data-doc-dev].doc-checks .doc-checks-live:not(:first-child) { margin-top: 8px; }
18
+ @media print { [data-doc-dev].doc-checks { display: none; } }`,Da=`(() => {
19
+ document.currentScript.remove();
20
+ ${Ia()}
21
+ const panel = document.querySelector("details.doc-checks[data-doc-dev]");
22
+ if (!panel) return;
23
+ const failures = Number(panel.dataset.failures) || 0;
24
+ const live = panel.querySelector(".doc-checks-live ul");
25
+ // The note's words in the UI's language (the root's data-ge-language).
26
+ const english = document.documentElement.getAttribute("data-ge-language") === "en";
27
+ const WORDS = english
28
+ ? { card: "Chart card", table: "Table", named: (kind, name) => kind + " \u201C" + name + "\u201D", first: (name) => "Table (first column \u201C" + name + "\u201D)", colon: ": ",
29
+ failing: (count) => "Checks failed \xB7 " + count, more: (count) => count + " more", all: (slug) => "gallery check " + slug + " runs every check (TypeScript too)." }
30
+ : { card: "\u56FE\u8868\u5361\u7247", table: "\u8868\u683C", named: (kind, name) => kind + "\u300C" + name + "\u300D", first: (name) => "\u8868\u683C\uFF08\u9996\u5217\u300C" + name + "\u300D\uFF09", colon: "\uFF1A",
31
+ failing: (count) => "\u68C0\u67E5\u672A\u901A\u8FC7 \xB7 " + count + " \u9879", more: (count) => "\u8FD8\u6709 " + count + " \u9879", all: (slug) => "gallery check " + slug + " \u8DD1\u5168\u90E8\u68C0\u67E5\uFF08\u542B TypeScript\uFF09\u3002" };
32
+ const more = panel.querySelector("[data-more]");
33
+ if (more) more.textContent = WORDS.more(more.dataset.more);
34
+ const all = panel.querySelector("[data-all]");
35
+ if (all) all.textContent = WORDS.all(all.dataset.all);
36
+ const tidy = (node) => (node?.textContent ?? "").replace(/\\s+/g, " ").trim().slice(0, 40);
37
+ const what = (host) => {
38
+ const card = host.closest("figure");
39
+ const title = card?.querySelector(":scope > h3, :scope > figcaption");
40
+ const table = host.closest(".doc-table-wrap, table");
41
+ const caption = table?.querySelector("caption");
42
+ const header = table?.querySelector("th");
43
+ return title ? WORDS.named(WORDS.card, tidy(title)) : card ? WORDS.card : caption && tidy(caption) ? WORDS.named(WORDS.table, tidy(caption)) : header ? WORDS.first(tidy(header)) : host.localName;
44
+ };
45
+ // A chart that drew nothing says why in its card (the kit's line, in the same language): that line, else the note in words.
46
+ const said = (host, name, note) => (name === "data-missing" && tidy(host.querySelector(".doc-chart-message"))) || noteInWords(note, { english });
47
+ let shown = "";
48
+ let frame = 0;
49
+ const draw = () => {
50
+ frame = 0;
51
+ const notes = [...document.querySelectorAll("[data-doc-layout]")].filter((host) => !host.closest("[data-doc-dev]"))
52
+ .flatMap((host) => layoutNotesOf(host.getAttribute("data-doc-layout"), document.documentElement.clientWidth)
53
+ .filter(({ level }) => level === "fail")
54
+ .map(({ note, name }) => ({ line: what(host) + WORDS.colon + said(host, name, note), note })));
55
+ const key = notes.map(({ line }) => line).join("\\n");
56
+ if (key === shown) return;
57
+ shown = key;
58
+ live.replaceChildren(...notes.map(({ line, note }) => Object.assign(document.createElement("li"), { textContent: line, title: note })));
59
+ live.parentElement.hidden = notes.length === 0;
60
+ const failing = failures + notes.length;
61
+ panel.querySelector("summary").textContent = failing ? WORDS.failing(failing) : "";
62
+ panel.hidden = failing === 0;
63
+ };
64
+ const later = (records) => {
65
+ if (!globalThis.document?.defaultView) return; // the page is gone
66
+ if (!frame && records.some((record) => !record.target.closest?.("[data-doc-dev]"))) frame = requestAnimationFrame(draw);
67
+ };
68
+ new MutationObserver(later).observe(document.documentElement, { subtree: true, childList: true, attributes: true, attributeFilter: ["data-doc-layout"] });
69
+ addEventListener("resize", () => { if (!frame) frame = requestAnimationFrame(draw); });
70
+ draw();
71
+ })();`;function eo(e,a,t={},{directory:o}={}){let i=$n({slug:e,html:a,metadata:t,...o?{directory:o}:{}}),f=i.slice(0,tt).map(g=>`<li>${jt(g)}</li>`).join(""),s=i.length>tt?`<p data-more="${i.length-tt}">\u8FD8\u6709 ${i.length-tt} \u9879</p>`:"",m=i.length?`<ul>${f}</ul>${s}<p data-all="${jt(e)}">gallery check ${jt(e)} \u8DD1\u5168\u90E8\u68C0\u67E5\uFF08\u542B TypeScript\uFF09\u3002</p>`:"";return`<details class="doc-checks" data-doc-dev data-failures="${i.length}"${i.length?"":" hidden"}><summary>${i.length?`\u68C0\u67E5\u672A\u901A\u8FC7 \xB7 ${i.length} \u9879`:""}</summary><div>${m}<div class="doc-checks-live" hidden><ul></ul></div></div><style>${Na}</style></details>
72
+ <script data-doc-dev>${Da}</script>`}import{browserDirectory as ds,kitSourceDirectory as na,release as fs,reportsDirectory as ms}from"../browser/shared/paths.mjs";import{FRAMED_BY as us,sendJson as Ho,serve as Bt,serveFound as Ie}from"../browser/shared/http.mjs";import{languageScript as Bo}from"../browser/shared/i18n/index.mjs";import{announcePreviewServer as ps,galleryVersion as hs,sameDirectory as gs}from"../browser/shared/preview-server.mjs";import{registerQuietly as ws}from"../browser/shared/workspace-registry.mjs";import{lookWord as zo}from"../browser/shared/document-look.mjs";import{documentLook as Go,ownLookAt as ys}from"../browser/shared/workspace-look.mjs";import{slugPattern as oa}from"../browser/shared/reports.mjs";import{ATTRIBUTE as pt,PACKAGE_ID as ks}from"../browser/shared/components/installed.mjs";import{COMPONENTS_FOLDER as Ko,DOCUMENT_FOLDERS as Jo,EXTENSIONS_FOLDER as vs,PAGES_FOLDER as xs,WORKSPACE_FILE as ht,defaultWorkspace as je,documentDirectory as ft,documentFiles as $s,isDocumentFile as Ss,isDocumentSource as Yo,isSlugName as aa,layoutOf as Me}from"../browser/shared/workspace.mjs";import{PAGE_FILES as Xo,homeCardsNew as bs,isBlankPage as Es,isPageFile as Os,pageFiles as Vo,pageHintShown as Cs,pageMetaNow as _s,pageVersion as Zo}from"../browser/shared/pages.mjs";import{LINK_FILE as Ps}from"../browser/shared/web-links.mjs";import{SIDEBAR_FILE as mt}from"../browser/shared/extension-sidebar.mjs";import{extensionColumnIds as Qo}from"../browser/shared/extensions.mjs";import{isExtensionId as js}from"../browser/shared/outline-shape.mjs";import{createHash as Qa,randomBytes as qa}from"node:crypto";import q from"node:fs";import Tt from"node:os";import ge from"node:path";import{Transform as er}from"node:stream";import{pipeline as tr}from"node:stream/promises";import{exportSourceOf as nr}from"../browser/shared/export-wrap.mjs";import{writeAtomic as Rt}from"../browser/shared/files.mjs";import{sendJson as V}from"../browser/shared/http.mjs";import{said as Ft,saying as or}from"../browser/shared/i18n/index.mjs";import{IMPORT_LIMIT as ro}from"../browser/shared/import-types.mjs";import{mediaUrl as ar}from"../browser/shared/media.mjs";import{fullAddress as rr}from"../browser/shared/page-address.mjs";import{documentLinks as so,slugPattern as io}from"../browser/shared/reports.mjs";import{documentDirectory as sr,documentFiles as co,newDocSlug as ir,pageSlug as cr}from"../browser/shared/workspace.mjs";import{readWritingPreferences as lr,saysAnything as dr,unshownLines as fr}from"../browser/shared/writing-preferences.mjs";import to from"node:fs/promises";import Ka from"node:path";import{Worker as Wa}from"node:worker_threads";import{refusal as Ma,said as Ua}from"../browser/shared/i18n/index.mjs";var Ha=6e4,me=null,Ba=0,nt=0,Pe=new Map;function za(){me=new Wa(new URL("./worker.mjs",import.meta.url)),me.on("message",({id:a,result:t,error:o})=>{let i=Pe.get(a);i&&(Pe.delete(a),o?i.reject(Object.assign(new Error(o.message),o)):i.resolve(t),Pe.size===0&&(me?.unref(),Ga()))});let e=a=>{for(let t of Pe.values())t.reject(a);Pe.clear(),me=null};me.on("error",e),me.on("exit",a=>e(Ma(Ua("\u8F6C\u6362\u8FDB\u7A0B\u610F\u5916\u9000\u51FA\uFF08{0}\uFF09",a))))}function Ga(){clearTimeout(nt),nt=setTimeout(()=>{if(Pe.size===0&&me){let e=me;me=null,e.removeAllListeners("exit"),e.terminate()}},Ha),nt.unref?.()}function ve(e,a){clearTimeout(nt),me||za();let t=++Ba;return new Promise((o,i)=>{Pe.set(t,{resolve:o,reject:i}),me.ref(),me.postMessage({id:t,type:e,payload:a})})}import{pageLanguage as Ja}from"../browser/shared/components/page.mjs";function ot(e){return String(e??"").replace(/[\\/:*?"<>|\u0000-\u001f\u007f]/g," ").replace(/\s+/g," ").trim().slice(0,100).trim()||"Untitled"}function at(e,a){let t=e.lastIndexOf("."),[o,i]=t>0?[e.slice(0,t),e.slice(t)]:[e,""];for(let f=0;;f+=1){let s=f===0?e:`${o} ${f}${i}`;if(!a.has(s.toLowerCase()))return a.add(s.toLowerCase()),s}}function rt(e,a){let t=e.split("/").slice(0,-1),o=a.split("/"),i=0;for(;i<t.length&&i<o.length-1&&t[i]===o[i];)i+=1;return[...t.slice(i).map(()=>".."),...o.slice(i)].map(s=>s===".."?s:encodeURIComponent(s).replace(/\(/g,"%28").replace(/\)/g,"%29")).join("/")}import{documentDirectory as Ya,documentFiles as Xa}from"../browser/shared/workspace.mjs";var no={markdown:"md",html:"html",pdf:"pdf"},Va={markdown:"text/markdown; charset=utf-8",html:"text/html; charset=utf-8",pdf:"application/pdf"},Za=e=>typeof e=="number"&&e>.1&&e<2;function oo(e){let{format:a,content:t="everything",subpages:o=!1,folders:i=!0,paper:f="A4",scale:s=1}=e??{};return Object.hasOwn(no,a)&&["everything","no_files"].includes(t)&&typeof o=="boolean"&&typeof i=="boolean"&&["A4","A3","Letter","Legal","Tabloid"].includes(f)&&Za(s)}async function ao(e,a,t){let{format:o,content:i="everything",subpages:f=!1,folders:s=!0,paper:m="A4",scale:l=1}=a,g=no[o],k=i==="everything",S=[],b=new Map,n=$=>b.get($)??b.set($,new Set).get($),c=async($,O)=>{let w=await t.titleOf($),_=at(`${ot(w)}.${g}`,n(O)),C=O?`${O}/${_}`:_,P=s?C.slice(0,-(g.length+1)):"";if(S.push({slug:$,title:w,file:C,folder:P,files:O?`${O}/assets`:"assets"}),f)for(let J of await t.childrenOf($))await c(J,P)};await c(e,"");let{links:v}=await t.links(),T=($,O)=>kn(O,$.slug,w=>{let _=o==="pdf"?null:S.find(C=>C.slug===w)?.file??null;return _&&rt($.file,_)},{blocks:o!=="markdown",links:v}),p=[],M=[];for(let $ of S)if(o==="markdown"){await t.check($.slug);let O=Ya($.slug,t.reportsDirectory),w=_e(await to.readFile(Xa(O).html,"utf8"),{slug:$.slug,mode:"words",reportsDirectory:t.reportsDirectory}),_=T($,w),C=k&&!!Mn(),{text:P,files:J,charts:G,charted:R}=await ve("markdown",{source:_,title:$.title,pictures:C}),z=P,ae=new Map;if(J.forEach(({src:h,name:y},A)=>{ae.has(h)||(ae.set(h,`${$.files}/${at(ot(y),n($.files))}`),k&&M.push({from:Ka.join(O,h),name:ae.get(h)}));let F=ae.get(h);z=z.replace(`\0F${A}\0`,()=>rt($.file,F))}),C&&G>0&&z.includes("\0C")){let h=await Hn(await t.offline($.slug,{files:!0})).catch(()=>[]);z=z.replace(/^.*\u0000C(\d+)\u0000.*$/gm,(y,A)=>{let F=h[Number(A)];if(!F)return"\0gone\0";let I=`${$.files}/${at(Ja(_)==="en"?R[Number(A)]?"Chart.png":"Figure.png":R[Number(A)]?"\u56FE\u8868.png":"\u56FE.png",n($.files))}`;return p.push({name:I,data:F,later:!0}),y.replace(`\0C${A}\0`,()=>rt($.file,I))}).replace(/\n*\u0000gone\u0000\n*/g,`
73
+
74
+ `).replace(/^\n+|\n+$/g,"")}p.push({name:$.file,data:z})}else o==="html"?p.push({name:$.file,data:T($,await t.offline($.slug,{files:k}))}):p.push({name:$.file,data:await Un(T($,await t.offline($.slug,{files:k})),{paper:m,scale:l})});for(let $ of M){let O=await to.readFile($.from).catch(()=>null);O&&p.push({name:$.name,data:O})}let x=[...p.filter($=>!$.later&&S.some(O=>O.file===$.name)),...p.filter($=>$.later||!S.some(O=>O.file===$.name))];return x.length===1?{name:x[0].name,type:Va[o],data:Buffer.isBuffer(x[0].data)?x[0].data:Buffer.from(x[0].data,"utf8")}:{name:`${ot(S[0].title)}.zip`,type:"application/zip",data:Fn(x)}}var mr=3600*1e3,Lt=new Set,lo=!1,ur=e=>{Lt.add(e),!lo&&(lo=!0,process.once("exit",()=>{for(let a of Lt)try{q.rmSync(a,{recursive:!0,force:!0})}catch{}}))},pr=/^u-[a-f0-9]{16}$/;function fo({edits:e,workspace:a,reports:t,reportsDirectory:o,offline:i}){let f=null,s=()=>f??=q.promises.mkdtemp(ge.join(Tt.tmpdir(),"gallery-uploads-")).then(h=>(ur(h),h)),m=new Map,l=(h,y,A)=>[h,{ok:!1,reason:y,...or(A)}],g=h=>q.promises.access(h).then(()=>!0,()=>!1),k=h=>sr(h,o),S=h=>co(k(h)),b=async h=>{try{return JSON.parse(await q.promises.readFile(S(h).json,"utf8")).title||h}catch{return h}};function n(h){if(h.method!=="POST")return[405,{ok:!1,reason:"method"}];let y=h.headers.host??"",A=h.socket.localPort;return y!==`127.0.0.1:${A}`&&y!==`localhost:${A}`?[403,{ok:!1,reason:"host"}]:h.headers.origin!==`http://${y}`?[403,{ok:!1,reason:"origin"}]:h.headers["x-gallery-token"]!==e.token?[403,{ok:!1,reason:"token"}]:/^application\/octet-stream\b/i.test(h.headers["content-type"]??"")?Number(h.headers["content-length"]??0)>ro?l(413,"size","\u6587\u4EF6\u592A\u5927\uFF08\u6700\u591A 5GB\uFF09"):null:[415,{ok:!1,reason:"type"}]}async function c(){for(let[h,y]of m)Date.now()-y.at<mr||(m.delete(h),await q.promises.rm(y.file,{force:!0}).catch(()=>{}))}async function v(h,y){let A=n(h);if(A)return h.resume(),V(y,...A);let F=new URL(h.url,"http://localhost").searchParams.get("name")?.replace(/[\u0000-\u001f]/g,"").trim()??"";if(!F||F.length>255)return h.resume(),V(y,...l(400,"name","\u6587\u4EF6\u540D\u4E0D\u5BF9"));await c();let I=`u-${qa(8).toString("hex")}`,N=ge.join(await s(),I),H=0,B=new er({transform(U,Z,Q){H+=U.length,Q(H>ro?Object.assign(new Error("too-large"),{reason:"size"}):null,U)}});try{await tr(h,B,q.createWriteStream(N))}catch(U){return await q.promises.rm(N,{force:!0}).catch(()=>{}),U.reason==="size"?V(y,...l(413,"size","\u6587\u4EF6\u592A\u5927\uFF08\u6700\u591A 5GB\uFF09")):V(y,...l(400,"body","\u6587\u4EF6\u6CA1\u6709\u4F20\u5B8C"))}return m.set(I,{file:N,name:F,at:Date.now()}),V(y,200,{ok:!0,id:I})}async function T(h,y){let A=await e.check(h);if(A.error)return V(y,...A.error);let{slug:F,options:I}=A.body??{};if(typeof F!="string"||!io.test(F)||!await g(S(F).html))return V(y,...l(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"));if(!oo(I))return V(y,...l(400,"options","\u5BFC\u51FA\u9009\u9879\u4E0D\u5BF9"));try{let N=await i(),H=new Map,B=D=>(H.has(D)||H.set(D,e.handIn(D,{reader:!0}).then(Y=>{if(!Y.ok)throw Object.assign(new Error(Y.message??Y.reason),{reason:Y.reason});if(Y.repeated.length)throw Object.assign(new Error("check"),{reason:"check",slug:D,failures:Ze(Y.repeated)})})),H.get(D)),U=new Map,Z={reportsDirectory:o,titleOf:b,childrenOf:async D=>{let{children:Y,links:re=[]}=await a.outline(),te=ye=>(Y[ye]??[]).flatMap(pe=>re.includes(pe)||pe.startsWith("~")?te(pe):[pe]);return te(D)},links:()=>so(o),offline:async(D,Y)=>{await B(D);let re=await N(D,Y),te=I.format==="markdown"?null:nr(re);return te&&U.set(D,te),re},check:async D=>(await B(D),N.check(D))},{name:Q,type:ee,data:K}=await ao(F,I,Z);U.size&&await(await Qe([...U.keys()],o)).keep([...U.keys()],U),y.writeHead(200,{"Content-Type":ee,"Content-Length":K.length,"Content-Disposition":`attachment; filename*=UTF-8''${encodeURIComponent(Q)}`,"X-File-Name":encodeURIComponent(Q),"Cache-Control":"no-store"}),y.end(K)}catch(N){if(N.reason==="check"){let H=await b(N.slug),B=N.component?Ft("\u300C{0}\u300D\u91CC\u7684\u7EC4\u4EF6 {1} \u6709\u9519\u8BEF\uFF0C\u6CA1\u6709\u751F\u6210\u6587\u4EF6\uFF1A\u53EF\u4EE5\u8BA9 AI \u68C0\u67E5\u8FD9\u4EFD\u6587\u6863\u5E76\u4FEE\u597D",H,N.component):N.failures.length>1?Ft("\u300C{0}\u300D\u6CA1\u6709\u901A\u8FC7\u5BFC\u51FA\u524D\u7684\u68C0\u67E5\uFF0C\u6CA1\u6709\u751F\u6210\u6587\u4EF6\uFF1A{1}\uFF08\u5171 {2} \u5904\uFF1A\u53EF\u4EE5\u8BA9 AI \u68C0\u67E5\u8FD9\u4EFD\u6587\u6863\uFF0C\u5217\u51FA\u5168\u90E8\u5E76\u4FEE\u597D\uFF09",H,N.failures[0],N.failures.length):Ft("\u300C{0}\u300D\u6CA1\u6709\u901A\u8FC7\u5BFC\u51FA\u524D\u7684\u68C0\u67E5\uFF0C\u6CA1\u6709\u751F\u6210\u6587\u4EF6\uFF1A{1}",H,N.failures[0]);return V(y,...l(422,"check",B))}V(y,...l(N.reason==="browser"?422:N.reason==="busy"?409:N.reason==="missing"?404:500,N.reason??"export",N))}}async function p(h,y){let A=await e.check(h);if(A.error)return V(y,...A.error);let{slug:F}=A.body??{},I=(await e.readTaken(F,{wait:0}))?.text??null;if(I===null)return V(y,...l(404,"missing","\u627E\u4E0D\u5230\u8FD9\u4EFD\u6587\u6863"));let N=`http://${h.headers.host}`,{named:H}=await so(o),B=yn(_e(I,{slug:F,mode:"words",reportsDirectory:o}),F,ee=>ee.slug&&rr(N,ee,H),H),{text:U,files:Z}=await ve("markdown",{source:B,title:await b(F),pictures:!1}),Q=U.replace(/\u0000F(\d+)\u0000/g,(ee,K)=>{let{src:D,kind:Y}=Z[Number(K)];return encodeURI(`${N}${ar(Y==="image"?"asset":"file",F,D)}`)});return V(y,200,{ok:!0,text:Q})}let M=async h=>{let y=await e.readTaken(h,{wait:0});return{source:y?.text??"",version:y?.version??null}},x=async(h,y=null)=>{let{source:A,version:F}=y??await M(h),I="\u5199\u4F5C\u504F\u597D",{text:N,files:H}=await ve("markdown",{source:A,title:I,pictures:!1}),B=N.split(`
75
+ `).slice(1).join(`
76
+ `).replace(/^[\s>]*(?:```.*|\d+\.|- \[x\])/gm,"").replace(/<\/?aside>/g,"");if(!/[\p{L}\p{N}]|\u0000F\d+\u0000/u.test(B))return{markdown:`# ${I}
77
+ `,empty:!0,version:F};let U=ge.relative(o,k(h)).split(ge.sep).join("/");return{markdown:`${N.replace(/\u0000F(\d+)\u0000/g,(Z,Q)=>encodeURI(`${U}/${H[Number(Q)].src}`))}
78
+ `,empty:!1,version:F}},$=h=>S(h).json,O=async h=>{try{let y=JSON.parse(await q.promises.readFile($(h),"utf8"));return y&&typeof y=="object"?y:null}catch{return null}},w=h=>Qa("sha256").update(h).digest("hex").slice(0,16);async function _(h,y,A,F){let I=await O(h);if(!I||A===null)return;let{synced:N,...H}=I,B={file:w(y),page:A,unshown:F},U=I.madeSame;N===void 0&&U?.file===B.file&&U?.page===B.page&&JSON.stringify(U?.unshown)===JSON.stringify(F)||await Rt($(h),`${JSON.stringify({...H,madeSame:B},null,2)}
79
+ `)}async function C(h,y){let A=await q.promises.mkdtemp(ge.join(Tt.tmpdir(),"gallery-preferences-"));try{let I=(await ve("import",{uploads:[{file:y,name:"preferences.md"}],scratch:A})).pages[0]??{nodes:[],raws:[],files:[],icon:null,lang:null},N=k(h),H=await O(h)??{},B=co(N).html,U=await q.promises.readFile(B,"utf8").catch(()=>""),Z=/<html\b[^>]*\slang="([^"]*)"/i.exec(U)?.[1]??null,{html:Q}=await un(h,H.title||"\u5199\u4F5C\u504F\u597D",H.description||"",{blank:!0,lang:Z}),ee=typeof H.icon=="string"&&H.icon?H.icon:null,K=await ve("fill",{source:Q,nodes:I.nodes,icon:ee,raws:I.raws,lang:I.lang});I.files.length&&await q.promises.mkdir(ge.join(N,"assets"),{recursive:!0});for(let{from:Y,name:re}of I.files){let te=ge.join(N,"assets",re);await g(te)||await q.promises.copyFile(Y,te)}let D=await q.promises.readFile(B,"utf8").catch(()=>null);D!==null&&e.keepVersion?.(h,D),await Rt(B,Ve(K))}finally{await q.promises.rm(A,{recursive:!0,force:!0}).catch(()=>{})}}async function P(h,y){let A=await e.check(h);if(A.error)return V(y,...A.error);let F=A.body?.opening===!0,I=await cr(o);if(!I)return V(y,...l(404,"missing","\u8FD8\u6CA1\u6709\u5199\u4F5C\u504F\u597D"));let N=null,H=(B,U)=>[200,{ok:!0,path:ge.resolve(N),remade:B,unshown:U}];return e.respond(async()=>{let B;({file:N,text:B}=await lr(o));let U=await M(I),Z=(await O(I))?.madeSame??null,Q=Z===null||Z.page===U.version,ee=Z!==null&&Q&&Z.file===w(B);if(F&&ee&&Array.isArray(Z.unshown))return H(!1,Z.unshown);let[K,D,Y,re]=[B,"",U.version,!1];if(F&&!Q)await C(I,N),{markdown:D,version:Y}=await x(I),re=!0;else{let ye=await x(I,U),pe=B.trim()===ye.markdown.trim()||ye.empty&&!dr(B);D=ye.markdown,F?!pe&&!ee&&(await C(I,N),{markdown:D,version:Y}=await x(I),re=!0):pe||(await Rt(N,ye.markdown),K=ye.markdown)}let te=fr(K,D);return await _(I,K,Y,te),H(re,te)})(h,y)}async function J(h,y){let A=await e.check(h);if(A.error)return V(y,...A.error);let{uploads:F,parent:I="",from:N,language:H}=A.body??{},B={said:typeof N=="string"&&N.includes("{0}")&&N.length<=60?N:"\u5BFC\u5165\u81EA {0}",lang:H==="en"?"en":null};if(!Array.isArray(F)||F.length===0||F.length>1e3||!F.every(D=>typeof D=="string"&&pr.test(D)))return V(y,...l(400,"body"));let U=F.map(D=>m.get(D)).filter(Boolean);if(U.length!==F.length)return V(y,...l(410,"gone","\u4E0A\u4F20\u7684\u6587\u4EF6\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u5BFC\u5165"));for(let D of F)m.delete(D);let Z=typeof I=="string"&&io.test(I)&&await g(ge.join(o,I))?I:"",Q=await q.promises.mkdtemp(ge.join(Tt.tmpdir(),"gallery-import-")),ee=()=>Promise.all([q.promises.rm(Q,{recursive:!0,force:!0}),...U.map(({file:D})=>q.promises.rm(D,{force:!0}))]).catch(()=>{}),K;try{K=await ve("import",{uploads:U.map(({file:D,name:Y})=>({file:D,name:Y})),scratch:Q})}catch(D){return await ee(),V(y,...l(500,"convert",D))}return e.respond(async()=>{try{let{made:D,top:Y}=await Ln(K.pages,{create:t.create,slugOf:()=>ir(o),folderOf:k,fill:re=>ve("fill",re),place:a.place,under:Z,...B});return[200,{ok:!0,pages:D.length,reports:Y,skipped:K.skipped,missing:G(K.pages)}]}finally{await ee()}})(h,y)}let G=h=>[...new Set(h.flatMap(function y(A){return[...(A.notes??[]).filter(F=>F.kind==="picture-missing").map(F=>F.name),...A.children.flatMap(y)]}))],R={export:T,markdown:p,upload:v,import:J,preferences:P};function z(h,y,A){return Object.hasOwn(R,A)?R[A](h,y).catch(F=>{y.headersSent||V(y,...l(500,"transfer",F))}):V(y,404,{ok:!1,reason:"unknown"})}async function ae(){let h=f;f=null,m.clear();let y=await h?.catch(()=>null);y&&(Lt.delete(y),await q.promises.rm(y,{recursive:!0,force:!0}).catch(()=>{}))}return{handle:z,close:ae}}import{FACT_KINDS as Ts,QUERY_ROUTE as Rs,WORKSPACE_GLOBAL as Fs}from"../browser/shared/workspace-query.mjs";function mo({settled:e,tell:a,delay:t=120,recheck:o=1e3}){let i=new Map,f=(s,m=t)=>{clearTimeout(i.get(s));let l=setTimeout(async()=>{let g=await e(s).catch(()=>({source:null,held:!1,wait:0}));if(i.get(s)===l){if(g.held)return f(s,Math.min(Math.max(g.wait,50),o));if(g.wait>0)return f(s,g.wait);await a(s,g)}},m);i.set(s,l)};return f}import xe from"node:fs";import Ee from"node:path";import{isExtensionId as hr}from"../browser/shared/outline-shape.mjs";import{DOCUMENT_FOLDERS as uo,isSlugName as At,layoutOf as po}from"../browser/shared/workspace.mjs";function gr(e,a=!1,t=!1){let{components:o,gallery:i,preferencesPage:f,customPages:s,extensions:m}=po(e),l=(n,c)=>{try{return xe.readdirSync(n,{withFileTypes:!0}).filter(v=>v.isDirectory()&&c(v.name)).map(v=>Ee.join(n,v.name))}catch{return[]}},g=l(m,n=>hr(n)&&!uo.includes(n));if(a){let n=Ee.dirname(e);for(;!xe.existsSync(n)&&Ee.dirname(n)!==n;)n=Ee.dirname(n);return[n,e,...t?[i]:[],m,...g].filter(c=>xe.existsSync(c))}let k=[...l(e,n=>At(n)),...l(f,n=>At(n))],S=n=>[n,...l(n,c=>!c.startsWith(".")).flatMap(S)],b=l(s,n=>At(n)&&!uo.includes(n));return[...new Set([e,...[i,f,s,m].filter(n=>xe.existsSync(n)),...b,...g,...k,...k.map(n=>Ee.join(n,"assets")).filter(n=>xe.existsSync(n)),...xe.existsSync(o)?S(o):[]])]}function Le(e,a,{folders:t=process.platform==="linux",extensionsOnly:o=!1,outline:i=!1}={}){let f=It(e),s=(b,n)=>{!(i&&n===po(e).outline)&&(f(n)||Ee.basename(n).startsWith("."))||xe.stat(n,(v,T)=>{if(v)return a(v.code==="ENOENT"?"unlink":"change",n);let p=T.isDirectory();a(b==="rename"?p?"addDir":"add":p?"addDir":"change",n)})},m=()=>{};if(!t&&!o)try{let b=xe.watch(e,{recursive:!0},(n,c)=>c?s(n,Ee.join(e,c.toString())):a("reset",e));return b.on("error",m),{close:()=>b.close()}}catch(b){if(b.code!=="ERR_FEATURE_UNAVAILABLE_ON_PLATFORM")throw b}let l=new Map,g=null,k=()=>{let b=new Set(gr(e,o,i));for(let[n,c]of l)b.has(n)||(c.close(),l.delete(n));for(let n of b)if(!l.has(n))try{let c=xe.watch(n,(v,T)=>{if(!T)return a("reset",n);v==="rename"&&S(),s(v,Ee.join(n,T.toString()))});c.on("error",m),l.set(n,c)}catch{}},S=()=>{g??=setTimeout(()=>{g=null,k()},50)};return k(),{close(){clearTimeout(g);for(let b of l.values())b.close();l.clear()},get folders(){return[...l.keys()]}}}import wr from"node:fs/promises";import{packageScript as yr}from"../browser/shared/export-wrap.mjs";import{serveFound as kr}from"../browser/shared/http.mjs";import{extensionOf as vr,mediaTypeOf as xr}from"../browser/shared/media.mjs";var $r="/__gallery/components/",Sr=/^\/__gallery\/components\/([a-z0-9][a-z0-9-]*\/[a-z0-9][a-z0-9-]*)\/(.+)$/,br={js:"text/javascript; charset=utf-8",mjs:"text/javascript; charset=utf-8",css:"text/css; charset=utf-8",wasm:"application/wasm"};async function ho(e,a,t,{root:o}){if(!e.startsWith($r))return!1;let[,i,f]=Sr.exec(e)??[],s=i?se(o).packages.get(i):null,m=s?.files.includes(f)?Xt(s,f):null,l=m?await wr.readFile(m).catch(()=>null):null,g=l&&f==="kit.js"?Buffer.from(yr(l.toString("utf8").replace(/^\uFEFF/,""))):l,k=g&&a===s.stamp&&a===Vt(s);return kr(t,g,{type:g?br[vr(f)]??xr(f):void 0,headers:{"X-Content-Type-Options":"nosniff","Cache-Control":k?"max-age=31536000, immutable":"no-store"}}),!0}import{BLOCK_ICON as Er}from"../browser/editor/components/icons.mjs";import{LISTED_BLOCKS as go}from"../browser/editor/components/registry.mjs";import{PACKAGE_ID as Or}from"../browser/shared/components/installed.mjs";import{netHostsOf as wo}from"../browser/shared/net-policy.mjs";import{inLanguage as yo,refusal as st,said as Oe}from"../browser/shared/i18n/index.mjs";function ko({root:e,taken:a}){let t=()=>{let s=se(e);return{packages:Zt(s).map(m=>{let l=tn(m.id)?en(m.id):null;return{...m,newer:l?nn(e,l):null,...l?{addAs:l.pack===Qt?l.name:l.id}:{}}}),packs:bt(e,{settings:s.settings}),packageIcon:Er,blocks:go.map(({id:m,name:l,icon:g,hideable:k})=>({id:m,name:{zh:yo("zh",l),en:yo("en",l)},icon:g,hidden:k&&s.settings.hidden.includes(m),hideable:k})),problem:Yt(s)}},o=({id:s,hidden:m,shown:l,disabled:g,unlisted:k,net:S})=>{if(![m,l,g,k,S].every(n=>n===void 0||typeof n=="boolean"))return Oe("\u5F00\u5173\u7684\u503C\u4E0D\u5BF9");let b=go.find(n=>n.id===s);return b?g!==void 0||l!==void 0||k!==void 0||S!==void 0?Oe("\u5185\u7F6E\u5757\u53EA\u80FD\u9690\u85CF\uFF0C\u4E0D\u80FD\u505C\u7528"):m&&!b.hideable?Oe("\u8FD9\u4E2A\u5757\u4E0D\u80FD\u9690\u85CF"):null:typeof s=="string"&&Or.test(s)?S&&wo(se(e).packages.get(s)?.needs).length===0?Oe("\u8FD9\u4E2A\u5757\u4E0D\u8054\u7F51"):null:Oe("\u6CA1\u6709\u8FD9\u4E2A\u7EC4\u4EF6")};return{read:t,write:async s=>{if(s?.pack!==void 0){let{pack:S,enabled:b}=s;if(typeof b!="boolean")throw st(Oe("\u5F00\u5173\u7684\u503C\u4E0D\u5BF9"));if(typeof S!="string"||!bt(e,{settings:se(e).settings}).some(({id:n})=>n===S))throw st(Oe("\u6CA1\u6709\u8FD9\u4E2A\u5757\u5305"));return await $t(e,{pack:S,enabled:b}),a(),t()}let m=o(s);if(m)throw st(m);let{net:l,...g}=s,k=l===void 0?void 0:l?wo(se(e).packages.get(s.id)?.needs):[];return await $t(e,{...g,...k?{net:k}:{}}),a(),t()},install:({path:s,zip:m}={})=>{let l=typeof m=="string"?Wn(Buffer.from(m,"base64")):typeof s=="string"&&s.trim()?Dn(s):null;if(!l)throw st(Oe("\u7C98\u8D34\u5757\u5305\u7684\u6587\u4EF6\u5939\u6216 zip \u7684\u8DEF\u5F84"),{code:"path"});let g=rn(e,l);return a(),{...t(),installed:g}}}}import Cr from"node:path";import{reportsDirectory as _r}from"../browser/shared/paths.mjs";import{layoutOf as Pr}from"../browser/shared/workspace.mjs";async function vo(e,a,{root:t=_r,workspace:o=null}={}){let{exports:i}=Pr(t),f=Cr.join(i,`${a}.html`),s=await Qe([a],t),m=await e.handInReport(a,{reader:!0});if(!m.ok)return{problems:[],refused:{reason:m.reason,message:m.message},file:f};if(m.repeated.length)return{problems:Ze(m.repeated),file:f};let{exported:l,failures:g}=await En([a],{workspace:o,directory:t});return await s.keep(l.map(k=>k.slug)),{problems:g.get(a)??[],file:f}}import xo from"node:fs/promises";import $o from"node:path";import{MEDIA_ROUTES as So,assetFile as jr,extensionOf as Tr,imageFile as Rr,mediaTypeOf as Fr}from"../browser/shared/media.mjs";import{serveFound as bo}from"../browser/shared/http.mjs";import{slugPattern as Eo}from"../browser/shared/reports.mjs";import{pageFiles as Lr}from"../browser/shared/pages.mjs";import{documentDirectory as Ar}from"../browser/shared/workspace.mjs";var Nt={asset:e=>({"Content-Type":Fr(e),"Cache-Control":"no-cache"}),file:()=>({"Content-Type":"application/octet-stream","Content-Disposition":"attachment","X-Content-Type-Options":"nosniff","Cache-Control":"no-cache"}),embed:e=>/\.pdf$/i.test(e)?{"Content-Type":"application/pdf","X-Content-Type-Options":"nosniff","Cache-Control":"no-cache"}:{"Content-Type":"text/html; charset=utf-8","Content-Security-Policy":"sandbox allow-scripts allow-popups allow-forms allow-modals","X-Content-Type-Options":"nosniff","Cache-Control":"no-cache"}},Ir=new RegExp(`^/__gallery/edit/(${Object.keys(So).join("|")})/([^/]+)/(assets/[^/]+)$`);async function Oo(e,a,{reportsDirectory:t}){let[,o,i,f]=Ir.exec(e)??[];if(!o)return!1;let s=Eo.test(i)&&So[o](f)?await xo.readFile($o.join(Ar(i,t),f)).catch(()=>null):null;return bo(a,s,{headers:Nt[o](f)}),!0}var Nr={css:"text/css; charset=utf-8",js:"text/javascript; charset=utf-8",mjs:"text/javascript; charset=utf-8"},Dr=/^\/pages\/([^/]+)\/(assets\/[^/]+)$/;async function Co(e,a,{reportsDirectory:t}){let[,o,i]=Dr.exec(e)??[];if(!o)return!1;let f=Eo.test(o)&&jr(i)?await xo.readFile($o.join(Lr(o,t).folder,i)).catch(()=>null):null,s=Nr[Tr(i??"")];return bo(a,f,{headers:s?{"Content-Type":s,"X-Content-Type-Options":"nosniff","Cache-Control":"no-cache"}:(Rr(i)?Nt.asset:Nt.file)(i)}),!0}import Wr from"node:dns";import{sendJson as Ae}from"../browser/shared/http.mjs";import{createNetCache as Mr,dataOf as Ur}from"../browser/shared/net-cache.mjs";import{readKeys as Hr}from"../browser/shared/net-keys.mjs";import{addressKind as ct,addressOf as Ao,hostIn as _o,keptHere as Po,keyIn as jo,mapsHere as Br,netHostsOf as zr,proxyHere as Gr,withKey as Kr}from"../browser/shared/net-policy.mjs";import{galleryVersion as Jr}from"../browser/shared/preview-server.mjs";var it=512*1024,Yr=6e4,To=20,Ro=5,Fo=1e4,Xr=16*1024,Vr=new Set([301,302,303,307,308]),Zr=/^(?:application\/(?:[\w.-]+\+)?json|text\/[\w.+-]+)$/i,$e=(e,a={})=>({ok:!1,code:e,...a}),oe=(e,a={},t)=>Object.assign(new Error(e),{refusal:$e(e,a),...t===void 0?{}:{detail:t}});function Qr(e,a){let t;try{t=new URL(e,a)}catch{return{code:"url",why:"a redirect to an address that does not parse"}}let o=Ao(t.href);return o.code?{code:"url",why:`a redirect to ${t.host?`${t.protocol}//${t.host}`:t.protocol}: ${o.why}`}:o}function Lo(e,a){let t=[...new Set([a,encodeURIComponent(a)])].filter(Boolean),o=i=>typeof i=="string"?t.reduce((f,s)=>f.split(s).join("{key}"),i):i;return Object.fromEntries(Object.entries(e).map(([i,f])=>[i,o(f)]))}var qr=e=>Wr.promises.lookup(e,{all:!0,verbatim:!0}),Dt=e=>URL.parse(e)?.host||"?",Wt=e=>ct(e)==="fake-ip"?"an address a fake-ip proxy's DNS gives":"an address of this computer or of a private network";async function es(e,{resolve:a,proxy:t}){let o=e.hostname,i=Gr(t),f=c=>{let v=ct(c);return v==="public"||v==="fake-ip"&&i},s=o.replace(/^\[|\]$/g,"");if(ct(s)!=="none"){if(f(s))return{address:s};throw oe("private",{host:o,address:s,why:`${s} is ${Wt(s)}`})}let m;try{m=(await a(o)).map(c=>typeof c=="string"?c:c.address)}catch(c){throw oe("offline",{why:`${o} did not resolve (${c.code??c.message})`})}if(m.length===0)throw oe("offline",{why:`${o} did not resolve`});let l=m.filter(c=>!f(c));if(l.length===0)return{address:m[0]};let g=l.filter(c=>!Br(c)),k=g.length?g:l,S=k.find(c=>!c.includes(":"))??k[0],b=`${o} resolved to ${S}, ${Wt(S)}`,n=Po(o)?"and its name is one kept for this computer (localhost)":t?i?e.protocol!=="https:"?"and an http address is never handed to a proxy by its name (no TLS to check the site)":g.length?"and a private network's address is never handed to a proxy by its name (that network's own machines are there)":null:"and the proxy it goes through is not on this computer":"and no proxy of this computer goes between to reach it by its name";if(n===null)return{address:null,resolved:S,said:b};throw oe("private",{host:o,address:S,why:`${b}, ${n}`},i||!t||Po(o)?void 0:`${b}, and the proxy it goes through (${Dt(t)}) is not on this computer`)}var ts=({resolve:e=qr,proxyFor:a=On,connect:t,ca:o}={})=>async(i,{headers:f,signal:s})=>{let m=await a(i.href),l=await es(i,{resolve:e,proxy:m}),{address:g}=l,k={...t?{connect:t}:{},...o?{ca:o}:{}};try{return await qe(i,{address:g,proxy:m,headers:f,signal:s,...k})}catch(S){if(!(m&&S.proxyFailed&&(g!==null||S.code==="ECONNREFUSED")))throw g===null&&!s?.aborted?oe("offline",{why:`${l.said}, and no site the proxy of this computer reached by its name proved to be it`},`${l.said}, handed by its name to the proxy (${Dt(m)}): ${S.code??S.message}`):S;let b=c=>`and the proxy of this computer that would reach it${c?` (${Dt(m)})`:""} is not running`,n=g===null?l.said:`${i.hostname.replace(/^\[|\]$/g,"")===g?g:`${i.hostname} resolved to ${g}`}, ${Wt(g)}`;if(g===null||ct(g)!=="public")throw oe("private",{host:i.hostname,address:g??l.resolved,why:`${n}, ${b(!1)}`},`${n}, ${b(!0)}`);return qe(i,{address:g,proxy:null,headers:f,signal:s,...k})}},Io=e=>(a,{headers:t,signal:o})=>qe(new URL(`http://127.0.0.1:${e}/${a.protocol.slice(0,-1)}/${a.host}${a.pathname}${a.search}`),{address:"127.0.0.1",headers:t,signal:o});async function ns(e){let a=0,t=[];for await(let o of e){if(a+=o.length,a>Xr)throw Object.assign(new Error("too-large"),{status:413});t.push(o)}return JSON.parse(Buffer.concat(t).toString("utf8"))}function os(e,a){let t=/;\s*charset="?([^";]+)"?/i.exec(a)?.[1];try{return new TextDecoder(t||"utf-8").decode(e)}catch{return new TextDecoder("utf-8").decode(e)}}function No({root:e,catalog:a=()=>se(e),hop:t=null,now:o=Date.now,cache:i=Mr(e),log:f=()=>{}}){let s=t??ts(),m=new Map,l=c=>{let v=o(),T=(m.get(c)??[]).filter(p=>v-p<6e4);return T.length>=To?(m.set(c,T),!1):(m.set(c,[...T,v]),!0)},g={accept:"application/json, text/plain;q=0.9, text/*;q=0.8","user-agent":`Gallery/${Jr} (a custom block's card)`};async function k(c,{hosts:v,allowed:T,key:p}){let M=AbortSignal.timeout(Fo),x=c;for(let $=0;;$++){let O;try{O=await s(p===void 0?x:new URL(Kr(x.href,p)),{headers:g,signal:M})}catch(P){throw P.refusal?P:oe("offline",{why:M.aborted?`no answer within ${Fo/1e3} s`:String(P.code??P.message)})}if(Vr.has(O.status)&&O.headers.get("location")){if(O.body?.cancel().catch(()=>{}),$>=Ro)throw oe("status",{status:O.status,why:`more than ${Ro} redirects`});let P=Qr(O.headers.get("location"),x);if(P.code)throw oe("url",{why:P.why});let J=_o(P.url.hostname,v);if(!J)throw oe("host",{host:P.url.hostname,why:`a redirect to ${P.url.hostname}, which the block's needs do not name`});if(!T.includes(J))throw oe("consent",{hosts:v.filter(G=>!T.includes(G))});x=P.url,p=jo(x.href)?p:void 0;continue}if(O.status<200||O.status>299)throw O.body?.cancel().catch(()=>{}),oe("status",{status:O.status});let w=O.headers.get("content-type")??"",_=w.split(";")[0].trim();if(_&&!Zr.test(_))throw O.body?.cancel().catch(()=>{}),oe("type",{type:_});if(Number(O.headers.get("content-length"))>it)throw O.body?.cancel().catch(()=>{}),oe("too-large",{limit:it});let C;try{C=O.body?await Cn(O,it):Buffer.alloc(0)}catch(P){throw oe("offline",{why:String(P.code??P.message)})}if(C===null)throw oe("too-large",{limit:it});return{type:_||"text/plain",text:os(C,w)}}}let S=(c,v,T)=>{let p=Ur(c,v);return p===void 0?$e("type",{why:"the answer is no JSON"}):{ok:!0,data:p,at:c.at,cached:T}};async function b(c){let{block:v,url:T,as:p="json",doc:M=null}=c??{},x=typeof v=="string"?a().packages.get(v):null;if(!x)return $e("missing",{why:"no custom block of that id loads in this workspace"});let $=zr(x.needs);if(p!=="json"&&p!=="text")return $e("url",{why:'as is "json" or "text"'});let O=Ao(T);if(O.code)return $e("url",{why:O.why});let{url:w}=O,_=_o(w.hostname,$);if(!_)return $e("host",{host:w.hostname,why:$.length?`its needs name ${$.join(", ")}`:"its needs name no host of the net"});let C=a().settings.net?.[v]??[];if(!C.includes(_))return $e("consent",{hosts:$.filter(R=>!C.includes(R))});let P;if(jo(w.href)){let R=Hr(e);if(P=R[w.hostname]??R[_],P===void 0)return $e("key",{host:w.hostname})}let J=w.href,G=i.get(J);if(i.used(J,M,p),G&&o()-Date.parse(G.at)<Yr)return S(G,p,!0);if(!l(v))return G?S(G,p,!0):$e("rate",{why:`more than ${To} fetches in a minute`});try{let{type:R,text:z}=await k(w,{hosts:$,allowed:C,key:P});return S(i.put(J,{type:R,text:z,at:new Date(o()).toISOString()}),p,!1)}catch(R){if(!R.refusal)throw R;if(G&&R.refusal.code!=="consent")return S(G,p,!0);let z=P===void 0?R.refusal:Lo(R.refusal,P),ae=R.detail===void 0?z.why:P===void 0?R.detail:Lo({why:R.detail},P).why;return(z.code!=="offline"||R.detail!==void 0)&&f(`${v}: ${w.hostname} refused (${z.code}${ae?`: ${ae}`:""})`),z}}async function n(c,v){if(c.method!=="POST")return Ae(v,405,{ok:!1,reason:"method"});if(c.headers.origin!==`http://${c.headers.host}`)return Ae(v,403,{ok:!1,reason:"origin"});if(!/^application\/json\b/i.test(c.headers["content-type"]??""))return Ae(v,415,{ok:!1,reason:"type"});let T;try{T=await ns(c)}catch(p){return Ae(v,p.status??400,{ok:!1,reason:"body"})}try{return Ae(v,200,await b(T))}catch(p){return Ae(v,500,{ok:!1,code:"offline",why:p.message})}}return{handle:n,answer:b,cache:i}}import{walk as as,attr as Mt}from"../browser/shared/html-tree.mjs";import{workspaceAddress as Do}from"../browser/shared/workspace-address.mjs";function lt(e,a){if(!a)return e;let t=pn(e),o=Je(e,s=>Do(s,a)!==s,t),i=Ye(o,s=>Do(s.value,a)),f=s=>s.replace(/(["'`])\/(?:__gallery\/|generated\/|pages\/)/g,m=>m[0]+a+m.slice(1));return as(t,s=>{if(s.tagName==="script"&&(Mt(s,"data-doc-dev")!==void 0||Mt(s,"data-doc-package")!==void 0)&&!Mt(s,"src")){let m=s.sourceCodeLocation?.startTag?.endOffset,l=s.sourceCodeLocation?.endTag?.startOffset;m!==void 0&&l!==void 0&&i.push({start:m,end:l,text:f(e.slice(m,l))})}}),Ke(e,i)}function Wo({max:e=20}={}){let a=new Map;return{get(t,o,i){let f=`${t} ${o}`,s=a.get(f);return!s||s.text!==i?null:(a.delete(f),a.set(f,s),s.page)},set(t,o,i,f){let s=`${t} ${o}`;for(a.delete(s),a.set(s,{slug:t,text:i,page:f});a.size>e;)a.delete(a.keys().next().value)},clear(){a.clear()},forget(t){for(let[o,i]of a)i.slug===t&&a.delete(o)},get size(){return a.size}}}import{createHash as rs}from"node:crypto";import{readFileSync as ss}from"node:fs";import Mo from"node:fs/promises";import is from"node:path";import{release as cs,releaseFile as ls}from"../browser/shared/paths.mjs";async function dt(e){let a=await Promise.all(e.map(o=>Mo.stat(o).then(({mtimeMs:i,size:f})=>`${i} ${f}`,()=>"none"))),t=rs("sha256");return e.forEach((o,i)=>t.update(`${o}\0${a[i]}
80
+ `)),t.digest("hex").slice(0,16)}function Uo(e,a){let t=null,o=async()=>(await Promise.all(e.map(async i=>(await Mo.readdir(i,{recursive:!0,withFileTypes:!0}).catch(()=>[])).filter(s=>s.isFile()).map(s=>is.join(s.parentPath,s.name))))).flat().filter(a).sort();return{files:()=>t??=o(),changed:()=>{t=null}}}var Ut=cs?JSON.parse(ss(ls,"utf8")).stamps:null;var gt=oa.source.slice(1,-1),Ls=new RegExp(`^/generated/(${gt})\\.html$`),As=new RegExp(`^/(${gt})/(?:doc|report)\\.html$`),Is=new RegExp(`^/pages/(${gt})$`),Ns=new RegExp(`^/__gallery/pages/(${gt})/(cards|library|hint)$`),zt="/__gallery/events",Te=ds,ra=/^\/__gallery\/edit\/(v\/[a-f0-9]{16}\/)?src\/((?:shared(?:\/components|\/emoji|\/i18n)?\/|editor\/(?:page|components)(?:\/[a-z]+(?:-[a-z]+)*){0,2}\/(?!files?\.mjs))[a-z]+(?:-[a-z]+)*\.mjs)$/,Ds=/^\/__gallery\/edit\/(?:v\/[a-f0-9]{16}\/)?src\/(shared\/emoji\/data\/[a-z]+(?:-[a-z]+)*\.(json|bin))$/,ut=[X.join(Te,"editor","page"),X.join(Te,"editor","components"),X.join(Te,"shared")],Ws=e=>ra.test(`/__gallery/edit/src/${X.relative(Te,e).split(X.sep).join("/")}`);var Ms=[na,X.join(Te,"shared","components")],vd=[na,...ut],Ue={"Cache-Control":"no-store"},qo={"Cache-Control":"max-age=31536000, immutable"},Ht=(e,a,t)=>Bt(e,{type:a,headers:{...Ue,...us},body:t});function Us(e){let a=e.headers?.host??"",t=e.socket?.localPort;return!!t&&(a===`127.0.0.1:${t}`||a===`localhost:${t}`)}function Hs(e){if(e.method!=="GET"&&e.method!=="HEAD")return null;let a=e.socket?.localPort;if(!a||e.headers?.host!==`localhost:${a}`)return null;let t=new URL(e.url||"/","http://localhost");return t.pathname==="/"||t.pathname==="/index.html"?`http://127.0.0.1:${a}${t.pathname}${t.search}`:null}var sa=`window.addEventListener("doc-net-fetch", (event) => {
81
+ event.preventDefault();
82
+ event.detail.answer(fetch("/__gallery/net", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(event.detail.ask) }).then((response) => response.json()));
83
+ });`,ia=`let lost = false;
84
+ events.onerror = () => { lost = true; };
85
+ events.onopen = () => {
86
+ if (!lost) return;
87
+ lost = false;
88
+ for (const kind of ${JSON.stringify(Ts)}) window.dispatchEvent(new CustomEvent("doc-workspace-change", { detail: kind }));
89
+ };`,Bs=(e,a,t)=>`<script data-doc-dev>
90
+ (() => {
91
+ document.currentScript.remove();
92
+ ${sa}
93
+ const solo = new URLSearchParams(location.search).has("solo");
94
+ let catalog = "${t}";
95
+ const holds = (ids) => document.querySelector(ids === undefined ? "[${pt}]" : ids.split(",").map((id) => '[${pt}="' + id + '"]').join());
96
+ const events = new EventSource("${zt}?slug=${e}");
97
+ ${ia}
98
+ events.onmessage = (event) => {
99
+ const [kind, next, ids, more, consents, unlisted, packs] = event.data.split(" ");
100
+ if (kind === "notes") return void window.dispatchEvent(new CustomEvent("doc-annotations-changed", { detail: { version: next ?? "" } }));
101
+ if (kind === "changes") return void window.dispatchEvent(new CustomEvent("doc-changes-changed", { detail: { stamp: next ?? "" } }));
102
+ if (kind === "look") return void window.dispatchEvent(new CustomEvent("doc-look-request", { detail: { look: Object.fromEntries(new URLSearchParams(next ?? "")), from: "file" } }));
103
+ if (kind === "settings") return void window.dispatchEvent(new CustomEvent("doc-settings-changed", { detail: { hidden: next ? next.split(",") : [], disabled: ids ? ids.split(",") : [], shown: more ? more.split(",") : [], net: consents ? consents.split(",") : [], unlisted: unlisted ? unlisted.split(",") : [], packsOff: packs ? packs.split(",") : [] } }));
104
+ if (kind === "data") return void window.dispatchEvent(new CustomEvent("doc-workspace-change", { detail: next ?? "" }));
105
+ if (kind !== "report" && kind !== "assets" && kind !== "components") return;
106
+ if (kind === "components") {
107
+ if (document.readyState === "loading") return void document.addEventListener("DOMContentLoaded", () => events.onmessage(event), { once: true });
108
+ if (solo || next === catalog) return;
109
+ catalog = next;
110
+ if (!holds(ids)) return void window.dispatchEvent(new CustomEvent("doc-catalog-changed", { detail: { ids: ids === undefined ? null : ids.split(",").filter(Boolean) } }));
111
+ }
112
+ if (window.__galleryEditBusy) {
113
+ window.dispatchEvent(new CustomEvent({ report: "doc-source-changed", assets: "doc-assets-changed", components: "doc-components-changed" }[kind], { detail: { version: next ?? null } }));
114
+ return;
115
+ }
116
+ if (kind === "report" && next === "${a}") return;
117
+ if (window.__galleryEditReload) return window.__galleryEditReload(); // in a workbench: swapped in, no reload seen
118
+ location.reload();
119
+ };
120
+ })();
121
+ </script>`,zs=(e,a,t)=>`<script>
122
+ (() => {
123
+ document.currentScript.remove();
124
+ ${sa}
125
+ let catalog = "${t}";
126
+ const holds = (ids) => {
127
+ const named = ids === undefined ? "[${pt}]" : ids.split(",").filter(Boolean).map((id) => '[${pt}="' + id + '"]').join() || ":not(*)";
128
+ return Boolean(document.querySelector(named)) || [...document.querySelectorAll("template[data-ge-held]")].some((held) => held.content.querySelector(named));
129
+ };
130
+ const again = () => (window.__galleryEditReload ? window.__galleryEditReload() : location.reload());
131
+ const events = new EventSource("${zt}?page=${e}");
132
+ ${ia}
133
+ events.onmessage = (event) => {
134
+ const [kind, next, ids, more, consents, unlisted, packs] = event.data.split(" ");
135
+ if (kind === "page") return void (window.__galleryPageChanged ? window.__galleryPageChanged(next) : next !== "${a}" && again());
136
+ if (kind === "assets") return void again();
137
+ if (kind === "settings") return void window.dispatchEvent(new CustomEvent("doc-settings-changed", { detail: { hidden: next ? next.split(",") : [], disabled: ids ? ids.split(",") : [], shown: more ? more.split(",") : [], net: consents ? consents.split(",") : [], unlisted: unlisted ? unlisted.split(",") : [], packsOff: packs ? packs.split(",") : [] } }));
138
+ if (kind === "data") return void window.dispatchEvent(new CustomEvent("doc-workspace-change", { detail: next ?? "" }));
139
+ if (kind !== "components") return;
140
+ if (document.readyState === "loading") return void document.addEventListener("DOMContentLoaded", () => events.onmessage(event), { once: true });
141
+ if (next === catalog) return;
142
+ catalog = next;
143
+ if (holds(ids)) again();
144
+ };
145
+ })();
146
+ </script>`;function ea(e,a){let t=X.relative(e,a).split(X.sep);if(t[0]===".."||X.isAbsolute(t[0])||t[0]==="")return null;if(t.length===1&&t[0]===ht)return{slug:null,name:ht,packages:!0};let o=l=>process.platform==="win32"?l.toLowerCase():l;if(o(t[0])===vs&&t.length>=2&&js(t[1])&&!Jo.includes(t[1])){let l=t.slice(2);return l.some(g=>g.startsWith("."))?null:{extension:t[1],name:l.length===1?l[0]:null}}if(o(t[0])===xs&&t.length>=2&&aa(t[1])&&!Jo.includes(t[1])){let l=t.slice(2);return l.some(g=>g.startsWith("."))?null:{page:t[1],name:l.length===1?l[0]:null}}let i=t[0]===".gallery"&&t[1]==="pages"&&t.length>=3,[f,...s]=i?t.slice(2):t,m=!i&&o(f)===Ko;return!(m||oa.test(f))||f==="exports"||s.some(l=>l.startsWith("."))?null:{slug:m?Ko:f,name:s.length===1?s[0]:null,...m?{packages:m}:{}}}function It(e){let a=S=>process.platform==="win32"?X.resolve(S).toLowerCase():X.resolve(S),{gallery:t,preferencesPage:o,exports:i,extensions:f}=Me(e),[s,m,l,g]=[a(t),a(o),a(i),a(f)],k=(S,b)=>S===b||S.startsWith(b+X.sep);return S=>{let b=a(S);return k(b,g)&&b!==g&&b.slice(g.length+1).split(X.sep).some((n,c)=>c>0&&(n==="node_modules"||n===".git"))?!0:k(b,s)&&b!==s&&!k(b,m)||k(b,l)}}var ta=`<script data-doc-dev>document.currentScript.remove(); globalThis.${Fs} = ${JSON.stringify(Rs)};</script>`,ue=(e,a,t)=>new RegExp(`</${a}>`,"i").test(e)?e.replace(new RegExp(`</${a}>`,"i"),()=>` ${t}
147
+ </${a}>`):`${e}
148
+ ${t}`;function Gt({token:e=null,unified:a=!1,base:t="",reportsDirectory:o=ms,stateDirectory:i=Me(o).state,projects:f=void 0,onWorkspaceChange:s=()=>{},announceServer:m=!0,logger:l=console,kind:g="dev",workbenchPage:k=null,closeServer:S=async()=>{},exit:b=()=>process.exit(0)}={}){let n=new Set,c=(r,d="",u="report")=>{for(let j of n)(!r||j.slug===r)&&j.response.write(`data: ${r?`${u} ${d}`:"assets"}
149
+
150
+ `)},v=(r,d)=>{for(let u of n)u.page===r&&u.response.write(`data: page ${d}
151
+
152
+ `)},T=()=>{K("workspace",()=>{for(let r of n)r.workspace&&r.response.write(`data: workspace ${Date.now()}
153
+
154
+ `)})},p=()=>{T(),s(o)},M=r=>c(r,String(Date.now()),"changes"),x=Rn({base:t,token:e,reportsDirectory:o,stateDirectory:i,finish:Ve,log:r=>l.info?.(`[gallery] ${r}`),onChanges:M}),$=(r,d,u,{lang:j=null,page:W=!1}={})=>mn(r,d,u,{directory:o,blank:!0,lang:j,page:W}),O=i?Kn({file:X.join(i,"activity.json")}):null,w=In({root:o,read:An(x),activity:O,draw:(r,d)=>_e(r,{slug:d,mode:"words",reportsDirectory:o})}),_=new Set,C=r=>{for(let d of r)_.add(d);_.size!==0&&K("data",()=>{let d=[..._];_.clear();for(let u of n)if(u.slug||u.page)for(let j of d)u.response.write(`data: data ${j}
155
+
156
+ `)})},P=r=>X.resolve(X.dirname(ft(r,o)))===X.resolve(o),J=null,G=null,R=()=>G??=(async()=>{for(let r of n)r.response.end();n.clear(),await Promise.race([S().catch(()=>{}),new Promise(r=>setTimeout(r,3e3))]),await O?.close(),await J?.().catch(()=>{}),await ae.close(),b()})(),z=Nn({reportsDirectory:o,projects:f,unified:a,server:{kind:g,version:hs,stop:R},edits:x,reports:{create:$,export:r=>vo(x,r,{root:o,workspace:d=>w.snapshot(d)}),words:(r,d)=>_e(r,{slug:d,mode:"words",reportsDirectory:o})},components:ko({root:je(),taken:()=>te.taken()}),changed:p,index:w,web:{frameable:_n,title:Pn,icon:r=>jn(r)}}),ae=fo({edits:x,workspace:z,reports:{create:$},reportsDirectory:o,offline:r=>bn({...r,directory:o,workspace:d=>w.snapshot(d)})}),h=No({root:je(),hop:process.env.GALLERY_TEST_NET?Io(Number(process.env.GALLERY_TEST_NET)):null,log:r=>l.info?.(`[gallery] ${r}`)}),y=ln({root:je(),edits:x,stateDirectory:Me(je()).state,catalogTaken:()=>te.taken(),log:r=>l.info?.(`[gallery] ${r}`),shown:(r,d)=>lt(Pt(r,d),t)}),A=(r,d,{present:u=!1,editorModule:j,kit:W}={})=>{let E=d,ce="",ne="",fe=!0;try{u||({html:E,snippet:ce,head:ne}=x.preview(r,d,{editor:j,kitTags:le=>wn(le,W)}))}catch(le){fe=!1,l.warn(`[gallery] text editing unavailable for ${r}: ${le.message}`)}if({html:E}=vn(E,{slug:r,mode:"preview",reportsDirectory:o,kit:W}),E=ue(E,"head",Bs(r,We(d),se().stamp)),E=ue(E,"head",`<script data-doc-dev>${Bo()}</script>`),E=ue(E,"head",ta),ne&&(E=ue(E,"head",ne)),u)return{html:ue(E,"head",`<style data-doc-present>.doc-display { display: none !important; }</style>
157
+ <script type="module" src="/__gallery/edit/src/editor/page/present-links.mjs" data-doc-dev></script>`),whole:fe};let ke="";try{ke=eo(r,d,{},{directory:ft(r,o)})}catch(le){fe=!1,l.warn(`[gallery] checks unavailable for ${r}: ${le.message}`)}return ke&&(E=ue(E,"body",ke)),{html:ce?ue(E,"body",ce):E,whole:fe}},F=Wo(),I=Uo(ut,Ws),N=r=>{let d=ft(r,o);return[d,X.join(d,"assets")]},H=()=>Ut?.editor??I.files().then(dt),B=r=>Ut?.kit?.[r.id]??dt([Ct(r)]),U=async(r,d,{present:u})=>{let[j,W,E]=await Promise.all([u?"":H(),Promise.all(Fe.map(B)),dt(N(r))]),ce=[u?"present":j,...W,E,se().stamp,`look:${zo(Go(r,o))}`].join(" "),ne=F.get(r,ce,d);if(ne!==null)return u||x.opened(d),ne;let fe=new Map(Fe.map((he,Ce)=>[he,W[Ce]])),ke=u?void 0:`/__gallery/edit/v/${j}/src/editor/page/editor.mjs`,{html:le,whole:de}=A(r,d,{present:u,editorModule:ke,kit:he=>`${Xe(he)}?v=${fe.get(he)}`});return de&&F.set(r,ce,d,le),le},Z=async r=>{let d=Vo(r,o),[u,j]=await Promise.all([we.readFile(d.html,"utf8").catch(()=>null),we.readFile(d.json,"utf8").catch(()=>"")]);if(u===null)return null;let[W,E]=await Promise.all([H(),Promise.all(Fe.map(B))]),ce=new Map(Fe.map((L,be)=>[L,E[be]])),ne=se(),fe=Zo(u,j),ke=cn(u,{blockOf:L=>Ot(ne,L)}),le=Object.fromEntries([...new Set(Et(u).cards.map(({block:L})=>L).filter(Boolean))].map(L=>[L,Ot(ne,L)])),{html:de}=qn(ke,{reportsDirectory:o,slug:r,kit:L=>`${Xe(L)}?v=${ce.get(L)}`}),he=_s(r,o),Ce=Cs(r,o),Re=he?.defaultCards===!0,ze=Es(u),Ge=L=>ne.packages.get(L)?.name??qt().find(be=>be.id===L)?.title??null,Se=Re?bs(o,Et(u).cards.map(({block:L})=>L)).map(L=>({block:L,name:Ge(L)})):[],De=JSON.stringify({slug:r,title:he?.title??r,token:x.token,version:fe,blocks:le,...Ce?{hint:Ce}:{},...Re?{defaults:Re}:{},...Se.length?{news:Se}:{},...ze?{blank:ze}:{}}).replace(/</g,"\\u003c");return de=ue(de,"head",`<script type="application/json" data-ge-page data-doc-dev>${De}</script>`),de=ue(de,"head",zs(r,fe,ne.stamp)),de=ue(de,"head",`<script data-doc-dev>${Bo()}</script>`),de=ue(de,"head",ta),ue(de,"head",`<script type="module" src="/__gallery/edit/v/${W}/src/editor/page/custom-page.mjs" data-doc-dev></script>`)};async function Q(r,d,u){try{if(!Us(r))return Ho(d,403,{ok:!1,reason:"host"});let j=Hs(r);if(j)return Bt(d,{status:302,headers:{Location:j,...Ue}});let W=new URL(r.url||"/","http://localhost"),E=decodeURI(W.pathname);if(E===zt){d.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-store",Connection:"keep-alive"}),d.write(`retry: 3000
158
+
159
+ `);let L={slug:W.searchParams.get("slug"),page:W.searchParams.get("page"),workspace:W.searchParams.has("workspace"),response:d};n.add(L);let{stamp:be,settings:$a}=se();d.write(`data: components ${be}
160
+
161
+ `),d.write(`data: ${St($a)}
162
+
163
+ `),r.on("close",()=>n.delete(L));return}if(E==="/__gallery/net")return h.handle(r,d);if(E==="/__gallery/edit/commit")return x.commit(r,d);if(E==="/__gallery/edit/reverted")return x.reverted(r,d);if(E==="/__gallery/edit/hand-in")return x.handInRequest(r,d);if(E==="/__gallery/edit/settle")return x.settleRequest(r,d);if(E==="/__gallery/edit/round")return x.roundRequest(r,d);if(E==="/__gallery/edit/upload")return x.upload(r,d);if(E==="/__gallery/edit/unfurl")return x.unfurl(r,d);if(E==="/__gallery/edit/emoji-library"){if(r.method==="POST")return x.addEmoji(r,d);let[L,be]=await x.listEmojis();return Ho(d,L,be)}if(E==="/__gallery/edit/icon"){let L=hn({value:W.searchParams.get("value")??"",slug:W.searchParams.get("slug"),tab:W.searchParams.has("tab")});return Ie(d,L?.body,{type:L?.type,headers:{"Cache-Control":"max-age=31536000, immutable"}})}if(await Oo(E,d,{reportsDirectory:o})||await Co(E,d,{reportsDirectory:o})||await ho(E,W.searchParams.get("v"),d,{root:je()}))return;let ce=E.match(/^\/__gallery\/edit\/emoji-library\/([^/]+)$/)?.[1];if(ce){let L=await x.readEmoji(ce);return Ie(d,L?.body,{type:L?.type,headers:{"Cache-Control":"no-cache"}})}if(E==="/__gallery/edit/frameable")return x.frameable(r,d);if(E==="/__gallery/edit/annotations")return x.annotations(r,d);if(E==="/__gallery/edit/changes")return x.changes(r,d);let ne=E.match(/^\/__gallery\/transfer\/([a-z]+)$/)?.[1];if(ne)return ae.handle(r,d,ne);let[,fe,ke]=E.match(Ns)??[];if(fe)return y.handle(r,d,fe,ke);let le=E.match(/^\/__gallery\/workspace\/([a-z]+(?:-[a-z]+)*)$/)?.[1];if(le)return z.handle(r,d,le);let[,de,he]=E.match(ra)??[];if(he){let L=await we.readFile(X.join(Te,he),"utf8").catch(()=>null);return Ie(d,L,{type:"text/javascript; charset=utf-8",headers:de?qo:Ue})}let Ce=W.searchParams.has("v")&&Fe.find(L=>Xe(L)===E);if(Ce){let L=await we.readFile(Ct(Ce)).catch(()=>null);return Ie(d,L,{type:E.endsWith(".css")?"text/css; charset=utf-8":"text/javascript; charset=utf-8",headers:qo})}if(E==="/__gallery/edit/mhchem.js"){let L=await we.readFile(gn).catch(()=>null);return Ie(d,L,{type:"text/javascript; charset=utf-8",headers:Ue})}let[,Re,ze]=E.match(Ds)??[];if(Re){let L=await we.readFile(X.join(Te,Re)).catch(()=>null);return Ie(d,L,{type:ze==="json"?"application/json; charset=utf-8":"application/octet-stream",headers:{"Cache-Control":"max-age=86400"}})}if(k&&(E==="/"||E==="/index.html"))return Ht(d,"text/html; charset=utf-8",await k(W.pathname,r));let Ge=E.match(Is)?.[1];if(Ge){let L=await Z(Ge);return L===null?u():Ht(d,"text/html; charset=utf-8",lt(L,t))}let Se=E.match(Ls)?.[1];if(!Se){let L=E.match(As)?.[1];return aa(L)&&await we.access($s(ft(L,o)).html).then(()=>!0,()=>!1)?Bt(d,{status:302,headers:{Location:`${t}/generated/${L}.html${W.search}`,...Ue}}):u()}let De=await x.readTaken(Se);if(De===null)return u();W.searchParams.has("present")||x.noteTaken(Se,De.source).then(L=>L&&M(Se),()=>{}),Ht(d,"text/html; charset=utf-8",lt(await U(Se,De.text,{present:W.searchParams.has("present")}),t))}catch(j){u(j)}}let ee=new Map,K=(r,d)=>{clearTimeout(ee.get(r)),ee.set(r,setTimeout(d,120))},D=r=>{ys(r,o).reads&&c(r,zo(Go(r,o)),"look")},Y=mo({settled:x.settled,async tell(r,d){let u=await x.read(r,d.source).catch(j=>(l.error(`[gallery] ${r}: ${j.message}`),{version:We(d.source??"")}));if(c(r,u?.version??We("")),P(r)){let j=x.writerOf(r,d.source)??"agent";w.changed(r,{source:d.source??null,text:u?.text??null,by:j}).then(C,W=>l.error(`[gallery] ${r}: its facts not read: ${W.message}`))}x.noteTaken(r,d.source).then(j=>j&&M(r),j=>l.error(`[gallery] ${r}: the Agent's changes not kept: ${j.message}`)),x.checkAnnotations(r).catch(j=>l.error(`[gallery] ${r}: annotations not checked: ${j.message}`))}}),re=({id:r,problem:d,off:u})=>u||l.warn(`[gallery] custom block ${r} does not load: ${Jt("en",d)}`),te=Bn({root:je(),tell({stamp:r,problems:d,settings:u},j){for(let W of j)d.has(W)&&re(d.get(W));for(let{response:W}of n)W.write(`data: components ${r} ${j.filter(E=>ks.test(E)).join(",")}
164
+
165
+ `),W.write(`data: ${St(u)}
166
+
167
+ `)}});for(let r of se().problems.values())re(r);w.start().then(r=>r>0&&C(["activity"]));let ye=It(o),pe=Qo(o).then(r=>r.join("/"),()=>""),kt=!1,vt=r=>{kt||=r===mt,K("extensions",async()=>{let d=kt;kt=!1;let u=await pe;pe=Qo(o).then(j=>j.join("/"),()=>u),(d||await pe!==u)&&p()})},Be=je(),wa=Me(Be).extensions,ya=t?null:Le(Be,(r,d)=>{if(gs(d,Me(Be).outline)){p();return}let u=X.relative(d,wa);if(r==="reset"||u===""||!u.startsWith("..")&&!X.isAbsolute(u)){vt(mt);return}let j=ea(Be,d);j?.extension&&(j.name===mt||j.name===null)&&vt(j.name)},{extensionsOnly:!0,outline:!0}),xt=(r,d)=>!fs&&d.some(u=>r.startsWith(u+X.sep));function ka(r,d){if(r==="reset"){F.clear(),I.changed(),te.changed(),p();return}if(ye(d))return;let u=ea(o,d);if(u?.page){let{page:j,name:W}=u;W&&Os(W)&&K(`page:${j}`,async()=>{let E=Vo(j,o),[ce,ne]=await Promise.all([we.readFile(E.html,"utf8").catch(()=>null),we.readFile(E.json,"utf8").catch(()=>"")]);ce!==null&&v(j,Zo(ce,ne))}),(W===Xo.json||W===Xo.html&&/^(add|unlink)$/.test(r)||W===null&&/^(add|unlink)Dir$/.test(r))&&p();return}if(u?.extension){(u.name===mt||u.name===null)&&vt(u.name);return}if(u?.packages&&te.changed(),u?.name===ht&&u.slug===null&&K("look:*",()=>new Set([...n].map(({slug:j})=>j).filter(Boolean)).forEach(D)),u?.name===ht&&u.slug===null&&p(),u?.slug&&!(u.name&&Ss(u.name))&&F.forget(u.slug),u&&(/^(doc|report)\.json$/.test(u.name??"")||/^(add|unlink)Dir$/.test(r)&&u.name===null)&&F.clear(),u?.slug&&!u.packages&&u.name===null&&/^(add|unlink)Dir$/.test(r)&&P(u.slug)&&(w.forget(u.slug),C(["todos","recent","stats"])),u?.slug&&!(u.packages&&u.name===null)&&(/^(doc|report)\.json$/.test(u.name??"")||/^(add|unlink)Dir$/.test(r)&&u.name===null||/^(add|unlink)$/.test(r)&&Yo(u.name??""))&&p(),u?.slug&&!u.packages&&u.name===Ps&&p(),/^(add|unlink)(Dir)?$/.test(r)&&xt(d,ut)&&I.changed(),u?.name&&(Yo(u.name)||/^(doc|report)\.json$/.test(u.name))){if(Y(u.slug),/^(doc|report)\.json$/.test(u.name)){let{slug:j}=u;K(`look:${j}`,()=>D(j))}}else if(u?.name==="annotations.json"){let{slug:j}=u;K(`notes:${j}`,async()=>{let W=await we.readFile(d,"utf8").catch(()=>null);c(j,W===null?"":We(W),"notes")})}else xt(d,Ms)?K("kit",async()=>{try{await Sn({fresh:!0}),c()}catch(j){l.error(`[gallery] shared kit rebuild failed: ${j.message}`)}}):xt(d,ut)&&K("editor",()=>c())}async function va(r){m&&(J=await ps({home:o,port:r,token:x.token,kind:g})),await ws(o)}async function xa(){for(let r of n)r.response.end();n.clear(),ya?.close();for(let r of ee.values())clearTimeout(r);te.close(),await O?.close(),await J?.().catch(()=>{}),J=null,await ae.close(),await x.drain()}return{handle:Q,changed:ka,listening:va,close:xa,stop:R,edits:x,workspace:z,transfer:ae,refresh:T,get listeners(){return n.size},get workbenchListeners(){return[...n].filter(r=>r.workspace).length}}}import{forgetSnapshot as Ks,idsOf as Kt}from"../browser/shared/workspace-columns.mjs";import{isWorkspace as la,readRegistry as Js,registryFile as da,workspaceId as Ys,workspaceKey as He}from"../browser/shared/workspace-registry.mjs";import{layoutOf as Xs}from"../browser/shared/workspace.mjs";import{projectBase as fa,projectOfPath as Vs,localPath as Zs}from"../browser/shared/workspace-address.mjs";import{sendJson as ma}from"../browser/shared/http.mjs";function ua({reportsDirectory:e,watch:a=!0,...t}){let o=Tn(Gs().data),i=new Map,f=new Map,s=new Map,m=!1,l=He(e),g=w=>{Ks(w);for(let _ of i.values())_.refresh()},k=new Map,S=new Map,b={touch:w=>{for(let _ of w.values())v(_).catch(C=>t.logger?.warn?.(`[gallery] ${C.message}`))},indexOf:async w=>(await v(w))?.workspace.index??null},n=Gt({...t,token:o,reportsDirectory:e,unified:!0,projects:b,onWorkspaceChange:g,closeServer:async()=>{await $(),await t.closeServer?.()}}),c=Zn({edits:n.edits});n.base="",i.set(l,n);async function v(w){if(m)return null;let _=Ys(w),C=He(w);return C!==l&&(!la(w)||Kt().get(_)?.length!==1||He(Kt().get(_)[0])!==C)?null:(k.set(C,Date.now()),i.has(C)?i.get(C):(f.has(C)||f.set(C,(async()=>{let P=Gt({...t,token:o,reportsDirectory:w,stateDirectory:Xs(w).state,base:fa(_),projects:b,onWorkspaceChange:g,announceServer:!1,workbenchPage:null});return P.base=fa(_),m?(await P.close(),null):(i.set(C,P),a&&s.set(C,Le(w,P.changed)),P)})().finally(()=>f.delete(C))),f.get(C)))}let T=null;function p(){return m?Promise.resolve():T??=(async()=>{let w=Js().workspaces.map(({root:C})=>C),_=new Set([l,...w.filter(la).map(C=>He(C))]);for(let[C,P]of i)_.has(C)||(i.delete(C),s.get(C)?.close(),s.delete(C),await P.close())})().catch(w=>t.logger?.warn?.(`[gallery] ${w.message}`)).finally(()=>{T=null})}async function M(w,_,C){try{if(m)return ma(_,503,{ok:!1,reason:"closing"});let P=new URL(w.url??"/","http://localhost");if(await c.handle(w,_))return;let J=Vs(P.pathname);if(!J)return n.handle(w,_,C);let G=Kt().get(J),R=G?.length===1?await v(G[0]):null;if(!R)return ma(_,404,{ok:!1,reason:"workspace"});let z=Zs(P.pathname);if(R===n||/^\/pages(?:\/|$)|^\/__gallery\/(?:pages?|components|net)(?:\/|$)|^\/__gallery\/workspace\/(?:stop|head|new-page|instructions|extension-edit|components)(?:\/|$)/.test(z)){_.writeHead(307,{Location:z+P.search}),_.end();return}let h=He(G[0]);return S.set(h,(S.get(h)??0)+1),_.once("close",()=>{S.set(h,S.get(h)-1),k.set(h,Date.now())}),w.url=z+P.search,R.handle(w,_,y=>{w.url=P.pathname+P.search,C(y)})}catch(P){C(P)}}let x=setInterval(()=>{for(let[w,_]of i)w!==l&&!n.workbenchListeners&&!S.get(w)&&!_.listeners&&Date.now()-k.get(w)>12e4&&(i.delete(w),s.get(w)?.close(),s.delete(w),k.delete(w),S.delete(w),_.close().catch(C=>t.logger?.warn?.(`[gallery] ${C.message}`)))},3e4);x.unref();async function $(){if(!m){m=!0,clearInterval(x),ca.unwatchFile(da(),O),await c.close();for(let w of s.values())w?.close();await Promise.all([...f.values()]),await Promise.all([...i.values()].map(w=>w.close())),i.clear()}}let O=()=>{g(e),p()};return{handle:M,resolve:v,edits:n.edits,workspace:n.workspace,stop:n.stop,changed(w,_){for(let C of i.values())C.changed(w,_)},async listening(w){await n.listening(w),await p(),ca.watchFile(da(),{interval:500,persistent:!1},O)},close:$}}import Qs from"node:fs/promises";import Ne from"node:path";import{FRAMED_BY as qs,serve as pa}from"../browser/shared/http.mjs";var ei={".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".json":"application/json; charset=utf-8",".map":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon",".woff2":"font/woff2",".woff":"font/woff",".ttf":"font/ttf",".txt":"text/plain; charset=utf-8"},ti=e=>ei[Ne.extname(e).toLowerCase()]??"application/octet-stream";function ni(e,a){if(/%(?:2f|5c|00)/i.test(a)||/[\\\0]/.test(a))return null;let t;try{t=decodeURIComponent(a)}catch{return null}let o=t.split("/");if(o.some(s=>s===""||s==="."||s===".."||/[\\\0:]/.test(s)))return null;let i=Ne.resolve(e,...o),f=Ne.relative(e,i);return f&&!f.startsWith("..")&&!Ne.isAbsolute(f)?i:null}async function ha(e,a,{web:t,kit:o,vendor:i}){if(e.method!=="GET"&&e.method!=="HEAD")return!1;let f=new URL(e.url||"/","http://localhost").pathname,s=null,m=null;if(f==="/"||f==="/index.html"){if(!t)return!1;[s,m]=[Ne.join(t,"index.html"),{"Cache-Control":"no-store",...qs}]}else{let k=[["/assets/",t&&Ne.join(t,"assets"),"max-age=31536000, immutable"],["/kit/",o,"no-cache"],["/vendor/",i,"no-cache"]].find(([S,b])=>b&&f.startsWith(S));if(!k)return!1;s=ni(k[1],f.slice(k[0].length)),m={"Cache-Control":k[2]}}let l=s?await Qs.readFile(s).catch(()=>null):null;return l?(pa(a,{type:ti(s),headers:{...m,"X-Content-Type-Options":"nosniff"},body:e.method==="HEAD"?void 0:l}),!0):(pa(a,{status:404}),!0)}async function qd({reportsDirectory:e=di(),port:a,web:t=ci,kind:o=process.env.GALLERY_SERVER_KIND==="dev"?"dev":"cli",stateDirectory:i=mi(e).state,exit:f=(g=0)=>process.exit(g),watch:s=!0,signals:m=!0,log:l=console}={}){await fi(e),await sn(e,{log:p=>l.log(`[gallery] ${new Date().toISOString()} ${p}`)}),an(e,p=>l.log(`[gallery] ${new Date().toISOString()} ${p}`)),on(e);let g=await dn(e,{stateDirectory:i});g.did==="made"?l.log(`[gallery] ${new Date().toISOString()} the default home page made: ${g.file} (${g.cards.length} cards)`):g.did==="failed"&&l.warn(`[gallery] ${new Date().toISOString()} ${fn(g)}`);let k=null,S=null,b=null,n=li(),c=async()=>{S?.close(),b&&wt.unwatchFile(yt,b),await oi.writeFile(n.lastPortFile,`${a}
168
+ `).catch(()=>{}),await new Promise(p=>{k.close(()=>p()),k.closeAllConnections()})},T=ua({reportsDirectory:e,watch:s,stateDirectory:i,logger:{info:p=>l.log(p),warn:p=>l.warn(p),error:p=>l.error(p)},kind:o,closeServer:c,exit:()=>f(0)});k=ai.createServer((p,M)=>{T.handle(p,M,async x=>{if(x){l.error(`[gallery] ${p.method} ${p.url}: ${x.stack??x.message}`),M.headersSent?M.end():ga(M,{status:500});return}try{if(await ha(p,M,{web:t,kit:ri,vendor:ii}))return}catch($){l.error(`[gallery] ${p.url}: ${$.message}`)}M.headersSent||ga(M,{status:404})})}),k.keepAliveTimeout=5e3,await new Promise((p,M)=>{k.once("error",M),k.listen(a,"127.0.0.1",()=>{k.off("error",M),p()})}),a=k.address().port;try{await T.listening(a)}catch(p){throw await c(),await T.close(),p}if(s&&(S=Le(e,T.changed)),si){let p=wt.readFileSync(yt,"utf8");b=()=>{let M=null;try{M=wt.readFileSync(yt,"utf8")}catch{}M!==p&&(l.log("[gallery] The package was replaced (another version installed): this server stops; the next gallery command starts the new one."),T.stop())},wt.watchFile(yt,{interval:3e3,persistent:!1},b)}if(m)for(let p of["SIGINT","SIGTERM","SIGHUP"])process.once(p,()=>T.stop());return{server:k,port:a,routes:T,async close(){await c(),await T.close()}}}export{qd as a};
@@ -0,0 +1,2 @@
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}from"./chunk-IA2SIEJQ.mjs";import"./chunk-2KAVXMKG.mjs";import"./chunk-XZCFPKGO.mjs";import"./chunk-S3SX3COT.mjs";import"./chunk-IA4PSIMD.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-6NLXUKAY.mjs";import"./chunk-VRPVVMRB.mjs";import"./chunk-4OZWXZE5.mjs";import"./chunk-USIHBCSW.mjs";import"./chunk-3SKOU6OZ.mjs";import"./chunk-ZTHICSSF.mjs";import"./chunk-PLB7L22J.mjs";import"./chunk-PAREWQGB.mjs";import"./chunk-BFJGHSQN.mjs";import"./chunk-U5XL7D6A.mjs";import"./chunk-HYMEEXKN.mjs";import"./chunk-UMHUSOPJ.mjs";import"./chunk-W5NPH5UA.mjs";import"./chunk-ECZBLQKK.mjs";import"./chunk-E7656LR7.mjs";import"./chunk-TKWEX4FD.mjs";import"./chunk-A55HN5OK.mjs";import"./chunk-5L7RYZCL.mjs";export{a as noDocuments,b as run};
@@ -0,0 +1,8 @@
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 b from"node:fs";import m from"node:fs/promises";import Q from"node:os";import P 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:o=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]}:o?{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 I(e,r){let t=K(e,r);return t.skip?{opened:!1,why:t.skip}:new Promise(o=>{let n;try{n=C(t.command,t.args,{detached:!0,stdio:"ignore",windowsHide:!0})}catch(s){return o({opened:!1,why:`${w.basename(t.command)} did not start (${s.code??s.message})`})}n.once("error",s=>o({opened:!1,why:`${w.basename(t.command)} did not start (${s.code??s.message})`})),n.once("spawn",()=>{n.unref(),o({opened:!0})})})}import{packageRoot as Z,projectRoot as G,release as O,reportsDirectory as h}from"../browser/shared/paths.mjs";import{workspaceId as ee,registerQuietly as te}from"../browser/shared/workspace-registry.mjs";import{serviceLocation as re,workspaceBase as ne}from"../browser/shared/service-location.mjs";import{fullAddress as oe}from"../browser/shared/page-address.mjs";import{findPreviewServer as se,galleryVersion as F,portIsFree as ie,previewServerFor as ae,readAnnouncement as ce}from"../browser/shared/preview-server.mjs";import{documentLinks as le}from"../browser/shared/reports.mjs";import{defaultWorkspace as de,documentDirectory as pe,documentFiles as ue}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",fe="Agent \u81EA\u7528\uFF08\u53EA\u6709\u6587\u6863\u9875\uFF0C\u4E0D\u4EA4\u7ED9\u7528\u6237\uFF09\uFF1A",me=e=>`send the user ${e} now, in a message of its own, before any other step; then `;function Xe(e,r){let t=e.at(-1)??"";return`Next: ${t.startsWith($)?me(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 I(t.slice($.length))):null}var D="GALLERY_NO_PREVIEW",he=e=>!["","0",void 0].includes(e),et=e=>e.has("--no-preview")||he(process.env[D]),we=4317,$e=20,ye=(e=process.env)=>{let r=Number(e.GALLERY_PORT);return Number.isInteger(r)&&r>0&&r<65536?r:we},ge=6e4,ve=5*1024*1024,xe=P.join(G,"node_modules","vite","bin","vite.js"),ke=P.join(Z,"dist","server.mjs"),Le=e=>new Promise(r=>setTimeout(r,e)),Se=de(),R=re(),f=R.serverLog,W=()=>ne(h),A=(e,r)=>`http://127.0.0.1:${e}${W()}/generated/${r}.html`,be=(e,r)=>`${A(e,r)}?agent`,Y=e=>`http://127.0.0.1:${e}/`,Ae=async(e,r)=>{let t=await le(h).then(n=>n.links,()=>null),o=oe(`http://127.0.0.1:${e}`,r,t);return W()?o.replace("/#",`/#~${ee(h)}/`):o};async function Pe({first:e=ye(),count:r=$e}={}){let t=Number((await m.readFile(R.lastPortFile,"utf8").catch(()=>"")).trim()),o=Array.from({length:Math.max(0,r)},(n,s)=>e+s);return Number.isInteger(t)&&t>0&&t<65536?[t,...o.filter(n=>n!==t)]:o}async function Re(){return await m.mkdir(P.dirname(f),{recursive:!0}),await m.stat(f).then(r=>r.size,()=>0)>ve&&await m.rename(f,`${f}.1`).catch(()=>{}),b.openSync(f,"a")}async function Ee(e,r){if(!O){let{writeSharedAssets:p}=await import("./chunk-6L6V7YR2.mjs");await p()}let t=await Re();b.writeSync(t,`
3
+ [${new Date().toISOString()}] ${r}: Gallery ${F} on 127.0.0.1:${e} for ${h}
4
+ `);let[o,n]=O?[[ke,"--port",String(e)],Q.homedir()]:[[xe,"--host","127.0.0.1","--port",String(e),"--strictPort"],G],s=J(process.execPath,o,{cwd:n,env:{...process.env,GALLERY_WORKSPACE:Se,GALLERY_SERVER_KIND:"cli"},detached:!0,stdio:["ignore",t,t],windowsHide:!0});return b.closeSync(t),s.unref(),s}async function Ne({slug:e=null,command:r=`gallery open${e?` ${e}`:""}`,ports:t=null,starting:o=ge,baseline:n=!1}={}){await te(h);let s=()=>!0;if(e){let a=ue(pe(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-K3JKPFL5.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);s=x=>v.length===0||v.some(_=>x.includes(_)||x.includes(X(_)))}let p=t??await Pe(),k=p.length?`${Math.min(...p)} to ${Math.max(...p)}`:"none",L=`gallery open${e?` ${e}`:""}`,E=async(a,c=[])=>{let i=await ae({ports:p.slice(a),start:v=>Ee(v,r)});return i.busy?.newer?{failed:{ok:!1,reason:"newer",message:`A newer Gallery (${i.busy.version}) serves this Gallery data directory (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 ${L} again in a while.`}}:i.busy?{failed:{ok:!1,reason:"busy",message:`The shared 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 ${L} again in a while, or stop that process first (gallery stop): a second server for this data directory is not started beside it.`}}:i.stuck?{failed:{ok:!1,reason:"stuck",message:`An older Gallery's server serves this Gallery data directory and did not stop: ${i.stuck.message}`}}:i.port===null?{failed:{ok:!1,reason:"ports",message:`No server for this data directory runs, and no port from ${k} is free to start one on: stop a server on one of them (or name another first port: GALLERY_PORT=<n>), then run ${L}.`}}:{...i,passed:[...c,...i.passed]}},u=await E(0);if(u.failed)return u.failed;let{port:l,started:d,passed:S,replaced:j}=u,y=u.running??null,N=Date.now()+o,g="",B=async()=>{if(e){let c=await fetch(`${A(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&&s(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 Le(300)){if(Date.now()>N)return{ok:!1,reason:"timeout",message:`${e?A(l,e):Y(l)} did not answer${e?" with the document's title":""} in ${o/1e3}s (${g})${d?`; the server's output is in ${f}`:""}.`};if(d){let a=await se({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 ce())?.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 ie(l)){if(u=await E(p.indexOf(l)+1,[...S,`${l} (taken by another program while the server started)`]),u.failed)return u.failed;({port:l,started:d,passed:S}=u),y=u.running??null,N=Date.now()+o;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(R.lastPortFile,`${l}
8
+ `).catch(()=>{}),{ok:!0,port:l,pid:d?.pid??y?.pid??null,kind:y?.kind??"cli",started:!!d,replaced:j??null,passed:S}}var _e=e=>e.length<2?e.join(""):`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`;function Te({port:e,pid:r,kind:t,started:o,replaced:n,passed:s=[]}){let p=[`pid ${r}`,...t==="dev"?["npm run dev's"]:[],...o?[`started now${s.length?`, after passing over ${_e(s)}`:""}`]:[],...n?[`it replaced Gallery ${n.version??"an older version"}'s server, pid ${n.pid}`]:[]],k=o?`; its log: ${f}`:"";return`Gallery's shared server runs on port ${e} (${p.join(", ")}${k}). This command is done; the server runs on after it (nothing to wait for or keep running).`}async function Ie(e,r,t=null){return[Te(r),...e?[`${fe}${be(r.port,e)}`]:[],`${$}${e?await Ae(r.port,{slug:e,block:t}):Y(r.port)}`]}async function tt(e,{skipped:r,command:t,ports:o=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 s=await Ne({slug:e,command:t,ports:o});return s.ok?Ie(e,s):[`Preview: not started: ${s.message}`,`When that is fixed, ${n}.`]}export{$ as a,fe as b,Xe as c,Ze as d,et as e,be as f,Y as g,Pe as h,Ne as i,Te as j,Ie as k,tt as l};
@@ -1,2 +1,2 @@
1
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{d as a,e as b,f as c,g as d}from"./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 commitEdits,c as revertedParts,d as revertedTexts,b as revertedUnits};
2
+ import{d as a,e as b,f as c,g as d}from"./chunk-W5NPH5UA.mjs";import"./chunk-ECZBLQKK.mjs";import"./chunk-E7656LR7.mjs";import"./chunk-TKWEX4FD.mjs";import"./chunk-A55HN5OK.mjs";import"./chunk-5L7RYZCL.mjs";export{a as commitEdits,c as revertedParts,d as revertedTexts,b as revertedUnits};
@@ -0,0 +1,2 @@
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 v,h as X}from"./chunk-3XZOA7AH.mjs";import{a as C,b as B,d as z,g as W,i as J,j as K}from"./chunk-BN7M3IN7.mjs";import{a as w}from"./chunk-JEUK3ZO7.mjs";import{f as G}from"./chunk-7UZUQQ7Q.mjs";import{h as F,i as H}from"./chunk-4B2TB5K2.mjs";import{a as R,e as P,f as Y}from"./chunk-KLQP46Y3.mjs";import{a as U,b as d,f as q}from"./chunk-4OZWXZE5.mjs";import{f as L}from"./chunk-TKWEX4FD.mjs";import{editStateDirectory as re,reportsDirectory as Z}from"../browser/shared/paths.mjs";import{FIRST_BOARD as le,HOME as M,createPage as ce,listPages as de,pageExists as ee,pageFiles as O,pageSlugRefused as te,pagesSettings as he,readPageMeta as ge}from"../browser/shared/pages.mjs";import{findPreviewServer as se}from"../browser/shared/preview-server.mjs";var D=(e,t)=>`${W(e)}#@${t}`,pe=(e,t)=>`http://127.0.0.1:${e}/pages/${t}`,fe="The default home page (\u9996\u9875, slug home) is not made yet: Gallery makes it, with its own cards, when its server first starts in this workspace. gallery open --no-browser starts it: run that once, then gallery page list again.";async function oe(e){return H()||ee(M,e)||he(e).homeMade||await te(M,e)?null:fe}async function ne(e,t){return(e===M?await oe(t):null)??`No custom page "${e}": ${w(O(e,t).html)} does not exist (gallery page list lists those there are).`}async function ae(e){return(await se({answering:!0,timeout:2e3}))?.port??null}async function we(e,[t,o,...i]){if(!t||!o?.trim()||i.length)throw new d("Name the slug and the title, the title quoted when it has spaces.");let n=await te(t,e);n&&(console.error(n),process.exit(1));let s=await ce(t,o,{root:e});console.log(`Created ${w(s.html)} and page.json`),console.log(`It is listed in the workbench's sidebar, last among the rows under \u65B0\u5EFA and \u641C\u7D22 (the user may drag it elsewhere), and shows one empty board (data-board-id="main"): use it, or write the page as you like.`);let a=await ae(e),r=`write page.html: a board of cards (each <section class="gallery-card" data-card-id="\u2026" data-x data-y data-w data-h> around one custom block's instance; gallery page add places one), or any HTML, CSS and script of your own (references/pages-and-data.md)`,c="at the end tell them where it is in the sidebar (under \u65B0\u5EFA and \u641C\u7D22, its title)";a?(console.log(`Next: send the user the address on the last line now, in a message of its own (the page is theirs to watch as its cards arrive); ${r}; ${c}.`),console.log(`${C}${D(a,t)}`)):console.log(`Next: run gallery page open ${t} --no-browser now (it starts the server) and send the user the address on its \u4EA4\u7ED9\u7528\u6237 line, in a message of its own, before you write any card (the page is theirs to watch as its cards arrive); then ${r}; ${c}.`)}async function me(e,t){if(t.length)throw new d("gallery page list takes nothing else.");let o=await de(e);console.log(`\u5DE5\u4F5C\u533A\uFF1A${w(e)}`);let i=await oe(e);o.length===0&&!i?console.log('No custom pages yet: gallery page new <slug> "<\u6807\u9898>" makes one.'):o.length>0&&console.log(`Custom pages, in the sidebar's order (${o.length}):`);let n=o.length?await ae(e):null;for(let{slug:s,title:a,icon:r}of o)console.log(`- ${s} ${r?`${r} `:""}${a}`),console.log(` \u5730\u5740\uFF1A${n?D(n,s):`/#@${s}`} ${w(O(s,e).html)}`);i&&console.log(i)}async function ue(e,[t,...o],i){if(!t||o.length)throw new d("gallery page open takes one page's slug.");await ge(t,e)||(console.error(await ne(t,e)),process.exit(1)),console.log(`\u5DE5\u4F5C\u533A\uFF1A${w(e)}`);let s=await J({command:`gallery page open ${t}`});s.ok||(console.error(s.message),process.exit(1));let a=[K(s),`${B}${pe(s.port,t)}`,`${C}${D(s.port,t)}`];for(let r of a)console.log(r);console.log(await z(a,i))}async function Q(e,t,o){let i=`127.0.0.1:${e.port}`;try{let n=await fetch(`http://${i}/__gallery/pages/${t}/cards`,{method:"POST",headers:{"Content-Type":"application/json",Origin:`http://${i}`,"X-Gallery-Token":e.token},body:JSON.stringify({...o,workspace:Z}),signal:AbortSignal.timeout(3e4)}),s=await n.json().catch(()=>null);return!s||["elsewhere","token","host","origin","unknown","method"].includes(s.reason)?null:[n.status,s]}catch{return null}}var $e=8e3,b={places:e=>`${e} is a block of documents (its manifest's places has no "page"): it does not go on a custom page.`,disabled:e=>`${e} is turned off (\u8BBE\u7F6E \u203A \u7EC4\u4EF6\u5217\u8868 \u505C\u7528): nothing of it loads, on a page or in a document.`,missing:e=>`No custom block ${e} in this workspace: gallery block list lists them.`,template:e=>`${e} has no template.html a new card can be made of (gallery block check ${e} says why).`,board:(e,t)=>`No board "${t}" on this page: its <div class="gallery-board" data-board-id="\u2026">s are the ones there are.`,cells:()=>"--x, --y, --w and --h are whole numbers (x and y from 0, w and h from 1).",busy:()=>"page.html was written again and again meanwhile: run this again.",size:()=>"page.html would grow past 1,000,000 bytes.",values:(e,t,o)=>`${e}'s setting ${o?`"${o}" `:""}does not take that value (a text of 10,000 characters at most, a number, a date, one of a select's options, a switch's true or false).`,settings:e=>`${e} has no settings, or a card of it no settings part: --set goes with a block whose manifest has some.`};function ye(e){let t=e.indexOf("--"),o=[],i=[];for(let n=0;n<e.length;n++){let s=e[n];if(t!==-1&&n>=t)i.push(s);else if(s==="--set"||s.startsWith("--set=")){let a=s==="--set"?e[n+1]:s.slice(6);s==="--set"&&(n+=1);let r=a?.indexOf("=")??-1;if(a===void 0||r<1)throw new d("--set takes a setting's key and its value: --set <key>=<value> (--set city=\u4E0A\u6D77).");o.push([a.slice(0,r),a.slice(r+1)])}else i.push(s)}return{argv:i,given:o}}var V=new Map([["true",!0],["yes",!0],["on",!0],["1",!0],["false",!1],["no",!1],["off",!1],["0",!1]]);function be(e,t){let o=t.settings??[],i=()=>o.length?`its settings are ${o.map(({key:s,label:a})=>`${s} (${a?.en??a?.zh??s})`).join(", ")}`:"it has no settings",n={};for(let[s,a]of e){let r=o.find(c=>c.key===s);if(!r)throw new d(`${t.id} has no setting "${s}": ${i()}.`);if(Object.hasOwn(n,s))throw new d(`--set ${s} is given twice.`);if(r.type==="number"){if(a.trim()!==""&&!Number.isFinite(Number(a)))throw new d(`The setting ${s} of ${t.id} is a number: --set ${s}=<number>, or --set ${s}= for none.`);n[s]=a.trim()===""?null:Number(a)}else if(r.type==="switch"){if(!V.has(a.trim().toLowerCase()))throw new d(`The setting ${s} of ${t.id} is a switch: --set ${s}=true or --set ${s}=false.`);n[s]=V.get(a.trim().toLowerCase())}else if(r.type==="select"){if(!r.options.includes(a))throw new d(`The setting ${s} of ${t.id} is one of ${r.options.join(", ")}: --set ${s}=<one of them>.`);n[s]=a}else if(r.type==="date"){if(a!==""&&!/^\d{4}-\d{2}-\d{2}$/.test(a))throw new d(`The setting ${s} of ${t.id} is a date, written YYYY-MM-DD: --set ${s}=2027-02-06.`);n[s]=a}else n[s]=a}return n}function ke(e,t){let o=t&&typeof t=="object"&&!Array.isArray(t)?t:{};return(e.settings??[]).filter(i=>i.required&&i.type!=="switch").filter(({key:i,default:n})=>{let s=Object.hasOwn(o,i)?o[i]:n;return s==null||typeof s=="string"&&s.trim()===""}).map(({key:i,label:n})=>({key:i,label:n?.en??n?.zh??i,zh:n?.zh??null}))}async function xe(e,[t,o,...i],n,s,a,r=[]){if(!t||!o||i.length)throw new d("gallery page add takes a page's slug and a block's id (gallery block list lists them).");let c={};for(let l of["x","y","w","h"]){let g=s.get(`--${l}`);if(g!==void 0){if(!/^\d+$/.test(g)||(l==="w"||l==="h")&&Number(g)<1)throw new d(b.cells());c[l]=Number(g)}}if(c.x===void 0!=(c.y===void 0))throw new d("--x and --y go together: a place is both.");ee(t,e)||(console.error(await ne(t,e)),process.exit(1));let k=o.includes("/")?null:P(o),h=o.includes("/")?o:k?k.id:o,m=L(e),u=m.packages.get(h);if(!u){let l=Y(h)?P(h):null;m.settings.disabled.includes(h)?console.error(b.disabled(h)):console.error(l?`${h} is one of Gallery's own blocks, not yet in this workspace: gallery block add ${l.pack===R?l.name:l.id} puts it in; then run this again.`:m.problems.has(h)?`${h} does not load (gallery block check ${h} says why).`:b.missing(h)),process.exit(1)}u.places.includes("page")||(console.error(b.places(h)),process.exit(1));let p=s.get("--board"),y=r.length?be(r,u):null,N={op:"add",block:h,...p?{board:p}:{},...c,...y?{settings:y}:{},agent:!0},j=await se(),x=j?await Q(j,t,N):null;for(let l=0;x?.[1]?.reason==="missing"&&l<$e/250;l++)await new Promise(g=>setTimeout(g,250)),x=await Q(j,t,N);let[ie,f]=x??await F({root:e,stateDirectory:re,catalog:()=>m}).apply(t,N);if(!f?.ok){let l=f?.reason;console.error(b[l]?.(h,p??le,f?.message)??`Not added (${ie}: ${l??"no answer"}${f?.message?`: ${f.message}`:""}).`),process.exit(1)}let $=f.cards.find(l=>l.id===f.card),I=(f.pushed??[]).map(l=>f.cards.find(g=>g.id===l)).filter(Boolean);console.log(`Added a card of ${h} to ${w(O(t,e).html)}${x?" (through the workspace's running server: an open page shows it at once)":""}:`),console.log(` data-card-id="${$.id}" on board ${$.board}: x ${$.x}, y ${$.y}, w ${$.w}, h ${$.h}${f.measure?" (its block gives no height: 2 cells, --h sets another)":""}`),I.length&&console.log(` Pushed down under it, as it met them: ${I.map(l=>`${l.id} (y ${l.y})`).join(", ")}; no card moved up.`),y&&console.log(` Settings written with it: ${Object.entries(y).map(([l,g])=>`${l}=${JSON.stringify(g)}`).join(", ")}`),console.log(y?"The rest of its data is as the block's template writes it, in the card's instance: write it there if it is to hold something else, leaving every other card as it is.":"Its data is as the block's template writes it, in the card's instance: write it there if it is to hold something else, leaving every other card as it is.");let S=ke(u,{...y??{}});if(S.length){let l=S.map(({key:g,label:T,zh:E})=>`${g} (${E&&E!==T?`${T}, ${E}`:T})`).join(", ");console.log(`${h} needs its setting ${l} before the card shows anything, and this card has none: ask the user for it, or take it from what the workspace says (\u5199\u4F5C\u504F\u597D, the documents) and tell them in the handoff which you did. Give it with the add (${S.map(({key:g})=>`--set ${g}=<value>`).join(" ")}); for this card, write it in its settings part of ${w(O(t,e).html)} (the <script type="application/json"> of data-card-id="${$.id}": {"${S[0].key}":"\u2026"}), re-reading the page right before, or the user fills it in on the card (the grip at its top right \u203A \u8BBE\u7F6E\u2026).`)}}var _={new:we,list:me,open:ue,add:xe,try:async(e,t,o,i,n)=>(await import("./chunk-CHQU37CA.mjs")).pageTryCommand(e,{named:t,values:i,seconds:n,keep:o.has("--keep"),replace:o.has("--replace")}),check:async(e,t)=>(await import("./chunk-ULXSPX5H.mjs")).pageCheckCommand(e,t)},A=["--board","--x","--y","--w","--h"];async function Ie(e){try{return await Se(e)}catch(t){throw t instanceof d&&e.find(o=>!U(o))==="try"&&(t.synopsis=G),t}}async function Se(e){let{argv:t,seconds:o}=X(e),{argv:i,given:n}=ye(t),{positional:s,options:a,values:r}=q({options:["--no-browser","--keep","--replace"],values:[...A,...v],argv:i}),[c,...k]=s,h=Object.keys(_).join(", ");if(!c)throw new d(`Say what to do: ${h}.`);if(!Object.hasOwn(_,c))throw new d(`No such page command: ${c} (${h}).`);if(a.has("--no-browser")&&c!=="open")throw new d(`--no-browser goes with open, not ${c}.`);let m=[...v.filter(p=>r.has(p)),...Object.keys(o).filter(p=>!r.has(p)),...a.has("--keep")?["--keep"]:[],...a.has("--replace")?["--replace"]:[]];if(m.length&&c!=="try")throw new d(`${m[0]} goes with try, not ${c}.`);let u=A.filter(p=>r.has(p));if(u.length&&c!=="add")throw new d(`${u.join(", ")} go with add, not ${c}.`);if(n.length&&c!=="add")throw new d(`--set goes with add, not ${c}.`);return _[c](Z,k,a,new Map([...r].filter(([p])=>c==="try"?v.includes(p):A.includes(p))),o,n)}export{D as a,pe as b,fe as c,ne as d,ye as e,be as f,ke as g,Ie as h};
@@ -1,5 +1,5 @@
1
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 ge,d as q,e as Xt}from"./chunk-KNZJT4ET.mjs";import"./chunk-5L7RYZCL.mjs";function Z(a,t,e,s){e.assert.notStrictEqual(a,t,s)}function Qt(a,t){t.assert.strictEqual(typeof a,"string")}function At(a){return Object.keys(a)}function v(a){return!!a&&!!a.then&&typeof a.then=="function"}function at(a){let e=a.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),s=/\.*[\][<>]/g,n=e.shift();if(!n)throw new Error(`No command found in: ${a}`);let o={cmd:n.replace(s,""),demanded:[],optional:[]};return e.forEach((r,h)=>{let c=!1;r=r.replace(/\s/g,""),/\.+[\]>]/.test(r)&&h===e.length-1&&(c=!0),/^\[/.test(r)?o.optional.push({cmd:r.replace(s,"").split("|"),variadic:c}):o.demanded.push({cmd:r.replace(s,"").split("|"),variadic:c})}),o}var ts=["first","second","third","fourth","fifth","sixth"];function _(a,t,e){function s(){return typeof a=="object"?[{demanded:[],optional:[]},a,t]:[at(`cmd ${a}`),t,e]}try{let n=0,[o,r,h]=s(),c=[].slice.call(r);for(;c.length&&c[c.length-1]===void 0;)c.pop();let u=h||c.length;if(u<o.demanded.length)throw new q(`Not enough arguments provided. Expected ${o.demanded.length} but received ${c.length}.`);let d=o.demanded.length+o.optional.length;if(u>d)throw new q(`Too many arguments provided. Expected max ${d} but received ${u}.`);o.demanded.forEach(l=>{let f=c.shift(),p=be(f);l.cmd.filter(g=>g===p||g==="*").length===0&&_e(p,l.cmd,n),n+=1}),o.optional.forEach(l=>{if(c.length===0)return;let f=c.shift(),p=be(f);l.cmd.filter(g=>g===p||g==="*").length===0&&_e(p,l.cmd,n),n+=1})}catch(n){console.warn(n.stack)}}function be(a){return Array.isArray(a)?"array":a===null?"null":typeof a}function _e(a,t,e){throw new q(`Invalid ${ts[e]||"manyith"} argument. Expected ${t.join(" or ")} but received ${a}.`)}var Wt=class{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,s=!0,n=!1){if(_("<array|function> [boolean] [boolean] [boolean]",[t,e,s],arguments.length),Array.isArray(t)){for(let o=0;o<t.length;o++){if(typeof t[o]!="function")throw Error("middleware must be a function");let r=t[o];r.applyBeforeValidation=e,r.global=s}Array.prototype.push.apply(this.globalMiddleware,t)}else if(typeof t=="function"){let o=t;o.applyBeforeValidation=e,o.global=s,o.mutates=n,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){let s=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(n=>{let o=[...s[e]||[],e];return n.option?!o.includes(n.option):!0}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){let t=this.frozens.pop();t!==void 0&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}};function Oe(a){return a?a.map(t=>(t.applyBeforeValidation=!1,t)):[]}function dt(a,t,e,s){return e.reduce((n,o)=>{if(o.applyBeforeValidation!==s)return n;if(o.mutates){if(o.applied)return n;o.applied=!0}if(v(n))return n.then(r=>Promise.all([r,o(r,t)])).then(([r,h])=>Object.assign(r,h));{let r=o(n,t);return v(r)?r.then(h=>Object.assign(n,h)):Object.assign(n,r)}},a)}function pt(a,t,e=s=>{throw s}){try{let s=es(a)?a():a;return v(s)?s.then(n=>t(n)):t(s)}catch(s){return e(s)}}function es(a){return typeof a=="function"}var Et=/(^\*)|(^\$0)/,kt=class{constructor(t,e,s,n){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=n,this.usage=t,this.globalMiddleware=s,this.validation=e}addDirectory(t,e,s,n){n=n||{},this.requireCache.add(s);let o=this.shim.path.resolve(this.shim.path.dirname(s),t),r=this.shim.readdirSync(o,{recursive:!!n.recurse});Array.isArray(n.extensions)||(n.extensions=["js"]);let h=typeof n.visit=="function"?n.visit:c=>c;for(let c of r){let u=c.toString();if(n.exclude){let l=!1;if(typeof n.exclude=="function"?l=n.exclude(u):l=n.exclude.test(u),l)continue}if(n.include){let l=!1;if(typeof n.include=="function"?l=n.include(u):l=n.include.test(u),!l)continue}let d=!1;for(let l of n.extensions)u.endsWith(l)&&(d=!0);if(d){let l=this.shim.path.join(o,u),f=e(l),p=Object.create(null,Object.getOwnPropertyDescriptors({...f}));if(h(p,l,u)){if(this.requireCache.has(l))continue;this.requireCache.add(l),p.command||(p.command=this.shim.path.basename(l,this.shim.path.extname(l))),this.addHandler(p)}}}}addHandler(t,e,s,n,o,r){let h=[],c=Oe(o);if(n=n||(()=>{}),Array.isArray(t))if(ss(t))[t,...h]=t;else for(let u of t)this.addHandler(u);else if(ns(t)){let u=Array.isArray(t.command)||typeof t.command=="string"?t.command:null;if(u===null)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);t.aliases&&(u=[].concat(u).concat(t.aliases)),this.addHandler(u,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated);return}else if(we(s)){this.addHandler([t].concat(h),e,s.builder,s.handler,s.middlewares,s.deprecated);return}if(typeof t=="string"){let u=at(t);h=h.map(f=>at(f).cmd);let d=!1,l=[u.cmd].concat(h).filter(f=>Et.test(f)?(d=!0,!1):!0);l.length===0&&d&&l.push("$0"),d&&(u.cmd=l[0],h=l.slice(1),t=t.replace(Et,u.cmd)),h.forEach(f=>{this.aliasMap[f]=u.cmd}),e!==!1&&this.usage.command(t,e,d,h,r),this.handlers[u.cmd]={original:t,description:e,handler:n,builder:s||{},middlewares:c,deprecated:r,demanded:u.demanded,optional:u.optional},d&&(this.defaultCommand=this.handlers[u.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,s,n,o,r){let h=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,c=e.getInternalMethods().getContext(),u=c.commands.slice(),d=!t;t&&(c.commands.push(t),c.fullCommands.push(h.original));let l=this.applyBuilderUpdateUsageAndParse(d,h,e,s.aliases,u,n,o,r);return v(l)?l.then(f=>this.applyMiddlewareAndGetResult(d,h,f.innerArgv,c,o,f.aliases,e)):this.applyMiddlewareAndGetResult(d,h,l.innerArgv,c,o,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,s,n,o,r,h,c){let u=e.builder,d=s;if(Ut(u)){s.getInternalMethods().getUsageInstance().freeze();let l=u(s.getInternalMethods().reset(n),c);if(v(l))return l.then(f=>(d=je(f)?f:s,this.parseAndUpdateUsage(t,e,d,o,r,h)))}else is(u)&&(s.getInternalMethods().getUsageInstance().freeze(),d=s.getInternalMethods().reset(n),Object.keys(e.builder).forEach(l=>{d.option(l,u[l])}));return this.parseAndUpdateUsage(t,e,d,o,r,h)}parseAndUpdateUsage(t,e,s,n,o,r){t&&s.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(s)&&s.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(n,e),e.description);let h=s.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,o,r);return v(h)?h.then(c=>({aliases:s.parsed.aliases,innerArgv:c})):{aliases:s.parsed.aliases,innerArgv:h}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&t.getInternalMethods().getUsageInstance().getUsage().length===0}usageFromParentCommandsCommandHandler(t,e){let s=Et.test(e.original)?e.original.replace(Et,"").trim():e.original,n=t.filter(o=>!Et.test(o));return n.push(s),`$0 ${n.join(" ")}`}handleValidationAndGetResult(t,e,s,n,o,r,h,c){if(!r.getInternalMethods().getHasOutput()){let u=r.getInternalMethods().runValidation(o,c,r.parsed.error,t);s=pt(s,d=>(u(d),d))}if(e.handler&&!r.getInternalMethods().getHasOutput()){r.getInternalMethods().setHasOutput();let u=!!r.getOptions().configuration["populate--"];r.getInternalMethods().postProcess(s,u,!1,!1),s=dt(s,r,h,!1),s=pt(s,d=>{let l=e.handler(d);return v(l)?l.then(()=>d):d}),t||r.getInternalMethods().getUsageInstance().cacheHelpMessage(),v(s)&&!r.getInternalMethods().hasParseCallback()&&s.catch(d=>{try{r.getInternalMethods().getUsageInstance().fail(null,d)}catch{}})}return t||(n.commands.pop(),n.fullCommands.pop()),s}applyMiddlewareAndGetResult(t,e,s,n,o,r,h){let c={};if(o)return s;h.getInternalMethods().getHasOutput()||(c=this.populatePositionals(e,s,n,h));let u=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),d=dt(s,h,u,!0);return v(d)?d.then(l=>this.handleValidationAndGetResult(t,e,l,n,r,h,u,c)):this.handleValidationAndGetResult(t,e,d,n,r,h,u,c)}populatePositionals(t,e,s,n){e._=e._.slice(s.commands.length);let o=t.demanded.slice(0),r=t.optional.slice(0),h={};for(this.validation.positionalCount(o.length,e._.length);o.length;){let c=o.shift();this.populatePositional(c,e,h)}for(;r.length;){let c=r.shift();this.populatePositional(c,e,h)}return e._=s.commands.concat(e._.map(c=>""+c)),this.postProcessPositionals(e,h,this.cmdToParseOptions(t.original),n),h}populatePositional(t,e,s){let n=t.cmd[0];t.variadic?s[n]=e._.splice(0).map(String):e._.length&&(s[n]=[String(e._.shift())])}cmdToParseOptions(t){let e={array:[],default:{},alias:{},demand:{}},s=at(t);return s.demanded.forEach(n=>{let[o,...r]=n.cmd;n.variadic&&(e.array.push(o),e.default[o]=[]),e.alias[o]=r,e.demand[o]=!0}),s.optional.forEach(n=>{let[o,...r]=n.cmd;n.variadic&&(e.array.push(o),e.default[o]=[]),e.alias[o]=r}),e}postProcessPositionals(t,e,s,n){let o=Object.assign({},n.getOptions());o.default=Object.assign(s.default,o.default);for(let u of Object.keys(s.alias))o.alias[u]=(o.alias[u]||[]).concat(s.alias[u]);o.array=o.array.concat(s.array),o.config={};let r=[];if(Object.keys(e).forEach(u=>{e[u].map(d=>{o.configuration["unknown-options-as-args"]&&(o.key[u]=!0),r.push(`--${u}`),r.push(d)})}),!r.length)return;let h=Object.assign({},o.configuration,{"populate--":!1}),c=this.shim.Parser.detailed(r,Object.assign({},o,{configuration:h}));if(c.error)n.getInternalMethods().getUsageInstance().fail(c.error.message,c.error);else{let u=Object.keys(e);Object.keys(e).forEach(d=>{u.push(...c.aliases[d])}),Object.keys(c.argv).forEach(d=>{u.includes(d)&&(e[d]||(e[d]=c.argv[d]),!this.isInConfigs(n,d)&&!this.isDefaulted(n,d)&&Object.prototype.hasOwnProperty.call(t,d)&&Object.prototype.hasOwnProperty.call(c.argv,d)&&(Array.isArray(t[d])||Array.isArray(c.argv[d]))?t[d]=[].concat(t[d],c.argv[d]):t[d]=c.argv[d])})}}isDefaulted(t,e){let{default:s}=t.getOptions();return Object.prototype.hasOwnProperty.call(s,e)||Object.prototype.hasOwnProperty.call(s,this.shim.Parser.camelCase(e))}isInConfigs(t,e){let{configObjects:s}=t.getOptions();return s.some(n=>Object.prototype.hasOwnProperty.call(n,e))||s.some(n=>Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){let s=Et.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(s,this.defaultCommand.description)}let e=this.defaultCommand.builder;if(Ut(e))return e(t,!0);we(e)||Object.keys(e).forEach(s=>{t.option(s,e[s])})}extractDesc({describe:t,description:e,desc:s}){for(let n of[t,e,s]){if(typeof n=="string"||n===!1)return n;Z(n,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){let t=this.frozens.pop();Z(t,void 0,this.shim),{handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}};function Ce(a,t,e,s){return new kt(a,t,e,s)}function we(a){return typeof a=="object"&&!!a.builder&&typeof a.handler=="function"}function ss(a){return a.every(t=>typeof t=="string")}function Ut(a){return typeof a=="function"}function is(a){return typeof a=="object"}function ns(a){return typeof a=="object"&&!Array.isArray(a)}function lt(a={},t=()=>!0){let e={};return At(a).forEach(s=>{t(s,a[s])&&(e[s]=a[s])}),e}function ht(a){typeof process>"u"||[process.stdout,process.stderr].forEach(t=>{let e=t;e._handle&&e.isTTY&&typeof e._handle.setBlocking=="function"&&e._handle.setBlocking(a)})}function os(a){return typeof a=="boolean"}function Pe(a,t){let e=t.y18n.__,s={},n=[];s.failFn=function(b){n.push(b)};let o=null,r=null,h=!0;s.showHelpOnFail=function(b=!0,C){let[M,$]=typeof b=="string"?[!0,b]:[b,C];return a.getInternalMethods().isGlobalContext()&&(r=$),o=$,h=M,s};let c=!1;s.fail=function(b,C){let M=a.getInternalMethods().getLoggerInstance();if(n.length)for(let $=n.length-1;$>=0;--$){let T=n[$];if(os(T)){if(C)throw C;if(b)throw Error(b)}else T(b,C,s)}else{if(a.getExitProcess()&&ht(!0),!c){c=!0,h&&(a.showHelp("error"),M.error()),(b||C)&&M.error(b||C);let $=o||r;$&&((b||C)&&M.error(""),M.error($))}if(C=C||new q(b),a.getExitProcess())return a.exit(1);if(a.getInternalMethods().hasParseCallback())return a.exit(1,C);throw C}};let u=[],d=!1;s.usage=(j,b)=>j===null?(d=!0,u=[],s):(d=!1,u.push([j,b||""]),s),s.getUsage=()=>u,s.getUsageDisabled=()=>d,s.getPositionalGroupName=()=>e("Positionals:");let l=[];s.example=(j,b)=>{l.push([j,b||""])};let f=[];s.command=function(b,C,M,$,T=!1){M&&(f=f.map(I=>(I[2]=!1,I))),f.push([b,C||"",M,$,T])},s.getCommands=()=>f;let p={};s.describe=function(b,C){Array.isArray(b)?b.forEach(M=>{s.describe(M,C)}):typeof b=="object"?Object.keys(b).forEach(M=>{s.describe(M,b[M])}):p[b]=C},s.getDescriptions=()=>p;let m=[];s.epilog=j=>{m.push(j)};let g=!1,x;s.wrap=j=>{g=!0,x=j},s.getWrap=()=>t.getEnv("YARGS_DISABLE_WRAP")?null:(g||(x=it(),g=!0),x);let E="__yargsString__:";s.deferY18nLookup=j=>E+j,s.help=function(){if(D)return D;H();let b=a.customScriptName?a.$0:t.path.basename(a.$0),C=a.getDemandedOptions(),M=a.getDemandedCommands(),$=a.getDeprecatedOptions(),T=a.getGroups(),I=a.getOptions(),R=[];R=R.concat(Object.keys(p)),R=R.concat(Object.keys(C)),R=R.concat(Object.keys(M)),R=R.concat(Object.keys(I.default)),R=R.filter(z),R=Object.keys(R.reduce((P,U)=>(U!=="_"&&(P[U]=!0),P),{}));let vt=s.getWrap(),L=t.cliui({width:vt,wrap:!!vt});if(!d){if(u.length)u.forEach(P=>{L.div({text:`${P[0].replace(/\$0/g,b)}`}),P[1]&&L.div({text:`${P[1]}`,padding:[1,0,0,0]})}),L.div();else if(f.length){let P=null;M._?P=`${b} <${e("command")}>
2
+ import{c as ge,d as q,e as Xt}from"./chunk-QAIHRH3I.mjs";import"./chunk-5L7RYZCL.mjs";function Z(a,t,e,s){e.assert.notStrictEqual(a,t,s)}function Qt(a,t){t.assert.strictEqual(typeof a,"string")}function At(a){return Object.keys(a)}function v(a){return!!a&&!!a.then&&typeof a.then=="function"}function at(a){let e=a.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),s=/\.*[\][<>]/g,n=e.shift();if(!n)throw new Error(`No command found in: ${a}`);let o={cmd:n.replace(s,""),demanded:[],optional:[]};return e.forEach((r,h)=>{let c=!1;r=r.replace(/\s/g,""),/\.+[\]>]/.test(r)&&h===e.length-1&&(c=!0),/^\[/.test(r)?o.optional.push({cmd:r.replace(s,"").split("|"),variadic:c}):o.demanded.push({cmd:r.replace(s,"").split("|"),variadic:c})}),o}var ts=["first","second","third","fourth","fifth","sixth"];function _(a,t,e){function s(){return typeof a=="object"?[{demanded:[],optional:[]},a,t]:[at(`cmd ${a}`),t,e]}try{let n=0,[o,r,h]=s(),c=[].slice.call(r);for(;c.length&&c[c.length-1]===void 0;)c.pop();let u=h||c.length;if(u<o.demanded.length)throw new q(`Not enough arguments provided. Expected ${o.demanded.length} but received ${c.length}.`);let d=o.demanded.length+o.optional.length;if(u>d)throw new q(`Too many arguments provided. Expected max ${d} but received ${u}.`);o.demanded.forEach(l=>{let f=c.shift(),p=be(f);l.cmd.filter(g=>g===p||g==="*").length===0&&_e(p,l.cmd,n),n+=1}),o.optional.forEach(l=>{if(c.length===0)return;let f=c.shift(),p=be(f);l.cmd.filter(g=>g===p||g==="*").length===0&&_e(p,l.cmd,n),n+=1})}catch(n){console.warn(n.stack)}}function be(a){return Array.isArray(a)?"array":a===null?"null":typeof a}function _e(a,t,e){throw new q(`Invalid ${ts[e]||"manyith"} argument. Expected ${t.join(" or ")} but received ${a}.`)}var Wt=class{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,s=!0,n=!1){if(_("<array|function> [boolean] [boolean] [boolean]",[t,e,s],arguments.length),Array.isArray(t)){for(let o=0;o<t.length;o++){if(typeof t[o]!="function")throw Error("middleware must be a function");let r=t[o];r.applyBeforeValidation=e,r.global=s}Array.prototype.push.apply(this.globalMiddleware,t)}else if(typeof t=="function"){let o=t;o.applyBeforeValidation=e,o.global=s,o.mutates=n,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){let s=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(n=>{let o=[...s[e]||[],e];return n.option?!o.includes(n.option):!0}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){let t=this.frozens.pop();t!==void 0&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}};function Oe(a){return a?a.map(t=>(t.applyBeforeValidation=!1,t)):[]}function dt(a,t,e,s){return e.reduce((n,o)=>{if(o.applyBeforeValidation!==s)return n;if(o.mutates){if(o.applied)return n;o.applied=!0}if(v(n))return n.then(r=>Promise.all([r,o(r,t)])).then(([r,h])=>Object.assign(r,h));{let r=o(n,t);return v(r)?r.then(h=>Object.assign(n,h)):Object.assign(n,r)}},a)}function pt(a,t,e=s=>{throw s}){try{let s=es(a)?a():a;return v(s)?s.then(n=>t(n)):t(s)}catch(s){return e(s)}}function es(a){return typeof a=="function"}var Et=/(^\*)|(^\$0)/,kt=class{constructor(t,e,s,n){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=n,this.usage=t,this.globalMiddleware=s,this.validation=e}addDirectory(t,e,s,n){n=n||{},this.requireCache.add(s);let o=this.shim.path.resolve(this.shim.path.dirname(s),t),r=this.shim.readdirSync(o,{recursive:!!n.recurse});Array.isArray(n.extensions)||(n.extensions=["js"]);let h=typeof n.visit=="function"?n.visit:c=>c;for(let c of r){let u=c.toString();if(n.exclude){let l=!1;if(typeof n.exclude=="function"?l=n.exclude(u):l=n.exclude.test(u),l)continue}if(n.include){let l=!1;if(typeof n.include=="function"?l=n.include(u):l=n.include.test(u),!l)continue}let d=!1;for(let l of n.extensions)u.endsWith(l)&&(d=!0);if(d){let l=this.shim.path.join(o,u),f=e(l),p=Object.create(null,Object.getOwnPropertyDescriptors({...f}));if(h(p,l,u)){if(this.requireCache.has(l))continue;this.requireCache.add(l),p.command||(p.command=this.shim.path.basename(l,this.shim.path.extname(l))),this.addHandler(p)}}}}addHandler(t,e,s,n,o,r){let h=[],c=Oe(o);if(n=n||(()=>{}),Array.isArray(t))if(ss(t))[t,...h]=t;else for(let u of t)this.addHandler(u);else if(ns(t)){let u=Array.isArray(t.command)||typeof t.command=="string"?t.command:null;if(u===null)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);t.aliases&&(u=[].concat(u).concat(t.aliases)),this.addHandler(u,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated);return}else if(we(s)){this.addHandler([t].concat(h),e,s.builder,s.handler,s.middlewares,s.deprecated);return}if(typeof t=="string"){let u=at(t);h=h.map(f=>at(f).cmd);let d=!1,l=[u.cmd].concat(h).filter(f=>Et.test(f)?(d=!0,!1):!0);l.length===0&&d&&l.push("$0"),d&&(u.cmd=l[0],h=l.slice(1),t=t.replace(Et,u.cmd)),h.forEach(f=>{this.aliasMap[f]=u.cmd}),e!==!1&&this.usage.command(t,e,d,h,r),this.handlers[u.cmd]={original:t,description:e,handler:n,builder:s||{},middlewares:c,deprecated:r,demanded:u.demanded,optional:u.optional},d&&(this.defaultCommand=this.handlers[u.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,s,n,o,r){let h=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,c=e.getInternalMethods().getContext(),u=c.commands.slice(),d=!t;t&&(c.commands.push(t),c.fullCommands.push(h.original));let l=this.applyBuilderUpdateUsageAndParse(d,h,e,s.aliases,u,n,o,r);return v(l)?l.then(f=>this.applyMiddlewareAndGetResult(d,h,f.innerArgv,c,o,f.aliases,e)):this.applyMiddlewareAndGetResult(d,h,l.innerArgv,c,o,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,s,n,o,r,h,c){let u=e.builder,d=s;if(Ut(u)){s.getInternalMethods().getUsageInstance().freeze();let l=u(s.getInternalMethods().reset(n),c);if(v(l))return l.then(f=>(d=je(f)?f:s,this.parseAndUpdateUsage(t,e,d,o,r,h)))}else is(u)&&(s.getInternalMethods().getUsageInstance().freeze(),d=s.getInternalMethods().reset(n),Object.keys(e.builder).forEach(l=>{d.option(l,u[l])}));return this.parseAndUpdateUsage(t,e,d,o,r,h)}parseAndUpdateUsage(t,e,s,n,o,r){t&&s.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(s)&&s.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(n,e),e.description);let h=s.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,o,r);return v(h)?h.then(c=>({aliases:s.parsed.aliases,innerArgv:c})):{aliases:s.parsed.aliases,innerArgv:h}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&t.getInternalMethods().getUsageInstance().getUsage().length===0}usageFromParentCommandsCommandHandler(t,e){let s=Et.test(e.original)?e.original.replace(Et,"").trim():e.original,n=t.filter(o=>!Et.test(o));return n.push(s),`$0 ${n.join(" ")}`}handleValidationAndGetResult(t,e,s,n,o,r,h,c){if(!r.getInternalMethods().getHasOutput()){let u=r.getInternalMethods().runValidation(o,c,r.parsed.error,t);s=pt(s,d=>(u(d),d))}if(e.handler&&!r.getInternalMethods().getHasOutput()){r.getInternalMethods().setHasOutput();let u=!!r.getOptions().configuration["populate--"];r.getInternalMethods().postProcess(s,u,!1,!1),s=dt(s,r,h,!1),s=pt(s,d=>{let l=e.handler(d);return v(l)?l.then(()=>d):d}),t||r.getInternalMethods().getUsageInstance().cacheHelpMessage(),v(s)&&!r.getInternalMethods().hasParseCallback()&&s.catch(d=>{try{r.getInternalMethods().getUsageInstance().fail(null,d)}catch{}})}return t||(n.commands.pop(),n.fullCommands.pop()),s}applyMiddlewareAndGetResult(t,e,s,n,o,r,h){let c={};if(o)return s;h.getInternalMethods().getHasOutput()||(c=this.populatePositionals(e,s,n,h));let u=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),d=dt(s,h,u,!0);return v(d)?d.then(l=>this.handleValidationAndGetResult(t,e,l,n,r,h,u,c)):this.handleValidationAndGetResult(t,e,d,n,r,h,u,c)}populatePositionals(t,e,s,n){e._=e._.slice(s.commands.length);let o=t.demanded.slice(0),r=t.optional.slice(0),h={};for(this.validation.positionalCount(o.length,e._.length);o.length;){let c=o.shift();this.populatePositional(c,e,h)}for(;r.length;){let c=r.shift();this.populatePositional(c,e,h)}return e._=s.commands.concat(e._.map(c=>""+c)),this.postProcessPositionals(e,h,this.cmdToParseOptions(t.original),n),h}populatePositional(t,e,s){let n=t.cmd[0];t.variadic?s[n]=e._.splice(0).map(String):e._.length&&(s[n]=[String(e._.shift())])}cmdToParseOptions(t){let e={array:[],default:{},alias:{},demand:{}},s=at(t);return s.demanded.forEach(n=>{let[o,...r]=n.cmd;n.variadic&&(e.array.push(o),e.default[o]=[]),e.alias[o]=r,e.demand[o]=!0}),s.optional.forEach(n=>{let[o,...r]=n.cmd;n.variadic&&(e.array.push(o),e.default[o]=[]),e.alias[o]=r}),e}postProcessPositionals(t,e,s,n){let o=Object.assign({},n.getOptions());o.default=Object.assign(s.default,o.default);for(let u of Object.keys(s.alias))o.alias[u]=(o.alias[u]||[]).concat(s.alias[u]);o.array=o.array.concat(s.array),o.config={};let r=[];if(Object.keys(e).forEach(u=>{e[u].map(d=>{o.configuration["unknown-options-as-args"]&&(o.key[u]=!0),r.push(`--${u}`),r.push(d)})}),!r.length)return;let h=Object.assign({},o.configuration,{"populate--":!1}),c=this.shim.Parser.detailed(r,Object.assign({},o,{configuration:h}));if(c.error)n.getInternalMethods().getUsageInstance().fail(c.error.message,c.error);else{let u=Object.keys(e);Object.keys(e).forEach(d=>{u.push(...c.aliases[d])}),Object.keys(c.argv).forEach(d=>{u.includes(d)&&(e[d]||(e[d]=c.argv[d]),!this.isInConfigs(n,d)&&!this.isDefaulted(n,d)&&Object.prototype.hasOwnProperty.call(t,d)&&Object.prototype.hasOwnProperty.call(c.argv,d)&&(Array.isArray(t[d])||Array.isArray(c.argv[d]))?t[d]=[].concat(t[d],c.argv[d]):t[d]=c.argv[d])})}}isDefaulted(t,e){let{default:s}=t.getOptions();return Object.prototype.hasOwnProperty.call(s,e)||Object.prototype.hasOwnProperty.call(s,this.shim.Parser.camelCase(e))}isInConfigs(t,e){let{configObjects:s}=t.getOptions();return s.some(n=>Object.prototype.hasOwnProperty.call(n,e))||s.some(n=>Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){let s=Et.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(s,this.defaultCommand.description)}let e=this.defaultCommand.builder;if(Ut(e))return e(t,!0);we(e)||Object.keys(e).forEach(s=>{t.option(s,e[s])})}extractDesc({describe:t,description:e,desc:s}){for(let n of[t,e,s]){if(typeof n=="string"||n===!1)return n;Z(n,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){let t=this.frozens.pop();Z(t,void 0,this.shim),{handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}};function Ce(a,t,e,s){return new kt(a,t,e,s)}function we(a){return typeof a=="object"&&!!a.builder&&typeof a.handler=="function"}function ss(a){return a.every(t=>typeof t=="string")}function Ut(a){return typeof a=="function"}function is(a){return typeof a=="object"}function ns(a){return typeof a=="object"&&!Array.isArray(a)}function lt(a={},t=()=>!0){let e={};return At(a).forEach(s=>{t(s,a[s])&&(e[s]=a[s])}),e}function ht(a){typeof process>"u"||[process.stdout,process.stderr].forEach(t=>{let e=t;e._handle&&e.isTTY&&typeof e._handle.setBlocking=="function"&&e._handle.setBlocking(a)})}function os(a){return typeof a=="boolean"}function Pe(a,t){let e=t.y18n.__,s={},n=[];s.failFn=function(b){n.push(b)};let o=null,r=null,h=!0;s.showHelpOnFail=function(b=!0,C){let[M,$]=typeof b=="string"?[!0,b]:[b,C];return a.getInternalMethods().isGlobalContext()&&(r=$),o=$,h=M,s};let c=!1;s.fail=function(b,C){let M=a.getInternalMethods().getLoggerInstance();if(n.length)for(let $=n.length-1;$>=0;--$){let T=n[$];if(os(T)){if(C)throw C;if(b)throw Error(b)}else T(b,C,s)}else{if(a.getExitProcess()&&ht(!0),!c){c=!0,h&&(a.showHelp("error"),M.error()),(b||C)&&M.error(b||C);let $=o||r;$&&((b||C)&&M.error(""),M.error($))}if(C=C||new q(b),a.getExitProcess())return a.exit(1);if(a.getInternalMethods().hasParseCallback())return a.exit(1,C);throw C}};let u=[],d=!1;s.usage=(j,b)=>j===null?(d=!0,u=[],s):(d=!1,u.push([j,b||""]),s),s.getUsage=()=>u,s.getUsageDisabled=()=>d,s.getPositionalGroupName=()=>e("Positionals:");let l=[];s.example=(j,b)=>{l.push([j,b||""])};let f=[];s.command=function(b,C,M,$,T=!1){M&&(f=f.map(I=>(I[2]=!1,I))),f.push([b,C||"",M,$,T])},s.getCommands=()=>f;let p={};s.describe=function(b,C){Array.isArray(b)?b.forEach(M=>{s.describe(M,C)}):typeof b=="object"?Object.keys(b).forEach(M=>{s.describe(M,b[M])}):p[b]=C},s.getDescriptions=()=>p;let m=[];s.epilog=j=>{m.push(j)};let g=!1,x;s.wrap=j=>{g=!0,x=j},s.getWrap=()=>t.getEnv("YARGS_DISABLE_WRAP")?null:(g||(x=it(),g=!0),x);let E="__yargsString__:";s.deferY18nLookup=j=>E+j,s.help=function(){if(D)return D;H();let b=a.customScriptName?a.$0:t.path.basename(a.$0),C=a.getDemandedOptions(),M=a.getDemandedCommands(),$=a.getDeprecatedOptions(),T=a.getGroups(),I=a.getOptions(),R=[];R=R.concat(Object.keys(p)),R=R.concat(Object.keys(C)),R=R.concat(Object.keys(M)),R=R.concat(Object.keys(I.default)),R=R.filter(z),R=Object.keys(R.reduce((P,U)=>(U!=="_"&&(P[U]=!0),P),{}));let vt=s.getWrap(),L=t.cliui({width:vt,wrap:!!vt});if(!d){if(u.length)u.forEach(P=>{L.div({text:`${P[0].replace(/\$0/g,b)}`}),P[1]&&L.div({text:`${P[1]}`,padding:[1,0,0,0]})}),L.div();else if(f.length){let P=null;M._?P=`${b} <${e("command")}>
3
3
  `:P=`${b} [${e("command")}]
4
4
  `,L.div(`${P}`)}}if(f.length>1||f.length===1&&!f[0][2]){L.div(e("Commands:"));let P=a.getInternalMethods().getContext(),U=P.commands.length?`${P.commands.join(" ")} `:"";a.getInternalMethods().getParserConfiguration()["sort-commands"]===!0&&(f=f.sort((A,B)=>A[0].localeCompare(B[0])));let K=b?`${b} `:"";f.forEach(A=>{let B=`${K}${U}${A[0].replace(/^\$0 ?/,"")}`;L.span({text:B,padding:[0,2,0,2],width:W(f,vt,`${b}${U}`)+4},{text:A[1]});let N=[];A[2]&&N.push(`[${e("default")}]`),A[3]&&A[3].length&&N.push(`[${e("aliases:")} ${A[3].join(", ")}]`),A[4]&&(typeof A[4]=="string"?N.push(`[${e("deprecated: %s",A[4])}]`):N.push(`[${e("deprecated")}]`)),N.length?L.div({text:N.join(" "),padding:[0,0,0,2],align:"right"}):L.div()}),L.div()}let Bt=(Object.keys(I.alias)||[]).concat(Object.keys(a.parsed.newAliases)||[]);R=R.filter(P=>!a.parsed.newAliases[P]&&Bt.every(U=>(I.alias[U]||[]).indexOf(P)===-1));let Zt=e("Options:");T[Zt]||(T[Zt]=[]),Mt(R,I.alias,T,Zt);let Dt=P=>/^--/.test(Ft(P)),Jt=Object.keys(T).filter(P=>T[P].length>0).map(P=>{let U=T[P].filter(z).map(K=>{if(Bt.includes(K))return K;for(let A=0,B;(B=Bt[A])!==void 0;A++)if((I.alias[B]||[]).includes(K))return B;return K});return{groupName:P,normalizedKeys:U}}).filter(({normalizedKeys:P})=>P.length>0).map(({groupName:P,normalizedKeys:U})=>{let K=U.reduce((A,B)=>(A[B]=[B].concat(I.alias[B]||[]).map(N=>P===s.getPositionalGroupName()?N:(/^[0-9]$/.test(N)?I.boolean.includes(B)?"-":"--":N.length>1?"--":"-")+N).sort((N,rt)=>Dt(N)===Dt(rt)?0:Dt(N)?1:-1).join(", "),A),{});return{groupName:P,normalizedKeys:U,switches:K}});if(Jt.filter(({groupName:P})=>P!==s.getPositionalGroupName()).some(({normalizedKeys:P,switches:U})=>!P.every(K=>Dt(U[K])))&&Jt.filter(({groupName:P})=>P!==s.getPositionalGroupName()).forEach(({normalizedKeys:P,switches:U})=>{P.forEach(K=>{Dt(U[K])&&(U[K]=rs(U[K],4))})}),Jt.forEach(({groupName:P,normalizedKeys:U,switches:K})=>{L.div(P),U.forEach(A=>{let B=K[A],N=p[A]||"",rt=null;N.includes(E)&&(N=e(N.substring(E.length))),I.boolean.includes(A)&&(rt=`[${e("boolean")}]`),I.count.includes(A)&&(rt=`[${e("count")}]`),I.string.includes(A)&&(rt=`[${e("string")}]`),I.normalize.includes(A)&&(rt=`[${e("string")}]`),I.array.includes(A)&&(rt=`[${e("array")}]`),I.number.includes(A)&&(rt=`[${e("number")}]`);let Qe=me=>typeof me=="string"?`[${e("deprecated: %s",me)}]`:`[${e("deprecated")}]`,pe=[A in $?Qe($[A]):null,rt,A in C?`[${e("required")}]`:null,I.choices&&I.choices[A]?`[${e("choices:")} ${s.stringifiedValues(I.choices[A])}]`:null,V(I.default[A],I.defaultDescription[A])].filter(Boolean).join(" ");L.span({text:Ft(B),padding:[0,2,0,2+ye(B)],width:W(K,vt)+4},N);let ke=a.getInternalMethods().getUsageConfiguration()["hide-types"]===!0;pe&&!ke?L.div({text:pe,padding:[0,0,0,2],align:"right"}):L.div()}),L.div()}),l.length&&(L.div(e("Examples:")),l.forEach(P=>{P[0]=P[0].replace(/\$0/g,b)}),l.forEach(P=>{P[1]===""?L.div({text:P[0],padding:[0,2,0,2]}):L.div({text:P[0],padding:[0,2,0,2],width:W(l,vt)+4},{text:P[1]})}),L.div()),m.length>0){let P=m.map(U=>U.replace(/\$0/g,b)).join(`
5
5
  `);L.div(`${P}
@@ -0,0 +1,2 @@
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-236JJXWY.mjs";import"./chunk-Q7P3Q5YX.mjs";import"./chunk-4KUO7R2M.mjs";import"./chunk-MKIBJTJZ.mjs";import"./chunk-342HXE3Q.mjs";import"./chunk-2KAVXMKG.mjs";import"./chunk-C257H6IA.mjs";import"./chunk-3XZOA7AH.mjs";import"./chunk-XZCFPKGO.mjs";import"./chunk-BN7M3IN7.mjs";import"./chunk-JEUK3ZO7.mjs";import"./chunk-M4NRDYI5.mjs";import"./chunk-PUOQ65NC.mjs";import"./chunk-6QWQXHAV.mjs";import"./chunk-6Q7ASAXJ.mjs";import"./chunk-S3SX3COT.mjs";import"./chunk-IA4PSIMD.mjs";import"./chunk-2OHANJ6Q.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-6NLXUKAY.mjs";import"./chunk-VRPVVMRB.mjs";import"./chunk-7UZUQQ7Q.mjs";import"./chunk-4B2TB5K2.mjs";import"./chunk-KLQP46Y3.mjs";import"./chunk-4OZWXZE5.mjs";import"./chunk-USIHBCSW.mjs";import"./chunk-3SKOU6OZ.mjs";import"./chunk-ZTHICSSF.mjs";import"./chunk-PLB7L22J.mjs";import"./chunk-PAREWQGB.mjs";import"./chunk-BFJGHSQN.mjs";import"./chunk-U5XL7D6A.mjs";import"./chunk-HYMEEXKN.mjs";import"./chunk-UMHUSOPJ.mjs";import"./chunk-W5NPH5UA.mjs";import"./chunk-ECZBLQKK.mjs";import"./chunk-E7656LR7.mjs";import"./chunk-TKWEX4FD.mjs";import"./chunk-A55HN5OK.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};
@@ -1,2 +1,2 @@
1
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 R}from"./chunk-DKR7LFIY.mjs";import{b as I,c as B}from"./chunk-342HXE3Q.mjs";import{a as f,b as F,c as L,d as M}from"./chunk-3A5I2GJK.mjs";import{a as S,b as k,g as $}from"./chunk-XQRUG4G3.mjs";import{a as N}from"./chunk-DR73Y2UJ.mjs";import{k as b}from"./chunk-FCK6NXON.mjs";import"./chunk-OU3S466R.mjs";import{b as D}from"./chunk-5IIH335D.mjs";import"./chunk-QK3VISCA.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-TOE6DPLH.mjs";import{b as v}from"./chunk-WTEGUPFG.mjs";import{j as d}from"./chunk-4OZWXZE5.mjs";import{k as w,q as h,t as g,u as y,v as x}from"./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";import O from"node:fs/promises";import{reportsDirectory as P}from"../browser/shared/paths.mjs";import{documentDirectory as U,documentFiles as q,layoutOf as z}from"../browser/shared/workspace.mjs";function C(s=P){let n=D({root:s,read:async a=>{let o=await O.readFile(q(U(a,s)).html,"utf8").catch(()=>null);return o===null?null:{source:o,text:v(o).text}},activity:N({file:z(s).activity})});return a=>n.snapshot(a)}async function te(s){let{slugs:t,options:n}=await d({options:["--allow-failures"],argv:s});t.length===0&&(console.error(R()),process.exit(1));let a=await b(t),o=await w(t,{prepare:f({say:!1})}),r=await S(t.filter(e=>!o.has(e)));await k(t.filter(e=>o.has(e)||r.failures.has(e))),await L(t),await M(t);let m=t.filter(e=>!o.has(e)&&!r.failures.has(e)),{built:l,exported:p,failures:c}=m.length>0?await h(m,{prepare:f({say:!1}),workspace:C()}):{built:[],exported:[],failures:new Map};for(let[e,i]of[...o,...r.failures])c.set(e,i);await y(c,{exportNote:!0}),await a.keep(p.map(({slug:e})=>e));let A=new Map(l.map(({report:e,removed:i})=>[e.slug,i]));for(let{slug:e,bytes:i,sha256:j}of p){let u=A.get(e),E=u.length>0?`; shared scripts and styles left out (unused): ${u.join(", ")}`:"";console.log(`Exported ${I(e)} (${i.toLocaleString("en-US")} bytes, sha256 ${j})${E}`)}g(l.map(({report:e})=>e)),F(l.map(({report:e})=>e));for(let e of r.lines)console.log(e);r.written.length>0&&console.log($(r.written));for(let{slug:e}of p)console.log(B(e));x(c,{above:!0,allow:n.has("--allow-failures")})}export{te as run};
2
+ import{a as R}from"./chunk-IA2SIEJQ.mjs";import{b as I,c as B}from"./chunk-342HXE3Q.mjs";import{a as f,b as F,c as L,d as M}from"./chunk-2KAVXMKG.mjs";import{a as S,b as k,g as $}from"./chunk-XZCFPKGO.mjs";import{a as N}from"./chunk-DR73Y2UJ.mjs";import{k as b}from"./chunk-6Q7ASAXJ.mjs";import"./chunk-S3SX3COT.mjs";import{b as D}from"./chunk-ALZ6ZENZ.mjs";import"./chunk-IA4PSIMD.mjs";import"./chunk-F4ZA6JRZ.mjs";import"./chunk-7M2BQQGZ.mjs";import"./chunk-6NLXUKAY.mjs";import{b as v}from"./chunk-VRPVVMRB.mjs";import{j as d}from"./chunk-4OZWXZE5.mjs";import{k as w,q as h,t as g,u as y,v as x}from"./chunk-USIHBCSW.mjs";import"./chunk-3SKOU6OZ.mjs";import"./chunk-ZTHICSSF.mjs";import"./chunk-PLB7L22J.mjs";import"./chunk-PAREWQGB.mjs";import"./chunk-BFJGHSQN.mjs";import"./chunk-U5XL7D6A.mjs";import"./chunk-HYMEEXKN.mjs";import"./chunk-UMHUSOPJ.mjs";import"./chunk-W5NPH5UA.mjs";import"./chunk-ECZBLQKK.mjs";import"./chunk-E7656LR7.mjs";import"./chunk-TKWEX4FD.mjs";import"./chunk-A55HN5OK.mjs";import"./chunk-5L7RYZCL.mjs";import O from"node:fs/promises";import{reportsDirectory as P}from"../browser/shared/paths.mjs";import{documentDirectory as U,documentFiles as q,layoutOf as z}from"../browser/shared/workspace.mjs";function C(s=P){let n=D({root:s,read:async a=>{let o=await O.readFile(q(U(a,s)).html,"utf8").catch(()=>null);return o===null?null:{source:o,text:v(o).text}},activity:N({file:z(s).activity})});return a=>n.snapshot(a)}async function te(s){let{slugs:t,options:n}=await d({options:["--allow-failures"],argv:s});t.length===0&&(console.error(R()),process.exit(1));let a=await b(t),o=await w(t,{prepare:f({say:!1})}),r=await S(t.filter(e=>!o.has(e)));await k(t.filter(e=>o.has(e)||r.failures.has(e))),await L(t),await M(t);let m=t.filter(e=>!o.has(e)&&!r.failures.has(e)),{built:l,exported:p,failures:c}=m.length>0?await h(m,{prepare:f({say:!1}),workspace:C()}):{built:[],exported:[],failures:new Map};for(let[e,i]of[...o,...r.failures])c.set(e,i);await y(c,{exportNote:!0}),await a.keep(p.map(({slug:e})=>e));let A=new Map(l.map(({report:e,removed:i})=>[e.slug,i]));for(let{slug:e,bytes:i,sha256:j}of p){let u=A.get(e),E=u.length>0?`; shared scripts and styles left out (unused): ${u.join(", ")}`:"";console.log(`Exported ${I(e)} (${i.toLocaleString("en-US")} bytes, sha256 ${j})${E}`)}g(l.map(({report:e})=>e)),F(l.map(({report:e})=>e));for(let e of r.lines)console.log(e);r.written.length>0&&console.log($(r.written));for(let{slug:e}of p)console.log(B(e));x(c,{above:!0,allow:n.has("--allow-failures")})}export{te as run};