@dudousxd/nestjs-catalog 0.18.0 → 0.19.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.
@@ -1919,6 +1919,29 @@ export interface VersionPinCopy {
1919
1919
  detail: string;
1920
1920
  }
1921
1921
  export declare function describeVersionPin(version: number | undefined, subject: string): VersionPinCopy;
1922
+ /**
1923
+ * The same question about a whole graph: does it follow its latest save, or does
1924
+ * it run a version somebody chose?
1925
+ *
1926
+ * Shares {@link VersionPinCopy} and its two labels with
1927
+ * {@link describeVersionPin} deliberately. A console that said "pinned to v6"
1928
+ * about a transform node and invented different words for a graph would be two
1929
+ * vocabularies for one idea, and the reader would have to work out whether they
1930
+ * meant the same thing — which is the confusion the whole notion of a pin exists
1931
+ * to remove.
1932
+ *
1933
+ * The *detail* differs, and only where the facts do. Two of them:
1934
+ *
1935
+ * - A node's pin can outlive the revision it names, because `catalog_revision`
1936
+ * is capped. A graph's cannot: releases are never evicted, precisely because
1937
+ * the one a live pointer names is the graph production is running. So this
1938
+ * copy makes no eviction caveat, and must not acquire one.
1939
+ * - Following the latest is *cheap* for a node — everybody moves together, which
1940
+ * is often the point. For a graph it means editing is deploying, which is the
1941
+ * hazard this field was added to remove. So the unpinned sentence here is a
1942
+ * warning where the node's is a trade-off.
1943
+ */
1944
+ export declare function describeLiveVersion(workflow: CatalogWorkflow): VersionPinCopy;
1922
1945
  /**
1923
1946
  * Which side of an {@link WorkflowIfNode} a wire leaves by.
1924
1947
  *
@@ -2062,6 +2085,51 @@ export interface CatalogWorkflow {
2062
2085
  version: number;
2063
2086
  /** Fingerprint of the graph at this version. See {@link workflowGraphHash}. */
2064
2087
  graphHash: string;
2088
+ /**
2089
+ * Which released version a run of this graph gets when nobody names one.
2090
+ *
2091
+ * **Absent means follow the latest**, which is what every graph in every
2092
+ * deployment does today and what every existing graph keeps doing until
2093
+ * somebody points this at something. Absence is a real answer rather than a
2094
+ * state waiting to be filled in — the same stance {@link WorkflowCallNode}
2095
+ * takes from the other side, where a call that named no version would run
2096
+ * whichever one is registered when the load happens.
2097
+ *
2098
+ * Present, it names a {@link CatalogWorkflowRelease} — and from that moment
2099
+ * **editing this graph stops being deploying it**. A save bumps
2100
+ * {@link version} as it always did; the next scheduled window still runs the
2101
+ * released version this names, because a cron tick that executed whatever the
2102
+ * canvas happened to hold is a deploy nobody performed. Moving it is
2103
+ * {@link CatalogWorkflowReleaseStore.setLiveWorkflowVersion}, which is a
2104
+ * deliberate act by a named principal, and moving it *backwards* is the whole
2105
+ * of rollback.
2106
+ *
2107
+ * ## Why this is a column here and not a row in an environments table
2108
+ *
2109
+ * Because the row is already per-environment. Environments in this catalog are
2110
+ * physically isolated — one database each, see `catalog.environment.ts` — so
2111
+ * this `catalog_workflow` row exists once per environment already, and a
2112
+ * second dimension keyed on the environment id would be a table whose every
2113
+ * query filtered on a constant. The environment is the connection, and it has
2114
+ * been since environments were added.
2115
+ *
2116
+ * That is also why the field is not called `productionVersion`. "Production"
2117
+ * in this catalog is the *name of an environment* — see `CatalogEnvironment`
2118
+ * in `catalog.environment.ts` — so a column called that, on a row which
2119
+ * already lives inside exactly one environment, would read as naming a
2120
+ * different one.
2121
+ *
2122
+ * ## Why it does not cross a promotion
2123
+ *
2124
+ * `planPromotion` is explicit that version numbers do not cross: a version
2125
+ * counts edits made in the environment it lives in, so dev's v7 and
2126
+ * production's v7 are unrelated numbers. A pointer *to* a version inherits
2127
+ * that argument whole — carrying this field would point the target's live
2128
+ * pointer at whatever its own seventh edit happened to be. So
2129
+ * `PromotableWorkflow` does not carry it, and a promoted graph arrives
2130
+ * following the latest, exactly as a newly created one does.
2131
+ */
2132
+ liveVersion?: number;
2065
2133
  /**
2066
2134
  * The type the sink writes.
2067
2135
  *
@@ -2718,6 +2786,172 @@ export interface CatalogWorkflowStore {
2718
2786
  enabled?: boolean;
2719
2787
  }, changedBy: string): Promise<CatalogWorkflow>;
2720
2788
  }
2789
+ /**
2790
+ * One version of a graph, kept exactly as it was, because somebody said so.
2791
+ *
2792
+ * ## The archive `CatalogWorkflow` argues against, and why this is not it
2793
+ *
2794
+ * {@link CatalogWorkflow} states plainly that a graph is not revisioned, and the
2795
+ * decisive reason it gives is the counter: {@link CatalogWorkflow.version} is
2796
+ * bumped on **draft** edits by design, so archiving one body per version would
2797
+ * store every autosave of a canvas somebody is still dragging boxes around on —
2798
+ * and under a bounded archive that noise would evict the versions that actually
2799
+ * ran. **That argument is correct and nothing here weakens it.** It is an
2800
+ * argument against archiving *saves*, and this archives *releases*: a release is
2801
+ * minted only by `releaseWorkflow`, which is a route a person presses, and a
2802
+ * canvas autosave does not reach it. So the counter stays cheap to inflate, the
2803
+ * archive stays keyed on a deliberate act, and the two now compose because they
2804
+ * are counting different things.
2805
+ *
2806
+ * The second half of that docblock — that a graph is a structure and a line
2807
+ * differ over serialised JSON would report a dragged box as a change — is also
2808
+ * untouched. This is not a diff feature. It stores the graph so a version can be
2809
+ * *run*, and diffing graphs remains a graph problem deserving a screen that
2810
+ * draws one.
2811
+ *
2812
+ * ## Why not `catalog_revision`, which already archives versioned bodies
2813
+ *
2814
+ * Two reasons, and the second is the one that decides it.
2815
+ *
2816
+ * `CatalogRevision.body` is text a person typed — a transform's code, a saved
2817
+ * query's SQL — and every route over it is built to render text. A graph is
2818
+ * nodes and edges, and folding it into that column would put JSON nobody wrote
2819
+ * in front of a differ built for source.
2820
+ *
2821
+ * The one that decides it is {@link CATALOG_REVISION_LIMIT}. That cap is right
2822
+ * for code, for the reason its own docblock gives: revisions grow with how often
2823
+ * somebody edits, which nobody meters. A release does not grow that way — it
2824
+ * grows with how often somebody deliberately ships — and, crucially, a release
2825
+ * is the thing a live pointer names. An eviction rule over this table could
2826
+ * delete the graph that production is *currently running*, turning
2827
+ * {@link CatalogWorkflow.liveVersion} into a pin nothing can honour and stopping
2828
+ * a working pipeline on a retention policy. **So releases are never evicted.**
2829
+ * That makes this an unbounded table, which this codebase is careful about — and
2830
+ * it earns it on the same test `catalog_audit_event` and `catalog_connector_run`
2831
+ * pass: one row per thing a person deliberately did, at a rate an operator can
2832
+ * read off their own change process.
2833
+ *
2834
+ * ## Immutable, and there is no route that removes one
2835
+ *
2836
+ * Nothing edits a release and nothing deletes one. That is the strongest form of
2837
+ * "refuse to delete the version that is live": there is no operation to refuse.
2838
+ * The one exception is {@link CatalogWorkflowStore.deleteWorkflow}, which takes
2839
+ * the graph, its connector and its whole run history — releases go with it,
2840
+ * because nothing survives that could still name one. (The opposite call is made
2841
+ * for a transform, whose revisions outlive it precisely *because* runs that ran
2842
+ * them survive.)
2843
+ */
2844
+ export interface CatalogWorkflowRelease {
2845
+ /**
2846
+ * `{workflowId}:{version}`, derived rather than random.
2847
+ *
2848
+ * The same construction `revisionKey` uses in the MikroORM store and for the
2849
+ * same property: releasing the same version twice cannot append a second copy,
2850
+ * because the second write would collide with the first rather than land
2851
+ * beside it.
2852
+ */
2853
+ id: string;
2854
+ workflowId: string;
2855
+ /**
2856
+ * The {@link CatalogWorkflow.version} this release IS.
2857
+ *
2858
+ * The same number, not a parallel sequence. A release sequence of its own was
2859
+ * the alternative and it is worse in the one place it matters: a run records
2860
+ * `workflowVersion`, so a second numbering would mean a run naming "v3" and an
2861
+ * operator reading "release 3" could be two different graphs, which is exactly
2862
+ * the ambiguity the edit counter was made cheap to avoid.
2863
+ */
2864
+ version: number;
2865
+ /** Fingerprint of the graph as released. See {@link workflowGraphHash}. */
2866
+ graphHash: string;
2867
+ nodes: WorkflowNode[];
2868
+ edges: WorkflowEdge[];
2869
+ /** The type the sink committed at this version. */
2870
+ targetType: string;
2871
+ /** Whatever the releaser wanted to say about it. */
2872
+ notes?: string;
2873
+ releasedBy: string;
2874
+ releasedAt: string;
2875
+ }
2876
+ /**
2877
+ * Minting releases, and pointing at one.
2878
+ *
2879
+ * Its own interface mixed in optionally, for the reason {@link
2880
+ * CatalogWorkflowStore} is: a store written against the previous shape must keep
2881
+ * compiling, and "this deployment cannot hold releases" has to be a sentence a
2882
+ * UI can say rather than a method missing at run time.
2883
+ *
2884
+ * The split from `CatalogWorkflowStore` is not only compatibility. These four
2885
+ * are the only members in this file that can change *what a cron executes*
2886
+ * without touching a graph, and keeping them behind their own predicate means a
2887
+ * store can hold graphs without acquiring that power by accident.
2888
+ */
2889
+ export interface CatalogWorkflowReleaseStore {
2890
+ /**
2891
+ * Freeze the graph as it currently stands, under its current version.
2892
+ *
2893
+ * **The only thing that mints one.** Not `saveWorkflow`, which is the autosave
2894
+ * this whole feature exists to stop being a deploy; not `publishWorkflow`,
2895
+ * which is idempotent and is called by a promotion apply — a release minted as
2896
+ * a side effect of promoting configuration into an environment would be a
2897
+ * release nobody in that environment chose.
2898
+ *
2899
+ * Refuses a draft, for the reason `WORKFLOW_STATUSES` already gives about what
2900
+ * a connector may point at and what a promotion may carry: what gets shipped
2901
+ * should be something a person declared finished.
2902
+ *
2903
+ * **Idempotent per version.** Releasing a graph whose current version is
2904
+ * already released answers with the existing release rather than minting a
2905
+ * second or overwriting its notes — the graph has not changed, so a second
2906
+ * release would be a record of an event that did not happen, and re-attributing
2907
+ * the first one would erase who actually shipped it.
2908
+ */
2909
+ releaseWorkflow(id: string, releasedBy: string, options?: {
2910
+ notes?: string;
2911
+ }): Promise<CatalogWorkflowRelease>;
2912
+ /** Newest first. */
2913
+ listWorkflowReleases(id: string): Promise<CatalogWorkflowRelease[]>;
2914
+ /**
2915
+ * The graph as it was at a released version, or `undefined`.
2916
+ *
2917
+ * `undefined` for a version that was never released as much as for a workflow
2918
+ * that does not exist, and callers must treat the two the same way: **fail,
2919
+ * never fall back to the latest.** Running the current graph because the named
2920
+ * one could not be produced is precisely the substitution a pin is written
2921
+ * down to prevent.
2922
+ *
2923
+ * Answers with a whole {@link CatalogWorkflow} rather than the bare release,
2924
+ * because that is what a run needs: the released graph, carried on the row's
2925
+ * present identity. The graph fields — nodes, edges, `targetType`,
2926
+ * `graphHash`, `version` — come from the release. The operational ones —
2927
+ * `name`, `status`, `schedule`, `enabled`, `liveVersion` — come from the row
2928
+ * as it is now, because they are not part of what was released. A cron somebody
2929
+ * changed this morning applies to the version that is live, not to whatever
2930
+ * cron was on the row the day it was released.
2931
+ */
2932
+ getWorkflowAt(id: string, version: number): Promise<CatalogWorkflow | undefined>;
2933
+ /**
2934
+ * Point {@link CatalogWorkflow.liveVersion} at a released version — or clear it.
2935
+ *
2936
+ * One method for going live, for rolling back and for going back to following
2937
+ * the latest, because they are one act with a different argument. Rollback in
2938
+ * particular is not a separate mechanism to build and test: it is this call
2939
+ * with a smaller number, and it works because the older graph is still stored.
2940
+ *
2941
+ * Refuses a version with no release behind it, naming what there is. A pointer
2942
+ * accepted at a number nothing can produce would be a pipeline that stops at
2943
+ * its next window, discovered by a load failing rather than by the person who
2944
+ * typed it.
2945
+ *
2946
+ * `undefined` clears the pointer and takes the graph back to following the
2947
+ * latest. Allowed rather than refused — it is the state every graph in every
2948
+ * deployment is in, so refusing would strand anything that ever went live —
2949
+ * and stated as a decision because it hands back exactly the hazard the
2950
+ * pointer removes: from that moment, saving the graph changes what the next
2951
+ * window runs.
2952
+ */
2953
+ setLiveWorkflowVersion(id: string, version: number | undefined, changedBy: string): Promise<CatalogWorkflow>;
2954
+ }
2721
2955
  /**
2722
2956
  * Where the rows between two nodes actually sit.
2723
2957
  *
@@ -2767,6 +3001,36 @@ export interface CatalogStageStore {
2767
3001
  * does, because a flag is a claim and a method is the thing itself.
2768
3002
  */
2769
3003
  export declare function supportsWorkflows(store: CatalogPipelineStore): store is CatalogPipelineStore & CatalogWorkflowStore;
3004
+ /**
3005
+ * Whether this store can mint a release and be pointed at one.
3006
+ *
3007
+ * All four asked for by name, for the reason `supportsWorkflows` asks for
3008
+ * `publishWorkflow` and `saveWorkflowSchedule` by name rather than assuming they
3009
+ * arrive together: a store with the mint and not the pointer would narrow
3010
+ * cleanly here, let somebody release a graph, and then fail on the call that was
3011
+ * supposed to make it run.
3012
+ *
3013
+ * {@link getWorkflowAt} is the one whose absence is least visible and most
3014
+ * expensive. A store that could hold a `liveVersion` and not resolve it would
3015
+ * point a scheduled load at a version it cannot produce — and the only place
3016
+ * that shows up is a cron window that stops firing.
3017
+ */
3018
+ export declare function supportsWorkflowReleases(store: CatalogPipelineStore): store is CatalogPipelineStore & CatalogWorkflowReleaseStore;
3019
+ /**
3020
+ * Which version of this graph a run gets when the caller names none.
3021
+ *
3022
+ * The one implementation of "follow the latest unless something is live", shared
3023
+ * by the scheduler and by the manual run route so the two cannot disagree about
3024
+ * what a cron does and what the button next to it does. That divergence is not
3025
+ * hypothetical: the schedule used to live on the connector and on the workflow
3026
+ * at once, and the whole of `ConnectorScheduler`'s docblock is about what it
3027
+ * cost to have two copies of one answer.
3028
+ *
3029
+ * Not a fallback in the defensive sense. `liveVersion` absent is a stated
3030
+ * position — this graph follows its head — and this function is where that
3031
+ * position is turned into a number, not where a missing value is patched over.
3032
+ */
3033
+ export declare function liveWorkflowVersion(workflow: CatalogWorkflow): number;
2770
3034
  /**
2771
3035
  * Whether this store keeps a transform's history.
2772
3036
  *
@@ -2834,7 +3098,7 @@ export type CatalogLoadExpectationStore = Required<Pick<CatalogPipelineStore, 'l
2834
3098
  * an editor whose save has nowhere to go.
2835
3099
  */
2836
3100
  export declare function supportsLoadExpectations(store: CatalogPipelineStore): store is CatalogPipelineStore & CatalogLoadExpectationStore;
2837
- export interface CatalogPipelineStore extends Partial<CatalogWorkflowStore>, Partial<CatalogStageStore> {
3101
+ export interface CatalogPipelineStore extends Partial<CatalogWorkflowStore>, Partial<CatalogWorkflowReleaseStore>, Partial<CatalogStageStore> {
2838
3102
  listConnectors(): Promise<CatalogConnector[]>;
2839
3103
  getConnector(id: string): Promise<CatalogConnector | undefined>;
2840
3104
  saveConnector(input: Omit<CatalogConnector, 'id' | 'createdAt' | 'updatedAt' | 'createdBy'> & {
@@ -34,6 +34,7 @@ exports.applyReusableNode = applyReusableNode;
34
34
  exports.isReusableNodeBody = isReusableNodeBody;
35
35
  exports.reusableNodeBodyOf = reusableNodeBodyOf;
36
36
  exports.describeVersionPin = describeVersionPin;
37
+ exports.describeLiveVersion = describeLiveVersion;
37
38
  exports.isWorkflowBranchLabel = isWorkflowBranchLabel;
38
39
  exports.isWorkflowStatus = isWorkflowStatus;
39
40
  exports.isWorkflowExecutionMode = isWorkflowExecutionMode;
@@ -47,6 +48,8 @@ exports.workflowGraphHash = workflowGraphHash;
47
48
  exports.isWorkflowNode = isWorkflowNode;
48
49
  exports.isWorkflowEdge = isWorkflowEdge;
49
50
  exports.supportsWorkflows = supportsWorkflows;
51
+ exports.supportsWorkflowReleases = supportsWorkflowReleases;
52
+ exports.liveWorkflowVersion = liveWorkflowVersion;
50
53
  exports.supportsTransformRevisions = supportsTransformRevisions;
51
54
  exports.supportsTransformPins = supportsTransformPins;
52
55
  exports.supportsReusableNodes = supportsReusableNodes;
@@ -977,6 +980,44 @@ function describeVersionPin(version, subject) {
977
980
  detail: `This node runs v${version} of ${subject} and stays there while it is edited elsewhere. Moving to a newer version is an edit to this graph, so it has a diff and a version of its own. A pin to a version that has been superseded more than ${catalog_workspace_1.CATALOG_REVISION_LIMIT} times can no longer be produced, and the run fails saying so rather than quietly using the latest.`,
978
981
  };
979
982
  }
983
+ /**
984
+ * The same question about a whole graph: does it follow its latest save, or does
985
+ * it run a version somebody chose?
986
+ *
987
+ * Shares {@link VersionPinCopy} and its two labels with
988
+ * {@link describeVersionPin} deliberately. A console that said "pinned to v6"
989
+ * about a transform node and invented different words for a graph would be two
990
+ * vocabularies for one idea, and the reader would have to work out whether they
991
+ * meant the same thing — which is the confusion the whole notion of a pin exists
992
+ * to remove.
993
+ *
994
+ * The *detail* differs, and only where the facts do. Two of them:
995
+ *
996
+ * - A node's pin can outlive the revision it names, because `catalog_revision`
997
+ * is capped. A graph's cannot: releases are never evicted, precisely because
998
+ * the one a live pointer names is the graph production is running. So this
999
+ * copy makes no eviction caveat, and must not acquire one.
1000
+ * - Following the latest is *cheap* for a node — everybody moves together, which
1001
+ * is often the point. For a graph it means editing is deploying, which is the
1002
+ * hazard this field was added to remove. So the unpinned sentence here is a
1003
+ * warning where the node's is a trade-off.
1004
+ */
1005
+ function describeLiveVersion(workflow) {
1006
+ if (workflow.liveVersion === undefined) {
1007
+ return {
1008
+ pinned: false,
1009
+ label: 'follows the latest',
1010
+ detail: `This graph runs whatever its latest save holds, currently v${workflow.version}. Editing it is therefore the same act as deploying it: the next scheduled window runs what was last saved, with nobody having decided that it should. Releasing a version and setting it live is what separates the two.`,
1011
+ };
1012
+ }
1013
+ return {
1014
+ pinned: true,
1015
+ label: `running v${workflow.liveVersion}`,
1016
+ detail: workflow.liveVersion === workflow.version
1017
+ ? `This graph runs the released v${workflow.liveVersion}, which is also its latest save. Editing it from here changes nothing about what runs until a new version is released and set live.`
1018
+ : `This graph runs the released v${workflow.liveVersion} while its latest save is v${workflow.version}. The edits since then are stored and are not running; setting a newer release live is what deploys them, and setting an older one live is a rollback.`,
1019
+ };
1020
+ }
980
1021
  /**
981
1022
  * Which side of an {@link WorkflowIfNode} a wire leaves by.
982
1023
  *
@@ -2352,6 +2393,43 @@ function supportsWorkflows(store) {
2352
2393
  // is the surface a scheduling incident already came through once.
2353
2394
  typeof store.saveWorkflowSchedule === 'function');
2354
2395
  }
2396
+ /**
2397
+ * Whether this store can mint a release and be pointed at one.
2398
+ *
2399
+ * All four asked for by name, for the reason `supportsWorkflows` asks for
2400
+ * `publishWorkflow` and `saveWorkflowSchedule` by name rather than assuming they
2401
+ * arrive together: a store with the mint and not the pointer would narrow
2402
+ * cleanly here, let somebody release a graph, and then fail on the call that was
2403
+ * supposed to make it run.
2404
+ *
2405
+ * {@link getWorkflowAt} is the one whose absence is least visible and most
2406
+ * expensive. A store that could hold a `liveVersion` and not resolve it would
2407
+ * point a scheduled load at a version it cannot produce — and the only place
2408
+ * that shows up is a cron window that stops firing.
2409
+ */
2410
+ function supportsWorkflowReleases(store) {
2411
+ return (typeof store.releaseWorkflow === 'function' &&
2412
+ typeof store.listWorkflowReleases === 'function' &&
2413
+ typeof store.getWorkflowAt === 'function' &&
2414
+ typeof store.setLiveWorkflowVersion === 'function');
2415
+ }
2416
+ /**
2417
+ * Which version of this graph a run gets when the caller names none.
2418
+ *
2419
+ * The one implementation of "follow the latest unless something is live", shared
2420
+ * by the scheduler and by the manual run route so the two cannot disagree about
2421
+ * what a cron does and what the button next to it does. That divergence is not
2422
+ * hypothetical: the schedule used to live on the connector and on the workflow
2423
+ * at once, and the whole of `ConnectorScheduler`'s docblock is about what it
2424
+ * cost to have two copies of one answer.
2425
+ *
2426
+ * Not a fallback in the defensive sense. `liveVersion` absent is a stated
2427
+ * position — this graph follows its head — and this function is where that
2428
+ * position is turned into a number, not where a missing value is patched over.
2429
+ */
2430
+ function liveWorkflowVersion(workflow) {
2431
+ return workflow.liveVersion ?? workflow.version;
2432
+ }
2355
2433
  /**
2356
2434
  * Whether this store keeps a transform's history.
2357
2435
  *
package/dist/client.d.ts CHANGED
@@ -153,8 +153,8 @@ export declare const catalogRoutes: {
153
153
  readonly traces: () => string;
154
154
  readonly trace: (id: string) => string;
155
155
  };
156
- export type { CatalogConnection, CatalogConnector, ConnectionCheck, CatalogTransform, CatalogWorkflow, CatalogWorkflowCapabilities, ConnectorKind, ConnectorRun, TransformLanguage, TransformResult, CallableWorkflowRef, WorkflowBranchLabel, WorkflowCallEnvelope, WorkflowCallNode, WorkflowCallOutput, WorkflowEdge, WorkflowExecutionMode, WorkflowFilterAll, WorkflowFilterAny, WorkflowFilterComparison, WorkflowFilterGroup, WorkflowFilterNode, WorkflowFilterOneOf, WorkflowFilterOperator, WorkflowFilterPredicate, WorkflowFilterPredicateKind, WorkflowFilterPresence, WorkflowFilterValue, WorkflowGraph, WorkflowEnvPredicate, WorkflowIfNode, WorkflowIfPredicate, WorkflowIssueCode, WorkflowNode, WorkflowNodeKind, WorkflowNodeOutcome, WorkflowPredicateKind, WorkflowRowCountPredicate, WorkflowRunOrderEntry, WorkflowSinkNode, WorkflowSkipReason, WorkflowSourceNode, WorkflowStageRef, WorkflowTransformNode, WorkflowValidationIssue, CatalogReusableNode, CatalogReusableNodeUse, ReusableNodeBody, ReusableNodeKind, ReusableNodeRef, ReusableSinkBody, ReusableSourceBody, VersionPinCopy, } from './catalog.pipeline';
157
- export { CONNECTOR_KINDS, isConnectorKind, isTransformLanguage, isWorkflowEdge, isWorkflowNode, REDACTED_SECRET, TRANSFORM_LANGUAGES, readWorkflowCallOutput, WORKFLOW_CALL_CONTRACT, applyReusableNode, reusableNodeBodyOf, isReusableNodeBody, isReusableNodeKind, REUSABLE_NODE_KINDS, NODE_KIND_IS_REUSABLE, nodeKindIsReusable, unreachableReusableNodeKind, describeVersionPin, } from './catalog.pipeline';
156
+ export type { CatalogConnection, CatalogConnector, ConnectionCheck, CatalogTransform, CatalogWorkflow, CatalogWorkflowCapabilities, CatalogWorkflowRelease, ConnectorKind, ConnectorRun, TransformLanguage, TransformResult, CallableWorkflowRef, WorkflowBranchLabel, WorkflowCallEnvelope, WorkflowCallNode, WorkflowCallOutput, WorkflowEdge, WorkflowExecutionMode, WorkflowFilterAll, WorkflowFilterAny, WorkflowFilterComparison, WorkflowFilterGroup, WorkflowFilterNode, WorkflowFilterOneOf, WorkflowFilterOperator, WorkflowFilterPredicate, WorkflowFilterPredicateKind, WorkflowFilterPresence, WorkflowFilterValue, WorkflowGraph, WorkflowEnvPredicate, WorkflowIfNode, WorkflowIfPredicate, WorkflowIssueCode, WorkflowNode, WorkflowNodeKind, WorkflowNodeOutcome, WorkflowPredicateKind, WorkflowRowCountPredicate, WorkflowRunOrderEntry, WorkflowSinkNode, WorkflowSkipReason, WorkflowSourceNode, WorkflowStageRef, WorkflowTransformNode, WorkflowValidationIssue, CatalogReusableNode, CatalogReusableNodeUse, ReusableNodeBody, ReusableNodeKind, ReusableNodeRef, ReusableSinkBody, ReusableSourceBody, VersionPinCopy, } from './catalog.pipeline';
157
+ export { CONNECTOR_KINDS, isConnectorKind, isTransformLanguage, isWorkflowEdge, isWorkflowNode, liveWorkflowVersion, REDACTED_SECRET, TRANSFORM_LANGUAGES, readWorkflowCallOutput, WORKFLOW_CALL_CONTRACT, applyReusableNode, reusableNodeBodyOf, isReusableNodeBody, isReusableNodeKind, REUSABLE_NODE_KINDS, NODE_KIND_IS_REUSABLE, nodeKindIsReusable, unreachableReusableNodeKind, describeLiveVersion, describeVersionPin, } from './catalog.pipeline';
158
158
  /**
159
159
  * The workflow validator, shipped to the browser deliberately.
160
160
  *
package/dist/client.js CHANGED
@@ -11,8 +11,8 @@
11
11
  * types are.
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.WORKFLOW_FILTER_MAX_DEPTH = exports.WORKFLOW_FILTER_COLUMN_PATTERN = exports.WORKFLOW_PREDICATE_KINDS = exports.WORKFLOW_BRANCH_LABELS = exports.WORKFLOW_NODE_KINDS = exports.WORKFLOW_NODE_ID_PATTERN = exports.WORKFLOW_ISSUE_CODES = exports.WORKFLOW_EXECUTION_MODES = exports.validateWorkflow = exports.workflowRowY = exports.workflowColumnX = exports.WORKFLOW_ROW_GAP = exports.WORKFLOW_NODE_WIDTH = exports.WORKFLOW_NODE_HEIGHT = exports.WORKFLOW_COLUMN_GAP = exports.describeVersionPin = exports.unreachableReusableNodeKind = exports.nodeKindIsReusable = exports.NODE_KIND_IS_REUSABLE = exports.REUSABLE_NODE_KINDS = exports.isReusableNodeKind = exports.isReusableNodeBody = exports.reusableNodeBodyOf = exports.applyReusableNode = exports.WORKFLOW_CALL_CONTRACT = exports.readWorkflowCallOutput = exports.TRANSFORM_LANGUAGES = exports.REDACTED_SECRET = exports.isWorkflowNode = exports.isWorkflowEdge = exports.isTransformLanguage = exports.isConnectorKind = exports.CONNECTOR_KINDS = exports.catalogRoutes = exports.UnsafeIdentifierError = exports.physicalColumn = exports.outputAlias = exports.isSafeIdentifier = exports.VALUELESS_FILTER_OPERATORS = exports.resolveObjectFilters = exports.parseObjectFilter = exports.offeredFilterOperators = exports.isCatalogFilterOperator = exports.filterOperatorsFor = exports.filterOperatorTakesValue = exports.encodeObjectFilter = exports.coerceFilterValue = exports.CATALOG_FILTER_OPERATORS = exports.CATALOG_FILTER_LIMIT = exports.CATALOG_REVISION_LIMIT = void 0;
15
- exports.DELETE_RECONCILIATION_STRATEGIES = exports.callableWorkflowBlock = exports.isWorkflowStatus = exports.isWorkflowNodeKind = exports.isWorkflowExecutionMode = exports.workflowRunOrder = exports.workflowGraphHash = exports.WORKFLOW_STATUSES = exports.unreachablePredicateKind = exports.unreachableNodeKind = exports.unreachableFilterPredicateKind = exports.unreachableFilterOperator = exports.workflowNodeRuns = exports.workflowNarrowedTypes = exports.workflowFilterMatches = exports.isWorkflowSkipReason = exports.isWorkflowPredicateKind = exports.isWorkflowIfPredicate = exports.isWorkflowFilterValue = exports.isWorkflowFilterPredicateKind = exports.isWorkflowFilterPredicate = exports.isWorkflowFilterOperator = exports.isWorkflowBranchLabel = exports.WORKFLOW_SKIP_REASONS = exports.WORKFLOW_FILTER_PREDICATE_KINDS = exports.WORKFLOW_FILTER_OPERATORS = exports.WORKFLOW_FILTER_MAX_VALUES = void 0;
14
+ exports.WORKFLOW_PREDICATE_KINDS = exports.WORKFLOW_BRANCH_LABELS = exports.WORKFLOW_NODE_KINDS = exports.WORKFLOW_NODE_ID_PATTERN = exports.WORKFLOW_ISSUE_CODES = exports.WORKFLOW_EXECUTION_MODES = exports.validateWorkflow = exports.workflowRowY = exports.workflowColumnX = exports.WORKFLOW_ROW_GAP = exports.WORKFLOW_NODE_WIDTH = exports.WORKFLOW_NODE_HEIGHT = exports.WORKFLOW_COLUMN_GAP = exports.describeVersionPin = exports.describeLiveVersion = exports.unreachableReusableNodeKind = exports.nodeKindIsReusable = exports.NODE_KIND_IS_REUSABLE = exports.REUSABLE_NODE_KINDS = exports.isReusableNodeKind = exports.isReusableNodeBody = exports.reusableNodeBodyOf = exports.applyReusableNode = exports.WORKFLOW_CALL_CONTRACT = exports.readWorkflowCallOutput = exports.TRANSFORM_LANGUAGES = exports.REDACTED_SECRET = exports.liveWorkflowVersion = exports.isWorkflowNode = exports.isWorkflowEdge = exports.isTransformLanguage = exports.isConnectorKind = exports.CONNECTOR_KINDS = exports.catalogRoutes = exports.UnsafeIdentifierError = exports.physicalColumn = exports.outputAlias = exports.isSafeIdentifier = exports.VALUELESS_FILTER_OPERATORS = exports.resolveObjectFilters = exports.parseObjectFilter = exports.offeredFilterOperators = exports.isCatalogFilterOperator = exports.filterOperatorsFor = exports.filterOperatorTakesValue = exports.encodeObjectFilter = exports.coerceFilterValue = exports.CATALOG_FILTER_OPERATORS = exports.CATALOG_FILTER_LIMIT = exports.CATALOG_REVISION_LIMIT = void 0;
15
+ exports.DELETE_RECONCILIATION_STRATEGIES = exports.callableWorkflowBlock = exports.isWorkflowStatus = exports.isWorkflowNodeKind = exports.isWorkflowExecutionMode = exports.workflowRunOrder = exports.workflowGraphHash = exports.WORKFLOW_STATUSES = exports.unreachablePredicateKind = exports.unreachableNodeKind = exports.unreachableFilterPredicateKind = exports.unreachableFilterOperator = exports.workflowNodeRuns = exports.workflowNarrowedTypes = exports.workflowFilterMatches = exports.isWorkflowSkipReason = exports.isWorkflowPredicateKind = exports.isWorkflowIfPredicate = exports.isWorkflowFilterValue = exports.isWorkflowFilterPredicateKind = exports.isWorkflowFilterPredicate = exports.isWorkflowFilterOperator = exports.isWorkflowBranchLabel = exports.WORKFLOW_SKIP_REASONS = exports.WORKFLOW_FILTER_PREDICATE_KINDS = exports.WORKFLOW_FILTER_OPERATORS = exports.WORKFLOW_FILTER_MAX_VALUES = exports.WORKFLOW_FILTER_MAX_DEPTH = exports.WORKFLOW_FILTER_COLUMN_PATTERN = void 0;
16
16
  exports.isDeleteReconciliationStrategy = isDeleteReconciliationStrategy;
17
17
  exports.pipelineExpectationRoutes = pipelineExpectationRoutes;
18
18
  // A value, not a type: a screen saying how far back the history goes should read
@@ -141,6 +141,13 @@ Object.defineProperty(exports, "isTransformLanguage", { enumerable: true, get: f
141
141
  // drift this entry point exists to prevent.
142
142
  Object.defineProperty(exports, "isWorkflowEdge", { enumerable: true, get: function () { return catalog_pipeline_1.isWorkflowEdge; } });
143
143
  Object.defineProperty(exports, "isWorkflowNode", { enumerable: true, get: function () { return catalog_pipeline_1.isWorkflowNode; } });
144
+ // "Which version does this actually run", answered once. A screen that showed
145
+ // the row's `version` beside a live pointer and left the reader to work out
146
+ // which one a cron would use is the exact confusion the pointer exists to
147
+ // remove — and a console computing it with its own `??` is a second copy of
148
+ // the rule, which is how the canvas and the scheduler come to disagree about
149
+ // what is deployed.
150
+ Object.defineProperty(exports, "liveWorkflowVersion", { enumerable: true, get: function () { return catalog_pipeline_1.liveWorkflowVersion; } });
144
151
  // What a redacted password reads as. A form that lets somebody paste an
145
152
  // address has to recognise the string a read showed them, or it posts the
146
153
  // placeholder back as the password on a connection that has no stored row to
@@ -172,6 +179,9 @@ Object.defineProperty(exports, "unreachableReusableNodeKind", { enumerable: true
172
179
  // One wording for "pinned" and "follows the latest", so an inspector cannot
173
180
  // describe following as though it were pinning — which is the whole
174
181
  // misunderstanding the pin exists to end.
182
+ // The same sentence, asked about a whole graph rather than one node. Shares
183
+ // `VersionPinCopy` with the line below so a console renders one vocabulary.
184
+ Object.defineProperty(exports, "describeLiveVersion", { enumerable: true, get: function () { return catalog_pipeline_1.describeLiveVersion; } });
175
185
  Object.defineProperty(exports, "describeVersionPin", { enumerable: true, get: function () { return catalog_pipeline_1.describeVersionPin; } });
176
186
  /**
177
187
  * The workflow validator, shipped to the browser deliberately.
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { type CatalogOverlayStore, FileCatalogOverlayStore, InMemoryCatalogOverl
8
8
  export { CATALOG_OVERLAY_STORE } from './catalog.overlay-store.token';
9
9
  export { MikroOrmCatalogRegistry } from './catalog.registry';
10
10
  export { CatalogRegistry } from './catalog.registry.base';
11
- export { CATALOG_PIPELINE_STORE, CODE_CONTEXT_CONTRACT, type CatalogCodeContext, type CatalogConnection, type CatalogConnector, type ConnectionCheck, CONNECTOR_KINDS, type CatalogLoadExpectations, type CatalogLoadExpectationStore, type CatalogPipelineStore, type CatalogStageStore, type CatalogTransform, type CatalogWorkflow, type CatalogWorkflowCapabilities, type CatalogWorkflowStore, type CallableWorkflowBlock, type CallableWorkflowDisagreement, type CallableWorkflowRef, callableWorkflowBlock, type ConnectorKind, type ConnectorRun, type DeleteReconciliation, isConnectorKind, isPipelineStore, isTransformLanguage, type LoadExpectation, type RowCountBound, type StoredLoadExpectation, readWorkflowCallOutput, REDACTED_SECRET, supportsLoadExpectations, supportsReusableNodes, supportsTransformPins, supportsTransformRevisions, applyReusableNode, type CatalogReusableNode, type CatalogReusableNodeStore, type CatalogReusableNodeUse, describeVersionPin, isReusableNodeBody, isReusableNodeKind, NODE_KIND_IS_REUSABLE, nodeKindIsReusable, REUSABLE_NODE_KINDS, type ReusableNodeBody, type ReusableNodeKind, type ReusableNodeRef, type ReusableSinkBody, type ReusableSourceBody, reusableNodeBodyOf, unreachableReusableNodeKind, type VersionPinCopy, isWorkflowBranchLabel, isWorkflowEdge, isWorkflowExecutionMode, isWorkflowFilterOperator, isWorkflowFilterPredicate, isWorkflowFilterPredicateKind, isWorkflowFilterValue, isWorkflowIfPredicate, isWorkflowNode, isWorkflowNodeKind, isWorkflowPredicateKind, isWorkflowSkipReason, isWorkflowStatus, supportsWorkflows, supportsWorkflowStages, TRANSFORM_RUNNER, TRANSFORM_LANGUAGES, type TransformLanguage, type TransformResult, type TransformRunner, unreachableFilterOperator, unreachableFilterPredicateKind, unreachableNodeKind, unreachablePredicateKind, validateWorkflow, WORKFLOW_BRANCH_LABELS, WORKFLOW_CALL_CONTRACT, WORKFLOW_COLUMN_GAP, WORKFLOW_EXECUTION_MODES, WORKFLOW_FILTER_COLUMN_PATTERN, WORKFLOW_FILTER_MAX_DEPTH, WORKFLOW_FILTER_MAX_VALUES, WORKFLOW_FILTER_OPERATORS, WORKFLOW_FILTER_PREDICATE_KINDS, WORKFLOW_ISSUE_CODES, WORKFLOW_NODE_HEIGHT, WORKFLOW_NODE_ID_PATTERN, WORKFLOW_NODE_KINDS, WORKFLOW_NODE_WIDTH, WORKFLOW_PREDICATE_KINDS, WORKFLOW_ROW_GAP, WORKFLOW_SKIP_REASONS, WORKFLOW_STATUSES, type WorkflowBranchLabel, workflowColumnX, workflowRowY, type WorkflowCallEnvelope, type WorkflowCallNode, type WorkflowCallOutput, type WorkflowEdge, type WorkflowExecutionMode, type WorkflowFilterAll, type WorkflowFilterAny, type WorkflowFilterComparison, type WorkflowFilterGroup, workflowFilterMatches, type WorkflowFilterNode, type WorkflowFilterOneOf, type WorkflowFilterOperator, type WorkflowFilterPredicate, type WorkflowFilterPredicateKind, type WorkflowFilterPresence, type WorkflowFilterValue, type WorkflowGraph, workflowGraphHash, type WorkflowEnvPredicate, type WorkflowIfNode, type WorkflowIfPredicate, type WorkflowIssueCode, type WorkflowNode, type WorkflowNodeKind, workflowNarrowedTypes, type WorkflowNodeOutcome, workflowNodeRuns, type WorkflowNodeStepInput, type WorkflowNodeStepOutput, workflowRunOrder, type WorkflowRunOrderEntry, type WorkflowPredicateKind, type WorkflowRowCountPredicate, type WorkflowSinkNode, type WorkflowSkipReason, type WorkflowSourceNode, type WorkflowStageRef, type WorkflowStatus, type WorkflowTransformNode, type WorkflowValidationIssue, } from './catalog.pipeline';
11
+ export { CATALOG_PIPELINE_STORE, CODE_CONTEXT_CONTRACT, type CatalogCodeContext, type CatalogConnection, type CatalogConnector, type ConnectionCheck, CONNECTOR_KINDS, type CatalogLoadExpectations, type CatalogLoadExpectationStore, type CatalogPipelineStore, type CatalogStageStore, type CatalogTransform, type CatalogWorkflow, type CatalogWorkflowCapabilities, type CatalogWorkflowRelease, type CatalogWorkflowReleaseStore, type CatalogWorkflowStore, type CallableWorkflowBlock, type CallableWorkflowDisagreement, type CallableWorkflowRef, callableWorkflowBlock, type ConnectorKind, type ConnectorRun, type DeleteReconciliation, isConnectorKind, isPipelineStore, isTransformLanguage, type LoadExpectation, type RowCountBound, type StoredLoadExpectation, readWorkflowCallOutput, REDACTED_SECRET, supportsLoadExpectations, supportsReusableNodes, supportsTransformPins, supportsTransformRevisions, applyReusableNode, type CatalogReusableNode, type CatalogReusableNodeStore, type CatalogReusableNodeUse, describeLiveVersion, describeVersionPin, isReusableNodeBody, isReusableNodeKind, NODE_KIND_IS_REUSABLE, nodeKindIsReusable, REUSABLE_NODE_KINDS, type ReusableNodeBody, type ReusableNodeKind, type ReusableNodeRef, type ReusableSinkBody, type ReusableSourceBody, reusableNodeBodyOf, unreachableReusableNodeKind, type VersionPinCopy, isWorkflowBranchLabel, isWorkflowEdge, isWorkflowExecutionMode, isWorkflowFilterOperator, isWorkflowFilterPredicate, isWorkflowFilterPredicateKind, isWorkflowFilterValue, isWorkflowIfPredicate, isWorkflowNode, isWorkflowNodeKind, isWorkflowPredicateKind, isWorkflowSkipReason, isWorkflowStatus, liveWorkflowVersion, supportsWorkflowReleases, supportsWorkflows, supportsWorkflowStages, TRANSFORM_RUNNER, TRANSFORM_LANGUAGES, type TransformLanguage, type TransformResult, type TransformRunner, unreachableFilterOperator, unreachableFilterPredicateKind, unreachableNodeKind, unreachablePredicateKind, validateWorkflow, WORKFLOW_BRANCH_LABELS, WORKFLOW_CALL_CONTRACT, WORKFLOW_COLUMN_GAP, WORKFLOW_EXECUTION_MODES, WORKFLOW_FILTER_COLUMN_PATTERN, WORKFLOW_FILTER_MAX_DEPTH, WORKFLOW_FILTER_MAX_VALUES, WORKFLOW_FILTER_OPERATORS, WORKFLOW_FILTER_PREDICATE_KINDS, WORKFLOW_ISSUE_CODES, WORKFLOW_NODE_HEIGHT, WORKFLOW_NODE_ID_PATTERN, WORKFLOW_NODE_KINDS, WORKFLOW_NODE_WIDTH, WORKFLOW_PREDICATE_KINDS, WORKFLOW_ROW_GAP, WORKFLOW_SKIP_REASONS, WORKFLOW_STATUSES, type WorkflowBranchLabel, workflowColumnX, workflowRowY, type WorkflowCallEnvelope, type WorkflowCallNode, type WorkflowCallOutput, type WorkflowEdge, type WorkflowExecutionMode, type WorkflowFilterAll, type WorkflowFilterAny, type WorkflowFilterComparison, type WorkflowFilterGroup, workflowFilterMatches, type WorkflowFilterNode, type WorkflowFilterOneOf, type WorkflowFilterOperator, type WorkflowFilterPredicate, type WorkflowFilterPredicateKind, type WorkflowFilterPresence, type WorkflowFilterValue, type WorkflowGraph, workflowGraphHash, type WorkflowEnvPredicate, type WorkflowIfNode, type WorkflowIfPredicate, type WorkflowIssueCode, type WorkflowNode, type WorkflowNodeKind, workflowNarrowedTypes, type WorkflowNodeOutcome, workflowNodeRuns, type WorkflowNodeStepInput, type WorkflowNodeStepOutput, workflowRunOrder, type WorkflowRunOrderEntry, type WorkflowPredicateKind, type WorkflowRowCountPredicate, type WorkflowSinkNode, type WorkflowSkipReason, type WorkflowSourceNode, type WorkflowStageRef, type WorkflowStatus, type WorkflowTransformNode, type WorkflowValidationIssue, } from './catalog.pipeline';
12
12
  export { type ColumnarStageBatch, STAGE_ENCODING, STAGE_ENCODING_VERSION, type StagePayload, classifyStagePayload, decodeStageRows, encodeStageRows, isColumnarStageBatch, } from './catalog.stage-encoding';
13
13
  export * from './catalog.environment';
14
14
  export { QueryCache } from './catalog.query-cache';
package/dist/index.js CHANGED
@@ -14,10 +14,10 @@ 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.isWorkflowFilterValue = exports.isWorkflowFilterPredicateKind = exports.isWorkflowFilterPredicate = exports.isWorkflowFilterOperator = exports.isWorkflowExecutionMode = exports.isWorkflowEdge = exports.isWorkflowBranchLabel = exports.unreachableReusableNodeKind = exports.reusableNodeBodyOf = exports.REUSABLE_NODE_KINDS = exports.nodeKindIsReusable = exports.NODE_KIND_IS_REUSABLE = exports.isReusableNodeKind = exports.isReusableNodeBody = exports.describeVersionPin = exports.applyReusableNode = exports.supportsTransformRevisions = exports.supportsTransformPins = exports.supportsReusableNodes = exports.supportsLoadExpectations = exports.REDACTED_SECRET = exports.readWorkflowCallOutput = exports.isTransformLanguage = exports.isPipelineStore = exports.isConnectorKind = exports.callableWorkflowBlock = exports.CONNECTOR_KINDS = exports.CODE_CONTEXT_CONTRACT = exports.CATALOG_PIPELINE_STORE = exports.CatalogRegistry = exports.MikroOrmCatalogRegistry = exports.CATALOG_OVERLAY_STORE = exports.InMemoryCatalogOverlayStore = exports.FileCatalogOverlayStore = exports.CATALOG_OPTIONS = exports.isStreamingQueryStore = exports.isQueryStore = exports.assertReadOnlyShape = exports.CatalogModule = exports.emitCatalog = exports.curationActor = exports.channelNameFor = exports.catalogEventPhase = exports.UNATTRIBUTED_PRINCIPAL_ID = exports.CATALOG_LIB = exports.CATALOG_EVENTS = exports.CATALOG_EVENT_PHASE_FALLBACK = exports.CATALOG_EVENT_PHASE = exports.CatalogType = exports.CatalogProperty = void 0;
18
- exports.guardFormula = exports.csvLines = exports.csvCell = exports.QueryCache = exports.isColumnarStageBatch = exports.encodeStageRows = exports.decodeStageRows = exports.classifyStagePayload = exports.STAGE_ENCODING_VERSION = exports.STAGE_ENCODING = exports.workflowRunOrder = exports.workflowNodeRuns = exports.workflowNarrowedTypes = exports.workflowGraphHash = exports.workflowFilterMatches = exports.workflowRowY = exports.workflowColumnX = exports.WORKFLOW_STATUSES = exports.WORKFLOW_SKIP_REASONS = exports.WORKFLOW_ROW_GAP = 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 = 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_CONTRACT = exports.WORKFLOW_BRANCH_LABELS = exports.validateWorkflow = exports.unreachablePredicateKind = exports.unreachableNodeKind = exports.unreachableFilterPredicateKind = exports.unreachableFilterOperator = exports.TRANSFORM_LANGUAGES = exports.TRANSFORM_RUNNER = exports.supportsWorkflowStages = exports.supportsWorkflows = exports.isWorkflowStatus = exports.isWorkflowSkipReason = exports.isWorkflowPredicateKind = exports.isWorkflowNodeKind = exports.isWorkflowNode = exports.isWorkflowIfPredicate = void 0;
19
- exports.REQUIRED_SCOPES = exports.MikroOrmReadStore = exports.UnsafeIdentifierError = 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 = 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.SubprocessTransformRunner = exports.toCsv = void 0;
20
- exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = void 0;
17
+ exports.isWorkflowFilterPredicateKind = exports.isWorkflowFilterPredicate = exports.isWorkflowFilterOperator = exports.isWorkflowExecutionMode = exports.isWorkflowEdge = exports.isWorkflowBranchLabel = exports.unreachableReusableNodeKind = exports.reusableNodeBodyOf = exports.REUSABLE_NODE_KINDS = exports.nodeKindIsReusable = exports.NODE_KIND_IS_REUSABLE = exports.isReusableNodeKind = exports.isReusableNodeBody = exports.describeVersionPin = exports.describeLiveVersion = exports.applyReusableNode = exports.supportsTransformRevisions = exports.supportsTransformPins = exports.supportsReusableNodes = exports.supportsLoadExpectations = exports.REDACTED_SECRET = exports.readWorkflowCallOutput = exports.isTransformLanguage = exports.isPipelineStore = exports.isConnectorKind = exports.callableWorkflowBlock = exports.CONNECTOR_KINDS = exports.CODE_CONTEXT_CONTRACT = exports.CATALOG_PIPELINE_STORE = exports.CatalogRegistry = exports.MikroOrmCatalogRegistry = exports.CATALOG_OVERLAY_STORE = exports.InMemoryCatalogOverlayStore = exports.FileCatalogOverlayStore = exports.CATALOG_OPTIONS = exports.isStreamingQueryStore = exports.isQueryStore = exports.assertReadOnlyShape = exports.CatalogModule = exports.emitCatalog = exports.curationActor = exports.channelNameFor = exports.catalogEventPhase = exports.UNATTRIBUTED_PRINCIPAL_ID = exports.CATALOG_LIB = exports.CATALOG_EVENTS = exports.CATALOG_EVENT_PHASE_FALLBACK = exports.CATALOG_EVENT_PHASE = exports.CatalogType = exports.CatalogProperty = void 0;
18
+ exports.QueryCache = exports.isColumnarStageBatch = exports.encodeStageRows = exports.decodeStageRows = exports.classifyStagePayload = exports.STAGE_ENCODING_VERSION = exports.STAGE_ENCODING = exports.workflowRunOrder = exports.workflowNodeRuns = exports.workflowNarrowedTypes = exports.workflowGraphHash = exports.workflowFilterMatches = exports.workflowRowY = exports.workflowColumnX = exports.WORKFLOW_STATUSES = exports.WORKFLOW_SKIP_REASONS = exports.WORKFLOW_ROW_GAP = 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 = 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_CONTRACT = exports.WORKFLOW_BRANCH_LABELS = exports.validateWorkflow = exports.unreachablePredicateKind = exports.unreachableNodeKind = exports.unreachableFilterPredicateKind = exports.unreachableFilterOperator = exports.TRANSFORM_LANGUAGES = exports.TRANSFORM_RUNNER = exports.supportsWorkflowStages = exports.supportsWorkflows = exports.supportsWorkflowReleases = exports.liveWorkflowVersion = exports.isWorkflowStatus = exports.isWorkflowSkipReason = exports.isWorkflowPredicateKind = exports.isWorkflowNodeKind = exports.isWorkflowNode = exports.isWorkflowIfPredicate = exports.isWorkflowFilterValue = void 0;
19
+ 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 = 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.SubprocessTransformRunner = exports.toCsv = exports.guardFormula = exports.csvLines = exports.csvCell = void 0;
20
+ exports.RequireScopes = exports.RequireHuman = exports.REQUIRES_HUMAN = exports.REQUIRED_SCOPES = exports.MikroOrmReadStore = exports.UnsafeIdentifierError = void 0;
21
21
  var catalog_decorators_1 = require("./catalog.decorators");
22
22
  Object.defineProperty(exports, "CatalogProperty", { enumerable: true, get: function () { return catalog_decorators_1.CatalogProperty; } });
23
23
  Object.defineProperty(exports, "CatalogType", { enumerable: true, get: function () { return catalog_decorators_1.CatalogType; } });
@@ -71,6 +71,7 @@ Object.defineProperty(exports, "supportsReusableNodes", { enumerable: true, get:
71
71
  Object.defineProperty(exports, "supportsTransformPins", { enumerable: true, get: function () { return catalog_pipeline_1.supportsTransformPins; } });
72
72
  Object.defineProperty(exports, "supportsTransformRevisions", { enumerable: true, get: function () { return catalog_pipeline_1.supportsTransformRevisions; } });
73
73
  Object.defineProperty(exports, "applyReusableNode", { enumerable: true, get: function () { return catalog_pipeline_1.applyReusableNode; } });
74
+ Object.defineProperty(exports, "describeLiveVersion", { enumerable: true, get: function () { return catalog_pipeline_1.describeLiveVersion; } });
74
75
  Object.defineProperty(exports, "describeVersionPin", { enumerable: true, get: function () { return catalog_pipeline_1.describeVersionPin; } });
75
76
  Object.defineProperty(exports, "isReusableNodeBody", { enumerable: true, get: function () { return catalog_pipeline_1.isReusableNodeBody; } });
76
77
  Object.defineProperty(exports, "isReusableNodeKind", { enumerable: true, get: function () { return catalog_pipeline_1.isReusableNodeKind; } });
@@ -92,6 +93,8 @@ Object.defineProperty(exports, "isWorkflowNodeKind", { enumerable: true, get: fu
92
93
  Object.defineProperty(exports, "isWorkflowPredicateKind", { enumerable: true, get: function () { return catalog_pipeline_1.isWorkflowPredicateKind; } });
93
94
  Object.defineProperty(exports, "isWorkflowSkipReason", { enumerable: true, get: function () { return catalog_pipeline_1.isWorkflowSkipReason; } });
94
95
  Object.defineProperty(exports, "isWorkflowStatus", { enumerable: true, get: function () { return catalog_pipeline_1.isWorkflowStatus; } });
96
+ Object.defineProperty(exports, "liveWorkflowVersion", { enumerable: true, get: function () { return catalog_pipeline_1.liveWorkflowVersion; } });
97
+ Object.defineProperty(exports, "supportsWorkflowReleases", { enumerable: true, get: function () { return catalog_pipeline_1.supportsWorkflowReleases; } });
95
98
  Object.defineProperty(exports, "supportsWorkflows", { enumerable: true, get: function () { return catalog_pipeline_1.supportsWorkflows; } });
96
99
  Object.defineProperty(exports, "supportsWorkflowStages", { enumerable: true, get: function () { return catalog_pipeline_1.supportsWorkflowStages; } });
97
100
  Object.defineProperty(exports, "TRANSFORM_RUNNER", { enumerable: true, get: function () { return catalog_pipeline_1.TRANSFORM_RUNNER; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dudousxd/nestjs-catalog",
3
- "version": "0.18.0",
3
+ "version": "0.19.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",