@dudousxd/nestjs-catalog 0.32.0 → 0.34.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/dist/catalog.store.d.ts +177 -1
- package/dist/catalog.store.js +59 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
package/dist/catalog.store.d.ts
CHANGED
|
@@ -344,6 +344,70 @@ export interface CatalogReadStore {
|
|
|
344
344
|
*/
|
|
345
345
|
read(type: CatalogObjectTypeDef, fields: string[], query: CatalogReadQuery): Promise<CatalogReadResult>;
|
|
346
346
|
listSnapshots?(type: CatalogObjectTypeDef): Promise<SnapshotRef[]>;
|
|
347
|
+
/**
|
|
348
|
+
* The type's snapshots **that still hold rows**, newest first, with the
|
|
349
|
+
* tombstones excluded by the statement rather than by the caller.
|
|
350
|
+
*
|
|
351
|
+
* ## Why this is a method and not a `.filter()` on {@link listSnapshots}
|
|
352
|
+
*
|
|
353
|
+
* Because `listSnapshots` is bounded, and a bound applied before a predicate
|
|
354
|
+
* is a different question from a bound applied after it. A caller that lists
|
|
355
|
+
* the newest N *records* and then drops the tombstones among them is holding
|
|
356
|
+
* the live snapshots **of that window**, not the newest N live snapshots — and
|
|
357
|
+
* since a tombstone is what a dropped snapshot leaves behind, a type that has
|
|
358
|
+
* been swept for long enough has a window made almost entirely of them. Past
|
|
359
|
+
* N tombstones the filtered list is empty, and empty is indistinguishable from
|
|
360
|
+
* "nothing to do" to every caller that has ever asked this question.
|
|
361
|
+
*
|
|
362
|
+
* The ClickHouse adapter learned this first and put `dropped_at IS NULL`
|
|
363
|
+
* inside the statement for `pruneSnapshots`; this is that lesson given a name
|
|
364
|
+
* on the interface, so the next adapter inherits it instead of rediscovering
|
|
365
|
+
* it. See `listSnapshotsWithRows` in `@dudousxd/nestjs-catalog-store-clickhouse`.
|
|
366
|
+
*
|
|
367
|
+
* ## What the bound means here
|
|
368
|
+
*
|
|
369
|
+
* `limit` bounds the **live** snapshots, so a result shorter than it is the
|
|
370
|
+
* complete answer and a result exactly at it means there may be more — and,
|
|
371
|
+
* unlike the same signal on `listSnapshots`, that is a real finding rather
|
|
372
|
+
* than an artefact of how long the type has been retained: a type with more
|
|
373
|
+
* live snapshots than the window is a type whose retention is not keeping up.
|
|
374
|
+
* A caller that needs to act on completeness should read the length back
|
|
375
|
+
* against the `limit` it passed.
|
|
376
|
+
*
|
|
377
|
+
* ## Optional, and the fallback is worth stating
|
|
378
|
+
*
|
|
379
|
+
* A caller that finds it absent has `listSnapshots` and the filter-after-bound
|
|
380
|
+
* problem above. It should degrade to that — the answer is a *prefix* of the
|
|
381
|
+
* truth, never a wrong answer about what it did see — but it must say that the
|
|
382
|
+
* answer may be partial rather than reporting a short list as a complete one.
|
|
383
|
+
*/
|
|
384
|
+
listSnapshotsWithRows?(type: CatalogObjectTypeDef, limit?: number): Promise<SnapshotRef[]>;
|
|
385
|
+
/**
|
|
386
|
+
* One snapshot of one type, by id, tombstone included — or `undefined` when
|
|
387
|
+
* this type never had a load by that name.
|
|
388
|
+
*
|
|
389
|
+
* ## Why a lookup, when a list already contains it
|
|
390
|
+
*
|
|
391
|
+
* Because every list here is bounded and this question is not about recency.
|
|
392
|
+
* A caller holding an id got it from somewhere that outlives a window — a
|
|
393
|
+
* `catalog_connector_run` row, a durable step's checkpoint, a person pasting
|
|
394
|
+
* from a screen — and answering it by scanning the newest N records turns
|
|
395
|
+
* "this snapshot is older than N loads" into "there is no such snapshot".
|
|
396
|
+
* Those two sentences send a reader to entirely different places, and the
|
|
397
|
+
* second one is a lie a scan cannot know it is telling.
|
|
398
|
+
*
|
|
399
|
+
* It is scoped to a type, which is what separates it from {@link
|
|
400
|
+
* CatalogSnapshotLookupStore.locateSnapshot}: that one exists to answer for an
|
|
401
|
+
* id whose type is *unknown*, and it costs a scan across every type to do it.
|
|
402
|
+
* This is the cheap, exact read a caller that already knows the type wants,
|
|
403
|
+
* and it is the one an eviction uses to find the row count and the archive ref
|
|
404
|
+
* it is about to check.
|
|
405
|
+
*
|
|
406
|
+
* A tombstone comes back rather than reading as absent, for the same reason it
|
|
407
|
+
* stays in `listSnapshots`: a caller that could not see it would report a
|
|
408
|
+
* dropped snapshot as one that never existed.
|
|
409
|
+
*/
|
|
410
|
+
findSnapshot?(type: CatalogObjectTypeDef, snapshotId: string): Promise<SnapshotRef | undefined>;
|
|
347
411
|
}
|
|
348
412
|
/**
|
|
349
413
|
* A store that can hand over the whole of one snapshot, a row at a time.
|
|
@@ -402,7 +466,22 @@ export interface CatalogSnapshotStreamStore extends CatalogReadStore {
|
|
|
402
466
|
* consumer's `for await` owns the resource from the first pull and an
|
|
403
467
|
* abandoned iteration runs the generator's `finally`.
|
|
404
468
|
*/
|
|
405
|
-
streamSnapshot(type: CatalogObjectTypeDef, fields: string[], snapshotId: string): AsyncIterable<Record<string, unknown>>;
|
|
469
|
+
streamSnapshot(type: CatalogObjectTypeDef, fields: string[], snapshotId: string, options?: SnapshotStreamOptions): AsyncIterable<Record<string, unknown>>;
|
|
470
|
+
}
|
|
471
|
+
/** What a snapshot stream may be asked for beside the properties. */
|
|
472
|
+
export interface SnapshotStreamOptions {
|
|
473
|
+
/**
|
|
474
|
+
* Also key every row by {@link CATALOG_PROVENANCE_COLUMNS}.
|
|
475
|
+
*
|
|
476
|
+
* **A store that cannot supply them must throw rather than omit them.** The
|
|
477
|
+
* caller this exists for is the snapshot archiver, and it cannot tell a store
|
|
478
|
+
* that declined from a snapshot whose provenance happens to be absent: a
|
|
479
|
+
* missing key encodes as a null, a null verifies against a null, and the
|
|
480
|
+
* archive is complete, checksummed and silently stripped of the only columns a
|
|
481
|
+
* restore could not reconstruct. Silence is the one answer that is not
|
|
482
|
+
* available here.
|
|
483
|
+
*/
|
|
484
|
+
provenance?: boolean;
|
|
406
485
|
}
|
|
407
486
|
/** A store that can stream a whole snapshot. See {@link CatalogSnapshotStreamStore}. */
|
|
408
487
|
export declare function supportsSnapshotStreams(store: unknown): store is CatalogSnapshotStreamStore;
|
|
@@ -566,6 +645,51 @@ export interface CatalogWriteStore extends CatalogReadStore {
|
|
|
566
645
|
*/
|
|
567
646
|
currentSnapshot?(type: CatalogObjectTypeDef): Promise<SnapshotRef | undefined>;
|
|
568
647
|
}
|
|
648
|
+
/**
|
|
649
|
+
* A store that can write down where a snapshot's bytes went.
|
|
650
|
+
*
|
|
651
|
+
* ## Why this is a separate capability and not a third argument to `dropSnapshot`
|
|
652
|
+
*
|
|
653
|
+
* Because an adapter that cannot do it must be able to *say so*, and an ignored
|
|
654
|
+
* optional argument says nothing. {@link SnapshotArchiveRef} was declared with
|
|
655
|
+
* nothing writing it — the field exists on {@link SnapshotRef}, and the only
|
|
656
|
+
* consumer of it today is a source refusing a dropped snapshot with the sentence
|
|
657
|
+
* "a verified copy of it was written to …". That sentence is either true or it
|
|
658
|
+
* is the most misleading thing in the codebase, and which one it is depends
|
|
659
|
+
* entirely on whether the drop that made the tombstone also recorded the
|
|
660
|
+
* archive.
|
|
661
|
+
*
|
|
662
|
+
* So an eviction — verify an archive, then delete the rows — must refuse to run
|
|
663
|
+
* against a store that cannot hold the ref, rather than deleting rows and
|
|
664
|
+
* leaving a tombstone that reports *no copy of it was recorded anywhere*. A
|
|
665
|
+
* `dropSnapshot(type, id, { archive })` whose third argument an older adapter
|
|
666
|
+
* silently drops produces exactly that lie; a capability the caller can test for
|
|
667
|
+
* produces a refusal.
|
|
668
|
+
*
|
|
669
|
+
* ## The ordering this exists to make possible
|
|
670
|
+
*
|
|
671
|
+
* Recorded **before** the rows go, never after. A crash between the two leaves a
|
|
672
|
+
* snapshot that has an archive and still has its rows, which is a legal state
|
|
673
|
+
* (see {@link SnapshotArchiveRef}: "`archive` only — copied, not moved") and is
|
|
674
|
+
* repaired by running the eviction again. The reverse ordering leaves rows
|
|
675
|
+
* deleted and nothing saying where they went, which is the one state in this
|
|
676
|
+
* design that no later operation can repair.
|
|
677
|
+
*/
|
|
678
|
+
export interface CatalogSnapshotArchiveStore extends CatalogWriteStore {
|
|
679
|
+
/**
|
|
680
|
+
* Attach `archive` to a snapshot's record, replacing any previous one.
|
|
681
|
+
*
|
|
682
|
+
* Idempotent, so a retried eviction re-records rather than duplicating. It
|
|
683
|
+
* must refuse a snapshot it has no record of: attaching an archive to nothing
|
|
684
|
+
* would report a verified copy of a load this store never saw.
|
|
685
|
+
*
|
|
686
|
+
* It says nothing about whether the rows are still here — that is
|
|
687
|
+
* {@link SnapshotRef.droppedAt}, and the two are deliberately independent.
|
|
688
|
+
*/
|
|
689
|
+
recordSnapshotArchive(type: CatalogObjectTypeDef, snapshotId: string, archive: SnapshotArchiveRef): Promise<void>;
|
|
690
|
+
}
|
|
691
|
+
/** A store that can record an archive on a snapshot. See {@link CatalogSnapshotArchiveStore}. */
|
|
692
|
+
export declare function supportsSnapshotArchiveRecords(store: unknown): store is CatalogSnapshotArchiveStore;
|
|
569
693
|
/** What a carry-forward did. */
|
|
570
694
|
export interface CarryForwardResult {
|
|
571
695
|
/**
|
|
@@ -654,6 +778,58 @@ export interface CatalogMergeStore extends CatalogWriteStore {
|
|
|
654
778
|
export declare const CATALOG_RESERVED_COLUMNS: readonly ["_snapshot_id", "_principal_id", "_loaded_at", "_batch", "_row"];
|
|
655
779
|
export type CatalogReservedColumn = (typeof CATALOG_RESERVED_COLUMNS)[number];
|
|
656
780
|
export declare function isReservedColumn(column: string): boolean;
|
|
781
|
+
/**
|
|
782
|
+
* The two reserved columns that outlive the load that wrote them.
|
|
783
|
+
*
|
|
784
|
+
* ## The question this answers, and it was asked of all five
|
|
785
|
+
*
|
|
786
|
+
* Not "which columns are read after a commit" — that question has a longer
|
|
787
|
+
* answer than it looks and it is the wrong one. The question a copy of a
|
|
788
|
+
* snapshot has to answer is narrower: **which columns does a later load consult,
|
|
789
|
+
* such that a copy without them changes what that load produces?** A copy has to
|
|
790
|
+
* carry exactly those, and one that carries more is a cost with no buyer.
|
|
791
|
+
*
|
|
792
|
+
* - **`_principal_id` and `_loaded_at`, yes.** {@link CatalogMergeStore.carryForward}
|
|
793
|
+
* reads both off the snapshot it merges against and copies them across
|
|
794
|
+
* untouched, deliberately: a carried row is not a new load of that row, so
|
|
795
|
+
* restamping them would erase the one thing they are good for, which is saying
|
|
796
|
+
* when a value last actually moved and who moved it. They are the only two
|
|
797
|
+
* whose loss *propagates* — every later incremental snapshot inherits whatever
|
|
798
|
+
* a restore put there, and inherits it forever.
|
|
799
|
+
* - **`_batch`, no — though it is not true that nothing reads it after a
|
|
800
|
+
* commit, and an earlier draft of this list said so.** Two adapters read a
|
|
801
|
+
* committed snapshot's `_batch`, both in ClickHouse: its `read()` uses
|
|
802
|
+
* `(_batch, _row)` as the default row order, and its `dropSnapshot` selects
|
|
803
|
+
* the distinct batches present in order to drop one partition each. Neither
|
|
804
|
+
* makes it worth copying. The ordering is a *natural* order the interface
|
|
805
|
+
* explicitly does not promise — the shared store contract says so where it
|
|
806
|
+
* sorts explicitly, precisely because the two engines disagree about it — and
|
|
807
|
+
* the partition enumeration is documented as making no assumption about which
|
|
808
|
+
* values are there, so it is correct for any set including a restore that
|
|
809
|
+
* flattened everything to one batch.
|
|
810
|
+
*
|
|
811
|
+
* What matters here is the narrower question, and the answer to that is clean:
|
|
812
|
+
* **no merge reads it.** `carryForward` joins the previous snapshot on its
|
|
813
|
+
* primary key and copies its properties; its own `_batch` predicate applies
|
|
814
|
+
* only to the snapshot being built, where it stops the statement feeding on its
|
|
815
|
+
* own output. The `-1` marker is a record that a merge happened, never an input
|
|
816
|
+
* to the next one. And the write path could not take it back regardless:
|
|
817
|
+
* {@link CatalogWriteStore.write} refuses a negative batch by name, so the one
|
|
818
|
+
* value in the column that carries information is the one value the only
|
|
819
|
+
* restore seam rejects.
|
|
820
|
+
* - **`_snapshot_id`, no.** One value for the whole snapshot, so a per-row copy
|
|
821
|
+
* is N copies of a string the copy is already named after.
|
|
822
|
+
* - **`_row`, no.** The order, not a value. A copy that preserves the order
|
|
823
|
+
* preserves everything the column carries; the numbers themselves are an
|
|
824
|
+
* engine's auto-increment and are not stable across a rewrite anyway.
|
|
825
|
+
*
|
|
826
|
+
* Kept here rather than in the archiver that needed it, because it is a fact
|
|
827
|
+
* about the store interface — about which columns {@link
|
|
828
|
+
* CatalogMergeStore.carryForward} reads — and anything else that copies a
|
|
829
|
+
* snapshot needs the same answer.
|
|
830
|
+
*/
|
|
831
|
+
export declare const CATALOG_PROVENANCE_COLUMNS: readonly ["_principal_id", "_loaded_at"];
|
|
832
|
+
export type CatalogProvenanceColumn = (typeof CATALOG_PROVENANCE_COLUMNS)[number];
|
|
657
833
|
/**
|
|
658
834
|
* The whole naming rule, which used to be written out here.
|
|
659
835
|
*
|
package/dist/catalog.store.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CATALOG_STORE = exports.CatalogColumnCollisionError = exports.UnsafeIdentifierError = exports.physicalColumn = exports.outputAlias = exports.isSafeIdentifier = exports.assertSafeIdentifier = exports.CATALOG_RESERVED_COLUMNS = exports.CATALOG_SNAPSHOT_MODES = void 0;
|
|
3
|
+
exports.CATALOG_STORE = exports.CatalogColumnCollisionError = exports.UnsafeIdentifierError = exports.physicalColumn = exports.outputAlias = exports.isSafeIdentifier = exports.assertSafeIdentifier = exports.CATALOG_PROVENANCE_COLUMNS = exports.CATALOG_RESERVED_COLUMNS = exports.CATALOG_SNAPSHOT_MODES = void 0;
|
|
4
4
|
exports.isCatalogStoreCapabilities = isCatalogStoreCapabilities;
|
|
5
5
|
exports.supportsObjectFilters = supportsObjectFilters;
|
|
6
6
|
exports.supportsSnapshotStreams = supportsSnapshotStreams;
|
|
7
7
|
exports.supportsSnapshotLookup = supportsSnapshotLookup;
|
|
8
|
+
exports.supportsSnapshotArchiveRecords = supportsSnapshotArchiveRecords;
|
|
8
9
|
exports.isReservedColumn = isReservedColumn;
|
|
9
10
|
exports.findColumnCollisions = findColumnCollisions;
|
|
10
11
|
exports.assertNoColumnCollisions = assertNoColumnCollisions;
|
|
@@ -67,6 +68,12 @@ function supportsSnapshotLookup(store) {
|
|
|
67
68
|
store !== null &&
|
|
68
69
|
typeof Reflect.get(store, 'locateSnapshot') === 'function');
|
|
69
70
|
}
|
|
71
|
+
/** A store that can record an archive on a snapshot. See {@link CatalogSnapshotArchiveStore}. */
|
|
72
|
+
function supportsSnapshotArchiveRecords(store) {
|
|
73
|
+
return (typeof store === 'object' &&
|
|
74
|
+
store !== null &&
|
|
75
|
+
typeof Reflect.get(store, 'recordSnapshotArchive') === 'function');
|
|
76
|
+
}
|
|
70
77
|
/**
|
|
71
78
|
* The columns a snapshot-emulating store adds to every object table.
|
|
72
79
|
*
|
|
@@ -92,6 +99,57 @@ exports.CATALOG_RESERVED_COLUMNS = [
|
|
|
92
99
|
function isReservedColumn(column) {
|
|
93
100
|
return exports.CATALOG_RESERVED_COLUMNS.some((reserved) => reserved === column.toLowerCase());
|
|
94
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* The two reserved columns that outlive the load that wrote them.
|
|
104
|
+
*
|
|
105
|
+
* ## The question this answers, and it was asked of all five
|
|
106
|
+
*
|
|
107
|
+
* Not "which columns are read after a commit" — that question has a longer
|
|
108
|
+
* answer than it looks and it is the wrong one. The question a copy of a
|
|
109
|
+
* snapshot has to answer is narrower: **which columns does a later load consult,
|
|
110
|
+
* such that a copy without them changes what that load produces?** A copy has to
|
|
111
|
+
* carry exactly those, and one that carries more is a cost with no buyer.
|
|
112
|
+
*
|
|
113
|
+
* - **`_principal_id` and `_loaded_at`, yes.** {@link CatalogMergeStore.carryForward}
|
|
114
|
+
* reads both off the snapshot it merges against and copies them across
|
|
115
|
+
* untouched, deliberately: a carried row is not a new load of that row, so
|
|
116
|
+
* restamping them would erase the one thing they are good for, which is saying
|
|
117
|
+
* when a value last actually moved and who moved it. They are the only two
|
|
118
|
+
* whose loss *propagates* — every later incremental snapshot inherits whatever
|
|
119
|
+
* a restore put there, and inherits it forever.
|
|
120
|
+
* - **`_batch`, no — though it is not true that nothing reads it after a
|
|
121
|
+
* commit, and an earlier draft of this list said so.** Two adapters read a
|
|
122
|
+
* committed snapshot's `_batch`, both in ClickHouse: its `read()` uses
|
|
123
|
+
* `(_batch, _row)` as the default row order, and its `dropSnapshot` selects
|
|
124
|
+
* the distinct batches present in order to drop one partition each. Neither
|
|
125
|
+
* makes it worth copying. The ordering is a *natural* order the interface
|
|
126
|
+
* explicitly does not promise — the shared store contract says so where it
|
|
127
|
+
* sorts explicitly, precisely because the two engines disagree about it — and
|
|
128
|
+
* the partition enumeration is documented as making no assumption about which
|
|
129
|
+
* values are there, so it is correct for any set including a restore that
|
|
130
|
+
* flattened everything to one batch.
|
|
131
|
+
*
|
|
132
|
+
* What matters here is the narrower question, and the answer to that is clean:
|
|
133
|
+
* **no merge reads it.** `carryForward` joins the previous snapshot on its
|
|
134
|
+
* primary key and copies its properties; its own `_batch` predicate applies
|
|
135
|
+
* only to the snapshot being built, where it stops the statement feeding on its
|
|
136
|
+
* own output. The `-1` marker is a record that a merge happened, never an input
|
|
137
|
+
* to the next one. And the write path could not take it back regardless:
|
|
138
|
+
* {@link CatalogWriteStore.write} refuses a negative batch by name, so the one
|
|
139
|
+
* value in the column that carries information is the one value the only
|
|
140
|
+
* restore seam rejects.
|
|
141
|
+
* - **`_snapshot_id`, no.** One value for the whole snapshot, so a per-row copy
|
|
142
|
+
* is N copies of a string the copy is already named after.
|
|
143
|
+
* - **`_row`, no.** The order, not a value. A copy that preserves the order
|
|
144
|
+
* preserves everything the column carries; the numbers themselves are an
|
|
145
|
+
* engine's auto-increment and are not stable across a rewrite anyway.
|
|
146
|
+
*
|
|
147
|
+
* Kept here rather than in the archiver that needed it, because it is a fact
|
|
148
|
+
* about the store interface — about which columns {@link
|
|
149
|
+
* CatalogMergeStore.carryForward} reads — and anything else that copies a
|
|
150
|
+
* snapshot needs the same answer.
|
|
151
|
+
*/
|
|
152
|
+
exports.CATALOG_PROVENANCE_COLUMNS = ['_principal_id', '_loaded_at'];
|
|
95
153
|
/**
|
|
96
154
|
* The whole naming rule, which used to be written out here.
|
|
97
155
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export { type AuditQuery, CATALOG_REVISION_LIMIT, CATALOG_TRACE_OUTCOMES, CATALO
|
|
|
23
23
|
export { CATALOG_PRINCIPAL_RESOLVER, type CatalogActor, type CatalogGrants, type CatalogPrincipal, type CatalogPrincipalResolver, type CatalogScope, composePrincipalId, delegatePrincipal, expandScopes, hasScope, parsePrincipalId, PRINCIPAL_ACTOR_SEPARATOR, maySeeClassification, mayRead, mayWrite, readableObjectPage, StaticKeyPrincipalResolver, } from './catalog.principal';
|
|
24
24
|
export * from './catalog.access';
|
|
25
25
|
export * from './catalog.filters';
|
|
26
|
-
export { assertNoColumnCollisions, assertSafeIdentifier, CATALOG_RESERVED_COLUMNS, CATALOG_SNAPSHOT_MODES, CATALOG_STORE, type CarryForwardResult, type CatalogColumnCollision, CatalogColumnCollisionError, type CatalogFilteringReadStore, supportsObjectFilters, type CatalogMergeStore, type CatalogReadQuery, type CatalogReadResult, type CatalogReadStore, type CatalogReservedColumn, type CatalogSnapshotLocation, type CatalogSnapshotLookupStore, type CatalogSnapshotMode, type CatalogSnapshotStreamStore, type CatalogStoreCapabilities, type CatalogWriteStore, type ColumnCollisionOptions, findColumnCollisions, isCatalogStoreCapabilities, isReservedColumn, isSafeIdentifier, isWriteStore, outputAlias, physicalColumn, type SnapshotArchiveRef, type SnapshotRef, supportsCarryForward, supportsSnapshotLookup, supportsSnapshotStreams, UnsafeIdentifierError, } from './catalog.store';
|
|
26
|
+
export { assertNoColumnCollisions, assertSafeIdentifier, CATALOG_PROVENANCE_COLUMNS, CATALOG_RESERVED_COLUMNS, CATALOG_SNAPSHOT_MODES, CATALOG_STORE, type CarryForwardResult, type CatalogColumnCollision, CatalogColumnCollisionError, type CatalogFilteringReadStore, supportsObjectFilters, type CatalogMergeStore, type CatalogReadQuery, type CatalogReadResult, type CatalogReadStore, type CatalogProvenanceColumn, type CatalogReservedColumn, type CatalogSnapshotArchiveStore, type CatalogSnapshotLocation, type CatalogSnapshotLookupStore, type CatalogSnapshotMode, type CatalogSnapshotStreamStore, type CatalogStoreCapabilities, type CatalogWriteStore, type ColumnCollisionOptions, findColumnCollisions, isCatalogStoreCapabilities, isReservedColumn, isSafeIdentifier, isWriteStore, outputAlias, physicalColumn, type SnapshotArchiveRef, type SnapshotRef, type SnapshotStreamOptions, supportsCarryForward, supportsSnapshotArchiveRecords, supportsSnapshotLookup, supportsSnapshotStreams, UnsafeIdentifierError, } from './catalog.store';
|
|
27
27
|
export { MikroOrmReadStore } from './stores/mikro-orm-read.store';
|
|
28
28
|
export type { CatalogGraph, CatalogObjectPage, CatalogObjectQuery, CatalogObjectTypeDef, CatalogOverlay, CatalogPropertyDef, CatalogRelationDef, CatalogSnapshot, RelationKind, ScalarType, } from './catalog.types';
|
|
29
29
|
export { isRelationKind, RELATION_KINDS } from './catalog.types';
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ exports.nodeKindIsReusable = exports.NODE_KIND_IS_REUSABLE = exports.isReusableN
|
|
|
18
18
|
exports.WORKFLOW_FILTER_OPERATORS = exports.WORKFLOW_FILTER_MAX_VALUES = exports.WORKFLOW_FILTER_MAX_DEPTH = exports.WORKFLOW_FILTER_COLUMN_PATTERN = exports.WORKFLOW_EXECUTION_MODES = exports.WORKFLOW_COLUMN_GAP = exports.WORKFLOW_CALL_MODES = exports.WORKFLOW_CALL_CONTRACT = exports.WORKFLOW_BRANCH_LABELS = exports.validateWorkflow = exports.unreachableRenameUnnamed = exports.unreachableLookupUnmatched = exports.unreachablePredicateKind = exports.unreachableNodeKind = exports.unreachableConnectorKind = exports.unreachableCallMode = exports.unreachableFilterPredicateKind = exports.unreachableTransformMode = exports.unreachableFilterOperator = exports.transformMode = exports.recordModeRefusal = exports.TRANSFORM_MODES = exports.TRANSFORM_LANGUAGES = exports.TRANSFORM_RUNNER = exports.supportsStagePayloads = exports.supportsWorkflowStages = exports.supportsWorkflows = exports.supportsWorkflowReleases = exports.liveWorkflowVersion = exports.isWorkflowStatus = exports.isWorkflowSkipReason = exports.isWorkflowRenameUnnamed = exports.isWorkflowRenameColumns = exports.isWorkflowLookupUnmatched = exports.isWorkflowLookupFields = exports.isWorkflowPredicateKind = exports.isWorkflowNodeKind = exports.isWorkflowCallMode = exports.isWorkflowNode = exports.isWorkflowIfPredicate = exports.isWorkflowFilterValue = exports.isWorkflowFilterPredicateKind = exports.isWorkflowFilterPredicate = exports.isWorkflowFilterOperator = exports.isWorkflowExecutionMode = exports.isWorkflowEdge = exports.isWorkflowBranchLabel = exports.unreachableReusableNodeKind = exports.reusableNodeBodyOf = exports.REUSABLE_NODE_KINDS = void 0;
|
|
19
19
|
exports.workflowAggregateNeedsColumn = exports.workflowAggregateMaxGroups = exports.workflowAggregateJoinMaxLength = exports.workflowAggregateColumns = exports.WORKFLOW_AGGREGATE_MAX_SEPARATOR = exports.WORKFLOW_AGGREGATE_MAX_GROUPS = exports.WORKFLOW_AGGREGATE_MAX_GROUP_BY = exports.WORKFLOW_AGGREGATE_MAX_AGGREGATES = exports.WORKFLOW_AGGREGATE_JOIN_MAX_LENGTH = exports.WORKFLOW_AGGREGATE_JOIN_LENGTH_CEILING = exports.WORKFLOW_AGGREGATE_GROUPS_CEILING = exports.WORKFLOW_AGGREGATE_FUNCTIONS = exports.WORKFLOW_AGGREGATE_DEFAULT_SEPARATOR = exports.unreachableAggregateFunction = exports.isWorkflowAggregates = exports.isWorkflowAggregateFunction = exports.aggregateRefusals = exports.workflowRenameUnnamed = exports.renameColumnRefusals = exports.WORKFLOW_LOOKUP_UNMATCHED = exports.WORKFLOW_LOOKUP_MAX_REFERENCE_ROWS = exports.WORKFLOW_LOOKUP_MAX_FIELDS = exports.workflowLookupUnmatched = exports.workflowLookupKey = exports.workflowLookupColumns = exports.lookupConfigRefusals = exports.workflowRunOrder = exports.workflowNodeRuns = exports.workflowSourceSnapshot = exports.workflowSourceObjectType = exports.workflowNarrowedTypes = exports.workflowKnownColumns = exports.workflowGraphHash = exports.workflowFilterMatches = exports.workflowFilterColumns = exports.workflowCallMode = exports.workflowRowY = exports.workflowColumnX = exports.WORKFLOW_STATUSES = exports.WORKFLOW_SKIP_REASONS = exports.WORKFLOW_ROW_GAP = exports.WORKFLOW_RENAME_UNNAMED = exports.WORKFLOW_RENAME_MAX_COLUMNS = exports.WORKFLOW_PREDICATE_KINDS = exports.WORKFLOW_NODE_WIDTH = exports.WORKFLOW_NODE_KINDS = exports.WORKFLOW_NODE_ID_PATTERN = exports.WORKFLOW_NODE_HEIGHT = exports.WORKFLOW_ISSUE_CODES = exports.WORKFLOW_FILTER_PREDICATE_KINDS = void 0;
|
|
20
20
|
exports.readableObjectPage = exports.mayWrite = exports.mayRead = exports.maySeeClassification = exports.PRINCIPAL_ACTOR_SEPARATOR = exports.parsePrincipalId = exports.hasScope = exports.expandScopes = exports.delegatePrincipal = exports.composePrincipalId = exports.CATALOG_PRINCIPAL_RESOLVER = exports.traceOutcomeFilter = exports.supportsSavedQueryRevisions = exports.isWorkspaceStore = exports.isTraceStore = exports.isCatalogTraceOutcome = exports.embeddedVisualization = exports.CATALOG_WORKSPACE_STORE = exports.CATALOG_TRACE_STORE = exports.CATALOG_TRACE_OUTCOMES = exports.CATALOG_REVISION_LIMIT = exports.visibleToPrincipal = exports.searchCatalog = exports.maySearch = exports.emptySearch = exports.bestMatch = exports.MAX_SEARCH_LIMIT = exports.DEFAULT_SEARCH_LIMIT = exports.CatalogService = exports.transformShapeHint = exports.transformShape = exports.transformDeclaresModule = exports.SubprocessTransformRunner = exports.toCsv = exports.guardFormula = exports.csvLines = exports.csvCell = exports.QueryCache = exports.renameStagePayload = exports.isColumnarStageBatch = exports.encodeStageRows = exports.decodeStageRows = exports.classifyStagePayload = exports.STAGE_ENCODING_VERSION = exports.STAGE_ENCODING = exports.WorkflowAggregateError = exports.aggregateInputColumns = exports.AggregateTable = exports.workflowAggregateSeparator = exports.workflowAggregateOutputColumns = void 0;
|
|
21
|
-
exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = exports.REQUIRED_SCOPES = exports.RELATION_KINDS = exports.isRelationKind = exports.MikroOrmReadStore = exports.UnsafeIdentifierError = exports.supportsSnapshotStreams = exports.supportsSnapshotLookup = exports.supportsCarryForward = exports.physicalColumn = exports.outputAlias = exports.isWriteStore = exports.isSafeIdentifier = exports.isReservedColumn = exports.isCatalogStoreCapabilities = exports.findColumnCollisions = exports.supportsObjectFilters = exports.CatalogColumnCollisionError = exports.CATALOG_STORE = exports.CATALOG_SNAPSHOT_MODES = exports.CATALOG_RESERVED_COLUMNS = exports.assertSafeIdentifier = exports.assertNoColumnCollisions = exports.StaticKeyPrincipalResolver = void 0;
|
|
21
|
+
exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = exports.REQUIRED_SCOPES = exports.RELATION_KINDS = exports.isRelationKind = exports.MikroOrmReadStore = exports.UnsafeIdentifierError = exports.supportsSnapshotStreams = exports.supportsSnapshotLookup = exports.supportsSnapshotArchiveRecords = exports.supportsCarryForward = exports.physicalColumn = exports.outputAlias = exports.isWriteStore = exports.isSafeIdentifier = exports.isReservedColumn = exports.isCatalogStoreCapabilities = exports.findColumnCollisions = exports.supportsObjectFilters = exports.CatalogColumnCollisionError = exports.CATALOG_STORE = exports.CATALOG_SNAPSHOT_MODES = exports.CATALOG_RESERVED_COLUMNS = exports.CATALOG_PROVENANCE_COLUMNS = exports.assertSafeIdentifier = exports.assertNoColumnCollisions = exports.StaticKeyPrincipalResolver = void 0;
|
|
22
22
|
var catalog_decorators_1 = require("./catalog.decorators");
|
|
23
23
|
Object.defineProperty(exports, "CatalogProperty", { enumerable: true, get: function () { return catalog_decorators_1.CatalogProperty; } });
|
|
24
24
|
Object.defineProperty(exports, "CatalogType", { enumerable: true, get: function () { return catalog_decorators_1.CatalogType; } });
|
|
@@ -297,6 +297,7 @@ __exportStar(require("./catalog.filters"), exports);
|
|
|
297
297
|
var catalog_store_1 = require("./catalog.store");
|
|
298
298
|
Object.defineProperty(exports, "assertNoColumnCollisions", { enumerable: true, get: function () { return catalog_store_1.assertNoColumnCollisions; } });
|
|
299
299
|
Object.defineProperty(exports, "assertSafeIdentifier", { enumerable: true, get: function () { return catalog_store_1.assertSafeIdentifier; } });
|
|
300
|
+
Object.defineProperty(exports, "CATALOG_PROVENANCE_COLUMNS", { enumerable: true, get: function () { return catalog_store_1.CATALOG_PROVENANCE_COLUMNS; } });
|
|
300
301
|
Object.defineProperty(exports, "CATALOG_RESERVED_COLUMNS", { enumerable: true, get: function () { return catalog_store_1.CATALOG_RESERVED_COLUMNS; } });
|
|
301
302
|
Object.defineProperty(exports, "CATALOG_SNAPSHOT_MODES", { enumerable: true, get: function () { return catalog_store_1.CATALOG_SNAPSHOT_MODES; } });
|
|
302
303
|
Object.defineProperty(exports, "CATALOG_STORE", { enumerable: true, get: function () { return catalog_store_1.CATALOG_STORE; } });
|
|
@@ -310,6 +311,7 @@ Object.defineProperty(exports, "isWriteStore", { enumerable: true, get: function
|
|
|
310
311
|
Object.defineProperty(exports, "outputAlias", { enumerable: true, get: function () { return catalog_store_1.outputAlias; } });
|
|
311
312
|
Object.defineProperty(exports, "physicalColumn", { enumerable: true, get: function () { return catalog_store_1.physicalColumn; } });
|
|
312
313
|
Object.defineProperty(exports, "supportsCarryForward", { enumerable: true, get: function () { return catalog_store_1.supportsCarryForward; } });
|
|
314
|
+
Object.defineProperty(exports, "supportsSnapshotArchiveRecords", { enumerable: true, get: function () { return catalog_store_1.supportsSnapshotArchiveRecords; } });
|
|
313
315
|
Object.defineProperty(exports, "supportsSnapshotLookup", { enumerable: true, get: function () { return catalog_store_1.supportsSnapshotLookup; } });
|
|
314
316
|
Object.defineProperty(exports, "supportsSnapshotStreams", { enumerable: true, get: function () { return catalog_store_1.supportsSnapshotStreams; } });
|
|
315
317
|
Object.defineProperty(exports, "UnsafeIdentifierError", { enumerable: true, get: function () { return catalog_store_1.UnsafeIdentifierError; } });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/nestjs-catalog",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.0",
|
|
4
4
|
"description": "A metadata registry for NestJS: object types, properties and relations, derived from your ORM and enriched with decorators.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Davide Carvalho",
|