ooxml.js 4.0.12 → 4.1.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.
@@ -1,389 +1,2 @@
1
- import { base64ToBytes } from "../../util/base64.js";
2
- import { attr, childrenWithTag, elementsWithTag, resolveRelationships, rootElement, textContent } from "../util.js";
3
- import { DocumentMetadataSchema, readCoreProperties } from "../shared/metadata.js";
4
- import { sniffImageFormat } from "../../image/sniff.js";
5
- import { drawingMlFontSizeToPt, emuToPt } from "../shared/units.js";
6
- import { applyGroupTransform, composeGroupTransform, composeShapeRotationDeg, readGroupXfrm, readSolidFillColor, readXfrm } from "../shared/drawingml.js";
7
- import { assignSourcePaths } from "../shared/source-path.js";
8
- import { readPlaceholderKey, readRunPropertiesFromElement, resolveDefaultRunProperties, resolvePlaceholderXfrm, resolveSlideInheritance } from "./inherit.js";
9
- import { readChartTable } from "./chart.js";
10
- import { readDiagramText } from "./diagram.js";
11
- import { z } from "zod";
12
- import { ContentSlideSchema, SLIDE_SIZE_WIDESCREEN } from "document-schema.js";
13
- //#region src/typed/pptx/read.ts
14
- const PptxDocumentSchema = z.object({
15
- metadata: DocumentMetadataSchema,
16
- slides: z.array(ContentSlideSchema)
17
- });
18
- const PRESENTATION_PATH = "ppt/presentation.xml";
19
- const TABLE_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
20
- const CHART_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart";
21
- const DIAGRAM_GRAPHIC_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram";
22
- const OLE_GRAPHIC_URI = "http://schemas.openxmlformats.org/presentationml/2006/ole";
23
- function readSlideSize(presentationRoot) {
24
- const sldSz = presentationRoot === void 0 ? void 0 : childrenWithTag(presentationRoot, "p:sldSz")[0];
25
- const cx = sldSz === void 0 ? void 0 : attr(sldSz, "cx");
26
- const cy = sldSz === void 0 ? void 0 : attr(sldSz, "cy");
27
- return cx === void 0 || cy === void 0 ? SLIDE_SIZE_WIDESCREEN : {
28
- widthPt: emuToPt(Number(cx)),
29
- heightPt: emuToPt(Number(cy))
30
- };
31
- }
32
- function readSlidePathsInOrder(pkg, presentationRoot) {
33
- if (presentationRoot === void 0) return [];
34
- const sldIdLst = childrenWithTag(presentationRoot, "p:sldIdLst")[0];
35
- if (sldIdLst === void 0) return [];
36
- const presentationRels = resolveRelationships(pkg, PRESENTATION_PATH);
37
- const paths = [];
38
- for (const sldId of childrenWithTag(sldIdLst, "p:sldId")) {
39
- const rId = attr(sldId, "r:id");
40
- const rel = rId === void 0 ? void 0 : presentationRels.get(rId);
41
- if (rel !== void 0) paths.push(rel.target);
42
- }
43
- return paths;
44
- }
45
- function shapeName(shape) {
46
- const cNvPr = elementsWithTag([shape], "p:cNvPr")[0];
47
- return cNvPr === void 0 ? void 0 : attr(cNvPr, "name");
48
- }
49
- function mergeRunProperties(base, override) {
50
- return {
51
- fontFamily: override.fontFamily ?? base.fontFamily,
52
- sizePt: override.sizePt ?? base.sizePt,
53
- bold: override.bold ?? base.bold,
54
- italic: override.italic ?? base.italic,
55
- color: override.color ?? base.color
56
- };
57
- }
58
- function isUnderlined(rPr) {
59
- if (rPr === void 0) return;
60
- const u = attr(rPr, "u");
61
- return u === void 0 ? void 0 : u !== "none";
62
- }
63
- function isStrikethrough(rPr) {
64
- if (rPr === void 0) return;
65
- const strike = attr(rPr, "strike");
66
- return strike === void 0 ? void 0 : strike !== "noStrike";
67
- }
68
- function readHyperlink(rPr, slideRels) {
69
- if (rPr === void 0) return;
70
- const hlink = childrenWithTag(rPr, "a:hlinkClick")[0];
71
- const rId = hlink === void 0 ? void 0 : attr(hlink, "r:id");
72
- const rel = rId === void 0 ? void 0 : slideRels.get(rId);
73
- return rel?.targetMode === "External" ? rel.target : void 0;
74
- }
75
- function readRun(runEl, cascadeBase, context, slideRels) {
76
- const rPr = childrenWithTag(runEl, "a:rPr")[0];
77
- const merged = mergeRunProperties(cascadeBase, rPr === void 0 ? {} : readRunPropertiesFromElement(rPr, context));
78
- const tEl = childrenWithTag(runEl, "a:t")[0];
79
- return {
80
- text: tEl === void 0 ? "" : textContent(tEl),
81
- bold: merged.bold,
82
- italic: merged.italic,
83
- underline: isUnderlined(rPr),
84
- strike: isStrikethrough(rPr),
85
- fontFamily: merged.fontFamily,
86
- sizePt: merged.sizePt,
87
- color: merged.color,
88
- hyperlink: readHyperlink(rPr, slideRels)
89
- };
90
- }
91
- function readAlignment(algn) {
92
- if (algn === "l") return "left";
93
- if (algn === "ctr") return "center";
94
- if (algn === "r") return "right";
95
- if (algn === "just" || algn === "justLow") return "justify";
96
- }
97
- function readAbsoluteSpacingPt(spc) {
98
- if (spc === void 0) return;
99
- const pts = childrenWithTag(spc, "a:spcPts")[0];
100
- const val = pts === void 0 ? void 0 : attr(pts, "val");
101
- return val === void 0 ? void 0 : drawingMlFontSizeToPt(Number(val));
102
- }
103
- function readLineSpacingMultiplier(pPr) {
104
- const lnSpc = pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:lnSpc")[0];
105
- const pct = lnSpc === void 0 ? void 0 : childrenWithTag(lnSpc, "a:spcPct")[0];
106
- const val = pct === void 0 ? void 0 : attr(pct, "val");
107
- return val === void 0 ? void 0 : Number(val) / 1e5;
108
- }
109
- function readOutlineLevel(pPr) {
110
- const raw = pPr === void 0 ? void 0 : attr(pPr, "lvl");
111
- if (raw === void 0 || raw === "") return;
112
- const level = Number(raw);
113
- return Number.isInteger(level) && level >= 0 ? level : void 0;
114
- }
115
- function readParagraph(pEl, placeholderType, context, slideRels) {
116
- const pPr = childrenWithTag(pEl, "a:pPr")[0];
117
- const outlineLevel = readOutlineLevel(pPr);
118
- const masterDefaults = resolveDefaultRunProperties(placeholderType, outlineLevel ?? 0, context);
119
- const pPrDefRPr = pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:defRPr")[0];
120
- const paragraphDefaults = pPrDefRPr === void 0 ? masterDefaults : mergeRunProperties(masterDefaults, readRunPropertiesFromElement(pPrDefRPr, context));
121
- const runs = [];
122
- for (const child of pEl.children) {
123
- if (child.type !== "element") continue;
124
- if (child.tag === "a:r" || child.tag === "a:fld") runs.push(readRun(child, paragraphDefaults, context, slideRels));
125
- else if (child.tag === "a:br") runs.push({ text: "\n" });
126
- }
127
- const marL = pPr === void 0 ? void 0 : attr(pPr, "marL");
128
- const indent = pPr === void 0 ? void 0 : attr(pPr, "indent");
129
- return {
130
- kind: "paragraph",
131
- runs,
132
- alignment: pPr === void 0 ? void 0 : readAlignment(attr(pPr, "algn")),
133
- list: outlineLevel === void 0 ? void 0 : { level: outlineLevel },
134
- spacingBeforePt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:spcBef")[0]),
135
- spacingAfterPt: readAbsoluteSpacingPt(pPr === void 0 ? void 0 : childrenWithTag(pPr, "a:spcAft")[0]),
136
- lineSpacing: readLineSpacingMultiplier(pPr),
137
- indentLeftPt: marL === void 0 ? void 0 : emuToPt(Number(marL)),
138
- indentFirstLinePt: indent === void 0 ? void 0 : emuToPt(Number(indent))
139
- };
140
- }
141
- function textBodyParagraphs(txBody, placeholderType, context, slideRels) {
142
- return txBody === void 0 ? [] : childrenWithTag(txBody, "a:p").map((p) => readParagraph(p, placeholderType, context, slideRels));
143
- }
144
- const DEFAULT_INSET_LEFT_RIGHT_EMU = 91440;
145
- const DEFAULT_INSET_TOP_BOTTOM_EMU = 45720;
146
- const NO_TEXT_BODY_EXTRAS = {
147
- insetLeftPt: 0,
148
- insetTopPt: 0,
149
- insetRightPt: 0,
150
- insetBottomPt: 0,
151
- fontScale: void 0,
152
- lineSpacingReduction: void 0
153
- };
154
- function readShapeTextExtras(txBody) {
155
- if (txBody === void 0) return NO_TEXT_BODY_EXTRAS;
156
- const bodyPr = childrenWithTag(txBody, "a:bodyPr")[0];
157
- const lIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "lIns");
158
- const tIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "tIns");
159
- const rIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "rIns");
160
- const bIns = bodyPr === void 0 ? void 0 : attr(bodyPr, "bIns");
161
- const normAutofit = bodyPr === void 0 ? void 0 : childrenWithTag(bodyPr, "a:normAutofit")[0];
162
- const fontScale = normAutofit === void 0 ? void 0 : attr(normAutofit, "fontScale");
163
- const lnSpcReduction = normAutofit === void 0 ? void 0 : attr(normAutofit, "lnSpcReduction");
164
- return {
165
- insetLeftPt: emuToPt(lIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(lIns)),
166
- insetTopPt: emuToPt(tIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(tIns)),
167
- insetRightPt: emuToPt(rIns === void 0 ? DEFAULT_INSET_LEFT_RIGHT_EMU : Number(rIns)),
168
- insetBottomPt: emuToPt(bIns === void 0 ? DEFAULT_INSET_TOP_BOTTOM_EMU : Number(bIns)),
169
- fontScale: fontScale === void 0 ? void 0 : Number(fontScale) / 1e5,
170
- lineSpacingReduction: lnSpcReduction === void 0 ? void 0 : Number(lnSpcReduction) / 1e5
171
- };
172
- }
173
- function resolveShapeFrame(shape, context, parentTransform) {
174
- const key = readPlaceholderKey(shape);
175
- const spPr = childrenWithTag(shape, "p:spPr")[0];
176
- const xfrm = (spPr === void 0 ? void 0 : readXfrm(childrenWithTag(spPr, "a:xfrm")[0])) ?? (key === void 0 ? void 0 : resolvePlaceholderXfrm(key, context));
177
- if (xfrm === void 0) return;
178
- const localFrame = {
179
- xPt: xfrm.xPt,
180
- yPt: xfrm.yPt,
181
- widthPt: xfrm.widthPt,
182
- heightPt: xfrm.heightPt
183
- };
184
- const rotationDeg = composeShapeRotationDeg(parentTransform, xfrm.rotationDeg);
185
- return {
186
- frame: parentTransform === void 0 ? localFrame : applyGroupTransform(parentTransform, localFrame),
187
- rotationDeg: rotationDeg === 0 ? void 0 : rotationDeg
188
- };
189
- }
190
- function readSpShape(sp, context, slideRels, parentTransform) {
191
- const resolved = resolveShapeFrame(sp, context, parentTransform);
192
- if (resolved === void 0) return;
193
- const key = readPlaceholderKey(sp);
194
- const txBody = childrenWithTag(sp, "p:txBody")[0];
195
- const blocks = textBodyParagraphs(txBody, key?.type, context, slideRels);
196
- const extras = readShapeTextExtras(txBody);
197
- return {
198
- name: shapeName(sp),
199
- frame: resolved.frame,
200
- rotationDeg: resolved.rotationDeg,
201
- ...extras,
202
- blocks
203
- };
204
- }
205
- function readBlipImage(parent, slideRels, pkg, frame) {
206
- const blip = elementsWithTag([parent], "a:blip")[0];
207
- const rId = blip === void 0 ? void 0 : attr(blip, "r:embed");
208
- const rel = rId === void 0 ? void 0 : slideRels.get(rId);
209
- const mediaPart = rel === void 0 ? void 0 : pkg.parts[rel.target];
210
- if (mediaPart?.kind !== "binary") return;
211
- const format = sniffImageFormat(base64ToBytes(mediaPart.base64));
212
- return format === void 0 ? void 0 : {
213
- kind: "image",
214
- format,
215
- base64: mediaPart.base64,
216
- widthPt: frame.widthPt,
217
- heightPt: frame.heightPt
218
- };
219
- }
220
- function readPicShape(pic, context, slideRels, pkg, parentTransform) {
221
- const resolved = resolveShapeFrame(pic, context, parentTransform);
222
- if (resolved === void 0) return;
223
- const image = readBlipImage(pic, slideRels, pkg, resolved.frame);
224
- const blocks = image === void 0 ? [] : [image];
225
- return {
226
- name: shapeName(pic),
227
- frame: resolved.frame,
228
- rotationDeg: resolved.rotationDeg,
229
- ...NO_TEXT_BODY_EXTRAS,
230
- blocks
231
- };
232
- }
233
- function readTableCell(tc, context, slideRels) {
234
- const hMerge = attr(tc, "hMerge");
235
- const vMerge = attr(tc, "vMerge");
236
- if (hMerge === "1" || vMerge === "1") return { blocks: [] };
237
- const tcPr = childrenWithTag(tc, "a:tcPr")[0];
238
- const solidFill = tcPr === void 0 ? void 0 : childrenWithTag(tcPr, "a:solidFill")[0];
239
- const background = readSolidFillColor(solidFill, context.colorMap, context.theme);
240
- const txBody = childrenWithTag(tc, "a:txBody")[0];
241
- const gridSpan = attr(tc, "gridSpan");
242
- const rowSpan = attr(tc, "rowSpan");
243
- return {
244
- blocks: textBodyParagraphs(txBody, void 0, context, slideRels),
245
- colSpan: gridSpan === void 0 ? void 0 : Number(gridSpan),
246
- rowSpan: rowSpan === void 0 ? void 0 : Number(rowSpan),
247
- background
248
- };
249
- }
250
- function readTable(tbl, context, slideRels) {
251
- const tblGrid = childrenWithTag(tbl, "a:tblGrid")[0];
252
- const columnWidthsPt = tblGrid === void 0 ? [] : childrenWithTag(tblGrid, "a:gridCol").map((col) => emuToPt(Number(attr(col, "w") ?? "0")));
253
- return {
254
- kind: "table",
255
- rows: childrenWithTag(tbl, "a:tr").map((tr) => {
256
- const h = attr(tr, "h");
257
- return {
258
- cells: childrenWithTag(tr, "a:tc").map((tc) => readTableCell(tc, context, slideRels)),
259
- heightPt: h === void 0 ? void 0 : emuToPt(Number(h))
260
- };
261
- }),
262
- columnWidthsPt
263
- };
264
- }
265
- function relatedPartRoot(rId, slideRels, pkg) {
266
- if (rId === void 0) return;
267
- const rel = slideRels.get(rId);
268
- return rel === void 0 ? void 0 : rootElement(pkg.parts[rel.target]);
269
- }
270
- function readGraphicFrameShape(gf, context, slideRels, pkg, parentTransform) {
271
- const xfrm = readXfrm(childrenWithTag(gf, "p:xfrm")[0]);
272
- if (xfrm === void 0) return;
273
- const localFrame = {
274
- xPt: xfrm.xPt,
275
- yPt: xfrm.yPt,
276
- widthPt: xfrm.widthPt,
277
- heightPt: xfrm.heightPt
278
- };
279
- const frame = parentTransform === void 0 ? localFrame : applyGroupTransform(parentTransform, localFrame);
280
- const composedRotationDeg = composeShapeRotationDeg(parentTransform, xfrm.rotationDeg);
281
- const rotationDeg = composedRotationDeg === 0 ? void 0 : composedRotationDeg;
282
- const graphic = childrenWithTag(gf, "a:graphic")[0];
283
- const graphicData = graphic === void 0 ? void 0 : childrenWithTag(graphic, "a:graphicData")[0];
284
- const uri = graphicData === void 0 ? void 0 : attr(graphicData, "uri");
285
- const tbl = uri === TABLE_GRAPHIC_URI && graphicData !== void 0 ? childrenWithTag(graphicData, "a:tbl")[0] : void 0;
286
- let blocks;
287
- if (tbl !== void 0) blocks = [readTable(tbl, context, slideRels)];
288
- else if (uri === CHART_GRAPHIC_URI && graphicData !== void 0) {
289
- const chartRef = childrenWithTag(graphicData, "c:chart")[0];
290
- const chartRoot = relatedPartRoot(chartRef === void 0 ? void 0 : attr(chartRef, "r:id"), slideRels, pkg);
291
- const chartTable = chartRoot === void 0 ? void 0 : readChartTable(chartRoot, frame);
292
- blocks = chartTable === void 0 ? [] : [chartTable];
293
- } else if (uri === DIAGRAM_GRAPHIC_URI && graphicData !== void 0) {
294
- const relIds = childrenWithTag(graphicData, "dgm:relIds")[0];
295
- const dataModelRoot = relatedPartRoot(relIds === void 0 ? void 0 : attr(relIds, "r:dm"), slideRels, pkg);
296
- blocks = dataModelRoot === void 0 ? [] : readDiagramText(dataModelRoot);
297
- } else if (uri === OLE_GRAPHIC_URI && graphicData !== void 0) {
298
- const image = readBlipImage(graphicData, slideRels, pkg, frame);
299
- if (image !== void 0) blocks = [image];
300
- else {
301
- const oleObj = elementsWithTag([graphicData], "p:oleObj")[0];
302
- const progId = oleObj === void 0 ? void 0 : attr(oleObj, "progId");
303
- blocks = progId === void 0 ? [] : [{
304
- kind: "paragraph",
305
- runs: [{ text: progId }]
306
- }];
307
- }
308
- } else blocks = [];
309
- return {
310
- name: shapeName(gf),
311
- frame,
312
- rotationDeg,
313
- ...NO_TEXT_BODY_EXTRAS,
314
- blocks
315
- };
316
- }
317
- function walkShapeTreeChildren(children, parentTransform, context, slideRels, pkg, out) {
318
- for (const node of children) {
319
- if (node.type !== "element") continue;
320
- if (node.tag === "p:sp") {
321
- const shape = readSpShape(node, context, slideRels, parentTransform);
322
- if (shape !== void 0) out.push(shape);
323
- } else if (node.tag === "p:pic") {
324
- const shape = readPicShape(node, context, slideRels, pkg, parentTransform);
325
- if (shape !== void 0) out.push(shape);
326
- } else if (node.tag === "p:graphicFrame") {
327
- const shape = readGraphicFrameShape(node, context, slideRels, pkg, parentTransform);
328
- if (shape !== void 0) out.push(shape);
329
- } else if (node.tag === "p:grpSp") {
330
- const grpSpPr = childrenWithTag(node, "p:grpSpPr")[0];
331
- const xfrmEl = grpSpPr === void 0 ? void 0 : childrenWithTag(grpSpPr, "a:xfrm")[0];
332
- const ownGroupTransform = readGroupXfrm(xfrmEl);
333
- const composed = composeGroupTransform(ownGroupTransform, parentTransform);
334
- walkShapeTreeChildren(node.children, composed, context, slideRels, pkg, out);
335
- }
336
- }
337
- }
338
- const NOTES_SLIDE_REL_SUFFIX = "/notesSlide";
339
- function readNotes(pkg, slidePath) {
340
- let notesPath;
341
- for (const rel of resolveRelationships(pkg, slidePath).values()) if (rel.type.endsWith(NOTES_SLIDE_REL_SUFFIX)) {
342
- notesPath = rel.target;
343
- break;
344
- }
345
- if (notesPath === void 0) return "";
346
- const notesRoot = rootElement(pkg.parts[notesPath]);
347
- if (notesRoot === void 0) return "";
348
- const bodyShape = elementsWithTag([notesRoot], "p:sp").find((shape) => {
349
- const key = readPlaceholderKey(shape);
350
- return key !== void 0 && (key.type === void 0 || key.type === "body");
351
- });
352
- if (bodyShape !== void 0) {
353
- const txBody = childrenWithTag(bodyShape, "p:txBody")[0];
354
- if (txBody !== void 0) return elementsWithTag(txBody.children, "a:t").map(textContent).join("");
355
- }
356
- return elementsWithTag([notesRoot], "a:t").map(textContent).join("");
357
- }
358
- function readSlide(pkg, slidePath, size) {
359
- const slideRoot = rootElement(pkg.parts[slidePath]);
360
- const context = resolveSlideInheritance(pkg, slidePath);
361
- const slideRels = resolveRelationships(pkg, slidePath);
362
- const cSld = slideRoot === void 0 ? void 0 : childrenWithTag(slideRoot, "p:cSld")[0];
363
- const spTree = cSld === void 0 ? void 0 : childrenWithTag(cSld, "p:spTree")[0];
364
- const shapes = [];
365
- if (spTree !== void 0) walkShapeTreeChildren(spTree.children, void 0, context, slideRels, pkg, shapes);
366
- return {
367
- size,
368
- shapes,
369
- notes: readNotes(pkg, slidePath)
370
- };
371
- }
372
- function readPptxContent(pkg) {
373
- const presentationRoot = rootElement(pkg.parts[PRESENTATION_PATH]);
374
- const size = readSlideSize(presentationRoot);
375
- const slides = readSlidePathsInOrder(pkg, presentationRoot).map((slidePath) => readSlide(pkg, slidePath, size));
376
- slides.forEach((slide, slideIndex) => {
377
- slide.shapes.forEach((shape, shapeIndex) => {
378
- const shapePath = `slides[${slideIndex}].shapes[${shapeIndex}]`;
379
- shape.sourcePath = shapePath;
380
- assignSourcePaths(shape.blocks, shapePath);
381
- });
382
- });
383
- return {
384
- metadata: readCoreProperties(pkg),
385
- slides
386
- };
387
- }
388
- //#endregion
1
+ import { c as readPptxContent, s as PptxDocumentSchema } from "../../read-Legu2Pt-.js";
389
2
  export { PptxDocumentSchema, readPptxContent };
@@ -8,8 +8,8 @@ const require_typed_xlsx_print_settings = require("./print-settings.cjs");
8
8
  const require_typed_xlsx_serial = require("./serial.cjs");
9
9
  const require_typed_xlsx_shared_strings = require("./shared-strings.cjs");
10
10
  const require_typed_xlsx_styles = require("./styles.cjs");
11
- const require_typed_xlsx_units = require("./units.cjs");
12
11
  const require_typed_xlsx_comments = require("./comments.cjs");
12
+ const require_typed_xlsx_units = require("./units.cjs");
13
13
  let document_schema_js = require("document-schema.js");
14
14
  //#region src/typed/xlsx/content.ts
15
15
  const WORKBOOK_PATH = "xl/workbook.xml";
@@ -7,8 +7,8 @@ import { readPrintSettings } from "./print-settings.js";
7
7
  import { readDate1904, serialToIsoDate, serialToIsoDateTime, serialToIsoTime } from "./serial.js";
8
8
  import { loadSharedStrings } from "./shared-strings.js";
9
9
  import { readCellStyles } from "./styles.js";
10
- import { columnWidthCharsToPt } from "./units.js";
11
10
  import { readSheetCellComments } from "./comments.js";
11
+ import { columnWidthCharsToPt } from "./units.js";
12
12
  import { parseCellReference, parseRangeReference } from "document-schema.js";
13
13
  //#region src/typed/xlsx/content.ts
14
14
  const WORKBOOK_PATH = "xl/workbook.xml";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ooxml.js",
3
- "version": "4.0.12",
3
+ "version": "4.1.0",
4
4
  "description": "Type-safe, lossless round-trip conversion between OOXML packages (docx, pptx, xlsx) and JSON, built on Zod 4 codecs.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -80,6 +80,7 @@
80
80
  "license": "MIT",
81
81
  "packageManager": "pnpm@11.6.0",
82
82
  "dependencies": {
83
+ "archive-codec": "^1.0.2",
83
84
  "document-schema.js": "^4.3.7",
84
85
  "fast-xml-parser": "^5.10.1",
85
86
  "fflate": "^0.8.3",