@alloy-js/csharp 0.18.0-dev.17 → 0.18.0-dev.18
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/dist/src/components/ClassDeclaration.d.ts +14 -1
- package/dist/src/components/ClassDeclaration.d.ts.map +1 -1
- package/dist/src/components/ClassDeclaration.js +12 -25
- package/dist/src/components/ClassMethod.d.ts +14 -0
- package/dist/src/components/ClassMethod.d.ts.map +1 -1
- package/dist/src/components/ClassMethod.js +11 -1
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +2 -1
- package/dist/src/components/interface/declaration.d.ts +14 -1
- package/dist/src/components/interface/declaration.d.ts.map +1 -1
- package/dist/src/components/interface/declaration.js +12 -25
- package/dist/src/components/interface/declaration.test.js +84 -0
- package/dist/src/components/interface/method.d.ts +14 -0
- package/dist/src/components/interface/method.d.ts.map +1 -1
- package/dist/src/components/interface/method.js +11 -1
- package/dist/src/components/interface/method.test.js +79 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.d.ts +8 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.d.ts.map +1 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.js +44 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts +2 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts.map +1 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.test.js +67 -0
- package/dist/src/components/type-parameters/type-parameter.d.ts +20 -0
- package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -0
- package/dist/src/components/type-parameters/type-parameter.js +22 -0
- package/dist/src/components/type-parameters/type-parameters.d.ts +17 -0
- package/dist/src/components/type-parameters/type-parameters.d.ts.map +1 -0
- package/dist/src/components/type-parameters/type-parameters.js +65 -0
- package/dist/src/components/type-parameters/type-parameters.test.d.ts +2 -0
- package/dist/src/components/type-parameters/type-parameters.test.d.ts.map +1 -0
- package/dist/src/components/type-parameters/type-parameters.test.js +26 -0
- package/dist/test/class-declaration.test.js +79 -33
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/ClassDeclaration.tsx +23 -27
- package/src/components/ClassMethod.tsx +25 -1
- package/src/components/index.ts +1 -0
- package/src/components/interface/declaration.test.tsx +87 -0
- package/src/components/interface/declaration.tsx +23 -27
- package/src/components/interface/method.test.tsx +78 -0
- package/src/components/interface/method.tsx +24 -1
- package/src/components/type-parameters/type-parameter-constraints.test.tsx +93 -0
- package/src/components/type-parameters/type-parameter-constraints.tsx +46 -0
- package/src/components/type-parameters/type-parameter.tsx +35 -0
- package/src/components/type-parameters/type-parameters.test.tsx +19 -0
- package/src/components/type-parameters/type-parameters.tsx +72 -0
- package/temp/api.json +211 -22
- package/test/class-declaration.test.tsx +75 -25
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { expect, it } from "vitest";
|
|
3
|
+
import { TypeParameterConstraints } from "./type-parameter-constraints.js";
|
|
4
|
+
it("renders nothing if there is no constraints", () => {
|
|
5
|
+
expect(_$createComponent(TypeParameterConstraints, {
|
|
6
|
+
parameters: ["A", "B"]
|
|
7
|
+
})).toRenderTo(``);
|
|
8
|
+
});
|
|
9
|
+
it("renders inline if there is only one", () => {
|
|
10
|
+
expect(["code()", _$createComponent(TypeParameterConstraints, {
|
|
11
|
+
parameters: [{
|
|
12
|
+
name: "A",
|
|
13
|
+
constraints: "string"
|
|
14
|
+
}]
|
|
15
|
+
})]).toRenderTo(`
|
|
16
|
+
code() where A : string
|
|
17
|
+
`);
|
|
18
|
+
});
|
|
19
|
+
it("renders multiple constraints", () => {
|
|
20
|
+
expect(["code()", _$createComponent(TypeParameterConstraints, {
|
|
21
|
+
parameters: [{
|
|
22
|
+
name: "A",
|
|
23
|
+
constraints: ["string", "int"]
|
|
24
|
+
}]
|
|
25
|
+
})]).toRenderTo(`
|
|
26
|
+
code() where A : string, int
|
|
27
|
+
`);
|
|
28
|
+
});
|
|
29
|
+
it("renders newline if constraint is very long", () => {
|
|
30
|
+
expect(["code()", _$createComponent(TypeParameterConstraints, {
|
|
31
|
+
parameters: [{
|
|
32
|
+
name: "ThisIsQuiteALongName",
|
|
33
|
+
constraints: "VeryLongBuilderFactorySingletonThatShouldBeSplit"
|
|
34
|
+
}]
|
|
35
|
+
})]).toRenderTo(`
|
|
36
|
+
code()
|
|
37
|
+
where ThisIsQuiteALongName : VeryLongBuilderFactorySingletonThatShouldBeSplit
|
|
38
|
+
`);
|
|
39
|
+
});
|
|
40
|
+
it("renders multiple constraints on new lines if they are very long", () => {
|
|
41
|
+
expect(["code()", _$createComponent(TypeParameterConstraints, {
|
|
42
|
+
parameters: [{
|
|
43
|
+
name: "A",
|
|
44
|
+
constraints: ["IVeryLongBuilderFactorySingletonThatShouldBeSplitA", "IVeryLongBuilderFactorySingletonThatShouldBeSplitB"]
|
|
45
|
+
}]
|
|
46
|
+
})]).toRenderTo(`
|
|
47
|
+
code()
|
|
48
|
+
where A :
|
|
49
|
+
IVeryLongBuilderFactorySingletonThatShouldBeSplitA,
|
|
50
|
+
IVeryLongBuilderFactorySingletonThatShouldBeSplitB
|
|
51
|
+
`);
|
|
52
|
+
});
|
|
53
|
+
it("declare type parameters using parameters", () => {
|
|
54
|
+
expect(["code()", _$createComponent(TypeParameterConstraints, {
|
|
55
|
+
parameters: [{
|
|
56
|
+
name: "A",
|
|
57
|
+
constraints: "string"
|
|
58
|
+
}, {
|
|
59
|
+
name: "B",
|
|
60
|
+
constraints: "string"
|
|
61
|
+
}]
|
|
62
|
+
})]).toRenderTo(`
|
|
63
|
+
code()
|
|
64
|
+
where A : string
|
|
65
|
+
where B : string
|
|
66
|
+
`);
|
|
67
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Children, Refkey } from "@alloy-js/core";
|
|
2
|
+
/**
|
|
3
|
+
* Information for a TypeScript generic type parameter.
|
|
4
|
+
*/
|
|
5
|
+
export interface TypeParameterProps {
|
|
6
|
+
/**
|
|
7
|
+
* The name of the type parameter.
|
|
8
|
+
*/
|
|
9
|
+
readonly name: string;
|
|
10
|
+
/**
|
|
11
|
+
* The parameter constraint
|
|
12
|
+
*/
|
|
13
|
+
readonly constraints?: Children | Children[];
|
|
14
|
+
/**
|
|
15
|
+
* A refkey or array of refkeys for this type parameter.
|
|
16
|
+
*/
|
|
17
|
+
readonly refkey?: Refkey | Refkey[];
|
|
18
|
+
}
|
|
19
|
+
export declare function TypeParameter(props: TypeParameterProps): Children;
|
|
20
|
+
//# sourceMappingURL=type-parameter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-parameter.d.ts","sourceRoot":"","sources":["../../../../src/components/type-parameters/type-parameter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA6B,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAK7E;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAE7C;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACrC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,YAStD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { MemberDeclaration, refkey } from "@alloy-js/core";
|
|
3
|
+
import { useCSharpNamePolicy } from "../../name-policy.js";
|
|
4
|
+
import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
|
|
5
|
+
import { useCSharpScope } from "../../symbols/scopes.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Information for a TypeScript generic type parameter.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export function TypeParameter(props) {
|
|
12
|
+
const name = useCSharpNamePolicy().getName(props.name, "type-parameter");
|
|
13
|
+
const scope = useCSharpScope();
|
|
14
|
+
const symbol = new CSharpOutputSymbol(name, {
|
|
15
|
+
scope,
|
|
16
|
+
refkeys: props.refkey ?? refkey(props.name)
|
|
17
|
+
});
|
|
18
|
+
return _$createComponent(MemberDeclaration, {
|
|
19
|
+
symbol: symbol,
|
|
20
|
+
children: name
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TypeParameterProps } from "./type-parameter.jsx";
|
|
2
|
+
export declare const typeParametersTag: unique symbol;
|
|
3
|
+
export interface TypeParametersProps {
|
|
4
|
+
/** Parameters */
|
|
5
|
+
parameters: (TypeParameterProps | string)[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Represent type parameters
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* <A, B extends string>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const TypeParameters: import("@alloy-js/core").Component<TypeParametersProps> & Required<Pick<import("@alloy-js/core").Component<TypeParametersProps>, "tag">>;
|
|
16
|
+
export declare function normalizeParameters(parameters: (TypeParameterProps | string)[]): TypeParameterProps[];
|
|
17
|
+
//# sourceMappingURL=type-parameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-parameters.d.ts","sourceRoot":"","sources":["../../../../src/components/type-parameters/type-parameters.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,eAAO,MAAM,iBAAiB,eAAuC,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,UAAU,EAAE,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,0IA4B1B,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,GAC1C,kBAAkB,EAAE,CAOtB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { For, Indent, taggedComponent } from "@alloy-js/core";
|
|
3
|
+
import { TypeParameter } from "./type-parameter.js";
|
|
4
|
+
export const typeParametersTag = Symbol.for("csharp.type-parameters");
|
|
5
|
+
/**
|
|
6
|
+
* Represent type parameters
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* <A, B extends string>
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export const TypeParameters = taggedComponent(typeParametersTag, function TypeParameters(props) {
|
|
14
|
+
const typeParameters = normalizeParameters(props.parameters);
|
|
15
|
+
|
|
16
|
+
// const typeParameters = normalizeAndDeclareParameters(props.parameters);
|
|
17
|
+
|
|
18
|
+
// onCleanup(() => {
|
|
19
|
+
// for (const param of typeParameters) {
|
|
20
|
+
// param.symbol.delete();
|
|
21
|
+
// }
|
|
22
|
+
// });
|
|
23
|
+
|
|
24
|
+
return ["<", _$createIntrinsic("group", {
|
|
25
|
+
get children() {
|
|
26
|
+
return _$createComponent(Indent, {
|
|
27
|
+
softline: true,
|
|
28
|
+
get children() {
|
|
29
|
+
return [_$createComponent(For, {
|
|
30
|
+
each: typeParameters,
|
|
31
|
+
comma: true,
|
|
32
|
+
line: true,
|
|
33
|
+
children: param => _$createComponent(TypeParameter, param)
|
|
34
|
+
}), _$createIntrinsic("ifBreak", {
|
|
35
|
+
children: ","
|
|
36
|
+
})];
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}), ">"];
|
|
41
|
+
});
|
|
42
|
+
export function normalizeParameters(parameters) {
|
|
43
|
+
return parameters.map(param => {
|
|
44
|
+
if (typeof param === "string") {
|
|
45
|
+
return {
|
|
46
|
+
name: param
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return param;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// export function declareParameter(
|
|
54
|
+
// parameters: TypeParameterProps[],
|
|
55
|
+
// ): TypeParameterProps[] {
|
|
56
|
+
// return parameters.map((param) => {
|
|
57
|
+
// return {
|
|
58
|
+
// ...param,
|
|
59
|
+
// symbol: new CSharpOutputSymbol(entry[0], {
|
|
60
|
+
// scope: thisClassScope,
|
|
61
|
+
// refkeys: entry[1],
|
|
62
|
+
// }),
|
|
63
|
+
// };
|
|
64
|
+
// });
|
|
65
|
+
// }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-parameters.test.d.ts","sourceRoot":"","sources":["../../../../src/components/type-parameters/type-parameters.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { expect, it } from "vitest";
|
|
3
|
+
import { TestNamespace } from "../../../test/utils.js";
|
|
4
|
+
import { TypeParameters } from "./type-parameters.js";
|
|
5
|
+
it("declare type parameters using parameters names", () => {
|
|
6
|
+
expect(_$createComponent(TestNamespace, {
|
|
7
|
+
get children() {
|
|
8
|
+
return _$createComponent(TypeParameters, {
|
|
9
|
+
parameters: ["A", "B"]
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
})).toRenderTo(`<A, B>`);
|
|
13
|
+
});
|
|
14
|
+
it("declare type parameters using parameters", () => {
|
|
15
|
+
expect(_$createComponent(TestNamespace, {
|
|
16
|
+
get children() {
|
|
17
|
+
return _$createComponent(TypeParameters, {
|
|
18
|
+
parameters: [{
|
|
19
|
+
name: "A"
|
|
20
|
+
}, {
|
|
21
|
+
name: "B"
|
|
22
|
+
}]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
})).toRenderTo(`<A, B>`);
|
|
26
|
+
});
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createComponent as _$createComponent, mergeProps as _$mergeProps, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
|
|
2
2
|
import * as core from "@alloy-js/core";
|
|
3
|
+
import { List, refkey } from "@alloy-js/core";
|
|
3
4
|
import * as coretest from "@alloy-js/core/testing";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import * as csharp from "../src/index.js";
|
|
6
|
-
import { ClassDeclaration, ClassMember } from "../src/index.js";
|
|
7
|
+
import { ClassDeclaration, ClassMember, Property, SourceFile } from "../src/index.js";
|
|
7
8
|
import * as utils from "./utils.js";
|
|
8
9
|
it("declares class with no members", () => {
|
|
9
10
|
expect(_$createComponent(utils.TestNamespace, {
|
|
@@ -251,41 +252,86 @@ it("uses refkeys for members, params, and return type", () => {
|
|
|
251
252
|
}
|
|
252
253
|
`);
|
|
253
254
|
});
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
255
|
+
describe("with type parameters", () => {
|
|
256
|
+
it("reference parameters", () => {
|
|
257
|
+
const typeParameters = [{
|
|
258
|
+
name: "T",
|
|
259
|
+
refkey: refkey()
|
|
260
|
+
}, {
|
|
261
|
+
name: "U",
|
|
262
|
+
refkey: refkey()
|
|
263
|
+
}];
|
|
264
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
265
|
+
get children() {
|
|
266
|
+
return _$createComponent(SourceFile, {
|
|
267
|
+
path: "Test.cs",
|
|
268
|
+
get children() {
|
|
269
|
+
return _$createComponent(ClassDeclaration, {
|
|
270
|
+
"public": true,
|
|
271
|
+
name: "TestClass",
|
|
272
|
+
typeParameters: typeParameters,
|
|
273
|
+
get children() {
|
|
274
|
+
return _$createComponent(List, {
|
|
275
|
+
get children() {
|
|
276
|
+
return [_$createComponent(Property, {
|
|
277
|
+
name: "PropA",
|
|
278
|
+
get type() {
|
|
279
|
+
return typeParameters[0].refkey;
|
|
280
|
+
},
|
|
281
|
+
get: true,
|
|
282
|
+
set: true
|
|
283
|
+
}), _$createComponent(Property, {
|
|
284
|
+
name: "PropB",
|
|
285
|
+
get type() {
|
|
286
|
+
return typeParameters[1].refkey;
|
|
287
|
+
},
|
|
288
|
+
get: true,
|
|
289
|
+
set: true
|
|
290
|
+
})];
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
})).toRenderTo(`
|
|
299
|
+
namespace TestCode
|
|
300
|
+
{
|
|
282
301
|
public class TestClass<T, U>
|
|
283
302
|
{
|
|
284
|
-
|
|
285
|
-
|
|
303
|
+
T PropA { get; set; }
|
|
304
|
+
U PropB { get; set; }
|
|
286
305
|
}
|
|
287
|
-
|
|
288
|
-
|
|
306
|
+
}
|
|
307
|
+
`);
|
|
308
|
+
});
|
|
309
|
+
it("defines with constraints", () => {
|
|
310
|
+
const typeParameters = [{
|
|
311
|
+
name: "T",
|
|
312
|
+
constraints: "IFoo"
|
|
313
|
+
}, {
|
|
314
|
+
name: "U",
|
|
315
|
+
constraints: "IBar"
|
|
316
|
+
}];
|
|
317
|
+
expect(_$createComponent(utils.TestNamespace, {
|
|
318
|
+
get children() {
|
|
319
|
+
return _$createComponent(ClassDeclaration, {
|
|
320
|
+
"public": true,
|
|
321
|
+
name: "TestClass",
|
|
322
|
+
typeParameters: typeParameters,
|
|
323
|
+
children: "// Body"
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
})).toRenderTo(`
|
|
327
|
+
public class TestClass<T, U>
|
|
328
|
+
where T : IFoo
|
|
329
|
+
where U : IBar
|
|
330
|
+
{
|
|
331
|
+
// Body
|
|
332
|
+
}
|
|
333
|
+
`);
|
|
334
|
+
});
|
|
289
335
|
});
|
|
290
336
|
it("declares class with invalid members", () => {
|
|
291
337
|
const decl = _$createComponent(csharp.ClassDeclaration, {
|