ooxml.js 2.4.1 → 2.5.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.
- package/README.md +11 -2
- package/dist/codec.cjs +28 -0
- package/dist/codec.d.cts +72 -0
- package/dist/codec.d.ts +72 -0
- package/dist/codec.js +24 -0
- package/dist/compact.cjs +162 -0
- package/dist/compact.d.cts +70 -0
- package/dist/compact.d.ts +70 -0
- package/dist/compact.js +152 -0
- package/dist/image/sniff.cjs +28 -0
- package/dist/image/sniff.d.cts +5 -0
- package/dist/image/sniff.d.ts +5 -0
- package/dist/image/sniff.js +27 -0
- package/dist/index.cjs +83 -3025
- package/dist/index.d.cts +22 -527
- package/dist/index.d.ts +22 -527
- package/dist/index.js +22 -2964
- package/dist/model/node.cjs +67 -0
- package/dist/model/node.d.cts +2 -0
- package/dist/model/node.d.ts +2 -0
- package/dist/model/node.js +58 -0
- package/dist/model/package.cjs +19 -0
- package/dist/model/package.d.cts +2 -0
- package/dist/model/package.d.ts +2 -0
- package/dist/model/package.js +15 -0
- package/dist/node-CkBWRjNR.d.cts +83 -0
- package/dist/node-CkBWRjNR.d.ts +83 -0
- package/dist/package-BUojjTXf.d.ts +114 -0
- package/dist/package-L24lkba-.d.cts +114 -0
- package/dist/package-io/read.cjs +33 -0
- package/dist/package-io/read.d.cts +5 -0
- package/dist/package-io/read.d.ts +5 -0
- package/dist/package-io/read.js +32 -0
- package/dist/package-io/write.cjs +18 -0
- package/dist/package-io/write.d.cts +5 -0
- package/dist/package-io/write.d.ts +5 -0
- package/dist/package-io/write.js +17 -0
- package/dist/typed/docx/read.cjs +332 -0
- package/dist/typed/docx/read.d.cts +52 -0
- package/dist/typed/docx/read.d.ts +52 -0
- package/dist/typed/docx/read.js +328 -0
- package/dist/typed/docx/styles.cjs +148 -0
- package/dist/typed/docx/styles.d.cts +29 -0
- package/dist/typed/docx/styles.d.ts +29 -0
- package/dist/typed/docx/styles.js +146 -0
- package/dist/typed/pptx/inherit.cjs +96 -0
- package/dist/typed/pptx/inherit.d.cts +30 -0
- package/dist/typed/pptx/inherit.d.ts +30 -0
- package/dist/typed/pptx/inherit.js +90 -0
- package/dist/typed/pptx/read.cjs +364 -0
- package/dist/typed/pptx/read.d.cts +44 -0
- package/dist/typed/pptx/read.d.ts +44 -0
- package/dist/typed/pptx/read.js +362 -0
- package/dist/typed/shared/color.cjs +85 -0
- package/dist/typed/shared/color.d.cts +9 -0
- package/dist/typed/shared/color.d.ts +9 -0
- package/dist/typed/shared/color.js +84 -0
- package/dist/typed/shared/drawingml.cjs +191 -0
- package/dist/typed/shared/drawingml.d.cts +40 -0
- package/dist/typed/shared/drawingml.d.ts +40 -0
- package/dist/typed/shared/drawingml.js +180 -0
- package/dist/typed/shared/metadata.cjs +44 -0
- package/dist/typed/shared/metadata.d.cts +16 -0
- package/dist/typed/shared/metadata.d.ts +16 -0
- package/dist/typed/shared/metadata.js +42 -0
- package/dist/typed/shared/source-path.cjs +18 -0
- package/dist/typed/shared/source-path.d.cts +5 -0
- package/dist/typed/shared/source-path.d.ts +5 -0
- package/dist/typed/shared/source-path.js +17 -0
- package/dist/typed/shared/units.cjs +55 -0
- package/dist/typed/shared/units.d.cts +20 -0
- package/dist/typed/shared/units.d.ts +20 -0
- package/dist/typed/shared/units.js +38 -0
- package/dist/typed/util.cjs +85 -0
- package/dist/typed/util.d.cts +18 -0
- package/dist/typed/util.d.ts +18 -0
- package/dist/typed/util.js +77 -0
- package/dist/typed/xlsx/a1.cjs +64 -0
- package/dist/typed/xlsx/a1.d.cts +19 -0
- package/dist/typed/xlsx/a1.d.ts +19 -0
- package/dist/typed/xlsx/a1.js +58 -0
- package/dist/typed/xlsx/build.cjs +456 -0
- package/dist/typed/xlsx/build.d.cts +6 -0
- package/dist/typed/xlsx/build.d.ts +6 -0
- package/dist/typed/xlsx/build.js +455 -0
- package/dist/typed/xlsx/content.cjs +257 -0
- package/dist/typed/xlsx/content.d.cts +6 -0
- package/dist/typed/xlsx/content.d.ts +6 -0
- package/dist/typed/xlsx/content.js +256 -0
- package/dist/typed/xlsx/defined-names.cjs +90 -0
- package/dist/typed/xlsx/defined-names.d.cts +20 -0
- package/dist/typed/xlsx/defined-names.d.ts +20 -0
- package/dist/typed/xlsx/defined-names.js +83 -0
- package/dist/typed/xlsx/print-settings.cjs +116 -0
- package/dist/typed/xlsx/print-settings.d.cts +8 -0
- package/dist/typed/xlsx/print-settings.d.ts +8 -0
- package/dist/typed/xlsx/print-settings.js +114 -0
- package/dist/typed/xlsx/shared-strings.cjs +35 -0
- package/dist/typed/xlsx/shared-strings.d.cts +12 -0
- package/dist/typed/xlsx/shared-strings.d.ts +12 -0
- package/dist/typed/xlsx/shared-strings.js +33 -0
- package/dist/typed/xlsx/units.cjs +21 -0
- package/dist/typed/xlsx/units.d.cts +8 -0
- package/dist/typed/xlsx/units.d.ts +8 -0
- package/dist/typed/xlsx/units.js +16 -0
- package/dist/typed/xlsx/util.cjs +53 -0
- package/dist/typed/xlsx/util.d.cts +10 -0
- package/dist/typed/xlsx/util.d.ts +10 -0
- package/dist/typed/xlsx/util.js +47 -0
- package/dist/typed/xlsx.cjs +140 -0
- package/dist/typed/xlsx.d.cts +43 -0
- package/dist/typed/xlsx.d.ts +43 -0
- package/dist/typed/xlsx.js +135 -0
- package/dist/util/base64.cjs +48 -0
- package/dist/util/base64.d.cts +5 -0
- package/dist/util/base64.d.ts +5 -0
- package/dist/util/base64.js +46 -0
- package/dist/xml/build.cjs +46 -0
- package/dist/xml/build.d.cts +5 -0
- package/dist/xml/build.d.ts +5 -0
- package/dist/xml/build.js +46 -0
- package/dist/xml/entities.cjs +7 -0
- package/dist/xml/entities.d.cts +4 -0
- package/dist/xml/entities.d.ts +4 -0
- package/dist/xml/entities.js +6 -0
- package/dist/xml/fragment.cjs +22 -0
- package/dist/xml/fragment.d.cts +6 -0
- package/dist/xml/fragment.d.ts +6 -0
- package/dist/xml/fragment.js +20 -0
- package/dist/xml/parse.cjs +88 -0
- package/dist/xml/parse.d.cts +5 -0
- package/dist/xml/parse.d.ts +5 -0
- package/dist/xml/parse.js +88 -0
- package/dist/zip.cjs +12 -0
- package/dist/zip.d.cts +5 -0
- package/dist/zip.d.ts +5 -0
- package/dist/zip.js +10 -0
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -98,6 +98,13 @@ const content = readXlsxContent(decodePackage(bytes)); // ContentDocument, kind:
|
|
|
98
98
|
const pkg = buildXlsxPackage(content); // a fresh Package built from scratch, not a write-back into `pkg`
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
+
Every module under `src/` is also importable directly, by the same path it has relative to `src/`, without going through the barrel — useful for a caller that only needs one small piece and wants to avoid pulling in the rest:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
import { bytesToBase64, base64ToBytes } from 'ooxml.js/util/base64';
|
|
105
|
+
import { readXlsxContent } from 'ooxml.js/typed/xlsx/content';
|
|
106
|
+
```
|
|
107
|
+
|
|
101
108
|
## The ooxml.js format
|
|
102
109
|
|
|
103
110
|
The verbose `Package` JSON is faithful but repetitive: every node repeats its `type`/`tag`/`attributes`/`children` keys, and tag and namespace strings recur thousands of times across a real document. **The ooxml.js format** is a compact, still-plain-JSON alternative — tuple-encoded nodes plus a single interned string table — that composes on top of `packageCodec` without changing what it guarantees:
|
|
@@ -181,7 +188,7 @@ const out = encodeCompactPackage(compact); // CompactPackage -> OOXML bytes dire
|
|
|
181
188
|
## Build, test, and lint
|
|
182
189
|
|
|
183
190
|
```sh
|
|
184
|
-
pnpm build # tsdown -> dist/ (ESM + CJS + .d.ts, via tsdown.config.ts)
|
|
191
|
+
pnpm build # tsdown -> dist/ (one ESM + CJS + .d.ts set per source module, via tsdown.config.ts)
|
|
185
192
|
pnpm lint # eslint . --max-warnings 0
|
|
186
193
|
pnpm typecheck # tsc --noEmit
|
|
187
194
|
pnpm test # vitest run
|
|
@@ -191,7 +198,9 @@ pnpm test:smoke # builds dist/, then runs test/smoke.test.mjs to verify the
|
|
|
191
198
|
|
|
192
199
|
`pnpm prepublishOnly` runs `lint`, `typecheck`, `tsdown`, `publint`, and `@arethetypeswrong/cli` (`attw --pack`) — the full publish-readiness check — before a release.
|
|
193
200
|
|
|
194
|
-
`test/smoke.test.mjs` loads the actual built `dist/index.js` (ESM) and `dist/index.cjs` (CJS) artifacts and checks they load and behave identically — a check none of `vitest`'s normal run, `tsc`, `publint`, or `attw` can do, since those either run against source or statically analyse package metadata without executing the compiled output. `vitest.config.ts` defines it as its own `smoke` project (vitest's `test.projects`), separate from the `unit` project (`src/**/*.test.ts`); `pnpm test`/`test:watch` pass `--project unit` and `pnpm test:smoke` passes `--project smoke` after `tsdown` rebuilds `dist/`, so neither run touches the other project's files.
|
|
201
|
+
`test/smoke.test.mjs` loads the actual built `dist/index.js` (ESM) and `dist/index.cjs` (CJS) barrel artifacts and checks they load and behave identically — a check none of `vitest`'s normal run, `tsc`, `publint`, or `attw` can do, since those either run against source or statically analyse package metadata without executing the compiled output. `vitest.config.ts` defines it as its own `smoke` project (vitest's `test.projects`), separate from the `unit` project (`src/**/*.test.ts`); `pnpm test`/`test:watch` pass `--project unit` and `pnpm test:smoke` passes `--project smoke` after `tsdown` rebuilds `dist/`, so neither run touches the other project's files.
|
|
202
|
+
|
|
203
|
+
`tsdown.config.ts`'s `entry` is a glob (`src/**/*.ts`, excluding tests and `.d.ts` files) rather than a single `src/index.ts` bundle, so `dist/` holds one ESM/CJS/`.d.ts`/`.d.cts` set per source module, laid out under `dist/` at the same relative path each module has under `src/` (pinned via the sibling `root: 'src'` option). `dist/index.js`/`dist/index.cjs` are just the file `tsdown` produces for `src/index.ts`, matched by that same glob — they still re-export everything the barrel always has. `package.json`'s `exports` map adds a `"./*"` wildcard alongside `"."`, so any module is importable by its own path, not only through the barrel.
|
|
195
204
|
|
|
196
205
|
To run a single test file: `pnpm vitest run src/typed/docx.test.ts`.
|
|
197
206
|
|
package/dist/codec.cjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_model_node = require("./model/node.cjs");
|
|
3
|
+
const require_model_package = require("./model/package.cjs");
|
|
4
|
+
const require_xml_parse = require("./xml/parse.cjs");
|
|
5
|
+
const require_package_io_read = require("./package-io/read.cjs");
|
|
6
|
+
const require_xml_build = require("./xml/build.cjs");
|
|
7
|
+
const require_package_io_write = require("./package-io/write.cjs");
|
|
8
|
+
let zod = require("zod");
|
|
9
|
+
//#region src/codec.ts
|
|
10
|
+
const xmlCodec = zod.z.codec(zod.z.string(), zod.z.array(require_model_node.XmlNodeSchema), {
|
|
11
|
+
decode: (xml) => require_xml_parse.parseXml(xml),
|
|
12
|
+
encode: (nodes) => require_xml_build.buildXml(nodes)
|
|
13
|
+
});
|
|
14
|
+
const packageCodec = zod.z.codec(zod.z.instanceof(Uint8Array), require_model_package.PackageSchema, {
|
|
15
|
+
decode: (bytes) => require_package_io_read.parsePackage(bytes),
|
|
16
|
+
encode: (pkg) => require_package_io_write.serializePackage(pkg)
|
|
17
|
+
});
|
|
18
|
+
function decodePackage(bytes) {
|
|
19
|
+
return zod.z.decode(packageCodec, bytes);
|
|
20
|
+
}
|
|
21
|
+
function encodePackage(pkg) {
|
|
22
|
+
return zod.z.encode(packageCodec, pkg);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
exports.decodePackage = decodePackage;
|
|
26
|
+
exports.encodePackage = encodePackage;
|
|
27
|
+
exports.packageCodec = packageCodec;
|
|
28
|
+
exports.xmlCodec = xmlCodec;
|
package/dist/codec.d.cts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { d as XmlNode } from "./node-CkBWRjNR.cjs";
|
|
2
|
+
import { r as Package } from "./package-L24lkba-.cjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/codec.d.ts
|
|
5
|
+
declare const xmlCodec: z.ZodCodec<z.ZodString, z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
6
|
+
type: z.ZodLiteral<"text">;
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
type: z.ZodLiteral<"cdata">;
|
|
10
|
+
value: z.ZodString;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
type: z.ZodLiteral<"comment">;
|
|
13
|
+
value: z.ZodString;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"declaration">;
|
|
16
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
value: z.ZodString;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
21
|
+
type: z.ZodLiteral<"pi">;
|
|
22
|
+
target: z.ZodString;
|
|
23
|
+
content: z.ZodString;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
type: z.ZodLiteral<"element">;
|
|
26
|
+
tag: z.ZodString;
|
|
27
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
28
|
+
name: z.ZodString;
|
|
29
|
+
value: z.ZodString;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
32
|
+
}, z.core.$strip>], "type">>>;
|
|
33
|
+
declare const packageCodec: z.ZodCodec<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>, z.ZodObject<{
|
|
34
|
+
parts: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
35
|
+
kind: z.ZodLiteral<"xml">;
|
|
36
|
+
nodes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
37
|
+
type: z.ZodLiteral<"text">;
|
|
38
|
+
value: z.ZodString;
|
|
39
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
40
|
+
type: z.ZodLiteral<"cdata">;
|
|
41
|
+
value: z.ZodString;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
type: z.ZodLiteral<"comment">;
|
|
44
|
+
value: z.ZodString;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
type: z.ZodLiteral<"declaration">;
|
|
47
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
value: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
52
|
+
type: z.ZodLiteral<"pi">;
|
|
53
|
+
target: z.ZodString;
|
|
54
|
+
content: z.ZodString;
|
|
55
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
56
|
+
type: z.ZodLiteral<"element">;
|
|
57
|
+
tag: z.ZodString;
|
|
58
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
59
|
+
name: z.ZodString;
|
|
60
|
+
value: z.ZodString;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
63
|
+
}, z.core.$strip>], "type">>;
|
|
64
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
65
|
+
kind: z.ZodLiteral<"binary">;
|
|
66
|
+
base64: z.ZodString;
|
|
67
|
+
}, z.core.$strip>], "kind">>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
declare function decodePackage(bytes: Uint8Array<ArrayBuffer>): Package;
|
|
70
|
+
declare function encodePackage(pkg: Package): Uint8Array<ArrayBuffer>;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { type XmlNode, decodePackage, encodePackage, packageCodec, xmlCodec };
|
package/dist/codec.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { d as XmlNode } from "./node-CkBWRjNR.js";
|
|
2
|
+
import { r as Package } from "./package-BUojjTXf.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/codec.d.ts
|
|
5
|
+
declare const xmlCodec: z.ZodCodec<z.ZodString, z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
6
|
+
type: z.ZodLiteral<"text">;
|
|
7
|
+
value: z.ZodString;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
type: z.ZodLiteral<"cdata">;
|
|
10
|
+
value: z.ZodString;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
type: z.ZodLiteral<"comment">;
|
|
13
|
+
value: z.ZodString;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"declaration">;
|
|
16
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
value: z.ZodString;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
21
|
+
type: z.ZodLiteral<"pi">;
|
|
22
|
+
target: z.ZodString;
|
|
23
|
+
content: z.ZodString;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
type: z.ZodLiteral<"element">;
|
|
26
|
+
tag: z.ZodString;
|
|
27
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
28
|
+
name: z.ZodString;
|
|
29
|
+
value: z.ZodString;
|
|
30
|
+
}, z.core.$strip>>;
|
|
31
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
32
|
+
}, z.core.$strip>], "type">>>;
|
|
33
|
+
declare const packageCodec: z.ZodCodec<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>, z.ZodObject<{
|
|
34
|
+
parts: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
35
|
+
kind: z.ZodLiteral<"xml">;
|
|
36
|
+
nodes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
37
|
+
type: z.ZodLiteral<"text">;
|
|
38
|
+
value: z.ZodString;
|
|
39
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
40
|
+
type: z.ZodLiteral<"cdata">;
|
|
41
|
+
value: z.ZodString;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
type: z.ZodLiteral<"comment">;
|
|
44
|
+
value: z.ZodString;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
type: z.ZodLiteral<"declaration">;
|
|
47
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
value: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
52
|
+
type: z.ZodLiteral<"pi">;
|
|
53
|
+
target: z.ZodString;
|
|
54
|
+
content: z.ZodString;
|
|
55
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
56
|
+
type: z.ZodLiteral<"element">;
|
|
57
|
+
tag: z.ZodString;
|
|
58
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
59
|
+
name: z.ZodString;
|
|
60
|
+
value: z.ZodString;
|
|
61
|
+
}, z.core.$strip>>;
|
|
62
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
63
|
+
}, z.core.$strip>], "type">>;
|
|
64
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
65
|
+
kind: z.ZodLiteral<"binary">;
|
|
66
|
+
base64: z.ZodString;
|
|
67
|
+
}, z.core.$strip>], "kind">>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
declare function decodePackage(bytes: Uint8Array<ArrayBuffer>): Package;
|
|
70
|
+
declare function encodePackage(pkg: Package): Uint8Array<ArrayBuffer>;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { type XmlNode, decodePackage, encodePackage, packageCodec, xmlCodec };
|
package/dist/codec.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { XmlNodeSchema } from "./model/node.js";
|
|
2
|
+
import { PackageSchema } from "./model/package.js";
|
|
3
|
+
import { parseXml } from "./xml/parse.js";
|
|
4
|
+
import { parsePackage } from "./package-io/read.js";
|
|
5
|
+
import { buildXml } from "./xml/build.js";
|
|
6
|
+
import { serializePackage } from "./package-io/write.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
//#region src/codec.ts
|
|
9
|
+
const xmlCodec = z.codec(z.string(), z.array(XmlNodeSchema), {
|
|
10
|
+
decode: (xml) => parseXml(xml),
|
|
11
|
+
encode: (nodes) => buildXml(nodes)
|
|
12
|
+
});
|
|
13
|
+
const packageCodec = z.codec(z.instanceof(Uint8Array), PackageSchema, {
|
|
14
|
+
decode: (bytes) => parsePackage(bytes),
|
|
15
|
+
encode: (pkg) => serializePackage(pkg)
|
|
16
|
+
});
|
|
17
|
+
function decodePackage(bytes) {
|
|
18
|
+
return z.decode(packageCodec, bytes);
|
|
19
|
+
}
|
|
20
|
+
function encodePackage(pkg) {
|
|
21
|
+
return z.encode(packageCodec, pkg);
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { decodePackage, encodePackage, packageCodec, xmlCodec };
|
package/dist/compact.cjs
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_model_package = require("./model/package.cjs");
|
|
3
|
+
const require_codec = require("./codec.cjs");
|
|
4
|
+
let zod = require("zod");
|
|
5
|
+
//#region src/compact.ts
|
|
6
|
+
function isUnknownArray(value) {
|
|
7
|
+
return Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function isCompactAttrPairs(value) {
|
|
10
|
+
return isUnknownArray(value) && value.every((v) => typeof v === "number");
|
|
11
|
+
}
|
|
12
|
+
function isCompactXmlNode(value) {
|
|
13
|
+
if (!isUnknownArray(value)) return false;
|
|
14
|
+
const code = value[0];
|
|
15
|
+
if (code === 1 || code === 2 || code === 3) return value.length === 2 && typeof value[1] === "number";
|
|
16
|
+
if (code === 4) return value.length === 2 && isCompactAttrPairs(value[1]);
|
|
17
|
+
if (code === 5) return value.length === 3 && typeof value[1] === "number" && typeof value[2] === "number";
|
|
18
|
+
if (code === 0) return value.length === 4 && typeof value[1] === "number" && isCompactAttrPairs(value[2]) && Array.isArray(value[3]) && value[3].every(isCompactXmlNode);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const CompactXmlNodeSchema = zod.z.custom(isCompactXmlNode);
|
|
22
|
+
const CompactPartSchema = zod.z.union([zod.z.array(CompactXmlNodeSchema), zod.z.number()]);
|
|
23
|
+
const CompactPackageSchema = zod.z.object({
|
|
24
|
+
s: zod.z.array(zod.z.string()),
|
|
25
|
+
p: zod.z.record(zod.z.string(), CompactPartSchema)
|
|
26
|
+
});
|
|
27
|
+
var StringTable = class {
|
|
28
|
+
indices = /* @__PURE__ */ new Map();
|
|
29
|
+
strings = [];
|
|
30
|
+
intern(value) {
|
|
31
|
+
const existing = this.indices.get(value);
|
|
32
|
+
if (existing !== void 0) return existing;
|
|
33
|
+
const index = this.strings.length;
|
|
34
|
+
this.indices.set(value, index);
|
|
35
|
+
this.strings.push(value);
|
|
36
|
+
return index;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
function encodeAttrs(attributes, table) {
|
|
40
|
+
const pairs = [];
|
|
41
|
+
for (const attribute of attributes) pairs.push(table.intern(attribute.name), table.intern(attribute.value));
|
|
42
|
+
return pairs;
|
|
43
|
+
}
|
|
44
|
+
function encodeNode(node, table) {
|
|
45
|
+
switch (node.type) {
|
|
46
|
+
case "text": return [1, table.intern(node.value)];
|
|
47
|
+
case "cdata": return [2, table.intern(node.value)];
|
|
48
|
+
case "comment": return [3, table.intern(node.value)];
|
|
49
|
+
case "declaration": return [4, encodeAttrs(node.attributes, table)];
|
|
50
|
+
case "pi": return [
|
|
51
|
+
5,
|
|
52
|
+
table.intern(node.target),
|
|
53
|
+
table.intern(node.content)
|
|
54
|
+
];
|
|
55
|
+
case "element": return [
|
|
56
|
+
0,
|
|
57
|
+
table.intern(node.tag),
|
|
58
|
+
encodeAttrs(node.attributes, table),
|
|
59
|
+
node.children.map((child) => encodeNode(child, table))
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function packageToCompact(pkg) {
|
|
64
|
+
const table = new StringTable();
|
|
65
|
+
const p = {};
|
|
66
|
+
for (const [path, part] of Object.entries(pkg.parts)) p[path] = part.kind === "binary" ? table.intern(part.base64) : part.nodes.map((node) => encodeNode(node, table));
|
|
67
|
+
return {
|
|
68
|
+
s: table.strings,
|
|
69
|
+
p
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function stringAt(strings, index) {
|
|
73
|
+
const value = strings[index];
|
|
74
|
+
if (value === void 0) throw new Error(`fromCompact: string table index ${index} is out of range`);
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
function decodeAttrs(pairs, strings) {
|
|
78
|
+
const attributes = [];
|
|
79
|
+
for (let i = 0; i < pairs.length; i += 2) {
|
|
80
|
+
const nameIdx = pairs[i];
|
|
81
|
+
const valueIdx = pairs[i + 1];
|
|
82
|
+
if (nameIdx === void 0 || valueIdx === void 0) throw new Error("fromCompact: attribute index pairs array has odd length");
|
|
83
|
+
attributes.push({
|
|
84
|
+
name: stringAt(strings, nameIdx),
|
|
85
|
+
value: stringAt(strings, valueIdx)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return attributes;
|
|
89
|
+
}
|
|
90
|
+
function decodeNode(node, strings) {
|
|
91
|
+
switch (node[0]) {
|
|
92
|
+
case 1: return {
|
|
93
|
+
type: "text",
|
|
94
|
+
value: stringAt(strings, node[1])
|
|
95
|
+
};
|
|
96
|
+
case 2: return {
|
|
97
|
+
type: "cdata",
|
|
98
|
+
value: stringAt(strings, node[1])
|
|
99
|
+
};
|
|
100
|
+
case 3: return {
|
|
101
|
+
type: "comment",
|
|
102
|
+
value: stringAt(strings, node[1])
|
|
103
|
+
};
|
|
104
|
+
case 4: return {
|
|
105
|
+
type: "declaration",
|
|
106
|
+
attributes: decodeAttrs(node[1], strings)
|
|
107
|
+
};
|
|
108
|
+
case 5: return {
|
|
109
|
+
type: "pi",
|
|
110
|
+
target: stringAt(strings, node[1]),
|
|
111
|
+
content: stringAt(strings, node[2])
|
|
112
|
+
};
|
|
113
|
+
case 0: return {
|
|
114
|
+
type: "element",
|
|
115
|
+
tag: stringAt(strings, node[1]),
|
|
116
|
+
attributes: decodeAttrs(node[2], strings),
|
|
117
|
+
children: node[3].map((child) => decodeNode(child, strings))
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function compactToPackage(cpkg) {
|
|
122
|
+
const parts = {};
|
|
123
|
+
for (const [path, part] of Object.entries(cpkg.p)) parts[path] = typeof part === "number" ? {
|
|
124
|
+
kind: "binary",
|
|
125
|
+
base64: stringAt(cpkg.s, part)
|
|
126
|
+
} : {
|
|
127
|
+
kind: "xml",
|
|
128
|
+
nodes: part.map((node) => decodeNode(node, cpkg.s))
|
|
129
|
+
};
|
|
130
|
+
return { parts };
|
|
131
|
+
}
|
|
132
|
+
const compactCodec = zod.z.codec(require_model_package.PackageSchema, CompactPackageSchema, {
|
|
133
|
+
decode: (pkg) => packageToCompact(pkg),
|
|
134
|
+
encode: (cpkg) => compactToPackage(cpkg)
|
|
135
|
+
});
|
|
136
|
+
function toCompact(pkg) {
|
|
137
|
+
return zod.z.decode(compactCodec, pkg);
|
|
138
|
+
}
|
|
139
|
+
function fromCompact(cpkg) {
|
|
140
|
+
return zod.z.encode(compactCodec, cpkg);
|
|
141
|
+
}
|
|
142
|
+
const compactPackageCodec = zod.z.codec(zod.z.instanceof(Uint8Array), CompactPackageSchema, {
|
|
143
|
+
decode: (bytes) => toCompact(require_codec.decodePackage(bytes)),
|
|
144
|
+
encode: (cpkg) => require_codec.encodePackage(fromCompact(cpkg))
|
|
145
|
+
});
|
|
146
|
+
function decodeCompactPackage(bytes) {
|
|
147
|
+
return zod.z.decode(compactPackageCodec, bytes);
|
|
148
|
+
}
|
|
149
|
+
function encodeCompactPackage(cpkg) {
|
|
150
|
+
return zod.z.encode(compactPackageCodec, cpkg);
|
|
151
|
+
}
|
|
152
|
+
//#endregion
|
|
153
|
+
exports.CompactPackageSchema = CompactPackageSchema;
|
|
154
|
+
exports.CompactPartSchema = CompactPartSchema;
|
|
155
|
+
exports.CompactXmlNodeSchema = CompactXmlNodeSchema;
|
|
156
|
+
exports.compactCodec = compactCodec;
|
|
157
|
+
exports.compactPackageCodec = compactPackageCodec;
|
|
158
|
+
exports.decodeCompactPackage = decodeCompactPackage;
|
|
159
|
+
exports.encodeCompactPackage = encodeCompactPackage;
|
|
160
|
+
exports.fromCompact = fromCompact;
|
|
161
|
+
exports.isCompactXmlNode = isCompactXmlNode;
|
|
162
|
+
exports.toCompact = toCompact;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { d as XmlNode } from "./node-CkBWRjNR.cjs";
|
|
2
|
+
import { r as Package } from "./package-L24lkba-.cjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/compact.d.ts
|
|
5
|
+
type CompactAttrPairs = number[];
|
|
6
|
+
type CompactElement = [0, number, CompactAttrPairs, CompactXmlNode[]];
|
|
7
|
+
type CompactText = [1, number];
|
|
8
|
+
type CompactCdata = [2, number];
|
|
9
|
+
type CompactComment = [3, number];
|
|
10
|
+
type CompactDeclaration = [4, CompactAttrPairs];
|
|
11
|
+
type CompactPi = [5, number, number];
|
|
12
|
+
type CompactXmlNode = CompactElement | CompactText | CompactCdata | CompactComment | CompactDeclaration | CompactPi;
|
|
13
|
+
declare function isCompactXmlNode(value: unknown): value is CompactXmlNode;
|
|
14
|
+
declare const CompactXmlNodeSchema: z.ZodCustom<CompactXmlNode, CompactXmlNode>;
|
|
15
|
+
declare const CompactPartSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>;
|
|
16
|
+
type CompactPart = z.infer<typeof CompactPartSchema>;
|
|
17
|
+
declare const CompactPackageSchema: z.ZodObject<{
|
|
18
|
+
s: z.ZodArray<z.ZodString>;
|
|
19
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
type CompactPackage = z.infer<typeof CompactPackageSchema>;
|
|
22
|
+
declare const compactCodec: z.ZodCodec<z.ZodObject<{
|
|
23
|
+
parts: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
24
|
+
kind: z.ZodLiteral<"xml">;
|
|
25
|
+
nodes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
26
|
+
type: z.ZodLiteral<"text">;
|
|
27
|
+
value: z.ZodString;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
type: z.ZodLiteral<"cdata">;
|
|
30
|
+
value: z.ZodString;
|
|
31
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
32
|
+
type: z.ZodLiteral<"comment">;
|
|
33
|
+
value: z.ZodString;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
type: z.ZodLiteral<"declaration">;
|
|
36
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
value: z.ZodString;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
type: z.ZodLiteral<"pi">;
|
|
42
|
+
target: z.ZodString;
|
|
43
|
+
content: z.ZodString;
|
|
44
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
45
|
+
type: z.ZodLiteral<"element">;
|
|
46
|
+
tag: z.ZodString;
|
|
47
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
value: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
52
|
+
}, z.core.$strip>], "type">>;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
kind: z.ZodLiteral<"binary">;
|
|
55
|
+
base64: z.ZodString;
|
|
56
|
+
}, z.core.$strip>], "kind">>;
|
|
57
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
58
|
+
s: z.ZodArray<z.ZodString>;
|
|
59
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
declare function toCompact(pkg: Package): CompactPackage;
|
|
62
|
+
declare function fromCompact(cpkg: CompactPackage): Package;
|
|
63
|
+
declare const compactPackageCodec: z.ZodCodec<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>, z.ZodObject<{
|
|
64
|
+
s: z.ZodArray<z.ZodString>;
|
|
65
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
declare function decodeCompactPackage(bytes: Uint8Array<ArrayBuffer>): CompactPackage;
|
|
68
|
+
declare function encodeCompactPackage(cpkg: CompactPackage): Uint8Array<ArrayBuffer>;
|
|
69
|
+
//#endregion
|
|
70
|
+
export { CompactAttrPairs, CompactCdata, CompactComment, CompactDeclaration, CompactElement, CompactPackage, CompactPackageSchema, CompactPart, CompactPartSchema, CompactPi, CompactText, CompactXmlNode, CompactXmlNodeSchema, compactCodec, compactPackageCodec, decodeCompactPackage, encodeCompactPackage, fromCompact, isCompactXmlNode, toCompact };
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { d as XmlNode } from "./node-CkBWRjNR.js";
|
|
2
|
+
import { r as Package } from "./package-BUojjTXf.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/compact.d.ts
|
|
5
|
+
type CompactAttrPairs = number[];
|
|
6
|
+
type CompactElement = [0, number, CompactAttrPairs, CompactXmlNode[]];
|
|
7
|
+
type CompactText = [1, number];
|
|
8
|
+
type CompactCdata = [2, number];
|
|
9
|
+
type CompactComment = [3, number];
|
|
10
|
+
type CompactDeclaration = [4, CompactAttrPairs];
|
|
11
|
+
type CompactPi = [5, number, number];
|
|
12
|
+
type CompactXmlNode = CompactElement | CompactText | CompactCdata | CompactComment | CompactDeclaration | CompactPi;
|
|
13
|
+
declare function isCompactXmlNode(value: unknown): value is CompactXmlNode;
|
|
14
|
+
declare const CompactXmlNodeSchema: z.ZodCustom<CompactXmlNode, CompactXmlNode>;
|
|
15
|
+
declare const CompactPartSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>;
|
|
16
|
+
type CompactPart = z.infer<typeof CompactPartSchema>;
|
|
17
|
+
declare const CompactPackageSchema: z.ZodObject<{
|
|
18
|
+
s: z.ZodArray<z.ZodString>;
|
|
19
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
type CompactPackage = z.infer<typeof CompactPackageSchema>;
|
|
22
|
+
declare const compactCodec: z.ZodCodec<z.ZodObject<{
|
|
23
|
+
parts: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
24
|
+
kind: z.ZodLiteral<"xml">;
|
|
25
|
+
nodes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
26
|
+
type: z.ZodLiteral<"text">;
|
|
27
|
+
value: z.ZodString;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
type: z.ZodLiteral<"cdata">;
|
|
30
|
+
value: z.ZodString;
|
|
31
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
32
|
+
type: z.ZodLiteral<"comment">;
|
|
33
|
+
value: z.ZodString;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
type: z.ZodLiteral<"declaration">;
|
|
36
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
37
|
+
name: z.ZodString;
|
|
38
|
+
value: z.ZodString;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
+
type: z.ZodLiteral<"pi">;
|
|
42
|
+
target: z.ZodString;
|
|
43
|
+
content: z.ZodString;
|
|
44
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
45
|
+
type: z.ZodLiteral<"element">;
|
|
46
|
+
tag: z.ZodString;
|
|
47
|
+
attributes: z.ZodArray<z.ZodObject<{
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
value: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
children: z.ZodArray<z.ZodCustom<XmlNode, XmlNode>>;
|
|
52
|
+
}, z.core.$strip>], "type">>;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
kind: z.ZodLiteral<"binary">;
|
|
55
|
+
base64: z.ZodString;
|
|
56
|
+
}, z.core.$strip>], "kind">>;
|
|
57
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
58
|
+
s: z.ZodArray<z.ZodString>;
|
|
59
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
declare function toCompact(pkg: Package): CompactPackage;
|
|
62
|
+
declare function fromCompact(cpkg: CompactPackage): Package;
|
|
63
|
+
declare const compactPackageCodec: z.ZodCodec<z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>, z.ZodObject<{
|
|
64
|
+
s: z.ZodArray<z.ZodString>;
|
|
65
|
+
p: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodArray<z.ZodCustom<CompactXmlNode, CompactXmlNode>>, z.ZodNumber]>>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
declare function decodeCompactPackage(bytes: Uint8Array<ArrayBuffer>): CompactPackage;
|
|
68
|
+
declare function encodeCompactPackage(cpkg: CompactPackage): Uint8Array<ArrayBuffer>;
|
|
69
|
+
//#endregion
|
|
70
|
+
export { CompactAttrPairs, CompactCdata, CompactComment, CompactDeclaration, CompactElement, CompactPackage, CompactPackageSchema, CompactPart, CompactPartSchema, CompactPi, CompactText, CompactXmlNode, CompactXmlNodeSchema, compactCodec, compactPackageCodec, decodeCompactPackage, encodeCompactPackage, fromCompact, isCompactXmlNode, toCompact };
|