From 6c3943908db63c39c3179a73479d2f6ec050a68a Mon Sep 17 00:00:00 2001 From: Darek Date: Tue, 16 Apr 2024 18:52:25 -0400 Subject: [PATCH] Upgrading to rs 0.39 (#196) * Upgrading to rs 0.38 * Updating yarn lock --- .github/workflows/docs.yaml | 2 +- .github/workflows/test-js.yaml | 4 +- Cargo.toml | 20 +++--- bun.lockb | Bin 133448 -> 0 bytes package.json | 10 +-- polars/dataframe.ts | 4 +- polars/io.ts | 1 - polars/lazy/dataframe.ts | 6 +- polars/lazy/expr/list.ts | 4 +- polars/series/index.ts | 1 - rust-toolchain | 2 +- src/conversion.rs | 2 +- src/dataframe.rs | 28 ++++---- src/lazy/dataframe.rs | 49 +++++++------ src/lazy/dsl.rs | 54 +++++++------- src/lib.rs | 2 +- src/series.rs | 12 +++- yarn.lock | 124 ++++++++++++++++----------------- 18 files changed, 167 insertions(+), 158 deletions(-) delete mode 100755 bun.lockb diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 6421798e..56337acf 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -14,7 +14,7 @@ jobs: - name: Install latest Rust nightly uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2024-02-23 + toolchain: nightly-2024-03-28 components: rustfmt, clippy - name: Install ghp-import uses: actions/setup-python@v5 diff --git a/.github/workflows/test-js.yaml b/.github/workflows/test-js.yaml index 13009277..1a600d03 100644 --- a/.github/workflows/test-js.yaml +++ b/.github/workflows/test-js.yaml @@ -18,7 +18,7 @@ jobs: - name: Install latest Rust nightly uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2024-02-23 + toolchain: nightly-2024-03-28 components: rustfmt, clippy - run: yarn --version - name: Install Node Dependencies @@ -43,7 +43,7 @@ jobs: - name: Install latest Rust nightly uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2024-02-23 + toolchain: nightly-2024-03-28 components: rustfmt, clippy - name: Bun version uses: oven-sh/setup-bun@v1 diff --git a/Cargo.toml b/Cargo.toml index 81b7b2fb..9b511560 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,20 +13,20 @@ repository = "https://github.com/pola-rs/nodejs-polars" crate-type = ["cdylib", "lib"] [dependencies] -ahash = "0.8.7" +ahash = "0.8.11" bincode = "1.3.3" -napi = { version = "2.16.1", default-features = false, features = [ +napi = { version = "2.16.2", default-features = false, features = [ "napi8", "serde-json", ] } -napi-derive = { version = "2.16.1", default-features = false } -polars-core = { git = "https://github.com/pola-rs/polars.git", rev = "3e2cab8de39b2721ce3830c3958b3b0796b32258", default-features = false } -polars-io = { git = "https://github.com/pola-rs/polars.git", rev = "3e2cab8de39b2721ce3830c3958b3b0796b32258", default-features = false } -polars-lazy = { git = "https://github.com/pola-rs/polars.git", rev = "3e2cab8de39b2721ce3830c3958b3b0796b32258", default-features = false } +napi-derive = { version = "2.16.2", default-features = false } +polars-core = { git = "https://github.com/pola-rs/polars.git", rev = "37c630320da0d0d3270d283cdafbf6b8402de069", default-features = false } +polars-io = { git = "https://github.com/pola-rs/polars.git", rev = "37c630320da0d0d3270d283cdafbf6b8402de069", default-features = false } +polars-lazy = { git = "https://github.com/pola-rs/polars.git", rev = "37c630320da0d0d3270d283cdafbf6b8402de069", default-features = false } thiserror = "1" smartstring = { version = "1" } serde_json = { version = "1" } -either = "1.10.0" +either = "1.11.0" [dependencies.polars] features = [ @@ -91,7 +91,6 @@ features = [ "peaks", "string_pad", "cov", - "group_by_list", "sql", "binary_encoding", "rolling_window", @@ -154,7 +153,6 @@ features = [ "peaks", "string_pad", "cov", - "group_by_list", "http", "cloud", "aws", @@ -162,10 +160,10 @@ features = [ "azure" ] git = "https://github.com/pola-rs/polars.git" -rev = "3e2cab8de39b2721ce3830c3958b3b0796b32258" +rev = "37c630320da0d0d3270d283cdafbf6b8402de069" [build-dependencies] -napi-build = "2.1.2" +napi-build = "2.1.3" [profile.release] codegen-units = 1 diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 5cc614912e719c5394a8d24a2d4d7687f3614623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133448 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 a6N6!>g?t8#_#godAQp4{qdotG|NDO)(k{UO diff --git a/package.json b/package.json index ae933557..55be8af2 100644 --- a/package.json +++ b/package.json @@ -54,18 +54,18 @@ "precommit": "yarn lint && yarn test" }, "devDependencies": { - "@biomejs/biome": "^1.6.3", - "@napi-rs/cli": "^2.18.0", + "@biomejs/biome": "^1.6.4", + "@napi-rs/cli": "^2.18.1", "@types/chance": "^1.1.6", "@types/jest": "^29.5.12", - "@types/node": "^20.11.30", + "@types/node": "^20.12.7", "chance": "^1.1.11", "jest": "^29.7.0", "source-map-support": "^0.5.21", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", - "typedoc": "^0.25.12", - "typescript": "5.4.3" + "typedoc": "^0.25.13", + "typescript": "5.4.5" }, "packageManager": "yarn@4.0.2", "workspaces": [ diff --git a/polars/dataframe.ts b/polars/dataframe.ts index 62dd3db7..81ac27c8 100644 --- a/polars/dataframe.ts +++ b/polars/dataframe.ts @@ -2337,7 +2337,6 @@ export const _DataFrame = (_df: any): DataFrame => { if (typeof opts === "number") { return wrap("slice", opts, length); } - return wrap("slice", opts.offset, opts.length); }, sort(arg, descending = false, maintain_order = false) { @@ -2350,8 +2349,7 @@ export const _DataFrame = (_df: any): DataFrame => { .sort(arg, descending, maintain_order) .collectSync({ noOptimization: true, stringCache: false }); } - - return wrap("sort", arg, descending, maintain_order, true, false); + return wrap("sort", arg, descending, true, maintain_order); }, std() { return this.lazy().std().collectSync(); diff --git a/polars/io.ts b/polars/io.ts index 4743f4fe..d90f79b4 100644 --- a/polars/io.ts +++ b/polars/io.ts @@ -483,7 +483,6 @@ interface ScanParquetOptions { rechunk?: boolean; lowMemory?: boolean; useStatistics?: boolean; - hivePartitioning?: boolean; cloudOptions?: Map; retries?: number; } diff --git a/polars/lazy/dataframe.ts b/polars/lazy/dataframe.ts index fe5d19f8..fa281a1a 100644 --- a/polars/lazy/dataframe.ts +++ b/polars/lazy/dataframe.ts @@ -962,12 +962,10 @@ export const _LazyDataFrame = (_ldf: any): LazyDataFrame => { return this.sort(arg.by, arg.descending, arg.maintain_order); } if (typeof arg === "string") { - return wrap("sort", arg, descending, maintain_order, true, false); + return wrap("sort", arg, descending, true, maintain_order); } - descending = [descending].flat(3) as any; const by = selectionToExprList(arg, false); - - return wrap("sortByExprs", by, descending, maintain_order, true); + return wrap("sortByExprs", by, descending, true, maintain_order); }, std() { return _LazyDataFrame(_ldf.std()); diff --git a/polars/lazy/expr/list.ts b/polars/lazy/expr/list.ts index 0eab49e2..abe69aff 100644 --- a/polars/lazy/expr/list.ts +++ b/polars/lazy/expr/list.ts @@ -49,9 +49,9 @@ export const ExprListFunctions = (_expr: any): ExprList => { }, get(index: number | Expr) { if (Expr.isExpr(index)) { - return wrap("listGet", index._expr); + return wrap("listGet", index._expr, true); } - return wrap("listGet", pli.lit(index)); + return wrap("listGet", pli.lit(index), true); }, head(n = 5) { return this.slice(0, n); diff --git a/polars/series/index.ts b/polars/series/index.ts index 6470b51d..8d9bc189 100644 --- a/polars/series/index.ts +++ b/polars/series/index.ts @@ -1686,7 +1686,6 @@ export function _Series(_s: any): Series { }, sort(options?) { options = { descending: false, nullsLast: false, ...(options ?? {}) }; - return wrap("sort", options.descending, options.nullsLast); }, sub(field) { diff --git a/rust-toolchain b/rust-toolchain index a80658a6..49dcb8af 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2024-02-23 \ No newline at end of file +nightly-2024-03-28 \ No newline at end of file diff --git a/src/conversion.rs b/src/conversion.rs index 4f35074f..9ec086f4 100644 --- a/src/conversion.rs +++ b/src/conversion.rs @@ -568,7 +568,7 @@ pub struct WriteCsvOptions { pub date_format: Option, pub time_format: Option, pub float_precision: Option, - pub null_value: Option + pub null_value: Option, } #[napi(object)] diff --git a/src/dataframe.rs b/src/dataframe.rs index 2d9fa2f9..e0db1ca8 100644 --- a/src/dataframe.rs +++ b/src/dataframe.rs @@ -773,19 +773,16 @@ impl JsDataFrame { by_column: String, descending: bool, nulls_last: bool, - multithreaded: bool, maintain_order: bool, ) -> napi::Result { let df = self .df - .sort_with_options( - &by_column, - SortOptions { - descending, - nulls_last, - multithreaded, - maintain_order, - }, + .sort( + [&by_column], + SortMultipleOptions::default() + .with_order_descending(descending) + .with_nulls_last(nulls_last) + .with_maintain_order(maintain_order), ) .map_err(JsPolarsErr::from)?; Ok(JsDataFrame::new(df)) @@ -798,7 +795,12 @@ impl JsDataFrame { maintain_order: bool, ) -> napi::Result<()> { self.df - .sort_in_place([&by_column], descending, maintain_order) + .sort_in_place( + [&by_column], + SortMultipleOptions::default() + .with_order_descending(descending) + .with_maintain_order(maintain_order), + ) .map_err(JsPolarsErr::from)?; Ok(()) } @@ -1321,8 +1323,10 @@ impl JsDataFrame { let time_format = options.time_format; let datetime_format = options.datetime_format; let float_precision: Option = options.float_precision.map(|fp| fp as usize); - let null_value = options.null_value.unwrap_or(SerializeOptions::default().null); - + let null_value = options + .null_value + .unwrap_or(SerializeOptions::default().null); + match path_or_buffer.get_type()? { ValueType::String => { let path: napi::JsString = unsafe { path_or_buffer.cast() }; diff --git a/src/lazy/dataframe.rs b/src/lazy/dataframe.rs index 1fad4639..37950548 100644 --- a/src/lazy/dataframe.rs +++ b/src/lazy/dataframe.rs @@ -3,7 +3,7 @@ use crate::dataframe::JsDataFrame; use crate::prelude::*; use polars::prelude::{col, lit, ClosedWindow, JoinType}; use polars_io::cloud::CloudOptions; -use polars_io::RowIndex; +use polars_io::{HiveOptions, RowIndex}; use std::collections::HashMap; use std::num::NonZeroUsize; use std::path::PathBuf; @@ -134,20 +134,17 @@ impl JsLazyFrame { pub fn sort( &self, by_column: String, - reverse: bool, + descending: bool, nulls_last: bool, - multithreaded: bool, maintain_order: bool, ) -> JsLazyFrame { let ldf = self.ldf.clone(); ldf.sort( - &by_column, - SortOptions { - descending: reverse, - nulls_last, - multithreaded, - maintain_order, - }, + [&by_column], + SortMultipleOptions::default() + .with_order_descending(descending) + .with_nulls_last(nulls_last) + .with_maintain_order(maintain_order), ) .into() } @@ -155,13 +152,19 @@ impl JsLazyFrame { pub fn sort_by_exprs( &self, by_column: Vec<&JsExpr>, - reverse: Vec, + descending: bool, nulls_last: bool, maintain_order: bool, ) -> JsLazyFrame { let ldf = self.ldf.clone(); - ldf.sort_by_exprs(by_column.to_exprs(), reverse, nulls_last, maintain_order) - .into() + ldf.sort_by_exprs( + by_column.to_exprs(), + SortMultipleOptions::default() + .with_order_descending(descending) + .with_nulls_last(nulls_last) + .with_maintain_order(maintain_order), + ) + .into() } #[napi(catch_unwind)] pub fn cache(&self) -> JsLazyFrame { @@ -229,7 +232,7 @@ impl JsLazyFrame { let closed_window = closed.0; let ldf = self.ldf.clone(); let by = by.to_exprs(); - let lazy_gb = ldf.group_by_rolling( + let lazy_gb = ldf.rolling( index_column.inner.clone(), by, RollingGroupOptions { @@ -711,8 +714,7 @@ pub struct ScanParquetOptions { pub rechunk: Option, pub low_memory: Option, pub use_statistics: Option, - pub hive_partitioning: Option, - pub cloud_options: Option>, + pub cloud_options: Option>, pub retries: Option, } @@ -725,14 +727,14 @@ pub fn scan_parquet(path: String, options: ScanParquetOptions) -> napi::Result = if let Some(o) = options.cloud_options { let co: Vec<(String, String)> = o.into_iter().map(|kv: (String, String)| kv).collect(); Some(CloudOptions::from_untyped_config(&path, co).map_err(JsPolarsErr::from)?) } else { None }; - + let retries = options.retries.unwrap_or_else(|| 2) as usize; if retries > 0 { cloud_options = @@ -744,7 +746,6 @@ pub fn scan_parquet(path: String, options: ScanParquetOptions) -> napi::Result napi::Result napi::Result = options.row_count.map(|rc| rc.into()); let args = ScanArgsIpc { n_rows, cache, rechunk, row_index, - memmap, + memory_map, cloud_options: Default::default(), }; let lf = LazyFrame::scan_ipc(path, args).map_err(JsPolarsErr::from)?; diff --git a/src/lazy/dsl.rs b/src/lazy/dsl.rs index 209becb1..1b314b7a 100644 --- a/src/lazy/dsl.rs +++ b/src/lazy/dsl.rs @@ -301,34 +301,23 @@ impl JsExpr { } #[napi(catch_unwind)] - pub fn sort_with( - &self, - descending: bool, - nulls_last: bool, - multithreaded: bool, - maintain_order: bool, - ) -> JsExpr { + pub fn sort_with(&self, descending: bool, nulls_last: bool, maintain_order: bool) -> JsExpr { self.clone() .inner - .sort_with(SortOptions { - descending, - nulls_last, - multithreaded, - maintain_order, - }) + .sort( + SortOptions::default() + .with_order_descending(descending) + .with_nulls_last(nulls_last) + .with_maintain_order(maintain_order), + ) .into() } #[napi(catch_unwind)] - pub fn arg_sort(&self, reverse: bool, multithreaded: bool, maintain_order: bool) -> JsExpr { + pub fn arg_sort(&self, descending: bool) -> JsExpr { self.clone() .inner - .arg_sort(SortOptions { - descending: reverse, - nulls_last: true, - multithreaded, - maintain_order, - }) + .arg_sort(SortOptions::default().with_order_descending(descending)) .into() } #[napi(catch_unwind)] @@ -343,17 +332,20 @@ impl JsExpr { pub fn gather(&self, idx: &JsExpr) -> JsExpr { self.clone().inner.gather(idx.inner.clone()).into() } - #[napi(catch_unwind)] pub fn sort_by(&self, by: Vec<&JsExpr>, reverse: Vec) -> JsExpr { - let by = by.to_exprs(); - self.clone().inner.sort_by(by, reverse).into() + self.clone() + .inner + .sort_by( + by.to_exprs(), + SortMultipleOptions::default().with_order_descendings(reverse), + ) + .into() } #[napi(catch_unwind)] pub fn backward_fill(&self) -> JsExpr { self.clone().inner.backward_fill(None).into() } - #[napi(catch_unwind)] pub fn forward_fill(&self) -> JsExpr { self.clone().inner.forward_fill(None).into() @@ -1204,8 +1196,12 @@ impl JsExpr { self.inner.clone().list().len().into() } #[napi(catch_unwind)] - pub fn list_get(&self, index: &JsExpr) -> JsExpr { - self.inner.clone().list().get(index.inner.clone()).into() + pub fn list_get(&self, index: &JsExpr, null_on_oob: bool) -> JsExpr { + self.inner + .clone() + .list() + .get(index.inner.clone(), null_on_oob) + .into() } #[napi(catch_unwind)] pub fn list_join(&self, separator: &JsExpr, ignore_nulls: bool) -> JsExpr { @@ -1625,7 +1621,11 @@ pub fn cov(a: Wrap, b: Wrap, ddof: u8) -> JsExpr { #[cfg(feature = "range")] pub fn arg_sort_by(by: Vec<&JsExpr>, descending: Vec) -> JsExpr { let by = by.to_exprs(); - polars::lazy::dsl::arg_sort_by(by, &descending).into() + polars::lazy::dsl::arg_sort_by( + by, + SortMultipleOptions::default().with_order_descendings(descending), + ) + .into() } #[napi(catch_unwind)] diff --git a/src/lib.rs b/src/lib.rs index 9671a06e..b306cfa2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -26,8 +26,8 @@ pub mod list_construction; pub mod prelude; pub mod series; pub mod set; -pub mod utils; pub mod sql; +pub mod utils; pub use polars_core; diff --git a/src/series.rs b/src/series.rs index 35c7bfc7..0180a852 100644 --- a/src/series.rs +++ b/src/series.rs @@ -490,8 +490,16 @@ impl JsSeries { } #[napi(catch_unwind)] - pub unsafe fn sort(&mut self, descending: bool, nulls_last: bool) -> Self { - self.series.sort(descending, nulls_last).into() + pub unsafe fn sort(&mut self, descending: bool, nulls_last: bool) -> napi::Result { + let sorted: Series = self + .series + .sort( + SortOptions::default() + .with_order_descending(descending) + .with_nulls_last(nulls_last), + ) + .map_err(JsPolarsErr::from)?; + Ok(sorted.into()) } #[napi] diff --git a/yarn.lock b/yarn.lock index af49a30d..fd77f00f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -408,18 +408,18 @@ __metadata: languageName: node linkType: hard -"@biomejs/biome@npm:^1.6.3": - version: 1.6.3 - resolution: "@biomejs/biome@npm:1.6.3" - dependencies: - "@biomejs/cli-darwin-arm64": 1.6.3 - "@biomejs/cli-darwin-x64": 1.6.3 - "@biomejs/cli-linux-arm64": 1.6.3 - "@biomejs/cli-linux-arm64-musl": 1.6.3 - "@biomejs/cli-linux-x64": 1.6.3 - "@biomejs/cli-linux-x64-musl": 1.6.3 - "@biomejs/cli-win32-arm64": 1.6.3 - "@biomejs/cli-win32-x64": 1.6.3 +"@biomejs/biome@npm:^1.6.4": + version: 1.6.4 + resolution: "@biomejs/biome@npm:1.6.4" + dependencies: + "@biomejs/cli-darwin-arm64": 1.6.4 + "@biomejs/cli-darwin-x64": 1.6.4 + "@biomejs/cli-linux-arm64": 1.6.4 + "@biomejs/cli-linux-arm64-musl": 1.6.4 + "@biomejs/cli-linux-x64": 1.6.4 + "@biomejs/cli-linux-x64-musl": 1.6.4 + "@biomejs/cli-win32-arm64": 1.6.4 + "@biomejs/cli-win32-x64": 1.6.4 dependenciesMeta: "@biomejs/cli-darwin-arm64": optional: true @@ -439,62 +439,62 @@ __metadata: optional: true bin: biome: bin/biome - checksum: 3d75aad82ecee5e15c965a9b86ce18d86002fc8235d2cbab30883f5c30738174964420aa2ae3a8b6c694133f8cdc9d990ed7b39b4ea3e9e5e11aa7a1fc01e441 + checksum: c8b28b3e0dfa9fe5033ffec9ac923e3ef9f5fd20ad451f4cb04dfc19981e7b97acc7cd63709d91cb1c93dc58b742513d0b68674c040b8b9f1f25e0c5c7289fc2 languageName: node linkType: hard -"@biomejs/cli-darwin-arm64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-darwin-arm64@npm:1.6.3" +"@biomejs/cli-darwin-arm64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-darwin-arm64@npm:1.6.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-darwin-x64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-darwin-x64@npm:1.6.3" +"@biomejs/cli-darwin-x64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-darwin-x64@npm:1.6.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@biomejs/cli-linux-arm64-musl@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-linux-arm64-musl@npm:1.6.3" +"@biomejs/cli-linux-arm64-musl@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-linux-arm64-musl@npm:1.6.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-arm64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-linux-arm64@npm:1.6.3" +"@biomejs/cli-linux-arm64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-linux-arm64@npm:1.6.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-linux-x64-musl@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-linux-x64-musl@npm:1.6.3" +"@biomejs/cli-linux-x64-musl@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-linux-x64-musl@npm:1.6.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-x64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-linux-x64@npm:1.6.3" +"@biomejs/cli-linux-x64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-linux-x64@npm:1.6.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-win32-arm64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-win32-arm64@npm:1.6.3" +"@biomejs/cli-win32-arm64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-win32-arm64@npm:1.6.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-win32-x64@npm:1.6.3": - version: 1.6.3 - resolution: "@biomejs/cli-win32-x64@npm:1.6.3" +"@biomejs/cli-win32-x64@npm:1.6.4": + version: 1.6.4 + resolution: "@biomejs/cli-win32-x64@npm:1.6.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -824,12 +824,12 @@ __metadata: languageName: node linkType: hard -"@napi-rs/cli@npm:^2.18.0": - version: 2.18.0 - resolution: "@napi-rs/cli@npm:2.18.0" +"@napi-rs/cli@npm:^2.18.1": + version: 2.18.1 + resolution: "@napi-rs/cli@npm:2.18.1" bin: napi: scripts/index.js - checksum: eadff1dda564416b66db44f5ea7088712f8cf66f6677082197e6d3ce5a57d9eabeb0d091b4d1685e8a4bd275ff1de684fca1ae84edd0f66dac82cb328acc068c + checksum: a52b83dc105c782875a963b5c244dd02e336f31b6b0b5ac3a12d7488fb710890ff248f876130881264b2b403f8e26726a8e32b017bd8803f9bc9bd7ea0a1c4d2 languageName: node linkType: hard @@ -1016,12 +1016,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.11.30": - version: 20.11.30 - resolution: "@types/node@npm:20.11.30" +"@types/node@npm:^20.12.7": + version: 20.12.7 + resolution: "@types/node@npm:20.12.7" dependencies: undici-types: ~5.26.4 - checksum: 7597767aa3e44b0f1bf62efa522dd17741135f283c11de6a20ead8bb7016fb4999cc30adcd8f2bb29ebb216906c92894346ccd187de170927dc1e212d2c07c81 + checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686 languageName: node linkType: hard @@ -3004,18 +3004,18 @@ __metadata: version: 0.0.0-use.local resolution: "nodejs-polars@workspace:." dependencies: - "@biomejs/biome": ^1.6.3 - "@napi-rs/cli": ^2.18.0 + "@biomejs/biome": ^1.6.4 + "@napi-rs/cli": ^2.18.1 "@types/chance": ^1.1.6 "@types/jest": ^29.5.12 - "@types/node": ^20.11.30 + "@types/node": ^20.12.7 chance: ^1.1.11 jest: ^29.7.0 source-map-support: ^0.5.21 ts-jest: ^29.1.2 ts-node: ^10.9.2 - typedoc: ^0.25.12 - typescript: 5.4.3 + typedoc: ^0.25.13 + typescript: 5.4.5 languageName: unknown linkType: soft @@ -3717,9 +3717,9 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.25.12": - version: 0.25.12 - resolution: "typedoc@npm:0.25.12" +"typedoc@npm:^0.25.13": + version: 0.25.13 + resolution: "typedoc@npm:0.25.13" dependencies: lunr: ^2.3.9 marked: ^4.3.0 @@ -3729,27 +3729,27 @@ __metadata: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x bin: typedoc: bin/typedoc - checksum: 6022dd921f78361b62ec9cbb8b847cbcf00e0f2bc45799409d5f6d74edbca8d82d31bf9a7d17a4e1c3c1916ba8265c2266bded50902533faaec53d5cdb558e80 + checksum: 703d1f48137300b0ef3df1998a25ae745db3ca0b126f8dd1f7262918f11243a94d24dfc916cdba2baeb5a7d85d5a94faac811caf7f4fa6b7d07144dc02f7639f languageName: node linkType: hard -"typescript@npm:5.4.3": - version: 5.4.3 - resolution: "typescript@npm:5.4.3" +"typescript@npm:5.4.5": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: d74d731527e35e64d8d2dcf2f897cf8cfbc3428be0ad7c48434218ba4ae41239f53be7c90714089db1068c05cae22436af2ecba71fd36ecc5e7a9118af060198 + checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 languageName: node linkType: hard -"typescript@patch:typescript@5.4.3#~builtin": - version: 5.4.3 - resolution: "typescript@patch:typescript@npm%3A5.4.3#~builtin::version=5.4.3&hash=14eedb" +"typescript@patch:typescript@5.4.5#~builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=14eedb" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 3a62fe90aa79d68c9ce38ea5edb2957e62801c733b99f0e5a2b8b50922761f68f7d9a40d28c544b449866e81185cddb93cba2496d0ff3fa52ef5b1f8bcace38c + checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba languageName: node linkType: hard