Skip to content

Commit

Permalink
Fixed nextjs pages directives to seperate page rule
Browse files Browse the repository at this point in the history
into it's own rule.
  • Loading branch information
ColinHeathman committed Oct 10, 2024
1 parent 063a282 commit 42b3ea5
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 12 deletions.
11 changes: 11 additions & 0 deletions gazelle/configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ type JsConfig struct {
Fix bool
JSRoot string
NextPagesRoot string
NextPagesRootName string
WebAssetSuffixes map[string]bool
Quiet bool
Verbose bool
Expand Down Expand Up @@ -116,6 +117,7 @@ func NewJsConfig() *JsConfig {
Fix: false,
JSRoot: "/",
NextPagesRoot: "",
NextPagesRootName: "next_pages",
WebAssetSuffixes: make(map[string]bool),
Quiet: false,
Verbose: false,
Expand Down Expand Up @@ -170,6 +172,7 @@ func (parent *JsConfig) NewChild() *JsConfig {
child.CollectedAssets = parent.CollectedAssets // Reinitialized on change to JSRoot

child.NextPagesRoot = parent.NextPagesRoot
child.NextPagesRootName = parent.NextPagesRootName
if parent.CollectPages { // If the parent is collecting pages, the child should collect page files
child.CollectPages = false
child.CollectPageFiles = true
Expand Down Expand Up @@ -246,6 +249,7 @@ func (*JS) KnownDirectives() []string {
"js_extension",
"js_root",
"js_nextjs_pages_root",
"js_nextjs_pages_root_name",
"js_lookup_types",
"js_fix",
"js_package_file",
Expand Down Expand Up @@ -401,6 +405,13 @@ func (*JS) Configure(c *config.Config, rel string, f *rule.File) {
jsConfig.CollectPageFiles = false
}

case "js_nextjs_pages_root_name":
if directive.Value == "" {
jsConfig.NextPagesRootName = "pages"
} else {
jsConfig.NextPagesRootName = directive.Value
}

case "js_collect_barrels":
jsConfig.CollectBarrels = readBoolDirective(directive)

Expand Down
15 changes: 8 additions & 7 deletions gazelle/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,11 +246,9 @@ func (lang *JS) GenerateRules(args language.GenerateArgs) language.GenerateResul
generatedRules = append(generatedRules, generatedAWARules...)
generatedImports = append(generatedImports, generatedAWAImports...)

generatedTSRules, generatedTSImports := lang.genEmptyPageRule(
generatedTSRules, generatedTSImports := lang.genPageRule(
args,
jsConfig,
pkgName,
append(sources.tsSources, sources.jsSources...),
)
generatedRules = append(generatedRules, generatedTSRules...)
generatedImports = append(generatedImports, generatedTSImports...)
Expand Down Expand Up @@ -542,7 +540,7 @@ func (lang *JS) genRules(args language.GenerateArgs, jsConfig *JsConfig, isBarre
imports: imports,
}, jsConfig)

if jsConfig.CollectPageFiles {
if jsConfig.CollectPages || jsConfig.CollectPageFiles {
// record this rule as a page
fqName := fmt.Sprintf("//%s:%s", path.Join(args.Rel), name)
jsConfig.CollectedPages[fqName] = true
Expand Down Expand Up @@ -843,15 +841,18 @@ func (lang *JS) genAllAssets(args language.GenerateArgs, isJSRoot bool, jsConfig
return generatedRules, generatedImports
}

func (lang *JS) genEmptyPageRule(args language.GenerateArgs, jsConfig *JsConfig, pkgName string, sources []string) ([]*rule.Rule, []interface{}) {
func (lang *JS) genPageRule(args language.GenerateArgs, jsConfig *JsConfig) ([]*rule.Rule, []interface{}) {
generatedRules := make([]*rule.Rule, 0)
generatedImports := make([]interface{}, 0)

if len(sources) == 0 && jsConfig.CollectPages {
if jsConfig.CollectPages {

// Add an empty `js_library` rule. This will be given `deps` later in resolve.go
r := rule.NewRule(getKind(args.Config, "js_library"), pkgName)
r := rule.NewRule(getKind(args.Config, "js_library"), jsConfig.NextPagesRootName)

if len(jsConfig.Visibility.Labels) > 0 {
r.SetAttr("visibility", jsConfig.Visibility.Labels)
}
generatedRules = append(generatedRules, r)
generatedImports = append(generatedImports, &noImports)
}
Expand Down
11 changes: 8 additions & 3 deletions gazelle/resolve.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func (lang *JS) Imports(c *config.Config, r *rule.Rule, f *rule.File) []resolve.
}

// Any subfolders could be used to depend on this rule
folderImports := jsConfig.CollectAll && (r.Kind() == getKind(c, "ts_project") || r.Kind() == getKind(c, "js_library"))
folderImports := (jsConfig.CollectAll || jsConfig.CollectPageFiles) && (r.Kind() == getKind(c, "ts_project") || r.Kind() == getKind(c, "js_library"))
if folderImports {
base := filepath.Dir(f.Path)
subDirectories := make(map[string]bool)
Expand Down Expand Up @@ -283,9 +283,14 @@ func (lang *JS) Resolve(c *config.Config, ix *resolve.RuleIndex, rc *repo.Remote
}

// Add in page dependencies if they exist
if jsConfig.CollectPages && len(jsConfig.CollectedPages) > 0 {
if jsConfig.CollectPages && len(jsConfig.CollectedPages) > 0 && r.Name() == jsConfig.NextPagesRootName {
for fqName := range jsConfig.CollectedPages {
depSet[fqName] = true
lbl, err := label.Parse(fqName)
if err != nil {
log.Fatal(Err("failed to parse CollectedPages label: %v", err))
}
lbl.Repo = from.Repo // needed for .Rel(...)
depSet[lbl.Rel(from.Repo, from.Pkg).String()] = true
}
}

Expand Down
10 changes: 9 additions & 1 deletion tests/collect_pages/src/pages/BUILD.out
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")
load("@aspect_rules_ts//ts:defs.bzl", "ts_project")

# gazelle:js_nextjs_pages_root
Expand All @@ -8,5 +9,12 @@ ts_project(
"404.ts",
"index.ts",
],
deps = ["//src/pages/my_page"],
)

js_library(
name = "next_pages",
deps = [
":pages",
"//src/pages/my_page",
],
)
1 change: 1 addition & 0 deletions tests/collect_pages/src/pages2/BUILD.in
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# gazelle:js_nextjs_pages_root
# gazelle:js_nextjs_pages_root_name next_pages2
3 changes: 2 additions & 1 deletion tests/collect_pages/src/pages2/BUILD.out
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")

# gazelle:js_nextjs_pages_root
# gazelle:js_nextjs_pages_root_name next_pages2

js_library(
name = "pages2",
name = "next_pages2",
deps = ["//src/pages2/my_page"],
)

0 comments on commit 42b3ea5

Please sign in to comment.