# core/loaders/nginx.loader.ts

> 17 lines of code and 3 definitions.

Tree: Project Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/scripts#file-scripts-core-loaders-nginx-loader-ts
Source text: https://banes-lab.com/source/scripts/core/loaders/nginx.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/scripts/core/loaders.md), after [core/loaders/manifest.loader.ts](https://banes-lab.com/source/scripts/core/loaders/manifest.loader.ts.md) and before [core/loaders/report.loader.ts](https://banes-lab.com/source/scripts/core/loaders/report.loader.ts.md).

## Definitions

- `filesUnder` (lexical_declaration, line 8)
- `serverConfigFiles` (lexical_declaration, line 15, exported)
- `full` (lexical_declaration, line 10)

## Contained in

- [core/loaders](https://banes-lab.com/anatomy/scripts/folder-scripts-core-loaders.md)

## Linked from

- [core/loaders](https://banes-lab.com/anatomy/scripts/folder-scripts-core-loaders.md)

## Source

```typescript
import { ROOT, absolutePath } from "@ssot/paths";
import { extname, join, relative } from "node:path";
import { readFileSync, readdirSync } from "node:fs";
import { CONFIG_EXTENSIONS } from "#configuration/constants/nginx.constants";
import type { ConfigFile } from "#types/nginx.types";
import { normalizePath } from "@ssot/govlab/shared/resolvers/anchor.resolver.ts";

const filesUnder = function filesUnder(folder: string): string[] {
    return readdirSync(folder, { withFileTypes: true }).flatMap((entry) => {
        const full = join(folder, entry.name);
        return entry.isDirectory() ? filesUnder(full) : [full];
    });
};

export const serverConfigFiles = function serverConfigFiles(): ConfigFile[] {
    return filesUnder(absolutePath("app.nginx"))
        .filter((file) => CONFIG_EXTENSIONS.has(extname(file)))
        .map((file) => ({ path: normalizePath(relative(ROOT, file)), text: readFileSync(file, "utf8") }));
};
```
