1
1
xquery version "3.1" ;
2
2
3
3
(:~
4
- : Respond to eXist build requests for packages using various identifier and version number criteria
4
+ : Respond to eXist build requests for packages by their package descriptor's abbrev or name
5
+ : attribute, matching either (1) a minimum eXist version expressed as a SemVer version, or
6
+ : (2) an EXPath Package version attributes (`version`, `semver`, `semver-min`, and `semver-max`).
5
7
:
6
- : The info parameter can be used for troubleshooting
8
+ : The parameter name `version` is retained for backward compatibility, even though it's
9
+ : `versions` in the EXPath Package spec.
10
+ :
11
+ : The `info` parameter can be used for troubleshooting.
12
+ :
13
+ : The `zip` parameter forces the EXPath Package to be returned with a .xar.zip file extension.
14
+ :
15
+ : @see http://expath.org/spec/pkg
7
16
:)
8
17
9
18
import module namespace app="http://exist-db.org/xquery/app" at "app.xqm" ;
@@ -16,33 +25,37 @@ declare namespace response="http://exist-db.org/xquery/response";
16
25
let $abbrev := request:get-parameter ("abbrev" , ())
17
26
let $name := request:get-parameter ("name" , ())
18
27
let $exist-version-semver := request:get-parameter ("processor" , $config:default-exist-version)
19
- let $version := request:get-parameter ("version" , ())
28
+ let $versions := request:get-parameter ("version" , ())
20
29
let $semver := request:get-parameter ("semver" , ())
21
30
let $semver-min := request:get-parameter ("semver-min" , ())
22
31
let $semver-max := request:get-parameter ("semver-max" , ())
23
32
let $zip := request:get-parameter ("zip" , ())
24
33
let $info := request:get-parameter ("info" , ())
25
34
let $app-root-absolute-url := request:get-parameter ("app-root-absolute-url" , ())
26
35
27
- let $package-group :=
36
+ let $packages :=
28
37
if ($name) then
29
- doc ($config:package-groups-doc)//package-group [name eq $name]
38
+ doc ($config:package-groups-doc)//package-group [name eq $name]//package
30
39
else
31
- doc ($config:package-groups-doc)//package-group [abbrev eq $abbrev]
40
+ doc ($config:package-groups-doc)//package-group [abbrev eq $abbrev]//package
32
41
33
- let $newest-compatible-package := versions:find-newest-compatible-package ($package-group//package, $exist-version-semver, $version, $semver, $semver-min, $semver-max)
42
+ let $package :=
43
+ if (exists ($versions) or exists ($semver) or exists ($semver-min) or exists ($semver-max)) then
44
+ versions:get-newest-package-satisfying-version-attributes ($packages, $versions, $semver, $semver-min, $semver-max)
45
+ else
46
+ versions:get-newest-package-satisfying-exist-version ($packages, $exist-version-semver)
34
47
35
48
return
36
- if ($newest-compatible- package) then
49
+ if ($package) then
37
50
(: TODO shouldn't we get $abs-public from $config? - joewiz :)
38
51
let $abs-public := $app-root-absolute-url || "/public/"
39
- let $xar-filename := $newest-compatible- package/@path
52
+ let $xar-filename := $package/@path
40
53
return
41
54
if ($info) then
42
55
element found {
43
- $newest-compatible- package/@sha256,
44
- $newest-compatible- package/version ! attribute version {.},
45
- $newest-compatible- package/@path
56
+ $package/@sha256,
57
+ $package/version ! attribute version {.},
58
+ $package/@path
46
59
}
47
60
else if ($zip) then
48
61
app:redirect-to ($abs-public || $xar-filename || ".zip" )
0 commit comments