Skip to content

Commit 4e960f3

Browse files
committed
feat: add glob customization on markdown-patterns
1 parent b7e8f38 commit 4e960f3

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

packages/markdown-patterns/src/markdown-patterns.engine.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,29 @@ describe("PatternEngine", () => {
131131
});
132132
});
133133

134+
describe("setGlob", () => {
135+
it("returns a new instance with custom glob pattern", () => {
136+
const engine1 = MarkdownPatternsEngine.cwd(testPatternsDir);
137+
const engine2 = engine1.setGlob("simple/**/*.md");
138+
139+
assert.notEqual(engine1, engine2);
140+
});
141+
142+
it("filters patterns using custom glob pattern", async () => {
143+
const engine = MarkdownPatternsEngine.cwd<TestInput>(testPatternsDir)
144+
.setQueryEngine(createTestQueryEngine())
145+
.setGlob("simple/**/*.md");
146+
147+
const patterns = await engine.getPatterns();
148+
const patternNames = patterns.map((p) => p.$name);
149+
150+
// Should only find patterns from the simple directory
151+
assert.ok(patternNames.includes("simple/basic"));
152+
assert.ok(!patternNames.some((name) => name.startsWith("nested/")));
153+
assert.ok(!patternNames.some((name) => name.startsWith("complex/")));
154+
});
155+
});
156+
134157
describe("getPatterns", () => {
135158
it("loads patterns from markdown files", async () => {
136159
const engine = MarkdownPatternsEngine.cwd<TestInput>(

packages/markdown-patterns/src/markdown-patterns.engine.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export class MarkdownPatternsEngine<
1818
private _configSchema;
1919
private _cwd;
2020
private _queryEngine;
21+
private _glob: string = "**/*.md";
2122
private _patternsPromise: Promise<Pattern<CONFIG_SCHEMA>[]> | null = null;
2223
private _patternsMapPromise: Promise<
2324
Map<string, Pattern<CONFIG_SCHEMA>>
@@ -30,10 +31,12 @@ export class MarkdownPatternsEngine<
3031
cwd: FsDir,
3132
queryEngine: QueryEngine<any, INPUT>,
3233
configSchema: CONFIG_SCHEMA,
34+
glob: string = "**/*.md",
3335
) {
3436
this._cwd = cwd;
3537
this._queryEngine = queryEngine;
3638
this._configSchema = configSchema;
39+
this._glob = glob;
3740
}
3841

3942
public static cwd<INPUT = unknown>(cwd: FsDir) {
@@ -54,7 +57,7 @@ export class MarkdownPatternsEngine<
5457
const newSchema = this._configSchema.omit({ query: true }).extend({
5558
query: queryEngine.schema,
5659
}) as CONFIG_SCHEMA;
57-
return new MarkdownPatternsEngine(this._cwd, queryEngine, newSchema);
60+
return new MarkdownPatternsEngine(this._cwd, queryEngine, newSchema, this._glob);
5861
}
5962

6063
public setConfigSchema<NEW_CONFIG_SCHEMA extends z.ZodObject<any>>(
@@ -68,11 +71,16 @@ export class MarkdownPatternsEngine<
6871
}) as NEW_CONFIG_SCHEMA extends z.ZodObject<infer T>
6972
? z.ZodObject<T & { query: z.ZodType<unknown> }>
7073
: never,
74+
this._glob,
7175
);
7276
}
7377

78+
public setGlob(glob: string) {
79+
return new MarkdownPatternsEngine(this._cwd, this._queryEngine, this._configSchema, glob);
80+
}
81+
7482
public async refreshPatterns() {
75-
this._patternsPromise = getPatterns(this._cwd, this.schema);
83+
this._patternsPromise = getPatterns(this._cwd, this.schema, this._glob);
7684
this._patternsMapPromise = this._patternsPromise.then(
7785
(patterns) =>
7886
new Map(patterns.map((pattern) => [pattern.$name, pattern])),
@@ -82,7 +90,7 @@ export class MarkdownPatternsEngine<
8290

8391
public async getPatterns() {
8492
if (!this._patternsPromise) {
85-
this._patternsPromise = getPatterns(this._cwd, this.schema);
93+
this._patternsPromise = getPatterns(this._cwd, this.schema, this._glob);
8694
}
8795
return this._patternsPromise;
8896
}

packages/markdown-patterns/src/markdown-patterns.lib.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,10 @@ export function getPatternName(patternDir: FsDir, patternFile: FsFile) {
3737
export async function getPatterns<CONFIG_SCHEMA extends z.ZodObject<any>>(
3838
cwd: FsDir,
3939
configSchema: CONFIG_SCHEMA,
40+
glob: string = "**/*.md",
4041
) {
4142
const patternFiles = await cwd
42-
.glob("**/*.md")
43+
.glob(glob)
4344
// Sort by path
4445
.then((files) =>
4546
files.sort((a, b) =>

0 commit comments

Comments
 (0)