@schemic/core 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +212 -0
- package/lib/authoring.d.ts +89 -0
- package/lib/authoring.js +187 -0
- package/lib/authoring.js.map +1 -0
- package/lib/chunk-C4D6JWSE.js +54 -0
- package/lib/chunk-C4D6JWSE.js.map +1 -0
- package/lib/chunk-T23RNU7G.js +304 -0
- package/lib/chunk-T23RNU7G.js.map +1 -0
- package/lib/config-TIiKDd9t.d.ts +97 -0
- package/lib/config.d.ts +1 -0
- package/lib/config.js +8 -0
- package/lib/config.js.map +1 -0
- package/lib/driver-Dh5hLKHm.d.ts +736 -0
- package/lib/driver.d.ts +150 -0
- package/lib/driver.js +47 -0
- package/lib/driver.js.map +1 -0
- package/lib/index.d.ts +84 -0
- package/lib/index.js +794 -0
- package/lib/index.js.map +1 -0
- package/lib/testing.d.ts +29 -0
- package/lib/testing.js +111 -0
- package/lib/testing.js.map +1 -0
- package/package.json +93 -0
- package/src/authoring.ts +304 -0
- package/src/cli-kit/config.ts +179 -0
- package/src/cli-kit/diff.ts +230 -0
- package/src/cli-kit/filter.ts +159 -0
- package/src/cli-kit/merge.ts +380 -0
- package/src/cli-kit/meta.ts +123 -0
- package/src/cli-kit/pager.ts +42 -0
- package/src/cli-kit/schema.ts +186 -0
- package/src/cli-kit/style.ts +24 -0
- package/src/config.ts +51 -0
- package/src/connection.ts +78 -0
- package/src/driver/driver.ts +300 -0
- package/src/driver/index.ts +31 -0
- package/src/driver/portable-ir.ts +51 -0
- package/src/driver/portable.ts +124 -0
- package/src/driver/sdk.ts +66 -0
- package/src/index.ts +145 -0
- package/src/kind/index.ts +28 -0
- package/src/kind/plan.ts +390 -0
- package/src/kind/registry.ts +225 -0
- package/src/testing.ts +181 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// The portable FIELD SUBSTRATE — the dialect-independent field model the kind registry builds on.
|
|
2
|
+
//
|
|
3
|
+
// core-v2 (the kind-registry flip) retired the fixed-slot `PortableDb` (tables/functions/accesses/
|
|
4
|
+
// natives) + the per-slot object types (`PortableTable`/`PortableEvent`/…): a schema is now a flat
|
|
5
|
+
// `PortableObject[]` of OPEN kinds (see ../kind), each driver owning its own portable shape. What
|
|
6
|
+
// stays in core is the SUBSTRATE every kind composes — a field's structured {@link PortableType} +
|
|
7
|
+
// its clauses — so a table kind (Postgres `PgTablePortable`, …) nests `PortableField`s and the
|
|
8
|
+
// cross-driver field model + Zod drop-in keep working.
|
|
9
|
+
//
|
|
10
|
+
// Field/permission CLAUSES (default/value/assert/index spec/…) are carried verbatim as dialect
|
|
11
|
+
// expression strings: they don't port across dialects, so a foreign driver honors the ones it can and
|
|
12
|
+
// surfaces the rest as a documented capability gap. Only the keystone (the TYPE) is fully portable.
|
|
13
|
+
|
|
14
|
+
import type { PortableType } from "./portable";
|
|
15
|
+
|
|
16
|
+
/** CRUD permissions — each a boolean (FULL/NONE) or a dialect WHERE-expression string (carried verbatim). */
|
|
17
|
+
export interface PortablePermissions {
|
|
18
|
+
select?: boolean | string;
|
|
19
|
+
create?: boolean | string;
|
|
20
|
+
update?: boolean | string;
|
|
21
|
+
delete?: boolean | string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** A field in the portable substrate: a structured {@link PortableType} + its dialect clauses (verbatim). */
|
|
25
|
+
export interface PortableField {
|
|
26
|
+
name: string;
|
|
27
|
+
type: PortableType;
|
|
28
|
+
flexible?: boolean;
|
|
29
|
+
readonly?: boolean;
|
|
30
|
+
default?: string;
|
|
31
|
+
default_always?: boolean;
|
|
32
|
+
value?: string;
|
|
33
|
+
computed?: string;
|
|
34
|
+
assert?: string;
|
|
35
|
+
/**
|
|
36
|
+
* A field-level CHECK constraint (dialect boolean expression, carried verbatim). DISTINCT from
|
|
37
|
+
* `assert`: that is Surreal's `ASSERT`; this is the SQL `CHECK` a driver like Postgres emits. A
|
|
38
|
+
* driver maps whichever of the two it supports and surfaces the other as a capability gap.
|
|
39
|
+
*/
|
|
40
|
+
check?: string;
|
|
41
|
+
comment?: string;
|
|
42
|
+
/** Referential action(s) on a foreign reference. A driver honors the actions it supports. */
|
|
43
|
+
reference?: { on_delete?: string; on_update?: string };
|
|
44
|
+
/**
|
|
45
|
+
* Auto-generated identity column — `GENERATED ALWAYS`/`BY DEFAULT AS IDENTITY`; a `serial`/
|
|
46
|
+
* auto-increment column maps here too. Absent → an ordinary column. Drivers without identity ignore it.
|
|
47
|
+
*/
|
|
48
|
+
identity?: "always" | "by-default";
|
|
49
|
+
permissions?: PortablePermissions;
|
|
50
|
+
table: string;
|
|
51
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// The PORTABLE TYPE MODEL — the keystone of multi-DB support (see docs/MULTI-DB-SPIKE.md).
|
|
2
|
+
//
|
|
3
|
+
// Today the Struct-IR carries a field's type as a SurrealQL type-expression STRING
|
|
4
|
+
// (`StructField.kind`, e.g. `option<int>`, `array<record<user>, 3>`). That string is a dialect leak:
|
|
5
|
+
// equality and rendering both have to understand SurrealQL grammar. This module defines the
|
|
6
|
+
// dialect-INDEPENDENT replacement — a structured type that every driver translates to/from.
|
|
7
|
+
//
|
|
8
|
+
// STATUS (Milestone 1): defined but NOT yet wired into `StructField`. Milestone 2 replaces
|
|
9
|
+
// `kind: string` with `type: PortableType`, makes `inferField` (src/ddl.ts) produce it, and flips
|
|
10
|
+
// diff equality to a structured deep-compare over the normalized IR. Until then this is the target
|
|
11
|
+
// shape, kept in code so the Surreal driver's `emitType`/`parseType` can be built against it.
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The portable scalar set — the common denominator every driver maps to a concrete column type and
|
|
15
|
+
* back. A driver MAY reject scalars it cannot represent (and authoring can pin a richer DB-native
|
|
16
|
+
* type via `{ t: "native" }`). Names are lowercase and dialect-neutral.
|
|
17
|
+
*/
|
|
18
|
+
export type ScalarName =
|
|
19
|
+
| "any"
|
|
20
|
+
| "bool"
|
|
21
|
+
| "string"
|
|
22
|
+
| "int"
|
|
23
|
+
| "float"
|
|
24
|
+
| "decimal"
|
|
25
|
+
| "number" // a numeric whose int/float/decimal-ness is unconstrained
|
|
26
|
+
| "datetime"
|
|
27
|
+
| "duration"
|
|
28
|
+
| "uuid"
|
|
29
|
+
| "bytes"
|
|
30
|
+
| "null"; // the unit type of SQL NULL / Surreal `null` (distinct from `option`'s absence)
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A dialect-independent field type. Drivers translate this to their own type expression (`emitType`)
|
|
34
|
+
* and parse their introspection back into it (`parseType`). `option` and `nullable` are ORTHOGONAL
|
|
35
|
+
* and BOTH equality-relevant — see the note on `nullable` below; never collapse them.
|
|
36
|
+
*/
|
|
37
|
+
export type PortableType =
|
|
38
|
+
/** A primitive scalar. */
|
|
39
|
+
| { t: "scalar"; name: ScalarName }
|
|
40
|
+
/** A literal value type, e.g. the `'active'` in `'active' | 'archived'`. */
|
|
41
|
+
| { t: "literal"; value: string | number | boolean }
|
|
42
|
+
/**
|
|
43
|
+
* The field may be ABSENT / NONE (Surreal `option<T>`; SQL "column omitted / has a DEFAULT").
|
|
44
|
+
* Orthogonal to `nullable`.
|
|
45
|
+
*/
|
|
46
|
+
| { t: "option"; inner: PortableType }
|
|
47
|
+
/**
|
|
48
|
+
* The field may be NULL (Surreal `T | null`; SQL `NULL` vs `NOT NULL`). Orthogonal to `option`:
|
|
49
|
+
* `option<T>`, `T | null`, and `option<T | null>` are THREE DISTINCT types. `normalize()` folds
|
|
50
|
+
* `nullable(option(X))` -> `option(nullable(X))` so `.optional().nullable()` ≡ `.nullish()`.
|
|
51
|
+
*/
|
|
52
|
+
| { t: "nullable"; inner: PortableType }
|
|
53
|
+
/** An ordered, possibly length-bounded list. */
|
|
54
|
+
| { t: "array"; elem: PortableType; size?: number }
|
|
55
|
+
/** A set (distinct elements), possibly length-bounded. */
|
|
56
|
+
| { t: "set"; elem: PortableType; size?: number }
|
|
57
|
+
/** A discriminated/plain union. `normalize()` keeps `members` canonically sorted. */
|
|
58
|
+
| { t: "union"; members: PortableType[] }
|
|
59
|
+
/** A nested object/record literal. `flexible` allows undeclared keys (Surreal FLEXIBLE). */
|
|
60
|
+
| { t: "object"; fields: Record<string, PortableType>; flexible?: boolean }
|
|
61
|
+
/**
|
|
62
|
+
* A link to a row in one of `tables` (Surreal `record<a | b>`; SQL foreign key). The id-VALUE type
|
|
63
|
+
* is intentionally NOT modelled here — the DDL never encodes it; it lives App/Wire-side (TS-only).
|
|
64
|
+
*/
|
|
65
|
+
| { t: "record"; tables: string[] }
|
|
66
|
+
/** A geometry type (Surreal-native; PostGIS or unsupported elsewhere). */
|
|
67
|
+
| { t: "geometry"; kind: GeometryKind }
|
|
68
|
+
/** The bottom type (no value). */
|
|
69
|
+
| { t: "never" }
|
|
70
|
+
/**
|
|
71
|
+
* An escape hatch for a DB-specific type with no portable meaning (PG `tsvector`, etc.). Carries
|
|
72
|
+
* the owning driver `db` so a schema authored for one DB can't silently typecheck against another.
|
|
73
|
+
* `params` carries the type's parameters for parameterized natives — `numeric(p,s)`, `varchar(n)`,
|
|
74
|
+
* `timestamp(p)` — so a driver round-trips `numeric(10,2)` exactly. Order matters; ignored when empty.
|
|
75
|
+
*/
|
|
76
|
+
| { t: "native"; db: string; name: string; params?: (string | number)[] };
|
|
77
|
+
|
|
78
|
+
export type GeometryKind =
|
|
79
|
+
| "feature"
|
|
80
|
+
| "point"
|
|
81
|
+
| "line"
|
|
82
|
+
| "polygon"
|
|
83
|
+
| "multipoint"
|
|
84
|
+
| "multiline"
|
|
85
|
+
| "multipolygon"
|
|
86
|
+
| "collection";
|
|
87
|
+
|
|
88
|
+
// --- Constructors (ergonomic, and a single place to enforce the fold invariants) ----------------
|
|
89
|
+
|
|
90
|
+
export const scalar = (name: ScalarName): PortableType => ({
|
|
91
|
+
t: "scalar",
|
|
92
|
+
name,
|
|
93
|
+
});
|
|
94
|
+
export const literal = (value: string | number | boolean): PortableType => ({
|
|
95
|
+
t: "literal",
|
|
96
|
+
value,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
/** `option<T>` — but `option<any>` collapses to `any` (any already admits NONE), matching ddl.ts. */
|
|
100
|
+
export const option = (inner: PortableType): PortableType =>
|
|
101
|
+
inner.t === "scalar" && inner.name === "any" ? inner : { t: "option", inner };
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* `T | null` — with the fold rule `nullable(option(X))` -> `option(nullable(X))` so
|
|
105
|
+
* `.optional().nullable()` ≡ `.nullish()`, and `nullable(any)` collapses to `any`.
|
|
106
|
+
*/
|
|
107
|
+
export const nullable = (inner: PortableType): PortableType => {
|
|
108
|
+
if (inner.t === "scalar" && inner.name === "any") return inner;
|
|
109
|
+
if (inner.t === "option")
|
|
110
|
+
return { t: "option", inner: nullable(inner.inner) };
|
|
111
|
+
return { t: "nullable", inner };
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export const array = (elem: PortableType, size?: number): PortableType => ({
|
|
115
|
+
t: "array",
|
|
116
|
+
elem,
|
|
117
|
+
...(size !== undefined ? { size } : {}),
|
|
118
|
+
});
|
|
119
|
+
export const union = (members: PortableType[]): PortableType =>
|
|
120
|
+
members.length === 1 ? members[0] : { t: "union", members };
|
|
121
|
+
export const record = (tables: string[]): PortableType => ({
|
|
122
|
+
t: "record",
|
|
123
|
+
tables,
|
|
124
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// The NEUTRAL driver SDK — the public surface a driver package (@schemic/surrealdb, @schemic/postgres,
|
|
2
|
+
// …) consumes from `@schemic/core/driver`. It re-exports ONLY dialect-free building blocks: the
|
|
3
|
+
// Driver contract + registry, the portable IR types + constructors, and the config/diff types a
|
|
4
|
+
// driver's ops reference. It deliberately does NOT re-export any concrete driver (that would drag a
|
|
5
|
+
// dialect's whole tree into every consumer); the internal barrel (driver/index.ts) keeps those for
|
|
6
|
+
// core-internal relative imports.
|
|
7
|
+
|
|
8
|
+
// Types a driver's ops reference (Driver.connect/diff) — re-exported so a driver imports them from
|
|
9
|
+
// the one SDK entry rather than reaching into core's cli/* internals.
|
|
10
|
+
export type { ResolvedConfig } from "../cli-kit/config";
|
|
11
|
+
export type { Diff, DiffItem } from "../cli-kit/diff";
|
|
12
|
+
// Multi-connection: the primitive each driver wraps in its typed `<driver>Connection(...)` factory.
|
|
13
|
+
export {
|
|
14
|
+
type ConnectionConfigBase,
|
|
15
|
+
type ConnectionEntry,
|
|
16
|
+
type ConnectionInput,
|
|
17
|
+
connectionEntry,
|
|
18
|
+
type ResolveContext,
|
|
19
|
+
} from "../connection";
|
|
20
|
+
export type {
|
|
21
|
+
ApplyOptions,
|
|
22
|
+
Authored,
|
|
23
|
+
AuthoredDef,
|
|
24
|
+
ConnectionOverrides,
|
|
25
|
+
Driver,
|
|
26
|
+
EmitOptions,
|
|
27
|
+
MigrationDirection,
|
|
28
|
+
MigrationRecord,
|
|
29
|
+
MigrationStore,
|
|
30
|
+
ShadowCapability,
|
|
31
|
+
Statement,
|
|
32
|
+
} from "./driver";
|
|
33
|
+
export { driverNames, getDriver, registerDriver } from "./driver";
|
|
34
|
+
export type { GeometryKind, PortableType, ScalarName } from "./portable";
|
|
35
|
+
export {
|
|
36
|
+
array,
|
|
37
|
+
literal,
|
|
38
|
+
nullable,
|
|
39
|
+
option,
|
|
40
|
+
record,
|
|
41
|
+
scalar,
|
|
42
|
+
union,
|
|
43
|
+
} from "./portable";
|
|
44
|
+
// The field SUBSTRATE every kind composes (the fixed-slot object types are retired — a driver owns
|
|
45
|
+
// its own portable shapes; see ../kind).
|
|
46
|
+
export type { PortableField, PortablePermissions } from "./portable-ir";
|
|
47
|
+
// The KIND REGISTRY (core-v2) — what a driver builds its `registry`/`explode`/`introspectAll` against.
|
|
48
|
+
export {
|
|
49
|
+
type Definable,
|
|
50
|
+
emitKinds,
|
|
51
|
+
introspectKinds,
|
|
52
|
+
type KindEngine,
|
|
53
|
+
type KindPlan,
|
|
54
|
+
KindRegistry,
|
|
55
|
+
type KindSnapshot,
|
|
56
|
+
type KindSpec,
|
|
57
|
+
lowerSchema,
|
|
58
|
+
type OrderNode,
|
|
59
|
+
orderObjects,
|
|
60
|
+
buildKindDiff,
|
|
61
|
+
planKinds,
|
|
62
|
+
type PortableObject,
|
|
63
|
+
type Ref,
|
|
64
|
+
snapshotKinds,
|
|
65
|
+
snapshotObjects,
|
|
66
|
+
} from "../kind";
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @schemic/core — the dialect-neutral engine for Schemic.
|
|
3
|
+
*
|
|
4
|
+
* The Driver contract + the portable schema IR + the neutral migration/diff/snapshot/CLI-support
|
|
5
|
+
* engine. NO database dialect and NO authoring surface (`s.*`/`defineTable`) live here — those ship
|
|
6
|
+
* in driver packages (`@schemic/surrealdb`, `@schemic/postgres`). `@schemic/cli` and the drivers all
|
|
7
|
+
* build on the surface re-exported below.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// --- neutral config ---------------------------------------------------------------------------
|
|
11
|
+
export {
|
|
12
|
+
loadConfig,
|
|
13
|
+
loadProject,
|
|
14
|
+
makeJiti,
|
|
15
|
+
type ResolvedConfig,
|
|
16
|
+
resolveConnectionConfig,
|
|
17
|
+
} from "./cli-kit/config";
|
|
18
|
+
// --- neutral diff display ---------------------------------------------------------------------
|
|
19
|
+
export {
|
|
20
|
+
type Diff,
|
|
21
|
+
type DiffItem,
|
|
22
|
+
formatDiff,
|
|
23
|
+
formatItems,
|
|
24
|
+
formatPatch,
|
|
25
|
+
isEmptyDiff,
|
|
26
|
+
summarizeKinds,
|
|
27
|
+
tokenDiff,
|
|
28
|
+
} from "./cli-kit/diff";
|
|
29
|
+
// --- neutral filtering ------------------------------------------------------------------------
|
|
30
|
+
export {
|
|
31
|
+
type Filter,
|
|
32
|
+
type FilterOpts,
|
|
33
|
+
filterKinds,
|
|
34
|
+
inCat,
|
|
35
|
+
intersectKinds,
|
|
36
|
+
kindFlags,
|
|
37
|
+
mergeStored,
|
|
38
|
+
parseFilter,
|
|
39
|
+
passesFilter,
|
|
40
|
+
} from "./cli-kit/filter";
|
|
41
|
+
// --- pull plan + magicast merge (neutral codegen support) -------------------------------------
|
|
42
|
+
export {
|
|
43
|
+
actionLabel,
|
|
44
|
+
applyPull,
|
|
45
|
+
type LocalOnly,
|
|
46
|
+
lineDiff,
|
|
47
|
+
type MergeOptions,
|
|
48
|
+
type MergeResult,
|
|
49
|
+
mergeUnits,
|
|
50
|
+
type PullFilePlan,
|
|
51
|
+
type PullPlan,
|
|
52
|
+
type RenderedUnit,
|
|
53
|
+
unifiedDiff,
|
|
54
|
+
} from "./cli-kit/merge";
|
|
55
|
+
// --- snapshot + migration metadata ------------------------------------------------------------
|
|
56
|
+
export {
|
|
57
|
+
checksum,
|
|
58
|
+
EMPTY_STORED,
|
|
59
|
+
listMigrations,
|
|
60
|
+
type Migration,
|
|
61
|
+
readSnapshot,
|
|
62
|
+
type StoredSnapshot,
|
|
63
|
+
slug,
|
|
64
|
+
timestamp,
|
|
65
|
+
writeSnapshot,
|
|
66
|
+
} from "./cli-kit/meta";
|
|
67
|
+
// --- pager + style ----------------------------------------------------------------------------
|
|
68
|
+
export { pipeThroughPager, resolvePager } from "./cli-kit/pager";
|
|
69
|
+
// --- jiti schema loader (loads a project's authored schema files agnostically) ----------------
|
|
70
|
+
export {
|
|
71
|
+
type AnyTable,
|
|
72
|
+
duplicateTables,
|
|
73
|
+
existingTables,
|
|
74
|
+
loadDefs,
|
|
75
|
+
loadSchemas,
|
|
76
|
+
scanLocalEntities,
|
|
77
|
+
} from "./cli-kit/schema";
|
|
78
|
+
export { colorEnabled, fail, ok, plural, style } from "./cli-kit/style";
|
|
79
|
+
// --- multi-connection contract (docs/MULTI-CONNECTION.md) -------------------------------------
|
|
80
|
+
export {
|
|
81
|
+
type ConnectionConfigBase,
|
|
82
|
+
type ConnectionEntry,
|
|
83
|
+
type ConnectionInput,
|
|
84
|
+
connectionEntry,
|
|
85
|
+
isConnectionEntry,
|
|
86
|
+
type ResolveContext,
|
|
87
|
+
type ResolvedConnectionHandle,
|
|
88
|
+
} from "./connection";
|
|
89
|
+
// --- driver contract + registry ---------------------------------------------------------------
|
|
90
|
+
export {
|
|
91
|
+
type ApplyOptions,
|
|
92
|
+
type Authored,
|
|
93
|
+
type AuthoredDef,
|
|
94
|
+
type ConnectionOverrides,
|
|
95
|
+
type Driver,
|
|
96
|
+
driverNames,
|
|
97
|
+
type EmitOptions,
|
|
98
|
+
getDriver,
|
|
99
|
+
type MigrationDirection,
|
|
100
|
+
type MigrationRecord,
|
|
101
|
+
type MigrationStore,
|
|
102
|
+
registerDriver,
|
|
103
|
+
type ShadowCapability,
|
|
104
|
+
type Statement,
|
|
105
|
+
} from "./driver/driver";
|
|
106
|
+
// --- portable schema IR -----------------------------------------------------------------------
|
|
107
|
+
export {
|
|
108
|
+
array,
|
|
109
|
+
literal,
|
|
110
|
+
nullable,
|
|
111
|
+
option,
|
|
112
|
+
type PortableType,
|
|
113
|
+
record,
|
|
114
|
+
type ScalarName,
|
|
115
|
+
scalar,
|
|
116
|
+
union,
|
|
117
|
+
} from "./driver/portable";
|
|
118
|
+
// (the Statement-level portable-diff is retired — superseded by the kind registry's
|
|
119
|
+
// planKinds/buildKindDiff in ./kind/plan.ts.)
|
|
120
|
+
export type {
|
|
121
|
+
PortableField,
|
|
122
|
+
PortablePermissions,
|
|
123
|
+
} from "./driver/portable-ir";
|
|
124
|
+
// --- kind registry (core-v2) — generic, open object kinds (docs/kind-registry.md) -------------
|
|
125
|
+
export {
|
|
126
|
+
buildKindDiff,
|
|
127
|
+
type Definable,
|
|
128
|
+
emitKinds,
|
|
129
|
+
introspectKinds,
|
|
130
|
+
type KindDisplay,
|
|
131
|
+
type KindEngine,
|
|
132
|
+
type KindPlan,
|
|
133
|
+
KindRegistry,
|
|
134
|
+
type KindSnapshot,
|
|
135
|
+
type KindSpec,
|
|
136
|
+
lowerSchema,
|
|
137
|
+
type OrderNode,
|
|
138
|
+
orderObjects,
|
|
139
|
+
type PortableObject,
|
|
140
|
+
planKinds,
|
|
141
|
+
type Ref,
|
|
142
|
+
type ResolvedDisplay,
|
|
143
|
+
snapshotKinds,
|
|
144
|
+
snapshotObjects,
|
|
145
|
+
} from "./kind";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// The KIND REGISTRY subsystem (core-v2) — the generic, open replacement for the fixed object-kind
|
|
2
|
+
// slots. See ./registry.ts (the primitive + per-driver registry) and ./plan.ts (the kind-blind
|
|
3
|
+
// migration spine + cross-kind dependency ordering). Additive: the fixed-slot `Driver`/`PortableDb`
|
|
4
|
+
// path is untouched while kinds migrate onto this one (docs/kind-registry.md §8).
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
buildKindDiff,
|
|
8
|
+
emitKinds,
|
|
9
|
+
introspectKinds,
|
|
10
|
+
type KindPlan,
|
|
11
|
+
type KindSnapshot,
|
|
12
|
+
lowerSchema,
|
|
13
|
+
type OrderNode,
|
|
14
|
+
orderObjects,
|
|
15
|
+
planKinds,
|
|
16
|
+
snapshotKinds,
|
|
17
|
+
snapshotObjects,
|
|
18
|
+
} from "./plan";
|
|
19
|
+
export {
|
|
20
|
+
type Definable,
|
|
21
|
+
type KindDisplay,
|
|
22
|
+
type KindEngine,
|
|
23
|
+
KindRegistry,
|
|
24
|
+
type KindSpec,
|
|
25
|
+
type PortableObject,
|
|
26
|
+
type Ref,
|
|
27
|
+
type ResolvedDisplay,
|
|
28
|
+
} from "./registry";
|