Skip to content

Commit

Permalink
Merge pull request #24 from grafana/23-import-support
Browse files Browse the repository at this point in the history
feat: added support for import statement (for in-memory script)
  • Loading branch information
szkiba authored Sep 6, 2024
2 parents 1a7f282 + e4bc489 commit 00de6a4
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
19 changes: 15 additions & 4 deletions dependencies.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"io"
"regexp"
"sort"
"strings"
)

//nolint:gochecknoglobals
Expand All @@ -15,8 +16,13 @@ var (

reName = regexp.MustCompile(srcName)

reRequire = regexp.MustCompile(`require\("` + srcName + `"\)`)
idxRequireName = reRequire.SubexpIndex("name")
srcModule = strings.ReplaceAll(srcName, "name", "module")
srcRequire = `require\("` + srcName + `"\)`
srcImport = `import (.* from )?["']` + srcModule + `["'](;|$)`

reRequireOrImport = regexp.MustCompile("(?m:" + srcRequire + "|" + srcImport + ")")
idxRequireOrImportName = reRequireOrImport.SubexpIndex("name")
idxRequireOrImportModule = reRequireOrImport.SubexpIndex("module")

reUseK6 = regexp.MustCompile(
`"use +k6(( with ` + srcName + `( *(?P<constraints>` + srcConstraint + `))?)|(( *(?P<k6Constraints>` + srcConstraint + `)?)))"`) //nolint:lll
Expand Down Expand Up @@ -262,8 +268,13 @@ func (deps Dependencies) marshalJS(w io.Writer) error {
func (deps *Dependencies) UnmarshalJS(text []byte) error {
*deps = make(Dependencies)

for _, match := range reRequire.FindAllSubmatch(text, -1) {
if extension := string(match[idxRequireName]); len(extension) != 0 {
for _, match := range reRequireOrImport.FindAllSubmatch(text, -1) {
extension := string(match[idxRequireOrImportName])
if len(extension) == 0 {
extension = string(match[idxRequireOrImportModule])
}

if len(extension) != 0 {
_ = deps.update(&Dependency{Name: extension}) // no chance for conflicting
}
}
Expand Down
26 changes: 26 additions & 0 deletions dependencies_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ func Test_Dependencies_UnmarshalJS(t *testing.T) {
err := deps.UnmarshalJS([]byte(`"use k6>0.50";
"use k6 with k6/x/bar>v0.2.0";
"use k6 with k6/x/foo>v0.1.0";
import "k6/x/dumber";
import hello from "k6/x/hello"
let dumb = require("k6/x/dumb");
`))
require.NoError(t, err)
Expand All @@ -163,6 +165,8 @@ let dumb = require("k6/x/dumb");
require.Equal(t, "k6/x/bar>v0.2.0", deps["k6/x/bar"].String())
require.Equal(t, "k6/x/foo>v0.1.0", deps["k6/x/foo"].String())
require.Equal(t, "k6/x/dumb*", deps["k6/x/dumb"].String())
require.Equal(t, "k6/x/dumber*", deps["k6/x/dumber"].String())
require.Equal(t, "k6/x/hello*", deps["k6/x/hello"].String())

err = deps.UnmarshalJS([]byte(`"use k6 with k6/x/foo>v0.1.0";
"use k6 with k6/x/dumb>v0.4.0";
Expand All @@ -183,3 +187,25 @@ let dumb = require("k6/x/dumb");
`))
require.Error(t, err)
}

func Test_Dependencies_UnmarshalJS_real_script(t *testing.T) {
t.Parallel()

deps := make(k6deps.Dependencies)

err := deps.UnmarshalJS([]byte(`
import exec from 'k6/x/exec';
import faker from "k6/x/faker"
import "k6/x/sql"
export default function () {
console.log(exec.command("date"));
}
`))
require.NoError(t, err)

require.Len(t, deps, 3)
require.Equal(t, "k6/x/exec*", deps["k6/x/exec"].String())
require.Equal(t, "k6/x/faker*", deps["k6/x/faker"].String())
require.Equal(t, "k6/x/sql*", deps["k6/x/sql"].String())
}
6 changes: 6 additions & 0 deletions releases/v0.1.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
k6deps `v0.1.5` is here 🎉!

This release includes:

- In addition to the `require()` function, `Analyze()` also handles the `import` statement for the script in the memory.
(it has handled the script loaded by `Analyze()` so far)

0 comments on commit 00de6a4

Please sign in to comment.