# core/adapters/server.adapter.ts

> 11 lines of code and 3 definitions.

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

Listed in [core/adapters](https://banes-lab.com/api/source/scripts/core/adapters.md), after [core/adapters/dependency.adapter.ts](https://banes-lab.com/source/scripts/core/adapters/dependency.adapter.ts.md) and before [core/adapters/style.adapter.ts](https://banes-lab.com/source/scripts/core/adapters/style.adapter.ts.md).

## Definitions

- `listenerSurfacesOf` (lexical_declaration, line 5, exported)
- `loaded` (lexical_declaration, line 6, exported)
- `{ preview, server }` (lexical_declaration, line 10, exported)

## Contained in

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

## Uses

- [configuration/strings/server.strings.ts](https://banes-lab.com/source/scripts/configuration/strings/server.strings.ts.md)

## Linked from

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

## Source

```typescript
import type { ListenerSurfaces } from "#types/server.types";
import { loadConfigFromFile } from "vite";
import { notABuildConfig } from "#configuration/strings/server.strings";

export const listenerSurfacesOf = async function listenerSurfacesOf(file: string): Promise<ListenerSurfaces> {
    const loaded = await loadConfigFromFile({ command: "serve", mode: "development" }, file, undefined, "silent");
    if (loaded === null) {
        throw new Error(notABuildConfig(file));
    }
    const { preview, server } = loaded.config;
    return { ...(preview === undefined ? {} : { preview }), ...(server === undefined ? {} : { server }) };
};
```
