# core/persistence/snapshot.persistence.ts

> 30 lines of code and 2 definitions.

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

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

## Definitions

- `writeArtifacts` (lexical_declaration, line 12, exported)
- `PNG_BASE64` (lexical_declaration, line 10)

## Contained in

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

## Uses

- [configuration/strings/snapshot.strings.ts](https://banes-lab.com/source/scripts/configuration/strings/snapshot.strings.ts.md)
- [core/formatters/snapshot.formatter.ts](https://banes-lab.com/source/scripts/core/formatters/snapshot.formatter.ts.md)

## Used by

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

## Linked from

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

## Source

```typescript
import { EMPTY_FRAME, logWritten, shotWritten } from "#configuration/strings/snapshot.strings";
import type { ConsoleRecord } from "@banes-lab/build-scripts/types/browser.types.ts";
import type { SnapshotOptions } from "#types/snapshot.types";
import { dirname } from "node:path";
import { logLines } from "#core/formatters/snapshot.formatter";
import { mkdirSync } from "node:fs";
import process from "node:process";
import { writeVerbatim } from "@govlab/canonical-write";

const PNG_BASE64 = "base64";

export const writeArtifacts = function writeArtifacts(
    options: SnapshotOptions,
    data: string,
    records: readonly ConsoleRecord[],
): boolean {
    if (options.log !== null) {
        mkdirSync(dirname(options.log), { recursive: true });
        writeVerbatim(options.log, logLines(records));
        process.stdout.write(logWritten(options.log, records.length));
    }
    if (options.out === null) {
        return true;
    }
    if (data.length === 0) {
        process.stderr.write(EMPTY_FRAME);
        return false;
    }
    writeVerbatim(options.out, Buffer.from(data, PNG_BASE64));
    process.stdout.write(shotWritten(options.out));
    return true;
};
```
