@agile-team/mach-table-xlsx 0.13.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/LICENSE +110 -0
- package/README.md +26 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +41 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
MachTable Source-Available License 1.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ChenyCHENYU (Agile Team). All rights reserved.
|
|
4
|
+
|
|
5
|
+
IMPORTANT: The source code is publicly visible for review, but it is not
|
|
6
|
+
open-source software as defined by the Open Source Initiative. Except for the
|
|
7
|
+
limited inspection permission below, no permission is granted unless the
|
|
8
|
+
copyright holder gives you prior written authorization.
|
|
9
|
+
|
|
10
|
+
1. Definitions
|
|
11
|
+
|
|
12
|
+
"Software" means MachTable and all source code, object code, packages,
|
|
13
|
+
documentation, examples, designs, assets, and other materials distributed with
|
|
14
|
+
this license.
|
|
15
|
+
|
|
16
|
+
"Licensor" means ChenyCHENYU (Agile Team), the copyright holder of the
|
|
17
|
+
Software.
|
|
18
|
+
|
|
19
|
+
"Written Authorization" means a durable written permission issued directly by
|
|
20
|
+
the Licensor that identifies the licensee and the permitted scope, purpose,
|
|
21
|
+
environment, term, and any other applicable conditions.
|
|
22
|
+
|
|
23
|
+
2. Limited Inspection Permission
|
|
24
|
+
|
|
25
|
+
You may view the Software on the repository hosting service solely to inspect
|
|
26
|
+
and evaluate it, to link to its public repository, to discuss it, and to submit
|
|
27
|
+
good-faith issue reports. This limited permission does not include permission
|
|
28
|
+
to use, run, build, compile, copy, download for reuse, install, integrate,
|
|
29
|
+
modify, create derivative works from, deploy, distribute, sublicense, sell,
|
|
30
|
+
lease, provide as a service, or otherwise exploit the Software.
|
|
31
|
+
|
|
32
|
+
3. Authorization Required
|
|
33
|
+
|
|
34
|
+
Any use beyond Section 2 requires the Licensor's prior Written Authorization.
|
|
35
|
+
This requirement applies to personal, educational, research, governmental,
|
|
36
|
+
non-profit, internal, evaluation, testing, development, staging, production,
|
|
37
|
+
and commercial use. Possession of a copy, cloning the repository, downloading
|
|
38
|
+
an npm package, receiving the Software from another person, or submitting a
|
|
39
|
+
contribution does not grant any additional rights.
|
|
40
|
+
|
|
41
|
+
The Licensor may grant separate commercial or non-commercial terms in a
|
|
42
|
+
written agreement. If such an agreement conflicts with this license, that
|
|
43
|
+
agreement controls only for the licensee and scope identified in it.
|
|
44
|
+
|
|
45
|
+
4. Restrictions
|
|
46
|
+
|
|
47
|
+
Without prior Written Authorization, you must not, directly or indirectly:
|
|
48
|
+
|
|
49
|
+
a. use, execute, build, compile, install, test, or integrate the Software;
|
|
50
|
+
b. copy, reproduce, modify, adapt, translate, or create derivative works;
|
|
51
|
+
c. publish, distribute, sublicense, sell, rent, lease, transfer, host, or make
|
|
52
|
+
the Software available to any third party;
|
|
53
|
+
d. use the Software to provide a hosted, managed, consulting, outsourcing,
|
|
54
|
+
software-as-a-service, or other service;
|
|
55
|
+
e. remove or alter copyright, authorization, trademark, attribution, or other
|
|
56
|
+
proprietary notices; or
|
|
57
|
+
f. represent the Software as open source or represent that you have received
|
|
58
|
+
authorization when you have not.
|
|
59
|
+
|
|
60
|
+
5. Contributions
|
|
61
|
+
|
|
62
|
+
Submitting a patch, pull request, code, documentation, design, or other
|
|
63
|
+
material to the project does not authorize you to use the Software. Unless a
|
|
64
|
+
separate written contributor agreement applies, by intentionally submitting a
|
|
65
|
+
contribution you represent that you have the right to submit it and grant the
|
|
66
|
+
Licensor a perpetual, worldwide, irrevocable, transferable, sublicensable,
|
|
67
|
+
royalty-free license to use, reproduce, modify, create derivative works from,
|
|
68
|
+
distribute, license, and relicense that contribution as part of the Software.
|
|
69
|
+
|
|
70
|
+
6. Ownership and Trademarks
|
|
71
|
+
|
|
72
|
+
The Software is licensed, not sold. The Licensor and applicable contributors
|
|
73
|
+
retain all right, title, and interest in the Software. No trademark, service
|
|
74
|
+
mark, trade name, logo, or branding rights are granted by this license.
|
|
75
|
+
|
|
76
|
+
7. Termination
|
|
77
|
+
|
|
78
|
+
Any permission granted under this license terminates automatically upon breach.
|
|
79
|
+
On termination, you must immediately stop all use and destroy all copies in
|
|
80
|
+
your possession or control, except where retention is required by law. Sections
|
|
81
|
+
4 through 9 survive termination.
|
|
82
|
+
|
|
83
|
+
8. Disclaimer
|
|
84
|
+
|
|
85
|
+
TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" AND
|
|
86
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND
|
|
88
|
+
NON-INFRINGEMENT.
|
|
89
|
+
|
|
90
|
+
9. Limitation of Liability
|
|
91
|
+
|
|
92
|
+
TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE LICENSOR AND CONTRIBUTORS WILL NOT
|
|
93
|
+
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
|
94
|
+
CONSEQUENTIAL, OR OTHER DAMAGES, OR FOR LOSS OF DATA, PROFITS, REVENUE,
|
|
95
|
+
GOODWILL, OR BUSINESS INTERRUPTION, ARISING FROM OR RELATED TO THE SOFTWARE OR
|
|
96
|
+
THIS LICENSE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
97
|
+
|
|
98
|
+
10. Contact and Authorization
|
|
99
|
+
|
|
100
|
+
See LICENSING.md in the repository for the authorization request process. No
|
|
101
|
+
request, discussion, issue, payment, or contribution constitutes authorization
|
|
102
|
+
unless and until the Licensor issues explicit Written Authorization.
|
|
103
|
+
|
|
104
|
+
中文说明(仅为阅读便利;如有冲突,以英文条款为准)
|
|
105
|
+
|
|
106
|
+
本项目源代码公开可查看,但不是 OSI 定义下的开源软件。除查看、链接、
|
|
107
|
+
讨论和善意提交问题外,任何个人、教育、研究、公益、政府、内部、测试、
|
|
108
|
+
开发、生产或商业用途,均须事先取得作者明确的书面授权。未经授权,不得
|
|
109
|
+
运行、构建、复制、修改、集成、部署、分发、转授权、销售、出租、托管或
|
|
110
|
+
以服务形式提供本软件。公开仓库、克隆代码或下载 npm 包不代表获得授权。
|
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# @agile-team/mach-table-xlsx
|
|
2
|
+
|
|
3
|
+
Optional XLSX import/export for MachTable. The workbook engine is injected and can be dynamically imported, so normal table pages do not download Excel code.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pnpm add @agile-team/mach-table-xlsx xlsx
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { createXlsxExtension } from "@agile-team/mach-table-xlsx";
|
|
11
|
+
|
|
12
|
+
const xlsx = createXlsxExtension(() => import("xlsx"));
|
|
13
|
+
await xlsx.export(api, { fileName: "orders.xlsx", sheetName: "Orders" });
|
|
14
|
+
|
|
15
|
+
await xlsx.import(api, await file.arrayBuffer(), {
|
|
16
|
+
sheet: 0,
|
|
17
|
+
mode: "replace",
|
|
18
|
+
coerceNumbers: true
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The extension reuses Core CSV selection, header, formula-protection and safe import rules. `xlsx` is an example engine, not a bundled dependency; an approved compatible engine can be injected instead.
|
|
23
|
+
|
|
24
|
+
Documentation: [XLSX guide](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/xlsx.md) · [Enterprise integration](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md)
|
|
25
|
+
|
|
26
|
+
Source-available © ChenyCHENYU (Agile Team). Any use requires prior written authorization. See the [license](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) and [authorization process](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md).
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";var w=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var E=(e,o)=>{for(var n in o)w(e,n,{get:o[n],enumerable:!0})},T=(e,o,n,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of y(o))!S.call(e,r)&&r!==n&&w(e,r,{get:()=>o[r],enumerable:!(t=b(o,r))||t.enumerable});return e};var _=e=>T(w({},"__esModule",{value:!0}),e);var A={};E(A,{createXlsxExtension:()=>G,exportGridToXlsx:()=>h,importGridFromXlsx:()=>k});module.exports=_(A);var x=require("@agile-team/mach-table");function f(e){return typeof e=="object"&&e!==null&&"utils"in e}async function m(e){let o=typeof e=="function"?await e():e,n=typeof o=="object"&&o!==null&&"default"in o?o.default:void 0,t=f(o)?o:f(n)?n:void 0;if(!t?.utils?.book_new||!t.utils.aoa_to_sheet||!t.utils.book_append_sheet)throw new TypeError("[MachTable] Invalid XLSX engine adapter.");return t}function N(e){return(e??"Data").replace(/[\\/?*\[\]:]/g," ").trim().slice(0,31)||"Data"}function P(e){let n=(e?.trim()||"mach-table.xlsx").replace(/[\\/:*?"<>|\u0000-\u001f]/g," ").trim()||"mach-table.xlsx";return/\.xlsx$/i.test(n)?n:`${n}.xlsx`}function g(e){let o=e??",";if(o.length!==1||/["\r\n]/.test(o))throw new TypeError("[MachTable] XLSX CSV bridge requires a single non-quote separator character.");return o}async function h(e,o,n={}){let t=await m(o),r=g(n.columnSeparator),s=e.getDataAsCsv(n),a=(0,x.parseCsv)(s,r).map((d,l)=>d.map((c,X)=>n.transformCell?.(c,l,X)??c)),i=t.utils.book_new(),p=t.utils.aoa_to_sheet(a);t.utils.book_append_sheet(i,p,N(n.sheetName));let u=P(n.fileName);if(t.writeFileXLSX)await t.writeFileXLSX(i,u,n.writeOptions);else if(t.writeFile)await t.writeFile(i,u,n.writeOptions);else throw new TypeError("[MachTable] XLSX engine must expose writeFileXLSX or writeFile.");return i}function F(e,o){let n="";return typeof e=="string"?n=e:typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"?n=e.toString():typeof e=="symbol"?n=e.description??"":typeof e=="function"?n=e.name:e!=null&&(n=JSON.stringify(e)??""),n.includes(o)||/["\n\r]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}async function k(e,o,n,t={}){let r=await m(o);if(!r.read||!r.utils.sheet_to_json)throw new TypeError("[MachTable] XLSX import requires engine.read and utils.sheet_to_json.");let s=r.read(n,t.readOptions);if(!s||!Array.isArray(s.SheetNames)||!s.Sheets||typeof s.Sheets!="object")throw new TypeError("[MachTable] XLSX engine returned an invalid workbook.");let a=typeof t.sheet=="number"?s.SheetNames[t.sheet]:t.sheet??s.SheetNames[0];if(!a||!(a in s.Sheets))throw new RangeError(`[MachTable] Worksheet not found: ${String(t.sheet??0)}.`);let i=r.utils.sheet_to_json(s.Sheets[a],{header:1,raw:!1});if(!Array.isArray(i)||i.some(l=>!Array.isArray(l)))throw new TypeError("[MachTable] XLSX worksheet must resolve to an array of rows.");let p=g(t.separator),u=i.map(l=>l.map(c=>F(c,p)).join(p)).join(`
|
|
2
|
+
`),d={separator:t.separator,mode:t.mode,headerRowIndex:t.headerRowIndex,coerceNumbers:t.coerceNumbers,parseValue:t.parseValue};return e.importCsv(u,d)}function G(e){return{export(o,n){return h(o,e,n)},import(o,n,t){return k(o,e,n,t)}}}0&&(module.exports={createXlsxExtension,exportGridToXlsx,importGridFromXlsx});
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n parseCsv,\n type CsvExportParams,\n type GridApi,\n type ImportCsvOptions\n} from \"@agile-team/mach-table\";\n\nexport interface XlsxWorkbook {\n SheetNames: string[];\n Sheets: Record<string, unknown>;\n}\n\nexport interface XlsxEngine {\n utils: {\n book_new(): XlsxWorkbook;\n aoa_to_sheet(rows: readonly (readonly unknown[])[]): unknown;\n book_append_sheet(workbook: XlsxWorkbook, sheet: unknown, name?: string): void;\n sheet_to_json?(sheet: unknown, options?: Record<string, unknown>): unknown[][];\n };\n writeFileXLSX?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;\n writeFile?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;\n read?(data: unknown, options?: Record<string, unknown>): XlsxWorkbook;\n}\n\nexport type XlsxEngineModule = XlsxEngine | { default: XlsxEngine };\nexport type XlsxEngineSource = XlsxEngineModule | (() => Promise<XlsxEngineModule>);\n\nexport interface ExportGridToXlsxParams extends CsvExportParams {\n fileName?: string;\n sheetName?: string;\n writeOptions?: Record<string, unknown>;\n transformCell?(value: string, rowIndex: number, columnIndex: number): unknown;\n}\n\nexport interface ImportGridFromXlsxParams extends ImportCsvOptions {\n sheet?: string | number;\n readOptions?: Record<string, unknown>;\n}\n\nfunction isEngine(value: unknown): value is XlsxEngine {\n return typeof value === \"object\" && value !== null && \"utils\" in value;\n}\n\nasync function resolveEngine(source: XlsxEngineSource): Promise<XlsxEngine> {\n const loaded = typeof source === \"function\" ? await source() : source;\n const moduleDefault = typeof loaded === \"object\" && loaded !== null && \"default\" in loaded\n ? loaded.default\n : undefined;\n const engine = isEngine(loaded) ? loaded : isEngine(moduleDefault) ? moduleDefault : undefined;\n if (!engine?.utils?.book_new || !engine.utils.aoa_to_sheet || !engine.utils.book_append_sheet) {\n throw new TypeError(\"[MachTable] Invalid XLSX engine adapter.\");\n }\n return engine;\n}\n\nfunction safeSheetName(value: string | undefined): string {\n const name = (value ?? \"Data\").replace(/[\\\\/?*\\[\\]:]/g, \" \").trim().slice(0, 31);\n return name || \"Data\";\n}\n\nfunction safeFileName(value: string | undefined): string {\n const input = value?.trim() || \"mach-table.xlsx\";\n const name = input.replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \" \").trim() || \"mach-table.xlsx\";\n return /\\.xlsx$/i.test(name) ? name : `${name}.xlsx`;\n}\n\nfunction safeSeparator(value: string | undefined): string {\n const separator = value ?? \",\";\n if (separator.length !== 1 || /[\"\\r\\n]/.test(separator)) {\n throw new TypeError(\"[MachTable] XLSX CSV bridge requires a single non-quote separator character.\");\n }\n return separator;\n}\n\n/** Uses a lazily supplied workbook engine, keeping it out of the main grid bundle. */\nexport async function exportGridToXlsx<TData>(\n api: GridApi<TData>,\n source: XlsxEngineSource,\n params: ExportGridToXlsxParams = {}\n): Promise<XlsxWorkbook> {\n const engine = await resolveEngine(source);\n const separator = safeSeparator(params.columnSeparator);\n const csv = api.getDataAsCsv(params);\n const rows = parseCsv(csv, separator).map((row, rowIndex) =>\n row.map((value, columnIndex) => params.transformCell?.(value, rowIndex, columnIndex) ?? value)\n );\n const workbook = engine.utils.book_new();\n const sheet = engine.utils.aoa_to_sheet(rows);\n engine.utils.book_append_sheet(workbook, sheet, safeSheetName(params.sheetName));\n const fileName = safeFileName(params.fileName);\n if (engine.writeFileXLSX) await engine.writeFileXLSX(workbook, fileName, params.writeOptions);\n else if (engine.writeFile) await engine.writeFile(workbook, fileName, params.writeOptions);\n else throw new TypeError(\"[MachTable] XLSX engine must expose writeFileXLSX or writeFile.\");\n return workbook;\n}\n\nfunction csvCell(value: unknown, separator: string): string {\n let text = \"\";\n if (typeof value === \"string\") text = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") text = value.toString();\n else if (typeof value === \"symbol\") text = value.description ?? \"\";\n else if (typeof value === \"function\") text = value.name;\n else if (value != null) text = JSON.stringify(value) ?? \"\";\n return text.includes(separator) || /[\"\\n\\r]/.test(text)\n ? `\"${text.replace(/\"/g, '\"\"')}\"`\n : text;\n}\n\n/** Reads the selected worksheet through the host engine and reuses core's safe CSV importer. */\nexport async function importGridFromXlsx<TData>(\n api: GridApi<TData>,\n source: XlsxEngineSource,\n data: unknown,\n params: ImportGridFromXlsxParams = {}\n): Promise<boolean> {\n const engine = await resolveEngine(source);\n if (!engine.read || !engine.utils.sheet_to_json) {\n throw new TypeError(\"[MachTable] XLSX import requires engine.read and utils.sheet_to_json.\");\n }\n const workbook = engine.read(data, params.readOptions);\n if (!workbook || !Array.isArray(workbook.SheetNames) || !workbook.Sheets || typeof workbook.Sheets !== \"object\") {\n throw new TypeError(\"[MachTable] XLSX engine returned an invalid workbook.\");\n }\n const sheetName = typeof params.sheet === \"number\"\n ? workbook.SheetNames[params.sheet]\n : params.sheet ?? workbook.SheetNames[0];\n if (!sheetName || !(sheetName in workbook.Sheets)) {\n throw new RangeError(`[MachTable] Worksheet not found: ${String(params.sheet ?? 0)}.`);\n }\n const rows = engine.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1, raw: false });\n if (!Array.isArray(rows) || rows.some((row) => !Array.isArray(row))) {\n throw new TypeError(\"[MachTable] XLSX worksheet must resolve to an array of rows.\");\n }\n const separator = safeSeparator(params.separator);\n const csv = rows.map((row) => row.map((value) => csvCell(value, separator)).join(separator)).join(\"\\n\");\n const csvOptions: ImportCsvOptions = {\n separator: params.separator,\n mode: params.mode,\n headerRowIndex: params.headerRowIndex,\n coerceNumbers: params.coerceNumbers,\n parseValue: params.parseValue\n };\n return api.importCsv(csv, csvOptions);\n}\n\nexport function createXlsxExtension(source: XlsxEngineSource) {\n return {\n export<TData>(api: GridApi<TData>, params?: ExportGridToXlsxParams) {\n return exportGridToXlsx(api, source, params);\n },\n import<TData>(api: GridApi<TData>, data: unknown, params?: ImportGridFromXlsxParams) {\n return importGridFromXlsx(api, source, data, params);\n }\n };\n}\n"],"mappings":"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","names":["index_exports","__export","createXlsxExtension","exportGridToXlsx","importGridFromXlsx","__toCommonJS","import_mach_table","isEngine","value","resolveEngine","source","loaded","moduleDefault","engine","safeSheetName","safeFileName","name","safeSeparator","separator","api","params","csv","rows","row","rowIndex","columnIndex","workbook","sheet","fileName","csvCell","text","data","sheetName","csvOptions"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CsvExportParams, ImportCsvOptions, GridApi } from '@agile-team/mach-table';
|
|
2
|
+
|
|
3
|
+
interface XlsxWorkbook {
|
|
4
|
+
SheetNames: string[];
|
|
5
|
+
Sheets: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
interface XlsxEngine {
|
|
8
|
+
utils: {
|
|
9
|
+
book_new(): XlsxWorkbook;
|
|
10
|
+
aoa_to_sheet(rows: readonly (readonly unknown[])[]): unknown;
|
|
11
|
+
book_append_sheet(workbook: XlsxWorkbook, sheet: unknown, name?: string): void;
|
|
12
|
+
sheet_to_json?(sheet: unknown, options?: Record<string, unknown>): unknown[][];
|
|
13
|
+
};
|
|
14
|
+
writeFileXLSX?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;
|
|
15
|
+
writeFile?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;
|
|
16
|
+
read?(data: unknown, options?: Record<string, unknown>): XlsxWorkbook;
|
|
17
|
+
}
|
|
18
|
+
type XlsxEngineModule = XlsxEngine | {
|
|
19
|
+
default: XlsxEngine;
|
|
20
|
+
};
|
|
21
|
+
type XlsxEngineSource = XlsxEngineModule | (() => Promise<XlsxEngineModule>);
|
|
22
|
+
interface ExportGridToXlsxParams extends CsvExportParams {
|
|
23
|
+
fileName?: string;
|
|
24
|
+
sheetName?: string;
|
|
25
|
+
writeOptions?: Record<string, unknown>;
|
|
26
|
+
transformCell?(value: string, rowIndex: number, columnIndex: number): unknown;
|
|
27
|
+
}
|
|
28
|
+
interface ImportGridFromXlsxParams extends ImportCsvOptions {
|
|
29
|
+
sheet?: string | number;
|
|
30
|
+
readOptions?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
/** Uses a lazily supplied workbook engine, keeping it out of the main grid bundle. */
|
|
33
|
+
declare function exportGridToXlsx<TData>(api: GridApi<TData>, source: XlsxEngineSource, params?: ExportGridToXlsxParams): Promise<XlsxWorkbook>;
|
|
34
|
+
/** Reads the selected worksheet through the host engine and reuses core's safe CSV importer. */
|
|
35
|
+
declare function importGridFromXlsx<TData>(api: GridApi<TData>, source: XlsxEngineSource, data: unknown, params?: ImportGridFromXlsxParams): Promise<boolean>;
|
|
36
|
+
declare function createXlsxExtension(source: XlsxEngineSource): {
|
|
37
|
+
export<TData>(api: GridApi<TData>, params?: ExportGridToXlsxParams): Promise<XlsxWorkbook>;
|
|
38
|
+
import<TData>(api: GridApi<TData>, data: unknown, params?: ImportGridFromXlsxParams): Promise<boolean>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { type ExportGridToXlsxParams, type ImportGridFromXlsxParams, type XlsxEngine, type XlsxEngineModule, type XlsxEngineSource, type XlsxWorkbook, createXlsxExtension, exportGridToXlsx, importGridFromXlsx };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CsvExportParams, ImportCsvOptions, GridApi } from '@agile-team/mach-table';
|
|
2
|
+
|
|
3
|
+
interface XlsxWorkbook {
|
|
4
|
+
SheetNames: string[];
|
|
5
|
+
Sheets: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
interface XlsxEngine {
|
|
8
|
+
utils: {
|
|
9
|
+
book_new(): XlsxWorkbook;
|
|
10
|
+
aoa_to_sheet(rows: readonly (readonly unknown[])[]): unknown;
|
|
11
|
+
book_append_sheet(workbook: XlsxWorkbook, sheet: unknown, name?: string): void;
|
|
12
|
+
sheet_to_json?(sheet: unknown, options?: Record<string, unknown>): unknown[][];
|
|
13
|
+
};
|
|
14
|
+
writeFileXLSX?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;
|
|
15
|
+
writeFile?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;
|
|
16
|
+
read?(data: unknown, options?: Record<string, unknown>): XlsxWorkbook;
|
|
17
|
+
}
|
|
18
|
+
type XlsxEngineModule = XlsxEngine | {
|
|
19
|
+
default: XlsxEngine;
|
|
20
|
+
};
|
|
21
|
+
type XlsxEngineSource = XlsxEngineModule | (() => Promise<XlsxEngineModule>);
|
|
22
|
+
interface ExportGridToXlsxParams extends CsvExportParams {
|
|
23
|
+
fileName?: string;
|
|
24
|
+
sheetName?: string;
|
|
25
|
+
writeOptions?: Record<string, unknown>;
|
|
26
|
+
transformCell?(value: string, rowIndex: number, columnIndex: number): unknown;
|
|
27
|
+
}
|
|
28
|
+
interface ImportGridFromXlsxParams extends ImportCsvOptions {
|
|
29
|
+
sheet?: string | number;
|
|
30
|
+
readOptions?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
/** Uses a lazily supplied workbook engine, keeping it out of the main grid bundle. */
|
|
33
|
+
declare function exportGridToXlsx<TData>(api: GridApi<TData>, source: XlsxEngineSource, params?: ExportGridToXlsxParams): Promise<XlsxWorkbook>;
|
|
34
|
+
/** Reads the selected worksheet through the host engine and reuses core's safe CSV importer. */
|
|
35
|
+
declare function importGridFromXlsx<TData>(api: GridApi<TData>, source: XlsxEngineSource, data: unknown, params?: ImportGridFromXlsxParams): Promise<boolean>;
|
|
36
|
+
declare function createXlsxExtension(source: XlsxEngineSource): {
|
|
37
|
+
export<TData>(api: GridApi<TData>, params?: ExportGridToXlsxParams): Promise<XlsxWorkbook>;
|
|
38
|
+
import<TData>(api: GridApi<TData>, data: unknown, params?: ImportGridFromXlsxParams): Promise<boolean>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { type ExportGridToXlsxParams, type ImportGridFromXlsxParams, type XlsxEngine, type XlsxEngineModule, type XlsxEngineSource, type XlsxWorkbook, createXlsxExtension, exportGridToXlsx, importGridFromXlsx };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{parseCsv as g}from"@agile-team/mach-table";function w(e){return typeof e=="object"&&e!==null&&"utils"in e}async function f(e){let t=typeof e=="function"?await e():e,n=typeof t=="object"&&t!==null&&"default"in t?t.default:void 0,o=w(t)?t:w(n)?n:void 0;if(!o?.utils?.book_new||!o.utils.aoa_to_sheet||!o.utils.book_append_sheet)throw new TypeError("[MachTable] Invalid XLSX engine adapter.");return o}function h(e){return(e??"Data").replace(/[\\/?*\[\]:]/g," ").trim().slice(0,31)||"Data"}function k(e){let n=(e?.trim()||"mach-table.xlsx").replace(/[\\/:*?"<>|\u0000-\u001f]/g," ").trim()||"mach-table.xlsx";return/\.xlsx$/i.test(n)?n:`${n}.xlsx`}function x(e){let t=e??",";if(t.length!==1||/["\r\n]/.test(t))throw new TypeError("[MachTable] XLSX CSV bridge requires a single non-quote separator character.");return t}async function X(e,t,n={}){let o=await f(t),i=x(n.columnSeparator),r=e.getDataAsCsv(n),a=g(r,i).map((d,l)=>d.map((c,m)=>n.transformCell?.(c,l,m)??c)),s=o.utils.book_new(),p=o.utils.aoa_to_sheet(a);o.utils.book_append_sheet(s,p,h(n.sheetName));let u=k(n.fileName);if(o.writeFileXLSX)await o.writeFileXLSX(s,u,n.writeOptions);else if(o.writeFile)await o.writeFile(s,u,n.writeOptions);else throw new TypeError("[MachTable] XLSX engine must expose writeFileXLSX or writeFile.");return s}function b(e,t){let n="";return typeof e=="string"?n=e:typeof e=="number"||typeof e=="boolean"||typeof e=="bigint"?n=e.toString():typeof e=="symbol"?n=e.description??"":typeof e=="function"?n=e.name:e!=null&&(n=JSON.stringify(e)??""),n.includes(t)||/["\n\r]/.test(n)?`"${n.replace(/"/g,'""')}"`:n}async function y(e,t,n,o={}){let i=await f(t);if(!i.read||!i.utils.sheet_to_json)throw new TypeError("[MachTable] XLSX import requires engine.read and utils.sheet_to_json.");let r=i.read(n,o.readOptions);if(!r||!Array.isArray(r.SheetNames)||!r.Sheets||typeof r.Sheets!="object")throw new TypeError("[MachTable] XLSX engine returned an invalid workbook.");let a=typeof o.sheet=="number"?r.SheetNames[o.sheet]:o.sheet??r.SheetNames[0];if(!a||!(a in r.Sheets))throw new RangeError(`[MachTable] Worksheet not found: ${String(o.sheet??0)}.`);let s=i.utils.sheet_to_json(r.Sheets[a],{header:1,raw:!1});if(!Array.isArray(s)||s.some(l=>!Array.isArray(l)))throw new TypeError("[MachTable] XLSX worksheet must resolve to an array of rows.");let p=x(o.separator),u=s.map(l=>l.map(c=>b(c,p)).join(p)).join(`
|
|
2
|
+
`),d={separator:o.separator,mode:o.mode,headerRowIndex:o.headerRowIndex,coerceNumbers:o.coerceNumbers,parseValue:o.parseValue};return e.importCsv(u,d)}function E(e){return{export(t,n){return X(t,e,n)},import(t,n,o){return y(t,e,n,o)}}}export{E as createXlsxExtension,X as exportGridToXlsx,y as importGridFromXlsx};
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n parseCsv,\n type CsvExportParams,\n type GridApi,\n type ImportCsvOptions\n} from \"@agile-team/mach-table\";\n\nexport interface XlsxWorkbook {\n SheetNames: string[];\n Sheets: Record<string, unknown>;\n}\n\nexport interface XlsxEngine {\n utils: {\n book_new(): XlsxWorkbook;\n aoa_to_sheet(rows: readonly (readonly unknown[])[]): unknown;\n book_append_sheet(workbook: XlsxWorkbook, sheet: unknown, name?: string): void;\n sheet_to_json?(sheet: unknown, options?: Record<string, unknown>): unknown[][];\n };\n writeFileXLSX?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;\n writeFile?(workbook: XlsxWorkbook, filename: string, options?: Record<string, unknown>): void | Promise<void>;\n read?(data: unknown, options?: Record<string, unknown>): XlsxWorkbook;\n}\n\nexport type XlsxEngineModule = XlsxEngine | { default: XlsxEngine };\nexport type XlsxEngineSource = XlsxEngineModule | (() => Promise<XlsxEngineModule>);\n\nexport interface ExportGridToXlsxParams extends CsvExportParams {\n fileName?: string;\n sheetName?: string;\n writeOptions?: Record<string, unknown>;\n transformCell?(value: string, rowIndex: number, columnIndex: number): unknown;\n}\n\nexport interface ImportGridFromXlsxParams extends ImportCsvOptions {\n sheet?: string | number;\n readOptions?: Record<string, unknown>;\n}\n\nfunction isEngine(value: unknown): value is XlsxEngine {\n return typeof value === \"object\" && value !== null && \"utils\" in value;\n}\n\nasync function resolveEngine(source: XlsxEngineSource): Promise<XlsxEngine> {\n const loaded = typeof source === \"function\" ? await source() : source;\n const moduleDefault = typeof loaded === \"object\" && loaded !== null && \"default\" in loaded\n ? loaded.default\n : undefined;\n const engine = isEngine(loaded) ? loaded : isEngine(moduleDefault) ? moduleDefault : undefined;\n if (!engine?.utils?.book_new || !engine.utils.aoa_to_sheet || !engine.utils.book_append_sheet) {\n throw new TypeError(\"[MachTable] Invalid XLSX engine adapter.\");\n }\n return engine;\n}\n\nfunction safeSheetName(value: string | undefined): string {\n const name = (value ?? \"Data\").replace(/[\\\\/?*\\[\\]:]/g, \" \").trim().slice(0, 31);\n return name || \"Data\";\n}\n\nfunction safeFileName(value: string | undefined): string {\n const input = value?.trim() || \"mach-table.xlsx\";\n const name = input.replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \" \").trim() || \"mach-table.xlsx\";\n return /\\.xlsx$/i.test(name) ? name : `${name}.xlsx`;\n}\n\nfunction safeSeparator(value: string | undefined): string {\n const separator = value ?? \",\";\n if (separator.length !== 1 || /[\"\\r\\n]/.test(separator)) {\n throw new TypeError(\"[MachTable] XLSX CSV bridge requires a single non-quote separator character.\");\n }\n return separator;\n}\n\n/** Uses a lazily supplied workbook engine, keeping it out of the main grid bundle. */\nexport async function exportGridToXlsx<TData>(\n api: GridApi<TData>,\n source: XlsxEngineSource,\n params: ExportGridToXlsxParams = {}\n): Promise<XlsxWorkbook> {\n const engine = await resolveEngine(source);\n const separator = safeSeparator(params.columnSeparator);\n const csv = api.getDataAsCsv(params);\n const rows = parseCsv(csv, separator).map((row, rowIndex) =>\n row.map((value, columnIndex) => params.transformCell?.(value, rowIndex, columnIndex) ?? value)\n );\n const workbook = engine.utils.book_new();\n const sheet = engine.utils.aoa_to_sheet(rows);\n engine.utils.book_append_sheet(workbook, sheet, safeSheetName(params.sheetName));\n const fileName = safeFileName(params.fileName);\n if (engine.writeFileXLSX) await engine.writeFileXLSX(workbook, fileName, params.writeOptions);\n else if (engine.writeFile) await engine.writeFile(workbook, fileName, params.writeOptions);\n else throw new TypeError(\"[MachTable] XLSX engine must expose writeFileXLSX or writeFile.\");\n return workbook;\n}\n\nfunction csvCell(value: unknown, separator: string): string {\n let text = \"\";\n if (typeof value === \"string\") text = value;\n else if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") text = value.toString();\n else if (typeof value === \"symbol\") text = value.description ?? \"\";\n else if (typeof value === \"function\") text = value.name;\n else if (value != null) text = JSON.stringify(value) ?? \"\";\n return text.includes(separator) || /[\"\\n\\r]/.test(text)\n ? `\"${text.replace(/\"/g, '\"\"')}\"`\n : text;\n}\n\n/** Reads the selected worksheet through the host engine and reuses core's safe CSV importer. */\nexport async function importGridFromXlsx<TData>(\n api: GridApi<TData>,\n source: XlsxEngineSource,\n data: unknown,\n params: ImportGridFromXlsxParams = {}\n): Promise<boolean> {\n const engine = await resolveEngine(source);\n if (!engine.read || !engine.utils.sheet_to_json) {\n throw new TypeError(\"[MachTable] XLSX import requires engine.read and utils.sheet_to_json.\");\n }\n const workbook = engine.read(data, params.readOptions);\n if (!workbook || !Array.isArray(workbook.SheetNames) || !workbook.Sheets || typeof workbook.Sheets !== \"object\") {\n throw new TypeError(\"[MachTable] XLSX engine returned an invalid workbook.\");\n }\n const sheetName = typeof params.sheet === \"number\"\n ? workbook.SheetNames[params.sheet]\n : params.sheet ?? workbook.SheetNames[0];\n if (!sheetName || !(sheetName in workbook.Sheets)) {\n throw new RangeError(`[MachTable] Worksheet not found: ${String(params.sheet ?? 0)}.`);\n }\n const rows = engine.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1, raw: false });\n if (!Array.isArray(rows) || rows.some((row) => !Array.isArray(row))) {\n throw new TypeError(\"[MachTable] XLSX worksheet must resolve to an array of rows.\");\n }\n const separator = safeSeparator(params.separator);\n const csv = rows.map((row) => row.map((value) => csvCell(value, separator)).join(separator)).join(\"\\n\");\n const csvOptions: ImportCsvOptions = {\n separator: params.separator,\n mode: params.mode,\n headerRowIndex: params.headerRowIndex,\n coerceNumbers: params.coerceNumbers,\n parseValue: params.parseValue\n };\n return api.importCsv(csv, csvOptions);\n}\n\nexport function createXlsxExtension(source: XlsxEngineSource) {\n return {\n export<TData>(api: GridApi<TData>, params?: ExportGridToXlsxParams) {\n return exportGridToXlsx(api, source, params);\n },\n import<TData>(api: GridApi<TData>, data: unknown, params?: ImportGridFromXlsxParams) {\n return importGridFromXlsx(api, source, data, params);\n }\n };\n}\n"],"mappings":"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","names":["parseCsv","isEngine","value","resolveEngine","source","loaded","moduleDefault","engine","safeSheetName","safeFileName","name","safeSeparator","separator","exportGridToXlsx","api","params","csv","rows","row","rowIndex","columnIndex","workbook","sheet","fileName","csvCell","text","importGridFromXlsx","data","sheetName","csvOptions","createXlsxExtension"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agile-team/mach-table-xlsx",
|
|
3
|
+
"version": "0.13.0",
|
|
4
|
+
"description": "Optional, engine-agnostic XLSX import and export extension for MachTable",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"data-grid",
|
|
7
|
+
"xlsx",
|
|
8
|
+
"excel",
|
|
9
|
+
"import",
|
|
10
|
+
"export",
|
|
11
|
+
"typescript"
|
|
12
|
+
],
|
|
13
|
+
"author": "ChenyCHENYU (Agile Team)",
|
|
14
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
15
|
+
"homepage": "https://github.com/ChenyCHENYU/MachTable#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/ChenyCHENYU/MachTable/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/ChenyCHENYU/MachTable.git",
|
|
22
|
+
"directory": "packages/xlsx"
|
|
23
|
+
},
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "./dist/index.cjs",
|
|
26
|
+
"module": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./dist/index.d.ts",
|
|
38
|
+
"default": "./dist/index.js"
|
|
39
|
+
},
|
|
40
|
+
"require": {
|
|
41
|
+
"types": "./dist/index.d.cts",
|
|
42
|
+
"default": "./dist/index.cjs"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist"
|
|
48
|
+
],
|
|
49
|
+
"sideEffects": false,
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@agile-team/mach-table": "0.13.0"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsup",
|
|
55
|
+
"typecheck": "tsc --noEmit",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:coverage": "vitest run --coverage"
|
|
58
|
+
}
|
|
59
|
+
}
|