Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tpl
diff options
context:
space:
mode:
authorRemko Tronçon <remko@el-tramo.be>2020-07-02 19:16:32 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-07-13 11:56:23 +0300
commit2fc33807077cd25bf91f2298bf1a8ace126881a7 (patch)
tree13130242231111bde274b4887c427b9827347a95 /tpl
parentf1916f114b288a8e8598bbcbeeba95fbcea6afb3 (diff)
Add js.Build asset bundling
Fixes #7321
Diffstat (limited to 'tpl')
-rw-r--r--tpl/js/init.go36
-rw-r--r--tpl/js/js.go90
-rw-r--r--tpl/tplimpl/template_funcs.go1
3 files changed, 127 insertions, 0 deletions
diff --git a/tpl/js/init.go b/tpl/js/init.go
new file mode 100644
index 000000000..0af10bb10
--- /dev/null
+++ b/tpl/js/init.go
@@ -0,0 +1,36 @@
+// Copyright 2020 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package js
+
+import (
+ "github.com/gohugoio/hugo/deps"
+ "github.com/gohugoio/hugo/tpl/internal"
+)
+
+const name = "js"
+
+func init() {
+ f := func(d *deps.Deps) *internal.TemplateFuncsNamespace {
+ ctx := New(d)
+
+ ns := &internal.TemplateFuncsNamespace{
+ Name: name,
+ Context: func(args ...interface{}) interface{} { return ctx },
+ }
+
+ return ns
+ }
+
+ internal.AddTemplateFuncsNamespace(f)
+}
diff --git a/tpl/js/js.go b/tpl/js/js.go
new file mode 100644
index 000000000..d8ba35a76
--- /dev/null
+++ b/tpl/js/js.go
@@ -0,0 +1,90 @@
+// Copyright 2020 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package js provides functions for building JavaScript resources
+package js
+
+import (
+ "errors"
+ "fmt"
+
+ "github.com/gohugoio/hugo/common/maps"
+ "github.com/gohugoio/hugo/deps"
+ "github.com/gohugoio/hugo/resources"
+ "github.com/gohugoio/hugo/resources/resource"
+ "github.com/gohugoio/hugo/resources/resource_transformers/js"
+ _errors "github.com/pkg/errors"
+)
+
+// New returns a new instance of the js-namespaced template functions.
+func New(deps *deps.Deps) *Namespace {
+ return &Namespace{
+ client: js.New(deps.BaseFs.Assets, deps.ResourceSpec),
+ }
+}
+
+// Namespace provides template functions for the "js" namespace.
+type Namespace struct {
+ deps *deps.Deps
+ client *js.Client
+}
+
+// Build processes the given Resource with ESBuild.
+func (ns *Namespace) Build(args ...interface{}) (resource.Resource, error) {
+ r, m, err := ns.resolveArgs(args)
+ if err != nil {
+ return nil, err
+ }
+ var options js.Options
+ if m != nil {
+ options, err = js.DecodeOptions(m)
+
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ return ns.client.Process(r, options)
+
+}
+
+// This roundabout way of doing it is needed to get both pipeline behaviour and options as arguments.
+// This is a copy of tpl/resources/resolveArgs
+func (ns *Namespace) resolveArgs(args []interface{}) (resources.ResourceTransformer, map[string]interface{}, error) {
+ if len(args) == 0 {
+ return nil, nil, errors.New("no Resource provided in transformation")
+ }
+
+ if len(args) == 1 {
+ r, ok := args[0].(resources.ResourceTransformer)
+ if !ok {
+ return nil, nil, fmt.Errorf("type %T not supported in Resource transformations", args[0])
+ }
+ return r, nil, nil
+ }
+
+ r, ok := args[1].(resources.ResourceTransformer)
+ if !ok {
+ if _, ok := args[1].(map[string]interface{}); !ok {
+ return nil, nil, fmt.Errorf("no Resource provided in transformation")
+ }
+ return nil, nil, fmt.Errorf("type %T not supported in Resource transformations", args[0])
+ }
+
+ m, err := maps.ToStringMapE(args[0])
+ if err != nil {
+ return nil, nil, _errors.Wrap(err, "invalid options type")
+ }
+
+ return r, m, nil
+}
diff --git a/tpl/tplimpl/template_funcs.go b/tpl/tplimpl/template_funcs.go
index 9141de3f1..a688abb77 100644
--- a/tpl/tplimpl/template_funcs.go
+++ b/tpl/tplimpl/template_funcs.go
@@ -42,6 +42,7 @@ import (
_ "github.com/gohugoio/hugo/tpl/hugo"
_ "github.com/gohugoio/hugo/tpl/images"
_ "github.com/gohugoio/hugo/tpl/inflect"
+ _ "github.com/gohugoio/hugo/tpl/js"
_ "github.com/gohugoio/hugo/tpl/lang"
_ "github.com/gohugoio/hugo/tpl/math"
_ "github.com/gohugoio/hugo/tpl/openapi/openapi3"