@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.
Files changed (203) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +104 -0
  3. package/dist/bounded-zip.d.ts +28 -0
  4. package/dist/chunk-4BSENMAE.js +39 -0
  5. package/dist/chunk-4BSENMAE.js.map +1 -0
  6. package/dist/chunk-4FRFNNBM.js +276 -0
  7. package/dist/chunk-4FRFNNBM.js.map +1 -0
  8. package/dist/chunk-5XIA6KHZ.js +49 -0
  9. package/dist/chunk-5XIA6KHZ.js.map +1 -0
  10. package/dist/chunk-66CT2ZRP.js +2229 -0
  11. package/dist/chunk-66CT2ZRP.js.map +1 -0
  12. package/dist/chunk-72SYDU4O.js +319 -0
  13. package/dist/chunk-72SYDU4O.js.map +1 -0
  14. package/dist/chunk-B2ZJRZDA.js +279 -0
  15. package/dist/chunk-B2ZJRZDA.js.map +1 -0
  16. package/dist/chunk-DCTLTNPW.js +2458 -0
  17. package/dist/chunk-DCTLTNPW.js.map +1 -0
  18. package/dist/chunk-FGZM4FQ6.js +473 -0
  19. package/dist/chunk-FGZM4FQ6.js.map +1 -0
  20. package/dist/chunk-HTJBLBDE.js +591 -0
  21. package/dist/chunk-HTJBLBDE.js.map +1 -0
  22. package/dist/chunk-IYFXZQ34.js +5306 -0
  23. package/dist/chunk-IYFXZQ34.js.map +1 -0
  24. package/dist/chunk-J6N7IR44.js +172 -0
  25. package/dist/chunk-J6N7IR44.js.map +1 -0
  26. package/dist/chunk-N2IHNWBS.js +1002 -0
  27. package/dist/chunk-N2IHNWBS.js.map +1 -0
  28. package/dist/chunk-NAG44K67.js +549 -0
  29. package/dist/chunk-NAG44K67.js.map +1 -0
  30. package/dist/chunk-O24KTEGP.js +33 -0
  31. package/dist/chunk-O24KTEGP.js.map +1 -0
  32. package/dist/chunk-PI2AZVGK.js +2074 -0
  33. package/dist/chunk-PI2AZVGK.js.map +1 -0
  34. package/dist/chunk-Q2FFHEY7.js +40 -0
  35. package/dist/chunk-Q2FFHEY7.js.map +1 -0
  36. package/dist/chunk-RBGQADXA.js +57 -0
  37. package/dist/chunk-RBGQADXA.js.map +1 -0
  38. package/dist/chunk-U5G2BKM2.js +613 -0
  39. package/dist/chunk-U5G2BKM2.js.map +1 -0
  40. package/dist/chunk-VOJHMSM3.js +39 -0
  41. package/dist/chunk-VOJHMSM3.js.map +1 -0
  42. package/dist/chunk-VUNV25KB.js +16 -0
  43. package/dist/chunk-VUNV25KB.js.map +1 -0
  44. package/dist/chunk-XIFUNVBO.js +101 -0
  45. package/dist/chunk-XIFUNVBO.js.map +1 -0
  46. package/dist/chunk-ZCJYRJGB.js +489 -0
  47. package/dist/chunk-ZCJYRJGB.js.map +1 -0
  48. package/dist/chunk-ZZXPEE4S.js +2260 -0
  49. package/dist/chunk-ZZXPEE4S.js.map +1 -0
  50. package/dist/document-docx-api.d.ts +49 -0
  51. package/dist/document-docx-codec.d.ts +9 -0
  52. package/dist/document-docx-codec.js +4765 -0
  53. package/dist/document-docx-codec.js.map +1 -0
  54. package/dist/document-docx-import.d.ts +261 -0
  55. package/dist/document-docx-packer.d.ts +18 -0
  56. package/dist/document-docx-state.d.ts +12 -0
  57. package/dist/document-render.d.ts +3 -0
  58. package/dist/document-render.js +492 -0
  59. package/dist/document-render.js.map +1 -0
  60. package/dist/document.d.ts +432 -0
  61. package/dist/document.js +37 -0
  62. package/dist/document.js.map +1 -0
  63. package/dist/errors.d.ts +23 -0
  64. package/dist/file-blob.d.ts +11 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.js +186 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/inspection.d.ts +12 -0
  69. package/dist/kernel.d.ts +101 -0
  70. package/dist/lib-GQLPACFK.js +9746 -0
  71. package/dist/lib-GQLPACFK.js.map +1 -0
  72. package/dist/materializer-cli-entry.d.ts +2 -0
  73. package/dist/materializer-cli-entry.js +29 -0
  74. package/dist/materializer-cli-entry.js.map +1 -0
  75. package/dist/materializer-cli.d.ts +24 -0
  76. package/dist/materializer-cli.js +24 -0
  77. package/dist/materializer-cli.js.map +1 -0
  78. package/dist/native-raster.d.ts +10 -0
  79. package/dist/native.d.ts +129 -0
  80. package/dist/native.js +31 -0
  81. package/dist/native.js.map +1 -0
  82. package/dist/office-import.d.ts +48 -0
  83. package/dist/office-import.js +154 -0
  84. package/dist/office-import.js.map +1 -0
  85. package/dist/presentation-pptx-api.d.ts +60 -0
  86. package/dist/presentation-pptx-import.d.ts +5 -0
  87. package/dist/presentation-pptx-state-digest-765CZZED.js +10 -0
  88. package/dist/presentation-pptx-state-digest-765CZZED.js.map +1 -0
  89. package/dist/presentation-pptx-state-digest.d.ts +3 -0
  90. package/dist/presentation-pptx-state.d.ts +4 -0
  91. package/dist/presentation-pptx-xml.d.ts +29 -0
  92. package/dist/presentation-pptx.d.ts +5 -0
  93. package/dist/presentation-pptx.js +2365 -0
  94. package/dist/presentation-pptx.js.map +1 -0
  95. package/dist/presentation-render.d.ts +29 -0
  96. package/dist/presentation-render.js +375 -0
  97. package/dist/presentation-render.js.map +1 -0
  98. package/dist/presentation.d.ts +565 -0
  99. package/dist/presentation.js +71 -0
  100. package/dist/presentation.js.map +1 -0
  101. package/dist/production-composite.d.ts +68 -0
  102. package/dist/production-document.d.ts +2 -0
  103. package/dist/production-document.js +176 -0
  104. package/dist/production-document.js.map +1 -0
  105. package/dist/production-native-codecs.d.ts +94 -0
  106. package/dist/production-presentation.d.ts +2 -0
  107. package/dist/production-presentation.js +176 -0
  108. package/dist/production-presentation.js.map +1 -0
  109. package/dist/production-sha256.d.ts +2 -0
  110. package/dist/production-spreadsheet-native.d.ts +12 -0
  111. package/dist/production-spreadsheet.d.ts +2 -0
  112. package/dist/production-spreadsheet.js +176 -0
  113. package/dist/production-spreadsheet.js.map +1 -0
  114. package/dist/production.d.ts +96 -0
  115. package/dist/raster-image.d.ts +34 -0
  116. package/dist/reference.d.ts +17 -0
  117. package/dist/reference.js +574 -0
  118. package/dist/reference.js.map +1 -0
  119. package/dist/runtime-cli-entry.d.ts +2 -0
  120. package/dist/runtime-cli-entry.js +21 -0
  121. package/dist/runtime-cli-entry.js.map +1 -0
  122. package/dist/runtime-cli.d.ts +76 -0
  123. package/dist/runtime-cli.js +26 -0
  124. package/dist/runtime-cli.js.map +1 -0
  125. package/dist/runtime-development.d.ts +73 -0
  126. package/dist/runtime-development.js +30 -0
  127. package/dist/runtime-development.js.map +1 -0
  128. package/dist/runtime-receipt.d.ts +19 -0
  129. package/dist/runtime.d.ts +355 -0
  130. package/dist/runtime.js +42 -0
  131. package/dist/runtime.js.map +1 -0
  132. package/dist/snapshot.d.ts +26 -0
  133. package/dist/snapshot.js +61 -0
  134. package/dist/snapshot.js.map +1 -0
  135. package/dist/spreadsheet-address.d.ts +18 -0
  136. package/dist/spreadsheet-file.d.ts +17 -0
  137. package/dist/spreadsheet-formula.d.ts +67 -0
  138. package/dist/spreadsheet-image.d.ts +17 -0
  139. package/dist/spreadsheet-render.d.ts +5 -0
  140. package/dist/spreadsheet-render.js +752 -0
  141. package/dist/spreadsheet-render.js.map +1 -0
  142. package/dist/spreadsheet-types.d.ts +155 -0
  143. package/dist/spreadsheet-xlsx-api.d.ts +88 -0
  144. package/dist/spreadsheet-xlsx-codec.d.ts +16 -0
  145. package/dist/spreadsheet-xlsx-codec.js +16 -0
  146. package/dist/spreadsheet-xlsx-codec.js.map +1 -0
  147. package/dist/spreadsheet-xlsx-state.d.ts +16 -0
  148. package/dist/spreadsheet.d.ts +724 -0
  149. package/dist/spreadsheet.js +67 -0
  150. package/dist/spreadsheet.js.map +1 -0
  151. package/package.json +129 -0
  152. package/src/bounded-zip.ts +450 -0
  153. package/src/document-docx-api.ts +64 -0
  154. package/src/document-docx-codec.ts +2253 -0
  155. package/src/document-docx-import.ts +3814 -0
  156. package/src/document-docx-packer.ts +72 -0
  157. package/src/document-docx-state.ts +59 -0
  158. package/src/document-render.ts +615 -0
  159. package/src/document.ts +2800 -0
  160. package/src/errors.ts +45 -0
  161. package/src/file-blob.ts +43 -0
  162. package/src/index.ts +4 -0
  163. package/src/inspection.ts +50 -0
  164. package/src/kernel.ts +525 -0
  165. package/src/materializer-cli-entry.ts +11 -0
  166. package/src/materializer-cli.ts +743 -0
  167. package/src/native-raster.ts +141 -0
  168. package/src/native.ts +390 -0
  169. package/src/office-import.ts +243 -0
  170. package/src/presentation-pptx-api.ts +107 -0
  171. package/src/presentation-pptx-import.ts +2065 -0
  172. package/src/presentation-pptx-state-digest.ts +46 -0
  173. package/src/presentation-pptx-state.ts +18 -0
  174. package/src/presentation-pptx-xml.ts +473 -0
  175. package/src/presentation-pptx.ts +447 -0
  176. package/src/presentation-render.ts +532 -0
  177. package/src/presentation.ts +2599 -0
  178. package/src/production-composite.ts +805 -0
  179. package/src/production-document.ts +2 -0
  180. package/src/production-native-codecs.ts +1141 -0
  181. package/src/production-presentation.ts +2 -0
  182. package/src/production-sha256.ts +150 -0
  183. package/src/production-spreadsheet-native.ts +686 -0
  184. package/src/production-spreadsheet.ts +2 -0
  185. package/src/production.ts +1022 -0
  186. package/src/raster-image.ts +586 -0
  187. package/src/reference.ts +17 -0
  188. package/src/runtime-cli-entry.ts +13 -0
  189. package/src/runtime-cli.ts +670 -0
  190. package/src/runtime-development.ts +689 -0
  191. package/src/runtime-receipt.ts +169 -0
  192. package/src/runtime.ts +1463 -0
  193. package/src/snapshot.ts +88 -0
  194. package/src/spreadsheet-address.ts +90 -0
  195. package/src/spreadsheet-file.ts +71 -0
  196. package/src/spreadsheet-formula.ts +1212 -0
  197. package/src/spreadsheet-image.ts +242 -0
  198. package/src/spreadsheet-render.ts +985 -0
  199. package/src/spreadsheet-types.ts +171 -0
  200. package/src/spreadsheet-xlsx-api.ts +123 -0
  201. package/src/spreadsheet-xlsx-codec.ts +3063 -0
  202. package/src/spreadsheet-xlsx-state.ts +191 -0
  203. package/src/spreadsheet.ts +5195 -0
@@ -0,0 +1,191 @@
1
+ import type { Workbook } from "./spreadsheet";
2
+ import {
3
+ XLSX_MEDIA_TYPE,
4
+ type SpreadsheetFidelityIssue,
5
+ type SpreadsheetLossPreservationEnvelope,
6
+ type SpreadsheetOpaqueContent,
7
+ } from "./spreadsheet-xlsx-api";
8
+
9
+ export type SpreadsheetLossPreservationState = {
10
+ sourceBytes: Uint8Array;
11
+ sourceDigest: string;
12
+ importedRevision: number;
13
+ opaqueContent: SpreadsheetOpaqueContent;
14
+ modelDigest: string;
15
+ };
16
+
17
+ export const LOSS_PRESERVATION = new WeakMap<Workbook, SpreadsheetLossPreservationState>();
18
+
19
+ export function spreadsheetFidelityReport(workbook: Workbook): readonly SpreadsheetFidelityIssue[] {
20
+ const issues: SpreadsheetFidelityIssue[] = [];
21
+ const envelope = LOSS_PRESERVATION.get(workbook);
22
+ if (envelope && hasOpaqueContent(envelope.opaqueContent)) {
23
+ const severity = workbook.revision === envelope.importedRevision ? "warning" : "error";
24
+ const categorized = opaqueContentIssues(envelope.opaqueContent, severity);
25
+ issues.push(...categorized);
26
+ }
27
+ for (const worksheet of workbook.worksheets.items) {
28
+ const charts = worksheet.charts.items.length;
29
+ if (charts > 0) {
30
+ issues.push({
31
+ code: "editable-chart-not-exportable",
32
+ severity: "error",
33
+ feature: "chart",
34
+ message: `Worksheet ${JSON.stringify(worksheet.name)} has ${charts} editable chart(s); XLSX chart authoring is not implemented`,
35
+ });
36
+ }
37
+ const sparklines = worksheet.sparklineGroups.items.length;
38
+ if (sparklines > 0) {
39
+ issues.push({
40
+ code: "sparkline-not-exportable",
41
+ severity: "error",
42
+ feature: "sparkline",
43
+ message: `Worksheet ${JSON.stringify(worksheet.name)} has ${sparklines} editable sparkline group(s); XLSX sparkline authoring is not implemented`,
44
+ });
45
+ }
46
+ const imageMetadata = worksheet.images.items.filter((image) => Boolean(image.config.alt));
47
+ if (imageMetadata.length > 0) {
48
+ issues.push({
49
+ code: "image-metadata-not-exportable",
50
+ severity: "error",
51
+ feature: "image",
52
+ message: `Worksheet ${JSON.stringify(worksheet.name)} has ${imageMetadata.length} image(s) with accessibility text that ExcelJS cannot author`,
53
+ });
54
+ }
55
+ }
56
+ if (workbook.comments.items.length > 0) {
57
+ issues.push({
58
+ code: "comment-thread-not-exportable",
59
+ severity: "error",
60
+ feature: "comment",
61
+ message: `The workbook has ${workbook.comments.items.length} threaded comment(s); XLSX legacy notes cannot preserve authorship, replies, resolution, and timestamps`,
62
+ });
63
+ }
64
+ return issues;
65
+ }
66
+
67
+ export function opaqueContentIssues(
68
+ content: SpreadsheetOpaqueContent,
69
+ severity: SpreadsheetFidelityIssue["severity"],
70
+ ): SpreadsheetFidelityIssue[] {
71
+ const features = new Set(content.features);
72
+ const issues: SpreadsheetFidelityIssue[] = [];
73
+ if (features.has("editable-charts")) {
74
+ issues.push({
75
+ code: severity === "warning" ? "editable-chart-preserved" : "editable-chart-not-exportable",
76
+ severity,
77
+ feature: "chart",
78
+ message:
79
+ severity === "warning"
80
+ ? "Imported editable chart OOXML is retained in the original XLSX package"
81
+ : "The workbook changed, so retained editable chart OOXML would be discarded",
82
+ ...opaqueMetadataFor(content, (part) => /^xl\/charts\//i.test(part)),
83
+ });
84
+ features.delete("editable-charts");
85
+ }
86
+ if (features.has("sparklines")) {
87
+ issues.push({
88
+ code: severity === "warning" ? "sparkline-preserved" : "sparkline-not-exportable",
89
+ severity,
90
+ feature: "sparkline",
91
+ message:
92
+ severity === "warning"
93
+ ? "Imported sparkline OOXML is retained in the original XLSX package"
94
+ : "The workbook changed, so retained sparkline OOXML would be discarded",
95
+ ...opaqueMetadataFor(
96
+ content,
97
+ (part) => content.features.includes("sparklines") && /^xl\/worksheets\//i.test(part),
98
+ ),
99
+ });
100
+ features.delete("sparklines");
101
+ features.delete("worksheet-extensions");
102
+ }
103
+ if (features.size > 0 || issues.length === 0) {
104
+ const remaining = {
105
+ ...cloneOpaqueContent(content),
106
+ features: [...features].sort(),
107
+ };
108
+ issues.push(opaqueContentIssue(remaining, severity));
109
+ }
110
+ return issues;
111
+ }
112
+
113
+ function opaqueMetadataFor(
114
+ content: SpreadsheetOpaqueContent,
115
+ matchesPart: (part: string) => boolean,
116
+ ): Pick<SpreadsheetFidelityIssue, "parts" | "relationships" | "contentTypes"> {
117
+ const parts = content.parts.filter(matchesPart);
118
+ const selected = new Set(parts);
119
+ return {
120
+ parts,
121
+ relationships: content.relationships
122
+ .filter(
123
+ (relationship) =>
124
+ selected.has(relationship.sourcePart) || selected.has(relationship.targetPart),
125
+ )
126
+ .map((relationship) => ({ ...relationship })),
127
+ contentTypes: content.contentTypes
128
+ .filter((contentType) => selected.has(contentType.partName))
129
+ .map((contentType) => ({ ...contentType })),
130
+ };
131
+ }
132
+
133
+ export function spreadsheetLossPreservationEnvelope(
134
+ workbook: Workbook,
135
+ ): SpreadsheetLossPreservationEnvelope | null {
136
+ const envelope = LOSS_PRESERVATION.get(workbook);
137
+ if (!envelope) return null;
138
+ return {
139
+ version: 1,
140
+ mediaType: XLSX_MEDIA_TYPE,
141
+ sourceBytes: envelope.sourceBytes.slice(),
142
+ sourceDigest: envelope.sourceDigest,
143
+ opaqueContent: cloneOpaqueContent(envelope.opaqueContent),
144
+ modelDigest: envelope.modelDigest,
145
+ };
146
+ }
147
+
148
+ export function opaqueContentIssue(
149
+ content: SpreadsheetOpaqueContent,
150
+ severity: SpreadsheetFidelityIssue["severity"],
151
+ ): SpreadsheetFidelityIssue {
152
+ const changed = severity === "error";
153
+ return {
154
+ code: changed ? "content-will-be-discarded" : "content-preserved-in-source",
155
+ severity,
156
+ feature: "opaque-ooxml",
157
+ message: changed
158
+ ? "The imported XLSX contains bounded inert OOXML outside the editable model; the workbook changed, so regeneration would discard it"
159
+ : "The imported XLSX contains bounded inert OOXML outside the editable model; unchanged export returns the original package byte-for-byte",
160
+ parts: [...content.parts],
161
+ relationships: content.relationships.map((relationship) => ({
162
+ ...relationship,
163
+ })),
164
+ contentTypes: content.contentTypes.map((contentType) => ({
165
+ ...contentType,
166
+ })),
167
+ features: [...content.features],
168
+ };
169
+ }
170
+
171
+ export function hasOpaqueContent(content: SpreadsheetOpaqueContent): boolean {
172
+ return (
173
+ content.parts.length > 0 ||
174
+ content.relationships.length > 0 ||
175
+ content.contentTypes.length > 0 ||
176
+ content.features.length > 0
177
+ );
178
+ }
179
+
180
+ export function cloneOpaqueContent(content: SpreadsheetOpaqueContent): SpreadsheetOpaqueContent {
181
+ return {
182
+ parts: [...content.parts],
183
+ relationships: content.relationships.map((relationship) => ({
184
+ ...relationship,
185
+ })),
186
+ contentTypes: content.contentTypes.map((contentType) => ({
187
+ ...contentType,
188
+ })),
189
+ features: [...content.features],
190
+ };
191
+ }