# runtime/entrypoints/viewport.entrypoint.ts

> 32 lines of code and 6 definitions.

Tree: Project Scripts
Language: typescript
Layer: runtime
Canonical: https://banes-lab.com/anatomy/scripts#file-scripts-runtime-entrypoints-viewport-entrypoint-ts
Source text: https://banes-lab.com/source/scripts/runtime/entrypoints/viewport.entrypoint.ts.txt

Listed in [runtime/entrypoints](https://banes-lab.com/api/source/scripts/runtime/entrypoints.md), after [runtime/entrypoints/style.entrypoint.ts](https://banes-lab.com/source/scripts/runtime/entrypoints/style.entrypoint.ts.md).

## Definitions

- `options` (lexical_declaration, line 12)
- `root` (lexical_declaration, line 13)
- `built` (lexical_declaration, line 14)
- `unknown` (lexical_declaration, line 15)
- `binary` (lexical_declaration, line 16)
- `routes` (lexical_declaration, line 32)

## Contained in

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

## Source

```typescript
import { NO_BROWSER, NO_BUILD, REFUSED_ARGUMENTS, unknownRoute } from "#configuration/strings/viewport.strings";
import { VIEWPORT_ARGV } from "#configuration/configs/viewport.config";
import { absolutePath } from "@ssot/paths";
import { auditRoutes } from "#core/coordinators/viewport.coordinator";
import { builtRoutes } from "#core/loaders/viewport.loader";
import { findBrowser } from "@banes-lab/build-scripts/core/resolvers/browser.resolver.ts";
import { mkdirSync } from "node:fs";
import process from "node:process";
import { readOptions } from "#core/converters/viewport.converter";
import { resolveArgv } from "@govlab/argv";

const options = readOptions(resolveArgv(VIEWPORT_ARGV));
const root = absolutePath("builds.web");
const built = builtRoutes(root);
const unknown = options === null ? [] : options.routes.filter((route) => !built.includes(route));
const binary = options === null ? null : findBrowser(options.browser);

if (options === null) {
    process.stderr.write(REFUSED_ARGUMENTS);
    process.exitCode = 1;
} else if (built.length === 0) {
    process.stderr.write(NO_BUILD);
    process.exitCode = 1;
} else if (unknown.length > 0) {
    process.stderr.write(unknown.map(unknownRoute).join(""));
    process.exitCode = 1;
} else if (binary === null) {
    process.stderr.write(NO_BROWSER);
    process.exitCode = 1;
} else {
    mkdirSync(options.outDir, { recursive: true });
    const routes = options.routes.length > 0 ? options.routes : built;
    process.exitCode = (await auditRoutes(binary, options, root, routes)) ? 0 : 1;
}
```
