Session.export ​Contract 2.0.0 · package sha256
a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e· generated fromconfigurator-runtime.d.tsbyservices/onsite-scripter/scripts/build-contract-docs.mjs; edit the source, not this file.
Method of Session · inherited by testing.FakeSession · stable · since 2.0.0 · called as session.export
export(options: ExportOptions, extra?: SignalOption): Promise<ExportResult>;
Exports the matched parts (role 'product' by default) as a GLB or USDZ file. Resolves with the
file and a list of what the format couldn't carry. Like capture, it first waits for an
autocommit write's running beforeCommit functions to finish, then for readiness
and the committed state's pending late swaps, together ≤ readyTimeoutMs; a detail map still
pending then is written as its stand-in and listed in dropped. It never joins or waits for a
transaction and, unlike capture, never rejects for a hold: the file is the newest committed
state, without a transaction's staged writes (spec section 6.8).
The file is well formed for both AR viewers, whatever prepare leaves in the copy (spec
section 5.11): every part has a mesh and a material, every primitive is indexed, a mirrored
world transform is flipped into the geometry, an instances item is one node per instance
(no EXT_mesh_gpu_instancing) sharing one mesh per reflection parity (its mirrored instances
share one flipped copy, triangle order reversed) and Shape.transform is baked into the
vertices. A skinned part keeps its skin in a GLB, at its exported pose; in a USDZ it is plain
geometry baked to that pose, its joints dropped (dropped reason 'lowered'). No animation
clip is written, so no AR viewer plays one: the file is a still of the copy's pose.
A placed ModelNode or kind: 'model' item whose asset is unloaded has no parts, so it is not
in the file; problems names it ('asset-failed', ExportResult.problems).
Errors: rejects DOMException 'NotAllowedError' when permits('export') is false (problem
'not-permitted'). Unlike a capture, an export not yet resolved at destroy() rejects
AbortError: its file is written after the call, from scene data destroy() frees. Aborting
signal rejects AbortError at once, also while prepare runs or the file is written.
extra (since 2.0.0, additive): { signal } as capture, idle and applyDocument take it,
honoured as options.signal; a signal in both places rejects 'invalid-input' (pass it once),
and another key 'unknown-field'.
signal) ​This call is neither a write, a registration, a wait nor a creator (SignalOption.signal, the kinds of call).
Cancels this call; the member's JSDoc says what an abort does.
Imports: values (has, validate, the Holo*Error classes, the pure helpers) from @holostep-configurators/runtime-client, types from @holostep-configurators/runtime-client/contract, /math and /testing names from those entries; boot from the runtime module the root's loadRuntimeAtFloor resolves to. A type your page defines is your app's: declare it there, never import it from the package.
Compiled under the contract's strict settings (examples/declaration/05-Session.export.ts):
import type { Session } from '@holostep-configurators/runtime-client/contract';
declare const session: Session;
declare const signal: AbortSignal;
declare function offerDownload(file: Blob, name: string): void;
if (session.permits('export')) {
const { blob, dropped } = await session.export({ format: 'glb', maxTextureSize: 1024, signal });
for (const d of dropped) console.warn('not in the file:', d.name, d.reason);
offerDownload(blob, 'design.glb');
}
| Rule | Result |
|---|---|
| 1. Neutral name | pass: export names no product |
| 2. A precedent | pass: Babylon.js GLTF2Export (row K39); USDZ file format (row K39) |
| 3. Two apps, or labs | pass: 11 apps (ledger: app-4f16d2f6da, app-510d750508, app-bcb7ef21da, app-ceb4eccc72, app-f07e9033d9, app-fb16dd1985, app-fc07850558, app-fc306ec3dc and 1 more; fleet cross-check: app-4f16d2f6da, app-510d750508, app-59c5b5751e, app-ceb4eccc72, app-e61a0b42ad, app-f07e9033d9, app-fb16dd1985, app-fc07850558) |
| 4. The cheaper fix first | decided per need in Appendix B: rows K39 at tier stable (a member only where no rule, data, asset or app code serves the need) |