# core/validators/source.page.validator.ts

> 40 lines of code and 8 definitions.

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

Listed in [core/validators](https://banes-lab.com/api/source/build-scripts/core/validators.md), after [core/validators/site.validator.ts](https://banes-lab.com/source/build-scripts/core/validators/site.validator.ts.md).

## Definitions

- `servedPageFindings` (lexical_declaration, line 29, exported)
- `servedPageFinding` (lexical_declaration, line 12)
- `artifact` (lexical_declaration, line 15)
- `address` (lexical_declaration, line 16)
- `file` (lexical_declaration, line 34, exported)
- `listed` (lexical_declaration, line 35, exported)
- `parts` (lexical_declaration, line 36, exported)
- `pages` (lexical_declaration, line 37, exported)

## Contained in

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

## Uses

- [core/loaders/build.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/build.loader.ts.md)
- [core/validators/build.validator.ts](https://banes-lab.com/source/build-scripts/core/validators/build.validator.ts.md)
- [core/validators/metadata.validator.ts](https://banes-lab.com/source/build-scripts/core/validators/metadata.validator.ts.md)
- [core/validators/site.validator.ts](https://banes-lab.com/source/build-scripts/core/validators/site.validator.ts.md)

## Used by

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

## Linked from

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

## Source

```typescript
import type { Finding, PageListing, Seen } from "#types/validation.types";
import { checkEncodings, checkSchema } from "#core/validators/metadata.validator";
import { checkFile, checkPageBytes, checkPageHeadings, isServedUrl } from "#core/validators/build.validator";
import { checkIndexable, checkLinks, checkPage, checkSitemap } from "#core/validators/site.validator";
import { SITE_URL } from "@banes-lab/web/core/assets/link.assets.ts";
import { fileForPath } from "#core/resolvers/page.resolver";
import { mapSettled } from "#core/adapters/document.adapter";
import { readArtifact } from "#core/converters/build.converter";
import { readOrNull } from "#core/loaders/build.loader";
import { sitemapPartFiles } from "#core/resolvers/route.resolver";

const servedPageFinding = function servedPageFinding(path: string, served: ReadonlySet<string>, seen: Seen): Finding[] {
    const file = fileForPath(path);
    return checkFile(file, (html) => {
        const artifact = readArtifact(html);
        const address = SITE_URL + path;
        return [
            ...checkPage(file, artifact, address, seen),
            ...checkIndexable(file, artifact, true),
            ...checkSchema(file, artifact, address),
            ...checkEncodings(file, artifact, isServedUrl),
            ...checkLinks(file, artifact, served),
            ...checkPageBytes(file, html),
            ...checkPageHeadings(file, html),
        ];
    });
};

export const servedPageFindings = async function servedPageFindings(
    paths: readonly string[],
    listing: PageListing,
    seen: Seen,
): Promise<Finding[]> {
    const file = listing.sitemap.slice(1);
    const listed = paths.filter(listing.listed).map((path) => SITE_URL + path);
    const parts = sitemapPartFiles(listing.sitemap, (part) => readOrNull(part) !== null);
    const pages = await mapSettled(paths, (path) => servedPageFinding(path, listing.served, seen));
    return [
        ...pages.flat(),
        ...checkFile(file, () => checkSitemap(file, parts.map((part) => readOrNull(part) ?? "").join("\n"), listed)),
    ];
};
```
