@frictionless-ts/table 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/assets/geojson.json +216 -0
- package/build/assets/topojson.json +259 -0
- package/build/data/index.d.ts +2 -0
- package/build/data/index.js +2 -0
- package/build/data/record.d.ts +4 -0
- package/build/data/record.js +84 -0
- package/build/data/record.spec.d.ts +1 -0
- package/build/data/record.spec.js +269 -0
- package/build/dialect/Options.d.ts +3 -0
- package/build/dialect/Options.js +3 -0
- package/build/dialect/index.d.ts +2 -0
- package/build/dialect/index.js +2 -0
- package/build/dialect/infer.d.ts +4 -0
- package/build/dialect/infer.js +2 -0
- package/build/field/Field.d.ts +5 -0
- package/build/field/Field.js +2 -0
- package/build/field/Mapping.d.ts +11 -0
- package/build/field/Mapping.js +2 -0
- package/build/field/checks/enum.d.ts +8 -0
- package/build/field/checks/enum.js +71 -0
- package/build/field/checks/enum.spec.d.ts +1 -0
- package/build/field/checks/enum.spec.js +327 -0
- package/build/field/checks/maxLength.d.ts +7 -0
- package/build/field/checks/maxLength.js +17 -0
- package/build/field/checks/maxLength.spec.d.ts +1 -0
- package/build/field/checks/maxLength.spec.js +49 -0
- package/build/field/checks/maximum.d.ts +11 -0
- package/build/field/checks/maximum.js +73 -0
- package/build/field/checks/maximum.spec.d.ts +1 -0
- package/build/field/checks/maximum.spec.js +476 -0
- package/build/field/checks/minLength.d.ts +7 -0
- package/build/field/checks/minLength.js +17 -0
- package/build/field/checks/minLength.spec.d.ts +1 -0
- package/build/field/checks/minLength.spec.js +56 -0
- package/build/field/checks/minimum.d.ts +11 -0
- package/build/field/checks/minimum.js +73 -0
- package/build/field/checks/minimum.spec.d.ts +1 -0
- package/build/field/checks/minimum.spec.js +476 -0
- package/build/field/checks/pattern.d.ts +7 -0
- package/build/field/checks/pattern.js +17 -0
- package/build/field/checks/pattern.spec.d.ts +1 -0
- package/build/field/checks/pattern.spec.js +66 -0
- package/build/field/checks/required.d.ts +7 -0
- package/build/field/checks/required.js +14 -0
- package/build/field/checks/required.spec.d.ts +1 -0
- package/build/field/checks/required.spec.js +24 -0
- package/build/field/checks/type.d.ts +7 -0
- package/build/field/checks/type.js +14 -0
- package/build/field/checks/type.spec.d.ts +1 -0
- package/build/field/checks/type.spec.js +255 -0
- package/build/field/checks/unique.d.ts +7 -0
- package/build/field/checks/unique.js +17 -0
- package/build/field/checks/unique.spec.d.ts +1 -0
- package/build/field/checks/unique.spec.js +97 -0
- package/build/field/denormalize.d.ts +6 -0
- package/build/field/denormalize.js +13 -0
- package/build/field/desubstitute.d.ts +3 -0
- package/build/field/desubstitute.js +13 -0
- package/build/field/index.d.ts +8 -0
- package/build/field/index.js +6 -0
- package/build/field/inspect.d.ts +6 -0
- package/build/field/inspect.js +131 -0
- package/build/field/inspect.spec.d.ts +1 -0
- package/build/field/inspect.spec.js +385 -0
- package/build/field/narrow.d.ts +3 -0
- package/build/field/narrow.js +14 -0
- package/build/field/narrow.spec.d.ts +1 -0
- package/build/field/narrow.spec.js +52 -0
- package/build/field/normalize.d.ts +5 -0
- package/build/field/normalize.js +14 -0
- package/build/field/parse.d.ts +3 -0
- package/build/field/parse.js +47 -0
- package/build/field/parse.spec.d.ts +1 -0
- package/build/field/parse.spec.js +33 -0
- package/build/field/stringify.d.ts +3 -0
- package/build/field/stringify.js +43 -0
- package/build/field/stringify.spec.d.ts +1 -0
- package/build/field/stringify.spec.js +41 -0
- package/build/field/substitute.d.ts +3 -0
- package/build/field/substitute.js +16 -0
- package/build/field/types/array.d.ts +3 -0
- package/build/field/types/array.js +5 -0
- package/build/field/types/array.spec.d.ts +1 -0
- package/build/field/types/array.spec.js +358 -0
- package/build/field/types/boolean.d.ts +4 -0
- package/build/field/types/boolean.js +31 -0
- package/build/field/types/boolean.spec.d.ts +1 -0
- package/build/field/types/boolean.spec.js +76 -0
- package/build/field/types/date.d.ts +4 -0
- package/build/field/types/date.js +14 -0
- package/build/field/types/date.spec.d.ts +1 -0
- package/build/field/types/date.spec.js +52 -0
- package/build/field/types/datetime.d.ts +4 -0
- package/build/field/types/datetime.js +15 -0
- package/build/field/types/datetime.spec.d.ts +1 -0
- package/build/field/types/datetime.spec.js +62 -0
- package/build/field/types/duration.d.ts +4 -0
- package/build/field/types/duration.js +9 -0
- package/build/field/types/duration.spec.d.ts +1 -0
- package/build/field/types/duration.spec.js +37 -0
- package/build/field/types/geojson.d.ts +3 -0
- package/build/field/types/geojson.js +9 -0
- package/build/field/types/geojson.spec.d.ts +1 -0
- package/build/field/types/geojson.spec.js +522 -0
- package/build/field/types/geopoint.d.ts +4 -0
- package/build/field/types/geopoint.js +59 -0
- package/build/field/types/geopoint.spec.d.ts +1 -0
- package/build/field/types/geopoint.spec.js +173 -0
- package/build/field/types/integer.d.ts +4 -0
- package/build/field/types/integer.js +41 -0
- package/build/field/types/integer.spec.d.ts +1 -0
- package/build/field/types/integer.spec.js +102 -0
- package/build/field/types/json.d.ts +6 -0
- package/build/field/types/json.js +68 -0
- package/build/field/types/list.d.ts +4 -0
- package/build/field/types/list.js +30 -0
- package/build/field/types/list.spec.d.ts +1 -0
- package/build/field/types/list.spec.js +230 -0
- package/build/field/types/number.d.ts +4 -0
- package/build/field/types/number.js +50 -0
- package/build/field/types/number.spec.d.ts +1 -0
- package/build/field/types/number.spec.js +101 -0
- package/build/field/types/object.d.ts +3 -0
- package/build/field/types/object.js +5 -0
- package/build/field/types/object.spec.d.ts +1 -0
- package/build/field/types/object.spec.js +393 -0
- package/build/field/types/string.d.ts +4 -0
- package/build/field/types/string.js +32 -0
- package/build/field/types/string.spec.d.ts +1 -0
- package/build/field/types/string.spec.js +162 -0
- package/build/field/types/time.d.ts +4 -0
- package/build/field/types/time.js +18 -0
- package/build/field/types/time.spec.d.ts +1 -0
- package/build/field/types/time.spec.js +53 -0
- package/build/field/types/year.d.ts +4 -0
- package/build/field/types/year.js +16 -0
- package/build/field/types/year.spec.d.ts +1 -0
- package/build/field/types/year.spec.js +50 -0
- package/build/field/types/yearmonth.d.ts +4 -0
- package/build/field/types/yearmonth.js +14 -0
- package/build/field/types/yearmonth.spec.d.ts +1 -0
- package/build/field/types/yearmonth.spec.js +36 -0
- package/build/helpers.d.ts +4 -0
- package/build/helpers.js +12 -0
- package/build/index.d.ts +40 -0
- package/build/index.js +27 -0
- package/build/plugin.d.ts +27 -0
- package/build/plugin.js +2 -0
- package/build/plugins/arrow/index.d.ts +2 -0
- package/build/plugins/arrow/index.js +3 -0
- package/build/plugins/arrow/plugin.d.ts +7 -0
- package/build/plugins/arrow/plugin.js +22 -0
- package/build/plugins/arrow/plugin.spec.d.ts +1 -0
- package/build/plugins/arrow/plugin.spec.js +161 -0
- package/build/plugins/arrow/table/index.d.ts +2 -0
- package/build/plugins/arrow/table/index.js +3 -0
- package/build/plugins/arrow/table/load.d.ts +4 -0
- package/build/plugins/arrow/table/load.js +23 -0
- package/build/plugins/arrow/table/load.spec.d.ts +1 -0
- package/build/plugins/arrow/table/load.spec.js +56 -0
- package/build/plugins/arrow/table/save.d.ts +3 -0
- package/build/plugins/arrow/table/save.js +31 -0
- package/build/plugins/arrow/table/save.spec.d.ts +1 -0
- package/build/plugins/arrow/table/save.spec.js +81 -0
- package/build/plugins/csv/dialect/index.d.ts +1 -0
- package/build/plugins/csv/dialect/index.js +2 -0
- package/build/plugins/csv/dialect/infer.d.ts +4 -0
- package/build/plugins/csv/dialect/infer.js +44 -0
- package/build/plugins/csv/dialect/infer.spec.d.ts +1 -0
- package/build/plugins/csv/dialect/infer.spec.js +54 -0
- package/build/plugins/csv/index.d.ts +2 -0
- package/build/plugins/csv/index.js +3 -0
- package/build/plugins/csv/plugin.d.ts +8 -0
- package/build/plugins/csv/plugin.js +22 -0
- package/build/plugins/csv/plugin.spec.d.ts +1 -0
- package/build/plugins/csv/plugin.spec.js +161 -0
- package/build/plugins/csv/table/index.d.ts +2 -0
- package/build/plugins/csv/table/index.js +3 -0
- package/build/plugins/csv/table/load.d.ts +6 -0
- package/build/plugins/csv/table/load.js +86 -0
- package/build/plugins/csv/table/load.spec.d.ts +1 -0
- package/build/plugins/csv/table/load.spec.js +293 -0
- package/build/plugins/csv/table/save.d.ts +5 -0
- package/build/plugins/csv/table/save.js +29 -0
- package/build/plugins/csv/table/save.spec.d.ts +1 -0
- package/build/plugins/csv/table/save.spec.js +137 -0
- package/build/plugins/inline/index.d.ts +2 -0
- package/build/plugins/inline/index.js +3 -0
- package/build/plugins/inline/plugin.d.ts +7 -0
- package/build/plugins/inline/plugin.js +14 -0
- package/build/plugins/inline/table/index.d.ts +1 -0
- package/build/plugins/inline/table/index.js +2 -0
- package/build/plugins/inline/table/load.d.ts +6 -0
- package/build/plugins/inline/table/load.js +24 -0
- package/build/plugins/inline/table/load.spec.d.ts +1 -0
- package/build/plugins/inline/table/load.spec.js +160 -0
- package/build/plugins/json/buffer/decode.d.ts +4 -0
- package/build/plugins/json/buffer/decode.js +10 -0
- package/build/plugins/json/buffer/encode.d.ts +4 -0
- package/build/plugins/json/buffer/encode.js +8 -0
- package/build/plugins/json/buffer/index.d.ts +2 -0
- package/build/plugins/json/buffer/index.js +3 -0
- package/build/plugins/json/index.d.ts +2 -0
- package/build/plugins/json/index.js +3 -0
- package/build/plugins/json/plugin.d.ts +7 -0
- package/build/plugins/json/plugin.js +25 -0
- package/build/plugins/json/plugin.spec.d.ts +1 -0
- package/build/plugins/json/plugin.spec.js +163 -0
- package/build/plugins/json/table/index.d.ts +2 -0
- package/build/plugins/json/table/index.js +3 -0
- package/build/plugins/json/table/load.d.ts +6 -0
- package/build/plugins/json/table/load.js +55 -0
- package/build/plugins/json/table/load.spec.d.ts +1 -0
- package/build/plugins/json/table/load.spec.js +200 -0
- package/build/plugins/json/table/parse.d.ts +3 -0
- package/build/plugins/json/table/parse.js +6 -0
- package/build/plugins/json/table/save.d.ts +5 -0
- package/build/plugins/json/table/save.js +45 -0
- package/build/plugins/json/table/save.spec.d.ts +1 -0
- package/build/plugins/json/table/save.spec.js +147 -0
- package/build/plugins/ods/index.d.ts +2 -0
- package/build/plugins/ods/index.js +3 -0
- package/build/plugins/ods/plugin.d.ts +7 -0
- package/build/plugins/ods/plugin.js +23 -0
- package/build/plugins/ods/plugin.spec.d.ts +1 -0
- package/build/plugins/ods/plugin.spec.js +142 -0
- package/build/plugins/ods/table/index.d.ts +2 -0
- package/build/plugins/ods/table/index.js +3 -0
- package/build/plugins/ods/table/load.d.ts +4 -0
- package/build/plugins/ods/table/load.js +41 -0
- package/build/plugins/ods/table/load.spec.d.ts +1 -0
- package/build/plugins/ods/table/load.spec.js +167 -0
- package/build/plugins/ods/table/save.d.ts +3 -0
- package/build/plugins/ods/table/save.js +26 -0
- package/build/plugins/ods/table/save.spec.d.ts +1 -0
- package/build/plugins/ods/table/save.spec.js +75 -0
- package/build/plugins/ods/table/test.d.ts +5 -0
- package/build/plugins/ods/table/test.js +23 -0
- package/build/plugins/parquet/index.d.ts +2 -0
- package/build/plugins/parquet/index.js +3 -0
- package/build/plugins/parquet/plugin.d.ts +7 -0
- package/build/plugins/parquet/plugin.js +23 -0
- package/build/plugins/parquet/plugin.spec.d.ts +1 -0
- package/build/plugins/parquet/plugin.spec.js +142 -0
- package/build/plugins/parquet/table/index.d.ts +2 -0
- package/build/plugins/parquet/table/index.js +3 -0
- package/build/plugins/parquet/table/load.d.ts +4 -0
- package/build/plugins/parquet/table/load.js +23 -0
- package/build/plugins/parquet/table/load.spec.d.ts +1 -0
- package/build/plugins/parquet/table/load.spec.js +56 -0
- package/build/plugins/parquet/table/save.d.ts +3 -0
- package/build/plugins/parquet/table/save.js +32 -0
- package/build/plugins/parquet/table/save.spec.d.ts +1 -0
- package/build/plugins/parquet/table/save.spec.js +81 -0
- package/build/plugins/xlxs/index.d.ts +2 -0
- package/build/plugins/xlxs/index.js +3 -0
- package/build/plugins/xlxs/plugin.d.ts +7 -0
- package/build/plugins/xlxs/plugin.js +23 -0
- package/build/plugins/xlxs/plugin.spec.d.ts +1 -0
- package/build/plugins/xlxs/plugin.spec.js +142 -0
- package/build/plugins/xlxs/table/index.d.ts +2 -0
- package/build/plugins/xlxs/table/index.js +3 -0
- package/build/plugins/xlxs/table/load.d.ts +4 -0
- package/build/plugins/xlxs/table/load.js +43 -0
- package/build/plugins/xlxs/table/load.spec.d.ts +1 -0
- package/build/plugins/xlxs/table/load.spec.js +167 -0
- package/build/plugins/xlxs/table/save.d.ts +3 -0
- package/build/plugins/xlxs/table/save.js +28 -0
- package/build/plugins/xlxs/table/save.spec.d.ts +1 -0
- package/build/plugins/xlxs/table/save.spec.js +75 -0
- package/build/plugins/xlxs/table/test.d.ts +5 -0
- package/build/plugins/xlxs/table/test.js +23 -0
- package/build/schema/Mapping.d.ts +6 -0
- package/build/schema/Mapping.js +2 -0
- package/build/schema/Options.d.ts +22 -0
- package/build/schema/Options.js +2 -0
- package/build/schema/Schema.d.ts +4 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/helpers.d.ts +3 -0
- package/build/schema/helpers.js +6 -0
- package/build/schema/index.d.ts +8 -0
- package/build/schema/index.js +5 -0
- package/build/schema/infer.d.ts +13 -0
- package/build/schema/infer.js +199 -0
- package/build/schema/infer.spec.d.ts +1 -0
- package/build/schema/infer.spec.js +304 -0
- package/build/schema/match.d.ts +6 -0
- package/build/schema/match.js +8 -0
- package/build/table/Frame.d.ts +2 -0
- package/build/table/Frame.js +2 -0
- package/build/table/Table.d.ts +2 -0
- package/build/table/Table.js +2 -0
- package/build/table/checks/unique.d.ts +7 -0
- package/build/table/checks/unique.js +23 -0
- package/build/table/checks/unique.spec.d.ts +1 -0
- package/build/table/checks/unique.spec.js +187 -0
- package/build/table/denormalize.d.ts +6 -0
- package/build/table/denormalize.js +15 -0
- package/build/table/helpers.d.ts +19 -0
- package/build/table/helpers.js +62 -0
- package/build/table/helpers.spec.d.ts +1 -0
- package/build/table/helpers.spec.js +352 -0
- package/build/table/index.d.ts +9 -0
- package/build/table/index.js +8 -0
- package/build/table/inspect.d.ts +8 -0
- package/build/table/inspect.js +165 -0
- package/build/table/inspect.spec.d.ts +1 -0
- package/build/table/inspect.spec.js +335 -0
- package/build/table/normalize.d.ts +6 -0
- package/build/table/normalize.js +27 -0
- package/build/table/normalize.spec.d.ts +1 -0
- package/build/table/normalize.spec.js +222 -0
- package/build/table/query.d.ts +3 -0
- package/build/table/query.js +6 -0
- package/package.json +45 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Resource } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { LoadTableOptions, SaveTableOptions, TablePlugin } from "../../plugin.ts";
|
|
3
|
+
import type { Table } from "../../table/index.ts";
|
|
4
|
+
export declare class ParquetPlugin implements TablePlugin {
|
|
5
|
+
loadTable(resource: Partial<Resource>, options?: LoadTableOptions): Promise<import("nodejs-polars").LazyDataFrame<any> | undefined>;
|
|
6
|
+
saveTable(table: Table, options: SaveTableOptions): Promise<string | undefined>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { inferFormat } from "@frictionless-ts/metadata";
|
|
2
|
+
import { loadParquetTable } from "./table/index.js";
|
|
3
|
+
import { saveParquetTable } from "./table/index.js";
|
|
4
|
+
export class ParquetPlugin {
|
|
5
|
+
async loadTable(resource, options) {
|
|
6
|
+
const isParquet = getIsParquet(resource);
|
|
7
|
+
if (!isParquet)
|
|
8
|
+
return undefined;
|
|
9
|
+
return await loadParquetTable(resource, options);
|
|
10
|
+
}
|
|
11
|
+
async saveTable(table, options) {
|
|
12
|
+
const { path, format } = options;
|
|
13
|
+
const isParquet = getIsParquet({ path, format });
|
|
14
|
+
if (!isParquet)
|
|
15
|
+
return undefined;
|
|
16
|
+
return await saveParquetTable(table, options);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function getIsParquet(resource) {
|
|
20
|
+
const format = inferFormat(resource);
|
|
21
|
+
return format === "parquet";
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy9wYXJxdWV0L3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFPdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbkQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUEyQixFQUFFLE9BQTBCO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRWhDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBWSxFQUFFLE9BQXlCO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBRWhDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ2hELElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFaEMsT0FBTyxNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUEyQjtJQUMvQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEMsT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFBO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgaW5mZXJGb3JtYXQgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7XG4gIExvYWRUYWJsZU9wdGlvbnMsXG4gIFNhdmVUYWJsZU9wdGlvbnMsXG4gIFRhYmxlUGx1Z2luLFxufSBmcm9tIFwiLi4vLi4vcGx1Z2luLnRzXCJcbmltcG9ydCB0eXBlIHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuaW1wb3J0IHsgbG9hZFBhcnF1ZXRUYWJsZSB9IGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcbmltcG9ydCB7IHNhdmVQYXJxdWV0VGFibGUgfSBmcm9tIFwiLi90YWJsZS9pbmRleC50c1wiXG5cbmV4cG9ydCBjbGFzcyBQYXJxdWV0UGx1Z2luIGltcGxlbWVudHMgVGFibGVQbHVnaW4ge1xuICBhc3luYyBsb2FkVGFibGUocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+LCBvcHRpb25zPzogTG9hZFRhYmxlT3B0aW9ucykge1xuICAgIGNvbnN0IGlzUGFycXVldCA9IGdldElzUGFycXVldChyZXNvdXJjZSlcbiAgICBpZiAoIWlzUGFycXVldCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIGF3YWl0IGxvYWRQYXJxdWV0VGFibGUocmVzb3VyY2UsIG9wdGlvbnMpXG4gIH1cblxuICBhc3luYyBzYXZlVGFibGUodGFibGU6IFRhYmxlLCBvcHRpb25zOiBTYXZlVGFibGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBwYXRoLCBmb3JtYXQgfSA9IG9wdGlvbnNcblxuICAgIGNvbnN0IGlzUGFycXVldCA9IGdldElzUGFycXVldCh7IHBhdGgsIGZvcm1hdCB9KVxuICAgIGlmICghaXNQYXJxdWV0KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gYXdhaXQgc2F2ZVBhcnF1ZXRUYWJsZSh0YWJsZSwgb3B0aW9ucylcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJc1BhcnF1ZXQocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+KSB7XG4gIGNvbnN0IGZvcm1hdCA9IGluZmVyRm9ybWF0KHJlc291cmNlKVxuICByZXR1cm4gZm9ybWF0ID09PSBcInBhcnF1ZXRcIlxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { ParquetPlugin } from "./plugin.js";
|
|
4
|
+
import * as loadModule from "./table/load.js";
|
|
5
|
+
import * as saveModule from "./table/save.js";
|
|
6
|
+
vi.mock("./table/load.ts", () => ({
|
|
7
|
+
loadParquetTable: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
vi.mock("./table/save.ts", () => ({
|
|
10
|
+
saveParquetTable: vi.fn(),
|
|
11
|
+
}));
|
|
12
|
+
describe("ParquetPlugin", () => {
|
|
13
|
+
let plugin;
|
|
14
|
+
let mockLoadParquetTable;
|
|
15
|
+
let mockSaveParquetTable;
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
plugin = new ParquetPlugin();
|
|
18
|
+
mockLoadParquetTable = vi.mocked(loadModule.loadParquetTable);
|
|
19
|
+
mockSaveParquetTable = vi.mocked(saveModule.saveParquetTable);
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
});
|
|
22
|
+
describe("loadTable", () => {
|
|
23
|
+
it("should load table from parquet file", async () => {
|
|
24
|
+
const resource = {
|
|
25
|
+
path: "test.parquet",
|
|
26
|
+
};
|
|
27
|
+
const mockTable = pl.DataFrame().lazy();
|
|
28
|
+
mockLoadParquetTable.mockResolvedValue(mockTable);
|
|
29
|
+
const result = await plugin.loadTable(resource);
|
|
30
|
+
expect(mockLoadParquetTable).toHaveBeenCalledWith(resource, undefined);
|
|
31
|
+
expect(result).toEqual(mockTable);
|
|
32
|
+
});
|
|
33
|
+
it("should return undefined for non-parquet files", async () => {
|
|
34
|
+
const resource = {
|
|
35
|
+
path: "test.csv",
|
|
36
|
+
};
|
|
37
|
+
const result = await plugin.loadTable(resource);
|
|
38
|
+
expect(mockLoadParquetTable).not.toHaveBeenCalled();
|
|
39
|
+
expect(result).toBeUndefined();
|
|
40
|
+
});
|
|
41
|
+
it("should handle explicit format specification", async () => {
|
|
42
|
+
const resource = {
|
|
43
|
+
path: "test.txt",
|
|
44
|
+
format: "parquet",
|
|
45
|
+
};
|
|
46
|
+
const mockTable = pl.DataFrame().lazy();
|
|
47
|
+
mockLoadParquetTable.mockResolvedValue(mockTable);
|
|
48
|
+
const result = await plugin.loadTable(resource);
|
|
49
|
+
expect(mockLoadParquetTable).toHaveBeenCalledWith(resource, undefined);
|
|
50
|
+
expect(result).toEqual(mockTable);
|
|
51
|
+
});
|
|
52
|
+
it("should pass through load options", async () => {
|
|
53
|
+
const resource = {
|
|
54
|
+
path: "test.parquet",
|
|
55
|
+
};
|
|
56
|
+
const options = { denormalized: true };
|
|
57
|
+
const mockTable = pl.DataFrame().lazy();
|
|
58
|
+
mockLoadParquetTable.mockResolvedValue(mockTable);
|
|
59
|
+
await plugin.loadTable(resource, options);
|
|
60
|
+
expect(mockLoadParquetTable).toHaveBeenCalledWith(resource, options);
|
|
61
|
+
});
|
|
62
|
+
it("should handle paths with directories", async () => {
|
|
63
|
+
const resource = {
|
|
64
|
+
path: "/path/to/data.parquet",
|
|
65
|
+
};
|
|
66
|
+
const mockTable = pl.DataFrame().lazy();
|
|
67
|
+
mockLoadParquetTable.mockResolvedValue(mockTable);
|
|
68
|
+
await plugin.loadTable(resource);
|
|
69
|
+
expect(mockLoadParquetTable).toHaveBeenCalledWith(resource, undefined);
|
|
70
|
+
});
|
|
71
|
+
it("should return undefined for arrow files", async () => {
|
|
72
|
+
const resource = {
|
|
73
|
+
path: "test.arrow",
|
|
74
|
+
};
|
|
75
|
+
const result = await plugin.loadTable(resource);
|
|
76
|
+
expect(mockLoadParquetTable).not.toHaveBeenCalled();
|
|
77
|
+
expect(result).toBeUndefined();
|
|
78
|
+
});
|
|
79
|
+
it("should return undefined for json files", async () => {
|
|
80
|
+
const resource = {
|
|
81
|
+
path: "test.json",
|
|
82
|
+
};
|
|
83
|
+
const result = await plugin.loadTable(resource);
|
|
84
|
+
expect(mockLoadParquetTable).not.toHaveBeenCalled();
|
|
85
|
+
expect(result).toBeUndefined();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe("saveTable", () => {
|
|
89
|
+
it("should save table to parquet file", async () => {
|
|
90
|
+
const table = pl.DataFrame().lazy();
|
|
91
|
+
const options = { path: "output.parquet" };
|
|
92
|
+
mockSaveParquetTable.mockResolvedValue("output.parquet");
|
|
93
|
+
const result = await plugin.saveTable(table, options);
|
|
94
|
+
expect(mockSaveParquetTable).toHaveBeenCalledWith(table, options);
|
|
95
|
+
expect(result).toBe("output.parquet");
|
|
96
|
+
});
|
|
97
|
+
it("should return undefined for non-parquet files", async () => {
|
|
98
|
+
const table = pl.DataFrame().lazy();
|
|
99
|
+
const options = { path: "output.csv" };
|
|
100
|
+
const result = await plugin.saveTable(table, options);
|
|
101
|
+
expect(mockSaveParquetTable).not.toHaveBeenCalled();
|
|
102
|
+
expect(result).toBeUndefined();
|
|
103
|
+
});
|
|
104
|
+
it("should handle explicit format specification", async () => {
|
|
105
|
+
const table = pl.DataFrame().lazy();
|
|
106
|
+
const options = { path: "output.txt", format: "parquet" };
|
|
107
|
+
mockSaveParquetTable.mockResolvedValue("output.txt");
|
|
108
|
+
const result = await plugin.saveTable(table, options);
|
|
109
|
+
expect(mockSaveParquetTable).toHaveBeenCalledWith(table, options);
|
|
110
|
+
expect(result).toBe("output.txt");
|
|
111
|
+
});
|
|
112
|
+
it("should handle paths with directories", async () => {
|
|
113
|
+
const table = pl.DataFrame().lazy();
|
|
114
|
+
const options = { path: "/path/to/output.parquet" };
|
|
115
|
+
mockSaveParquetTable.mockResolvedValue("/path/to/output.parquet");
|
|
116
|
+
await plugin.saveTable(table, options);
|
|
117
|
+
expect(mockSaveParquetTable).toHaveBeenCalledWith(table, options);
|
|
118
|
+
});
|
|
119
|
+
it("should return undefined for files without extension", async () => {
|
|
120
|
+
const table = pl.DataFrame().lazy();
|
|
121
|
+
const options = { path: "output" };
|
|
122
|
+
const result = await plugin.saveTable(table, options);
|
|
123
|
+
expect(mockSaveParquetTable).not.toHaveBeenCalled();
|
|
124
|
+
expect(result).toBeUndefined();
|
|
125
|
+
});
|
|
126
|
+
it("should return undefined for arrow files", async () => {
|
|
127
|
+
const table = pl.DataFrame().lazy();
|
|
128
|
+
const options = { path: "output.arrow" };
|
|
129
|
+
const result = await plugin.saveTable(table, options);
|
|
130
|
+
expect(mockSaveParquetTable).not.toHaveBeenCalled();
|
|
131
|
+
expect(result).toBeUndefined();
|
|
132
|
+
});
|
|
133
|
+
it("should return undefined for json files", async () => {
|
|
134
|
+
const table = pl.DataFrame().lazy();
|
|
135
|
+
const options = { path: "output.json" };
|
|
136
|
+
const result = await plugin.saveTable(table, options);
|
|
137
|
+
expect(mockSaveParquetTable).not.toHaveBeenCalled();
|
|
138
|
+
expect(result).toBeUndefined();
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL3BhcnF1ZXQvcGx1Z2luLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUJBQWlCLENBQUE7QUFFN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDMUIsQ0FBQyxDQUFDLENBQUE7QUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUMxQixDQUFDLENBQUMsQ0FBQTtBQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLElBQUksTUFBcUIsQ0FBQTtJQUN6QixJQUFJLG9CQUE4QyxDQUFBO0lBQ2xELElBQUksb0JBQThDLENBQUE7SUFFbEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQzVCLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDN0Qsb0JBQW9CLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUM3RCxFQUFF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Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDbkMsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUE7WUFFeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVyRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ25DLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFBO1lBRXZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFFckQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUE7WUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgKiBhcyBwbCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IFBhcnF1ZXRQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW4udHNcIlxuaW1wb3J0ICogYXMgbG9hZE1vZHVsZSBmcm9tIFwiLi90YWJsZS9sb2FkLnRzXCJcbmltcG9ydCAqIGFzIHNhdmVNb2R1bGUgZnJvbSBcIi4vdGFibGUvc2F2ZS50c1wiXG5cbnZpLm1vY2soXCIuL3RhYmxlL2xvYWQudHNcIiwgKCkgPT4gKHtcbiAgbG9hZFBhcnF1ZXRUYWJsZTogdmkuZm4oKSxcbn0pKVxuXG52aS5tb2NrKFwiLi90YWJsZS9zYXZlLnRzXCIsICgpID0+ICh7XG4gIHNhdmVQYXJxdWV0VGFibGU6IHZpLmZuKCksXG59KSlcblxuZGVzY3JpYmUoXCJQYXJxdWV0UGx1Z2luXCIsICgpID0+IHtcbiAgbGV0IHBsdWdpbjogUGFycXVldFBsdWdpblxuICBsZXQgbW9ja0xvYWRQYXJxdWV0VGFibGU6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPlxuICBsZXQgbW9ja1NhdmVQYXJxdWV0VGFibGU6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPlxuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHBsdWdpbiA9IG5ldyBQYXJxdWV0UGx1Z2luKClcbiAgICBtb2NrTG9hZFBhcnF1ZXRUYWJsZSA9IHZpLm1vY2tlZChsb2FkTW9kdWxlLmxvYWRQYXJxdWV0VGFibGUpXG4gICAgbW9ja1NhdmVQYXJxdWV0VGFibGUgPSB2aS5tb2NrZWQoc2F2ZU1vZHVsZS5zYXZlUGFycXVldFRhYmxlKVxuICAgIHZpLmNsZWFyQWxsTW9ja3MoKVxuICB9KVxuXG4gIGRlc2NyaWJlKFwibG9hZFRhYmxlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBsb2FkIHRhYmxlIGZyb20gcGFycXVldCBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlOiBQYXJ0aWFsPFJlc291cmNlPiA9IHtcbiAgICAgICAgcGF0aDogXCJ0ZXN0LnBhcnF1ZXRcIixcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vY2tUYWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgbW9ja0xvYWRQYXJxdWV0VGFibGUubW9ja1Jlc29sdmVkVmFsdWUobW9ja1RhYmxlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFRhYmxlKHJlc291cmNlKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYXJxdWV0VGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHJlc291cmNlLCB1bmRlZmluZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tUYWJsZSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3Igbm9uLXBhcnF1ZXQgZmlsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+ID0ge1xuICAgICAgICBwYXRoOiBcInRlc3QuY3N2XCIsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkVGFibGUocmVzb3VyY2UpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhcnF1ZXRUYWJsZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBleHBsaWNpdCBmb3JtYXQgc3BlY2lmaWNhdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4gPSB7XG4gICAgICAgIHBhdGg6IFwidGVzdC50eHRcIixcbiAgICAgICAgZm9ybWF0OiBcInBhcnF1ZXRcIixcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vY2tUYWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgbW9ja0xvYWRQYXJxdWV0VGFibGUubW9ja1Jlc29sdmVkVmFsdWUobW9ja1RhYmxlKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFRhYmxlKHJlc291cmNlKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYXJxdWV0VGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHJlc291cmNlLCB1bmRlZmluZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tUYWJsZSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcGFzcyB0aHJvdWdoIGxvYWQgb3B0aW9uc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZTogUGFydGlhbDxSZXNvdXJjZT4gPSB7XG4gICAgICAgIHBhdGg6IFwidGVzdC5wYXJxdWV0XCIsXG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0geyBkZW5vcm1hbGl6ZWQ6IHRydWUgfVxuICAgICAgY29uc3QgbW9ja1RhYmxlID0gcGwuRGF0YUZyYW1lKCkubGF6eSgpXG4gICAgICBtb2NrTG9hZFBhcnF1ZXRUYWJsZS5tb2NrUmVzb2x2ZWRWYWx1ZShtb2NrVGFibGUpXG5cbiAgICAgIGF3YWl0IHBsdWdpbi5sb2FkVGFibGUocmVzb3VyY2UsIG9wdGlvbnMpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhcnF1ZXRUYWJsZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgocmVzb3VyY2UsIG9wdGlvbnMpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBwYXRocyB3aXRoIGRpcmVjdG9yaWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlOiBQYXJ0aWFsPFJlc291cmNlPiA9IHtcbiAgICAgICAgcGF0aDogXCIvcGF0aC90by9kYXRhLnBhcnF1ZXRcIixcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1vY2tUYWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgbW9ja0xvYWRQYXJxdWV0VGFibGUubW9ja1Jlc29sdmVkVmFsdWUobW9ja1RhYmxlKVxuXG4gICAgICBhd2FpdCBwbHVnaW4ubG9hZFRhYmxlKHJlc291cmNlKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYXJxdWV0VGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHJlc291cmNlLCB1bmRlZmluZWQpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGFycm93IGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlOiBQYXJ0aWFsPFJlc291cmNlPiA9IHtcbiAgICAgICAgcGF0aDogXCJ0ZXN0LmFycm93XCIsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5sb2FkVGFibGUocmVzb3VyY2UpXG5cbiAgICAgIGV4cGVjdChtb2NrTG9hZFBhcnF1ZXRUYWJsZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGpzb24gZmlsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+ID0ge1xuICAgICAgICBwYXRoOiBcInRlc3QuanNvblwiLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4ubG9hZFRhYmxlKHJlc291cmNlKVxuXG4gICAgICBleHBlY3QobW9ja0xvYWRQYXJxdWV0VGFibGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoXCJzYXZlVGFibGVcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHNhdmUgdGFibGUgdG8gcGFycXVldCBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gcGwuRGF0YUZyYW1lKCkubGF6eSgpXG4gICAgICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBcIm91dHB1dC5wYXJxdWV0XCIgfVxuICAgICAgbW9ja1NhdmVQYXJxdWV0VGFibGUubW9ja1Jlc29sdmVkVmFsdWUoXCJvdXRwdXQucGFycXVldFwiKVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVRhYmxlKHRhYmxlLCBvcHRpb25zKVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYXJxdWV0VGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRhYmxlLCBvcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm91dHB1dC5wYXJxdWV0XCIpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIG5vbi1wYXJxdWV0IGZpbGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gcGwuRGF0YUZyYW1lKCkubGF6eSgpXG4gICAgICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBcIm91dHB1dC5jc3ZcIiB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlVGFibGUodGFibGUsIG9wdGlvbnMpXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhcnF1ZXRUYWJsZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBleHBsaWNpdCBmb3JtYXQgc3BlY2lmaWNhdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogXCJvdXRwdXQudHh0XCIsIGZvcm1hdDogXCJwYXJxdWV0XCIgYXMgY29uc3QgfVxuICAgICAgbW9ja1NhdmVQYXJxdWV0VGFibGUubW9ja1Jlc29sdmVkVmFsdWUoXCJvdXRwdXQudHh0XCIpXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlVGFibGUodGFibGUsIG9wdGlvbnMpXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhcnF1ZXRUYWJsZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgodGFibGUsIG9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKFwib3V0cHV0LnR4dFwiKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgcGF0aHMgd2l0aCBkaXJlY3Rvcmllc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogXCIvcGF0aC90by9vdXRwdXQucGFycXVldFwiIH1cbiAgICAgIG1vY2tTYXZlUGFycXVldFRhYmxlLm1vY2tSZXNvbHZlZFZhbHVlKFwiL3BhdGgvdG8vb3V0cHV0LnBhcnF1ZXRcIilcblxuICAgICAgYXdhaXQgcGx1Z2luLnNhdmVUYWJsZSh0YWJsZSwgb3B0aW9ucylcblxuICAgICAgZXhwZWN0KG1vY2tTYXZlUGFycXVldFRhYmxlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh0YWJsZSwgb3B0aW9ucylcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgZmlsZXMgd2l0aG91dCBleHRlbnNpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBwbC5EYXRhRnJhbWUoKS5sYXp5KClcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHBhdGg6IFwib3V0cHV0XCIgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uc2F2ZVRhYmxlKHRhYmxlLCBvcHRpb25zKVxuXG4gICAgICBleHBlY3QobW9ja1NhdmVQYXJxdWV0VGFibGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVVbmRlZmluZWQoKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBhcnJvdyBmaWxlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHBsLkRhdGFGcmFtZSgpLmxhenkoKVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogXCJvdXRwdXQuYXJyb3dcIiB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlVGFibGUodGFibGUsIG9wdGlvbnMpXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhcnF1ZXRUYWJsZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGpzb24gZmlsZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSBwbC5EYXRhRnJhbWUoKS5sYXp5KClcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHBhdGg6IFwib3V0cHV0Lmpzb25cIiB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBsdWdpbi5zYXZlVGFibGUodGFibGUsIG9wdGlvbnMpXG5cbiAgICAgIGV4cGVjdChtb2NrU2F2ZVBhcnF1ZXRUYWJsZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZVVuZGVmaW5lZCgpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { loadParquetTable } from "./load.js";
|
|
2
|
+
export { saveParquetTable } from "./save.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wbHVnaW5zL3BhcnF1ZXQvdGFibGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGxvYWRQYXJxdWV0VGFibGUgfSBmcm9tIFwiLi9sb2FkLnRzXCJcbmV4cG9ydCB7IHNhdmVQYXJxdWV0VGFibGUgfSBmcm9tIFwiLi9zYXZlLnRzXCJcbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Resource } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { LoadTableOptions } from "../../../plugin.ts";
|
|
3
|
+
import * as pl from "nodejs-polars";
|
|
4
|
+
export declare function loadParquetTable(resource: Partial<Resource>, options?: LoadTableOptions): Promise<pl.LazyDataFrame<any>>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { resolveSchema } from "@frictionless-ts/metadata";
|
|
2
|
+
import { prefetchFiles } from "@frictionless-ts/dataset";
|
|
3
|
+
import { inferSchemaFromTable } from "../../../schema/index.js";
|
|
4
|
+
import { normalizeTable } from "../../../table/index.js";
|
|
5
|
+
import * as pl from "nodejs-polars";
|
|
6
|
+
export async function loadParquetTable(resource, options) {
|
|
7
|
+
const [firstPath, ...restPaths] = await prefetchFiles(resource.path);
|
|
8
|
+
if (!firstPath) {
|
|
9
|
+
throw new Error("Resource path is not defined");
|
|
10
|
+
}
|
|
11
|
+
let table = pl.scanParquet(firstPath);
|
|
12
|
+
if (restPaths.length) {
|
|
13
|
+
table = pl.concat([table, ...restPaths.map(path => pl.scanParquet(path))]);
|
|
14
|
+
}
|
|
15
|
+
if (!options?.denormalized) {
|
|
16
|
+
let schema = await resolveSchema(resource.schema);
|
|
17
|
+
if (!schema)
|
|
18
|
+
schema = await inferSchemaFromTable(table, options);
|
|
19
|
+
table = await normalizeTable(table, schema);
|
|
20
|
+
}
|
|
21
|
+
return table;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvcGFycXVldC90YWJsZS9sb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3hELE9BQU8sS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRW5DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLFFBQTJCLEVBQzNCLE9BQTBCO0lBRTFCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDcEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLEtBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDM0IsSUFBSSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2hFLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgcHJlZmV0Y2hGaWxlcyB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL2RhdGFzZXRcIlxuaW1wb3J0IHR5cGUgeyBMb2FkVGFibGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL3BsdWdpbi50c1wiXG5pbXBvcnQgeyBpbmZlclNjaGVtYUZyb21UYWJsZSB9IGZyb20gXCIuLi8uLi8uLi9zY2hlbWEvaW5kZXgudHNcIlxuaW1wb3J0IHsgbm9ybWFsaXplVGFibGUgfSBmcm9tIFwiLi4vLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuaW1wb3J0ICogYXMgcGwgZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBhcnF1ZXRUYWJsZShcbiAgcmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+LFxuICBvcHRpb25zPzogTG9hZFRhYmxlT3B0aW9ucyxcbikge1xuICBjb25zdCBbZmlyc3RQYXRoLCAuLi5yZXN0UGF0aHNdID0gYXdhaXQgcHJlZmV0Y2hGaWxlcyhyZXNvdXJjZS5wYXRoKVxuICBpZiAoIWZpcnN0UGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJlc291cmNlIHBhdGggaXMgbm90IGRlZmluZWRcIilcbiAgfVxuXG4gIGxldCB0YWJsZSA9IHBsLnNjYW5QYXJxdWV0KGZpcnN0UGF0aClcbiAgaWYgKHJlc3RQYXRocy5sZW5ndGgpIHtcbiAgICB0YWJsZSA9IHBsLmNvbmNhdChbdGFibGUsIC4uLnJlc3RQYXRocy5tYXAocGF0aCA9PiBwbC5zY2FuUGFycXVldChwYXRoKSldKVxuICB9XG5cbiAgaWYgKCFvcHRpb25zPy5kZW5vcm1hbGl6ZWQpIHtcbiAgICBsZXQgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShyZXNvdXJjZS5zY2hlbWEpXG4gICAgaWYgKCFzY2hlbWEpIHNjaGVtYSA9IGF3YWl0IGluZmVyU2NoZW1hRnJvbVRhYmxlKHRhYmxlLCBvcHRpb25zKVxuICAgIHRhYmxlID0gYXdhaXQgbm9ybWFsaXplVGFibGUodGFibGUsIHNjaGVtYSlcbiAgfVxuXG4gIHJldHVybiB0YWJsZVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getTempFilePath } from "@frictionless-ts/dataset";
|
|
2
|
+
import * as pl from "nodejs-polars";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { useRecording } from "vitest-polly";
|
|
5
|
+
import { loadParquetTable } from "./load.js";
|
|
6
|
+
useRecording();
|
|
7
|
+
describe("loadParquetTable", () => {
|
|
8
|
+
describe("file variations", () => {
|
|
9
|
+
it("should load local file", async () => {
|
|
10
|
+
const path = getTempFilePath();
|
|
11
|
+
pl.DataFrame({ id: [1, 2], name: ["english", "中文"] }).writeParquet(path);
|
|
12
|
+
const table = await loadParquetTable({ path });
|
|
13
|
+
expect((await table.collect()).toRecords()).toEqual([
|
|
14
|
+
{ id: 1, name: "english" },
|
|
15
|
+
{ id: 2, name: "中文" },
|
|
16
|
+
]);
|
|
17
|
+
});
|
|
18
|
+
it("should load local file (multipart)", async () => {
|
|
19
|
+
const path1 = getTempFilePath();
|
|
20
|
+
const path2 = getTempFilePath();
|
|
21
|
+
pl.DataFrame({ id: [1, 2], name: ["english", "中文"] }).writeParquet(path1);
|
|
22
|
+
pl.DataFrame({ id: [1, 2], name: ["english", "中文"] }).writeParquet(path2);
|
|
23
|
+
const table = await loadParquetTable({ path: [path1, path2] });
|
|
24
|
+
expect((await table.collect()).toRecords()).toEqual([
|
|
25
|
+
{ id: 1, name: "english" },
|
|
26
|
+
{ id: 2, name: "中文" },
|
|
27
|
+
{ id: 1, name: "english" },
|
|
28
|
+
{ id: 2, name: "中文" },
|
|
29
|
+
]);
|
|
30
|
+
});
|
|
31
|
+
it("should load remote file", async () => {
|
|
32
|
+
const table = await loadParquetTable({
|
|
33
|
+
path: "https://raw.githubusercontent.com/datisthq/dpkit/refs/heads/main/parquet/table/fixtures/table.parquet",
|
|
34
|
+
});
|
|
35
|
+
expect((await table.collect()).toRecords()).toEqual([
|
|
36
|
+
{ id: 1, name: "english" },
|
|
37
|
+
{ id: 2, name: "中文" },
|
|
38
|
+
]);
|
|
39
|
+
});
|
|
40
|
+
it("should load remote file (multipart)", async () => {
|
|
41
|
+
const table = await loadParquetTable({
|
|
42
|
+
path: [
|
|
43
|
+
"https://raw.githubusercontent.com/datisthq/dpkit/refs/heads/main/parquet/table/fixtures/table.parquet",
|
|
44
|
+
"https://raw.githubusercontent.com/datisthq/dpkit/refs/heads/main/parquet/table/fixtures/table.parquet",
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
expect((await table.collect()).toRecords()).toEqual([
|
|
48
|
+
{ id: 1, name: "english" },
|
|
49
|
+
{ id: 2, name: "中文" },
|
|
50
|
+
{ id: 1, name: "english" },
|
|
51
|
+
{ id: 2, name: "中文" },
|
|
52
|
+
]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9wYXJxdWV0L3RhYmxlL2xvYWQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRTVDLFlBQVksRUFBRSxDQUFBO0FBRWQsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxlQUFlLEVBQUUsQ0FBQTtZQUM5QixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXhFLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQzlDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xELEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUMxQixFQUFFLEVBQUUsRUFB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aCB9IGZyb20gXCJAZnJpY3Rpb25sZXNzLXRzL2RhdGFzZXRcIlxuaW1wb3J0ICogYXMgcGwgZnJvbSBcIm5vZGVqcy1wb2xhcnNcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZXN0XCJcbmltcG9ydCB7IHVzZVJlY29yZGluZyB9IGZyb20gXCJ2aXRlc3QtcG9sbHlcIlxuaW1wb3J0IHsgbG9hZFBhcnF1ZXRUYWJsZSB9IGZyb20gXCIuL2xvYWQudHNcIlxuXG51c2VSZWNvcmRpbmcoKVxuXG5kZXNjcmliZShcImxvYWRQYXJxdWV0VGFibGVcIiwgKCkgPT4ge1xuICBkZXNjcmliZShcImZpbGUgdmFyaWF0aW9uc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgbG9hZCBsb2NhbCBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBnZXRUZW1wRmlsZVBhdGgoKVxuICAgICAgcGwuRGF0YUZyYW1lKHsgaWQ6IFsxLCAyXSwgbmFtZTogW1wiZW5nbGlzaFwiLCBcIuS4reaWh1wiXSB9KS53cml0ZVBhcnF1ZXQocGF0aClcblxuICAgICAgY29uc3QgdGFibGUgPSBhd2FpdCBsb2FkUGFycXVldFRhYmxlKHsgcGF0aCB9KVxuICAgICAgZXhwZWN0KChhd2FpdCB0YWJsZS5jb2xsZWN0KCkpLnRvUmVjb3JkcygpKS50b0VxdWFsKFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9LFxuICAgICAgXSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgbG9hZCBsb2NhbCBmaWxlIChtdWx0aXBhcnQpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGgxID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICAgIGNvbnN0IHBhdGgyID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICAgIHBsLkRhdGFGcmFtZSh7IGlkOiBbMSwgMl0sIG5hbWU6IFtcImVuZ2xpc2hcIiwgXCLkuK3mlodcIl0gfSkud3JpdGVQYXJxdWV0KFxuICAgICAgICBwYXRoMSxcbiAgICAgIClcbiAgICAgIHBsLkRhdGFGcmFtZSh7IGlkOiBbMSwgMl0sIG5hbWU6IFtcImVuZ2xpc2hcIiwgXCLkuK3mlodcIl0gfSkud3JpdGVQYXJxdWV0KFxuICAgICAgICBwYXRoMixcbiAgICAgIClcblxuICAgICAgY29uc3QgdGFibGUgPSBhd2FpdCBsb2FkUGFycXVldFRhYmxlKHsgcGF0aDogW3BhdGgxLCBwYXRoMl0gfSlcbiAgICAgIGV4cGVjdCgoYXdhaXQgdGFibGUuY29sbGVjdCgpKS50b1JlY29yZHMoKSkudG9FcXVhbChbXG4gICAgICAgIHsgaWQ6IDEsIG5hbWU6IFwiZW5nbGlzaFwiIH0sXG4gICAgICAgIHsgaWQ6IDIsIG5hbWU6IFwi5Lit5paHXCIgfSxcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9LFxuICAgICAgXSlcbiAgICB9KVxuXG4gICAgaXQoXCJzaG91bGQgbG9hZCByZW1vdGUgZmlsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IGF3YWl0IGxvYWRQYXJxdWV0VGFibGUoe1xuICAgICAgICBwYXRoOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kYXRpc3RocS9kcGtpdC9yZWZzL2hlYWRzL21haW4vcGFycXVldC90YWJsZS9maXh0dXJlcy90YWJsZS5wYXJxdWV0XCIsXG4gICAgICB9KVxuXG4gICAgICBleHBlY3QoKGF3YWl0IHRhYmxlLmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW1xuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgICBdKVxuICAgIH0pXG5cbiAgICBpdChcInNob3VsZCBsb2FkIHJlbW90ZSBmaWxlIChtdWx0aXBhcnQpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgbG9hZFBhcnF1ZXRUYWJsZSh7XG4gICAgICAgIHBhdGg6IFtcbiAgICAgICAgICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kYXRpc3RocS9kcGtpdC9yZWZzL2hlYWRzL21haW4vcGFycXVldC90YWJsZS9maXh0dXJlcy90YWJsZS5wYXJxdWV0XCIsXG4gICAgICAgICAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGF0aXN0aHEvZHBraXQvcmVmcy9oZWFkcy9tYWluL3BhcnF1ZXQvdGFibGUvZml4dHVyZXMvdGFibGUucGFycXVldFwiLFxuICAgICAgICBdLFxuICAgICAgfSlcblxuICAgICAgZXhwZWN0KChhd2FpdCB0YWJsZS5jb2xsZWN0KCkpLnRvUmVjb3JkcygpKS50b0VxdWFsKFtcbiAgICAgICAgeyBpZDogMSwgbmFtZTogXCJlbmdsaXNoXCIgfSxcbiAgICAgICAgeyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9LFxuICAgICAgICB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9LFxuICAgICAgICB7IGlkOiAyLCBuYW1lOiBcIuS4reaWh1wiIH0sXG4gICAgICBdKVxuICAgIH0pXG4gIH0pXG59KVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { assertLocalPathVacant } from "@frictionless-ts/dataset";
|
|
2
|
+
import { inferSchemaFromTable } from "../../../schema/index.js";
|
|
3
|
+
import { denormalizeTable } from "../../../table/index.js";
|
|
4
|
+
export async function saveParquetTable(table, options) {
|
|
5
|
+
const { path, overwrite } = options;
|
|
6
|
+
if (!overwrite) {
|
|
7
|
+
await assertLocalPathVacant(path);
|
|
8
|
+
}
|
|
9
|
+
const schema = options.schema ??
|
|
10
|
+
(await inferSchemaFromTable(table, {
|
|
11
|
+
...options,
|
|
12
|
+
keepStrings: true,
|
|
13
|
+
}));
|
|
14
|
+
table = await denormalizeTable(table, schema, {
|
|
15
|
+
nativeTypes: [
|
|
16
|
+
"boolean",
|
|
17
|
+
"datetime",
|
|
18
|
+
"integer",
|
|
19
|
+
"list",
|
|
20
|
+
"number",
|
|
21
|
+
"string",
|
|
22
|
+
"year",
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
await table
|
|
26
|
+
.sinkParquet(path, {
|
|
27
|
+
maintainOrder: true,
|
|
28
|
+
})
|
|
29
|
+
.collect();
|
|
30
|
+
return path;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbnMvcGFycXVldC90YWJsZS9zYXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBRzFELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQVksRUFDWixPQUF5QjtJQUV6QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUVuQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FDVixPQUFPLENBQUMsTUFBTTtRQUNkLENBQUMsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDakMsR0FBRyxPQUFPO1lBQ1YsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDLENBQUE7SUFFTCxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzVDLFdBQVcsRUFBRTtZQUNYLFNBQVM7WUFDVCxVQUFVO1lBQ1YsU0FBUztZQUNULE1BQU07WUFDTixRQUFRO1lBQ1IsUUFBUTtZQUNSLE1BQU07U0FDUDtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sS0FBSztTQUNSLFdBQVcsQ0FBQyxJQUFJLEVBQUU7UUFDakIsYUFBYSxFQUFFLElBQUk7S0FDcEIsQ0FBQztTQUNELE9BQU8sRUFBRSxDQUFBO0lBRVosT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0TG9jYWxQYXRoVmFjYW50IH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvZGF0YXNldFwiXG5pbXBvcnQgdHlwZSB7IFNhdmVUYWJsZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vcGx1Z2luLnRzXCJcbmltcG9ydCB7IGluZmVyU2NoZW1hRnJvbVRhYmxlIH0gZnJvbSBcIi4uLy4uLy4uL3NjaGVtYS9pbmRleC50c1wiXG5pbXBvcnQgeyBkZW5vcm1hbGl6ZVRhYmxlIH0gZnJvbSBcIi4uLy4uLy4uL3RhYmxlL2luZGV4LnRzXCJcbmltcG9ydCB0eXBlIHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZVBhcnF1ZXRUYWJsZShcbiAgdGFibGU6IFRhYmxlLFxuICBvcHRpb25zOiBTYXZlVGFibGVPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgcGF0aCwgb3ZlcndyaXRlIH0gPSBvcHRpb25zXG5cbiAgaWYgKCFvdmVyd3JpdGUpIHtcbiAgICBhd2FpdCBhc3NlcnRMb2NhbFBhdGhWYWNhbnQocGF0aClcbiAgfVxuXG4gIGNvbnN0IHNjaGVtYSA9XG4gICAgb3B0aW9ucy5zY2hlbWEgPz9cbiAgICAoYXdhaXQgaW5mZXJTY2hlbWFGcm9tVGFibGUodGFibGUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBrZWVwU3RyaW5nczogdHJ1ZSxcbiAgICB9KSlcblxuICB0YWJsZSA9IGF3YWl0IGRlbm9ybWFsaXplVGFibGUodGFibGUsIHNjaGVtYSwge1xuICAgIG5hdGl2ZVR5cGVzOiBbXG4gICAgICBcImJvb2xlYW5cIixcbiAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgIFwiaW50ZWdlclwiLFxuICAgICAgXCJsaXN0XCIsXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFwieWVhclwiLFxuICAgIF0sXG4gIH0pXG5cbiAgYXdhaXQgdGFibGVcbiAgICAuc2lua1BhcnF1ZXQocGF0aCwge1xuICAgICAgbWFpbnRhaW5PcmRlcjogdHJ1ZSxcbiAgICB9KVxuICAgIC5jb2xsZWN0KClcblxuICByZXR1cm4gcGF0aFxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { getTempFilePath } from "@frictionless-ts/dataset";
|
|
2
|
+
import * as pl from "nodejs-polars";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { loadParquetTable } from "./load.js";
|
|
5
|
+
import { saveParquetTable } from "./save.js";
|
|
6
|
+
describe("saveParquetTable", () => {
|
|
7
|
+
it("should save table to Parquet file", async () => {
|
|
8
|
+
const path = getTempFilePath();
|
|
9
|
+
const source = pl
|
|
10
|
+
.DataFrame({
|
|
11
|
+
id: [1.0, 2.0, 3.0],
|
|
12
|
+
name: ["Alice", "Bob", "Charlie"],
|
|
13
|
+
})
|
|
14
|
+
.lazy();
|
|
15
|
+
await saveParquetTable(source, { path });
|
|
16
|
+
const table = await loadParquetTable({ path });
|
|
17
|
+
expect((await table.collect()).toRecords()).toEqual([
|
|
18
|
+
{ id: 1.0, name: "Alice" },
|
|
19
|
+
{ id: 2.0, name: "Bob" },
|
|
20
|
+
{ id: 3.0, name: "Charlie" },
|
|
21
|
+
]);
|
|
22
|
+
});
|
|
23
|
+
it("should save and load various data types", async () => {
|
|
24
|
+
const path = getTempFilePath();
|
|
25
|
+
const source = pl
|
|
26
|
+
.DataFrame([
|
|
27
|
+
pl.Series("array", ["[1, 2, 3]"], pl.String),
|
|
28
|
+
pl.Series("boolean", [true], pl.Bool),
|
|
29
|
+
pl.Series("date", [new Date(Date.UTC(2025, 0, 1))], pl.Date),
|
|
30
|
+
pl.Series("datetime", [new Date(Date.UTC(2025, 0, 1))], pl.Datetime),
|
|
31
|
+
pl.Series("duration", ["P23DT23H"], pl.String),
|
|
32
|
+
pl.Series("geojson", ['{"value": 1}'], pl.String),
|
|
33
|
+
pl.Series("geopoint", [[40.0, 50.0]], pl.List(pl.Float32)),
|
|
34
|
+
pl.Series("integer", [1], pl.Int32),
|
|
35
|
+
pl.Series("list", [[1.0, 2.0, 3.0]], pl.List(pl.Float32)),
|
|
36
|
+
pl.Series("number", [1.1], pl.Float64),
|
|
37
|
+
pl.Series("object", ['{"value": 1}']),
|
|
38
|
+
pl.Series("string", ["string"], pl.String),
|
|
39
|
+
pl.Series("time", [new Date(Date.UTC(2025, 0, 1))], pl.Time),
|
|
40
|
+
pl.Series("year", [2025], pl.Int32),
|
|
41
|
+
pl.Series("yearmonth", [[2025, 1]], pl.List(pl.Int16)),
|
|
42
|
+
])
|
|
43
|
+
.lazy();
|
|
44
|
+
await saveParquetTable(source, {
|
|
45
|
+
path,
|
|
46
|
+
fieldTypes: {
|
|
47
|
+
array: "array",
|
|
48
|
+
geojson: "geojson",
|
|
49
|
+
geopoint: "geopoint",
|
|
50
|
+
list: "list",
|
|
51
|
+
object: "object",
|
|
52
|
+
// TODO: Remove time after:
|
|
53
|
+
// https://github.com/pola-rs/nodejs-polars/issues/364
|
|
54
|
+
time: "time",
|
|
55
|
+
year: "year",
|
|
56
|
+
yearmonth: "yearmonth",
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const target = await loadParquetTable({ path }, { denormalized: true });
|
|
60
|
+
expect((await target.collect()).toRecords()).toEqual([
|
|
61
|
+
{
|
|
62
|
+
array: "[1, 2, 3]",
|
|
63
|
+
boolean: true,
|
|
64
|
+
date: "2025-01-01",
|
|
65
|
+
datetime: new Date(Date.UTC(2025, 0, 1)),
|
|
66
|
+
duration: "P23DT23H",
|
|
67
|
+
geojson: '{"value": 1}',
|
|
68
|
+
geopoint: "40.0,50.0",
|
|
69
|
+
integer: 1,
|
|
70
|
+
list: [1.0, 2.0, 3.0],
|
|
71
|
+
number: 1.1,
|
|
72
|
+
object: '{"value": 1}',
|
|
73
|
+
string: "string",
|
|
74
|
+
time: "00:00:00",
|
|
75
|
+
year: 2025,
|
|
76
|
+
yearmonth: "2025-01",
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGx1Z2lucy9wYXJxdWV0L3RhYmxlL3NhdmUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFNUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxFQUFFLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakQsTUFBTSxJQUFJLEdBQUcsZUFBZSxFQUFFLENBQUE7UUFDOUIsTUFBTSxNQUFNLEdBQUcsRUFBRTthQUNkLFNBQVMsQ0FBQztZQUNULEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ25CLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1NBQ2xDLENBQUM7YUFDRCxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV4QyxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM5QyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FB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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRUZW1wRmlsZVBhdGggfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9kYXRhc2V0XCJcbmltcG9ydCAqIGFzIHBsIGZyb20gXCJub2RlanMtcG9sYXJzXCJcbmltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGVzdFwiXG5pbXBvcnQgeyBsb2FkUGFycXVldFRhYmxlIH0gZnJvbSBcIi4vbG9hZC50c1wiXG5pbXBvcnQgeyBzYXZlUGFycXVldFRhYmxlIH0gZnJvbSBcIi4vc2F2ZS50c1wiXG5cbmRlc2NyaWJlKFwic2F2ZVBhcnF1ZXRUYWJsZVwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIHNhdmUgdGFibGUgdG8gUGFycXVldCBmaWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcbiAgICBjb25zdCBzb3VyY2UgPSBwbFxuICAgICAgLkRhdGFGcmFtZSh7XG4gICAgICAgIGlkOiBbMS4wLCAyLjAsIDMuMF0sXG4gICAgICAgIG5hbWU6IFtcIkFsaWNlXCIsIFwiQm9iXCIsIFwiQ2hhcmxpZVwiXSxcbiAgICAgIH0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlUGFycXVldFRhYmxlKHNvdXJjZSwgeyBwYXRoIH0pXG5cbiAgICBjb25zdCB0YWJsZSA9IGF3YWl0IGxvYWRQYXJxdWV0VGFibGUoeyBwYXRoIH0pXG4gICAgZXhwZWN0KChhd2FpdCB0YWJsZS5jb2xsZWN0KCkpLnRvUmVjb3JkcygpKS50b0VxdWFsKFtcbiAgICAgIHsgaWQ6IDEuMCwgbmFtZTogXCJBbGljZVwiIH0sXG4gICAgICB7IGlkOiAyLjAsIG5hbWU6IFwiQm9iXCIgfSxcbiAgICAgIHsgaWQ6IDMuMCwgbmFtZTogXCJDaGFybGllXCIgfSxcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUgYW5kIGxvYWQgdmFyaW91cyBkYXRhIHR5cGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXRoID0gZ2V0VGVtcEZpbGVQYXRoKClcblxuICAgIGNvbnN0IHNvdXJjZSA9IHBsXG4gICAgICAuRGF0YUZyYW1lKFtcbiAgICAgICAgcGwuU2VyaWVzKFwiYXJyYXlcIiwgW1wiWzEsIDIsIDNdXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJib29sZWFuXCIsIFt0cnVlXSwgcGwuQm9vbCksXG4gICAgICAgIHBsLlNlcmllcyhcImRhdGVcIiwgW25ldyBEYXRlKERhdGUuVVRDKDIwMjUsIDAsIDEpKV0sIHBsLkRhdGUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJkYXRldGltZVwiLCBbbmV3IERhdGUoRGF0ZS5VVEMoMjAyNSwgMCwgMSkpXSwgcGwuRGF0ZXRpbWUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJkdXJhdGlvblwiLCBbXCJQMjNEVDIzSFwiXSwgcGwuU3RyaW5nKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZ2VvanNvblwiLCBbJ3tcInZhbHVlXCI6IDF9J10sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcImdlb3BvaW50XCIsIFtbNDAuMCwgNTAuMF1dLCBwbC5MaXN0KHBsLkZsb2F0MzIpKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiaW50ZWdlclwiLCBbMV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibGlzdFwiLCBbWzEuMCwgMi4wLCAzLjBdXSwgcGwuTGlzdChwbC5GbG9hdDMyKSksXG4gICAgICAgIHBsLlNlcmllcyhcIm51bWJlclwiLCBbMS4xXSwgcGwuRmxvYXQ2NCksXG4gICAgICAgIHBsLlNlcmllcyhcIm9iamVjdFwiLCBbJ3tcInZhbHVlXCI6IDF9J10pLFxuICAgICAgICBwbC5TZXJpZXMoXCJzdHJpbmdcIiwgW1wic3RyaW5nXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ0aW1lXCIsIFtuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSldLCBwbC5UaW1lKSxcbiAgICAgICAgcGwuU2VyaWVzKFwieWVhclwiLCBbMjAyNV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwieWVhcm1vbnRoXCIsIFtbMjAyNSwgMV1dLCBwbC5MaXN0KHBsLkludDE2KSksXG4gICAgICBdKVxuICAgICAgLmxhenkoKVxuXG4gICAgYXdhaXQgc2F2ZVBhcnF1ZXRUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBmaWVsZFR5cGVzOiB7XG4gICAgICAgIGFycmF5OiBcImFycmF5XCIsXG4gICAgICAgIGdlb2pzb246IFwiZ2VvanNvblwiLFxuICAgICAgICBnZW9wb2ludDogXCJnZW9wb2ludFwiLFxuICAgICAgICBsaXN0OiBcImxpc3RcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVjdFwiLFxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGltZSBhZnRlcjpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGEtcnMvbm9kZWpzLXBvbGFycy9pc3N1ZXMvMzY0XG4gICAgICAgIHRpbWU6IFwidGltZVwiLFxuICAgICAgICB5ZWFyOiBcInllYXJcIixcbiAgICAgICAgeWVhcm1vbnRoOiBcInllYXJtb250aFwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgbG9hZFBhcnF1ZXRUYWJsZSh7IHBhdGggfSwgeyBkZW5vcm1hbGl6ZWQ6IHRydWUgfSlcbiAgICBleHBlY3QoKGF3YWl0IHRhcmdldC5jb2xsZWN0KCkpLnRvUmVjb3JkcygpKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgYXJyYXk6IFwiWzEsIDIsIDNdXCIsXG4gICAgICAgIGJvb2xlYW46IHRydWUsXG4gICAgICAgIGRhdGU6IFwiMjAyNS0wMS0wMVwiLFxuICAgICAgICBkYXRldGltZTogbmV3IERhdGUoRGF0ZS5VVEMoMjAyNSwgMCwgMSkpLFxuICAgICAgICBkdXJhdGlvbjogXCJQMjNEVDIzSFwiLFxuICAgICAgICBnZW9qc29uOiAne1widmFsdWVcIjogMX0nLFxuICAgICAgICBnZW9wb2ludDogXCI0MC4wLDUwLjBcIixcbiAgICAgICAgaW50ZWdlcjogMSxcbiAgICAgICAgbGlzdDogWzEuMCwgMi4wLCAzLjBdLFxuICAgICAgICBudW1iZXI6IDEuMSxcbiAgICAgICAgb2JqZWN0OiAne1widmFsdWVcIjogMX0nLFxuICAgICAgICBzdHJpbmc6IFwic3RyaW5nXCIsXG4gICAgICAgIHRpbWU6IFwiMDA6MDA6MDBcIixcbiAgICAgICAgeWVhcjogMjAyNSxcbiAgICAgICAgeWVhcm1vbnRoOiBcIjIwMjUtMDFcIixcbiAgICAgIH0sXG4gICAgXSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./table/index.js";
|
|
2
|
+
export * from "./plugin.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW5zL3hseHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQTtBQUNoQyxjQUFjLGFBQWEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BsdWdpbi50c1wiXG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Resource } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { LoadTableOptions, SaveTableOptions, TablePlugin } from "../../plugin.ts";
|
|
3
|
+
import type { Table } from "../../table/index.ts";
|
|
4
|
+
export declare class XlsxPlugin implements TablePlugin {
|
|
5
|
+
loadTable(resource: Partial<Resource>, options?: LoadTableOptions): Promise<import("nodejs-polars").LazyDataFrame<any> | undefined>;
|
|
6
|
+
saveTable(table: Table, options: SaveTableOptions): Promise<string | undefined>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { inferFormat } from "@frictionless-ts/metadata";
|
|
2
|
+
import { loadXlsxTable } from "./table/index.js";
|
|
3
|
+
import { saveXlsxTable } from "./table/index.js";
|
|
4
|
+
export class XlsxPlugin {
|
|
5
|
+
async loadTable(resource, options) {
|
|
6
|
+
const isXlsx = getIsXlsx(resource);
|
|
7
|
+
if (!isXlsx)
|
|
8
|
+
return undefined;
|
|
9
|
+
return await loadXlsxTable(resource, options);
|
|
10
|
+
}
|
|
11
|
+
async saveTable(table, options) {
|
|
12
|
+
const { path, format } = options;
|
|
13
|
+
const isXlsx = getIsXlsx({ path, format });
|
|
14
|
+
if (!isXlsx)
|
|
15
|
+
return undefined;
|
|
16
|
+
return await saveXlsxTable(table, options);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function getIsXlsx(resource) {
|
|
20
|
+
const format = inferFormat(resource);
|
|
21
|
+
return ["xlsx"].includes(format ?? "");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2lucy94bHhzL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFPdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVoRCxNQUFNLE9BQU8sVUFBVTtJQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLFFBQTJCLEVBQUUsT0FBMEI7UUFDckUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFN0IsT0FBTyxNQUFNLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBWSxFQUFFLE9BQXlCO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBRWhDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQzFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFFN0IsT0FBTyxNQUFNLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDNUMsQ0FBQztDQUNGO0FBRUQsU0FBUyxTQUFTLENBQUMsUUFBMkI7SUFDNUMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgaW5mZXJGb3JtYXQgfSBmcm9tIFwiQGZyaWN0aW9ubGVzcy10cy9tZXRhZGF0YVwiXG5pbXBvcnQgdHlwZSB7XG4gIExvYWRUYWJsZU9wdGlvbnMsXG4gIFNhdmVUYWJsZU9wdGlvbnMsXG4gIFRhYmxlUGx1Z2luLFxufSBmcm9tIFwiLi4vLi4vcGx1Z2luLnRzXCJcbmltcG9ydCB0eXBlIHsgVGFibGUgfSBmcm9tIFwiLi4vLi4vdGFibGUvaW5kZXgudHNcIlxuaW1wb3J0IHsgbG9hZFhsc3hUYWJsZSB9IGZyb20gXCIuL3RhYmxlL2luZGV4LnRzXCJcbmltcG9ydCB7IHNhdmVYbHN4VGFibGUgfSBmcm9tIFwiLi90YWJsZS9pbmRleC50c1wiXG5cbmV4cG9ydCBjbGFzcyBYbHN4UGx1Z2luIGltcGxlbWVudHMgVGFibGVQbHVnaW4ge1xuICBhc3luYyBsb2FkVGFibGUocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+LCBvcHRpb25zPzogTG9hZFRhYmxlT3B0aW9ucykge1xuICAgIGNvbnN0IGlzWGxzeCA9IGdldElzWGxzeChyZXNvdXJjZSlcbiAgICBpZiAoIWlzWGxzeCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIGF3YWl0IGxvYWRYbHN4VGFibGUocmVzb3VyY2UsIG9wdGlvbnMpXG4gIH1cblxuICBhc3luYyBzYXZlVGFibGUodGFibGU6IFRhYmxlLCBvcHRpb25zOiBTYXZlVGFibGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBwYXRoLCBmb3JtYXQgfSA9IG9wdGlvbnNcblxuICAgIGNvbnN0IGlzWGxzeCA9IGdldElzWGxzeCh7IHBhdGgsIGZvcm1hdCB9KVxuICAgIGlmICghaXNYbHN4KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gYXdhaXQgc2F2ZVhsc3hUYWJsZSh0YWJsZSwgb3B0aW9ucylcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJc1hsc3gocmVzb3VyY2U6IFBhcnRpYWw8UmVzb3VyY2U+KSB7XG4gIGNvbnN0IGZvcm1hdCA9IGluZmVyRm9ybWF0KHJlc291cmNlKVxuICByZXR1cm4gW1wieGxzeFwiXS5pbmNsdWRlcyhmb3JtYXQgPz8gXCJcIilcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|