@x12i/memorix-abstraction
v1.32.0
Published
Memorix abstraction and unification tier — map concrete object types to abstract types and read/write unified records
Readme
@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-abstractionQuick 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-tasksCatalox catalogs
memorix-abstract-type-descriptors— abstract types + abstract property definitionsmemorix-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.
