apple/pkl · error · InvalidGlobPatternException
invalidGlobNestedSubpattern
invalidGlobNestedSubpattern
Error message
invalidGlobNestedSubpattern
What it means
Glob patterns support a single level of `{a,b}` alternation groups. toRegexString throws InvalidGlobPatternException with code invalidGlobNestedSubpattern when a `{` appears while already inside a group, since nested subpatterns like `{a,{b,c}}` are unsupported.
Source
Thrown at pkl-core/src/main/java/org/pkl/core/util/GlobResolver.java:161
var pattern = patterns.get(globPattern);
if (pattern == null) {
pattern = Pattern.compile(toRegexString(globPattern));
patterns.put(globPattern, pattern);
}
return pattern;
}
/** Converts a glob pattern to an equivalent regular expression pattern */
public static String toRegexString(String globPattern) throws InvalidGlobPatternException {
var sb = new StringBuilder("^");
var inGroup = false;
for (var i = 0; i < globPattern.length(); i++) {
var current = globPattern.charAt(i);
switch (current) {
case '{' -> {
if (inGroup) {
throw new InvalidGlobPatternException(
ErrorMessages.create("invalidGlobNestedSubpattern"));
}
inGroup = true;
sb.append("(?:(?:");
}
case '}' -> {
if (inGroup) {
inGroup = false;
sb.append("))");
} else {
sb.append('}');
}
}
case ',' -> {
if (inGroup) {
sb.append(")|(?:");
} else {
sb.append(',');View on GitHub (pinned to f3efcbfc9b)
Solutions
- Flatten the nested groups into a single level: `{a,b,c}`.
- Expand the nested combinations manually into multiple alternative globs.
- If generating programmatically, compute the cross-product of the inner groups before building the pattern.
Example fix
// before
glob = "src/{a,{b,c}}.pkl"
// after
glob = "src/{a,b,c}.pkl" Defensive patterns
Strategy: validation
Validate before calling
boolean noNestedBraces(String glob) {
int depth = 0;
for (char c : glob.toCharArray()) {
if (c == '{') { if (++depth > 1) return false; }
else if (c == '}') depth--;
}
return depth == 0;
}
Try / catch
try { return GlobResolver.toRegexPattern(glob); } catch (InvalidGlobPatternException e) { throw new IllegalArgumentException("Nested glob groups unsupported: " + glob, e); }
Prevention
- Flatten nested brace groups before building patterns.
- Expand cross-products programmatically when generating globs.
- Document single-level brace support.
When it happens
Trigger: Passing a glob containing nested braces, e.g. `src/{a,{b,c}}.pkl` or `{{x,y},z}`, to GlobResolver.toRegexString/toRegexPattern.
Common situations: Patterns copied from tools that support brace nesting (bash supports it); generating patterns programmatically by combining partial globs that each contain braces.
Related errors
- invalidGlobUnsupportedFeature
- invalidGlobPattern
- invalidGlobMissingCharacterClassTerminator
- invalidGlobInvalidCharacterInCharacterClass
- invalidGlobInvalidTerminatingCharacter
AI-assisted analysis of apple/pkl@f3efcbfc9b (2026-09-08).
Data as JSON: /api/errors/bed748cface09421.
Report an issue: GitHub.