@ai-matrx/print 0.8.69 → 0.9.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/CHANGELOG.md +8 -0
- package/dist/document.cjs +8 -4
- package/dist/document.cjs.map +1 -1
- package/dist/document.js +8 -4
- package/dist/document.js.map +1 -1
- package/dist/labels.cjs +1 -1
- package/dist/labels.cjs.map +1 -1
- package/dist/labels.js +1 -1
- package/dist/labels.js.map +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/zip.cjs +71 -0
- package/dist/zip.cjs.map +1 -0
- package/dist/zip.d.cts +43 -0
- package/dist/zip.d.ts +43 -0
- package/dist/zip.js +40 -0
- package/dist/zip.js.map +1 -0
- package/dist/zpl.cjs +1 -1
- package/dist/zpl.cjs.map +1 -1
- package/dist/zpl.js +1 -1
- package/dist/zpl.js.map +1 -1
- package/package.json +12 -2
package/dist/zip.cjs
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/zip.ts
|
|
31
|
+
var zip_exports = {};
|
|
32
|
+
__export(zip_exports, {
|
|
33
|
+
buildZip: () => buildZip,
|
|
34
|
+
loadJSZip: () => loadJSZip,
|
|
35
|
+
readZip: () => readZip
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(zip_exports);
|
|
38
|
+
async function loadJSZip() {
|
|
39
|
+
const mod = await import("jszip");
|
|
40
|
+
return mod.default ?? mod;
|
|
41
|
+
}
|
|
42
|
+
async function buildZip(entries, options = {}) {
|
|
43
|
+
const JSZip = await loadJSZip();
|
|
44
|
+
const zip = new JSZip();
|
|
45
|
+
for (const e of entries) zip.file(e.path, e.data, e.date ? { date: e.date } : void 0);
|
|
46
|
+
return zip.generateAsync({
|
|
47
|
+
type: "blob",
|
|
48
|
+
compression: options.compression ?? "STORE",
|
|
49
|
+
...options.level ? { compressionOptions: { level: options.level } } : {},
|
|
50
|
+
...options.comment ? { comment: options.comment } : {}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async function readZip(input) {
|
|
54
|
+
const JSZip = await loadJSZip();
|
|
55
|
+
const zip = await JSZip.loadAsync(input);
|
|
56
|
+
const wrap = (o) => ({
|
|
57
|
+
path: o.name,
|
|
58
|
+
directory: o.dir,
|
|
59
|
+
text: () => o.async("string"),
|
|
60
|
+
bytes: () => o.async("uint8array")
|
|
61
|
+
});
|
|
62
|
+
const files = Object.values(zip.files).map(wrap);
|
|
63
|
+
return {
|
|
64
|
+
files,
|
|
65
|
+
get: (path) => {
|
|
66
|
+
const entry = zip.file(path);
|
|
67
|
+
return entry ? wrap(entry) : null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=zip.cjs.map
|
package/dist/zip.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/zip.ts"],"sourcesContent":["/**\n * `@ai-matrx/print/zip` — THE zip engine (AP-2 engine ruling). JSZip lives in exactly one place:\n * here. Print's own DOCX post-processing and EPUB packaging load it through `loadJSZip`, and\n * Alchemy's public door `@ai-matrx/alchemy/operate/zip` (`buildZip` / `readZip`) loads THIS module\n * lazily — Alchemy carries no JSZip of its own. JSZip loads on first use (`import()`), so a page\n * that never zips never downloads it.\n */\nimport type JSZipType from \"jszip\";\n\n/** The JSZip constructor, loaded on first use (CJS/ESM default unwrapped). */\nexport async function loadJSZip(): Promise<typeof JSZipType> {\n const mod = (await import(\"jszip\")) as unknown as { default?: typeof JSZipType };\n return (mod.default ?? mod) as typeof JSZipType;\n}\n\nexport type ZipEntry = {\n /** Path inside the archive; `a/b.txt` creates the folder. */\n path: string;\n data: string | Uint8Array | ArrayBuffer | Blob;\n /** A fixed modification time keeps the bytes reproducible. */\n date?: Date;\n};\nexport type ZipBuildOptions = {\n compression?: \"STORE\" | \"DEFLATE\";\n /** 1 (fast) – 9 (small); DEFLATE only. */\n level?: number;\n comment?: string;\n};\n\n/** Pack entries into a zip Blob. */\nexport async function buildZip(entries: readonly ZipEntry[], options: ZipBuildOptions = {}): Promise<Blob> {\n const JSZip = await loadJSZip();\n const zip = new JSZip();\n for (const e of entries) zip.file(e.path, e.data, e.date ? { date: e.date } : undefined);\n return zip.generateAsync({\n type: \"blob\",\n compression: options.compression ?? \"STORE\",\n ...(options.level ? { compressionOptions: { level: options.level } } : {}),\n ...(options.comment ? { comment: options.comment } : {}),\n });\n}\n\nexport type ZipFile = {\n path: string;\n directory: boolean;\n text(): Promise<string>;\n bytes(): Promise<Uint8Array>;\n};\nexport type ZipArchive = {\n /** Every entry (folders included), in archive order. */\n files: ZipFile[];\n /** One entry by exact path, or null. */\n get(path: string): ZipFile | null;\n};\n\n/** Open an archive from bytes or a Blob/File. Throws when the bytes are not a zip. */\nexport async function readZip(input: Uint8Array | ArrayBuffer | Blob): Promise<ZipArchive> {\n const JSZip = await loadJSZip();\n const zip = await JSZip.loadAsync(input);\n const wrap = (o: JSZipType.JSZipObject): ZipFile => ({\n path: o.name,\n directory: o.dir,\n text: () => o.async(\"string\"),\n bytes: () => o.async(\"uint8array\"),\n });\n const files = Object.values(zip.files).map(wrap);\n return {\n files,\n get: (path) => {\n const entry = zip.file(path);\n return entry ? wrap(entry) : null;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,eAAsB,YAAuC;AAC3D,QAAM,MAAO,MAAM,OAAO,OAAO;AACjC,SAAQ,IAAI,WAAW;AACzB;AAiBA,eAAsB,SAAS,SAA8B,UAA2B,CAAC,GAAkB;AACzG,QAAM,QAAQ,MAAM,UAAU;AAC9B,QAAM,MAAM,IAAI,MAAM;AACtB,aAAW,KAAK,QAAS,KAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,MAAS;AACvF,SAAO,IAAI,cAAc;AAAA,IACvB,MAAM;AAAA,IACN,aAAa,QAAQ,eAAe;AAAA,IACpC,GAAI,QAAQ,QAAQ,EAAE,oBAAoB,EAAE,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC;AAAA,IACxE,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,EACxD,CAAC;AACH;AAgBA,eAAsB,QAAQ,OAA6D;AACzF,QAAM,QAAQ,MAAM,UAAU;AAC9B,QAAM,MAAM,MAAM,MAAM,UAAU,KAAK;AACvC,QAAM,OAAO,CAAC,OAAuC;AAAA,IACnD,MAAM,EAAE;AAAA,IACR,WAAW,EAAE;AAAA,IACb,MAAM,MAAM,EAAE,MAAM,QAAQ;AAAA,IAC5B,OAAO,MAAM,EAAE,MAAM,YAAY;AAAA,EACnC;AACA,QAAM,QAAQ,OAAO,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,KAAK,CAAC,SAAS;AACb,YAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,aAAO,QAAQ,KAAK,KAAK,IAAI;AAAA,IAC/B;AAAA,EACF;AACF;","names":[]}
|
package/dist/zip.d.cts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import JSZipType from 'jszip';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `@ai-matrx/print/zip` — THE zip engine (AP-2 engine ruling). JSZip lives in exactly one place:
|
|
5
|
+
* here. Print's own DOCX post-processing and EPUB packaging load it through `loadJSZip`, and
|
|
6
|
+
* Alchemy's public door `@ai-matrx/alchemy/operate/zip` (`buildZip` / `readZip`) loads THIS module
|
|
7
|
+
* lazily — Alchemy carries no JSZip of its own. JSZip loads on first use (`import()`), so a page
|
|
8
|
+
* that never zips never downloads it.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** The JSZip constructor, loaded on first use (CJS/ESM default unwrapped). */
|
|
12
|
+
declare function loadJSZip(): Promise<typeof JSZipType>;
|
|
13
|
+
type ZipEntry = {
|
|
14
|
+
/** Path inside the archive; `a/b.txt` creates the folder. */
|
|
15
|
+
path: string;
|
|
16
|
+
data: string | Uint8Array | ArrayBuffer | Blob;
|
|
17
|
+
/** A fixed modification time keeps the bytes reproducible. */
|
|
18
|
+
date?: Date;
|
|
19
|
+
};
|
|
20
|
+
type ZipBuildOptions = {
|
|
21
|
+
compression?: "STORE" | "DEFLATE";
|
|
22
|
+
/** 1 (fast) – 9 (small); DEFLATE only. */
|
|
23
|
+
level?: number;
|
|
24
|
+
comment?: string;
|
|
25
|
+
};
|
|
26
|
+
/** Pack entries into a zip Blob. */
|
|
27
|
+
declare function buildZip(entries: readonly ZipEntry[], options?: ZipBuildOptions): Promise<Blob>;
|
|
28
|
+
type ZipFile = {
|
|
29
|
+
path: string;
|
|
30
|
+
directory: boolean;
|
|
31
|
+
text(): Promise<string>;
|
|
32
|
+
bytes(): Promise<Uint8Array>;
|
|
33
|
+
};
|
|
34
|
+
type ZipArchive = {
|
|
35
|
+
/** Every entry (folders included), in archive order. */
|
|
36
|
+
files: ZipFile[];
|
|
37
|
+
/** One entry by exact path, or null. */
|
|
38
|
+
get(path: string): ZipFile | null;
|
|
39
|
+
};
|
|
40
|
+
/** Open an archive from bytes or a Blob/File. Throws when the bytes are not a zip. */
|
|
41
|
+
declare function readZip(input: Uint8Array | ArrayBuffer | Blob): Promise<ZipArchive>;
|
|
42
|
+
|
|
43
|
+
export { type ZipArchive, type ZipBuildOptions, type ZipEntry, type ZipFile, buildZip, loadJSZip, readZip };
|
package/dist/zip.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import JSZipType from 'jszip';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `@ai-matrx/print/zip` — THE zip engine (AP-2 engine ruling). JSZip lives in exactly one place:
|
|
5
|
+
* here. Print's own DOCX post-processing and EPUB packaging load it through `loadJSZip`, and
|
|
6
|
+
* Alchemy's public door `@ai-matrx/alchemy/operate/zip` (`buildZip` / `readZip`) loads THIS module
|
|
7
|
+
* lazily — Alchemy carries no JSZip of its own. JSZip loads on first use (`import()`), so a page
|
|
8
|
+
* that never zips never downloads it.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/** The JSZip constructor, loaded on first use (CJS/ESM default unwrapped). */
|
|
12
|
+
declare function loadJSZip(): Promise<typeof JSZipType>;
|
|
13
|
+
type ZipEntry = {
|
|
14
|
+
/** Path inside the archive; `a/b.txt` creates the folder. */
|
|
15
|
+
path: string;
|
|
16
|
+
data: string | Uint8Array | ArrayBuffer | Blob;
|
|
17
|
+
/** A fixed modification time keeps the bytes reproducible. */
|
|
18
|
+
date?: Date;
|
|
19
|
+
};
|
|
20
|
+
type ZipBuildOptions = {
|
|
21
|
+
compression?: "STORE" | "DEFLATE";
|
|
22
|
+
/** 1 (fast) – 9 (small); DEFLATE only. */
|
|
23
|
+
level?: number;
|
|
24
|
+
comment?: string;
|
|
25
|
+
};
|
|
26
|
+
/** Pack entries into a zip Blob. */
|
|
27
|
+
declare function buildZip(entries: readonly ZipEntry[], options?: ZipBuildOptions): Promise<Blob>;
|
|
28
|
+
type ZipFile = {
|
|
29
|
+
path: string;
|
|
30
|
+
directory: boolean;
|
|
31
|
+
text(): Promise<string>;
|
|
32
|
+
bytes(): Promise<Uint8Array>;
|
|
33
|
+
};
|
|
34
|
+
type ZipArchive = {
|
|
35
|
+
/** Every entry (folders included), in archive order. */
|
|
36
|
+
files: ZipFile[];
|
|
37
|
+
/** One entry by exact path, or null. */
|
|
38
|
+
get(path: string): ZipFile | null;
|
|
39
|
+
};
|
|
40
|
+
/** Open an archive from bytes or a Blob/File. Throws when the bytes are not a zip. */
|
|
41
|
+
declare function readZip(input: Uint8Array | ArrayBuffer | Blob): Promise<ZipArchive>;
|
|
42
|
+
|
|
43
|
+
export { type ZipArchive, type ZipBuildOptions, type ZipEntry, type ZipFile, buildZip, loadJSZip, readZip };
|
package/dist/zip.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/zip.ts
|
|
2
|
+
async function loadJSZip() {
|
|
3
|
+
const mod = await import("jszip");
|
|
4
|
+
return mod.default ?? mod;
|
|
5
|
+
}
|
|
6
|
+
async function buildZip(entries, options = {}) {
|
|
7
|
+
const JSZip = await loadJSZip();
|
|
8
|
+
const zip = new JSZip();
|
|
9
|
+
for (const e of entries) zip.file(e.path, e.data, e.date ? { date: e.date } : void 0);
|
|
10
|
+
return zip.generateAsync({
|
|
11
|
+
type: "blob",
|
|
12
|
+
compression: options.compression ?? "STORE",
|
|
13
|
+
...options.level ? { compressionOptions: { level: options.level } } : {},
|
|
14
|
+
...options.comment ? { comment: options.comment } : {}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function readZip(input) {
|
|
18
|
+
const JSZip = await loadJSZip();
|
|
19
|
+
const zip = await JSZip.loadAsync(input);
|
|
20
|
+
const wrap = (o) => ({
|
|
21
|
+
path: o.name,
|
|
22
|
+
directory: o.dir,
|
|
23
|
+
text: () => o.async("string"),
|
|
24
|
+
bytes: () => o.async("uint8array")
|
|
25
|
+
});
|
|
26
|
+
const files = Object.values(zip.files).map(wrap);
|
|
27
|
+
return {
|
|
28
|
+
files,
|
|
29
|
+
get: (path) => {
|
|
30
|
+
const entry = zip.file(path);
|
|
31
|
+
return entry ? wrap(entry) : null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
buildZip,
|
|
37
|
+
loadJSZip,
|
|
38
|
+
readZip
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=zip.js.map
|
package/dist/zip.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/zip.ts"],"sourcesContent":["/**\n * `@ai-matrx/print/zip` — THE zip engine (AP-2 engine ruling). JSZip lives in exactly one place:\n * here. Print's own DOCX post-processing and EPUB packaging load it through `loadJSZip`, and\n * Alchemy's public door `@ai-matrx/alchemy/operate/zip` (`buildZip` / `readZip`) loads THIS module\n * lazily — Alchemy carries no JSZip of its own. JSZip loads on first use (`import()`), so a page\n * that never zips never downloads it.\n */\nimport type JSZipType from \"jszip\";\n\n/** The JSZip constructor, loaded on first use (CJS/ESM default unwrapped). */\nexport async function loadJSZip(): Promise<typeof JSZipType> {\n const mod = (await import(\"jszip\")) as unknown as { default?: typeof JSZipType };\n return (mod.default ?? mod) as typeof JSZipType;\n}\n\nexport type ZipEntry = {\n /** Path inside the archive; `a/b.txt` creates the folder. */\n path: string;\n data: string | Uint8Array | ArrayBuffer | Blob;\n /** A fixed modification time keeps the bytes reproducible. */\n date?: Date;\n};\nexport type ZipBuildOptions = {\n compression?: \"STORE\" | \"DEFLATE\";\n /** 1 (fast) – 9 (small); DEFLATE only. */\n level?: number;\n comment?: string;\n};\n\n/** Pack entries into a zip Blob. */\nexport async function buildZip(entries: readonly ZipEntry[], options: ZipBuildOptions = {}): Promise<Blob> {\n const JSZip = await loadJSZip();\n const zip = new JSZip();\n for (const e of entries) zip.file(e.path, e.data, e.date ? { date: e.date } : undefined);\n return zip.generateAsync({\n type: \"blob\",\n compression: options.compression ?? \"STORE\",\n ...(options.level ? { compressionOptions: { level: options.level } } : {}),\n ...(options.comment ? { comment: options.comment } : {}),\n });\n}\n\nexport type ZipFile = {\n path: string;\n directory: boolean;\n text(): Promise<string>;\n bytes(): Promise<Uint8Array>;\n};\nexport type ZipArchive = {\n /** Every entry (folders included), in archive order. */\n files: ZipFile[];\n /** One entry by exact path, or null. */\n get(path: string): ZipFile | null;\n};\n\n/** Open an archive from bytes or a Blob/File. Throws when the bytes are not a zip. */\nexport async function readZip(input: Uint8Array | ArrayBuffer | Blob): Promise<ZipArchive> {\n const JSZip = await loadJSZip();\n const zip = await JSZip.loadAsync(input);\n const wrap = (o: JSZipType.JSZipObject): ZipFile => ({\n path: o.name,\n directory: o.dir,\n text: () => o.async(\"string\"),\n bytes: () => o.async(\"uint8array\"),\n });\n const files = Object.values(zip.files).map(wrap);\n return {\n files,\n get: (path) => {\n const entry = zip.file(path);\n return entry ? wrap(entry) : null;\n },\n };\n}\n"],"mappings":";AAUA,eAAsB,YAAuC;AAC3D,QAAM,MAAO,MAAM,OAAO,OAAO;AACjC,SAAQ,IAAI,WAAW;AACzB;AAiBA,eAAsB,SAAS,SAA8B,UAA2B,CAAC,GAAkB;AACzG,QAAM,QAAQ,MAAM,UAAU;AAC9B,QAAM,MAAM,IAAI,MAAM;AACtB,aAAW,KAAK,QAAS,KAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,MAAS;AACvF,SAAO,IAAI,cAAc;AAAA,IACvB,MAAM;AAAA,IACN,aAAa,QAAQ,eAAe;AAAA,IACpC,GAAI,QAAQ,QAAQ,EAAE,oBAAoB,EAAE,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC;AAAA,IACxE,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,EACxD,CAAC;AACH;AAgBA,eAAsB,QAAQ,OAA6D;AACzF,QAAM,QAAQ,MAAM,UAAU;AAC9B,QAAM,MAAM,MAAM,MAAM,UAAU,KAAK;AACvC,QAAM,OAAO,CAAC,OAAuC;AAAA,IACnD,MAAM,EAAE;AAAA,IACR,WAAW,EAAE;AAAA,IACb,MAAM,MAAM,EAAE,MAAM,QAAQ;AAAA,IAC5B,OAAO,MAAM,EAAE,MAAM,YAAY;AAAA,EACnC;AACA,QAAM,QAAQ,OAAO,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI;AAC/C,SAAO;AAAA,IACL;AAAA,IACA,KAAK,CAAC,SAAS;AACb,YAAM,QAAQ,IAAI,KAAK,IAAI;AAC3B,aAAO,QAAQ,KAAK,KAAK,IAAI;AAAA,IAC/B;AAAA,EACF;AACF;","names":[]}
|
package/dist/zpl.cjs
CHANGED
|
@@ -404,7 +404,7 @@ function assertTemplateGeometry(t) {
|
|
|
404
404
|
);
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
|
-
if (typeof process === "undefined" ||
|
|
407
|
+
if (typeof process === "undefined" || process.env.NODE_ENV !== "production") {
|
|
408
408
|
LABEL_TEMPLATES.forEach(assertTemplateGeometry);
|
|
409
409
|
}
|
|
410
410
|
var DEFAULTS = {
|