@jarenjs/json 0.46.5 → 0.49.2
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/ARCHITECTURE.md +1 -1
- package/README.md +47 -4
- package/dist/types/query/operators.d.ts +42 -0
- package/dist/types/query/series.d.ts +164 -0
- package/docs/QUERY-FORMAT.md +172 -4
- package/package.json +2 -2
- package/schemas/jaren-jslt.draft-07.schema.json +236 -0
- package/schemas/jaren-jslt.llm-profile.schema.json +229 -0
- package/schemas/jaren-jslt.schema.json +236 -0
- package/schemas/jaren-query.draft-07.schema.json +236 -0
- package/schemas/jaren-query.llm-profile.schema.json +229 -0
- package/schemas/jaren-query.schema.json +122 -2
- package/src/query/normalize.js +44 -1
- package/src/query/operators.js +332 -3
- package/src/query/series.js +415 -0
|
@@ -286,6 +286,15 @@
|
|
|
286
286
|
{
|
|
287
287
|
"$ref": "#/definitions/schemaOperatorPhrase"
|
|
288
288
|
},
|
|
289
|
+
{
|
|
290
|
+
"$ref": "#/definitions/seriesSpecPhrase"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"$ref": "#/definitions/asOfPhrase"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"$ref": "#/definitions/timeBucketPhrase"
|
|
297
|
+
},
|
|
289
298
|
{
|
|
290
299
|
"$ref": "#/definitions/applyPhrase"
|
|
291
300
|
}
|
|
@@ -667,6 +676,7 @@
|
|
|
667
676
|
"$bbox-intersects",
|
|
668
677
|
"$geo-simplify",
|
|
669
678
|
"$similarity",
|
|
679
|
+
"$overlaps",
|
|
670
680
|
"$default"
|
|
671
681
|
]
|
|
672
682
|
},
|
|
@@ -918,6 +928,232 @@
|
|
|
918
928
|
"$geohash"
|
|
919
929
|
],
|
|
920
930
|
"additionalProperties": false
|
|
931
|
+
},
|
|
932
|
+
"seriesSpec": {
|
|
933
|
+
"description": "A $resample or $rolling spec (QUERY-FORMAT.md section 8.16): a VERBATIM literal, never an expression, so the width, the aggregate, the fill policy, the wall clock and the row selectors are read once when the query compiles. Closed: an unknown member is JQ0003. 'every'/'width' is an ISO 8601 duration or a count of milliseconds; 'origin'/'start'/'end' are epoch milliseconds or an RFC 3339 string; 'at'/'value' are singular paths where '$' reads as the ROW. A named 'zone' needs an injected zoneProvider - this suite bundles no time-zone database.",
|
|
934
|
+
"type": "object",
|
|
935
|
+
"properties": {
|
|
936
|
+
"every": {
|
|
937
|
+
"$ref": "#/definitions/seriesSpan"
|
|
938
|
+
},
|
|
939
|
+
"width": {
|
|
940
|
+
"$ref": "#/definitions/seriesSpan"
|
|
941
|
+
},
|
|
942
|
+
"origin": {
|
|
943
|
+
"$ref": "#/definitions/seriesInstant"
|
|
944
|
+
},
|
|
945
|
+
"start": {
|
|
946
|
+
"$ref": "#/definitions/seriesInstant"
|
|
947
|
+
},
|
|
948
|
+
"end": {
|
|
949
|
+
"$ref": "#/definitions/seriesInstant"
|
|
950
|
+
},
|
|
951
|
+
"aggregate": {
|
|
952
|
+
"enum": [
|
|
953
|
+
"sum",
|
|
954
|
+
"mean",
|
|
955
|
+
"min",
|
|
956
|
+
"max",
|
|
957
|
+
"first",
|
|
958
|
+
"last",
|
|
959
|
+
"count"
|
|
960
|
+
]
|
|
961
|
+
},
|
|
962
|
+
"fill": {
|
|
963
|
+
"enum": [
|
|
964
|
+
"omit",
|
|
965
|
+
"null",
|
|
966
|
+
"zero",
|
|
967
|
+
"locf",
|
|
968
|
+
"linear"
|
|
969
|
+
]
|
|
970
|
+
},
|
|
971
|
+
"minPeriods": {
|
|
972
|
+
"type": "integer",
|
|
973
|
+
"minimum": 1
|
|
974
|
+
},
|
|
975
|
+
"at": {
|
|
976
|
+
"$ref": "#/definitions/rowSelector"
|
|
977
|
+
},
|
|
978
|
+
"value": {
|
|
979
|
+
"$ref": "#/definitions/rowSelector"
|
|
980
|
+
},
|
|
981
|
+
"zone": {
|
|
982
|
+
"type": "string",
|
|
983
|
+
"minLength": 1
|
|
984
|
+
},
|
|
985
|
+
"offset": {
|
|
986
|
+
"type": "number"
|
|
987
|
+
},
|
|
988
|
+
"disambiguation": {
|
|
989
|
+
"enum": [
|
|
990
|
+
"reject",
|
|
991
|
+
"earlier",
|
|
992
|
+
"later"
|
|
993
|
+
]
|
|
994
|
+
}
|
|
995
|
+
},
|
|
996
|
+
"additionalProperties": false
|
|
997
|
+
},
|
|
998
|
+
"seriesSpan": {
|
|
999
|
+
"description": "A width: an ISO 8601 duration string ('PT1H', 'P1M') or a count of milliseconds. A duration mixing the calendar and clock families ('P1MT1H') is refused by the compiler.",
|
|
1000
|
+
"anyOf": [
|
|
1001
|
+
{
|
|
1002
|
+
"type": "string",
|
|
1003
|
+
"minLength": 1
|
|
1004
|
+
},
|
|
1005
|
+
{
|
|
1006
|
+
"type": "number",
|
|
1007
|
+
"exclusiveMinimum": 0
|
|
1008
|
+
}
|
|
1009
|
+
]
|
|
1010
|
+
},
|
|
1011
|
+
"seriesInstant": {
|
|
1012
|
+
"description": "An instant: epoch milliseconds, or an RFC 3339 string. A full-time names no instant and is refused by the compiler.",
|
|
1013
|
+
"anyOf": [
|
|
1014
|
+
{
|
|
1015
|
+
"type": "number"
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"type": "string",
|
|
1019
|
+
"minLength": 1
|
|
1020
|
+
}
|
|
1021
|
+
]
|
|
1022
|
+
},
|
|
1023
|
+
"rowSelector": {
|
|
1024
|
+
"description": "Where a member lives in a source row: a singular JSONPath whose '$' is the ROW rather than the document ('$.on', \"$['recorded at']\", '$.meta.at'). Wildcards, descendants and filters are refused (JQ0003) - a selector names one member.",
|
|
1025
|
+
"type": "string",
|
|
1026
|
+
"pattern": "^\\$[.\\[]"
|
|
1027
|
+
},
|
|
1028
|
+
"seriesSpecPhrase": {
|
|
1029
|
+
"description": "$resample / $rolling [series, spec]: an operand expression and a VERBATIM spec literal. $resample returns sorted {at, value, count} buckets one per 'every'; $rolling returns one row per input instant over a window measured in time.",
|
|
1030
|
+
"type": "object",
|
|
1031
|
+
"minProperties": 1,
|
|
1032
|
+
"maxProperties": 1,
|
|
1033
|
+
"propertyNames": {
|
|
1034
|
+
"enum": [
|
|
1035
|
+
"$resample",
|
|
1036
|
+
"$rolling"
|
|
1037
|
+
]
|
|
1038
|
+
},
|
|
1039
|
+
"additionalProperties": {
|
|
1040
|
+
"type": "array",
|
|
1041
|
+
"items": [
|
|
1042
|
+
{
|
|
1043
|
+
"$ref": "#/definitions/expression"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"$ref": "#/definitions/seriesSpec"
|
|
1047
|
+
}
|
|
1048
|
+
],
|
|
1049
|
+
"additionalItems": false,
|
|
1050
|
+
"minItems": 2,
|
|
1051
|
+
"maxItems": 2
|
|
1052
|
+
}
|
|
1053
|
+
},
|
|
1054
|
+
"asOfSpec": {
|
|
1055
|
+
"description": "The $asof spec (QUERY-FORMAT.md section 8.16): a VERBATIM literal. 'by' joins within groups; 'leftAt'/'rightAt' say where each side keeps its instant when the two documents spell it differently. Closed: an unknown member is JQ0003.",
|
|
1056
|
+
"type": "object",
|
|
1057
|
+
"properties": {
|
|
1058
|
+
"direction": {
|
|
1059
|
+
"enum": [
|
|
1060
|
+
"backward",
|
|
1061
|
+
"forward",
|
|
1062
|
+
"nearest"
|
|
1063
|
+
]
|
|
1064
|
+
},
|
|
1065
|
+
"tolerance": {
|
|
1066
|
+
"$ref": "#/definitions/seriesSpan"
|
|
1067
|
+
},
|
|
1068
|
+
"by": {
|
|
1069
|
+
"$ref": "#/definitions/rowSelector"
|
|
1070
|
+
},
|
|
1071
|
+
"leftAt": {
|
|
1072
|
+
"$ref": "#/definitions/rowSelector"
|
|
1073
|
+
},
|
|
1074
|
+
"rightAt": {
|
|
1075
|
+
"$ref": "#/definitions/rowSelector"
|
|
1076
|
+
}
|
|
1077
|
+
},
|
|
1078
|
+
"additionalProperties": false
|
|
1079
|
+
},
|
|
1080
|
+
"asOfPhrase": {
|
|
1081
|
+
"description": "$asof [left, right] or [left, right, spec]: two operand expressions and an optional VERBATIM spec literal. Answers one {left, right, distance} per left row; a left row with no match keeps right: null and stays in the answer.",
|
|
1082
|
+
"type": "object",
|
|
1083
|
+
"properties": {
|
|
1084
|
+
"$asof": {
|
|
1085
|
+
"type": "array",
|
|
1086
|
+
"items": [
|
|
1087
|
+
{
|
|
1088
|
+
"$ref": "#/definitions/expression"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"$ref": "#/definitions/expression"
|
|
1092
|
+
},
|
|
1093
|
+
{
|
|
1094
|
+
"$ref": "#/definitions/asOfSpec"
|
|
1095
|
+
}
|
|
1096
|
+
],
|
|
1097
|
+
"additionalItems": false,
|
|
1098
|
+
"minItems": 2,
|
|
1099
|
+
"maxItems": 3
|
|
1100
|
+
}
|
|
1101
|
+
},
|
|
1102
|
+
"required": [
|
|
1103
|
+
"$asof"
|
|
1104
|
+
],
|
|
1105
|
+
"additionalProperties": false
|
|
1106
|
+
},
|
|
1107
|
+
"calendarContext": {
|
|
1108
|
+
"description": "$time-bucket's optional fourth position: the wall clock its boundaries fall on. UTC is the default and needs nothing; a named 'zone' needs an injected zoneProvider.",
|
|
1109
|
+
"type": "object",
|
|
1110
|
+
"properties": {
|
|
1111
|
+
"zone": {
|
|
1112
|
+
"type": "string",
|
|
1113
|
+
"minLength": 1
|
|
1114
|
+
},
|
|
1115
|
+
"offset": {
|
|
1116
|
+
"type": "number"
|
|
1117
|
+
},
|
|
1118
|
+
"disambiguation": {
|
|
1119
|
+
"enum": [
|
|
1120
|
+
"reject",
|
|
1121
|
+
"earlier",
|
|
1122
|
+
"later"
|
|
1123
|
+
]
|
|
1124
|
+
}
|
|
1125
|
+
},
|
|
1126
|
+
"additionalProperties": false
|
|
1127
|
+
},
|
|
1128
|
+
"timeBucketPhrase": {
|
|
1129
|
+
"description": "$time-bucket [at, every] / [at, every, origin] / [at, every, origin, context]: the instant labelling the bucket 'at' falls in. The first three positions are operand expressions ('origin' may be null for the ladder's own default); the fourth is a VERBATIM calendar context literal.",
|
|
1130
|
+
"type": "object",
|
|
1131
|
+
"properties": {
|
|
1132
|
+
"$time-bucket": {
|
|
1133
|
+
"type": "array",
|
|
1134
|
+
"items": [
|
|
1135
|
+
{
|
|
1136
|
+
"$ref": "#/definitions/expression"
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
"$ref": "#/definitions/expression"
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"$ref": "#/definitions/expression"
|
|
1143
|
+
},
|
|
1144
|
+
{
|
|
1145
|
+
"$ref": "#/definitions/calendarContext"
|
|
1146
|
+
}
|
|
1147
|
+
],
|
|
1148
|
+
"additionalItems": false,
|
|
1149
|
+
"minItems": 2,
|
|
1150
|
+
"maxItems": 4
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
"required": [
|
|
1154
|
+
"$time-bucket"
|
|
1155
|
+
],
|
|
1156
|
+
"additionalProperties": false
|
|
921
1157
|
}
|
|
922
1158
|
}
|
|
923
1159
|
}
|
|
@@ -284,6 +284,15 @@
|
|
|
284
284
|
{
|
|
285
285
|
"$ref": "#/$defs/schemaOperatorPhrase"
|
|
286
286
|
},
|
|
287
|
+
{
|
|
288
|
+
"$ref": "#/$defs/seriesSpecPhrase"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"$ref": "#/$defs/asOfPhrase"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"$ref": "#/$defs/timeBucketPhrase"
|
|
295
|
+
},
|
|
287
296
|
{
|
|
288
297
|
"$ref": "#/$defs/applyPhrase"
|
|
289
298
|
}
|
|
@@ -777,6 +786,226 @@
|
|
|
777
786
|
"$geohash"
|
|
778
787
|
],
|
|
779
788
|
"additionalProperties": false
|
|
789
|
+
},
|
|
790
|
+
"seriesSpec": {
|
|
791
|
+
"description": "A $resample or $rolling spec (QUERY-FORMAT.md section 8.16): a VERBATIM literal, never an expression, so the width, the aggregate, the fill policy, the wall clock and the row selectors are read once when the query compiles. Closed: an unknown member is JQ0003. 'every'/'width' is an ISO 8601 duration or a count of milliseconds; 'origin'/'start'/'end' are epoch milliseconds or an RFC 3339 string; 'at'/'value' are singular paths where '$' reads as the ROW. A named 'zone' needs an injected zoneProvider - this suite bundles no time-zone database.",
|
|
792
|
+
"type": "object",
|
|
793
|
+
"properties": {
|
|
794
|
+
"every": {
|
|
795
|
+
"$ref": "#/$defs/seriesSpan"
|
|
796
|
+
},
|
|
797
|
+
"width": {
|
|
798
|
+
"$ref": "#/$defs/seriesSpan"
|
|
799
|
+
},
|
|
800
|
+
"origin": {
|
|
801
|
+
"$ref": "#/$defs/seriesInstant"
|
|
802
|
+
},
|
|
803
|
+
"start": {
|
|
804
|
+
"$ref": "#/$defs/seriesInstant"
|
|
805
|
+
},
|
|
806
|
+
"end": {
|
|
807
|
+
"$ref": "#/$defs/seriesInstant"
|
|
808
|
+
},
|
|
809
|
+
"aggregate": {
|
|
810
|
+
"enum": [
|
|
811
|
+
"sum",
|
|
812
|
+
"mean",
|
|
813
|
+
"min",
|
|
814
|
+
"max",
|
|
815
|
+
"first",
|
|
816
|
+
"last",
|
|
817
|
+
"count"
|
|
818
|
+
]
|
|
819
|
+
},
|
|
820
|
+
"fill": {
|
|
821
|
+
"enum": [
|
|
822
|
+
"omit",
|
|
823
|
+
"null",
|
|
824
|
+
"zero",
|
|
825
|
+
"locf",
|
|
826
|
+
"linear"
|
|
827
|
+
]
|
|
828
|
+
},
|
|
829
|
+
"minPeriods": {
|
|
830
|
+
"type": "integer",
|
|
831
|
+
"minimum": 1
|
|
832
|
+
},
|
|
833
|
+
"at": {
|
|
834
|
+
"$ref": "#/$defs/rowSelector"
|
|
835
|
+
},
|
|
836
|
+
"value": {
|
|
837
|
+
"$ref": "#/$defs/rowSelector"
|
|
838
|
+
},
|
|
839
|
+
"zone": {
|
|
840
|
+
"type": "string",
|
|
841
|
+
"minLength": 1
|
|
842
|
+
},
|
|
843
|
+
"offset": {
|
|
844
|
+
"type": "number"
|
|
845
|
+
},
|
|
846
|
+
"disambiguation": {
|
|
847
|
+
"enum": [
|
|
848
|
+
"reject",
|
|
849
|
+
"earlier",
|
|
850
|
+
"later"
|
|
851
|
+
]
|
|
852
|
+
}
|
|
853
|
+
},
|
|
854
|
+
"additionalProperties": false
|
|
855
|
+
},
|
|
856
|
+
"seriesSpan": {
|
|
857
|
+
"description": "A width: an ISO 8601 duration string ('PT1H', 'P1M') or a count of milliseconds. A duration mixing the calendar and clock families ('P1MT1H') is refused by the compiler.",
|
|
858
|
+
"anyOf": [
|
|
859
|
+
{
|
|
860
|
+
"type": "string",
|
|
861
|
+
"minLength": 1
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"type": "number",
|
|
865
|
+
"exclusiveMinimum": 0
|
|
866
|
+
}
|
|
867
|
+
]
|
|
868
|
+
},
|
|
869
|
+
"seriesInstant": {
|
|
870
|
+
"description": "An instant: epoch milliseconds, or an RFC 3339 string. A full-time names no instant and is refused by the compiler.",
|
|
871
|
+
"anyOf": [
|
|
872
|
+
{
|
|
873
|
+
"type": "number"
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
"type": "string",
|
|
877
|
+
"minLength": 1
|
|
878
|
+
}
|
|
879
|
+
]
|
|
880
|
+
},
|
|
881
|
+
"rowSelector": {
|
|
882
|
+
"description": "Where a member lives in a source row: a singular JSONPath whose '$' is the ROW rather than the document ('$.on', \"$['recorded at']\", '$.meta.at'). Wildcards, descendants and filters are refused (JQ0003) - a selector names one member.",
|
|
883
|
+
"type": "string",
|
|
884
|
+
"pattern": "^\\$[.\\[]"
|
|
885
|
+
},
|
|
886
|
+
"seriesSpecPhrase": {
|
|
887
|
+
"description": "$resample / $rolling [series, spec]: an operand expression and a VERBATIM spec literal. $resample returns sorted {at, value, count} buckets one per 'every'; $rolling returns one row per input instant over a window measured in time. (LLM profile: a member-name constraint is relaxed here; the canonical schema enforces it)",
|
|
888
|
+
"type": "object",
|
|
889
|
+
"minProperties": 1,
|
|
890
|
+
"maxProperties": 1,
|
|
891
|
+
"additionalProperties": {
|
|
892
|
+
"type": "array",
|
|
893
|
+
"prefixItems": [
|
|
894
|
+
{
|
|
895
|
+
"$ref": "#/$defs/expression"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"$ref": "#/$defs/seriesSpec"
|
|
899
|
+
}
|
|
900
|
+
],
|
|
901
|
+
"items": false,
|
|
902
|
+
"minItems": 2,
|
|
903
|
+
"maxItems": 2
|
|
904
|
+
}
|
|
905
|
+
},
|
|
906
|
+
"asOfSpec": {
|
|
907
|
+
"description": "The $asof spec (QUERY-FORMAT.md section 8.16): a VERBATIM literal. 'by' joins within groups; 'leftAt'/'rightAt' say where each side keeps its instant when the two documents spell it differently. Closed: an unknown member is JQ0003.",
|
|
908
|
+
"type": "object",
|
|
909
|
+
"properties": {
|
|
910
|
+
"direction": {
|
|
911
|
+
"enum": [
|
|
912
|
+
"backward",
|
|
913
|
+
"forward",
|
|
914
|
+
"nearest"
|
|
915
|
+
]
|
|
916
|
+
},
|
|
917
|
+
"tolerance": {
|
|
918
|
+
"$ref": "#/$defs/seriesSpan"
|
|
919
|
+
},
|
|
920
|
+
"by": {
|
|
921
|
+
"$ref": "#/$defs/rowSelector"
|
|
922
|
+
},
|
|
923
|
+
"leftAt": {
|
|
924
|
+
"$ref": "#/$defs/rowSelector"
|
|
925
|
+
},
|
|
926
|
+
"rightAt": {
|
|
927
|
+
"$ref": "#/$defs/rowSelector"
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
"additionalProperties": false
|
|
931
|
+
},
|
|
932
|
+
"asOfPhrase": {
|
|
933
|
+
"description": "$asof [left, right] or [left, right, spec]: two operand expressions and an optional VERBATIM spec literal. Answers one {left, right, distance} per left row; a left row with no match keeps right: null and stays in the answer.",
|
|
934
|
+
"type": "object",
|
|
935
|
+
"properties": {
|
|
936
|
+
"$asof": {
|
|
937
|
+
"type": "array",
|
|
938
|
+
"prefixItems": [
|
|
939
|
+
{
|
|
940
|
+
"$ref": "#/$defs/expression"
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
"$ref": "#/$defs/expression"
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
"$ref": "#/$defs/asOfSpec"
|
|
947
|
+
}
|
|
948
|
+
],
|
|
949
|
+
"items": false,
|
|
950
|
+
"minItems": 2,
|
|
951
|
+
"maxItems": 3
|
|
952
|
+
}
|
|
953
|
+
},
|
|
954
|
+
"required": [
|
|
955
|
+
"$asof"
|
|
956
|
+
],
|
|
957
|
+
"additionalProperties": false
|
|
958
|
+
},
|
|
959
|
+
"calendarContext": {
|
|
960
|
+
"description": "$time-bucket's optional fourth position: the wall clock its boundaries fall on. UTC is the default and needs nothing; a named 'zone' needs an injected zoneProvider.",
|
|
961
|
+
"type": "object",
|
|
962
|
+
"properties": {
|
|
963
|
+
"zone": {
|
|
964
|
+
"type": "string",
|
|
965
|
+
"minLength": 1
|
|
966
|
+
},
|
|
967
|
+
"offset": {
|
|
968
|
+
"type": "number"
|
|
969
|
+
},
|
|
970
|
+
"disambiguation": {
|
|
971
|
+
"enum": [
|
|
972
|
+
"reject",
|
|
973
|
+
"earlier",
|
|
974
|
+
"later"
|
|
975
|
+
]
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
"additionalProperties": false
|
|
979
|
+
},
|
|
980
|
+
"timeBucketPhrase": {
|
|
981
|
+
"description": "$time-bucket [at, every] / [at, every, origin] / [at, every, origin, context]: the instant labelling the bucket 'at' falls in. The first three positions are operand expressions ('origin' may be null for the ladder's own default); the fourth is a VERBATIM calendar context literal.",
|
|
982
|
+
"type": "object",
|
|
983
|
+
"properties": {
|
|
984
|
+
"$time-bucket": {
|
|
985
|
+
"type": "array",
|
|
986
|
+
"prefixItems": [
|
|
987
|
+
{
|
|
988
|
+
"$ref": "#/$defs/expression"
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"$ref": "#/$defs/expression"
|
|
992
|
+
},
|
|
993
|
+
{
|
|
994
|
+
"$ref": "#/$defs/expression"
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"$ref": "#/$defs/calendarContext"
|
|
998
|
+
}
|
|
999
|
+
],
|
|
1000
|
+
"items": false,
|
|
1001
|
+
"minItems": 2,
|
|
1002
|
+
"maxItems": 4
|
|
1003
|
+
}
|
|
1004
|
+
},
|
|
1005
|
+
"required": [
|
|
1006
|
+
"$time-bucket"
|
|
1007
|
+
],
|
|
1008
|
+
"additionalProperties": false
|
|
780
1009
|
}
|
|
781
1010
|
}
|
|
782
1011
|
}
|