klenod-plugin-javascript 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/ext/native/Cargo.lock +34 -44
- data/ext/native/Cargo.toml +1 -1
- data/lib/klenod/build/plugins/javascript_plugin.rb +18 -16
- data/lib/klenod/plugin/javascript/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30e11e7339a1726052d296fcb54854f6d014c611cd4c48094933e0cc6b74080f
|
|
4
|
+
data.tar.gz: 359efb21736cf969f54d02576d06a822e9797a654d9ca11fbb1b33de9ebeb007
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '05876d2ec618520716b30663a7b87088f8cf2a206a71f093e49222eb09bcb5f301861ae38bebb5b3f0b986ed873cb596247a943f494d6c75414be83091c92b88'
|
|
7
|
+
data.tar.gz: 7c250eb557f9b10c72a90b175cacab02948a92c838264865aca533769d4670dd0eda1275bb0b4c0ae0a64cdac26db0053de784e3162c65d36ce9fc20bcaf8a92
|
data/ext/native/Cargo.lock
CHANGED
|
@@ -43,9 +43,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
|
|
|
43
43
|
|
|
44
44
|
[[package]]
|
|
45
45
|
name = "ast_node"
|
|
46
|
-
version = "
|
|
46
|
+
version = "7.0.0"
|
|
47
47
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
48
|
-
checksum = "
|
|
48
|
+
checksum = "edf54a7a1bf98e127c22e9e2b9d19619092c74283fdc14e4d67da69780f90db6"
|
|
49
49
|
dependencies = [
|
|
50
50
|
"quote",
|
|
51
51
|
"swc_macros_common",
|
|
@@ -302,9 +302,9 @@ checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
|
|
|
302
302
|
|
|
303
303
|
[[package]]
|
|
304
304
|
name = "hstr"
|
|
305
|
-
version = "
|
|
305
|
+
version = "4.0.1"
|
|
306
306
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
307
|
-
checksum = "
|
|
307
|
+
checksum = "23efb2e58d2f27a96edfa907c26016deb120b7ac8c66a19d2748f0e9c145f3cb"
|
|
308
308
|
dependencies = [
|
|
309
309
|
"hashbrown 0.14.5",
|
|
310
310
|
"new_debug_unreachable",
|
|
@@ -865,17 +865,6 @@ version = "1.15.2"
|
|
|
865
865
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
866
866
|
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
867
867
|
|
|
868
|
-
[[package]]
|
|
869
|
-
name = "smartstring"
|
|
870
|
-
version = "1.0.1"
|
|
871
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
872
|
-
checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
|
|
873
|
-
dependencies = [
|
|
874
|
-
"autocfg",
|
|
875
|
-
"static_assertions",
|
|
876
|
-
"version_check",
|
|
877
|
-
]
|
|
878
|
-
|
|
879
868
|
[[package]]
|
|
880
869
|
name = "stable_deref_trait"
|
|
881
870
|
version = "1.2.1"
|
|
@@ -901,9 +890,9 @@ dependencies = [
|
|
|
901
890
|
|
|
902
891
|
[[package]]
|
|
903
892
|
name = "swc_allocator"
|
|
904
|
-
version = "
|
|
893
|
+
version = "5.0.0"
|
|
905
894
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
906
|
-
checksum = "
|
|
895
|
+
checksum = "eb41c2f41afa7357a86109f7e058f6b140ab415b8cd196c1a7b54f2703c85417"
|
|
907
896
|
dependencies = [
|
|
908
897
|
"allocator-api2",
|
|
909
898
|
"bumpalo",
|
|
@@ -913,9 +902,9 @@ dependencies = [
|
|
|
913
902
|
|
|
914
903
|
[[package]]
|
|
915
904
|
name = "swc_atoms"
|
|
916
|
-
version = "
|
|
905
|
+
version = "10.0.0"
|
|
917
906
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
918
|
-
checksum = "
|
|
907
|
+
checksum = "c70a493080ceb12dabddb96905a3ddac679fbe9c71ddc81a2a769126e8cde7c4"
|
|
919
908
|
dependencies = [
|
|
920
909
|
"hstr",
|
|
921
910
|
"once_cell",
|
|
@@ -924,9 +913,9 @@ dependencies = [
|
|
|
924
913
|
|
|
925
914
|
[[package]]
|
|
926
915
|
name = "swc_common"
|
|
927
|
-
version = "
|
|
916
|
+
version = "26.0.0"
|
|
928
917
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
929
|
-
checksum = "
|
|
918
|
+
checksum = "142d2a06cafce623859ca799f5d1935bb8a886f18b66a2585ddeadff210121d0"
|
|
930
919
|
dependencies = [
|
|
931
920
|
"anyhow",
|
|
932
921
|
"ast_node",
|
|
@@ -949,9 +938,9 @@ dependencies = [
|
|
|
949
938
|
|
|
950
939
|
[[package]]
|
|
951
940
|
name = "swc_config"
|
|
952
|
-
version = "
|
|
941
|
+
version = "6.0.0"
|
|
953
942
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
954
|
-
checksum = "
|
|
943
|
+
checksum = "733985ad1340ea469d0d4366bae9664aa8f246006fa822a7d9365b41e48d7986"
|
|
955
944
|
dependencies = [
|
|
956
945
|
"anyhow",
|
|
957
946
|
"bytes-str",
|
|
@@ -975,9 +964,9 @@ dependencies = [
|
|
|
975
964
|
|
|
976
965
|
[[package]]
|
|
977
966
|
name = "swc_core"
|
|
978
|
-
version = "
|
|
967
|
+
version = "77.1.2"
|
|
979
968
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
980
|
-
checksum = "
|
|
969
|
+
checksum = "400701fb0bc3d13d1d0a1de6f58d91489fa9007eb3c584057bb2adb637fa9a5d"
|
|
981
970
|
dependencies = [
|
|
982
971
|
"swc_allocator",
|
|
983
972
|
"swc_atoms",
|
|
@@ -993,9 +982,9 @@ dependencies = [
|
|
|
993
982
|
|
|
994
983
|
[[package]]
|
|
995
984
|
name = "swc_ecma_ast"
|
|
996
|
-
version = "
|
|
985
|
+
version = "29.0.0"
|
|
997
986
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
998
|
-
checksum = "
|
|
987
|
+
checksum = "5a6fd43fc7e90b9d5b252af666c147f5e2ee692add2b075f7f0d6fc2f5357bb6"
|
|
999
988
|
dependencies = [
|
|
1000
989
|
"bitflags",
|
|
1001
990
|
"is-macro",
|
|
@@ -1012,9 +1001,9 @@ dependencies = [
|
|
|
1012
1001
|
|
|
1013
1002
|
[[package]]
|
|
1014
1003
|
name = "swc_ecma_codegen"
|
|
1015
|
-
version = "
|
|
1004
|
+
version = "32.0.0"
|
|
1016
1005
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1017
|
-
checksum = "
|
|
1006
|
+
checksum = "a1b19a1d9f059fb77b0bc321688c7af59fe687a975581379456962586959c5d1"
|
|
1018
1007
|
dependencies = [
|
|
1019
1008
|
"ascii",
|
|
1020
1009
|
"compact_str",
|
|
@@ -1030,6 +1019,7 @@ dependencies = [
|
|
|
1030
1019
|
"swc_common",
|
|
1031
1020
|
"swc_ecma_ast",
|
|
1032
1021
|
"swc_ecma_codegen_macros",
|
|
1022
|
+
"swc_ecma_utils",
|
|
1033
1023
|
"tracing",
|
|
1034
1024
|
]
|
|
1035
1025
|
|
|
@@ -1046,9 +1036,9 @@ dependencies = [
|
|
|
1046
1036
|
|
|
1047
1037
|
[[package]]
|
|
1048
1038
|
name = "swc_ecma_hooks"
|
|
1049
|
-
version = "0.
|
|
1039
|
+
version = "1.0.0"
|
|
1050
1040
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1051
|
-
checksum = "
|
|
1041
|
+
checksum = "f3abc7b19ffc01d358fe6dfce904cc0a9c30c4db6deed11011b67c320f71682c"
|
|
1052
1042
|
dependencies = [
|
|
1053
1043
|
"swc_atoms",
|
|
1054
1044
|
"swc_common",
|
|
@@ -1058,18 +1048,18 @@ dependencies = [
|
|
|
1058
1048
|
|
|
1059
1049
|
[[package]]
|
|
1060
1050
|
name = "swc_ecma_parser"
|
|
1061
|
-
version = "
|
|
1051
|
+
version = "45.1.1"
|
|
1062
1052
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1063
|
-
checksum = "
|
|
1053
|
+
checksum = "52c29766d4f60c867b48e4d433a4d6c1247f86e4fd1e5ca2babcdd2128806f91"
|
|
1064
1054
|
dependencies = [
|
|
1065
1055
|
"bitflags",
|
|
1056
|
+
"compact_str",
|
|
1066
1057
|
"either",
|
|
1067
1058
|
"num-bigint",
|
|
1068
1059
|
"phf",
|
|
1069
1060
|
"rustc-hash",
|
|
1070
1061
|
"seq-macro",
|
|
1071
1062
|
"serde",
|
|
1072
|
-
"smartstring",
|
|
1073
1063
|
"swc_atoms",
|
|
1074
1064
|
"swc_common",
|
|
1075
1065
|
"swc_ecma_ast",
|
|
@@ -1078,9 +1068,9 @@ dependencies = [
|
|
|
1078
1068
|
|
|
1079
1069
|
[[package]]
|
|
1080
1070
|
name = "swc_ecma_transforms_base"
|
|
1081
|
-
version = "
|
|
1071
|
+
version = "49.0.1"
|
|
1082
1072
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1083
|
-
checksum = "
|
|
1073
|
+
checksum = "9c5b5b6a31a512d23854cb6fabc9347596bde4106cd3a65dc4f9072bbb0514b4"
|
|
1084
1074
|
dependencies = [
|
|
1085
1075
|
"better_scoped_tls",
|
|
1086
1076
|
"indexmap",
|
|
@@ -1100,9 +1090,9 @@ dependencies = [
|
|
|
1100
1090
|
|
|
1101
1091
|
[[package]]
|
|
1102
1092
|
name = "swc_ecma_transforms_react"
|
|
1103
|
-
version = "
|
|
1093
|
+
version = "55.0.1"
|
|
1104
1094
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1105
|
-
checksum = "
|
|
1095
|
+
checksum = "4d051cd9043cd7ca24eb154606e6a6914ed13d0dca686bd681a5277d99a8e4c7"
|
|
1106
1096
|
dependencies = [
|
|
1107
1097
|
"base64",
|
|
1108
1098
|
"bytes-str",
|
|
@@ -1125,9 +1115,9 @@ dependencies = [
|
|
|
1125
1115
|
|
|
1126
1116
|
[[package]]
|
|
1127
1117
|
name = "swc_ecma_transforms_typescript"
|
|
1128
|
-
version = "
|
|
1118
|
+
version = "55.0.2"
|
|
1129
1119
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1130
|
-
checksum = "
|
|
1120
|
+
checksum = "f6ff33eb8a13dced33261de7778097e18ac33e2ff0ffe7b071f1837b54679d61"
|
|
1131
1121
|
dependencies = [
|
|
1132
1122
|
"bytes-str",
|
|
1133
1123
|
"rustc-hash",
|
|
@@ -1143,9 +1133,9 @@ dependencies = [
|
|
|
1143
1133
|
|
|
1144
1134
|
[[package]]
|
|
1145
1135
|
name = "swc_ecma_utils"
|
|
1146
|
-
version = "
|
|
1136
|
+
version = "35.0.1"
|
|
1147
1137
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1148
|
-
checksum = "
|
|
1138
|
+
checksum = "a0cf1613b3f833d4713998914154e8335eacbec9a3ceb328ee37dc7618cdb468"
|
|
1149
1139
|
dependencies = [
|
|
1150
1140
|
"dragonbox_ecma",
|
|
1151
1141
|
"indexmap",
|
|
@@ -1162,9 +1152,9 @@ dependencies = [
|
|
|
1162
1152
|
|
|
1163
1153
|
[[package]]
|
|
1164
1154
|
name = "swc_ecma_visit"
|
|
1165
|
-
version = "
|
|
1155
|
+
version = "29.0.0"
|
|
1166
1156
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1167
|
-
checksum = "
|
|
1157
|
+
checksum = "a830a070fea84a3a8a8c556463f0551e3bfc6cf2f8bdeecd62fa753e22a72289"
|
|
1168
1158
|
dependencies = [
|
|
1169
1159
|
"new_debug_unreachable",
|
|
1170
1160
|
"num-bigint",
|
data/ext/native/Cargo.toml
CHANGED
|
@@ -9,4 +9,4 @@ crate-type = ["cdylib"]
|
|
|
9
9
|
|
|
10
10
|
[dependencies]
|
|
11
11
|
magnus = "0.8.2"
|
|
12
|
-
swc_core = { version = "
|
|
12
|
+
swc_core = { version = "77.1.2", features = ["common", "ecma_ast", "ecma_codegen", "ecma_parser", "ecma_parser_typescript", "ecma_transforms_react", "ecma_transforms_typescript", "ecma_visit"] }
|
|
@@ -107,7 +107,7 @@ module Klenod
|
|
|
107
107
|
imports = result.metadata[:javascript_imports]
|
|
108
108
|
return result unless source && imports
|
|
109
109
|
|
|
110
|
-
edit = rewrite_imports(module_id, source, original_source, imports, resolved_dependencies, dependency_records)
|
|
110
|
+
edit = rewrite_imports(module_id, source, original_source, imports, resolved_dependencies, dependency_records, context)
|
|
111
111
|
source_map_asset = nil
|
|
112
112
|
code = edit.code
|
|
113
113
|
custom_element_descriptor = nil
|
|
@@ -121,7 +121,7 @@ module Klenod
|
|
|
121
121
|
if source_maps_enabled?(context)
|
|
122
122
|
source_map_json = edit.source_map.to_json
|
|
123
123
|
source_map_hash = Hashing.short(source_map_json)
|
|
124
|
-
source_map_output_path = "
|
|
124
|
+
source_map_output_path = "/#{asset_name(module_id)}.#{source_map_hash}.js.map"
|
|
125
125
|
source_map_asset =
|
|
126
126
|
Asset.new(
|
|
127
127
|
module_id.path,
|
|
@@ -136,10 +136,10 @@ module Klenod
|
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
hash = Hashing.short(code)
|
|
139
|
-
output_path = "
|
|
139
|
+
output_path = "/#{asset_name(module_id)}.#{hash}.js"
|
|
140
140
|
asset_javascript_assets = asset_javascript_assets(resolved_dependencies, dependency_records)
|
|
141
141
|
metadata = {type: :javascript}
|
|
142
|
-
css_preload_assets = css_preload_assets(resolved_dependencies, dependency_records)
|
|
142
|
+
css_preload_assets = css_preload_assets(resolved_dependencies, dependency_records, context)
|
|
143
143
|
metadata[:preload_assets] = css_preload_assets unless css_preload_assets.empty?
|
|
144
144
|
asset =
|
|
145
145
|
Asset.new(
|
|
@@ -151,13 +151,14 @@ module Klenod
|
|
|
151
151
|
CONTENT_TYPE,
|
|
152
152
|
metadata
|
|
153
153
|
)
|
|
154
|
+
asset.url = context.asset_url(asset.output_path)
|
|
154
155
|
|
|
155
156
|
result.with(
|
|
156
|
-
code: module_source(
|
|
157
|
+
code: module_source(asset.url, custom_element_descriptor: custom_element_descriptor&.merge(asset_path: asset.url)),
|
|
157
158
|
assets: [asset, source_map_asset, *asset_javascript_assets].compact,
|
|
158
159
|
metadata: result.metadata.merge(
|
|
159
|
-
javascript_asset_path:
|
|
160
|
-
javascript_custom_element_descriptor: custom_element_descriptor&.merge(asset_path:
|
|
160
|
+
javascript_asset_path: asset.url,
|
|
161
|
+
javascript_custom_element_descriptor: custom_element_descriptor&.merge(asset_path: asset.url)
|
|
161
162
|
)
|
|
162
163
|
)
|
|
163
164
|
end
|
|
@@ -245,7 +246,7 @@ module Klenod
|
|
|
245
246
|
SourceLocation.new(match[:path], match[:line].to_i, match[:column].to_i)
|
|
246
247
|
end
|
|
247
248
|
|
|
248
|
-
def rewrite_imports(module_id, source, original_source, imports, resolved_dependencies, dependency_records)
|
|
249
|
+
def rewrite_imports(module_id, source, original_source, imports, resolved_dependencies, dependency_records, context)
|
|
249
250
|
resolved_by_range =
|
|
250
251
|
resolved_dependencies.to_h do |resolved_dependency|
|
|
251
252
|
metadata = resolved_dependency.dependency.metadata
|
|
@@ -259,23 +260,23 @@ module Klenod
|
|
|
259
260
|
dependency, record = resolved_by_range[[import.start_offset, import.end_offset]]
|
|
260
261
|
next [] unless dependency
|
|
261
262
|
|
|
262
|
-
import_edits(module_id, source, dependency, record)
|
|
263
|
+
import_edits(module_id, source, dependency, record, context)
|
|
263
264
|
end
|
|
264
265
|
|
|
265
266
|
SourceMap::Editor.new(source, identity_source_map(module_id, source, original_source)).apply(edits)
|
|
266
267
|
end
|
|
267
268
|
|
|
268
|
-
def import_edits(module_id, source, dependency, record)
|
|
269
|
+
def import_edits(module_id, source, dependency, record, context)
|
|
269
270
|
if (stylesheet_asset = css_javascript_stylesheet_asset(record))
|
|
270
271
|
validate_css_import!(module_id, source, dependency)
|
|
271
|
-
edits = [SourceMap::Edit.replace(dependency.metadata.fetch(:start_offset), dependency.metadata.fetch(:end_offset), stylesheet_asset.
|
|
272
|
+
edits = [SourceMap::Edit.replace(dependency.metadata.fetch(:start_offset), dependency.metadata.fetch(:end_offset), stylesheet_asset.url)]
|
|
272
273
|
if dependency.metadata.fetch(:attributes)[:type].nil?
|
|
273
274
|
edits << SourceMap::Edit.replace(dependency.metadata.fetch(:attribute_insert_offset), dependency.metadata.fetch(:attribute_insert_offset), %( with { type: "css" }))
|
|
274
275
|
end
|
|
275
276
|
return edits
|
|
276
277
|
end
|
|
277
278
|
|
|
278
|
-
if (asset_path = asset_javascript_asset_path(record))
|
|
279
|
+
if (asset_path = asset_javascript_asset_path(record, context))
|
|
279
280
|
validate_asset_import!(module_id, source, dependency)
|
|
280
281
|
return [SourceMap::Edit.replace(dependency.metadata.fetch(:start_offset), dependency.metadata.fetch(:end_offset), asset_path)]
|
|
281
282
|
end
|
|
@@ -283,8 +284,9 @@ module Klenod
|
|
|
283
284
|
[SourceMap::Edit.replace(dependency.metadata.fetch(:start_offset), dependency.metadata.fetch(:end_offset), record.metadata.fetch(:javascript_asset_path))]
|
|
284
285
|
end
|
|
285
286
|
|
|
286
|
-
def asset_javascript_asset_path(record)
|
|
287
|
-
asset_javascript_metadata_asset(record)
|
|
287
|
+
def asset_javascript_asset_path(record, _context)
|
|
288
|
+
asset = asset_javascript_metadata_asset(record)
|
|
289
|
+
asset&.url
|
|
288
290
|
end
|
|
289
291
|
|
|
290
292
|
def asset_javascript_assets(resolved_dependencies, dependency_records)
|
|
@@ -322,11 +324,11 @@ module Klenod
|
|
|
322
324
|
record.assets.find { it.metadata[:type] == :css_javascript_stylesheet } || record.assets.find { it.metadata[:type] == :css }
|
|
323
325
|
end
|
|
324
326
|
|
|
325
|
-
def css_preload_assets(resolved_dependencies, dependency_records)
|
|
327
|
+
def css_preload_assets(resolved_dependencies, dependency_records, context)
|
|
326
328
|
resolved_dependencies.filter_map do |resolved_dependency|
|
|
327
329
|
record = dependency_records.fetch(resolved_dependency.dependency.id)
|
|
328
330
|
asset = css_javascript_stylesheet_asset(record)
|
|
329
|
-
{path: asset.
|
|
331
|
+
{path: asset.url, as: "style"} if asset
|
|
330
332
|
end.uniq
|
|
331
333
|
end
|
|
332
334
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: klenod-plugin-javascript
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrés Alin
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.0.
|
|
18
|
+
version: 0.0.6
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.0.
|
|
25
|
+
version: 0.0.6
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: rb_sys
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
81
81
|
requirements:
|
|
82
82
|
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: 4.0
|
|
84
|
+
version: '4.0'
|
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - ">="
|