# core/loaders/card.loader.ts

> 30 lines of code and 4 definitions.

Tree: Bane's Lab Social Share
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/social-share#file-social-share-core-loaders-card-loader-ts
Source text: https://banes-lab.com/source/social-share/core/loaders/card.loader.ts.txt

Listed in [core/loaders](https://banes-lab.com/api/source/social-share/core/loaders.md).

## Definitions

- `cardPages` (lexical_declaration, line 14, exported)
- `loadCards` (lexical_declaration, line 26, exported)
- `PLUGIN_FILES` (lexical_declaration, line 10)
- `CARD_PLUGINS` (lexical_declaration, line 12, exported)

## Contained in

- [core/loaders](https://banes-lab.com/anatomy/social-share/folder-social-share-core-loaders.md)

## Uses

- [core/evaluators/page.evaluator.ts](https://banes-lab.com/source/social-share/core/evaluators/page.evaluator.ts.md)
- [core/registries/card.registry.ts](https://banes-lab.com/source/social-share/core/registries/card.registry.ts.md)

## Linked from

- [core/evaluators](https://banes-lab.com/anatomy/social-share/folder-social-share-core-evaluators.md)
- [core/loaders](https://banes-lab.com/anatomy/social-share/folder-social-share-core-loaders.md)
- [core/registries](https://banes-lab.com/anatomy/social-share/folder-social-share-core-registries.md)

## Source

```typescript
import "#core/plugins/card.barrel";
import "@banes-lab/web/presentation/records/records.barrel.ts";
import { listCards, repeatedCards } from "#core/registries/card.registry";
import type { CardPage } from "#types/card.types";
import type { LoadedCards } from "#types/stage.types";
import { SITE_MARKS } from "#configuration/data/site.data";
import { pageAddress } from "#core/evaluators/page.evaluator";
import { registeredPages } from "@banes-lab/web/domain/registries/page.registry.ts";

const PLUGIN_FILES = import.meta.glob("../../cards/*/plugins/*.plugin.ts");

export const CARD_PLUGINS: readonly string[] = Object.keys(PLUGIN_FILES);

export const cardPages = function cardPages(): readonly CardPage[] {
    return registeredPages().map((page) => ({
        accent: page.accent,
        address: pageAddress(page.id),
        headline: page.share.headline,
        icon: page.icon,
        id: page.id,
        mark: page.mark,
        tagline: page.share.tagline,
    }));
};

export const loadCards = function loadCards(): LoadedCards {
    return {
        brand: SITE_MARKS,
        cards: listCards(),
        pages: cardPages(),
        plugins: CARD_PLUGINS,
        repeated: repeatedCards(),
    };
};
```
