@dudousxd/nestjs-catalog 0.5.0 → 0.7.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.
@@ -54,7 +54,24 @@ export interface CatalogPropertyDef {
54
54
  /** True when the value came from a hand-written decorator rather than the ORM. */
55
55
  enriched: boolean;
56
56
  }
57
- /** A link between two object types. Derived entirely from the ORM. */
57
+ /**
58
+ * A link between two object types — the thing that makes this an ontology
59
+ * rather than a list of tables.
60
+ *
61
+ * **Structure derived, semantics declared**, the same split as everywhere else.
62
+ * A `@ManyToOne` already names its target, its kind and its join column, so none
63
+ * of that is ever written by hand — a decorator that could restate it is a
64
+ * decorator that can disagree with the schema. What a human adds is what they
65
+ * add to a scalar, a label and a meaning, through `@CatalogProperty` or the
66
+ * overlay; both key on the property name and so reach a relation without having
67
+ * to know it is one.
68
+ *
69
+ * **One row per declaration, not per link.** `@ManyToOne(() => Base)` on `Mvr`
70
+ * with the matching `@OneToMany` on `Base` is two rows describing one link.
71
+ * Collapsing them here would mean `Base` could not carry its own label for the
72
+ * end it declares, and a type could not say what it points at without consulting
73
+ * every other type. The graph collapses them instead — see {@link CatalogGraph}.
74
+ */
58
75
  export interface CatalogRelationDef {
59
76
  name: string;
60
77
  displayName: string;
@@ -67,6 +84,39 @@ export interface CatalogRelationDef {
67
84
  nullable: boolean;
68
85
  hidden: boolean;
69
86
  order: number;
87
+ /**
88
+ * True when this side physically holds the key.
89
+ *
90
+ * The two ends of a link are not interchangeable. The owning end is where the
91
+ * foreign key actually is, so it is the end a join is written from, the end
92
+ * whose column can be indexed, and the end whose removal breaks the link. A
93
+ * `1:m` is never the owner — the key lives on the many side.
94
+ */
95
+ owner: boolean;
96
+ /**
97
+ * The property on {@link targetType} that is the other end of this same link,
98
+ * when the ORM knows it (MikroORM's `mappedBy` / `inversedBy`).
99
+ *
100
+ * This is what lets two rows be recognised as one link. Pairing them by name
101
+ * instead only works for the accident of both ends being spelled the same:
102
+ * `Mvr.base` and `Base.mvrs` are one link and would otherwise draw two edges,
103
+ * which is exactly the picture a graph is supposed to prevent.
104
+ */
105
+ inverseName?: string;
106
+ /**
107
+ * Whether {@link targetType} is a type this catalog actually holds.
108
+ *
109
+ * False when the target was excluded by configuration, or belongs to an
110
+ * application that has not published it. The relation is still reported: that
111
+ * an MVR points at something called `Base` is true, and when the other end is
112
+ * missing that is the most useful single fact about it. Dropping it silently
113
+ * would leave a type looking unlinked when it is really linked to something
114
+ * out of reach — but drawing it as a navigable edge promises a node that
115
+ * cannot be opened, so the graph omits it and the type page keeps it, marked.
116
+ */
117
+ targetPublished: boolean;
118
+ /** True when a human has labelled or described this link. */
119
+ enriched: boolean;
70
120
  }
71
121
  /** One node of the ontology. */
72
122
  export interface CatalogObjectTypeDef {
@@ -97,6 +147,40 @@ export interface CatalogObjectTypeDef {
97
147
  * came from a regex and are probably wrong.
98
148
  */
99
149
  enriched: boolean;
150
+ /**
151
+ * When readers started seeing the data this type currently serves.
152
+ *
153
+ * `committedAt` of the newest committed snapshot, not `createdAt`: a load that
154
+ * was written and never committed is not what anybody is reading, and dating
155
+ * the type by it would report freshness nobody has.
156
+ *
157
+ * **Absent means no committed snapshot ever**, which is a different statement
158
+ * from "committed a year ago" — a type published by a schema and never loaded
159
+ * looked exactly like a type loaded daily until this field existed, and both
160
+ * looked exactly like a type whose publisher was deleted six months ago.
161
+ *
162
+ * Carried on the type rather than fetched per type on demand. The value of
163
+ * this signal is that it arrives without anybody going to look for it, and a
164
+ * field costing one request per row on a screen listing every type is a field
165
+ * that screen will not use.
166
+ */
167
+ lastCommittedAt?: string;
168
+ /**
169
+ * Rows in that snapshot.
170
+ *
171
+ * Here for a failure the timestamp cannot show: a connector that starts
172
+ * returning 12 rows where it returned 40,000 produces data that is wrong and
173
+ * *fresh*, so every staleness signal reports it as healthy. The count next to
174
+ * the date is what makes that visible, and it is the same read.
175
+ */
176
+ rowCount?: number;
177
+ /**
178
+ * Which application committed it.
179
+ *
180
+ * Because "stale since March" is never the last question — "so who was
181
+ * loading this?" is — and the answer is already in the row being read.
182
+ */
183
+ lastPrincipalId?: string;
100
184
  properties: CatalogPropertyDef[];
101
185
  relations: CatalogRelationDef[];
102
186
  }
@@ -108,12 +192,27 @@ export interface CatalogSnapshot {
108
192
  stats: {
109
193
  types: number;
110
194
  properties: number;
195
+ /**
196
+ * Declared relations, summed over the types — **not** distinct links. A link
197
+ * declared at both ends counts twice, because that is what this number is
198
+ * derived from and quietly halving it would make it disagree with the rows
199
+ * on the type pages that produce it. `getGraph().edges.length` is the count
200
+ * of links.
201
+ */
111
202
  relations: number;
112
203
  enrichedTypes: number;
113
204
  };
114
205
  types: CatalogObjectTypeDef[];
115
206
  }
116
- /** Nodes and edges, for drawing the ontology. */
207
+ /**
208
+ * Nodes and edges, for drawing the ontology.
209
+ *
210
+ * One edge per **link**, not per declaration: a link declared at both ends is
211
+ * one line on the picture, drawn from the end that holds the key so the arrow
212
+ * points the way a join is written. And every edge lands on a node that is
213
+ * present — a target this catalog does not hold produces no edge, because an
214
+ * edge to nowhere is a node the reader will try to click.
215
+ */
117
216
  export interface CatalogGraph {
118
217
  nodes: Array<{
119
218
  id: string;
@@ -143,6 +242,12 @@ export interface CatalogOverlay {
143
242
  icon?: string;
144
243
  group?: string;
145
244
  titleProperty?: string;
245
+ /**
246
+ * Keyed by property name — and a relation is a property to whoever is
247
+ * looking, so a link's label and description are curated through this map
248
+ * too, under the relation's own name. That is why curating a link needs no
249
+ * new route and no new patch shape: `patchProperty` already accepts one.
250
+ */
146
251
  properties?: Record<string, {
147
252
  displayName?: string;
148
253
  description?: string;
@@ -166,7 +271,13 @@ export interface CatalogObjectPage {
166
271
  size: number;
167
272
  total: number;
168
273
  pages: number;
169
- /** Only the visible, non-redacted columns, in overlay order. */
274
+ /**
275
+ * The visible, non-blob columns, in overlay order.
276
+ *
277
+ * Visible means "not hidden by the overlay". It does **not** mean redacted for
278
+ * a caller: a classified column is here, with its `classification` on it, and
279
+ * dropping it is the host's move — see `readableObjectPage`.
280
+ */
170
281
  columns: Array<{
171
282
  name: string;
172
283
  displayName: string;
@@ -34,8 +34,16 @@ export interface SavedQuery {
34
34
  * relations, so working out "which types does this touch" means parsing the
35
35
  * statement — and a permission derived from a parser is a permission that
36
36
  * silently widens the day the parser meets a query it did not expect. Marking
37
- * it shared is a decision a person made, and it shows up in the audit trail
38
- * as one.
37
+ * it shared is a decision a person made, and it shows up in the audit trail as
38
+ * one: `CatalogService` emits `query.shared` on the transition, in both
39
+ * directions, naming whoever made it. Deleting a shared query is one of those
40
+ * directions — it revokes outside access as surely as the toggle does — and is
41
+ * emitted the same way, with `deleted: true` to say which ending it was.
42
+ *
43
+ * That last sentence was a claim before it was true — the event did not exist
44
+ * and the one act that hands an outside application data left no trace at all.
45
+ * Anything written here about what is recorded should be checkable against
46
+ * `CATALOG_EVENTS` and an emit site.
39
47
  */
40
48
  shared: boolean;
41
49
  }
@@ -71,7 +79,11 @@ export interface Dashboard {
71
79
  createdAt: string;
72
80
  updatedAt: string;
73
81
  cards: DashboardCard[];
74
- /** Fetchable through the embed API by an application with `catalog:embed`. */
82
+ /**
83
+ * Fetchable through the embed API by an application with `catalog:embed`.
84
+ *
85
+ * Audited the same way {@link SavedQuery.shared} is, as `dashboard.shared`.
86
+ */
75
87
  shared: boolean;
76
88
  }
77
89
  export interface DashboardCard {
@@ -225,11 +237,17 @@ export interface CatalogTrace {
225
237
  /**
226
238
  * True when the whole story fits inside one tick of the recorder's clock.
227
239
  *
228
- * Worth saying out loud rather than quietly drawing zero-width bars: with a
229
- * second-resolution timestamp column a fast load has no measurable internal
230
- * timing at all, and a waterfall drawn from it would be a picture of rounding
231
- * error. Ordering is still correct — see the lifecycle rank the store sorts
232
- * by — but proportions are not, and a consumer should say so.
240
+ * Worth saying out loud rather than quietly drawing zero-width bars: when a
241
+ * load finishes inside one tick it has no measurable internal timing at all,
242
+ * and a waterfall drawn from it would be a picture of rounding error.
243
+ * Ordering is still correct — see the lifecycle rank the store sorts by — but
244
+ * proportions are not, and a consumer should say so.
245
+ *
246
+ * How coarse a tick is belongs to the store, not to this field: read
247
+ * `clockResolutionMs` rather than assuming. The bundled MySQL store keeps
248
+ * milliseconds, so this is now true only of loads that really did finish
249
+ * inside one — and of rows written before that column was widened, which
250
+ * collapse onto a whole second and are honestly still coarse.
233
251
  */
234
252
  coarse: boolean;
235
253
  /** Ordered: what started it first, how it ended last. */
@@ -414,11 +432,53 @@ export interface EmbeddedDashboard {
414
432
  charts: EmbeddedChart[];
415
433
  generatedAt: string;
416
434
  }
435
+ /**
436
+ * What the *card* says about a chart, as opposed to what the saved query says.
437
+ *
438
+ * A card carries two kinds of statement and they are easy to conflate. Width
439
+ * and position are a hint about the grid, which a consumer may ignore. `title`
440
+ * and `library` are overrides — the board's answer to a question the query has
441
+ * already answered — and dropping them is not a hint being ignored, it is the
442
+ * embed disagreeing with the console about the same dashboard.
443
+ */
444
+ export interface EmbeddedChartPlacement {
445
+ width: number;
446
+ position: number;
447
+ /** The card's title override. Blank or absent falls back to the query's name. */
448
+ title?: string;
449
+ /** The card's library override. Absent falls back to the query's own. */
450
+ library?: string;
451
+ }
452
+ /**
453
+ * Which library draws an embedded chart, given the two places that can say.
454
+ *
455
+ * The server twin of `visualizationFor` in the React package, and it must stay
456
+ * the same rule: the card wins, then the query, then the built-in renderer. Two
457
+ * different precedences for one field would mean the console and an embedding
458
+ * application draw the same board differently, which is exactly the bug the
459
+ * override exists to prevent.
460
+ *
461
+ * Restated here rather than imported, because a server package must not depend
462
+ * on a React one. Kept as a named function rather than two lines inside
463
+ * `embedChart` for the same reason the React side did: a precedence a test can
464
+ * hold by name cannot drift silently.
465
+ *
466
+ * When neither chose, the key is ABSENT rather than explicitly undefined — this
467
+ * shape is serialised to a consumer, and "the key is there and empty" is a
468
+ * different statement from "nobody chose".
469
+ */
470
+ export declare function embeddedVisualization(saved: QueryVisualization | undefined, cardLibrary: string | undefined): QueryVisualization;
417
471
  export interface CatalogWorkspaceStore {
418
472
  listSavedQueries(): Promise<SavedQuery[]>;
419
473
  getSavedQuery(id: string): Promise<SavedQuery | undefined>;
420
474
  saveQuery(input: SaveQueryInput, createdBy: string): Promise<SavedQuery>;
421
475
  updateSavedQuery(id: string, input: Partial<SaveQueryInput>): Promise<SavedQuery | undefined>;
476
+ /**
477
+ * Unchanged by the audit work above it: the *store* takes no actor, because a
478
+ * store that emitted would emit on every path into it and could not tell a
479
+ * revocation from a cascade. `CatalogService.deleteSavedQuery` reads the row
480
+ * first and decides.
481
+ */
422
482
  deleteSavedQuery(id: string): Promise<boolean>;
423
483
  listDashboards(): Promise<Dashboard[]>;
424
484
  getDashboard(id: string): Promise<Dashboard | undefined>;
@@ -13,6 +13,7 @@ exports.CATALOG_WORKSPACE_STORE = exports.CATALOG_TRACE_STORE = exports.CATALOG_
13
13
  exports.isCatalogTraceOutcome = isCatalogTraceOutcome;
14
14
  exports.traceOutcomeFilter = traceOutcomeFilter;
15
15
  exports.isTraceStore = isTraceStore;
16
+ exports.embeddedVisualization = embeddedVisualization;
16
17
  exports.isWorkspaceStore = isWorkspaceStore;
17
18
  /**
18
19
  * The same events, told as stories instead of as a list.
@@ -79,6 +80,28 @@ function isTraceStore(store) {
79
80
  store !== null &&
80
81
  typeof Reflect.get(store, 'listTraces') === 'function');
81
82
  }
83
+ /**
84
+ * Which library draws an embedded chart, given the two places that can say.
85
+ *
86
+ * The server twin of `visualizationFor` in the React package, and it must stay
87
+ * the same rule: the card wins, then the query, then the built-in renderer. Two
88
+ * different precedences for one field would mean the console and an embedding
89
+ * application draw the same board differently, which is exactly the bug the
90
+ * override exists to prevent.
91
+ *
92
+ * Restated here rather than imported, because a server package must not depend
93
+ * on a React one. Kept as a named function rather than two lines inside
94
+ * `embedChart` for the same reason the React side did: a precedence a test can
95
+ * hold by name cannot drift silently.
96
+ *
97
+ * When neither chose, the key is ABSENT rather than explicitly undefined — this
98
+ * shape is serialised to a consumer, and "the key is there and empty" is a
99
+ * different statement from "nobody chose".
100
+ */
101
+ function embeddedVisualization(saved, cardLibrary) {
102
+ const base = saved ?? { kind: 'table' };
103
+ return cardLibrary ? { ...base, library: cardLibrary } : base;
104
+ }
82
105
  function isWorkspaceStore(store) {
83
106
  return (typeof store === 'object' &&
84
107
  store !== null &&
package/dist/index.d.ts CHANGED
@@ -12,8 +12,8 @@ export * from './catalog.environment';
12
12
  export { QueryCache, toCsv } from './catalog.query-cache';
13
13
  export { SubprocessTransformRunner, type TransformRunnerOptions, } from './transform-runner';
14
14
  export { CatalogService } from './catalog.service';
15
- export { type AuditQuery, CATALOG_TRACE_OUTCOMES, CATALOG_TRACE_STORE, CATALOG_WORKSPACE_STORE, type CatalogAuditEvent, type CatalogTrace, type CatalogTraceList, type CatalogTraceOutcome, type CatalogTraceSpan, type CatalogTraceStore, type CatalogTraceTotals, type CatalogUnlinkedList, type CatalogWorkspaceStore, type Dashboard, type DashboardCard, isCatalogTraceOutcome, isTraceStore, isWorkspaceStore, type QueryVisualization, type SaveQueryInput, type SavedQuery, type TraceQuery, traceOutcomeFilter, } from './catalog.workspace';
16
- 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, StaticKeyPrincipalResolver, } from './catalog.principal';
15
+ export { type AuditQuery, CATALOG_TRACE_OUTCOMES, CATALOG_TRACE_STORE, CATALOG_WORKSPACE_STORE, type CatalogAuditEvent, type CatalogTrace, type CatalogTraceList, type CatalogTraceOutcome, type CatalogTraceSpan, type CatalogTraceStore, type CatalogTraceTotals, type CatalogUnlinkedList, type CatalogWorkspaceStore, type Dashboard, type DashboardCard, type EmbeddedChart, type EmbeddedChartPlacement, type EmbeddedDashboard, embeddedVisualization, isCatalogTraceOutcome, isTraceStore, isWorkspaceStore, type QueryVisualization, type SaveQueryInput, type SavedQuery, type TraceQuery, traceOutcomeFilter, } from './catalog.workspace';
16
+ 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';
17
17
  export * from './catalog.access';
18
18
  export { assertNoColumnCollisions, CATALOG_RESERVED_COLUMNS, CATALOG_SNAPSHOT_MODES, CATALOG_STORE, type CarryForwardResult, type CatalogColumnCollision, CatalogColumnCollisionError, type CatalogMergeStore, type CatalogReadQuery, type CatalogReadResult, type CatalogReadStore, type CatalogReservedColumn, type CatalogSnapshotMode, type CatalogStoreCapabilities, type CatalogWriteStore, type ColumnCollisionOptions, findColumnCollisions, isCatalogStoreCapabilities, isReservedColumn, isWriteStore, type SnapshotRef, supportsCarryForward, } from './catalog.store';
19
19
  export { MikroOrmReadStore } from './stores/mikro-orm-read.store';
package/dist/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.CATALOG_PRINCIPAL_RESOLVER = exports.traceOutcomeFilter = exports.isWorkspaceStore = exports.isTraceStore = exports.isCatalogTraceOutcome = exports.CATALOG_WORKSPACE_STORE = exports.CATALOG_TRACE_STORE = exports.CATALOG_TRACE_OUTCOMES = exports.CatalogService = exports.SubprocessTransformRunner = exports.toCsv = exports.QueryCache = exports.workflowRunOrder = exports.workflowGraphHash = exports.WORKFLOW_NODE_KINDS = exports.WORKFLOW_NODE_ID_PATTERN = exports.WORKFLOW_ISSUE_CODES = exports.WORKFLOW_EXECUTION_MODES = exports.validateWorkflow = exports.TRANSFORM_LANGUAGES = exports.TRANSFORM_RUNNER = exports.supportsWorkflowStages = exports.supportsWorkflows = exports.isWorkflowNodeKind = exports.isWorkflowNode = exports.isWorkflowExecutionMode = exports.isWorkflowEdge = exports.isTransformLanguage = exports.isPipelineStore = exports.isConnectorKind = exports.CONNECTOR_KINDS = exports.CATALOG_PIPELINE_STORE = exports.CatalogRegistry = exports.MikroOrmCatalogRegistry = exports.CATALOG_OVERLAY_STORE = exports.InMemoryCatalogOverlayStore = exports.FileCatalogOverlayStore = exports.CATALOG_OPTIONS = exports.isQueryStore = exports.assertReadOnlyShape = exports.CatalogModule = exports.emitCatalog = exports.channelNameFor = exports.catalogEventPhase = exports.CATALOG_LIB = exports.CATALOG_EVENTS = exports.CATALOG_EVENT_PHASE_FALLBACK = exports.CATALOG_EVENT_PHASE = exports.CatalogType = exports.CatalogProperty = void 0;
18
- exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = exports.REQUIRED_SCOPES = exports.MikroOrmReadStore = exports.supportsCarryForward = exports.isWriteStore = exports.isReservedColumn = exports.isCatalogStoreCapabilities = exports.findColumnCollisions = exports.CatalogColumnCollisionError = exports.CATALOG_STORE = exports.CATALOG_SNAPSHOT_MODES = exports.CATALOG_RESERVED_COLUMNS = exports.assertNoColumnCollisions = exports.StaticKeyPrincipalResolver = exports.mayWrite = exports.mayRead = exports.maySeeClassification = exports.PRINCIPAL_ACTOR_SEPARATOR = exports.parsePrincipalId = exports.hasScope = exports.expandScopes = exports.delegatePrincipal = exports.composePrincipalId = void 0;
17
+ exports.traceOutcomeFilter = exports.isWorkspaceStore = exports.isTraceStore = exports.isCatalogTraceOutcome = exports.embeddedVisualization = exports.CATALOG_WORKSPACE_STORE = exports.CATALOG_TRACE_STORE = exports.CATALOG_TRACE_OUTCOMES = exports.CatalogService = exports.SubprocessTransformRunner = exports.toCsv = exports.QueryCache = exports.workflowRunOrder = exports.workflowGraphHash = exports.WORKFLOW_NODE_KINDS = exports.WORKFLOW_NODE_ID_PATTERN = exports.WORKFLOW_ISSUE_CODES = exports.WORKFLOW_EXECUTION_MODES = exports.validateWorkflow = exports.TRANSFORM_LANGUAGES = exports.TRANSFORM_RUNNER = exports.supportsWorkflowStages = exports.supportsWorkflows = exports.isWorkflowNodeKind = exports.isWorkflowNode = exports.isWorkflowExecutionMode = exports.isWorkflowEdge = exports.isTransformLanguage = exports.isPipelineStore = exports.isConnectorKind = exports.CONNECTOR_KINDS = exports.CATALOG_PIPELINE_STORE = exports.CatalogRegistry = exports.MikroOrmCatalogRegistry = exports.CATALOG_OVERLAY_STORE = exports.InMemoryCatalogOverlayStore = exports.FileCatalogOverlayStore = exports.CATALOG_OPTIONS = exports.isQueryStore = exports.assertReadOnlyShape = exports.CatalogModule = exports.emitCatalog = exports.channelNameFor = exports.catalogEventPhase = exports.CATALOG_LIB = exports.CATALOG_EVENTS = exports.CATALOG_EVENT_PHASE_FALLBACK = exports.CATALOG_EVENT_PHASE = exports.CatalogType = exports.CatalogProperty = void 0;
18
+ exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = exports.REQUIRED_SCOPES = exports.MikroOrmReadStore = exports.supportsCarryForward = exports.isWriteStore = exports.isReservedColumn = exports.isCatalogStoreCapabilities = exports.findColumnCollisions = exports.CatalogColumnCollisionError = exports.CATALOG_STORE = exports.CATALOG_SNAPSHOT_MODES = exports.CATALOG_RESERVED_COLUMNS = exports.assertNoColumnCollisions = exports.StaticKeyPrincipalResolver = 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 = void 0;
19
19
  var catalog_decorators_1 = require("./catalog.decorators");
20
20
  Object.defineProperty(exports, "CatalogProperty", { enumerable: true, get: function () { return catalog_decorators_1.CatalogProperty; } });
21
21
  Object.defineProperty(exports, "CatalogType", { enumerable: true, get: function () { return catalog_decorators_1.CatalogType; } });
@@ -78,6 +78,7 @@ var catalog_workspace_1 = require("./catalog.workspace");
78
78
  Object.defineProperty(exports, "CATALOG_TRACE_OUTCOMES", { enumerable: true, get: function () { return catalog_workspace_1.CATALOG_TRACE_OUTCOMES; } });
79
79
  Object.defineProperty(exports, "CATALOG_TRACE_STORE", { enumerable: true, get: function () { return catalog_workspace_1.CATALOG_TRACE_STORE; } });
80
80
  Object.defineProperty(exports, "CATALOG_WORKSPACE_STORE", { enumerable: true, get: function () { return catalog_workspace_1.CATALOG_WORKSPACE_STORE; } });
81
+ Object.defineProperty(exports, "embeddedVisualization", { enumerable: true, get: function () { return catalog_workspace_1.embeddedVisualization; } });
81
82
  Object.defineProperty(exports, "isCatalogTraceOutcome", { enumerable: true, get: function () { return catalog_workspace_1.isCatalogTraceOutcome; } });
82
83
  Object.defineProperty(exports, "isTraceStore", { enumerable: true, get: function () { return catalog_workspace_1.isTraceStore; } });
83
84
  Object.defineProperty(exports, "isWorkspaceStore", { enumerable: true, get: function () { return catalog_workspace_1.isWorkspaceStore; } });
@@ -93,6 +94,7 @@ Object.defineProperty(exports, "PRINCIPAL_ACTOR_SEPARATOR", { enumerable: true,
93
94
  Object.defineProperty(exports, "maySeeClassification", { enumerable: true, get: function () { return catalog_principal_1.maySeeClassification; } });
94
95
  Object.defineProperty(exports, "mayRead", { enumerable: true, get: function () { return catalog_principal_1.mayRead; } });
95
96
  Object.defineProperty(exports, "mayWrite", { enumerable: true, get: function () { return catalog_principal_1.mayWrite; } });
97
+ Object.defineProperty(exports, "readableObjectPage", { enumerable: true, get: function () { return catalog_principal_1.readableObjectPage; } });
96
98
  Object.defineProperty(exports, "StaticKeyPrincipalResolver", { enumerable: true, get: function () { return catalog_principal_1.StaticKeyPrincipalResolver; } });
97
99
  // Everything, deliberately. The last release exported the directory interface
98
100
  // but not the two types its one method takes and returns, so the seam could be
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudousxd/nestjs-catalog",
3
- "version": "0.5.0",
3
+ "version": "0.7.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",