@bookshop/hugo-engine 3.3.3 → 3.4.0-alpha.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.
Files changed (96) hide show
  1. package/.nyc_output/{25f8c04a-7fe3-4d10-b99e-0688e18203ec.json → 0f70a16f-6a79-48c7-8b16-3b4665e247b2.json} +0 -0
  2. package/.nyc_output/{2c3e7d19-6b44-48be-857a-ceba6bb9bf99.json → 6285d5fa-be3d-49e4-8f2f-82157d95dcd8.json} +0 -0
  3. package/.nyc_output/{5429d932-0ea0-4757-b731-0a647f4adc5f.json → 8b5e1314-6e86-4197-a3ae-3c40e4c2f39e.json} +0 -0
  4. package/.nyc_output/{723f5a1e-49f4-48c2-8a96-069bb758bb7f.json → c5490eb0-70c0-468f-a43f-e58c75dd34c8.json} +0 -0
  5. package/.nyc_output/{e4df4511-7e66-4fa6-84ed-6bd96e3027fe.json → ee1a9bec-d318-4aea-af93-7269debcf6df.json} +0 -0
  6. package/.nyc_output/processinfo/{25f8c04a-7fe3-4d10-b99e-0688e18203ec.json → 0f70a16f-6a79-48c7-8b16-3b4665e247b2.json} +1 -1
  7. package/.nyc_output/processinfo/6285d5fa-be3d-49e4-8f2f-82157d95dcd8.json +1 -0
  8. package/.nyc_output/processinfo/{2c3e7d19-6b44-48be-857a-ceba6bb9bf99.json → 8b5e1314-6e86-4197-a3ae-3c40e4c2f39e.json} +1 -1
  9. package/.nyc_output/processinfo/{5429d932-0ea0-4757-b731-0a647f4adc5f.json → c5490eb0-70c0-468f-a43f-e58c75dd34c8.json} +1 -1
  10. package/.nyc_output/processinfo/{723f5a1e-49f4-48c2-8a96-069bb758bb7f.json → ee1a9bec-d318-4aea-af93-7269debcf6df.json} +1 -1
  11. package/.nyc_output/processinfo/index.json +1 -1
  12. package/bookshop-hugo-templates/bookshop.html +56 -0
  13. package/bookshop-hugo-templates/bookshop_bindings.html +29 -0
  14. package/bookshop-hugo-templates/bookshop_component_browser.html +30 -0
  15. package/bookshop-hugo-templates/bookshop_partial.html +42 -0
  16. package/bookshop-hugo-templates/bookshop_scss.html +9 -0
  17. package/bookshop-hugo-templates/errors/bad_bookshop_tag.html +39 -0
  18. package/bookshop-hugo-templates/errors/err.html +6 -0
  19. package/bookshop-hugo-templates/helpers/component.html +25 -0
  20. package/bookshop-hugo-templates/helpers/component_key.html +11 -0
  21. package/bookshop-hugo-templates/helpers/partial.html +25 -0
  22. package/bookshop-hugo-templates/helpers/partial_key.html +9 -0
  23. package/full-hugo-renderer/build.sh +34 -0
  24. package/full-hugo-renderer/go.mod +87 -0
  25. package/{hugo-renderer → full-hugo-renderer}/go.sum +204 -12
  26. package/full-hugo-renderer/hugo_renderer.wasm +0 -0
  27. package/full-hugo-renderer/hugo_renderer.wasm.gz +0 -0
  28. package/full-hugo-renderer/main.go +215 -0
  29. package/{hugo-renderer → full-hugo-renderer}/wasm_exec.js +6 -2
  30. package/lib/builder.js +2 -2
  31. package/lib/engine.js +109 -42
  32. package/lib/hugoIdentifierParser.js +5 -0
  33. package/lib/translateTextTemplate.js +3 -0
  34. package/lib/translateTextTemplate.test.js +22 -16
  35. package/package.json +4 -4
  36. package/.nyc_output/processinfo/e4df4511-7e66-4fa6-84ed-6bd96e3027fe.json +0 -1
  37. package/hugo-renderer/build.sh +0 -66
  38. package/hugo-renderer/deps/bookshop_modified_deps.go +0 -6
  39. package/hugo-renderer/go.mod +0 -19
  40. package/hugo-renderer/helpers/bookshop_modified_content.go +0 -98
  41. package/hugo-renderer/helpers/bookshop_modified_general.go +0 -33
  42. package/hugo-renderer/helpers/emoji.go +0 -96
  43. package/hugo-renderer/hugo_renderer.wasm +0 -0
  44. package/hugo-renderer/hugo_renderer.wasm.gz +0 -0
  45. package/hugo-renderer/main.go +0 -42
  46. package/hugo-renderer/tpl/bookshop_engine/bookshop_func_importer.go +0 -35
  47. package/hugo-renderer/tpl/bookshop_engine/bookshop_render.go +0 -64
  48. package/hugo-renderer/tpl/bookshop_library/bookshop_components.go +0 -129
  49. package/hugo-renderer/tpl/bookshop_library/bookshop_data.go +0 -53
  50. package/hugo-renderer/tpl/cast/cast.go +0 -63
  51. package/hugo-renderer/tpl/cast/init.go +0 -57
  52. package/hugo-renderer/tpl/collections/append.go +0 -37
  53. package/hugo-renderer/tpl/collections/apply.go +0 -131
  54. package/hugo-renderer/tpl/collections/collections.go +0 -768
  55. package/hugo-renderer/tpl/collections/complement.go +0 -55
  56. package/hugo-renderer/tpl/collections/index.go +0 -133
  57. package/hugo-renderer/tpl/collections/init.go +0 -214
  58. package/hugo-renderer/tpl/collections/merge.go +0 -126
  59. package/hugo-renderer/tpl/collections/reflect_helpers.go +0 -216
  60. package/hugo-renderer/tpl/collections/sort.go +0 -183
  61. package/hugo-renderer/tpl/collections/symdiff.go +0 -68
  62. package/hugo-renderer/tpl/collections/where.go +0 -517
  63. package/hugo-renderer/tpl/compare/compare.go +0 -324
  64. package/hugo-renderer/tpl/compare/init.go +0 -85
  65. package/hugo-renderer/tpl/crypto/crypto.go +0 -109
  66. package/hugo-renderer/tpl/crypto/init.go +0 -65
  67. package/hugo-renderer/tpl/debug/debug.go +0 -40
  68. package/hugo-renderer/tpl/debug/init.go +0 -45
  69. package/hugo-renderer/tpl/encoding/encoding.go +0 -90
  70. package/hugo-renderer/tpl/encoding/init.go +0 -59
  71. package/hugo-renderer/tpl/fmt/fmt.go +0 -66
  72. package/hugo-renderer/tpl/fmt/init.go +0 -77
  73. package/hugo-renderer/tpl/inflect/inflect.go +0 -79
  74. package/hugo-renderer/tpl/inflect/init.go +0 -60
  75. package/hugo-renderer/tpl/internal/bookshop_modified_templatefuncsRegistry.go +0 -88
  76. package/hugo-renderer/tpl/math/init.go +0 -134
  77. package/hugo-renderer/tpl/math/math.go +0 -164
  78. package/hugo-renderer/tpl/math/round.go +0 -61
  79. package/hugo-renderer/tpl/partials/init.go +0 -55
  80. package/hugo-renderer/tpl/partials/partials.go +0 -88
  81. package/hugo-renderer/tpl/path/init.go +0 -60
  82. package/hugo-renderer/tpl/path/path.go +0 -159
  83. package/hugo-renderer/tpl/reflect/init.go +0 -51
  84. package/hugo-renderer/tpl/reflect/reflect.go +0 -36
  85. package/hugo-renderer/tpl/safe/init.go +0 -80
  86. package/hugo-renderer/tpl/safe/safe.go +0 -72
  87. package/hugo-renderer/tpl/site/bookshop_site.go +0 -67
  88. package/hugo-renderer/tpl/site/init.go +0 -41
  89. package/hugo-renderer/tpl/strings/init.go +0 -229
  90. package/hugo-renderer/tpl/strings/regexp.go +0 -125
  91. package/hugo-renderer/tpl/strings/strings.go +0 -500
  92. package/hugo-renderer/tpl/strings/truncate.go +0 -157
  93. package/hugo-renderer/tpl/transform/bookshop_unmarshal.go +0 -39
  94. package/hugo-renderer/tpl/transform/init.go +0 -113
  95. package/hugo-renderer/tpl/transform/transform.go +0 -116
  96. package/hugo-renderer/update-from-hugo.sh +0 -19
@@ -1,216 +0,0 @@
1
- // Copyright 2017 The Hugo Authors. All rights reserved.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- // http://www.apache.org/licenses/LICENSE-2.0
7
- //
8
- // Unless required by applicable law or agreed to in writing, software
9
- // distributed under the License is distributed on an "AS IS" BASIS,
10
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
- // See the License for the specific language governing permissions and
12
- // limitations under the License.
13
-
14
- package collections
15
-
16
- import (
17
- "fmt"
18
- "reflect"
19
- "time"
20
-
21
- "github.com/mitchellh/hashstructure"
22
- "github.com/pkg/errors"
23
- )
24
-
25
- var (
26
- zero reflect.Value
27
- errorType = reflect.TypeOf((*error)(nil)).Elem()
28
- timeType = reflect.TypeOf((*time.Time)(nil)).Elem()
29
- )
30
-
31
- func numberToFloat(v reflect.Value) (float64, error) {
32
- switch kind := v.Kind(); {
33
- case isFloat(kind):
34
- return v.Float(), nil
35
- case isInt(kind):
36
- return float64(v.Int()), nil
37
- case isUint(kind):
38
- return float64(v.Uint()), nil
39
- case kind == reflect.Interface:
40
- return numberToFloat(v.Elem())
41
- default:
42
- return 0, fmt.Errorf("invalid kind %s in numberToFloat", kind)
43
- }
44
- }
45
-
46
- // normalizes different numeric types if isNumber
47
- // or get the hash values if not Comparable (such as map or struct)
48
- // to make them comparable
49
- func normalize(v reflect.Value) interface{} {
50
- k := v.Kind()
51
-
52
- switch {
53
- case !v.Type().Comparable():
54
- h, err := hashstructure.Hash(v.Interface(), nil)
55
- if err != nil {
56
- panic(err)
57
- }
58
- return h
59
- case isNumber(k):
60
- f, err := numberToFloat(v)
61
- if err == nil {
62
- return f
63
- }
64
- }
65
- return v.Interface()
66
- }
67
-
68
- // collects identities from the slices in seqs into a set. Numeric values are normalized,
69
- // pointers unwrapped.
70
- func collectIdentities(seqs ...interface{}) (map[interface{}]bool, error) {
71
- seen := make(map[interface{}]bool)
72
- for _, seq := range seqs {
73
- v := reflect.ValueOf(seq)
74
- switch v.Kind() {
75
- case reflect.Array, reflect.Slice:
76
- for i := 0; i < v.Len(); i++ {
77
- ev, _ := indirectInterface(v.Index(i))
78
-
79
- if !ev.Type().Comparable() {
80
- return nil, errors.New("elements must be comparable")
81
- }
82
-
83
- seen[normalize(ev)] = true
84
- }
85
- default:
86
- return nil, fmt.Errorf("arguments must be slices or arrays")
87
- }
88
- }
89
-
90
- return seen, nil
91
- }
92
-
93
- // We have some different numeric and string types that we try to behave like
94
- // they were the same.
95
- func convertValue(v reflect.Value, to reflect.Type) (reflect.Value, error) {
96
- if v.Type().AssignableTo(to) {
97
- return v, nil
98
- }
99
- switch kind := to.Kind(); {
100
- case kind == reflect.String:
101
- s, err := toString(v)
102
- return reflect.ValueOf(s), err
103
- case isNumber(kind):
104
- return convertNumber(v, kind)
105
- default:
106
- return reflect.Value{}, errors.Errorf("%s is not assignable to %s", v.Type(), to)
107
- }
108
- }
109
-
110
- // There are potential overflows in this function, but the downconversion of
111
- // int64 etc. into int8 etc. is coming from the synthetic unit tests for Union etc.
112
- // TODO(bep) We should consider normalizing the slices to int64 etc.
113
- func convertNumber(v reflect.Value, to reflect.Kind) (reflect.Value, error) {
114
- var n reflect.Value
115
- if isFloat(to) {
116
- f, err := toFloat(v)
117
- if err != nil {
118
- return n, err
119
- }
120
- switch to {
121
- case reflect.Float32:
122
- n = reflect.ValueOf(float32(f))
123
- default:
124
- n = reflect.ValueOf(float64(f))
125
- }
126
- } else if isInt(to) {
127
- i, err := toInt(v)
128
- if err != nil {
129
- return n, err
130
- }
131
- switch to {
132
- case reflect.Int:
133
- n = reflect.ValueOf(int(i))
134
- case reflect.Int8:
135
- n = reflect.ValueOf(int8(i))
136
- case reflect.Int16:
137
- n = reflect.ValueOf(int16(i))
138
- case reflect.Int32:
139
- n = reflect.ValueOf(int32(i))
140
- case reflect.Int64:
141
- n = reflect.ValueOf(int64(i))
142
- }
143
- } else if isUint(to) {
144
- i, err := toUint(v)
145
- if err != nil {
146
- return n, err
147
- }
148
- switch to {
149
- case reflect.Uint:
150
- n = reflect.ValueOf(uint(i))
151
- case reflect.Uint8:
152
- n = reflect.ValueOf(uint8(i))
153
- case reflect.Uint16:
154
- n = reflect.ValueOf(uint16(i))
155
- case reflect.Uint32:
156
- n = reflect.ValueOf(uint32(i))
157
- case reflect.Uint64:
158
- n = reflect.ValueOf(uint64(i))
159
- }
160
-
161
- }
162
-
163
- if !n.IsValid() {
164
- return n, errors.New("invalid values")
165
- }
166
-
167
- return n, nil
168
- }
169
-
170
- func newSliceElement(items interface{}) interface{} {
171
- tp := reflect.TypeOf(items)
172
- if tp == nil {
173
- return nil
174
- }
175
- switch tp.Kind() {
176
- case reflect.Array, reflect.Slice:
177
- tp = tp.Elem()
178
- if tp.Kind() == reflect.Ptr {
179
- tp = tp.Elem()
180
- }
181
-
182
- return reflect.New(tp).Interface()
183
- }
184
- return nil
185
- }
186
-
187
- func isNumber(kind reflect.Kind) bool {
188
- return isInt(kind) || isUint(kind) || isFloat(kind)
189
- }
190
-
191
- func isInt(kind reflect.Kind) bool {
192
- switch kind {
193
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
194
- return true
195
- default:
196
- return false
197
- }
198
- }
199
-
200
- func isUint(kind reflect.Kind) bool {
201
- switch kind {
202
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
203
- return true
204
- default:
205
- return false
206
- }
207
- }
208
-
209
- func isFloat(kind reflect.Kind) bool {
210
- switch kind {
211
- case reflect.Float32, reflect.Float64:
212
- return true
213
- default:
214
- return false
215
- }
216
- }
@@ -1,183 +0,0 @@
1
- // Copyright 2017 The Hugo Authors. All rights reserved.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- // http://www.apache.org/licenses/LICENSE-2.0
7
- //
8
- // Unless required by applicable law or agreed to in writing, software
9
- // distributed under the License is distributed on an "AS IS" BASIS,
10
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
- // See the License for the specific language governing permissions and
12
- // limitations under the License.
13
-
14
- package collections
15
-
16
- import (
17
- "errors"
18
- "reflect"
19
- "sort"
20
- "strings"
21
-
22
- "hugo-renderer/tpl/compare"
23
-
24
- "github.com/gohugoio/hugo/common/maps"
25
- "github.com/spf13/cast"
26
- )
27
-
28
- var sortComp = compare.New(true)
29
-
30
- // Sort returns a sorted sequence.
31
- func (ns *Namespace) Sort(seq interface{}, args ...interface{}) (interface{}, error) {
32
- if seq == nil {
33
- return nil, errors.New("sequence must be provided")
34
- }
35
-
36
- seqv, isNil := indirect(reflect.ValueOf(seq))
37
- if isNil {
38
- return nil, errors.New("can't iterate over a nil value")
39
- }
40
-
41
- var sliceType reflect.Type
42
- switch seqv.Kind() {
43
- case reflect.Array, reflect.Slice:
44
- sliceType = seqv.Type()
45
- case reflect.Map:
46
- sliceType = reflect.SliceOf(seqv.Type().Elem())
47
- default:
48
- return nil, errors.New("can't sort " + reflect.ValueOf(seq).Type().String())
49
- }
50
-
51
- // Create a list of pairs that will be used to do the sort
52
- p := pairList{SortAsc: true, SliceType: sliceType}
53
- p.Pairs = make([]pair, seqv.Len())
54
-
55
- var sortByField string
56
- for i, l := range args {
57
- dStr, err := cast.ToStringE(l)
58
- switch {
59
- case i == 0 && err != nil:
60
- sortByField = ""
61
- case i == 0 && err == nil:
62
- sortByField = dStr
63
- case i == 1 && err == nil && dStr == "desc":
64
- p.SortAsc = false
65
- case i == 1:
66
- p.SortAsc = true
67
- }
68
- }
69
- path := strings.Split(strings.Trim(sortByField, "."), ".")
70
-
71
- switch seqv.Kind() {
72
- case reflect.Array, reflect.Slice:
73
- for i := 0; i < seqv.Len(); i++ {
74
- p.Pairs[i].Value = seqv.Index(i)
75
- if sortByField == "" || sortByField == "value" {
76
- p.Pairs[i].Key = p.Pairs[i].Value
77
- } else {
78
- v := p.Pairs[i].Value
79
- var err error
80
- for i, elemName := range path {
81
- v, err = evaluateSubElem(v, elemName)
82
- if err != nil {
83
- return nil, err
84
- }
85
- if !v.IsValid() {
86
- continue
87
- }
88
- // Special handling of lower cased maps.
89
- if params, ok := v.Interface().(maps.Params); ok {
90
- v = reflect.ValueOf(params.Get(path[i+1:]...))
91
- break
92
- }
93
- }
94
- p.Pairs[i].Key = v
95
- }
96
- }
97
-
98
- case reflect.Map:
99
- keys := seqv.MapKeys()
100
- for i := 0; i < seqv.Len(); i++ {
101
- p.Pairs[i].Value = seqv.MapIndex(keys[i])
102
-
103
- if sortByField == "" {
104
- p.Pairs[i].Key = keys[i]
105
- } else if sortByField == "value" {
106
- p.Pairs[i].Key = p.Pairs[i].Value
107
- } else {
108
- v := p.Pairs[i].Value
109
- var err error
110
- for i, elemName := range path {
111
- v, err = evaluateSubElem(v, elemName)
112
- if err != nil {
113
- return nil, err
114
- }
115
- if !v.IsValid() {
116
- continue
117
- }
118
- // Special handling of lower cased maps.
119
- if params, ok := v.Interface().(maps.Params); ok {
120
- v = reflect.ValueOf(params.Get(path[i+1:]...))
121
- break
122
- }
123
- }
124
- p.Pairs[i].Key = v
125
- }
126
- }
127
- }
128
- return p.sort(), nil
129
- }
130
-
131
- // Credit for pair sorting method goes to Andrew Gerrand
132
- // https://groups.google.com/forum/#!topic/golang-nuts/FT7cjmcL7gw
133
- // A data structure to hold a key/value pair.
134
- type pair struct {
135
- Key reflect.Value
136
- Value reflect.Value
137
- }
138
-
139
- // A slice of pairs that implements sort.Interface to sort by Value.
140
- type pairList struct {
141
- Pairs []pair
142
- SortAsc bool
143
- SliceType reflect.Type
144
- }
145
-
146
- func (p pairList) Swap(i, j int) { p.Pairs[i], p.Pairs[j] = p.Pairs[j], p.Pairs[i] }
147
- func (p pairList) Len() int { return len(p.Pairs) }
148
- func (p pairList) Less(i, j int) bool {
149
- iv := p.Pairs[i].Key
150
- jv := p.Pairs[j].Key
151
-
152
- if iv.IsValid() {
153
- if jv.IsValid() {
154
- // can only call Interface() on valid reflect Values
155
- return sortComp.Lt(iv.Interface(), jv.Interface())
156
- }
157
-
158
- // if j is invalid, test i against i's zero value
159
- return sortComp.Lt(iv.Interface(), reflect.Zero(iv.Type()))
160
- }
161
-
162
- if jv.IsValid() {
163
- // if i is invalid, test j against j's zero value
164
- return sortComp.Lt(reflect.Zero(jv.Type()), jv.Interface())
165
- }
166
-
167
- return false
168
- }
169
-
170
- // sorts a pairList and returns a slice of sorted values
171
- func (p pairList) sort() interface{} {
172
- if p.SortAsc {
173
- sort.Sort(p)
174
- } else {
175
- sort.Sort(sort.Reverse(p))
176
- }
177
- sorted := reflect.MakeSlice(p.SliceType, len(p.Pairs), len(p.Pairs))
178
- for i, v := range p.Pairs {
179
- sorted.Index(i).Set(v.Value)
180
- }
181
-
182
- return sorted.Interface()
183
- }
@@ -1,68 +0,0 @@
1
- // Copyright 2018 The Hugo Authors. All rights reserved.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- // http://www.apache.org/licenses/LICENSE-2.0
7
- //
8
- // Unless required by applicable law or agreed to in writing, software
9
- // distributed under the License is distributed on an "AS IS" BASIS,
10
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
- // See the License for the specific language governing permissions and
12
- // limitations under the License.
13
-
14
- package collections
15
-
16
- import (
17
- "fmt"
18
- "reflect"
19
-
20
- "github.com/pkg/errors"
21
- )
22
-
23
- // SymDiff returns the symmetric difference of s1 and s2.
24
- // Arguments must be either a slice or an array of comparable types.
25
- func (ns *Namespace) SymDiff(s2, s1 interface{}) (interface{}, error) {
26
- ids1, err := collectIdentities(s1)
27
- if err != nil {
28
- return nil, err
29
- }
30
- ids2, err := collectIdentities(s2)
31
- if err != nil {
32
- return nil, err
33
- }
34
-
35
- var slice reflect.Value
36
- var sliceElemType reflect.Type
37
-
38
- for i, s := range []interface{}{s1, s2} {
39
- v := reflect.ValueOf(s)
40
-
41
- switch v.Kind() {
42
- case reflect.Array, reflect.Slice:
43
- if i == 0 {
44
- sliceType := v.Type()
45
- sliceElemType = sliceType.Elem()
46
- slice = reflect.MakeSlice(sliceType, 0, 0)
47
- }
48
-
49
- for i := 0; i < v.Len(); i++ {
50
- ev, _ := indirectInterface(v.Index(i))
51
- key := normalize(ev)
52
-
53
- // Append if the key is not in their intersection.
54
- if ids1[key] != ids2[key] {
55
- v, err := convertValue(ev, sliceElemType)
56
- if err != nil {
57
- return nil, errors.WithMessage(err, "symdiff: failed to convert value")
58
- }
59
- slice = reflect.Append(slice, v)
60
- }
61
- }
62
- default:
63
- return nil, fmt.Errorf("arguments to symdiff must be slices or arrays")
64
- }
65
- }
66
-
67
- return slice.Interface(), nil
68
- }