@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.
@@ -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
  *
@@ -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.32.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",