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

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.
@@ -1,25 +1,22 @@
1
1
  import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
2
+ import { AccessModifiers } from "../modifiers.js";
3
3
  import { ParameterProps } from "./Parameters.js";
4
- export interface ClassProps extends Omit<core.DeclarationProps, "nameKind"> {
4
+ export interface ClassProps extends Omit<core.DeclarationProps, "nameKind">, AccessModifiers {
5
5
  name: string;
6
6
  refkey?: core.Refkey;
7
- accessModifier?: AccessModifier;
8
7
  typeParameters?: Record<string, core.Refkey>;
9
8
  }
10
9
  export declare function Class(props: ClassProps): core.Children;
11
- export interface ClassConstructorProps {
12
- accessModifier?: AccessModifier;
10
+ export interface ClassConstructorProps extends AccessModifiers {
13
11
  parameters?: Array<ParameterProps>;
14
12
  refkey?: core.Refkey;
15
13
  symbol?: core.OutputSymbol;
16
14
  children?: core.Children;
17
15
  }
18
16
  export declare function ClassConstructor(props: ClassConstructorProps): core.Children;
19
- export interface ClassMemberProps {
17
+ export interface ClassMemberProps extends AccessModifiers {
20
18
  name: string;
21
19
  type: core.Children;
22
- accessModifier?: AccessModifier;
23
20
  refkey?: core.Refkey;
24
21
  }
25
22
  export declare function ClassMember(props: ClassMemberProps): core.Children;
@@ -1 +1 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/components/Class.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAKpE,OAAO,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9C;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,iBAoDtC;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,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,iBAiC5D;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,iBAwBlD"}
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,6 +1,6 @@
1
1
  import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
2
  import * as core from "@alloy-js/core";
3
- import { getAccessModifier } from "../modifiers.js";
3
+ import { computeModifiersPrefix, getAccessModifier } from "../modifiers.js";
4
4
  import { useCSharpNamePolicy } from "../name-policy.js";
5
5
  import { CSharpOutputSymbol } from "../symbols/csharp-output-symbol.js";
6
6
  import { CSharpMemberScope, useCSharpScope } from "../symbols/scopes.js";
@@ -46,10 +46,11 @@ export function Class(props) {
46
46
  }
47
47
  });
48
48
  }
49
+ const modifiers = computeModifiersPrefix([getAccessModifier(props)]);
49
50
  return _$createComponent(core.Declaration, {
50
51
  symbol: thisClassSymbol,
51
52
  get children() {
52
- return [_$memo(() => getAccessModifier(props.accessModifier)), "class ", _$createComponent(Name, {}), typeParams, _$memo(() => !props.children && ";"), _$memo(() => _$memo(() => !!props.children)() && _$createComponent(core.Block, {
53
+ return [modifiers, "class ", _$createComponent(Name, {}), typeParams, _$memo(() => !props.children && ";"), _$memo(() => _$memo(() => !!props.children)() && _$createComponent(core.Block, {
53
54
  newline: true,
54
55
  get children() {
55
56
  return _$createComponent(core.Scope, {
@@ -81,7 +82,7 @@ export function ClassConstructor(props) {
81
82
  const ctorDeclScope = new CSharpMemberScope("constructor-decl", {
82
83
  owner: ctorSymbol
83
84
  });
84
- const accessModifier = getAccessModifier(props.accessModifier);
85
+ const modifiers = computeModifiersPrefix([getAccessModifier(props)]);
85
86
  const params = props.parameters ? _$createComponent(Parameters, {
86
87
  get parameters() {
87
88
  return props.parameters;
@@ -95,7 +96,7 @@ export function ClassConstructor(props) {
95
96
  return _$createComponent(core.Scope, {
96
97
  value: ctorDeclScope,
97
98
  get children() {
98
- return [accessModifier, _$createComponent(Name, {}), "(", params, ")", _$createComponent(core.Block, {
99
+ return [modifiers, _$createComponent(Name, {}), "(", params, ")", _$createComponent(core.Block, {
99
100
  newline: true,
100
101
  get children() {
101
102
  return props.children;
@@ -112,7 +113,7 @@ export function ClassConstructor(props) {
112
113
  // a C# class member (i.e. a field within a class like "private int count")
113
114
  export function ClassMember(props) {
114
115
  let nameElement = "class-member-private";
115
- if (props.accessModifier === "public") {
116
+ if (props.public) {
116
117
  nameElement = "class-member-public";
117
118
  }
118
119
  const name = useCSharpNamePolicy().getName(props.name, nameElement);
@@ -124,10 +125,11 @@ export function ClassMember(props) {
124
125
  scope,
125
126
  refkeys: props.refkey ?? core.refkey(props.name)
126
127
  });
128
+ const modifiers = computeModifiersPrefix([getAccessModifier(props)]);
127
129
  return _$createComponent(core.Declaration, {
128
130
  symbol: memberSymbol,
129
131
  get children() {
130
- return [_$memo(() => getAccessModifier(props.accessModifier)), _$memo(() => props.type), " ", _$createComponent(Name, {})];
132
+ return [modifiers, _$memo(() => props.type), " ", _$createComponent(Name, {})];
131
133
  }
132
134
  });
133
135
  }
@@ -1,12 +1,10 @@
1
1
  import { Children, Refkey } from "@alloy-js/core";
2
- import { AccessModifier, MethodModifier } from "../modifiers.js";
2
+ import { AccessModifiers, MethodModifiers } from "../modifiers.js";
3
3
  import { ParameterProps } from "./Parameters.jsx";
4
- export interface ClassMethodProps {
4
+ export interface ClassMethodProps extends AccessModifiers, MethodModifiers {
5
5
  name: string;
6
6
  refkey?: Refkey;
7
7
  children?: Children;
8
- accessModifier?: AccessModifier;
9
- methodModifier?: MethodModifier;
10
8
  parameters?: Array<ParameterProps>;
11
9
  returns?: Children;
12
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ClassMethod.d.ts","sourceRoot":"","sources":["../../../src/components/ClassMethod.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,MAAM,EAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EAKd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,cAAc,EAAc,MAAM,kBAAkB,CAAC;AAG9D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,YAsClD"}
1
+ {"version":3,"file":"ClassMethod.d.ts","sourceRoot":"","sources":["../../../src/components/ClassMethod.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,MAAM,EAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EAKf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,cAAc,EAAc,MAAM,kBAAkB,CAAC;AAG9D,MAAM,WAAW,gBAAiB,SAAQ,eAAe,EAAE,eAAe;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,YAoClD"}
@@ -30,7 +30,7 @@ export function ClassMethod(props) {
30
30
  }
31
31
  }) : "";
32
32
  const returns = props.returns ?? (props.async ? "Task" : "void");
33
- const modifiers = computeModifiersPrefix([getAccessModifier(props.accessModifier), getMethodModifier(props.methodModifier), getAsyncModifier(props.async)]);
33
+ const modifiers = computeModifiersPrefix([getAccessModifier(props), getMethodModifier(props), getAsyncModifier(props.async)]);
34
34
  // note that scope wraps the method decl so that the params get the correct scope
35
35
  return _$createComponent(MemberDeclaration, {
36
36
  symbol: methodSymbol,
@@ -38,7 +38,7 @@ export function ClassMethod(props) {
38
38
  return _$createComponent(Scope, {
39
39
  value: methodScope,
40
40
  get children() {
41
- return [modifiers, returns, " ", name, "(", params, ")", _$memo(() => _$memo(() => props.methodModifier === "abstract")() ? ";" : _$createComponent(Block, {
41
+ return [modifiers, returns, " ", name, "(", params, ")", _$memo(() => _$memo(() => !!props.abstract)() ? ";" : _$createComponent(Block, {
42
42
  newline: true,
43
43
  get children() {
44
44
  return props.children;
@@ -1,10 +1,9 @@
1
1
  import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
3
- export interface EnumProps {
2
+ import { AccessModifiers } from "../modifiers.js";
3
+ export interface EnumProps extends AccessModifiers {
4
4
  name: string;
5
5
  refkey?: core.Refkey;
6
6
  children?: core.Children;
7
- accessModifier?: AccessModifier;
8
7
  }
9
8
  export declare function Enum(props: EnumProps): core.Children;
10
9
  export interface EnumMemberProps {
@@ -1 +1 @@
1
- {"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../../src/components/Enum.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAOpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAGD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,iBA8BpC;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"}
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"}
@@ -1,6 +1,6 @@
1
- import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
1
+ import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
2
  import * as core from "@alloy-js/core";
3
- import { getAccessModifier } from "../modifiers.js";
3
+ import { computeModifiersPrefix, getAccessModifier } from "../modifiers.js";
4
4
  import { useCSharpNamePolicy } from "../name-policy.js";
5
5
  import { CSharpOutputSymbol } from "../symbols/csharp-output-symbol.js";
6
6
  import { CSharpMemberScope, useCSharpScope } from "../symbols/scopes.js";
@@ -25,10 +25,11 @@ export function Enum(props) {
25
25
  parent: scope,
26
26
  owner: thisEnumSymbol
27
27
  });
28
+ const modifiers = computeModifiersPrefix([getAccessModifier(props)]);
28
29
  if (thisEnumScope.owner) return _$createComponent(core.Declaration, {
29
30
  symbol: thisEnumSymbol,
30
31
  get children() {
31
- return [_$memo(() => getAccessModifier(props.accessModifier)), "enum ", _$createComponent(Name, {}), _$memo(() => !props.children && ";"), _$memo(() => _$memo(() => !!props.children)() && _$createComponent(core.Scope, {
32
+ return [modifiers, "enum ", _$createComponent(Name, {}), _$memo(() => !props.children && ";"), _$memo(() => _$memo(() => !!props.children)() && _$createComponent(core.Scope, {
32
33
  value: thisEnumScope,
33
34
  get children() {
34
35
  return _$createComponent(core.Block, {
@@ -1,7 +1,20 @@
1
- export type AccessModifier = "public" | "protected" | "private" | "internal" | "protected-internal" | "private-protected" | "file";
2
- export declare function getAccessModifier(accessModifier?: AccessModifier): string;
3
- export type MethodModifier = "abstract" | "sealed" | "static" | "virtual";
4
- export declare function getMethodModifier(methodModifier?: MethodModifier): string;
1
+ /** Access modifiers. */
2
+ export interface AccessModifiers {
3
+ readonly public?: boolean;
4
+ readonly protected?: boolean;
5
+ readonly private?: boolean;
6
+ readonly internal?: boolean;
7
+ readonly file?: boolean;
8
+ }
9
+ export declare function getAccessModifier(data: AccessModifiers): string;
10
+ /** Method modifiers. Can only be one. */
11
+ export interface MethodModifiers {
12
+ readonly abstract?: boolean;
13
+ readonly sealed?: boolean;
14
+ readonly static?: boolean;
15
+ readonly virtual?: boolean;
16
+ }
17
+ export declare function getMethodModifier(data: MethodModifiers): string;
5
18
  export declare function getAsyncModifier(async?: boolean): string;
6
19
  /** Resolve the modifier prefix */
7
20
  export declare function computeModifiersPrefix(modifiers: Array<string | undefined>): string;
@@ -1 +1 @@
1
- {"version":3,"file":"modifiers.d.ts","sourceRoot":"","sources":["../../src/modifiers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,GACV,oBAAoB,GACpB,mBAAmB,GACnB,MAAM,CAAC;AAgBX,wBAAgB,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAEzE;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAa1E,wBAAgB,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,kCAAkC;AAClC,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GACnC,MAAM,CAGR"}
1
+ {"version":3,"file":"modifiers.d.ts","sourceRoot":"","sources":["../../src/modifiers.ts"],"names":[],"mappings":"AAGA,yBAAyB;AACzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAU/D;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAS/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,kCAAkC;AAClC,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GACnC,MAAM,CAGR"}
@@ -1,43 +1,23 @@
1
1
  // the possible C# access modifiers
2
2
  // https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers
3
3
 
4
- // maps the above access modifier value to its C# syntax.
5
- // note that the C# keyword includes a trailing space
6
- const accessModifierLookup = {
7
- public: "public ",
8
- protected: "protected ",
9
- private: "private ",
10
- internal: "internal ",
11
- "protected-internal": "protected internal ",
12
- "private-protected": "private protected ",
13
- file: "file "
14
- };
4
+ /** Access modifiers. */
15
5
 
16
- // returns the C# syntax for the specified access modifier.
17
- // if no access modifier is specified, the empty string is returned.
18
- export function getAccessModifier(accessModifier) {
19
- return accessModifier ? accessModifierLookup[accessModifier] : "";
6
+ export function getAccessModifier(data) {
7
+ return [data.public && "public", data.protected && "protected", data.private && "private", data.internal && "internal", data.file && "file"].filter(x => x).join(" ");
20
8
  }
21
- // maps the above method modifier value to its C# syntax.
22
- // note that the C# keyword includes a trailing space
23
- const methodModifierLookup = {
24
- abstract: "abstract ",
25
- sealed: "sealed ",
26
- static: "static ",
27
- virtual: "virtual "
28
- };
29
9
 
30
- // returns the C# syntax for the specified method modifier.
31
- // if no method modifier is specified, the empty string is returned.
32
- export function getMethodModifier(methodModifier) {
33
- return methodModifier ? methodModifierLookup[methodModifier] : "";
10
+ /** Method modifiers. Can only be one. */
11
+
12
+ export function getMethodModifier(data) {
13
+ return [data.abstract && "abstract", data.sealed && "sealed", data.static && "static", data.virtual && "virtual"].filter(x => x).join(" ");
34
14
  }
35
15
  export function getAsyncModifier(async) {
36
- return async ? "async " : "";
16
+ return async ? "async" : "";
37
17
  }
38
18
 
39
19
  /** Resolve the modifier prefix */
40
20
  export function computeModifiersPrefix(modifiers) {
41
21
  const resolved = modifiers.filter(x => x);
42
- return resolved.length > 0 ? resolved.join("") : "";
22
+ return resolved.length > 0 ? resolved.join(" ") + " " : "";
43
23
  }
@@ -1,11 +1,11 @@
1
- import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
1
+ import { memo as _$memo, createComponent as _$createComponent, mergeProps as _$mergeProps } from "@alloy-js/core/jsx-runtime";
2
2
  import { describe, expect, it } from "vitest";
3
3
  import { Class, ClassMethod } from "../src/index.js";
4
4
  import { TestNamespace } from "./utils.js";
5
5
  const Wrapper = props => _$createComponent(TestNamespace, {
6
6
  get children() {
7
7
  return _$createComponent(Class, {
8
- accessModifier: "public",
8
+ "public": true,
9
9
  name: "TestClass",
10
10
  get children() {
11
11
  return props.children;
@@ -18,10 +18,11 @@ describe("modifiers", () => {
18
18
  it.each(["public", "private", "protected", "internal"])("%s", accessModifier => {
19
19
  expect(_$createComponent(Wrapper, {
20
20
  get children() {
21
- return _$createComponent(ClassMethod, {
22
- accessModifier: accessModifier,
21
+ return _$createComponent(ClassMethod, _$mergeProps({
22
+ [accessModifier]: true
23
+ }, {
23
24
  name: "MethodOne"
24
- });
25
+ }));
25
26
  }
26
27
  })).toRenderTo(`
27
28
  public class TestClass
@@ -35,10 +36,11 @@ describe("modifiers", () => {
35
36
  it.each(["static", "virtual", "sealed"])("%s", methodModifier => {
36
37
  expect(_$createComponent(Wrapper, {
37
38
  get children() {
38
- return _$createComponent(ClassMethod, {
39
- methodModifier: methodModifier,
39
+ return _$createComponent(ClassMethod, _$mergeProps({
40
+ [methodModifier]: true
41
+ }, {
40
42
  name: "MethodOne"
41
- });
43
+ }));
42
44
  }
43
45
  })).toRenderTo(`
44
46
  public class TestClass
@@ -51,7 +53,7 @@ describe("modifiers", () => {
51
53
  expect(_$createComponent(Wrapper, {
52
54
  get children() {
53
55
  return _$createComponent(ClassMethod, {
54
- methodModifier: "abstract",
56
+ abstract: true,
55
57
  name: "MethodOne"
56
58
  });
57
59
  }
@@ -84,8 +86,8 @@ describe("modifiers", () => {
84
86
  return _$createComponent(ClassMethod, {
85
87
  async: true,
86
88
  returns: "Task",
87
- accessModifier: "public",
88
- methodModifier: "abstract",
89
+ "public": true,
90
+ abstract: true,
89
91
  name: "MethodOne"
90
92
  });
91
93
  }
@@ -122,7 +124,7 @@ it("defines params and return type", () => {
122
124
  const res = _$createComponent(Wrapper, {
123
125
  get children() {
124
126
  return _$createComponent(ClassMethod, {
125
- accessModifier: "public",
127
+ "public": true,
126
128
  name: "MethodOne",
127
129
  parameters: params,
128
130
  returns: "string"
@@ -6,7 +6,7 @@ import * as csharp from "../src/index.js";
6
6
  import * as utils from "./utils.js";
7
7
  it("declares class with no members", () => {
8
8
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
9
- accessModifier: "public",
9
+ "public": true,
10
10
  name: "TestClass"
11
11
  }));
12
12
  expect(res).toBe(coretest.d`
@@ -18,17 +18,17 @@ it("declares class with no members", () => {
18
18
  });
19
19
  it("declares class with some members", () => {
20
20
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
21
- accessModifier: "public",
21
+ "public": true,
22
22
  name: "TestClass",
23
23
  get children() {
24
24
  return _$createComponent(core.StatementList, {
25
25
  get children() {
26
26
  return [_$createComponent(csharp.ClassMember, {
27
- accessModifier: "public",
27
+ "public": true,
28
28
  name: "MemberOne",
29
29
  type: "string"
30
30
  }), _$createComponent(csharp.ClassMember, {
31
- accessModifier: "private",
31
+ "private": true,
32
32
  name: "MemberTwo",
33
33
  type: "int"
34
34
  })];
@@ -49,17 +49,17 @@ it("declares class with some members", () => {
49
49
  });
50
50
  it("declares class with some methods", () => {
51
51
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
52
- accessModifier: "public",
52
+ "public": true,
53
53
  name: "TestClass",
54
54
  get children() {
55
55
  return _$createComponent(core.List, {
56
56
  get children() {
57
57
  return [_$createComponent(csharp.ClassMethod, {
58
- accessModifier: "public",
58
+ "public": true,
59
59
  name: "MethodOne"
60
60
  }), _$createComponent(csharp.ClassMethod, {
61
- accessModifier: "private",
62
- methodModifier: "virtual",
61
+ "private": true,
62
+ virtual: true,
63
63
  name: "MethodTwo"
64
64
  })];
65
65
  }
@@ -100,7 +100,7 @@ it("uses refkeys for members, params, and return type", () => {
100
100
  path: "Test.cs",
101
101
  get children() {
102
102
  return [_$createComponent(csharp.Enum, {
103
- accessModifier: "public",
103
+ "public": true,
104
104
  name: "TestEnum",
105
105
  refkey: enumTypeRefkey,
106
106
  get children() {
@@ -117,23 +117,23 @@ it("uses refkeys for members, params, and return type", () => {
117
117
  });
118
118
  }
119
119
  }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
120
- accessModifier: "public",
120
+ "public": true,
121
121
  name: "TestInput",
122
122
  refkey: inputTypeRefkey
123
123
  }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
124
- accessModifier: "public",
124
+ "public": true,
125
125
  name: "TestResult",
126
126
  refkey: testResultTypeRefkey
127
127
  }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
128
- accessModifier: "public",
128
+ "public": true,
129
129
  name: "TestClass",
130
130
  get children() {
131
131
  return [_$createComponent(csharp.ClassMember, {
132
- accessModifier: "private",
132
+ "private": true,
133
133
  name: "MemberOne",
134
134
  type: enumTypeRefkey
135
135
  }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMethod, {
136
- accessModifier: "public",
136
+ "public": true,
137
137
  name: "MethodOne",
138
138
  parameters: params,
139
139
  returns: testResultTypeRefkey,
@@ -176,18 +176,18 @@ it("declares class with generic parameters", () => {
176
176
  U: core.refkey()
177
177
  };
178
178
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
179
- accessModifier: "public",
179
+ "public": true,
180
180
  name: "TestClass",
181
181
  typeParameters: typeParameters,
182
182
  get children() {
183
183
  return [_$createComponent(csharp.ClassMember, {
184
- accessModifier: "public",
184
+ "public": true,
185
185
  name: "memberOne",
186
186
  get type() {
187
187
  return typeParameters.T;
188
188
  }
189
189
  }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
190
- accessModifier: "private",
190
+ "private": true,
191
191
  name: "memberTwo",
192
192
  get type() {
193
193
  return typeParameters.U;
@@ -208,7 +208,7 @@ it("declares class with generic parameters", () => {
208
208
  });
209
209
  it("declares class with invalid members", () => {
210
210
  const decl = _$createComponent(csharp.Class, {
211
- accessModifier: "public",
211
+ "public": true,
212
212
  name: "TestClass",
213
213
  get children() {
214
214
  return [_$createComponent(csharp.EnumMember, {
@@ -222,11 +222,11 @@ it("declares class with invalid members", () => {
222
222
  });
223
223
  it("declares class with constructor", () => {
224
224
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
225
- accessModifier: "public",
225
+ "public": true,
226
226
  name: "TestClass",
227
227
  get children() {
228
228
  return _$createComponent(csharp.ClassConstructor, {
229
- accessModifier: "public"
229
+ "public": true
230
230
  });
231
231
  }
232
232
  }));
@@ -255,21 +255,21 @@ it("declares class with constructor params and assigns values to fields", () =>
255
255
  refkey: paramSizeRefkey
256
256
  }];
257
257
  const res = utils.toSourceText(_$createComponent(csharp.Class, {
258
- accessModifier: "public",
258
+ "public": true,
259
259
  name: "TestClass",
260
260
  get children() {
261
261
  return [_$createComponent(csharp.ClassMember, {
262
- accessModifier: "private",
262
+ "private": true,
263
263
  name: "name",
264
264
  type: "string",
265
265
  refkey: thisNameRefkey
266
266
  }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
267
- accessModifier: "private",
267
+ "private": true,
268
268
  name: "size",
269
269
  type: "int",
270
270
  refkey: thisSizeRefkey
271
271
  }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassConstructor, {
272
- accessModifier: "public",
272
+ "public": true,
273
273
  parameters: ctorParams,
274
274
  get children() {
275
275
  return [thisNameRefkey, " = ", paramNameRefkey, ";", _$createIntrinsic("hbr", {}), thisSizeRefkey, " = ", paramSizeRefkey, ";"];
@@ -6,7 +6,7 @@ import * as csharp from "../src/index.js";
6
6
  import * as utils from "./utils.js";
7
7
  it("declares enum with no members", () => {
8
8
  const res = utils.toSourceText(_$createComponent(csharp.Enum, {
9
- accessModifier: "public",
9
+ "public": true,
10
10
  name: "TestEnum"
11
11
  }));
12
12
  expect(res).toBe(coretest.d`
@@ -18,7 +18,7 @@ it("declares enum with no members", () => {
18
18
  });
19
19
  it("declares enum with members", () => {
20
20
  const res = utils.toSourceText(_$createComponent(csharp.Enum, {
21
- accessModifier: "public",
21
+ "public": true,
22
22
  name: "TestEnum",
23
23
  get children() {
24
24
  return [_$createComponent(csharp.EnumMember, {
@@ -41,7 +41,7 @@ it("declares enum with members", () => {
41
41
  });
42
42
  it("applies naming policy to enum and members", () => {
43
43
  const res = utils.toSourceText(_$createComponent(csharp.Enum, {
44
- accessModifier: "public",
44
+ "public": true,
45
45
  name: "testEnum",
46
46
  get children() {
47
47
  return [_$createComponent(csharp.EnumMember, {
@@ -74,7 +74,7 @@ it("can reference things by refkey", () => {
74
74
  path: "Test.cs",
75
75
  get children() {
76
76
  return [_$createComponent(csharp.Enum, {
77
- accessModifier: "public",
77
+ "public": true,
78
78
  name: "TestEnum",
79
79
  refkey: enumRK,
80
80
  get children() {
@@ -117,7 +117,7 @@ it("can reference things by refkey across files", () => {
117
117
  path: "Test.cs",
118
118
  get children() {
119
119
  return [_$createComponent(csharp.Enum, {
120
- accessModifier: "public",
120
+ "public": true,
121
121
  name: "TestEnum",
122
122
  get children() {
123
123
  return [_$createComponent(csharp.EnumMember, {
@@ -132,7 +132,7 @@ it("can reference things by refkey across files", () => {
132
132
  path: "Other.cs",
133
133
  get children() {
134
134
  return [_$createComponent(csharp.Enum, {
135
- accessModifier: "public",
135
+ "public": true,
136
136
  name: "OtherEnum",
137
137
  refkey: enumRK,
138
138
  get children() {
@@ -13,7 +13,7 @@ it("defines multiple namespaces and source files with unique content", () => {
13
13
  path: "Model1.cs",
14
14
  get children() {
15
15
  return _$createComponent(csharp.Class, {
16
- accessModifier: "public",
16
+ "public": true,
17
17
  name: "Model1"
18
18
  });
19
19
  }
@@ -21,7 +21,7 @@ it("defines multiple namespaces and source files with unique content", () => {
21
21
  path: "Model2.cs",
22
22
  get children() {
23
23
  return _$createComponent(csharp.Class, {
24
- accessModifier: "public",
24
+ "public": true,
25
25
  name: "Model2"
26
26
  });
27
27
  }
@@ -34,7 +34,7 @@ it("defines multiple namespaces and source files with unique content", () => {
34
34
  path: "Model3.cs",
35
35
  get children() {
36
36
  return _$createComponent(csharp.Class, {
37
- accessModifier: "public",
37
+ "public": true,
38
38
  name: "Model3"
39
39
  });
40
40
  }
@@ -42,7 +42,7 @@ it("defines multiple namespaces and source files with unique content", () => {
42
42
  path: "Model4.cs",
43
43
  get children() {
44
44
  return _$createComponent(csharp.Class, {
45
- accessModifier: "public",
45
+ "public": true,
46
46
  name: "Model4"
47
47
  });
48
48
  }
@@ -19,7 +19,7 @@ it("defines a project directory file with multiple source files", () => {
19
19
  path: "Test1.cs",
20
20
  get children() {
21
21
  return _$createComponent(csharp.Class, {
22
- accessModifier: "public",
22
+ "public": true,
23
23
  name: "TestClass1"
24
24
  });
25
25
  }
@@ -27,7 +27,7 @@ it("defines a project directory file with multiple source files", () => {
27
27
  path: "Test2.cs",
28
28
  get children() {
29
29
  return _$createComponent(csharp.Class, {
30
- accessModifier: "public",
30
+ "public": true,
31
31
  name: "TestClass2"
32
32
  });
33
33
  }
@@ -83,7 +83,7 @@ it("defines a project directory file with multiple source files and a custom TFM
83
83
  path: "Test1.cs",
84
84
  get children() {
85
85
  return _$createComponent(csharp.Class, {
86
- accessModifier: "public",
86
+ "public": true,
87
87
  name: "TestClass1"
88
88
  });
89
89
  }
@@ -91,7 +91,7 @@ it("defines a project directory file with multiple source files and a custom TFM
91
91
  path: "Test2.cs",
92
92
  get children() {
93
93
  return _$createComponent(csharp.Class, {
94
- accessModifier: "public",
94
+ "public": true,
95
95
  name: "TestClass2"
96
96
  });
97
97
  }
@@ -13,7 +13,7 @@ it("defines multiple source files with unique content", () => {
13
13
  path: "Test1.cs",
14
14
  get children() {
15
15
  return _$createComponent(csharp.Class, {
16
- accessModifier: "public",
16
+ "public": true,
17
17
  name: "TestClass1"
18
18
  });
19
19
  }
@@ -21,7 +21,7 @@ it("defines multiple source files with unique content", () => {
21
21
  path: "Test2.cs",
22
22
  get children() {
23
23
  return _$createComponent(csharp.Class, {
24
- accessModifier: "public",
24
+ "public": true,
25
25
  name: "TestClass2"
26
26
  });
27
27
  }