# core/resolvers/asset.resolver.ts

> 24 lines of code and 12 definitions.

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

Listed in [core/resolvers](https://banes-lab.com/api/source/build-scripts/core/resolvers.md), before [core/resolvers/binding.resolver.ts](https://banes-lab.com/source/build-scripts/core/resolvers/binding.resolver.ts.md).

## Definitions

- `digestOf` (lexical_declaration, line 10, exported)
- `extensionOf` (lexical_declaration, line 22, exported)
- `digestedFileName` (lexical_declaration, line 14, exported)
- `toPosix` (lexical_declaration, line 18, exported)
- `stripCompression` (lexical_declaration, line 27, exported)
- `DIGEST_ALGORITHM` (lexical_declaration, line 4)
- `DIGEST_ENCODING` (lexical_declaration, line 5)
- `SLASH` (lexical_declaration, line 6)
- `BACKSLASH` (lexical_declaration, line 7)
- `DOT` (lexical_declaration, line 8)
- `dot` (lexical_declaration, line 23, exported)
- `extension` (lexical_declaration, line 28, exported)

## Contained in

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

## Used by

- [core/analyzers/asset.analyzer.ts](https://banes-lab.com/source/build-scripts/core/analyzers/asset.analyzer.ts.md)
- [core/loaders/asset.loader.ts](https://banes-lab.com/source/build-scripts/core/loaders/asset.loader.ts.md)
- [core/predicates/asset.predicate.ts](https://banes-lab.com/source/build-scripts/core/predicates/asset.predicate.ts.md)
- [core/resolvers/diagram.resolver.ts](https://banes-lab.com/source/build-scripts/core/resolvers/diagram.resolver.ts.md)
- [core/validators/catalog.validator.ts](https://banes-lab.com/source/build-scripts/core/validators/catalog.validator.ts.md)

## Linked from

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

## Source

```typescript
import { PRECOMPRESSED_EXTENSIONS } from "#configuration/constants/asset.constants";
import { createHash } from "node:crypto";

const DIGEST_ALGORITHM = "sha256";
const DIGEST_ENCODING = "hex";
const SLASH = "/";
const BACKSLASH = "\\";
const DOT = ".";

export const digestOf = function digestOf(text: Uint8Array | string): string {
    return createHash(DIGEST_ALGORITHM).update(text).digest(DIGEST_ENCODING);
};

export const digestedFileName = function digestedFileName(prefix: string, text: string, suffix: string): string {
    return prefix + digestOf(text) + suffix;
};

export const toPosix = function toPosix(value: string): string {
    return value.split(BACKSLASH).join(SLASH);
};

export const extensionOf = function extensionOf(file: string): string {
    const dot = file.lastIndexOf(DOT);
    return dot === -1 ? "" : file.slice(dot);
};

export const stripCompression = function stripCompression(file: string): string {
    const extension = extensionOf(file);
    return PRECOMPRESSED_EXTENSIONS.has(extension) ? file.slice(0, -extension.length) : file;
};
```
