@alloy-js/csharp 0.18.0-dev.4 → 0.18.0-dev.6

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 (41) hide show
  1. package/dist/src/components/ClassDeclaration.d.ts +53 -0
  2. package/dist/src/components/ClassDeclaration.d.ts.map +1 -0
  3. package/dist/src/components/{Class.js → ClassDeclaration.js} +28 -4
  4. package/dist/src/components/EnumDeclaration.d.ts +34 -0
  5. package/dist/src/components/EnumDeclaration.d.ts.map +1 -0
  6. package/dist/src/components/{Enum.js → EnumDeclaration.js} +21 -2
  7. package/dist/src/components/index.d.ts +2 -2
  8. package/dist/src/components/index.d.ts.map +1 -1
  9. package/dist/src/components/index.js +2 -2
  10. package/dist/src/components/stc/index.d.ts +2 -2
  11. package/dist/src/components/stc/index.d.ts.map +1 -1
  12. package/dist/src/components/stc/index.js +2 -2
  13. package/dist/src/modifiers.d.ts +3 -2
  14. package/dist/src/modifiers.d.ts.map +1 -1
  15. package/dist/src/modifiers.js +7 -6
  16. package/dist/test/class-method.test.js +2 -2
  17. package/dist/test/class.test.js +62 -20
  18. package/dist/test/enum.test.js +6 -6
  19. package/dist/test/namespace.test.js +4 -4
  20. package/dist/test/projectdirectory.test.js +4 -4
  21. package/dist/test/sourcefile.test.js +2 -2
  22. package/dist/test/using.test.js +4 -4
  23. package/dist/tsconfig.tsbuildinfo +1 -1
  24. package/package.json +1 -1
  25. package/src/components/{Class.tsx → ClassDeclaration.tsx} +49 -7
  26. package/src/components/{Enum.tsx → EnumDeclaration.tsx} +22 -3
  27. package/src/components/index.ts +2 -2
  28. package/src/components/stc/index.ts +2 -2
  29. package/src/modifiers.ts +22 -21
  30. package/temp/api.json +428 -234
  31. package/test/class-method.test.tsx +3 -3
  32. package/test/class.test.tsx +70 -26
  33. package/test/enum.test.tsx +13 -11
  34. package/test/namespace.test.tsx +4 -4
  35. package/test/projectdirectory.test.tsx +4 -4
  36. package/test/sourcefile.test.tsx +2 -2
  37. package/test/using.test.tsx +14 -6
  38. package/dist/src/components/Class.d.ts +0 -23
  39. package/dist/src/components/Class.d.ts.map +0 -1
  40. package/dist/src/components/Enum.d.ts +0 -14
  41. package/dist/src/components/Enum.d.ts.map +0 -1
@@ -1,13 +1,13 @@
1
1
  import { Children } from "@alloy-js/core/jsx-runtime";
2
2
  import { describe, expect, it } from "vitest";
3
- import { Class, ClassMethod } from "../src/index.js";
3
+ import { ClassDeclaration, ClassMethod } from "../src/index.js";
4
4
  import { TestNamespace } from "./utils.jsx";
5
5
 
6
6
  const Wrapper = (props: { children: Children }) => (
7
7
  <TestNamespace>
8
- <Class public name="TestClass">
8
+ <ClassDeclaration public name="TestClass">
9
9
  {props.children}
10
- </Class>
10
+ </ClassDeclaration>
11
11
  </TestNamespace>
12
12
  );
13
13
 
@@ -1,28 +1,60 @@
1
1
  import * as core from "@alloy-js/core";
2
2
  import * as coretest from "@alloy-js/core/testing";
3
- import { expect, it } from "vitest";
3
+ import { describe, expect, it } from "vitest";
4
4
  import * as csharp from "../src/index.js";
5
+ import { ClassDeclaration } from "../src/index.js";
5
6
  import * as utils from "./utils.js";
6
7
 
7
8
  it("declares class with no members", () => {
8
- const res = utils.toSourceText(<csharp.Class public name="TestClass" />);
9
-
10
- expect(res).toBe(coretest.d`
11
- namespace TestCode
12
- {
13
- public class TestClass;
14
- }
9
+ expect(
10
+ <utils.TestNamespace>
11
+ <ClassDeclaration name="TestClass" />
12
+ </utils.TestNamespace>,
13
+ ).toRenderTo(`
14
+ class TestClass;
15
15
  `);
16
16
  });
17
17
 
18
+ describe("modifiers", () => {
19
+ it.each(["public", "private"])("%s", (mod) => {
20
+ expect(
21
+ <utils.TestNamespace>
22
+ <ClassDeclaration {...{ [mod]: true }} name="TestClass" />
23
+ </utils.TestNamespace>,
24
+ ).toRenderTo(`
25
+ ${mod} class TestClass;
26
+ `);
27
+ });
28
+
29
+ it.each(["partial", "abstract", "static", "sealed"])("%s", (mod) => {
30
+ expect(
31
+ <utils.TestNamespace>
32
+ <ClassDeclaration {...{ [mod]: true }} name="TestClass" />
33
+ </utils.TestNamespace>,
34
+ ).toRenderTo(`
35
+ ${mod} class TestClass;
36
+ `);
37
+ });
38
+
39
+ it("combines modifiers", () => {
40
+ expect(
41
+ <utils.TestNamespace>
42
+ <ClassDeclaration public abstract partial name="TestClass" />
43
+ </utils.TestNamespace>,
44
+ ).toRenderTo(`
45
+ public abstract partial class TestClass;
46
+ `);
47
+ });
48
+ });
49
+
18
50
  it("declares class with some members", () => {
19
51
  const res = utils.toSourceText(
20
- <csharp.Class public name="TestClass">
52
+ <csharp.ClassDeclaration public name="TestClass">
21
53
  <core.StatementList>
22
54
  <csharp.ClassMember public name="MemberOne" type="string" />
23
55
  <csharp.ClassMember private name="MemberTwo" type="int" />
24
56
  </core.StatementList>
25
- </csharp.Class>,
57
+ </csharp.ClassDeclaration>,
26
58
  );
27
59
 
28
60
  expect(res).toBe(coretest.d`
@@ -39,12 +71,12 @@ it("declares class with some members", () => {
39
71
 
40
72
  it("declares class with some methods", () => {
41
73
  const res = utils.toSourceText(
42
- <csharp.Class public name="TestClass">
74
+ <csharp.ClassDeclaration public name="TestClass">
43
75
  <core.List>
44
76
  <csharp.ClassMethod public name="MethodOne" />
45
77
  <csharp.ClassMethod private virtual name="MethodTwo" />
46
78
  </core.List>
47
- </csharp.Class>,
79
+ </csharp.ClassDeclaration>,
48
80
  );
49
81
 
50
82
  expect(res).toBe(coretest.d`
@@ -79,22 +111,30 @@ it("uses refkeys for members, params, and return type", () => {
79
111
  <core.Output namePolicy={csharp.createCSharpNamePolicy()}>
80
112
  <csharp.Namespace name="TestCode">
81
113
  <csharp.SourceFile path="Test.cs">
82
- <csharp.Enum public name="TestEnum" refkey={enumTypeRefkey}>
114
+ <csharp.EnumDeclaration
115
+ public
116
+ name="TestEnum"
117
+ refkey={enumTypeRefkey}
118
+ >
83
119
  <core.List comma hardline>
84
120
  <csharp.EnumMember name="One" />
85
121
  <csharp.EnumMember name="Two" />
86
122
  </core.List>
87
- </csharp.Enum>
123
+ </csharp.EnumDeclaration>
88
124
  <hbr />
89
- <csharp.Class public name="TestInput" refkey={inputTypeRefkey} />
125
+ <csharp.ClassDeclaration
126
+ public
127
+ name="TestInput"
128
+ refkey={inputTypeRefkey}
129
+ />
90
130
  <hbr />
91
- <csharp.Class
131
+ <csharp.ClassDeclaration
92
132
  public
93
133
  name="TestResult"
94
134
  refkey={testResultTypeRefkey}
95
135
  />
96
136
  <hbr />
97
- <csharp.Class public name="TestClass">
137
+ <csharp.ClassDeclaration public name="TestClass">
98
138
  <csharp.ClassMember
99
139
  private
100
140
  name="MemberOne"
@@ -110,7 +150,7 @@ it("uses refkeys for members, params, and return type", () => {
110
150
  >
111
151
  return new {testResultTypeRefkey}();
112
152
  </csharp.ClassMethod>
113
- </csharp.Class>
153
+ </csharp.ClassDeclaration>
114
154
  </csharp.SourceFile>
115
155
  </csharp.Namespace>
116
156
  </core.Output>,
@@ -145,11 +185,15 @@ it("declares class with generic parameters", () => {
145
185
  };
146
186
 
147
187
  const res = utils.toSourceText(
148
- <csharp.Class public name="TestClass" typeParameters={typeParameters}>
188
+ <csharp.ClassDeclaration
189
+ public
190
+ name="TestClass"
191
+ typeParameters={typeParameters}
192
+ >
149
193
  <csharp.ClassMember public name="memberOne" type={typeParameters.T} />
150
194
  ;<hbr />
151
195
  <csharp.ClassMember private name="memberTwo" type={typeParameters.U} />;
152
- </csharp.Class>,
196
+ </csharp.ClassDeclaration>,
153
197
  );
154
198
 
155
199
  expect(res).toBe(coretest.d`
@@ -166,10 +210,10 @@ it("declares class with generic parameters", () => {
166
210
 
167
211
  it("declares class with invalid members", () => {
168
212
  const decl = (
169
- <csharp.Class public name="TestClass">
213
+ <csharp.ClassDeclaration public name="TestClass">
170
214
  <csharp.EnumMember name="One" />,<hbr />
171
215
  <csharp.EnumMember name="Two" />
172
- </csharp.Class>
216
+ </csharp.ClassDeclaration>
173
217
  );
174
218
 
175
219
  expect(() => utils.toSourceText(decl)).toThrow(
@@ -179,9 +223,9 @@ it("declares class with invalid members", () => {
179
223
 
180
224
  it("declares class with constructor", () => {
181
225
  const res = utils.toSourceText(
182
- <csharp.Class public name="TestClass">
226
+ <csharp.ClassDeclaration public name="TestClass">
183
227
  <csharp.ClassConstructor public />
184
- </csharp.Class>,
228
+ </csharp.ClassDeclaration>,
185
229
  );
186
230
 
187
231
  expect(res).toBe(coretest.d`
@@ -215,7 +259,7 @@ it("declares class with constructor params and assigns values to fields", () =>
215
259
  ];
216
260
 
217
261
  const res = utils.toSourceText(
218
- <csharp.Class public name="TestClass">
262
+ <csharp.ClassDeclaration public name="TestClass">
219
263
  <csharp.ClassMember
220
264
  private
221
265
  name="name"
@@ -234,7 +278,7 @@ it("declares class with constructor params and assigns values to fields", () =>
234
278
  {thisNameRefkey} = {paramNameRefkey};<hbr />
235
279
  {thisSizeRefkey} = {paramSizeRefkey};
236
280
  </csharp.ClassConstructor>
237
- </csharp.Class>,
281
+ </csharp.ClassDeclaration>,
238
282
  );
239
283
 
240
284
  // TODO: assignments to members should have this. prefix
@@ -5,7 +5,9 @@ import * as csharp from "../src/index.js";
5
5
  import * as utils from "./utils.js";
6
6
 
7
7
  it("declares enum with no members", () => {
8
- const res = utils.toSourceText(<csharp.Enum public name="TestEnum" />);
8
+ const res = utils.toSourceText(
9
+ <csharp.EnumDeclaration public name="TestEnum" />,
10
+ );
9
11
 
10
12
  expect(res).toBe(coretest.d`
11
13
  namespace TestCode
@@ -17,10 +19,10 @@ it("declares enum with no members", () => {
17
19
 
18
20
  it("declares enum with members", () => {
19
21
  const res = utils.toSourceText(
20
- <csharp.Enum public name="TestEnum">
22
+ <csharp.EnumDeclaration public name="TestEnum">
21
23
  <csharp.EnumMember name="One" />,<hbr />
22
24
  <csharp.EnumMember name="Two" />
23
- </csharp.Enum>,
25
+ </csharp.EnumDeclaration>,
24
26
  );
25
27
 
26
28
  expect(res).toBe(coretest.d`
@@ -37,10 +39,10 @@ it("declares enum with members", () => {
37
39
 
38
40
  it("applies naming policy to enum and members", () => {
39
41
  const res = utils.toSourceText(
40
- <csharp.Enum public name="testEnum">
42
+ <csharp.EnumDeclaration public name="testEnum">
41
43
  <csharp.EnumMember name="one" />,<hbr />
42
44
  <csharp.EnumMember name="two" />
43
- </csharp.Enum>,
45
+ </csharp.EnumDeclaration>,
44
46
  );
45
47
 
46
48
  expect(res).toBe(coretest.d`
@@ -63,10 +65,10 @@ it("can reference things by refkey", () => {
63
65
  <core.Output>
64
66
  <csharp.Namespace name="TestCode">
65
67
  <csharp.SourceFile path="Test.cs">
66
- <csharp.Enum public name="TestEnum" refkey={enumRK}>
68
+ <csharp.EnumDeclaration public name="TestEnum" refkey={enumRK}>
67
69
  <csharp.EnumMember name="One" />,<hbr />
68
70
  <csharp.EnumMember name="Two" refkey={twoRK} />
69
- </csharp.Enum>
71
+ </csharp.EnumDeclaration>
70
72
  <hbr />
71
73
  {enumRK};<hbr />
72
74
  {twoRK};
@@ -97,19 +99,19 @@ it("can reference things by refkey across files", () => {
97
99
  <core.Output>
98
100
  <csharp.Namespace name="TestCode">
99
101
  <csharp.SourceFile path="Test.cs">
100
- <csharp.Enum public name="TestEnum">
102
+ <csharp.EnumDeclaration public name="TestEnum">
101
103
  <csharp.EnumMember name="One" />,<hbr />
102
104
  <csharp.EnumMember name="Two" />
103
- </csharp.Enum>
105
+ </csharp.EnumDeclaration>
104
106
  <hbr />
105
107
  {enumRK};<hbr />
106
108
  {barRK};
107
109
  </csharp.SourceFile>
108
110
  <csharp.SourceFile path="Other.cs">
109
- <csharp.Enum public name="OtherEnum" refkey={enumRK}>
111
+ <csharp.EnumDeclaration public name="OtherEnum" refkey={enumRK}>
110
112
  <csharp.EnumMember name="Foo" />,<hbr />
111
113
  <csharp.EnumMember name="Bar" refkey={barRK} />
112
- </csharp.Enum>
114
+ </csharp.EnumDeclaration>
113
115
  <hbr />
114
116
  {enumRK};<hbr />
115
117
  {barRK};
@@ -8,18 +8,18 @@ it("defines multiple namespaces and source files with unique content", () => {
8
8
  <core.Output>
9
9
  <csharp.Namespace name="Namespace1">
10
10
  <csharp.SourceFile path="Model1.cs">
11
- <csharp.Class public name="Model1" />
11
+ <csharp.ClassDeclaration public name="Model1" />
12
12
  </csharp.SourceFile>
13
13
  <csharp.SourceFile path="Model2.cs">
14
- <csharp.Class public name="Model2" />
14
+ <csharp.ClassDeclaration public name="Model2" />
15
15
  </csharp.SourceFile>
16
16
  </csharp.Namespace>
17
17
  <csharp.Namespace name="Namespace2">
18
18
  <csharp.SourceFile path="Model3.cs">
19
- <csharp.Class public name="Model3" />
19
+ <csharp.ClassDeclaration public name="Model3" />
20
20
  </csharp.SourceFile>
21
21
  <csharp.SourceFile path="Model4.cs">
22
- <csharp.Class public name="Model4" />
22
+ <csharp.ClassDeclaration public name="Model4" />
23
23
  </csharp.SourceFile>
24
24
  </csharp.Namespace>
25
25
  </core.Output>,
@@ -14,10 +14,10 @@ it("defines a project directory file with multiple source files", () => {
14
14
  >
15
15
  <csharp.Namespace name="TestCode">
16
16
  <csharp.SourceFile path="Test1.cs">
17
- <csharp.Class public name="TestClass1" />
17
+ <csharp.ClassDeclaration public name="TestClass1" />
18
18
  </csharp.SourceFile>
19
19
  <csharp.SourceFile path="Test2.cs">
20
- <csharp.Class public name="TestClass2" />
20
+ <csharp.ClassDeclaration public name="TestClass2" />
21
21
  </csharp.SourceFile>
22
22
  </csharp.Namespace>
23
23
  </csharp.ProjectDirectory>
@@ -71,10 +71,10 @@ it("defines a project directory file with multiple source files and a custom TFM
71
71
  >
72
72
  <csharp.Namespace name="TestCode">
73
73
  <csharp.SourceFile path="Test1.cs">
74
- <csharp.Class public name="TestClass1" />
74
+ <csharp.ClassDeclaration public name="TestClass1" />
75
75
  </csharp.SourceFile>
76
76
  <csharp.SourceFile path="Test2.cs">
77
- <csharp.Class public name="TestClass2" />
77
+ <csharp.ClassDeclaration public name="TestClass2" />
78
78
  </csharp.SourceFile>
79
79
  </csharp.Namespace>
80
80
  </csharp.ProjectDirectory>
@@ -8,10 +8,10 @@ it("defines multiple source files with unique content", () => {
8
8
  <core.Output>
9
9
  <csharp.Namespace name="TestCode">
10
10
  <csharp.SourceFile path="Test1.cs">
11
- <csharp.Class public name="TestClass1" />
11
+ <csharp.ClassDeclaration public name="TestClass1" />
12
12
  </csharp.SourceFile>
13
13
  <csharp.SourceFile path="Test2.cs">
14
- <csharp.Class public name="TestClass2" />
14
+ <csharp.ClassDeclaration public name="TestClass2" />
15
15
  </csharp.SourceFile>
16
16
  </csharp.Namespace>
17
17
  </core.Output>,
@@ -52,26 +52,34 @@ it("adds using statement across namespaces", () => {
52
52
  <core.Output namePolicy={csharp.createCSharpNamePolicy()}>
53
53
  <csharp.Namespace name="Models">
54
54
  <csharp.SourceFile path="Models.cs">
55
- <csharp.Class public name="Input" refkey={inputTypeRefkey} />
55
+ <csharp.ClassDeclaration
56
+ public
57
+ name="Input"
58
+ refkey={inputTypeRefkey}
59
+ />
56
60
  <hbr />
57
- <csharp.Class public name="Output" refkey={outputTypeRefkey} />
61
+ <csharp.ClassDeclaration
62
+ public
63
+ name="Output"
64
+ refkey={outputTypeRefkey}
65
+ />
58
66
  <hbr />
59
- <csharp.Enum public name="TestEnum">
67
+ <csharp.EnumDeclaration public name="TestEnum">
60
68
  <csharp.EnumMember name="One" />,<hbr />
61
69
  <csharp.EnumMember name="Two" refkey={twoValRefkey} />
62
- </csharp.Enum>
70
+ </csharp.EnumDeclaration>
63
71
  </csharp.SourceFile>
64
72
  </csharp.Namespace>
65
73
  <csharp.Namespace name="Client">
66
74
  <csharp.SourceFile path="Client.cs" using={["System"]}>
67
- <csharp.Class public name="Client">
75
+ <csharp.ClassDeclaration public name="Client">
68
76
  <csharp.ClassMethod
69
77
  public
70
78
  name="MethodOne"
71
79
  parameters={params}
72
80
  returns={outputTypeRefkey}
73
81
  />
74
- </csharp.Class>
82
+ </csharp.ClassDeclaration>
75
83
  <hbr />
76
84
  {twoValRefkey};
77
85
  </csharp.SourceFile>
@@ -1,23 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifiers } from "../modifiers.js";
3
- import { ParameterProps } from "./Parameters.js";
4
- export interface ClassProps extends Omit<core.DeclarationProps, "nameKind">, AccessModifiers {
5
- name: string;
6
- refkey?: core.Refkey;
7
- typeParameters?: Record<string, core.Refkey>;
8
- }
9
- export declare function Class(props: ClassProps): core.Children;
10
- export interface ClassConstructorProps extends AccessModifiers {
11
- parameters?: Array<ParameterProps>;
12
- refkey?: core.Refkey;
13
- symbol?: core.OutputSymbol;
14
- children?: core.Children;
15
- }
16
- export declare function ClassConstructor(props: ClassConstructorProps): core.Children;
17
- export interface ClassMemberProps extends AccessModifiers {
18
- name: string;
19
- type: core.Children;
20
- refkey?: core.Refkey;
21
- }
22
- export declare function ClassMember(props: ClassMemberProps): core.Children;
23
- //# sourceMappingURL=Class.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/components/Class.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,UACf,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAC7C,eAAe;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9C;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,iBAqDtC;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;CAC1B;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,iBAkC5D;AAGD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,iBAyBlD"}
@@ -1,14 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifiers } from "../modifiers.js";
3
- export interface EnumProps extends AccessModifiers {
4
- name: string;
5
- refkey?: core.Refkey;
6
- children?: core.Children;
7
- }
8
- export declare function Enum(props: EnumProps): core.Children;
9
- export interface EnumMemberProps {
10
- name: string;
11
- refkey?: core.Refkey;
12
- }
13
- export declare function EnumMember(props: EnumMemberProps): core.Children;
14
- //# sourceMappingURL=Enum.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../../src/components/Enum.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAOzB,MAAM,WAAW,SAAU,SAAQ,eAAe;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;CAC1B;AAGD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,iBAgCpC;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,iBAmBhD"}