@agile-team/mach-table-xlsx 0.19.1 → 0.24.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @agile-team/mach-table-xlsx
2
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.
3
+ MachTable 的可选 XLSX 导入导出扩展。工作簿引擎由宿主动态注入,因此普通表格页面不会下载 Excel 代码。
4
4
 
5
5
  ```bash
6
6
  pnpm add @agile-team/mach-table-xlsx xlsx
@@ -9,18 +9,22 @@ pnpm add @agile-team/mach-table-xlsx xlsx
9
9
  ```ts
10
10
  import { createXlsxExtension } from "@agile-team/mach-table-xlsx";
11
11
 
12
- const xlsx = createXlsxExtension(() => import("xlsx"));
13
- await xlsx.export(api, { fileName: "orders.xlsx", sheetName: "Orders" });
12
+ const excel = createXlsxExtension(() => import("xlsx"));
14
13
 
15
- await xlsx.import(api, await file.arrayBuffer(), {
14
+ await excel.export(api, {
15
+ fileName: "orders.xlsx",
16
+ sheetName: "Orders"
17
+ });
18
+
19
+ await excel.import(api, await file.arrayBuffer(), {
16
20
  sheet: 0,
17
21
  mode: "replace",
18
22
  coerceNumbers: true
19
23
  });
20
24
  ```
21
25
 
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.
26
+ 扩展复用 Core 的选择范围、表头、公式注入防护和安全导入规则。`xlsx` 只是示例引擎,不是本包的捆绑依赖;可注入经过项目批准的兼容引擎。
23
27
 
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)
28
+ 文档:[XLSX 指南](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/xlsx.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md)
25
29
 
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).
30
+ Source-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。
package/dist/index.cjs CHANGED
@@ -1,3 +1,2 @@
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
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 C={};E(C,{createXlsxExtension:()=>G,exportGridToXlsx:()=>h,importGridFromXlsx:()=>k});module.exports=_(C);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),i=e.io.exportCsv(n),a=(0,x.parseCsv)(i,r).map((d,l)=>d.map((c,X)=>n.transformCell?.(c,l,X)??c)),s=t.utils.book_new(),p=t.utils.aoa_to_sheet(a);t.utils.book_append_sheet(s,p,N(n.sheetName));let u=P(n.fileName);if(t.writeFileXLSX)await t.writeFileXLSX(s,u,n.writeOptions);else if(t.writeFile)await t.writeFile(s,u,n.writeOptions);else throw new TypeError("[MachTable] XLSX engine must expose writeFileXLSX or writeFile.");return s}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 i=r.read(n,t.readOptions);if(!i||!Array.isArray(i.SheetNames)||!i.Sheets||typeof i.Sheets!="object")throw new TypeError("[MachTable] XLSX engine returned an invalid workbook.");let a=typeof t.sheet=="number"?i.SheetNames[t.sheet]:t.sheet??i.SheetNames[0];if(!a||!(a in i.Sheets))throw new RangeError(`[MachTable] Worksheet not found: ${String(t.sheet??0)}.`);let s=r.utils.sheet_to_json(i.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=g(t.separator),u=s.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.io.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});
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
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
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),s=x(n.columnSeparator),r=e.io.exportCsv(n),a=g(r,s).map((d,l)=>d.map((c,m)=>n.transformCell?.(c,l,m)??c)),i=o.utils.book_new(),p=o.utils.aoa_to_sheet(a);o.utils.book_append_sheet(i,p,h(n.sheetName));let u=k(n.fileName);if(o.writeFileXLSX)await o.writeFileXLSX(i,u,n.writeOptions);else if(o.writeFile)await o.writeFile(i,u,n.writeOptions);else throw new TypeError("[MachTable] XLSX engine must expose writeFileXLSX or writeFile.");return i}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 s=await f(t);if(!s.read||!s.utils.sheet_to_json)throw new TypeError("[MachTable] XLSX import requires engine.read and utils.sheet_to_json.");let r=s.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 i=s.utils.sheet_to_json(r.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=x(o.separator),u=i.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.io.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-table-xlsx",
3
- "version": "0.19.1",
3
+ "version": "0.24.0",
4
4
  "description": "Optional, engine-agnostic XLSX import and export extension for MachTable",
5
5
  "keywords": [
6
6
  "data-grid",
@@ -48,7 +48,7 @@
48
48
  ],
49
49
  "sideEffects": false,
50
50
  "dependencies": {
51
- "@agile-team/mach-table": "0.19.1"
51
+ "@agile-team/mach-table": "0.24.0"
52
52
  },
53
53
  "scripts": {
54
54
  "build": "tsup",
@@ -56,5 +56,5 @@
56
56
  "test": "vitest run",
57
57
  "test:coverage": "vitest run --coverage"
58
58
  },
59
- "readme": "# @agile-team/mach-table-xlsx\n\nOptional XLSX import/export for MachTable. The workbook engine is injected and can be dynamically imported, so normal table pages do not download Excel code.\n\n```bash\npnpm add @agile-team/mach-table-xlsx xlsx\n```\n\n```ts\nimport { createXlsxExtension } from \"@agile-team/mach-table-xlsx\";\n\nconst xlsx = createXlsxExtension(() => import(\"xlsx\"));\nawait xlsx.export(api, { fileName: \"orders.xlsx\", sheetName: \"Orders\" });\n\nawait xlsx.import(api, await file.arrayBuffer(), {\n sheet: 0,\n mode: \"replace\",\n coerceNumbers: true\n});\n```\n\nThe 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.\n\nDocumentation: [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)\n\nSource-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).\n"
59
+ "readme": "# @agile-team/mach-table-xlsx\n\nMachTable 的可选 XLSX 导入导出扩展。工作簿引擎由宿主动态注入,因此普通表格页面不会下载 Excel 代码。\n\n```bash\npnpm add @agile-team/mach-table-xlsx xlsx\n```\n\n```ts\nimport { createXlsxExtension } from \"@agile-team/mach-table-xlsx\";\n\nconst excel = createXlsxExtension(() => import(\"xlsx\"));\n\nawait excel.export(api, {\n fileName: \"orders.xlsx\",\n sheetName: \"Orders\"\n});\n\nawait excel.import(api, await file.arrayBuffer(), {\n sheet: 0,\n mode: \"replace\",\n coerceNumbers: true\n});\n```\n\n扩展复用 Core 的选择范围、表头、公式注入防护和安全导入规则。`xlsx` 只是示例引擎,不是本包的捆绑依赖;可注入经过项目批准的兼容引擎。\n\n文档:[XLSX 指南](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/xlsx.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
60
60
  }
@@ -1 +0,0 @@
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.js.map DELETED
@@ -1 +0,0 @@
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"]}