Config File

Config File Locations

FS Guard automatically searches for configuration in the following locations (in order of precedence):

  • fs-guard.config.ts
  • fs-guard.config.js
  • fs-guard.config.json
  • .fsguard property in package.json

TypeScript Configuration

TypeScript configuration provides full type safety and IntelliSense:

typescript
// fs-guard.config.ts
import type { FsGuardConfig } from "@promise-inc/fs-guard";
export const config: FsGuardConfig = {
rules: {
"src": "*",
"src/components": ["Button.tsx", "Input.tsx"],
"src/hooks": {
required: true,
pattern: "use*.ts",
},
},
};

JavaScript Configuration

typescript
// fs-guard.config.js
module.exports = {
rules: {
"src": "*",
"tests": {
required: true,
pattern: "*.test.ts",
},
},
};

JSON Configuration

typescript
// fs-guard.config.json
{
"rules": {
"src": "*",
"docs": {
"required": true,
"pattern": "*.md"
}
}
}

package.json Configuration

typescript
// package.json
{
"name": "my-app",
"fsguard": {
"rules": {
"src": "*",
"public": "*"
}
}
}

FsGuardConfig Interface

typescript
interface FsGuardConfig {
// Base directory for validation (default: current working directory)
baseDir?: string;
// Structural rules
rules: Record<string, RuleValue>;
// Extend a preset
preset?: string;
// Ignore patterns (glob syntax)
ignore?: string[];
}
type RuleValue =
| "*"
| string[]
| {
required?: boolean;
pattern?: string;
maxDepth?: number;
};

Complete Example

typescript
import type { FsGuardConfig } from "@promise-inc/fs-guard";
export const config: FsGuardConfig = {
baseDir: "./",
preset: "react-ts",
ignore: ["**/node_modules/**", "**/.git/**"],
rules: {
// Directory must exist
"src": "*",
// Required files
"src": ["index.tsx", "App.tsx"],
// Pattern matching
"src/components": {
required: true,
pattern: "*.tsx",
},
// Max depth
"src/utils": {
required: true,
maxDepth: 2,
},
// Combination
"src/hooks": {
required: true,
pattern: "use*.ts",
maxDepth: 1,
},
},
};