@orgajs/orgx 2.5.2 → 2.6.1
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/index.js +1 -1
- package/lib/compile.d.ts.map +1 -1
- package/lib/compile.js +12 -6
- package/lib/core.js +5 -5
- package/lib/evaluate.js +4 -4
- package/lib/plugin/recma-build-jsx-transform.d.ts.map +1 -1
- package/lib/plugin/recma-build-jsx-transform.js +52 -52
- package/lib/plugin/recma-document.d.ts +1 -1
- package/lib/plugin/recma-document.js +546 -546
- package/lib/plugin/recma-jsx-rewrite.js +527 -527
- package/lib/plugin/rehype-recma.d.ts.map +1 -1
- package/lib/plugin/rehype-recma.js +102 -103
- package/lib/run.js +3 -3
- package/lib/util/estree-util-create.js +11 -11
- package/lib/util/estree-util-declaration-to-expression.js +11 -11
- package/lib/util/estree-util-is-declaration.js +5 -5
- package/lib/util/estree-util-specifiers-to-declarations.js +68 -68
- package/lib/util/estree-util-to-binary-addition.d.ts.map +1 -1
- package/lib/util/estree-util-to-binary-addition.js +13 -11
- package/lib/util/estree-util-to-id-or-member-expression.d.ts.map +1 -1
- package/lib/util/estree-util-to-id-or-member-expression.js +66 -64
- package/lib/util/render-error.js +83 -83
- package/lib/util/resolve-evaluate-options.js +31 -31
- package/lib/util/resolve-file-and-options.js +15 -15
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehype-recma.d.ts","sourceRoot":"","sources":["rehype-recma.js"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,8CALW,OAAO,GAAG,IAAI,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"rehype-recma.d.ts","sourceRoot":"","sources":["rehype-recma.js"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,8CALW,OAAO,GAAG,IAAI,GAAG,SAAS,IAYnB,MALN,IAKU,KAHR,OAAO,CAmCpB;AA2BD,mDAAmD;AACnD,wBADW,OAAO,qBAAqB,EAAE,MAAM,CA8B9C;sBAhHY,OAAO,qBAAqB,EAAE,OAAO;6BADO,QAAQ;0BAD1C,MAAM"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @typedef {import('hast-util-to-estree').Options} Options
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { toEstree } from 'hast-util-to-estree'
|
|
8
7
|
import { Parser } from 'acorn'
|
|
9
8
|
import jsx from 'acorn-jsx'
|
|
9
|
+
import { toEstree } from 'hast-util-to-estree'
|
|
10
10
|
import renderError from '../util/render-error.js'
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -18,44 +18,44 @@ import renderError from '../util/render-error.js'
|
|
|
18
18
|
* Transform.
|
|
19
19
|
*/
|
|
20
20
|
export default function rehypeRecma(options) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
21
|
+
/**
|
|
22
|
+
* @param {Root} tree
|
|
23
|
+
* Tree (hast).
|
|
24
|
+
* @returns {Program}
|
|
25
|
+
* Program (esast).
|
|
26
|
+
*/
|
|
27
|
+
return function (tree) {
|
|
28
|
+
const data = tree.data || {}
|
|
29
|
+
/** @type {ModuleDeclaration[]} */
|
|
30
|
+
const prepend = []
|
|
31
|
+
Object.entries(data).forEach(([k, v]) => {
|
|
32
|
+
if (k === 'layout') {
|
|
33
|
+
prepend.push({
|
|
34
|
+
type: 'ImportDeclaration',
|
|
35
|
+
specifiers: [
|
|
36
|
+
{
|
|
37
|
+
type: 'ImportDefaultSpecifier',
|
|
38
|
+
local: {
|
|
39
|
+
type: 'Identifier',
|
|
40
|
+
name: 'OrgLayout'
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
source: {
|
|
45
|
+
type: 'Literal',
|
|
46
|
+
value: `${v}`,
|
|
47
|
+
raw: `'${v}'`
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
} else {
|
|
51
|
+
prepend.push(createExport(k, v))
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
const estree = toEstree(tree, { ...options, handlers: { jsx: handleJsx } })
|
|
56
|
+
estree.body.unshift(...prepend)
|
|
57
|
+
return estree
|
|
58
|
+
}
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
const jsxParser = Parser.extend(jsx())
|
|
@@ -65,55 +65,54 @@ const jsxParser = Parser.extend(jsx())
|
|
|
65
65
|
* @returns {node is Program}
|
|
66
66
|
*/
|
|
67
67
|
function isProgram(node) {
|
|
68
|
-
|
|
68
|
+
return node.type === 'Program'
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
* @param {string} code
|
|
73
73
|
*/
|
|
74
74
|
function parse(code) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
75
|
+
try {
|
|
76
|
+
return jsxParser.parse(code, {
|
|
77
|
+
sourceType: 'module',
|
|
78
|
+
ecmaVersion: 2020
|
|
79
|
+
})
|
|
80
|
+
} catch (err) {
|
|
81
|
+
// @ts-expect-error
|
|
82
|
+
return renderError(err)
|
|
83
|
+
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** @type {import("hast-util-to-estree").Handle} */
|
|
87
87
|
export const handleJsx = (node, state) => {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
const skipImport = false
|
|
89
|
+
const estree = parse(node.value)
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
/** @type {Expression[]} */
|
|
92
|
+
const expressions = []
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
94
|
+
if (isProgram(estree)) {
|
|
95
|
+
estree.body.forEach((child) => {
|
|
96
|
+
if (child.type === 'ImportDeclaration') {
|
|
97
|
+
if (!skipImport) {
|
|
98
|
+
state.esm.push(child)
|
|
99
|
+
}
|
|
100
|
+
} else if (child.type === 'ExpressionStatement') {
|
|
101
|
+
expressions.push(child.expression)
|
|
102
|
+
} else if (
|
|
103
|
+
child.type === 'ExportDefaultDeclaration' ||
|
|
104
|
+
child.type === 'ExportNamedDeclaration'
|
|
105
|
+
) {
|
|
106
|
+
state.esm.push(child)
|
|
107
|
+
} else {
|
|
108
|
+
throw new Error(`unexpected node: ${child.type}`)
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
}
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
// @ts-expect-error: array works
|
|
114
|
+
// https://github.com/syntax-tree/hast-util-to-estree/blob/c0c4bd33583abade25c4f4e248a06cb1ec8c3aff/lib/state.js#L215
|
|
115
|
+
return expressions
|
|
117
116
|
}
|
|
118
117
|
|
|
119
118
|
/**
|
|
@@ -121,7 +120,7 @@ export const handleJsx = (node, state) => {
|
|
|
121
120
|
* @returns {string}
|
|
122
121
|
*/
|
|
123
122
|
function removeQuotes(text) {
|
|
124
|
-
|
|
123
|
+
return text.trim().replace(/^["'](.+(?=["']$))["']$/, '$1')
|
|
125
124
|
}
|
|
126
125
|
|
|
127
126
|
/**
|
|
@@ -130,32 +129,32 @@ function removeQuotes(text) {
|
|
|
130
129
|
* @returns {ModuleDeclaration}
|
|
131
130
|
*/
|
|
132
131
|
function createExport(k, v) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
132
|
+
/** @type {(text: string) => Expression} */
|
|
133
|
+
const createLiteral = (text) => {
|
|
134
|
+
const value = removeQuotes(`${text}`)
|
|
135
|
+
return { type: 'Literal', value, raw: `'${value}'` }
|
|
136
|
+
}
|
|
137
|
+
/** @type {Expression} */
|
|
138
|
+
const init = Array.isArray(v)
|
|
139
|
+
? {
|
|
140
|
+
type: 'ArrayExpression',
|
|
141
|
+
elements: v.map(createLiteral)
|
|
142
|
+
}
|
|
143
|
+
: createLiteral(v)
|
|
144
|
+
return {
|
|
145
|
+
type: 'ExportNamedDeclaration',
|
|
146
|
+
declaration: {
|
|
147
|
+
type: 'VariableDeclaration',
|
|
148
|
+
declarations: [
|
|
149
|
+
{
|
|
150
|
+
type: 'VariableDeclarator',
|
|
151
|
+
id: { type: 'Identifier', name: k },
|
|
152
|
+
init
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
kind: 'const'
|
|
156
|
+
},
|
|
157
|
+
specifiers: [],
|
|
158
|
+
source: null
|
|
159
|
+
}
|
|
161
160
|
}
|
package/lib/run.js
CHANGED
|
@@ -12,7 +12,7 @@ const AsyncFunction = Object.getPrototypeOf(run).constructor
|
|
|
12
12
|
* Anything.
|
|
13
13
|
*/
|
|
14
14
|
export async function run(file, options) {
|
|
15
|
-
|
|
15
|
+
return new AsyncFunction(String(file))(options)
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -26,6 +26,6 @@ export async function run(file, options) {
|
|
|
26
26
|
* Anything.
|
|
27
27
|
*/
|
|
28
28
|
export function runSync(file, options) {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// eslint-disable-next-line no-new-func
|
|
30
|
+
return new Function(String(file))(options)
|
|
31
31
|
}
|
|
@@ -11,17 +11,17 @@
|
|
|
11
11
|
* Nothing.
|
|
12
12
|
*/
|
|
13
13
|
export function create(from, to) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/** @type {Array<keyof Node>} */
|
|
15
|
+
// @ts-expect-error: `start`, `end`, `comments` are custom Acorn fields.
|
|
16
|
+
const fields = ['start', 'end', 'loc', 'range', 'comments']
|
|
17
|
+
let index = -1
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
while (++index < fields.length) {
|
|
20
|
+
const field = fields[index]
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
if (field in from) {
|
|
23
|
+
// @ts-expect-error: assume they’re settable.
|
|
24
|
+
to[field] = from[field]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
27
|
}
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
* Expression.
|
|
17
17
|
*/
|
|
18
18
|
export function declarationToExpression(declaration) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if (declaration.type === 'FunctionDeclaration') {
|
|
20
|
+
return { ...declaration, type: 'FunctionExpression' }
|
|
21
|
+
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
if (declaration.type === 'ClassDeclaration') {
|
|
24
|
+
return { ...declaration, type: 'ClassExpression' }
|
|
25
|
+
/* Internal utility so the next shouldn’t happen or a maintainer is making a
|
|
26
|
+
* mistake. */
|
|
27
|
+
/* c8 ignore next 4 */
|
|
28
|
+
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
// Probably `VariableDeclaration`.
|
|
31
|
+
throw new Error(`Cannot turn \`${declaration.type}\` into an expression`)
|
|
32
32
|
}
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* Whether `node` is a declaration.
|
|
13
13
|
*/
|
|
14
14
|
export function isDeclaration(node) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
return Boolean(
|
|
16
|
+
node.type === 'FunctionDeclaration' ||
|
|
17
|
+
node.type === 'ClassDeclaration' ||
|
|
18
|
+
node.type === 'VariableDeclaration'
|
|
19
|
+
)
|
|
20
20
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @typedef {import('estree-jsx').VariableDeclarator} VariableDeclarator
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {create} from './estree-util-create.js'
|
|
12
|
+
import { create } from './estree-util-create.js'
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* @param {Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier>} specifiers
|
|
@@ -17,78 +17,78 @@ import {create} from './estree-util-create.js'
|
|
|
17
17
|
* @returns {Array<VariableDeclarator>}
|
|
18
18
|
*/
|
|
19
19
|
export function specifiersToDeclarations(specifiers, init) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
let index = -1
|
|
21
|
+
/** @type {Array<VariableDeclarator>} */
|
|
22
|
+
const declarations = []
|
|
23
|
+
/** @type {Array<ImportSpecifier | ImportDefaultSpecifier | ExportSpecifier>} */
|
|
24
|
+
const otherSpecifiers = []
|
|
25
|
+
// Can only be one according to JS syntax.
|
|
26
|
+
/** @type {ImportNamespaceSpecifier | undefined} */
|
|
27
|
+
let importNamespaceSpecifier
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
while (++index < specifiers.length) {
|
|
30
|
+
const specifier = specifiers[index]
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
if (specifier.type === 'ImportNamespaceSpecifier') {
|
|
33
|
+
importNamespaceSpecifier = specifier
|
|
34
|
+
} else {
|
|
35
|
+
otherSpecifiers.push(specifier)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
if (importNamespaceSpecifier) {
|
|
40
|
+
/** @type {VariableDeclarator} */
|
|
41
|
+
const declarator = {
|
|
42
|
+
type: 'VariableDeclarator',
|
|
43
|
+
id: importNamespaceSpecifier.local,
|
|
44
|
+
init
|
|
45
|
+
}
|
|
46
|
+
create(importNamespaceSpecifier, declarator)
|
|
47
|
+
declarations.push(declarator)
|
|
48
|
+
}
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
declarations.push({
|
|
51
|
+
type: 'VariableDeclarator',
|
|
52
|
+
id: {
|
|
53
|
+
type: 'ObjectPattern',
|
|
54
|
+
properties: otherSpecifiers.map((specifier) => {
|
|
55
|
+
/** @type {Identifier} */
|
|
56
|
+
// @ts-expect-error: fine.
|
|
57
|
+
let key =
|
|
58
|
+
specifier.type === 'ImportSpecifier'
|
|
59
|
+
? specifier.imported
|
|
60
|
+
: specifier.type === 'ExportSpecifier'
|
|
61
|
+
? specifier.exported
|
|
62
|
+
: { type: 'Identifier', name: 'default' }
|
|
63
|
+
let value = specifier.local
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
// Switch them around if we’re exporting.
|
|
66
|
+
if (specifier.type === 'ExportSpecifier') {
|
|
67
|
+
value = key
|
|
68
|
+
// @ts-expect-error: fine.
|
|
69
|
+
key = specifier.local
|
|
70
|
+
}
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
72
|
+
/** @type {AssignmentProperty} */
|
|
73
|
+
const property = {
|
|
74
|
+
type: 'Property',
|
|
75
|
+
kind: 'init',
|
|
76
|
+
// @ts-expect-error: fine.
|
|
77
|
+
shorthand: key.name === value.name,
|
|
78
|
+
method: false,
|
|
79
|
+
computed: false,
|
|
80
|
+
key,
|
|
81
|
+
// @ts-expect-error: fine.
|
|
82
|
+
value
|
|
83
|
+
}
|
|
84
|
+
create(specifier, property)
|
|
85
|
+
return property
|
|
86
|
+
})
|
|
87
|
+
},
|
|
88
|
+
init: importNamespaceSpecifier
|
|
89
|
+
? { type: 'Identifier', name: importNamespaceSpecifier.local.name }
|
|
90
|
+
: init
|
|
91
|
+
})
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
return declarations
|
|
94
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estree-util-to-binary-addition.d.ts","sourceRoot":"","sources":["estree-util-to-binary-addition.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,8CAFW,KAAK,CAAC,UAAU,CAAC,+
|
|
1
|
+
{"version":3,"file":"estree-util-to-binary-addition.d.ts","sourceRoot":"","sources":["estree-util-to-binary-addition.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,8CAFW,KAAK,CAAC,UAAU,CAAC,+BAmB3B;yBAvBY,OAAO,YAAY,EAAE,UAAU"}
|
|
@@ -6,18 +6,20 @@
|
|
|
6
6
|
* @param {Array<Expression>} expressions
|
|
7
7
|
*/
|
|
8
8
|
export function toBinaryAddition(expressions) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
let index = -1
|
|
10
|
+
/** @type {Expression | undefined} */
|
|
11
|
+
let left
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
while (++index < expressions.length) {
|
|
14
|
+
const right = expressions[index]
|
|
15
|
+
left = left
|
|
16
|
+
? { type: 'BinaryExpression', left, operator: '+', right }
|
|
17
|
+
: right
|
|
18
|
+
}
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
// Just for types.
|
|
21
|
+
/* c8 ignore next */
|
|
22
|
+
if (!left) throw new Error('Expected non-empty `expressions` to be passed')
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
return left
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estree-util-to-id-or-member-expression.d.ts","sourceRoot":"","sources":["estree-util-to-id-or-member-expression.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"estree-util-to-id-or-member-expression.d.ts","sourceRoot":"","sources":["estree-util-to-id-or-member-expression.js"],"names":[],"mappings":"AAsCC;;;GAGG;AACH,4CAHW,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GACpB,UAAU,GAAG,gBAAgB,CA0CzC;AA9DF,wCAEY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,aAAa,GAAG,mBAAmB,CAO9E;yBA5BW,OAAO,YAAY,EAAE,UAAU;4BAC/B,OAAO,YAAY,EAAE,aAAa;kCAClC,OAAO,YAAY,EAAE,mBAAmB;sBACxC,OAAO,YAAY,EAAE,OAAO;+BAC5B,OAAO,YAAY,EAAE,gBAAgB"}
|