@nordcraft/core 2.0.6 → 2.0.8
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/api/LegacyToddleApi.d.ts +1 -0
- package/dist/api/LegacyToddleApi.js +3 -0
- package/dist/api/LegacyToddleApi.js.map +1 -1
- package/dist/api/ToddleApiV2.d.ts +2 -1
- package/dist/api/ToddleApiV2.js +3 -0
- package/dist/api/ToddleApiV2.js.map +1 -1
- package/dist/api/api.d.ts +2 -4
- package/dist/api/api.js +1 -42
- package/dist/api/api.js.map +1 -1
- package/dist/api/apiTypes.d.ts +2 -0
- package/dist/api/apiTypes.js.map +1 -1
- package/dist/component/ToddleComponent.d.ts +1 -3
- package/dist/component/ToddleComponent.js +22 -24
- package/dist/component/ToddleComponent.js.map +1 -1
- package/dist/component/component.types.d.ts +3 -1
- package/dist/component/component.types.js.map +1 -1
- package/dist/component/schemas/api-schema.js +5 -0
- package/dist/component/schemas/api-schema.js.map +1 -1
- package/dist/styling/className.d.ts +4 -1
- package/dist/styling/className.js +4 -1
- package/dist/styling/className.js.map +1 -1
- package/dist/styling/style.css.js +4 -1
- package/dist/styling/style.css.js.map +1 -1
- package/package.json +1 -1
- package/src/api/LegacyToddleApi.ts +3 -0
- package/src/api/ToddleApiV2.ts +5 -1
- package/src/api/api.test.ts +47 -0
- package/src/api/api.ts +3 -63
- package/src/api/apiTypes.ts +2 -0
- package/src/component/ToddleComponent.subComponents.test.ts +219 -0
- package/src/component/ToddleComponent.ts +25 -59
- package/src/component/component.types.ts +6 -1
- package/src/component/schemas/api-schema.ts +5 -0
- package/src/styling/className.test.ts +16 -1
- package/src/styling/className.ts +15 -2
- package/src/styling/style.css.ts +6 -4
- package/src/component/ToddleComponent.actionReferences.test.ts +0 -112
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../src/styling/style.css.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../src/styling/style.css.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/ToddleApiV2.ts
CHANGED
|
@@ -27,7 +27,7 @@ export class ToddleApiV2<Handler> implements ApiRequest {
|
|
|
27
27
|
this.globalFormulas = globalFormulas
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
get apiReferences(): Set<string> {
|
|
30
|
+
private get apiReferences(): Set<string> {
|
|
31
31
|
if (this._apiReferences) {
|
|
32
32
|
// Only compute apiReferences once
|
|
33
33
|
return this._apiReferences
|
|
@@ -174,6 +174,10 @@ export class ToddleApiV2<Handler> implements ApiRequest {
|
|
|
174
174
|
return this.api['@nordcraft/metadata']
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
get dependsOn() {
|
|
178
|
+
return Array.from(this.apiReferences)
|
|
179
|
+
}
|
|
180
|
+
|
|
177
181
|
*formulasInApi(): Generator<{
|
|
178
182
|
path: (string | number)[]
|
|
179
183
|
formula: Formula
|
package/src/api/api.test.ts
CHANGED
|
@@ -7,10 +7,13 @@ import {
|
|
|
7
7
|
getRequestPath,
|
|
8
8
|
getRequestQueryParams,
|
|
9
9
|
getUrl,
|
|
10
|
+
isLegacyApi,
|
|
10
11
|
toFormData,
|
|
11
12
|
} from './api'
|
|
12
13
|
import type { ApiRequest } from './apiTypes'
|
|
13
14
|
import { ApiMethod } from './apiTypes'
|
|
15
|
+
import { LegacyToddleApi } from './LegacyToddleApi'
|
|
16
|
+
import { ToddleApiV2 } from './ToddleApiV2'
|
|
14
17
|
|
|
15
18
|
describe('getApiPath()', () => {
|
|
16
19
|
test('it returns a valid url path string', () => {
|
|
@@ -486,3 +489,47 @@ describe('toFormData()', () => {
|
|
|
486
489
|
expect(formData.get('valid')).toBe('working')
|
|
487
490
|
})
|
|
488
491
|
})
|
|
492
|
+
describe('isLegacyApi()', () => {
|
|
493
|
+
test('it checks if an API is legacy', () => {
|
|
494
|
+
expect(
|
|
495
|
+
isLegacyApi({
|
|
496
|
+
name: 'Legacy API',
|
|
497
|
+
type: 'REST',
|
|
498
|
+
}),
|
|
499
|
+
).toBe(true)
|
|
500
|
+
expect(
|
|
501
|
+
isLegacyApi({
|
|
502
|
+
name: 'New API',
|
|
503
|
+
type: 'http',
|
|
504
|
+
version: 2,
|
|
505
|
+
inputs: {},
|
|
506
|
+
}),
|
|
507
|
+
).toBe(false)
|
|
508
|
+
expect(
|
|
509
|
+
isLegacyApi(
|
|
510
|
+
new LegacyToddleApi(
|
|
511
|
+
{
|
|
512
|
+
name: 'Legacy API',
|
|
513
|
+
type: 'REST',
|
|
514
|
+
},
|
|
515
|
+
'myLegacyApi',
|
|
516
|
+
{},
|
|
517
|
+
),
|
|
518
|
+
),
|
|
519
|
+
).toBe(true)
|
|
520
|
+
expect(
|
|
521
|
+
isLegacyApi(
|
|
522
|
+
new ToddleApiV2(
|
|
523
|
+
{
|
|
524
|
+
name: 'New API',
|
|
525
|
+
type: 'http',
|
|
526
|
+
version: 2,
|
|
527
|
+
inputs: {},
|
|
528
|
+
},
|
|
529
|
+
'myNewApi',
|
|
530
|
+
{},
|
|
531
|
+
),
|
|
532
|
+
),
|
|
533
|
+
).toBe(false)
|
|
534
|
+
})
|
|
535
|
+
})
|
package/src/api/api.ts
CHANGED
|
@@ -14,15 +14,14 @@ import type {
|
|
|
14
14
|
} from './apiTypes'
|
|
15
15
|
import { ApiMethod } from './apiTypes'
|
|
16
16
|
import { isJsonHeader } from './headers'
|
|
17
|
-
import { LegacyToddleApi } from './LegacyToddleApi'
|
|
18
|
-
import { ToddleApiV2 } from './ToddleApiV2'
|
|
17
|
+
import type { LegacyToddleApi } from './LegacyToddleApi'
|
|
18
|
+
import type { ToddleApiV2 } from './ToddleApiV2'
|
|
19
19
|
|
|
20
20
|
export const NON_BODY_RESPONSE_CODES = [101, 204, 205, 304]
|
|
21
21
|
|
|
22
22
|
export const isLegacyApi = <Handler>(
|
|
23
23
|
api: ComponentAPI | LegacyToddleApi<Handler> | ToddleApiV2<Handler>,
|
|
24
|
-
): api is LegacyComponentAPI | LegacyToddleApi<Handler> =>
|
|
25
|
-
api instanceof LegacyToddleApi ? true : !('version' in api)
|
|
24
|
+
): api is LegacyComponentAPI | LegacyToddleApi<Handler> => !('version' in api)
|
|
26
25
|
|
|
27
26
|
export const createApiRequest = <Handler>({
|
|
28
27
|
api,
|
|
@@ -420,62 +419,3 @@ export const createApiEvent = (
|
|
|
420
419
|
detail,
|
|
421
420
|
})
|
|
422
421
|
}
|
|
423
|
-
|
|
424
|
-
const compareApiDependencies = <Handler>(
|
|
425
|
-
a: LegacyToddleApi<Handler> | ToddleApiV2<Handler>,
|
|
426
|
-
b: LegacyToddleApi<Handler> | ToddleApiV2<Handler>,
|
|
427
|
-
) => {
|
|
428
|
-
const isADependentOnB = a.apiReferences.has(b.name)
|
|
429
|
-
const isBDependentOnA = b.apiReferences.has(a.name)
|
|
430
|
-
if (isADependentOnB === isBDependentOnA) {
|
|
431
|
-
return 0
|
|
432
|
-
}
|
|
433
|
-
// 1 means A goes last - hence B is evaluated before A
|
|
434
|
-
return isADependentOnB ? 1 : -1
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
export const sortApiObjects = <Handler>(
|
|
438
|
-
apis: Array<[string, ComponentAPI]>,
|
|
439
|
-
) => {
|
|
440
|
-
const apiMap = new Map<
|
|
441
|
-
string,
|
|
442
|
-
LegacyToddleApi<Handler> | ToddleApiV2<Handler>
|
|
443
|
-
>()
|
|
444
|
-
const getApi = (apiObj: ComponentAPI, key: string) => {
|
|
445
|
-
let api = apiMap.get(key)
|
|
446
|
-
if (!api) {
|
|
447
|
-
api =
|
|
448
|
-
apiObj.version === 2
|
|
449
|
-
? new ToddleApiV2<Handler>(
|
|
450
|
-
apiObj,
|
|
451
|
-
key,
|
|
452
|
-
// global formulas are not required for sorting
|
|
453
|
-
{
|
|
454
|
-
formulas: {},
|
|
455
|
-
packages: {},
|
|
456
|
-
},
|
|
457
|
-
)
|
|
458
|
-
: new LegacyToddleApi<Handler>(
|
|
459
|
-
apiObj,
|
|
460
|
-
key,
|
|
461
|
-
// global formulas are not required for sorting
|
|
462
|
-
{
|
|
463
|
-
formulas: {},
|
|
464
|
-
packages: {},
|
|
465
|
-
},
|
|
466
|
-
)
|
|
467
|
-
apiMap.set(key, api)
|
|
468
|
-
}
|
|
469
|
-
return api
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
return [...apis].sort(([aKey, aObj], [bKey, bObj]) => {
|
|
473
|
-
const a = getApi(aObj, aKey)
|
|
474
|
-
const b = getApi(bObj, bKey)
|
|
475
|
-
return compareApiDependencies(a, b)
|
|
476
|
-
})
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
export const sortApiEntries = <Handler>(
|
|
480
|
-
apis: Array<[string, LegacyToddleApi<Handler> | ToddleApiV2<Handler>]>,
|
|
481
|
-
) => [...apis].sort(([_, a], [__, b]) => compareApiDependencies(a, b))
|
package/src/api/apiTypes.ts
CHANGED
|
@@ -23,6 +23,7 @@ export interface LegacyComponentAPI {
|
|
|
23
23
|
onCompleted?: Nullable<EventModel>
|
|
24
24
|
onFailed?: Nullable<EventModel>
|
|
25
25
|
version?: never
|
|
26
|
+
dependsOn?: string[]
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
export interface LegacyApiStatus {
|
|
@@ -137,6 +138,7 @@ export interface ApiRequest extends ApiBase {
|
|
|
137
138
|
isError?: Nullable<{ formula: Formula }>
|
|
138
139
|
// Formula for determining when the request should time out
|
|
139
140
|
timeout?: Nullable<{ formula: Formula }>
|
|
141
|
+
dependsOn?: string[]
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
export interface ApiStatus {
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test'
|
|
2
|
+
import { ToddleComponent } from './ToddleComponent'
|
|
3
|
+
import type { Component } from './component.types'
|
|
4
|
+
|
|
5
|
+
describe('ToddleComponent.uniqueSubComponents', () => {
|
|
6
|
+
test('it should pass down the package name to sub-components', () => {
|
|
7
|
+
const packagedComp: Component = {
|
|
8
|
+
name: 'PackagedComp',
|
|
9
|
+
nodes: {
|
|
10
|
+
node1: {
|
|
11
|
+
type: 'component',
|
|
12
|
+
name: 'InternalComp',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
apis: {},
|
|
16
|
+
attributes: {},
|
|
17
|
+
variables: {},
|
|
18
|
+
workflows: {},
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const internalComp: Component = {
|
|
22
|
+
name: 'InternalComp',
|
|
23
|
+
nodes: {},
|
|
24
|
+
apis: {},
|
|
25
|
+
attributes: {},
|
|
26
|
+
variables: {},
|
|
27
|
+
workflows: {},
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const root: Component = {
|
|
31
|
+
name: 'root',
|
|
32
|
+
nodes: {
|
|
33
|
+
node1: {
|
|
34
|
+
type: 'component',
|
|
35
|
+
name: 'PackagedComp',
|
|
36
|
+
package: 'my-package',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
apis: {},
|
|
40
|
+
attributes: {},
|
|
41
|
+
variables: {},
|
|
42
|
+
workflows: {},
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const componentsMap: Record<string, Component> = {
|
|
46
|
+
'my-package/PackagedComp': packagedComp,
|
|
47
|
+
'my-package/InternalComp': internalComp,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const getComponent = (name: string, packageName?: string) => {
|
|
51
|
+
const key = packageName ? `${packageName}/${name}` : name
|
|
52
|
+
return componentsMap[key]
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const demo = new ToddleComponent({
|
|
56
|
+
component: root,
|
|
57
|
+
getComponent,
|
|
58
|
+
packageName: undefined,
|
|
59
|
+
globalFormulas: { formulas: {}, packages: {} },
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
const subComponents = demo.uniqueSubComponents
|
|
63
|
+
expect(subComponents).toHaveLength(2)
|
|
64
|
+
expect(subComponents[0].name).toBe('PackagedComp')
|
|
65
|
+
expect(subComponents[0].packageName).toBe('my-package')
|
|
66
|
+
expect(subComponents[1].name).toBe('InternalComp')
|
|
67
|
+
expect(subComponents[1].packageName).toBe('my-package')
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
test('it should handle nested components and avoid duplicates', () => {
|
|
71
|
+
const compA: Component = {
|
|
72
|
+
name: 'CompA',
|
|
73
|
+
nodes: {
|
|
74
|
+
node1: {
|
|
75
|
+
type: 'component',
|
|
76
|
+
name: 'CompB',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
apis: {},
|
|
80
|
+
attributes: {},
|
|
81
|
+
variables: {},
|
|
82
|
+
workflows: {},
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const compB: Component = {
|
|
86
|
+
name: 'CompB',
|
|
87
|
+
nodes: {},
|
|
88
|
+
apis: {},
|
|
89
|
+
attributes: {},
|
|
90
|
+
variables: {},
|
|
91
|
+
workflows: {},
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const root: Component = {
|
|
95
|
+
name: 'root',
|
|
96
|
+
nodes: {
|
|
97
|
+
node1: {
|
|
98
|
+
type: 'component',
|
|
99
|
+
name: 'CompA',
|
|
100
|
+
},
|
|
101
|
+
node2: {
|
|
102
|
+
type: 'component',
|
|
103
|
+
name: 'CompB',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
apis: {},
|
|
107
|
+
attributes: {},
|
|
108
|
+
variables: {},
|
|
109
|
+
workflows: {},
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const componentsMap: Record<string, Component> = {
|
|
113
|
+
CompA: compA,
|
|
114
|
+
CompB: compB,
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const getComponent = (name: string, packageName?: string) => {
|
|
118
|
+
const key = packageName ? `${packageName}/${name}` : name
|
|
119
|
+
return componentsMap[key]
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const demo = new ToddleComponent({
|
|
123
|
+
component: root,
|
|
124
|
+
getComponent,
|
|
125
|
+
packageName: undefined,
|
|
126
|
+
globalFormulas: { formulas: {}, packages: {} },
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
const subComponents = demo.uniqueSubComponents
|
|
130
|
+
expect(subComponents).toHaveLength(2)
|
|
131
|
+
const names = subComponents.map((c) => c.name).sort()
|
|
132
|
+
expect(names).toEqual(['CompA', 'CompB'])
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
test('it should allow sub-components to override the package name', () => {
|
|
136
|
+
const pkgAComp: Component = {
|
|
137
|
+
name: 'PkgAComp',
|
|
138
|
+
nodes: {
|
|
139
|
+
node1: {
|
|
140
|
+
type: 'component',
|
|
141
|
+
name: 'PkgBComp',
|
|
142
|
+
package: 'package-b',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
apis: {},
|
|
146
|
+
attributes: {},
|
|
147
|
+
variables: {},
|
|
148
|
+
workflows: {},
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const pkgBComp: Component = {
|
|
152
|
+
name: 'PkgBComp',
|
|
153
|
+
nodes: {
|
|
154
|
+
node1: {
|
|
155
|
+
type: 'component',
|
|
156
|
+
name: 'InternalComp',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
apis: {},
|
|
160
|
+
attributes: {},
|
|
161
|
+
variables: {},
|
|
162
|
+
workflows: {},
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const internalComp: Component = {
|
|
166
|
+
name: 'InternalComp',
|
|
167
|
+
nodes: {},
|
|
168
|
+
apis: {},
|
|
169
|
+
attributes: {},
|
|
170
|
+
variables: {},
|
|
171
|
+
workflows: {},
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const root: Component = {
|
|
175
|
+
name: 'root',
|
|
176
|
+
nodes: {
|
|
177
|
+
node1: {
|
|
178
|
+
type: 'component',
|
|
179
|
+
name: 'PkgAComp',
|
|
180
|
+
package: 'package-a',
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
apis: {},
|
|
184
|
+
attributes: {},
|
|
185
|
+
variables: {},
|
|
186
|
+
workflows: {},
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const componentsMap: Record<string, Component> = {
|
|
190
|
+
'package-a/PkgAComp': pkgAComp,
|
|
191
|
+
'package-b/PkgBComp': pkgBComp,
|
|
192
|
+
'package-b/InternalComp': internalComp,
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const getComponent = (name: string, packageName?: string) => {
|
|
196
|
+
const key = packageName ? `${packageName}/${name}` : name
|
|
197
|
+
return componentsMap[key]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const demo = new ToddleComponent({
|
|
201
|
+
component: root,
|
|
202
|
+
getComponent,
|
|
203
|
+
packageName: undefined,
|
|
204
|
+
globalFormulas: { formulas: {}, packages: {} },
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
const subComponents = demo.uniqueSubComponents
|
|
208
|
+
expect(subComponents).toHaveLength(3)
|
|
209
|
+
|
|
210
|
+
const pA = subComponents.find((c) => c.name === 'PkgAComp')
|
|
211
|
+
expect(pA?.packageName).toBe('package-a')
|
|
212
|
+
|
|
213
|
+
const pB = subComponents.find((c) => c.name === 'PkgBComp')
|
|
214
|
+
expect(pB?.packageName).toBe('package-b')
|
|
215
|
+
|
|
216
|
+
const internal = subComponents.find((c) => c.name === 'InternalComp')
|
|
217
|
+
expect(internal?.packageName).toBe('package-b')
|
|
218
|
+
})
|
|
219
|
+
})
|
|
@@ -2,7 +2,7 @@ import { isLegacyApi } from '../api/api'
|
|
|
2
2
|
import type { ComponentAPI } from '../api/apiTypes'
|
|
3
3
|
import { LegacyToddleApi } from '../api/LegacyToddleApi'
|
|
4
4
|
import { ToddleApiV2 } from '../api/ToddleApiV2'
|
|
5
|
-
import type { Formula
|
|
5
|
+
import type { Formula } from '../formula/formula'
|
|
6
6
|
import type { GlobalFormulas } from '../formula/formulaTypes'
|
|
7
7
|
import {
|
|
8
8
|
getFormulasInAction,
|
|
@@ -10,12 +10,7 @@ import {
|
|
|
10
10
|
} from '../formula/formulaUtils'
|
|
11
11
|
import { isDefined } from '../utils/util'
|
|
12
12
|
import { getActionsInAction } from './actionUtils'
|
|
13
|
-
import type {
|
|
14
|
-
ActionModel,
|
|
15
|
-
Component,
|
|
16
|
-
CustomActionModel,
|
|
17
|
-
NodeModel,
|
|
18
|
-
} from './component.types'
|
|
13
|
+
import type { ActionModel, Component, NodeModel } from './component.types'
|
|
19
14
|
import { isPageComponent } from './isPageComponent'
|
|
20
15
|
|
|
21
16
|
export class ToddleComponent<Handler> {
|
|
@@ -54,10 +49,8 @@ export class ToddleComponent<Handler> {
|
|
|
54
49
|
if (components.has(node.name)) {
|
|
55
50
|
return
|
|
56
51
|
}
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
node.package ?? packageName,
|
|
60
|
-
)
|
|
52
|
+
const componentPackageName = node.package ?? packageName
|
|
53
|
+
const component = this.getComponent(node.name, componentPackageName)
|
|
61
54
|
if (!component) {
|
|
62
55
|
return
|
|
63
56
|
}
|
|
@@ -66,59 +59,28 @@ export class ToddleComponent<Handler> {
|
|
|
66
59
|
new ToddleComponent({
|
|
67
60
|
component,
|
|
68
61
|
getComponent: this.getComponent,
|
|
69
|
-
packageName:
|
|
62
|
+
packageName: componentPackageName,
|
|
70
63
|
globalFormulas: this.globalFormulas,
|
|
71
64
|
}),
|
|
72
65
|
)
|
|
73
|
-
Object.values(component.nodes ?? {}).forEach(
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
Object.values(component.nodes ?? {}).forEach((node) => {
|
|
67
|
+
if (isDefined(node)) {
|
|
68
|
+
const nodePackageName =
|
|
69
|
+
(node.type === 'component' ? node.package : undefined) ??
|
|
70
|
+
componentPackageName ??
|
|
71
|
+
packageName
|
|
72
|
+
visitNode(nodePackageName)(node)
|
|
73
|
+
}
|
|
74
|
+
})
|
|
76
75
|
}
|
|
77
|
-
Object.values(this.nodes ?? {}).forEach(
|
|
76
|
+
Object.values(this.nodes ?? {}).forEach((node) => {
|
|
77
|
+
if (isDefined(node)) {
|
|
78
|
+
visitNode()(node)
|
|
79
|
+
}
|
|
80
|
+
})
|
|
78
81
|
return [...components.values()]
|
|
79
82
|
}
|
|
80
83
|
|
|
81
|
-
get formulaReferences() {
|
|
82
|
-
return new Set(
|
|
83
|
-
Array.from(this.formulasInComponent())
|
|
84
|
-
.filter(
|
|
85
|
-
(
|
|
86
|
-
entry,
|
|
87
|
-
): entry is {
|
|
88
|
-
path: (string | number)[]
|
|
89
|
-
formula: FunctionOperation
|
|
90
|
-
packageName?: string
|
|
91
|
-
} => entry.formula.type === 'function',
|
|
92
|
-
)
|
|
93
|
-
.flatMap((entry) => {
|
|
94
|
-
const refs = [entry.formula.name]
|
|
95
|
-
const packageName =
|
|
96
|
-
entry.formula.package ?? entry.packageName ?? this.packageName
|
|
97
|
-
if (
|
|
98
|
-
packageName &&
|
|
99
|
-
this.globalFormulas.packages?.[packageName]?.formulas?.[
|
|
100
|
-
entry.formula.name
|
|
101
|
-
]
|
|
102
|
-
) {
|
|
103
|
-
refs.push([packageName, entry.formula.name].join('/'))
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return refs
|
|
107
|
-
}),
|
|
108
|
-
)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
get actionReferences(): Set<string> {
|
|
112
|
-
return new Set(
|
|
113
|
-
Array.from(this.actionModelsInComponent())
|
|
114
|
-
.filter(
|
|
115
|
-
(entry): entry is [(string | number)[], CustomActionModel] =>
|
|
116
|
-
entry[1].type === 'Custom' || entry[1].type === undefined,
|
|
117
|
-
)
|
|
118
|
-
.map(([, a]) => [a.package, a.name].filter(isDefined).join('/')),
|
|
119
|
-
)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
84
|
/**
|
|
123
85
|
* Traverse all formulas in the component.
|
|
124
86
|
* @returns An iterable that yields the path and formula.
|
|
@@ -455,7 +417,9 @@ export class ToddleComponent<Handler> {
|
|
|
455
417
|
})
|
|
456
418
|
}
|
|
457
419
|
for (const [nodeKey, node] of Object.entries(this.nodes ?? {})) {
|
|
458
|
-
|
|
420
|
+
if (isDefined(node)) {
|
|
421
|
+
yield* visitNode(node, ['nodes', nodeKey])
|
|
422
|
+
}
|
|
459
423
|
}
|
|
460
424
|
}
|
|
461
425
|
|
|
@@ -542,7 +506,9 @@ export class ToddleComponent<Handler> {
|
|
|
542
506
|
])
|
|
543
507
|
}
|
|
544
508
|
for (const [nodeKey, node] of Object.entries(this.nodes ?? {})) {
|
|
545
|
-
|
|
509
|
+
if (isDefined(node)) {
|
|
510
|
+
yield* visitNode(node, ['nodes', nodeKey])
|
|
511
|
+
}
|
|
546
512
|
}
|
|
547
513
|
}
|
|
548
514
|
|
|
@@ -196,7 +196,7 @@ export interface Component {
|
|
|
196
196
|
>
|
|
197
197
|
workflows?: Nullable<Record<string, Nullable<ComponentWorkflow>>>
|
|
198
198
|
apis?: Nullable<Record<string, Nullable<ComponentAPI>>>
|
|
199
|
-
nodes?: Nullable<Record<string, NodeModel
|
|
199
|
+
nodes?: Nullable<Partial<Record<string, NodeModel | null>>>
|
|
200
200
|
events?: Nullable<Nullable<ComponentEvent>[]>
|
|
201
201
|
onLoad?: Nullable<EventModel>
|
|
202
202
|
onAttributeChange?: Nullable<EventModel>
|
|
@@ -206,6 +206,8 @@ export interface Component {
|
|
|
206
206
|
// Later, we will add information about allowed origins here
|
|
207
207
|
enabled?: Nullable<Formula>
|
|
208
208
|
}>
|
|
209
|
+
// Used to indicate if a page or any of its child components use custom actions/formulas
|
|
210
|
+
customCode?: Nullable<boolean>
|
|
209
211
|
}
|
|
210
212
|
|
|
211
213
|
export interface ComponentFormula extends NordcraftMetadata {
|
|
@@ -418,6 +420,9 @@ export interface ComponentEvent extends NordcraftMetadata {
|
|
|
418
420
|
|
|
419
421
|
export interface ComponentVariable extends NordcraftMetadata {
|
|
420
422
|
initialValue: Formula
|
|
423
|
+
// @deprecated - variables should be referenced by their key in component.variables
|
|
424
|
+
// name is only here to better reflect how variables are stored in legacy components
|
|
425
|
+
name?: never
|
|
421
426
|
}
|
|
422
427
|
|
|
423
428
|
export interface ComponentAttribute extends NordcraftMetadata {
|
|
@@ -210,6 +210,10 @@ const ApiRequestSchema: z.ZodType<ApiRequest> = z
|
|
|
210
210
|
.describe(
|
|
211
211
|
'Rules for redirecting based on response data. The key is a unique identifier for the rule.',
|
|
212
212
|
),
|
|
213
|
+
dependsOn: z
|
|
214
|
+
.array(z.string())
|
|
215
|
+
.optional()
|
|
216
|
+
.describe('List of APIs that this API depends on.'),
|
|
213
217
|
})
|
|
214
218
|
.describe('Schema defining an API request from a component or a page.')
|
|
215
219
|
|
|
@@ -244,6 +248,7 @@ const LegacyComponentAPISchema: z.ZodType<LegacyComponentAPI> = z
|
|
|
244
248
|
type: z.enum(['Bearer id_token', 'Bearer access_token']),
|
|
245
249
|
})
|
|
246
250
|
.nullish(),
|
|
251
|
+
dependsOn: z.array(z.string()).optional(),
|
|
247
252
|
})
|
|
248
253
|
.describe(
|
|
249
254
|
'Legacy API schema for backward compatibility. Never use this for new APIs.',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describe, expect, test } from 'bun:test'
|
|
2
|
+
import { getClassName, toValidClassName } from './className'
|
|
2
3
|
|
|
3
4
|
describe('toValidClassName()', () => {
|
|
4
5
|
test('it trims leading and trailing whitespace and replace the remaining whitespace with hyphens', () => {
|
|
@@ -17,3 +18,17 @@ describe('toValidClassName()', () => {
|
|
|
17
18
|
expect(toValidClassName('1class')).toBe('_1class')
|
|
18
19
|
})
|
|
19
20
|
})
|
|
21
|
+
|
|
22
|
+
describe('getClassName()', () => {
|
|
23
|
+
test('it produces the same classname whether a nullish entry is provided or not', () => {
|
|
24
|
+
expect(getClassName([null, undefined, { color: 'red' }])).toBe(
|
|
25
|
+
getClassName([{ color: 'red' }]),
|
|
26
|
+
)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
test('it produces the same classname whether an empty object is provided or not', () => {
|
|
30
|
+
expect(getClassName([{}, { color: 'red' }])).toBe(
|
|
31
|
+
getClassName([{ color: 'red' }]),
|
|
32
|
+
)
|
|
33
|
+
})
|
|
34
|
+
})
|
package/src/styling/className.ts
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
|
+
import type { NodeStyleModel } from '../component/component.types'
|
|
2
|
+
import type { Nullable } from '../types'
|
|
1
3
|
import { generateAlphabeticName, hash } from './hash'
|
|
4
|
+
import type { StyleVariant } from './variantSelector'
|
|
2
5
|
|
|
3
6
|
// Classnames are reused a lot, and JS hashing is expensive, so there is benefit in caching them in a native hashmap.
|
|
4
7
|
const CLASSNAME_LOOKUP = new Map<string, string>()
|
|
5
|
-
export const getClassName = (
|
|
6
|
-
|
|
8
|
+
export const getClassName = (
|
|
9
|
+
object: [Nullable<NodeStyleModel>, Nullable<StyleVariant[]>],
|
|
10
|
+
) => {
|
|
11
|
+
const stringified = JSON.stringify(
|
|
12
|
+
object.filter(
|
|
13
|
+
(item) =>
|
|
14
|
+
item !== null && // Skip nullish values
|
|
15
|
+
item !== undefined &&
|
|
16
|
+
(Array.isArray(item) ? item.length > 0 : true) && // Skip empty arrays/objects
|
|
17
|
+
(typeof item === 'object' ? Object.keys(item).length > 0 : true),
|
|
18
|
+
),
|
|
19
|
+
)
|
|
7
20
|
if (CLASSNAME_LOOKUP.has(stringified)) {
|
|
8
21
|
return CLASSNAME_LOOKUP.get(stringified)!
|
|
9
22
|
}
|