diff options
author | Andreas Richter <richtera@users.noreply.github.com> | 2021-01-18 04:38:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-18 10:38:09 +0100 |
commit | 2c8b5d9165011c4b24b494e661ae60dfc7bb7d1b (patch) | |
tree | 1fccfe098c0ad5a85a030ba918914ea4191c658c /resources/resource_transformers/js | |
parent | 0004a733c85cee991a8a170e93cd69c326cc8f2f (diff) |
pipes: Add external source map support to js.Build and Babel
Fixes #8132
Diffstat (limited to 'resources/resource_transformers/js')
-rw-r--r-- | resources/resource_transformers/js/build.go | 30 | ||||
-rw-r--r-- | resources/resource_transformers/js/options.go | 2 | ||||
-rw-r--r-- | resources/resource_transformers/js/options_test.go | 18 |
3 files changed, 49 insertions, 1 deletions
diff --git a/resources/resource_transformers/js/build.go b/resources/resource_transformers/js/build.go index 5ff21cf02..0d70bdc33 100644 --- a/resources/resource_transformers/js/build.go +++ b/resources/resource_transformers/js/build.go @@ -18,6 +18,8 @@ import ( "fmt" "io/ioutil" "os" + "path" + "regexp" "strings" "github.com/spf13/afero" @@ -92,6 +94,14 @@ func (t *buildTransformation) Transform(ctx *resources.ResourceTransformationCtx return err } + if buildOptions.Sourcemap == api.SourceMapExternal && buildOptions.Outdir == "" { + buildOptions.Outdir, err = ioutil.TempDir(os.TempDir(), "compileOutput") + if err != nil { + return err + } + defer os.Remove(buildOptions.Outdir) + } + result := api.Build(buildOptions) if len(result.Errors) > 0 { @@ -145,7 +155,25 @@ func (t *buildTransformation) Transform(ctx *resources.ResourceTransformationCtx return errors[0] } - ctx.To.Write(result.OutputFiles[0].Contents) + if buildOptions.Sourcemap == api.SourceMapExternal { + content := string(result.OutputFiles[1].Contents) + symPath := path.Base(ctx.OutPath) + ".map" + re := regexp.MustCompile(`//# sourceMappingURL=.*\n?`) + content = re.ReplaceAllString(content, "//# sourceMappingURL="+symPath+"\n") + + if err = ctx.PublishSourceMap(string(result.OutputFiles[0].Contents)); err != nil { + return err + } + _, err := ctx.To.Write([]byte(content)) + if err != nil { + return err + } + } else { + _, err := ctx.To.Write(result.OutputFiles[0].Contents) + if err != nil { + return err + } + } return nil } diff --git a/resources/resource_transformers/js/options.go b/resources/resource_transformers/js/options.go index 75daa0cad..5236fe126 100644 --- a/resources/resource_transformers/js/options.go +++ b/resources/resource_transformers/js/options.go @@ -338,6 +338,8 @@ func toBuildOptions(opts Options) (buildOptions api.BuildOptions, err error) { switch opts.SourceMap { case "inline": sourceMap = api.SourceMapInline + case "external": + sourceMap = api.SourceMapExternal case "": sourceMap = api.SourceMapNone default: diff --git a/resources/resource_transformers/js/options_test.go b/resources/resource_transformers/js/options_test.go index f07ccc26b..f425c3e75 100644 --- a/resources/resource_transformers/js/options_test.go +++ b/resources/resource_transformers/js/options_test.go @@ -109,4 +109,22 @@ func TestToBuildOptions(t *testing.T) { Loader: api.LoaderJS, }, }) + + opts, err = toBuildOptions(Options{ + Target: "es2018", Format: "cjs", Minify: true, mediaType: media.JavascriptType, + SourceMap: "external", + }) + c.Assert(err, qt.IsNil) + c.Assert(opts, qt.DeepEquals, api.BuildOptions{ + Bundle: true, + Target: api.ES2018, + Format: api.FormatCommonJS, + MinifyIdentifiers: true, + MinifySyntax: true, + MinifyWhitespace: true, + Sourcemap: api.SourceMapExternal, + Stdin: &api.StdinOptions{ + Loader: api.LoaderJS, + }, + }) } |