alchemylab 1.4.14 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/129.js +25 -0
- package/dist/19.js +260 -0
- package/dist/{800.js → 237.js} +5 -5
- package/dist/301.js +138 -0
- package/dist/380.js +17 -0
- package/dist/403.js +4 -0
- package/dist/491.js +31 -0
- package/dist/540.js +56 -0
- package/dist/554.js +26 -0
- package/dist/{60.js → 565.js} +8 -8
- package/dist/636.js +11 -0
- package/dist/674.js +15 -0
- package/dist/729.js +89 -0
- package/dist/796.js +47 -0
- package/dist/cli.js +6571 -1623
- package/dist/document-textconv.js +484 -0
- package/dist/http-server.js +7243 -5436
- package/dist/index.js +7254 -5457
- package/dist/mcp-direct.js +7147 -5301
- package/dist/plugins/hooks/plugin.js +1 -157
- package/dist/plugins/inject-session.js +1 -66
- package/dist/plugins/system-logger.js +1 -93
- package/package.json +26 -15
- package/dist/414.js +0 -9
- package/dist/478.js +0 -109
- package/dist/939.js +0 -17
- package/dist/994.js +0 -126
- package/dist/mcp-cli-bridge.js +0 -96
- package/dist/plugins/hooks/lib/condition-evaluator.js +0 -114
- package/dist/plugins/hooks/lib/dedup-utils.js +0 -94
- package/dist/plugins/hooks/lib/hook-utils.js +0 -90
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
(()=>{"use strict"
|
|
2
|
+
function e(t){var r=o[t]
|
|
3
|
+
if(void 0!==r)return r.exports
|
|
4
|
+
var module=o[t]={id:t,loaded:!1,exports:{}}
|
|
5
|
+
return n[t].call(module.exports,module,module.exports,e),module.loaded=!0,module.exports}var t,r,n={4703:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.LIVE_FRAME_PATH=void 0,exports.readOomKills=async function(e){const t=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory.events"],n)
|
|
6
|
+
if(0===t.exit){const e=/^oom_kill (\d+)/m.exec(t.stdout)
|
|
7
|
+
if(e)return Number(e[1])}const o=await(0,r.docker)(["exec",e,"cat","/sys/fs/cgroup/memory/memory.oom_control"],n)
|
|
8
|
+
if(0===o.exit){const e=/^oom_kill (\d+)/m.exec(o.stdout)
|
|
9
|
+
if(e)return Number(e[1])}return null},exports.probeBox=async function(e){const t=`cat /sys/fs/cgroup/memory.events 2>/dev/null || cat /sys/fs/cgroup/memory/memory.oom_control 2>/dev/null; if [ -s ${exports.LIVE_FRAME_PATH} ]; then echo __ALCHEMY_LIVE_FRAME__; fi`,o=await(0,r.docker)(["exec",e,"/bin/sh","-c",t],n),s=/^oom_kill (\d+)/m.exec(o.stdout)
|
|
10
|
+
return{oomKills:s?Number(s[1]):null,liveFrame:o.stdout.includes("__ALCHEMY_LIVE_FRAME__")}},exports.oomNote=function(e,t){return`[AlchemyLab] Out of memory: the kernel killed ${1===e?"a process":`${e} processes`} in this box during this command (the box's memory cap is ${t}). Exit code 137 means killed. Make the case smaller, or raise the environment's memory (resources.memory).`}
|
|
11
|
+
const r=t(6175),n=5e3
|
|
12
|
+
exports.LIVE_FRAME_PATH="/tmp/.alchemy_live.png"},6175:(e,exports,t)=>{function r(){return{...c?{"alchemy.project":c}:{},...l.getStore()??{}}}function n(e){if("create"!==e[0]&&"run"!==e[0])return e
|
|
13
|
+
const t=new Set
|
|
14
|
+
e.forEach(((r,n)=>{"--label"===e[n-1]&&t.add(r.split("=")[0])}))
|
|
15
|
+
const n=Object.entries(r()).filter((([e])=>!t.has(e))).flatMap((([e,t])=>["--label",`${e}=${t.replace(/[\r\n]/g," ").slice(0,200)}`]))
|
|
16
|
+
return n.length?[e[0],...n,...e.slice(1)]:e}function o(e,t){return new Promise((r=>{(0,s.execFile)("docker",n(e),{timeout:t,killSignal:"SIGKILL",maxBuffer:33554432,windowsHide:!0},((e,t,n)=>{if(!e)return void r({exit:0,stdout:t,stderr:n,timedOut:!1})
|
|
17
|
+
const o=e
|
|
18
|
+
if("ENOENT"===o.code)return void r({exit:-1,stdout:t??"",stderr:n??"",timedOut:!1,spawnError:"docker CLI not found on PATH"})
|
|
19
|
+
const s=!0===o.killed||"SIGKILL"===o.signal,a="number"==typeof o.code?o.code:-1
|
|
20
|
+
r({exit:a,stdout:t??"",stderr:n??"",timedOut:s})}))}))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.PULL_TIMEOUT_MS=exports.DOCKER_OP_TIMEOUT_MS=void 0,exports.setContainerProject=function(e){c=e||void 0},exports.withContainerLabels=function(e,t){const r=Object.fromEntries(Object.entries(e).filter((([,e])=>"string"==typeof e&&e.length>0)))
|
|
21
|
+
return l.run({...l.getStore()??{},...r},t)},exports.containerLabels=r,exports.withScopeLabels=n,exports.docker=o,exports.volumeExists=async function(e){return 0===(await o(["volume","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)).exit},exports.ensureImage=async function(e){const t=(0,i.localRecipeFor)(e)
|
|
22
|
+
if(t)return(0,i.ensureLocalImage)(t)
|
|
23
|
+
const r=await o(["image","inspect",e],exports.DOCKER_OP_TIMEOUT_MS)
|
|
24
|
+
if(r.spawnError)return r.spawnError
|
|
25
|
+
if(0===r.exit)return
|
|
26
|
+
const n=await o(["pull",e],exports.PULL_TIMEOUT_MS)
|
|
27
|
+
return 0!==n.exit?`docker pull ${e} failed: ${(n.stderr||String(n.exit)).trim()}`:void 0}
|
|
28
|
+
const s=t(31421),a=t(16698),i=t(69968)
|
|
29
|
+
let c
|
|
30
|
+
const l=new a.AsyncLocalStorage
|
|
31
|
+
exports.DOCKER_OP_TIMEOUT_MS=6e4,exports.PULL_TIMEOUT_MS=3e5},7740:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ENVIRONMENT_PRESETS=exports.OFFICE_BOX_PRESET=exports.OFFICE_BOX_RECIPE_HASH=exports.OFFICE_BOX_DOCKERFILE=exports.OFFICE_RENDER_DIR=exports.OFFICE_BOX_IMAGE=exports.OFFICE_BOX_VERSION=void 0,exports.expandEnvironmentPreset=function(e,t){const r=t??{}
|
|
32
|
+
if(!e)return r
|
|
33
|
+
const n=exports.ENVIRONMENT_PRESETS[e].config
|
|
34
|
+
return{...n,...r,resources:{...n.resources??{},...r.resources??{}}}},exports.presetsLine=function(e){if(!e.includes(exports.OFFICE_BOX_IMAGE))return'Presets: `office` (python-docx, openpyxl, python-pptx, pandoc, LibreOffice; `render-pdf FILE` turns Word, Excel, PowerPoint, Markdown or HTML into PDF). Set it up with environment_verify({ preset: "office" }) then environment_create({ name: "Office", preset: "office" }), or ask environment_setup for the office preset. Needs Docker; the image is built locally on first use (a few minutes, about 900 MB). To only look at an office file, view_asset renders it without a box.'}
|
|
35
|
+
const r=t(76982)
|
|
36
|
+
exports.OFFICE_BOX_VERSION=1,exports.OFFICE_BOX_IMAGE=`alchemylab-local/office-box:v${exports.OFFICE_BOX_VERSION}`,exports.OFFICE_RENDER_DIR="/scratch/render"
|
|
37
|
+
const n=`#!/bin/sh\n# render-pdf FILE... : convert Word, Excel, PowerPoint, OpenDocument, Markdown or HTML to PDF.\n# Writes each PDF under \${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}} and prints its path, one per line.\nset -e\nout="\${RENDER_OUT:-${exports.OFFICE_RENDER_DIR}}"\nmkdir -p "$out" /scratch/.render-work\nexport HOME="\${HOME:-/scratch}"\nif [ "$1" = "--self-test" ]; then\n cd /scratch/.render-work\n python3 -c "import docx; d = docx.Document(); d.add_heading('render-pdf self-test', 1); d.add_paragraph('ok'); d.save('self-test.docx')"\n set -- /scratch/.render-work/self-test.docx\nfi\n[ "$#" -gt 0 ] || { echo "usage: render-pdf FILE..." >&2; exit 2; }\nfor f in "$@"; do\n [ -f "$f" ] || { echo "render-pdf: no such file: $f" >&2; exit 1; }\n name=$(basename "$f"); stem="\${name%.*}"\n case "$name" in\n *.md|*.markdown) pandoc "$f" -o "/scratch/.render-work/$stem.docx"; src="/scratch/.render-work/$stem.docx" ;;\n *) src="$f" ;;\n esac\n soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to pdf --outdir "$out" "$src" >/scratch/.render-work/soffice.log 2>&1 \\\n || { echo "render-pdf: LibreOffice could not convert $f" >&2; tail -5 /scratch/.render-work/soffice.log >&2; exit 1; }\n [ -f "$out/$stem.pdf" ] || { echo "render-pdf: no PDF produced for $f" >&2; exit 1; }\n echo "$out/$stem.pdf"\ndone\n`
|
|
38
|
+
exports.OFFICE_BOX_DOCKERFILE=["FROM python:3.12-slim","ENV DEBIAN_FRONTEND=noninteractive PIP_NO_CACHE_DIR=1 PYTHONDONTWRITEBYTECODE=1","RUN apt-get update \\"," && apt-get install -y --no-install-recommends \\"," libreoffice-writer-nogui libreoffice-calc-nogui libreoffice-impress-nogui \\"," pandoc fonts-liberation fonts-dejavu-core fonts-crosextra-carlito fonts-crosextra-caladea \\"," && rm -rf /var/lib/apt/lists/*","RUN pip install python-docx openpyxl python-pptx pypdf",`RUN echo ${Buffer.from(n).toString("base64")} | base64 -d > /usr/local/bin/render-pdf && chmod 755 /usr/local/bin/render-pdf`,""].join("\n"),exports.OFFICE_BOX_RECIPE_HASH=(0,r.createHash)("sha256").update(exports.OFFICE_BOX_DOCKERFILE).digest("hex").slice(0,16),exports.OFFICE_BOX_PRESET={name:"Office",description:"Make and render office files: python-docx, openpyxl, python-pptx, pandoc and LibreOffice in a sealed box. `render-pdf FILE` writes a PDF under /scratch/render. The worktree is read-only here: make files under /scratch, record them (results record, box), then view_asset({ result }) to look at a PDF and write_file({ path, fromResult }) to put a file in the repository.",smoke:"render-pdf --self-test",config:{image:exports.OFFICE_BOX_IMAGE,shellInit:"export HOME=/scratch",resources:{memory:"3g",scratchMb:1024,shmMb:256}}},exports.ENVIRONMENT_PRESETS={office:exports.OFFICE_BOX_PRESET}},15845:function(module,exports,e){async function t(e,t,r){const n=await(0,d.renderDocument)({bytes:Buffer.from(e),filename:`version.${t}`,to:r},{cacheDir:l.join(c.tmpdir(),"alchemylab-render-cache"),image:"present-only"})
|
|
39
|
+
if(!n.ok)throw new Error(n.error)
|
|
40
|
+
return n.bytes}async function r(e){const r=(0,u.documentKindFor)(e)
|
|
41
|
+
if(!r)return`(AlchemyLab: no text form for ${e.split(".").pop()} files)\n`
|
|
42
|
+
try{const n=await(0,u.extractDocumentText)(new Uint8Array(await(0,i.readFile)(e)),r,{convert:t})
|
|
43
|
+
return n.text.endsWith("\n")?n.text:`${n.text}\n`}catch(e){return`(AlchemyLab: could not read this ${r.toUpperCase()} version: ${e instanceof Error?e.message:String(e)})\n`}}module=e.nmd(module)
|
|
44
|
+
var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
45
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
46
|
+
o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
|
|
47
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
48
|
+
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
49
|
+
var t={}
|
|
50
|
+
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
51
|
+
return s(t,e),t})
|
|
52
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.textconv=r
|
|
53
|
+
const i=e(91943),c=a(e(70857)),l=a(e(16928)),u=e(98335),d=e(24716)
|
|
54
|
+
if(e.c[e.s]===module){const e=process.argv[2]
|
|
55
|
+
e||(process.stderr.write("usage: textconv <file>\n"),process.exit(2)),r(e).then((e=>process.stdout.write(e)),(()=>process.stdout.write("(AlchemyLab: text conversion failed)\n")))}},16603:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.withShellInit=function(e,t){const r=(e??"").trim()
|
|
56
|
+
return r?`${r} && ${t}`:t},exports.carriesOwnShellInit=function(e){return/(^|[;&|]\s*|\s-lc\s*['"]?\s*)(\.|source)\s+\S+\s*(&&|;)/.test(e)}},16698:module=>{module.exports=require("node:async_hooks")},16928:module=>{module.exports=require("path")},24716:function(e,exports,t){function r(e,t){const r=d.extname(e).slice(1).toLowerCase()
|
|
57
|
+
return b[t].includes(r)}function n(e,t){const r=e=>`'${e.replace(/'/g,"'\\''")}'`,n=`/work/in/${e}`,o=e.replace(/\.[^.]+$/,"")
|
|
58
|
+
return"pdf"===t?`RENDER_OUT=/work/out render-pdf ${r(n)}`:"docx"===t&&/\.(md|markdown|html?)$/i.test(e)?`pandoc ${r(n)} -o ${r(`/work/out/${o}.docx`)}`:`soffice --headless --norestore -env:UserInstallation=file:///scratch/.render-profile --convert-to ${t} --outdir /work/out ${r(n)} >/dev/null`}var o,s=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
59
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
60
|
+
o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||(o=function(e){return o=Object.getOwnPropertyNames||function(e){var t=[]
|
|
61
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
62
|
+
return t},o(e)},function(e){if(e&&e.__esModule)return e
|
|
63
|
+
var t={}
|
|
64
|
+
if(null!=e)for(var r=o(e),n=0;n<r.length;n++)"default"!==r[n]&&s(t,e,r[n])
|
|
65
|
+
return a(t,e),t})
|
|
66
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.RENDER_MIME=exports.MAX_RENDER_INPUT_BYTES=void 0,exports.canRender=r,exports.renderDocument=async function(e,t){const o=(s=e.filename,d.basename(s).replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^\.+/,"")||"document")
|
|
67
|
+
var s
|
|
68
|
+
if(!r(o,e.to))return{ok:!1,error:`${d.extname(o)||"this file"} cannot be turned into ${e.to.toUpperCase()}`}
|
|
69
|
+
if(e.bytes.length>exports.MAX_RENDER_INPUT_BYTES)return{ok:!1,error:`file is over ${exports.MAX_RENDER_INPUT_BYTES/1048576} MB`}
|
|
70
|
+
const a=(0,c.createHash)("sha256").update(m.OFFICE_BOX_RECIPE_HASH).update("\0").update(e.to).update("\0").update(d.extname(o).toLowerCase()).update("\0").update(e.bytes).digest("hex"),i=d.join(t.cacheDir,`${a}.${e.to}`)
|
|
71
|
+
try{return{ok:!0,bytes:await l.promises.readFile(i),cached:!0}}catch{}const b=t.image??"wait"
|
|
72
|
+
if("wait"!==b){const e=(0,f.localRecipeFor)(m.OFFICE_BOX_IMAGE),t=await(0,f.localImageState)(e)
|
|
73
|
+
if("no-docker"===t.state)return{ok:!1,error:t.error,unavailable:!0}
|
|
74
|
+
if("building"===t.state)return{ok:!1,error:g,preparing:!0,since:t.since}
|
|
75
|
+
if("failed"===t.state&&Date.now()-t.at<w)return{ok:!1,error:`building the office renderer failed: ${t.error.split("\n").slice(-3).join(" ")}`}
|
|
76
|
+
if("ready"!==t.state){if("present-only"===b)return{ok:!1,error:"the office renderer is not built on this machine yet",unavailable:!0}
|
|
77
|
+
const{since:t}=(0,f.startLocalImageBuild)(e)
|
|
78
|
+
return{ok:!1,error:g,preparing:!0,since:t}}}const x=await l.promises.mkdtemp(d.join(u.tmpdir(),"alchemylab-render-"))
|
|
79
|
+
try{await l.promises.mkdir(d.join(x,"in")),await l.promises.mkdir(d.join(x,"out")),await l.promises.chmod(x,493),await l.promises.chmod(d.join(x,"in"),493),await l.promises.chmod(d.join(x,"out"),511),await l.promises.writeFile(d.join(x,"in",o),e.bytes,{mode:420})
|
|
80
|
+
const r=new p.ContainerRunner({image:m.OFFICE_BOX_IMAGE,stepTimeoutMs:h,resources:{memory:"3g",shmSizeMb:256}}),s=await r.run({worktreePath:x,image:m.OFFICE_BOX_IMAGE,env:{HOME:"/scratch"},steps:[{run:n(o,e.to)}]})
|
|
81
|
+
if(!s.ok){const e=s.steps[0]
|
|
82
|
+
return{ok:!1,error:(s.error??`${(e?.stderr||e?.stdout||"").trim().split("\n").slice(-4).join(" ")}`)||"rendering failed",unavailable:!!s.error&&/docker|daemon|not found on PATH|Cannot connect/i.test(s.error)}}const a=(await l.promises.readdir(d.join(x,"out"))).find((t=>t.toLowerCase().endsWith(`.${e.to}`)))
|
|
83
|
+
if(!a)return{ok:!1,error:`no ${e.to.toUpperCase()} was produced`}
|
|
84
|
+
const c=await l.promises.readFile(d.join(x,"out",a))
|
|
85
|
+
return await l.promises.mkdir(t.cacheDir,{recursive:!0}),await l.promises.writeFile(i,c),{ok:!0,bytes:c,cached:!1}}finally{await l.promises.rm(x,{recursive:!0,force:!0})}}
|
|
86
|
+
const c=t(76982),l=t(79896),u=i(t(70857)),d=i(t(16928)),p=t(64936),f=t(69968),m=t(7740)
|
|
87
|
+
exports.MAX_RENDER_INPUT_BYTES=52428800
|
|
88
|
+
const h=18e4,b={pdf:["docx","doc","odt","rtf","xlsx","xlsm","xls","ods","csv","pptx","ppt","odp","md","markdown","html","htm"],docx:["md","markdown","html","htm","odt","rtf","doc"],xlsx:["xls","ods"],pptx:["ppt","odp"]}
|
|
89
|
+
exports.RENDER_MIME={pdf:"application/pdf",docx:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",pptx:"application/vnd.openxmlformats-officedocument.presentationml.presentation"}
|
|
90
|
+
const w=12e4,g="the office renderer is being built on this machine (first use only, usually a few minutes)"},31421:module=>{module.exports=require("node:child_process")},48161:module=>{module.exports=require("node:os")},50478:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.rtfToText=function(e){const o="string"==typeof e?e:Buffer.from(e).toString("latin1")
|
|
91
|
+
if(!/^\s*\{\s*\\rtf/i.test(o))throw new Error("not an RTF file (it does not start with {\\rtf)")
|
|
92
|
+
const s=[],a=[{skip:!1,skipChars:0}],i=()=>a[a.length-1],c=e=>{i().skip||s.push(e)}
|
|
93
|
+
for(let e=0;e<o.length;e++){const s=o[e]
|
|
94
|
+
if("{"===s){a.push({...i()})
|
|
95
|
+
continue}if("}"===s){a.length>1&&a.pop()
|
|
96
|
+
continue}if("\r"===s||"\n"===s)continue
|
|
97
|
+
if("\\"!==s){if(i().skipChars>0){i().skipChars--
|
|
98
|
+
continue}c(s)
|
|
99
|
+
continue}const u=/^\\([a-zA-Z]+)(-?\d+)? ?/.exec(o.slice(e))
|
|
100
|
+
if(!u){const s=o[e+1]
|
|
101
|
+
if("*"===s){const r=/^\\\*\\([a-zA-Z]+)/.exec(o.slice(e))
|
|
102
|
+
r&&!t.has(r[1])||(i().skip=!0),e+=1
|
|
103
|
+
continue}if("'"===s){const t=o.slice(e+2,e+4)
|
|
104
|
+
if(e+=3,i().skipChars>0){i().skipChars--
|
|
105
|
+
continue}c((l=parseInt(t,16)||0)<128?String.fromCharCode(l):n[l-128]??"")
|
|
106
|
+
continue}if(void 0!==s&&void 0!==r[s]){c(r[s]),e+=1
|
|
107
|
+
continue}e+=1
|
|
108
|
+
continue}const[d,p,f]=u
|
|
109
|
+
e+=d.length-1
|
|
110
|
+
const m=void 0===f?void 0:Number(f)
|
|
111
|
+
if(t.has(p))i().skip=!0
|
|
112
|
+
else if("u"!==p)"uc"!==p?"cell"!==p&&"nestcell"!==p?"row"!==p&&"nestrow"!==p?void 0===r[p]||c(r[p]):c("\n"):c(" | "):i().ucSkip=m??1
|
|
113
|
+
else{const e=i().skipChars>0
|
|
114
|
+
i().skipChars=Math.max(0,a[a.length-1].ucSkip??1),e||void 0===m||c(String.fromCodePoint(m<0?m+65536:m))}}var l
|
|
115
|
+
return s.join("").replace(/[ \t]+\n/g,"\n").replace(/\n{3,}/g,"\n\n").split("\n").map((e=>{const t=e.replace(/\s+$/,"").replace(/^\s*\|\s*/,"").replace(/\s*\|\s*$/,"")
|
|
116
|
+
return e.includes(" | ")?`| ${t} |`:t})).join("\n").trim()}
|
|
117
|
+
const t=new Set(["fonttbl","colortbl","stylesheet","listtable","listoverridetable","revtbl","rsidtbl","generator","info","pict","object","themedata","colorschememapping","latentstyles","datastore","xmlnstbl","filetbl","upr","fldinst","nonshppict","shppict","panose"]),r={par:"\n",line:"\n",tab:"\t",sect:"\n\n",page:"\n\n",lquote:"\u2018",rquote:"\u2019",ldblquote:"\u201c",rdblquote:"\u201d",emdash:"\u2014",endash:"\u2013",bullet:"\u2022",emspace:" ",enspace:" ",qmspace:" ","~":"\xa0","-":"",_:"-","{":"{","}":"}","\\":"\\"},n="\u20ac\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\u017d\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\u017e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},53157:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hardenedCreateArgs=function(e){return["--network",e.network,"--user",e.user,"--cap-drop","ALL",...(e.capAdds??[]).flatMap((e=>["--cap-add",e])),...Object.entries(e.sysctls??{}).flatMap((([e,t])=>["--sysctl",`${e}=${t}`])),"--security-opt","no-new-privileges","--read-only","--tmpfs","/tmp:rw,nosuid,nodev,exec,size=256m",...(e.extraTmpfs??[]).flatMap((e=>["--tmpfs",e])),"--ipc","none","--tmpfs",`/dev/shm:rw,nosuid,nodev,size=${e.shmSizeMb??64}m`,"--memory",e.memory,"--memory-swap",e.memory,"--cpus",String(e.cpus),"--pids-limit",String(e.pidsLimit),"-e","HOME=/tmp"]}},64264:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.SCRATCH_VOLUME_ARGS=void 0,exports.scratchTmpfsArg=function(e){return`/scratch:rw,nosuid,nodev,exec,size=${e}m`},exports.claimScratch=async function(e,t,n){const o=await(0,r.docker)(["run","--rm","--network","none","--user","0:0","--volumes-from",e,"--entrypoint","chown",t,n,"/scratch"],r.DOCKER_OP_TIMEOUT_MS)
|
|
118
|
+
return 0===o.exit?null:o.spawnError??((o.stderr||"").trim()||`chown exited ${o.exit}`)}
|
|
119
|
+
const r=t(6175)
|
|
120
|
+
exports.SCRATCH_VOLUME_ARGS=["--mount","type=volume,dst=/scratch"]},64936:(e,exports,t)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ContainerRunner=void 0
|
|
121
|
+
const r=t(6175),n=t(53157),o=t(16603),s=t(64264),a=t(4703)
|
|
122
|
+
exports.ContainerRunner=class{constructor(e={}){this.image=e.image??"node:20-alpine",this.stepTimeoutMs=e.stepTimeoutMs??12e4,this.network=e.network??"none",this.resources=e.resources??{}}async run(e){if(!e.worktreePath)return{steps:[],ok:!1,error:"worktreePath is required"}
|
|
123
|
+
const t=e.image??this.image,n={}
|
|
124
|
+
let i=Date.now()
|
|
125
|
+
const c=e=>{const t=Date.now()
|
|
126
|
+
n[e]=(n[e]??0)+(t-i),i=t},l=await(0,r.ensureImage)(t)
|
|
127
|
+
if(c("image"),l)return{steps:[],ok:!1,error:l}
|
|
128
|
+
let u=await(0,r.docker)(this.createArgs(e,t,!0),r.DOCKER_OP_TIMEOUT_MS)
|
|
129
|
+
if(0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
|
|
130
|
+
let d=u.stdout.trim()
|
|
131
|
+
if(c("create"),await(0,s.claimScratch)(d,t,"1000:1000")){if(await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),u=await(0,r.docker)(this.createArgs(e,t,!1),r.DOCKER_OP_TIMEOUT_MS),0!==u.exit)return{steps:[],ok:!1,error:u.spawnError??`docker create failed: ${(u.stderr||String(u.exit)).trim()}`}
|
|
132
|
+
d=u.stdout.trim()}c("scratch")
|
|
133
|
+
try{const t=await(0,r.docker)(["start",d],r.DOCKER_OP_TIMEOUT_MS)
|
|
134
|
+
if(c("start"),0!==t.exit)return{steps:[],ok:!1,error:`docker start failed: ${(t.stderr||String(t.exit)).trim()}`}
|
|
135
|
+
const s=[]
|
|
136
|
+
let i=await(0,a.readOomKills)(d)??0
|
|
137
|
+
for(const t of e.steps){const n=Date.now(),c=await(0,r.docker)(["exec",d,"/bin/sh","-c",(0,o.withShellInit)(e.shellInit,t.run)],t.timeoutMs??this.stepTimeoutMs),l=Date.now()-n,u=await(0,a.readOomKills)(d),p=null!=u?Math.max(0,u-i):0
|
|
138
|
+
null!=u&&(i=u)
|
|
139
|
+
const f=p>0?`${c.stderr}${c.stderr&&!c.stderr.endsWith("\n")?"\n":""}${(0,a.oomNote)(p,this.resources.memory??"1g")}\n`:c.stderr
|
|
140
|
+
s.push({run:t.run,exit:c.exit,stdout:c.stdout,stderr:f,ms:l,timedOut:c.timedOut})}return c("commands"),{steps:s,ok:s.every((e=>0===e.exit)),phaseMs:n}}finally{const e=Date.now()
|
|
141
|
+
await(0,r.docker)(["rm","-f","-v",d],r.DOCKER_OP_TIMEOUT_MS),n.remove=Date.now()-e}}createArgs(e,t,r){const o=Object.entries(e.env??{}).flatMap((([e,t])=>["-e",`${e}=${t}`])),a=e.depsVolume?["-v",`${e.depsVolume}:/work/node_modules`]:[],i=(e.mounts??[]).flatMap((e=>["-v",`${e.volume}:${e.target}`])),c=(e.readOnlyBinds??[]).flatMap((e=>["-v",`${e.host}:${e.target}:ro`]))
|
|
142
|
+
return["create","--label","alchemy.sandbox=rung1",...(0,n.hardenedCreateArgs)({network:this.network,user:"1000:1000",...r?{}:{extraTmpfs:[(0,s.scratchTmpfsArg)(512)]},shmSizeMb:this.resources.shmSizeMb,memory:this.resources.memory??"1g",cpus:this.resources.cpus??2,pidsLimit:this.resources.pidsLimit??512}),...r?s.SCRATCH_VOLUME_ARGS:[],...o,"-v",`${e.worktreePath}:/work:rw`,...a,...i,...c,"-w","/work",t,"tail","-f","/dev/null"]}}},69968:function(e,exports,t){function r(e){const t=m.get(e.image)
|
|
143
|
+
if(t)return t.work
|
|
144
|
+
const r=(async()=>{const t=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
145
|
+
if(t.spawnError)return t.spawnError
|
|
146
|
+
if(0===t.exit&&t.stdout.trim()===e.recipeHash)return
|
|
147
|
+
const r=i.mkdtempSync(l.join(c.tmpdir(),"alchemylab-image-"))
|
|
148
|
+
try{i.writeFileSync(l.join(r,"Dockerfile"),e.dockerfile)
|
|
149
|
+
const t=await(0,u.docker)(["build","--label",`${p}=${e.recipeHash}`,"-t",e.image,r],exports.BUILD_TIMEOUT_MS)
|
|
150
|
+
if(0!==t.exit){const r=(t.stderr||t.stdout||"").trim().split("\n").slice(-12).join("\n")
|
|
151
|
+
return`building ${e.image} failed${t.timedOut?" (timed out)":""}: ${r}`}return}finally{i.rmSync(r,{recursive:!0,force:!0})}})()
|
|
152
|
+
return m.set(e.image,{work:r,since:Date.now()}),r.then((t=>{t?h.set(e.image,{error:t,at:Date.now()}):h.delete(e.image)}),(t=>{h.set(e.image,{error:t instanceof Error?t.message:String(t),at:Date.now()})})).finally((()=>m.delete(e.image))),r}var n,o=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
153
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
154
|
+
o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[]
|
|
155
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
156
|
+
return t},n(e)},function(e){if(e&&e.__esModule)return e
|
|
157
|
+
var t={}
|
|
158
|
+
if(null!=e)for(var r=n(e),a=0;a<r.length;a++)"default"!==r[a]&&o(t,e,r[a])
|
|
159
|
+
return s(t,e),t})
|
|
160
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.BUILD_TIMEOUT_MS=void 0,exports.localRecipeFor=function(e){return f.find((t=>t.image===e))},exports.ensureLocalImage=r,exports.localImageState=async function(e){const t=m.get(e.image)
|
|
161
|
+
if(t)return{state:"building",since:t.since}
|
|
162
|
+
const r=await(0,u.docker)(["image","inspect","--format",`{{ index .Config.Labels "${p}" }}`,e.image],u.DOCKER_OP_TIMEOUT_MS)
|
|
163
|
+
if(r.spawnError)return{state:"no-docker",error:"Docker is not installed on this machine (no docker command)"}
|
|
164
|
+
if(0===r.exit&&r.stdout.trim()===e.recipeHash)return{state:"ready"}
|
|
165
|
+
if(/cannot connect to the docker daemon|is the docker daemon running|error during connect/i.test(r.stderr))return{state:"no-docker",error:"Docker is not running on this machine"}
|
|
166
|
+
const n=h.get(e.image)
|
|
167
|
+
return n?{state:"failed",...n}:{state:"missing"}},exports.startLocalImageBuild=function(e){return h.delete(e.image),r(e).catch((()=>{})),{since:m.get(e.image)?.since??Date.now()}}
|
|
168
|
+
const i=a(t(73024)),c=a(t(48161)),l=a(t(76760)),u=t(6175),d=t(7740),p="dev.alchemylab.recipe"
|
|
169
|
+
exports.BUILD_TIMEOUT_MS=15e5
|
|
170
|
+
const f=[{image:d.OFFICE_BOX_IMAGE,dockerfile:d.OFFICE_BOX_DOCKERFILE,recipeHash:d.OFFICE_BOX_RECIPE_HASH}],m=new Map,h=new Map},70610:(e,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOCUMENT_FORMATS=void 0,exports.formatOfKind=function(e){return exports.DOCUMENT_FORMATS.find((t=>t.kind===e))},exports.formatFor=function(e){const r=/\.([a-z0-9]+)$/i.exec(e)
|
|
171
|
+
return r?t.get(r[1].toLowerCase()):void 0},exports.DOCUMENT_FORMATS=[{kind:"pdf",extensions:["pdf"],mime:"application/pdf",modelInput:"pdf",text:!0},{kind:"docx",extensions:["docx"],mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",text:!0,render:"office"},{kind:"xlsx",extensions:["xlsx","xlsm"],mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",text:!0,render:"office"},{kind:"pptx",extensions:["pptx"],mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation",text:!0,render:"office"},{kind:"odt",extensions:["odt"],mime:"application/vnd.oasis.opendocument.text",text:!0,render:"office"},{kind:"ods",extensions:["ods"],mime:"application/vnd.oasis.opendocument.spreadsheet",text:!0,render:"office"},{kind:"odp",extensions:["odp"],mime:"application/vnd.oasis.opendocument.presentation",text:!0,render:"office"},{kind:"doc",extensions:["doc"],mime:"application/msword",text:!0,textVia:"docx",render:"office"},{kind:"rtf",extensions:["rtf"],mime:"application/rtf",text:!0,render:"office"},{kind:"xls",extensions:["xls"],mime:"application/vnd.ms-excel",text:!0,textVia:"xlsx",render:"office"},{kind:"ppt",extensions:["ppt"],mime:"application/vnd.ms-powerpoint",text:!0,textVia:"pptx",render:"office"}]
|
|
172
|
+
const t=new Map(exports.DOCUMENT_FORMATS.flatMap((e=>e.extensions.map((t=>[t,e])))))},70857:module=>{module.exports=require("os")},73024:module=>{module.exports=require("node:fs")},76760:module=>{module.exports=require("node:path")},76982:module=>{module.exports=require("crypto")},79896:module=>{module.exports=require("fs")},88194:module=>{module.exports=require("jszip")},88891:module=>{module.exports=require("unpdf")},91943:module=>{module.exports=require("fs/promises")},98335:(e,exports,t)=>{async function r(e){return(await Promise.resolve().then(t.t.bind(t,88194,23))).default.loadAsync(e)}async function n(e,t){const r=e.file(t)
|
|
173
|
+
return r?r.async("string"):void 0}function o(e){return e.replace(/&(#x[0-9a-f]+|#\d+|amp|lt|gt|quot|apos);/gi,((e,t)=>{const r=t.toLowerCase()
|
|
174
|
+
if("amp"===r)return"&"
|
|
175
|
+
if("lt"===r)return"<"
|
|
176
|
+
if("gt"===r)return">"
|
|
177
|
+
if("quot"===r)return'"'
|
|
178
|
+
if("apos"===r)return"'"
|
|
179
|
+
const n=r.startsWith("#x")?parseInt(r.slice(2),16):parseInt(r.slice(1),10)
|
|
180
|
+
return Number.isFinite(n)?String.fromCodePoint(n):e}))}function s(e,t){const r=new RegExp(`(?:^|\\s)${t.replace(":","\\:")}="([^"]*)"`).exec(e)
|
|
181
|
+
return r?o(r[1]):void 0}function a(e,t){const r=new Map
|
|
182
|
+
if(!e)return r
|
|
183
|
+
for(const n of e.matchAll(/<Relationship\b([^>]*)\/?>/g)){const e=s(n[1],"Id"),o=s(n[1],"Target")
|
|
184
|
+
e&&o&&r.set(e,o.startsWith("/")?o.slice(1):i(`${t}/${o}`))}return r}function i(e){const t=[]
|
|
185
|
+
for(const r of e.split("/"))r&&"."!==r&&(".."===r?t.pop():t.push(r))
|
|
186
|
+
return t.join("/")}function c(e){const t=e.slice(0,e.lastIndexOf("/"))
|
|
187
|
+
return{path:`${t}/_rels/${e.slice(e.lastIndexOf("/")+1)}.rels`,dir:t}}function l(e,t){const r=(e||t||"").replace(/\s+/g," ").trim().slice(0,200)
|
|
188
|
+
return r?`[image: ${r}]`:"[image]"}async function u(e,t){const r=new Map
|
|
189
|
+
for(const[o,s]of t){if(!/charts\/chart[^/]*\.xml$/.test(s))continue
|
|
190
|
+
const t=await n(e,s)
|
|
191
|
+
t&&r.set(o,d(t))}return r}function d(e){const t=p(e),r=[...new Set([...t.matchAll(/<(\w+Chart)\b/g)].map((e=>P[e[1]])).filter(Boolean))]
|
|
192
|
+
"bar"===r[0]&&/<barDir val="col"/.test(t)&&(r[0]="column")
|
|
193
|
+
const n=t.split("<plotArea")[0],s=/<title>([\s\S]*?)<\/title>/.exec(n)?.[1],a=s?[...s.matchAll(/<t>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("").trim():"",i=[...t.matchAll(/<ser>([\s\S]*?)<\/ser>/g)].map((e=>{const t=e[1],r=/<tx>([\s\S]*?)<\/tx>/.exec(t)?.[1]??"",n=o(/<v>([\s\S]*?)<\/v>/.exec(r)?.[1]??/<f>([\s\S]*?)<\/f>/.exec(r)?.[1]??"").trim(),s=e=>{if(!e)return""
|
|
194
|
+
const t=/<f>([\s\S]*?)<\/f>/.exec(e)?.[1],r=[...e.matchAll(/<v>([\s\S]*?)<\/v>/g)].map((e=>o(e[1])))
|
|
195
|
+
return t&&/!/.test(t)?o(t):r.length?`${r.slice(0,8).join(", ")}${r.length>8?`, ... (${r.length})`:""}`:""},a=s(/<(?:val|yVal)>([\s\S]*?)<\/(?:val|yVal)>/.exec(t)?.[1]),i=s(/<(?:cat|xVal)>([\s\S]*?)<\/(?:cat|xVal)>/.exec(t)?.[1])
|
|
196
|
+
return`${n||"series"}${a?`: ${a}`:""}${i?` by ${i}`:""}`}))
|
|
197
|
+
return`[chart: ${r.join("/")||"chart"}${a?` "${a}"`:""}${i.length?`; ${i.join("; ")}`:""}]`}function p(e){return e.replace(/<(\/?)[A-Za-z][\w.-]*:/g,"<$1")}function f(e,t=new Map){const r=[],n=[]
|
|
198
|
+
let a=null,i="",c=!1,u=!1,d=null,p=0
|
|
199
|
+
const f=/<(\/?)(w:p|w:tbl|w:tr|w:tc|w:t|w:tab|w:br|w:cr|w:pStyle|w:numPr|w:drawing|wp:docPr|c:chart|v:imagedata|mc:Fallback)\b([^>]*?)(\/?)>|([^<]+)/g
|
|
200
|
+
for(const m of e.matchAll(f)){const[,e,f,h,b,w]=m
|
|
201
|
+
if("mc:Fallback"===f){b||(p+=e?-1:1)
|
|
202
|
+
continue}if(p>0)continue
|
|
203
|
+
if(void 0!==w){u&&a&&a.push(o(w))
|
|
204
|
+
continue}const g=n[n.length-1]
|
|
205
|
+
if(e)switch(f){case"w:drawing":{if(!d)break
|
|
206
|
+
const e=d.chart??l(d.descr,d.name)
|
|
207
|
+
d=null,a?a.push(` ${e} `):r.push(e)
|
|
208
|
+
break}case"w:t":u=!1
|
|
209
|
+
break
|
|
210
|
+
case"w:p":{const e=(a??[]).join("").trim()
|
|
211
|
+
if(a=null,g?.cell){e&&g.cell.push(e)
|
|
212
|
+
break}if(!e){r.length&&""!==r[r.length-1]&&r.push("")
|
|
213
|
+
break}const t=/^(?:heading|kop|\xfcberschrift|titre)\s*(\d)/i.exec(i)||(/^title$/i.test(i)?["","1"]:null)
|
|
214
|
+
r.push(t?`${"#".repeat(Math.min(6,Number(t[1])))} ${e}`:c?`- ${e}`:e)
|
|
215
|
+
break}case"w:tc":g?.cell&&g.row&&(g.row.push(g.cell.join(" ")),g.cell=null)
|
|
216
|
+
break
|
|
217
|
+
case"w:tr":g?.row&&(g.rows.push(g.row),g.row=null)
|
|
218
|
+
break
|
|
219
|
+
case"w:tbl":{const e=n.pop()
|
|
220
|
+
if(!e)break
|
|
221
|
+
const t=e.rows.map((e=>`| ${e.map((e=>e.replace(/\|/g,"\\|"))).join(" | ")} |`)),o=n[n.length-1]
|
|
222
|
+
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
223
|
+
break}}else switch(f){case"w:drawing":b||(d={})
|
|
224
|
+
break
|
|
225
|
+
case"wp:docPr":d&&(d.name=s(h,"name"),d.descr=s(h,"descr"))
|
|
226
|
+
break
|
|
227
|
+
case"c:chart":d&&(d.chart=t.get(s(h,"r:id")??"")??"[chart]")
|
|
228
|
+
break
|
|
229
|
+
case"v:imagedata":{const e=l(s(h,"o:title"),void 0)
|
|
230
|
+
a?a.push(e):r.push(e)
|
|
231
|
+
break}case"w:p":a=[],i="",c=!1
|
|
232
|
+
break
|
|
233
|
+
case"w:pStyle":i=s(h,"w:val")??""
|
|
234
|
+
break
|
|
235
|
+
case"w:numPr":c=!0
|
|
236
|
+
break
|
|
237
|
+
case"w:t":b||(u=!0)
|
|
238
|
+
break
|
|
239
|
+
case"w:tab":a?.push("\t")
|
|
240
|
+
break
|
|
241
|
+
case"w:br":case"w:cr":a?.push("\n")
|
|
242
|
+
break
|
|
243
|
+
case"w:tbl":n.push({rows:[],row:null,cell:null})
|
|
244
|
+
break
|
|
245
|
+
case"w:tr":g&&(g.row=[])
|
|
246
|
+
break
|
|
247
|
+
case"w:tc":g&&(g.cell=[])}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}async function m(e,t){const r=[],o=c(t)
|
|
248
|
+
for(const t of a(await n(e,o.path),o.dir).values()){if(!/drawings\/drawing[^/]*\.xml$/.test(t))continue
|
|
249
|
+
const o=await n(e,t)
|
|
250
|
+
if(!o)continue
|
|
251
|
+
const i=p(o),d=c(t),f=await u(e,a(await n(e,d.path),d.dir))
|
|
252
|
+
for(const e of i.matchAll(/<(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)\b[\s\S]*?<\/(?:twoCellAnchor|oneCellAnchor|absoluteAnchor)>/g)){const t=e[0],n=/<chart\b[^>]*r:id="([^"]+)"/.exec(t)?.[1],o=/<from>[\s\S]*?<col>(\d+)<\/col>[\s\S]*?<row>(\d+)<\/row>/.exec(t),a=o?` at ${w(Number(o[1]))}${Number(o[2])+1}`:""
|
|
253
|
+
if(n){r.push(`${(f.get(n)??"[chart]").replace(/\]$/,`${a}]`)}`)
|
|
254
|
+
continue}const i=/<pic>[\s\S]*?<cNvPr\b([^>]*)\/?>/.exec(t)
|
|
255
|
+
i&&r.push(l(s(i[1],"descr"),s(i[1],"name")).replace(/\]$/,`${a}]`))}}return r}function h(e){if(!e)return[]
|
|
256
|
+
const t=[]
|
|
257
|
+
for(const r of e.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)){const e=[]
|
|
258
|
+
for(const t of r[1].matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g))e.push(o(t[1]))
|
|
259
|
+
t.push(e.join(""))}return t}function b(e){const t=/^[A-Z]+/i.exec(e)?.[0].toUpperCase()??"A"
|
|
260
|
+
let r=0
|
|
261
|
+
for(const e of t)r=26*r+(e.charCodeAt(0)-64)
|
|
262
|
+
return r-1}function w(e){let t=""
|
|
263
|
+
for(let r=e+1;r>0;r=Math.floor((r-1)/26))t=String.fromCharCode(65+(r-1)%26)+t
|
|
264
|
+
return t}function g(e,t){const r=[]
|
|
265
|
+
let n=0,a=!1
|
|
266
|
+
for(const i of e.matchAll(/<row\b([^>]*?)(?:\/>|>([\s\S]*?)<\/row>)/g)){if(r.length>=C){a=!0
|
|
267
|
+
break}const e=i[2]??"",c=[]
|
|
268
|
+
let l=0
|
|
269
|
+
for(const r of e.matchAll(/<c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/c>)/g)){const e=s(r[1],"r"),n=e?b(e):l
|
|
270
|
+
l=n+1
|
|
271
|
+
const a=s(r[1],"t"),i=r[2]??"",u=/<f\b[^>]*>([\s\S]*?)<\/f>/.exec(i)?.[1]
|
|
272
|
+
let d=""
|
|
273
|
+
if("inlineStr"===a)d=[...i.matchAll(/<t\b[^>]*>([\s\S]*?)<\/t>/g)].map((e=>o(e[1]))).join("")
|
|
274
|
+
else{const e=/<v\b[^>]*>([\s\S]*?)<\/v>/.exec(i)?.[1]
|
|
275
|
+
void 0!==e&&(d="s"===a?t[Number(e)]??"":"b"===a?"1"===e?"TRUE":"FALSE":o(e))}u&&(d=`${d}${""===d?"":" "}(=${o(u)})`),""!==d&&(c[n]=d.replace(/[\t\r\n]+/g," "))}c.length&&(n=Math.max(n,c.length),r.push({n:Number(s(i[1],"r"))||r.length+1,cells:c}))}return{text:x(r,n),truncated:a}}function x(e,t){return e.length?[["row",...Array.from({length:t},((e,t)=>w(t)))].join("\t"),...e.map((e=>[String(e.n),...Array.from({length:t},((t,r)=>e.cells[r]??""))].join("\t").replace(/\t+$/,"")))].join("\n"):""}function _(e,t){const r=[],n=p(e)
|
|
276
|
+
for(const e of n.matchAll(/<pic\b[^>]*>[\s\S]*?<\/pic>|<graphicFrame\b[^>]*>[\s\S]*?<\/graphicFrame>/g)){const n=e[0]
|
|
277
|
+
if(/^<pic\b/.test(n)){const e=/<cNvPr\b([^>]*)\/?>/.exec(n)?.[1]??""
|
|
278
|
+
r.push(l(s(e,"descr"),s(e,"name")))
|
|
279
|
+
continue}const o=/<chart\b[^>]*r:id="([^"]+)"/.exec(n)?.[1]
|
|
280
|
+
o&&r.push(t.get(o)??"[chart]")}return r}function k(e){const t=[]
|
|
281
|
+
for(const r of e.matchAll(/<a:p\b[^>]*>([\s\S]*?)<\/a:p>/g)){const e=[]
|
|
282
|
+
for(const t of r[1].matchAll(/<a:t\b[^>]*>([\s\S]*?)<\/a:t>|<a:br\b[^>]*\/>/g))e.push(void 0!==t[1]?o(t[1]):"\n")
|
|
283
|
+
const n=e.join("").trim()
|
|
284
|
+
n&&t.push(n)}return t}async function v(e,t,o){const s=await r(e),a=(await n(s,"mimetype"))?.trim(),i=await n(s,"content.xml")
|
|
285
|
+
if(!i||a&&a!==t)throw new Error(`not an OpenDocument ${o} (${i?`its mimetype is ${a}`:"content.xml is missing"})`)
|
|
286
|
+
const c=new Map
|
|
287
|
+
for(const e of Object.keys(s.files)){const t=/^(.+)\/content\.xml$/.exec(e)?.[1]
|
|
288
|
+
if(!t)continue
|
|
289
|
+
const r=await n(s,e)
|
|
290
|
+
r&&/<chart:chart\b/.test(r)&&c.set(t,E(r))}return{xml:i.split(/<office:body\b/)[1]??i,objects:c}}function O(e,t){return e.object?t.get((e.href??"").replace(/^\.\//,""))??`[embedded object: ${(e.desc||e.title||e.name||"unnamed").trim()}]`:e.image?l(e.desc||e.title,e.name):null}function E(e){const t=/chart:class="chart:(\w+)"/.exec(e)?.[1]??"chart",r=[...(/<chart:title\b[^>]*>([\s\S]*?)<\/chart:title>/.exec(e)?.[1]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>o(e[1].replace(/<[^>]+>/g,"")))).join(" ").trim(),n=[],a=/<table:table\b[^>]*table:name="local-table"[^>]*>([\s\S]*?)<\/table:table>/.exec(e)?.[1]
|
|
291
|
+
if(a)for(const e of a.matchAll(/<table:table-row\b[^>]*>([\s\S]*?)<\/table:table-row>/g)){const t=[]
|
|
292
|
+
for(const r of e[1].matchAll(/<table:(?:table-cell|covered-table-cell)\b([^>]*?)(?:\/>|>([\s\S]*?)<\/table:(?:table-cell|covered-table-cell)>)/g)){const e=o([...(r[2]??"").matchAll(/<text:p\b[^>]*>([\s\S]*?)<\/text:p>/g)].map((e=>e[1].replace(/<[^>]+>/g,""))).join(" ")).trim()||s(r[1],"office:value")||"",n=Math.min(Math.max(1,Number(s(r[1],"table:number-columns-repeated")??1)||1),R)
|
|
293
|
+
for(let r=0;r<n;r++)t.push(e)}n.push(t)}const i=e=>{const t=/^\$?([A-Z]+)\$?(\d+)$/.exec(e)
|
|
294
|
+
return t?{col:b(t[1]),row:Number(t[2])-1}:null},c=e=>{if(!e)return""
|
|
295
|
+
const t=e.split(":").map((e=>({table:e.slice(0,e.lastIndexOf(".")).replace(/^'(.*)'$/,"$1"),ref:e.slice(e.lastIndexOf(".")+1)})))
|
|
296
|
+
if("local-table"===t[0].table||""===t[0].table&&n.length){const e=i(t[0].ref),r=i(t[t.length-1].ref)??e
|
|
297
|
+
if(!e||!r)return""
|
|
298
|
+
const o=[]
|
|
299
|
+
for(let t=e.row;t<=r.row;t++)for(let s=e.col;s<=r.col;s++)o.push(n[t]?.[s]??"")
|
|
300
|
+
return`${o.slice(0,8).join(", ")}${o.length>8?`, ... (${o.length})`:""}`}const r=t.map((e=>e.ref.replace(/\$/g,"")))
|
|
301
|
+
return`${t[0].table?`${t[0].table}!`:""}${2===r.length&&r[0]===r[1]?r[0]:r.join(":")}`},l=c(/<chart:categories\b[^>]*table:cell-range-address="([^"]+)"/.exec(e)?.[1]),u=[...e.matchAll(/<chart:series\b([^>]*)>/g)].map((e=>{const t=c(s(e[1],"chart:values-cell-range-address"))
|
|
302
|
+
return`${c(s(e[1],"chart:label-cell-address"))||"series"}${t?`: ${t}`:""}${l?` by ${l}`:""}`}))
|
|
303
|
+
return`[chart: ${N[t]??t}${r?` "${r}"`:""}${u.length?`; ${u.join("; ")}`:""}]`}function $(e){return e.replace(/^[a-z]+:/i,"").replace(/^=/,"").replace(/\[([^\]]*)\]/g,((e,t)=>t.split(":").map((e=>{const t=e.lastIndexOf("."),r=e.slice(0,t).replace(/^\$/,"").replace(/^'(.*)'$/,"$1"),n=e.slice(t+1).replace(/\$/g,"")
|
|
304
|
+
return r?`${r}!${n}`:n})).join(":")))}function y(e,t,r){switch(e){case"text:tab":return r.push("\t"),!0
|
|
305
|
+
case"text:line-break":return r.push("\n"),!0
|
|
306
|
+
case"text:s":return r.push(" ".repeat(Math.min(100,Number(s(t,"text:c")??1)||1))),!0
|
|
307
|
+
default:return!1}}function M(e,t=new Map){const r=[],n=[],a=new L
|
|
308
|
+
let i=0,c=0,l=null,u=null
|
|
309
|
+
for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
|
|
310
|
+
if(void 0!==h){if(c)continue
|
|
311
|
+
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))
|
|
312
|
+
continue}if(F.has(p)){m||(c+=e?-1:1)
|
|
313
|
+
continue}if(c)continue
|
|
314
|
+
const b=n[n.length-1]
|
|
315
|
+
if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
316
|
+
break
|
|
317
|
+
case"draw:frame":{const e=l?O(l,t):null
|
|
318
|
+
if(l=null,!e)break
|
|
319
|
+
a.current?a.pushSpaced(e):b?.cell?b.cell.push(e):r.push(e)
|
|
320
|
+
break}case"text:p":case"text:h":{const e=a.close()
|
|
321
|
+
if(!e)break
|
|
322
|
+
if(b?.cell){e.plain&&b.cell.push(e.plain)
|
|
323
|
+
break}if(!e.line){r.length&&""!==r[r.length-1]&&r.push("")
|
|
324
|
+
break}r.push(e.line)
|
|
325
|
+
break}case"text:list-item":i=Math.max(0,i-1)
|
|
326
|
+
break
|
|
327
|
+
case"table:table-cell":case"table:covered-table-cell":b?.cell&&b.row&&(b.row.push(b.cell.join(" ")),b.cell=null)
|
|
328
|
+
break
|
|
329
|
+
case"table:table-row":b?.row&&(b.rows.push(b.row),b.row=null)
|
|
330
|
+
break
|
|
331
|
+
case"table:table":{const e=n.pop()
|
|
332
|
+
if(!e)break
|
|
333
|
+
const t=e.rows.map((e=>`| ${e.map((e=>e.replace(/\|/g,"\\|"))).join(" | ")} |`)),o=n[n.length-1]
|
|
334
|
+
o?.cell?o.cell.push(t.join(" ")):r.push(...t,"")
|
|
335
|
+
break}}else{if(y(p,f,a))continue
|
|
336
|
+
switch(p){case"text:p":case"text:h":m?!b?.cell&&r.length&&""!==r[r.length-1]&&r.push(""):a.open("text:h"===p?Number(s(f,"text:outline-level")??1)||1:0,i>0)
|
|
337
|
+
break
|
|
338
|
+
case"text:list-item":m||i++
|
|
339
|
+
break
|
|
340
|
+
case"table:table":m||n.push({rows:[],row:null,cell:null})
|
|
341
|
+
break
|
|
342
|
+
case"table:table-row":b&&!m&&(b.row=[])
|
|
343
|
+
break
|
|
344
|
+
case"table:table-cell":case"table:covered-table-cell":b&&(m?b.row?.push(""):b.cell=[])
|
|
345
|
+
break
|
|
346
|
+
case"draw:frame":m||(l={name:s(f,"draw:name")})
|
|
347
|
+
break
|
|
348
|
+
case"draw:image":l&&(l.image=!0)
|
|
349
|
+
break
|
|
350
|
+
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
351
|
+
break
|
|
352
|
+
case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}return r.join("\n").replace(/\n{3,}/g,"\n\n").trim()}function S(e,t=new Map){const r=[]
|
|
353
|
+
let n=!1,a=null,i=null,c=null,l=null,u=null,d=0,p=!1
|
|
354
|
+
for(const f of e.matchAll(A)){const[,e,m,h,b,w]=f
|
|
355
|
+
if(void 0!==w){if(d)continue
|
|
356
|
+
u&&l?l[u]=(l[u]??"")+o(w):c&&p&&c.parts.push(o(w))
|
|
357
|
+
continue}if(F.has(m)){b||(d+=e?-1:1)
|
|
358
|
+
continue}if(d)continue
|
|
359
|
+
const g=()=>{if(!c||!i)return
|
|
360
|
+
let e=c.parts.join("").trim()||c.value||""
|
|
361
|
+
if(c.formula&&(e=`${e}${e?" ":""}(=${$(c.formula)})`),e)for(let t=0;t<Math.min(c.repeat,R);t++)i.cells[i.col+t]=e.replace(/[\t\r\n]+/g," ")
|
|
362
|
+
i.col+=c.repeat,c=null}
|
|
363
|
+
if(e)switch(m){case"svg:title":case"svg:desc":u=null
|
|
364
|
+
break
|
|
365
|
+
case"draw:frame":{const e=l?O(l,t):null
|
|
366
|
+
l=null,e&&a&&a.figures.push(e)
|
|
367
|
+
break}case"text:p":p=!1
|
|
368
|
+
break
|
|
369
|
+
case"table:table-cell":case"table:covered-table-cell":g()
|
|
370
|
+
break
|
|
371
|
+
case"table:table-row":if(!i||!a)break
|
|
372
|
+
if(i.cells.some((e=>void 0!==e))){for(let e=0;e<Math.min(i.repeat,D);e++){if(a.rows.length>=C){n=!0
|
|
373
|
+
break}a.rows.push({n:a.rowIndex+e+1,cells:i.cells})}a.width=Math.max(a.width,i.cells.length)}a.rowIndex+=i.repeat,i=null
|
|
374
|
+
break
|
|
375
|
+
case"table:table":if(!a)break
|
|
376
|
+
r.push({name:a.name,text:x(a.rows,a.width),figures:a.figures}),a=null}else switch(m){case"table:table":b||(a={name:s(h,"table:name")??`Sheet ${r.length+1}`,rows:[],width:0,figures:[],rowIndex:0})
|
|
377
|
+
break
|
|
378
|
+
case"table:table-row":{const e=Math.max(1,Number(s(h,"table:number-rows-repeated")??1)||1)
|
|
379
|
+
b?a&&(a.rowIndex+=e):i={cells:[],col:0,repeat:e}
|
|
380
|
+
break}case"table:table-cell":case"table:covered-table-cell":if(!i)break
|
|
381
|
+
c={parts:[],repeat:Math.max(1,Number(s(h,"table:number-columns-repeated")??1)||1),value:s(h,"office:value")??s(h,"office:date-value")??s(h,"office:time-value")??s(h,"office:boolean-value")??s(h,"office:string-value"),formula:s(h,"table:formula")},b&&g()
|
|
382
|
+
break
|
|
383
|
+
case"text:p":c&&!b&&(c.parts.length&&c.parts.push(" "),p=!0)
|
|
384
|
+
break
|
|
385
|
+
case"text:s":case"text:tab":case"text:line-break":c&&p&&c.parts.push(" ")
|
|
386
|
+
break
|
|
387
|
+
case"draw:frame":b||(l={name:s(h,"draw:name")})
|
|
388
|
+
break
|
|
389
|
+
case"draw:image":l&&(l.image=!0)
|
|
390
|
+
break
|
|
391
|
+
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(h,"xlink:href"))
|
|
392
|
+
break
|
|
393
|
+
case"svg:title":case"svg:desc":!b&&l&&(u="svg:title"===m?"title":"desc")}}return{sheets:r,truncated:n}}function T(e,t=new Map){const r=[]
|
|
394
|
+
let n=null
|
|
395
|
+
const a=new L
|
|
396
|
+
let i=0,c=0,l=null,u=null
|
|
397
|
+
for(const d of e.matchAll(A)){const[,e,p,f,m,h]=d
|
|
398
|
+
if(void 0===h){if(F.has(p))m||(c+=e?-1:1)
|
|
399
|
+
else if(!c)if(e)switch(p){case"svg:title":case"svg:desc":u=null
|
|
400
|
+
break
|
|
401
|
+
case"text:p":case"text:h":{const e=a.close()
|
|
402
|
+
!e?.plain||!n||i&&/^<number>$/.test(e.plain)||(i?n.notes:n.lines).push(e.plain)
|
|
403
|
+
break}case"draw:frame":{const e=l?O(l,t):null
|
|
404
|
+
l=null,e&&n&&n.lines.push(e)
|
|
405
|
+
break}case"presentation:notes":i=Math.max(0,i-1)
|
|
406
|
+
break
|
|
407
|
+
case"draw:page":{if(!n)break
|
|
408
|
+
let e=`## Slide ${r.length+1}\n${n.lines.join("\n")||"(no text)"}`
|
|
409
|
+
n.notes.length&&(e+=`\n\nNotes:\n${n.notes.join("\n")}`),r.push(e),n=null
|
|
410
|
+
break}}else{if(y(p,f,a))continue
|
|
411
|
+
switch(p){case"draw:page":m||(n={lines:[],notes:[]})
|
|
412
|
+
break
|
|
413
|
+
case"presentation:notes":m||i++
|
|
414
|
+
break
|
|
415
|
+
case"text:p":case"text:h":m||a.open(0,!1)
|
|
416
|
+
break
|
|
417
|
+
case"draw:frame":m||i||(l={name:s(f,"draw:name")})
|
|
418
|
+
break
|
|
419
|
+
case"draw:image":l&&(l.image=!0)
|
|
420
|
+
break
|
|
421
|
+
case"draw:object":case"draw:object-ole":l&&(l.object=!0,l.href=s(f,"xlink:href"))
|
|
422
|
+
break
|
|
423
|
+
case"svg:title":case"svg:desc":!m&&l&&(u="svg:title"===p?"title":"desc")}}}else{if(c)continue
|
|
424
|
+
u&&l?l[u]=(l[u]??"")+o(h):a.push(o(h))}}return r}Object.defineProperty(exports,"__esModule",{value:!0}),exports.MAX_DOCUMENT_BYTES=void 0,exports.documentKindFor=function(e){const t=(0,I.formatFor)(e)
|
|
425
|
+
return t?.text?t.kind:void 0},exports.extractDocumentText=async function e(o,i,c={}){if(o.byteLength>exports.MAX_DOCUMENT_BYTES)throw new Error(`file is ${(o.byteLength/1048576).toFixed(1)} MB; text extraction stops at ${exports.MAX_DOCUMENT_BYTES/1048576} MB`)
|
|
426
|
+
const l=(0,I.formatOfKind)(i).textVia
|
|
427
|
+
if(l){if(!c.convert)throw new Error(`.${i} files are read by converting them in the office box, which is not reachable from here`)
|
|
428
|
+
const t=await e(await c.convert(o,i,l),l)
|
|
429
|
+
return{...t,kind:i,note:`Converted from .${i} to .${l} in the office box first. ${t.note??""}`.trim()}}switch(i){case"pdf":return async function(e){const r=await Promise.resolve().then(t.t.bind(t,88891,23)),{getDocumentProxy:n,extractText:o}=r?.default??r,s=await n(new Uint8Array(e),{isEvalSupported:!1})
|
|
430
|
+
try{const{totalPages:e,text:t}=await o(s,{mergePages:!1}),r=Array.isArray(t)?t:[t],n=r.map(((t,r)=>`--- page ${r+1} of ${e} ---\n${String(t).trim()}`)).join("\n\n"),a=r.every((e=>!String(e).trim()))
|
|
431
|
+
return{kind:"pdf",text:n,units:e,note:a?"No text layer (probably a scan). Use view_asset with this path to look at the pages.":"Text only. For tables, figures or layout, use view_asset with this path and the page numbers."}}finally{await(s.loadingTask?.destroy?.().catch?.((()=>{})))}}(o)
|
|
432
|
+
case"docx":return async function(e){const t=await r(e),o=await n(t,"word/document.xml")
|
|
433
|
+
if(!o)throw new Error("not a Word document (word/document.xml is missing)")
|
|
434
|
+
return{kind:"docx",text:f(o,await u(t,a(await n(t,"word/_rels/document.xml.rels"),"word"))),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; formatting is dropped. To see the pages, view_asset this path."}}(o)
|
|
435
|
+
case"xlsx":return async function(e){const t=await r(e),o=await n(t,"xl/workbook.xml")
|
|
436
|
+
if(!o)throw new Error("not an Excel workbook (xl/workbook.xml is missing)")
|
|
437
|
+
const i=a(await n(t,"xl/_rels/workbook.xml.rels"),"xl"),c=h(await n(t,"xl/sharedStrings.xml")),l=[]
|
|
438
|
+
let u=!1,d=0
|
|
439
|
+
for(const e of o.matchAll(/<sheet\b([^>]*)\/?>/g)){const r=s(e[1],"name")??`Sheet ${d+1}`,o=s(e[1],"r:id"),a=o?i.get(o):void 0,p=a?await n(t,a):void 0
|
|
440
|
+
if(d++,!p){l.push(`## Sheet: ${r}\n(empty)`)
|
|
441
|
+
continue}const{text:f,truncated:h}=g(p,c)
|
|
442
|
+
u=u||h
|
|
443
|
+
const b=await m(t,a)
|
|
444
|
+
l.push(`## Sheet: ${r}\n${f||"(empty)"}${b.length?`\n\n${b.join("\n")}`:""}`)}return{kind:"xlsx",text:l.join("\n\n"),units:d,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its last computed value followed by (=formula). Charts and pictures are listed under their sheet. Dates show as numbers."+(u?` Sheets over ${C} rows are cut off.`:"")}}(o)
|
|
445
|
+
case"pptx":return async function(e){const t=await r(e),o=await n(t,"ppt/presentation.xml")
|
|
446
|
+
if(!o)throw new Error("not a PowerPoint deck (ppt/presentation.xml is missing)")
|
|
447
|
+
const i=a(await n(t,"ppt/_rels/presentation.xml.rels"),"ppt")
|
|
448
|
+
let c=[...o.matchAll(/<p:sldId\b([^>]*)\/?>/g)].map((e=>{const t=s(e[1],"r:id")
|
|
449
|
+
return t?i.get(t):void 0})).filter((e=>!!e))
|
|
450
|
+
c.length||(c=Object.keys(t.files).filter((e=>/^ppt\/slides\/slide\d+\.xml$/.test(e))).sort(((e,t)=>Number(/(\d+)\.xml$/.exec(e)[1])-Number(/(\d+)\.xml$/.exec(t)[1]))))
|
|
451
|
+
const l=[]
|
|
452
|
+
for(let e=0;e<c.length;e++){const r=c[e],o=await n(t,r),s=o?k(o):[],i=r.slice(0,r.lastIndexOf("/")),d=r.slice(r.lastIndexOf("/")+1),p=a(await n(t,`${i}/_rels/${d}.rels`),i)
|
|
453
|
+
o&&s.push(..._(o,await u(t,p)))
|
|
454
|
+
const f=[...p.values()].find((e=>/notesSlide\d*\.xml$/.test(e))),m=f?await n(t,f):void 0,h=m?k(m).filter((e=>!/^(\d+|<number>)$/.test(e))):[]
|
|
455
|
+
let b=`## Slide ${e+1}\n${s.join("\n")||"(no text)"}`
|
|
456
|
+
h.length&&(b+=`\n\nNotes:\n${h.join("\n")}`),l.push(b)}return{kind:"pptx",text:l.join("\n\n"),units:c.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
|
|
457
|
+
case"odt":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.text","text document")
|
|
458
|
+
return{kind:"odt",text:M(t,r),note:"Text, headings, lists and tables; pictures show as [image: alt text] and charts as a one-line summary; notes, comments and formatting are dropped. To see the pages, view_asset this path."}}(o)
|
|
459
|
+
case"ods":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.spreadsheet","spreadsheet"),{sheets:n,truncated:o}=S(t,r)
|
|
460
|
+
return{kind:"ods",text:n.map((e=>`## Sheet: ${e.name}\n${e.text||"(empty)"}${e.figures.length?`\n\n${e.figures.join("\n")}`:""}`)).join("\n\n"),units:n.length,note:"Cell values as tab-separated rows (column letters in the header); a formula shows as its value followed by (=formula). Charts and pictures are listed under their sheet."+(o?` Sheets over ${C} rows are cut off.`:"")}}(o)
|
|
461
|
+
case"odp":return async function(e){const{xml:t,objects:r}=await v(e,"application/vnd.oasis.opendocument.presentation","presentation"),n=T(t,r)
|
|
462
|
+
return{kind:"odp",text:n.join("\n\n"),units:n.length,note:"Slide text and speaker notes; pictures show as [image: alt text] and charts as a one-line summary; layout is dropped. To see a slide, view_asset this path."}}(o)
|
|
463
|
+
case"rtf":return{kind:"rtf",text:(0,j.rtfToText)(o),note:"Text, paragraphs and table rows; styling, pictures and layout are dropped. To see the pages, view_asset this path."}
|
|
464
|
+
default:throw new Error(`no text form for .${i}`)}},exports.decodeXml=o,exports.figureMarker=l,exports.chartXmlSummary=d,exports.stripElementPrefixes=p,exports.docxXmlToText=f,exports.parseSharedStrings=h,exports.sheetXmlToText=g,exports.slideFigures=_,exports.drawingMlParagraphs=k,exports.odfChartSummary=E,exports.odfFormula=$,exports.odtXmlToText=M,exports.odsXmlToText=S,exports.odpXmlToText=T
|
|
465
|
+
const I=t(70610),j=t(50478)
|
|
466
|
+
exports.MAX_DOCUMENT_BYTES=52428800
|
|
467
|
+
const C=5e3,P={barChart:"bar",bar3DChart:"bar",lineChart:"line",line3DChart:"line",pieChart:"pie",pie3DChart:"pie",ofPieChart:"pie",doughnutChart:"doughnut",areaChart:"area",area3DChart:"area",scatterChart:"scatter",radarChart:"radar",bubbleChart:"bubble",stockChart:"stock",surfaceChart:"surface",surface3DChart:"surface"},A=/<(\/?)([A-Za-z][\w.-]*:[\w.-]+)\b([^>]*?)(\/?)>|([^<]+)/g,F=new Set(["text:note","office:annotation","text:tracked-changes","office:forms","text:sequence-decls"]),R=256,D=50,N={circle:"pie",ring:"doughnut"}
|
|
468
|
+
class L{constructor(){this.stack=[]}open(e,t){this.stack.push({parts:[],heading:e,listed:t})}get current(){return this.stack[this.stack.length-1]}push(e){this.current?.parts.push(e)}pushSpaced(e){const t=this.current?.parts
|
|
469
|
+
if(!t)return
|
|
470
|
+
const r=t[t.length-1]??""
|
|
471
|
+
t.push(`${!r||/\s$/.test(r)?"":" "}${e} `)}close(){const e=this.stack.pop()
|
|
472
|
+
if(!e)return null
|
|
473
|
+
const t=e.parts.join("").replace(/[ \t]+\n/g,"\n").trim()
|
|
474
|
+
return this.current?(t&&this.pushSpaced(t),null):{plain:t,line:t?e.heading?`${"#".repeat(Math.min(6,e.heading))} ${t}`:e.listed?`- ${t}`:t:""}}}}},o={}
|
|
475
|
+
e.c=o,r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,e.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n
|
|
476
|
+
if("object"==typeof n&&n){if(4&o&&n.__esModule)return n
|
|
477
|
+
if(16&o&&"function"==typeof n.then)return n}var s=Object.create(null)
|
|
478
|
+
e.r(s)
|
|
479
|
+
var a={}
|
|
480
|
+
t=t||[null,r({}),r([]),r(r)]
|
|
481
|
+
for(var i=2&o&&n;"object"==typeof i&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>n[e]))
|
|
482
|
+
return a.default=()=>n,e.d(s,a),s},e.d=(exports,t)=>{for(var r in t)e.o(t,r)&&!e.o(exports,r)&&Object.defineProperty(exports,r,{enumerable:!0,get:t[r]})},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=exports=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},e.nmd=module=>(module.paths=[],module.children||(module.children=[]),module)
|
|
483
|
+
var s=e(e.s=15845)
|
|
484
|
+
module.exports=s})()
|