@deckflow/deckuse 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.es.md +342 -0
  2. package/README.fr.md +342 -0
  3. package/README.ja.md +342 -0
  4. package/README.ko.md +342 -0
  5. package/README.md +46 -8
  6. package/README.pt-BR.md +342 -0
  7. package/README.ru.md +342 -0
  8. package/README.zh-CN.md +367 -0
  9. package/assets/default.docx +0 -0
  10. package/assets/default.pptx +0 -0
  11. package/dist/bin.js +183 -19
  12. package/dist/bin.js.map +1 -1
  13. package/dist/core/adapter.d.ts +24 -0
  14. package/dist/core/adapter.d.ts.map +1 -0
  15. package/dist/core/adapter.js +20 -0
  16. package/dist/core/adapter.js.map +1 -0
  17. package/dist/core/executor.d.ts +24 -0
  18. package/dist/core/executor.d.ts.map +1 -0
  19. package/dist/core/executor.js +65 -0
  20. package/dist/core/executor.js.map +1 -0
  21. package/dist/core/index.d.ts +7 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/index.js +7 -0
  24. package/dist/core/index.js.map +1 -0
  25. package/dist/core/length.d.ts +27 -0
  26. package/dist/core/length.d.ts.map +1 -0
  27. package/dist/core/length.js +63 -0
  28. package/dist/core/length.js.map +1 -0
  29. package/dist/core/measure.d.ts +24 -0
  30. package/dist/core/measure.d.ts.map +1 -0
  31. package/dist/core/measure.js +79 -0
  32. package/dist/core/measure.js.map +1 -0
  33. package/dist/core/not-implemented.d.ts +3 -0
  34. package/dist/core/not-implemented.d.ts.map +1 -0
  35. package/dist/core/not-implemented.js +12 -0
  36. package/dist/core/not-implemented.js.map +1 -0
  37. package/dist/core/schema.d.ts +3035 -0
  38. package/dist/core/schema.d.ts.map +1 -0
  39. package/dist/core/schema.js +798 -0
  40. package/dist/core/schema.js.map +1 -0
  41. package/dist/default-template.d.ts +8 -0
  42. package/dist/default-template.d.ts.map +1 -0
  43. package/dist/default-template.js +29 -0
  44. package/dist/default-template.js.map +1 -0
  45. package/dist/docx/adapter.d.ts +29 -0
  46. package/dist/docx/adapter.d.ts.map +1 -0
  47. package/dist/docx/adapter.js +442 -0
  48. package/dist/docx/adapter.js.map +1 -0
  49. package/dist/docx/addressing.d.ts +18 -0
  50. package/dist/docx/addressing.d.ts.map +1 -0
  51. package/dist/docx/addressing.js +111 -0
  52. package/dist/docx/addressing.js.map +1 -0
  53. package/dist/docx/blank.d.ts +4 -0
  54. package/dist/docx/blank.d.ts.map +1 -0
  55. package/dist/docx/blank.js +75 -0
  56. package/dist/docx/blank.js.map +1 -0
  57. package/dist/docx/index-sync.d.ts +7 -0
  58. package/dist/docx/index-sync.d.ts.map +1 -0
  59. package/dist/docx/index-sync.js +24 -0
  60. package/dist/docx/index-sync.js.map +1 -0
  61. package/dist/docx/index.d.ts +5 -0
  62. package/dist/docx/index.d.ts.map +1 -0
  63. package/dist/docx/index.js +4 -0
  64. package/dist/docx/index.js.map +1 -0
  65. package/dist/docx/indexer.d.ts +41 -0
  66. package/dist/docx/indexer.d.ts.map +1 -0
  67. package/dist/docx/indexer.js +353 -0
  68. package/dist/docx/indexer.js.map +1 -0
  69. package/dist/docx/mutations.d.ts +5 -0
  70. package/dist/docx/mutations.d.ts.map +1 -0
  71. package/dist/docx/mutations.js +311 -0
  72. package/dist/docx/mutations.js.map +1 -0
  73. package/dist/docx/paragraphs.d.ts +26 -0
  74. package/dist/docx/paragraphs.d.ts.map +1 -0
  75. package/dist/docx/paragraphs.js +314 -0
  76. package/dist/docx/paragraphs.js.map +1 -0
  77. package/dist/docx/properties.d.ts +23 -0
  78. package/dist/docx/properties.d.ts.map +1 -0
  79. package/dist/docx/properties.js +414 -0
  80. package/dist/docx/properties.js.map +1 -0
  81. package/dist/docx/tables.d.ts +4 -0
  82. package/dist/docx/tables.d.ts.map +1 -0
  83. package/dist/docx/tables.js +64 -0
  84. package/dist/docx/tables.js.map +1 -0
  85. package/dist/docx/text-spans.d.ts +25 -0
  86. package/dist/docx/text-spans.d.ts.map +1 -0
  87. package/dist/docx/text-spans.js +142 -0
  88. package/dist/docx/text-spans.js.map +1 -0
  89. package/dist/docx/types.d.ts +27 -0
  90. package/dist/docx/types.d.ts.map +1 -0
  91. package/dist/docx/types.js +2 -0
  92. package/dist/docx/types.js.map +1 -0
  93. package/dist/docx/workspace.d.ts +20 -0
  94. package/dist/docx/workspace.d.ts.map +1 -0
  95. package/dist/docx/workspace.js +145 -0
  96. package/dist/docx/workspace.js.map +1 -0
  97. package/dist/docx/xml.d.ts +18 -0
  98. package/dist/docx/xml.d.ts.map +1 -0
  99. package/dist/docx/xml.js +87 -0
  100. package/dist/docx/xml.js.map +1 -0
  101. package/dist/edition-config/index.d.ts +25 -0
  102. package/dist/edition-config/index.d.ts.map +1 -0
  103. package/dist/edition-config/index.js +22 -0
  104. package/dist/edition-config/index.js.map +1 -0
  105. package/dist/edition.d.ts +2 -2
  106. package/dist/edition.d.ts.map +1 -1
  107. package/dist/edition.js +1 -1
  108. package/dist/edition.js.map +1 -1
  109. package/dist/help.d.ts.map +1 -1
  110. package/dist/help.js +124 -32
  111. package/dist/help.js.map +1 -1
  112. package/dist/index.d.ts +1 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +6 -6
  115. package/dist/index.js.map +1 -1
  116. package/dist/key/index.d.ts +2 -0
  117. package/dist/key/index.d.ts.map +1 -0
  118. package/dist/key/index.js +3 -0
  119. package/dist/key/index.js.map +1 -0
  120. package/dist/monitor-daemon.d.ts +21 -8
  121. package/dist/monitor-daemon.d.ts.map +1 -1
  122. package/dist/monitor-daemon.js +189 -51
  123. package/dist/monitor-daemon.js.map +1 -1
  124. package/dist/monitor-registry.d.ts +34 -0
  125. package/dist/monitor-registry.d.ts.map +1 -0
  126. package/dist/monitor-registry.js +191 -0
  127. package/dist/monitor-registry.js.map +1 -0
  128. package/dist/monitor.js +1 -1
  129. package/dist/monitor.js.map +1 -1
  130. package/dist/numbers/index.d.ts +2 -0
  131. package/dist/numbers/index.d.ts.map +1 -0
  132. package/dist/numbers/index.js +3 -0
  133. package/dist/numbers/index.js.map +1 -0
  134. package/dist/opc/index.d.ts +90 -0
  135. package/dist/opc/index.d.ts.map +1 -0
  136. package/dist/opc/index.js +569 -0
  137. package/dist/opc/index.js.map +1 -0
  138. package/dist/pptx/adapter.d.ts +167 -0
  139. package/dist/pptx/adapter.d.ts.map +1 -0
  140. package/dist/pptx/adapter.js +807 -0
  141. package/dist/pptx/adapter.js.map +1 -0
  142. package/dist/pptx/addressing.d.ts +45 -0
  143. package/dist/pptx/addressing.d.ts.map +1 -0
  144. package/dist/pptx/addressing.js +428 -0
  145. package/dist/pptx/addressing.js.map +1 -0
  146. package/dist/pptx/align.d.ts +24 -0
  147. package/dist/pptx/align.d.ts.map +1 -0
  148. package/dist/pptx/align.js +112 -0
  149. package/dist/pptx/align.js.map +1 -0
  150. package/dist/pptx/chart-classify.d.ts +10 -0
  151. package/dist/pptx/chart-classify.d.ts.map +1 -0
  152. package/dist/pptx/chart-classify.js +58 -0
  153. package/dist/pptx/chart-classify.js.map +1 -0
  154. package/dist/pptx/chart.d.ts +42 -0
  155. package/dist/pptx/chart.d.ts.map +1 -0
  156. package/dist/pptx/chart.js +614 -0
  157. package/dist/pptx/chart.js.map +1 -0
  158. package/dist/pptx/edition-extension.d.ts +25 -0
  159. package/dist/pptx/edition-extension.d.ts.map +1 -0
  160. package/dist/pptx/edition-extension.js +10 -0
  161. package/dist/pptx/edition-extension.js.map +1 -0
  162. package/dist/pptx/edition.d.ts +20 -0
  163. package/dist/pptx/edition.d.ts.map +1 -0
  164. package/dist/pptx/edition.js +69 -0
  165. package/dist/pptx/edition.js.map +1 -0
  166. package/dist/pptx/elements.d.ts +12 -0
  167. package/dist/pptx/elements.d.ts.map +1 -0
  168. package/dist/pptx/elements.js +224 -0
  169. package/dist/pptx/elements.js.map +1 -0
  170. package/dist/pptx/hyperlink.d.ts +7 -0
  171. package/dist/pptx/hyperlink.d.ts.map +1 -0
  172. package/dist/pptx/hyperlink.js +81 -0
  173. package/dist/pptx/hyperlink.js.map +1 -0
  174. package/dist/pptx/index-sync.d.ts +7 -0
  175. package/dist/pptx/index-sync.d.ts.map +1 -0
  176. package/dist/pptx/index-sync.js +24 -0
  177. package/dist/pptx/index-sync.js.map +1 -0
  178. package/dist/pptx/index.d.ts +10 -0
  179. package/dist/pptx/index.d.ts.map +1 -0
  180. package/dist/pptx/index.js +7 -0
  181. package/dist/pptx/index.js.map +1 -0
  182. package/dist/pptx/indexer.d.ts +19 -0
  183. package/dist/pptx/indexer.d.ts.map +1 -0
  184. package/dist/pptx/indexer.js +319 -0
  185. package/dist/pptx/indexer.js.map +1 -0
  186. package/dist/pptx/layout-ref.d.ts +41 -0
  187. package/dist/pptx/layout-ref.d.ts.map +1 -0
  188. package/dist/pptx/layout-ref.js +145 -0
  189. package/dist/pptx/layout-ref.js.map +1 -0
  190. package/dist/pptx/media.d.ts +15 -0
  191. package/dist/pptx/media.d.ts.map +1 -0
  192. package/dist/pptx/media.js +145 -0
  193. package/dist/pptx/media.js.map +1 -0
  194. package/dist/pptx/mutations.d.ts +11 -0
  195. package/dist/pptx/mutations.d.ts.map +1 -0
  196. package/dist/pptx/mutations.js +1111 -0
  197. package/dist/pptx/mutations.js.map +1 -0
  198. package/dist/pptx/picture.d.ts +25 -0
  199. package/dist/pptx/picture.d.ts.map +1 -0
  200. package/dist/pptx/picture.js +118 -0
  201. package/dist/pptx/picture.js.map +1 -0
  202. package/dist/pptx/placeholder-role.d.ts +19 -0
  203. package/dist/pptx/placeholder-role.d.ts.map +1 -0
  204. package/dist/pptx/placeholder-role.js +71 -0
  205. package/dist/pptx/placeholder-role.js.map +1 -0
  206. package/dist/pptx/properties.d.ts +13 -0
  207. package/dist/pptx/properties.d.ts.map +1 -0
  208. package/dist/pptx/properties.js +587 -0
  209. package/dist/pptx/properties.js.map +1 -0
  210. package/dist/pptx/resolve-properties.d.ts +17 -0
  211. package/dist/pptx/resolve-properties.d.ts.map +1 -0
  212. package/dist/pptx/resolve-properties.js +571 -0
  213. package/dist/pptx/resolve-properties.js.map +1 -0
  214. package/dist/pptx/slide-size.d.ts +9 -0
  215. package/dist/pptx/slide-size.d.ts.map +1 -0
  216. package/dist/pptx/slide-size.js +29 -0
  217. package/dist/pptx/slide-size.js.map +1 -0
  218. package/dist/pptx/slides.d.ts +15 -0
  219. package/dist/pptx/slides.d.ts.map +1 -0
  220. package/dist/pptx/slides.js +236 -0
  221. package/dist/pptx/slides.js.map +1 -0
  222. package/dist/pptx/table-measure.d.ts +43 -0
  223. package/dist/pptx/table-measure.d.ts.map +1 -0
  224. package/dist/pptx/table-measure.js +70 -0
  225. package/dist/pptx/table-measure.js.map +1 -0
  226. package/dist/pptx/table.d.ts +23 -0
  227. package/dist/pptx/table.d.ts.map +1 -0
  228. package/dist/pptx/table.js +529 -0
  229. package/dist/pptx/table.js.map +1 -0
  230. package/dist/pptx/types.d.ts +27 -0
  231. package/dist/pptx/types.d.ts.map +1 -0
  232. package/dist/pptx/types.js +2 -0
  233. package/dist/pptx/types.js.map +1 -0
  234. package/dist/pptx/workspace.d.ts +23 -0
  235. package/dist/pptx/workspace.d.ts.map +1 -0
  236. package/dist/pptx/workspace.js +148 -0
  237. package/dist/pptx/workspace.js.map +1 -0
  238. package/dist/pptx/xml.d.ts +67 -0
  239. package/dist/pptx/xml.d.ts.map +1 -0
  240. package/dist/pptx/xml.js +355 -0
  241. package/dist/pptx/xml.js.map +1 -0
  242. package/dist/render.d.ts.map +1 -1
  243. package/dist/render.js +14 -2
  244. package/dist/render.js.map +1 -1
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.js +1 -1
  247. package/dist/workspace/git.d.ts +7 -0
  248. package/dist/workspace/git.d.ts.map +1 -0
  249. package/dist/workspace/git.js +82 -0
  250. package/dist/workspace/git.js.map +1 -0
  251. package/dist/workspace/index.d.ts +7 -0
  252. package/dist/workspace/index.d.ts.map +1 -0
  253. package/dist/workspace/index.js +7 -0
  254. package/dist/workspace/index.js.map +1 -0
  255. package/dist/workspace/lock.d.ts +3 -0
  256. package/dist/workspace/lock.d.ts.map +1 -0
  257. package/dist/workspace/lock.js +35 -0
  258. package/dist/workspace/lock.js.map +1 -0
  259. package/dist/workspace/metadata.d.ts +4 -0
  260. package/dist/workspace/metadata.d.ts.map +1 -0
  261. package/dist/workspace/metadata.js +21 -0
  262. package/dist/workspace/metadata.js.map +1 -0
  263. package/dist/workspace/operations.d.ts +14 -0
  264. package/dist/workspace/operations.d.ts.map +1 -0
  265. package/dist/workspace/operations.js +35 -0
  266. package/dist/workspace/operations.js.map +1 -0
  267. package/dist/workspace/paths.d.ts +11 -0
  268. package/dist/workspace/paths.d.ts.map +1 -0
  269. package/dist/workspace/paths.js +12 -0
  270. package/dist/workspace/paths.js.map +1 -0
  271. package/dist/workspace/revision.d.ts +6 -0
  272. package/dist/workspace/revision.d.ts.map +1 -0
  273. package/dist/workspace/revision.js +15 -0
  274. package/dist/workspace/revision.js.map +1 -0
  275. package/dist/xlsx/index.d.ts +2 -0
  276. package/dist/xlsx/index.d.ts.map +1 -0
  277. package/dist/xlsx/index.js +3 -0
  278. package/dist/xlsx/index.js.map +1 -0
  279. package/package.json +48 -27
  280. package/schema/command.schema.json +2399 -0
  281. package/dist/.tsbuildinfo +0 -1
@@ -0,0 +1,569 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { dirname, posix, resolve } from 'node:path';
4
+ import { DOMParser, XMLSerializer } from '@xmldom/xmldom';
5
+ import { Uint8ArrayReader, Uint8ArrayWriter, ZipReader, ZipWriter } from '@zip.js/zip.js';
6
+ export const DEFAULT_OPC_LIMITS = {
7
+ maxEntries: 10_000,
8
+ maxEntrySize: 1024 * 1024 * 1024,
9
+ maxTotalSize: 4 * 1024 * 1024 * 1024,
10
+ };
11
+ const decoder = new TextDecoder();
12
+ const encoder = new TextEncoder();
13
+ const XML_DANGEROUS = /<!DOCTYPE|<!ENTITY/i;
14
+ /**
15
+ * Decode OPC XML part bytes. OOXML allows UTF-8 or UTF-16; many real-world
16
+ * PPTX files ship almost every part as UTF-16 BE/LE with a BOM.
17
+ */
18
+ export const decodeXmlBytes = (data) => {
19
+ if (data.length >= 2) {
20
+ const b0 = data[0];
21
+ const b1 = data[1];
22
+ // UTF-16 BE BOM
23
+ if (b0 === 0xfe && b1 === 0xff)
24
+ return new TextDecoder('utf-16be').decode(data);
25
+ // UTF-16 LE BOM (UTF-32 LE also starts FF FE, but OOXML does not use it)
26
+ if (b0 === 0xff && b1 === 0xfe)
27
+ return new TextDecoder('utf-16le').decode(data);
28
+ }
29
+ return decoder.decode(data);
30
+ };
31
+ /** After decoding to a JS string, drop a leading U+FEFF so parsers see the decl. */
32
+ const stripBomChar = (xml) => (xml.charCodeAt(0) === 0xfeff ? xml.slice(1) : xml);
33
+ /**
34
+ * Bytes we emit are always UTF-8; rewrite a stale encoding= in the XML decl.
35
+ */
36
+ const withUtf8EncodingDecl = (xml) => xml.replace(/^(\s*<\?xml\b[^?]*?)\bencoding\s*=\s*(['"])[^'"]*\2/i, `$1encoding=$2UTF-8$2`);
37
+ export const normalizePartName = (name) => {
38
+ if (name.includes('\0'))
39
+ throw new Error('OPC part name contains NUL');
40
+ const slash = name.replaceAll(/\\+/g, '/');
41
+ const segments = slash.split('/');
42
+ if (segments.some((segment) => segment === '..'))
43
+ throw new Error('OPC part name cannot escape package root');
44
+ return `/${segments.filter((segment) => segment && segment !== '.').join('/')}`;
45
+ };
46
+ /**
47
+ * True if any part path in `parts` matches `name` ignoring case.
48
+ * Prefer this free function over `archive.hasPartIgnoreCase` when allocating
49
+ * media names — it only needs a `parts` map, so it stays safe across opc
50
+ * package versions that predate the instance method (npm pptx@1.2.x + opc@1.1.0).
51
+ */
52
+ export const partExistsIgnoreCase = (parts, name) => {
53
+ const needle = normalizePartName(name).toLowerCase();
54
+ for (const key of parts.keys()) {
55
+ if (key.toLowerCase() === needle)
56
+ return true;
57
+ }
58
+ return false;
59
+ };
60
+ export const parseXml = (input) => {
61
+ const xml = stripBomChar(typeof input === 'string' ? input : decodeXmlBytes(input));
62
+ if (XML_DANGEROUS.test(xml))
63
+ throw new Error('XML DTD and entities are not allowed');
64
+ let error = '';
65
+ const document = new DOMParser({
66
+ errorHandler: (level, message) => {
67
+ if (level !== 'warning')
68
+ error ||= message;
69
+ },
70
+ }).parseFromString(xml, 'application/xml');
71
+ if (error || document.getElementsByTagName('parsererror').length)
72
+ throw new Error(`Invalid XML: ${error || 'parser error'}`);
73
+ if (!document.documentElement)
74
+ throw new Error('Invalid XML: missing document element');
75
+ return document;
76
+ };
77
+ /**
78
+ * True for OPC parts that are XML text and safe to pretty-print.
79
+ *
80
+ * IMPORTANT: do not use `mediaType.includes('xml')` — every
81
+ * `application/vnd.openxmlformats-...` type contains that substring, including
82
+ * binary containers like `.xlsx` embeddings (`spreadsheetml.sheet`). Pretty-
83
+ * printing those corrupts the ZIP and makes PowerPoint demand a repair.
84
+ */
85
+ const isXmlPart = (part) => {
86
+ const name = part.name.toLowerCase();
87
+ if (name.endsWith('.xml') || name.endsWith('.rels'))
88
+ return true;
89
+ // Nested Office packages and other binaries under embeddings/media.
90
+ if (name.endsWith('.xlsx') ||
91
+ name.endsWith('.xlsm') ||
92
+ name.endsWith('.docx') ||
93
+ name.endsWith('.pptx') ||
94
+ name.endsWith('.bin') ||
95
+ name.includes('/embeddings/') ||
96
+ name.includes('/media/'))
97
+ return false;
98
+ const mt = part.mediaType.toLowerCase();
99
+ return mt === 'application/xml' || mt === 'text/xml' || mt.endsWith('+xml');
100
+ };
101
+ /**
102
+ * Pretty-print XML for readable git diffs without changing the infoset.
103
+ *
104
+ * Rules:
105
+ * - Never inject or strip character data inside text nodes (e.g. `a:t`).
106
+ * - Elements with direct text / mixed content stay on one line (exact join).
107
+ * - Empty or whitespace-only text elements stay inline (`<a:t> </a:t>` preserved).
108
+ * - Only element-only children get newline + indent; inter-element whitespace is dropped.
109
+ */
110
+ export const prettyPrintXml = (source) => {
111
+ const trimmed = source.trim();
112
+ if (!trimmed)
113
+ return '\n';
114
+ const tokens = trimmed.match(/<[^>]+>|[^<]+/g);
115
+ if (!tokens)
116
+ return `${trimmed}\n`;
117
+ const isClose = (t) => t.startsWith('</');
118
+ const isPiOrDecl = (t) => t.startsWith('<?') || t.startsWith('<!');
119
+ const isSelfClosing = (t) => /^<[^!?/][^>]*\/>$/.test(t);
120
+ const isOpen = (t) => t.startsWith('<') && !isClose(t) && !isPiOrDecl(t) && !isSelfClosing(t);
121
+ const isText = (t) => !t.startsWith('<');
122
+ const isWsText = (t) => isText(t) && /^\s*$/.test(t);
123
+ const findClose = (openIdx) => {
124
+ let depth = 0;
125
+ for (let j = openIdx; j < tokens.length; j++) {
126
+ const t = tokens[j];
127
+ if (isOpen(t))
128
+ depth += 1;
129
+ else if (isClose(t)) {
130
+ depth -= 1;
131
+ if (depth === 0)
132
+ return j;
133
+ }
134
+ }
135
+ return -1;
136
+ };
137
+ /** Classify direct content of tokens[openIdx..closeIdx]. */
138
+ const classify = (openIdx, closeIdx) => {
139
+ let depth = 0;
140
+ let hasElement = false;
141
+ let hasSignificantText = false;
142
+ let hasWsOnlyText = false;
143
+ for (let j = openIdx + 1; j < closeIdx; j++) {
144
+ const t = tokens[j];
145
+ if (isOpen(t)) {
146
+ if (depth === 0)
147
+ hasElement = true;
148
+ depth += 1;
149
+ }
150
+ else if (isSelfClosing(t)) {
151
+ if (depth === 0)
152
+ hasElement = true;
153
+ }
154
+ else if (isClose(t)) {
155
+ depth -= 1;
156
+ }
157
+ else if (isText(t) && depth === 0) {
158
+ if (isWsText(t))
159
+ hasWsOnlyText = true;
160
+ else
161
+ hasSignificantText = true;
162
+ }
163
+ }
164
+ // Mixed content, leaf text, or ws-only text leaf: keep exact character data.
165
+ if (hasSignificantText || hasWsOnlyText)
166
+ return 'preserve';
167
+ if (hasElement)
168
+ return 'elements';
169
+ // Truly empty `<tag></tag>` — keep inline so we don't invent a text node.
170
+ return 'preserve';
171
+ };
172
+ const lines = [];
173
+ const emitElement = (openIdx, closeIdx, indent) => {
174
+ const pad = ' '.repeat(indent);
175
+ const open = tokens[openIdx];
176
+ const close = tokens[closeIdx];
177
+ if (classify(openIdx, closeIdx) === 'preserve') {
178
+ lines.push(`${pad}${tokens.slice(openIdx, closeIdx + 1).join('')}`);
179
+ return;
180
+ }
181
+ lines.push(`${pad}${open}`);
182
+ let j = openIdx + 1;
183
+ while (j < closeIdx) {
184
+ const t = tokens[j];
185
+ if (isWsText(t)) {
186
+ j += 1;
187
+ continue;
188
+ }
189
+ if (isPiOrDecl(t) || isSelfClosing(t)) {
190
+ lines.push(`${' '.repeat(indent + 1)}${t}`);
191
+ j += 1;
192
+ continue;
193
+ }
194
+ if (isOpen(t)) {
195
+ const childClose = findClose(j);
196
+ if (childClose === -1 || childClose > closeIdx) {
197
+ lines.push(`${' '.repeat(indent + 1)}${t}`);
198
+ j += 1;
199
+ continue;
200
+ }
201
+ emitElement(j, childClose, indent + 1);
202
+ j = childClose + 1;
203
+ continue;
204
+ }
205
+ // Unexpected token inside element-only content — preserve without indent injection.
206
+ if (isText(t)) {
207
+ lines.push(t);
208
+ j += 1;
209
+ continue;
210
+ }
211
+ j += 1;
212
+ }
213
+ lines.push(`${pad}${close}`);
214
+ };
215
+ let i = 0;
216
+ while (i < tokens.length) {
217
+ const token = tokens[i];
218
+ if (isPiOrDecl(token) || isSelfClosing(token)) {
219
+ lines.push(token);
220
+ i += 1;
221
+ continue;
222
+ }
223
+ if (isOpen(token)) {
224
+ const closeIdx = findClose(i);
225
+ if (closeIdx === -1) {
226
+ lines.push(token);
227
+ i += 1;
228
+ continue;
229
+ }
230
+ emitElement(i, closeIdx, 0);
231
+ i = closeIdx + 1;
232
+ continue;
233
+ }
234
+ if (isText(token)) {
235
+ if (!isWsText(token))
236
+ lines.push(token);
237
+ i += 1;
238
+ continue;
239
+ }
240
+ if (isClose(token)) {
241
+ lines.push(token);
242
+ i += 1;
243
+ continue;
244
+ }
245
+ i += 1;
246
+ }
247
+ return `${lines.join('\n')}\n`;
248
+ };
249
+ export const formatXmlBytes = (data) => {
250
+ try {
251
+ return encoder.encode(withUtf8EncodingDecl(prettyPrintXml(stripBomChar(decodeXmlBytes(data)))));
252
+ }
253
+ catch {
254
+ return data;
255
+ }
256
+ };
257
+ export const serializeXml = (document) => formatXmlBytes(encoder.encode(new XMLSerializer().serializeToString(document)));
258
+ export const relationshipPartName = (source) => {
259
+ if (source === '/')
260
+ return '/_rels/.rels';
261
+ const normalized = normalizePartName(source);
262
+ return `${posix.dirname(normalized)}/_rels/${posix.basename(normalized)}.rels`;
263
+ };
264
+ export const resolveRelationshipTarget = (source, target) => {
265
+ if (/^[a-z][a-z0-9+.-]*:/i.test(target))
266
+ return target;
267
+ const decoded = decodeURIComponent(target.split('#')[0] ?? target);
268
+ const base = source === '/' ? '/' : `${posix.dirname(normalizePartName(source))}/`;
269
+ return normalizePartName(posix.resolve(base, decoded));
270
+ };
271
+ const attr = (element, name) => element.getAttribute(name) ?? '';
272
+ export class OpcArchive {
273
+ parts = new Map();
274
+ relationships = new Map();
275
+ contentTypes = { defaults: new Map(), overrides: new Map() };
276
+ originalDigests = new Map();
277
+ static async openDirectory(path, limitsInput = {}) {
278
+ const limits = { ...DEFAULT_OPC_LIMITS, ...limitsInput };
279
+ const archive = new OpcArchive();
280
+ let total = 0;
281
+ const walk = async (dir, prefix = '') => {
282
+ for (const entry of await readdir(dir, { withFileTypes: true })) {
283
+ const relative = prefix ? `${prefix}/${entry.name}` : entry.name;
284
+ const absolute = resolve(dir, entry.name);
285
+ if (entry.isDirectory()) {
286
+ await walk(absolute, relative);
287
+ continue;
288
+ }
289
+ if (!entry.isFile())
290
+ continue;
291
+ if (archive.parts.size >= limits.maxEntries)
292
+ throw new Error(`OPC entry limit exceeded: ${String(archive.parts.size)}`);
293
+ const name = normalizePartName(`/${relative.replaceAll('\\', '/')}`);
294
+ if (archive.parts.has(name))
295
+ throw new Error(`Duplicate OPC entry: ${name}`);
296
+ const data = await readFile(absolute);
297
+ if (data.length > limits.maxEntrySize)
298
+ throw new Error(`OPC entry too large: ${name}`);
299
+ total += data.length;
300
+ if (total > limits.maxTotalSize)
301
+ throw new Error('OPC total uncompressed size limit exceeded');
302
+ archive.parts.set(name, { name, mediaType: 'application/octet-stream', data });
303
+ archive.originalDigests.set(name, createHash('sha256').update(data).digest('hex'));
304
+ }
305
+ };
306
+ await walk(resolve(path));
307
+ if (!archive.parts.size)
308
+ throw new Error('OPC directory is empty');
309
+ archive.loadMetadata();
310
+ return archive;
311
+ }
312
+ static async openFile(path, limits = {}) {
313
+ return OpcArchive.open(await readFile(path), limits);
314
+ }
315
+ static async open(bytes, limitsInput = {}) {
316
+ const limits = { ...DEFAULT_OPC_LIMITS, ...limitsInput };
317
+ const archive = new OpcArchive();
318
+ const reader = new ZipReader(new Uint8ArrayReader(bytes));
319
+ try {
320
+ const entries = await reader.getEntries();
321
+ if (entries.length > limits.maxEntries)
322
+ throw new Error(`ZIP entry limit exceeded: ${String(entries.length)}`);
323
+ let total = 0;
324
+ for (const entry of entries) {
325
+ if (entry.directory)
326
+ continue;
327
+ const name = normalizePartName(entry.filename);
328
+ if (name.slice(1) !== entry.filename.replaceAll('\\', '/'))
329
+ throw new Error(`Unsafe ZIP entry path: ${entry.filename}`);
330
+ if (archive.parts.has(name))
331
+ throw new Error(`Duplicate ZIP entry: ${name}`);
332
+ if (entry.uncompressedSize > limits.maxEntrySize)
333
+ throw new Error(`ZIP entry too large: ${name}`);
334
+ total += entry.uncompressedSize;
335
+ if (total > limits.maxTotalSize)
336
+ throw new Error('ZIP total uncompressed size limit exceeded');
337
+ const data = await entry.getData(new Uint8ArrayWriter());
338
+ if (data.length > limits.maxEntrySize)
339
+ throw new Error(`ZIP entry too large: ${name}`);
340
+ archive.parts.set(name, { name, mediaType: 'application/octet-stream', data });
341
+ archive.originalDigests.set(name, createHash('sha256').update(data).digest('hex'));
342
+ }
343
+ }
344
+ finally {
345
+ await reader.close();
346
+ }
347
+ archive.loadMetadata();
348
+ return archive;
349
+ }
350
+ loadMetadata() {
351
+ const ct = this.parts.get('/[Content_Types].xml');
352
+ if (!ct)
353
+ throw new Error('OPC package is missing [Content_Types].xml');
354
+ const ctDoc = parseXml(ct.data);
355
+ for (const node of Array.from(ctDoc.documentElement.childNodes)) {
356
+ if (node.nodeType !== 1)
357
+ continue;
358
+ const element = node;
359
+ if (element.localName === 'Default')
360
+ this.contentTypes.defaults.set(attr(element, 'Extension').toLowerCase(), attr(element, 'ContentType'));
361
+ if (element.localName === 'Override')
362
+ this.contentTypes.overrides.set(normalizePartName(attr(element, 'PartName')), attr(element, 'ContentType'));
363
+ }
364
+ for (const part of this.parts.values()) {
365
+ part.mediaType =
366
+ this.contentTypes.overrides.get(part.name) ??
367
+ this.contentTypes.defaults.get(posix.extname(part.name).slice(1).toLowerCase()) ??
368
+ 'application/octet-stream';
369
+ if (!part.name.endsWith('.rels'))
370
+ continue;
371
+ const source = part.name === '/_rels/.rels'
372
+ ? '/'
373
+ : normalizePartName(part.name.replace('/_rels/', '/').replace(/\.rels$/, ''));
374
+ const doc = parseXml(part.data);
375
+ const rels = [];
376
+ for (const node of Array.from(doc.documentElement.childNodes))
377
+ if (node.nodeType === 1) {
378
+ const element = node;
379
+ const external = attr(element, 'TargetMode').toLowerCase() === 'external';
380
+ const target = attr(element, 'Target');
381
+ rels.push({
382
+ id: attr(element, 'Id'),
383
+ type: attr(element, 'Type'),
384
+ target,
385
+ external,
386
+ ...(external ? {} : { resolvedTarget: resolveRelationshipTarget(source, target) }),
387
+ });
388
+ }
389
+ this.relationships.set(source, rels);
390
+ }
391
+ }
392
+ getPart(name) {
393
+ return this.parts.get(normalizePartName(name));
394
+ }
395
+ /**
396
+ * True if any part path matches `name` ignoring case.
397
+ * PPTX packages must stay portable to case-insensitive filesystems (macOS
398
+ * default); allocating `media1.mp4` beside `media1.MP4` makes PowerPoint
399
+ * prompt to repair when the ZIP entries collide on extract.
400
+ */
401
+ hasPartIgnoreCase(name) {
402
+ return partExistsIgnoreCase(this.parts, name);
403
+ }
404
+ readXml(name) {
405
+ const part = this.getPart(name);
406
+ if (!part)
407
+ throw new Error(`OPC part not found: ${name}`);
408
+ return parseXml(part.data);
409
+ }
410
+ writeXml(name, document, mediaType) {
411
+ const normalized = normalizePartName(name);
412
+ // Prefer an explicit type, then a recorded Override — never promote the
413
+ // extension Default (e.g. application/xml) into an Override via getPart().
414
+ const resolved = mediaType ?? this.contentTypes.overrides.get(normalized) ?? 'application/octet-stream';
415
+ this.setPart(normalized, serializeXml(document), resolved);
416
+ }
417
+ setPart(name, data, mediaType = 'application/octet-stream') {
418
+ const normalized = normalizePartName(name);
419
+ this.parts.set(normalized, { name: normalized, mediaType, data });
420
+ // Prefer Default Extension over per-part Override when they already match
421
+ // (e.g. .rels). Promoting Defaults into Overrides makes some Office builds
422
+ // treat the package as damaged.
423
+ const ext = posix.extname(normalized).slice(1).toLowerCase();
424
+ const byDefault = ext ? this.contentTypes.defaults.get(ext) : undefined;
425
+ if (mediaType === 'application/octet-stream') {
426
+ this.contentTypes.overrides.delete(normalized);
427
+ }
428
+ else if (byDefault === mediaType) {
429
+ this.contentTypes.overrides.delete(normalized);
430
+ }
431
+ else {
432
+ this.contentTypes.overrides.set(normalized, mediaType);
433
+ }
434
+ }
435
+ deletePart(name) {
436
+ const normalized = normalizePartName(name);
437
+ this.contentTypes.overrides.delete(normalized);
438
+ this.relationships.delete(normalized);
439
+ this.parts.delete(relationshipPartName(normalized));
440
+ return this.parts.delete(normalized);
441
+ }
442
+ originalDigest(name) {
443
+ return this.originalDigests.get(normalizePartName(name));
444
+ }
445
+ isUnmodified(name) {
446
+ const normalized = normalizePartName(name);
447
+ const original = this.originalDigests.get(normalized);
448
+ const part = this.parts.get(normalized);
449
+ return (original !== undefined &&
450
+ part !== undefined &&
451
+ createHash('sha256').update(part.data).digest('hex') === original);
452
+ }
453
+ getRelationships(source = '/') {
454
+ return this.relationships.get(normalizePartName(source)) ?? [];
455
+ }
456
+ setRelationships(source, relationships) {
457
+ const normalized = source === '/' ? '/' : normalizePartName(source);
458
+ this.relationships.set(normalized, [...relationships]);
459
+ const doc = parseXml('<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"/>');
460
+ for (const relationship of relationships) {
461
+ const element = doc.createElementNS(doc.documentElement.namespaceURI, 'Relationship');
462
+ element.setAttribute('Id', relationship.id);
463
+ element.setAttribute('Type', relationship.type);
464
+ element.setAttribute('Target', relationship.target);
465
+ if (relationship.external)
466
+ element.setAttribute('TargetMode', 'External');
467
+ doc.documentElement.appendChild(element);
468
+ }
469
+ this.setPart(relationshipPartName(normalized), serializeXml(doc), 'application/vnd.openxmlformats-package.relationships+xml');
470
+ }
471
+ syncContentTypes() {
472
+ const doc = parseXml('<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"/>');
473
+ for (const [extension, contentType] of [...this.contentTypes.defaults].sort()) {
474
+ const element = doc.createElementNS(doc.documentElement.namespaceURI, 'Default');
475
+ element.setAttribute('Extension', extension);
476
+ element.setAttribute('ContentType', contentType);
477
+ doc.documentElement.appendChild(element);
478
+ }
479
+ for (const [partName, contentType] of [...this.contentTypes.overrides].sort()) {
480
+ if (!this.parts.has(partName))
481
+ continue;
482
+ // Drop Overrides that duplicate an extension Default (common for .rels /
483
+ // .xml after relationship rewrites).
484
+ const ext = posix.extname(partName).slice(1).toLowerCase();
485
+ const byDefault = ext ? this.contentTypes.defaults.get(ext) : undefined;
486
+ if (byDefault === contentType) {
487
+ this.contentTypes.overrides.delete(partName);
488
+ continue;
489
+ }
490
+ const element = doc.createElementNS(doc.documentElement.namespaceURI, 'Override');
491
+ element.setAttribute('PartName', partName);
492
+ element.setAttribute('ContentType', contentType);
493
+ doc.documentElement.appendChild(element);
494
+ }
495
+ this.parts.set('/[Content_Types].xml', {
496
+ name: '/[Content_Types].xml',
497
+ mediaType: 'application/xml',
498
+ data: serializeXml(doc),
499
+ });
500
+ }
501
+ async toUint8Array() {
502
+ this.syncContentTypes();
503
+ const writer = new Uint8ArrayWriter();
504
+ const zip = new ZipWriter(writer, { bufferedWrite: true, keepOrder: true, level: 6 });
505
+ for (const part of this.parts.values())
506
+ await zip.add(part.name.slice(1), new Uint8ArrayReader(part.data));
507
+ return zip.close();
508
+ }
509
+ async writeDirectory(path, overwrite = false) {
510
+ const destination = resolve(path);
511
+ if (!overwrite) {
512
+ try {
513
+ await stat(destination);
514
+ throw new Error(`Destination exists: ${destination}`);
515
+ }
516
+ catch (error) {
517
+ if (error.code !== 'ENOENT')
518
+ throw error;
519
+ }
520
+ }
521
+ // Keep source/[Content_Types].xml in sync with in-memory overrides so the
522
+ // next openDirectory() does not fall back to Default Extension="xml".
523
+ this.syncContentTypes();
524
+ const temporary = `${destination}.${randomUUID()}.tmp`;
525
+ try {
526
+ for (const part of this.parts.values()) {
527
+ const file = resolve(temporary, part.name.slice(1));
528
+ await mkdir(dirname(file), { recursive: true });
529
+ const data = isXmlPart(part) ? formatXmlBytes(part.data) : part.data;
530
+ await writeFile(file, data);
531
+ }
532
+ await rm(destination, { recursive: true, force: true });
533
+ await rename(temporary, destination);
534
+ }
535
+ catch (error) {
536
+ await rm(temporary, { recursive: true, force: true });
537
+ throw error;
538
+ }
539
+ }
540
+ async writeFile(path, overwrite = false) {
541
+ const destination = resolve(path);
542
+ await mkdir(dirname(destination), { recursive: true });
543
+ if (!overwrite) {
544
+ try {
545
+ await readFile(destination);
546
+ throw new Error(`Destination exists: ${destination}`);
547
+ }
548
+ catch (error) {
549
+ if (error.code !== 'ENOENT')
550
+ throw error;
551
+ }
552
+ }
553
+ const temporary = `${destination}.${randomUUID()}.tmp`;
554
+ try {
555
+ await writeFile(temporary, await this.toUint8Array(), { flag: 'wx' });
556
+ await rename(temporary, destination);
557
+ }
558
+ catch (error) {
559
+ await rm(temporary, { force: true });
560
+ throw error;
561
+ }
562
+ }
563
+ }
564
+ export async function snapshotArchive(archive, outputPath) {
565
+ await archive.writeFile(outputPath, true);
566
+ const bytes = await readFile(resolve(outputPath));
567
+ return { checksum: createHash('sha256').update(bytes).digest('hex') };
568
+ }
569
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/opc/index.ts"],"names":[],"mappings":"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"}