@ifc-lite/flow-nodes 0.2.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 +373 -0
- package/README.md +34 -0
- package/dist/apply-table-node.d.ts +3 -0
- package/dist/apply-table-node.d.ts.map +1 -0
- package/dist/apply-table-node.js +119 -0
- package/dist/apply-table-node.js.map +1 -0
- package/dist/connector-nodes.d.ts +3 -0
- package/dist/connector-nodes.d.ts.map +1 -0
- package/dist/connector-nodes.js +192 -0
- package/dist/connector-nodes.js.map +1 -0
- package/dist/core-nodes.d.ts +3 -0
- package/dist/core-nodes.d.ts.map +1 -0
- package/dist/core-nodes.js +277 -0
- package/dist/core-nodes.js.map +1 -0
- package/dist/csv-nodes.d.ts +3 -0
- package/dist/csv-nodes.d.ts.map +1 -0
- package/dist/csv-nodes.js +111 -0
- package/dist/csv-nodes.js.map +1 -0
- package/dist/csv-parse.d.ts +26 -0
- package/dist/csv-parse.d.ts.map +1 -0
- package/dist/csv-parse.js +83 -0
- package/dist/csv-parse.js.map +1 -0
- package/dist/element-nodes.d.ts +36 -0
- package/dist/element-nodes.d.ts.map +1 -0
- package/dist/element-nodes.js +224 -0
- package/dist/element-nodes.js.map +1 -0
- package/dist/host.d.ts +107 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +94 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/model-nodes.d.ts +3 -0
- package/dist/model-nodes.d.ts.map +1 -0
- package/dist/model-nodes.js +200 -0
- package/dist/model-nodes.js.map +1 -0
- package/dist/script-node.d.ts +4 -0
- package/dist/script-node.d.ts.map +1 -0
- package/dist/script-node.js +140 -0
- package/dist/script-node.js.map +1 -0
- package/dist/strict-cell.d.ts +20 -0
- package/dist/strict-cell.d.ts.map +1 -0
- package/dist/strict-cell.js +33 -0
- package/dist/strict-cell.js.map +1 -0
- package/dist/table-nodes.d.ts +17 -0
- package/dist/table-nodes.d.ts.map +1 -0
- package/dist/table-nodes.js +200 -0
- package/dist/table-nodes.js.map +1 -0
- package/dist/viewer-nodes.d.ts +3 -0
- package/dist/viewer-nodes.d.ts.map +1 -0
- package/dist/viewer-nodes.js +93 -0
- package/dist/viewer-nodes.js.map +1 -0
- package/dist/write-nodes.d.ts +3 -0
- package/dist/write-nodes.d.ts.map +1 -0
- package/dist/write-nodes.js +63 -0
- package/dist/write-nodes.js.map +1 -0
- package/dist/xlsx-io.d.ts +24 -0
- package/dist/xlsx-io.d.ts.map +1 -0
- package/dist/xlsx-io.js +160 -0
- package/dist/xlsx-io.js.map +1 -0
- package/dist/xlsx-nodes.d.ts +3 -0
- package/dist/xlsx-nodes.d.ts.map +1 -0
- package/dist/xlsx-nodes.js +99 -0
- package/dist/xlsx-nodes.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* `table.readXlsx` / `table.writeXlsx` — flow-node wrappers over `xlsx-io.ts`.
|
|
6
|
+
*
|
|
7
|
+
* A flow `Scalar` is `string | number | boolean | null` (no bytes), so a
|
|
8
|
+
* workbook travels an edge as base64 text — the same encoding `bim.files`
|
|
9
|
+
* attachments already use for binary payloads elsewhere in the SDK.
|
|
10
|
+
*/
|
|
11
|
+
import { tableOf } from './table-nodes.js';
|
|
12
|
+
import { readXlsxTable, writeXlsxTable } from './xlsx-io.js';
|
|
13
|
+
import { SCALAR_ITEM, SCALAR_LIST, TABLE_ITEM } from './host.js';
|
|
14
|
+
/**
|
|
15
|
+
* Base64 without `Buffer` or `btoa`/`atob`: this package runs in the browser
|
|
16
|
+
* (`viewer-embed`) as well as headlessly, and neither global is guaranteed —
|
|
17
|
+
* `Buffer` needs a bundler polyfill most Vite configs do not add, and `atob`
|
|
18
|
+
* mangles bytes above 0x7F on some hosts' string-vs-binary handling. A tiny
|
|
19
|
+
* table-driven codec sidesteps both.
|
|
20
|
+
*/
|
|
21
|
+
const BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
22
|
+
function toBase64(bytes) {
|
|
23
|
+
let out = '';
|
|
24
|
+
for (let i = 0; i < bytes.length; i += 3) {
|
|
25
|
+
const b0 = bytes[i];
|
|
26
|
+
const b1 = bytes[i + 1];
|
|
27
|
+
const b2 = bytes[i + 2];
|
|
28
|
+
out += BASE64_CHARS[b0 >> 2];
|
|
29
|
+
out += BASE64_CHARS[((b0 & 0x03) << 4) | (b1 === undefined ? 0 : b1 >> 4)];
|
|
30
|
+
out += b1 === undefined ? '=' : BASE64_CHARS[((b1 & 0x0f) << 2) | (b2 === undefined ? 0 : b2 >> 6)];
|
|
31
|
+
out += b2 === undefined ? '=' : BASE64_CHARS[b2 & 0x3f];
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
function fromBase64(text) {
|
|
36
|
+
const clean = text.replace(/[^A-Za-z0-9+/=]/g, '');
|
|
37
|
+
const len = clean.endsWith('==') ? clean.length - 2 : clean.endsWith('=') ? clean.length - 1 : clean.length;
|
|
38
|
+
const byteLength = Math.floor((len * 6) / 8);
|
|
39
|
+
const out = new Uint8Array(byteLength);
|
|
40
|
+
let bits = 0;
|
|
41
|
+
let value = 0;
|
|
42
|
+
let outIdx = 0;
|
|
43
|
+
for (let i = 0; i < len; i += 1) {
|
|
44
|
+
value = (value << 6) | BASE64_CHARS.indexOf(clean[i]);
|
|
45
|
+
bits += 6;
|
|
46
|
+
if (bits >= 8) {
|
|
47
|
+
bits -= 8;
|
|
48
|
+
out[outIdx] = (value >> bits) & 0xff;
|
|
49
|
+
outIdx += 1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
export const xlsxNodes = [
|
|
55
|
+
{
|
|
56
|
+
type: 'table.readXlsx',
|
|
57
|
+
title: 'Read XLSX',
|
|
58
|
+
category: 'table',
|
|
59
|
+
doc: 'Reads one sheet of a base64-encoded .xlsx workbook into a typed table. A row wider than the header is reported, never dropped.',
|
|
60
|
+
inputs: [{ name: 'data', type: SCALAR_ITEM }],
|
|
61
|
+
outputs: [
|
|
62
|
+
{ name: 'table', type: TABLE_ITEM },
|
|
63
|
+
{ name: 'problems', type: SCALAR_LIST },
|
|
64
|
+
],
|
|
65
|
+
params: [
|
|
66
|
+
{ name: 'sheet', kind: 'string', doc: 'Sheet name; defaults to the first worksheet.' },
|
|
67
|
+
{ name: 'columns', kind: 'json', doc: 'Optional [{ name, type }]; defaults to the header row, all columns typed `string`.' },
|
|
68
|
+
{ name: 'key', kind: 'string' },
|
|
69
|
+
],
|
|
70
|
+
capabilities: [],
|
|
71
|
+
run: async (_ctx, i, p) => {
|
|
72
|
+
const bytes = fromBase64(String(i.data ?? ''));
|
|
73
|
+
const columns = Array.isArray(p.columns) ? p.columns : undefined;
|
|
74
|
+
const { table, problems } = await readXlsxTable(bytes, {
|
|
75
|
+
sheet: typeof p.sheet === 'string' && p.sheet.length > 0 ? p.sheet : undefined,
|
|
76
|
+
columns,
|
|
77
|
+
key: typeof p.key === 'string' && p.key.length > 0 ? p.key : undefined,
|
|
78
|
+
});
|
|
79
|
+
return { table, problems };
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
type: 'table.writeXlsx',
|
|
84
|
+
title: 'Write XLSX',
|
|
85
|
+
category: 'table',
|
|
86
|
+
doc: 'Writes a table to a flat, single-sheet .xlsx workbook, base64-encoded, guarding every string cell against spreadsheet formula injection (CWE-1236).',
|
|
87
|
+
inputs: [{ name: 'table', type: TABLE_ITEM }],
|
|
88
|
+
outputs: [{ name: 'data', type: SCALAR_ITEM }],
|
|
89
|
+
params: [{ name: 'sheet', kind: 'string', default: 'Sheet1' }],
|
|
90
|
+
capabilities: [],
|
|
91
|
+
run: async (_ctx, i, p) => {
|
|
92
|
+
const t = tableOf(i.table);
|
|
93
|
+
const sheet = typeof p.sheet === 'string' && p.sheet.length > 0 ? p.sheet : 'Sheet1';
|
|
94
|
+
const bytes = await writeXlsxTable(t, sheet);
|
|
95
|
+
return { data: toBase64(bytes) };
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
//# sourceMappingURL=xlsx-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xlsx-nodes.js","sourceRoot":"","sources":["../src/xlsx-nodes.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ifc-lite/flow-nodes",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Standard node library for @ifc-lite/flow over the ifc-lite SDK: model reads and writes, tables, viewer, and a sandboxed Script node",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"exceljs": "^4.4.0",
|
|
17
|
+
"@ifc-lite/mutations": "^2.6.0",
|
|
18
|
+
"@ifc-lite/export": "^4.6.0",
|
|
19
|
+
"@ifc-lite/flow": "^0.2.0",
|
|
20
|
+
"@ifc-lite/query": "^2.5.0",
|
|
21
|
+
"@ifc-lite/extensions": "^0.8.0",
|
|
22
|
+
"@ifc-lite/data": "^5.0.0",
|
|
23
|
+
"@ifc-lite/sdk": "^7.0.0",
|
|
24
|
+
"@ifc-lite/sandbox": "^2.6.1"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^26.6.1",
|
|
28
|
+
"typescript": "^6.0.3",
|
|
29
|
+
"vitest": "^5.0.1"
|
|
30
|
+
},
|
|
31
|
+
"license": "MPL-2.0",
|
|
32
|
+
"author": "Louis True",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/LTplus-AG/ifc-lite.git",
|
|
36
|
+
"directory": "packages/flow-nodes"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://ifclite.dev/docs/",
|
|
39
|
+
"bugs": "https://github.com/LTplus-AG/ifc-lite/issues",
|
|
40
|
+
"keywords": [
|
|
41
|
+
"ifc",
|
|
42
|
+
"bim",
|
|
43
|
+
"dataflow",
|
|
44
|
+
"node-graph",
|
|
45
|
+
"nodes"
|
|
46
|
+
],
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"README.md"
|
|
53
|
+
],
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "pnpm exec tsc",
|
|
56
|
+
"typecheck": "node ../../scripts/typecheck-tests.mjs",
|
|
57
|
+
"dev": "pnpm exec tsc --watch",
|
|
58
|
+
"test": "vitest run"
|
|
59
|
+
}
|
|
60
|
+
}
|