signalk-questdb 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.coderabbit.yaml +4 -3
- package/README.md +162 -7
- package/dist/api-contract.d.ts +62 -0
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/configpanel/responses.d.ts +33 -1
- package/dist/configpanel/responses.js +89 -0
- package/dist/configpanel/responses.js.map +1 -1
- package/dist/history-v1.js +12 -9
- package/dist/history-v1.js.map +1 -1
- package/dist/history-v2.d.ts +18 -6
- package/dist/history-v2.js +275 -41
- package/dist/history-v2.js.map +1 -1
- package/dist/ilp-writer.d.ts +22 -0
- package/dist/ilp-writer.js +76 -4
- package/dist/ilp-writer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +326 -70
- package/dist/index.js.map +1 -1
- package/dist/influx-detect.d.ts +19 -0
- package/dist/influx-detect.js +165 -0
- package/dist/influx-detect.js.map +1 -0
- package/dist/migration.d.ts +147 -0
- package/dist/migration.js +824 -0
- package/dist/migration.js.map +1 -0
- package/dist/query-client.d.ts +9 -0
- package/dist/query-client.js +11 -0
- package/dist/query-client.js.map +1 -1
- package/dist/restore.js +9 -0
- package/dist/restore.js.map +1 -1
- package/dist/schema-errors.d.ts +15 -0
- package/dist/schema-errors.js +38 -0
- package/dist/schema-errors.js.map +1 -0
- package/dist/test/configpanel-responses.test.js +90 -1
- package/dist/test/configpanel-responses.test.js.map +1 -1
- package/dist/test/history-v2.test.js +440 -2
- package/dist/test/history-v2.test.js.map +1 -1
- package/dist/test/ilp-writer.test.js +28 -0
- package/dist/test/ilp-writer.test.js.map +1 -1
- package/dist/test/influx-detect.test.d.ts +1 -0
- package/dist/test/influx-detect.test.js +287 -0
- package/dist/test/influx-detect.test.js.map +1 -0
- package/dist/test/migration.test.d.ts +1 -0
- package/dist/test/migration.test.js +851 -0
- package/dist/test/migration.test.js.map +1 -0
- package/dist/test/restore.test.js +47 -0
- package/dist/test/restore.test.js.map +1 -1
- package/package.json +5 -4
- package/public/assets/PluginConfigurationPanel-CR4mD9IH.js +9 -0
- package/public/assets/{index-Z7eUk0W6.js → index-CyI4zKUm.js} +1 -1
- package/public/assets/{virtualExposes-CyrNon4j.js → virtualExposes-BBIkbTtD.js} +1 -1
- package/public/remoteEntry.js +1 -1
- package/public/assets/PluginConfigurationPanel-CyS3A7gD.js +0 -9
|
@@ -512,8 +512,12 @@ describe("history-v2 sourceRef filtering", () => {
|
|
|
512
512
|
},
|
|
513
513
|
],
|
|
514
514
|
});
|
|
515
|
-
|
|
516
|
-
|
|
515
|
+
// signalk-server #2817 renamed the RESPONSE-side field to `$source`
|
|
516
|
+
// while the request-side PathSpec kept `sourceRef`. Emitting the old key
|
|
517
|
+
// left consumers unable to tell the columns apart.
|
|
518
|
+
assert.equal(result.values[0].$source, "gps.main");
|
|
519
|
+
assert.ok(!("$source" in result.values[1]), "an unfiltered spec must not grow a $source");
|
|
520
|
+
assert.ok(!("sourceRef" in result.values[0]), "the pre-#2817 key must not linger alongside $source");
|
|
517
521
|
});
|
|
518
522
|
it("serves the same path from two sources as two distinct columns", async () => {
|
|
519
523
|
// sourceRef filtering is what makes the same path twice in one request
|
|
@@ -560,4 +564,438 @@ describe("history-v2 sourceRef filtering", () => {
|
|
|
560
564
|
}));
|
|
561
565
|
});
|
|
562
566
|
});
|
|
567
|
+
/** Mock whose responses depend on the SQL, so DISTINCT can be answered. */
|
|
568
|
+
function makeSourceAwareClient(captured, sourcesByTable, dataRows = []) {
|
|
569
|
+
return {
|
|
570
|
+
exec: async (sql) => {
|
|
571
|
+
captured.push({ sql });
|
|
572
|
+
if (/SELECT DISTINCT source FROM (\w+)/.test(sql)) {
|
|
573
|
+
const table = /FROM (\w+)/.exec(sql)[1];
|
|
574
|
+
const list = sourcesByTable[table];
|
|
575
|
+
if (list === undefined)
|
|
576
|
+
throw new Error(`table does not exist: ${table}`);
|
|
577
|
+
return {
|
|
578
|
+
columns: [],
|
|
579
|
+
dataset: list.map((s) => [s]),
|
|
580
|
+
count: list.length,
|
|
581
|
+
timestamp: 0,
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
return {
|
|
585
|
+
columns: [],
|
|
586
|
+
dataset: dataRows.map(([ts, v]) => [ts, v]),
|
|
587
|
+
count: dataRows.length,
|
|
588
|
+
timestamp: 0,
|
|
589
|
+
};
|
|
590
|
+
},
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
describe("history-v2 sourcePolicy=all", () => {
|
|
594
|
+
const RANGE = {
|
|
595
|
+
from: { toString: () => "2024-01-01T00:00:00Z" },
|
|
596
|
+
to: { toString: () => "2024-01-01T01:00:00Z" },
|
|
597
|
+
};
|
|
598
|
+
const SPEC = {
|
|
599
|
+
path: "navigation.speedOverGround",
|
|
600
|
+
aggregate: "average",
|
|
601
|
+
parameter: [],
|
|
602
|
+
};
|
|
603
|
+
it("is inert until the operator enables it", async () => {
|
|
604
|
+
const captured = [];
|
|
605
|
+
// Third argument omitted = disabled, which is the shipped default.
|
|
606
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: ["gps.main", "gps.aux"] }), SELF_CONTEXT);
|
|
607
|
+
const result = await provider.getValues({
|
|
608
|
+
...RANGE,
|
|
609
|
+
sourcePolicy: "all",
|
|
610
|
+
pathSpecs: [SPEC],
|
|
611
|
+
});
|
|
612
|
+
assert.equal(result.values.length, 1, "must not expand while disabled");
|
|
613
|
+
assert.ok(!("$source" in result.values[0]));
|
|
614
|
+
assert.ok(!captured.some((c) => /SELECT DISTINCT source/.test(c.sql)), "a disabled provider must not even probe for sources");
|
|
615
|
+
});
|
|
616
|
+
it("expands one path into one column per source when enabled", async () => {
|
|
617
|
+
const captured = [];
|
|
618
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
619
|
+
signalk: ["gps.aux", "gps.main"],
|
|
620
|
+
signalk_str: [],
|
|
621
|
+
}), SELF_CONTEXT, true);
|
|
622
|
+
const result = await provider.getValues({
|
|
623
|
+
...RANGE,
|
|
624
|
+
sourcePolicy: "all",
|
|
625
|
+
pathSpecs: [SPEC],
|
|
626
|
+
});
|
|
627
|
+
assert.deepEqual(result.values.map((v) => v.$source), ["gps.aux", "gps.main"], "one column per source, named sources sorted for stable order");
|
|
628
|
+
// Each column must be FILTERED to its own source, or every column would
|
|
629
|
+
// carry identical merged data under different labels.
|
|
630
|
+
assert.ok(captured.some((c) => /source = 'gps.main'/.test(c.sql)));
|
|
631
|
+
assert.ok(captured.some((c) => /source = 'gps.aux'/.test(c.sql)));
|
|
632
|
+
});
|
|
633
|
+
// The data array must be as wide as `values`. Assembling rows against the
|
|
634
|
+
// REQUESTED spec count instead of the expanded column count leaves every
|
|
635
|
+
// expanded column without a slot — the metadata promises N series and the
|
|
636
|
+
// rows carry one.
|
|
637
|
+
it("gives every expanded column its own slot in each data row", async () => {
|
|
638
|
+
const captured = [];
|
|
639
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: ["gps.aux", "gps.main"], signalk_str: [] }, [
|
|
640
|
+
["2024-01-01T00:00:00.000Z", 1.5],
|
|
641
|
+
["2024-01-01T00:00:01.000Z", 2.5],
|
|
642
|
+
]), SELF_CONTEXT, true);
|
|
643
|
+
const result = await provider.getValues({
|
|
644
|
+
...RANGE,
|
|
645
|
+
sourcePolicy: "all",
|
|
646
|
+
pathSpecs: [SPEC],
|
|
647
|
+
});
|
|
648
|
+
assert.equal(result.values.length, 2);
|
|
649
|
+
assert.ok(result.data.length > 0, "expected data rows");
|
|
650
|
+
for (const row of result.data) {
|
|
651
|
+
assert.equal(row.length - 1, result.values.length, `row has ${row.length - 1} value slots for ${result.values.length} columns`);
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
it("leaves an explicit sourceRef as a filter, not an expansion", async () => {
|
|
655
|
+
const captured = [];
|
|
656
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: ["gps.main", "gps.aux"] }), SELF_CONTEXT, true);
|
|
657
|
+
const result = await provider.getValues({
|
|
658
|
+
...RANGE,
|
|
659
|
+
sourcePolicy: "all",
|
|
660
|
+
pathSpecs: [{ ...SPEC, sourceRef: "gps.main" }],
|
|
661
|
+
});
|
|
662
|
+
assert.equal(result.values.length, 1);
|
|
663
|
+
assert.equal(result.values[0].$source, "gps.main");
|
|
664
|
+
assert.ok(!captured.some((c) => /SELECT DISTINCT source/.test(c.sql)), "an explicit source needs no discovery");
|
|
665
|
+
});
|
|
666
|
+
it("does nothing without the policy, even when enabled", async () => {
|
|
667
|
+
const captured = [];
|
|
668
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: ["gps.main", "gps.aux"] }), SELF_CONTEXT, true);
|
|
669
|
+
const result = await provider.getValues({
|
|
670
|
+
...RANGE,
|
|
671
|
+
pathSpecs: [SPEC],
|
|
672
|
+
});
|
|
673
|
+
assert.equal(result.values.length, 1);
|
|
674
|
+
assert.ok(!("$source" in result.values[0]));
|
|
675
|
+
});
|
|
676
|
+
it("treats an unrecognised policy as absent", async () => {
|
|
677
|
+
const captured = [];
|
|
678
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: ["gps.main", "gps.aux"] }), SELF_CONTEXT, true);
|
|
679
|
+
const result = await provider.getValues({
|
|
680
|
+
...RANGE,
|
|
681
|
+
sourcePolicy: "none",
|
|
682
|
+
pathSpecs: [SPEC],
|
|
683
|
+
});
|
|
684
|
+
assert.equal(result.values.length, 1, "only 'all' expands");
|
|
685
|
+
assert.ok(!("$source" in result.values[0]));
|
|
686
|
+
assert.ok(!captured.some((c) => /SELECT DISTINCT source/.test(c.sql)), "an unknown policy must not probe for sources");
|
|
687
|
+
});
|
|
688
|
+
// The per-path cap alone is not enough: many paths at many sources each is
|
|
689
|
+
// hundreds of queries from one request.
|
|
690
|
+
it("refuses a request whose total expansion is too wide", async () => {
|
|
691
|
+
const captured = [];
|
|
692
|
+
const eight = ["s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8"];
|
|
693
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: eight, signalk_str: [] }), SELF_CONTEXT, true);
|
|
694
|
+
// 9 paths x 8 sources = 72 columns, past the 64 request ceiling.
|
|
695
|
+
const specs = Array.from({ length: 9 }, (_, i) => ({
|
|
696
|
+
path: `nav.p${i}`,
|
|
697
|
+
aggregate: "average",
|
|
698
|
+
parameter: [],
|
|
699
|
+
}));
|
|
700
|
+
await assert.rejects(() => provider.getValues({
|
|
701
|
+
...RANGE,
|
|
702
|
+
sourcePolicy: "all",
|
|
703
|
+
pathSpecs: specs,
|
|
704
|
+
}), /expands these paths into 72 columns/);
|
|
705
|
+
});
|
|
706
|
+
// Discovery is a query per path per table, so a request far past the
|
|
707
|
+
// ceiling must be rejected BEFORE issuing hundreds of DISTINCT probes.
|
|
708
|
+
it("stops probing once the column budget is blown", async () => {
|
|
709
|
+
const captured = [];
|
|
710
|
+
const eight = ["s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8"];
|
|
711
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: eight, signalk_str: [] }), SELF_CONTEXT, true);
|
|
712
|
+
const specs = Array.from({ length: 100 }, (_, i) => ({
|
|
713
|
+
path: `nav.p${i}`,
|
|
714
|
+
aggregate: "average",
|
|
715
|
+
parameter: [],
|
|
716
|
+
}));
|
|
717
|
+
await assert.rejects(() => provider.getValues({
|
|
718
|
+
...RANGE,
|
|
719
|
+
sourcePolicy: "all",
|
|
720
|
+
pathSpecs: specs,
|
|
721
|
+
}), /more than 64 columns/);
|
|
722
|
+
const probes = captured.filter((c) => /SELECT DISTINCT source/.test(c.sql)).length;
|
|
723
|
+
// 100 paths x 2 tables would be 200 if discovery ran to completion.
|
|
724
|
+
assert.ok(probes < 40, `issued ${probes} discovery probes before giving up`);
|
|
725
|
+
});
|
|
726
|
+
// The two value tables migrate independently, so `signalk` can have a
|
|
727
|
+
// `source` column while `signalk_str` does not. Expansion is driven by
|
|
728
|
+
// whichever table answered and then applied to both, so the string fallback
|
|
729
|
+
// carried `AND source = '...'` into a table with no such column and failed
|
|
730
|
+
// the WHOLE request — verified against a live QuestDB.
|
|
731
|
+
it("degrades the string fallback when only signalk_str lacks source", async () => {
|
|
732
|
+
const warnings = [];
|
|
733
|
+
const captured = [];
|
|
734
|
+
const client = {
|
|
735
|
+
exec: async (sql) => {
|
|
736
|
+
captured.push({ sql });
|
|
737
|
+
if (/DISTINCT source FROM signalk_str/.test(sql)) {
|
|
738
|
+
throw new Error("Invalid column: source");
|
|
739
|
+
}
|
|
740
|
+
if (/DISTINCT source FROM signalk/.test(sql)) {
|
|
741
|
+
return {
|
|
742
|
+
columns: [],
|
|
743
|
+
dataset: [["gps.main"]],
|
|
744
|
+
count: 1,
|
|
745
|
+
timestamp: 0,
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
// The numeric table holds nothing, forcing the string fallback.
|
|
749
|
+
if (/FROM signalk WHERE/.test(sql)) {
|
|
750
|
+
return { columns: [], dataset: [], count: 0, timestamp: 0 };
|
|
751
|
+
}
|
|
752
|
+
// The string table rejects any query carrying a source predicate.
|
|
753
|
+
if (/FROM signalk_str/.test(sql) && /source/.test(sql)) {
|
|
754
|
+
throw new Error("Invalid column: source");
|
|
755
|
+
}
|
|
756
|
+
return {
|
|
757
|
+
columns: [],
|
|
758
|
+
dataset: [["2024-01-01T00:00:00.000Z", "docked", null]],
|
|
759
|
+
count: 1,
|
|
760
|
+
timestamp: 0,
|
|
761
|
+
};
|
|
762
|
+
},
|
|
763
|
+
};
|
|
764
|
+
const provider = createHistoryProviderV2(client, SELF_CONTEXT, true, (m) => warnings.push(m));
|
|
765
|
+
const result = await provider.getValues({
|
|
766
|
+
...RANGE,
|
|
767
|
+
sourcePolicy: "all",
|
|
768
|
+
pathSpecs: [
|
|
769
|
+
{ path: "navigation.state", aggregate: "last", parameter: [] },
|
|
770
|
+
],
|
|
771
|
+
});
|
|
772
|
+
// The request succeeds rather than failing outright...
|
|
773
|
+
assert.equal(result.values.length, 1);
|
|
774
|
+
assert.deepEqual(result.data, [["2024-01-01T00:00:00.000Z", "docked"]]);
|
|
775
|
+
// ...and the column withdraws its $source claim, because the rows it
|
|
776
|
+
// returned were never filtered by source.
|
|
777
|
+
assert.ok(!("$source" in result.values[0]), "unfiltered rows must not be labelled as one source's");
|
|
778
|
+
assert.ok(warnings.some((w) => /signalk_str has no 'source'/.test(w)), "the degradation must be reported");
|
|
779
|
+
});
|
|
780
|
+
it("gives unattributed rows their own column, ordered last", async () => {
|
|
781
|
+
const captured = [];
|
|
782
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
783
|
+
signalk: [null, "gps.main"],
|
|
784
|
+
signalk_str: [],
|
|
785
|
+
}), SELF_CONTEXT, true);
|
|
786
|
+
const result = await provider.getValues({
|
|
787
|
+
...RANGE,
|
|
788
|
+
sourcePolicy: "all",
|
|
789
|
+
pathSpecs: [SPEC],
|
|
790
|
+
});
|
|
791
|
+
assert.equal(result.values.length, 2);
|
|
792
|
+
assert.equal(result.values[0].$source, "gps.main");
|
|
793
|
+
assert.ok(!("$source" in result.values[1]), "the unattributed column carries no source claim");
|
|
794
|
+
// The unattributed column must select `source IS NULL`, NOT run unfiltered.
|
|
795
|
+
// An unfiltered query returns EVERY source's rows, so the "no source"
|
|
796
|
+
// column silently duplicates all the others — verified against a live
|
|
797
|
+
// QuestDB, where it returned 60 rows instead of its own 20.
|
|
798
|
+
const dataQueries = captured.filter((c) => !/DISTINCT source/.test(c.sql) && /FROM signalk\b/.test(c.sql));
|
|
799
|
+
assert.ok(dataQueries.some((c) => /AND source IS NULL/.test(c.sql)), "the unattributed column must filter on source IS NULL");
|
|
800
|
+
assert.equal(dataQueries.filter((c) => !/AND source = /.test(c.sql) && !/AND source IS NULL/.test(c.sql)).length, 0, "no expanded column may run without a source predicate");
|
|
801
|
+
assert.ok(!dataQueries.some((c) => /source = 'null'/.test(c.sql)), "a null source must never become the literal string 'null'");
|
|
802
|
+
});
|
|
803
|
+
it("falls back to a single column when nothing was recorded in range", async () => {
|
|
804
|
+
const captured = [];
|
|
805
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: [], signalk_str: [] }), SELF_CONTEXT, true);
|
|
806
|
+
const result = await provider.getValues({
|
|
807
|
+
...RANGE,
|
|
808
|
+
sourcePolicy: "all",
|
|
809
|
+
pathSpecs: [SPEC],
|
|
810
|
+
});
|
|
811
|
+
assert.equal(result.values.length, 1, "the path must not vanish");
|
|
812
|
+
assert.ok(!("$source" in result.values[0]));
|
|
813
|
+
});
|
|
814
|
+
// A legacy table with no `source` column must not make expansion quietly
|
|
815
|
+
// do nothing: the request still succeeds with one merged column, but the
|
|
816
|
+
// operator is told why, naming the column and the table.
|
|
817
|
+
it("warns, rather than silently degrading, on a missing source column", async () => {
|
|
818
|
+
const warnings = [];
|
|
819
|
+
const client = {
|
|
820
|
+
exec: async (sql) => {
|
|
821
|
+
if (/DISTINCT source/.test(sql)) {
|
|
822
|
+
throw new Error("Invalid column: source");
|
|
823
|
+
}
|
|
824
|
+
return { columns: [], dataset: [], count: 0, timestamp: 0 };
|
|
825
|
+
},
|
|
826
|
+
};
|
|
827
|
+
const provider = createHistoryProviderV2(client, SELF_CONTEXT, true, (m) => warnings.push(m));
|
|
828
|
+
const result = await provider.getValues({
|
|
829
|
+
...RANGE,
|
|
830
|
+
sourcePolicy: "all",
|
|
831
|
+
pathSpecs: [SPEC],
|
|
832
|
+
});
|
|
833
|
+
assert.equal(result.values.length, 1, "still answers, unexpanded");
|
|
834
|
+
assert.ok(warnings.length > 0, "the degradation must not be silent");
|
|
835
|
+
assert.match(warnings[0], /source/);
|
|
836
|
+
assert.match(warnings[0], /signalk/, "the warning names the table");
|
|
837
|
+
});
|
|
838
|
+
// A timeout or 5xx is NOT "no sources". Reporting it as an empty result
|
|
839
|
+
// would hand back a plausible single column built on a failure nobody saw.
|
|
840
|
+
it("propagates a real query failure instead of reporting no sources", async () => {
|
|
841
|
+
const client = {
|
|
842
|
+
exec: async (sql) => {
|
|
843
|
+
if (/DISTINCT source/.test(sql)) {
|
|
844
|
+
throw new Error("connection reset by peer");
|
|
845
|
+
}
|
|
846
|
+
return { columns: [], dataset: [], count: 0, timestamp: 0 };
|
|
847
|
+
},
|
|
848
|
+
};
|
|
849
|
+
const provider = createHistoryProviderV2(client, SELF_CONTEXT, true);
|
|
850
|
+
await assert.rejects(() => provider.getValues({
|
|
851
|
+
...RANGE,
|
|
852
|
+
sourcePolicy: "all",
|
|
853
|
+
pathSpecs: [SPEC],
|
|
854
|
+
}), /connection reset/);
|
|
855
|
+
});
|
|
856
|
+
// A table that does not exist yet (no string values recorded) is normal,
|
|
857
|
+
// not a schema fault, and must not produce a warning.
|
|
858
|
+
it("stays quiet when a value table simply does not exist", async () => {
|
|
859
|
+
const warnings = [];
|
|
860
|
+
const client = {
|
|
861
|
+
exec: async (sql) => {
|
|
862
|
+
if (/DISTINCT source FROM signalk_str/.test(sql)) {
|
|
863
|
+
throw new Error("table does not exist [table=signalk_str]");
|
|
864
|
+
}
|
|
865
|
+
if (/DISTINCT source/.test(sql)) {
|
|
866
|
+
return {
|
|
867
|
+
columns: [],
|
|
868
|
+
dataset: [["gps.main"]],
|
|
869
|
+
count: 1,
|
|
870
|
+
timestamp: 0,
|
|
871
|
+
};
|
|
872
|
+
}
|
|
873
|
+
return { columns: [], dataset: [], count: 0, timestamp: 0 };
|
|
874
|
+
},
|
|
875
|
+
};
|
|
876
|
+
const provider = createHistoryProviderV2(client, SELF_CONTEXT, true, (m) => warnings.push(m));
|
|
877
|
+
const result = await provider.getValues({
|
|
878
|
+
...RANGE,
|
|
879
|
+
sourcePolicy: "all",
|
|
880
|
+
pathSpecs: [SPEC],
|
|
881
|
+
});
|
|
882
|
+
assert.equal(result.values[0].$source, "gps.main");
|
|
883
|
+
assert.equal(warnings.length, 0, "an absent table is not a fault");
|
|
884
|
+
});
|
|
885
|
+
// A STORED sourceRef need not satisfy the identifier guard — "tcp://gw:2000"
|
|
886
|
+
// is an ordinary Signal K source containing characters the guard rejects.
|
|
887
|
+
// Letting it reach the query builder throws and takes the WHOLE request
|
|
888
|
+
// down, so expansion would break a query that works today.
|
|
889
|
+
it("skips a source whose name cannot be used as a filter", async () => {
|
|
890
|
+
const warnings = [];
|
|
891
|
+
const captured = [];
|
|
892
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
893
|
+
signalk: ["gps.main", "tcp://gw:2000"],
|
|
894
|
+
signalk_str: [],
|
|
895
|
+
}), SELF_CONTEXT, true, (m) => warnings.push(m));
|
|
896
|
+
const result = await provider.getValues({
|
|
897
|
+
...RANGE,
|
|
898
|
+
sourcePolicy: "all",
|
|
899
|
+
pathSpecs: [SPEC],
|
|
900
|
+
});
|
|
901
|
+
assert.deepEqual(result.values.map((v) => v.$source), ["gps.main"], "the usable source still expands");
|
|
902
|
+
assert.ok(warnings.some((w) => w.includes("tcp://gw:2000")), "the skipped source must be reported");
|
|
903
|
+
});
|
|
904
|
+
it("keeps the path as one column when every source is unusable", async () => {
|
|
905
|
+
const captured = [];
|
|
906
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
907
|
+
signalk: ["tcp://a", "tcp://b"],
|
|
908
|
+
signalk_str: [],
|
|
909
|
+
}), SELF_CONTEXT, true);
|
|
910
|
+
const result = await provider.getValues({
|
|
911
|
+
...RANGE,
|
|
912
|
+
sourcePolicy: "all",
|
|
913
|
+
pathSpecs: [SPEC],
|
|
914
|
+
});
|
|
915
|
+
assert.equal(result.values.length, 1, "the path must not vanish");
|
|
916
|
+
assert.ok(!("$source" in result.values[0]));
|
|
917
|
+
});
|
|
918
|
+
// The bucket cap only bites when a resolution was named. An unresolved
|
|
919
|
+
// request runs one raw query per source with nothing else bounding it.
|
|
920
|
+
it("caps how many columns one path may expand into", async () => {
|
|
921
|
+
const warnings = [];
|
|
922
|
+
const captured = [];
|
|
923
|
+
const many = Array.from({ length: 40 }, (_, i) => `src${String(i).padStart(2, "0")}`);
|
|
924
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, { signalk: many, signalk_str: [] }), SELF_CONTEXT, true, (m) => warnings.push(m));
|
|
925
|
+
const result = await provider.getValues({
|
|
926
|
+
...RANGE,
|
|
927
|
+
sourcePolicy: "all",
|
|
928
|
+
pathSpecs: [SPEC],
|
|
929
|
+
});
|
|
930
|
+
assert.equal(result.values.length, 16, `got ${result.values.length}`);
|
|
931
|
+
assert.ok(warnings.some((w) => /40 sources/.test(w)), "truncation must be reported, not silent");
|
|
932
|
+
// Deterministic: the FIRST 16 sorted, not an arbitrary 16.
|
|
933
|
+
assert.equal(result.values[0].$source, "src00");
|
|
934
|
+
assert.equal(result.values[15].$source, "src15");
|
|
935
|
+
});
|
|
936
|
+
it("survives a database where no value table exists yet", async () => {
|
|
937
|
+
const captured = [];
|
|
938
|
+
// No table answers DISTINCT: the mock throws for both.
|
|
939
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {}), SELF_CONTEXT, true);
|
|
940
|
+
const result = await provider.getValues({
|
|
941
|
+
...RANGE,
|
|
942
|
+
sourcePolicy: "all",
|
|
943
|
+
pathSpecs: [SPEC],
|
|
944
|
+
});
|
|
945
|
+
assert.equal(result.values.length, 1);
|
|
946
|
+
assert.ok(!("$source" in result.values[0]));
|
|
947
|
+
});
|
|
948
|
+
it("consults the string table so boolean paths expand too", async () => {
|
|
949
|
+
const captured = [];
|
|
950
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
951
|
+
signalk: [],
|
|
952
|
+
signalk_str: ["switch.a"],
|
|
953
|
+
}), SELF_CONTEXT, true);
|
|
954
|
+
const result = await provider.getValues({
|
|
955
|
+
...RANGE,
|
|
956
|
+
sourcePolicy: "all",
|
|
957
|
+
pathSpecs: [
|
|
958
|
+
{
|
|
959
|
+
path: "electrical.switches.nav.state",
|
|
960
|
+
aggregate: "last",
|
|
961
|
+
parameter: [],
|
|
962
|
+
},
|
|
963
|
+
],
|
|
964
|
+
});
|
|
965
|
+
assert.equal(result.values[0].$source, "switch.a");
|
|
966
|
+
});
|
|
967
|
+
it("counts EXPANDED columns against the sample-bucket cap", async () => {
|
|
968
|
+
// Four sources over a range that is just under the cap for ONE column.
|
|
969
|
+
// Counting requested paths instead of columns would run at 4x the ceiling.
|
|
970
|
+
const captured = [];
|
|
971
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
972
|
+
signalk: ["a", "b", "c", "d"],
|
|
973
|
+
signalk_str: [],
|
|
974
|
+
}), SELF_CONTEXT, true);
|
|
975
|
+
await assert.rejects(() => provider.getValues({
|
|
976
|
+
from: { toString: () => "2024-01-01T00:00:00Z" },
|
|
977
|
+
// 400_000s at 1s = 400k buckets per series; 4 sources fall back too,
|
|
978
|
+
// so 8 queries x 400k = 3.2M, past the 1M cap.
|
|
979
|
+
to: { toString: () => "2024-01-05T15:06:40Z" },
|
|
980
|
+
resolution: 1,
|
|
981
|
+
sourcePolicy: "all",
|
|
982
|
+
pathSpecs: [SPEC],
|
|
983
|
+
}), /sample buckets/);
|
|
984
|
+
});
|
|
985
|
+
it("position expands from its own table", async () => {
|
|
986
|
+
const captured = [];
|
|
987
|
+
const provider = createHistoryProviderV2(makeSourceAwareClient(captured, {
|
|
988
|
+
signalk_position: ["gps.main", "gps.aux"],
|
|
989
|
+
}), SELF_CONTEXT, true);
|
|
990
|
+
const result = await provider.getValues({
|
|
991
|
+
...RANGE,
|
|
992
|
+
sourcePolicy: "all",
|
|
993
|
+
pathSpecs: [
|
|
994
|
+
{ path: "navigation.position", aggregate: "first", parameter: [] },
|
|
995
|
+
],
|
|
996
|
+
});
|
|
997
|
+
assert.deepEqual(result.values.map((v) => v.$source), ["gps.aux", "gps.main"]);
|
|
998
|
+
assert.ok(captured.some((c) => /DISTINCT source FROM signalk_position/.test(c.sql)), "position must be probed in its own table, not signalk");
|
|
999
|
+
});
|
|
1000
|
+
});
|
|
563
1001
|
//# sourceMappingURL=history-v2.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-v2.test.js","sourceRoot":"","sources":["../../src/test/history-v2.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAM3D,SAAS,cAAc,CAAC,QAAyB;IAC/C,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;YAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC9D,CAAC;KACK,CAAC;AACX,CAAC;AAED,MAAM,YAAY,GAAG,oCAAoC,CAAC;AAE1D,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC5C,qDAAqD,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC5C,qDAAqD,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACvE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,OAAO,EAAE,MAAM;YACf,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,WAAW,GAAG,oCAAoC,CAAC;QACzD,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,OAAO,EAAE,WAAW;YACpB,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,WAAW,GAAG,CAAC,EACtD,oDAAoD,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACtE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,KAAK,UAAU,kBAAkB,CAAC,SAAiB;QACjD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;SAChE,CAAC,CAAC;QAEV,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EACxD,wCAAwC,GAAG,EAAE,CAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EACtD,sCAAsC,GAAG,EAAE,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,KAAK,MAAM,SAAS,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EACxD,uCAAuC,SAAS,WAAW,GAAG,EAAE,CACjE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,8DAA8D;QAC9D,MAAM,MAAM,CAAC,OAAO,CAClB,QAAQ,CAAC,SAAS,CAAC;YACjB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;aACnE;SACK,CAAC,EACT,gBAAgB,CACjB,CAAC;QACF,sDAAsD;QACtD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,IAAI,EAAE,gDAAgD;YAClE,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;aACnE;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,GAAG;YACf,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;QACjE,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,EAAE,CACP,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC5B,+BAA+B,GAAG,EAAE,CACrC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,MAAM,CAAC,OAAO,CAClB,QAAQ,CAAC,SAAS,CAAC;YACjB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;gBAClE;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,EACT,gBAAgB,CACjB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CAClB,QAAQ,CAAC,SAAS,CAAC;YACjB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,qCAAqC;oBAC3C,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,EACT,gBAAgB,CACjB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,qCAAqC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,UAAU,EAAE,CAAC;YACb,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;aACnE;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,KAAK,GAAyB;YAClC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,cAAc,EAAE,EAAE,CAAC;SACrB,CAAC;QACF,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAoB,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,cAAc,CAAC,QAAQ,CAAC,EACxB,YAAY,CACb,CAAC;YAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;gBAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;gBAC9C,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE;oBACT,EAAE,IAAI,EAAE,4BAA4B,EAAE,SAAS,EAAE,SAAS,EAAE;iBAC7D;aACK,CAAC,CAAC;YAEV,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B,SAAS,GAAG,CAAC,CAAC;YACzE,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACrC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EACxC,qCAAqC,SAAS,WAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,oEAAoE;IACpE,4EAA4E;IAC5E,0EAA0E;IAC1E,2BAA2B;IAC3B,SAAS,UAAU,CACjB,QAAyB,EACzB,SAAuC;QAEvC,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACK,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,QAAiC,EAAE,EAAO,EAAE;QACvE,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QAC/C,OAAO;YACL,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC9C,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YAC/C,GAAG,IAAI;SACR,CAAC;IACJ,CAAC,CAAC;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,KAAK,CAAC,8CAA8C,CAAC,CACtD,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,EAClE,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,KAAK,CAAC,6BAA6B,CAAC,CACrC,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,CACP,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACpD,+CAA+C,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC;gBACE,CAAC,6BAA6B,EAAE,IAAI,CAAC;gBACrC,CAAC,6BAA6B,EAAE,IAAI,CAAC;aACtC,CACN,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,KAAK,CAAC,qCAAqC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAClE,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,KAAK,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CACrE,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,qEAAqE;QACrE,oDAAoD;QACpD,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,yEAAyE;QACzE,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACtD,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CACrC,KAAK,CAAC,qCAAqC,CAAC,CAC7C,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,wEAAwE;QACxE,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAChC,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACjD,CAAC,CAAC,EAAE,CAAC;QACT,CAAC,CAAC,EACF,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAE,CAAC,GAAG,CAAC;QACxE,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAClC,kCAAkC,MAAM,EAAE,CAC3C,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAMrD,SAAS,aAAa,CAAC,QAAyB;QAC9C,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAC9D,CAAC;SAC2B,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;QACtE,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;KAC/C,CAAC;IAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,oEAAoE;QACpE,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,aAAa,CAAC,QAAQ,CAAC,EACvB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC5C,+CAA+C,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACjE,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,qEAAqE;QACrE,mDAAmD;QACnD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,aAAa,CAAC,QAAQ,CAAC,EACvB,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC5C,kDAAkD,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACpE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,0EAA0E;IAC1E,SAAS,UAAU,CACjB,QAAyB,EACzB,SAAuC;QAEvC,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACK,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAChD,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC9C,OAAO,EAAE,MAAM;KAChB,CAAC;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,EAClE,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,oBAAoB;iBAChC;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAC7D,kCAAkC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,EAClE,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EACrC,mCAAmC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACrD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACzE,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,UAAU;iBACtB;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC1C,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EACrD,mDAAmD,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC,CAAC,EAAE,CACP,EACD,YAAY,CACb,CAAC;QAEF,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,SAAS,EAAE,OAAO;oBAClB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,mBAAmB;iBAC/B;aACF;SACK,CAAC,CAAC;QAEV,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,2CAA2C,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EACzD,8CAA8C,QAAQ,CAAC,GAAG,EAAE,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC,EAC5D,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;YACtC,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,UAAU;iBACtB;gBACD;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;iBACd;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CACP,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAClC,8CAA8C,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,uEAAuE;QACvE,uEAAuE;QACvE,uDAAuD;QACvD,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrC,OAAO,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACvC,OAAO,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,EACF,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;YACtC,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,UAAU;iBACtB;gBACD;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,YAAY;iBACxB;aACF;SACK,CAAC,CAAC;QAEV,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,QAAQ,GAAG,uBAAuB,CACtC,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EACxB,YAAY,CACb,CAAC;QAEF,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CACxB,QAAQ,CAAC,SAAS,CAAC;YACjB,GAAG,KAAK;YACR,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,4BAA4B;oBAClC,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,wBAAwB;iBACpC;aACF;SACK,CAAC,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"history-v2.test.js","sourceRoot":"","sources":["../../src/test/history-v2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,34 @@ describe("ILPWriter", () => {
|
|
|
47
47
|
const all = received.join("");
|
|
48
48
|
assert.ok(all.includes('signalk_str,path=navigation.state,context=self value_str="motoring"'), `Expected string ILP line in: ${all}`);
|
|
49
49
|
});
|
|
50
|
+
// ILP is a LINE protocol. A raw newline inside a quoted value splits the
|
|
51
|
+
// row into two malformed lines and QuestDB silently stores NEITHER —
|
|
52
|
+
// verified against a live instance, which recorded 0 rows for such a write.
|
|
53
|
+
// Signal K string values do carry newlines (notification messages,
|
|
54
|
+
// free-text fields), and the failure is invisible: no error, no row.
|
|
55
|
+
it("encodes newlines in string values so the row stays one ILP line", async () => {
|
|
56
|
+
const received = [];
|
|
57
|
+
const server = net.createServer((socket) => {
|
|
58
|
+
socket.on("data", (data) => {
|
|
59
|
+
received.push(data.toString());
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
|
|
63
|
+
const port = server.address().port;
|
|
64
|
+
const writer = new ILPWriter("127.0.0.1", port, undefined, {
|
|
65
|
+
flushIntervalMs: 100,
|
|
66
|
+
});
|
|
67
|
+
await writer.connect();
|
|
68
|
+
const ts = new Date("2024-06-15T12:00:00.000Z");
|
|
69
|
+
writer.writeString("notifications.msg", "self", "line1\nline2\rmore", ts);
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
71
|
+
await writer.disconnect();
|
|
72
|
+
server.close();
|
|
73
|
+
const all = received.join("");
|
|
74
|
+
// Exactly one physical line reached the socket.
|
|
75
|
+
assert.strictEqual(all.split("\n").filter((l) => l.length > 0).length, 1, `Expected one ILP line, got: ${JSON.stringify(all)}`);
|
|
76
|
+
assert.ok(all.includes('value_str="line1\\nline2\\rmore"'), `Expected escaped newlines in: ${JSON.stringify(all)}`);
|
|
77
|
+
});
|
|
50
78
|
it("tags booleans with value_kind and leaves text untagged", async () => {
|
|
51
79
|
// value_kind is what keeps a recorded boolean distinguishable from a
|
|
52
80
|
// path whose text value is literally "true". Text must stay untagged so
|