@opengeni/artifact-tool 0.2.2
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/LICENSE +190 -0
- package/README.md +104 -0
- package/dist/bounded-zip.d.ts +28 -0
- package/dist/chunk-4BSENMAE.js +39 -0
- package/dist/chunk-4BSENMAE.js.map +1 -0
- package/dist/chunk-4FRFNNBM.js +276 -0
- package/dist/chunk-4FRFNNBM.js.map +1 -0
- package/dist/chunk-5XIA6KHZ.js +49 -0
- package/dist/chunk-5XIA6KHZ.js.map +1 -0
- package/dist/chunk-66CT2ZRP.js +2229 -0
- package/dist/chunk-66CT2ZRP.js.map +1 -0
- package/dist/chunk-72SYDU4O.js +319 -0
- package/dist/chunk-72SYDU4O.js.map +1 -0
- package/dist/chunk-B2ZJRZDA.js +279 -0
- package/dist/chunk-B2ZJRZDA.js.map +1 -0
- package/dist/chunk-DCTLTNPW.js +2458 -0
- package/dist/chunk-DCTLTNPW.js.map +1 -0
- package/dist/chunk-FGZM4FQ6.js +473 -0
- package/dist/chunk-FGZM4FQ6.js.map +1 -0
- package/dist/chunk-HTJBLBDE.js +591 -0
- package/dist/chunk-HTJBLBDE.js.map +1 -0
- package/dist/chunk-IYFXZQ34.js +5306 -0
- package/dist/chunk-IYFXZQ34.js.map +1 -0
- package/dist/chunk-J6N7IR44.js +172 -0
- package/dist/chunk-J6N7IR44.js.map +1 -0
- package/dist/chunk-N2IHNWBS.js +1002 -0
- package/dist/chunk-N2IHNWBS.js.map +1 -0
- package/dist/chunk-NAG44K67.js +549 -0
- package/dist/chunk-NAG44K67.js.map +1 -0
- package/dist/chunk-O24KTEGP.js +33 -0
- package/dist/chunk-O24KTEGP.js.map +1 -0
- package/dist/chunk-PI2AZVGK.js +2074 -0
- package/dist/chunk-PI2AZVGK.js.map +1 -0
- package/dist/chunk-Q2FFHEY7.js +40 -0
- package/dist/chunk-Q2FFHEY7.js.map +1 -0
- package/dist/chunk-RBGQADXA.js +57 -0
- package/dist/chunk-RBGQADXA.js.map +1 -0
- package/dist/chunk-U5G2BKM2.js +613 -0
- package/dist/chunk-U5G2BKM2.js.map +1 -0
- package/dist/chunk-VOJHMSM3.js +39 -0
- package/dist/chunk-VOJHMSM3.js.map +1 -0
- package/dist/chunk-VUNV25KB.js +16 -0
- package/dist/chunk-VUNV25KB.js.map +1 -0
- package/dist/chunk-XIFUNVBO.js +101 -0
- package/dist/chunk-XIFUNVBO.js.map +1 -0
- package/dist/chunk-ZCJYRJGB.js +489 -0
- package/dist/chunk-ZCJYRJGB.js.map +1 -0
- package/dist/chunk-ZZXPEE4S.js +2260 -0
- package/dist/chunk-ZZXPEE4S.js.map +1 -0
- package/dist/document-docx-api.d.ts +49 -0
- package/dist/document-docx-codec.d.ts +9 -0
- package/dist/document-docx-codec.js +4765 -0
- package/dist/document-docx-codec.js.map +1 -0
- package/dist/document-docx-import.d.ts +261 -0
- package/dist/document-docx-packer.d.ts +18 -0
- package/dist/document-docx-state.d.ts +12 -0
- package/dist/document-render.d.ts +3 -0
- package/dist/document-render.js +492 -0
- package/dist/document-render.js.map +1 -0
- package/dist/document.d.ts +432 -0
- package/dist/document.js +37 -0
- package/dist/document.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/file-blob.d.ts +11 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/inspection.d.ts +12 -0
- package/dist/kernel.d.ts +101 -0
- package/dist/lib-GQLPACFK.js +9746 -0
- package/dist/lib-GQLPACFK.js.map +1 -0
- package/dist/materializer-cli-entry.d.ts +2 -0
- package/dist/materializer-cli-entry.js +29 -0
- package/dist/materializer-cli-entry.js.map +1 -0
- package/dist/materializer-cli.d.ts +24 -0
- package/dist/materializer-cli.js +24 -0
- package/dist/materializer-cli.js.map +1 -0
- package/dist/native-raster.d.ts +10 -0
- package/dist/native.d.ts +129 -0
- package/dist/native.js +31 -0
- package/dist/native.js.map +1 -0
- package/dist/office-import.d.ts +48 -0
- package/dist/office-import.js +154 -0
- package/dist/office-import.js.map +1 -0
- package/dist/presentation-pptx-api.d.ts +60 -0
- package/dist/presentation-pptx-import.d.ts +5 -0
- package/dist/presentation-pptx-state-digest-765CZZED.js +10 -0
- package/dist/presentation-pptx-state-digest-765CZZED.js.map +1 -0
- package/dist/presentation-pptx-state-digest.d.ts +3 -0
- package/dist/presentation-pptx-state.d.ts +4 -0
- package/dist/presentation-pptx-xml.d.ts +29 -0
- package/dist/presentation-pptx.d.ts +5 -0
- package/dist/presentation-pptx.js +2365 -0
- package/dist/presentation-pptx.js.map +1 -0
- package/dist/presentation-render.d.ts +29 -0
- package/dist/presentation-render.js +375 -0
- package/dist/presentation-render.js.map +1 -0
- package/dist/presentation.d.ts +565 -0
- package/dist/presentation.js +71 -0
- package/dist/presentation.js.map +1 -0
- package/dist/production-composite.d.ts +68 -0
- package/dist/production-document.d.ts +2 -0
- package/dist/production-document.js +176 -0
- package/dist/production-document.js.map +1 -0
- package/dist/production-native-codecs.d.ts +94 -0
- package/dist/production-presentation.d.ts +2 -0
- package/dist/production-presentation.js +176 -0
- package/dist/production-presentation.js.map +1 -0
- package/dist/production-sha256.d.ts +2 -0
- package/dist/production-spreadsheet-native.d.ts +12 -0
- package/dist/production-spreadsheet.d.ts +2 -0
- package/dist/production-spreadsheet.js +176 -0
- package/dist/production-spreadsheet.js.map +1 -0
- package/dist/production.d.ts +96 -0
- package/dist/raster-image.d.ts +34 -0
- package/dist/reference.d.ts +17 -0
- package/dist/reference.js +574 -0
- package/dist/reference.js.map +1 -0
- package/dist/runtime-cli-entry.d.ts +2 -0
- package/dist/runtime-cli-entry.js +21 -0
- package/dist/runtime-cli-entry.js.map +1 -0
- package/dist/runtime-cli.d.ts +76 -0
- package/dist/runtime-cli.js +26 -0
- package/dist/runtime-cli.js.map +1 -0
- package/dist/runtime-development.d.ts +73 -0
- package/dist/runtime-development.js +30 -0
- package/dist/runtime-development.js.map +1 -0
- package/dist/runtime-receipt.d.ts +19 -0
- package/dist/runtime.d.ts +355 -0
- package/dist/runtime.js +42 -0
- package/dist/runtime.js.map +1 -0
- package/dist/snapshot.d.ts +26 -0
- package/dist/snapshot.js +61 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/spreadsheet-address.d.ts +18 -0
- package/dist/spreadsheet-file.d.ts +17 -0
- package/dist/spreadsheet-formula.d.ts +67 -0
- package/dist/spreadsheet-image.d.ts +17 -0
- package/dist/spreadsheet-render.d.ts +5 -0
- package/dist/spreadsheet-render.js +752 -0
- package/dist/spreadsheet-render.js.map +1 -0
- package/dist/spreadsheet-types.d.ts +155 -0
- package/dist/spreadsheet-xlsx-api.d.ts +88 -0
- package/dist/spreadsheet-xlsx-codec.d.ts +16 -0
- package/dist/spreadsheet-xlsx-codec.js +16 -0
- package/dist/spreadsheet-xlsx-codec.js.map +1 -0
- package/dist/spreadsheet-xlsx-state.d.ts +16 -0
- package/dist/spreadsheet.d.ts +724 -0
- package/dist/spreadsheet.js +67 -0
- package/dist/spreadsheet.js.map +1 -0
- package/package.json +129 -0
- package/src/bounded-zip.ts +450 -0
- package/src/document-docx-api.ts +64 -0
- package/src/document-docx-codec.ts +2253 -0
- package/src/document-docx-import.ts +3814 -0
- package/src/document-docx-packer.ts +72 -0
- package/src/document-docx-state.ts +59 -0
- package/src/document-render.ts +615 -0
- package/src/document.ts +2800 -0
- package/src/errors.ts +45 -0
- package/src/file-blob.ts +43 -0
- package/src/index.ts +4 -0
- package/src/inspection.ts +50 -0
- package/src/kernel.ts +525 -0
- package/src/materializer-cli-entry.ts +11 -0
- package/src/materializer-cli.ts +743 -0
- package/src/native-raster.ts +141 -0
- package/src/native.ts +390 -0
- package/src/office-import.ts +243 -0
- package/src/presentation-pptx-api.ts +107 -0
- package/src/presentation-pptx-import.ts +2065 -0
- package/src/presentation-pptx-state-digest.ts +46 -0
- package/src/presentation-pptx-state.ts +18 -0
- package/src/presentation-pptx-xml.ts +473 -0
- package/src/presentation-pptx.ts +447 -0
- package/src/presentation-render.ts +532 -0
- package/src/presentation.ts +2599 -0
- package/src/production-composite.ts +805 -0
- package/src/production-document.ts +2 -0
- package/src/production-native-codecs.ts +1141 -0
- package/src/production-presentation.ts +2 -0
- package/src/production-sha256.ts +150 -0
- package/src/production-spreadsheet-native.ts +686 -0
- package/src/production-spreadsheet.ts +2 -0
- package/src/production.ts +1022 -0
- package/src/raster-image.ts +586 -0
- package/src/reference.ts +17 -0
- package/src/runtime-cli-entry.ts +13 -0
- package/src/runtime-cli.ts +670 -0
- package/src/runtime-development.ts +689 -0
- package/src/runtime-receipt.ts +169 -0
- package/src/runtime.ts +1463 -0
- package/src/snapshot.ts +88 -0
- package/src/spreadsheet-address.ts +90 -0
- package/src/spreadsheet-file.ts +71 -0
- package/src/spreadsheet-formula.ts +1212 -0
- package/src/spreadsheet-image.ts +242 -0
- package/src/spreadsheet-render.ts +985 -0
- package/src/spreadsheet-types.ts +171 -0
- package/src/spreadsheet-xlsx-api.ts +123 -0
- package/src/spreadsheet-xlsx-codec.ts +3063 -0
- package/src/spreadsheet-xlsx-state.ts +191 -0
- package/src/spreadsheet.ts +5195 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrow adapter around the pinned `docx` compiler.
|
|
3
|
+
*
|
|
4
|
+
* `docx`'s public Packer hard-codes DEFLATE, which can make valid repetitive
|
|
5
|
+
* text exceed our secure importer's 100:1 ceiling. Its pinned compiler already
|
|
6
|
+
* produces a JSZip-compatible archive, so generate those exact OOXML parts as
|
|
7
|
+
* STORE. If that controlled runtime contract changes, fail closed instead of
|
|
8
|
+
* silently shipping a second ZIP implementation or masking the incompatibility.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
12
|
+
|
|
13
|
+
type GeneratedDocxZip = {
|
|
14
|
+
forEach(callback: (relativePath: string, entry: { date: Date }) => void): void;
|
|
15
|
+
generateAsync(options: {
|
|
16
|
+
type: "uint8array";
|
|
17
|
+
mimeType: string;
|
|
18
|
+
compression: "STORE";
|
|
19
|
+
}): Promise<Uint8Array>;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type DocxCompilerAdapter = {
|
|
23
|
+
compile(
|
|
24
|
+
file: unknown,
|
|
25
|
+
prettify?: undefined,
|
|
26
|
+
overrides?: readonly DocxXmlOverride[],
|
|
27
|
+
): GeneratedDocxZip;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type DocxXmlOverride = { path: string; data: string };
|
|
31
|
+
|
|
32
|
+
export class DocxExportCompatibilityError extends Error {
|
|
33
|
+
readonly name = "DocxExportCompatibilityError";
|
|
34
|
+
readonly code = "incompatible_docx_runtime" as const;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function packDocxWithBoundedCompression(
|
|
38
|
+
file: unknown,
|
|
39
|
+
packer: unknown,
|
|
40
|
+
overrides: readonly DocxXmlOverride[] = [],
|
|
41
|
+
): Promise<Uint8Array> {
|
|
42
|
+
if ((typeof packer !== "object" && typeof packer !== "function") || packer === null) {
|
|
43
|
+
throw incompatibleRuntime();
|
|
44
|
+
}
|
|
45
|
+
const compiler = Reflect.get(packer, "compiler") as Partial<DocxCompilerAdapter> | undefined;
|
|
46
|
+
if (!compiler || typeof compiler.compile !== "function") throw incompatibleRuntime();
|
|
47
|
+
const archive = compiler.compile(file, undefined, overrides);
|
|
48
|
+
if (
|
|
49
|
+
!archive ||
|
|
50
|
+
typeof archive.generateAsync !== "function" ||
|
|
51
|
+
typeof archive.forEach !== "function"
|
|
52
|
+
)
|
|
53
|
+
throw incompatibleRuntime();
|
|
54
|
+
archive.forEach((_path, entry) => {
|
|
55
|
+
// ZIP stores local wall-clock fields. Local 1980-01-01 is the portable DOS
|
|
56
|
+
// epoch and therefore encodes identically regardless of host timezone.
|
|
57
|
+
entry.date = new Date(1980, 0, 1, 0, 0, 0, 0);
|
|
58
|
+
});
|
|
59
|
+
const bytes = await archive.generateAsync({
|
|
60
|
+
type: "uint8array",
|
|
61
|
+
mimeType: DOCX_MIME_TYPE,
|
|
62
|
+
compression: "STORE",
|
|
63
|
+
});
|
|
64
|
+
if (!(bytes instanceof Uint8Array) || bytes.byteLength === 0) throw incompatibleRuntime();
|
|
65
|
+
return bytes;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function incompatibleRuntime(): DocxExportCompatibilityError {
|
|
69
|
+
return new DocxExportCompatibilityError(
|
|
70
|
+
"The pinned DOCX runtime no longer exposes the verified bounded-compression compiler adapter",
|
|
71
|
+
);
|
|
72
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Document } from "./document";
|
|
2
|
+
import {
|
|
3
|
+
DOCX_MEDIA_TYPE,
|
|
4
|
+
type DocumentFidelityIssue,
|
|
5
|
+
type DocumentLossPreservationEnvelope,
|
|
6
|
+
type DocumentOpaqueContent,
|
|
7
|
+
} from "./document-docx-api";
|
|
8
|
+
|
|
9
|
+
export type DocumentLossPreservationState = {
|
|
10
|
+
sourceBytes: Uint8Array;
|
|
11
|
+
sourceDigest: string;
|
|
12
|
+
importedRevision: number;
|
|
13
|
+
opaqueContent: DocumentOpaqueContent;
|
|
14
|
+
modelDigest: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const DOCUMENT_LOSS_PRESERVATION = new WeakMap<Document, DocumentLossPreservationState>();
|
|
18
|
+
|
|
19
|
+
export function documentFidelityReport(document: Document): readonly DocumentFidelityIssue[] {
|
|
20
|
+
const envelope = DOCUMENT_LOSS_PRESERVATION.get(document);
|
|
21
|
+
if (!envelope) return [];
|
|
22
|
+
const changed = document.revision !== envelope.importedRevision;
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
code: changed ? "content-will-be-discarded" : "content-preserved-in-source",
|
|
26
|
+
severity: changed ? "error" : "warning",
|
|
27
|
+
feature: "opaque-ooxml",
|
|
28
|
+
message: changed
|
|
29
|
+
? "The imported DOCX contains bounded inert OOXML outside the editable model; the document changed, so regenerating DOCX would discard it"
|
|
30
|
+
: "The imported DOCX contains bounded inert OOXML outside the editable model; unchanged export returns the original package byte-for-byte",
|
|
31
|
+
parts: [...envelope.opaqueContent.parts],
|
|
32
|
+
relationships: envelope.opaqueContent.relationships.map((relationship) => ({
|
|
33
|
+
...relationship,
|
|
34
|
+
})),
|
|
35
|
+
contentTypes: envelope.opaqueContent.contentTypes.map((contentType) => ({ ...contentType })),
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function documentLossPreservationEnvelope(
|
|
41
|
+
document: Document,
|
|
42
|
+
): DocumentLossPreservationEnvelope | null {
|
|
43
|
+
const envelope = DOCUMENT_LOSS_PRESERVATION.get(document);
|
|
44
|
+
if (!envelope) return null;
|
|
45
|
+
return {
|
|
46
|
+
version: 1,
|
|
47
|
+
mediaType: DOCX_MEDIA_TYPE,
|
|
48
|
+
sourceBytes: envelope.sourceBytes.slice(),
|
|
49
|
+
sourceDigest: envelope.sourceDigest,
|
|
50
|
+
opaqueContent: {
|
|
51
|
+
parts: [...envelope.opaqueContent.parts],
|
|
52
|
+
relationships: envelope.opaqueContent.relationships.map((relationship) => ({
|
|
53
|
+
...relationship,
|
|
54
|
+
})),
|
|
55
|
+
contentTypes: envelope.opaqueContent.contentTypes.map((contentType) => ({ ...contentType })),
|
|
56
|
+
},
|
|
57
|
+
modelDigest: envelope.modelDigest,
|
|
58
|
+
};
|
|
59
|
+
}
|