@sitecore-feaas/clientside 0.1.52 → 0.1.54

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.
Files changed (96) hide show
  1. package/README.md +76 -0
  2. package/build/components/FEAASBase.js +12 -9
  3. package/build/components/FEAASBase.js.map +1 -1
  4. package/build/components/FEAASComponent.js +2 -1
  5. package/build/components/FEAASComponent.js.map +1 -1
  6. package/build/components/FEAASElement.js +2 -1
  7. package/build/components/FEAASElement.js.map +1 -1
  8. package/build/components/FEAASLoader.js +2 -1
  9. package/build/components/FEAASLoader.js.map +1 -1
  10. package/build/dom/data.js +0 -6
  11. package/build/dom/data.js.map +1 -1
  12. package/build/dom/html.js +7 -0
  13. package/build/dom/html.js.map +1 -1
  14. package/build/dom/rendering.js +8 -5
  15. package/build/dom/rendering.js.map +1 -1
  16. package/build/headless.js +1 -0
  17. package/build/headless.js.map +1 -1
  18. package/build/ui/FEAASContext.js +2 -1
  19. package/build/ui/FEAASContext.js.map +1 -1
  20. package/build/ui/FEAASEditor.js +2 -1
  21. package/build/ui/FEAASEditor.js.map +1 -1
  22. package/build/ui/FEAASExternal.js +49 -20
  23. package/build/ui/FEAASExternal.js.map +1 -1
  24. package/build/ui/FEAASPicker.js +6 -2
  25. package/build/ui/FEAASPicker.js.map +1 -1
  26. package/build/utils/datapath.js +29 -0
  27. package/build/utils/datapath.js.map +1 -0
  28. package/build/utils/promise.js +27 -0
  29. package/build/utils/promise.js.map +1 -1
  30. package/dist/browser/headless.cjs +4 -4
  31. package/dist/browser/headless.cjs.map +4 -4
  32. package/dist/browser/headless.esm.js +4 -4
  33. package/dist/browser/headless.esm.js.map +1 -1
  34. package/dist/browser/index.cjs +4 -4
  35. package/dist/browser/index.cjs.map +4 -4
  36. package/dist/browser/index.esm.js +5 -5
  37. package/dist/browser/index.esm.js.map +1 -1
  38. package/dist/browser/react.cjs +5 -5
  39. package/dist/browser/react.cjs.map +4 -4
  40. package/dist/browser/react.esm.js +5 -5
  41. package/dist/browser/react.esm.js.map +1 -1
  42. package/dist/node/headless.cjs +3 -3
  43. package/dist/node/headless.cjs.map +4 -4
  44. package/dist/node/headless.esm.js +3 -3
  45. package/dist/node/headless.esm.js.map +4 -4
  46. package/dist/node/index.cjs +3 -3
  47. package/dist/node/index.cjs.map +4 -4
  48. package/dist/node/index.esm.js +3 -3
  49. package/dist/node/index.esm.js.map +4 -4
  50. package/dist/node/react.cjs +3 -3
  51. package/dist/node/react.cjs.map +4 -4
  52. package/dist/node/react.esm.js +3 -3
  53. package/dist/node/react.esm.js.map +4 -4
  54. package/headless.cjs +3 -3
  55. package/headless.cjs.map +4 -4
  56. package/headless.js +3 -3
  57. package/headless.js.map +4 -4
  58. package/package.json +1 -1
  59. package/react.cjs +5 -5
  60. package/react.cjs.map +4 -4
  61. package/react.js +5 -5
  62. package/react.js.map +4 -4
  63. package/src/components/FEAASBase.tsx +12 -10
  64. package/src/dom/data.ts +0 -8
  65. package/src/dom/html.ts +8 -0
  66. package/src/dom/rendering.ts +9 -4
  67. package/src/headless.ts +1 -0
  68. package/src/ui/FEAASExternal.tsx +39 -12
  69. package/src/ui/FEAASPicker.tsx +3 -1
  70. package/src/utils/datapath.ts +31 -0
  71. package/src/utils/promise.ts +27 -0
  72. package/test/FEAASComponent.test.tsx +2 -1
  73. package/test/FEAASExternal.test.tsx +61 -4
  74. package/test/cjs/tsconfig.json +9 -0
  75. package/test/fetch.ts +1 -1
  76. package/types/components/FEAASBase.d.ts +12 -9
  77. package/types/components/FEAASBase.d.ts.map +1 -1
  78. package/types/dom/data.d.ts +0 -2
  79. package/types/dom/data.d.ts.map +1 -1
  80. package/types/dom/html.d.ts +2 -0
  81. package/types/dom/html.d.ts.map +1 -1
  82. package/types/dom/rendering.d.ts.map +1 -1
  83. package/types/headless.d.ts +1 -0
  84. package/types/headless.d.ts.map +1 -1
  85. package/types/tsbuildinfo +1 -1
  86. package/types/tsbuildinfo_ui +1 -1
  87. package/types/ui/FEAASExternal.d.ts +2 -2
  88. package/types/ui/FEAASExternal.d.ts.map +1 -1
  89. package/types/ui/FEAASPicker.d.ts +3 -3
  90. package/types/ui/FEAASPicker.d.ts.map +1 -1
  91. package/types/utils/datapath.d.ts +6 -0
  92. package/types/utils/datapath.d.ts.map +1 -0
  93. package/types/utils/promise.d.ts +27 -0
  94. package/types/utils/promise.d.ts.map +1 -1
  95. package/test/cjs/bundles.ts +0 -52
  96. package/test/cjs/package.json +0 -1
@@ -27,15 +27,18 @@ export interface ReactPayload {
27
27
  * Initialization lifecycle:
28
28
  *
29
29
  * - `set(props)`
30
- * - `load() => payload`
31
- * - `onLoad?(payload)`
32
- * - `update()`
33
- * - `render(payload, props)`
34
- * - `whenRendered`
35
- * - - / If needs to reload, e.g. bypass cache /
36
- * - - `onLoad(newPayload) `
37
- * - - `whenRendered`
38
- * - `whenLoaded`
30
+ * - `scheduleRender()` - any attribute change causes render to schedule to next frame
31
+ * - `whenRendered.restart()` - rendering promise is reset and will resolve after render
32
+ * - `advance()` - called on next frame
33
+ * - `if (isReadyToLoad()) => boolean` - check if component has all necessary properties to load
34
+ * - `load() => payload` => component is loaded
35
+ * - `onLoad?(payload)` => invoke loaded callback
36
+ * - `advance()` => going further in state machine
37
+ * - `flush()` => flushes all react changes if needed
38
+ * - `update()` => component-specific method (or react) to render changes to dom
39
+ * - `render(payload, props)` => render means react
40
+ * - `whenRendered.resolve()` - rendering promise is resolved after rendering
41
+ * - `whenLoaded.resolved()` - resolved after loading and rendering
39
42
  */
40
43
  export class FEAASBase<Props = any, Payload = any> extends WebComponent {
41
44
  static observedAttributes: string[]
@@ -89,7 +92,6 @@ export class FEAASBase<Props = any, Payload = any> extends WebComponent {
89
92
  disconnectedCallback() {
90
93
  this.unmount()
91
94
  }
92
-
93
95
  /**
94
96
  * Web components are initialized depth-first, making child elements render before its parents. This could here
95
97
  * attempts to avoid this and inverts the initialization logic, so that children are initialized in the context of its
package/src/dom/data.ts CHANGED
@@ -2,14 +2,6 @@ import { JSONPath } from 'jsonpath-plus'
2
2
 
3
3
  export type Datascopes = Record<string, any> | any[]
4
4
 
5
- export function cleanCollectionBit(path: string) {
6
- return path.replace(/(\[[^\]\[]+\]|\.\*)$/g, '')
7
- }
8
-
9
- export function normalizeCollectionScope(path: string) {
10
- return cleanCollectionBit(path) + '.*'
11
- }
12
-
13
5
  export function queryScopes(scopes: any, datapath: string, singleValue = false, json: any = scopes) {
14
6
  var path = datapath
15
7
  /* find closest parent scope */
package/src/dom/html.ts CHANGED
@@ -62,6 +62,11 @@ class HTMLNode {
62
62
  get tagName() {
63
63
  return this.nodeName?.toUpperCase()
64
64
  }
65
+
66
+ get localName() {
67
+ return this.nodeName?.toLowerCase()
68
+ }
69
+
65
70
  get innerHTML() {
66
71
  return serializeHTML(this.childNodes)
67
72
  }
@@ -71,6 +76,9 @@ class HTMLNode {
71
76
  get outerHTML() {
72
77
  return serializeHTML([this])
73
78
  }
79
+ get children() {
80
+ return this.childNodes.filter((c) => c.nodeType == 1)
81
+ }
74
82
 
75
83
  closest(selector: string): HTMLNode | null {
76
84
  let currentNode: HTMLNode | undefined = this
@@ -1,7 +1,8 @@
1
1
  import { FEAASCDNComponentProps } from '../cdn.js'
2
- import { Datascopes, normalizeCollectionScope, queryScopes, serializeCH1RichText } from './data.js'
2
+ import { Datascopes, queryScopes, serializeCH1RichText } from './data.js'
3
3
  import { parseHTML } from './html.js'
4
4
  import { loadScript } from './scripts.js'
5
+ import { normalizeCollectionScope } from '../utils/datapath.js'
5
6
 
6
7
  export interface FEAASCustomizations {
7
8
  processTemplate?: (element: HTMLElement, template: string, data: any) => string
@@ -81,11 +82,13 @@ export function setDOMAttribute(element: HTMLElement, attribute: string, value:
81
82
  }
82
83
  var prop = attribute.replace('data-path-', '')
83
84
  if (attribute == 'data-path-src') {
84
- target = element.tagName == 'IMG' ? element : <HTMLElement>element.querySelector('img, video')
85
+ const picture = Array.from(element.children).find((n) => n.localName == 'picture') || element
86
+ target = element.localName == 'img' ? element : <HTMLElement>picture.querySelector('img, video')
85
87
  } else if (attribute == 'data-path-href') {
86
88
  target = element.querySelector('a') || element.closest('a')
87
89
  } else if (attribute == 'data-path-alt') {
88
- target = element.querySelector('img, picture')
90
+ const picture = Array.from(element.children).find((n) => n.localName == 'picture') || element
91
+ target = picture.querySelector('img, picture')
89
92
  } else if (attribute == 'data-path-hidden') {
90
93
  value = !value ? true : null
91
94
  } else if (attribute == 'data-path' || attribute == 'data-embed-html' || attribute == 'html') {
@@ -117,7 +120,9 @@ export function setDOMAttribute(element: HTMLElement, attribute: string, value:
117
120
  }
118
121
  if (!target) return
119
122
 
120
- var placeholder = String(element.getAttribute('data-path-placeholder') || target[prop as keyof HTMLElement])
123
+ var placeholder = String(
124
+ (element.getAttribute('data-path-placeholder') || target[prop as keyof HTMLElement]) ?? target.getAttribute(prop)
125
+ )
121
126
 
122
127
  if (value != null) {
123
128
  if (prop == 'innerHTML') {
package/src/headless.ts CHANGED
@@ -17,6 +17,7 @@ export * from './components/FEAASElement.js'
17
17
  export * from './components/FEAASComponent.js'
18
18
  export * from './components/FEAASLoader.js'
19
19
  export * from './components/FEAASStylesheet.js'
20
+ export * from './utils/datapath.js'
20
21
 
21
22
  declare global {
22
23
  interface Window {
@@ -20,12 +20,37 @@ const convertSchemaPropertiesToKebabCase = (schema: any) => {
20
20
  return { ...schema, properties: kebabSchemaProperties, required: kebabRequiredProperties }
21
21
  }
22
22
 
23
+ export const parseProps = (propName: string, propValue: string, properties: any) => {
24
+ debugger
25
+ switch (properties?.[propName]?.type) {
26
+ case 'string':
27
+ return propValue
28
+ case 'object':
29
+ return JSON.parse(propValue)
30
+ case 'array':
31
+ return JSON.parse(propValue)
32
+ case 'number':
33
+ return +propValue
34
+ case 'integer':
35
+ return +propValue
36
+ case 'boolean':
37
+ return propValue === 'true'
38
+ default:
39
+ return propValue
40
+ }
41
+ }
42
+
23
43
  export function FEAASExternalProps(element: FEAASBase = this) {
24
44
  const attributes = element.getAttributeNames()
45
+ const id = element.getAttribute('data-external-id')
46
+ const schema: any = FEAASExternal.registered[id]?.schema
25
47
  const props = attributes.reduce((prev, curr) => {
26
- if (!curr.startsWith('data-attribute') && !['class', 'id', 'contenteditable'].includes(curr))
27
- return { ...prev, [reverseKebabCase(curr)]: element.getAttribute(curr) }
28
- else return prev
48
+ if (!curr.startsWith('data-attribute') && !['class', 'id', 'contenteditable'].includes(curr)) {
49
+ const value = element.getAttribute(curr)
50
+ return { ...prev, [reverseKebabCase(curr)]: parseProps(reverseKebabCase(curr), value, schema?.properties) }
51
+ } else {
52
+ return prev
53
+ }
29
54
  }, {})
30
55
  return props
31
56
  }
@@ -51,8 +76,10 @@ export default class FEAASExternal extends FEAASBase<FEAASExternalProps, ReactMo
51
76
  return FEAASExternalProps(this)
52
77
  }
53
78
 
54
- static registerComponent(component: React.FC, schema: any = {}, id?: string) {
55
- FEAASExternal.registered[id || component.name] = { component, schema }
79
+ static registerComponent(component: React.FC, schema: any = {}) {
80
+ const id = schema.name || component.name
81
+ const enrichedSchema = { ...schema, title: id, type: 'object' }
82
+ FEAASExternal.registered[id] = { component, schema: enrichedSchema }
56
83
  }
57
84
 
58
85
  static setRegistrationCallback() {
@@ -60,11 +87,11 @@ export default class FEAASExternal extends FEAASBase<FEAASExternalProps, ReactMo
60
87
  if (!FEAASExternal.registrationCallback && typeof window !== 'undefined') {
61
88
  FEAASExternal.registrationCallback = setTimeout(() => {
62
89
  // create components array from object
63
- const components = Object.keys(FEAASExternal.registered).map((name) => ({
64
- ...FEAASExternal.registered[name],
65
- name,
66
- schema: convertSchemaPropertiesToKebabCase(FEAASExternal.registered[name].schema),
67
- component: FEAASExternal.registered[name].component.toString()
90
+ const components = Object.keys(FEAASExternal.registered).map((id) => ({
91
+ ...FEAASExternal.registered[id],
92
+ name: id,
93
+ schema: convertSchemaPropertiesToKebabCase(FEAASExternal.registered[id].schema)
94
+ //component: FEAASExternal.registered[name].component.toString()
68
95
  }))
69
96
 
70
97
  // send components from iframe to parent window
@@ -79,7 +106,7 @@ export default class FEAASExternal extends FEAASBase<FEAASExternalProps, ReactMo
79
106
  }
80
107
  }
81
108
 
82
- static loadComponents() {
109
+ /*static loadComponents() {
83
110
  const components = JSON.parse(sessionStorage.getItem('feaas-external-components'))
84
111
  components.forEach((c: { name: string; schema: any; component: React.FC }) => {
85
112
  const name = c.name
@@ -87,7 +114,7 @@ export default class FEAASExternal extends FEAASBase<FEAASExternalProps, ReactMo
87
114
  const component = eval('(' + c.component + ')')
88
115
  FEAASExternal.registerComponent(component, schema, name)
89
116
  })
90
- }
117
+ }*/
91
118
 
92
119
  static Preview(props: Partial<FEAASComponentProps<any>> & { src: string }) {
93
120
  const src =
@@ -41,7 +41,9 @@ export class FEAASPicker extends FEAASBase<FEAASPickerProps, typeof FEAASPickerI
41
41
  <Picker
42
42
  placeholder={placeholder}
43
43
  mode={mode || undefined}
44
- onClose={this.props.onClose}
44
+ onModeChange={(mode) => {
45
+ if (!mode) this.props.onClose(mode)
46
+ }}
45
47
  onContextAttributeSet={this.props.onContextAttributeSet}
46
48
  context={context}
47
49
  variant={variant}
@@ -0,0 +1,31 @@
1
+ export const parseLimit = (qualifier: string) => {
2
+ const limit = parseInt(qualifier?.match(/\[0:(\d+)\]/)?.[1], 10)
3
+ if (!isNaN(limit) && limit > 0) return String(limit)
4
+ return null
5
+ }
6
+
7
+ export const parseRange = (qualifier: string) => {
8
+ const bits = qualifier
9
+ ?.match(/\[([^\]]+)\]/)?.[1]
10
+ .split(/\s*,\s*/g)
11
+ .filter(Boolean)
12
+ .map((bit) => {
13
+ // individual indexes
14
+ if (bit.match(/^-?\d+$/)) return bit
15
+ // ranges
16
+ const range = bit.match(/^(\d+):(\d+)$/)
17
+ return range && parseInt(range[1], 10) < parseInt(range[2], 10) ? range[1] + '-' + range[2] : null
18
+ })
19
+ if (!bits?.every(Boolean)) return null
20
+ return bits.join(',')
21
+ }
22
+
23
+ export const getQualifier = (jsonpath: string) => jsonpath?.match(/(\.\*|\[[^\]]+\])$/)?.[0]
24
+
25
+ export function cleanCollectionBit(path: string) {
26
+ return path.replace(/(\[[^\]\[]+\]|\.\*)$/g, '')
27
+ }
28
+
29
+ export function normalizeCollectionScope(path: string) {
30
+ return cleanCollectionBit(path) + '.*'
31
+ }
@@ -5,6 +5,33 @@ export type ControlledPromise<T> = Promise<T> & {
5
5
  first: ControlledPromise<T>
6
6
  }
7
7
 
8
+ /**
9
+ * ControlledPromise is a function that returns a promise with additional methods for resolve, reject, restart, and
10
+ * first. This allows more granular control over the promise resolution process. It also avoids unhandled rejections by
11
+ * catching any errors and passing them to the onFailure callback.
12
+ *
13
+ * @example
14
+ * const promise = ControlledPromise(
15
+ * (result) => console.log(result),
16
+ * (error) => console.error(error)
17
+ * )
18
+ * promise.resolve('Success') // logs: "Success"
19
+ * promise.reject(new Error('Failure')) // logs: Error: Failure
20
+ *
21
+ * @template T The type of value that the promise will resolve with.
22
+ * @param {(result: T) => void} [onSuccess] - A callback function that is called when the promise is successfully
23
+ * resolved. The resolved value is passed to this function.
24
+ * @param {(e: Error) => void} [onFailure=(e: Error) => {}] - A callback function that is called when the promise is
25
+ * rejected. The Error object is passed to this function. Default is `(e: Error) => {}`
26
+ * @returns {ControlledPromise<T>} A ControlledPromise object with the following properties:
27
+ *
28
+ * - Resolve: A function that when called, will resolve the promise.
29
+ * - Reject: A function that when called, will reject the promise with the provided error.
30
+ * - Restart: A function that when called, will restart the promise. This creates a new promise and replaces the current
31
+ * promise with the new one.
32
+ * - First: The first promise that was created by the restart function. This property is initially undefined, and is set
33
+ * when the restart function is called for the first time.
34
+ */
8
35
  export function ControlledPromise<T>(onSuccess?: (result: T) => void, onFailure = (e: Error) => {}) {
9
36
  var first: ControlledPromise<T>
10
37
  const restart = () => {
@@ -31,7 +31,7 @@ describe('Components', () => {
31
31
  }
32
32
  })
33
33
 
34
- // Fixme change to production component
34
+ // Fixme юhange to production component
35
35
  document.body.innerHTML =
36
36
  '<feaas-component with-stylesheet="false" library="L" cdn="CDN" component="C" version="V" revision="R"></feaas-component>'
37
37
 
@@ -179,6 +179,7 @@ describe('Components', () => {
179
179
  expect(spy).toHaveBeenNthCalledWith(1, 'CDN/components/L/C1/V/R.html', undefined)
180
180
  expect(spy).toHaveBeenCalledTimes(1)
181
181
  expect(component.innerHTML).toContain('C1')
182
+ await expect(component.whenLoaded).resolves.toEqual('C1')
182
183
 
183
184
  component.setAttribute('component', 'C2')
184
185
  await expect(component.whenRendered).resolves.toEqual(component)
@@ -1,17 +1,65 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest'
2
2
  import React from 'react'
3
3
  import * as Clientside from '../src/ui/react.js'
4
- import FEAASExternal from "../src/ui/FEAASExternal.js";
4
+ import FEAASExternal from '../src/ui/FEAASExternal.js'
5
5
 
6
6
  describe('External', () => {
7
7
  function Hello(props: { firstName: string; telephone: string }) {
8
8
  return React.createElement('div', {}, `Hello my name is ${props.firstName} and my tel is ${props.telephone}`)
9
9
  }
10
+ const helloSchema = {
11
+ name: 'MyTestComponent',
12
+ properties: {
13
+ firstName: {
14
+ type: 'string'
15
+ },
16
+ telephone: {
17
+ type: 'number'
18
+ }
19
+ }
20
+ }
10
21
  function Hello2(props: { firstName: string; address: string }) {
11
22
  return React.createElement('div', {}, `Hello my name is ${props.firstName} and my address is ${props.address}`)
12
23
  }
24
+ function TypesComponent(props: {
25
+ stringProp: string
26
+ numberProp: number
27
+ booleanProp: boolean
28
+ arrayProp: number[]
29
+ objectProp: { value: string }
30
+ }) {
31
+ return React.createElement(
32
+ 'div',
33
+ {},
34
+ `Text: ${props.stringProp}, Number + 1: ${props.numberProp + 1}, Boolean: ${
35
+ props.booleanProp === true ? 'it is true' : 'error'
36
+ }, Array (joined): ${props.arrayProp.join(', ')}, Object: ${props.objectProp.value}`
37
+ )
38
+ }
39
+ const typesComponentSchema = {
40
+ properties: {
41
+ stringProp: {
42
+ type: 'string'
43
+ },
44
+ numberProp: {
45
+ type: 'number'
46
+ },
47
+ booleanProp: {
48
+ type: 'boolean'
49
+ },
50
+ arrayProp: {
51
+ type: 'array',
52
+ items: {
53
+ type: 'number'
54
+ }
55
+ },
56
+ objectProp: {
57
+ type: 'object'
58
+ }
59
+ }
60
+ }
13
61
  it('can register and render component', async () => {
14
- Clientside.External.registerComponent(Hello, {}, 'MyTestComponent')
62
+ Clientside.External.registerComponent(Hello, helloSchema)
15
63
  document.body.innerHTML =
16
64
  '<feaas-external id="external-component" class="-component" data-attributes-keys="first-name,telephone" first-name="Chuck" telephone="45657890875643" data-attributes="{&quot;first-name&quot;:&quot;Chuck&quot;,&quot;telephone&quot;:&quot;45657890875643&quot;}" data-external-id="MyTestComponent" contenteditable="false"></feaas-external>'
17
65
  const component = document.getElementById('external-component') as FEAASExternal
@@ -34,8 +82,8 @@ describe('External', () => {
34
82
  expect(component.innerHTML).toEqual('')
35
83
  })
36
84
  it('can register and render multiple components', async () => {
37
- Clientside.External.registerComponent(Hello, {}, 'MyTestComponent1')
38
- Clientside.External.registerComponent(Hello2, {}, 'MyTestComponent2')
85
+ Clientside.External.registerComponent(Hello, { name: 'MyTestComponent1' })
86
+ Clientside.External.registerComponent(Hello2, { name: 'MyTestComponent2' })
39
87
  document.body.innerHTML =
40
88
  '<feaas-external id="external-component1" class="-component" data-attributes-keys="first-name,telephone" first-name="Chuck" telephone="45657890875643" data-attributes="{&quot;first-name&quot;:&quot;Chuck&quot;,&quot;telephone&quot;:&quot;45657890875643&quot;}" data-external-id="MyTestComponent1" contenteditable="false"></feaas-external>' +
41
89
  '<feaas-external id="external-component2" class="-component" data-attributes-keys="first-name,address" first-name="George" address="Test street 12" data-attributes="{&quot;first-name&quot;:&quot;George&quot;,&quot;address&quot;:&quot;Test street 12&quot;}" data-external-id="MyTestComponent2" contenteditable="false"></feaas-external>'
@@ -46,4 +94,13 @@ describe('External', () => {
46
94
  await expect(component2.whenRendered).resolves.toEqual(component2)
47
95
  expect(component2.innerHTML).toEqual('<div>Hello my name is George and my address is Test street 12</div>')
48
96
  })
97
+ it('can successfully parse component props', async () => {
98
+ Clientside.External.registerComponent(TypesComponent, typesComponentSchema)
99
+ document.body.innerHTML = `<feaas-external id="types-component" class="-component" data-attributes-keys="string-prop,number-prop,boolean-prop,array-prop,object-prop" string-prop="this is a string" number-prop="5" boolean-prop="true" array-prop="[1,2,3,4,5]" object-prop="{&quot;value&quot;:&quot;object value&quot;}" data-attributes="{&quot;first-name&quot;:&quot;Chuck&quot;,&quot;telephone&quot;:&quot;45657890875643&quot;}" data-external-id="TypesComponent" contenteditable="false"></feaas-external>`
100
+ const typesComponent = document.getElementById('types-component') as FEAASExternal
101
+ await expect(typesComponent.whenRendered).resolves.toEqual(typesComponent)
102
+ expect(typesComponent.innerHTML).toEqual(
103
+ '<div>Text: this is a string, Number + 1: 6, Boolean: it is true, Array (joined): 1, 2, 3, 4, 5, Object: object value</div>'
104
+ )
105
+ })
49
106
  })
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "types": ["react", "react-dom", "node"],
4
+ "rootDir": ".",
5
+ "noEmit": true
6
+ },
7
+ "include": ["./**/*.ts", "./**/*.tsx", "../scripts/setup.ts"],
8
+ "exclude": []
9
+ }
package/test/fetch.ts CHANGED
@@ -113,7 +113,7 @@ describe('Fetch', () => {
113
113
  })
114
114
  } else {
115
115
  return new Response('A', {
116
- headers: {
116
+ headers: {
117
117
  date: yesterday.toUTCString()
118
118
  }
119
119
  })
@@ -19,15 +19,18 @@ export interface ReactPayload {
19
19
  * Initialization lifecycle:
20
20
  *
21
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`
22
+ * - `scheduleRender()` - any attribute change causes render to schedule to next frame
23
+ * - `whenRendered.restart()` - rendering promise is reset and will resolve after render
24
+ * - `advance()` - called on next frame
25
+ * - `if (isReadyToLoad()) => boolean` - check if component has all necessary properties to load
26
+ * - `load() => payload` => component is loaded
27
+ * - `onLoad?(payload)` => invoke loaded callback
28
+ * - `advance()` => going further in state machine
29
+ * - `flush()` => flushes all react changes if needed
30
+ * - `update()` => component-specific method (or react) to render changes to dom
31
+ * - `render(payload, props)` => render means react
32
+ * - `whenRendered.resolve()` - rendering promise is resolved after rendering
33
+ * - `whenLoaded.resolved()` - resolved after loading and rendering
31
34
  */
32
35
  export declare class FEAASBase<Props = any, Payload = any> extends WebComponent {
33
36
  static observedAttributes: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"FEAASBase.d.ts","sourceRoot":"","sources":["../../src/components/FEAASBase.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FEAASBase.d.ts","sourceRoot":"","sources":["../../src/components/FEAASBase.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import { JSONPath } from 'jsonpath-plus';
2
2
  export type Datascopes = Record<string, any> | any[];
3
- export declare function cleanCollectionBit(path: string): string;
4
- export declare function normalizeCollectionScope(path: string): string;
5
3
  export declare function queryScopes(scopes: any, datapath: string, singleValue?: boolean, json?: any): any;
6
4
  export type CH1Node = {
7
5
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/dom/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAA;AAEpD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,UAE9C;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,UAEpD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,UAAQ,EAAE,IAAI,GAAE,GAAY,OAsDjG;AAED,MAAM,MAAM,OAAO,GACf;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5B,GACD,OAAO,EAAE,CAAA;AAQb,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAqCtF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/dom/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAA;AAEpD,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,UAAQ,EAAE,IAAI,GAAE,GAAY,OAsDjG;AAED,MAAM,MAAM,OAAO,GACf;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5B,GACD,OAAO,EAAE,CAAA;AAQb,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAqCtF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -19,9 +19,11 @@ declare class HTMLNode {
19
19
  removeAttribute(attrName: string): void;
20
20
  appendChild(newNode: HTMLNode): void;
21
21
  get tagName(): string;
22
+ get localName(): string;
22
23
  get innerHTML(): string;
23
24
  set innerHTML(html: string);
24
25
  get outerHTML(): string;
26
+ get children(): HTMLNode[];
25
27
  closest(selector: string): HTMLNode | null;
26
28
  querySelectorAll(selector: string): HTMLNode[];
27
29
  querySelector(selector: string): HTMLNode;
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dom/html.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,gBAAgB,CAAA;AAEtE,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,cAAM,QAAQ;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAA;gBAET,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,MAAM;IAQxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9C,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI;IAY9D,eAAe,CAAC,QAAQ,EAAE,MAAM;IAOhC,WAAW,CAAC,OAAO,EAAE,QAAQ;IAK7B,IAAI,OAAO,WAEV;IACD,IAAI,SAAS,IAGO,MAAM,CADzB;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;IACD,IAAI,SAAS,WAEZ;IAED,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAc1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAwB9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAIzC,OAAO,CAAC,WAAW;IAgBnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAQtC,IAAI,eAAe,IAAI,QAAQ,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAEjC;IAED,IAAI,sBAAsB,IAAI,QAAQ,GAAG,IAAI,CAE5C;IAED,IAAI,kBAAkB,IAAI,QAAQ,GAAG,IAAI,CAExC;IACD,SAAS,CAAC,IAAI,GAAE,OAAe,GAAG,QAAQ;IAiB1C,IAAI,aAAa,aAEhB;IAED,aAAa;4BACS,MAAM,GAAG,QAAQ;MAGtC;CACF;AA+CD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgDlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBvD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,UAIlG"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/dom/html.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,gBAAgB,CAAA;AAEtE,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,cAAM,QAAQ;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAA;gBAET,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,MAAM;IAQxE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9C,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,GAAG,IAAI;IAY9D,eAAe,CAAC,QAAQ,EAAE,MAAM;IAOhC,WAAW,CAAC,OAAO,EAAE,QAAQ;IAK7B,IAAI,OAAO,WAEV;IAED,IAAI,SAAS,WAEZ;IAED,IAAI,SAAS,IAGO,MAAM,CADzB;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;IACD,IAAI,SAAS,WAEZ;IACD,IAAI,QAAQ,eAEX;IAED,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAc1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAwB9C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAIzC,OAAO,CAAC,WAAW;IAgBnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAQtC,IAAI,eAAe,IAAI,QAAQ,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAEjC;IAED,IAAI,sBAAsB,IAAI,QAAQ,GAAG,IAAI,CAE5C;IAED,IAAI,kBAAkB,IAAI,QAAQ,GAAG,IAAI,CAExC;IACD,SAAS,CAAC,IAAI,GAAE,OAAe,GAAG,QAAQ;IAiB1C,IAAI,aAAa,aAEhB;IAED,aAAa;4BACS,MAAM,GAAG,QAAQ;MAGtC;CACF;AA+CD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgDlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAmBvD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,UAIlG"}
@@ -1 +1 @@
1
- {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../../src/dom/rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,UAAU,EAA+D,MAAM,WAAW,CAAA;AAInG,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,CAAA;IAC/E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,CAAA;IACtD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAC1E,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAA;IAC5D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG;IAC5E,IAAI,CAAC,EAAE,CAAC,CAAA;CACT,GAAG,CAAC,gBAAgB,GAAG,sBAAsB,CAAC,GAC7C,mBAAmB,CAAA;AAsDrB,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,mBAAmB,QAgEhH;AAID,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,GAAG,gBAAgB,EACrC,UAAU,CAAC,EAAE,GAAG,EAChB,MAAM,CAAC,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,OAAO,eA0CnB;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,eAcpH;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,OAAO,UAAQ,UAWnH"}
1
+ {"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../../src/dom/rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,UAAU,EAAqC,MAAM,WAAW,CAAA;AAKzE,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,CAAA;IAC/E,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,CAAA;IACtD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAA;IAC1E,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAA;IAC5D,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG;IAC5E,IAAI,CAAC,EAAE,CAAC,CAAA;CACT,GAAG,CAAC,gBAAgB,GAAG,sBAAsB,CAAC,GAC7C,mBAAmB,CAAA;AAsDrB,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,mBAAmB,QAoEhH;AAID,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,GAAG,gBAAgB,EACrC,UAAU,CAAC,EAAE,GAAG,EAChB,MAAM,CAAC,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,OAAO,eA0CnB;AAKD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,eAcpH;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,mBAAmB,EAAE,OAAO,UAAQ,UAWnH"}
@@ -15,6 +15,7 @@ export * from './components/FEAASElement.js';
15
15
  export * from './components/FEAASComponent.js';
16
16
  export * from './components/FEAASLoader.js';
17
17
  export * from './components/FEAASStylesheet.js';
18
+ export * from './utils/datapath.js';
18
19
  declare global {
19
20
  interface Window {
20
21
  FEAASLoading: Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../src/headless.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,YAAY,MAAM,8BAA8B,CAAA;AAEvD,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAE/C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,YAAY,EAAE,OAAO,YAAY,CAAA;KAClC;CACF"}
1
+ {"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../src/headless.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,YAAY,MAAM,8BAA8B,CAAA;AAEvD,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qBAAqB,CAAA;AAEnC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1B,YAAY,EAAE,OAAO,YAAY,CAAA;KAClC;CACF"}