@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.
- package/dist/catalog.pipeline.d.ts +265 -1
- package/dist/catalog.pipeline.js +78 -0
- package/dist/client.d.ts +2 -2
- package/dist/client.js +12 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -4
- package/package.json +1 -1
|
@@ -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'> & {
|
package/dist/catalog.pipeline.js
CHANGED
|
@@ -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.
|
|
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.
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
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.
|
|
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",
|