@mesh-sync/meshpack 1.0.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.
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Extension accessor utilities for MeshPack extensions object.
3
+ *
4
+ * Extensions follow a versioned envelope pattern:
5
+ * ```json
6
+ * { "meshsync_geometry": { "v1": { ... } } }
7
+ * ```
8
+ */
9
+ import type { GeometryV1, DependenciesV1, PrintabilityV1, ContentV1 } from './types';
10
+ /**
11
+ * Get a specific version of an extension from the extensions object.
12
+ */
13
+ export declare function getExtensionVersion<T = Record<string, unknown>>(extensions: Record<string, unknown> | undefined, extName: string, version: string): T | undefined;
14
+ /**
15
+ * Get the latest (highest numbered) version of an extension.
16
+ */
17
+ export declare function getLatestExtension<T = Record<string, unknown>>(extensions: Record<string, unknown> | undefined, extName: string): {
18
+ version: string;
19
+ data: T;
20
+ } | undefined;
21
+ /**
22
+ * Get the best matching version of an extension (<= `maxVersion`).
23
+ */
24
+ export declare function getBestExtension<T = Record<string, unknown>>(extensions: Record<string, unknown> | undefined, extName: string, maxVersion?: string): {
25
+ version: string;
26
+ data: T;
27
+ } | undefined;
28
+ /**
29
+ * Set an extension version in the extensions object (mutates in place).
30
+ */
31
+ export declare function setExtension(extensions: Record<string, unknown>, extName: string, version: string, data: Record<string, unknown>): Record<string, unknown>;
32
+ export declare function getGeometry(ext: Record<string, unknown> | undefined): GeometryV1 | undefined;
33
+ export declare function getDependencies(ext: Record<string, unknown> | undefined): DependenciesV1 | undefined;
34
+ export declare function getPrintability(ext: Record<string, unknown> | undefined): PrintabilityV1 | undefined;
35
+ export declare function getContent(ext: Record<string, unknown> | undefined): ContentV1 | undefined;
36
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACV,MAAM,SAAS,CAAC;AAOjB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,CAAC,GAAG,SAAS,CAKf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG,SAAS,CAY1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC/C,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG,SAAS,CAgB1C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAMD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAE5F;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAEpG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAEpG;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAE1F"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Extension accessor utilities for MeshPack extensions object.
4
+ *
5
+ * Extensions follow a versioned envelope pattern:
6
+ * ```json
7
+ * { "meshsync_geometry": { "v1": { ... } } }
8
+ * ```
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getExtensionVersion = getExtensionVersion;
12
+ exports.getLatestExtension = getLatestExtension;
13
+ exports.getBestExtension = getBestExtension;
14
+ exports.setExtension = setExtension;
15
+ exports.getGeometry = getGeometry;
16
+ exports.getDependencies = getDependencies;
17
+ exports.getPrintability = getPrintability;
18
+ exports.getContent = getContent;
19
+ const types_1 = require("./types");
20
+ // ────────────────────────────────────────────────────────────────
21
+ // Generic accessors
22
+ // ────────────────────────────────────────────────────────────────
23
+ /**
24
+ * Get a specific version of an extension from the extensions object.
25
+ */
26
+ function getExtensionVersion(extensions, extName, version) {
27
+ if (!extensions)
28
+ return undefined;
29
+ const ext = extensions[extName];
30
+ if (!ext || typeof ext !== 'object')
31
+ return undefined;
32
+ return ext[version];
33
+ }
34
+ /**
35
+ * Get the latest (highest numbered) version of an extension.
36
+ */
37
+ function getLatestExtension(extensions, extName) {
38
+ if (!extensions)
39
+ return undefined;
40
+ const ext = extensions[extName];
41
+ if (!ext || typeof ext !== 'object')
42
+ return undefined;
43
+ const versions = Object.keys(ext)
44
+ .filter((k) => k.startsWith('v') && !isNaN(parseInt(k.slice(1), 10)))
45
+ .sort((a, b) => parseInt(b.slice(1), 10) - parseInt(a.slice(1), 10));
46
+ if (versions.length === 0)
47
+ return undefined;
48
+ const latest = versions[0];
49
+ return { version: latest, data: ext[latest] };
50
+ }
51
+ /**
52
+ * Get the best matching version of an extension (<= `maxVersion`).
53
+ */
54
+ function getBestExtension(extensions, extName, maxVersion) {
55
+ if (!maxVersion)
56
+ return getLatestExtension(extensions, extName);
57
+ if (!extensions)
58
+ return undefined;
59
+ const ext = extensions[extName];
60
+ if (!ext || typeof ext !== 'object')
61
+ return undefined;
62
+ const maxNum = parseInt(maxVersion.replace('v', ''), 10);
63
+ const versions = Object.keys(ext)
64
+ .filter((k) => k.startsWith('v') && !isNaN(parseInt(k.slice(1), 10)))
65
+ .filter((k) => parseInt(k.slice(1), 10) <= maxNum)
66
+ .sort((a, b) => parseInt(b.slice(1), 10) - parseInt(a.slice(1), 10));
67
+ if (versions.length === 0)
68
+ return undefined;
69
+ const best = versions[0];
70
+ return { version: best, data: ext[best] };
71
+ }
72
+ /**
73
+ * Set an extension version in the extensions object (mutates in place).
74
+ */
75
+ function setExtension(extensions, extName, version, data) {
76
+ if (!extensions[extName]) {
77
+ extensions[extName] = {};
78
+ }
79
+ extensions[extName][version] = data;
80
+ return extensions;
81
+ }
82
+ // ────────────────────────────────────────────────────────────────
83
+ // Convenience typed accessors
84
+ // ────────────────────────────────────────────────────────────────
85
+ function getGeometry(ext) {
86
+ return getBestExtension(ext, types_1.ExtensionNames.MESHSYNC_GEOMETRY, 'v1')?.data;
87
+ }
88
+ function getDependencies(ext) {
89
+ return getBestExtension(ext, types_1.ExtensionNames.MESHSYNC_DEPENDENCIES, 'v1')?.data;
90
+ }
91
+ function getPrintability(ext) {
92
+ return getBestExtension(ext, types_1.ExtensionNames.MESHSYNC_PRINTABILITY, 'v1')?.data;
93
+ }
94
+ function getContent(ext) {
95
+ return getBestExtension(ext, types_1.ExtensionNames.MESHSYNC_CONTENT, 'v1')?.data;
96
+ }
97
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @mesh-sync/meshpack — TypeScript SDK for MeshPack v1.0.0
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { readMeshPack, listModelEntries, getGeometry } from '@mesh-sync/meshpack';
7
+ *
8
+ * const pack = await readMeshPack(buffer);
9
+ * const models = listModelEntries(pack.entries);
10
+ * for (const m of models) {
11
+ * console.log(m.path, getGeometry(m.extensions));
12
+ * }
13
+ * ```
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ export type { HashAlgorithm, HashValue, OSType, MeasurementUnit, UpAxis, MetamodelRole, AssemblyRole, DeltaOperation, IdConflictPolicy, MetamodelMergePolicy, SignatureAlgorithm, MetamodelFilterMode, NamespacedId, CreatorInfo, PlatformInfo, IndexSummary, ShardListEntry, SignatureEntry, Generation, MetamodelFilter, ImportPolicy, Encryption, Manifest, BoundingBox, FileAttributes, Transform, Assembly, MetamodelMembership, FileEntry, Shard, Sidecar, GeometryV1, DependenciesV1, PrintabilityV1, ContentV1, } from './types';
18
+ export { ExtensionNames, ExtensionVersions } from './types';
19
+ export { getExtensionVersion, getLatestExtension, getBestExtension, setExtension, getGeometry, getDependencies, getPrintability, getContent, } from './extensions';
20
+ export type { MeshPackContents, WriteMeshPackOptions, Severity, ValidationFinding, ValidationResult, } from './meshpack';
21
+ export { readMeshPack, writeMeshPack, computeEntriesHash, validateMeshPack, readResource, listModelEntries, findByHash, listByMetamodel, } from './meshpack';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,YAAY,EACV,aAAa,EACb,SAAS,EACT,MAAM,EACN,eAAe,EACf,MAAM,EACN,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,cAAc,EACd,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,OAAO,EACP,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * @mesh-sync/meshpack — TypeScript SDK for MeshPack v1.0.0
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { readMeshPack, listModelEntries, getGeometry } from '@mesh-sync/meshpack';
8
+ *
9
+ * const pack = await readMeshPack(buffer);
10
+ * const models = listModelEntries(pack.entries);
11
+ * for (const m of models) {
12
+ * console.log(m.path, getGeometry(m.extensions));
13
+ * }
14
+ * ```
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.listByMetamodel = exports.findByHash = exports.listModelEntries = exports.readResource = exports.validateMeshPack = exports.computeEntriesHash = exports.writeMeshPack = exports.readMeshPack = exports.getContent = exports.getPrintability = exports.getDependencies = exports.getGeometry = exports.setExtension = exports.getBestExtension = exports.getLatestExtension = exports.getExtensionVersion = exports.ExtensionVersions = exports.ExtensionNames = void 0;
20
+ var types_1 = require("./types");
21
+ Object.defineProperty(exports, "ExtensionNames", { enumerable: true, get: function () { return types_1.ExtensionNames; } });
22
+ Object.defineProperty(exports, "ExtensionVersions", { enumerable: true, get: function () { return types_1.ExtensionVersions; } });
23
+ // Extension helpers
24
+ var extensions_1 = require("./extensions");
25
+ Object.defineProperty(exports, "getExtensionVersion", { enumerable: true, get: function () { return extensions_1.getExtensionVersion; } });
26
+ Object.defineProperty(exports, "getLatestExtension", { enumerable: true, get: function () { return extensions_1.getLatestExtension; } });
27
+ Object.defineProperty(exports, "getBestExtension", { enumerable: true, get: function () { return extensions_1.getBestExtension; } });
28
+ Object.defineProperty(exports, "setExtension", { enumerable: true, get: function () { return extensions_1.setExtension; } });
29
+ Object.defineProperty(exports, "getGeometry", { enumerable: true, get: function () { return extensions_1.getGeometry; } });
30
+ Object.defineProperty(exports, "getDependencies", { enumerable: true, get: function () { return extensions_1.getDependencies; } });
31
+ Object.defineProperty(exports, "getPrintability", { enumerable: true, get: function () { return extensions_1.getPrintability; } });
32
+ Object.defineProperty(exports, "getContent", { enumerable: true, get: function () { return extensions_1.getContent; } });
33
+ var meshpack_1 = require("./meshpack");
34
+ Object.defineProperty(exports, "readMeshPack", { enumerable: true, get: function () { return meshpack_1.readMeshPack; } });
35
+ Object.defineProperty(exports, "writeMeshPack", { enumerable: true, get: function () { return meshpack_1.writeMeshPack; } });
36
+ Object.defineProperty(exports, "computeEntriesHash", { enumerable: true, get: function () { return meshpack_1.computeEntriesHash; } });
37
+ Object.defineProperty(exports, "validateMeshPack", { enumerable: true, get: function () { return meshpack_1.validateMeshPack; } });
38
+ Object.defineProperty(exports, "readResource", { enumerable: true, get: function () { return meshpack_1.readResource; } });
39
+ Object.defineProperty(exports, "listModelEntries", { enumerable: true, get: function () { return meshpack_1.listModelEntries; } });
40
+ Object.defineProperty(exports, "findByHash", { enumerable: true, get: function () { return meshpack_1.findByHash; } });
41
+ Object.defineProperty(exports, "listByMetamodel", { enumerable: true, get: function () { return meshpack_1.listByMetamodel; } });
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAyCH,iCAA4D;AAAnD,uGAAA,cAAc,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AAE1C,oBAAoB;AACpB,2CASsB;AARpB,iHAAA,mBAAmB,OAAA;AACnB,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;AACZ,yGAAA,WAAW,OAAA;AACX,6GAAA,eAAe,OAAA;AACf,6GAAA,eAAe,OAAA;AACf,wGAAA,UAAU,OAAA;AAYZ,uCASoB;AARlB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAChB,sGAAA,UAAU,OAAA;AACV,2GAAA,eAAe,OAAA"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * MeshPack read / write / validate API.
3
+ *
4
+ * Uses JSZip under the hood. This module provides three main functions:
5
+ * - `readMeshPack()` — parse a .meshpack buffer into typed objects
6
+ * - `writeMeshPack()` — build a .meshpack buffer from typed objects
7
+ * - `validateMeshPack()` — structural validation returning findings
8
+ *
9
+ * For the full validator, use **tools/meshpack_validate.py** (Python).
10
+ * This TS validator covers the most common structural checks sufficient
11
+ * for L1–L2 conformance.
12
+ */
13
+ import JSZip from 'jszip';
14
+ import type { Manifest, Shard, FileEntry, HashAlgorithm, HashValue } from './types';
15
+ /** Result of reading a .meshpack archive. */
16
+ export interface MeshPackContents {
17
+ manifest: Manifest;
18
+ shards: Shard[];
19
+ /** All file entries across all shards, keyed by `path`. */
20
+ entries: Map<string, FileEntry>;
21
+ /** The raw JSZip instance for resource access. */
22
+ zip: JSZip;
23
+ }
24
+ /**
25
+ * Parse a .meshpack ZIP buffer into typed objects.
26
+ *
27
+ * @param data ZIP archive as `ArrayBuffer`, `Uint8Array`, or `Buffer`.
28
+ * @throws Error if `manifest.json` is missing or malformed.
29
+ */
30
+ export declare function readMeshPack(data: ArrayBuffer | Uint8Array | Buffer): Promise<MeshPackContents>;
31
+ /** Options for building a .meshpack archive. */
32
+ export interface WriteMeshPackOptions {
33
+ manifest: Manifest;
34
+ shards: Shard[];
35
+ /** Optional resource blobs: key = filename in `resources/` (e.g. `abc123.stl`). */
36
+ resources?: Map<string, Uint8Array | Buffer>;
37
+ /** Optional extra files (e.g. `_README.md`). */
38
+ extraFiles?: Map<string, string | Uint8Array>;
39
+ /** Compression method for ZIP entries. Default: `DEFLATE`. */
40
+ compression?: 'STORE' | 'DEFLATE';
41
+ }
42
+ /**
43
+ * Build a .meshpack ZIP archive from typed objects.
44
+ *
45
+ * The ZIP is built with `manifest.json` as the **first entry** (REQ-L2-000).
46
+ * Returns the archive as a Uint8Array.
47
+ */
48
+ export declare function writeMeshPack(opts: WriteMeshPackOptions): Promise<Uint8Array>;
49
+ /**
50
+ * Compute the canonical entries_hash for a list of file entries.
51
+ *
52
+ * Uses RFC 8785 (JCS) canonicalization approximation via
53
+ * `JSON.stringify` with `sort_keys=true` (Object.keys sorted) and
54
+ * compact separators. Then hashes with the provided algorithm.
55
+ *
56
+ * **Note**: For SHA-256 this uses the Web Crypto API (or Node crypto).
57
+ * Only `sha256` is supported in this TS implementation.
58
+ *
59
+ * @param entries Array of FileEntry objects (must be sorted by path).
60
+ * @param algo Hash algorithm (only `sha256` currently supported).
61
+ * @returns HashValue like `sha256:abc123...`
62
+ */
63
+ export declare function computeEntriesHash(entries: FileEntry[], algo?: HashAlgorithm): Promise<HashValue>;
64
+ /** Severity of a validation finding. */
65
+ export type Severity = 'ERROR' | 'WARNING' | 'INFO';
66
+ /** A single validation finding. */
67
+ export interface ValidationFinding {
68
+ code: string;
69
+ severity: Severity;
70
+ message: string;
71
+ }
72
+ /** Result of `validateMeshPack()`. */
73
+ export interface ValidationResult {
74
+ valid: boolean;
75
+ findings: ValidationFinding[];
76
+ errors: number;
77
+ warnings: number;
78
+ }
79
+ /**
80
+ * Structural validation of a MeshPack archive (L1–L2 subset).
81
+ *
82
+ * Checks performed:
83
+ * - manifest.json exists and is valid JSON
84
+ * - Required manifest fields present
85
+ * - hash_algo is a supported value
86
+ * - shard_list is non-empty with correct ID format
87
+ * - All shards referenced in shard_list exist in the ZIP
88
+ * - Shard entries are sorted by path
89
+ * - entries_count matches actual length
90
+ * - manifest.json is the first ZIP entry (L2)
91
+ * - Path constraints (no `..`, no absolute, ≤ 1024 chars)
92
+ *
93
+ * For exhaustive validation use the Python `meshpack_validate.py` tool.
94
+ */
95
+ export declare function validateMeshPack(data: ArrayBuffer | Uint8Array | Buffer): Promise<ValidationResult>;
96
+ /**
97
+ * Read the binary content of a resource referenced by a FileEntry.
98
+ *
99
+ * @param zip – The JSZip instance from `readMeshPack().zip`.
100
+ * @param entry – The FileEntry whose `resource_ref` to read.
101
+ * @param type – Output type (`'uint8array'`, `'arraybuffer'`, `'blob'`, `'string'`).
102
+ */
103
+ export declare function readResource(zip: JSZip, entry: FileEntry, type: 'uint8array'): Promise<Uint8Array | null>;
104
+ export declare function readResource(zip: JSZip, entry: FileEntry, type: 'arraybuffer'): Promise<ArrayBuffer | null>;
105
+ export declare function readResource(zip: JSZip, entry: FileEntry, type: 'string'): Promise<string | null>;
106
+ /**
107
+ * List all model file entries (common 3D file extensions).
108
+ */
109
+ export declare function listModelEntries(entries: Map<string, FileEntry> | FileEntry[]): FileEntry[];
110
+ /**
111
+ * Find entries by content hash.
112
+ */
113
+ export declare function findByHash(entries: Map<string, FileEntry> | FileEntry[], hash: string): FileEntry[];
114
+ /**
115
+ * List entries belonging to a specific metamodel ID.
116
+ */
117
+ export declare function listByMetamodel(entries: Map<string, FileEntry> | FileEntry[], metamodelId: string): FileEntry[];
118
+ //# sourceMappingURL=meshpack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshpack.d.ts","sourceRoot":"","sources":["../src/meshpack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ /**
3
+ * MeshPack read / write / validate API.
4
+ *
5
+ * Uses JSZip under the hood. This module provides three main functions:
6
+ * - `readMeshPack()` — parse a .meshpack buffer into typed objects
7
+ * - `writeMeshPack()` — build a .meshpack buffer from typed objects
8
+ * - `validateMeshPack()` — structural validation returning findings
9
+ *
10
+ * For the full validator, use **tools/meshpack_validate.py** (Python).
11
+ * This TS validator covers the most common structural checks sufficient
12
+ * for L1–L2 conformance.
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.readMeshPack = readMeshPack;
19
+ exports.writeMeshPack = writeMeshPack;
20
+ exports.computeEntriesHash = computeEntriesHash;
21
+ exports.validateMeshPack = validateMeshPack;
22
+ exports.readResource = readResource;
23
+ exports.listModelEntries = listModelEntries;
24
+ exports.findByHash = findByHash;
25
+ exports.listByMetamodel = listByMetamodel;
26
+ const jszip_1 = __importDefault(require("jszip"));
27
+ /**
28
+ * Parse a .meshpack ZIP buffer into typed objects.
29
+ *
30
+ * @param data ZIP archive as `ArrayBuffer`, `Uint8Array`, or `Buffer`.
31
+ * @throws Error if `manifest.json` is missing or malformed.
32
+ */
33
+ async function readMeshPack(data) {
34
+ const zip = await jszip_1.default.loadAsync(data);
35
+ // ── Manifest ────────────────────────────────────────────────
36
+ const manifestFile = zip.file('manifest.json');
37
+ if (!manifestFile) {
38
+ throw new Error('MeshPack missing manifest.json at archive root');
39
+ }
40
+ const manifest = JSON.parse(await manifestFile.async('string'));
41
+ // ── Shards ──────────────────────────────────────────────────
42
+ const shardFiles = zip.file(/^index\/part-\d{5}\.json$/);
43
+ const shards = [];
44
+ const entries = new Map();
45
+ for (const sf of shardFiles) {
46
+ const shard = JSON.parse(await sf.async('string'));
47
+ shards.push(shard);
48
+ for (const entry of shard.entries) {
49
+ entries.set(entry.path, entry);
50
+ }
51
+ }
52
+ // Sort shards by shard_id to ensure deterministic ordering
53
+ shards.sort((a, b) => a.shard_id.localeCompare(b.shard_id));
54
+ return { manifest, shards, entries, zip };
55
+ }
56
+ /**
57
+ * Build a .meshpack ZIP archive from typed objects.
58
+ *
59
+ * The ZIP is built with `manifest.json` as the **first entry** (REQ-L2-000).
60
+ * Returns the archive as a Uint8Array.
61
+ */
62
+ async function writeMeshPack(opts) {
63
+ const { manifest, shards, resources, extraFiles, compression = 'DEFLATE' } = opts;
64
+ const zip = new jszip_1.default();
65
+ const compressOpt = compression === 'STORE' ? { compression: 'STORE' } : {};
66
+ // 1. Manifest MUST be first entry
67
+ zip.file('manifest.json', JSON.stringify(manifest, null, 2), compressOpt);
68
+ // 2. Extra files (e.g. _README.md)
69
+ if (extraFiles) {
70
+ for (const [path, content] of extraFiles) {
71
+ zip.file(path, content, compressOpt);
72
+ }
73
+ }
74
+ // 3. Shards
75
+ for (const shard of shards) {
76
+ const filename = `index/${shard.shard_id}.json`;
77
+ zip.file(filename, JSON.stringify(shard, null, 2), compressOpt);
78
+ }
79
+ // 4. Resources
80
+ if (resources) {
81
+ for (const [name, data] of resources) {
82
+ zip.file(`resources/${name}`, data, compressOpt);
83
+ }
84
+ }
85
+ return zip.generateAsync({ type: 'uint8array' });
86
+ }
87
+ /**
88
+ * Compute the canonical entries_hash for a list of file entries.
89
+ *
90
+ * Uses RFC 8785 (JCS) canonicalization approximation via
91
+ * `JSON.stringify` with `sort_keys=true` (Object.keys sorted) and
92
+ * compact separators. Then hashes with the provided algorithm.
93
+ *
94
+ * **Note**: For SHA-256 this uses the Web Crypto API (or Node crypto).
95
+ * Only `sha256` is supported in this TS implementation.
96
+ *
97
+ * @param entries Array of FileEntry objects (must be sorted by path).
98
+ * @param algo Hash algorithm (only `sha256` currently supported).
99
+ * @returns HashValue like `sha256:abc123...`
100
+ */
101
+ async function computeEntriesHash(entries, algo = 'sha256') {
102
+ if (algo !== 'sha256') {
103
+ throw new Error(`computeEntriesHash: only sha256 is supported in TS SDK, got '${algo}'`);
104
+ }
105
+ // RFC 8785 canonical JSON: keys sorted, compact separators
106
+ const canonical = canonicalJsonStringify(entries);
107
+ const encoded = new TextEncoder().encode(canonical);
108
+ let hexHash;
109
+ // Use Web Crypto if available (browser), else Node crypto
110
+ if (typeof globalThis.crypto?.subtle?.digest === 'function') {
111
+ const buf = await globalThis.crypto.subtle.digest('SHA-256', encoded);
112
+ hexHash = bufferToHex(new Uint8Array(buf));
113
+ }
114
+ else {
115
+ // Node.js fallback
116
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
117
+ const crypto = require('crypto');
118
+ hexHash = crypto.createHash('sha256').update(encoded).digest('hex');
119
+ }
120
+ return `sha256:${hexHash}`;
121
+ }
122
+ /**
123
+ * Structural validation of a MeshPack archive (L1–L2 subset).
124
+ *
125
+ * Checks performed:
126
+ * - manifest.json exists and is valid JSON
127
+ * - Required manifest fields present
128
+ * - hash_algo is a supported value
129
+ * - shard_list is non-empty with correct ID format
130
+ * - All shards referenced in shard_list exist in the ZIP
131
+ * - Shard entries are sorted by path
132
+ * - entries_count matches actual length
133
+ * - manifest.json is the first ZIP entry (L2)
134
+ * - Path constraints (no `..`, no absolute, ≤ 1024 chars)
135
+ *
136
+ * For exhaustive validation use the Python `meshpack_validate.py` tool.
137
+ */
138
+ async function validateMeshPack(data) {
139
+ const findings = [];
140
+ const push = (code, severity, message) => {
141
+ findings.push({ code, severity, message });
142
+ };
143
+ // ── 1. ZIP structure ─────────────────────────────────────────
144
+ let zip;
145
+ try {
146
+ zip = await jszip_1.default.loadAsync(data);
147
+ }
148
+ catch {
149
+ push('ARC-001', 'ERROR', 'Not a valid ZIP archive');
150
+ return buildResult(findings);
151
+ }
152
+ // ── 2. manifest.json existence ───────────────────────────────
153
+ const manifestFile = zip.file('manifest.json');
154
+ if (!manifestFile) {
155
+ push('MAN-001', 'ERROR', 'manifest.json not found at archive root');
156
+ return buildResult(findings);
157
+ }
158
+ // ── 3. manifest.json is first ZIP entry (L2) ────────────────
159
+ const zipNames = Object.keys(zip.files);
160
+ if (zipNames[0] !== 'manifest.json') {
161
+ push('ZIP-001', 'WARNING', `manifest.json should be first ZIP entry (found: ${zipNames[0]})`);
162
+ }
163
+ // ── 4. Parse manifest ────────────────────────────────────────
164
+ let manifest;
165
+ try {
166
+ manifest = JSON.parse(await manifestFile.async('string'));
167
+ }
168
+ catch {
169
+ push('MAN-002', 'ERROR', 'manifest.json is not valid JSON');
170
+ return buildResult(findings);
171
+ }
172
+ // ── 5. Required manifest fields ──────────────────────────────
173
+ const requiredManifestFields = [
174
+ 'format_version', 'created_at', 'creator_info', 'platform_info',
175
+ 'index_summary', 'hash_algo', 'shard_list',
176
+ ];
177
+ for (const field of requiredManifestFields) {
178
+ if (!(field in manifest)) {
179
+ push('MAN-010', 'ERROR', `Missing required manifest field: ${field}`);
180
+ }
181
+ }
182
+ // format_version semver
183
+ if (manifest.format_version && !/^\d+\.\d+\.\d+$/.test(manifest.format_version)) {
184
+ push('MAN-011', 'ERROR', `format_version is not valid semver: ${manifest.format_version}`);
185
+ }
186
+ // hash_algo enum
187
+ const validAlgos = ['sha256', 'sha512', 'blake3'];
188
+ if (manifest.hash_algo && !validAlgos.includes(manifest.hash_algo)) {
189
+ push('MAN-012', 'ERROR', `Unsupported hash_algo: ${manifest.hash_algo}`);
190
+ }
191
+ // creator_info.name
192
+ if (manifest.creator_info && !manifest.creator_info.name) {
193
+ push('MAN-015', 'ERROR', 'creator_info.name is required');
194
+ }
195
+ // ── 6. shard_list ────────────────────────────────────────────
196
+ if (!Array.isArray(manifest.shard_list) || manifest.shard_list.length === 0) {
197
+ push('MAN-013', 'ERROR', 'shard_list must be a non-empty array');
198
+ return buildResult(findings);
199
+ }
200
+ const shardIdPattern = /^part-\d{5}$/;
201
+ for (const ref of manifest.shard_list) {
202
+ if (!shardIdPattern.test(ref.id)) {
203
+ push('MAN-014', 'ERROR', `Invalid shard ID format: ${ref.id} (expected part-NNNNN)`);
204
+ }
205
+ }
206
+ // ── 7. Shard files ──────────────────────────────────────────
207
+ for (const ref of manifest.shard_list) {
208
+ const shardPath = `index/${ref.id}.json`;
209
+ const shardFile = zip.file(shardPath);
210
+ if (!shardFile) {
211
+ push('SHD-000', 'ERROR', `Shard file missing: ${shardPath}`);
212
+ continue;
213
+ }
214
+ let shard;
215
+ try {
216
+ shard = JSON.parse(await shardFile.async('string'));
217
+ }
218
+ catch {
219
+ push('SHD-002', 'ERROR', `Shard ${ref.id} is not valid JSON`);
220
+ continue;
221
+ }
222
+ // shard_id matches filename
223
+ if (shard.shard_id !== ref.id) {
224
+ push('SHD-001', 'ERROR', `Shard ID mismatch: file=${ref.id}, shard_id=${shard.shard_id}`);
225
+ }
226
+ // entries_count
227
+ if (shard.entries_count !== shard.entries.length) {
228
+ push('SHD-005', 'ERROR', `entries_count=${shard.entries_count} but entries.length=${shard.entries.length}`);
229
+ }
230
+ // Entries sorted by path
231
+ for (let i = 1; i < shard.entries.length; i++) {
232
+ if (shard.entries[i].path < shard.entries[i - 1].path) {
233
+ push('SHD-004', 'WARNING', `Entries not sorted by path in shard ${ref.id} at index ${i}`);
234
+ break;
235
+ }
236
+ }
237
+ // Entry-level checks
238
+ for (const entry of shard.entries) {
239
+ // Required fields
240
+ if (!entry.path || !entry.original_name || entry.size_bytes === undefined || !entry.hash || !entry.modified_at) {
241
+ push('ENT-000', 'ERROR', `Entry missing required fields: ${entry.path || '(no path)'}`);
242
+ }
243
+ // Path constraints
244
+ if (entry.path) {
245
+ if (entry.path.length > 1024) {
246
+ push('ENT-001', 'ERROR', `Path exceeds 1024 chars: ${entry.path.slice(0, 80)}...`);
247
+ }
248
+ if (entry.path.includes('..')) {
249
+ push('ENT-002', 'ERROR', `Path contains traversal (..): ${entry.path}`);
250
+ }
251
+ if (entry.path.startsWith('/') || /^[A-Za-z]:/.test(entry.path)) {
252
+ push('ENT-003', 'ERROR', `Absolute path detected: ${entry.path}`);
253
+ }
254
+ }
255
+ }
256
+ }
257
+ return buildResult(findings);
258
+ }
259
+ async function readResource(zip, entry, type = 'uint8array') {
260
+ if (!entry.resource_ref)
261
+ return null;
262
+ const file = zip.file(`resources/${entry.resource_ref}`);
263
+ if (!file)
264
+ return null;
265
+ return file.async(type);
266
+ }
267
+ /**
268
+ * List all model file entries (common 3D file extensions).
269
+ */
270
+ function listModelEntries(entries) {
271
+ const modelExts = ['.stl', '.obj', '.3mf', '.step', '.stp', '.ply', '.off', '.gltf', '.glb'];
272
+ const iter = entries instanceof Map ? entries.values() : entries;
273
+ return Array.from(iter).filter((e) => {
274
+ const lower = e.path.toLowerCase();
275
+ return modelExts.some((ext) => lower.endsWith(ext));
276
+ });
277
+ }
278
+ /**
279
+ * Find entries by content hash.
280
+ */
281
+ function findByHash(entries, hash) {
282
+ const iter = entries instanceof Map ? entries.values() : entries;
283
+ return Array.from(iter).filter((e) => e.hash === hash);
284
+ }
285
+ /**
286
+ * List entries belonging to a specific metamodel ID.
287
+ */
288
+ function listByMetamodel(entries, metamodelId) {
289
+ const iter = entries instanceof Map ? entries.values() : entries;
290
+ return Array.from(iter).filter((e) => {
291
+ if (e.metamodels?.some((m) => m.id === metamodelId))
292
+ return true;
293
+ if (e.metamodel_id === metamodelId)
294
+ return true;
295
+ return false;
296
+ });
297
+ }
298
+ // ────────────────────────────────────────────────────────────────
299
+ // Internal utilities
300
+ // ────────────────────────────────────────────────────────────────
301
+ function buildResult(findings) {
302
+ const errors = findings.filter((f) => f.severity === 'ERROR').length;
303
+ const warnings = findings.filter((f) => f.severity === 'WARNING').length;
304
+ return { valid: errors === 0, findings, errors, warnings };
305
+ }
306
+ function bufferToHex(buf) {
307
+ return Array.from(buf)
308
+ .map((b) => b.toString(16).padStart(2, '0'))
309
+ .join('');
310
+ }
311
+ /**
312
+ * RFC 8785 (JCS) canonical JSON approximation.
313
+ *
314
+ * - Object keys sorted lexicographically (recursive)
315
+ * - Compact separators (no whitespace)
316
+ * - Numbers serialized without trailing zeros
317
+ *
318
+ * True JCS also prescribes specific float formatting; this approximation
319
+ * relies on V8/SpiderMonkey `JSON.stringify` number serialization which
320
+ * is compliant for common cases.
321
+ */
322
+ function canonicalJsonStringify(value) {
323
+ return JSON.stringify(value, (_key, val) => {
324
+ if (val !== null && typeof val === 'object' && !Array.isArray(val)) {
325
+ // Sort object keys
326
+ const sorted = {};
327
+ for (const k of Object.keys(val).sort()) {
328
+ sorted[k] = val[k];
329
+ }
330
+ return sorted;
331
+ }
332
+ return val;
333
+ });
334
+ }
335
+ //# sourceMappingURL=meshpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshpack.js","sourceRoot":"","sources":["../src/meshpack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * @mesh-sync/meshpack — TypeScript SDK
3
+ *
4
+ * Type definitions derived from the MeshPack v1.0.0 JSON Schemas:
5
+ * schema/manifest.schema.json
6
+ * schema/shard.schema.json
7
+ * schema/common.schema.json
8
+ * schema/sidecar.schema.json
9
+ *
10
+ * Generated types — edit schemas, not this file.
11
+ */
12
+ /** Supported hash algorithms. sha256 is RECOMMENDED for maximum compatibility. */
13
+ export type HashAlgorithm = 'sha256' | 'sha512' | 'blake3';
14
+ /** Prefixed hash value: `{algorithm}:{lowercase_hex}` */
15
+ export type HashValue = `sha256:${string}` | `sha512:${string}` | `blake3:${string}`;
16
+ /** Operating system on which the pack was created. */
17
+ export type OSType = 'linux' | 'windows' | 'darwin' | 'unknown';
18
+ /** Measurement units for 3D geometry. `unitless` if format does not specify. */
19
+ export type MeasurementUnit = 'mm' | 'cm' | 'm' | 'in' | 'ft' | 'unitless';
20
+ /** Up-axis orientation of the original model file. */
21
+ export type UpAxis = '+Z' | '-Z' | '+Y' | '-Y';
22
+ /** Metamodel role within an assembly or pack. */
23
+ export type MetamodelRole = 'canonical' | 'variant' | 'accessory' | 'doc';
24
+ /** Assembly part role. */
25
+ export type AssemblyRole = 'body' | 'support' | 'accessory' | 'texture' | 'doc';
26
+ /** Delta-pack operation type. */
27
+ export type DeltaOperation = 'add' | 'modify' | 'delete';
28
+ /** Behaviour when an incoming ID already exists. */
29
+ export type IdConflictPolicy = 'fail' | 'skip' | 'overwrite';
30
+ /** How metamodel structures are merged on import. */
31
+ export type MetamodelMergePolicy = 'strict' | 'merge' | 'replace';
32
+ /** Signature algorithms. */
33
+ export type SignatureAlgorithm = 'ed25519' | 'rsa-pss-sha256';
34
+ /** Metamodel filter mode for selective export. */
35
+ export type MetamodelFilterMode = 'all' | 'include' | 'exclude' | 'single';
36
+ /** Namespaced identifier for cross-system reconciliation. */
37
+ export interface NamespacedId {
38
+ /** Namespace prefix (e.g. `meshsync:model`, `thingiverse:thing`). */
39
+ ns: string;
40
+ /** Identifier value within the namespace. */
41
+ id: string;
42
+ }
43
+ /** Entity that generated the pack. */
44
+ export interface CreatorInfo {
45
+ /** Display name of the creator tool or person. */
46
+ name: string;
47
+ /** Optional email (PII — consider redacting for public distribution). */
48
+ email?: string;
49
+ }
50
+ /** Source platform metadata for cross-platform path handling. */
51
+ export interface PlatformInfo {
52
+ os: OSType;
53
+ path_separator: string;
54
+ is_case_sensitive: boolean;
55
+ }
56
+ /** Summary counts for the archive index. */
57
+ export interface IndexSummary {
58
+ total_files: number;
59
+ total_shards: number;
60
+ total_size_bytes?: number;
61
+ }
62
+ /** Reference to a shard in `manifest.shard_list`. */
63
+ export interface ShardListEntry {
64
+ /** Shard ID matching filename (e.g. `part-00001`). */
65
+ id: string;
66
+ entries_count: number;
67
+ entries_hash: HashValue;
68
+ }
69
+ /** Cryptographic signature over `pack_hash`. */
70
+ export interface SignatureEntry {
71
+ alg: SignatureAlgorithm;
72
+ public_key: string;
73
+ signature: string;
74
+ signer_id?: string;
75
+ signed_at?: string;
76
+ }
77
+ /** Provenance and configuration used to generate the pack. */
78
+ export interface Generation {
79
+ /** Tool name and version (e.g. `plugin-storage-localfilesystem@1.4.0`). */
80
+ generator?: string;
81
+ config?: Record<string, unknown>;
82
+ resume_token?: string;
83
+ /** If true, this is a delta pack referencing a base via `base_pack_hash`. */
84
+ partial?: boolean;
85
+ base_pack_hash?: HashValue;
86
+ metamodel_filter?: MetamodelFilter;
87
+ }
88
+ /** Filter applied during export for metamodel context. */
89
+ export interface MetamodelFilter {
90
+ mode: MetamodelFilterMode;
91
+ metamodel_ids?: string[];
92
+ collapse_roles?: boolean;
93
+ }
94
+ /** Guidance for conflict handling when importing into another system. */
95
+ export interface ImportPolicy {
96
+ id_conflict?: IdConflictPolicy;
97
+ metamodel_merge?: MetamodelMergePolicy;
98
+ strip_creator_info?: boolean;
99
+ }
100
+ /** Encryption metadata (reserved for v1.1+). */
101
+ export interface Encryption {
102
+ alg?: string;
103
+ recipients?: string[];
104
+ encrypted?: boolean;
105
+ }
106
+ /** Root metadata for a MeshPack archive. */
107
+ export interface Manifest {
108
+ format_version: string;
109
+ created_at: string;
110
+ workspace_id?: string | null;
111
+ creator_info: CreatorInfo;
112
+ license?: string | null;
113
+ platform_info: PlatformInfo;
114
+ hash_algo: HashAlgorithm;
115
+ pack_hash?: HashValue;
116
+ signatures?: SignatureEntry[];
117
+ index_summary: IndexSummary;
118
+ shard_list: ShardListEntry[];
119
+ ids?: NamespacedId[];
120
+ generation?: Generation;
121
+ import_policy?: ImportPolicy;
122
+ encryption?: Encryption;
123
+ extensions?: Record<string, unknown>;
124
+ }
125
+ /** Axis-aligned bounding box in the source file's coordinate system. */
126
+ export interface BoundingBox {
127
+ /** [x, y, z] minimum corner. */
128
+ min: [number, number, number];
129
+ /** [x, y, z] maximum corner. */
130
+ max: [number, number, number];
131
+ }
132
+ /** File attribute flags. */
133
+ export interface FileAttributes {
134
+ is_symlink?: boolean;
135
+ is_hidden?: boolean;
136
+ }
137
+ /** 4×4 homogeneous transform (column-major, glTF convention). */
138
+ export interface Transform {
139
+ /**
140
+ * Column-major 4×4 matrix:
141
+ * `[m00,m10,m20,m30, m01,m11,m21,m31, m02,m12,m22,m32, m03,m13,m23,m33]`
142
+ */
143
+ matrix: [
144
+ number,
145
+ number,
146
+ number,
147
+ number,
148
+ number,
149
+ number,
150
+ number,
151
+ number,
152
+ number,
153
+ number,
154
+ number,
155
+ number,
156
+ number,
157
+ number,
158
+ number,
159
+ number
160
+ ];
161
+ }
162
+ /** Assembly graph node. */
163
+ export interface Assembly {
164
+ assembly_id?: string;
165
+ parent_assembly_id?: string | null;
166
+ role?: AssemblyRole;
167
+ transform?: Transform;
168
+ }
169
+ /** Metamodel membership for a file entry. */
170
+ export interface MetamodelMembership {
171
+ id: string;
172
+ role: MetamodelRole;
173
+ }
174
+ /** An individual file indexed in a shard. */
175
+ export interface FileEntry {
176
+ /** Relative path from root (POSIX separators). */
177
+ path: string;
178
+ ids?: NamespacedId[];
179
+ original_name: string;
180
+ size_bytes: number;
181
+ /** Content hash of the original file on the source filesystem. */
182
+ hash: HashValue;
183
+ modified_at: string;
184
+ created_at?: string;
185
+ mime_type?: string;
186
+ units?: MeasurementUnit;
187
+ up_axis?: UpAxis;
188
+ bounding_box?: BoundingBox;
189
+ /** Reference to a file in `resources/` named `{hex_hash}.{ext}`. */
190
+ resource_ref?: string | null;
191
+ resource_hash?: HashValue;
192
+ resource_size_bytes?: number;
193
+ attributes?: FileAttributes;
194
+ /** @deprecated Use `metamodels` array. */
195
+ metamodel_id?: string;
196
+ /** @deprecated Use `metamodels` array. */
197
+ metamodel_role?: MetamodelRole;
198
+ /** 1:N metamodel memberships. Supersedes `metamodel_id`/`metamodel_role`. */
199
+ metamodels?: MetamodelMembership[];
200
+ assembly?: Assembly;
201
+ preview_ref?: string;
202
+ /** Delta-pack operation. Only present when `manifest.generation.partial=true`. */
203
+ operation?: DeltaOperation;
204
+ extensions?: Record<string, unknown>;
205
+ }
206
+ /** Sharded file index containing a subset of file entries. */
207
+ export interface Shard {
208
+ /** Shard identifier matching filename (e.g. `part-00001`). */
209
+ shard_id: string;
210
+ format_version: string;
211
+ entries_hash: HashValue;
212
+ entries_count: number;
213
+ /** @deprecated Use `manifest.creator_info`. Removed in v2.0. */
214
+ creator_info?: CreatorInfo;
215
+ /** Entries sorted by `path` (UTF-8 byte order). */
216
+ entries: FileEntry[];
217
+ }
218
+ /** Detached integrity file (`.meshpack.integrity`). */
219
+ export interface Sidecar {
220
+ format_version: string;
221
+ pack_hash: HashValue;
222
+ hash_algo: HashAlgorithm;
223
+ generated_at: string;
224
+ signatures?: SignatureEntry[];
225
+ }
226
+ /** Well-known extension names. */
227
+ export declare const ExtensionNames: {
228
+ readonly MESHSYNC_GEOMETRY: "meshsync_geometry";
229
+ readonly MESHSYNC_DEPENDENCIES: "meshsync_dependencies";
230
+ readonly MESHSYNC_PRINTABILITY: "meshsync_printability";
231
+ readonly MESHSYNC_CONTENT: "meshsync_content";
232
+ };
233
+ /** Supported versions per extension. */
234
+ export declare const ExtensionVersions: Readonly<Record<string, readonly string[]>>;
235
+ /** MeshSync geometry extension v1 payload. */
236
+ export interface GeometryV1 {
237
+ vertices?: number;
238
+ faces?: number;
239
+ edges?: number;
240
+ volume_cubic_mm?: number;
241
+ surface_area_mm2?: number;
242
+ is_manifold?: boolean;
243
+ is_watertight?: boolean;
244
+ genus?: number;
245
+ quality_score?: number;
246
+ [key: string]: unknown;
247
+ }
248
+ /** MeshSync dependencies extension v1 payload. */
249
+ export interface DependenciesV1 {
250
+ depends_on?: string[];
251
+ [key: string]: unknown;
252
+ }
253
+ /** MeshSync printability extension v1 payload. */
254
+ export interface PrintabilityV1 {
255
+ printability_score?: number;
256
+ issues?: string[];
257
+ [key: string]: unknown;
258
+ }
259
+ /** MeshSync content extension v1 payload (language and description). */
260
+ export interface ContentV1 {
261
+ language?: string;
262
+ description?: string;
263
+ [key: string]: unknown;
264
+ }
265
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3D,yDAAyD;AACzD,MAAM,MAAM,SAAS,GAAG,UAAU,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,CAAC;AAErF,sDAAsD;AACtD,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhE,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC;AAE3E,sDAAsD;AACtD,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAE1E,0BAA0B;AAC1B,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;AAEhF,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,oDAAoD;AACpD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAE7D,qDAAqD;AACrD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAE9D,kDAAkD;AAClD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAM3E,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,SAAS,CAAC;CACzB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,kBAAkB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8DAA8D;AAC9D,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,gBAAgB,CAAC,EAAE,eAAe,CAAC;CACpC;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD,4CAA4C;AAC5C,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,aAAa,EAAE,YAAY,CAAC;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAMD,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,gCAAgC;IAChC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,MAAM,EAAE;QACN,MAAM;QAAE,MAAM;QAAE,MAAM;QAAE,MAAM;QAC9B,MAAM;QAAE,MAAM;QAAE,MAAM;QAAE,MAAM;QAC9B,MAAM;QAAE,MAAM;QAAE,MAAM;QAAE,MAAM;QAC9B,MAAM;QAAE,MAAM;QAAE,MAAM;QAAE,MAAM;KAC/B,CAAC;CACH;AAED,2BAA2B;AAC3B,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,6CAA6C;AAC7C,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,8DAA8D;AAC9D,MAAM,WAAW,KAAK;IACpB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,mDAAmD;IACnD,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAMD,uDAAuD;AACvD,MAAM,WAAW,OAAO;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAMD,kCAAkC;AAClC,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAKzE,CAAC;AAEF,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
package/dist/types.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * @mesh-sync/meshpack — TypeScript SDK
4
+ *
5
+ * Type definitions derived from the MeshPack v1.0.0 JSON Schemas:
6
+ * schema/manifest.schema.json
7
+ * schema/shard.schema.json
8
+ * schema/common.schema.json
9
+ * schema/sidecar.schema.json
10
+ *
11
+ * Generated types — edit schemas, not this file.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ExtensionVersions = exports.ExtensionNames = void 0;
15
+ // ────────────────────────────────────────────────────────────────
16
+ // Extension system
17
+ // ────────────────────────────────────────────────────────────────
18
+ /** Well-known extension names. */
19
+ exports.ExtensionNames = {
20
+ MESHSYNC_GEOMETRY: 'meshsync_geometry',
21
+ MESHSYNC_DEPENDENCIES: 'meshsync_dependencies',
22
+ MESHSYNC_PRINTABILITY: 'meshsync_printability',
23
+ MESHSYNC_CONTENT: 'meshsync_content',
24
+ };
25
+ /** Supported versions per extension. */
26
+ exports.ExtensionVersions = {
27
+ meshsync_geometry: ['v1'],
28
+ meshsync_dependencies: ['v1'],
29
+ meshsync_printability: ['v1'],
30
+ meshsync_content: ['v1'],
31
+ };
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AA+PH,mEAAmE;AACnE,mBAAmB;AACnB,mEAAmE;AAEnE,kCAAkC;AACrB,QAAA,cAAc,GAAG;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,qBAAqB,EAAE,uBAAuB;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,kBAAkB;CAC5B,CAAC;AAEX,wCAAwC;AAC3B,QAAA,iBAAiB,GAAgD;IAC5E,iBAAiB,EAAE,CAAC,IAAI,CAAC;IACzB,qBAAqB,EAAE,CAAC,IAAI,CAAC;IAC7B,qBAAqB,EAAE,CAAC,IAAI,CAAC;IAC7B,gBAAgB,EAAE,CAAC,IAAI,CAAC;CACzB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@mesh-sync/meshpack",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript SDK for the MeshPack v1.0.0 container format — read, write, and validate .meshpack archives",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": ["dist"],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "clean": "rm -rf dist",
12
+ "prepublishOnly": "npm run clean && npm run build"
13
+ },
14
+ "dependencies": {
15
+ "jszip": "^3.10.1"
16
+ },
17
+ "devDependencies": {
18
+ "typescript": "^5.0.0",
19
+ "@types/node": "^20.0.0"
20
+ },
21
+ "engines": {
22
+ "node": ">=18"
23
+ },
24
+ "keywords": ["meshpack", "meshsync", "3d", "packaging", "zip"]
25
+ }