Hyperlinkv0.8.0-beta.28

ShardMap

ShardMap.Tagconstsrc/ShardMap.ts:308
<Self>(): <
  Key extends Schema.Top,
  Value extends Schema.Top,
  Error extends Schema.Top = typeof Schema.Never
>(
  key: string,
  schemas: ShardMapSchemas<Key, Value, Error>
) => ShardMapTag<Self, Key, Value, Error>

Declare a ShardMap tag — schemas on the Tag; partition strategy is a runtime option on layer / serve.

constructorslayerserve
Source src/ShardMap.ts:30832 lines
export const Tag =
  <Self>() =>
  <
    Key extends Schema.Top,
    Value extends Schema.Top,
    Error extends Schema.Top = typeof Schema.Never,
  >(
    key: string,
    schemas: ShardMapSchemas<Key, Value, Error>,
  ): ShardMapTag<Self, Key, Value, Error> => {
    const error =
      schemas.error === undefined ? Schema.Never : schemas.error;
    const spec = buildShardMapSpec(schemas.key, schemas.value, error);
    const tag =
      schemas.node === undefined
        ? resourceTag<Self>()(key, spec, {
            kind,
            description: schemas.description,
          })
        : resourceTag<Self>()(key, spec, {
            kind,
            description: schemas.description,
            node: schemas.node,
          });
    // SAFE: HyperlinkTag + schema stamps = ShardMapTag; Spec/Symbol identity is opaque under Top
    // (same boundary as QueueHyperlink's `nameQueueService`).
    return Object.assign(tag, {
      [internal.keySchemaSym]: schemas.key,
      [internal.valueSchemaSym]: schemas.value,
      [internal.keyOfSym]: schemas.keyOf,
    }) as unknown as ShardMapTag<Self, Key, Value, Error>;
  };