@sitecore-feaas/clientside 0.1.27 → 0.1.29
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/build/cdn.js +115 -0
- package/build/cdn.js.map +1 -0
- package/build/components/FEAASBase.js +212 -79
- package/build/components/FEAASBase.js.map +1 -1
- package/build/components/FEAASComponent.js +51 -17
- package/build/components/FEAASComponent.js.map +1 -1
- package/build/components/FEAASLoader.js +6 -0
- package/build/components/FEAASLoader.js.map +1 -1
- package/build/components/FEAASStylesheet.js +18 -13
- package/build/components/FEAASStylesheet.js.map +1 -1
- package/build/dom/component.js +34 -0
- package/build/dom/component.js.map +1 -0
- package/build/dom/data.js +105 -0
- package/build/dom/data.js.map +1 -0
- package/build/{dom.js → dom/rendering.js} +3 -194
- package/build/dom/rendering.js.map +1 -0
- package/build/dom/scripts.js +48 -0
- package/build/dom/scripts.js.map +1 -0
- package/build/dom/stylesheet.js +39 -0
- package/build/dom/stylesheet.js.map +1 -0
- package/build/fetch.js +72 -22
- package/build/fetch.js.map +1 -1
- package/build/{basic.js → headless.js} +11 -3
- package/build/headless.js.map +1 -0
- package/build/ui/FEAASContext.js +10 -3
- package/build/ui/FEAASContext.js.map +1 -1
- package/build/ui/FEAASEditor.js +5 -0
- package/build/ui/FEAASEditor.js.map +1 -1
- package/build/ui/FEAASPicker.js +7 -1
- package/build/ui/FEAASPicker.js.map +1 -1
- package/build/ui/index.js +1 -1
- package/build/ui/index.js.map +1 -1
- package/build/ui/react.js +6 -0
- package/build/ui/react.js.map +1 -0
- package/build/utils/promise.js +26 -0
- package/build/utils/promise.js.map +1 -0
- package/dist/browser/headless.esm.js +69 -0
- package/dist/browser/headless.esm.js.map +1 -0
- package/dist/browser/headless.js +69 -0
- package/dist/browser/headless.js.map +1 -0
- package/dist/browser/index.esm.js +3 -5
- package/dist/browser/index.esm.js.map +1 -1
- package/dist/browser/index.js +5 -5
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/react.js +67 -0
- package/dist/browser/react.js.map +1 -0
- package/dist/node/headless.esm.js +67 -0
- package/dist/node/headless.esm.js.map +7 -0
- package/dist/node/headless.js +67 -0
- package/dist/node/headless.js.map +7 -0
- package/dist/node/index.esm.js +3 -3
- package/dist/node/index.esm.js.map +4 -4
- package/dist/node/index.js +3 -3
- package/dist/node/index.js.map +4 -4
- package/dist/node/react.js +67 -0
- package/dist/node/react.js.map +7 -0
- package/examples/index.html +0 -5
- package/package.json +23 -12
- package/scripts/build.js +17 -6
- package/scripts/test-setup.ts +1 -0
- package/src/cdn.ts +188 -0
- package/src/components/FEAASBase.tsx +234 -82
- package/src/components/FEAASComponent.tsx +59 -21
- package/src/components/FEAASLoader.tsx +4 -0
- package/src/components/FEAASStylesheet.tsx +14 -13
- package/src/dom/component.ts +35 -0
- package/src/dom/data.ts +124 -0
- package/src/{dom.ts → dom/rendering.ts} +4 -218
- package/src/dom/scripts.ts +47 -0
- package/src/dom/stylesheet.ts +48 -0
- package/src/fetch.ts +79 -25
- package/src/{basic.ts → headless.ts} +11 -2
- package/src/ui/FEAASContext.tsx +12 -4
- package/src/ui/FEAASEditor.tsx +5 -0
- package/src/ui/FEAASPicker.tsx +6 -2
- package/src/ui/index.ts +1 -1
- package/src/ui/react.tsx +8 -0
- package/src/utils/promise.ts +34 -0
- package/test/FEAASBase.test.tsx +195 -0
- package/test/FEAASComponent.test.tsx +284 -0
- package/test/FEAASContext.test.tsx +76 -0
- package/test/FEAASPicker.test.tsx +40 -0
- package/test/FEAASStylesheet.test.tsx +159 -0
- package/test/cdn.ts +39 -0
- package/test/{render.ts → dom.test.ts} +12 -6
- package/test/extras.ts +1 -1
- package/test/fetch.ts +254 -0
- package/test/tsconfig.json +4 -1
- package/types/cdn.d.ts +57 -0
- package/types/cdn.d.ts.map +1 -0
- package/types/components/FEAASBase.d.ts +220 -16
- package/types/components/FEAASBase.d.ts.map +1 -1
- package/types/components/FEAASComponent.d.ts +34 -7
- package/types/components/FEAASComponent.d.ts.map +1 -1
- package/types/components/FEAASLoader.d.ts +4 -0
- package/types/components/FEAASLoader.d.ts.map +1 -1
- package/types/components/FEAASStylesheet.d.ts +5 -13
- package/types/components/FEAASStylesheet.d.ts.map +1 -1
- package/types/dom/component.d.ts +6 -0
- package/types/dom/component.d.ts.map +1 -0
- package/types/dom/data.d.ts +15 -0
- package/types/dom/data.d.ts.map +1 -0
- package/types/dom/rendering.d.ts +20 -0
- package/types/dom/rendering.d.ts.map +1 -0
- package/types/dom/scripts.d.ts +4 -0
- package/types/dom/scripts.d.ts.map +1 -0
- package/types/dom/stylesheet.d.ts +8 -0
- package/types/dom/stylesheet.d.ts.map +1 -0
- package/types/fetch.d.ts +25 -11
- package/types/fetch.d.ts.map +1 -1
- package/types/headless.d.ts +24 -0
- package/types/headless.d.ts.map +1 -0
- package/types/tsbuildinfo +1 -1
- package/types/tsbuildinfo_ui +1 -1
- package/types/ui/FEAASContext.d.ts +15 -5
- package/types/ui/FEAASContext.d.ts.map +1 -1
- package/types/ui/FEAASEditor.d.ts +18 -0
- package/types/ui/FEAASEditor.d.ts.map +1 -1
- package/types/ui/FEAASPicker.d.ts +15 -3
- package/types/ui/FEAASPicker.d.ts.map +1 -1
- package/types/ui/index.d.ts +1 -1
- package/types/ui/index.d.ts.map +1 -1
- package/types/ui/react.d.ts +7 -0
- package/types/ui/react.d.ts.map +1 -0
- package/types/utils/promise.d.ts +8 -0
- package/types/utils/promise.d.ts.map +1 -0
- package/build/basic.js.map +0 -1
- package/build/cloud.js +0 -71
- package/build/cloud.js.map +0 -1
- package/build/dom.js.map +0 -1
- package/build/node.js +0 -10
- package/build/node.js.map +0 -1
- package/build/ui/node.js +0 -3
- package/build/ui/node.js.map +0 -1
- package/dist/browser/basic.esm.js +0 -69
- package/dist/browser/basic.esm.js.map +0 -1
- package/dist/browser/basic.js +0 -69
- package/dist/browser/basic.js.map +0 -1
- package/dist/node/basic.esm.js +0 -67
- package/dist/node/basic.esm.js.map +0 -7
- package/dist/node/basic.js +0 -67
- package/dist/node/basic.js.map +0 -7
- package/src/cloud.ts +0 -118
- package/src/node.ts +0 -10
- package/src/ui/node.ts +0 -2
- package/test/components.ts +0 -31
- package/types/basic.d.ts +0 -16
- package/types/basic.d.ts.map +0 -1
- package/types/cloud.d.ts +0 -28
- package/types/cloud.d.ts.map +0 -1
- package/types/dom.d.ts +0 -41
- package/types/dom.d.ts.map +0 -1
- package/types/node.d.ts +0 -4
- package/types/node.d.ts.map +0 -1
- package/types/ui/node.d.ts +0 -3
- package/types/ui/node.d.ts.map +0 -1
package/test/fetch.ts
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { vi, describe, it, assert, beforeAll, expect, beforeEach } from 'vitest'
|
|
2
|
+
import { CH1Node, serializeCH1RichText } from '../src/dom/data.js'
|
|
3
|
+
import { clearFetchCache, fetchAndRevalidate } from '../src/fetch.js'
|
|
4
|
+
const yesterday = new Date(2000, 1, 1, 0, 0, 0)
|
|
5
|
+
const yesterdayNoon = new Date(2000, 1, 2, 12, 0, 0)
|
|
6
|
+
const today = new Date(2000, 1, 2, 0, 0, 0)
|
|
7
|
+
const todayNoon = new Date(2000, 1, 2, 12, 0, 0)
|
|
8
|
+
describe('Fetch', () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
// vi.useFakeTimers()
|
|
11
|
+
vi.setSystemTime(todayNoon)
|
|
12
|
+
clearFetchCache()
|
|
13
|
+
phases1.length = 0
|
|
14
|
+
phases2.length = 0
|
|
15
|
+
})
|
|
16
|
+
var phases1: [t: string, p: string][] = []
|
|
17
|
+
var phases2: [t: string, p: string][] = []
|
|
18
|
+
async function callback1(response: Response, phase: string) {
|
|
19
|
+
phases1.push([await response.clone().text(), phase])
|
|
20
|
+
}
|
|
21
|
+
async function callback2(response: Response, phase: string) {
|
|
22
|
+
phases2.push([await response.clone().text(), phase])
|
|
23
|
+
}
|
|
24
|
+
it('should deduplicate fresh requests', async () => {
|
|
25
|
+
const spy = vi.spyOn(global, 'fetch')
|
|
26
|
+
spy.mockImplementation(
|
|
27
|
+
async (url: string, options?: Parameters<typeof fetch>[1]) =>
|
|
28
|
+
new Response('A', {
|
|
29
|
+
headers: {
|
|
30
|
+
date: todayNoon.toUTCString()
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
)
|
|
34
|
+
await expect(
|
|
35
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
36
|
+
).resolves.toEqual('A')
|
|
37
|
+
await expect(
|
|
38
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
39
|
+
).resolves.toEqual('A')
|
|
40
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
41
|
+
expect(phases1).toEqual([['A', 'initial']])
|
|
42
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
43
|
+
await expect(
|
|
44
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
45
|
+
).resolves.toEqual('A')
|
|
46
|
+
expect(phases1).toEqual([
|
|
47
|
+
['A', 'initial'],
|
|
48
|
+
['A', 'initial']
|
|
49
|
+
])
|
|
50
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
51
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
52
|
+
clearFetchCache()
|
|
53
|
+
await expect(
|
|
54
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
55
|
+
).resolves.toEqual('A')
|
|
56
|
+
expect(phases1).toEqual([
|
|
57
|
+
['A', 'initial'],
|
|
58
|
+
['A', 'initial'],
|
|
59
|
+
['A', 'initial']
|
|
60
|
+
])
|
|
61
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
62
|
+
await expect(
|
|
63
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
64
|
+
).resolves.toEqual('A')
|
|
65
|
+
expect(phases1).toEqual([
|
|
66
|
+
['A', 'initial'],
|
|
67
|
+
['A', 'initial'],
|
|
68
|
+
['A', 'initial']
|
|
69
|
+
])
|
|
70
|
+
expect(phases2).toEqual([
|
|
71
|
+
['A', 'initial'],
|
|
72
|
+
['A', 'initial']
|
|
73
|
+
])
|
|
74
|
+
expect(spy).toHaveBeenCalledTimes(2)
|
|
75
|
+
})
|
|
76
|
+
it('should deduplicate failing requests', async () => {
|
|
77
|
+
const spy = vi.spyOn(global, 'fetch')
|
|
78
|
+
spy.mockImplementation(
|
|
79
|
+
async (url: string, options?: Parameters<typeof fetch>[1]) =>
|
|
80
|
+
new Response('A', {
|
|
81
|
+
headers: {
|
|
82
|
+
date: todayNoon.toUTCString()
|
|
83
|
+
},
|
|
84
|
+
status: 400
|
|
85
|
+
})
|
|
86
|
+
)
|
|
87
|
+
expect(() =>
|
|
88
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
89
|
+
).rejects.toEqual(new Error('Fetch failed'))
|
|
90
|
+
expect(() =>
|
|
91
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
92
|
+
).rejects.toEqual(new Error('Fetch failed'))
|
|
93
|
+
expect(spy).toHaveBeenCalledTimes(1)
|
|
94
|
+
expect(phases1).toEqual([])
|
|
95
|
+
expect(phases2).toEqual([])
|
|
96
|
+
expect(() => fetchAndRevalidate('a').then((r) => r.clone().text())).rejects.toEqual(new Error('Fetch failed'))
|
|
97
|
+
clearFetchCache()
|
|
98
|
+
expect(() => fetchAndRevalidate('a').then((r) => r.clone().text())).rejects.toEqual(new Error('Fetch failed'))
|
|
99
|
+
expect(spy).toHaveBeenCalledTimes(2)
|
|
100
|
+
expect(() => fetchAndRevalidate('a').then((r) => r.clone().text())).rejects.toEqual(new Error('Fetch failed'))
|
|
101
|
+
expect(spy).toHaveBeenCalledTimes(2)
|
|
102
|
+
expect(phases1).toEqual([])
|
|
103
|
+
expect(phases2).toEqual([])
|
|
104
|
+
})
|
|
105
|
+
it('should deduplicate cached requests', async () => {
|
|
106
|
+
const spy = vi.spyOn(global, 'fetch')
|
|
107
|
+
spy.mockImplementation(async (url: string, options?: Parameters<typeof fetch>[1]) => {
|
|
108
|
+
if (options?.method == 'HEAD') {
|
|
109
|
+
return new Response('A', {
|
|
110
|
+
headers: {
|
|
111
|
+
date: yesterday.toUTCString()
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
} else {
|
|
115
|
+
return new Response('A', {
|
|
116
|
+
headers: {
|
|
117
|
+
date: yesterday.toUTCString()
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
})
|
|
122
|
+
await expect(
|
|
123
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
124
|
+
).resolves.toEqual('A')
|
|
125
|
+
await expect(
|
|
126
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
127
|
+
).resolves.toEqual('A')
|
|
128
|
+
expect(spy).toHaveBeenCalledTimes(2)
|
|
129
|
+
expect(phases1).toEqual([['A', 'initial']])
|
|
130
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
131
|
+
await expect(
|
|
132
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
133
|
+
).resolves.toEqual('A')
|
|
134
|
+
expect(phases1).toEqual([
|
|
135
|
+
['A', 'initial'],
|
|
136
|
+
['A', 'initial']
|
|
137
|
+
])
|
|
138
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
139
|
+
expect(spy).toHaveBeenCalledTimes(2)
|
|
140
|
+
clearFetchCache()
|
|
141
|
+
await expect(
|
|
142
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
143
|
+
).resolves.toEqual('A')
|
|
144
|
+
expect(phases1).toEqual([
|
|
145
|
+
['A', 'initial'],
|
|
146
|
+
['A', 'initial'],
|
|
147
|
+
['A', 'initial']
|
|
148
|
+
])
|
|
149
|
+
expect(phases2).toEqual([['A', 'initial']])
|
|
150
|
+
await expect(
|
|
151
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
152
|
+
).resolves.toEqual('A')
|
|
153
|
+
expect(phases1).toEqual([
|
|
154
|
+
['A', 'initial'],
|
|
155
|
+
['A', 'initial'],
|
|
156
|
+
['A', 'initial']
|
|
157
|
+
])
|
|
158
|
+
expect(phases2).toEqual([
|
|
159
|
+
['A', 'initial'],
|
|
160
|
+
['A', 'initial']
|
|
161
|
+
])
|
|
162
|
+
expect(spy).toHaveBeenCalledTimes(4)
|
|
163
|
+
})
|
|
164
|
+
it('should deduplicate updated requests', async () => {
|
|
165
|
+
const spy = vi.spyOn(global, 'fetch')
|
|
166
|
+
spy.mockImplementation(async (url: string, options?: Parameters<typeof fetch>[1]) => {
|
|
167
|
+
if (options?.method == 'HEAD') {
|
|
168
|
+
return new Response('A', {
|
|
169
|
+
headers: {
|
|
170
|
+
'last-modified': today.toUTCString(),
|
|
171
|
+
date: todayNoon.toUTCString()
|
|
172
|
+
}
|
|
173
|
+
})
|
|
174
|
+
} else if (options?.cache == 'reload') {
|
|
175
|
+
return new Response('B', {
|
|
176
|
+
headers: {
|
|
177
|
+
'last-modified': today.toUTCString(),
|
|
178
|
+
date: today.toUTCString()
|
|
179
|
+
}
|
|
180
|
+
})
|
|
181
|
+
} else {
|
|
182
|
+
return new Response('A', {
|
|
183
|
+
headers: {
|
|
184
|
+
'last-modified': yesterday.toUTCString(),
|
|
185
|
+
date: yesterday.toUTCString()
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
await expect(
|
|
191
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
192
|
+
).resolves.toEqual('B')
|
|
193
|
+
await expect(
|
|
194
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
195
|
+
).resolves.toEqual('B')
|
|
196
|
+
expect(spy).toHaveBeenCalledTimes(3)
|
|
197
|
+
expect(phases1).toEqual([
|
|
198
|
+
['A', 'initial'],
|
|
199
|
+
['B', 'updated']
|
|
200
|
+
])
|
|
201
|
+
expect(phases2).toEqual([
|
|
202
|
+
['A', 'initial'],
|
|
203
|
+
['B', 'updated']
|
|
204
|
+
])
|
|
205
|
+
await expect(
|
|
206
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
207
|
+
).resolves.toEqual('B')
|
|
208
|
+
expect(phases1).toEqual([
|
|
209
|
+
['A', 'initial'],
|
|
210
|
+
['B', 'updated'],
|
|
211
|
+
['A', 'initial'],
|
|
212
|
+
['B', 'updated']
|
|
213
|
+
])
|
|
214
|
+
expect(phases2).toEqual([
|
|
215
|
+
['A', 'initial'],
|
|
216
|
+
['B', 'updated']
|
|
217
|
+
])
|
|
218
|
+
expect(spy).toHaveBeenCalledTimes(3)
|
|
219
|
+
clearFetchCache()
|
|
220
|
+
await expect(
|
|
221
|
+
fetchAndRevalidate('a', undefined, undefined, callback1).then((r) => r.clone().text())
|
|
222
|
+
).resolves.toEqual('B')
|
|
223
|
+
expect(phases1).toEqual([
|
|
224
|
+
['A', 'initial'],
|
|
225
|
+
['B', 'updated'],
|
|
226
|
+
['A', 'initial'],
|
|
227
|
+
['B', 'updated'],
|
|
228
|
+
['A', 'initial'],
|
|
229
|
+
['B', 'updated']
|
|
230
|
+
])
|
|
231
|
+
expect(phases2).toEqual([
|
|
232
|
+
['A', 'initial'],
|
|
233
|
+
['B', 'updated']
|
|
234
|
+
])
|
|
235
|
+
await expect(
|
|
236
|
+
fetchAndRevalidate('a', undefined, undefined, callback2).then((r) => r.clone().text())
|
|
237
|
+
).resolves.toEqual('B')
|
|
238
|
+
expect(phases1).toEqual([
|
|
239
|
+
['A', 'initial'],
|
|
240
|
+
['B', 'updated'],
|
|
241
|
+
['A', 'initial'],
|
|
242
|
+
['B', 'updated'],
|
|
243
|
+
['A', 'initial'],
|
|
244
|
+
['B', 'updated']
|
|
245
|
+
])
|
|
246
|
+
expect(phases2).toEqual([
|
|
247
|
+
['A', 'initial'],
|
|
248
|
+
['B', 'updated'],
|
|
249
|
+
['A', 'initial'],
|
|
250
|
+
['B', 'updated']
|
|
251
|
+
])
|
|
252
|
+
expect(spy).toHaveBeenCalledTimes(6)
|
|
253
|
+
})
|
|
254
|
+
})
|
package/test/tsconfig.json
CHANGED
package/types/cdn.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ValidatableRequestPhase } from './fetch.js';
|
|
2
|
+
export declare const DEFAULT_CDN_URL = "https://feaascomponentsapidev.blob.core.windows.net";
|
|
3
|
+
export type FEAASCDNComponentParams = {
|
|
4
|
+
cdn?: string;
|
|
5
|
+
revision?: 'staging' | 'published' | 'saved' | number;
|
|
6
|
+
library: string;
|
|
7
|
+
component: string;
|
|
8
|
+
version: string;
|
|
9
|
+
/** @deprecated Use `cdn` instead */
|
|
10
|
+
hostname?: string;
|
|
11
|
+
};
|
|
12
|
+
export type FEAASCDNComponentSource = {
|
|
13
|
+
src: string;
|
|
14
|
+
};
|
|
15
|
+
export type FEAASCDNComponentParamsCustomizations = {
|
|
16
|
+
instance?: string;
|
|
17
|
+
};
|
|
18
|
+
export type FEAASCDNComponentProps = (FEAASCDNComponentParams | FEAASCDNComponentSource) & FEAASCDNComponentParamsCustomizations;
|
|
19
|
+
export interface FEAASCDNStylesheetParams {
|
|
20
|
+
cdn?: string;
|
|
21
|
+
library: string;
|
|
22
|
+
revision?: 'staging' | 'published' | 'saved' | number;
|
|
23
|
+
/** @deprecated Use `cdn` instead */
|
|
24
|
+
hostname?: string;
|
|
25
|
+
}
|
|
26
|
+
export type FEAASCDNStylesheetSource = {
|
|
27
|
+
src: string;
|
|
28
|
+
};
|
|
29
|
+
export type FEAASCDNStylesheetProps = FEAASCDNStylesheetParams | FEAASCDNStylesheetSource;
|
|
30
|
+
export declare function parseComponentSource(source: string): FEAASCDNComponentParams;
|
|
31
|
+
export declare function getComponentSource(props: FEAASCDNComponentParams): string;
|
|
32
|
+
export declare function getStylesheetSource(props: FEAASCDNStylesheetParams): string;
|
|
33
|
+
export declare function parseStylesheetSource(source: string): FEAASCDNStylesheetParams;
|
|
34
|
+
export declare function getComponentURL(props: FEAASCDNComponentProps): string;
|
|
35
|
+
export declare function getStylesheetURL(props: FEAASCDNStylesheetProps): string;
|
|
36
|
+
export declare function fetchAndRevalidateComponent(props: FEAASCDNComponentProps, callback?: (html: string) => void, dontRevalidate?: boolean): Promise<import("./fetch.js").ValidatableRequest & Required<Pick<import("./fetch.js").ValidatableRequest, "response">>>;
|
|
37
|
+
/** Fetches HTML of a component. */
|
|
38
|
+
export declare function fetchComponent(props: FEAASCDNComponentProps | string): Promise<{
|
|
39
|
+
template: string;
|
|
40
|
+
lastModified: string;
|
|
41
|
+
cdn?: string;
|
|
42
|
+
revision?: number | "staging" | "published" | "saved";
|
|
43
|
+
library: string;
|
|
44
|
+
component: string;
|
|
45
|
+
version: string;
|
|
46
|
+
/** @deprecated Use `cdn` instead */
|
|
47
|
+
hostname?: string;
|
|
48
|
+
instance?: string;
|
|
49
|
+
} | {
|
|
50
|
+
template: string;
|
|
51
|
+
lastModified: string;
|
|
52
|
+
src: string;
|
|
53
|
+
instance?: string;
|
|
54
|
+
}>;
|
|
55
|
+
export type ValidatableStylesheetCallback = (css: string, phase: ValidatableRequestPhase) => void;
|
|
56
|
+
export declare function fetchAndRevalidateStylesheet(props: FEAASCDNStylesheetProps | string, callback: ValidatableStylesheetCallback): Promise<Response>;
|
|
57
|
+
//# sourceMappingURL=cdn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdn.d.ts","sourceRoot":"","sources":["../src/cdn.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAEnB,eAAO,MAAM,eAAe,wDAAwD,CAAA;AACpF,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IAEf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AACD,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AACD,MAAM,MAAM,sBAAsB,GAAG,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,GACtF,qCAAqC,CAAA;AAEvC,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;IAErD,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,GAAG,wBAAwB,CAAA;AAEzF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,CAM5E;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,UAahE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,UAIlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAM9E;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,UAS5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,UAS9D;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,cAAc,UAAQ,0HA8CvB;AAED,mCAAmC;AACnC,wBAAsB,cAAc,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM;;;;;;;;IAvIzE,oCAAoC;;;;;;;;GAkJrC;AAED,MAAM,MAAM,6BAA6B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAA;AACjG,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,uBAAuB,GAAG,MAAM,EACvC,QAAQ,EAAE,6BAA6B,qBAoBxC"}
|
|
@@ -1,13 +1,37 @@
|
|
|
1
|
-
import { ReactElement, ReactNode } from 'react';
|
|
1
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
2
2
|
import type ReactDOMClient from 'react-dom/client';
|
|
3
|
+
import type ReactDOM from 'react-dom';
|
|
3
4
|
import type React from 'react';
|
|
5
|
+
import { ControlledPromise } from '../utils/promise.js';
|
|
4
6
|
export type OptionalExcept<T, K extends keyof T> = Pick<T, K> & Partial<Omit<T, K>>;
|
|
5
7
|
declare var WebComponent: {
|
|
6
8
|
new (): HTMLElement;
|
|
7
9
|
prototype: HTMLElement;
|
|
8
10
|
};
|
|
11
|
+
export interface ReactPayload {
|
|
12
|
+
React: typeof React;
|
|
13
|
+
ReactDOM: typeof ReactDOM;
|
|
14
|
+
ReactDOMClient: typeof ReactDOMClient;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* FEAASBase is a superclass for FEAAS components with optional react support.
|
|
18
|
+
*
|
|
19
|
+
* Initialization lifecycle:
|
|
20
|
+
*
|
|
21
|
+
* - `set(props)`
|
|
22
|
+
* - `load() => payload`
|
|
23
|
+
* - `onLoad?(payload)`
|
|
24
|
+
* - `update()`
|
|
25
|
+
* - `render(payload, props)`
|
|
26
|
+
* - `whenRendered`
|
|
27
|
+
* - - / If needs to reload, e.g. bypass cache /
|
|
28
|
+
* - - `onLoad(newPayload) `
|
|
29
|
+
* - - `whenRendered`
|
|
30
|
+
* - `whenLoaded`
|
|
31
|
+
*/
|
|
9
32
|
export declare class FEAASBase<Props = any, Payload = any> extends WebComponent {
|
|
10
33
|
static observedAttributes: string[];
|
|
34
|
+
defaultProps: Partial<Props>;
|
|
11
35
|
/** Return attributes as parsed values */
|
|
12
36
|
getProps(context?: HTMLElement): any;
|
|
13
37
|
/** Properties parsed in current tick */
|
|
@@ -17,10 +41,11 @@ export declare class FEAASBase<Props = any, Payload = any> extends WebComponent
|
|
|
17
41
|
nextRender: number;
|
|
18
42
|
/** Is/was component in the dom? */
|
|
19
43
|
connected: boolean;
|
|
20
|
-
/** Result of lazy loading */
|
|
21
|
-
payload: Payload;
|
|
22
44
|
refs: Record<string, FEAASBase>;
|
|
23
45
|
descendants: FEAASBase[];
|
|
46
|
+
/** Result of lazy loading */
|
|
47
|
+
payload: Payload;
|
|
48
|
+
whenLoaded: ControlledPromise<Payload>;
|
|
24
49
|
constructor();
|
|
25
50
|
/** Attaches shadow root if getShadowRootOptions any settings, or uses element itself */
|
|
26
51
|
getRoot(): FEAASBase | HTMLElement | ShadowRoot;
|
|
@@ -28,19 +53,21 @@ export declare class FEAASBase<Props = any, Payload = any> extends WebComponent
|
|
|
28
53
|
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
29
54
|
/** Components parses its attributes when connected, and schedules rendeirng */
|
|
30
55
|
connectedCallback(): void;
|
|
56
|
+
disconnectedCallback(): void;
|
|
31
57
|
/**
|
|
32
58
|
* Web components are initialized depth-first, making child elements render before its parents. This could here
|
|
33
59
|
* attempts to avoid this and inverts the initialization logic, so that children are initialized in the context of its
|
|
34
60
|
* already-initialized parents.
|
|
35
61
|
*
|
|
36
|
-
* FEAAS components dispatch `
|
|
37
|
-
*
|
|
62
|
+
* FEAAS components dispatch `feaasMount` event that allows components to store references to each other. In addition
|
|
63
|
+
* it allows external scripts to listen for initialization of FEAAS components
|
|
38
64
|
*/
|
|
39
|
-
|
|
65
|
+
mount(): void;
|
|
66
|
+
log(...args: any): void;
|
|
67
|
+
/** Nothing special happens on unmount, except setting a flag */
|
|
68
|
+
unmount(): void;
|
|
40
69
|
getParent(onlyFeaas?: boolean): HTMLElement;
|
|
41
70
|
getElements(root?: HTMLElement | ShadowRoot, onlyFeaas?: boolean): HTMLElement[];
|
|
42
|
-
/** Nothing special happens on disconnect, except setting a flag */
|
|
43
|
-
disconnectedCallback(): void;
|
|
44
71
|
/** Catch-all event handler that dispatches events to callback */
|
|
45
72
|
handleEvent(event: Event): void;
|
|
46
73
|
/** Act on children element being removed */
|
|
@@ -53,22 +80,196 @@ export declare class FEAASBase<Props = any, Payload = any> extends WebComponent
|
|
|
53
80
|
* are set
|
|
54
81
|
*/
|
|
55
82
|
isReadyToLoad(): boolean;
|
|
83
|
+
/** Generic error handler */
|
|
84
|
+
onError(error: Error, where?: string, handled?: boolean): boolean;
|
|
85
|
+
shouldUpdateOnLoad(): boolean;
|
|
86
|
+
onLoad: (payload: Payload) => void;
|
|
56
87
|
/** Load lazy component & render */
|
|
57
|
-
|
|
88
|
+
advance(): Promise<void>;
|
|
89
|
+
flush(): void;
|
|
58
90
|
/** Invoke preloading logic that needs to finish before component can render */
|
|
59
91
|
load(): Promise<any>;
|
|
60
|
-
/** Payload is inside onLoad callback. For web components that use react, it has to provide React & ReactDOM props */
|
|
61
|
-
onLoad: (payload: Payload) => void;
|
|
62
92
|
/**
|
|
63
93
|
* Component-specific logic that updates the DOM. Default render implementation assume react rendering, in that case
|
|
64
94
|
* the component needs to provide React & ReactDOM references in its payload. Web component redefine its render to not
|
|
65
95
|
* use react at all
|
|
66
96
|
*/
|
|
67
|
-
update(
|
|
97
|
+
update(): any;
|
|
68
98
|
invokeReactRendering(): ReactNode;
|
|
69
|
-
reactWrapper:
|
|
99
|
+
reactWrapper: React.FunctionComponent;
|
|
100
|
+
reactErrorBoundary: new (...args: any) => React.Component<{
|
|
101
|
+
children: any;
|
|
102
|
+
slot: string;
|
|
103
|
+
}, {
|
|
104
|
+
error: Error;
|
|
105
|
+
}>;
|
|
70
106
|
reactRoot: ReactDOMClient.Root;
|
|
71
|
-
|
|
107
|
+
getReactErrorBoundary(target?: FEAASBase, displayName?: string): (new (...args: any) => React.Component<{
|
|
108
|
+
children: any;
|
|
109
|
+
slot: string;
|
|
110
|
+
}, {
|
|
111
|
+
error: Error;
|
|
112
|
+
}, any>) | {
|
|
113
|
+
new (props: {
|
|
114
|
+
children: any;
|
|
115
|
+
slot: string;
|
|
116
|
+
} | Readonly<{
|
|
117
|
+
children: any;
|
|
118
|
+
slot: string;
|
|
119
|
+
}>): {
|
|
120
|
+
state: {
|
|
121
|
+
error: Error;
|
|
122
|
+
};
|
|
123
|
+
componentDidCatch(error: Error, errorInfo: any): void;
|
|
124
|
+
render(): any;
|
|
125
|
+
context: unknown;
|
|
126
|
+
setState<K extends "error">(state: {
|
|
127
|
+
error: Error;
|
|
128
|
+
} | ((prevState: Readonly<{
|
|
129
|
+
error: Error;
|
|
130
|
+
}>, props: Readonly<{
|
|
131
|
+
children: any;
|
|
132
|
+
slot: string;
|
|
133
|
+
}>) => {
|
|
134
|
+
error: Error;
|
|
135
|
+
} | Pick<{
|
|
136
|
+
error: Error;
|
|
137
|
+
}, K>) | Pick<{
|
|
138
|
+
error: Error;
|
|
139
|
+
}, K>, callback?: () => void): void;
|
|
140
|
+
forceUpdate(callback?: () => void): void;
|
|
141
|
+
readonly props: Readonly<{
|
|
142
|
+
children: any;
|
|
143
|
+
slot: string;
|
|
144
|
+
}>;
|
|
145
|
+
refs: {
|
|
146
|
+
[key: string]: React.ReactInstance;
|
|
147
|
+
};
|
|
148
|
+
componentDidMount?(): void;
|
|
149
|
+
shouldComponentUpdate?(nextProps: Readonly<{
|
|
150
|
+
children: any;
|
|
151
|
+
slot: string;
|
|
152
|
+
}>, nextState: Readonly<{
|
|
153
|
+
error: Error;
|
|
154
|
+
}>, nextContext: any): boolean;
|
|
155
|
+
componentWillUnmount?(): void;
|
|
156
|
+
getSnapshotBeforeUpdate?(prevProps: Readonly<{
|
|
157
|
+
children: any;
|
|
158
|
+
slot: string;
|
|
159
|
+
}>, prevState: Readonly<{
|
|
160
|
+
error: Error;
|
|
161
|
+
}>): any;
|
|
162
|
+
componentDidUpdate?(prevProps: Readonly<{
|
|
163
|
+
children: any;
|
|
164
|
+
slot: string;
|
|
165
|
+
}>, prevState: Readonly<{
|
|
166
|
+
error: Error;
|
|
167
|
+
}>, snapshot?: any): void;
|
|
168
|
+
componentWillMount?(): void;
|
|
169
|
+
UNSAFE_componentWillMount?(): void;
|
|
170
|
+
componentWillReceiveProps?(nextProps: Readonly<{
|
|
171
|
+
children: any;
|
|
172
|
+
slot: string;
|
|
173
|
+
}>, nextContext: any): void;
|
|
174
|
+
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{
|
|
175
|
+
children: any;
|
|
176
|
+
slot: string;
|
|
177
|
+
}>, nextContext: any): void;
|
|
178
|
+
componentWillUpdate?(nextProps: Readonly<{
|
|
179
|
+
children: any;
|
|
180
|
+
slot: string;
|
|
181
|
+
}>, nextState: Readonly<{
|
|
182
|
+
error: Error;
|
|
183
|
+
}>, nextContext: any): void;
|
|
184
|
+
UNSAFE_componentWillUpdate?(nextProps: Readonly<{
|
|
185
|
+
children: any;
|
|
186
|
+
slot: string;
|
|
187
|
+
}>, nextState: Readonly<{
|
|
188
|
+
error: Error;
|
|
189
|
+
}>, nextContext: any): void;
|
|
190
|
+
};
|
|
191
|
+
new (props: {
|
|
192
|
+
children: any;
|
|
193
|
+
slot: string;
|
|
194
|
+
}, context: any): {
|
|
195
|
+
state: {
|
|
196
|
+
error: Error;
|
|
197
|
+
};
|
|
198
|
+
componentDidCatch(error: Error, errorInfo: any): void;
|
|
199
|
+
render(): any;
|
|
200
|
+
context: unknown;
|
|
201
|
+
setState<K extends "error">(state: {
|
|
202
|
+
error: Error;
|
|
203
|
+
} | ((prevState: Readonly<{
|
|
204
|
+
error: Error;
|
|
205
|
+
}>, props: Readonly<{
|
|
206
|
+
children: any;
|
|
207
|
+
slot: string;
|
|
208
|
+
}>) => {
|
|
209
|
+
error: Error;
|
|
210
|
+
} | Pick<{
|
|
211
|
+
error: Error;
|
|
212
|
+
}, K>) | Pick<{
|
|
213
|
+
error: Error;
|
|
214
|
+
}, K>, callback?: () => void): void;
|
|
215
|
+
forceUpdate(callback?: () => void): void;
|
|
216
|
+
readonly props: Readonly<{
|
|
217
|
+
children: any;
|
|
218
|
+
slot: string;
|
|
219
|
+
}>;
|
|
220
|
+
refs: {
|
|
221
|
+
[key: string]: React.ReactInstance;
|
|
222
|
+
};
|
|
223
|
+
componentDidMount?(): void;
|
|
224
|
+
shouldComponentUpdate?(nextProps: Readonly<{
|
|
225
|
+
children: any;
|
|
226
|
+
slot: string;
|
|
227
|
+
}>, nextState: Readonly<{
|
|
228
|
+
error: Error;
|
|
229
|
+
}>, nextContext: any): boolean;
|
|
230
|
+
componentWillUnmount?(): void;
|
|
231
|
+
getSnapshotBeforeUpdate?(prevProps: Readonly<{
|
|
232
|
+
children: any;
|
|
233
|
+
slot: string;
|
|
234
|
+
}>, prevState: Readonly<{
|
|
235
|
+
error: Error;
|
|
236
|
+
}>): any;
|
|
237
|
+
componentDidUpdate?(prevProps: Readonly<{
|
|
238
|
+
children: any;
|
|
239
|
+
slot: string;
|
|
240
|
+
}>, prevState: Readonly<{
|
|
241
|
+
error: Error;
|
|
242
|
+
}>, snapshot?: any): void;
|
|
243
|
+
componentWillMount?(): void;
|
|
244
|
+
UNSAFE_componentWillMount?(): void;
|
|
245
|
+
componentWillReceiveProps?(nextProps: Readonly<{
|
|
246
|
+
children: any;
|
|
247
|
+
slot: string;
|
|
248
|
+
}>, nextContext: any): void;
|
|
249
|
+
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{
|
|
250
|
+
children: any;
|
|
251
|
+
slot: string;
|
|
252
|
+
}>, nextContext: any): void;
|
|
253
|
+
componentWillUpdate?(nextProps: Readonly<{
|
|
254
|
+
children: any;
|
|
255
|
+
slot: string;
|
|
256
|
+
}>, nextState: Readonly<{
|
|
257
|
+
error: Error;
|
|
258
|
+
}>, nextContext: any): void;
|
|
259
|
+
UNSAFE_componentWillUpdate?(nextProps: Readonly<{
|
|
260
|
+
children: any;
|
|
261
|
+
slot: string;
|
|
262
|
+
}>, nextState: Readonly<{
|
|
263
|
+
error: Error;
|
|
264
|
+
}>, nextContext: any): void;
|
|
265
|
+
};
|
|
266
|
+
getDerivedStateFromError(error: Error): {
|
|
267
|
+
error: Error;
|
|
268
|
+
};
|
|
269
|
+
contextType?: React.Context<any>;
|
|
270
|
+
};
|
|
271
|
+
getReactElement(target?: FEAASBase, props?: any): JSX.Element;
|
|
272
|
+
getReactWrapper(target?: FEAASBase, displayName?: string): React.FunctionComponent<{}>;
|
|
72
273
|
uid: string;
|
|
73
274
|
getUID(): string;
|
|
74
275
|
forceUpdateReact: (node?: ReactNode) => void;
|
|
@@ -81,12 +282,15 @@ export declare class FEAASBase<Props = any, Payload = any> extends WebComponent
|
|
|
81
282
|
getShadowRoot(): ShadowRoot;
|
|
82
283
|
getReactRootElement(): HTMLElement | ShadowRoot;
|
|
83
284
|
/** Set props and return values on new next tick */
|
|
84
|
-
set(overrides?: Partial<Props>):
|
|
285
|
+
set(overrides?: Partial<Props>): this;
|
|
286
|
+
import(path: string): Promise<Payload>;
|
|
85
287
|
/** Schedule rendering on next tick, to batch multiple attribute changes */
|
|
288
|
+
initialized: boolean;
|
|
289
|
+
whenRendered: ControlledPromise<this>;
|
|
86
290
|
scheduleRender(): void;
|
|
87
291
|
formatURL(src: string, hostname: string): string;
|
|
88
292
|
getContextAttribute(name: string, element?: this): string;
|
|
89
|
-
static register(tagName: string): void;
|
|
293
|
+
static register(tagName: string, win?: Window): void;
|
|
90
294
|
}
|
|
91
295
|
export { FEAASBase as Base };
|
|
92
296
|
//# sourceMappingURL=FEAASBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FEAASBase.d.ts","sourceRoot":"","sources":["../../src/components/FEAASBase.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"FEAASBase.d.ts","sourceRoot":"","sources":["../../src/components/FEAASBase.tsx"],"names":[],"mappings":"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"}
|