@cj-tech-master/excelts 5.0.6 → 5.1.0
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/dist/browser/index.browser.d.ts +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/modules/archive/unzip/stream.base.js +19 -19
- package/dist/browser/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/browser/modules/csv/csv-core.js +6 -3
- package/dist/browser/modules/csv/csv.browser.js +2 -2
- package/dist/browser/modules/csv/csv.js +1 -1
- package/dist/browser/modules/excel/anchor.js +4 -4
- package/dist/browser/modules/excel/cell.js +5 -5
- package/dist/browser/modules/excel/column.js +4 -4
- package/dist/browser/modules/excel/defined-names.js +1 -1
- package/dist/browser/modules/excel/form-control.js +1 -1
- package/dist/browser/modules/excel/pivot-table.d.ts +168 -17
- package/dist/browser/modules/excel/pivot-table.js +278 -70
- package/dist/browser/modules/excel/row.js +4 -4
- package/dist/browser/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/browser/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/browser/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/browser/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/browser/modules/excel/table.js +2 -2
- package/dist/browser/modules/excel/types.d.ts +0 -4
- package/dist/browser/modules/excel/utils/cell-format.js +3 -3
- package/dist/browser/modules/excel/utils/shared-formula.js +1 -1
- package/dist/browser/modules/excel/utils/stream-buf.js +2 -2
- package/dist/browser/modules/excel/utils/string-buf.js +1 -1
- package/dist/browser/modules/excel/workbook.d.ts +0 -2
- package/dist/browser/modules/excel/workbook.js +4 -5
- package/dist/browser/modules/excel/worksheet.js +9 -9
- package/dist/browser/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
- package/dist/browser/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/browser/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/browser/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/browser/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/browser/utils/env.d.ts +0 -5
- package/dist/browser/utils/env.js +0 -7
- package/dist/browser/utils/utils.base.d.ts +8 -13
- package/dist/browser/utils/utils.base.js +40 -47
- package/dist/browser/utils/utils.browser.d.ts +1 -1
- package/dist/browser/utils/utils.browser.js +1 -1
- package/dist/browser/utils/utils.d.ts +1 -1
- package/dist/browser/utils/utils.js +1 -1
- package/dist/cjs/modules/archive/unzip/stream.base.js +19 -19
- package/dist/cjs/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/cjs/modules/csv/csv-core.js +6 -3
- package/dist/cjs/modules/csv/csv.browser.js +2 -2
- package/dist/cjs/modules/csv/csv.js +1 -1
- package/dist/cjs/modules/excel/anchor.js +4 -4
- package/dist/cjs/modules/excel/cell.js +5 -5
- package/dist/cjs/modules/excel/column.js +4 -4
- package/dist/cjs/modules/excel/defined-names.js +1 -1
- package/dist/cjs/modules/excel/form-control.js +1 -1
- package/dist/cjs/modules/excel/pivot-table.js +280 -70
- package/dist/cjs/modules/excel/row.js +4 -4
- package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/cjs/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/cjs/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/cjs/modules/excel/table.js +2 -2
- package/dist/cjs/modules/excel/utils/cell-format.js +3 -3
- package/dist/cjs/modules/excel/utils/shared-formula.js +1 -1
- package/dist/cjs/modules/excel/utils/stream-buf.js +2 -2
- package/dist/cjs/modules/excel/utils/string-buf.js +1 -1
- package/dist/cjs/modules/excel/workbook.js +4 -5
- package/dist/cjs/modules/excel/worksheet.js +9 -9
- package/dist/cjs/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +133 -51
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field.js +245 -71
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +212 -36
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +142 -40
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +153 -0
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/cjs/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/cjs/utils/env.js +0 -8
- package/dist/cjs/utils/utils.base.js +41 -54
- package/dist/cjs/utils/utils.browser.js +2 -7
- package/dist/cjs/utils/utils.js +2 -7
- package/dist/esm/modules/archive/unzip/stream.base.js +19 -19
- package/dist/esm/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/esm/modules/csv/csv-core.js +6 -3
- package/dist/esm/modules/csv/csv.browser.js +2 -2
- package/dist/esm/modules/csv/csv.js +1 -1
- package/dist/esm/modules/excel/anchor.js +4 -4
- package/dist/esm/modules/excel/cell.js +5 -5
- package/dist/esm/modules/excel/column.js +4 -4
- package/dist/esm/modules/excel/defined-names.js +1 -1
- package/dist/esm/modules/excel/form-control.js +1 -1
- package/dist/esm/modules/excel/pivot-table.js +278 -70
- package/dist/esm/modules/excel/row.js +4 -4
- package/dist/esm/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/esm/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/esm/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/esm/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/esm/modules/excel/table.js +2 -2
- package/dist/esm/modules/excel/utils/cell-format.js +3 -3
- package/dist/esm/modules/excel/utils/shared-formula.js +1 -1
- package/dist/esm/modules/excel/utils/stream-buf.js +2 -2
- package/dist/esm/modules/excel/utils/string-buf.js +1 -1
- package/dist/esm/modules/excel/workbook.js +4 -5
- package/dist/esm/modules/excel/worksheet.js +9 -9
- package/dist/esm/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
- package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/esm/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/esm/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/esm/utils/env.js +0 -7
- package/dist/esm/utils/utils.base.js +40 -47
- package/dist/esm/utils/utils.browser.js +1 -1
- package/dist/esm/utils/utils.js +1 -1
- package/dist/iife/excelts.iife.js +1553 -718
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +36 -105
- package/dist/types/index.browser.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/modules/excel/pivot-table.d.ts +168 -17
- package/dist/types/modules/excel/types.d.ts +0 -4
- package/dist/types/modules/excel/workbook.d.ts +0 -2
- package/dist/types/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
- package/dist/types/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
- package/dist/types/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
- package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
- package/dist/types/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
- package/dist/types/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
- package/dist/types/utils/env.d.ts +0 -5
- package/dist/types/utils/utils.base.d.ts +8 -13
- package/dist/types/utils/utils.browser.d.ts +1 -1
- package/dist/types/utils/utils.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2,8 +2,7 @@ import { BaseXform } from "@excel/xlsx/xform/base-xform";
|
|
|
2
2
|
interface FilterModel {
|
|
3
3
|
val: string;
|
|
4
4
|
}
|
|
5
|
-
declare class FilterXform extends BaseXform {
|
|
6
|
-
model: FilterModel;
|
|
5
|
+
declare class FilterXform extends BaseXform<FilterModel> {
|
|
7
6
|
constructor();
|
|
8
7
|
get tag(): string;
|
|
9
8
|
render(xmlStream: any, model: FilterModel): void;
|
|
@@ -6,8 +6,7 @@ interface TableColumnModel {
|
|
|
6
6
|
totalsRowFunction?: string;
|
|
7
7
|
dxfId?: string;
|
|
8
8
|
}
|
|
9
|
-
declare class TableColumnXform extends BaseXform {
|
|
10
|
-
model: TableColumnModel;
|
|
9
|
+
declare class TableColumnXform extends BaseXform<TableColumnModel> {
|
|
11
10
|
constructor();
|
|
12
11
|
get tag(): string;
|
|
13
12
|
prepare(model: TableColumnModel, options: {
|
|
@@ -6,8 +6,7 @@ interface TableStyleModel {
|
|
|
6
6
|
showRowStripes: boolean;
|
|
7
7
|
showColumnStripes: boolean;
|
|
8
8
|
}
|
|
9
|
-
declare class TableStyleInfoXform extends BaseXform {
|
|
10
|
-
model: TableStyleModel;
|
|
9
|
+
declare class TableStyleInfoXform extends BaseXform<TableStyleModel> {
|
|
11
10
|
constructor();
|
|
12
11
|
get tag(): string;
|
|
13
12
|
render(xmlStream: any, model: TableStyleModel): void;
|
|
@@ -12,12 +12,11 @@ interface TableModel {
|
|
|
12
12
|
autoFilterRef?: string;
|
|
13
13
|
style?: any;
|
|
14
14
|
}
|
|
15
|
-
declare class TableXform extends BaseXform {
|
|
15
|
+
declare class TableXform extends BaseXform<TableModel> {
|
|
16
16
|
map: {
|
|
17
17
|
[key: string]: any;
|
|
18
18
|
};
|
|
19
19
|
parser: any;
|
|
20
|
-
model: TableModel;
|
|
21
20
|
constructor();
|
|
22
21
|
prepare(model: TableModel, options: any): void;
|
|
23
22
|
get tag(): string;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - prepareModel: Prepare model for writing
|
|
9
9
|
* - loadFromFiles: Load from pre-extracted ZIP data
|
|
10
10
|
*/
|
|
11
|
+
import type { PivotTableSubtotal } from "@excel/pivot-table";
|
|
11
12
|
import { type IEventEmitter } from "@stream";
|
|
12
13
|
import type { Workbook } from "@excel/workbook";
|
|
13
14
|
import type { ZipTimestampMode } from "@archive/utils/timestamps";
|
|
@@ -195,7 +196,10 @@ declare class XLSX {
|
|
|
195
196
|
protected _buildDefinitionToCacheIdMap(model: any): Map<string, number>;
|
|
196
197
|
protected _determineMetric(dataFields: Array<{
|
|
197
198
|
subtotal?: string;
|
|
198
|
-
}>):
|
|
199
|
+
}>): PivotTableSubtotal;
|
|
200
|
+
protected _determineValueMetrics(dataFields: Array<{
|
|
201
|
+
subtotal?: string;
|
|
202
|
+
}>, defaultMetric: PivotTableSubtotal): PivotTableSubtotal[];
|
|
199
203
|
_processWorksheetEntry(stream: IParseStream, model: any, sheetNo: number, options: XlsxOptions | undefined, path: string): Promise<void>;
|
|
200
204
|
_processCommentEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
201
205
|
_processTableEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
@@ -216,7 +220,6 @@ declare class XLSX {
|
|
|
216
220
|
_processPivotTableEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
217
221
|
_processPivotTableRelsEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
218
222
|
_processPivotCacheDefinitionEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
219
|
-
_processPivotCacheDefinitionRelsEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
220
223
|
_processPivotCacheRecordsEntry(stream: IParseStream, model: any, name: string): Promise<void>;
|
|
221
224
|
loadFromFiles(zipData: Record<string, Uint8Array>, options?: any): Promise<any>;
|
|
222
225
|
/**
|
|
@@ -324,7 +324,6 @@ class XLSX {
|
|
|
324
324
|
pivotTables: {},
|
|
325
325
|
pivotTableRels: {},
|
|
326
326
|
pivotCacheDefinitions: {},
|
|
327
|
-
pivotCacheDefinitionRels: {},
|
|
328
327
|
pivotCacheRecords: {},
|
|
329
328
|
// Passthrough storage for unknown/unsupported files (charts, etc.)
|
|
330
329
|
passthrough: {}
|
|
@@ -548,7 +547,7 @@ class XLSX {
|
|
|
548
547
|
o[rel.Id] = rel;
|
|
549
548
|
return o;
|
|
550
549
|
}, {});
|
|
551
|
-
(drawing.anchors
|
|
550
|
+
(drawing.anchors ?? []).forEach((anchor) => {
|
|
552
551
|
const hyperlinks = anchor.picture && anchor.picture.hyperlinks;
|
|
553
552
|
if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {
|
|
554
553
|
hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;
|
|
@@ -608,13 +607,12 @@ class XLSX {
|
|
|
608
607
|
delete model.drawingRels;
|
|
609
608
|
delete model.vmlDrawings;
|
|
610
609
|
delete model.pivotTableRels;
|
|
611
|
-
delete model.pivotCacheDefinitionRels;
|
|
612
610
|
}
|
|
613
611
|
/**
|
|
614
612
|
* Reconcile pivot tables by linking them to worksheets and their cache data.
|
|
615
613
|
*/
|
|
616
614
|
_reconcilePivotTables(model) {
|
|
617
|
-
const rawPivotTables = model.pivotTables || {};
|
|
615
|
+
const rawPivotTables = (model.pivotTables || {});
|
|
618
616
|
if (typeof rawPivotTables !== "object" || Object.keys(rawPivotTables).length === 0) {
|
|
619
617
|
model.pivotTables = [];
|
|
620
618
|
model.pivotTablesIndexed = {};
|
|
@@ -635,29 +633,33 @@ class XLSX {
|
|
|
635
633
|
});
|
|
636
634
|
const loadedPivotTables = [];
|
|
637
635
|
const pivotTablesIndexed = {};
|
|
638
|
-
Object.entries(rawPivotTables).forEach(([pivotName,
|
|
639
|
-
const pt = pivotTable;
|
|
636
|
+
Object.entries(rawPivotTables).forEach(([pivotName, pt]) => {
|
|
640
637
|
const tableNumber = this._extractTableNumber(pivotName);
|
|
641
638
|
const cacheData = cacheMap.get(pt.cacheId);
|
|
639
|
+
const defaultMetric = this._determineMetric(pt.dataFields);
|
|
642
640
|
const completePivotTable = {
|
|
643
641
|
...pt,
|
|
644
642
|
tableNumber,
|
|
643
|
+
cacheId: String(pt.cacheId),
|
|
645
644
|
cacheDefinition: cacheData?.definition,
|
|
646
645
|
cacheRecords: cacheData?.records,
|
|
647
|
-
cacheFields: cacheData?.definition?.cacheFields
|
|
646
|
+
cacheFields: cacheData?.definition?.cacheFields ?? [],
|
|
648
647
|
rows: pt.rowFields.filter(f => f >= 0),
|
|
649
648
|
columns: pt.colFields.filter(f => f >= 0 && f !== -2),
|
|
650
649
|
values: pt.dataFields.map(df => df.fld),
|
|
651
|
-
|
|
652
|
-
|
|
650
|
+
pages: pt.pageFields.map(pf => pf.fld),
|
|
651
|
+
metric: defaultMetric,
|
|
652
|
+
valueMetrics: this._determineValueMetrics(pt.dataFields, defaultMetric),
|
|
653
|
+
applyWidthHeightFormats: pt.applyWidthHeightFormats === "1" ? "1" : "0"
|
|
653
654
|
};
|
|
654
655
|
loadedPivotTables.push(completePivotTable);
|
|
656
|
+
// Key format (e.g., "../pivotTables/pivotTable1.xml") matches worksheet .rels Target values,
|
|
657
|
+
// allowing worksheet reconciliation to look up pivot tables by their relationship target path.
|
|
655
658
|
pivotTablesIndexed[pivotTableRelTargetFromWorksheetName(pivotName)] = completePivotTable;
|
|
656
659
|
});
|
|
657
660
|
loadedPivotTables.sort((a, b) => a.tableNumber - b.tableNumber);
|
|
658
661
|
model.pivotTables = loadedPivotTables;
|
|
659
662
|
model.pivotTablesIndexed = pivotTablesIndexed;
|
|
660
|
-
model.loadedPivotTables = loadedPivotTables;
|
|
661
663
|
}
|
|
662
664
|
_extractTableNumber(name) {
|
|
663
665
|
const match = name.match(/pivotTable(\d+)/);
|
|
@@ -665,7 +667,7 @@ class XLSX {
|
|
|
665
667
|
}
|
|
666
668
|
_buildCacheIdMap(model) {
|
|
667
669
|
const rIdToCacheId = new Map();
|
|
668
|
-
const pivotCaches = model.pivotCaches
|
|
670
|
+
const pivotCaches = model.pivotCaches ?? [];
|
|
669
671
|
for (const cache of pivotCaches) {
|
|
670
672
|
if (cache.cacheId && cache.rId) {
|
|
671
673
|
rIdToCacheId.set(cache.rId, parseInt(cache.cacheId, 10));
|
|
@@ -676,7 +678,7 @@ class XLSX {
|
|
|
676
678
|
_buildDefinitionToCacheIdMap(model) {
|
|
677
679
|
const definitionToCacheId = new Map();
|
|
678
680
|
const rIdToCacheId = this._buildCacheIdMap(model);
|
|
679
|
-
const workbookRels = model.workbookRels
|
|
681
|
+
const workbookRels = model.workbookRels ?? [];
|
|
680
682
|
for (const rel of workbookRels) {
|
|
681
683
|
if (rel.Type === XLSX.RelType.PivotCacheDefinition && rel.Target) {
|
|
682
684
|
const match = rel.Target.match(/pivotCacheDefinition(\d+)\.xml/);
|
|
@@ -692,11 +694,14 @@ class XLSX {
|
|
|
692
694
|
return definitionToCacheId;
|
|
693
695
|
}
|
|
694
696
|
_determineMetric(dataFields) {
|
|
695
|
-
if (dataFields.length > 0 && dataFields[0].subtotal
|
|
696
|
-
return
|
|
697
|
+
if (dataFields.length > 0 && dataFields[0].subtotal) {
|
|
698
|
+
return dataFields[0].subtotal;
|
|
697
699
|
}
|
|
698
700
|
return "sum";
|
|
699
701
|
}
|
|
702
|
+
_determineValueMetrics(dataFields, defaultMetric) {
|
|
703
|
+
return dataFields.map(df => df.subtotal || defaultMetric);
|
|
704
|
+
}
|
|
700
705
|
// ===========================================================================
|
|
701
706
|
// Process Entry methods - shared by all platforms
|
|
702
707
|
// ===========================================================================
|
|
@@ -839,11 +844,6 @@ class XLSX {
|
|
|
839
844
|
model.pivotCacheDefinitions[name] = cacheDefinition;
|
|
840
845
|
}
|
|
841
846
|
}
|
|
842
|
-
async _processPivotCacheDefinitionRelsEntry(stream, model, name) {
|
|
843
|
-
const xform = new RelationshipsXform();
|
|
844
|
-
const relationships = await xform.parseStream(stream);
|
|
845
|
-
model.pivotCacheDefinitionRels[name] = relationships;
|
|
846
|
-
}
|
|
847
847
|
async _processPivotCacheRecordsEntry(stream, model, name) {
|
|
848
848
|
const xform = new PivotCacheRecordsXform();
|
|
849
849
|
const cacheRecords = await xform.parseStream(stream);
|
|
@@ -943,9 +943,11 @@ class XLSX {
|
|
|
943
943
|
await this._processPivotCacheDefinitionEntry(stream, model, pivotCacheDefinitionName);
|
|
944
944
|
return true;
|
|
945
945
|
}
|
|
946
|
+
// R9-B8: Skip parsing pivotCacheDefinition .rels files — they are never used
|
|
947
|
+
// during reconciliation and were just deleted at cleanup. The cache definition's
|
|
948
|
+
// r:id attribute (preserved in ParsedCacheDefinition.rId) is sufficient.
|
|
946
949
|
const pivotCacheDefinitionRelsName = getPivotCacheDefinitionNameFromRelsPath(entryName);
|
|
947
950
|
if (pivotCacheDefinitionRelsName) {
|
|
948
|
-
await this._processPivotCacheDefinitionRelsEntry(stream, model, pivotCacheDefinitionRelsName);
|
|
949
951
|
return true;
|
|
950
952
|
}
|
|
951
953
|
const pivotCacheRecordsName = getPivotCacheRecordsNameFromPath(entryName);
|
|
@@ -1028,13 +1030,25 @@ class XLSX {
|
|
|
1028
1030
|
Target: OOXML_REL_TARGETS.workbookFeaturePropertyBag
|
|
1029
1031
|
});
|
|
1030
1032
|
}
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1033
|
+
// R9-B6: Deduplicate pivot cache relationships by cacheId. When multiple pivot
|
|
1034
|
+
// tables share the same cache, only one workbook relationship should be created.
|
|
1035
|
+
// Also assigns rId to each pivot table (R9-B7: typed on PivotTable interface).
|
|
1036
|
+
const seenCacheIds = new Map(); // cacheId → rId
|
|
1037
|
+
(model.pivotTables ?? []).forEach((pivotTable) => {
|
|
1038
|
+
const existing = seenCacheIds.get(pivotTable.cacheId);
|
|
1039
|
+
if (existing) {
|
|
1040
|
+
// Shared cache: reuse the rId from the first pivot table with this cacheId
|
|
1041
|
+
pivotTable.rId = existing;
|
|
1042
|
+
}
|
|
1043
|
+
else {
|
|
1044
|
+
pivotTable.rId = `rId${count++}`;
|
|
1045
|
+
seenCacheIds.set(pivotTable.cacheId, pivotTable.rId);
|
|
1046
|
+
relationships.push({
|
|
1047
|
+
Id: pivotTable.rId,
|
|
1048
|
+
Type: XLSX.RelType.PivotCacheDefinition,
|
|
1049
|
+
Target: pivotCacheDefinitionRelTargetFromWorkbook(pivotTable.tableNumber)
|
|
1050
|
+
});
|
|
1051
|
+
}
|
|
1038
1052
|
});
|
|
1039
1053
|
model.worksheets.forEach((worksheet, index) => {
|
|
1040
1054
|
worksheet.rId = `rId${count++}`;
|
|
@@ -1129,7 +1143,7 @@ class XLSX {
|
|
|
1129
1143
|
else {
|
|
1130
1144
|
// Use regenerated XML for normal drawings (images, shapes)
|
|
1131
1145
|
// Filter out invalid anchors (null, undefined, or missing content)
|
|
1132
|
-
const filteredAnchors = (drawing.anchors
|
|
1146
|
+
const filteredAnchors = (drawing.anchors ?? []).filter((a) => {
|
|
1133
1147
|
if (a == null) {
|
|
1134
1148
|
return false;
|
|
1135
1149
|
}
|
|
@@ -1187,40 +1201,60 @@ class XLSX {
|
|
|
1187
1201
|
const pivotCacheDefinitionXform = new PivotCacheDefinitionXform();
|
|
1188
1202
|
const pivotTableXform = new PivotTableXform();
|
|
1189
1203
|
const relsXform = new RelationshipsXform();
|
|
1204
|
+
// R9-B6: Track which cacheIds have already been written to avoid duplicating
|
|
1205
|
+
// shared caches. Maps cacheId → tableNumber used for the cache file names.
|
|
1206
|
+
const writtenCaches = new Map();
|
|
1190
1207
|
model.pivotTables.forEach((pivotTable) => {
|
|
1191
1208
|
const n = pivotTable.tableNumber;
|
|
1192
1209
|
const isLoaded = pivotTable.isLoaded;
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1210
|
+
const cacheId = pivotTable.cacheId;
|
|
1211
|
+
// R9-B6: Only write cache definition/records/rels once per unique cacheId.
|
|
1212
|
+
const cacheAlreadyWritten = writtenCaches.has(cacheId);
|
|
1213
|
+
if (!cacheAlreadyWritten) {
|
|
1214
|
+
writtenCaches.set(cacheId, n);
|
|
1215
|
+
if (isLoaded) {
|
|
1216
|
+
if (pivotTable.cacheDefinition) {
|
|
1217
|
+
const xml = pivotCacheDefinitionXform.toXml(pivotTable.cacheDefinition);
|
|
1218
|
+
zip.append(xml, { name: pivotCacheDefinitionPath(n) });
|
|
1219
|
+
}
|
|
1220
|
+
if (pivotTable.cacheRecords) {
|
|
1221
|
+
const xml = pivotCacheRecordsXform.toXml(pivotTable.cacheRecords);
|
|
1222
|
+
zip.append(xml, { name: pivotCacheRecordsPath(n) });
|
|
1223
|
+
}
|
|
1197
1224
|
}
|
|
1198
|
-
|
|
1199
|
-
|
|
1225
|
+
else {
|
|
1226
|
+
let xml = pivotCacheRecordsXform.toXml(pivotTable);
|
|
1200
1227
|
zip.append(xml, { name: pivotCacheRecordsPath(n) });
|
|
1228
|
+
xml = pivotCacheDefinitionXform.toXml(pivotTable);
|
|
1229
|
+
zip.append(xml, { name: pivotCacheDefinitionPath(n) });
|
|
1201
1230
|
}
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1231
|
+
// R9-B4: Only write cache definition rels when cache records exist.
|
|
1232
|
+
// For loaded pivot tables without cacheRecords (e.g. OLAP), skip the rels file entirely.
|
|
1233
|
+
// R9-B3: Use the rId from the loaded cache definition to stay consistent with the XML.
|
|
1234
|
+
const hasCacheRecords = isLoaded ? !!pivotTable.cacheRecords : true;
|
|
1235
|
+
if (hasCacheRecords) {
|
|
1236
|
+
const cacheRecordsRId = (isLoaded ? pivotTable.cacheDefinition?.rId : undefined) ?? "rId1";
|
|
1237
|
+
const xml = relsXform.toXml([
|
|
1238
|
+
{
|
|
1239
|
+
Id: cacheRecordsRId,
|
|
1240
|
+
Type: XLSX.RelType.PivotCacheRecords,
|
|
1241
|
+
Target: pivotCacheRecordsRelTarget(n)
|
|
1242
|
+
}
|
|
1243
|
+
]);
|
|
1244
|
+
zip.append(xml, { name: pivotCacheDefinitionRelsPath(n) });
|
|
1214
1245
|
}
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
xml = pivotTableXform.toXml(pivotTable);
|
|
1246
|
+
}
|
|
1247
|
+
// Pivot table XML is always written (each pivot table has its own file).
|
|
1248
|
+
let xml = pivotTableXform.toXml(pivotTable);
|
|
1218
1249
|
zip.append(xml, { name: pivotTablePath(n) });
|
|
1250
|
+
// Pivot table rels point to the cache definition file. For shared caches,
|
|
1251
|
+
// use the tableNumber of the first pivot table that wrote the cache.
|
|
1252
|
+
const cacheTableNumber = writtenCaches.get(cacheId);
|
|
1219
1253
|
xml = relsXform.toXml([
|
|
1220
1254
|
{
|
|
1221
1255
|
Id: "rId1",
|
|
1222
1256
|
Type: XLSX.RelType.PivotCacheDefinition,
|
|
1223
|
-
Target: pivotCacheDefinitionRelTargetFromPivotTable(
|
|
1257
|
+
Target: pivotCacheDefinitionRelTargetFromPivotTable(cacheTableNumber)
|
|
1224
1258
|
}
|
|
1225
1259
|
]);
|
|
1226
1260
|
zip.append(xml, { name: pivotTableRelsPath(n) });
|
|
@@ -1236,10 +1270,10 @@ class XLSX {
|
|
|
1236
1270
|
});
|
|
1237
1271
|
}
|
|
1238
1272
|
prepareModel(model, options) {
|
|
1239
|
-
model.creator = model.creator
|
|
1240
|
-
model.lastModifiedBy = model.lastModifiedBy
|
|
1241
|
-
model.created = model.created
|
|
1242
|
-
model.modified = model.modified
|
|
1273
|
+
model.creator = model.creator ?? "ExcelTS";
|
|
1274
|
+
model.lastModifiedBy = model.lastModifiedBy ?? "ExcelTS";
|
|
1275
|
+
model.created = model.created ?? new Date();
|
|
1276
|
+
model.modified = model.modified ?? new Date();
|
|
1243
1277
|
model.useSharedStrings =
|
|
1244
1278
|
options.useSharedStrings !== undefined ? options.useSharedStrings : true;
|
|
1245
1279
|
model.useStyles = options.useStyles !== undefined ? options.useStyles : true;
|
|
@@ -9,10 +9,3 @@
|
|
|
9
9
|
export function isNode() {
|
|
10
10
|
return typeof process !== "undefined" && !!process.versions?.node;
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Check if running in browser environment
|
|
14
|
-
* Returns true if window and document are defined
|
|
15
|
-
*/
|
|
16
|
-
export function isBrowser() {
|
|
17
|
-
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
18
|
-
}
|
|
@@ -9,17 +9,14 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function base64ToUint8Array(base64: string): Uint8Array;
|
|
11
11
|
export declare function delay(ms: number): Promise<void>;
|
|
12
|
-
export declare function nop(): void;
|
|
13
|
-
export declare const inherits: <T extends new (...args: any[]) => any, S extends new (...args: any[]) => any>(cls: T, superCtor: S, statics?: any, prototype?: any) => void;
|
|
14
12
|
export declare function dateToExcel(d: Date, date1904?: boolean): number;
|
|
15
13
|
export declare function excelToDate(v: number, date1904?: boolean): Date;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export declare function
|
|
22
|
-
export declare function getRelsPath(filepath: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Parse an OOXML date string into a Date object.
|
|
16
|
+
* OOXML dates like "2024-01-15T00:00:00" lack a timezone suffix,
|
|
17
|
+
* which some JS engines parse as local time. Appending "Z" forces UTC.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseOoxmlDate(raw: string): Date;
|
|
23
20
|
export declare function xmlDecode(text: string): string;
|
|
24
21
|
/**
|
|
25
22
|
* Encode special characters for XML output
|
|
@@ -28,10 +25,9 @@ export declare function xmlDecode(text: string): string;
|
|
|
28
25
|
export declare function xmlEncode(text: string): string;
|
|
29
26
|
export declare function validInt(value: string | number): number;
|
|
30
27
|
export declare function isDateFmt(fmt: string | null | undefined): boolean;
|
|
31
|
-
export declare function parseBoolean(value:
|
|
28
|
+
export declare function parseBoolean(value: unknown): boolean;
|
|
32
29
|
export declare function range(start: number, stop: number, step?: number): Generator<number>;
|
|
33
|
-
export declare function toSortedArray(values: Iterable<
|
|
34
|
-
export declare function objectFromProps<T = any>(props: string[], value?: T | null): Record<string, T | null>;
|
|
30
|
+
export declare function toSortedArray<T>(values: Iterable<T>): T[];
|
|
35
31
|
/**
|
|
36
32
|
* Convert a Buffer, ArrayBuffer, or Uint8Array to a UTF-8 string
|
|
37
33
|
* Works in both Node.js and browser environments
|
|
@@ -46,4 +42,3 @@ export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
|
|
|
46
42
|
* Convert string to UTF-16LE Uint8Array (used for Excel password hashing)
|
|
47
43
|
*/
|
|
48
44
|
export declare function stringToUtf16Le(str: string): Uint8Array;
|
|
49
|
-
export {};
|
|
@@ -30,33 +30,6 @@ export function base64ToUint8Array(base64) {
|
|
|
30
30
|
export function delay(ms) {
|
|
31
31
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
32
32
|
}
|
|
33
|
-
export function nop() { }
|
|
34
|
-
export const inherits = function (cls, superCtor, statics, prototype) {
|
|
35
|
-
cls.super_ = superCtor;
|
|
36
|
-
if (!prototype) {
|
|
37
|
-
prototype = statics;
|
|
38
|
-
statics = null;
|
|
39
|
-
}
|
|
40
|
-
if (statics) {
|
|
41
|
-
Object.keys(statics).forEach(i => {
|
|
42
|
-
Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
const properties = {
|
|
46
|
-
constructor: {
|
|
47
|
-
value: cls,
|
|
48
|
-
enumerable: false,
|
|
49
|
-
writable: false,
|
|
50
|
-
configurable: true
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
if (prototype) {
|
|
54
|
-
Object.keys(prototype).forEach(i => {
|
|
55
|
-
properties[i] = Object.getOwnPropertyDescriptor(prototype, i);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
cls.prototype = Object.create(superCtor.prototype, properties);
|
|
59
|
-
};
|
|
60
33
|
// =============================================================================
|
|
61
34
|
// Date utilities
|
|
62
35
|
// =============================================================================
|
|
@@ -67,19 +40,13 @@ export function excelToDate(v, date1904) {
|
|
|
67
40
|
const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);
|
|
68
41
|
return new Date(millisecondSinceEpoch);
|
|
69
42
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
name: filepath.substring(last + 1)
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
export function getRelsPath(filepath) {
|
|
81
|
-
const path = parsePath(filepath);
|
|
82
|
-
return `${path.path}/_rels/${path.name}.rels`;
|
|
43
|
+
/**
|
|
44
|
+
* Parse an OOXML date string into a Date object.
|
|
45
|
+
* OOXML dates like "2024-01-15T00:00:00" lack a timezone suffix,
|
|
46
|
+
* which some JS engines parse as local time. Appending "Z" forces UTC.
|
|
47
|
+
*/
|
|
48
|
+
export function parseOoxmlDate(raw) {
|
|
49
|
+
return new Date(raw.endsWith("Z") ? raw : raw + "Z");
|
|
83
50
|
}
|
|
84
51
|
// =============================================================================
|
|
85
52
|
// XML utilities
|
|
@@ -199,17 +166,43 @@ export function* range(start, stop, step = 1) {
|
|
|
199
166
|
}
|
|
200
167
|
export function toSortedArray(values) {
|
|
201
168
|
const result = Array.from(values);
|
|
202
|
-
|
|
169
|
+
if (result.length <= 1) {
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
// All numbers → numeric sort
|
|
203
173
|
if (result.every(item => Number.isFinite(item))) {
|
|
204
174
|
return result.sort((a, b) => a - b);
|
|
205
175
|
}
|
|
206
|
-
|
|
176
|
+
// All Dates → chronological sort
|
|
177
|
+
if (result.every(item => item instanceof Date)) {
|
|
178
|
+
return result.sort((a, b) => a.getTime() - b.getTime());
|
|
179
|
+
}
|
|
180
|
+
// Mixed types → type-aware sort: numbers first (numerically), then dates (chronologically), then strings (lexicographic)
|
|
181
|
+
return result.sort((a, b) => {
|
|
182
|
+
const ta = sortTypeRank(a);
|
|
183
|
+
const tb = sortTypeRank(b);
|
|
184
|
+
if (ta !== tb) {
|
|
185
|
+
return ta - tb;
|
|
186
|
+
}
|
|
187
|
+
// Same type group
|
|
188
|
+
if (ta === 0) {
|
|
189
|
+
return a - b;
|
|
190
|
+
}
|
|
191
|
+
if (ta === 1) {
|
|
192
|
+
return a.getTime() - b.getTime();
|
|
193
|
+
}
|
|
194
|
+
return String(a).localeCompare(String(b));
|
|
195
|
+
});
|
|
207
196
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
return
|
|
212
|
-
}
|
|
197
|
+
/** Rank for mixed-type sort: numbers=0, dates=1, everything else=2 */
|
|
198
|
+
function sortTypeRank(v) {
|
|
199
|
+
if (Number.isFinite(v)) {
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
if (v instanceof Date) {
|
|
203
|
+
return 1;
|
|
204
|
+
}
|
|
205
|
+
return 2;
|
|
213
206
|
}
|
|
214
207
|
// =============================================================================
|
|
215
208
|
// Buffer utilities (cross-platform)
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Browser utility functions
|
|
3
3
|
* Re-exports shared utilities and adds browser-specific implementations
|
|
4
4
|
*/
|
|
5
|
-
export { delay,
|
|
5
|
+
export { delay, dateToExcel, excelToDate, parseOoxmlDate, xmlDecode, xmlEncode, validInt, isDateFmt, parseBoolean, range, toSortedArray, bufferToString, base64ToUint8Array, uint8ArrayToBase64, stringToUtf16Le } from "@utils/utils.base";
|
|
6
6
|
export declare function fileExists(_path: string): Promise<boolean>;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Re-exports shared utilities and adds browser-specific implementations
|
|
4
4
|
*/
|
|
5
5
|
// Re-export all shared utilities
|
|
6
|
-
export { delay,
|
|
6
|
+
export { delay, dateToExcel, excelToDate, parseOoxmlDate, xmlDecode, xmlEncode, validInt, isDateFmt, parseBoolean, range, toSortedArray, bufferToString, base64ToUint8Array, uint8ArrayToBase64, stringToUtf16Le } from "./utils.base.js";
|
|
7
7
|
// =============================================================================
|
|
8
8
|
// File system utilities (Browser stub - always returns false)
|
|
9
9
|
// =============================================================================
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Node.js utility functions
|
|
3
3
|
* Re-exports shared utilities and adds Node.js-specific implementations
|
|
4
4
|
*/
|
|
5
|
-
export { delay,
|
|
5
|
+
export { delay, dateToExcel, excelToDate, parseOoxmlDate, xmlDecode, xmlEncode, validInt, isDateFmt, parseBoolean, range, toSortedArray, bufferToString, base64ToUint8Array, uint8ArrayToBase64, stringToUtf16Le } from "@utils/utils.base";
|
|
6
6
|
export declare function fileExists(path: string): Promise<boolean>;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import fs from "fs";
|
|
6
6
|
// Re-export all shared utilities
|
|
7
|
-
export { delay,
|
|
7
|
+
export { delay, dateToExcel, excelToDate, parseOoxmlDate, xmlDecode, xmlEncode, validInt, isDateFmt, parseBoolean, range, toSortedArray, bufferToString, base64ToUint8Array, uint8ArrayToBase64, stringToUtf16Le } from "./utils.base.js";
|
|
8
8
|
// =============================================================================
|
|
9
9
|
// File system utilities (Node.js only)
|
|
10
10
|
// =============================================================================
|