@kepler.gl/duckdb 3.3.0-alpha.2 → 3.3.0-alpha.20

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.
Files changed (42) hide show
  1. package/dist/cjs/adapters/duckdb-wasm-adapter.js +258 -0
  2. package/dist/{components → cjs/components}/index.js +1 -1
  3. package/dist/cjs/components/monaco-editor.js +174 -0
  4. package/dist/cjs/components/preview-data-panel.js +127 -0
  5. package/dist/cjs/components/schema-panel.js +170 -0
  6. package/dist/cjs/components/sql-panel.js +395 -0
  7. package/dist/cjs/components/tree.js +90 -0
  8. package/dist/{index.js → cjs/index.js} +1 -1
  9. package/dist/{plugin.js → cjs/plugin.js} +2 -2
  10. package/dist/cjs/processors/data-processor.js +353 -0
  11. package/dist/cjs/table/duckdb-table-utils.js +675 -0
  12. package/dist/cjs/table/duckdb-table.js +553 -0
  13. package/dist/{table → cjs/table}/index.js +1 -1
  14. package/dist/cjs/utils/perf.js +46 -0
  15. package/dist/esm/adapters/duckdb-wasm-adapter.js +251 -0
  16. package/dist/esm/components/index.js +9 -0
  17. package/dist/esm/components/monaco-editor.js +167 -0
  18. package/dist/esm/components/preview-data-panel.js +120 -0
  19. package/dist/esm/components/schema-panel.js +164 -0
  20. package/dist/esm/components/sql-panel.js +388 -0
  21. package/dist/esm/components/tree.js +82 -0
  22. package/dist/esm/index.js +9 -0
  23. package/dist/esm/plugin.js +22 -0
  24. package/dist/esm/processors/data-processor.js +342 -0
  25. package/dist/esm/table/duckdb-table-utils.js +650 -0
  26. package/dist/esm/table/duckdb-table.js +548 -0
  27. package/dist/esm/table/index.js +5 -0
  28. package/dist/esm/utils/perf.js +40 -0
  29. package/dist/processors/data-processor.d.ts +2 -0
  30. package/dist/table/duckdb-table-utils.d.ts +11 -2
  31. package/dist/table/duckdb-table.d.ts +7 -0
  32. package/package.json +25 -22
  33. package/dist/adapters/duckdb-wasm-adapter.js +0 -259
  34. package/dist/components/monaco-editor.js +0 -175
  35. package/dist/components/preview-data-panel.js +0 -128
  36. package/dist/components/schema-panel.js +0 -171
  37. package/dist/components/sql-panel.js +0 -396
  38. package/dist/components/tree.js +0 -91
  39. package/dist/processors/data-processor.js +0 -353
  40. package/dist/table/duckdb-table-utils.js +0 -669
  41. package/dist/table/duckdb-table.js +0 -480
  42. package/dist/utils/perf.js +0 -46
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ // git@github.com:holdenmatt/duckdb-wasm-kit.git
5
+ var FgRed = '\x1b[31m';
6
+ var ResetColors = '\x1b[0m';
7
+
8
+ /**
9
+ * Format a time interval between start/end timestamps.
10
+ *
11
+ * If no end time is given, use the current time.
12
+ */
13
+ var formatElapsedTime = function formatElapsedTime(label, start) {
14
+ var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
15
+ var endTime = end !== null && end !== void 0 ? end : performance.now();
16
+ var elapsed = endTime - start;
17
+ var timeString;
18
+ switch (true) {
19
+ case elapsed >= 1000:
20
+ timeString = "".concat((elapsed / 1000).toFixed(1), "s");
21
+ break;
22
+ case elapsed >= 1:
23
+ timeString = "".concat(elapsed.toFixed(0), "ms");
24
+ break;
25
+ default:
26
+ timeString = "".concat(elapsed.toFixed(3), "ms");
27
+ break;
28
+ }
29
+ var message = "".concat(FgRed, "[").concat(timeString, "] ").concat(ResetColors).concat(label);
30
+ return message;
31
+ };
32
+
33
+ /**
34
+ * Print the elapsed time to console.debug.
35
+ */
36
+ export var logElapsedTime = function logElapsedTime(label, start) {
37
+ var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
38
+ console.debug(formatElapsedTime(label, start, end));
39
+ };
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZ1JlZCIsIlJlc2V0Q29sb3JzIiwiZm9ybWF0RWxhcHNlZFRpbWUiLCJsYWJlbCIsInN0YXJ0IiwiZW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZW5kVGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiZWxhcHNlZCIsInRpbWVTdHJpbmciLCJjb25jYXQiLCJ0b0ZpeGVkIiwibWVzc2FnZSIsImxvZ0VsYXBzZWRUaW1lIiwiY29uc29sZSIsImRlYnVnIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3BlcmYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gZ2l0QGdpdGh1Yi5jb206aG9sZGVubWF0dC9kdWNrZGItd2FzbS1raXQuZ2l0XG5jb25zdCBGZ1JlZCA9ICdcXHgxYlszMW0nO1xuY29uc3QgUmVzZXRDb2xvcnMgPSAnXFx4MWJbMG0nO1xuXG4vKipcbiAqIEZvcm1hdCBhIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBzdGFydC9lbmQgdGltZXN0YW1wcy5cbiAqXG4gKiBJZiBubyBlbmQgdGltZSBpcyBnaXZlbiwgdXNlIHRoZSBjdXJyZW50IHRpbWUuXG4gKi9cbmNvbnN0IGZvcm1hdEVsYXBzZWRUaW1lID0gKFxuICBsYWJlbDogc3RyaW5nLFxuICBzdGFydDogbnVtYmVyLFxuICBlbmQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZW5kVGltZSA9IGVuZCA/PyBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgZWxhcHNlZCA9IGVuZFRpbWUgLSBzdGFydDtcblxuICBsZXQgdGltZVN0cmluZzogc3RyaW5nO1xuICBzd2l0Y2ggKHRydWUpIHtcbiAgICBjYXNlIGVsYXBzZWQgPj0gMTAwMDpcbiAgICAgIHRpbWVTdHJpbmcgPSBgJHsoZWxhcHNlZCAvIDEwMDApLnRvRml4ZWQoMSl9c2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGVsYXBzZWQgPj0gMTpcbiAgICAgIHRpbWVTdHJpbmcgPSBgJHtlbGFwc2VkLnRvRml4ZWQoMCl9bXNgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVTdHJpbmcgPSBgJHtlbGFwc2VkLnRvRml4ZWQoMyl9bXNgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYCR7RmdSZWR9WyR7dGltZVN0cmluZ31dICR7UmVzZXRDb2xvcnN9JHtsYWJlbH1gO1xuICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbi8qKlxuICogUHJpbnQgdGhlIGVsYXBzZWQgdGltZSB0byBjb25zb2xlLmRlYnVnLlxuICovXG5leHBvcnQgY29uc3QgbG9nRWxhcHNlZFRpbWUgPSAoXG4gIGxhYmVsOiBzdHJpbmcsXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGVuZDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4pID0+IHtcbiAgY29uc29sZS5kZWJ1Zyhmb3JtYXRFbGFwc2VkVGltZShsYWJlbCwgc3RhcnQsIGVuZCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBLElBQU1BLEtBQUssR0FBRyxVQUFVO0FBQ3hCLElBQU1DLFdBQVcsR0FBRyxTQUFTOztBQUU3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDckJDLEtBQWEsRUFDYkMsS0FBYSxFQUVGO0VBQUEsSUFEWEMsR0FBdUIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdFLFNBQVM7RUFFbkMsSUFBTUMsT0FBTyxHQUFHSixHQUFHLGFBQUhBLEdBQUcsY0FBSEEsR0FBRyxHQUFJSyxXQUFXLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDLElBQU1DLE9BQU8sR0FBR0gsT0FBTyxHQUFHTCxLQUFLO0VBRS9CLElBQUlTLFVBQWtCO0VBQ3RCLFFBQVEsSUFBSTtJQUNWLEtBQUtELE9BQU8sSUFBSSxJQUFJO01BQ2xCQyxVQUFVLE1BQUFDLE1BQUEsQ0FBTSxDQUFDRixPQUFPLEdBQUcsSUFBSSxFQUFFRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQUc7TUFDOUM7SUFDRixLQUFLSCxPQUFPLElBQUksQ0FBQztNQUNmQyxVQUFVLE1BQUFDLE1BQUEsQ0FBTUYsT0FBTyxDQUFDRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQUk7TUFDdEM7SUFDRjtNQUNFRixVQUFVLE1BQUFDLE1BQUEsQ0FBTUYsT0FBTyxDQUFDRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQUk7TUFDdEM7RUFDSjtFQUVBLElBQU1DLE9BQU8sTUFBQUYsTUFBQSxDQUFNZCxLQUFLLE9BQUFjLE1BQUEsQ0FBSUQsVUFBVSxRQUFBQyxNQUFBLENBQUtiLFdBQVcsRUFBQWEsTUFBQSxDQUFHWCxLQUFLLENBQUU7RUFDaEUsT0FBT2EsT0FBTztBQUNoQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUN6QmQsS0FBYSxFQUNiQyxLQUFhLEVBRVY7RUFBQSxJQURIQyxHQUF1QixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0UsU0FBUztFQUVuQ1UsT0FBTyxDQUFDQyxLQUFLLENBQUNqQixpQkFBaUIsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -6,6 +6,8 @@ type RowsAsArray = any[][];
6
6
  type RowsAsObject = Record<string, unknown>[];
7
7
  type RowData = RowsAsArray | RowsAsObject;
8
8
  export type ProcessorResult = {
9
+ /** Read an existing table in the configured database without importing it again. */
10
+ duckdbTableName?: string;
9
11
  cols?: arrow.Vector[];
10
12
  rows: RowData;
11
13
  fields: ProtoDatasetField[];
@@ -13,7 +13,7 @@ export type DuckDBColumnDesc = {
13
13
  * @param tableName A name of DuckDB table to query.
14
14
  * @returns An array of column names and DuckDB types.
15
15
  */
16
- export declare function getDuckDBColumnTypes(connection: DatabaseConnection, tableName: string): Promise<DuckDBColumnDesc[]>;
16
+ export declare function getDuckDBColumnTypes(connection: Pick<DatabaseConnection, 'query'>, tableName: string): Promise<DuckDBColumnDesc[]>;
17
17
  /**
18
18
  * Generates a mapping of column names to their corresponding DuckDB data types.
19
19
  * @param columns An array of column descriptions from DuckDB. Check getDuckDBColumnTypes.
@@ -28,6 +28,13 @@ export declare function getDuckDBColumnTypesMap(columns: DuckDBColumnDesc[]): Re
28
28
  * @returns The table name, properly quoted.
29
29
  */
30
30
  export declare function quoteTableName(tableName: string): string;
31
+ /**
32
+ * Quotes a column name for safe SQL usage.
33
+ * Always quotes to handle all edge cases (spaces, special characters, reserved words).
34
+ * @param columnName The column name to quote.
35
+ * @returns The column name, properly quoted.
36
+ */
37
+ export declare function quoteColumnName(columnName: string): string;
31
38
  /**
32
39
  * Constructs an SQL query to select all columns from a given table,
33
40
  * converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB,
@@ -54,7 +61,9 @@ export declare function setGeoArrowWKBExtension(table: arrow.Table, columns: Duc
54
61
  * @param arrowSchema Optional arrow table schema when available.
55
62
  * @returns An arrow table.
56
63
  */
57
- export declare const restoreArrowTable: (columns: arrow.Vector[], fields: ProtoDatasetField[], arrowSchema?: arrow.Schema) => arrow.Table<any>;
64
+ export declare const restoreArrowTable: (columns: arrow.Vector[], fields: ProtoDatasetField[], arrowSchema?: arrow.Schema) => arrow.Table<any> | arrow.Table<{
65
+ [key: string]: any;
66
+ }>;
58
67
  /**
59
68
  * DuckDb throws when geoarrow extensions are present in metadata.
60
69
  * @param table An arrow table to clear from extensions.
@@ -35,6 +35,13 @@ export declare class KeplerGlDuckDbTable extends KeplerTable {
35
35
  data: ProcessorResult;
36
36
  }): Promise<void>;
37
37
  update(data: any): Promise<this>;
38
+ /**
39
+ * DuckDB's Arrow view is a query snapshot. Mutating it without SQL INSERT
40
+ * would desync the WASM table, so row edits stay a warned no-op.
41
+ */
42
+ appendRows(_rows: any[][]): boolean;
43
+ upsertRows(_rows: any[][], _keyField: string): boolean;
44
+ removeRows(_indexes: number[]): boolean;
38
45
  static getFileProcessor: (data: any, inputFormat?: string) => {
39
46
  processor: any;
40
47
  format: any;
package/package.json CHANGED
@@ -1,26 +1,29 @@
1
1
  {
2
2
  "name": "@kepler.gl/duckdb",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.3.0-alpha.2",
4
+ "version": "3.3.0-alpha.20",
5
5
  "description": "DuckDB plugin for Kepler.gl",
6
6
  "license": "MIT",
7
- "main": "dist/index.js",
7
+ "main": "dist/cjs/index.js",
8
8
  "types": "dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.js"
12
+ "import": "./dist/esm/index.js",
13
+ "require": "./dist/cjs/index.js",
14
+ "default": "./dist/cjs/index.js"
14
15
  },
15
16
  "./components": {
16
17
  "types": "./dist/components/index.d.ts",
17
- "import": "./dist/components/index.js",
18
- "require": "./dist/components/index.js"
18
+ "import": "./dist/esm/components/index.js",
19
+ "require": "./dist/cjs/components/index.js",
20
+ "default": "./dist/cjs/components/index.js"
19
21
  },
20
22
  "./table": {
21
23
  "types": "./dist/table/index.d.ts",
22
- "import": "./dist/table/index.js",
23
- "require": "./dist/table/index.js"
24
+ "import": "./dist/esm/table/index.js",
25
+ "require": "./dist/cjs/table/index.js",
26
+ "default": "./dist/cjs/table/index.js"
24
27
  }
25
28
  },
26
29
  "keywords": [
@@ -31,27 +34,26 @@
31
34
  "url": "https://github.com/keplergl/kepler.gl.git"
32
35
  },
33
36
  "scripts": {
34
- "build": "rm -fr dist && babel src --out-dir dist --source-maps inline --extensions '.ts,.tsx,.js,.jsx' --ignore '**/*.d.ts'",
35
- "build:umd": "NODE_OPTIONS=--openssl-legacy-provider webpack --config ./webpack/umd.js --progress --env.prod",
37
+ "build": "rm -fr dist && babel src --out-dir dist/cjs --source-maps inline --extensions '.ts,.tsx,.js,.jsx' --ignore '**/*.d.ts,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js,**/*.spec.jsx,**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.test.jsx' && BABEL_ENV=esm babel src --out-dir dist/esm --source-maps inline --extensions '.ts,.tsx,.js,.jsx' --ignore '**/*.d.ts,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js,**/*.spec.jsx,**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.test.jsx'",
36
38
  "build:types": "tsc --project ./tsconfig.production.json",
37
39
  "prepublishOnly": "babel-node ../../scripts/license-header/bin --license ../../FILE-HEADER && yarn build && yarn build:types",
38
- "stab": "mkdir -p dist/components dist/table && echo \"export * from '../src';\" > dist/index.js && echo \"export * from '../../src/components';\" > dist/components/index.js && echo \"export * from '../../src/table';\" > dist/table/index.js"
40
+ "stab": "mkdir -p dist/cjs/components dist/cjs/table dist/esm/components dist/esm/table && echo \"'use strict'; Object.assign(module.exports, require('../../src'));\" > dist/cjs/index.js && echo \"export * from '../../src';\" > dist/esm/index.js && echo \"'use strict'; Object.assign(module.exports, require('../../../src/components'));\" > dist/cjs/components/index.js && echo \"export * from '../../../src/components';\" > dist/esm/components/index.js && echo \"'use strict'; Object.assign(module.exports, require('../../../src/table'));\" > dist/cjs/table/index.js && echo \"export * from '../../../src/table';\" > dist/esm/table/index.js"
39
41
  },
40
42
  "files": [
41
- "dist",
42
- "umd"
43
+ "dist"
43
44
  ],
44
45
  "dependencies": {
45
- "@duckdb/duckdb-wasm": "^1.28.0",
46
- "@kepler.gl/common-utils": "3.3.0-alpha.2",
47
- "@kepler.gl/constants": "3.3.0-alpha.2",
48
- "@kepler.gl/processors": "3.3.0-alpha.2",
49
- "@kepler.gl/table": "3.3.0-alpha.2",
50
- "@kepler.gl/types": "3.3.0-alpha.2",
51
- "@kepler.gl/utils": "3.3.0-alpha.2",
46
+ "@duckdb/duckdb-wasm": "^1.32.0",
47
+ "@kepler.gl/common-utils": "3.3.0-alpha.20",
48
+ "@kepler.gl/constants": "3.3.0-alpha.20",
49
+ "@kepler.gl/processors": "3.3.0-alpha.20",
50
+ "@kepler.gl/table": "3.3.0-alpha.20",
51
+ "@kepler.gl/types": "3.3.0-alpha.20",
52
+ "@kepler.gl/utils": "3.3.0-alpha.20",
52
53
  "@monaco-editor/react": "^4.7.0",
53
54
  "@radix-ui/react-collapsible": "^1.1.0",
54
55
  "apache-arrow": ">=15.0.0",
56
+ "es-toolkit": "^1.39.10",
55
57
  "monaco-editor": "^0.52.0",
56
58
  "react-resizable-panels": "^2.1.7"
57
59
  },
@@ -69,8 +71,9 @@
69
71
  "node": ">=20"
70
72
  },
71
73
  "volta": {
72
- "node": "20.19.3",
74
+ "node": "24.21.0",
73
75
  "yarn": "4.4.0"
74
76
  },
75
- "packageManager": "yarn@4.4.0"
77
+ "packageManager": "yarn@4.4.0",
78
+ "module": "dist/esm/index.js"
76
79
  }
@@ -1,259 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.DuckDBWasmAdapter = void 0;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
- var _duckdbWasm = _interopRequireWildcard(require("@duckdb/duckdb-wasm"));
15
- var duckdb = _duckdbWasm;
16
- var _perf = require("../utils/perf");
17
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
18
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
19
- // SPDX-License-Identifier: MIT
20
- // Copyright contributors to the kepler.gl project
21
- var Connection = /*#__PURE__*/function () {
22
- function Connection(connection) {
23
- (0, _classCallCheck2["default"])(this, Connection);
24
- (0, _defineProperty2["default"])(this, "connection", void 0);
25
- this.connection = connection;
26
- }
27
- return (0, _createClass2["default"])(Connection, [{
28
- key: "query",
29
- value: function () {
30
- var _query = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(statement) {
31
- return _regenerator["default"].wrap(function _callee$(_context) {
32
- while (1) switch (_context.prev = _context.next) {
33
- case 0:
34
- return _context.abrupt("return", this.connection.query(statement));
35
- case 1:
36
- case "end":
37
- return _context.stop();
38
- }
39
- }, _callee, this);
40
- }));
41
- function query(_x) {
42
- return _query.apply(this, arguments);
43
- }
44
- return query;
45
- }()
46
- }, {
47
- key: "insertArrowTable",
48
- value: function () {
49
- var _insertArrowTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(arrowTable, params) {
50
- return _regenerator["default"].wrap(function _callee2$(_context2) {
51
- while (1) switch (_context2.prev = _context2.next) {
52
- case 0:
53
- _context2.next = 2;
54
- return this.connection.insertArrowTable(arrowTable, params);
55
- case 2:
56
- case "end":
57
- return _context2.stop();
58
- }
59
- }, _callee2, this);
60
- }));
61
- function insertArrowTable(_x2, _x3) {
62
- return _insertArrowTable.apply(this, arguments);
63
- }
64
- return insertArrowTable;
65
- }()
66
- }, {
67
- key: "close",
68
- value: function () {
69
- var _close = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
70
- return _regenerator["default"].wrap(function _callee3$(_context3) {
71
- while (1) switch (_context3.prev = _context3.next) {
72
- case 0:
73
- _context3.next = 2;
74
- return this.connection.close();
75
- case 2:
76
- case "end":
77
- return _context3.stop();
78
- }
79
- }, _callee3, this);
80
- }));
81
- function close() {
82
- return _close.apply(this, arguments);
83
- }
84
- return close;
85
- }()
86
- }]);
87
- }();
88
- var DuckDBWasmAdapter = exports.DuckDBWasmAdapter = /*#__PURE__*/function () {
89
- function DuckDBWasmAdapter(options) {
90
- (0, _classCallCheck2["default"])(this, DuckDBWasmAdapter);
91
- (0, _defineProperty2["default"])(this, "duckDB", void 0);
92
- // pass existing AsyncDuckDB object created elsewhere
93
- if (options instanceof Promise || options instanceof _duckdbWasm.AsyncDuckDB) {
94
- this.duckDB = options;
95
- return;
96
- }
97
-
98
- // or create a new AsyncDuckDB object
99
- var _ref = options || {},
100
- _ref$debug = _ref.debug,
101
- debug = _ref$debug === void 0 ? false : _ref$debug,
102
- config = _ref.config;
103
- this.duckDB = initializeDuckDbWasm(config, debug);
104
- }
105
- return (0, _createClass2["default"])(DuckDBWasmAdapter, [{
106
- key: "connect",
107
- value: function () {
108
- var _connect = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
109
- var db, c;
110
- return _regenerator["default"].wrap(function _callee4$(_context4) {
111
- while (1) switch (_context4.prev = _context4.next) {
112
- case 0:
113
- _context4.next = 2;
114
- return this.duckDB;
115
- case 2:
116
- db = _context4.sent;
117
- _context4.next = 5;
118
- return db.connect();
119
- case 5:
120
- c = _context4.sent;
121
- return _context4.abrupt("return", new Connection(c));
122
- case 7:
123
- case "end":
124
- return _context4.stop();
125
- }
126
- }, _callee4, this);
127
- }));
128
- function connect() {
129
- return _connect.apply(this, arguments);
130
- }
131
- return connect;
132
- }()
133
- }, {
134
- key: "registerFileText",
135
- value: function () {
136
- var _registerFileText = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(filename, content) {
137
- var db;
138
- return _regenerator["default"].wrap(function _callee5$(_context5) {
139
- while (1) switch (_context5.prev = _context5.next) {
140
- case 0:
141
- _context5.next = 2;
142
- return this.duckDB;
143
- case 2:
144
- db = _context5.sent;
145
- _context5.next = 5;
146
- return db.registerFileText(filename, content);
147
- case 5:
148
- case "end":
149
- return _context5.stop();
150
- }
151
- }, _callee5, this);
152
- }));
153
- function registerFileText(_x4, _x5) {
154
- return _registerFileText.apply(this, arguments);
155
- }
156
- return registerFileText;
157
- }()
158
- }, {
159
- key: "registerFileHandle",
160
- value: function () {
161
- var _registerFileHandle = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(name, handle, protocol, directIO) {
162
- var db;
163
- return _regenerator["default"].wrap(function _callee6$(_context6) {
164
- while (1) switch (_context6.prev = _context6.next) {
165
- case 0:
166
- _context6.next = 2;
167
- return this.duckDB;
168
- case 2:
169
- db = _context6.sent;
170
- _context6.next = 5;
171
- return db.registerFileHandle(name, handle, protocol, directIO);
172
- case 5:
173
- case "end":
174
- return _context6.stop();
175
- }
176
- }, _callee6, this);
177
- }));
178
- function registerFileHandle(_x6, _x7, _x8, _x9) {
179
- return _registerFileHandle.apply(this, arguments);
180
- }
181
- return registerFileHandle;
182
- }()
183
- }]);
184
- }();
185
- /**
186
- * Initialize DuckDB with a browser-specific Wasm bundle.
187
- */
188
- var initializeDuckDbWasm = /*#__PURE__*/function () {
189
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(config, debug) {
190
- var start, JSDELIVR_BUNDLES, bundle, worker_url, worker, logger, db, res, buffer, fileNameMatch;
191
- return _regenerator["default"].wrap(function _callee7$(_context7) {
192
- while (1) switch (_context7.prev = _context7.next) {
193
- case 0:
194
- start = performance.now(); // Select a bundle based on browser checks
195
- JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
196
- _context7.next = 4;
197
- return duckdb.selectBundle(JSDELIVR_BUNDLES);
198
- case 4:
199
- bundle = _context7.sent;
200
- if (bundle.mainWorker) {
201
- _context7.next = 7;
202
- break;
203
- }
204
- throw new Error('Failed to initialize DuckDB');
205
- case 7:
206
- worker_url = URL.createObjectURL(new Blob(["importScripts(\"".concat(bundle.mainWorker, "\");")], {
207
- type: 'text/javascript'
208
- })); // Instantiate the async version of DuckDB-wasm
209
- worker = new Worker(worker_url);
210
- logger = debug ? new duckdb.ConsoleLogger() : new duckdb.VoidLogger();
211
- db = new _duckdbWasm.AsyncDuckDB(logger, worker);
212
- _context7.next = 13;
213
- return db.instantiate(bundle.mainModule, bundle.pthreadWorker);
214
- case 13:
215
- URL.revokeObjectURL(worker_url);
216
- if (!config) {
217
- _context7.next = 28;
218
- break;
219
- }
220
- if (!config.path) {
221
- _context7.next = 26;
222
- break;
223
- }
224
- _context7.next = 18;
225
- return fetch(config.path);
226
- case 18:
227
- res = _context7.sent;
228
- _context7.next = 21;
229
- return res.arrayBuffer();
230
- case 21:
231
- buffer = _context7.sent;
232
- fileNameMatch = config.path.match(/[^/]*$/);
233
- if (fileNameMatch) {
234
- config.path = fileNameMatch[0];
235
- }
236
- _context7.next = 26;
237
- return db.registerFileBuffer(config.path, new Uint8Array(buffer));
238
- case 26:
239
- _context7.next = 28;
240
- return db.open(config);
241
- case 28:
242
- if (debug) {
243
- (0, _perf.logElapsedTime)('DuckDB initialized', start);
244
- if (config) {
245
- console.debug("DuckDbConfig: ".concat(JSON.stringify(config, null, 2)));
246
- }
247
- }
248
- return _context7.abrupt("return", db);
249
- case 30:
250
- case "end":
251
- return _context7.stop();
252
- }
253
- }, _callee7);
254
- }));
255
- return function initializeDuckDbWasm(_x10, _x11) {
256
- return _ref2.apply(this, arguments);
257
- };
258
- }();
259
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsImR1Y2tkYiIsIl9wZXJmIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQ29ubmVjdGlvbiIsImNvbm5lY3Rpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl9xdWVyeSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwic3RhdGVtZW50Iiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInF1ZXJ5Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5zZXJ0QXJyb3dUYWJsZSIsIl9jYWxsZWUyIiwiYXJyb3dUYWJsZSIsInBhcmFtcyIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImluc2VydEFycm93VGFibGUiLCJfeDIiLCJfeDMiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNsb3NlIiwiRHVja0RCV2FzbUFkYXB0ZXIiLCJleHBvcnRzIiwib3B0aW9ucyIsIlByb21pc2UiLCJBc3luY0R1Y2tEQiIsImR1Y2tEQiIsIl9yZWYiLCJfcmVmJGRlYnVnIiwiZGVidWciLCJjb25maWciLCJpbml0aWFsaXplRHVja0RiV2FzbSIsIl9jb25uZWN0IiwiX2NhbGxlZTQiLCJkYiIsImMiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZW50IiwiY29ubmVjdCIsIl9yZWdpc3RlckZpbGVUZXh0IiwiX2NhbGxlZTUiLCJmaWxlbmFtZSIsImNvbnRlbnQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJyZWdpc3RlckZpbGVUZXh0IiwiX3g0IiwiX3g1IiwiX3JlZ2lzdGVyRmlsZUhhbmRsZSIsIl9jYWxsZWU2IiwibmFtZSIsImhhbmRsZSIsInByb3RvY29sIiwiZGlyZWN0SU8iLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJyZWdpc3RlckZpbGVIYW5kbGUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJfcmVmMiIsIl9jYWxsZWU3Iiwic3RhcnQiLCJKU0RFTElWUl9CVU5ETEVTIiwiYnVuZGxlIiwid29ya2VyX3VybCIsIndvcmtlciIsImxvZ2dlciIsInJlcyIsImJ1ZmZlciIsImZpbGVOYW1lTWF0Y2giLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwZXJmb3JtYW5jZSIsIm5vdyIsImdldEpzRGVsaXZyQnVuZGxlcyIsInNlbGVjdEJ1bmRsZSIsIm1haW5Xb3JrZXIiLCJFcnJvciIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJjb25jYXQiLCJ0eXBlIiwiV29ya2VyIiwiQ29uc29sZUxvZ2dlciIsIlZvaWRMb2dnZXIiLCJpbnN0YW50aWF0ZSIsIm1haW5Nb2R1bGUiLCJwdGhyZWFkV29ya2VyIiwicmV2b2tlT2JqZWN0VVJMIiwicGF0aCIsImZldGNoIiwiYXJyYXlCdWZmZXIiLCJtYXRjaCIsInJlZ2lzdGVyRmlsZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJvcGVuIiwibG9nRWxhcHNlZFRpbWUiLCJjb25zb2xlIiwiSlNPTiIsInN0cmluZ2lmeSIsIl94MTAiLCJfeDExIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2R1Y2tkYi13YXNtLWFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCAqIGFzIGR1Y2tkYiBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcbmltcG9ydCB7QXN5bmNEdWNrREIsIER1Y2tEQkNvbmZpZywgQXN5bmNEdWNrREJDb25uZWN0aW9ufSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtEYXRhYmFzZUFkYXB0ZXIsIERhdGFiYXNlQ29ubmVjdGlvbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7bG9nRWxhcHNlZFRpbWV9IGZyb20gJy4uL3V0aWxzL3BlcmYnO1xuXG5jbGFzcyBDb25uZWN0aW9uIGltcGxlbWVudHMgRGF0YWJhc2VDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBBc3luY0R1Y2tEQkNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQXN5bmNEdWNrREJDb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KHN0YXRlbWVudDogc3RyaW5nKTogUHJvbWlzZTxhcnJvdy5UYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucXVlcnkoc3RhdGVtZW50KTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsIHBhcmFtczoge25hbWU6IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uaW5zZXJ0QXJyb3dUYWJsZShhcnJvd1RhYmxlLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxudHlwZSBEdWNrREJXYXNtQWRhcHRlclByb3BzID1cbiAgfCB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICBjb25maWc/OiBEdWNrREJDb25maWc7XG4gICAgfVxuICB8IFByb21pc2U8QXN5bmNEdWNrREI+O1xuXG5leHBvcnQgY2xhc3MgRHVja0RCV2FzbUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhYmFzZUFkYXB0ZXIge1xuICBwcml2YXRlIGR1Y2tEQjogUHJvbWlzZTxBc3luY0R1Y2tEQj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRHVja0RCV2FzbUFkYXB0ZXJQcm9wcykge1xuICAgIC8vIHBhc3MgZXhpc3RpbmcgQXN5bmNEdWNrREIgb2JqZWN0IGNyZWF0ZWQgZWxzZXdoZXJlXG4gICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBQcm9taXNlIHx8IG9wdGlvbnMgaW5zdGFuY2VvZiBBc3luY0R1Y2tEQikge1xuICAgICAgdGhpcy5kdWNrREIgPSBvcHRpb25zIGFzIGFueTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvciBjcmVhdGUgYSBuZXcgQXN5bmNEdWNrREIgb2JqZWN0XG4gICAgY29uc3Qge2RlYnVnID0gZmFsc2UsIGNvbmZpZ30gPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZHVja0RCID0gaW5pdGlhbGl6ZUR1Y2tEYldhc20oY29uZmlnLCBkZWJ1Zyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgdGhpcy5kdWNrREI7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcbiAgICByZXR1cm4gbmV3IENvbm5lY3Rpb24oYyk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlckZpbGVUZXh0KGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZHVja0RCO1xuICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQoZmlsZW5hbWUsIGNvbnRlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXJGaWxlSGFuZGxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBoYW5kbGU6IGFueSxcbiAgICBwcm90b2NvbDogZHVja2RiLkR1Y2tEQkRhdGFQcm90b2NvbCxcbiAgICBkaXJlY3RJTzogYm9vbGVhblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZHVja0RCO1xuICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZUhhbmRsZShuYW1lLCBoYW5kbGUsIHByb3RvY29sLCBkaXJlY3RJTyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIER1Y2tEQiB3aXRoIGEgYnJvd3Nlci1zcGVjaWZpYyBXYXNtIGJ1bmRsZS5cbiAqL1xuY29uc3QgaW5pdGlhbGl6ZUR1Y2tEYldhc20gPSBhc3luYyAoXG4gIGNvbmZpZz86IER1Y2tEQkNvbmZpZyxcbiAgZGVidWc/OiBib29sZWFuXG4pOiBQcm9taXNlPEFzeW5jRHVja0RCPiA9PiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgLy8gU2VsZWN0IGEgYnVuZGxlIGJhc2VkIG9uIGJyb3dzZXIgY2hlY2tzXG4gIGNvbnN0IEpTREVMSVZSX0JVTkRMRVMgPSBkdWNrZGIuZ2V0SnNEZWxpdnJCdW5kbGVzKCk7XG4gIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGR1Y2tkYi5zZWxlY3RCdW5kbGUoSlNERUxJVlJfQlVORExFUyk7XG4gIGlmICghYnVuZGxlLm1haW5Xb3JrZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIER1Y2tEQicpO1xuICB9XG5cbiAgY29uc3Qgd29ya2VyX3VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoXG4gICAgbmV3IEJsb2IoW2BpbXBvcnRTY3JpcHRzKFwiJHtidW5kbGUubWFpbldvcmtlcn1cIik7YF0sIHtcbiAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgfSlcbiAgKTtcblxuICAvLyBJbnN0YW50aWF0ZSB0aGUgYXN5bmMgdmVyc2lvbiBvZiBEdWNrREItd2FzbVxuICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlcl91cmwpO1xuICBjb25zdCBsb2dnZXIgPSBkZWJ1ZyA/IG5ldyBkdWNrZGIuQ29uc29sZUxvZ2dlcigpIDogbmV3IGR1Y2tkYi5Wb2lkTG9nZ2VyKCk7XG4gIGNvbnN0IGRiID0gbmV3IEFzeW5jRHVja0RCKGxvZ2dlciwgd29ya2VyKTtcbiAgYXdhaXQgZGIuaW5zdGFudGlhdGUoYnVuZGxlLm1haW5Nb2R1bGUsIGJ1bmRsZS5wdGhyZWFkV29ya2VyKTtcbiAgVVJMLnJldm9rZU9iamVjdFVSTCh3b3JrZXJfdXJsKTtcblxuICBpZiAoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZy5wYXRoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChjb25maWcucGF0aCk7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lTWF0Y2ggPSBjb25maWcucGF0aC5tYXRjaCgvW14vXSokLyk7XG4gICAgICBpZiAoZmlsZU5hbWVNYXRjaCkge1xuICAgICAgICBjb25maWcucGF0aCA9IGZpbGVOYW1lTWF0Y2hbMF07XG4gICAgICB9XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVCdWZmZXIoY29uZmlnLnBhdGgsIG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgIH1cbiAgICBhd2FpdCBkYi5vcGVuKGNvbmZpZyk7XG4gIH1cblxuICBpZiAoZGVidWcpIHtcbiAgICBsb2dFbGFwc2VkVGltZSgnRHVja0RCIGluaXRpYWxpemVkJywgc3RhcnQpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYER1Y2tEYkNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsV0FBQSxHQUFB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