npm.io
1.32.0 • Published 2 weeks agoCLI

@x12i/memorix-abstraction

Licence
Version
1.32.0
Deps
5
Size
115 kB
Vulns
0
Weekly
0

@x12i/memorix-abstraction

Memorix abstraction and unification tier — map concrete, source-specific object types and their properties to source-neutral abstract types, then read and write unified records across all bound sources.

Role in the ecosystem

Concern Package
Concrete object types, lists, writes @x12i/memorix-descriptors, @x12i/memorix-retrieval, @x12i/memorix-writer
Observed schema + object-type CRUD @x12i/memorix-schema
Abstract types, bindings, unified reads/writes @x12i/memorix-abstraction

Install

npm install @x12i/memorix-abstraction

Quick start

import { createMemorixAbstractionAdmin, fetchAbstractList } from "@x12i/memorix-abstraction";
import { createMemorixRetrievalStackFromEnv } from "@x12i/memorix-retrieval";

const admin = createMemorixAbstractionAdmin(catalox);

await admin.registerAbstractType({
  id: "abstract:task",
  abstractType: "task",
  properties: {
    id: { label: "ID", valueType: "string", required: true },
    title: { label: "Title", valueType: "string", required: true },
    status: { label: "Status", valueType: "enum", enumValues: ["open", "done"] },
  },
  identity: { abstractIdProperty: "id" },
});

await admin.bindObjectTypeToAbstract({
  id: "bind:msft-todo-tasks->task",
  abstractType: "task",
  objectType: "msft-todo-tasks",
  sourceLabel: "Microsoft To-Do",
  writeDescriptorId: "msft-todo-task-write",
  propertyMap: {
    id: { kind: "path", path: "data.externalId" },
    title: { kind: "path", path: "data.title" },
    status: {
      kind: "enum",
      path: "data.status",
      map: { notStarted: "open", completed: "done" },
      reverseMap: { open: "notStarted", done: "completed" },
    },
  },
});

const { cataloxBound, client } = await createMemorixRetrievalStackFromEnv();
const list = await fetchAbstractList(client, cataloxBound, {
  abstractType: "task",
  page: { limit: 50, offset: 0 },
});

CLI

npx memorix-abstraction validate
npx memorix-abstraction list
npx memorix-abstraction bindings --abstract-type task
npx memorix-abstraction describe --abstract-type task
npx memorix-abstraction suggest --abstract-type task --object-type msft-todo-tasks

Catalox catalogs

  • memorix-abstract-type-descriptors — abstract types + abstract property definitions
  • memorix-abstract-bindings — concrete object type → abstract type bindings + property maps

Exports

Import Purpose
@x12i/memorix-abstraction Admin, runtime, transforms, suggest
@x12i/memorix-abstraction/types Request/response types
@x12i/memorix-abstraction/catalog Catalox catalog id constants
@x12i/memorix-abstraction/http registerMemorixAbstractionRoutes(app, stack)
@x12i/memorix-abstraction/stack createMemorixAbstractionStackFromEnv()
@x12i/memorix-descriptors/abstraction Descriptor + record types
@x12i/memorix-descriptors/validation/abstraction Descriptor validators

See docs/ABSTRACTION-TIER.md for the full client contract.

HTTP API

Mount in Fastify hosts (schema-ui, abstract-ui):

import { registerMemorixAbstractionRoutes } from "@x12i/memorix-abstraction/http";
import { createMemorixAbstractionStackFromEnv } from "@x12i/memorix-abstraction/stack";

const stack = await createMemorixAbstractionStackFromEnv();
registerMemorixAbstractionRoutes(app, stack, { prefix: "/api/abstraction" });

Routes: GET /types, GET /types/:type, GET /types/:type/bindings, GET /types/:type/records, POST /validate, GET /snapshot.