@kernlang/cli 3.1.7 → 3.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,184 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
2
+ import { basename, resolve } from 'path';
3
+ import { hasFlag, parseAndSurface, parseFlag } from '../shared.js';
4
+ // ── Helpers ─────────────────────────────────────────────────────────────
5
+ function getProps(node) {
6
+ return node.props || {};
7
+ }
8
+ function str(v) {
9
+ return typeof v === 'string' ? v : '';
10
+ }
11
+ function getChildren(node, type) {
12
+ return (node.children || []).filter((c) => c.type === type);
13
+ }
14
+ function _getFirstChild(node, type) {
15
+ return (node.children || []).find((c) => c.type === type);
16
+ }
17
+ // ── Guard violation payloads ────────────────────────────────────────────
18
+ function guardViolationPayloads(guardKind, paramName) {
19
+ switch (guardKind) {
20
+ case 'pathContainment':
21
+ return [
22
+ { description: `rejects path traversal on ${paramName}`, value: `"../../../etc/passwd"` },
23
+ { description: `rejects absolute path on ${paramName}`, value: `"/etc/shadow"` },
24
+ ];
25
+ case 'sanitize':
26
+ return [
27
+ { description: `sanitizes dangerous input on ${paramName}`, value: `"<script>alert(1)</script>"` },
28
+ { description: `sanitizes shell metacharacters on ${paramName}`, value: `"; rm -rf /"` },
29
+ ];
30
+ case 'validate':
31
+ return [{ description: `rejects out-of-range value on ${paramName}`, value: `-999` }];
32
+ case 'rateLimit':
33
+ return []; // Rate limiting is hard to unit test
34
+ case 'auth':
35
+ return []; // Auth tests need env setup
36
+ default:
37
+ return [];
38
+ }
39
+ }
40
+ // ── Test generator ──────────────────────────────────────────────────────
41
+ function generateTestFile(ast, sourceFile) {
42
+ const mcpNode = ast.type === 'mcp' ? ast : (ast.children || []).find((c) => c.type === 'mcp');
43
+ if (!mcpNode) {
44
+ return `// No MCP server found in ${sourceFile}\n`;
45
+ }
46
+ const serverName = str(getProps(mcpNode).name) || 'MCPServer';
47
+ const tools = getChildren(mcpNode, 'tool');
48
+ const resources = getChildren(mcpNode, 'resource');
49
+ const lines = [
50
+ `/**`,
51
+ ` * Generated tests for ${serverName} MCP server`,
52
+ ` * Source: ${sourceFile}`,
53
+ ` *`,
54
+ ` * Run: npx jest ${basename(sourceFile, '.kern')}.test.ts`,
55
+ ` */`,
56
+ ``,
57
+ `import { describe, it, expect } from '@jest/globals';`,
58
+ ``,
59
+ ];
60
+ // Tool tests
61
+ for (const tool of tools) {
62
+ const toolName = str(getProps(tool).name) || 'unknown';
63
+ const params = getChildren(tool, 'param');
64
+ const guards = getChildren(tool, 'guard');
65
+ lines.push(`describe('tool: ${toolName}', () => {`);
66
+ // Happy path test
67
+ const happyArgs = [];
68
+ for (const param of params) {
69
+ const pp = getProps(param);
70
+ const name = str(pp.name) || 'input';
71
+ const type = str(pp.type) || 'string';
72
+ const defaultVal = str(pp.default);
73
+ let sampleValue;
74
+ if (defaultVal) {
75
+ sampleValue = JSON.stringify(defaultVal);
76
+ }
77
+ else if (type === 'number' || type === 'int' || type === 'float') {
78
+ sampleValue = '42';
79
+ }
80
+ else if (type === 'boolean' || type === 'bool') {
81
+ sampleValue = 'true';
82
+ }
83
+ else {
84
+ sampleValue = `"test-${name}"`;
85
+ }
86
+ happyArgs.push(` ${name}: ${sampleValue},`);
87
+ }
88
+ lines.push(` it('accepts valid parameters', () => {`);
89
+ lines.push(` const params = {`);
90
+ lines.push(...happyArgs);
91
+ lines.push(` };`);
92
+ lines.push(` // Validate params match expected schema`);
93
+ for (const param of params) {
94
+ const pp = getProps(param);
95
+ const name = str(pp.name);
96
+ const required = str(pp.required) !== 'false' && !pp.default;
97
+ if (required && name) {
98
+ lines.push(` expect(params.${name}).toBeDefined();`);
99
+ }
100
+ }
101
+ lines.push(` });`);
102
+ lines.push(``);
103
+ // Required param tests
104
+ for (const param of params) {
105
+ const pp = getProps(param);
106
+ const name = str(pp.name);
107
+ const required = str(pp.required) !== 'false' && !pp.default;
108
+ if (required && name) {
109
+ lines.push(` it('requires param: ${name}', () => {`);
110
+ lines.push(` const params: Record<string, unknown> = {};`);
111
+ lines.push(` expect(params.${name}).toBeUndefined();`);
112
+ lines.push(` // Handler should reject missing required param`);
113
+ lines.push(` });`);
114
+ lines.push(``);
115
+ }
116
+ }
117
+ // Guard violation tests
118
+ for (const guard of guards) {
119
+ const gp = getProps(guard);
120
+ const kind = str(gp.name) || str(gp.kind) || str(gp.type);
121
+ const target = str(gp.param) || str(gp.target) || str(gp.field);
122
+ const violations = guardViolationPayloads(kind, target);
123
+ for (const violation of violations) {
124
+ lines.push(` it('${violation.description}', () => {`);
125
+ lines.push(` const maliciousInput = ${violation.value};`);
126
+ lines.push(` // Guard '${kind}' on '${target}' should block this input`);
127
+ lines.push(` expect(typeof maliciousInput).toBeDefined();`);
128
+ lines.push(` // TODO: Wire up actual tool handler invocation to verify guard blocks`);
129
+ lines.push(` });`);
130
+ lines.push(``);
131
+ }
132
+ }
133
+ lines.push(`});`);
134
+ lines.push(``);
135
+ }
136
+ // Resource tests
137
+ for (const resource of resources) {
138
+ const name = str(getProps(resource).name) || 'unknown';
139
+ const uri = str(getProps(resource).uri) || 'unknown://';
140
+ lines.push(`describe('resource: ${name}', () => {`);
141
+ lines.push(` it('has valid URI pattern', () => {`);
142
+ lines.push(` const uri = ${JSON.stringify(uri)};`);
143
+ lines.push(` expect(uri).toBeTruthy();`);
144
+ if (uri.includes('{')) {
145
+ lines.push(` // Templated URI — should have matching param definitions`);
146
+ lines.push(` expect(uri).toMatch(/\\{\\w+\\}/);`);
147
+ }
148
+ lines.push(` });`);
149
+ lines.push(`});`);
150
+ lines.push(``);
151
+ }
152
+ return lines.join('\n');
153
+ }
154
+ // ── Command ─────────────────────────────────────────────────────────────
155
+ export function runTest(args) {
156
+ const testInput = args[1];
157
+ const outDir = parseFlag(args, '--outdir');
158
+ const dryRun = hasFlag(args, '--dry-run');
159
+ if (!testInput) {
160
+ console.error('Usage: kern test <file.kern> [--outdir=<dir>] [--dry-run]');
161
+ console.error('');
162
+ console.error('Generates test files for MCP server tools defined in .kern files.');
163
+ console.error('Tests include happy path + guard violation test cases.');
164
+ process.exit(1);
165
+ }
166
+ const inputPath = resolve(testInput);
167
+ if (!existsSync(inputPath)) {
168
+ console.error(`Not found: ${testInput}`);
169
+ process.exit(1);
170
+ }
171
+ const source = readFileSync(inputPath, 'utf-8');
172
+ const ast = parseAndSurface(source, inputPath);
173
+ const testCode = generateTestFile(ast, basename(inputPath));
174
+ if (dryRun) {
175
+ process.stdout.write(testCode);
176
+ return;
177
+ }
178
+ const outName = `${basename(inputPath, '.kern')}.test.ts`;
179
+ const outPath = resolve(outDir || '.', outName);
180
+ writeFileSync(outPath, testCode);
181
+ console.log(` Generated ${outName}`);
182
+ console.log(` Run: npx jest ${outName}`);
183
+ }
184
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { collectLanguageMetrics } from '@kernlang/metrics';
4
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
5
5
  import { createJiti } from 'jiti';
6
6
  import { basename, dirname, resolve } from 'path';
7
- import { hasFlag, loadTemplates, parseAndSurface, parseFlag, transpileForTarget } from '../shared.js';
7
+ import { getOutputExtension, hasFlag, loadTemplates, parseAndSurface, parseFlag, transpileForTarget, } from '../shared.js';
8
8
  // ── Minify/Pretty implementations ───────────────────────────────────────
9
9
  /** Serialize node props. pseudoFormat controls pseudo style output:
10
10
  * 'minify' → ` {:state:key:value}` (space + braces)
@@ -176,13 +176,7 @@ export function runTranspile(args) {
176
176
  console.log(`Transpiled: ${inputFile} → ${displayPath}`);
177
177
  }
178
178
  else {
179
- const outExt = target === 'fastapi'
180
- ? '.py'
181
- : target === 'vue' || target === 'nuxt'
182
- ? '.vue'
183
- : target === 'express' || target === 'cli' || target === 'terminal' || target === 'mcp'
184
- ? '.ts'
185
- : '.tsx';
179
+ const outExt = getOutputExtension(target);
186
180
  const outFile = resolve(outDir, `${name}${outExt}`);
187
181
  mkdirSync(dirname(outFile), { recursive: true });
188
182
  writeFileSync(outFile, result.code);
@@ -238,6 +232,16 @@ export function runTranspile(args) {
238
232
  console.log(` ⚠ ${d.nodeType}${loc} — unsupported in ${d.target}${lost}`);
239
233
  }
240
234
  }
235
+ // Surface severity-based diagnostics from transpiler
236
+ const sevDiags = result.diagnostics.filter((d) => d.severity);
237
+ for (const d of sevDiags) {
238
+ const loc = d.loc ? `:${d.loc.line}` : '';
239
+ const icon = d.severity === 'error' ? '✖' : d.severity === 'warning' ? '⚠' : 'ℹ';
240
+ console.log(` ${icon} ${d.severity}: ${d.message || d.reason || d.nodeType}${loc}`);
241
+ }
242
+ if (sevDiags.some((d) => d.severity === 'error')) {
243
+ process.exitCode = 1;
244
+ }
241
245
  }
242
246
  }
243
247
  export function printHelp() {
@@ -1 +1 @@
1
- {"version":3,"file":"transpile.js","sourceRoot":"","sources":["../../src/commands/transpile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transpile.js","sourceRoot":"","sources":["../../src/commands/transpile.ts"],"names":[],"mappings":"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"}
package/dist/shared.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { IRNode, ParseDiagnostic, ResolvedKernConfig } from '@kernlang/core';
2
- export declare const GENERATED_HEADER = "// Generated by KERN \u2014 do not edit. Source: ";
1
+ import type { IRNode, KernTarget, ParseDiagnostic, ResolvedKernConfig, SchemaViolation } from '@kernlang/core';
2
+ export declare const GENERATED_HEADER = "// @generated by kern v2.0.0 \u2014 DO NOT EDIT. Source: ";
3
3
  /** Get value of --flag=value */
4
4
  export declare function parseFlag(args: string[], flag: string): string | undefined;
5
5
  /** Get value of --flag=value OR --flag <value> (next positional arg) */
@@ -11,6 +11,37 @@ export declare function surfaceParseDiagnostics(diagnostics: ParseDiagnostic[],
11
11
  warnings: number;
12
12
  };
13
13
  export declare function parseAndSurface(source: string, file?: string): IRNode;
14
+ export interface FileDiagnosticsJSON {
15
+ file: string;
16
+ success: boolean;
17
+ diagnostics: ParseDiagnostic[];
18
+ schemaViolations: SchemaViolation[];
19
+ }
20
+ /** Parse a .kern file and return structured diagnostics as JSON-serializable object. */
21
+ export declare function parseWithJSONDiagnostics(source: string, file: string): {
22
+ root: IRNode;
23
+ json: FileDiagnosticsJSON;
24
+ };
25
+ /** Get the output file extension for a given target. Deduplicates the ternary chain. */
26
+ export declare function getOutputExtension(target: KernTarget): string;
27
+ /** Extract exported symbol names from generated TypeScript lines, distinguishing type-only exports. */
28
+ export declare function extractExportsFromLines(lines: string[]): {
29
+ name: string;
30
+ typeOnly: boolean;
31
+ }[];
32
+ export interface BarrelEntry {
33
+ moduleName: string;
34
+ exports: {
35
+ name: string;
36
+ typeOnly: boolean;
37
+ }[];
38
+ }
39
+ /** Scan output directory for .ts/.tsx files and build barrel entries from their exports. */
40
+ export declare function scanOutputForBarrelEntries(outDir: string): BarrelEntry[];
41
+ /** Generate a barrel index file that re-exports from all compiled modules. */
42
+ export declare function generateBarrelFile(outDir: string, entries: BarrelEntry[]): void;
43
+ /** Generate facade re-export files and an index.ts that re-exports from facades. */
44
+ export declare function generateFacadeFiles(outDir: string, facadesDirOverride: string | undefined, entries: BarrelEntry[]): void;
14
45
  export declare function findNearestPackageJson(startDir: string): string | null;
15
46
  export declare function findKernFiles(dir: string, singleFile?: string): string[];
16
47
  export declare function collectTsFilesFlat(dirPath: string, recursive: boolean): string[];
package/dist/shared.js CHANGED
@@ -1,4 +1,4 @@
1
- import { clearTemplates, collectCoverageGaps, parseWithDiagnostics, registerTemplate, resolveConfig, writeCoverageGaps, } from '@kernlang/core';
1
+ import { clearTemplates, collectCoverageGaps, KERN_VERSION, parseWithDiagnostics, registerTemplate, resolveConfig, validateSchema, validateSemantics, writeCoverageGaps, } from '@kernlang/core';
2
2
  import { transpileExpress } from '@kernlang/express';
3
3
  import { transpileFastAPI } from '@kernlang/fastapi';
4
4
  import { transpileMCP } from '@kernlang/mcp';
@@ -11,7 +11,7 @@ import { createJiti } from 'jiti';
11
11
  import { basename, dirname, relative, resolve } from 'path';
12
12
  import { transpileCliApp } from './transpiler-cli.js';
13
13
  // ── Constants ────────────────────────────────────────────────────────────
14
- export const GENERATED_HEADER = '// Generated by KERNdo not edit. Source: ';
14
+ export const GENERATED_HEADER = `// @generated by kern v${KERN_VERSION} DO NOT EDIT. Source: `;
15
15
  // ── Arg parsing helpers ──────────────────────────────────────────────────
16
16
  /** Get value of --flag=value */
17
17
  export function parseFlag(args, flag) {
@@ -51,6 +51,153 @@ export function parseAndSurface(source, file) {
51
51
  surfaceParseDiagnostics(result.diagnostics, file);
52
52
  return result.root;
53
53
  }
54
+ /** Parse a .kern file and return structured diagnostics as JSON-serializable object. */
55
+ export function parseWithJSONDiagnostics(source, file) {
56
+ const result = parseWithDiagnostics(source);
57
+ const schemaViolations = [
58
+ ...validateSchema(result.root),
59
+ ...validateSemantics(result.root).map((sv) => ({
60
+ nodeType: sv.nodeType,
61
+ message: `[${sv.rule}] ${sv.message}`,
62
+ line: sv.line,
63
+ col: sv.col,
64
+ })),
65
+ ];
66
+ const hasErrors = result.diagnostics.some((d) => d.severity === 'error') || schemaViolations.length > 0;
67
+ return {
68
+ root: result.root,
69
+ json: {
70
+ file,
71
+ success: !hasErrors,
72
+ diagnostics: result.diagnostics,
73
+ schemaViolations,
74
+ },
75
+ };
76
+ }
77
+ // ── Output extension helper ─────────────────────────────────────────────
78
+ /** Get the output file extension for a given target. Deduplicates the ternary chain. */
79
+ export function getOutputExtension(target) {
80
+ switch (target) {
81
+ case 'fastapi':
82
+ return '.py';
83
+ case 'vue':
84
+ case 'nuxt':
85
+ return '.vue';
86
+ case 'express':
87
+ case 'cli':
88
+ case 'terminal':
89
+ case 'mcp':
90
+ return '.ts';
91
+ default:
92
+ return '.tsx';
93
+ }
94
+ }
95
+ // ── Export extraction ───────────────────────────────────────────────────
96
+ /** Extract exported symbol names from generated TypeScript lines, distinguishing type-only exports. */
97
+ export function extractExportsFromLines(lines) {
98
+ const exports = [];
99
+ const re = /^export\s+(?:async\s+)?(?:function\*?|class|const|enum|abstract\s+class)\s+(\w+)/;
100
+ const typeRe = /^export\s+(?:interface|type)\s+(\w+)/;
101
+ for (const line of lines) {
102
+ const m = line.match(re);
103
+ if (m) {
104
+ exports.push({ name: m[1], typeOnly: false });
105
+ continue;
106
+ }
107
+ const tm = line.match(typeRe);
108
+ if (tm)
109
+ exports.push({ name: tm[1], typeOnly: true });
110
+ }
111
+ return exports;
112
+ }
113
+ /** Scan output directory for .ts/.tsx files and build barrel entries from their exports. */
114
+ export function scanOutputForBarrelEntries(outDir) {
115
+ if (!existsSync(outDir))
116
+ return [];
117
+ const entries = [];
118
+ function scan(dir) {
119
+ for (const file of readdirSync(dir)) {
120
+ const full = resolve(dir, file);
121
+ if (statSync(full).isDirectory()) {
122
+ scan(full);
123
+ continue;
124
+ }
125
+ if (file === 'index.ts' || file === '_barrel.ts')
126
+ continue;
127
+ if (!file.endsWith('.ts') && !file.endsWith('.tsx'))
128
+ continue;
129
+ const content = readFileSync(full, 'utf-8');
130
+ const exports = extractExportsFromLines(content.split('\n'));
131
+ if (exports.length > 0) {
132
+ // Use path relative to outDir as module name so barrel imports resolve
133
+ const relPath = relative(outDir, full).replace(/\.tsx?$/, '');
134
+ entries.push({ moduleName: relPath, exports });
135
+ }
136
+ }
137
+ }
138
+ scan(outDir);
139
+ return entries;
140
+ }
141
+ /** Generate a barrel index file that re-exports from all compiled modules. */
142
+ export function generateBarrelFile(outDir, entries) {
143
+ if (entries.length === 0)
144
+ return;
145
+ const hasIndexKern = entries.some((e) => e.moduleName === 'index');
146
+ const barrelName = hasIndexKern ? '_barrel.ts' : 'index.ts';
147
+ const barrelLines = ['// @generated by kern — DO NOT EDIT.', ''];
148
+ for (const entry of entries) {
149
+ const valueExports = entry.exports.filter((e) => !e.typeOnly).map((e) => e.name);
150
+ const typeExports = entry.exports.filter((e) => e.typeOnly).map((e) => e.name);
151
+ if (valueExports.length > 0) {
152
+ barrelLines.push(`export { ${valueExports.join(', ')} } from './${entry.moduleName}.js';`);
153
+ }
154
+ if (typeExports.length > 0) {
155
+ barrelLines.push(`export type { ${typeExports.join(', ')} } from './${entry.moduleName}.js';`);
156
+ }
157
+ }
158
+ barrelLines.push('');
159
+ const barrelFile = resolve(outDir, barrelName);
160
+ writeFileSync(barrelFile, barrelLines.join('\n'));
161
+ const totalExports = entries.reduce((n, e) => n + e.exports.length, 0);
162
+ console.log(` barrel → ${barrelName} (${totalExports} exports)`);
163
+ }
164
+ /** Generate facade re-export files and an index.ts that re-exports from facades. */
165
+ export function generateFacadeFiles(outDir, facadesDirOverride, entries) {
166
+ if (entries.length === 0)
167
+ return;
168
+ const facadesDirPath = resolve(facadesDirOverride || resolve(dirname(outDir), 'src'));
169
+ mkdirSync(facadesDirPath, { recursive: true });
170
+ const relToGenerated = relative(facadesDirPath, outDir);
171
+ const facadeFiles = [];
172
+ for (const entry of entries) {
173
+ const facadeFile = resolve(facadesDirPath, `${entry.moduleName}.ts`);
174
+ if (existsSync(facadeFile))
175
+ continue;
176
+ // Create parent directories for nested module paths (e.g. routes/get-users)
177
+ mkdirSync(dirname(facadeFile), { recursive: true });
178
+ const relPath = `${relToGenerated}/${entry.moduleName}.js`;
179
+ writeFileSync(facadeFile, `export * from '${relPath}';\n`);
180
+ facadeFiles.push(entry.moduleName);
181
+ }
182
+ if (facadeFiles.length > 0) {
183
+ console.log(` facades → ${facadesDirPath} (${facadeFiles.length} files)`);
184
+ }
185
+ const parentDir = dirname(outDir);
186
+ const relToFacades = relative(parentDir, facadesDirPath);
187
+ const indexLines = ['// @generated by kern — DO NOT EDIT.', ''];
188
+ for (const entry of entries) {
189
+ indexLines.push(`export * from './${relToFacades}/${entry.moduleName}.js';`);
190
+ }
191
+ indexLines.push('');
192
+ const indexFile = resolve(parentDir, 'index.ts');
193
+ if (!existsSync(indexFile) || readFileSync(indexFile, 'utf-8').startsWith('// @generated by kern')) {
194
+ writeFileSync(indexFile, indexLines.join('\n'));
195
+ console.log(` facades index → ${relative(process.cwd(), indexFile)}`);
196
+ }
197
+ else {
198
+ console.log(` facades index → skipped (${relative(process.cwd(), indexFile)} already exists)`);
199
+ }
200
+ }
54
201
  // ── File helpers ─────────────────────────────────────────────────────────
55
202
  export function findNearestPackageJson(startDir) {
56
203
  let dir = startDir;
@@ -64,9 +211,49 @@ export function findNearestPackageJson(startDir) {
64
211
  dir = parent;
65
212
  }
66
213
  }
214
+ /** Load .kernignore patterns from the given directory (or nearest parent). */
215
+ function loadKernIgnore(startDir) {
216
+ let dir = startDir;
217
+ while (true) {
218
+ const candidate = resolve(dir, '.kernignore');
219
+ if (existsSync(candidate)) {
220
+ return readFileSync(candidate, 'utf-8')
221
+ .split('\n')
222
+ .map((l) => l.trim())
223
+ .filter((l) => l && !l.startsWith('#'));
224
+ }
225
+ const parent = dirname(dir);
226
+ if (parent === dir)
227
+ return [];
228
+ dir = parent;
229
+ }
230
+ }
231
+ /** Escape regex special characters except * which is used as glob wildcard. */
232
+ function escapeRegexExceptStar(s) {
233
+ return s.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
234
+ }
235
+ /** Check if a path matches any of the ignore patterns (simple glob-like matching). */
236
+ function isIgnored(filePath, baseDir, patterns) {
237
+ const rel = relative(baseDir, filePath);
238
+ return patterns.some((pattern) => {
239
+ if (pattern.endsWith('/'))
240
+ return rel.startsWith(pattern) || rel.includes(`/${pattern}`);
241
+ if (pattern.includes('*')) {
242
+ // Escape regex chars, then convert * to .* and ** to match across directories
243
+ const escaped = escapeRegexExceptStar(pattern)
244
+ .replace(/\*\*/g, '@@GLOBSTAR@@')
245
+ .replace(/\*/g, '[^/]*')
246
+ .replace(/@@GLOBSTAR@@/g, '.*');
247
+ const regex = new RegExp(`^${escaped}$`);
248
+ return regex.test(rel) || regex.test(basename(filePath));
249
+ }
250
+ return rel === pattern || basename(filePath) === pattern;
251
+ });
252
+ }
67
253
  export function findKernFiles(dir, singleFile) {
68
254
  if (singleFile)
69
255
  return [resolve(dir, singleFile)];
256
+ const ignorePatterns = loadKernIgnore(dir);
70
257
  const files = [];
71
258
  function walk(d) {
72
259
  for (const entry of readdirSync(d)) {
@@ -76,7 +263,9 @@ export function findKernFiles(dir, singleFile) {
76
263
  walk(full);
77
264
  }
78
265
  else if (entry.endsWith('.kern')) {
79
- files.push(full);
266
+ if (ignorePatterns.length === 0 || !isIgnored(full, dir, ignorePatterns)) {
267
+ files.push(full);
268
+ }
80
269
  }
81
270
  }
82
271
  }