@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,132 @@
|
|
|
1
|
+
import { SheetCell } from "@rowsncolumns/spreadsheet-state";
|
|
2
|
+
import { isNil, uuid } from "@rowsncolumns/utils";
|
|
3
|
+
import * as XLSX from "xlsx";
|
|
4
|
+
/**
|
|
5
|
+
* Sniff a byte-order mark at the start of a CSV byte stream.
|
|
6
|
+
* Returns the encoding the BOM declares, or `undefined` when no BOM
|
|
7
|
+
* is present (in which case bytes are treated as UTF-8).
|
|
8
|
+
*/
|
|
9
|
+
export const detectCSVBomEncoding = (bytes) => {
|
|
10
|
+
if (bytes.length >= 2) {
|
|
11
|
+
if (bytes[0] === 0xff && bytes[1] === 0xfe)
|
|
12
|
+
return "utf-16le";
|
|
13
|
+
if (bytes[0] === 0xfe && bytes[1] === 0xff)
|
|
14
|
+
return "utf-16be";
|
|
15
|
+
}
|
|
16
|
+
if (bytes.length >= 3 &&
|
|
17
|
+
bytes[0] === 0xef &&
|
|
18
|
+
bytes[1] === 0xbb &&
|
|
19
|
+
bytes[2] === 0xbf) {
|
|
20
|
+
return "utf-8";
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Parse csv string into a 2d array
|
|
26
|
+
* https://stackoverflow.com/a/14991797
|
|
27
|
+
* @param str
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export const parseCSV = async (input) => {
|
|
31
|
+
let workbook;
|
|
32
|
+
// `dense: true` stores cells in a 2-D array rather than one object keyed by
|
|
33
|
+
// A1 address. Non-dense mode crashes on large CSVs once the cell count
|
|
34
|
+
// exceeds V8's per-object enumerable-property cap (2^23 = 8,388,608):
|
|
35
|
+
// `RangeError: Too many properties to enumerate`.
|
|
36
|
+
if (typeof input === "string") {
|
|
37
|
+
// A string that was produced by reading a BOM'd UTF-8 file as text can
|
|
38
|
+
// still start with U+FEFF — strip it so it doesn't land in cell A1.
|
|
39
|
+
const text = input.charCodeAt(0) === 0xfeff ? input.slice(1) : input;
|
|
40
|
+
workbook = XLSX.read(text, { type: "string", raw: true, dense: true });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Handle File input
|
|
44
|
+
const arrayBuffer = await input.arrayBuffer();
|
|
45
|
+
const bomEncoding = detectCSVBomEncoding(new Uint8Array(arrayBuffer));
|
|
46
|
+
if (bomEncoding) {
|
|
47
|
+
// TextDecoder strips the BOM itself (default `ignoreBOM: false`).
|
|
48
|
+
const text = new TextDecoder(bomEncoding).decode(arrayBuffer);
|
|
49
|
+
workbook = XLSX.read(text, { type: "string", raw: true, dense: true });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
workbook = XLSX.read(arrayBuffer, {
|
|
53
|
+
type: "array",
|
|
54
|
+
raw: true,
|
|
55
|
+
// UTF-8 encoding
|
|
56
|
+
codepage: 65001,
|
|
57
|
+
dense: true,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
|
|
62
|
+
const rows = XLSX.utils.sheet_to_json(worksheet, {
|
|
63
|
+
header: 1,
|
|
64
|
+
});
|
|
65
|
+
return rows;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Create sheet data from csv string
|
|
69
|
+
* @param csv
|
|
70
|
+
* @param delimiter
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
export const createRowDataFromCSVString = async (csv, preserveFormatting = true, locale) => {
|
|
74
|
+
const rows = (await parseCSV(csv)) ?? [];
|
|
75
|
+
const rowData = [];
|
|
76
|
+
const sheetCell = new SheetCell();
|
|
77
|
+
sheetCell.setLocale(locale);
|
|
78
|
+
for (let i = 0; i < rows.length; i++) {
|
|
79
|
+
const rowIndex = i;
|
|
80
|
+
if (!(rowIndex in rowData)) {
|
|
81
|
+
rowData[rowIndex] = { values: [] };
|
|
82
|
+
}
|
|
83
|
+
const rowValue = rows[i];
|
|
84
|
+
if (isNil(rowValue)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
for (let j = 0; j < rows[i].length; j++) {
|
|
88
|
+
const columnIndex = j;
|
|
89
|
+
const text = rows[i][j];
|
|
90
|
+
sheetCell.assign(uuid(), { rowIndex, columnIndex });
|
|
91
|
+
sheetCell.setUserEnteredValue(text);
|
|
92
|
+
// Delete
|
|
93
|
+
if (!preserveFormatting) {
|
|
94
|
+
sheetCell.clearFormatting();
|
|
95
|
+
}
|
|
96
|
+
rowData[rowIndex].values[columnIndex] = sheetCell.getCellData();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return rowData;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Parse CSV file object
|
|
103
|
+
* @param file
|
|
104
|
+
* @returns
|
|
105
|
+
*/
|
|
106
|
+
export const createRowDataFromCSVFile = async (file, preserveFormatting = true, locale) => createRowDataFromCSVString(file, preserveFormatting, locale);
|
|
107
|
+
/**
|
|
108
|
+
* Create sheet data from csv string
|
|
109
|
+
* @param csv
|
|
110
|
+
* @param delimiter
|
|
111
|
+
* @returns
|
|
112
|
+
*/
|
|
113
|
+
export const createCellDataArrayFromCSVString = async (csv, locale) => {
|
|
114
|
+
const rows = (await parseCSV(csv)) ?? [];
|
|
115
|
+
const rowValues = [];
|
|
116
|
+
const sheetCell = new SheetCell();
|
|
117
|
+
sheetCell.setLocale(locale);
|
|
118
|
+
for (let i = 0; i < rows.length; i++) {
|
|
119
|
+
const cells = [];
|
|
120
|
+
const rowValue = rows[i];
|
|
121
|
+
if (isNil(rowValue)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
for (let j = 0; j < rows[i].length; j++) {
|
|
125
|
+
const text = rows[i][j];
|
|
126
|
+
sheetCell.setUserEnteredValue(text);
|
|
127
|
+
cells.push(sheetCell.getCellData());
|
|
128
|
+
}
|
|
129
|
+
rowValues.push(cells);
|
|
130
|
+
}
|
|
131
|
+
return rowValues;
|
|
132
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CellData, CellFormat } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
export type SharedStringState = {
|
|
3
|
+
/** Content-hash id → value. Insertion order tracks emission order. */
|
|
4
|
+
byId: Map<string, string>;
|
|
5
|
+
/** Entries added since the last chunk drain. */
|
|
6
|
+
pending: Array<[string, string]>;
|
|
7
|
+
};
|
|
8
|
+
export declare const createSharedStringState: () => SharedStringState;
|
|
9
|
+
export declare const drainSharedStringPending: (sharedStrings: SharedStringState) => Array<[string, string]> | undefined;
|
|
10
|
+
export declare const buildCellData: (rawValue: string | number | boolean, locale: string | undefined, preserveFormatting: boolean, enableSharedStrings: boolean, sharedStrings: SharedStringState) => CellData | {
|
|
11
|
+
ss: string;
|
|
12
|
+
} | null;
|
|
13
|
+
export declare const applyCellXfsRegistry: (cellData: CellData, cellXfs: Map<string, CellFormat>) => CellData;
|
|
14
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../csv-parser/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EAEX,MAAM,2BAA2B,CAAC;AAKnC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sEAAsE;IACtE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,gDAAgD;IAChD,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,iBAGzC,CAAC;AAEH,eAAO,MAAM,wBAAwB,GACnC,eAAe,iBAAiB,KAC/B,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAK5B,CAAC;AAgFF,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,GAAG,MAAM,GAAG,OAAO,EACnC,QAAQ,MAAM,GAAG,SAAS,EAC1B,oBAAoB,OAAO,EAC3B,qBAAqB,OAAO,EAC5B,eAAe,iBAAiB,KAC/B,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IA2E9B,CAAC;AAKF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,QAAQ,EAClB,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,aAiBjC,CAAC"}
|
|
Binary file
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { CellData } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import type { RowData, CellXfs } from "@rowsncolumns/common-types";
|
|
3
|
+
export declare enum CsvRequestType {
|
|
4
|
+
PARSE_CSV = "PARSE_CSV",
|
|
5
|
+
ACK_ROW_DATA = "ACK_ROW_DATA"
|
|
6
|
+
}
|
|
7
|
+
export declare enum CsvResponseType {
|
|
8
|
+
PARSE_CSV_SUCCESS = "PARSE_CSV_SUCCESS",
|
|
9
|
+
ROW_DATA_CHUNK = "ROW_DATA_CHUNK",
|
|
10
|
+
CELL_XFS = "CELL_XFS",
|
|
11
|
+
GET_SHARED_STRINGS_SUCCESS = "GET_SHARED_STRINGS_SUCCESS",
|
|
12
|
+
PARSE_CSV_COMPLETE = "PARSE_CSV_COMPLETE",
|
|
13
|
+
ERROR = "ERROR"
|
|
14
|
+
}
|
|
15
|
+
export type CsvWorkerRequest = {
|
|
16
|
+
requestType: CsvRequestType.PARSE_CSV;
|
|
17
|
+
file: File | ArrayBuffer;
|
|
18
|
+
pageSize: number;
|
|
19
|
+
startRowIndex: number;
|
|
20
|
+
startColumnIndex: number;
|
|
21
|
+
preserveFormatting?: boolean;
|
|
22
|
+
locale?: string;
|
|
23
|
+
enableSharedStrings?: boolean;
|
|
24
|
+
enableCellXfsRegistry?: boolean;
|
|
25
|
+
enableBackpressure?: boolean;
|
|
26
|
+
} | {
|
|
27
|
+
requestType: CsvRequestType.ACK_ROW_DATA;
|
|
28
|
+
chunkIndex: number;
|
|
29
|
+
};
|
|
30
|
+
export type CsvWorkerResponse = {
|
|
31
|
+
responseType: CsvResponseType.PARSE_CSV_SUCCESS;
|
|
32
|
+
totalRows: number;
|
|
33
|
+
totalColumns: number;
|
|
34
|
+
} | {
|
|
35
|
+
responseType: CsvResponseType.ROW_DATA_CHUNK;
|
|
36
|
+
chunkIndex: number;
|
|
37
|
+
rows: RowData<CellData | null>[];
|
|
38
|
+
rowIndices: number[];
|
|
39
|
+
totalRows: number;
|
|
40
|
+
totalColumns: number;
|
|
41
|
+
/**
|
|
42
|
+
* New shape: [id, value][] where id is a content-hash string and cell.ss
|
|
43
|
+
* already references it. Legacy shape (string[] + sharedStringsStartIndex)
|
|
44
|
+
* is still accepted by the host for older worker builds.
|
|
45
|
+
*/
|
|
46
|
+
sharedStringsChunk?: Array<[string, string]> | string[];
|
|
47
|
+
/** @deprecated Present only with legacy `string[]` chunk shape. */
|
|
48
|
+
sharedStringsStartIndex?: number;
|
|
49
|
+
cellXfsChunk?: Array<[string, any]>;
|
|
50
|
+
} | {
|
|
51
|
+
responseType: CsvResponseType.CELL_XFS;
|
|
52
|
+
cellXfs: CellXfs;
|
|
53
|
+
} | {
|
|
54
|
+
responseType: CsvResponseType.GET_SHARED_STRINGS_SUCCESS;
|
|
55
|
+
/**
|
|
56
|
+
* New shape: [id, value][]. Legacy `string[]` is still accepted by the
|
|
57
|
+
* host so older worker builds keep working.
|
|
58
|
+
*/
|
|
59
|
+
sharedStrings: Array<[string, string]> | string[];
|
|
60
|
+
} | {
|
|
61
|
+
responseType: CsvResponseType.PARSE_CSV_COMPLETE;
|
|
62
|
+
} | {
|
|
63
|
+
responseType: CsvResponseType.ERROR;
|
|
64
|
+
error?: string;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../csv-parser/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAEnE,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B;AAED,oBAAY,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,0BAA0B,+BAA+B;IACzD,kBAAkB,uBAAuB;IACzC,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,WAAW,EAAE,cAAc,CAAC,SAAS,CAAC;IACtC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACD;IACE,WAAW,EAAE,cAAc,CAAC,YAAY,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GACzB;IACE,YAAY,EAAE,eAAe,CAAC,iBAAiB,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;IACjC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;IACxD,mEAAmE;IACnE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CACrC,GACD;IACE,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB,GACD;IACE,YAAY,EAAE,eAAe,CAAC,0BAA0B,CAAC;IACzD;;;OAGG;IACH,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;CACnD,GACD;IACE,YAAY,EAAE,eAAe,CAAC,kBAAkB,CAAC;CAClD,GACD;IACE,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export var CsvRequestType;
|
|
2
|
+
(function (CsvRequestType) {
|
|
3
|
+
CsvRequestType["PARSE_CSV"] = "PARSE_CSV";
|
|
4
|
+
CsvRequestType["ACK_ROW_DATA"] = "ACK_ROW_DATA";
|
|
5
|
+
})(CsvRequestType || (CsvRequestType = {}));
|
|
6
|
+
export var CsvResponseType;
|
|
7
|
+
(function (CsvResponseType) {
|
|
8
|
+
CsvResponseType["PARSE_CSV_SUCCESS"] = "PARSE_CSV_SUCCESS";
|
|
9
|
+
CsvResponseType["ROW_DATA_CHUNK"] = "ROW_DATA_CHUNK";
|
|
10
|
+
CsvResponseType["CELL_XFS"] = "CELL_XFS";
|
|
11
|
+
CsvResponseType["GET_SHARED_STRINGS_SUCCESS"] = "GET_SHARED_STRINGS_SUCCESS";
|
|
12
|
+
CsvResponseType["PARSE_CSV_COMPLETE"] = "PARSE_CSV_COMPLETE";
|
|
13
|
+
CsvResponseType["ERROR"] = "ERROR";
|
|
14
|
+
})(CsvResponseType || (CsvResponseType = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../csv-parser/worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import * as XLSX from "xlsx";
|
|
2
|
+
import { readExcelFile } from "../excel-parser/helpers";
|
|
3
|
+
import { delay } from "../excel-parser/utils";
|
|
4
|
+
import { applyCellXfsRegistry, buildCellData, createSharedStringState, drainSharedStringPending, } from "./helpers";
|
|
5
|
+
import { CsvRequestType, CsvResponseType } from "./types";
|
|
6
|
+
const queuedAcks = [];
|
|
7
|
+
let pendingAck = null;
|
|
8
|
+
const resolveRowAck = (chunkIndex) => {
|
|
9
|
+
if (pendingAck && pendingAck.chunkIndex === chunkIndex) {
|
|
10
|
+
const { resolve } = pendingAck;
|
|
11
|
+
pendingAck = null;
|
|
12
|
+
resolve();
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
queuedAcks.push(chunkIndex);
|
|
16
|
+
};
|
|
17
|
+
const waitForRowAck = async (chunkIndex) => {
|
|
18
|
+
const queuedIndex = queuedAcks.findIndex((ack) => ack === chunkIndex);
|
|
19
|
+
if (queuedIndex >= 0) {
|
|
20
|
+
queuedAcks.splice(queuedIndex, 1);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
await new Promise((resolve) => {
|
|
24
|
+
pendingAck = { chunkIndex, resolve };
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
self.onmessage = async (e) => {
|
|
28
|
+
const { requestType } = e.data;
|
|
29
|
+
try {
|
|
30
|
+
if (requestType === CsvRequestType.ACK_ROW_DATA) {
|
|
31
|
+
resolveRowAck(e.data.chunkIndex);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (requestType !== CsvRequestType.PARSE_CSV) {
|
|
35
|
+
throw new Error(`Unknown action: ${requestType}`);
|
|
36
|
+
}
|
|
37
|
+
const buffer = await readExcelFile(e.data.file);
|
|
38
|
+
const workbook = XLSX.read(buffer, {
|
|
39
|
+
type: "array",
|
|
40
|
+
raw: true,
|
|
41
|
+
codepage: 65001,
|
|
42
|
+
// Dense mode stores cells in a 2-D array instead of one object keyed by
|
|
43
|
+
// A1 address. Non-dense mode crashes on large CSVs once the cell count
|
|
44
|
+
// exceeds V8's per-object enumerable-property cap (2^23 = 8,388,608):
|
|
45
|
+
// `RangeError: Too many properties to enumerate`.
|
|
46
|
+
dense: true,
|
|
47
|
+
});
|
|
48
|
+
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
|
|
49
|
+
const rows = XLSX.utils.sheet_to_json(worksheet, {
|
|
50
|
+
header: 1,
|
|
51
|
+
});
|
|
52
|
+
const totalRows = rows.length;
|
|
53
|
+
let totalColumns = 0;
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
totalColumns = Math.max(totalColumns, row?.length ?? 0);
|
|
56
|
+
}
|
|
57
|
+
self.postMessage({
|
|
58
|
+
responseType: CsvResponseType.PARSE_CSV_SUCCESS,
|
|
59
|
+
totalRows,
|
|
60
|
+
totalColumns,
|
|
61
|
+
});
|
|
62
|
+
const pageSize = Math.max(1, e.data.pageSize);
|
|
63
|
+
const startRowIndex = e.data.startRowIndex;
|
|
64
|
+
const startColumnIndex = e.data.startColumnIndex;
|
|
65
|
+
const preserveFormatting = e.data.preserveFormatting ?? true;
|
|
66
|
+
const enableSharedStrings = e.data.enableSharedStrings ?? false;
|
|
67
|
+
const enableCellXfsRegistry = e.data.enableCellXfsRegistry ?? false;
|
|
68
|
+
const enableBackpressure = e.data.enableBackpressure ?? false;
|
|
69
|
+
const locale = e.data.locale;
|
|
70
|
+
const sharedStrings = createSharedStringState();
|
|
71
|
+
const cellXfs = new Map();
|
|
72
|
+
let lastCellXfsSize = 0;
|
|
73
|
+
let chunkIndex = 0;
|
|
74
|
+
for (let offset = 0; offset < rows.length; offset += pageSize) {
|
|
75
|
+
const rowData = [];
|
|
76
|
+
const rowIndices = [];
|
|
77
|
+
const chunk = rows.slice(offset, offset + pageSize);
|
|
78
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
79
|
+
const rowIndex = startRowIndex + offset + i;
|
|
80
|
+
const rowValue = chunk[i];
|
|
81
|
+
const rowEntry = { values: [] };
|
|
82
|
+
if (rowValue) {
|
|
83
|
+
for (let j = 0; j < rowValue.length; j++) {
|
|
84
|
+
const columnIndex = startColumnIndex + j;
|
|
85
|
+
const cellValue = rowValue[j];
|
|
86
|
+
if (cellValue === undefined ||
|
|
87
|
+
cellValue === null ||
|
|
88
|
+
cellValue === "") {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const cellData = buildCellData(cellValue, locale, preserveFormatting, enableSharedStrings, sharedStrings);
|
|
92
|
+
if (!cellData) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
let nextCellData = cellData;
|
|
96
|
+
if (enableCellXfsRegistry &&
|
|
97
|
+
nextCellData &&
|
|
98
|
+
(nextCellData.ef || nextCellData.uf)) {
|
|
99
|
+
nextCellData = applyCellXfsRegistry(nextCellData, cellXfs);
|
|
100
|
+
}
|
|
101
|
+
rowEntry.values[columnIndex] = nextCellData;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
rowData.push(rowEntry);
|
|
105
|
+
rowIndices.push(rowIndex);
|
|
106
|
+
}
|
|
107
|
+
const sharedStringsChunk = enableSharedStrings
|
|
108
|
+
? drainSharedStringPending(sharedStrings)
|
|
109
|
+
: undefined;
|
|
110
|
+
let cellXfsChunk;
|
|
111
|
+
if (enableCellXfsRegistry && cellXfs.size > lastCellXfsSize) {
|
|
112
|
+
cellXfsChunk = Array.from(cellXfs.entries()).slice(lastCellXfsSize);
|
|
113
|
+
lastCellXfsSize = cellXfs.size;
|
|
114
|
+
}
|
|
115
|
+
self.postMessage({
|
|
116
|
+
responseType: CsvResponseType.ROW_DATA_CHUNK,
|
|
117
|
+
chunkIndex,
|
|
118
|
+
rows: rowData,
|
|
119
|
+
rowIndices,
|
|
120
|
+
totalRows,
|
|
121
|
+
totalColumns,
|
|
122
|
+
sharedStringsChunk,
|
|
123
|
+
cellXfsChunk,
|
|
124
|
+
});
|
|
125
|
+
if (enableBackpressure) {
|
|
126
|
+
await waitForRowAck(chunkIndex);
|
|
127
|
+
}
|
|
128
|
+
chunkIndex += 1;
|
|
129
|
+
await delay();
|
|
130
|
+
}
|
|
131
|
+
if (enableSharedStrings) {
|
|
132
|
+
self.postMessage({
|
|
133
|
+
responseType: CsvResponseType.GET_SHARED_STRINGS_SUCCESS,
|
|
134
|
+
sharedStrings: Array.from(sharedStrings.byId),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (enableCellXfsRegistry && cellXfs.size) {
|
|
138
|
+
self.postMessage({
|
|
139
|
+
responseType: CsvResponseType.CELL_XFS,
|
|
140
|
+
cellXfs,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
self.postMessage({
|
|
144
|
+
responseType: CsvResponseType.PARSE_CSV_COMPLETE,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.trace(error);
|
|
149
|
+
self.postMessage({
|
|
150
|
+
responseType: CsvResponseType.ERROR,
|
|
151
|
+
error: error instanceof Error ? error.message : String(error),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type CellData, type Sheet } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import type { ExportExcelProps } from "./exporter/xlsx/xlsx-export";
|
|
3
|
+
import { Citation } from "@rowsncolumns/common-types";
|
|
4
|
+
/**
|
|
5
|
+
* Download excel file
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare const exportToExcel: <S extends Sheet, T extends CellData, C extends Citation>({ filename, ...rest }: ExportExcelProps<S, T, C> & {
|
|
9
|
+
filename: string;
|
|
10
|
+
}) => Promise<string | Blob | undefined>;
|
|
11
|
+
//# sourceMappingURL=excel-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-export.d.ts","sourceRoot":"","sources":["../../excel-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,EAClB,uBAGC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,uCAMlD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createExcelFile as createXlsxExport } from "./exporter/xlsx/xlsx-export";
|
|
2
|
+
import { createDownloadableFile, toArrayBuffer } from "./helpers";
|
|
3
|
+
/**
|
|
4
|
+
* Download excel file
|
|
5
|
+
* @returns
|
|
6
|
+
*/
|
|
7
|
+
export const exportToExcel = async ({ filename, ...rest }) => {
|
|
8
|
+
const buffer = await createXlsxExport(rest);
|
|
9
|
+
const blob = new Blob([toArrayBuffer(buffer)], {
|
|
10
|
+
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
11
|
+
});
|
|
12
|
+
return createDownloadableFile(`${filename}.xlsx`, blob);
|
|
13
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { WorkerResponse } from "./excel-parser/types";
|
|
2
|
+
import { ResponseType } from "./excel-parser/types";
|
|
3
|
+
type OpenCompleteMessage = Extract<WorkerResponse, {
|
|
4
|
+
responseType: ResponseType.OPEN_WORKBOOK_COMPLETE;
|
|
5
|
+
}>;
|
|
6
|
+
type SheetChunkMessage = Extract<WorkerResponse, {
|
|
7
|
+
responseType: ResponseType.SHEET_CHUNK;
|
|
8
|
+
}>;
|
|
9
|
+
type SheetCompleteMessage = Extract<WorkerResponse, {
|
|
10
|
+
responseType: ResponseType.SHEET_COMPLETE;
|
|
11
|
+
}>;
|
|
12
|
+
export type ExcelSessionOpenSuccess = {
|
|
13
|
+
status: "open";
|
|
14
|
+
} & Omit<OpenCompleteMessage, "responseType" | "generation">;
|
|
15
|
+
/**
|
|
16
|
+
* The workbook is encrypted. Prompt the user, then call
|
|
17
|
+
* `session.providePassword(password)` — it resolves with the same
|
|
18
|
+
* `ExcelSessionOpenResult` shape (another `password-required` on a wrong
|
|
19
|
+
* password), mirroring the eager flow's PASSWORD_REQUIRED loop.
|
|
20
|
+
*/
|
|
21
|
+
export type ExcelSessionPasswordRequired = {
|
|
22
|
+
status: "password-required";
|
|
23
|
+
message?: string;
|
|
24
|
+
};
|
|
25
|
+
export type ExcelSessionOpenResult = ExcelSessionOpenSuccess | ExcelSessionPasswordRequired;
|
|
26
|
+
export type ExcelSessionSheetChunk = Omit<SheetChunkMessage, "responseType" | "generation" | "requestId">;
|
|
27
|
+
export type ExcelSessionSheetComplete = Omit<SheetCompleteMessage, "responseType" | "generation" | "requestId">;
|
|
28
|
+
export type ExcelSessionLoadSheetOptions = {
|
|
29
|
+
chunkSize?: number;
|
|
30
|
+
enableCellXfsRegistry?: boolean;
|
|
31
|
+
enableSharedStrings?: boolean;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
};
|
|
34
|
+
export type ExcelImportSession = {
|
|
35
|
+
open(): Promise<ExcelSessionOpenResult>;
|
|
36
|
+
providePassword(password: string): Promise<ExcelSessionOpenResult>;
|
|
37
|
+
loadSheet(sheetId: number, options?: ExcelSessionLoadSheetOptions): AsyncGenerator<ExcelSessionSheetChunk, ExcelSessionSheetComplete, void>;
|
|
38
|
+
dispose(): void;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Typed client for the session import worker protocol (issue #336). Opens
|
|
42
|
+
* a workbook once, keeps it resident worker-side, and streams individual
|
|
43
|
+
* sheets on demand with automatic requestId allocation, chunk
|
|
44
|
+
* acknowledgement backpressure, cancellation, and generation management.
|
|
45
|
+
*/
|
|
46
|
+
export declare const createExcelImportSession: (file: File | ArrayBuffer, options?: {
|
|
47
|
+
minRowCount?: number;
|
|
48
|
+
minColumnCount?: number;
|
|
49
|
+
}) => ExcelImportSession;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=excel-import-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-import-session.d.ts","sourceRoot":"","sources":["../../excel-import-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAe,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,KAAK,mBAAmB,GAAG,OAAO,CAChC,cAAc,EACd;IAAE,YAAY,EAAE,YAAY,CAAC,sBAAsB,CAAA;CAAE,CACtD,CAAC;AACF,KAAK,iBAAiB,GAAG,OAAO,CAC9B,cAAc,EACd;IAAE,YAAY,EAAE,YAAY,CAAC,WAAW,CAAA;CAAE,CAC3C,CAAC;AACF,KAAK,oBAAoB,GAAG,OAAO,CACjC,cAAc,EACd;IAAE,YAAY,EAAE,YAAY,CAAC,cAAc,CAAA;CAAE,CAC9C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,iBAAiB,EACjB,cAAc,GAAG,YAAY,GAAG,WAAW,CAC5C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,oBAAoB,EACpB,cAAc,GAAG,YAAY,GAAG,WAAW,CAC5C,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnE,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,4BAA4B,GACrC,cAAc,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;IAC3E,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AA2BF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,IAAI,GAAG,WAAW,EACxB,UAAU;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1D,kBAgRF,CAAC"}
|