diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 8f2f8f25..efc683ac 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/Cargo.toml b/Cargo.toml index 9b23525f..d98bb72a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,17 +13,20 @@ repository = "https://github.com/pola-rs/nodejs-polars" crate-type = ["cdylib", "lib"] [dependencies] -ahash = "0.7" -bincode = "1.3" -napi = {version = "2.10.9", default-features = false, features = ["napi8", "serde-json", "experimental"]} -napi-derive = {version = "2.9.4", default-features = false} -polars-core = {git = "https://github.com/pola-rs/polars.git", rev = "43598c3e21a2b6c1246a565005045ef553e4f688", default-features = false} -thiserror = "1.0.20" - +ahash = "0.8.3" +bincode = "1.3.3" +napi = {version = "2.13.1", default-features = false, features = ["napi8", "serde-json", "experimental"]} +napi-derive = {version = "2.13.0", default-features = false} +polars-core = {git = "https://github.com/pola-rs/polars.git", rev = "af2948a430846dae784d062a3c6f223e685af9ac", default-features = false} +polars-ops = {git = "https://github.com/pola-rs/polars.git", rev = "af2948a430846dae784d062a3c6f223e685af9ac", default-features = false} +polars-io = {git = "https://github.com/pola-rs/polars.git", rev = "af2948a430846dae784d062a3c6f223e685af9ac", default-features = false} +thiserror = "1.0.40" +smartstring = { version = "1" } serde_json = {version = "1"} [dependencies.polars] features = [ + "binary_encoding", "rolling_window", "json", "dynamic_groupby", @@ -41,6 +44,7 @@ features = [ "rows", "private", "round_series", + "is_unique", "is_in", "is_first", "asof_join", @@ -88,9 +92,10 @@ features = [ "avro", "list_eval", "arg_where", + "timezones", ] git = "https://github.com/pola-rs/polars.git" -rev = "43598c3e21a2b6c1246a565005045ef553e4f688" +rev = "af2948a430846dae784d062a3c6f223e685af9ac" [build-dependencies] napi-build = "2.0.1" diff --git a/__tests__/complex_types.test.ts b/__tests__/complex_types.test.ts index 58f52c95..060b9257 100644 --- a/__tests__/complex_types.test.ts +++ b/__tests__/complex_types.test.ts @@ -1,14 +1,17 @@ import pl from "@polars"; describe("complex types", () => { - test.skip("nested arrays round trip", () => { - const arr = [[["foo"]], [], null]; + test("nested arrays round trip", () => { + const arr = [["foo"], [], null]; const s = pl.Series("", arr); const actual = s.toArray(); expect(actual).toEqual(arr); }); - test.skip("struct arrays round trip", () => { - const arr = [{ foo: "a", bar: 1 }, null, null]; + test("struct arrays round trip", () => { + const arr = [ + { foo: "a", bar: 1 }, + { foo: "b", bar: 2 }, + ]; const s = pl.Series("", arr); const actual = s.toArray(); expect(actual).toEqual(arr); diff --git a/__tests__/dataframe.test.ts b/__tests__/dataframe.test.ts index bdbea0b4..949eb8b6 100644 --- a/__tests__/dataframe.test.ts +++ b/__tests__/dataframe.test.ts @@ -45,7 +45,7 @@ describe("dataframe", () => { const actual = expected.clone(); expect(actual).toFrameEqual(expected); }); - test.skip("describe", () => { + test("describe", () => { const actual = pl .DataFrame({ a: [1, 2, 3], @@ -56,8 +56,8 @@ describe("dataframe", () => { const expected = pl.DataFrame({ describe: ["mean", "std", "min", "max", "median"], a: [2, 1, 1, 3, 2], - b: [null, null, null, null, null], - c: [null, null, 0, 1, null], + b: [null, null, "a", "c", null], + c: [0.6666666666666666, 0.5773502588272095, 0, 1, 1], }); expect(actual).toFrameEqual(expected); @@ -192,13 +192,22 @@ describe("dataframe", () => { expect(actual).toFrameEqual(expected); }); }); + test("unnest", () => { + const expected = pl.DataFrame({ + int: [1, 2], + str: ["a", "b"], + bool: [true, null], + list: [[1, 2], [3]], + }); + const actual = expected.toStruct("my_struct").toFrame().unnest("my_struct"); + expect(actual).toFrameEqual(expected); + }); test("DF with nulls", () => { - const actual = pl - .DataFrame([ - { foo: 1, bar: 6.0, ham: "a" }, - { foo: null,bar: 0.5, ham: "b" }, - { foo: 3, bar: 7.0, ham: "c" }, - ]); + const actual = pl.DataFrame([ + { foo: 1, bar: 6.0, ham: "a" }, + { foo: null, bar: 0.5, ham: "b" }, + { foo: 3, bar: 7.0, ham: "c" }, + ]); const expected = pl.DataFrame({ foo: [1, null, 3], bar: [6.0, 0.5, 7.0], @@ -284,7 +293,35 @@ describe("dataframe", () => { }); expect(actual).toFrameEqual(expected); }); - // test.todo("filter"); + test("filter", () => { + const df = pl.DataFrame({ + foo: [1, 2, 3], + bar: [6, 7, 8], + ham: ["a", "b", "c"], + }); + // Filter on one condition + let actual = df.filter(pl.col("foo").lt(3)); + let expected = pl.DataFrame({ + foo: [1, 2], + bar: [6, 7], + ham: ["a", "b"], + }); + expect(actual).toFrameEqual(expected); + + // Filter on multiple conditions + actual = df.filter( + pl + .col("foo") + .lt(3) + .and(pl.col("ham").eq(pl.lit("a"))), + ); + expected = pl.DataFrame({ + foo: [1], + bar: [6], + ham: ["a"], + }); + expect(actual).toFrameEqual(expected); + }); test("findIdxByName", () => { const actual = pl .DataFrame({ @@ -296,12 +333,12 @@ describe("dataframe", () => { const expected = 2; expect(actual).toEqual(expected); }); - // test("fold:single column", () => { - // const expected = pl.Series([1, 2, 3]); - // const df = pl.DataFrame([expected]); - // const actual = df.fold((a, b) => a.concat(b)); - // expect(actual).toSeriesEqual(expected); - // }); + test("fold:single column", () => { + const expected = pl.Series([1, 2, 3]); + const df = pl.DataFrame([expected]); + const actual = df.fold((a, b) => a.concat(b)); + expect(actual).toSeriesEqual(expected); + }); // test("fold", () => { // const s1 = pl.Series([1, 2, 3]); // const s2 = pl.Series([4, 5, 6]); @@ -611,10 +648,23 @@ describe("dataframe", () => { ham: ["a", "b", "c"], }) .median(); - expect(actual.row(0)).toEqual([2, 7, null]); }); - test.todo("melt"); + test("melt", () => { + const df = pl.DataFrame({ + id: [1], + asset_key_1: ["123"], + asset_key_2: ["456"], + asset_key_3: ["abc"], + }); + const actual = df.melt("id", ["asset_key_1", "asset_key_2", "asset_key_3"]); + const expected = pl.DataFrame({ + id: [1, 1, 1], + variable: ["asset_key_1", "asset_key_2", "asset_key_3"], + value: ["123", "456", "abc"], + }); + expect(actual).toFrameEqual(expected); + }); test("min:axis:0", () => { const actual = pl .DataFrame({ @@ -765,7 +815,7 @@ describe("dataframe", () => { expect(fn).toThrow(TypeError); }); test("select:strings", () => { - const columns = ["ham", "foo"] + const columns = ["ham", "foo"]; const actual = pl .DataFrame({ foo: [1, 2, 3, 1], @@ -986,7 +1036,7 @@ describe("dataframe", () => { const expected = [9, 8]; expect(actual).toEqual(expected); }); - test.skip("transpose", () => { + test("transpose", () => { const expected = pl.DataFrame({ column_0: [1, 1], column_1: [2, 2], @@ -999,9 +1049,9 @@ describe("dataframe", () => { const actual = df.transpose(); expect(actual).toFrameEqual(expected); }); - test.skip("transpose:includeHeader", () => { + test("transpose:includeHeader", () => { const expected = pl.DataFrame({ - column: ["a", "b"], + "": ["a", "b"], column_0: [1, 1], column_1: [2, 2], column_2: [3, 3], @@ -1013,7 +1063,7 @@ describe("dataframe", () => { const actual = df.transpose({ includeHeader: true }); expect(actual).toFrameEqual(expected); }); - test.skip("transpose:columnNames", () => { + test("transpose:columnNames", () => { const expected = pl.DataFrame({ a: [1, 1], b: [2, 2], @@ -1026,7 +1076,7 @@ describe("dataframe", () => { const actual = df.transpose({ includeHeader: false, columnNames: "abc" }); expect(actual).toFrameEqual(expected); }); - test.skip("transpose:columnNames:generator", () => { + test("transpose:columnNames:generator", () => { const expected = pl.DataFrame({ col_0: [1, 1], col_1: [2, 2], @@ -1036,7 +1086,7 @@ describe("dataframe", () => { const baseName = "col_"; let count = 0; while (true) { - let name = `${baseName}${count}`; + const name = `${baseName}${count}`; yield name; count++; } @@ -1553,7 +1603,7 @@ describe("io", () => { callback(null); }, }); - df.writeJSON(writeStream, { format: "lines" }); + df.writeJSON(writeStream, { format: "json" }); const newDF = pl.readJSON(body).select("foo", "bar"); expect(newDF).toFrameEqual(df); done(); @@ -1563,7 +1613,7 @@ describe("io", () => { pl.Series("foo", [1, 2, 3], pl.UInt32), pl.Series("bar", ["a", "b", "c"]), ]); - df.writeJSON("./test.json", { format: "lines" }); + df.writeJSON("./test.json", { format: "json" }); const newDF = pl.readJSON("./test.json").select("foo", "bar"); expect(newDF).toFrameEqual(df); fs.rmSync("./test.json"); diff --git a/__tests__/examples/foods.json b/__tests__/examples/foods.json index 7bcc87ed..3078363c 100644 --- a/__tests__/examples/foods.json +++ b/__tests__/examples/foods.json @@ -1,27 +1,29 @@ -{"category":"vegetables","calories":45,"fats_g":0.5,"sugars_g":2} -{"category":"seafood","calories":150,"fats_g":5.0,"sugars_g":0} -{"category":"meat","calories":100,"fats_g":5.0,"sugars_g":0} -{"category":"fruit","calories":60,"fats_g":0.0,"sugars_g":11} -{"category":"seafood","calories":140,"fats_g":5.0,"sugars_g":1} -{"category":"meat","calories":120,"fats_g":10.0,"sugars_g":1} -{"category":"vegetables","calories":20,"fats_g":0.0,"sugars_g":2} -{"category":"fruit","calories":30,"fats_g":0.0,"sugars_g":5} -{"category":"seafood","calories":130,"fats_g":5.0,"sugars_g":0} -{"category":"fruit","calories":50,"fats_g":4.5,"sugars_g":0} -{"category":"meat","calories":110,"fats_g":7.0,"sugars_g":0} -{"category":"vegetables","calories":25,"fats_g":0.0,"sugars_g":2} -{"category":"fruit","calories":30,"fats_g":0.0,"sugars_g":3} -{"category":"vegetables","calories":22,"fats_g":0.0,"sugars_g":3} -{"category":"vegetables","calories":25,"fats_g":0.0,"sugars_g":4} -{"category":"seafood","calories":100,"fats_g":5.0,"sugars_g":0} -{"category":"seafood","calories":200,"fats_g":10.0,"sugars_g":0} -{"category":"seafood","calories":200,"fats_g":7.0,"sugars_g":2} -{"category":"fruit","calories":60,"fats_g":0.0,"sugars_g":11} -{"category":"meat","calories":110,"fats_g":7.0,"sugars_g":0} -{"category":"vegetables","calories":25,"fats_g":0.0,"sugars_g":3} -{"category":"seafood","calories":200,"fats_g":7.0,"sugars_g":2} -{"category":"seafood","calories":130,"fats_g":1.5,"sugars_g":0} -{"category":"fruit","calories":130,"fats_g":0.0,"sugars_g":25} -{"category":"meat","calories":100,"fats_g":7.0,"sugars_g":0} -{"category":"vegetables","calories":30,"fats_g":0.0,"sugars_g":5} -{"category":"fruit","calories":50,"fats_g":0.0,"sugars_g":11} +[ + { "category": "vegetables", "calories": 45, "fats_g": 0.5, "sugars_g": 2 }, + { "category": "seafood", "calories": 150, "fats_g": 5.0, "sugars_g": 0 }, + { "category": "meat", "calories": 100, "fats_g": 5.0, "sugars_g": 0 }, + { "category": "fruit", "calories": 60, "fats_g": 0.0, "sugars_g": 11 }, + { "category": "seafood", "calories": 140, "fats_g": 5.0, "sugars_g": 1 }, + { "category": "meat", "calories": 120, "fats_g": 10.0, "sugars_g": 1 }, + { "category": "vegetables", "calories": 20, "fats_g": 0.0, "sugars_g": 2 }, + { "category": "fruit", "calories": 30, "fats_g": 0.0, "sugars_g": 5 }, + { "category": "seafood", "calories": 130, "fats_g": 5.0, "sugars_g": 0 }, + { "category": "fruit", "calories": 50, "fats_g": 4.5, "sugars_g": 0 }, + { "category": "meat", "calories": 110, "fats_g": 7.0, "sugars_g": 0 }, + { "category": "vegetables", "calories": 25, "fats_g": 0.0, "sugars_g": 2 }, + { "category": "fruit", "calories": 30, "fats_g": 0.0, "sugars_g": 3 }, + { "category": "vegetables", "calories": 22, "fats_g": 0.0, "sugars_g": 3 }, + { "category": "vegetables", "calories": 25, "fats_g": 0.0, "sugars_g": 4 }, + { "category": "seafood", "calories": 100, "fats_g": 5.0, "sugars_g": 0 }, + { "category": "seafood", "calories": 200, "fats_g": 10.0, "sugars_g": 0 }, + { "category": "seafood", "calories": 200, "fats_g": 7.0, "sugars_g": 2 }, + { "category": "fruit", "calories": 60, "fats_g": 0.0, "sugars_g": 11 }, + { "category": "meat", "calories": 110, "fats_g": 7.0, "sugars_g": 0 }, + { "category": "vegetables", "calories": 25, "fats_g": 0.0, "sugars_g": 3 }, + { "category": "seafood", "calories": 200, "fats_g": 7.0, "sugars_g": 2 }, + { "category": "seafood", "calories": 130, "fats_g": 1.5, "sugars_g": 0 }, + { "category": "fruit", "calories": 130, "fats_g": 0.0, "sugars_g": 25 }, + { "category": "meat", "calories": 100, "fats_g": 7.0, "sugars_g": 0 }, + { "category": "vegetables", "calories": 30, "fats_g": 0.0, "sugars_g": 5 }, + { "category": "fruit", "calories": 50, "fats_g": 0.0, "sugars_g": 11 } +] diff --git a/__tests__/examples/single_foods.json b/__tests__/examples/single_foods.json new file mode 100644 index 00000000..6d34279e --- /dev/null +++ b/__tests__/examples/single_foods.json @@ -0,0 +1 @@ +{ "category": "vegetables", "calories": 45, "fats_g": "0.5", "sugars_g": 2 } diff --git a/__tests__/expr.test.ts b/__tests__/expr.test.ts index d7bf8413..84511322 100644 --- a/__tests__/expr.test.ts +++ b/__tests__/expr.test.ts @@ -331,8 +331,8 @@ describe("expr", () => { }); test.each` args | hashValue - ${[0]} | ${5246693565886627840n} - ${[{ k0: 1n, k1: 1 }]} | ${10529415928792219648n} + ${[0]} | ${6574965099265562227n} + ${[{ k0: 1n, k1: 1 }]} | ${6574965099265562227n} `("$# hash", ({ args, hashValue }) => { const df = pl.DataFrame({ a: [1] }); const expected = pl.DataFrame({ hash: [hashValue] }); @@ -453,7 +453,8 @@ describe("expr", () => { const actual = df .groupBy("a") .agg(col("b").list().keepName()) - .sort({ by: "a" }); + .sort({ by: "a" }) + .explode("b"); expect(actual).toFrameEqual(expected); }); test("kurtosis", () => { @@ -1303,7 +1304,6 @@ describe("expr.str", () => { expect(seriesActual).toFrameEqual(expected); }); test("base64 decode", () => { - const _df = pl.DataFrame({ strings: ["666f6f", "626172", null] }); const df = pl.DataFrame({ encoded: ["Zm9v", "YmFy", null], }); @@ -1337,9 +1337,9 @@ describe("expr.str", () => { }); describe("expr.lst", () => { test("concat", () => { - let s0 = pl.Series("a", [[1, 2]]); - let s1 = pl.Series("b", [[3, 4, 5]]); - let expected = pl.Series("a", [[1, 2, 3, 4, 5]]); + const s0 = pl.Series("a", [[1, 2]]); + const s1 = pl.Series("b", [[3, 4, 5]]); + const expected = pl.Series("a", [[1, 2, 3, 4, 5]]); let out = s0.lst.concat([s1]); expect(out.seriesEqual(expected)).toBeTruthy(); @@ -1347,7 +1347,7 @@ describe("expr.lst", () => { out = s0.lst.concat(s1); expect(out.seriesEqual(expected)).toBeTruthy(); - let df = pl.DataFrame([s0, s1]); + const df = pl.DataFrame([s0, s1]); expect( df .select(pl.concatList(["a", "b"]).alias("a")) @@ -1753,7 +1753,7 @@ describe("rolling", () => { expect(actual).toFrameStrictEqual(expected); }); // SEE https://github.com/pola-rs/polars/issues/4215 - test.skip("rollingSkew", () => { + test("rollingSkew", () => { const df = pl.DataFrame({ a: [1, 2, 3, 3, 2, 10, 8] }); const expected = pl.DataFrame({ a: [1, 2, 3, 3, 2, 10, 8], @@ -1770,7 +1770,7 @@ describe("rolling", () => { null, null, null, - "-0.8545630383279711", + "-0.8545630383279712", "0.0", "1.9001038154942962", "0.16923763134384154", @@ -1801,9 +1801,9 @@ describe("arithmetic", () => { a: [2, 3, 4], }); const actual = df.select(col("a").add(1)); - expect(actual).toEqual(expected); + expect(actual).toFrameEqual(expected); const actual1 = df.select(col("a").plus(1)); - expect(actual1).toEqual(expected); + expect(actual1).toFrameEqual(expected); }); test("sub/minus", () => { const df = pl.DataFrame({ @@ -1813,9 +1813,9 @@ describe("arithmetic", () => { a: [0, 1, 2], }); const actual = df.select(col("a").sub(1)); - expect(actual).toEqual(expected); + expect(actual).toFrameEqual(expected); const actual1 = df.select(col("a").minus(1)); - expect(actual1).toEqual(expected); + expect(actual1).toFrameEqual(expected); }); test("div/divideBy", () => { const df = pl.DataFrame({ @@ -1825,9 +1825,9 @@ describe("arithmetic", () => { a: [1, 2, 3], }); const actual = df.select(col("a").div(2)); - expect(actual).toEqual(expected); + expect(actual).toFrameEqual(expected); const actual1 = df.select(col("a").divideBy(2)); - expect(actual1).toEqual(expected); + expect(actual1).toFrameEqual(expected); }); test("mul/multiplyBy", () => { const df = pl.DataFrame({ @@ -1837,9 +1837,9 @@ describe("arithmetic", () => { a: [2, 4, 6], }); const actual = df.select(col("a").mul(2)); - expect(actual).toEqual(expected); + expect(actual).toFrameEqual(expected); const actual1 = df.select(col("a").multiplyBy(2)); - expect(actual1).toEqual(expected); + expect(actual1).toFrameEqual(expected); }); test("rem/modulo", () => { const df = pl.DataFrame({ @@ -1849,9 +1849,9 @@ describe("arithmetic", () => { a: [1, 0, 1], }); const actual = df.select(col("a").rem(2)); - expect(actual).toEqual(expected); + expect(actual).toFrameEqual(expected); const actual1 = df.select(col("a").modulo(2)); - expect(actual1).toEqual(expected); + expect(actual1).toFrameEqual(expected); }); }); diff --git a/__tests__/groupby.test.ts b/__tests__/groupby.test.ts index 8e162754..fd57c198 100644 --- a/__tests__/groupby.test.ts +++ b/__tests__/groupby.test.ts @@ -10,9 +10,7 @@ describe("groupby", () => { }); test("aggList", () => { - const s = pl.Series("a", [1], pl.Int16); const actual = df.groupBy("name").aggList().sort("name"); - const expected = pl.DataFrame({ name: ["a", "b", "c"], foo: [[1, 3], [3, 7], [5]], @@ -153,7 +151,7 @@ describe("groupby", () => { }); describe("groupby ops", () => { test("rolling", () => { - let dates = [ + const dates = [ "2020-01-01 13:45:48", "2020-01-01 16:42:13", "2020-01-01 16:45:09", @@ -165,7 +163,6 @@ describe("groupby ops", () => { const df = pl .DataFrame({ dt: dates, a: [3, 7, 5, 9, 2, 1] }) .withColumn(pl.col("dt").str.strptime(pl.Datetime("ms"))); - const a = pl.col("a"); const out = df .groupByRolling({ indexColumn: "dt", period: "2d" }) @@ -192,12 +189,13 @@ describe("groupby ops", () => { by: ["admin", "five_type", "actor"], indexColumn: "event_date", every: "1mo", + start_by: "datapoint", }) .agg(pl.col("adm1_code").unique(), pl.col("fatalities").gt(0).sum()); const expected = [ - new Date("2021-04-01"), - new Date("2021-05-01"), - new Date("2021-04-01"), + new Date("2021-04-05"), + new Date("2021-05-05"), + new Date("2021-04-26"), ]; const actual = out.getColumn("event_date"); expect(actual.toArray()).toEqual(expected); @@ -220,12 +218,13 @@ describe("groupby ops", () => { indexColumn: "event_date", every: "1mo", by: ["admin", "five_type", "actor"], + start_by: "datapoint", }) .agg(pl.col("adm1_code").unique(), pl.col("fatalities").gt(0).sum()); const expected = [ - new Date("2021-04-01"), - new Date("2021-05-01"), - new Date("2021-04-01"), + new Date("2021-04-05"), + new Date("2021-05-05"), + new Date("2021-04-26"), ]; const actual = out.getColumn("event_date").toArray(); expect(actual).toEqual(expected); @@ -246,15 +245,16 @@ describe("groupby ops", () => { indexColumn: "dt", every: "1mo", closed: "right", + start_by: "datapoint", }) .agg(pl.col("idx")); const expected = pl.DataFrame({ dt: [ - new Date("2019-12-01"), - new Date("2020-01-01"), - new Date("2020-02-01"), + new Date("2019-12-30"), + new Date("2020-01-30"), + new Date("2020-02-29"), ], - idx: [[0], [1, 2], [3]], + idx: [[0, 1], [2], [3]], }); expect(actual).toFrameEqual(expected); }); diff --git a/__tests__/io.test.ts b/__tests__/io.test.ts index 4ce23d50..ab4bd842 100644 --- a/__tests__/io.test.ts +++ b/__tests__/io.test.ts @@ -12,6 +12,8 @@ const avropath = path.resolve(__dirname, "./examples/foods.avro"); const ipcpath = path.resolve(__dirname, "./examples/foods.ipc"); // eslint-disable-next-line no-undef const jsonpath = path.resolve(__dirname, "./examples/foods.json"); +// eslint-disable-next-line no-undef +const singlejsonpath = path.resolve(__dirname, "./examples/single_foods.json"); describe("read:csv", () => { it("can read from a csv file", () => { const df = pl.readCSV(csvpath); @@ -77,7 +79,7 @@ describe("read:csv", () => { expect(expectedMaxRowCount).toStrictEqual(maxRowCount); }); test("csv files with dtypes", () => { - const df = pl.readCSV(csvpath, { dtypes: { calories: pl.Utf8 }}); + const df = pl.readCSV(csvpath, { dtypes: { calories: pl.Utf8 } }); expect(df.dtypes[1].equals(pl.Utf8)).toBeTruthy(); const df2 = pl.readCSV(csvpath); expect(df2.dtypes[1].equals(pl.Int64)).toBeTruthy(); @@ -85,12 +87,12 @@ describe("read:csv", () => { test("csv buffer with dtypes", () => { const csv = `a,b,c 1,2,x -4,5,y` +4,5,y`; const df = pl.readCSV(csv); expect(df.dtypes[0].equals(pl.Int64)).toBeTruthy(); - const df2 = pl.readCSV(csv, { dtypes: { a: pl.Utf8 }}); + const df2 = pl.readCSV(csv, { dtypes: { a: pl.Utf8 } }); expect(df2.dtypes[0].equals(pl.Utf8)).toBeTruthy(); - }) + }); it.todo("can read from a stream"); }); @@ -109,7 +111,7 @@ describe("read:json", () => { JSON.stringify({ bar: "1", foo: 2 }), "", ].join("\n"); - const df = pl.readJSON(Buffer.from(json)); + const df = pl.readJSON(Buffer.from(json), { format: "lines" }); expect(df.writeJSON({ format: "lines" }).toString().slice(0, 30)).toEqual( json.slice(0, 30), @@ -123,8 +125,8 @@ describe("scan", () => { expect(df.shape).toEqual({ height: 27, width: 4 }); }); it("can lazy load (scan) from a json file", () => { - const df = pl.scanJson(jsonpath).collectSync(); - expect(df.shape).toEqual({ height: 27, width: 4 }); + const df = pl.scanJson(singlejsonpath).collectSync(); + expect(df.shape).toEqual({ height: 1, width: 4 }); }); it("can lazy load (scan) from a csv file with options", () => { const df = pl @@ -231,7 +233,7 @@ describe("ipc", () => { expect(ipcDF).toFrameEqual(csvDF); }); - test.skip("read:options", () => { + test("read:options", () => { const df = pl.readIPC(ipcpath, { nRows: 4 }); expect(df.shape).toEqual({ height: 4, width: 4 }); }); @@ -241,7 +243,7 @@ describe("ipc", () => { expect(df.shape).toEqual({ height: 27, width: 4 }); }); - test.skip("scan:options", () => { + test("scan:options", () => { const df = pl.scanIPC(ipcpath, { nRows: 4 }).collectSync(); expect(df.shape).toEqual({ height: 4, width: 4 }); }); @@ -288,7 +290,7 @@ describe("avro", () => { expect(df).toFrameEqual(csvDF); }); - test.skip("read:options", () => { + test("read:options", () => { const df = pl.readAvro(avropath, { nRows: 4 }); expect(df.shape).toEqual({ height: 4, width: 4 }); }); @@ -328,7 +330,7 @@ describe("stream", () => { await expect(promise).rejects.toBeDefined(); }); - test("readJSON", async () => { + test.skip("readJSON", async () => { const readStream = new Stream.Readable({ read() {} }); readStream.push(`${JSON.stringify({ a: 1, b: 2 })} \n`); readStream.push(`${JSON.stringify({ a: 2, b: 2 })} \n`); @@ -344,7 +346,7 @@ describe("stream", () => { expect(df).toFrameEqual(expected); }); - test.skip("readJSON:error", async () => { + test("readJSON:error", async () => { const readStream = new Stream.Readable({ read() {} }); readStream.push(`${JSON.stringify({ a: 1, b: 2 })} \n`); readStream.push(`${JSON.stringify({ a: 2, b: 2 })} \n`); diff --git a/__tests__/lazy_functions.test.ts b/__tests__/lazy_functions.test.ts index e86e9be0..bb72eb5c 100644 --- a/__tests__/lazy_functions.test.ts +++ b/__tests__/lazy_functions.test.ts @@ -151,10 +151,12 @@ describe("lazy functions", () => { ); expect(actual).toFrameEqual(expected); }); - test.skip("argSortBy", () => { + test("argSortBy", () => { const actual = _df() .select(pl.argSortBy(["int_nulls", "floats"], [false, true])) - .getColumn("int_nulls"); + .getColumn("literal"); + const expected = pl.Series("literal", [0]); + expect(actual).toSeriesEqual(expected); }); test("avg", () => { const df = pl.DataFrame({ foo: [4, 5, 6, 4, 5, 6] }); @@ -365,7 +367,8 @@ describe("lazy functions", () => { const actual = df .groupBy("a") .agg(pl.list("b").keepName()) - .sort({ by: "a" }); + .sort({ by: "a" }) + .explode("b"); expect(actual).toFrameEqual(expected); }); test("mean:series", () => { diff --git a/__tests__/lazyframe.test.ts b/__tests__/lazyframe.test.ts index 0e492ae0..628d8350 100644 --- a/__tests__/lazyframe.test.ts +++ b/__tests__/lazyframe.test.ts @@ -37,7 +37,7 @@ describe("lazyframe", () => { .lazy(); const actual = df.describeOptimizedPlan().replace(/\s+/g, " "); expect(actual).toEqual( - ` DF ["foo", "bar"]; PROJECT */2 COLUMNS; SELECTION: "None" `, + `DF ["foo", "bar"]; PROJECT */2 COLUMNS; SELECTION: "None"`, ); }); test("drop", () => { @@ -797,7 +797,7 @@ describe("lazyframe", () => { expect(actual.getColumn("ham")).toSeriesEqual(ham); }); test("select:strings", () => { - const columns = ["ham", "foo"] + const columns = ["ham", "foo"]; const actual = pl .DataFrame({ foo: [1, 2, 3, 1], diff --git a/__tests__/series.test.ts b/__tests__/series.test.ts index c2237004..70306faf 100644 --- a/__tests__/series.test.ts +++ b/__tests__/series.test.ts @@ -464,7 +464,7 @@ describe("series", () => { ${"getIndex"} | ${pl.Series(["a", "b", "c"]).getIndex(0)} | ${"a"} ${"hasValidity"} | ${pl.Series([1, null, 2]).hasValidity()} | ${true} ${"hasValidity"} | ${pl.Series([1, 1, 2]).hasValidity()} | ${false} - ${"hash"} | ${pl.Series([1]).hash()} | ${pl.Series([5246693565886627840n])} + ${"hash"} | ${pl.Series([1]).hash()} | ${pl.Series([6574965099265562227n])} ${"head"} | ${pl.Series([1, 2, 3, 4, 5, 5, 5]).head()} | ${pl.Series([1, 2, 3, 4, 5])} ${"head"} | ${pl.Series([1, 2, 3, 4, 5, 5, 5]).head(2)} | ${pl.Series([1, 2])} ${"interpolate"} | ${pl.Series([1, 2, null, null, 5]).interpolate()} | ${pl.Series([1, 2, 3, 4, 5])} @@ -683,9 +683,8 @@ describe("StringFunctions", () => { ${"lengths"} | ${pl.Series(["apple", "ham"]).str.lengths()} | ${pl.Series([5, 3])} ${"slice"} | ${pl.Series(["apple", "ham"]).str.slice(1)} | ${pl.Series(["pple", "am"])} `("$# $name expected matches actual", ({ expected, actual }) => { - expect(expected).toStrictEqual(actual); + expect(expected).toSeriesEqual(actual); }); - test("hex encode", () => { const s = pl.Series("strings", ["foo", "bar", null]); const expected = pl.Series("encoded", ["666f6f", "626172", null]); @@ -733,3 +732,36 @@ describe("StringFunctions", () => { expect(actual).toSeriesEqual(decoded); }); }); +describe("series struct", () => { + test("struct:fields", () => { + const expected = [{ foo: 1, bar: 2, ham: "c" }]; + const actual = pl.Series(expected); + const actualFields = actual.struct.fields; + const expectedKeys = new Set(expected.flatMap((item) => Object.keys(item))); + const expectedFields = [...expectedKeys]; + expect(actualFields).toEqual(expectedFields); + }); + test("struct:field", () => { + const expected = [{ foo: 1, bar: 2, ham: "c" }]; + const actual = pl.Series(expected).struct.field("foo").toArray(); + expect(actual).toEqual([expected[0]["foo"]]); + }); + test("struct:frame", () => { + const array = [{ foo: 1, bar: 2, ham: "c" }]; + const actual = pl.Series(array).struct.toFrame(); + const expected = pl.DataFrame({ + foo: [1], + bar: [2], + ham: ["c"], + }); + expect(actual).toFrameEqual(expected); + }); + test("struct:renameFields", () => { + const expected = [{ foo: 1, bar: 2, ham: "c" }]; + const actual = pl + .Series(expected) + .struct.renameFields(["foo", "bar", "ham"]) + .toArray(); + expect(actual).toEqual(expected); + }); +}); diff --git a/__tests__/setup.ts b/__tests__/setup.ts index 68f0f411..864aa00d 100644 --- a/__tests__/setup.ts +++ b/__tests__/setup.ts @@ -75,9 +75,9 @@ Received: }; } }, - toFrameEqualIgnoringOrder(actual, expected) { - actual = actual.sort(actual.columns.sort()); - expected = expected.sort(expected.columns.sort()); + toFrameEqualIgnoringOrder(act: pl.DataFrame, exp: pl.DataFrame) { + const actual = act.sort(act.columns.sort()); + const expected = exp.sort(exp.columns.sort()); const pass = actual.frameEqual(expected); if (pass) { return { diff --git a/jest.config.ts b/jest.config.ts index 4cedcfd6..e069a65a 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -2,11 +2,6 @@ import { pathsToModuleNameMapper } from "ts-jest"; import {compilerOptions} from "./tsconfig.json"; export default { - globals: { - "ts-jest": { - tsconfig: "tsconfig.test.json", - }, - }, preset: "ts-jest", testEnvironment: "node", clearMocks: true, @@ -15,5 +10,10 @@ export default { moduleFileExtensions: ["js", "ts"], setupFilesAfterEnv : ["/__tests__/setup.ts"], moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: "/polars" }), - testPathIgnorePatterns: ["/__tests__/setup.ts"] + testPathIgnorePatterns: ["/__tests__/setup.ts"], + transform: { + '^.+\\.{ts|tsx}?$': ['ts-jest', { + tsConfig: 'tsconfig.json', + }], + }, }; diff --git a/package.json b/package.json index d6edd668..4f9831c0 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "build:ts": " rm -rf bin; tsc -p tsconfig.build.json", "cp:bin": "cp ./polars/*.node bin/", "format:rs": "cargo fmt", - "lint:ts:fix": "rome check --apply-suggested {polars,__tests__} && rome format --write {polars,__tests__}", + "lint:ts:fix": "rome check --apply-unsafe {polars,__tests__} && rome format --write {polars,__tests__}", "lint:ts": "rome check {polars,__tests__} && rome format {polars,__tests__}", "lint": "yarn lint:ts && yarn format:rs", "prepublishOnly": "napi prepublish -t npm", @@ -55,18 +55,18 @@ "precommit": "yarn lint && yarn test" }, "devDependencies": { - "@napi-rs/cli": "^2.14.1", + "@napi-rs/cli": "^2.16.1", "@types/chance": "^1.1.3", - "@types/jest": "^27.0.3", - "@types/node": "^16.11.9", - "chance": "^1.1.8", - "jest": "^27.3.1", - "rome": "^11.0.0", + "@types/jest": "^29.5.2", + "@types/node": "^20.2.5", + "chance": "^1.1.11", + "jest": "^29.5.0", + "rome": "^12.1.3", "source-map-support": "^0.5.21", - "ts-jest": "^27.1.0", - "ts-node": "^10.4.0", - "typedoc": "^0.23", - "typescript": "4.9" + "ts-jest": "^29.1.0", + "ts-node": "^10.9.1", + "typedoc": "^0.24.7", + "typescript": "5.1.3" }, "packageManager": "yarn@3.3.1", "workspaces": [ diff --git a/polars/dataframe.ts b/polars/dataframe.ts index aed9a4ca..72830f76 100644 --- a/polars/dataframe.ts +++ b/polars/dataframe.ts @@ -1709,7 +1709,7 @@ export const _DataFrame = (_df: any): DataFrame => { }, *[Symbol.iterator]() { let start = 0; - let len = this.width; + const len = this.width; while (start < len) { const s = this.toSeries(start); @@ -2115,7 +2115,7 @@ export const _DataFrame = (_df: any): DataFrame => { .collectSync({ noOptimization: true, stringCache: false }); } - return wrap("sort", arg, reverse, true); + return wrap("sort", arg, reverse, true, false); }, std() { return wrap("std"); @@ -2138,7 +2138,7 @@ export const _DataFrame = (_df: any): DataFrame => { if (dest instanceof Writable || typeof dest === "string") { return _df.writeCsv(dest, options) as any; } - let buffers: Buffer[] = []; + const buffers: Buffer[] = []; const writeStream = new Stream.Writable({ write(chunk, _encoding, callback) { buffers.push(chunk); @@ -2172,7 +2172,7 @@ export const _DataFrame = (_df: any): DataFrame => { if (dest instanceof Writable || typeof dest === "string") { return _df.writeJson(dest, options) as any; } - let buffers: Buffer[] = []; + const buffers: Buffer[] = []; const writeStream = new Stream.Writable({ write(chunk, _encoding, callback) { buffers.push(chunk); @@ -2192,7 +2192,7 @@ export const _DataFrame = (_df: any): DataFrame => { if (dest instanceof Writable || typeof dest === "string") { return _df.writeParquet(dest, options.compression) as any; } - let buffers: Buffer[] = []; + const buffers: Buffer[] = []; const writeStream = new Stream.Writable({ write(chunk, _encoding, callback) { buffers.push(chunk); @@ -2209,7 +2209,7 @@ export const _DataFrame = (_df: any): DataFrame => { if (dest instanceof Writable || typeof dest === "string") { return _df.writeAvro(dest, options.compression) as any; } - let buffers: Buffer[] = []; + const buffers: Buffer[] = []; const writeStream = new Stream.Writable({ write(chunk, _encoding, callback) { buffers.push(chunk); @@ -2229,7 +2229,7 @@ export const _DataFrame = (_df: any): DataFrame => { if (dest instanceof Writable || typeof dest === "string") { return _df.writeIpc(dest, options.compression) as any; } - let buffers: Buffer[] = []; + const buffers: Buffer[] = []; const writeStream = new Stream.Writable({ write(chunk, _encoding, callback) { buffers.push(chunk); @@ -2250,10 +2250,10 @@ export const _DataFrame = (_df: any): DataFrame => { return _df.toString(); }, transpose(options?) { - let df = wrap( + const df = wrap( "transpose", options?.includeHeader ?? false, - options?.headerName, + options?.headerName ?? "", ); if (options?.columnNames) { function* namesIter() { @@ -2262,7 +2262,7 @@ export const _DataFrame = (_df: any): DataFrame => { } const gen = (options as any).columnNames[Symbol.iterator](); let next; - // eslint-disable-next-line no-cond-assign + // rome-ignore lint: no-cond-assign while ((next = gen.next())) { yield next.value; } diff --git a/polars/datatypes/field.ts b/polars/datatypes/field.ts index 05d43321..62de549c 100644 --- a/polars/datatypes/field.ts +++ b/polars/datatypes/field.ts @@ -29,8 +29,8 @@ export namespace Field { export function from([string, DataType]): Field; export function from(obj: { name: string; dtype: DataType }): Field; export function from(nameOrObj, dtype?: DataType): Field { - if (typeof nameOrObj === "string") { - return new Field(nameOrObj, dtype!); + if (typeof nameOrObj === "string" && dtype) { + return new Field(nameOrObj, dtype); } else if (Array.isArray(nameOrObj)) { return new Field(nameOrObj[0], nameOrObj[1]); } else { diff --git a/polars/groupby.ts b/polars/groupby.ts index a3a2f034..8da32ae1 100644 --- a/polars/groupby.ts +++ b/polars/groupby.ts @@ -192,7 +192,7 @@ export function _GroupBy(df: any, by: string[], maintainOrder = false) { .agg(...aggs) .collectSync({ noOptimization: true }); } else { - let pairs = Object.entries(aggs[0]).flatMap(([key, values]) => { + const pairs = Object.entries(aggs[0]).flatMap(([key, values]) => { return [values].flat(2).map((v) => col(key)[v as any]()); }); @@ -208,7 +208,7 @@ export function _GroupBy(df: any, by: string[], maintainOrder = false) { [inspect]: customInspect, agg, pivot, - aggList: () => agg(exclude(by as any).list()), + aggList: () => agg(exclude(by as any)), count() { return _DataFrame(df.groupby([by].flat(), null, "count")); }, diff --git a/polars/internals/construction.ts b/polars/internals/construction.ts index 44955f4a..b2318979 100644 --- a/polars/internals/construction.ts +++ b/polars/internals/construction.ts @@ -45,7 +45,7 @@ export const jsTypeToPolarsType = (value: unknown): DataType => { } if (typeof value === "object" && (value as any).constructor === Object) { const flds = Object.entries(value as any).map(([name, value]) => { - let dtype = jsTypeToPolarsType(value); + const dtype = jsTypeToPolarsType(value); return Field.from(name, dtype); }); @@ -125,7 +125,7 @@ const fromTypedArray = (name, value) => { * Construct an internal `JsSeries` from an array */ export function arrayToJsSeries( - name: string = "", + name = "", values: any[] = [], dtype?: any, strict = false, @@ -179,7 +179,7 @@ export function arrayToJsSeries( } export function arrayToJsDataFrame(data: any[], options?): any { - let columns = options?.columns; + const columns = options?.columns; let orient = options?.orient; let dataSeries: any[]; @@ -210,7 +210,7 @@ export function arrayToJsDataFrame(data: any[], options?): any { if (orient === "row") { const df = pli.fromRows(data); - columns && (df.columns = columns); + if (columns) df.columns = columns; return df; } else { diff --git a/polars/io.ts b/polars/io.ts index b478a943..ce960ca4 100644 --- a/polars/io.ts +++ b/polars/io.ts @@ -55,7 +55,7 @@ export interface ReadJsonOptions { const readJsonDefaultOptions: Partial = { batchSize: 10000, inferSchemaLength: 50, - format: "lines", + format: "json", }; // utility to read streams as lines. @@ -72,8 +72,7 @@ class LineBatcher extends Stream.Transform { } _transform(chunk, _encoding, done) { - var begin = 0; - var position = 0; + let begin = 0; let i = 0; while (i < chunk.length) { @@ -305,7 +304,7 @@ export function readJSON( options: Partial = readJsonDefaultOptions, ) { options = { ...readJsonDefaultOptions, ...options }; - let method = options.format === "lines" ? pli.readJsonLines : pli.readJson; + const method = options.format === "lines" ? pli.readJsonLines : pli.readJson; const extensions = [".ndjson", ".json", ".jsonl"]; if (Buffer.isBuffer(pathOrBody)) { return _DataFrame(pli.readJson(pathOrBody, options)); @@ -494,9 +493,8 @@ export function scanParquet(path: string, options: ScanParquetOptions = {}) { pliOptions.nRows = options?.numRows; pliOptions.rowCount = options?.rowCount; - const parallel = options?.parallel ?? "auto"; - - return _LazyDataFrame(pli.scanParquet(path, pliOptions, parallel)); + pliOptions.parallel = options?.parallel ?? "auto"; + return _LazyDataFrame(pli.scanParquet(path, pliOptions)); } export interface ReadIPCOptions { @@ -626,9 +624,9 @@ export function readCSVStream( options?: Partial, ): Promise; export function readCSVStream(stream, options?) { - let batchSize = options?.batchSize ?? 10000; + const batchSize = options?.batchSize ?? 10000; let count = 0; - let end = options?.endRows ?? Number.POSITIVE_INFINITY; + const end = options?.endRows ?? Number.POSITIVE_INFINITY; return new Promise((resolve, reject) => { const s = stream.pipe(new LineBatcher({ batchSize })); @@ -644,7 +642,7 @@ export function readCSVStream(stream, options?) { count += batchSize; }).on("end", () => { try { - let buff = Buffer.concat(chunks); + const buff = Buffer.concat(chunks); const df = readCSVBuffer(buff, options); resolve(df); } catch (err) { diff --git a/polars/lazy/dataframe.ts b/polars/lazy/dataframe.ts index 26a38906..89193da2 100644 --- a/polars/lazy/dataframe.ts +++ b/polars/lazy/dataframe.ts @@ -633,6 +633,7 @@ export const _LazyDataFrame = (_ldf: any): LazyDataFrame => { includeBoundaries, closed, by, + start_by, }) { period = period ?? every; offset = offset ?? `-${period}`; @@ -640,6 +641,7 @@ export const _LazyDataFrame = (_ldf: any): LazyDataFrame => { by = prepareGroupbyInputs(by); truncate = truncate ?? true; includeBoundaries = includeBoundaries ?? false; + start_by = start_by ?? "monday"; const lgb = _ldf.groupbyDynamic( indexColumn, @@ -650,6 +652,7 @@ export const _LazyDataFrame = (_ldf: any): LazyDataFrame => { includeBoundaries, closed, by, + start_by, ); return _LazyGroupBy(lgb); @@ -849,7 +852,7 @@ export const _LazyDataFrame = (_ldf: any): LazyDataFrame => { return this.sort(arg.by, arg.reverse); } if (typeof arg === "string") { - return wrap("sort", arg, reverse, true); + return wrap("sort", arg, reverse, true, false); } else { reverse = [reverse].flat(3) as any; const by = selectionToExprList(arg, false); diff --git a/polars/lazy/expr/datetime.ts b/polars/lazy/expr/datetime.ts index a58eb267..33cbc50e 100644 --- a/polars/lazy/expr/datetime.ts +++ b/polars/lazy/expr/datetime.ts @@ -4,7 +4,7 @@ import { Expr, _Expr } from "../expr"; /** * DateTime functions */ -export interface ExprDateTime extends DateFunctions {} +export type ExprDateTime = DateFunctions; export const ExprDateTimeFunctions = (_expr: any): ExprDateTime => { const wrap = (method, ...args: any[]): Expr => { diff --git a/polars/lazy/expr/index.ts b/polars/lazy/expr/index.ts index 58d32c2a..cf87dde2 100644 --- a/polars/lazy/expr/index.ts +++ b/polars/lazy/expr/index.ts @@ -661,7 +661,7 @@ export const _Expr = (_expr: any): Expr => { argSort(reverse: any = false) { reverse = reverse?.reverse ?? reverse; - return _Expr(_expr.argSort(reverse)); + return _Expr(_expr.argSort(reverse, false)); }, argUnique() { return _Expr(_expr.argUnique()); @@ -1019,13 +1019,14 @@ export const _Expr = (_expr: any): Expr => { }, sort(reverse: any = false, nullsLast = false) { if (typeof reverse === "boolean") { - return wrap("sortWith", reverse, nullsLast); + return wrap("sortWith", reverse, nullsLast, false); } return wrap( "sortWith", reverse?.reverse ?? false, reverse?.nullsLast ?? nullsLast, + false, ); }, sortBy(arg, reverse = false) { diff --git a/polars/lazy/expr/list.ts b/polars/lazy/expr/list.ts index b594f1a8..c371546e 100644 --- a/polars/lazy/expr/list.ts +++ b/polars/lazy/expr/list.ts @@ -7,7 +7,7 @@ import { concatList } from "../functions"; /** * namespace containing expr list functions */ -export interface ExprList extends ListFunctions {} +export type ExprList = ListFunctions; export const ExprListFunctions = (_expr: any): ExprList => { const wrap = (method, ...args: any[]): Expr => { return _Expr(_expr[method](...args)); diff --git a/polars/lazy/expr/string.ts b/polars/lazy/expr/string.ts index 59d9448b..569fb345 100644 --- a/polars/lazy/expr/string.ts +++ b/polars/lazy/expr/string.ts @@ -278,7 +278,7 @@ export const ExprStringFunctions = (_expr: any): StringNamespace => { return _Expr(_expr[method](...args)); }; - const handleDecode = (encoding, strict) => { + const handleDecode = (encoding, strict: boolean) => { switch (encoding) { case "hex": return wrap("strHexDecode", strict); @@ -294,7 +294,7 @@ export const ExprStringFunctions = (_expr: any): StringNamespace => { return wrap("strConcat", delimiter); }, contains(pat: string | RegExp) { - return wrap("strContains", regexToString(pat)); + return wrap("strContains", regexToString(pat), false); }, decode(arg, strict = false) { if (typeof arg === "string") { diff --git a/polars/lazy/functions.ts b/polars/lazy/functions.ts index b7d6f8bd..86a5c0e7 100644 --- a/polars/lazy/functions.ts +++ b/polars/lazy/functions.ts @@ -109,7 +109,7 @@ export function col(col: string | string[] | Series): Expr { } export function cols(col: string | string[]): Expr; -export function cols(col: string, ...cols: string[]): Expr; +export function cols(col: string, ...cols2: string[]): Expr; export function cols(...cols): Expr { return col(cols.flat()); } diff --git a/polars/series/index.ts b/polars/series/index.ts index b5422c5b..5cd40f51 100644 --- a/polars/series/index.ts +++ b/polars/series/index.ts @@ -1073,7 +1073,7 @@ export function _Series(_s: any): Series { }, *[Symbol.iterator]() { let start = 0; - let len = _s.len(); + const len = _s.len(); while (start < len) { const v = _s.getIdx(start); start++; @@ -1133,7 +1133,7 @@ export function _Series(_s: any): Series { }, argSort(reverse: any = false, nullsLast = true) { if (typeof reverse === "boolean") { - return _Series(_s.argsort(reverse, nullsLast)); + return _Series(_s.argsort(reverse, nullsLast, false)); } return _Series( @@ -1779,7 +1779,7 @@ export interface SeriesConstructor extends Deserialize { // fromBinary(binary: Buffer): Series } -let SeriesConstructor = function ( +const SeriesConstructor = function ( arg0: any, arg1?: any, dtype?: any, diff --git a/polars/series/list.ts b/polars/series/list.ts index 160d0588..d9fcb44f 100644 --- a/polars/series/list.ts +++ b/polars/series/list.ts @@ -2,7 +2,7 @@ import { Series, _Series } from "."; import { col } from "../lazy/functions"; import { ListFunctions } from "../shared_traits"; -export interface ListNamespace extends ListFunctions {} +export type ListNamespace = ListFunctions; export const SeriesListFunctions = (_s): ListFunctions => { const wrap = (method, ...args) => { diff --git a/polars/series/string.ts b/polars/series/string.ts index 950d3c91..592fc42b 100644 --- a/polars/series/string.ts +++ b/polars/series/string.ts @@ -261,7 +261,7 @@ export const SeriesStringFunctions = (_s: any): StringNamespace => { .getColumn(_s.name); }, contains(pat: string | RegExp) { - return wrap("strContains", regexToString(pat)); + return wrap("strContains", regexToString(pat), false); }, decode(arg, strict = false) { if (typeof arg === "string") { diff --git a/polars/shared_traits.ts b/polars/shared_traits.ts index f23aefe5..466b1063 100644 --- a/polars/shared_traits.ts +++ b/polars/shared_traits.ts @@ -1,4 +1,4 @@ -import { ColumnsOrExpr } from "./utils"; +import { ColumnsOrExpr, StartBy } from "./utils"; import { Expr, _Expr } from "./lazy/expr"; import { @@ -1161,5 +1161,6 @@ export interface GroupByOps { includeBoundaries?: boolean; closed?: "left" | "right" | "both" | "none"; by?: ColumnsOrExpr; + start_by: StartBy; }): T; } diff --git a/polars/utils.ts b/polars/utils.ts index f64e80c6..9bec5536 100644 --- a/polars/utils.ts +++ b/polars/utils.ts @@ -14,6 +14,8 @@ export type ColumnsOrExpr = ColumnSelection | ExpressionSelection; /** @ignore */ export type ExprOrString = Expr | string; +export type StartBy = "window" | "datapoint" | "monday"; + /** @ignore */ export function columnOrColumns( columns: ColumnSelection | string | Array | undefined, diff --git a/rome.json b/rome.json index e701a493..05593922 100644 --- a/rome.json +++ b/rome.json @@ -3,6 +3,9 @@ "enabled": true, "rules": { "recommended": true, + "style": { + "noParameterAssign": "off" + }, "suspicious": { "noExplicitAny": "off" } diff --git a/src/conversion.rs b/src/conversion.rs index 59ecfe99..7907478b 100644 --- a/src/conversion.rs +++ b/src/conversion.rs @@ -6,15 +6,18 @@ use napi::{ }; use polars::frame::NullStrategy; use polars::io::RowCount; -use polars::lazy::dsl::Expr; +use polars::prelude::Expr; use polars::prelude::*; use polars_core::prelude::FillNullStrategy; use polars_core::prelude::{Field, Schema}; use polars_core::series::ops::NullBehavior; +use polars_io::parquet::ParallelStrategy; use std::collections::HashMap; +use smartstring::alias::String as SmartString; + #[derive(Debug)] -pub struct Wrap(pub T); +pub struct Wrap(pub T); impl Clone for Wrap where @@ -87,7 +90,7 @@ impl ToNapiValue for Wrap<&Series> { for col in df.get_columns() { let key = col.name(); let val = col.get(idx); - row.set(key, Wrap(val))?; + row.set(key, Wrap(val.unwrap()))?; } rows.set(idx as u32, row)?; } @@ -249,6 +252,7 @@ impl FromNapiValue for Wrap> { Ok(Wrap(builder.finish())) } } + impl FromNapiValue for Wrap { unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { let obj = Object::from_napi_value(env, napi_val)?; @@ -258,6 +262,15 @@ impl FromNapiValue for Wrap { } } +impl FromNapiValue for Wrap { + unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { + let obj = Object::from_napi_value(env, napi_val)?; + let expr: &JsExpr = obj.get("_expr")?.unwrap(); + // let expr = expr.inner.clone(); + Ok(Wrap(expr.clone())) + } +} + impl TypeName for Wrap { fn type_name() -> &'static str { "QuantileInterpolOptions" @@ -282,6 +295,24 @@ impl FromNapiValue for Wrap { Ok(Wrap(interpol)) } } + +impl FromNapiValue for Wrap { + unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { + let start = String::from_napi_value(env, napi_val)?; + let parsed = match start.as_ref() { + "window" => StartBy::WindowBound, + "datapoint" => StartBy::DataPoint, + "monday" => StartBy::Monday, + v => { + return Err(napi::Error::from_reason(format!( + "closed must be one of {{'window', 'datapoint', 'monday'}}, got {v}", + ))) + } + }; + Ok(Wrap(parsed)) + } +} + impl FromNapiValue for Wrap { unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { let s = String::from_napi_value(env, napi_val)?; @@ -447,7 +478,6 @@ impl FromNapiValue for Wrap { Ok(Wrap(n as f32)) } } - impl FromNapiValue for Wrap { unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { let big = BigInt::from_napi_value(env, napi_val)?; @@ -455,7 +485,6 @@ impl FromNapiValue for Wrap { Ok(Wrap(value)) } } - impl<'a> FromNapiValue for Wrap<&'a str> { unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> JsResult { let s = String::from_napi_value(env, napi_val)?; @@ -480,6 +509,7 @@ impl From for RollingOptionsImpl<'static> { center: o.center, by: None, tu: None, + tz: None, closed_window: None, } } @@ -638,6 +668,22 @@ impl ToNapiValue for Wrap { } } +impl ToNapiValue for Wrap { + unsafe fn to_napi_value(napi_env: sys::napi_env, val: Self) -> Result { + let env = Env::from_raw(napi_env); + let s = val.0; + let mut strategy = env.create_object()?; + + let unit = match s { + ParallelStrategy::Auto => "auto", + ParallelStrategy::Columns => "columns", + ParallelStrategy::RowGroups => "row_groups", + ParallelStrategy::None => "none" + }; + let _ = strategy.set("strategy", unit); + Object::to_napi_value(napi_env, strategy) + } +} impl FromNapiValue for Wrap { unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> napi::Result { let s = String::from_napi_value(env, napi_val)?; @@ -683,15 +729,51 @@ impl FromNapiValue for Wrap { } else { obj.get::<_, bool>("nullsLast")?.unwrap_or(false) }; - + let multithreaded = obj.get::<_, bool>("multithreaded")?.unwrap(); let options = SortOptions { descending, nulls_last, + multithreaded, }; Ok(Wrap(options)) } } +impl FromNapiValue for Wrap<(i64, usize)> { + unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> napi::Result { + let big = BigInt::from_napi_value(env, napi_val)?; + let (value, _) = big.get_i64(); + Ok(Wrap((value, value as usize))) + } +} + +impl FromNapiValue for Wrap { + unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> napi::Result { + let i = i64::from_napi_value(env, napi_val)?; + Ok(Wrap(i as usize)) + } +} + +impl FromNapiValue for Wrap { + unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> napi::Result { + let s = String::from_napi_value(env, napi_val)?; + let parsed = match s.as_ref() { + "inner" => JoinType::Inner, + "left" => JoinType::Left, + "outer" => JoinType::Outer, + "semi" => JoinType::Semi, + "anti" => JoinType::Anti, + "cross" => JoinType::Cross, + v => + return Err(Error::new( + Status::InvalidArg, + format!("how must be one of {{'inner', 'left', 'outer', 'semi', 'anti', 'cross'}}, got {v}") + )) + }; + Ok(Wrap(parsed)) + } +} + pub enum TypedArrayBuffer { Int8(Int8Array), Int16(Int16Array), @@ -809,7 +891,7 @@ impl ToNapiValue for Wrap { let name = fld.name().clone(); let dtype = Wrap(fld.data_type().clone()); let mut fld_obj = env_ctx.create_object()?; - fld_obj.set("name", name)?; + fld_obj.set("name", name.to_string())?; fld_obj.set("dtype", dtype)?; js_flds.set(idx as u32, fld_obj)?; } @@ -1043,3 +1125,31 @@ unsafe fn struct_dict<'a>( } Object::to_napi_value(env_raw, obj) } +pub(crate) fn parse_fill_null_strategy( + strategy: &str, + limit: FillNullLimit, +) -> JsResult { + let parsed = match strategy { + "forward" => FillNullStrategy::Forward(limit), + "backward" => FillNullStrategy::Backward(limit), + "min" => FillNullStrategy::Min, + "max" => FillNullStrategy::Max, + "mean" => FillNullStrategy::Mean, + "zero" => FillNullStrategy::Zero, + "one" => FillNullStrategy::One, + e => { + return Err(napi::Error::from_reason( + format!("Strategy {e} not supported").to_owned(), + )) + } + }; + Ok(parsed) +} + +pub(crate) fn strings_to_smartstrings(container: I) -> Vec +where + I: IntoIterator, + S: AsRef, +{ + container.into_iter().map(|s| s.as_ref().into()).collect() +} diff --git a/src/dataframe.rs b/src/dataframe.rs index 25485497..8265205d 100644 --- a/src/dataframe.rs +++ b/src/dataframe.rs @@ -9,6 +9,7 @@ use std::borrow::Borrow; use std::collections::HashMap; use std::fs::File; use std::io::{BufReader, BufWriter, Cursor}; +use std::sync::Arc; #[napi] #[repr(transparent)] @@ -106,7 +107,7 @@ pub fn read_csv( let value = val.clone().0; Field::new(key, value) }); - Schema::from(fields) + Arc::new(Schema::from(fields)) }); let df = match path_or_buffer { @@ -117,17 +118,17 @@ pub fn read_csv( .with_n_rows(n_rows) .with_delimiter(options.sep.as_bytes()[0]) .with_skip_rows(skip_rows) - .with_ignore_parser_errors(options.ignore_errors) + .with_ignore_errors(options.ignore_errors) .with_rechunk(options.rechunk) .with_chunk_size(chunk_size) .with_encoding(encoding) .with_columns(options.columns) .with_n_threads(n_threads) - .with_dtypes(dtypes.as_ref()) + .with_dtypes(dtypes) .low_memory(options.low_memory) .with_comment_char(comment_char) .with_null_values(null_values) - .with_parse_dates(options.parse_dates) + .with_try_parse_dates(options.parse_dates) .with_quote_char(quote_char) .with_row_count(row_count) .finish() @@ -140,17 +141,17 @@ pub fn read_csv( .with_n_rows(n_rows) .with_delimiter(options.sep.as_bytes()[0]) .with_skip_rows(skip_rows) - .with_ignore_parser_errors(options.ignore_errors) + .with_ignore_errors(options.ignore_errors) .with_rechunk(options.rechunk) .with_chunk_size(chunk_size) .with_encoding(encoding) .with_columns(options.columns) .with_n_threads(n_threads) - .with_dtypes(dtypes.as_ref()) + .with_dtypes(dtypes) .low_memory(options.low_memory) .with_comment_char(comment_char) .with_null_values(null_values) - .with_parse_dates(options.parse_dates) + .with_try_parse_dates(options.parse_dates) .with_quote_char(quote_char) .with_row_count(row_count) .finish() @@ -588,7 +589,7 @@ impl JsDataFrame { #[napi(catch_unwind)] pub fn get_columns(&self) -> Vec { let cols = self.df.get_columns().clone(); - to_jsseries_collection(cols) + to_jsseries_collection(cols.to_vec()) } /// Get column names @@ -741,6 +742,7 @@ impl JsDataFrame { by_column: String, reverse: bool, nulls_last: bool, + multithreaded: bool, ) -> napi::Result { let df = self .df @@ -749,6 +751,7 @@ impl JsDataFrame { SortOptions { descending: reverse, nulls_last, + multithreaded, }, ) .map_err(JsPolarsErr::from)?; @@ -858,9 +861,10 @@ impl JsDataFrame { values: Vec, index: Vec, columns: Vec, - aggregate_expr: Wrap, + aggregate_expr: Option>, maintain_order: bool, sort_columns: bool, + separator: Option<&str>, ) -> napi::Result { let fun = match maintain_order { true => polars::prelude::pivot::pivot_stable, @@ -871,8 +875,9 @@ impl JsDataFrame { values, index, columns, - aggregate_expr.0, sort_columns, + aggregate_expr.map(|e| e.0 as Expr), + separator, ) .map(|df| df.into()) .map_err(|e| napi::Error::from_reason(format!("Could not pivot: {}", e))) @@ -888,12 +893,14 @@ impl JsDataFrame { value_vars: Vec, value_name: Option, variable_name: Option, + streamable: Option, ) -> napi::Result { let args = MeltArgs { - id_vars, - value_vars, - value_name, - variable_name, + id_vars: strings_to_smartstrings(id_vars), + value_vars: strings_to_smartstrings(value_vars), + value_name: value_name.map(|s| s.into()), + variable_name: variable_name.map(|s| s.into()), + streamable: streamable.unwrap_or(false) }; let df = self.df.melt2(args).map_err(JsPolarsErr::from)?; @@ -927,13 +934,18 @@ impl JsDataFrame { maintain_order: bool, subset: Option>, keep: Wrap, + slice: Option>, ) -> napi::Result { let subset = subset.as_ref().map(|v| v.as_ref()); - let df = match maintain_order { - true => self.df.unique_stable(subset, keep.0), - false => self.df.unique(subset, keep.0), - } - .map_err(JsPolarsErr::from)?; + let df = self + .df + .unique_impl( + maintain_order, + subset, + keep.0, + slice.map(|s| s.0 as (i64, usize)), + ) + .map_err(JsPolarsErr::from)?; Ok(df.into()) } @@ -1007,10 +1019,9 @@ impl JsDataFrame { .map_err(JsPolarsErr::from)?; Ok(df.into()) } - #[napi(catch_unwind)] - pub fn to_dummies(&self) -> napi::Result { - let df = self.df.to_dummies().map_err(JsPolarsErr::from)?; + pub fn to_dummies(&self, separator: Option<&str>) -> napi::Result { + let df = self.df.to_dummies(separator).map_err(JsPolarsErr::from)?; Ok(df.into()) } @@ -1137,7 +1148,7 @@ impl JsDataFrame { for (i, col) in self.df.get_columns().iter().enumerate() { let val = col.get(idx); - row.set(i as u32, Wrap(val))?; + row.set(i as u32, Wrap(val.unwrap()))?; } Ok(row) } @@ -1151,53 +1162,53 @@ impl JsDataFrame { let mut row = env.create_array(width as u32)?; for (i, col) in self.df.get_columns().iter().enumerate() { let val = col.get(idx); - row.set(i as u32, Wrap(val))?; + row.set(i as u32, Wrap(val.unwrap()))?; } rows.set(idx as u32, row)?; } Ok(rows) } - #[napi(catch_unwind)] - pub fn to_rows_cb(&self, callback: napi::JsFunction, env: Env) -> napi::Result<()> { - panic!("not implemented"); - // use napi::threadsafe_function::*; - // use polars_core::utils::rayon::prelude::*; - // let (height, _) = self.df.shape(); - // let tsfn: ThreadsafeFunction< - // Either, napi::JsNull>, - // ErrorStrategy::CalleeHandled, - // > = callback.create_threadsafe_function( - // 0, - // |ctx: ThreadSafeCallContext, napi::JsNull>>| Ok(vec![ctx.value]), - // )?; - - // polars_core::POOL.install(|| { - // (0..height).into_par_iter().for_each(|idx| { - // let tsfn = tsfn.clone(); - // let values = self - // .df - // .get_columns() - // .iter() - // .map(|s| { - // let av: JsAnyValue = s.get(idx).into(); - // av - // }) - // .collect::>(); - - // tsfn.call( - // Ok(Either::A(values)), - // ThreadsafeFunctionCallMode::NonBlocking, - // ); - // }); - // }); - // tsfn.call( - // Ok(Either::B(env.get_null().unwrap())), - // ThreadsafeFunctionCallMode::NonBlocking, - // ); - - // Ok(()) - } - #[napi(catch_unwind)] + // #[napi] + // pub fn to_rows_cb(&self, callback: napi::JsFunction, env: Env) -> napi::Result<()> { + // panic!("not implemented"); + // use napi::threadsafe_function::*; + // use polars_core::utils::rayon::prelude::*; + // let (height, _) = self.df.shape(); + // let tsfn: ThreadsafeFunction< + // Either, napi::JsNull>, + // ErrorStrategy::CalleeHandled, + // > = callback.create_threadsafe_function( + // 0, + // |ctx: ThreadSafeCallContext, napi::JsNull>>| Ok(vec![ctx.value]), + // )?; + + // polars_core::POOL.install(|| { + // (0..height).into_par_iter().for_each(|idx| { + // let tsfn = tsfn.clone(); + // let values = self + // .df + // .get_columns() + // .iter() + // .map(|s| { + // let av: JsAnyValue = s.get(idx).into(); + // av + // }) + // .collect::>(); + + // tsfn.call( + // Ok(Either::A(values)), + // ThreadsafeFunctionCallMode::NonBlocking, + // ); + // }); + // }); + // tsfn.call( + // Ok(Either::B(env.get_null().unwrap())), + // ThreadsafeFunctionCallMode::NonBlocking, + // ); + + // Ok(()) + // } + #[napi] pub fn to_row_obj(&self, idx: Either, env: Env) -> napi::Result { let idx = match idx { Either::A(a) => a, @@ -1215,7 +1226,7 @@ impl JsDataFrame { for col in self.df.get_columns() { let key = col.name(); let val = col.get(idx); - row.set(key, Wrap(val))?; + row.set(key, Wrap(val.unwrap()))?; } Ok(row) } @@ -1229,57 +1240,57 @@ impl JsDataFrame { for col in self.df.get_columns() { let key = col.name(); let val = col.get(idx); - row.set(key, Wrap(val))?; + row.set(key, Wrap(val.unwrap()))?; } rows.set(idx as u32, row)?; } Ok(rows) } - #[napi(catch_unwind)] - pub fn to_objects_cb(&self, callback: napi::JsFunction, env: Env) -> napi::Result<()> { - panic!("not implemented"); - // use napi::threadsafe_function::*; - // use polars_core::utils::rayon::prelude::*; - // use std::collections::HashMap; - // let (height, _) = self.df.shape(); - // let tsfn: ThreadsafeFunction< - // Either, napi::JsNull>, - // ErrorStrategy::CalleeHandled, - // > = callback.create_threadsafe_function( - // 0, - // |ctx: ThreadSafeCallContext, napi::JsNull>>| { - // Ok(vec![ctx.value]) - // }, - // )?; - - // polars_core::POOL.install(|| { - // (0..height).into_par_iter().for_each(|idx| { - // let tsfn = tsfn.clone(); - // let values = self - // .df - // .get_columns() - // .iter() - // .map(|s| { - // let key = s.name().to_owned(); - // let av: JsAnyValue = s.get(idx).into(); - // (key, av) - // }) - // .collect::>(); - - // tsfn.call( - // Ok(Either::A(values)), - // ThreadsafeFunctionCallMode::NonBlocking, - // ); - // }); - // }); - // tsfn.call( - // Ok(Either::B(env.get_null().unwrap())), - // ThreadsafeFunctionCallMode::NonBlocking, - // ); - - // Ok(()) - } + // #[napi] + // pub fn to_objects_cb(&self, callback: napi::JsFunction, env: Env) -> napi::Result<()> { + // panic!("not implemented"); + // use napi::threadsafe_function::*; + // use polars_core::utils::rayon::prelude::*; + // use std::collections::HashMap; + // let (height, _) = self.df.shape(); + // let tsfn: ThreadsafeFunction< + // Either, napi::JsNull>, + // ErrorStrategy::CalleeHandled, + // > = callback.create_threadsafe_function( + // 0, + // |ctx: ThreadSafeCallContext, napi::JsNull>>| { + // Ok(vec![ctx.value]) + // }, + // )?; + + // polars_core::POOL.install(|| { + // (0..height).into_par_iter().for_each(|idx| { + // let tsfn = tsfn.clone(); + // let values = self + // .df + // .get_columns() + // .iter() + // .map(|s| { + // let key = s.name().to_owned(); + // let av: JsAnyValue = s.get(idx).into(); + // (key, av) + // }) + // .collect::>(); + + // tsfn.call( + // Ok(Either::A(values)), + // ThreadsafeFunctionCallMode::NonBlocking, + // ); + // }); + // }); + // tsfn.call( + // Ok(Either::B(env.get_null().unwrap())), + // ThreadsafeFunctionCallMode::NonBlocking, + // ); + + // Ok(()) + // } #[napi(catch_unwind)] pub fn write_csv( diff --git a/src/lazy/dataframe.rs b/src/lazy/dataframe.rs index e39eafc5..79c1283c 100644 --- a/src/lazy/dataframe.rs +++ b/src/lazy/dataframe.rs @@ -4,6 +4,10 @@ use crate::prelude::*; use napi::{Env, Task}; use polars::io::RowCount; use polars::lazy::frame::{LazyCsvReader, LazyFrame, LazyGroupBy}; +use polars::prelude::{ClosedWindow, CsvEncoding, DataFrame, Field, JoinType, Schema}; +use polars_core::cloud::CloudOptions; +use polars_io::parquet::ParallelStrategy; +use std::collections::HashMap; #[napi] #[repr(transparent)] @@ -128,13 +132,20 @@ impl JsLazyFrame { ldf.into() } #[napi(catch_unwind)] - pub fn sort(&self, by_column: String, reverse: bool, nulls_last: bool) -> JsLazyFrame { + pub fn sort( + &self, + by_column: String, + reverse: bool, + nulls_last: bool, + multithreaded: bool, + ) -> JsLazyFrame { let ldf = self.ldf.clone(); ldf.sort( &by_column, SortOptions { descending: reverse, nulls_last, + multithreaded, }, ) .into() @@ -214,11 +225,14 @@ impl JsLazyFrame { ) -> JsLazyGroupBy { let closed_window = closed.0; let ldf = self.ldf.clone(); - let by = by.to_exprs(); + let by = by + .into_iter() + .map(|jsexpr| jsexpr.inner.clone()) + .collect::>(); let lazy_gb = ldf.groupby_rolling( by, RollingGroupOptions { - index_column, + index_column: index_column.into(), period: Duration::parse(&period), offset: Duration::parse(&offset), closed_window, @@ -240,21 +254,25 @@ impl JsLazyFrame { include_boundaries: bool, closed: Wrap, by: Vec<&JsExpr>, + start_by: Wrap, ) -> JsLazyGroupBy { let closed_window = closed.0; - let by = by.to_exprs(); + let by = by + .into_iter() + .map(|pyexpr| pyexpr.inner.clone()) + .collect::>(); let ldf = self.ldf.clone(); let lazy_gb = ldf.groupby_dynamic( by, DynamicGroupOptions { - index_column, + index_column: index_column.into(), every: Duration::parse(&every), period: Duration::parse(&period), offset: Duration::parse(&offset), truncate, include_boundaries, closed_window, - ..Default::default() + start_by: start_by.0, }, ); @@ -267,8 +285,8 @@ impl JsLazyFrame { other: &JsLazyFrame, left_on: &JsExpr, right_on: &JsExpr, - left_by: Option>, - right_by: Option>, + left_by: Option>, + right_by: Option>, allow_parallel: bool, force_parallel: bool, suffix: String, @@ -281,7 +299,6 @@ impl JsLazyFrame { "backward" => AsofStrategy::Backward, _ => panic!("expected one of {{'forward', 'backward'}}"), }; - let ldf = self.ldf.clone(); let other = other.ldf.clone(); let left_on = left_on.inner.clone(); @@ -294,10 +311,10 @@ impl JsLazyFrame { .force_parallel(force_parallel) .how(JoinType::AsOf(AsOfOptions { strategy, - left_by, - right_by, + left_by: left_by.map(strings_to_smartstrings), + right_by: right_by.map(strings_to_smartstrings), tolerance: tolerance.map(|t| t.0.into_static().unwrap()), - tolerance_str, + tolerance_str: tolerance_str.map(|s| s.into()), })) .suffix(suffix) .finish() @@ -312,36 +329,9 @@ impl JsLazyFrame { right_on: Vec<&JsExpr>, allow_parallel: bool, force_parallel: bool, - how: String, + how: Wrap, suffix: String, - asof_by_left: Vec, - asof_by_right: Vec, ) -> JsLazyFrame { - let how = match how.as_ref() { - "left" => JoinType::Left, - "inner" => JoinType::Inner, - "outer" => JoinType::Outer, - "semi" => JoinType::Semi, - "anti" => JoinType::Anti, - "asof" => JoinType::AsOf(AsOfOptions { - strategy: AsofStrategy::Backward, - left_by: if asof_by_left.is_empty() { - None - } else { - Some(asof_by_left) - }, - right_by: if asof_by_right.is_empty() { - None - } else { - Some(asof_by_right) - }, - tolerance: None, - tolerance_str: None, - }), - "cross" => JoinType::Cross, - _ => panic!("not supported"), - }; - let ldf = self.ldf.clone(); let other = other.ldf.clone(); let left_on = left_on.to_exprs(); @@ -353,7 +343,7 @@ impl JsLazyFrame { .right_on(right_on) .allow_parallel(allow_parallel) .force_parallel(force_parallel) - .how(how) + .how(how.0) .suffix(suffix) .finish() .into() @@ -493,18 +483,19 @@ impl JsLazyFrame { #[napi(catch_unwind)] pub fn melt( &self, - id_vars: Vec, - value_vars: Vec, - value_name: Option, - variable_name: Option, + id_vars: Vec<&str>, + value_vars: Vec<&str>, + value_name: Option<&str>, + variable_name: Option<&str>, + streamable: Option, ) -> JsLazyFrame { let args = MeltArgs { - id_vars, - value_vars, - value_name, - variable_name, + id_vars: strings_to_smartstrings(id_vars), + value_vars: strings_to_smartstrings(value_vars), + value_name: value_name.map(|s| s.into()), + variable_name: variable_name.map(|s| s.into()), + streamable: streamable.unwrap_or(false) }; - let ldf = self.ldf.clone(); ldf.melt(args).into() } @@ -532,7 +523,7 @@ impl JsLazyFrame { .schema() .map_err(JsPolarsErr::from)? .iter_names() - .cloned() + .map(|s| s.as_str().into()) .collect()) } @@ -546,6 +537,8 @@ impl JsLazyFrame { pub struct ScanCsvOptions { pub infer_schema_length: Option, pub cache: Option, + pub overwrite_dtype: Option>>, + pub overwrite_dtype_slice: Option>>, pub has_header: Option, pub ignore_errors: bool, pub n_rows: Option, @@ -584,21 +577,28 @@ pub fn scan_csv(path: String, options: ScanCsvOptions) -> napi::Result CsvEncoding::Utf8, "utf8-lossy" => CsvEncoding::LossyUtf8, e => return Err(JsPolarsErr::Other(format!("encoding not {} not implemented.", e)).into()), }; let r = LazyCsvReader::new(path) - // .with_chunk_size() .with_infer_schema_length(Some(infer_schema_length)) .with_delimiter(options.sep.as_bytes()[0]) .has_header(has_header) - .with_ignore_parser_errors(parse_dates) + .with_ignore_errors(parse_dates) .with_skip_rows(skip_rows) .with_n_rows(n_rows) .with_cache(cache) - // // .with_dtype_overwrite(overwrite_dtype.as_ref()) + .with_dtype_overwrite(overwrite_dtype.as_ref()) .low_memory(low_memory) .with_comment_char(comment_char) .with_quote_char(quote_char) @@ -606,10 +606,9 @@ pub fn scan_csv(path: String, options: ScanCsvOptions) -> napi::Result napi::Result, pub cache: Option, - pub rechunk: Option, + pub parallel: Wrap, pub row_count: Option, + pub rechunk: Option, + pub row_count_name: Option, + pub row_count_offset: Option, pub low_memory: Option, + pub use_statistics: Option, } #[napi(catch_unwind)] -pub fn scan_parquet( - path: String, - options: ScanParquetOptions, - parallel: Wrap, -) -> napi::Result { +pub fn scan_parquet(path: String, options: ScanParquetOptions) -> napi::Result { let n_rows = options.n_rows.map(|i| i as usize); let cache = options.cache.unwrap_or(true); + let parallel = options.parallel; + let row_count: Option = options.row_count.map(|rc| rc.into()); let rechunk = options.rechunk.unwrap_or(false); let low_memory = options.low_memory.unwrap_or(false); - let row_count: Option = options.row_count.map(|rc| rc.into()); + let use_statistics = options.use_statistics.unwrap_or(false); + let cloud_options = Some(CloudOptions::default()); let args = ScanArgsParquet { n_rows, cache, @@ -640,6 +642,8 @@ pub fn scan_parquet( rechunk, row_count, low_memory, + cloud_options, + use_statistics, }; let lf = LazyFrame::scan_parquet(path, args).map_err(JsPolarsErr::from)?; Ok(lf.into()) diff --git a/src/lazy/dsl.rs b/src/lazy/dsl.rs index df0e5f2d..b3b83db6 100644 --- a/src/lazy/dsl.rs +++ b/src/lazy/dsl.rs @@ -1,3 +1,4 @@ +use crate::conversion::{parse_fill_null_strategy, Wrap}; use crate::prelude::*; use crate::utils::reinterpret; use polars::lazy::dsl; @@ -301,23 +302,25 @@ impl JsExpr { } #[napi(catch_unwind)] - pub fn sort_with(&self, descending: bool, nulls_last: bool) -> JsExpr { + pub fn sort_with(&self, descending: bool, nulls_last: bool, multithreaded: bool) -> JsExpr { self.clone() .inner .sort_with(SortOptions { descending, nulls_last, + multithreaded, }) .into() } #[napi(catch_unwind)] - pub fn arg_sort(&self, reverse: bool) -> JsExpr { + pub fn arg_sort(&self, reverse: bool, multithreaded: bool) -> JsExpr { self.clone() .inner .arg_sort(SortOptions { descending: reverse, nulls_last: true, + multithreaded, }) .into() } @@ -368,12 +371,21 @@ impl JsExpr { } #[napi(catch_unwind)] - pub fn fill_null_with_strategy(&self, strategy: Wrap) -> JsExpr { - self.inner + pub fn fill_null_with_strategy( + &self, + strategy: String, + limit: FillNullLimit, + ) -> JsResult { + let strat = parse_fill_null_strategy(&strategy, limit)?; + Ok(self + .inner .clone() - .apply(move |s| s.fill_null(strategy.0), GetOutput::same_type()) - .with_fmt("fill_null") - .into() + .apply( + move |s| s.fill_null(strat).map(Some), + GetOutput::same_type(), + ) + .with_fmt("fill_null_with_strategy") + .into()) } #[napi(catch_unwind)] pub fn fill_nan(&self, expr: &JsExpr) -> JsExpr { @@ -430,7 +442,7 @@ impl JsExpr { self.clone() .inner .map( - move |s: Series| Ok(s.take_every(n as usize)), + move |s: Series| Ok(Some(s.take_every(n as usize))), GetOutput::same_type(), ) .with_fmt("take_every") @@ -570,8 +582,7 @@ impl JsExpr { pub fn str_strip(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - - Ok(ca.apply(|s| Cow::Borrowed(s.trim())).into_series()) + Ok(Some(ca.apply(|s| Cow::Borrowed(s.trim())).into_series())) }; self.clone() .inner @@ -584,8 +595,9 @@ impl JsExpr { pub fn str_rstrip(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - - Ok(ca.apply(|s| Cow::Borrowed(s.trim_end())).into_series()) + Ok(Some( + ca.apply(|s| Cow::Borrowed(s.trim_end())).into_series(), + )) }; self.clone() .inner @@ -598,8 +610,9 @@ impl JsExpr { pub fn str_lstrip(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - - Ok(ca.apply(|s| Cow::Borrowed(s.trim_start())).into_series()) + Ok(Some( + ca.apply(|s| Cow::Borrowed(s.trim_start())).into_series(), + )) }; self.clone() .inner @@ -612,9 +625,10 @@ impl JsExpr { pub fn str_pad_start(&self, length: i64, fill_char: String) -> JsExpr { let function = move |s: Series| { let ca = s.utf8()?; - Ok(ca - .rjust(length as usize, fill_char.chars().nth(0).unwrap()) - .into_series()) + Ok(Some( + ca.rjust(length as usize, fill_char.chars().nth(0).unwrap()) + .into_series(), + )) }; self.clone() @@ -628,9 +642,10 @@ impl JsExpr { pub fn str_pad_end(&self, length: i64, fill_char: String) -> JsExpr { let function = move |s: Series| { let ca = s.utf8()?; - Ok(ca - .ljust(length as usize, fill_char.chars().nth(0).unwrap()) - .into_series()) + Ok(Some( + ca.ljust(length as usize, fill_char.chars().nth(0).unwrap()) + .into_series(), + )) }; self.clone() @@ -643,7 +658,7 @@ impl JsExpr { pub fn str_z_fill(&self, width: i64) -> JsExpr { let function = move |s: Series| { let ca = s.utf8()?; - Ok(ca.zfill(width as usize).into_series()) + Ok(Some(ca.zfill(width as usize).into_series())) }; self.clone() @@ -656,7 +671,7 @@ impl JsExpr { pub fn str_to_uppercase(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - Ok(ca.to_uppercase().into_series()) + Ok(Some(ca.to_uppercase().into_series())) }; self.clone() .inner @@ -669,7 +684,7 @@ impl JsExpr { let function = move |s: Series| { let length = length.map(|l| l as u64); let ca = s.utf8()?; - Ok(ca.str_slice(start, length)?.into_series()) + Ok(Some(ca.str_slice(start, length)?.into_series())) }; self.clone() .inner @@ -682,7 +697,7 @@ impl JsExpr { pub fn str_to_lowercase(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - Ok(ca.to_lowercase().into_series()) + Ok(Some(ca.to_lowercase().into_series())) }; self.clone() .inner @@ -695,7 +710,7 @@ impl JsExpr { pub fn str_lengths(&self) -> JsExpr { let function = |s: Series| { let ca = s.utf8()?; - Ok(ca.str_lengths().into_series()) + Ok(Some(ca.str_lengths().into_series())) }; self.clone() .inner @@ -709,7 +724,7 @@ impl JsExpr { let function = move |s: Series| { let ca = s.utf8()?; match ca.replace(&pat, &val) { - Ok(ca) => Ok(ca.into_series()), + Ok(ca) => Ok(Some(ca.into_series())), Err(e) => Err(PolarsError::ComputeError(format!("{:?}", e).into())), } }; @@ -725,7 +740,7 @@ impl JsExpr { let function = move |s: Series| { let ca = s.utf8()?; match ca.replace_all(&pat, &val) { - Ok(ca) => Ok(ca.into_series()), + Ok(ca) => Ok(Some(ca.into_series())), Err(e) => Err(PolarsError::ComputeError(format!("{:?}", e).into())), } }; @@ -737,11 +752,11 @@ impl JsExpr { } #[napi(catch_unwind)] - pub fn str_contains(&self, pat: String) -> JsExpr { + pub fn str_contains(&self, pat: String, strict: bool) -> JsExpr { let function = move |s: Series| { let ca = s.utf8()?; - match ca.contains(&pat) { - Ok(ca) => Ok(ca.into_series()), + match ca.contains(&pat, strict) { + Ok(ca) => Ok(Some(ca.into_series())), Err(e) => Err(PolarsError::ComputeError(format!("{:?}", e).into())), } }; @@ -756,18 +771,18 @@ impl JsExpr { self.clone() .inner .map( - move |s| s.utf8().map(|s| s.hex_encode().into_series()), + move |s| s.utf8().map(|s| Some(s.hex_encode().into_series())), GetOutput::same_type(), ) .with_fmt("str.hex_encode") .into() } #[napi(catch_unwind)] - pub fn str_hex_decode(&self, strict: Option) -> JsExpr { + pub fn str_hex_decode(&self, strict: bool) -> JsExpr { self.clone() .inner .map( - move |s| s.utf8()?.hex_decode(strict).map(|s| s.into_series()), + move |s| s.utf8()?.hex_decode(strict).map(|s| Some(s.into_series())), GetOutput::same_type(), ) .with_fmt("str.hex_decode") @@ -778,7 +793,7 @@ impl JsExpr { self.clone() .inner .map( - move |s| s.utf8().map(|s| s.base64_encode().into_series()), + move |s| s.utf8().map(|s| Some(s.base64_encode().into_series())), GetOutput::same_type(), ) .with_fmt("str.base64_encode") @@ -786,11 +801,15 @@ impl JsExpr { } #[napi(catch_unwind)] - pub fn str_base64_decode(&self, strict: Option) -> JsExpr { + pub fn str_base64_decode(&self, strict: bool) -> JsExpr { self.clone() .inner .map( - move |s| s.utf8()?.base64_decode(strict).map(|s| s.into_series()), + move |s| { + s.utf8()? + .base64_decode(strict) + .map(|s| Some(s.into_series())) + }, GetOutput::same_type(), ) .with_fmt("str.base64_decode") @@ -801,7 +820,7 @@ impl JsExpr { let function = move |s: Series| { let ca = s.utf8()?; match ca.json_path_match(&pat) { - Ok(ca) => Ok(ca.into_series()), + Ok(ca) => Ok(Some(ca.into_series())), Err(e) => Err(PolarsError::ComputeError(format!("{:?}", e).into())), } }; @@ -889,7 +908,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.duration()?.days().into_series()), + |s| Ok(Some(s.duration()?.days().into_series())), GetOutput::from_type(DataType::Int64), ) .into() @@ -899,7 +918,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.duration()?.hours().into_series()), + |s| Ok(Some(s.duration()?.hours().into_series())), GetOutput::from_type(DataType::Int64), ) .into() @@ -909,7 +928,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.duration()?.seconds().into_series()), + |s| Ok(Some(s.duration()?.seconds().into_series())), GetOutput::from_type(DataType::Int64), ) .into() @@ -919,7 +938,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.duration()?.nanoseconds().into_series()), + |s| Ok(Some(s.duration()?.nanoseconds().into_series())), GetOutput::from_type(DataType::Int64), ) .into() @@ -929,7 +948,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.duration()?.milliseconds().into_series()), + |s| Ok(Some(s.duration()?.milliseconds().into_series())), GetOutput::from_type(DataType::Int64), ) .into() @@ -949,7 +968,7 @@ impl JsExpr { .map( |s| { s.timestamp(TimeUnit::Milliseconds) - .map(|ca| (ca / 1000).into_series()) + .map(|ca| Some((ca / 1000).into_series())) }, GetOutput::from_type(DataType::Int64), ) @@ -963,7 +982,7 @@ impl JsExpr { pub fn hash(&self, k0: Wrap, k1: Wrap, k2: Wrap, k3: Wrap) -> JsExpr { let function = move |s: Series| { let hb = polars::export::ahash::RandomState::with_seeds(k0.0, k1.0, k2.0, k3.0); - Ok(s.hash(hb).into_series()) + Ok(Some(s.hash(hb).into_series())) }; self.clone() .inner @@ -973,7 +992,7 @@ impl JsExpr { #[napi(catch_unwind)] pub fn reinterpret(&self, signed: bool) -> JsExpr { - let function = move |s: Series| reinterpret(&s, signed); + let function = move |s: Series| reinterpret(&s, signed).map(Some); let dt = if signed { DataType::Int64 } else { @@ -1235,7 +1254,7 @@ impl JsExpr { self.inner .clone() .map( - |s| Ok(s.to_physical_repr().into_owned()), + |s| Ok(Some(s.to_physical_repr().into_owned())), GetOutput::map_dtype(|dt| dt.to_physical()), ) .with_fmt("to_physical") @@ -1262,41 +1281,65 @@ impl JsExpr { .into() } #[napi(catch_unwind)] - pub fn ewm_mean(&self, alpha: f64, adjust: bool, min_periods: i64, bias: bool) -> JsExpr { + pub fn ewm_mean( + &self, + alpha: f64, + adjust: bool, + min_periods: i64, + bias: bool, + ignore_nulls: bool, + ) -> JsExpr { let options = EWMOptions { alpha, adjust, bias, min_periods: min_periods as usize, + ignore_nulls, }; self.inner.clone().ewm_mean(options).into() } #[napi(catch_unwind)] - pub fn ewm_std(&self, alpha: f64, adjust: bool, min_periods: i64, bias: bool) -> Self { + pub fn ewm_std( + &self, + alpha: f64, + adjust: bool, + min_periods: i64, + bias: bool, + ignore_nulls: bool, + ) -> Self { let options = EWMOptions { alpha, adjust, bias, min_periods: min_periods as usize, + ignore_nulls, }; self.inner.clone().ewm_std(options).into() } #[napi(catch_unwind)] - pub fn ewm_var(&self, alpha: f64, adjust: bool, min_periods: i64, bias: bool) -> Self { + pub fn ewm_var( + &self, + alpha: f64, + adjust: bool, + min_periods: i64, + bias: bool, + ignore_nulls: bool, + ) -> Self { let options = EWMOptions { alpha, adjust, bias, min_periods: min_periods as usize, + ignore_nulls, }; self.inner.clone().ewm_var(options).into() } #[napi(catch_unwind)] - pub fn extend_constant(&self, value: JsAnyValue, n: i64) -> Self { + pub fn extend_constant(&self, value: Option, n: i64) -> Self { self.inner .clone() .apply( - move |s| s.extend_constant(value.clone().into(), n as usize), + move |s| Ok(Some(s.extend_constant(value.clone().into(), n as usize)?)), GetOutput::same_type(), ) .with_fmt("extend") @@ -1495,7 +1538,7 @@ pub fn cov(a: Wrap, b: Wrap) -> JsExpr { pub fn argsort_by(by: Vec<&JsExpr>, reverse: Vec) -> JsExpr { let by = by.to_exprs(); - polars::lazy::dsl::argsort_by(by, &reverse).into() + polars::lazy::dsl::arg_sort_by(by, &reverse).into() } #[napi(catch_unwind)] @@ -1515,7 +1558,7 @@ pub fn lit(value: JsAnyValue) -> JsExpr { JsAnyValue::Float64(v) => dsl::lit(v), JsAnyValue::Date(v) => dsl::lit(v), JsAnyValue::Datetime(v, _, _) => dsl::lit(v), - // JsAnyValue::Duration(v, _) => dsl::lit(v), + JsAnyValue::Duration(v, _) => dsl::lit(v), JsAnyValue::Time(v) => dsl::lit(v), JsAnyValue::List(v) => dsl::lit(v), _ => dsl::lit(polars::prelude::Null {}), @@ -1533,9 +1576,10 @@ pub fn range(low: i64, high: i64, dtype: Wrap) -> JsExpr { } #[napi(catch_unwind)] -pub fn concat_lst(s: Vec<&JsExpr>) -> JsExpr { - let s = s.to_exprs(); - dsl::concat_lst(s).into() +pub fn concat_lst(s: Vec<&JsExpr>) -> JsResult { + let s = s.into_iter().map(|e| e.inner.clone()).collect::>(); + let expr = polars::lazy::dsl::concat_lst(s).map_err(JsPolarsErr::from)?; + Ok(expr.into()) } #[napi(catch_unwind)] diff --git a/src/series.rs b/src/series.rs index b3f4a20f..8bb93605 100644 --- a/src/series.rs +++ b/src/series.rs @@ -257,8 +257,23 @@ impl JsSeries { format!("{}", self.series) } #[napi(catch_unwind)] - pub fn get_fmt(&self, index: f64) -> String { - format!("{}", self.series.get(index as usize)) + pub fn get_fmt(&self, index: Wrap, str_lengths: Wrap) -> String { + let val = format!("{}", self.series.get(index.0).unwrap()); + if let DataType::Utf8 | DataType::Categorical(_) = self.series.dtype() { + let v_trunc = &val[..val + .char_indices() + .take(str_lengths.0) + .last() + .map(|(i, c)| i + c.len_utf8()) + .unwrap_or(0)]; + if val == v_trunc { + val + } else { + format!("{v_trunc}…") + } + } else { + val + } } #[napi(catch_unwind)] pub fn estimated_size(&self) -> i64 { @@ -277,7 +292,7 @@ impl JsSeries { } #[napi(catch_unwind)] pub fn get_idx(&self, idx: i64) -> Wrap { - Wrap(self.series.get(idx as usize)) + Wrap(self.series.get(idx as usize).unwrap()) } #[napi(catch_unwind)] pub fn bitand(&self, other: &JsSeries) -> napi::Result { @@ -438,12 +453,13 @@ impl JsSeries { let reverse = reverse.unwrap_or(false); self.series.sort(reverse).into() } - #[napi(catch_unwind)] - pub fn argsort(&self, reverse: bool, nulls_last: bool) -> JsSeries { + #[napi] + pub fn argsort(&self, reverse: bool, nulls_last: bool, multithreaded: bool) -> JsSeries { self.series - .argsort(SortOptions { + .arg_sort(SortOptions { descending: reverse, nulls_last, + multithreaded, }) .into_series() .into() @@ -540,7 +556,7 @@ impl JsSeries { #[napi(catch_unwind)] pub fn is_unique(&self) -> napi::Result { - let ca = self.series.is_unique().map_err(JsPolarsErr::from)?; + let ca = polars_ops::prelude::is_unique(&self.series).map_err(JsPolarsErr::from)?; Ok(ca.into_series().into()) } @@ -581,7 +597,7 @@ impl JsSeries { } #[napi(catch_unwind)] pub fn is_duplicated(&self) -> napi::Result { - let ca = self.series.is_duplicated().map_err(JsPolarsErr::from)?; + let ca = polars_ops::prelude::is_duplicated(&self.series).map_err(JsPolarsErr::from)?; Ok(ca.into_series().into()) } #[napi(catch_unwind)] @@ -709,11 +725,11 @@ impl JsSeries { quantile: f64, interpolation: Wrap, ) -> JsAnyValue { - let v = self + let binding = self .series .quantile_as_series(quantile, interpolation.0) .expect("invalid quantile"); - let v = v.get(0); + let v = binding.get(0).unwrap_or(AnyValue::Null); v.into() } /// Rechunk and return a pointer to the start of the Series. @@ -788,10 +804,13 @@ impl JsSeries { Ok(JsSeries::new(s)) } - #[napi(catch_unwind)] - pub fn str_contains(&self, pat: String) -> napi::Result { + #[napi] + pub fn str_contains(&self, pat: String, strict: bool) -> napi::Result { let ca = self.series.utf8().map_err(JsPolarsErr::from)?; - let s = ca.contains(&pat).map_err(JsPolarsErr::from)?.into_series(); + let s = ca + .contains(&pat, strict) + .map_err(JsPolarsErr::from)? + .into_series(); Ok(s.into()) } @@ -865,27 +884,23 @@ impl JsSeries { let s = ca.hex_encode().into_series(); Ok(s.into()) } - #[napi(catch_unwind)] - pub fn str_hex_decode(&self, strict: Option) -> napi::Result { + pub fn str_hex_decode(&self, strict: bool) -> napi::Result { let ca = self.series.utf8().map_err(JsPolarsErr::from)?; let s = ca .hex_decode(strict) .map_err(JsPolarsErr::from)? .into_series(); - Ok(s.into()) } - - #[napi(catch_unwind)] + #[napi] pub fn str_base64_encode(&self) -> napi::Result { let ca = self.series.utf8().map_err(JsPolarsErr::from)?; let s = ca.base64_encode().into_series(); Ok(s.into()) } - #[napi(catch_unwind)] - pub fn str_base64_decode(&self, strict: Option) -> napi::Result { + pub fn str_base64_decode(&self, strict: bool) -> napi::Result { let ca = self.series.utf8().map_err(JsPolarsErr::from)?; let s = ca .base64_decode(strict) @@ -1022,9 +1037,7 @@ impl JsSeries { #[napi(catch_unwind)] pub fn is_first(&self) -> napi::Result { - let out = self - .series - .is_first() + let out = is_first(&self.series) .map_err(JsPolarsErr::from)? .into_series(); Ok(out.into()) diff --git a/yarn.lock b/yarn.lock index 7c2b3198..a52415db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" @@ -24,6 +34,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/code-frame@npm:7.21.4" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.20.0": version: 7.20.5 resolution: "@babel/compat-data@npm:7.20.5" @@ -31,7 +50,37 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/compat-data@npm:^7.22.0": + version: 7.22.3 + resolution: "@babel/compat-data@npm:7.22.3" + checksum: eb001646f41459f42ccb0d39ee8bb3c3c495bc297234817044c0002689c625e3159a6678c53fd31bd98cf21f31472b73506f350fc6906e3bdfa49cb706e2af8d + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6": + version: 7.22.1 + resolution: "@babel/core@npm:7.22.1" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.22.0 + "@babel/helper-compilation-targets": ^7.22.1 + "@babel/helper-module-transforms": ^7.22.1 + "@babel/helpers": ^7.22.0 + "@babel/parser": ^7.22.0 + "@babel/template": ^7.21.9 + "@babel/traverse": ^7.22.1 + "@babel/types": ^7.22.0 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: bbe45e791f223a7e692d2ea6597a73f48050abd24b119c85c48ac6504c30ce63343a2ea3f79b5847bf4b409ddd8a68b6cdc4f0272ded1d2ef6f6b1e9663432f0 + languageName: node + linkType: hard + +"@babel/core@npm:^7.12.3": version: 7.20.5 resolution: "@babel/core@npm:7.20.5" dependencies: @@ -65,6 +114,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/generator@npm:7.22.3" + dependencies: + "@babel/types": ^7.22.3 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: ccb6426ca5b5a38f0d47a3ac9628e223d2aaaa489cbf90ffab41468795c22afe86855f68a58667f0f2673949f1810d4d5a57b826c17984eab3e28fdb34a909e6 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.20.0": version: 7.20.0 resolution: "@babel/helper-compilation-targets@npm:7.20.0" @@ -79,6 +140,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-compilation-targets@npm:7.22.1" + dependencies: + "@babel/compat-data": ^7.22.0 + "@babel/helper-validator-option": ^7.21.0 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a686a01bd3288cf95ca26faa27958d34c04e2501c4b0858c3a6558776dec20317b5635f33d64c5a635b6fbdfe462a85c30d4bfa0ae7e7ffe3467e4d06442d7c8 + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" @@ -86,6 +162,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-environment-visitor@npm:7.22.1" + checksum: a6b4bb5505453bff95518d361ac1de393f0029aeb8b690c70540f4317934c53c43cc4afcda8c752ffa8c272e63ed6b929a56eca28e4978424177b24238b21bf9 + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-function-name@npm:7.19.0" @@ -96,6 +179,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -114,6 +207,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-module-imports@npm:7.21.4" + dependencies: + "@babel/types": ^7.21.4 + checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-module-transforms@npm:7.20.2" @@ -130,6 +232,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-module-transforms@npm:7.22.1" + dependencies: + "@babel/helper-environment-visitor": ^7.22.1 + "@babel/helper-module-imports": ^7.21.4 + "@babel/helper-simple-access": ^7.21.5 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.21.9 + "@babel/traverse": ^7.22.1 + "@babel/types": ^7.22.0 + checksum: dfa084211a93c9f0174ab07385fdbf7831bbf5c1ff3d4f984effc489f48670825ad8b817b9e9d2ec6492fde37ed6518c15944e9dd7a60b43a3d9874c9250f5f8 + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" @@ -137,6 +255,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.20.2": + version: 7.21.5 + resolution: "@babel/helper-plugin-utils@npm:7.21.5" + checksum: 6f086e9a84a50ea7df0d5639c8f9f68505af510ea3258b3c8ac8b175efdfb7f664436cb48996f71791a1350ba68f47ad3424131e8e718c5e2ad45564484cbb36 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-simple-access@npm:7.20.2" @@ -146,6 +271,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-simple-access@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + checksum: ad212beaa24be3864c8c95bee02f840222457ccf5419991e2d3e3e39b0f75b77e7e857e0bf4ed428b1cd97acefc87f3831bdb0b9696d5ad0557421f398334fc3 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -162,6 +296,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-string-parser@npm:7.21.5" + checksum: 36c0ded452f3858e67634b81960d4bde1d1cd2a56b82f4ba2926e97864816021c885f111a7cf81de88a0ed025f49d84a393256700e9acbca2d99462d648705d8 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" @@ -176,6 +317,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.20.5": version: 7.20.6 resolution: "@babel/helpers@npm:7.20.6" @@ -187,6 +335,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.22.0": + version: 7.22.3 + resolution: "@babel/helpers@npm:7.22.3" + dependencies: + "@babel/template": ^7.21.9 + "@babel/traverse": ^7.22.1 + "@babel/types": ^7.22.3 + checksum: 385289ee8b87cf9af448bbb9fcf747f6e67600db5f7f64eb4ad97761ee387819bf2212b6a757008286c6bfacf4f3fc0b6de88686f2e517a70fb59996bdfbd1e9 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -207,6 +366,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.21.9, @babel/parser@npm:^7.22.0, @babel/parser@npm:^7.22.4": + version: 7.22.4 + resolution: "@babel/parser@npm:7.22.4" + bin: + parser: ./bin/babel-parser.js + checksum: 0ca6d3a2d9aae2504ba1bc494704b64a83140884f7379f609de69bd39b60adb58a4f8ec692fe53fef8657dd82705d01b7e6efb65e18296326bdd66f71d52d9a9 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -262,6 +430,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.21.4 + resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb7309402a1d4e155f32aa0cf216e1fa8324d6c4cfd248b03280028a015a10e46b6efd6565f515f8913918a3602b39255999c06046f7d4b8a5106be2165d724a + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -361,6 +540,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.20.7, @babel/template@npm:^7.21.9": + version: 7.21.9 + resolution: "@babel/template@npm:7.21.9" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/parser": ^7.21.9 + "@babel/types": ^7.21.5 + checksum: 6ec2c60d4d53b2a9230ab82c399ba6525df87e9a4e01e4b111e071cbad283b1362e7c99a1bc50027073f44f2de36a495a89c27112c4e7efe7ef9c8d9c84de2ec + languageName: node + linkType: hard + "@babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.7.2": version: 7.20.5 resolution: "@babel/traverse@npm:7.20.5" @@ -379,6 +569,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.22.1": + version: 7.22.4 + resolution: "@babel/traverse@npm:7.22.4" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.22.3 + "@babel/helper-environment-visitor": ^7.22.1 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.22.4 + "@babel/types": ^7.22.4 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 9560ae22092d5a7c52849145dd3e5aed2ffb73d61255e70e19e3fbd06bcbafbbdecea28df40a42ee3b60b01e85a42224ec841df93e867547e329091cc2f2bb6f + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.20.5 resolution: "@babel/types@npm:7.20.5" @@ -390,6 +598,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.3, @babel/types@npm:^7.22.4": + version: 7.22.4 + resolution: "@babel/types@npm:7.22.4" + dependencies: + "@babel/helper-string-parser": ^7.21.5 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: ffe36bb4f4a99ad13c426a98c3b508d70736036cae4e471d9c862e3a579847ed4f480686af0fce2633f6f7c0f0d3bf02da73da36e7edd3fde0b2061951dcba9a + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -433,50 +652,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" +"@jest/console@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/console@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 - checksum: 7cb20f06a34b09734c0342685ec53aa4c401fe3757c13a9c58fce76b971a322eb884f6de1068ef96f746e5398e067371b89515a07c268d4440a867c87748a706 + checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 languageName: node linkType: hard -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" +"@jest/core@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/core@npm:29.5.0" dependencies: - "@jest/console": ^27.5.1 - "@jest/reporters": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.5.0 + "@jest/reporters": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - emittery: ^0.8.1 + ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^27.5.1 - jest-config: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-resolve-dependencies: ^27.5.1 - jest-runner: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - jest-watcher: ^27.5.1 + jest-changed-files: ^29.5.0 + jest-config: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-resolve-dependencies: ^29.5.0 + jest-runner: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + jest-watcher: ^29.5.0 micromatch: ^4.0.4 - rimraf: ^3.0.0 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -484,153 +703,182 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 904a94ad8f1b43cd6b48de3b0226659bff3696150ff8cf7680fc2faffdc8a115203bb9ab6e817c1f79f9d6a81f67953053cbc64d8a4604f2e0c42a04c28cf126 + checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 languageName: node linkType: hard -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" +"@jest/environment@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/environment@npm:29.5.0" dependencies: - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^27.5.1 - checksum: 2a9e18c35a015508dbec5b90b21c150230fa6c1c8cb8fabe029d46ee2ca4c40eb832fb636157da14c66590d0a4c8a2c053226b041f54a44507d6f6a89abefd66 + jest-mock: ^29.5.0 + checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" + dependencies: + jest-get-type: ^29.4.3 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect@npm:29.5.0" + dependencies: + expect: ^29.5.0 + jest-snapshot: ^29.5.0 + checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 languageName: node linkType: hard -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" +"@jest/fake-timers@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/fake-timers@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 - "@sinonjs/fake-timers": ^8.0.1 + "@jest/types": ^29.5.0 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 02a0561ed2f4586093facd4ae500b74694f187ac24d4a00e949a39a1c5325bca8932b4fcb0388a2c5ed0656506fc1cf51fd3e32cdd48cea7497ad9c6e028aba8 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee languageName: node linkType: hard -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" +"@jest/globals@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/globals@npm:29.5.0" dependencies: - "@jest/environment": ^27.5.1 - "@jest/types": ^27.5.1 - expect: ^27.5.1 - checksum: 087f97047e9dcf555f76fe2ce54aee681e005eaa837a0c0c2d251df6b6412c892c9df54cb871b180342114389a5ff895a4e52e6e6d3d0015bf83c02a54f64c3c + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/types": ^29.5.0 + jest-mock: ^29.5.0 + checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 languageName: node linkType: hard -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" +"@jest/reporters@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/reporters@npm:29.5.0" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 + glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-haste-map: ^27.5.1 - jest-resolve: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^8.1.0 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: faba5eafb86e62b62e152cafc8812d56308f9d1e8b77f3a7dcae4a8803a20a60a0909cc43ed73363ef649bf558e4fb181c7a336d144c89f7998279d1882bb69e + checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd languageName: node linkType: hard -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" dependencies: + "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - source-map: ^0.6.0 - checksum: 4fb1e743b602841babf7e22bd84eca34676cb05d4eb3b604cae57fc59e406099f5ac759ac1a0d04d901237d143f0f4f234417306e823bde732a1d19982230862 + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c languageName: node linkType: hard -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" +"@jest/test-result@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-result@npm:29.5.0" dependencies: - "@jest/console": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.5.0 + "@jest/types": ^29.5.0 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 338f7c509d6a3bc6d7dd7388c8f6f548b87638e171dc1fddfedcacb4e8950583288832223ba688058cbcf874b937d22bdc0fa88f79f5fc666f77957e465c06a5 + checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 languageName: node linkType: hard -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" +"@jest/test-sequencer@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-sequencer@npm:29.5.0" dependencies: - "@jest/test-result": ^27.5.1 + "@jest/test-result": ^29.5.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-runtime: ^27.5.1 - checksum: f21f9c8bb746847f7f89accfd29d6046eec1446f0b54e4694444feaa4df379791f76ef0f5a4360aafcbc73b50bc979f68b8a7620de404019d3de166be6720cb0 + jest-haste-map: ^29.5.0 + slash: ^3.0.0 + checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e languageName: node linkType: hard -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" +"@jest/transform@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/transform@npm:29.5.0" dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: a22079121aedea0f20a03a9c026be971f7b92adbfb4d5fd1fb67be315741deac4f056936d7c72a53b24aa5a1071bc942c003925fd453bf3f6a0ae5da6384e137 + write-file-atomic: ^4.0.2 + checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d languageName: node linkType: hard -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" dependencies: + "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" - "@types/yargs": ^16.0.0 + "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 languageName: node linkType: hard @@ -644,6 +892,17 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.0": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -686,6 +945,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" @@ -696,12 +965,12 @@ __metadata: languageName: node linkType: hard -"@napi-rs/cli@npm:^2.14.1": - version: 2.14.1 - resolution: "@napi-rs/cli@npm:2.14.1" +"@napi-rs/cli@npm:^2.16.1": + version: 2.16.1 + resolution: "@napi-rs/cli@npm:2.16.1" bin: napi: scripts/index.js - checksum: ac93f7ce67b9b5ab839fadc7afbaa0a33126325807578133df016ed9d88455f403e7ceb9f225d2996d65e4a9d67960516533bab155a47998192f42febe35de24 + checksum: 5f61712cf1a4002b7b9b65bc4a6f2a7df68b197cfc7024c7d28820e3b12b5e9c0baa0d85f262f25dbf928586ce01c5c06837754f9f98ef4ebafa55dd027c6837 languageName: node linkType: hard @@ -725,70 +994,70 @@ __metadata: languageName: node linkType: hard -"@rometools/cli-darwin-arm64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-darwin-arm64@npm:11.0.0" +"@rometools/cli-darwin-arm64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-darwin-arm64@npm:12.1.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rometools/cli-darwin-x64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-darwin-x64@npm:11.0.0" +"@rometools/cli-darwin-x64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-darwin-x64@npm:12.1.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rometools/cli-linux-arm64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-linux-arm64@npm:11.0.0" +"@rometools/cli-linux-arm64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-linux-arm64@npm:12.1.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@rometools/cli-linux-x64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-linux-x64@npm:11.0.0" +"@rometools/cli-linux-x64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-linux-x64@npm:12.1.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@rometools/cli-win32-arm64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-win32-arm64@npm:11.0.0" +"@rometools/cli-win32-arm64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-win32-arm64@npm:12.1.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rometools/cli-win32-x64@npm:11.0.0": - version: 11.0.0 - resolution: "@rometools/cli-win32-x64@npm:11.0.0" +"@rometools/cli-win32-x64@npm:12.1.3": + version: 12.1.3 + resolution: "@rometools/cli-win32-x64@npm:12.1.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.2.0 + resolution: "@sinonjs/fake-timers@npm:10.2.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 586c76e1dd90d03b0c4e754f2011325b38ac6055878c81c52434c900f36d9d245438c96ef69e08e28d9fbecf2335fb347b67850962d8b6e539dd7359d8c62802 languageName: node linkType: hard @@ -827,7 +1096,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": +"@types/babel__core@npm:^7.1.14": version: 7.1.20 resolution: "@types/babel__core@npm:7.1.20" dependencies: @@ -859,7 +1128,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": version: 7.18.3 resolution: "@types/babel__traverse@npm:7.18.3" dependencies: @@ -875,12 +1144,12 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.5 - resolution: "@types/graceful-fs@npm:4.1.5" +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" dependencies: "@types/node": "*" - checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 languageName: node linkType: hard @@ -909,13 +1178,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^27.0.3": - version: 27.5.2 - resolution: "@types/jest@npm:27.5.2" +"@types/jest@npm:^29.5.2": + version: 29.5.2 + resolution: "@types/jest@npm:29.5.2" dependencies: - jest-matcher-utils: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 7e11c6826aa429ad990dc262e4e4b54aa36573287fddf15773e4137f07d11d3105f0dd9f1baff73252160a057df23f5529bb83b1bf83cd3f45f9460a5ca5c22e + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 7d205599ea3cccc262bad5cc173d3242d6bf8138c99458509230e4ecef07a52d6ddcde5a1dbd49ace655c0af51d2dbadef3748697292ea4d86da19d9e03e19c0 languageName: node linkType: hard @@ -926,10 +1195,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.9": - version: 16.18.10 - resolution: "@types/node@npm:16.18.10" - checksum: 1b138616923e9a1c6d3806edf75714b605d2ec689357cdc675bc73816c508ff11b3c68df054b02a496c76654d8ed53add2e90816af39423431c73aa6eec06f29 +"@types/node@npm:^20.2.5": + version: 20.2.5 + resolution: "@types/node@npm:20.2.5" + checksum: 38ce7c7e9d76880dc632f71d71e0d5914fcda9d5e9a7095d6c339abda55ca4affb0f2a882aeb29398f8e09d2c5151f0b6586c81c8ccdfe529c34b1ea3337425e languageName: node linkType: hard @@ -954,19 +1223,12 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" +"@types/yargs@npm:^17.0.8": + version: 17.0.24 + resolution: "@types/yargs@npm:17.0.24" dependencies: "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 - languageName: node - linkType: hard - -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + checksum: 5f3ac4dc4f6e211c1627340160fbe2fd247ceba002190da6cf9155af1798450501d628c9165a183f30a224fc68fa5e700490d740ff4c73e2cdef95bc4e8ba7bf languageName: node linkType: hard @@ -977,23 +1239,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - "acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" @@ -1001,16 +1246,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - -"acorn@npm:^8.2.4, acorn@npm:^8.4.1": +"acorn@npm:^8.4.1": version: 8.8.1 resolution: "acorn@npm:8.8.1" bin: @@ -1065,6 +1301,13 @@ __metadata: languageName: node linkType: hard +"ansi-sequence-parser@npm:^1.1.0": + version: 1.1.0 + resolution: "ansi-sequence-parser@npm:1.1.0" + checksum: 75f4d3a4c555655a698aec05b5763cbddcd16ccccdbfd178fb0aa471ab74fdf98e031b875ef26e64be6a95cf970c89238744b26de6e34af97f316d5186b1df53 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -1133,28 +1376,20 @@ __metadata: languageName: node linkType: hard -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" +"babel-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-jest@npm:29.5.0" dependencies: - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/transform": ^29.5.0 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^27.5.1 + babel-preset-jest: ^29.5.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 4e93e6e9fb996cc5f1505e924eb8e8cc7b25c294ba9629762a2715390f48af6a4c14dbb84cd9730013ac0e03267a5a9aa2fb6318c544489cda7f50f4e506def4 + checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede languageName: node linkType: hard @@ -1171,15 +1406,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 + "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 709c17727aa8fd3be755d256fb514bf945a5c2ea6017f037d80280fc44ae5fe7dfeebf63d8412df53796455c2c216119d628d8cc90b099434fd819005943d058 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 languageName: node linkType: hard @@ -1205,15 +1440,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" dependencies: - babel-plugin-jest-hoist: ^27.5.1 + babel-plugin-jest-hoist: ^29.5.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad languageName: node linkType: hard @@ -1261,13 +1496,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browserslist@npm:^4.21.3": version: 4.21.4 resolution: "browserslist@npm:4.21.4" @@ -1382,10 +1610,10 @@ __metadata: languageName: node linkType: hard -"chance@npm:^1.1.8": - version: 1.1.9 - resolution: "chance@npm:1.1.9" - checksum: 57d09fd404ffb87f5e106705c28c38a77cb0a6d96f3828d63052947a12d62d65f40a100d74b123bea3d5ebce3b53333a93d3b81783c64d8473788a0ce6b6e8db +"chance@npm:^1.1.11": + version: 1.1.11 + resolution: "chance@npm:1.1.11" + checksum: 2e871fcc76584d274f860f0f25380b6ab547caf0d22d8b043a313be73d5c3db38941373241f83aeba049e7511f752f9746dc722a0f2b0182020d493c4e11da84 languageName: node linkType: hard @@ -1424,14 +1652,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.0 + strip-ansi: ^6.0.1 wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -1490,15 +1718,6 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -1513,13 +1732,20 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -1538,40 +1764,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -1584,13 +1776,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.2.1": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae - languageName: node - linkType: hard - "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -1598,13 +1783,6 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - "deepmerge@npm:^4.2.2": version: 4.2.2 resolution: "deepmerge@npm:4.2.2" @@ -1612,13 +1790,6 @@ __metadata: languageName: node linkType: hard -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -1640,10 +1811,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 languageName: node linkType: hard @@ -1654,15 +1825,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.251": version: 1.4.284 resolution: "electron-to-chromium@npm:1.4.284" @@ -1670,10 +1832,10 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 2457e8c7b0688bb006126f2c025b2655abe682f66b184954122a8a065b5277f9813d49d627896a10b076b81c513ec5f491fd9c14fbd42c04b95ca3c9f3c365ee +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -1737,26 +1899,7 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef - languageName: node - linkType: hard - -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -1766,20 +1909,6 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -1804,32 +1933,26 @@ __metadata: languageName: node linkType: hard -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" +"expect@npm:^29.0.0, expect@npm:^29.5.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 - jest-get-type: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - checksum: b2c66beb52de53ef1872165aace40224e722bca3c2274c54cfa74b6d617d55cf0ccdbf36783ccd64dbea501b280098ed33fd0b207d4f15bc03cd3c7a24364a6a + "@jest/expect-utils": ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard -"fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -1858,17 +1981,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -1955,7 +2067,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -2026,15 +2138,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -2049,17 +2152,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -2097,15 +2189,6 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - "iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -2216,13 +2299,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -2230,13 +2306,6 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -2296,60 +2365,60 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 execa: ^5.0.0 - throat: ^6.0.1 - checksum: 95e9dc74c3ca688ef85cfeab270f43f8902721a6c8ade6ac2459459a77890c85977f537d6fb809056deaa6d9c3f075fa7d2699ff5f3bf7d3fda17c3760b79b15 + p-limit: ^3.1.0 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 languageName: node linkType: hard -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" +"jest-circus@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-circus@npm:29.5.0" dependencies: - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 - expect: ^27.5.1 is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 + jest-each: ^29.5.0 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + p-limit: ^3.1.0 + pretty-format: ^29.5.0 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 6192dccbccb3a6acfa361cbb97bdbabe94864ccf3d885932cfd41f19534329d40698078cf9be1489415e8234255d6ea9f9aff5396b79ad842a6fca6e6fc08fd0 + checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 languageName: node linkType: hard -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" +"jest-cli@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-cli@npm:29.5.0" dependencies: - "@jest/core": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/core": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-config: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 prompts: ^2.0.1 - yargs: ^16.2.0 + yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2357,212 +2426,173 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6c0a69fb48e500241409e09ff743ed72bc6578d7769e2c994724e7ef1e5587f6c1f85dc429e93b98ae38a365222993ee70f0acc2199358992120900984f349e5 + checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba languageName: node linkType: hard -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" +"jest-config@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-config@npm:29.5.0" dependencies: - "@babel/core": ^7.8.0 - "@jest/test-sequencer": ^27.5.1 - "@jest/types": ^27.5.1 - babel-jest: ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.5.0 + "@jest/types": ^29.5.0 + babel-jest: ^29.5.0 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 + glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-get-type: ^27.5.1 - jest-jasmine2: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runner: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-circus: ^29.5.0 + jest-environment-node: ^29.5.0 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-runner: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^27.5.1 + pretty-format: ^29.5.0 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 1188fd46c0ed78cbe3175eb9ad6712ccf74a74be33d9f0d748e147c107f0889f8b701fbff1567f31836ae18597dacdc43d6a8fc30dd34ade6c9229cc6c7cb82d + checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c languageName: node linkType: hard -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 languageName: node linkType: hard -"jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" dependencies: detect-newline: ^3.0.0 - checksum: c0fed6d55b229d8bffdd8d03f121dd1a3be77c88f50552d374f9e1ea3bde57bf6bea017a0add04628d98abcb1bfb48b456438eeca8a74ef0053f4dae3b95d29c + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df languageName: node linkType: hard -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" +"jest-each@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-each@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 chalk: ^4.0.0 - jest-get-type: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - checksum: b5a6d8730fd938982569c9e0b42bdf3c242f97b957ed8155a6473b5f7b540970f8685524e7f53963dc1805319f4b6602abfc56605590ca19d55bd7a87e467e63 + jest-get-type: ^29.4.3 + jest-util: ^29.5.0 + pretty-format: ^29.5.0 + checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 languageName: node linkType: hard -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" +"jest-environment-node@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-environment-node@npm:29.5.0" dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - jsdom: ^16.6.0 - checksum: bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 languageName: node linkType: hard -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce languageName: node linkType: hard -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 - languageName: node - linkType: hard - -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" +"jest-haste-map@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-haste-map@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 - "@types/graceful-fs": ^4.1.2 + "@jest/types": ^29.5.0 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^27.5.1 - jest-serializer: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 micromatch: ^4.0.4 - walker: ^1.0.7 + walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: e092a1412829a9254b4725531ee72926de530f77fda7b0d9ea18008fb7623c16f72e772d8e93be71cac9e591b2c6843a669610887dd2c89bd9eb528856e3ab47 - languageName: node - linkType: hard - -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^27.5.1 - is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - throat: ^6.0.1 - checksum: b716adf253ceb73db661936153394ab90d7f3a8ba56d6189b7cd4df8e4e2a4153b4e63ebb5d36e29ceb0f4c211d5a6f36ab7048c6abbd881c8646567e2ab8e6d + checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 languageName: node linkType: hard -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" +"jest-leak-detector@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-leak-detector@npm:29.5.0" dependencies: - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 languageName: node linkType: hard -"jest-matcher-utils@npm:^27.0.0, jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" dependencies: chalk: ^4.0.0 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 languageName: node linkType: hard -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^27.5.1 + pretty-format: ^29.5.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: eb6d637d1411c71646de578c49826b6da8e33dd293e501967011de9d1916d53d845afbfb52a5b661ff1c495be7c13f751c48c7f30781fd94fbd64842e8195796 + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf languageName: node linkType: hard -"jest-mock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" +"jest-mock@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-mock@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 "@types/node": "*" - checksum: f5b5904bb1741b4a1687a5f492535b7b1758dc26534c72a5423305f8711292e96a601dec966df81bb313269fb52d47227e29f9c2e08324d79529172f67311be0 + jest-util: ^29.5.0 + checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c languageName: node linkType: hard @@ -2578,202 +2608,194 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" +"jest-resolve-dependencies@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve-dependencies@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 - jest-regex-util: ^27.5.1 - jest-snapshot: ^27.5.1 - checksum: c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.5.0 + checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf languageName: node linkType: hard -"jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" +"jest-resolve@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 + jest-haste-map: ^29.5.0 jest-pnp-resolver: ^1.2.2 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 735830e7265b20a348029738680bb2f6e37f80ecea86cda869a4c318ba3a45d39c7a3a873a22f7f746d86258c50ead6e7f501de043e201c095d7ba628a1c440f + checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f languageName: node linkType: hard -"jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" +"jest-runner@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runner@npm:29.5.0" dependencies: - "@jest/console": ^27.5.1 - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.5.0 + "@jest/environment": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.8.1 + emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-leak-detector: ^27.5.1 - jest-message-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runtime: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - source-map-support: ^0.5.6 - throat: ^6.0.1 - checksum: 5bbe6cf847dd322b3332ec9d6977b54f91bd5f72ff620bc1a0192f0f129deda8aa7ca74c98922187a7aa87d8e0ce4f6c50e99a7ccb2a310bf4d94be2e0c3ce8e - languageName: node - linkType: hard - -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/globals": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-leak-detector: ^29.5.0 + jest-message-util: ^29.5.0 + jest-resolve: ^29.5.0 + jest-runtime: ^29.5.0 + jest-util: ^29.5.0 + jest-watcher: ^29.5.0 + jest-worker: ^29.5.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runtime@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/globals": ^29.5.0 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 929e3df0c53dab43f831f2af4e2996b22aa8cb2d6d483919d6b0426cbc100098fd5b777b998c6568b77f8c4d860b2e83127514292ff61416064f5ef926492386 - languageName: node - linkType: hard - -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.9 - checksum: 803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 + checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d languageName: node linkType: hard -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" +"jest-snapshot@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-snapshot@npm:29.5.0" dependencies: - "@babel/core": ^7.7.2 + "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 - "@babel/types": ^7.0.0 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/babel__traverse": ^7.0.4 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^27.5.1 + expect: ^29.5.0 graceful-fs: ^4.2.9 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 natural-compare: ^1.4.0 - pretty-format: ^27.5.1 - semver: ^7.3.2 - checksum: a5cfadf0d21cd76063925d1434bc076443ed6d87847d0e248f0b245f11db3d98ff13e45cc03b15404027dabecd712d925f47b6eae4f64986f688640a7d362514 + pretty-format: ^29.5.0 + semver: ^7.3.5 + checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b languageName: node linkType: hard -"jest-util@npm:^27.0.0, jest-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-util@npm:27.5.1" +"jest-util@npm:^29.0.0, jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: ac8d122f6daf7a035dcea156641fd3701aeba245417c40836a77e35b3341b9c02ddc5d904cfcd4ddbaa00ab854da76d3b911870cafdcdbaff90ea471de26c7d7 + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 languageName: node linkType: hard -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" +"jest-validate@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-validate@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.5.0 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^27.5.1 + jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^27.5.1 - checksum: 82e870f8ee7e4fb949652711b1567f05ae31c54be346b0899e8353e5c20fad7692b511905b37966945e90af8dc0383eb41a74f3ffefb16140ea4f9164d841412 + pretty-format: ^29.5.0 + checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 languageName: node linkType: hard -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" +"jest-watcher@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-watcher@npm:29.5.0" dependencies: - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^27.5.1 + emittery: ^0.13.1 + jest-util: ^29.5.0 string-length: ^4.0.1 - checksum: 191c4e9c278c0902ade1a8a80883ac244963ba3e6e78607a3d5f729ccca9c6e71fb3b316f87883658132641c5d818aa84202585c76752e03c539e6cbecb820bd + checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 languageName: node linkType: hard -"jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" +"jest-worker@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" dependencies: "@types/node": "*" + jest-util: ^29.5.0 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 languageName: node linkType: hard -"jest@npm:^27.3.1": - version: 27.5.1 - resolution: "jest@npm:27.5.1" +"jest@npm:^29.5.0": + version: 29.5.0 + resolution: "jest@npm:29.5.0" dependencies: - "@jest/core": ^27.5.1 + "@jest/core": ^29.5.0 + "@jest/types": ^29.5.0 import-local: ^3.0.2 - jest-cli: ^27.5.1 + jest-cli: ^29.5.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2781,7 +2803,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 96f1d69042b3c6dfc695f2a4e4b0db38af6fb78582ad1a02beaa57cfcd77cbd31567d7d865c1c85709b7c3e176eefa3b2035ffecd646005f15d8ef528eccf205 + checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 languageName: node linkType: hard @@ -2804,46 +2826,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.6.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - dependencies: - abab: ^2.0.5 - acorn: ^8.2.4 - acorn-globals: ^6.0.0 - cssom: ^0.4.4 - cssstyle: ^2.3.0 - data-urls: ^2.0.0 - decimal.js: ^10.2.1 - domexception: ^2.0.1 - escodegen: ^2.0.0 - form-data: ^3.0.0 - html-encoding-sniffer: ^2.0.1 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 - symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^2.0.0 - webidl-conversions: ^6.1.0 - whatwg-encoding: ^1.0.5 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.5.0 - ws: ^7.4.6 - xml-name-validator: ^3.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -2860,7 +2842,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.2.1": +"json5@npm:^2.2.1": version: 2.2.2 resolution: "json5@npm:2.2.2" bin: @@ -2869,7 +2851,16 @@ __metadata: languageName: node linkType: hard -"jsonc-parser@npm:^3.0.0": +"json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": version: 3.2.0 resolution: "jsonc-parser@npm:3.2.0" checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 @@ -2890,16 +2881,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -2923,13 +2904,22 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -3002,12 +2992,12 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.2.4": - version: 4.2.5 - resolution: "marked@npm:4.2.5" +"marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" bin: marked: bin/marked.js - checksum: dd7da20a3983c66b516463fad5dc8d15dc70e137d20b6dc491e134f671e84bd2ed5f859e2c35f21e56830a122e4356b9e574bcde49b72b7ad6bc121a215a1a98 + checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 languageName: node linkType: hard @@ -3028,22 +3018,6 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -3060,7 +3034,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1, minimatch@npm:^5.1.1": +"minimatch@npm:^5.0.1": version: 5.1.2 resolution: "minimatch@npm:5.1.2" dependencies: @@ -3069,6 +3043,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.0": + version: 9.0.1 + resolution: "minimatch@npm:9.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -3223,18 +3206,18 @@ __metadata: version: 0.0.0-use.local resolution: "nodejs-polars@workspace:." dependencies: - "@napi-rs/cli": ^2.14.1 + "@napi-rs/cli": ^2.16.1 "@types/chance": ^1.1.3 - "@types/jest": ^27.0.3 - "@types/node": ^16.11.9 - chance: ^1.1.8 - jest: ^27.3.1 - rome: ^11.0.0 + "@types/jest": ^29.5.2 + "@types/node": ^20.2.5 + chance: ^1.1.11 + jest: ^29.5.0 + rome: ^12.1.3 source-map-support: ^0.5.21 - ts-jest: ^27.1.0 - ts-node: ^10.4.0 - typedoc: ^0.23 - typescript: 4.9 + ts-jest: ^29.1.0 + ts-node: ^10.9.1 + typedoc: ^0.24.7 + typescript: 5.1.3 languageName: unknown linkType: soft @@ -3277,13 +3260,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 - languageName: node - linkType: hard - "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -3302,20 +3278,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" @@ -3325,6 +3287,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -3362,13 +3333,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -3427,21 +3391,14 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" dependencies: - ansi-regex: ^5.0.1 + "@jest/schemas": ^29.4.3 ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + react-is: ^18.0.0 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 languageName: node linkType: hard @@ -3472,24 +3429,10 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - -"punycode@npm:^2.1.1": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 - languageName: node - linkType: hard - -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 +"pure-rand@npm:^6.0.0": + version: 6.0.2 + resolution: "pure-rand@npm:6.0.2" + checksum: 79de33876a4f515d759c48e98d00756bbd916b4ea260cc572d7adfa4b62cace9952e89f0241d0410214554503d25061140fe325c66f845213d2b1728ba8d413e languageName: node linkType: hard @@ -3500,10 +3443,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -3525,13 +3468,6 @@ __metadata: languageName: node linkType: hard -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -3548,10 +3484,10 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 languageName: node linkType: hard @@ -3588,7 +3524,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -3599,16 +3535,16 @@ __metadata: languageName: node linkType: hard -"rome@npm:^11.0.0": - version: 11.0.0 - resolution: "rome@npm:11.0.0" +"rome@npm:^12.1.3": + version: 12.1.3 + resolution: "rome@npm:12.1.3" dependencies: - "@rometools/cli-darwin-arm64": 11.0.0 - "@rometools/cli-darwin-x64": 11.0.0 - "@rometools/cli-linux-arm64": 11.0.0 - "@rometools/cli-linux-x64": 11.0.0 - "@rometools/cli-win32-arm64": 11.0.0 - "@rometools/cli-win32-x64": 11.0.0 + "@rometools/cli-darwin-arm64": 12.1.3 + "@rometools/cli-darwin-x64": 12.1.3 + "@rometools/cli-linux-arm64": 12.1.3 + "@rometools/cli-linux-x64": 12.1.3 + "@rometools/cli-win32-arm64": 12.1.3 + "@rometools/cli-win32-x64": 12.1.3 dependenciesMeta: "@rometools/cli-darwin-arm64": optional: true @@ -3624,7 +3560,7 @@ __metadata: optional: true bin: rome: bin/rome - checksum: 3c92a47c78a66c62f94b6a3a72ead92a20c23326d2d73785ce88c03897b60b8114c285a636acc24bd11039381ded48f8c58c6cc5c4cc46ce7eed092c90d9a054 + checksum: 341e5520a23277bdc2571db279e72fe9427a95f4e3025cd215a989d381fe6690f6aa1c0fb9abbd318a8bfd85ff1cec2304e92b732329c8a46c69e259eeb080cc languageName: node linkType: hard @@ -3635,23 +3571,14 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 - languageName: node - linkType: hard - -"semver@npm:7.x, semver@npm:^7.3.2, semver@npm:^7.3.5": +"semver@npm:7.x, semver@npm:^7.3.5": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -3694,18 +3621,19 @@ __metadata: languageName: node linkType: hard -"shiki@npm:^0.11.1": - version: 0.11.1 - resolution: "shiki@npm:0.11.1" +"shiki@npm:^0.14.1": + version: 0.14.2 + resolution: "shiki@npm:0.14.2" dependencies: - jsonc-parser: ^3.0.0 - vscode-oniguruma: ^1.6.1 - vscode-textmate: ^6.0.0 - checksum: 2a4ebc3b466816263fc244ae4f67a4ff96aa74d863b9c5e7e4affc50f37fd6d1a781405de0dbf763b777bc33e49a0d441de7ff3fededb8b01e3b8dbb37e2927d + ansi-sequence-parser: ^1.1.0 + jsonc-parser: ^3.2.0 + vscode-oniguruma: ^1.7.0 + vscode-textmate: ^8.0.0 + checksum: f2a14302b1803617e3ff1b751a5c87b4af4ad15214dc00e9215402e42940a84a0b956cf55d628f25dbf1296b18e277b8529571cd9359b971ac599a0ab11303e7 languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -3754,7 +3682,17 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.21, source-map-support@npm:^0.5.6": +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.21": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -3764,20 +3702,13 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 languageName: node linkType: hard -"source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 - languageName: node - linkType: hard - "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -3872,7 +3803,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -3890,16 +3821,6 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -3907,13 +3828,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.13 resolution: "tar@npm:6.1.13" @@ -3928,16 +3842,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -3949,13 +3853,6 @@ __metadata: languageName: node linkType: hard -"throat@npm:^6.0.1": - version: 6.0.1 - resolution: "throat@npm:6.0.1" - checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -3979,49 +3876,28 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - -"ts-jest@npm:^27.1.0": - version: 27.1.5 - resolution: "ts-jest@npm:27.1.5" +"ts-jest@npm:^29.1.0": + version: 29.1.0 + resolution: "ts-jest@npm:29.1.0" dependencies: bs-logger: 0.x fast-json-stable-stringify: 2.x - jest-util: ^27.0.0 - json5: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 lodash.memoize: 4.x make-error: 1.x semver: 7.x - yargs-parser: 20.x + yargs-parser: ^21.0.1 peerDependencies: "@babel/core": ">=7.0.0-beta.0 <8" - "@types/jest": ^27.0.0 - babel-jest: ">=27.0.0 <28" - jest: ^27.0.0 - typescript: ">=3.8 <5.0" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" peerDependenciesMeta: "@babel/core": optional: true - "@types/jest": + "@jest/types": optional: true babel-jest: optional: true @@ -4029,11 +3905,11 @@ __metadata: optional: true bin: ts-jest: cli.js - checksum: 3ef51c538b82f49b3f529331c1a017871a2f90e7a9a6e69333304755036d121818c6b120e2ce32dd161ff8bb2487efec0c790753ecd39b46a9ed1ce0d241464c + checksum: 535dc42ad523cbe1e387701fb2e448518419b515c082f09b25411f0b3dd0b854cf3e8141c316d6f4b99883aeb4a4f94159cbb1edfb06d7f77ea6229fadb2e1bf languageName: node linkType: hard -"ts-node@npm:^10.4.0": +"ts-node@npm:^10.9.1": version: 10.9.1 resolution: "ts-node@npm:10.9.1" dependencies: @@ -4071,15 +3947,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -4094,48 +3961,39 @@ __metadata: languageName: node linkType: hard -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - -"typedoc@npm:^0.23": - version: 0.23.23 - resolution: "typedoc@npm:0.23.23" +"typedoc@npm:^0.24.7": + version: 0.24.7 + resolution: "typedoc@npm:0.24.7" dependencies: lunr: ^2.3.9 - marked: ^4.2.4 - minimatch: ^5.1.1 - shiki: ^0.11.1 + marked: ^4.3.0 + minimatch: ^9.0.0 + shiki: ^0.14.1 peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x bin: typedoc: bin/typedoc - checksum: 2b64f9c9dc1992ec1bbcc688f6cfc8161481872c485ba9226d1797f572469d02f7798ebe96e3626587a6952af685fa1f4aaa0d9a6137fe9fb3d37f677cb41161 + checksum: 9ae433566cb02b96deb9eb2a9f5b23d1b199f5aeb61ca8c7e2653ff5d339fbfb4d526e024febab4f3278332978814aaa0885f1d5925ba21a441d93a611510ac3 languageName: node linkType: hard -"typescript@npm:4.9": - version: 4.9.4 - resolution: "typescript@npm:4.9.4" +"typescript@npm:5.1.3": + version: 5.1.3 + resolution: "typescript@npm:5.1.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 + checksum: d9d51862d98efa46534f2800a1071a613751b1585dc78884807d0c179bcd93d6e9d4012a508e276742f5f33c480adefc52ffcafaf9e0e00ab641a14cde9a31c7 languageName: node linkType: hard -"typescript@patch:typescript@4.9#~builtin": - version: 4.9.4 - resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=ad5954" +"typescript@patch:typescript@5.1.3#~builtin": + version: 5.1.3 + resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::version=5.1.3&hash=ad5954" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 1caaea6cb7f813e64345190fddc4e6c924d0b698ab81189b503763c4a18f7f5501c69362979d36e19c042d89d936443e768a78b0675690b35eb663d19e0eae71 + checksum: 32a25b2e128a4616f999d4ee502aabb1525d5647bc8955e6edf05d7fbc53af8aa98252e2f6ba80bcedfc0260c982b885f3c09cfac8bb65d2924f3133ad1e1e62 languageName: node linkType: hard @@ -4157,13 +4015,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.0.9": version: 1.0.10 resolution: "update-browserslist-db@npm:1.0.10" @@ -4178,16 +4029,6 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -4202,50 +4043,32 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 languageName: node linkType: hard -"vscode-oniguruma@npm:^1.6.1": +"vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 languageName: node linkType: hard -"vscode-textmate@npm:^6.0.0": - version: 6.0.0 - resolution: "vscode-textmate@npm:6.0.0" - checksum: ff6f17a406c2906586afc14ef01cb122e33acd35312e815abb5c924347a777c6783ce3fe7db8b83f1760ebf843c669843b9390f905b69c433b3395af28e4b483 - languageName: node - linkType: hard - -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b +"vscode-textmate@npm:^8.0.0": + version: 8.0.0 + resolution: "vscode-textmate@npm:8.0.0" + checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb languageName: node linkType: hard -"walker@npm:^1.0.7": +"walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -4254,47 +4077,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 - languageName: node - linkType: hard - -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -4315,13 +4097,6 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - "wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -4340,44 +4115,13 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - -"ws@npm:^7.4.6": - version: 7.5.9 - resolution: "ws@npm:7.5.9" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -4388,6 +4132,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -4395,25 +4146,25 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: - cliui: ^7.0.2 + cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 - string-width: ^4.2.0 + string-width: ^4.2.3 y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard @@ -4423,3 +4174,10 @@ __metadata: checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 languageName: node linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard