@rowsncolumns/toolkit 24.4.1
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.md +100 -0
- package/Readme.md +27 -0
- package/dist/cjs/autofilter-condition.d.ts +43 -0
- package/dist/cjs/autofilter-condition.d.ts.map +1 -0
- package/dist/cjs/autofilter-condition.js +155 -0
- package/dist/cjs/csv-export.d.ts +49 -0
- package/dist/cjs/csv-export.d.ts.map +1 -0
- package/dist/cjs/csv-export.js +142 -0
- package/dist/cjs/csv-import-worker.d.ts +16 -0
- package/dist/cjs/csv-import-worker.d.ts.map +1 -0
- package/dist/cjs/csv-import-worker.js +60 -0
- package/dist/cjs/csv-import.d.ts +38 -0
- package/dist/cjs/csv-import.d.ts.map +1 -0
- package/dist/cjs/csv-import.js +166 -0
- package/dist/cjs/csv-parser/helpers.d.ts +14 -0
- package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/csv-parser/helpers.js +145 -0
- package/dist/cjs/csv-parser/types.d.ts +66 -0
- package/dist/cjs/csv-parser/types.d.ts.map +1 -0
- package/dist/cjs/csv-parser/types.js +14 -0
- package/dist/cjs/csv-parser/worker.d.ts +2 -0
- package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
- package/dist/cjs/csv-parser/worker.js +200 -0
- package/dist/cjs/excel-export.d.ts +11 -0
- package/dist/cjs/excel-export.d.ts.map +1 -0
- package/dist/cjs/excel-export.js +22 -0
- package/dist/cjs/excel-import-session.d.ts +51 -0
- package/dist/cjs/excel-import-session.d.ts.map +1 -0
- package/dist/cjs/excel-import-session.js +307 -0
- package/dist/cjs/excel-import-worker.d.ts +7 -0
- package/dist/cjs/excel-import-worker.d.ts.map +1 -0
- package/dist/cjs/excel-import-worker.js +119 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
- package/dist/cjs/excel-parser/helpers.d.ts +28 -0
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/excel-parser/helpers.js +188 -0
- package/dist/cjs/excel-parser/interface.d.ts +179 -0
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
- package/dist/cjs/excel-parser/interface.js +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
- package/dist/cjs/excel-parser/registry.d.ts +5 -0
- package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/registry.js +21 -0
- package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
- package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/style-registry.js +175 -0
- package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
- package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/cjs/excel-parser/theme-default.js +19 -0
- package/dist/cjs/excel-parser/types.d.ts +365 -0
- package/dist/cjs/excel-parser/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/types.js +59 -0
- package/dist/cjs/excel-parser/utils.d.ts +6 -0
- package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
- package/dist/cjs/excel-parser/utils.js +30 -0
- package/dist/cjs/excel-parser/workbook.d.ts +51 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
- package/dist/cjs/excel-parser/workbook.js +317 -0
- package/dist/cjs/excel-parser/worker.d.ts +2 -0
- package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
- package/dist/cjs/excel-parser/worker.js +1149 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser.js +49 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/cjs/exporter/invalid-data-validation.js +39 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/ods-export.js +3714 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/cjs/helpers/theme-xml-generator.js +33 -0
- package/dist/cjs/helpers.d.ts +34 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +189 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/indexed-colors.d.ts +2 -0
- package/dist/cjs/indexed-colors.d.ts.map +1 -0
- package/dist/cjs/indexed-colors.js +75 -0
- package/dist/cjs/ods-export.d.ts +24 -0
- package/dist/cjs/ods-export.d.ts.map +1 -0
- package/dist/cjs/ods-export.js +23 -0
- package/dist/cjs/parse.d.ts +24 -0
- package/dist/cjs/parse.d.ts.map +1 -0
- package/dist/cjs/parse.js +68 -0
- package/dist/cjs/power-query.d.ts +41 -0
- package/dist/cjs/power-query.d.ts.map +1 -0
- package/dist/cjs/power-query.js +22 -0
- package/dist/cjs/server.d.ts +9 -0
- package/dist/cjs/server.d.ts.map +1 -0
- package/dist/cjs/server.js +8 -0
- package/dist/cjs/theme1.d.ts +3 -0
- package/dist/cjs/theme1.d.ts.map +1 -0
- package/dist/cjs/theme1.js +2 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +16 -0
- package/dist/esm/autofilter-condition.d.ts +43 -0
- package/dist/esm/autofilter-condition.d.ts.map +1 -0
- package/dist/esm/autofilter-condition.js +145 -0
- package/dist/esm/csv-export.d.ts +49 -0
- package/dist/esm/csv-export.d.ts.map +1 -0
- package/dist/esm/csv-export.js +126 -0
- package/dist/esm/csv-import-worker.d.ts +16 -0
- package/dist/esm/csv-import-worker.d.ts.map +1 -0
- package/dist/esm/csv-import-worker.js +60 -0
- package/dist/esm/csv-import.d.ts +38 -0
- package/dist/esm/csv-import.d.ts.map +1 -0
- package/dist/esm/csv-import.js +132 -0
- package/dist/esm/csv-parser/helpers.d.ts +14 -0
- package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
- package/dist/esm/csv-parser/helpers.js +0 -0
- package/dist/esm/csv-parser/types.d.ts +66 -0
- package/dist/esm/csv-parser/types.d.ts.map +1 -0
- package/dist/esm/csv-parser/types.js +14 -0
- package/dist/esm/csv-parser/worker.d.ts +2 -0
- package/dist/esm/csv-parser/worker.d.ts.map +1 -0
- package/dist/esm/csv-parser/worker.js +154 -0
- package/dist/esm/excel-export.d.ts +11 -0
- package/dist/esm/excel-export.d.ts.map +1 -0
- package/dist/esm/excel-export.js +13 -0
- package/dist/esm/excel-import-session.d.ts +51 -0
- package/dist/esm/excel-import-session.d.ts.map +1 -0
- package/dist/esm/excel-import-session.js +255 -0
- package/dist/esm/excel-import-worker.d.ts +7 -0
- package/dist/esm/excel-import-worker.d.ts.map +1 -0
- package/dist/esm/excel-import-worker.js +116 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
- package/dist/esm/excel-parser/helpers.d.ts +28 -0
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
- package/dist/esm/excel-parser/helpers.js +160 -0
- package/dist/esm/excel-parser/interface.d.ts +179 -0
- package/dist/esm/excel-parser/interface.d.ts.map +1 -0
- package/dist/esm/excel-parser/interface.js +1 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/base/index.js +64 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
- package/dist/esm/excel-parser/registry.d.ts +5 -0
- package/dist/esm/excel-parser/registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/registry.js +20 -0
- package/dist/esm/excel-parser/style-registry.d.ts +51 -0
- package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/style-registry.js +163 -0
- package/dist/esm/excel-parser/theme-default.d.ts +3 -0
- package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/esm/excel-parser/theme-default.js +19 -0
- package/dist/esm/excel-parser/types.d.ts +365 -0
- package/dist/esm/excel-parser/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/types.js +59 -0
- package/dist/esm/excel-parser/utils.d.ts +6 -0
- package/dist/esm/excel-parser/utils.d.ts.map +1 -0
- package/dist/esm/excel-parser/utils.js +25 -0
- package/dist/esm/excel-parser/workbook.d.ts +51 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
- package/dist/esm/excel-parser/workbook.js +192 -0
- package/dist/esm/excel-parser/worker.d.ts +2 -0
- package/dist/esm/excel-parser/worker.d.ts.map +1 -0
- package/dist/esm/excel-parser/worker.js +862 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
- package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
- package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser.js +43 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/esm/exporter/invalid-data-validation.js +37 -0
- package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
- package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/esm/exporter/ods/ods-export.js +3238 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/future-functions.js +264 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/style-builder.js +795 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/esm/helpers/theme-xml-generator.js +33 -0
- package/dist/esm/helpers.d.ts +34 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +182 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/indexed-colors.d.ts +2 -0
- package/dist/esm/indexed-colors.d.ts.map +1 -0
- package/dist/esm/indexed-colors.js +75 -0
- package/dist/esm/ods-export.d.ts +24 -0
- package/dist/esm/ods-export.d.ts.map +1 -0
- package/dist/esm/ods-export.js +12 -0
- package/dist/esm/parse.d.ts +24 -0
- package/dist/esm/parse.d.ts.map +1 -0
- package/dist/esm/parse.js +55 -0
- package/dist/esm/power-query.d.ts +41 -0
- package/dist/esm/power-query.d.ts.map +1 -0
- package/dist/esm/power-query.js +19 -0
- package/dist/esm/server.d.ts +9 -0
- package/dist/esm/server.d.ts.map +1 -0
- package/dist/esm/server.js +8 -0
- package/dist/esm/theme1.d.ts +3 -0
- package/dist/esm/theme1.d.ts.map +1 -0
- package/dist/esm/theme1.js +2 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +14 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +14 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +16 -0
- package/package.json +62 -0
- package/xlsx.d.ts +52 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { __awaiter, __generator, __read, __spreadArray, __values } from "tslib";
|
|
2
|
+
/// <reference path="../xlsx.d.ts" />
|
|
3
|
+
import { CFB } from "xlsx/xlsx.mjs";
|
|
4
|
+
import { sha512 } from "@noble/hashes/sha512";
|
|
5
|
+
import { hmac } from "@noble/hashes/hmac";
|
|
6
|
+
import { cbc } from "@noble/ciphers/aes";
|
|
7
|
+
var BLOCK_SIZE = 16;
|
|
8
|
+
var KEY_SIZE = 32; // AES-256
|
|
9
|
+
var HASH_SIZE = 64; // SHA-512
|
|
10
|
+
var SEGMENT_LENGTH = 4096;
|
|
11
|
+
var SPIN_COUNT_DEFAULT = 100000;
|
|
12
|
+
var BLOCK_KEY_VERIFIER_INPUT = new Uint8Array([
|
|
13
|
+
0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79,
|
|
14
|
+
]);
|
|
15
|
+
var BLOCK_KEY_VERIFIER_HASH = new Uint8Array([
|
|
16
|
+
0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34, 0x4e,
|
|
17
|
+
]);
|
|
18
|
+
var BLOCK_KEY_ENCRYPTION_KEY = new Uint8Array([
|
|
19
|
+
0x14, 0x6e, 0x0b, 0xe7, 0xab, 0xac, 0xd0, 0xd6,
|
|
20
|
+
]);
|
|
21
|
+
var BLOCK_KEY_DATA_INTEGRITY_KEY = new Uint8Array([
|
|
22
|
+
0x5f, 0xb2, 0xad, 0x01, 0x0c, 0xb9, 0xe1, 0xf6,
|
|
23
|
+
]);
|
|
24
|
+
var BLOCK_KEY_DATA_INTEGRITY_VALUE = new Uint8Array([
|
|
25
|
+
0xa0, 0x67, 0x7f, 0x02, 0xb2, 0x2c, 0x84, 0x33,
|
|
26
|
+
]);
|
|
27
|
+
var CFBEncryptor = /** @class */ (function () {
|
|
28
|
+
function CFBEncryptor() {
|
|
29
|
+
}
|
|
30
|
+
CFBEncryptor.encrypt = function (source_1, password_1) {
|
|
31
|
+
return __awaiter(this, arguments, void 0, function (source, password, options) {
|
|
32
|
+
var packageData, spinCount, passwordSalt, packageSalt, verifierInput, encryptionKey, hmacKey, passwordDerivedKey, keyForVerifierInput, keyForVerifierHash, keyForEncryptionKey, verifierHash, encryptedVerifierHashInput, encryptedVerifierHashValue, encryptedKeyValue, encryptedPackageData, encryptedPackageStream, encryptedHmacKey, hmacValue, encryptedHmacValue, encryptionXml, encryptionInfo, cfb, result;
|
|
33
|
+
var _a;
|
|
34
|
+
if (options === void 0) { options = {}; }
|
|
35
|
+
return __generator(this, function (_b) {
|
|
36
|
+
packageData = source instanceof Uint8Array ? source : new Uint8Array(source);
|
|
37
|
+
spinCount = (_a = options.spinCount) !== null && _a !== void 0 ? _a : SPIN_COUNT_DEFAULT;
|
|
38
|
+
passwordSalt = this.randomBytes(BLOCK_SIZE);
|
|
39
|
+
packageSalt = this.randomBytes(BLOCK_SIZE);
|
|
40
|
+
verifierInput = this.randomBytes(BLOCK_SIZE);
|
|
41
|
+
encryptionKey = this.randomBytes(KEY_SIZE);
|
|
42
|
+
hmacKey = this.randomBytes(HASH_SIZE);
|
|
43
|
+
passwordDerivedKey = this.derivePasswordKey(password, passwordSalt, spinCount);
|
|
44
|
+
keyForVerifierInput = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_VERIFIER_INPUT);
|
|
45
|
+
keyForVerifierHash = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_VERIFIER_HASH);
|
|
46
|
+
keyForEncryptionKey = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_ENCRYPTION_KEY);
|
|
47
|
+
verifierHash = this.sha512Hash(verifierInput);
|
|
48
|
+
encryptedVerifierHashInput = this.encryptAESNoPadding(verifierInput, keyForVerifierInput, passwordSalt);
|
|
49
|
+
encryptedVerifierHashValue = this.encryptAESNoPadding(verifierHash, keyForVerifierHash, passwordSalt);
|
|
50
|
+
encryptedKeyValue = this.encryptAESNoPadding(encryptionKey, keyForEncryptionKey, passwordSalt);
|
|
51
|
+
encryptedPackageData = this.encryptPackage(packageData, encryptionKey, packageSalt);
|
|
52
|
+
encryptedPackageStream = this.buildEncryptedPackageStream(packageData.length, encryptedPackageData);
|
|
53
|
+
encryptedHmacKey = this.encryptDataIntegrityValue(hmacKey, encryptionKey, packageSalt, BLOCK_KEY_DATA_INTEGRITY_KEY);
|
|
54
|
+
hmacValue = this.hmacSha512(encryptedPackageStream, hmacKey);
|
|
55
|
+
encryptedHmacValue = this.encryptDataIntegrityValue(hmacValue, encryptionKey, packageSalt, BLOCK_KEY_DATA_INTEGRITY_VALUE);
|
|
56
|
+
encryptionXml = this.buildEncryptionXml({
|
|
57
|
+
spinCount: spinCount,
|
|
58
|
+
passwordSalt: passwordSalt,
|
|
59
|
+
packageSalt: packageSalt,
|
|
60
|
+
encryptedVerifierHashInput: encryptedVerifierHashInput,
|
|
61
|
+
encryptedVerifierHashValue: encryptedVerifierHashValue,
|
|
62
|
+
encryptedKeyValue: encryptedKeyValue,
|
|
63
|
+
encryptedHmacKey: encryptedHmacKey,
|
|
64
|
+
encryptedHmacValue: encryptedHmacValue,
|
|
65
|
+
});
|
|
66
|
+
encryptionInfo = this.buildEncryptionInfoStream(encryptionXml);
|
|
67
|
+
cfb = CFB.utils.cfb_new({ root: "Root Entry" });
|
|
68
|
+
CFB.utils.cfb_add(cfb, "EncryptionInfo", encryptionInfo);
|
|
69
|
+
CFB.utils.cfb_add(cfb, "EncryptedPackage", encryptedPackageStream);
|
|
70
|
+
result = CFB.write(cfb, { type: "array" });
|
|
71
|
+
return [2 /*return*/, result instanceof Uint8Array ? result : new Uint8Array(result)];
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
CFBEncryptor.buildEncryptionInfoStream = function (xml) {
|
|
76
|
+
var xmlBytes = new TextEncoder().encode(xml);
|
|
77
|
+
var info = new Uint8Array(8 + xmlBytes.length);
|
|
78
|
+
var view = new DataView(info.buffer);
|
|
79
|
+
view.setUint16(0, 4, true); // vMajor
|
|
80
|
+
view.setUint16(2, 4, true); // vMinor (Agile)
|
|
81
|
+
view.setUint32(4, 0x40, true); // reserved
|
|
82
|
+
info.set(xmlBytes, 8);
|
|
83
|
+
return info;
|
|
84
|
+
};
|
|
85
|
+
CFBEncryptor.buildEncryptedPackageStream = function (originalSize, encryptedData) {
|
|
86
|
+
var out = new Uint8Array(8 + encryptedData.length);
|
|
87
|
+
var view = new DataView(out.buffer);
|
|
88
|
+
view.setBigUint64(0, BigInt(originalSize), true);
|
|
89
|
+
out.set(encryptedData, 8);
|
|
90
|
+
return out;
|
|
91
|
+
};
|
|
92
|
+
CFBEncryptor.encryptPackage = function (data, key, packageSalt) {
|
|
93
|
+
var chunks = [];
|
|
94
|
+
for (var index = 0; index * SEGMENT_LENGTH < data.length; index++) {
|
|
95
|
+
var start = index * SEGMENT_LENGTH;
|
|
96
|
+
var end = Math.min(start + SEGMENT_LENGTH, data.length);
|
|
97
|
+
var segment = data.slice(start, end);
|
|
98
|
+
var paddedSegment = this.padToBlockSize(segment, BLOCK_SIZE);
|
|
99
|
+
var blockNumber = new Uint8Array(4);
|
|
100
|
+
new DataView(blockNumber.buffer).setUint32(0, index, true);
|
|
101
|
+
var iv = this.sha512Hash(this.concatArrays(packageSalt, blockNumber)).slice(0, BLOCK_SIZE);
|
|
102
|
+
chunks.push(this.encryptAESNoPadding(paddedSegment, key, iv));
|
|
103
|
+
}
|
|
104
|
+
return this.concatArrays.apply(this, __spreadArray([], __read(chunks), false));
|
|
105
|
+
};
|
|
106
|
+
CFBEncryptor.buildEncryptionXml = function (_a) {
|
|
107
|
+
var spinCount = _a.spinCount, passwordSalt = _a.passwordSalt, packageSalt = _a.packageSalt, encryptedVerifierHashInput = _a.encryptedVerifierHashInput, encryptedVerifierHashValue = _a.encryptedVerifierHashValue, encryptedKeyValue = _a.encryptedKeyValue, encryptedHmacKey = _a.encryptedHmacKey, encryptedHmacValue = _a.encryptedHmacValue;
|
|
108
|
+
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<encryption xmlns=\"http://schemas.microsoft.com/office/2006/encryption\" xmlns:p=\"http://schemas.microsoft.com/office/2006/keyEncryptor/password\" xmlns:c=\"http://schemas.microsoft.com/office/2006/keyEncryptor/certificate\">\n <keyData saltSize=\"".concat(BLOCK_SIZE, "\" blockSize=\"").concat(BLOCK_SIZE, "\" keyBits=\"").concat(KEY_SIZE * 8, "\" hashSize=\"").concat(HASH_SIZE, "\" cipherAlgorithm=\"AES\" cipherChaining=\"ChainingModeCBC\" hashAlgorithm=\"SHA512\" saltValue=\"").concat(this.toBase64(packageSalt), "\"/>\n <dataIntegrity encryptedHmacKey=\"").concat(this.toBase64(encryptedHmacKey), "\" encryptedHmacValue=\"").concat(this.toBase64(encryptedHmacValue), "\"/>\n <keyEncryptors>\n <keyEncryptor uri=\"http://schemas.microsoft.com/office/2006/keyEncryptor/password\">\n <p:encryptedKey spinCount=\"").concat(spinCount, "\" saltSize=\"").concat(BLOCK_SIZE, "\" blockSize=\"").concat(BLOCK_SIZE, "\" keyBits=\"").concat(KEY_SIZE * 8, "\" hashSize=\"").concat(HASH_SIZE, "\" cipherAlgorithm=\"AES\" cipherChaining=\"ChainingModeCBC\" hashAlgorithm=\"SHA512\" saltValue=\"").concat(this.toBase64(passwordSalt), "\" encryptedVerifierHashInput=\"").concat(this.toBase64(encryptedVerifierHashInput), "\" encryptedVerifierHashValue=\"").concat(this.toBase64(encryptedVerifierHashValue), "\" encryptedKeyValue=\"").concat(this.toBase64(encryptedKeyValue), "\"/>\n </keyEncryptor>\n </keyEncryptors>\n</encryption>");
|
|
109
|
+
};
|
|
110
|
+
CFBEncryptor.derivePasswordKey = function (password, passwordSalt, spinCount) {
|
|
111
|
+
var passwordBytes = this.stringToUtf16LE(password);
|
|
112
|
+
var hash = this.sha512Hash(this.concatArrays(passwordSalt, passwordBytes));
|
|
113
|
+
for (var i = 0; i < spinCount; i++) {
|
|
114
|
+
var iterator = new Uint8Array(4);
|
|
115
|
+
new DataView(iterator.buffer).setUint32(0, i, true);
|
|
116
|
+
hash = this.sha512Hash(this.concatArrays(iterator, hash));
|
|
117
|
+
}
|
|
118
|
+
return hash;
|
|
119
|
+
};
|
|
120
|
+
CFBEncryptor.deriveAgileBlockKey = function (passwordDerivedKey, blockKey) {
|
|
121
|
+
return this.sha512Hash(this.concatArrays(passwordDerivedKey, blockKey)).slice(0, KEY_SIZE);
|
|
122
|
+
};
|
|
123
|
+
CFBEncryptor.encryptDataIntegrityValue = function (data, encryptionKey, packageSalt, blockKey) {
|
|
124
|
+
var iv = this.sha512Hash(this.concatArrays(packageSalt, blockKey)).slice(0, BLOCK_SIZE);
|
|
125
|
+
return this.encryptAESNoPadding(this.padToBlockSize(data, BLOCK_SIZE), encryptionKey, iv);
|
|
126
|
+
};
|
|
127
|
+
CFBEncryptor.encryptAESNoPadding = function (data, key, iv) {
|
|
128
|
+
var cipher = cbc(key, iv, { disablePadding: true });
|
|
129
|
+
return cipher.encrypt(data);
|
|
130
|
+
};
|
|
131
|
+
CFBEncryptor.sha512Hash = function (data) {
|
|
132
|
+
return sha512(data);
|
|
133
|
+
};
|
|
134
|
+
CFBEncryptor.hmacSha512 = function (data, key) {
|
|
135
|
+
return hmac(sha512, key, data);
|
|
136
|
+
};
|
|
137
|
+
CFBEncryptor.toBase64 = function (data) {
|
|
138
|
+
var binary = "";
|
|
139
|
+
for (var i = 0; i < data.length; i++) {
|
|
140
|
+
binary += String.fromCharCode(data[i]);
|
|
141
|
+
}
|
|
142
|
+
return btoa(binary);
|
|
143
|
+
};
|
|
144
|
+
CFBEncryptor.padToBlockSize = function (data, blockSize) {
|
|
145
|
+
var remainder = data.length % blockSize;
|
|
146
|
+
if (remainder === 0)
|
|
147
|
+
return data;
|
|
148
|
+
var out = new Uint8Array(data.length + (blockSize - remainder));
|
|
149
|
+
out.set(data);
|
|
150
|
+
return out;
|
|
151
|
+
};
|
|
152
|
+
CFBEncryptor.stringToUtf16LE = function (value) {
|
|
153
|
+
var bytes = new Uint8Array(value.length * 2);
|
|
154
|
+
for (var i = 0; i < value.length; i++) {
|
|
155
|
+
var code = value.charCodeAt(i);
|
|
156
|
+
bytes[i * 2] = code & 0xff;
|
|
157
|
+
bytes[i * 2 + 1] = (code >> 8) & 0xff;
|
|
158
|
+
}
|
|
159
|
+
return bytes;
|
|
160
|
+
};
|
|
161
|
+
CFBEncryptor.concatArrays = function () {
|
|
162
|
+
var e_1, _a;
|
|
163
|
+
var arrays = [];
|
|
164
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
165
|
+
arrays[_i] = arguments[_i];
|
|
166
|
+
}
|
|
167
|
+
var total = arrays.reduce(function (sum, arr) { return sum + arr.length; }, 0);
|
|
168
|
+
var out = new Uint8Array(total);
|
|
169
|
+
var offset = 0;
|
|
170
|
+
try {
|
|
171
|
+
for (var arrays_1 = __values(arrays), arrays_1_1 = arrays_1.next(); !arrays_1_1.done; arrays_1_1 = arrays_1.next()) {
|
|
172
|
+
var arr = arrays_1_1.value;
|
|
173
|
+
out.set(arr, offset);
|
|
174
|
+
offset += arr.length;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
178
|
+
finally {
|
|
179
|
+
try {
|
|
180
|
+
if (arrays_1_1 && !arrays_1_1.done && (_a = arrays_1.return)) _a.call(arrays_1);
|
|
181
|
+
}
|
|
182
|
+
finally { if (e_1) throw e_1.error; }
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
};
|
|
186
|
+
CFBEncryptor.randomBytes = function (length) {
|
|
187
|
+
var out = new Uint8Array(length);
|
|
188
|
+
if (typeof globalThis.crypto !== "undefined" &&
|
|
189
|
+
globalThis.crypto.getRandomValues) {
|
|
190
|
+
globalThis.crypto.getRandomValues(out);
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
for (var i = 0; i < length; i++) {
|
|
194
|
+
out[i] = Math.floor(Math.random() * 256);
|
|
195
|
+
}
|
|
196
|
+
return out;
|
|
197
|
+
};
|
|
198
|
+
return CFBEncryptor;
|
|
199
|
+
}());
|
|
200
|
+
export { CFBEncryptor };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CellData, DataValidationRuleRecord } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
export declare class SheetDataValidationStamper {
|
|
3
|
+
private readonly rules;
|
|
4
|
+
private materializeBudget;
|
|
5
|
+
/** Rows that streamed out of the parser (only tracked when rules exist),
|
|
6
|
+
* so trailing materialization doesn't duplicate them. */
|
|
7
|
+
private readonly emittedRows;
|
|
8
|
+
constructor(allRules: DataValidationRuleRecord[], sheetId: number);
|
|
9
|
+
get hasRules(): boolean;
|
|
10
|
+
/** First rule (rule-list order, matching `updateRule`/grid semantics) whose
|
|
11
|
+
* ranges contain the cell. */
|
|
12
|
+
private ruleIdAt;
|
|
13
|
+
/**
|
|
14
|
+
* Stamp an emitted row in place: covered existing cells get
|
|
15
|
+
* `dataValidation: <ruleId>`, and covered holes inside small ranges get a
|
|
16
|
+
* phantom `{ dataValidation }` cell (budget-capped).
|
|
17
|
+
*/
|
|
18
|
+
stampRow(rowIndex: number, values: (CellData | null | undefined)[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Rows covered by small ranges that never streamed out of the file at all
|
|
21
|
+
* (fully blank template rows). Returns sparse phantom rows to append to the
|
|
22
|
+
* sheet's final chunk, in ascending row order.
|
|
23
|
+
*/
|
|
24
|
+
trailingRows(): Array<{
|
|
25
|
+
rowIndex: number;
|
|
26
|
+
values: (CellData | null | undefined)[];
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dv-cell-stamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dv-cell-stamp.d.ts","sourceRoot":"","sources":["../../../excel-parser/dv-cell-stamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AA+CnC,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,iBAAiB,CAA8B;IACvD;6DACyD;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAG/C,QAAQ,EAAE,wBAAwB,EAAE,EACpC,OAAO,EAAE,MAAM;IAsCjB,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;kCAC8B;IAC9B,OAAO,CAAC,QAAQ;IAmBhB;;;;OAIG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GACtC,IAAI;IAgCP;;;;OAIG;IACH,YAAY,IAAI,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;KACzC,CAAC;CAmCH"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { __assign, __read, __spreadArray, __values } from "tslib";
|
|
2
|
+
/**
|
|
3
|
+
* Per-sheet stamping of `cellData.dataValidation` during `processSheetData`
|
|
4
|
+
* streaming.
|
|
5
|
+
*
|
|
6
|
+
* Spreadsheet files store validations at the worksheet level (a rule + the
|
|
7
|
+
* ranges it applies to), but `useSpreadsheetState.getDataValidation` resolves a
|
|
8
|
+
* cell's rule ONLY through the per-cell `cellData.dataValidation` reference —
|
|
9
|
+
* there is no range-membership fallback. Consumers that build documents
|
|
10
|
+
* straight from `processSheetData` (e.g. server-side xlsx→Y.Doc conversion)
|
|
11
|
+
* therefore need the streamed cells to already carry the rule id, or the grid
|
|
12
|
+
* never shows dropdown arrows / enforces the rule even though the rule list
|
|
13
|
+
* itself round-tripped.
|
|
14
|
+
*
|
|
15
|
+
* The stamped id MUST be the id of the same rule object the plugin returns
|
|
16
|
+
* from `getDataValidations()` (ids are minted per parse), so plugins must
|
|
17
|
+
* feed this class from a single cached parse shared with that API.
|
|
18
|
+
*/
|
|
19
|
+
/** A cell is only materialized (created solely to carry the stamp) for ranges
|
|
20
|
+
* up to this many cells — whole-column/row sqrefs would otherwise bloat the
|
|
21
|
+
* output with millions of phantom cells. Cells that exist anyway are stamped
|
|
22
|
+
* regardless of range size. */
|
|
23
|
+
var DV_MATERIALIZE_RANGE_CELL_CAP = 20000;
|
|
24
|
+
/** Upper bound on phantom cells materialized per sheet across all ranges. */
|
|
25
|
+
var DV_MATERIALIZE_CELL_BUDGET = 100000;
|
|
26
|
+
var isFiniteIndex = function (value) {
|
|
27
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
28
|
+
};
|
|
29
|
+
var SheetDataValidationStamper = /** @class */ (function () {
|
|
30
|
+
function SheetDataValidationStamper(allRules, sheetId) {
|
|
31
|
+
var e_1, _a, e_2, _b;
|
|
32
|
+
var _c;
|
|
33
|
+
this.rules = [];
|
|
34
|
+
this.materializeBudget = DV_MATERIALIZE_CELL_BUDGET;
|
|
35
|
+
/** Rows that streamed out of the parser (only tracked when rules exist),
|
|
36
|
+
* so trailing materialization doesn't duplicate them. */
|
|
37
|
+
this.emittedRows = new Set();
|
|
38
|
+
try {
|
|
39
|
+
for (var allRules_1 = __values(allRules), allRules_1_1 = allRules_1.next(); !allRules_1_1.done; allRules_1_1 = allRules_1.next()) {
|
|
40
|
+
var rule = allRules_1_1.value;
|
|
41
|
+
if (rule.id === undefined || rule.id === null)
|
|
42
|
+
continue;
|
|
43
|
+
var ranges = [];
|
|
44
|
+
var materialize = [];
|
|
45
|
+
try {
|
|
46
|
+
for (var _d = (e_2 = void 0, __values((_c = rule.ranges) !== null && _c !== void 0 ? _c : [])), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
47
|
+
var range = _e.value;
|
|
48
|
+
if (range.sheetId !== sheetId)
|
|
49
|
+
continue;
|
|
50
|
+
var _f = range, startRowIndex = _f.startRowIndex, endRowIndex = _f.endRowIndex, startColumnIndex = _f.startColumnIndex, endColumnIndex = _f.endColumnIndex;
|
|
51
|
+
if (!isFiniteIndex(startRowIndex) ||
|
|
52
|
+
!isFiniteIndex(endRowIndex) ||
|
|
53
|
+
!isFiniteIndex(startColumnIndex) ||
|
|
54
|
+
!isFiniteIndex(endColumnIndex) ||
|
|
55
|
+
endRowIndex < startRowIndex ||
|
|
56
|
+
endColumnIndex < startColumnIndex) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
ranges.push({
|
|
60
|
+
startRowIndex: startRowIndex,
|
|
61
|
+
endRowIndex: endRowIndex,
|
|
62
|
+
startColumnIndex: startColumnIndex,
|
|
63
|
+
endColumnIndex: endColumnIndex,
|
|
64
|
+
});
|
|
65
|
+
materialize.push((endRowIndex - startRowIndex + 1) *
|
|
66
|
+
(endColumnIndex - startColumnIndex + 1) <=
|
|
67
|
+
DV_MATERIALIZE_RANGE_CELL_CAP);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
71
|
+
finally {
|
|
72
|
+
try {
|
|
73
|
+
if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
|
|
74
|
+
}
|
|
75
|
+
finally { if (e_2) throw e_2.error; }
|
|
76
|
+
}
|
|
77
|
+
if (ranges.length) {
|
|
78
|
+
this.rules.push({ id: rule.id, ranges: ranges, materialize: materialize });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
83
|
+
finally {
|
|
84
|
+
try {
|
|
85
|
+
if (allRules_1_1 && !allRules_1_1.done && (_a = allRules_1.return)) _a.call(allRules_1);
|
|
86
|
+
}
|
|
87
|
+
finally { if (e_1) throw e_1.error; }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
Object.defineProperty(SheetDataValidationStamper.prototype, "hasRules", {
|
|
91
|
+
get: function () {
|
|
92
|
+
return this.rules.length > 0;
|
|
93
|
+
},
|
|
94
|
+
enumerable: false,
|
|
95
|
+
configurable: true
|
|
96
|
+
});
|
|
97
|
+
/** First rule (rule-list order, matching `updateRule`/grid semantics) whose
|
|
98
|
+
* ranges contain the cell. */
|
|
99
|
+
SheetDataValidationStamper.prototype.ruleIdAt = function (rowIndex, columnIndex) {
|
|
100
|
+
var e_3, _a, e_4, _b;
|
|
101
|
+
try {
|
|
102
|
+
for (var _c = __values(this.rules), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
103
|
+
var rule = _d.value;
|
|
104
|
+
try {
|
|
105
|
+
for (var _e = (e_4 = void 0, __values(rule.ranges)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
106
|
+
var range = _f.value;
|
|
107
|
+
if (rowIndex >= range.startRowIndex &&
|
|
108
|
+
rowIndex <= range.endRowIndex &&
|
|
109
|
+
columnIndex >= range.startColumnIndex &&
|
|
110
|
+
columnIndex <= range.endColumnIndex) {
|
|
111
|
+
return rule.id;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
116
|
+
finally {
|
|
117
|
+
try {
|
|
118
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
119
|
+
}
|
|
120
|
+
finally { if (e_4) throw e_4.error; }
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
125
|
+
finally {
|
|
126
|
+
try {
|
|
127
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
128
|
+
}
|
|
129
|
+
finally { if (e_3) throw e_3.error; }
|
|
130
|
+
}
|
|
131
|
+
return undefined;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Stamp an emitted row in place: covered existing cells get
|
|
135
|
+
* `dataValidation: <ruleId>`, and covered holes inside small ranges get a
|
|
136
|
+
* phantom `{ dataValidation }` cell (budget-capped).
|
|
137
|
+
*/
|
|
138
|
+
SheetDataValidationStamper.prototype.stampRow = function (rowIndex, values) {
|
|
139
|
+
var e_5, _a;
|
|
140
|
+
var _this = this;
|
|
141
|
+
if (!this.hasRules)
|
|
142
|
+
return;
|
|
143
|
+
this.emittedRows.add(rowIndex);
|
|
144
|
+
// Existing cells first — bounded by real data, so range size is irrelevant.
|
|
145
|
+
values.forEach(function (cell, columnIndex) {
|
|
146
|
+
if (!cell || cell.dataValidation != null)
|
|
147
|
+
return;
|
|
148
|
+
var id = _this.ruleIdAt(rowIndex, columnIndex);
|
|
149
|
+
if (id !== undefined) {
|
|
150
|
+
values[columnIndex] = __assign(__assign({}, cell), { dataValidation: id });
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
try {
|
|
154
|
+
// Then materialize covered holes (first rule wins via the null check).
|
|
155
|
+
for (var _b = __values(this.rules), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
156
|
+
var rule = _c.value;
|
|
157
|
+
for (var i = 0; i < rule.ranges.length; i++) {
|
|
158
|
+
if (!rule.materialize[i])
|
|
159
|
+
continue;
|
|
160
|
+
var range = rule.ranges[i];
|
|
161
|
+
if (rowIndex < range.startRowIndex || rowIndex > range.endRowIndex) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex && this.materializeBudget > 0; columnIndex++) {
|
|
165
|
+
if (values[columnIndex] != null)
|
|
166
|
+
continue;
|
|
167
|
+
values[columnIndex] = { dataValidation: rule.id };
|
|
168
|
+
this.materializeBudget--;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
174
|
+
finally {
|
|
175
|
+
try {
|
|
176
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
177
|
+
}
|
|
178
|
+
finally { if (e_5) throw e_5.error; }
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Rows covered by small ranges that never streamed out of the file at all
|
|
183
|
+
* (fully blank template rows). Returns sparse phantom rows to append to the
|
|
184
|
+
* sheet's final chunk, in ascending row order.
|
|
185
|
+
*/
|
|
186
|
+
SheetDataValidationStamper.prototype.trailingRows = function () {
|
|
187
|
+
var e_6, _a;
|
|
188
|
+
if (!this.hasRules)
|
|
189
|
+
return [];
|
|
190
|
+
var rowsByIndex = new Map();
|
|
191
|
+
try {
|
|
192
|
+
for (var _b = __values(this.rules), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
193
|
+
var rule = _c.value;
|
|
194
|
+
for (var i = 0; i < rule.ranges.length; i++) {
|
|
195
|
+
if (!rule.materialize[i])
|
|
196
|
+
continue;
|
|
197
|
+
var range = rule.ranges[i];
|
|
198
|
+
for (var rowIndex = range.startRowIndex; rowIndex <= range.endRowIndex; rowIndex++) {
|
|
199
|
+
if (this.emittedRows.has(rowIndex))
|
|
200
|
+
continue;
|
|
201
|
+
var values = rowsByIndex.get(rowIndex);
|
|
202
|
+
if (!values) {
|
|
203
|
+
values = [];
|
|
204
|
+
rowsByIndex.set(rowIndex, values);
|
|
205
|
+
}
|
|
206
|
+
for (var columnIndex = range.startColumnIndex; columnIndex <= range.endColumnIndex && this.materializeBudget > 0; columnIndex++) {
|
|
207
|
+
if (values[columnIndex] != null)
|
|
208
|
+
continue;
|
|
209
|
+
values[columnIndex] = { dataValidation: rule.id };
|
|
210
|
+
this.materializeBudget--;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
217
|
+
finally {
|
|
218
|
+
try {
|
|
219
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
220
|
+
}
|
|
221
|
+
finally { if (e_6) throw e_6.error; }
|
|
222
|
+
}
|
|
223
|
+
return __spreadArray([], __read(rowsByIndex.entries()), false).filter(function (_a) {
|
|
224
|
+
var _b = __read(_a, 2), values = _b[1];
|
|
225
|
+
return values.length > 0;
|
|
226
|
+
})
|
|
227
|
+
.sort(function (_a, _b) {
|
|
228
|
+
var _c = __read(_a, 1), a = _c[0];
|
|
229
|
+
var _d = __read(_b, 1), b = _d[0];
|
|
230
|
+
return a - b;
|
|
231
|
+
})
|
|
232
|
+
.map(function (_a) {
|
|
233
|
+
var _b = __read(_a, 2), rowIndex = _b[0], values = _b[1];
|
|
234
|
+
return ({ rowIndex: rowIndex, values: values });
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
return SheetDataValidationStamper;
|
|
238
|
+
}());
|
|
239
|
+
export { SheetDataValidationStamper };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { GridRange } from "@rowsncolumns/common-types";
|
|
2
|
+
import type { FilterSpec } from "@rowsncolumns/spreadsheet";
|
|
3
|
+
export declare const getRangeFromAddressRef: (ref: string) => GridRange | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Convert an xlsx column width (in units of max-digit-width of the
|
|
6
|
+
* default workbook font, Calibri 11 → MDW=7px) to pixels.
|
|
7
|
+
*
|
|
8
|
+
* Excel's effective rendered pixel count includes a 5-pixel padding
|
|
9
|
+
* baked into the column box: `pixels = floor(width × MDW + padding)`.
|
|
10
|
+
* The default width "8.43" renders as 64 px (8.43 × 7 + 5 ≈ 64.01),
|
|
11
|
+
* matching Excel exactly. The "pure" ECMA-376 §18.3.1.13 formula omits
|
|
12
|
+
* the 5px padding; we keep the +5 form so our pixel output matches
|
|
13
|
+
* Excel's rendered widths and round-trips with our exporter.
|
|
14
|
+
*/
|
|
15
|
+
export declare function excelColumnWidthToPixels(width: number): number;
|
|
16
|
+
export declare function findMax(arr: number[]): number;
|
|
17
|
+
export declare function createFilterSpecsFromAutoFilter(autoFilter: any,
|
|
18
|
+
/**
|
|
19
|
+
* Optional dxf resolver — called with (dxfId, cellColor) to return a
|
|
20
|
+
* hex color string. When omitted, `<colorFilter>` entries are skipped
|
|
21
|
+
* (caller doesn't have access to workbook dxfs).
|
|
22
|
+
*/
|
|
23
|
+
resolveDxfColor?: (dxfId: number, cellColor: boolean) => string | undefined): FilterSpec[];
|
|
24
|
+
/**
|
|
25
|
+
* Reads an Excel file and extracts sheet metadata
|
|
26
|
+
*/
|
|
27
|
+
export declare function readExcelFile(file: File | ArrayBuffer): Promise<ArrayBuffer>;
|
|
28
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../excel-parser/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAY,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAStE,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,SAAS,GAAG,SAIhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,UAIrD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAMpC;AAuBD,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,GAAG;AACf;;;;GAIG;AACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,gBA8F5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,wBAkB3D"}
|