@teleporthq/teleport-plugin-next-workflows 0.43.74 → 0.44.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/__tests__/booking-calendar-feed-route.test.ts +494 -0
- package/__tests__/custom-node-result-taken-branch.test.ts +107 -0
- package/__tests__/data-api-date-parser.test.ts +45 -0
- package/__tests__/emit-custom-event-channel.test.ts +13 -0
- package/__tests__/invoice-billing-details.test.ts +278 -0
- package/__tests__/middleware-admin-panel-roles.test.ts +127 -0
- package/__tests__/page-arrival-remount.test.ts +247 -0
- package/__tests__/payment-driver-stripe.test.ts +23 -0
- package/__tests__/payment-drivers-module.test.ts +19 -0
- package/__tests__/payment-subscription-nodes.test.ts +8 -0
- package/__tests__/raw-query-error-code.test.ts +47 -0
- package/__tests__/runtime-template-token-resolution.test.ts +16 -0
- package/__tests__/segment-reply-changed-keys.test.ts +31 -0
- package/__tests__/segment-route-skipped-branch.test.ts +101 -0
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +23 -13
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +75 -27
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts +28 -0
- package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js +296 -0
- package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -0
- package/dist/cjs/data-api-route-generator.d.ts +6 -8
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +12 -16
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +30 -2
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-assembly-code.js +46 -6
- package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-html-code.js +10 -2
- package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-raw-query.js +11 -1
- package/dist/cjs/nodes/data/data-raw-query.js.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +11 -0
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/nodes/general/general-emit-custom-event.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-emit-custom-event.js +3 -1
- package/dist/cjs/nodes/general/general-emit-custom-event.js.map +1 -1
- package/dist/cjs/page-arrival.d.ts +10 -0
- package/dist/cjs/page-arrival.d.ts.map +1 -0
- package/dist/cjs/page-arrival.js +86 -0
- package/dist/cjs/page-arrival.js.map +1 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.d.ts.map +1 -1
- package/dist/cjs/payments/drivers/stripe-driver-code.js +11 -0
- package/dist/cjs/payments/drivers/stripe-driver-code.js.map +1 -1
- package/dist/cjs/payments/index.d.ts +10 -4
- package/dist/cjs/payments/index.d.ts.map +1 -1
- package/dist/cjs/payments/index.js +18 -7
- package/dist/cjs/payments/index.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/workflow-component-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +35 -149
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +14 -4
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-scope.d.ts +19 -0
- package/dist/cjs/workflow-scope.d.ts.map +1 -0
- package/dist/cjs/workflow-scope.js +147 -0
- package/dist/cjs/workflow-scope.js.map +1 -0
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +23 -13
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +75 -27
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/booking-calendar-feed-route-generator.d.ts +28 -0
- package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -0
- package/dist/esm/booking-calendar-feed-route-generator.js +291 -0
- package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -0
- package/dist/esm/data-api-route-generator.d.ts +6 -8
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +13 -17
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +30 -2
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-assembly-code.js +46 -6
- package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
- package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-html-code.js +10 -2
- package/dist/esm/invoice/invoice-html-code.js.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-raw-query.js +11 -1
- package/dist/esm/nodes/data/data-raw-query.js.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +11 -0
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/nodes/general/general-emit-custom-event.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-emit-custom-event.js +3 -1
- package/dist/esm/nodes/general/general-emit-custom-event.js.map +1 -1
- package/dist/esm/page-arrival.d.ts +10 -0
- package/dist/esm/page-arrival.d.ts.map +1 -0
- package/dist/esm/page-arrival.js +81 -0
- package/dist/esm/page-arrival.js.map +1 -0
- package/dist/esm/payments/drivers/stripe-driver-code.d.ts.map +1 -1
- package/dist/esm/payments/drivers/stripe-driver-code.js +11 -0
- package/dist/esm/payments/drivers/stripe-driver-code.js.map +1 -1
- package/dist/esm/payments/index.d.ts +10 -4
- package/dist/esm/payments/index.d.ts.map +1 -1
- package/dist/esm/payments/index.js +16 -6
- package/dist/esm/payments/index.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/workflow-component-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-component-plugin.js +32 -146
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +14 -4
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-scope.d.ts +19 -0
- package/dist/esm/workflow-scope.d.ts.map +1 -0
- package/dist/esm/workflow-scope.js +142 -0
- package/dist/esm/workflow-scope.js.map +1 -0
- package/package.json +4 -4
- package/src/api-route-generator.ts +23 -13
- package/src/auth-generator.ts +80 -25
- package/src/booking-calendar-feed-route-generator.ts +293 -0
- package/src/data-api-route-generator.ts +14 -19
- package/src/executor-generator.ts +30 -2
- package/src/index.ts +1 -0
- package/src/invoice/invoice-assembly-code.ts +46 -6
- package/src/invoice/invoice-html-code.ts +10 -2
- package/src/nodes/data/data-raw-query.ts +11 -1
- package/src/nodes/general/general-custom-js.ts +10 -0
- package/src/nodes/general/general-emit-custom-event.ts +3 -1
- package/src/page-arrival.ts +115 -0
- package/src/payments/drivers/stripe-driver-code.ts +11 -0
- package/src/payments/index.ts +18 -5
- package/src/workflow-component-plugin.ts +43 -188
- package/src/workflow-project-plugin.ts +15 -4
- package/src/workflow-scope.ts +184 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { UIDLWorkflow, UIDLWorkflows } from '@teleporthq/teleport-types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Which workflows belong to a page or a component, and which element a
|
|
5
|
+
* lifecycle trigger is bound to. Shared by the workflow plugin, which emits the
|
|
6
|
+
* workflows, and by the page-arrival check, which has to reach the same verdict
|
|
7
|
+
* for the components a page renders.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Trigger types that run as LIFECYCLE code (no React event prop) but are still
|
|
12
|
+
* bound to ONE element, so the workflow only belongs on the page that renders
|
|
13
|
+
* it. Returns the DOM id to prune against, or null when the trigger is not
|
|
14
|
+
* element-scoped.
|
|
15
|
+
*
|
|
16
|
+
* Same fallback chain as the element-trigger branch: the HTML id first, the
|
|
17
|
+
* project-document node id only as a last resort.
|
|
18
|
+
*/
|
|
19
|
+
export const resolveLifecycleTriggerElementId = (
|
|
20
|
+
triggerType: string,
|
|
21
|
+
config: Record<string, unknown>
|
|
22
|
+
): string | null => {
|
|
23
|
+
if (
|
|
24
|
+
triggerType !== 'event-element-visible' &&
|
|
25
|
+
triggerType !== 'event-chapter-reached' &&
|
|
26
|
+
triggerType !== 'event-scene-scrolled-past'
|
|
27
|
+
) {
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
return ((config.elementHtmlId || config.nodeId) as string) || null
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Component-scope triggers match by emitted component name. The GUI stamps the
|
|
34
|
+
// name at export time, but generators may re-case or strip spaces during
|
|
35
|
+
// resolution, so equality is checked case/separator-insensitively.
|
|
36
|
+
const normalizeComponentName = (name: string): string =>
|
|
37
|
+
(name || '').toLowerCase().replace(/[^a-z0-9]/g, '')
|
|
38
|
+
|
|
39
|
+
export const getRelevantWorkflows = (
|
|
40
|
+
workflows: UIDLWorkflows,
|
|
41
|
+
uidl: any,
|
|
42
|
+
isPage: boolean
|
|
43
|
+
): UIDLWorkflow[] => {
|
|
44
|
+
const relevant: UIDLWorkflow[] = []
|
|
45
|
+
const pageId = uidl.outputOptions?.pageId || uidl.outputOptions?.fileName || uidl.name || ''
|
|
46
|
+
|
|
47
|
+
const allWorkflows = Object.values(workflows.workflows) as UIDLWorkflow[]
|
|
48
|
+
allWorkflows.forEach((wf: UIDLWorkflow) => {
|
|
49
|
+
const trigger = wf.trigger
|
|
50
|
+
|
|
51
|
+
if (trigger.type === 'event-cron-triggered') {
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (trigger.type === 'event-webhook-received') {
|
|
56
|
+
return
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (trigger.type === 'event-state-change') {
|
|
60
|
+
const cfg = trigger.config || {}
|
|
61
|
+
const stateDefs = cfg.stateDefinitions as
|
|
62
|
+
| Array<{
|
|
63
|
+
pageOrComponentId?: string
|
|
64
|
+
pageOrComponentName?: string
|
|
65
|
+
name?: string
|
|
66
|
+
stateDefinitionId?: string
|
|
67
|
+
}>
|
|
68
|
+
| undefined
|
|
69
|
+
|
|
70
|
+
let boundContainerType = cfg.boundContainerType as string | undefined
|
|
71
|
+
if (!boundContainerType) {
|
|
72
|
+
if (stateDefs?.some((s) => s.pageOrComponentName)) {
|
|
73
|
+
boundContainerType = 'component'
|
|
74
|
+
} else if (!isPage && stateDefs && stateDefs.length > 0) {
|
|
75
|
+
boundContainerType = 'component'
|
|
76
|
+
} else {
|
|
77
|
+
boundContainerType = 'page'
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const matchesContainer = boundContainerType === 'page' ? isPage : !isPage
|
|
82
|
+
if (!matchesContainer) {
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const boundFromConfig = cfg.boundPageOrComponentId as string | undefined
|
|
87
|
+
const matchesByName =
|
|
88
|
+
!!stateDefs &&
|
|
89
|
+
stateDefs.some((sd) => sd.pageOrComponentName && sd.pageOrComponentName === uidl.name)
|
|
90
|
+
const matchesById =
|
|
91
|
+
boundFromConfig === pageId ||
|
|
92
|
+
(!!stateDefs && stateDefs.some((sd) => sd.pageOrComponentId === pageId))
|
|
93
|
+
|
|
94
|
+
if (matchesByName || matchesById) {
|
|
95
|
+
relevant.push(wf)
|
|
96
|
+
}
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (trigger.type === 'event-global-state-change') {
|
|
101
|
+
if (!isPage) {
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
const selectedPages = trigger.config.selectedPages as Array<{ id: string }> | undefined
|
|
105
|
+
if (
|
|
106
|
+
selectedPages &&
|
|
107
|
+
selectedPages.length > 0 &&
|
|
108
|
+
!selectedPages.some((p) => p.id === pageId)
|
|
109
|
+
) {
|
|
110
|
+
return
|
|
111
|
+
}
|
|
112
|
+
relevant.push(wf)
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (trigger.scope === 'global') {
|
|
117
|
+
return
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (trigger.scope === 'component') {
|
|
121
|
+
if (isPage) {
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
const cfg = trigger.config || {}
|
|
125
|
+
const cfgName = (cfg.componentName as string) || ''
|
|
126
|
+
const cfgId = (cfg.componentId as string) || ''
|
|
127
|
+
const matches =
|
|
128
|
+
(cfgName &&
|
|
129
|
+
(cfgName === uidl.name ||
|
|
130
|
+
normalizeComponentName(cfgName) === normalizeComponentName(uidl.name))) ||
|
|
131
|
+
(cfgId && cfgId === pageId)
|
|
132
|
+
if (matches) {
|
|
133
|
+
relevant.push(wf)
|
|
134
|
+
}
|
|
135
|
+
return
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (trigger.scope === 'page' && isPage) {
|
|
139
|
+
const triggerPageId = trigger.config.pageId as string
|
|
140
|
+
const selectedPages = trigger.config.selectedPages as Array<{ id: string }> | undefined
|
|
141
|
+
|
|
142
|
+
if (trigger.type === 'event-page-loaded') {
|
|
143
|
+
const allPages = trigger.config.allPages === true
|
|
144
|
+
if (allPages) {
|
|
145
|
+
relevant.push(wf)
|
|
146
|
+
return
|
|
147
|
+
}
|
|
148
|
+
// Unscoped page-loaded workflows are SKIPPED, not injected everywhere.
|
|
149
|
+
// Silently fanning out to every page masks mis-scoped workflows whose
|
|
150
|
+
// state target lives in a component (the setter no-ops on pages).
|
|
151
|
+
if (!triggerPageId && (!selectedPages || selectedPages.length === 0)) {
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (triggerPageId && triggerPageId !== pageId) {
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (selectedPages && !selectedPages.some((p) => p.id === pageId)) {
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
relevant.push(wf)
|
|
165
|
+
return
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (trigger.scope === 'element') {
|
|
169
|
+
// If the element-scoped trigger specifies which pages it belongs to, filter by page.
|
|
170
|
+
// This prevents including ALL element-scoped workflows on every page (massive bloat).
|
|
171
|
+
const elementSelectedPages = trigger.config.selectedPages as Array<{ id: string }> | undefined
|
|
172
|
+
if (isPage && elementSelectedPages && elementSelectedPages.length > 0) {
|
|
173
|
+
if (!elementSelectedPages.some((p) => p.id === pageId)) {
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
relevant.push(wf)
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
return relevant
|
|
184
|
+
}
|