plist 4.0.0 → 5.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.
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Encode a Uint8Array into a base64 string.
3
+ */
4
+ function uint8ArrayToBase64(bytes) {
5
+ let binary = '';
6
+ for (let i = 0; i < bytes.length; i++) {
7
+ binary += String.fromCharCode(bytes[i]);
8
+ }
9
+ return btoa(binary);
10
+ }
11
+ const XML_DECLARATION = '<?xml version="1.0" encoding="UTF-8"?>';
12
+ const DOCTYPE = '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">';
13
+ /**
14
+ * Generate an XML plist string from the input object `obj`.
15
+ *
16
+ * @param obj - the object to convert
17
+ * @param opts - optional options object
18
+ * @returns converted plist XML string
19
+ */
20
+ export function build(obj, opts) {
21
+ const pretty = !opts || opts.pretty !== false;
22
+ const indent = opts?.indent ?? ' ';
23
+ const newline = opts?.newline ?? '\n';
24
+ const lines = [];
25
+ function emit(depth, line) {
26
+ if (pretty) {
27
+ lines.push(indent.repeat(depth) + line);
28
+ }
29
+ else {
30
+ lines.push(line);
31
+ }
32
+ }
33
+ function walk(value, depth) {
34
+ if (typeof value === 'undefined') {
35
+ return;
36
+ }
37
+ else if (Array.isArray(value)) {
38
+ emit(depth, '<array>');
39
+ for (let i = 0; i < value.length; i++) {
40
+ walk(value[i], depth + 1);
41
+ }
42
+ emit(depth, '</array>');
43
+ }
44
+ else if (value instanceof ArrayBuffer) {
45
+ emit(depth, '<data>' + uint8ArrayToBase64(new Uint8Array(value)) + '</data>');
46
+ }
47
+ else if (ArrayBuffer.isView(value)) {
48
+ const bytes = value instanceof Uint8Array
49
+ ? value
50
+ : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
51
+ emit(depth, '<data>' + uint8ArrayToBase64(bytes) + '</data>');
52
+ }
53
+ else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {
54
+ emit(depth, '<dict>');
55
+ for (const prop in value) {
56
+ if (Object.hasOwn(value, prop)) {
57
+ const val = value[prop];
58
+ if (val === undefined || val === null)
59
+ continue;
60
+ emit(depth + 1, '<key>' + escapeXml(prop) + '</key>');
61
+ walk(val, depth + 1);
62
+ }
63
+ }
64
+ emit(depth, '</dict>');
65
+ }
66
+ else if (typeof value === 'number') {
67
+ const tag = Number.isInteger(value) && Math.abs(value) < 1e21 ? 'integer' : 'real';
68
+ emit(depth, '<' + tag + '>' + value.toString() + '</' + tag + '>');
69
+ }
70
+ else if (typeof value === 'bigint') {
71
+ emit(depth, '<integer>' + value.toString() + '</integer>');
72
+ }
73
+ else if (value instanceof Date) {
74
+ emit(depth, '<date>' + new Date(value).toISOString().replace(/\.000Z$/, 'Z') + '</date>');
75
+ }
76
+ else if (typeof value === 'boolean') {
77
+ emit(depth, value ? '<true/>' : '<false/>');
78
+ }
79
+ else if (typeof value === 'string') {
80
+ const escaped = escapeXml(value);
81
+ emit(depth, escaped ? '<string>' + escaped + '</string>' : '<string/>');
82
+ }
83
+ }
84
+ walk(obj, 1);
85
+ const sep = pretty ? newline : '';
86
+ const innerContent = lines.join(sep);
87
+ const parts = [
88
+ XML_DECLARATION,
89
+ DOCTYPE,
90
+ '<plist version="1.0">',
91
+ innerContent,
92
+ '</plist>',
93
+ ];
94
+ return parts.join(sep);
95
+ }
96
+ function escapeXml(str) {
97
+ return str
98
+ .replace(/&/g, '&amp;')
99
+ .replace(/</g, '&lt;')
100
+ .replace(/>/g, '&gt;')
101
+ // A literal carriage return in text content is normalized to a line feed
102
+ // when the plist is parsed back (XML line-ending normalization), so encode
103
+ // it as a character reference to keep `parse(build(x))` lossless. This
104
+ // matches the Node `build()`, which emits `&#xD;` via `xmlbuilder`.
105
+ .replace(/\r/g, '&#xD;');
106
+ }
107
+ //# sourceMappingURL=build.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.browser.js","sourceRoot":"","sources":["../src/build.browser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AASD,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,OAAO,GACX,wGAAwG,CAAC;AAE3G;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,GAAe,EAAE,IAAmB;IACxD,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;IAEtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS,IAAI,CAAC,KAAa,EAAE,IAAY;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa;QACzC,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,kBAAkB,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GACT,KAAK,YAAY,UAAU;gBACzB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAqB,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACtF,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QAChE,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,KAAgC,EAAE,CAAC;gBACpD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,EAAE,IAAI,CAAC,EAAE,CAAC;oBAC1D,MAAM,GAAG,GAAI,KAAiC,CAAC,IAAI,CAAC,CAAC;oBACrD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;wBAAE,SAAS;oBAChD,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;oBACtD,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,GAAG,GACP,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACzE,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YACjC,IAAI,CACF,KAAK,EACL,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,SAAS,CAC7E,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEb,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG;QACZ,eAAe;QACf,OAAO;QACP,uBAAuB;QACvB,YAAY;QACZ,UAAU;KACX,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,yEAAyE;QACzE,2EAA2E;QAC3E,uEAAuE;QACvE,oEAAoE;SACnE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { PlistValue } from './parse.js';
2
+ export interface BuildOptions {
3
+ pretty?: boolean;
4
+ indent?: string;
5
+ newline?: string;
6
+ [key: string]: unknown;
7
+ }
8
+ /**
9
+ * Generate an XML plist string from the input object `obj`.
10
+ *
11
+ * @param obj - the object to convert
12
+ * @param opts - optional options object
13
+ * @returns converted plist XML string
14
+ */
15
+ export declare function build(obj: PlistValue, opts?: BuildOptions): string;
16
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa7C,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAuBlE"}
package/dist/build.js ADDED
@@ -0,0 +1,94 @@
1
+ import xmlbuilder from 'xmlbuilder';
2
+ /**
3
+ * Encode a Uint8Array into a base64 string.
4
+ */
5
+ function uint8ArrayToBase64(bytes) {
6
+ let binary = '';
7
+ for (let i = 0; i < bytes.length; i++) {
8
+ binary += String.fromCharCode(bytes[i]);
9
+ }
10
+ return btoa(binary);
11
+ }
12
+ /**
13
+ * Generate an XML plist string from the input object `obj`.
14
+ *
15
+ * @param obj - the object to convert
16
+ * @param opts - optional options object
17
+ * @returns converted plist XML string
18
+ */
19
+ export function build(obj, opts) {
20
+ const XMLHDR = {
21
+ version: '1.0',
22
+ encoding: 'UTF-8',
23
+ };
24
+ const XMLDTD = {
25
+ pubid: '-//Apple//DTD PLIST 1.0//EN',
26
+ sysid: 'http://www.apple.com/DTDs/PropertyList-1.0.dtd',
27
+ };
28
+ const doc = xmlbuilder.create('plist');
29
+ doc.dec(XMLHDR.version, XMLHDR.encoding);
30
+ doc.dtd(XMLDTD.pubid, XMLDTD.sysid);
31
+ doc.att('version', '1.0');
32
+ walk_obj(obj, doc);
33
+ if (!opts)
34
+ opts = {};
35
+ // default `pretty` to `true`
36
+ opts.pretty = opts.pretty !== false;
37
+ return doc.end(opts);
38
+ }
39
+ /**
40
+ * depth first, recursive traversal of a javascript object. when complete,
41
+ * next_child contains a reference to the build XML object.
42
+ */
43
+ function walk_obj(next, next_child) {
44
+ if (typeof next === 'undefined') {
45
+ return;
46
+ }
47
+ else if (Array.isArray(next)) {
48
+ next_child = next_child.ele('array');
49
+ for (let i = 0; i < next.length; i++) {
50
+ walk_obj(next[i], next_child);
51
+ }
52
+ }
53
+ else if (next instanceof ArrayBuffer) {
54
+ next_child.ele('data').raw(uint8ArrayToBase64(new Uint8Array(next)));
55
+ }
56
+ else if (ArrayBuffer.isView(next)) {
57
+ // Handles Uint8Array, Buffer, and all typed arrays
58
+ const bytes = next instanceof Uint8Array
59
+ ? next
60
+ : new Uint8Array(next.buffer, next.byteOffset, next.byteLength);
61
+ next_child.ele('data').raw(uint8ArrayToBase64(bytes));
62
+ }
63
+ else if (typeof next === 'object' && next !== null && !(next instanceof Date)) {
64
+ next_child = next_child.ele('dict');
65
+ for (const prop in next) {
66
+ if (Object.hasOwn(next, prop)) {
67
+ const val = next[prop];
68
+ if (val === undefined || val === null)
69
+ continue;
70
+ next_child.ele('key').txt(prop);
71
+ walk_obj(val, next_child);
72
+ }
73
+ }
74
+ }
75
+ else if (typeof next === 'number') {
76
+ const tag_type = Number.isInteger(next) && Math.abs(next) < 1e21 ? 'integer' : 'real';
77
+ next_child.ele(tag_type).txt(next.toString());
78
+ }
79
+ else if (typeof next === 'bigint') {
80
+ next_child.ele('integer').txt(next.toString());
81
+ }
82
+ else if (next instanceof Date) {
83
+ next_child
84
+ .ele('date')
85
+ .txt(new Date(next).toISOString().replace(/\.000Z$/, 'Z'));
86
+ }
87
+ else if (typeof next === 'boolean') {
88
+ next_child.ele(next ? 'true' : 'false');
89
+ }
90
+ else if (typeof next === 'string') {
91
+ next_child.ele('string').txt(next);
92
+ }
93
+ }
94
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { parse } from './parse.browser.js';
2
+ export { parseOpenStep } from './parse-openstep.js';
3
+ export type { PlistValue } from './parse.browser.js';
4
+ export { parseBinary } from './parse-binary.js';
5
+ export { build } from './build.browser.js';
6
+ export { buildBinary } from './build-binary.js';
7
+ //# sourceMappingURL=index.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { parse } from './parse.browser.js';
2
+ export { parseOpenStep } from './parse-openstep.js';
3
+ export { parseBinary } from './parse-binary.js';
4
+ export { build } from './build.browser.js';
5
+ export { buildBinary } from './build-binary.js';
6
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { parse } from './parse.js';
2
+ export { parseOpenStep } from './parse-openstep.js';
3
+ export type { PlistValue } from './parse.js';
4
+ export { parseBinary } from './parse-binary.js';
5
+ export { build } from './build.js';
6
+ export { buildBinary } from './build-binary.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { parse } from './parse.js';
2
+ export { parseOpenStep } from './parse-openstep.js';
3
+ export { parseBinary } from './parse-binary.js';
4
+ export { build } from './build.js';
5
+ export { buildBinary } from './build-binary.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PlistValue } from './parse.js';
2
+ /**
3
+ * Parse a binary plist (bplist00 format) into a PlistValue.
4
+ */
5
+ export declare function parseBinary(data: Uint8Array): PlistValue;
6
+ //# sourceMappingURL=parse-binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-binary.d.ts","sourceRoot":"","sources":["../src/parse-binary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAoB7C;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA+KxD"}
@@ -0,0 +1,179 @@
1
+ const EPOCH_2001 = 978307200000; // ms between 1970-01-01 and 2001-01-01
2
+ function readSizedInt(view, offset, size) {
3
+ switch (size) {
4
+ case 1: return view.getUint8(offset);
5
+ case 2: return view.getUint16(offset);
6
+ case 4: return view.getUint32(offset);
7
+ case 8: {
8
+ const hi = view.getUint32(offset);
9
+ const lo = view.getUint32(offset + 4);
10
+ // For values that fit in safe integer range
11
+ return hi * 0x100000000 + lo;
12
+ }
13
+ default:
14
+ throw new Error(`Unsupported int size: ${size}`);
15
+ }
16
+ }
17
+ /**
18
+ * Parse a binary plist (bplist00 format) into a PlistValue.
19
+ */
20
+ export function parseBinary(data) {
21
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
22
+ const len = data.byteLength;
23
+ // Validate header
24
+ const header = String.fromCharCode(...data.subarray(0, 8));
25
+ if (header !== 'bplist00') {
26
+ throw new Error('Invalid binary plist: bad magic');
27
+ }
28
+ if (len < 8 + 32) {
29
+ throw new Error('Invalid binary plist: file too short');
30
+ }
31
+ // Read trailer (last 32 bytes)
32
+ const trailerOffset = len - 32;
33
+ const offsetTableOffsetSize = view.getUint8(trailerOffset + 6);
34
+ const objectRefSize = view.getUint8(trailerOffset + 7);
35
+ const numObjects = readSizedInt(view, trailerOffset + 8, 8);
36
+ const topObject = readSizedInt(view, trailerOffset + 16, 8);
37
+ const offsetTableOffset = readSizedInt(view, trailerOffset + 24, 8);
38
+ if (![1, 2, 4, 8].includes(offsetTableOffsetSize) || ![1, 2, 4, 8].includes(objectRefSize)) {
39
+ throw new Error('Invalid binary plist: bad trailer int size');
40
+ }
41
+ if (numObjects < 1 ||
42
+ topObject >= numObjects ||
43
+ offsetTableOffset < 8 ||
44
+ offsetTableOffset + numObjects * offsetTableOffsetSize > trailerOffset) {
45
+ throw new Error('Invalid binary plist: bad trailer');
46
+ }
47
+ // Read offset table
48
+ const offsets = [];
49
+ for (let i = 0; i < numObjects; i++) {
50
+ const objOffset = readSizedInt(view, offsetTableOffset + i * offsetTableOffsetSize, offsetTableOffsetSize);
51
+ if (objOffset < 8 || objOffset >= offsetTableOffset) {
52
+ throw new Error(`Invalid binary plist: bad offset for object ${i}`);
53
+ }
54
+ offsets.push(objOffset);
55
+ }
56
+ // Each object is parsed at most once. Without this, objects referenced
57
+ // from multiple places would be re-parsed every time, allowing a small
58
+ // input to expand exponentially. `inProgress` detects reference cycles.
59
+ const cache = new Map();
60
+ const inProgress = new Set();
61
+ function readRef(offset) {
62
+ const ref = readSizedInt(view, offset, objectRefSize);
63
+ if (ref >= numObjects) {
64
+ throw new Error(`Invalid binary plist: object ref ${ref} out of range`);
65
+ }
66
+ return ref;
67
+ }
68
+ function parseObject(index) {
69
+ const cached = cache.get(index);
70
+ if (cached !== undefined)
71
+ return cached;
72
+ if (inProgress.has(index)) {
73
+ throw new Error('Invalid binary plist: circular object reference');
74
+ }
75
+ inProgress.add(index);
76
+ try {
77
+ const value = parseObjectUncached(index);
78
+ // Date and data objects are mutable and cheap to recreate, so don't
79
+ // share instances between references to avoid surprising aliasing
80
+ if (!(value instanceof Date) && !(value instanceof Uint8Array)) {
81
+ cache.set(index, value);
82
+ }
83
+ return value;
84
+ }
85
+ finally {
86
+ inProgress.delete(index);
87
+ }
88
+ }
89
+ function parseObjectUncached(index) {
90
+ let offset = offsets[index];
91
+ const marker = view.getUint8(offset);
92
+ const type = marker >> 4;
93
+ let size = marker & 0x0f;
94
+ offset++;
95
+ // Read extended size
96
+ if (type !== 0 && type !== 8 && size === 0x0f) {
97
+ const extMarker = view.getUint8(offset);
98
+ offset++;
99
+ const extSize = 1 << (extMarker & 0x0f);
100
+ size = readSizedInt(view, offset, extSize);
101
+ offset += extSize;
102
+ }
103
+ switch (type) {
104
+ case 0x0: // singletons
105
+ if (marker === 0x00)
106
+ return null;
107
+ if (marker === 0x08)
108
+ return false;
109
+ if (marker === 0x09)
110
+ return true;
111
+ throw new Error(`Unknown singleton: 0x${marker.toString(16)}`);
112
+ case 0x1: { // int
113
+ const byteCount = 1 << size;
114
+ if (byteCount <= 4) {
115
+ return readSizedInt(view, offset, byteCount);
116
+ }
117
+ // 8-byte int
118
+ const hi = view.getInt32(offset);
119
+ const lo = view.getUint32(offset + 4);
120
+ return hi * 0x100000000 + lo;
121
+ }
122
+ case 0x2: { // real
123
+ const byteCount = 1 << size;
124
+ if (byteCount === 4)
125
+ return view.getFloat32(offset);
126
+ if (byteCount === 8)
127
+ return view.getFloat64(offset);
128
+ throw new Error(`Unsupported real size: ${byteCount}`);
129
+ }
130
+ case 0x3: { // date
131
+ const timestamp = view.getFloat64(offset);
132
+ return new Date(timestamp * 1000 + EPOCH_2001);
133
+ }
134
+ case 0x4: { // data
135
+ return new Uint8Array(data.buffer, data.byteOffset + offset, size);
136
+ }
137
+ case 0x5: { // ASCII string
138
+ let s = '';
139
+ for (let i = 0; i < size; i++) {
140
+ s += String.fromCharCode(view.getUint8(offset + i));
141
+ }
142
+ return s;
143
+ }
144
+ case 0x6: { // UTF-16BE string
145
+ let s = '';
146
+ for (let i = 0; i < size; i++) {
147
+ s += String.fromCharCode(view.getUint16(offset + i * 2));
148
+ }
149
+ return s;
150
+ }
151
+ case 0x8: { // UID
152
+ const byteCount = size + 1;
153
+ return { UID: readSizedInt(view, offset, byteCount) };
154
+ }
155
+ case 0xa: { // array
156
+ const arr = [];
157
+ for (let i = 0; i < size; i++) {
158
+ const ref = readRef(offset + i * objectRefSize);
159
+ arr.push(parseObject(ref));
160
+ }
161
+ return arr;
162
+ }
163
+ case 0xd: { // dict
164
+ const dict = {};
165
+ for (let i = 0; i < size; i++) {
166
+ const keyRef = readRef(offset + i * objectRefSize);
167
+ const valRef = readRef(offset + (size + i) * objectRefSize);
168
+ const key = parseObject(keyRef);
169
+ dict[key] = parseObject(valRef);
170
+ }
171
+ return dict;
172
+ }
173
+ default:
174
+ throw new Error(`Unknown object type: 0x${type.toString(16)}`);
175
+ }
176
+ }
177
+ return parseObject(topObject);
178
+ }
179
+ //# sourceMappingURL=parse-binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-binary.js","sourceRoot":"","sources":["../src/parse-binary.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,uCAAuC;AAExE,SAAS,YAAY,CAAC,IAAc,EAAE,MAAc,EAAE,IAAY;IAChE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,CAAC;YACP,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtC,4CAA4C;YAC5C,OAAO,EAAE,GAAG,WAAW,GAAG,EAAE,CAAC;QAC/B,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;IAE5B,kBAAkB;IAClB,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,+BAA+B;IAC/B,MAAM,aAAa,GAAG,GAAG,GAAG,EAAE,CAAC;IAC/B,MAAM,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IACE,UAAU,GAAG,CAAC;QACd,SAAS,IAAI,UAAU;QACvB,iBAAiB,GAAG,CAAC;QACrB,iBAAiB,GAAG,UAAU,GAAG,qBAAqB,GAAG,aAAa,EACtE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,GAAG,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;QAC3G,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,IAAI,iBAAiB,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,SAAS,OAAO,CAAC,MAAc;QAC7B,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,eAAe,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,WAAW,CAAC,KAAa;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACzC,oEAAoE;YACpE,kEAAkE;YAClE,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAa;QACxC,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC;QACzB,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,CAAC;QAET,qBAAqB;QACrB,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAI,OAAO,CAAC;QACpB,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG,EAAE,aAAa;gBACrB,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACjC,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAClC,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAEjE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;gBAChB,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC;gBAC5B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC/C,CAAC;gBACD,aAAa;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACjC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtC,OAAO,EAAE,GAAG,WAAW,GAAG,EAAE,CAAC;YAC/B,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;gBACjB,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC;gBAC5B,IAAI,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;gBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC;YACjD,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;gBACjB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;YACrE,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;gBACzB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB;gBAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3D,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;gBAChB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;gBAC3B,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAA2B,CAAC;YACjF,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAClB,MAAM,GAAG,GAAiB,EAAE,CAAC;gBAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;oBAChD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YAED,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;gBACjB,MAAM,IAAI,GAAkC,EAAE,CAAC;gBAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;oBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;oBAC5D,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAW,CAAC;oBAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PlistValue } from './parse.js';
2
+ /**
3
+ * Parses an OpenStep/ASCII plist string into a PlistValue.
4
+ */
5
+ export declare function parseOpenStep(input: string): PlistValue;
6
+ //# sourceMappingURL=parse-openstep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-openstep.d.ts","sourceRoot":"","sources":["../src/parse-openstep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4L7C;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAIvD"}