# core/loaders/source.loader.ts

> 14 lines of code and 4 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-loaders-source-loader-ts
Source text: https://banes-lab.com/source/build-scripts/core/loaders/source.loader.ts.txt

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

## Definitions

- `sourceTextOf` (lexical_declaration, line 9, exported)
- `sourceSizeOf` (lexical_declaration, line 14, exported)
- `sourceFileOf` (lexical_declaration, line 5)
- `file` (lexical_declaration, line 15, exported)

## Contained in

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

## Used by

- [core/coordinators/page.coordinator.ts](https://banes-lab.com/source/build-scripts/core/coordinators/page.coordinator.ts.md)

## Linked from

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

## Source

```typescript
import { existsSync, readFileSync, statSync } from "node:fs";
import { absolutePath } from "@ssot/paths";
import { join } from "node:path";

const sourceFileOf = function sourceFileOf(name: string): string {
    return join(absolutePath("app.sources"), name);
};

export const sourceTextOf = function sourceTextOf(name: string): string | null {
    const file = sourceFileOf(name);
    return existsSync(file) ? readFileSync(file, "utf8") : null;
};

export const sourceSizeOf = function sourceSizeOf(name: string): number {
    const file = sourceFileOf(name);
    return existsSync(file) ? statSync(file).size : 0;
};
```
