@typespec/emitter-framework 0.13.0-dev.1 → 0.13.0
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/CHANGELOG.md +11 -0
- package/dist/src/csharp/components/index.d.ts +2 -0
- package/dist/src/csharp/components/index.d.ts.map +1 -1
- package/dist/src/csharp/components/index.js +2 -0
- package/dist/src/csharp/components/index.js.map +1 -1
- package/dist/src/csharp/components/json-converter/json-converter-resolver.d.ts +28 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.d.ts.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.js +82 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.js.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.test.d.ts +2 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.test.d.ts.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.test.js +134 -0
- package/dist/src/csharp/components/json-converter/json-converter-resolver.test.js.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter.d.ts +28 -0
- package/dist/src/csharp/components/json-converter/json-converter.d.ts.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter.js +168 -0
- package/dist/src/csharp/components/json-converter/json-converter.js.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter.test.d.ts +2 -0
- package/dist/src/csharp/components/json-converter/json-converter.test.d.ts.map +1 -0
- package/dist/src/csharp/components/json-converter/json-converter.test.js +134 -0
- package/dist/src/csharp/components/json-converter/json-converter.test.js.map +1 -0
- package/dist/src/csharp/components/property/property.d.ts +4 -1
- package/dist/src/csharp/components/property/property.d.ts.map +1 -1
- package/dist/src/csharp/components/property/property.js +46 -11
- package/dist/src/csharp/components/property/property.js.map +1 -1
- package/dist/src/csharp/components/property/property.test.js +125 -8
- package/dist/src/csharp/components/property/property.test.js.map +1 -1
- package/package.json +10 -11
- package/package.json.bak +11 -12
- package/src/csharp/components/index.ts +2 -0
- package/src/csharp/components/json-converter/json-converter-resolver.test.tsx +120 -0
- package/src/csharp/components/json-converter/json-converter-resolver.tsx +117 -0
- package/src/csharp/components/json-converter/json-converter.test.tsx +141 -0
- package/src/csharp/components/json-converter/json-converter.tsx +146 -0
- package/src/csharp/components/property/property.test.tsx +111 -7
- package/src/csharp/components/property/property.tsx +47 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog - @typespec/emitter-framework
|
|
2
2
|
|
|
3
|
+
## 0.13.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- [#8415](https://github.com/microsoft/typespec/pull/8415) [c#] Support encode when generating csharp property.
|
|
8
|
+
|
|
9
|
+
### Bump dependencies
|
|
10
|
+
|
|
11
|
+
- [#8823](https://github.com/microsoft/typespec/pull/8823) Upgrade dependencies
|
|
12
|
+
|
|
13
|
+
|
|
3
14
|
## 0.12.0
|
|
4
15
|
|
|
5
16
|
### Features
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from "./class/declaration.js";
|
|
2
2
|
export * from "./enum/declaration.jsx";
|
|
3
|
+
export * from "./json-converter/json-converter-resolver.jsx";
|
|
4
|
+
export * from "./json-converter/json-converter.jsx";
|
|
3
5
|
export * from "./property/property.jsx";
|
|
4
6
|
export * from "./type-expression.jsx";
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/csharp/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/csharp/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from "./class/declaration.js";
|
|
2
2
|
export * from "./enum/declaration.js";
|
|
3
|
+
export * from "./json-converter/json-converter-resolver.js";
|
|
4
|
+
export * from "./json-converter/json-converter.js";
|
|
3
5
|
export * from "./property/property.js";
|
|
4
6
|
export * from "./type-expression.js";
|
|
5
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../../src/csharp/components/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc,wBAAwB;AACtC;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/csharp/components/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Children, type Namekey } from "@alloy-js/core";
|
|
2
|
+
import { type EncodeData, type Type } from "@typespec/compiler";
|
|
3
|
+
interface JsonConverterInfo {
|
|
4
|
+
namekey: Namekey;
|
|
5
|
+
converter: Children;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Help to resolve JsonConverter for a given type with encoding:
|
|
9
|
+
* 1. Avoid unnecessary duplicate JsonConverter declaration for the same type with same encoding.
|
|
10
|
+
* 2. Provide resolved JsonConverters to be generated centralized properly as needed.
|
|
11
|
+
* */
|
|
12
|
+
export interface useJsonConverterResolver {
|
|
13
|
+
resolveJsonConverter: (type: Type, encodeData: EncodeData) => JsonConverterInfo | undefined;
|
|
14
|
+
listResolvedJsonConverters: () => JsonConverterInfo[];
|
|
15
|
+
}
|
|
16
|
+
export declare const JsonConverterResolver: import("@alloy-js/core").ComponentContext<useJsonConverterResolver>;
|
|
17
|
+
export declare function useJsonConverterResolver(): useJsonConverterResolver | undefined;
|
|
18
|
+
export interface JsonConverterResolverOptions {
|
|
19
|
+
/** Custom JSON converters besides the built-in ones for known encode*/
|
|
20
|
+
customConverters?: {
|
|
21
|
+
type: Type;
|
|
22
|
+
encodeData: EncodeData;
|
|
23
|
+
info: JsonConverterInfo;
|
|
24
|
+
}[];
|
|
25
|
+
}
|
|
26
|
+
export declare function createJsonConverterResolver(options?: JsonConverterResolverOptions): useJsonConverterResolver;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=json-converter-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-converter-resolver.d.ts","sourceRoot":"","sources":["../../../../../src/csharp/components/json-converter/json-converter-resolver.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,IAAI,EACV,MAAM,oBAAoB,CAAC;AAK5B,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED;;;;KAIK;AACL,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAC5F,0BAA0B,EAAE,MAAM,iBAAiB,EAAE,CAAC;CACvD;AAED,eAAO,MAAM,qBAAqB,qEAA4C,CAAC;AAE/E,wBAAgB,wBAAwB,IAAI,wBAAwB,GAAG,SAAS,CAE/E;AAED,MAAM,WAAW,4BAA4B;IAC3C,uEAAuE;IACvE,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAC;CACtF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,CAAC,EAAE,4BAA4B,GACrC,wBAAwB,CA4E1B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { useTsp } from "#core/index.js";
|
|
3
|
+
import { createContext, namekey, useContext } from "@alloy-js/core";
|
|
4
|
+
import { getTypeName } from "@typespec/compiler";
|
|
5
|
+
import { capitalize } from "@typespec/compiler/casing";
|
|
6
|
+
import { getNullableUnionInnerType } from "../utils/nullable-util.js";
|
|
7
|
+
import { TimeSpanIso8601JsonConverter, TimeSpanSecondsJsonConverter } from "./json-converter.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Help to resolve JsonConverter for a given type with encoding:
|
|
11
|
+
* 1. Avoid unnecessary duplicate JsonConverter declaration for the same type with same encoding.
|
|
12
|
+
* 2. Provide resolved JsonConverters to be generated centralized properly as needed.
|
|
13
|
+
* */
|
|
14
|
+
|
|
15
|
+
export const JsonConverterResolver = createContext();
|
|
16
|
+
export function useJsonConverterResolver() {
|
|
17
|
+
return useContext(JsonConverterResolver);
|
|
18
|
+
}
|
|
19
|
+
export function createJsonConverterResolver(options) {
|
|
20
|
+
const resolvedConverters = new Map();
|
|
21
|
+
const customConverters = new Map();
|
|
22
|
+
if (options?.customConverters) {
|
|
23
|
+
for (const item of options.customConverters) {
|
|
24
|
+
const key = getJsonConverterKey(item.type, item.encodeData);
|
|
25
|
+
customConverters.set(key, item.info);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
resolveJsonConverter: (type, encodeData) => {
|
|
30
|
+
const key = getJsonConverterKey(type, encodeData);
|
|
31
|
+
const found = resolvedConverters.get(key);
|
|
32
|
+
if (found) {
|
|
33
|
+
return found;
|
|
34
|
+
} else {
|
|
35
|
+
const resolved = customConverters.get(key) ?? resolveKnownJsonConverter(type, encodeData);
|
|
36
|
+
if (resolved) {
|
|
37
|
+
resolvedConverters.set(key, resolved);
|
|
38
|
+
return resolved;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
},
|
|
43
|
+
listResolvedJsonConverters: () => Array.from(resolvedConverters.values())
|
|
44
|
+
};
|
|
45
|
+
function getJsonConverterKey(type, encodeData) {
|
|
46
|
+
return `type:${getTypeName(type)}-encoding:${encodeData.encoding}-encodeType:${getTypeName(encodeData.type)}`;
|
|
47
|
+
}
|
|
48
|
+
function resolveKnownJsonConverter(type, encodeData) {
|
|
49
|
+
const ENCODING_DURATION_SECONDS = "seconds";
|
|
50
|
+
const ENCODING_DURATION_ISO8601 = "ISO8601";
|
|
51
|
+
const {
|
|
52
|
+
$
|
|
53
|
+
} = useTsp();
|
|
54
|
+
// Unwrap nullable because JsonConverter<T> would handle null by default for us.
|
|
55
|
+
const unwrappedType = type.kind === "Union" ? getNullableUnionInnerType(type) ?? type : type;
|
|
56
|
+
if (unwrappedType === $.builtin.duration && encodeData.encoding === ENCODING_DURATION_SECONDS && [$.builtin.int16, $.builtin.uint16, $.builtin.int32, $.builtin.uint32, $.builtin.int64, $.builtin.uint64, $.builtin.float32, $.builtin.float64].includes(encodeData.type)) {
|
|
57
|
+
const capitalizedTypeName = capitalize(encodeData.type.name);
|
|
58
|
+
const key = namekey(`TimeSpanSeconds${capitalizedTypeName}JsonConverter`);
|
|
59
|
+
return {
|
|
60
|
+
namekey: key,
|
|
61
|
+
converter: _$createComponent(TimeSpanSecondsJsonConverter, {
|
|
62
|
+
name: key,
|
|
63
|
+
get encodeType() {
|
|
64
|
+
return encodeData.type;
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
};
|
|
68
|
+
} else if (unwrappedType === $.builtin.duration && encodeData.encoding === ENCODING_DURATION_ISO8601) {
|
|
69
|
+
const key = namekey(`TimeSpanIso8601JsonConverter`);
|
|
70
|
+
return {
|
|
71
|
+
namekey: key,
|
|
72
|
+
converter: _$createComponent(TimeSpanIso8601JsonConverter, {
|
|
73
|
+
name: key
|
|
74
|
+
})
|
|
75
|
+
};
|
|
76
|
+
} else {
|
|
77
|
+
// TODO: support other known encodings
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=json-converter-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useTsp","createContext","namekey","useContext","getTypeName","capitalize","getNullableUnionInnerType","TimeSpanIso8601JsonConverter","TimeSpanSecondsJsonConverter","JsonConverterResolver","useJsonConverterResolver","createJsonConverterResolver","options","resolvedConverters","Map","customConverters","item","key","getJsonConverterKey","type","encodeData","set","info","resolveJsonConverter","found","get","resolved","resolveKnownJsonConverter","undefined","listResolvedJsonConverters","Array","from","values","encoding","ENCODING_DURATION_SECONDS","ENCODING_DURATION_ISO8601","$","unwrappedType","kind","builtin","duration","int16","uint16","int32","uint32","int64","uint64","float32","float64","includes","capitalizedTypeName","name","converter","_$createComponent","encodeType"],"sources":["../../../../../src/csharp/components/json-converter/json-converter-resolver.tsx"],"sourcesContent":[null],"mappings":";AAAA,SAASA,MAAM,QAAQ,gBAAgB;AACvC,SAASC,aAAa,EAAEC,OAAO,EAAEC,UAAU,QAAqC,gBAAgB;AAChG,SACEC,WAAW,QAIN,oBAAoB;AAC3B,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,yBAAyB,QAAQ,2BAA2B;AACrE,SAASC,4BAA4B,EAAEC,4BAA4B;;AAOnE;AACA;AACA;AACA;AACA;;AAMA,OAAO,MAAMC,qBAAqB,GAAGR,aAAa,CAA2B,CAAC;AAE9E,OAAO,SAASS,wBAAwBA,CAAA,EAAyC;EAC/E,OAAOP,UAAU,CAACM,qBAAqB,CAAC;AAC1C;AAOA,OAAO,SAASE,2BAA2BA,CACzCC,OAAsC,EACZ;EAC1B,MAAMC,kBAAkB,GAAG,IAAIC,GAAG,CAA4B,CAAC;EAC/D,MAAMC,gBAAgB,GAAG,IAAID,GAAG,CAA4B,CAAC;EAE7D,IAAIF,OAAO,EAAEG,gBAAgB,EAAE;IAC7B,KAAK,MAAMC,IAAI,IAAIJ,OAAO,CAACG,gBAAgB,EAAE;MAC3C,MAAME,GAAG,GAAGC,mBAAmB,CAACF,IAAI,CAACG,IAAI,EAAEH,IAAI,CAACI,UAAU,CAAC;MAC3DL,gBAAgB,CAACM,GAAG,CAACJ,GAAG,EAAED,IAAI,CAACM,IAAI,CAAC;IACtC;EACF;EAEA,OAAO;IACLC,oBAAoB,EAAEA,CAACJ,IAAU,EAAEC,UAAsB,KAAK;MAC5D,MAAMH,GAAG,GAAGC,mBAAmB,CAACC,IAAI,EAAEC,UAAU,CAAC;MACjD,MAAMI,KAAK,GAAGX,kBAAkB,CAACY,GAAG,CAACR,GAAG,CAAC;MACzC,IAAIO,KAAK,EAAE;QACT,OAAOA,KAAK;MACd,CAAC,MAAM;QACL,MAAME,QAAQ,GAAGX,gBAAgB,CAACU,GAAG,CAACR,GAAG,CAAC,IAAIU,yBAAyB,CAACR,IAAI,EAAEC,UAAU,CAAC;QACzF,IAAIM,QAAQ,EAAE;UACZb,kBAAkB,CAACQ,GAAG,CAACJ,GAAG,EAAES,QAAQ,CAAC;UACrC,OAAOA,QAAQ;QACjB;MACF;MACA,OAAOE,SAAS;IAClB,CAAC;IACDC,0BAA0B,EAAEA,CAAA,KAAMC,KAAK,CAACC,IAAI,CAAClB,kBAAkB,CAACmB,MAAM,CAAC,CAAC;EAC1E,CAAC;EAED,SAASd,mBAAmBA,CAACC,IAAU,EAAEC,UAAsB,EAAE;IAC/D,OAAO,QAAQhB,WAAW,CAACe,IAAI,CAAC,aAAaC,UAAU,CAACa,QAAQ,eAAe7B,WAAW,CAACgB,UAAU,CAACD,IAAI,CAAC,EAAE;EAC/G;EAEA,SAASQ,yBAAyBA,CAChCR,IAAU,EACVC,UAAsB,EACS;IAC/B,MAAMc,yBAAgD,GAAG,SAAS;IAClE,MAAMC,yBAAgD,GAAG,SAAS;IAClE,MAAM;MAAEC;IAAE,CAAC,GAAGpC,MAAM,CAAC,CAAC;IACtB;IACA,MAAMqC,aAAa,GAAGlB,IAAI,CAACmB,IAAI,KAAK,OAAO,GAAIhC,yBAAyB,CAACa,IAAI,CAAC,IAAIA,IAAI,GAAIA,IAAI;IAC9F,IACEkB,aAAa,KAAKD,CAAC,CAACG,OAAO,CAACC,QAAQ,IACpCpB,UAAU,CAACa,QAAQ,KAAKC,yBAAyB,IACjD,CACEE,CAAC,CAACG,OAAO,CAACE,KAAK,EACfL,CAAC,CAACG,OAAO,CAACG,MAAM,EAChBN,CAAC,CAACG,OAAO,CAACI,KAAK,EACfP,CAAC,CAACG,OAAO,CAACK,MAAM,EAChBR,CAAC,CAACG,OAAO,CAACM,KAAK,EACfT,CAAC,CAACG,OAAO,CAACO,MAAM,EAChBV,CAAC,CAACG,OAAO,CAACQ,OAAO,EACjBX,CAAC,CAACG,OAAO,CAACS,OAAO,CAClB,CAACC,QAAQ,CAAC7B,UAAU,CAACD,IAAI,CAAC,EAC3B;MACA,MAAM+B,mBAAmB,GAAG7C,UAAU,CAACe,UAAU,CAACD,IAAI,CAACgC,IAAI,CAAC;MAC5D,MAAMlC,GAAY,GAAGf,OAAO,CAAC,kBAAkBgD,mBAAmB,eAAe,CAAC;MAClF,OAAO;QACLhD,OAAO,EAAEe,GAAG;QACZmC,SAAS,EAAAC,iBAAA,CAAG7C,4BAA4B;UAAC2C,IAAI,EAAElC,GAAG;UAAA,IAAEqC,UAAUA,CAAA;YAAA,OAAElC,UAAU,CAACD,IAAI;UAAA;QAAA;MACjF,CAAC;IACH,CAAC,MAAM,IACLkB,aAAa,KAAKD,CAAC,CAACG,OAAO,CAACC,QAAQ,IACpCpB,UAAU,CAACa,QAAQ,KAAKE,yBAAyB,EACjD;MACA,MAAMlB,GAAG,GAAGf,OAAO,CAAC,8BAA8B,CAAC;MACnD,OAAO;QACLA,OAAO,EAAEe,GAAG;QACZmC,SAAS,EAAAC,iBAAA,CAAG9C,4BAA4B;UAAC4C,IAAI,EAAElC;QAAG;MACpD,CAAC;IACH,CAAC,MAAM;MACL;MACA,OAAOW,SAAS;IAClB;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-converter-resolver.test.d.ts","sourceRoot":"","sources":["../../../../../src/csharp/components/json-converter/json-converter-resolver.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createComponent as _$createComponent, memo as _$memo, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { Tester } from "#test/test-host.js";
|
|
3
|
+
import { code, For, List, namekey } from "@alloy-js/core";
|
|
4
|
+
import { createCSharpNamePolicy, SourceFile } from "@alloy-js/csharp";
|
|
5
|
+
import { t } from "@typespec/compiler/testing";
|
|
6
|
+
import { $ } from "@typespec/compiler/typekit";
|
|
7
|
+
import { beforeEach, expect, it } from "vitest";
|
|
8
|
+
import { Output } from "../../../core/components/output.js";
|
|
9
|
+
import { Property } from "../property/property.js";
|
|
10
|
+
import { createJsonConverterResolver, JsonConverterResolver, useJsonConverterResolver } from "./json-converter-resolver.js";
|
|
11
|
+
import { JsonConverter } from "./json-converter.js";
|
|
12
|
+
let tester;
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
tester = await Tester.createInstance();
|
|
15
|
+
});
|
|
16
|
+
function Wrapper(props) {
|
|
17
|
+
const policy = createCSharpNamePolicy();
|
|
18
|
+
return _$createComponent(Output, {
|
|
19
|
+
get program() {
|
|
20
|
+
return tester.program;
|
|
21
|
+
},
|
|
22
|
+
namePolicy: policy,
|
|
23
|
+
get children() {
|
|
24
|
+
return _$createComponent(SourceFile, {
|
|
25
|
+
path: "test.cs",
|
|
26
|
+
get children() {
|
|
27
|
+
return props.children;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const fakeJsonConverterKey = namekey("FakeJsonConverter");
|
|
34
|
+
function FakeJsonConverter() {
|
|
35
|
+
return _$createComponent(JsonConverter, {
|
|
36
|
+
name: fakeJsonConverterKey,
|
|
37
|
+
get type() {
|
|
38
|
+
return $(tester.program).builtin.string;
|
|
39
|
+
},
|
|
40
|
+
decodeAndReturn: reader => {
|
|
41
|
+
return code`return ${reader}.GetString();`;
|
|
42
|
+
},
|
|
43
|
+
encodeAndWrite: (writer, value) => {
|
|
44
|
+
return code`${writer}.WriteStringValue(${value});`;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function createTestJsonConverterResolver() {
|
|
49
|
+
const option = {
|
|
50
|
+
customConverters: [{
|
|
51
|
+
type: $(tester.program).builtin.string,
|
|
52
|
+
encodeData: {
|
|
53
|
+
type: $(tester.program).builtin.string,
|
|
54
|
+
encoding: "fake-change"
|
|
55
|
+
},
|
|
56
|
+
info: {
|
|
57
|
+
converter: FakeJsonConverter,
|
|
58
|
+
namekey: fakeJsonConverterKey
|
|
59
|
+
}
|
|
60
|
+
}]
|
|
61
|
+
};
|
|
62
|
+
return createJsonConverterResolver(option);
|
|
63
|
+
}
|
|
64
|
+
it("No resolved converters", async () => {
|
|
65
|
+
await tester.compile(t.code``);
|
|
66
|
+
expect(_$createComponent(Wrapper, {
|
|
67
|
+
get children() {
|
|
68
|
+
return _$createComponent(JsonConverterResolver.Provider, {
|
|
69
|
+
get value() {
|
|
70
|
+
return createTestJsonConverterResolver();
|
|
71
|
+
},
|
|
72
|
+
get children() {
|
|
73
|
+
return code`Resolved JsonConverter: ${useJsonConverterResolver()?.listResolvedJsonConverters().length}`;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
})).toRenderTo(`Resolved JsonConverter: 0`);
|
|
78
|
+
});
|
|
79
|
+
it("Resolve custom converter", async () => {
|
|
80
|
+
const r = await tester.compile(t.code`
|
|
81
|
+
model BaseModel {
|
|
82
|
+
@encode("fake-change", string)
|
|
83
|
+
${t.modelProperty("prop1")}: string;
|
|
84
|
+
}
|
|
85
|
+
`);
|
|
86
|
+
expect(_$createComponent(Wrapper, {
|
|
87
|
+
get children() {
|
|
88
|
+
return _$createComponent(JsonConverterResolver.Provider, {
|
|
89
|
+
get value() {
|
|
90
|
+
return createTestJsonConverterResolver();
|
|
91
|
+
},
|
|
92
|
+
get children() {
|
|
93
|
+
return _$createComponent(List, {
|
|
94
|
+
get children() {
|
|
95
|
+
return [_$createComponent(Property, {
|
|
96
|
+
get type() {
|
|
97
|
+
return r.prop1;
|
|
98
|
+
},
|
|
99
|
+
jsonAttributes: true
|
|
100
|
+
}), _$createIntrinsic("br", {}), _$createComponent(For, {
|
|
101
|
+
get each() {
|
|
102
|
+
return useJsonConverterResolver()?.listResolvedJsonConverters() ?? [];
|
|
103
|
+
},
|
|
104
|
+
children: x => [_$memo(() => x.converter)]
|
|
105
|
+
})];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
})).toRenderTo(`
|
|
112
|
+
using System;
|
|
113
|
+
using System.Text.Json;
|
|
114
|
+
using System.Text.Json.Serialization;
|
|
115
|
+
|
|
116
|
+
[JsonPropertyName("prop1")]
|
|
117
|
+
[JsonConverter(typeof(FakeJsonConverter))]
|
|
118
|
+
public required string Prop1 { get; set; }
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
internal sealed class FakeJsonConverter : JsonConverter<string>
|
|
122
|
+
{
|
|
123
|
+
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|
124
|
+
{
|
|
125
|
+
return reader.GetString();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
|
|
129
|
+
{
|
|
130
|
+
writer.WriteStringValue(value);
|
|
131
|
+
}
|
|
132
|
+
}`);
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=json-converter-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Tester","code","For","List","namekey","createCSharpNamePolicy","SourceFile","t","$","beforeEach","expect","it","Output","Property","createJsonConverterResolver","JsonConverterResolver","useJsonConverterResolver","JsonConverter","tester","createInstance","Wrapper","props","policy","_$createComponent","program","namePolicy","children","path","fakeJsonConverterKey","FakeJsonConverter","name","type","builtin","string","decodeAndReturn","reader","encodeAndWrite","writer","value","createTestJsonConverterResolver","option","customConverters","encodeData","encoding","info","converter","compile","Provider","listResolvedJsonConverters","length","toRenderTo","r","modelProperty","prop1","jsonAttributes","_$createIntrinsic","each","x","_$memo"],"sources":["../../../../../src/csharp/components/json-converter/json-converter-resolver.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Namekey, type Refkey } from "@alloy-js/core";
|
|
2
|
+
import type { Children } from "@alloy-js/core/jsx-runtime";
|
|
3
|
+
import { type Type } from "@typespec/compiler";
|
|
4
|
+
interface JsonConverterProps {
|
|
5
|
+
name: string | Namekey;
|
|
6
|
+
type: Type;
|
|
7
|
+
refkey?: Refkey;
|
|
8
|
+
/** Decode and return value from reader*/
|
|
9
|
+
decodeAndReturn: (reader: Namekey, typeToConvert: Namekey, options: Namekey) => Children;
|
|
10
|
+
/** Encode the given value and send to writer*/
|
|
11
|
+
encodeAndWrite: (writer: Namekey, value: Namekey, options: Namekey) => Children;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a Json converter class inheriting System.Text.Json.Serialization.JsonConverter<T> which can be used by System.Text.Json.Serialization.JsonConverterAttribute to provide custom serialization.
|
|
15
|
+
* @see https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/converters-how-to#steps-to-follow-the-basic-pattern
|
|
16
|
+
*/
|
|
17
|
+
export declare function JsonConverter(props: JsonConverterProps): Children;
|
|
18
|
+
export declare function TimeSpanSecondsJsonConverter(props: {
|
|
19
|
+
name?: string | Namekey;
|
|
20
|
+
refkey?: Refkey;
|
|
21
|
+
encodeType: Type;
|
|
22
|
+
}): Children;
|
|
23
|
+
export declare function TimeSpanIso8601JsonConverter(props: {
|
|
24
|
+
name?: string | Namekey;
|
|
25
|
+
refkey?: Refkey;
|
|
26
|
+
}): Children;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=json-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-converter.d.ts","sourceRoot":"","sources":["../../../../../src/csharp/components/json-converter/json-converter.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAI3D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAI/C,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC;IACzF,+CAA+C;IAC/C,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC;CACjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,YA0DtD;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB,YAmCA;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,YAoB/F"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { useTsp } from "#core/index.js";
|
|
3
|
+
import { code, List, namekey } from "@alloy-js/core";
|
|
4
|
+
import { ClassDeclaration, Method } from "@alloy-js/csharp";
|
|
5
|
+
import System, { Xml } from "@alloy-js/csharp/global/System";
|
|
6
|
+
import Json, { Serialization } from "@alloy-js/csharp/global/System/Text/Json";
|
|
7
|
+
import { capitalize } from "@typespec/compiler/casing";
|
|
8
|
+
import { TypeExpression } from "../type-expression.js";
|
|
9
|
+
/**
|
|
10
|
+
* Generate a Json converter class inheriting System.Text.Json.Serialization.JsonConverter<T> which can be used by System.Text.Json.Serialization.JsonConverterAttribute to provide custom serialization.
|
|
11
|
+
* @see https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/converters-how-to#steps-to-follow-the-basic-pattern
|
|
12
|
+
*/
|
|
13
|
+
export function JsonConverter(props) {
|
|
14
|
+
const readParamReader = namekey("reader");
|
|
15
|
+
const readParamTypeToConvert = namekey("typeToConvert");
|
|
16
|
+
const readParamOptions = namekey("options");
|
|
17
|
+
const writeParamWriter = namekey("writer");
|
|
18
|
+
const writeParamValue = namekey("value");
|
|
19
|
+
const writeParamOptions = namekey("options");
|
|
20
|
+
const propTypeExpression = code`${_$createComponent(TypeExpression, {
|
|
21
|
+
get type() {
|
|
22
|
+
return props.type;
|
|
23
|
+
}
|
|
24
|
+
})}`;
|
|
25
|
+
return _$createComponent(ClassDeclaration, {
|
|
26
|
+
get refkey() {
|
|
27
|
+
return props.refkey;
|
|
28
|
+
},
|
|
29
|
+
sealed: true,
|
|
30
|
+
internal: true,
|
|
31
|
+
get name() {
|
|
32
|
+
return props.name;
|
|
33
|
+
},
|
|
34
|
+
get baseType() {
|
|
35
|
+
return code`${Serialization.JsonConverter}<${propTypeExpression}>`;
|
|
36
|
+
},
|
|
37
|
+
get children() {
|
|
38
|
+
return _$createComponent(List, {
|
|
39
|
+
doubleHardline: true,
|
|
40
|
+
get children() {
|
|
41
|
+
return [_$createComponent(Method, {
|
|
42
|
+
name: "Read",
|
|
43
|
+
"public": true,
|
|
44
|
+
override: true,
|
|
45
|
+
get parameters() {
|
|
46
|
+
return [{
|
|
47
|
+
name: readParamReader,
|
|
48
|
+
ref: true,
|
|
49
|
+
type: code`${Json.Utf8JsonReader}`
|
|
50
|
+
}, {
|
|
51
|
+
name: readParamTypeToConvert,
|
|
52
|
+
type: code`${System.Type}`
|
|
53
|
+
}, {
|
|
54
|
+
name: readParamOptions,
|
|
55
|
+
type: code`${Json.JsonSerializerOptions}`
|
|
56
|
+
}];
|
|
57
|
+
},
|
|
58
|
+
returns: propTypeExpression,
|
|
59
|
+
get children() {
|
|
60
|
+
return code`${props.decodeAndReturn(readParamReader, readParamTypeToConvert, readParamOptions)}`;
|
|
61
|
+
}
|
|
62
|
+
}), _$createComponent(Method, {
|
|
63
|
+
name: "Write",
|
|
64
|
+
"public": true,
|
|
65
|
+
override: true,
|
|
66
|
+
get parameters() {
|
|
67
|
+
return [{
|
|
68
|
+
name: writeParamWriter,
|
|
69
|
+
type: code`${Json.Utf8JsonWriter}`
|
|
70
|
+
}, {
|
|
71
|
+
name: writeParamValue,
|
|
72
|
+
type: propTypeExpression
|
|
73
|
+
}, {
|
|
74
|
+
name: writeParamOptions,
|
|
75
|
+
type: code`${Json.JsonSerializerOptions}`
|
|
76
|
+
}];
|
|
77
|
+
},
|
|
78
|
+
get children() {
|
|
79
|
+
return code`${props.encodeAndWrite(writeParamWriter, writeParamValue, writeParamOptions)}`;
|
|
80
|
+
}
|
|
81
|
+
})];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function TimeSpanSecondsJsonConverter(props) {
|
|
88
|
+
const {
|
|
89
|
+
$
|
|
90
|
+
} = useTsp();
|
|
91
|
+
const map = new Map([[$.builtin.int16, {
|
|
92
|
+
jsonWriteType: "short",
|
|
93
|
+
jsonReaderMethod: "GetInt16"
|
|
94
|
+
}], [$.builtin.uint16, {
|
|
95
|
+
jsonWriteType: "ushort",
|
|
96
|
+
jsonReaderMethod: "GetUInt16"
|
|
97
|
+
}], [$.builtin.int32, {
|
|
98
|
+
jsonWriteType: "int",
|
|
99
|
+
jsonReaderMethod: "GetInt32"
|
|
100
|
+
}], [$.builtin.uint32, {
|
|
101
|
+
jsonWriteType: "uint",
|
|
102
|
+
jsonReaderMethod: "GetUInt32"
|
|
103
|
+
}], [$.builtin.int64, {
|
|
104
|
+
jsonWriteType: "long",
|
|
105
|
+
jsonReaderMethod: "GetInt64"
|
|
106
|
+
}], [$.builtin.uint64, {
|
|
107
|
+
jsonWriteType: "ulong",
|
|
108
|
+
jsonReaderMethod: "GetUInt64"
|
|
109
|
+
}], [$.builtin.float32, {
|
|
110
|
+
jsonWriteType: "float",
|
|
111
|
+
jsonReaderMethod: "GetSingle"
|
|
112
|
+
}], [$.builtin.float64, {
|
|
113
|
+
jsonWriteType: "double",
|
|
114
|
+
jsonReaderMethod: "GetDouble"
|
|
115
|
+
}]]);
|
|
116
|
+
if (props.encodeType.kind !== "Scalar" || !map.has(props.encodeType)) {
|
|
117
|
+
throw new Error(`TimeSpanSecondsJsonConverter only supports encodeType of int16, uint16, int32, uint32, int64, uint64, float32, or float64. Received: kind = ${props.encodeType.kind} ${props.encodeType.kind === "Scalar" ? `name = ${props.encodeType.name}` : ""}`);
|
|
118
|
+
}
|
|
119
|
+
const found = map.get(props.encodeType);
|
|
120
|
+
const capitalizedTypeName = capitalize(props.encodeType.name);
|
|
121
|
+
const defaultName = `TimeSpanSeconds${capitalizedTypeName}JsonConverter`;
|
|
122
|
+
return _$createComponent(JsonConverter, {
|
|
123
|
+
get refkey() {
|
|
124
|
+
return props.refkey;
|
|
125
|
+
},
|
|
126
|
+
get name() {
|
|
127
|
+
return props.name ?? namekey(defaultName);
|
|
128
|
+
},
|
|
129
|
+
get type() {
|
|
130
|
+
return $.builtin.duration;
|
|
131
|
+
},
|
|
132
|
+
decodeAndReturn: reader => {
|
|
133
|
+
return code`var seconds = ${reader}.${found.jsonReaderMethod}();
|
|
134
|
+
return ${System.TimeSpan}.FromSeconds(seconds);`;
|
|
135
|
+
},
|
|
136
|
+
encodeAndWrite: (writer, value) => {
|
|
137
|
+
return code`${writer}.WriteNumberValue(${found.jsonWriteType === "double" || `(${found.jsonWriteType})`}${value}.TotalSeconds);`;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export function TimeSpanIso8601JsonConverter(props) {
|
|
142
|
+
const {
|
|
143
|
+
$
|
|
144
|
+
} = useTsp();
|
|
145
|
+
return _$createComponent(JsonConverter, {
|
|
146
|
+
get refkey() {
|
|
147
|
+
return props.refkey;
|
|
148
|
+
},
|
|
149
|
+
get name() {
|
|
150
|
+
return props.name ?? namekey("TimeSpanIso8601JsonConverter");
|
|
151
|
+
},
|
|
152
|
+
get type() {
|
|
153
|
+
return $.builtin.duration;
|
|
154
|
+
},
|
|
155
|
+
decodeAndReturn: reader => {
|
|
156
|
+
return code`var isoString = ${reader}.GetString();
|
|
157
|
+
if( isoString == null)
|
|
158
|
+
{
|
|
159
|
+
throw new ${System.FormatException}("Invalid ISO8601 duration string: null");
|
|
160
|
+
}
|
|
161
|
+
return ${Xml.XmlConvert}.ToTimeSpan(isoString);`;
|
|
162
|
+
},
|
|
163
|
+
encodeAndWrite: (writer, value) => {
|
|
164
|
+
return code`${writer}.WriteStringValue(${Xml.XmlConvert}.ToString(${value}));`;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=json-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useTsp","code","List","namekey","ClassDeclaration","Method","System","Xml","Json","Serialization","capitalize","TypeExpression","JsonConverter","props","readParamReader","readParamTypeToConvert","readParamOptions","writeParamWriter","writeParamValue","writeParamOptions","propTypeExpression","_$createComponent","type","refkey","sealed","internal","name","baseType","children","doubleHardline","override","parameters","ref","Utf8JsonReader","Type","JsonSerializerOptions","returns","decodeAndReturn","Utf8JsonWriter","encodeAndWrite","TimeSpanSecondsJsonConverter","$","map","Map","builtin","int16","jsonWriteType","jsonReaderMethod","uint16","int32","uint32","int64","uint64","float32","float64","encodeType","kind","has","Error","found","get","capitalizedTypeName","defaultName","duration","reader","TimeSpan","writer","value","TimeSpanIso8601JsonConverter","FormatException","XmlConvert"],"sources":["../../../../../src/csharp/components/json-converter/json-converter.tsx"],"sourcesContent":[null],"mappings":";AAAA,SAASA,MAAM,QAAQ,gBAAgB;AACvC,SAASC,IAAI,EAAEC,IAAI,EAAEC,OAAO,QAAmC,gBAAgB;AAE/E,SAASC,gBAAgB,EAAEC,MAAM,QAAQ,kBAAkB;AAC3D,OAAOC,MAAM,IAAIC,GAAG,QAAQ,gCAAgC;AAC5D,OAAOC,IAAI,IAAIC,aAAa,QAAQ,0CAA0C;AAE9E,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,cAAc;AAYvB;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,KAAyB,EAAE;EACvD,MAAMC,eAAwB,GAAGX,OAAO,CAAC,QAAQ,CAAC;EAClD,MAAMY,sBAA+B,GAAGZ,OAAO,CAAC,eAAe,CAAC;EAChE,MAAMa,gBAAyB,GAAGb,OAAO,CAAC,SAAS,CAAC;EACpD,MAAMc,gBAAyB,GAAGd,OAAO,CAAC,QAAQ,CAAC;EACnD,MAAMe,eAAwB,GAAGf,OAAO,CAAC,OAAO,CAAC;EACjD,MAAMgB,iBAA0B,GAAGhB,OAAO,CAAC,SAAS,CAAC;EACrD,MAAMiB,kBAAkB,GAAGnB,IAAI,GAAAoB,iBAAA,CAAKV,cAAc;IAAA,IAACW,IAAIA,CAAA;MAAA,OAAET,KAAK,CAACS,IAAI;IAAA;EAAA,IAAO;EAC1E,OAAAD,iBAAA,CACGjB,gBAAgB;IAAA,IACfmB,MAAMA,CAAA;MAAA,OAAEV,KAAK,CAACU,MAAM;IAAA;IACpBC,MAAM;IACNC,QAAQ;IAAA,IACRC,IAAIA,CAAA;MAAA,OAAEb,KAAK,CAACa,IAAI;IAAA;IAAA,IAChBC,QAAQA,CAAA;MAAA,OAAE1B,IAAI,GAAGQ,aAAa,CAACG,aAAa,IAAIQ,kBAAkB,GAAG;IAAA;IAAA,IAAAQ,SAAA;MAAA,OAAAP,iBAAA,CAEpEnB,IAAI;QAAC2B,cAAc;QAAA,IAAAD,SAAA;UAAA,QAAAP,iBAAA,CACjBhB,MAAM;YACLqB,IAAI,EAAE,MAAM;YAAA;YAEZI,QAAQ;YAAA,IACRC,UAAUA,CAAA;cAAA,OAAE,CACV;gBACEL,IAAI,EAAEZ,eAAe;gBACrBkB,GAAG,EAAE,IAAI;gBACTV,IAAI,EAAErB,IAAI,GAAGO,IAAI,CAACyB,cAAc;cAClC,CAAC,EACD;gBAAEP,IAAI,EAAEX,sBAAsB;gBAAEO,IAAI,EAAErB,IAAI,GAAGK,MAAM,CAAC4B,IAAI;cAAG,CAAC,EAC5D;gBACER,IAAI,EAAEV,gBAAgB;gBACtBM,IAAI,EAAErB,IAAI,GAAGO,IAAI,CAAC2B,qBAAqB;cACzC,CAAC,CACF;YAAA;YACDC,OAAO,EAAEhB,kBAAkB;YAAA,IAAAQ,SAAA;cAAA,OAE1B3B,IAAI,GAAGY,KAAK,CAACwB,eAAe,CAACvB,eAAe,EAAEC,sBAAsB,EAAEC,gBAAgB,CAAC,EAAE;YAAA;UAAA,IAAAK,iBAAA,CAE3FhB,MAAM;YACLqB,IAAI,EAAE,OAAO;YAAA;YAEbI,QAAQ;YAAA,IACRC,UAAUA,CAAA;cAAA,OAAE,CACV;gBAAEL,IAAI,EAAET,gBAAgB;gBAAEK,IAAI,EAAErB,IAAI,GAAGO,IAAI,CAAC8B,cAAc;cAAG,CAAC,EAC9D;gBACEZ,IAAI,EAAER,eAAe;gBACrBI,IAAI,EAAEF;cACR,CAAC,EACD;gBACEM,IAAI,EAAEP,iBAAiB;gBACvBG,IAAI,EAAErB,IAAI,GAAGO,IAAI,CAAC2B,qBAAqB;cACzC,CAAC,CACF;YAAA;YAAA,IAAAP,SAAA;cAAA,OAEA3B,IAAI,GAAGY,KAAK,CAAC0B,cAAc,CAACtB,gBAAgB,EAAEC,eAAe,EAAEC,iBAAiB,CAAC,EAAE;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA;AAK9F;AAEA,OAAO,SAASqB,4BAA4BA,CAAC3B,KAI5C,EAAE;EACD,MAAM;IAAE4B;EAAE,CAAC,GAAGzC,MAAM,CAAC,CAAC;EACtB,MAAM0C,GAAmE,GAAG,IAAIC,GAAG,CAAC,CAClF,CAACF,CAAC,CAACG,OAAO,CAACC,KAAK,EAAE;IAAEC,aAAa,EAAE,OAAO;IAAEC,gBAAgB,EAAE;EAAW,CAAC,CAAC,EAC3E,CAACN,CAAC,CAACG,OAAO,CAACI,MAAM,EAAE;IAAEF,aAAa,EAAE,QAAQ;IAAEC,gBAAgB,EAAE;EAAY,CAAC,CAAC,EAC9E,CAACN,CAAC,CAACG,OAAO,CAACK,KAAK,EAAE;IAAEH,aAAa,EAAE,KAAK;IAAEC,gBAAgB,EAAE;EAAW,CAAC,CAAC,EACzE,CAACN,CAAC,CAACG,OAAO,CAACM,MAAM,EAAE;IAAEJ,aAAa,EAAE,MAAM;IAAEC,gBAAgB,EAAE;EAAY,CAAC,CAAC,EAC5E,CAACN,CAAC,CAACG,OAAO,CAACO,KAAK,EAAE;IAAEL,aAAa,EAAE,MAAM;IAAEC,gBAAgB,EAAE;EAAW,CAAC,CAAC,EAC1E,CAACN,CAAC,CAACG,OAAO,CAACQ,MAAM,EAAE;IAAEN,aAAa,EAAE,OAAO;IAAEC,gBAAgB,EAAE;EAAY,CAAC,CAAC,EAC7E,CAACN,CAAC,CAACG,OAAO,CAACS,OAAO,EAAE;IAAEP,aAAa,EAAE,OAAO;IAAEC,gBAAgB,EAAE;EAAY,CAAC,CAAC,EAC9E,CAACN,CAAC,CAACG,OAAO,CAACU,OAAO,EAAE;IAAER,aAAa,EAAE,QAAQ;IAAEC,gBAAgB,EAAE;EAAY,CAAC,CAAC,CAChF,CAAC;EACF,IAAIlC,KAAK,CAAC0C,UAAU,CAACC,IAAI,KAAK,QAAQ,IAAI,CAACd,GAAG,CAACe,GAAG,CAAC5C,KAAK,CAAC0C,UAAU,CAAC,EAAE;IACpE,MAAM,IAAIG,KAAK,CACb,+IAA+I7C,KAAK,CAAC0C,UAAU,CAACC,IAAI,IAAI3C,KAAK,CAAC0C,UAAU,CAACC,IAAI,KAAK,QAAQ,GAAG,UAAU3C,KAAK,CAAC0C,UAAU,CAAC7B,IAAI,EAAE,GAAG,EAAE,EACrP,CAAC;EACH;EACA,MAAMiC,KAAK,GAAGjB,GAAG,CAACkB,GAAG,CAAC/C,KAAK,CAAC0C,UAAU,CAAE;EACxC,MAAMM,mBAAmB,GAAGnD,UAAU,CAACG,KAAK,CAAC0C,UAAU,CAAC7B,IAAI,CAAC;EAC7D,MAAMoC,WAAW,GAAG,kBAAkBD,mBAAmB,eAAe;EAExE,OAAAxC,iBAAA,CACGT,aAAa;IAAA,IACZW,MAAMA,CAAA;MAAA,OAAEV,KAAK,CAACU,MAAM;IAAA;IAAA,IACpBG,IAAIA,CAAA;MAAA,OAAEb,KAAK,CAACa,IAAI,IAAIvB,OAAO,CAAC2D,WAAW,CAAC;IAAA;IAAA,IACxCxC,IAAIA,CAAA;MAAA,OAAEmB,CAAC,CAACG,OAAO,CAACmB,QAAQ;IAAA;IACxB1B,eAAe,EAAG2B,MAAM,IAAK;MAC3B,OAAO/D,IAAI,iBAAiB+D,MAAM,IAAIL,KAAK,CAACZ,gBAAgB;AACpE,6BAA6BzC,MAAM,CAAC2D,QAAQ,wBAAwB;IAC9D,CAAC;IACD1B,cAAc,EAAEA,CAAC2B,MAAM,EAAEC,KAAK,KAAK;MACjC,OAAOlE,IAAI,GAAGiE,MAAM,qBAAqBP,KAAK,CAACb,aAAa,KAAK,QAAQ,IAAI,IAAIa,KAAK,CAACb,aAAa,GAAG,GAAGqB,KAAK,iBAAiB;IAClI;EAAC;AAGP;AAEA,OAAO,SAASC,4BAA4BA,CAACvD,KAAmD,EAAE;EAChG,MAAM;IAAE4B;EAAE,CAAC,GAAGzC,MAAM,CAAC,CAAC;EACtB,OAAAqB,iBAAA,CACGT,aAAa;IAAA,IACZW,MAAMA,CAAA;MAAA,OAAEV,KAAK,CAACU,MAAM;IAAA;IAAA,IACpBG,IAAIA,CAAA;MAAA,OAAEb,KAAK,CAACa,IAAI,IAAIvB,OAAO,CAAC,8BAA8B,CAAC;IAAA;IAAA,IAC3DmB,IAAIA,CAAA;MAAA,OAAEmB,CAAC,CAACG,OAAO,CAACmB,QAAQ;IAAA;IACxB1B,eAAe,EAAG2B,MAAM,IAAK;MAC3B,OAAO/D,IAAI,mBAAmB+D,MAAM;AAC5C;AACA;AACA,kCAAkC1D,MAAM,CAAC+D,eAAe;AACxD;AACA,6BAA6B9D,GAAG,CAAC+D,UAAU,yBAAyB;IAC9D,CAAC;IACD/B,cAAc,EAAEA,CAAC2B,MAAM,EAAEC,KAAK,KAAK;MACjC,OAAOlE,IAAI,GAAGiE,MAAM,qBAAqB3D,GAAG,CAAC+D,UAAU,aAAaH,KAAK,KAAK;IAChF;EAAC;AAGP","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-converter.test.d.ts","sourceRoot":"","sources":["../../../../../src/csharp/components/json-converter/json-converter.test.tsx"],"names":[],"mappings":""}
|