Skip to content

Commit e4bc489

Browse files
committed
feat: added support for import statement (for in-memory script)
1 parent 1a7f282 commit e4bc489

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

dependencies.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"regexp"
88
"sort"
9+
"strings"
910
)
1011

1112
//nolint:gochecknoglobals
@@ -15,8 +16,13 @@ var (
1516

1617
reName = regexp.MustCompile(srcName)
1718

18-
reRequire = regexp.MustCompile(`require\("` + srcName + `"\)`)
19-
idxRequireName = reRequire.SubexpIndex("name")
19+
srcModule = strings.ReplaceAll(srcName, "name", "module")
20+
srcRequire = `require\("` + srcName + `"\)`
21+
srcImport = `import (.* from )?["']` + srcModule + `["'](;|$)`
22+
23+
reRequireOrImport = regexp.MustCompile("(?m:" + srcRequire + "|" + srcImport + ")")
24+
idxRequireOrImportName = reRequireOrImport.SubexpIndex("name")
25+
idxRequireOrImportModule = reRequireOrImport.SubexpIndex("module")
2026

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

265-
for _, match := range reRequire.FindAllSubmatch(text, -1) {
266-
if extension := string(match[idxRequireName]); len(extension) != 0 {
271+
for _, match := range reRequireOrImport.FindAllSubmatch(text, -1) {
272+
extension := string(match[idxRequireOrImportName])
273+
if len(extension) == 0 {
274+
extension = string(match[idxRequireOrImportModule])
275+
}
276+
277+
if len(extension) != 0 {
267278
_ = deps.update(&Dependency{Name: extension}) // no chance for conflicting
268279
}
269280
}

dependencies_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ func Test_Dependencies_UnmarshalJS(t *testing.T) {
155155
err := deps.UnmarshalJS([]byte(`"use k6>0.50";
156156
"use k6 with k6/x/bar>v0.2.0";
157157
"use k6 with k6/x/foo>v0.1.0";
158+
import "k6/x/dumber";
159+
import hello from "k6/x/hello"
158160
let dumb = require("k6/x/dumb");
159161
`))
160162
require.NoError(t, err)
@@ -163,6 +165,8 @@ let dumb = require("k6/x/dumb");
163165
require.Equal(t, "k6/x/bar>v0.2.0", deps["k6/x/bar"].String())
164166
require.Equal(t, "k6/x/foo>v0.1.0", deps["k6/x/foo"].String())
165167
require.Equal(t, "k6/x/dumb*", deps["k6/x/dumb"].String())
168+
require.Equal(t, "k6/x/dumber*", deps["k6/x/dumber"].String())
169+
require.Equal(t, "k6/x/hello*", deps["k6/x/hello"].String())
166170

167171
err = deps.UnmarshalJS([]byte(`"use k6 with k6/x/foo>v0.1.0";
168172
"use k6 with k6/x/dumb>v0.4.0";
@@ -183,3 +187,25 @@ let dumb = require("k6/x/dumb");
183187
`))
184188
require.Error(t, err)
185189
}
190+
191+
func Test_Dependencies_UnmarshalJS_real_script(t *testing.T) {
192+
t.Parallel()
193+
194+
deps := make(k6deps.Dependencies)
195+
196+
err := deps.UnmarshalJS([]byte(`
197+
import exec from 'k6/x/exec';
198+
import faker from "k6/x/faker"
199+
import "k6/x/sql"
200+
201+
export default function () {
202+
console.log(exec.command("date"));
203+
}
204+
`))
205+
require.NoError(t, err)
206+
207+
require.Len(t, deps, 3)
208+
require.Equal(t, "k6/x/exec*", deps["k6/x/exec"].String())
209+
require.Equal(t, "k6/x/faker*", deps["k6/x/faker"].String())
210+
require.Equal(t, "k6/x/sql*", deps["k6/x/sql"].String())
211+
}

releases/v0.1.5.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
k6deps `v0.1.5` is here 🎉!
2+
3+
This release includes:
4+
5+
- In addition to the `require()` function, `Analyze()` also handles the `import` statement for the script in the memory.
6+
(it has handled the script loaded by `Analyze()` so far)

0 commit comments

Comments
 (0)