@powerlines/plugin-alloy 0.26.76 → 0.26.77

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 (164) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +29 -1
  2. package/dist/core/components/index.cjs +12 -1
  3. package/dist/core/components/index.mjs +7 -1
  4. package/dist/core/components/infrastructure-file.cjs +48 -1
  5. package/dist/core/components/infrastructure-file.mjs +45 -1
  6. package/dist/core/components/infrastructure-file.mjs.map +1 -1
  7. package/dist/core/components/output.cjs +41 -1
  8. package/dist/core/components/output.mjs +39 -1
  9. package/dist/core/components/output.mjs.map +1 -1
  10. package/dist/core/components/single-line-comment.cjs +23 -1
  11. package/dist/core/components/single-line-comment.mjs +21 -1
  12. package/dist/core/components/single-line-comment.mjs.map +1 -1
  13. package/dist/core/components/source-file.cjs +64 -1
  14. package/dist/core/components/source-file.mjs +61 -1
  15. package/dist/core/components/source-file.mjs.map +1 -1
  16. package/dist/core/components/spacing.cjs +20 -1
  17. package/dist/core/components/spacing.mjs +18 -1
  18. package/dist/core/components/spacing.mjs.map +1 -1
  19. package/dist/core/contexts/context.cjs +41 -1
  20. package/dist/core/contexts/context.mjs +36 -1
  21. package/dist/core/contexts/context.mjs.map +1 -1
  22. package/dist/core/contexts/index.cjs +22 -1
  23. package/dist/core/contexts/index.mjs +5 -1
  24. package/dist/core/contexts/meta.cjs +41 -1
  25. package/dist/core/contexts/meta.mjs +36 -1
  26. package/dist/core/contexts/meta.mjs.map +1 -1
  27. package/dist/core/contexts/reflection.cjs +80 -1
  28. package/dist/core/contexts/reflection.mjs +70 -1
  29. package/dist/core/contexts/reflection.mjs.map +1 -1
  30. package/dist/core/helpers/code.cjs +34 -1
  31. package/dist/core/helpers/code.mjs +32 -1
  32. package/dist/core/helpers/code.mjs.map +1 -1
  33. package/dist/core/helpers/index.cjs +4 -1
  34. package/dist/core/helpers/index.mjs +3 -1
  35. package/dist/core/index.cjs +37 -1
  36. package/dist/core/index.mjs +14 -1
  37. package/dist/hcl/components/block-declaration.cjs +34 -1
  38. package/dist/hcl/components/block-declaration.mjs +32 -1
  39. package/dist/hcl/components/block-declaration.mjs.map +1 -1
  40. package/dist/hcl/components/hcl-file.cjs +83 -1
  41. package/dist/hcl/components/hcl-file.mjs +80 -1
  42. package/dist/hcl/components/hcl-file.mjs.map +1 -1
  43. package/dist/hcl/components/index.cjs +11 -1
  44. package/dist/hcl/components/index.mjs +6 -1
  45. package/dist/hcl/components/packer-file.cjs +29 -1
  46. package/dist/hcl/components/packer-file.mjs +27 -1
  47. package/dist/hcl/components/packer-file.mjs.map +1 -1
  48. package/dist/hcl/components/terraform-file.cjs +30 -1
  49. package/dist/hcl/components/terraform-file.mjs +28 -1
  50. package/dist/hcl/components/terraform-file.mjs.map +1 -1
  51. package/dist/hcl/index.cjs +12 -1
  52. package/dist/hcl/index.mjs +7 -1
  53. package/dist/helpers/capnp.cjs +245 -37
  54. package/dist/helpers/capnp.mjs +227 -37
  55. package/dist/helpers/capnp.mjs.map +1 -1
  56. package/dist/helpers/create-builtin.cjs +20 -1
  57. package/dist/helpers/create-builtin.mjs +18 -1
  58. package/dist/helpers/create-builtin.mjs.map +1 -1
  59. package/dist/helpers/index.cjs +25 -1
  60. package/dist/helpers/index.mjs +6 -1
  61. package/dist/helpers/refkey.cjs +17 -1
  62. package/dist/helpers/refkey.mjs +15 -1
  63. package/dist/helpers/refkey.mjs.map +1 -1
  64. package/dist/helpers/typescript.cjs +43 -19
  65. package/dist/helpers/typescript.mjs +41 -19
  66. package/dist/helpers/typescript.mjs.map +1 -1
  67. package/dist/index.cjs +55 -1
  68. package/dist/index.mjs +51 -1
  69. package/dist/index.mjs.map +1 -1
  70. package/dist/markdown/components/front-matter.cjs +29 -1
  71. package/dist/markdown/components/front-matter.mjs +27 -1
  72. package/dist/markdown/components/front-matter.mjs.map +1 -1
  73. package/dist/markdown/components/heading.cjs +24 -1
  74. package/dist/markdown/components/heading.mjs +22 -1
  75. package/dist/markdown/components/heading.mjs.map +1 -1
  76. package/dist/markdown/components/index.cjs +13 -1
  77. package/dist/markdown/components/index.mjs +6 -1
  78. package/dist/markdown/components/markdown-file.cjs +135 -1
  79. package/dist/markdown/components/markdown-file.mjs +132 -1
  80. package/dist/markdown/components/markdown-file.mjs.map +1 -1
  81. package/dist/markdown/components/markdown-table.cjs +102 -1
  82. package/dist/markdown/components/markdown-table.mjs +98 -1
  83. package/dist/markdown/components/markdown-table.mjs.map +1 -1
  84. package/dist/markdown/contexts/index.cjs +7 -1
  85. package/dist/markdown/contexts/index.mjs +3 -1
  86. package/dist/markdown/contexts/markdown-table.cjs +38 -1
  87. package/dist/markdown/contexts/markdown-table.mjs +33 -1
  88. package/dist/markdown/contexts/markdown-table.mjs.map +1 -1
  89. package/dist/markdown/index.cjs +20 -1
  90. package/dist/markdown/index.mjs +9 -1
  91. package/dist/render.cjs +91 -1
  92. package/dist/render.mjs +88 -1
  93. package/dist/render.mjs.map +1 -1
  94. package/dist/types/components.cjs +9 -0
  95. package/dist/types/components.mjs +9 -1
  96. package/dist/types/index.mjs +1 -1
  97. package/dist/types/plugin.mjs +1 -1
  98. package/dist/typescript/components/builtin-file.cjs +63 -1
  99. package/dist/typescript/components/builtin-file.mjs +61 -1
  100. package/dist/typescript/components/builtin-file.mjs.map +1 -1
  101. package/dist/typescript/components/class-declaration.cjs +306 -1
  102. package/dist/typescript/components/class-declaration.mjs +299 -1
  103. package/dist/typescript/components/class-declaration.mjs.map +1 -1
  104. package/dist/typescript/components/dynamic-import-statement.cjs +26 -1
  105. package/dist/typescript/components/dynamic-import-statement.mjs +24 -1
  106. package/dist/typescript/components/dynamic-import-statement.mjs.map +1 -1
  107. package/dist/typescript/components/entry-file.cjs +43 -1
  108. package/dist/typescript/components/entry-file.mjs +40 -1
  109. package/dist/typescript/components/entry-file.mjs.map +1 -1
  110. package/dist/typescript/components/index.cjs +64 -1
  111. package/dist/typescript/components/index.mjs +15 -1
  112. package/dist/typescript/components/interface-declaration.cjs +239 -1
  113. package/dist/typescript/components/interface-declaration.mjs +234 -1
  114. package/dist/typescript/components/interface-declaration.mjs.map +1 -1
  115. package/dist/typescript/components/object-declaration.cjs +139 -1
  116. package/dist/typescript/components/object-declaration.mjs +136 -1
  117. package/dist/typescript/components/object-declaration.mjs.map +1 -1
  118. package/dist/typescript/components/property-name.cjs +32 -1
  119. package/dist/typescript/components/property-name.mjs +30 -1
  120. package/dist/typescript/components/property-name.mjs.map +1 -1
  121. package/dist/typescript/components/record-expression.cjs +13 -3
  122. package/dist/typescript/components/record-expression.mjs +11 -3
  123. package/dist/typescript/components/record-expression.mjs.map +1 -1
  124. package/dist/typescript/components/tsdoc-reflection.cjs +331 -1
  125. package/dist/typescript/components/tsdoc-reflection.mjs +324 -1
  126. package/dist/typescript/components/tsdoc-reflection.mjs.map +1 -1
  127. package/dist/typescript/components/tsdoc.cjs +497 -1
  128. package/dist/typescript/components/tsdoc.mjs +475 -1
  129. package/dist/typescript/components/tsdoc.mjs.map +1 -1
  130. package/dist/typescript/components/type-declaration.cjs +39 -1
  131. package/dist/typescript/components/type-declaration.mjs +37 -1
  132. package/dist/typescript/components/type-declaration.mjs.map +1 -1
  133. package/dist/typescript/components/type-parameters.cjs +83 -1
  134. package/dist/typescript/components/type-parameters.mjs +81 -1
  135. package/dist/typescript/components/type-parameters.mjs.map +1 -1
  136. package/dist/typescript/components/typescript-file.cjs +221 -1
  137. package/dist/typescript/components/typescript-file.mjs +217 -1
  138. package/dist/typescript/components/typescript-file.mjs.map +1 -1
  139. package/dist/typescript/contexts/index.cjs +4 -1
  140. package/dist/typescript/contexts/index.mjs +3 -1
  141. package/dist/typescript/contexts/lexical-scope.cjs +26 -1
  142. package/dist/typescript/contexts/lexical-scope.mjs +24 -1
  143. package/dist/typescript/contexts/lexical-scope.mjs.map +1 -1
  144. package/dist/typescript/contexts/member-scope.cjs +24 -1
  145. package/dist/typescript/contexts/member-scope.mjs +22 -1
  146. package/dist/typescript/contexts/member-scope.mjs.map +1 -1
  147. package/dist/typescript/helpers/get-call-signature-props.cjs +26 -1
  148. package/dist/typescript/helpers/get-call-signature-props.mjs +24 -1
  149. package/dist/typescript/helpers/get-call-signature-props.mjs.map +1 -1
  150. package/dist/typescript/helpers/index.cjs +6 -1
  151. package/dist/typescript/helpers/index.mjs +4 -1
  152. package/dist/typescript/helpers/utilities.cjs +15 -1
  153. package/dist/typescript/helpers/utilities.mjs +13 -1
  154. package/dist/typescript/helpers/utilities.mjs.map +1 -1
  155. package/dist/typescript/index.cjs +73 -1
  156. package/dist/typescript/index.mjs +21 -1
  157. package/dist/yaml/components/index.cjs +5 -1
  158. package/dist/yaml/components/index.mjs +3 -1
  159. package/dist/yaml/components/yaml-file.cjs +149 -1
  160. package/dist/yaml/components/yaml-file.mjs +146 -1
  161. package/dist/yaml/components/yaml-file.mjs.map +1 -1
  162. package/dist/yaml/index.cjs +6 -1
  163. package/dist/yaml/index.mjs +4 -1
  164. package/package.json +6 -6
@@ -1,2 +1,235 @@
1
- import{ReflectionClassContext as e,ReflectionPropertyContext as t}from"../../core/contexts/reflection.mjs";import{TSDoc as n}from"./tsdoc.mjs";import{MemberScope as r}from"../contexts/member-scope.mjs";import{PropertyName as i}from"./property-name.mjs";import{TypeParameters as a}from"./type-parameters.mjs";import{TSDocContextProperty as o,TSDocReflectionClass as s}from"./tsdoc-reflection.mjs";import{createComponent as c,createIntrinsic as l,memo as u,mergeProps as d}from"@alloy-js/core/jsx-runtime";import{Block as f,For as p,MemberDeclaration as m,Name as h,Show as g,childrenArray as _,computed as v,createSymbol as y,createSymbolSlot as b,effect as x,emitSymbol as S,findUnkeyedChildren as C,splitProps as w,takeSymbols as T}from"@alloy-js/core";import{stringifyType as E}from"@powerlines/deepkit/vendor/type";import{pascalCase as D}from"@stryke/string-format/pascal-case";import{isString as O}from"@stryke/type-checks/is-string";import{Declaration as k,TSOutputSymbol as A,TSSymbolFlags as j,ensureTypeRefContext as M,useTSLexicalScope as N,useTSMemberScope as P,useTSNamePolicy as F}from"@alloy-js/typescript";const I=M(function(e){let t=y(A,``,void 0,{transient:!0,binder:N()?.binder});return S(t),l(`group`,{get children(){return c(r,{ownerSymbol:t,get children(){return c(f,{get children(){return e.children}})}})}})});function L(e){let t=e.type??e.children,r=e.readonly?`readonly `:``;if(`indexer`in e)return[c(g,{get when(){return!!e.doc},get children(){return c(n,{get heading(){return e.doc}})}}),r,`[`,u(()=>e.indexer),`]: `,t];let a=e.optional?`?`:``,o=P(),s=y(A,e.name,o.ownerSymbol.staticMembers,{refkeys:e.refkey,tsFlags:j.TypeSymbol|(e.nullish??e.optional?j.Nullish:j.None),namePolicy:F().for(`interface-member`),binder:o.binder}),l=T();return x(()=>{if(l.size>1)return;let e=Array.from(l)[0];e?.isTransient&&e.moveMembersTo(s)}),c(m,{symbol:s,get children(){return[c(g,{get when(){return!!e.doc},get children(){return c(n,{get heading(){return e.doc}})}}),r,c(i,{}),a,`: `,t]}})}const R=M(function(e){let t=b(),r=_(()=>e.children),i=e.extends?[` extends `,u(()=>e.extends)]:``,o=C(r),s=N(),l=s?.binder,f=y(A,e.name,s.types,{refkeys:e.refkey,default:e.default,export:e.export,metadata:e.metadata,tsFlags:j.TypeSymbol,namePolicy:F().for(`interface`),binder:l});return x(()=>{if(t.ref.value){let e=t.ref.value;for(let t of e)t.isTransient&&t.moveMembersTo(f)}}),[c(g,{get when(){return!!e.doc},get children(){return c(n,{get heading(){return e.doc}})}}),c(k,d(e,{nameKind:`interface`,kind:`type`,symbol:f,get children(){return[`interface `,c(h,{}),u(()=>u(()=>!!e.typeParameters)()&&c(a,{get parameters(){return e.typeParameters}})),i,` `,c(t,{get children(){return c(I,{children:o})}})]}}))]});function z(t){let[{name:n,reflection:r,doc:i,defaultValue:a},o]=w(t,[`name`,`reflection`,`doc`,`defaultValue`]),l=v(()=>D((O(n)?n:n.toString())||r?.getName())),u=v(()=>r?r.getProperties().filter(e=>!e.isIgnored()).sort((e,t)=>e.isReadonly()&&t.isReadonly()||!e.isReadonly()&&!t.isReadonly()?e.getNameAsString().localeCompare(t.getNameAsString()):e.isReadonly()?1:-1):[]);return c(g,{get when(){return r&&u.value.length>0},get fallback(){return c(R,d(t,{get name(){return l.value}}))},get children(){return c(e.Provider,{value:{reflection:r},get children(){return[c(s,{heading:i,reflection:r}),c(R,d({export:!0,get name(){return l.value},defaultValue:a},o,{get children(){return c(p,{each:u,doubleHardline:!0,semicolon:!0,children:e=>c(B,{property:e,get defaultValue(){return a?.value?.[e.getNameAsString()]}})})}}))]}})}})}function B(e){let[{property:n,defaultValue:r},i]=w(e,[`property`,`defaultValue`]);return c(t.Provider,{value:{property:n,defaultValue:r},get children(){return[c(o,{}),c(L,d({get name(){return n.getNameAsString()},get readonly(){return n.isReadonly()},get optional(){return n.isOptional()},get nullish(){return n.isNullable()},get type(){return E(n.getType())}},i))]}})}export{z as InterfaceDeclaration,B as InterfaceDeclarationProperty,I as InterfaceExpression,L as InterfaceMember};
1
+ import { ReflectionClassContext, ReflectionPropertyContext } from "../../core/contexts/reflection.mjs";
2
+ import { TSDoc } from "./tsdoc.mjs";
3
+ import { MemberScope as MemberScope$1 } from "../contexts/member-scope.mjs";
4
+ import { PropertyName } from "./property-name.mjs";
5
+ import { TypeParameters } from "./type-parameters.mjs";
6
+ import { TSDocContextProperty, TSDocReflectionClass } from "./tsdoc-reflection.mjs";
7
+ import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
8
+ import { Block, For, MemberDeclaration, Name, Show, childrenArray, computed, createSymbol, createSymbolSlot, effect, emitSymbol, findUnkeyedChildren, splitProps, takeSymbols } from "@alloy-js/core";
9
+ import { stringifyType } from "@powerlines/deepkit/vendor/type";
10
+ import { pascalCase } from "@stryke/string-format/pascal-case";
11
+ import { isString } from "@stryke/type-checks/is-string";
12
+ import { Declaration as Declaration$1, TSOutputSymbol, TSSymbolFlags, ensureTypeRefContext, useTSLexicalScope, useTSMemberScope, useTSNamePolicy } from "@alloy-js/typescript";
13
+
14
+ //#region src/typescript/components/interface-declaration.tsx
15
+ const InterfaceExpression = ensureTypeRefContext(function InterfaceExpression(props) {
16
+ const symbol = createSymbol(TSOutputSymbol, "", void 0, {
17
+ transient: true,
18
+ binder: useTSLexicalScope()?.binder
19
+ });
20
+ emitSymbol(symbol);
21
+ return createIntrinsic("group", { get children() {
22
+ return createComponent(MemberScope$1, {
23
+ ownerSymbol: symbol,
24
+ get children() {
25
+ return createComponent(Block, { get children() {
26
+ return props.children;
27
+ } });
28
+ }
29
+ });
30
+ } });
31
+ });
32
+ /**
33
+ * Create a TypeScript interface member.
34
+ *
35
+ * An interface member can either provide a `name` prop to create a named
36
+ * property, or an `indexer` prop to define an indexer for the interface.
37
+ *
38
+ * The type of the member can be provided either as the `type` prop or as the
39
+ * children of the component.
40
+ */
41
+ function InterfaceMember(props) {
42
+ const type = props.type ?? props.children;
43
+ const readonly = props.readonly ? "readonly " : "";
44
+ if ("indexer" in props) return [
45
+ createComponent(Show, {
46
+ get when() {
47
+ return Boolean(props.doc);
48
+ },
49
+ get children() {
50
+ return createComponent(TSDoc, { get heading() {
51
+ return props.doc;
52
+ } });
53
+ }
54
+ }),
55
+ readonly,
56
+ "[",
57
+ memo(() => props.indexer),
58
+ "]: ",
59
+ type
60
+ ];
61
+ const optionality = props.optional ? "?" : "";
62
+ const scope = useTSMemberScope();
63
+ const sym = createSymbol(TSOutputSymbol, props.name, scope.ownerSymbol.staticMembers, {
64
+ refkeys: props.refkey,
65
+ tsFlags: TSSymbolFlags.TypeSymbol | (props.nullish ?? props.optional ? TSSymbolFlags.Nullish : TSSymbolFlags.None),
66
+ namePolicy: useTSNamePolicy().for("interface-member"),
67
+ binder: scope.binder
68
+ });
69
+ const taken = takeSymbols();
70
+ effect(() => {
71
+ if (taken.size > 1) return;
72
+ const symbol = Array.from(taken)[0];
73
+ if (symbol?.isTransient) symbol.moveMembersTo(sym);
74
+ });
75
+ return createComponent(MemberDeclaration, {
76
+ symbol: sym,
77
+ get children() {
78
+ return [
79
+ createComponent(Show, {
80
+ get when() {
81
+ return Boolean(props.doc);
82
+ },
83
+ get children() {
84
+ return createComponent(TSDoc, { get heading() {
85
+ return props.doc;
86
+ } });
87
+ }
88
+ }),
89
+ readonly,
90
+ createComponent(PropertyName, {}),
91
+ optionality,
92
+ ": ",
93
+ type
94
+ ];
95
+ }
96
+ });
97
+ }
98
+ const BaseInterfaceDeclaration = ensureTypeRefContext(function InterfaceDeclaration(props) {
99
+ const ExprSlot = createSymbolSlot();
100
+ const children = childrenArray(() => props.children);
101
+ const extendsPart = props.extends ? [" extends ", memo(() => props.extends)] : "";
102
+ const filteredChildren = findUnkeyedChildren(children);
103
+ const currentScope = useTSLexicalScope();
104
+ const binder = currentScope?.binder;
105
+ const sym = createSymbol(TSOutputSymbol, props.name, currentScope.types, {
106
+ refkeys: props.refkey,
107
+ default: props.default,
108
+ export: props.export,
109
+ metadata: props.metadata,
110
+ tsFlags: TSSymbolFlags.TypeSymbol,
111
+ namePolicy: useTSNamePolicy().for("interface"),
112
+ binder
113
+ });
114
+ effect(() => {
115
+ if (ExprSlot.ref.value) {
116
+ const takenSymbols = ExprSlot.ref.value;
117
+ for (const symbol of takenSymbols) if (symbol.isTransient) symbol.moveMembersTo(sym);
118
+ }
119
+ });
120
+ return [createComponent(Show, {
121
+ get when() {
122
+ return Boolean(props.doc);
123
+ },
124
+ get children() {
125
+ return createComponent(TSDoc, { get heading() {
126
+ return props.doc;
127
+ } });
128
+ }
129
+ }), createComponent(Declaration$1, mergeProps(props, {
130
+ nameKind: "interface",
131
+ kind: "type",
132
+ symbol: sym,
133
+ get children() {
134
+ return [
135
+ "interface ",
136
+ createComponent(Name, {}),
137
+ memo(() => memo(() => !!props.typeParameters)() && createComponent(TypeParameters, { get parameters() {
138
+ return props.typeParameters;
139
+ } })),
140
+ extendsPart,
141
+ " ",
142
+ createComponent(ExprSlot, { get children() {
143
+ return createComponent(InterfaceExpression, { children: filteredChildren });
144
+ } })
145
+ ];
146
+ }
147
+ }))];
148
+ });
149
+ /**
150
+ * Generates a TypeScript interface for the given reflection class.
151
+ */
152
+ function InterfaceDeclaration(props) {
153
+ const [{ name, reflection, doc, defaultValue }, rest] = splitProps(props, [
154
+ "name",
155
+ "reflection",
156
+ "doc",
157
+ "defaultValue"
158
+ ]);
159
+ const interfaceName = computed(() => pascalCase((isString(name) ? name : name.toString()) || reflection?.getName()));
160
+ const properties = computed(() => reflection ? reflection.getProperties().filter((item) => !item.isIgnored()).sort((a, b) => a.isReadonly() && b.isReadonly() || !a.isReadonly() && !b.isReadonly() ? a.getNameAsString().localeCompare(b.getNameAsString()) : a.isReadonly() ? 1 : -1) : []);
161
+ return createComponent(Show, {
162
+ get when() {
163
+ return reflection && properties.value.length > 0;
164
+ },
165
+ get fallback() {
166
+ return createComponent(BaseInterfaceDeclaration, mergeProps(props, { get name() {
167
+ return interfaceName.value;
168
+ } }));
169
+ },
170
+ get children() {
171
+ return createComponent(ReflectionClassContext.Provider, {
172
+ value: { reflection },
173
+ get children() {
174
+ return [createComponent(TSDocReflectionClass, {
175
+ heading: doc,
176
+ reflection
177
+ }), createComponent(BaseInterfaceDeclaration, mergeProps({
178
+ "export": true,
179
+ get name() {
180
+ return interfaceName.value;
181
+ },
182
+ defaultValue
183
+ }, rest, { get children() {
184
+ return createComponent(For, {
185
+ each: properties,
186
+ doubleHardline: true,
187
+ semicolon: true,
188
+ children: (prop) => createComponent(InterfaceDeclarationProperty, {
189
+ property: prop,
190
+ get defaultValue() {
191
+ return defaultValue?.value?.[prop.getNameAsString()];
192
+ }
193
+ })
194
+ });
195
+ } }))];
196
+ }
197
+ });
198
+ }
199
+ });
200
+ }
201
+ /**
202
+ * Generates a TypeScript interface property for the given reflection class.
203
+ */
204
+ function InterfaceDeclarationProperty(props) {
205
+ const [{ property, defaultValue }, rest] = splitProps(props, ["property", "defaultValue"]);
206
+ return createComponent(ReflectionPropertyContext.Provider, {
207
+ value: {
208
+ property,
209
+ defaultValue
210
+ },
211
+ get children() {
212
+ return [createComponent(TSDocContextProperty, {}), createComponent(InterfaceMember, mergeProps({
213
+ get name() {
214
+ return property.getNameAsString();
215
+ },
216
+ get readonly() {
217
+ return property.isReadonly();
218
+ },
219
+ get optional() {
220
+ return property.isOptional();
221
+ },
222
+ get nullish() {
223
+ return property.isNullable();
224
+ },
225
+ get type() {
226
+ return stringifyType(property.getType());
227
+ }
228
+ }, rest))];
229
+ }
230
+ });
231
+ }
232
+
233
+ //#endregion
234
+ export { InterfaceDeclaration, InterfaceDeclarationProperty, InterfaceExpression, InterfaceMember };
2
235
  //# sourceMappingURL=interface-declaration.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"interface-declaration.mjs","names":[],"sources":["../../../src/typescript/components/interface-declaration.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport {\n Block,\n Children,\n childrenArray,\n computed,\n createSymbol,\n createSymbolSlot,\n effect,\n emitSymbol,\n findUnkeyedChildren,\n For,\n MemberDeclaration,\n Name,\n Namekey,\n Ref,\n Refkey,\n Show,\n splitProps,\n takeSymbols\n} from \"@alloy-js/core\";\nimport {\n CommonDeclarationProps,\n Declaration,\n ensureTypeRefContext,\n TSOutputSymbol,\n TSSymbolFlags,\n TypeParameterDescriptor,\n useTSLexicalScope,\n useTSMemberScope,\n useTSNamePolicy\n} from \"@alloy-js/typescript\";\nimport {\n ReflectionClass,\n ReflectionProperty,\n stringifyType\n} from \"@powerlines/deepkit/vendor/type\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isString } from \"@stryke/type-checks/is-string\";\nimport {\n ReflectionClassContext,\n ReflectionPropertyContext\n} from \"../../core/contexts/reflection\";\nimport { ComponentProps } from \"../../types/components\";\nimport { MemberScope } from \"../contexts/member-scope\";\nimport { PropertyName } from \"./property-name\";\nimport { TSDoc } from \"./tsdoc\";\nimport { TSDocContextProperty, TSDocReflectionClass } from \"./tsdoc-reflection\";\nimport { TypeParameters } from \"./type-parameters\";\n\nexport interface InterfaceDeclarationProps<\n T extends Record<string, any> = Record<string, any>\n>\n extends CommonDeclarationProps, ComponentProps {\n /**\n * A base type that this interface extends. This can be used to represent inheritance\n */\n extends?: Children;\n\n /**\n * The generic type parameters of the interface.\n */\n typeParameters?: TypeParameterDescriptor[] | string[];\n\n /**\n * The reflection class that describes the properties of this interface.\n *\n * @remarks\n * This is used to generate the members of the interface based on the properties of the reflection class.\n */\n reflection?: ReflectionClass<T>;\n\n /**\n * A default value for this interface.\n *\n * @remarks\n * This is used when the interface is used as a type for a variable declaration, to provide an initial value for the variable.\n */\n defaultValue?: Ref<Partial<T>>;\n\n /**\n * Documentation for the interface. This can be a string or any Alloy component that renders documentation content (such as `TSDoc`).\n */\n doc?: Children;\n}\n\nexport interface InterfaceDeclarationPropertyProps\n extends Omit<InterfaceMemberProps, \"name\">, ComponentProps {\n property: ReflectionProperty;\n defaultValue?: any;\n}\n\nexport interface InterfaceExpressionProps {\n children?: Children;\n}\n\nexport const InterfaceExpression = ensureTypeRefContext(\n function InterfaceExpression(props: InterfaceExpressionProps) {\n const scope = useTSLexicalScope();\n const symbol = createSymbol(TSOutputSymbol, \"\", undefined, {\n transient: true,\n binder: scope?.binder\n });\n\n emitSymbol(symbol);\n\n return (\n <group>\n <MemberScope ownerSymbol={symbol}>\n <Block>{props.children}</Block>\n </MemberScope>\n </group>\n );\n }\n);\n\nexport interface InterfaceMemberPropsBase {\n type?: Children;\n children?: Children;\n readonly?: boolean;\n doc?: Children;\n refkey?: Refkey | Refkey[];\n}\nexport interface InterfacePropertyMemberProps extends InterfaceMemberPropsBase {\n name: string | Namekey;\n optional?: boolean;\n nullish?: boolean;\n}\n\nexport interface InterfaceIndexerMemberProps extends InterfaceMemberPropsBase {\n indexer: Children;\n}\n\nexport type InterfaceMemberProps =\n | InterfacePropertyMemberProps\n | InterfaceIndexerMemberProps;\n\n/**\n * Create a TypeScript interface member.\n *\n * An interface member can either provide a `name` prop to create a named\n * property, or an `indexer` prop to define an indexer for the interface.\n *\n * The type of the member can be provided either as the `type` prop or as the\n * children of the component.\n */\nexport function InterfaceMember(props: InterfaceMemberProps) {\n const type = props.type ?? props.children;\n const readonly = props.readonly ? \"readonly \" : \"\";\n\n if (\"indexer\" in props) {\n return (\n <>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n {readonly}[{props.indexer}]: {type}\n </>\n );\n }\n\n const optionality = props.optional ? \"?\" : \"\";\n const scope = useTSMemberScope();\n const sym = createSymbol(\n TSOutputSymbol,\n props.name,\n scope.ownerSymbol.staticMembers,\n {\n refkeys: props.refkey,\n tsFlags:\n TSSymbolFlags.TypeSymbol |\n ((props.nullish ?? props.optional)\n ? TSSymbolFlags.Nullish\n : TSSymbolFlags.None),\n namePolicy: useTSNamePolicy().for(\"interface-member\"),\n binder: scope.binder\n }\n );\n\n const taken = takeSymbols();\n\n effect(() => {\n if (taken.size > 1) return;\n const symbol = Array.from(taken)[0];\n if (symbol?.isTransient) {\n symbol.moveMembersTo(sym);\n }\n });\n\n return (\n <MemberDeclaration symbol={sym}>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n {readonly}\n <PropertyName />\n {optionality}: {type}\n </MemberDeclaration>\n );\n}\n\nconst BaseInterfaceDeclaration = ensureTypeRefContext(\n function InterfaceDeclaration(props: InterfaceDeclarationProps) {\n const ExprSlot = createSymbolSlot();\n\n const children = childrenArray(() => props.children);\n\n const extendsPart = props.extends ? <> extends {props.extends}</> : \"\";\n const filteredChildren = findUnkeyedChildren(children);\n const currentScope = useTSLexicalScope();\n\n const binder = currentScope?.binder;\n const sym = createSymbol(TSOutputSymbol, props.name, currentScope.types, {\n refkeys: props.refkey,\n default: props.default,\n export: props.export,\n metadata: props.metadata,\n tsFlags: TSSymbolFlags.TypeSymbol,\n namePolicy: useTSNamePolicy().for(\"interface\"),\n binder\n });\n\n effect(() => {\n if (ExprSlot.ref.value) {\n const takenSymbols = ExprSlot.ref.value;\n for (const symbol of takenSymbols) {\n // ignore non-transient symbols (likely not the result of an expression).\n if (symbol.isTransient) {\n symbol.moveMembersTo(sym);\n }\n }\n }\n });\n\n return (\n <>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n <Declaration {...props} nameKind=\"interface\" kind=\"type\" symbol={sym}>\n interface <Name />\n {props.typeParameters && (\n <TypeParameters parameters={props.typeParameters} />\n )}\n {extendsPart}{\" \"}\n <ExprSlot>\n <InterfaceExpression>{filteredChildren}</InterfaceExpression>\n </ExprSlot>\n </Declaration>\n </>\n );\n }\n);\n\n/**\n * Generates a TypeScript interface for the given reflection class.\n */\nexport function InterfaceDeclaration<\n T extends Record<string, any> = Record<string, any>\n>(props: InterfaceDeclarationProps<T>) {\n const [{ name, reflection, doc, defaultValue }, rest] = splitProps(props, [\n \"name\",\n \"reflection\",\n \"doc\",\n \"defaultValue\"\n ]);\n\n const interfaceName = computed(() =>\n pascalCase(\n (isString(name) ? name : name.toString()) || reflection?.getName()\n )\n );\n\n const properties = computed(() =>\n reflection\n ? reflection\n .getProperties()\n .filter(item => !item.isIgnored())\n .sort((a, b) =>\n (a.isReadonly() && b.isReadonly()) ||\n (!a.isReadonly() && !b.isReadonly())\n ? a.getNameAsString().localeCompare(b.getNameAsString())\n : a.isReadonly()\n ? 1\n : -1\n )\n : []\n );\n\n return (\n <Show\n when={reflection && properties.value.length > 0}\n fallback={\n <BaseInterfaceDeclaration {...props} name={interfaceName.value} />\n }>\n <ReflectionClassContext.Provider\n value={{\n reflection: reflection!\n }}>\n <TSDocReflectionClass<T> heading={doc} reflection={reflection!} />\n <BaseInterfaceDeclaration\n export={true}\n name={interfaceName.value}\n defaultValue={defaultValue}\n {...rest}>\n <For each={properties} doubleHardline={true} semicolon={true}>\n {prop => (\n <InterfaceDeclarationProperty\n property={prop}\n defaultValue={defaultValue?.value?.[prop.getNameAsString()]}\n />\n )}\n </For>\n </BaseInterfaceDeclaration>\n </ReflectionClassContext.Provider>\n </Show>\n );\n}\n\n/**\n * Generates a TypeScript interface property for the given reflection class.\n */\nexport function InterfaceDeclarationProperty(\n props: InterfaceDeclarationPropertyProps\n) {\n const [{ property, defaultValue }, rest] = splitProps(props, [\n \"property\",\n \"defaultValue\"\n ]);\n\n return (\n <ReflectionPropertyContext.Provider value={{ property, defaultValue }}>\n <TSDocContextProperty />\n <InterfaceMember\n name={property.getNameAsString()}\n readonly={property.isReadonly()}\n optional={property.isOptional()}\n nullish={property.isNullable()}\n type={stringifyType(property.getType())}\n {...rest}\n />\n </ReflectionPropertyContext.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"interface-declaration.mjs","names":[],"sources":["../../../src/typescript/components/interface-declaration.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Powerlines\n\n This code was released as part of the Powerlines project. Powerlines\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/powerlines.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/powerlines\n Documentation: https://docs.stormsoftware.com/projects/powerlines\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport {\n Block,\n Children,\n childrenArray,\n computed,\n createSymbol,\n createSymbolSlot,\n effect,\n emitSymbol,\n findUnkeyedChildren,\n For,\n MemberDeclaration,\n Name,\n Namekey,\n Ref,\n Refkey,\n Show,\n splitProps,\n takeSymbols\n} from \"@alloy-js/core\";\nimport {\n CommonDeclarationProps,\n Declaration,\n ensureTypeRefContext,\n TSOutputSymbol,\n TSSymbolFlags,\n TypeParameterDescriptor,\n useTSLexicalScope,\n useTSMemberScope,\n useTSNamePolicy\n} from \"@alloy-js/typescript\";\nimport {\n ReflectionClass,\n ReflectionProperty,\n stringifyType\n} from \"@powerlines/deepkit/vendor/type\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isString } from \"@stryke/type-checks/is-string\";\nimport {\n ReflectionClassContext,\n ReflectionPropertyContext\n} from \"../../core/contexts/reflection\";\nimport { ComponentProps } from \"../../types/components\";\nimport { MemberScope } from \"../contexts/member-scope\";\nimport { PropertyName } from \"./property-name\";\nimport { TSDoc } from \"./tsdoc\";\nimport { TSDocContextProperty, TSDocReflectionClass } from \"./tsdoc-reflection\";\nimport { TypeParameters } from \"./type-parameters\";\n\nexport interface InterfaceDeclarationProps<\n T extends Record<string, any> = Record<string, any>\n>\n extends CommonDeclarationProps, ComponentProps {\n /**\n * A base type that this interface extends. This can be used to represent inheritance\n */\n extends?: Children;\n\n /**\n * The generic type parameters of the interface.\n */\n typeParameters?: TypeParameterDescriptor[] | string[];\n\n /**\n * The reflection class that describes the properties of this interface.\n *\n * @remarks\n * This is used to generate the members of the interface based on the properties of the reflection class.\n */\n reflection?: ReflectionClass<T>;\n\n /**\n * A default value for this interface.\n *\n * @remarks\n * This is used when the interface is used as a type for a variable declaration, to provide an initial value for the variable.\n */\n defaultValue?: Ref<Partial<T>>;\n\n /**\n * Documentation for the interface. This can be a string or any Alloy component that renders documentation content (such as `TSDoc`).\n */\n doc?: Children;\n}\n\nexport interface InterfaceDeclarationPropertyProps\n extends Omit<InterfaceMemberProps, \"name\">, ComponentProps {\n property: ReflectionProperty;\n defaultValue?: any;\n}\n\nexport interface InterfaceExpressionProps {\n children?: Children;\n}\n\nexport const InterfaceExpression = ensureTypeRefContext(\n function InterfaceExpression(props: InterfaceExpressionProps) {\n const scope = useTSLexicalScope();\n const symbol = createSymbol(TSOutputSymbol, \"\", undefined, {\n transient: true,\n binder: scope?.binder\n });\n\n emitSymbol(symbol);\n\n return (\n <group>\n <MemberScope ownerSymbol={symbol}>\n <Block>{props.children}</Block>\n </MemberScope>\n </group>\n );\n }\n);\n\nexport interface InterfaceMemberPropsBase {\n type?: Children;\n children?: Children;\n readonly?: boolean;\n doc?: Children;\n refkey?: Refkey | Refkey[];\n}\nexport interface InterfacePropertyMemberProps extends InterfaceMemberPropsBase {\n name: string | Namekey;\n optional?: boolean;\n nullish?: boolean;\n}\n\nexport interface InterfaceIndexerMemberProps extends InterfaceMemberPropsBase {\n indexer: Children;\n}\n\nexport type InterfaceMemberProps =\n | InterfacePropertyMemberProps\n | InterfaceIndexerMemberProps;\n\n/**\n * Create a TypeScript interface member.\n *\n * An interface member can either provide a `name` prop to create a named\n * property, or an `indexer` prop to define an indexer for the interface.\n *\n * The type of the member can be provided either as the `type` prop or as the\n * children of the component.\n */\nexport function InterfaceMember(props: InterfaceMemberProps) {\n const type = props.type ?? props.children;\n const readonly = props.readonly ? \"readonly \" : \"\";\n\n if (\"indexer\" in props) {\n return (\n <>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n {readonly}[{props.indexer}]: {type}\n </>\n );\n }\n\n const optionality = props.optional ? \"?\" : \"\";\n const scope = useTSMemberScope();\n const sym = createSymbol(\n TSOutputSymbol,\n props.name,\n scope.ownerSymbol.staticMembers,\n {\n refkeys: props.refkey,\n tsFlags:\n TSSymbolFlags.TypeSymbol |\n ((props.nullish ?? props.optional)\n ? TSSymbolFlags.Nullish\n : TSSymbolFlags.None),\n namePolicy: useTSNamePolicy().for(\"interface-member\"),\n binder: scope.binder\n }\n );\n\n const taken = takeSymbols();\n\n effect(() => {\n if (taken.size > 1) return;\n const symbol = Array.from(taken)[0];\n if (symbol?.isTransient) {\n symbol.moveMembersTo(sym);\n }\n });\n\n return (\n <MemberDeclaration symbol={sym}>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n {readonly}\n <PropertyName />\n {optionality}: {type}\n </MemberDeclaration>\n );\n}\n\nconst BaseInterfaceDeclaration = ensureTypeRefContext(\n function InterfaceDeclaration(props: InterfaceDeclarationProps) {\n const ExprSlot = createSymbolSlot();\n\n const children = childrenArray(() => props.children);\n\n const extendsPart = props.extends ? <> extends {props.extends}</> : \"\";\n const filteredChildren = findUnkeyedChildren(children);\n const currentScope = useTSLexicalScope();\n\n const binder = currentScope?.binder;\n const sym = createSymbol(TSOutputSymbol, props.name, currentScope.types, {\n refkeys: props.refkey,\n default: props.default,\n export: props.export,\n metadata: props.metadata,\n tsFlags: TSSymbolFlags.TypeSymbol,\n namePolicy: useTSNamePolicy().for(\"interface\"),\n binder\n });\n\n effect(() => {\n if (ExprSlot.ref.value) {\n const takenSymbols = ExprSlot.ref.value;\n for (const symbol of takenSymbols) {\n // ignore non-transient symbols (likely not the result of an expression).\n if (symbol.isTransient) {\n symbol.moveMembersTo(sym);\n }\n }\n }\n });\n\n return (\n <>\n <Show when={Boolean(props.doc)}>\n <TSDoc heading={props.doc} />\n </Show>\n <Declaration {...props} nameKind=\"interface\" kind=\"type\" symbol={sym}>\n interface <Name />\n {props.typeParameters && (\n <TypeParameters parameters={props.typeParameters} />\n )}\n {extendsPart}{\" \"}\n <ExprSlot>\n <InterfaceExpression>{filteredChildren}</InterfaceExpression>\n </ExprSlot>\n </Declaration>\n </>\n );\n }\n);\n\n/**\n * Generates a TypeScript interface for the given reflection class.\n */\nexport function InterfaceDeclaration<\n T extends Record<string, any> = Record<string, any>\n>(props: InterfaceDeclarationProps<T>) {\n const [{ name, reflection, doc, defaultValue }, rest] = splitProps(props, [\n \"name\",\n \"reflection\",\n \"doc\",\n \"defaultValue\"\n ]);\n\n const interfaceName = computed(() =>\n pascalCase(\n (isString(name) ? name : name.toString()) || reflection?.getName()\n )\n );\n\n const properties = computed(() =>\n reflection\n ? reflection\n .getProperties()\n .filter(item => !item.isIgnored())\n .sort((a, b) =>\n (a.isReadonly() && b.isReadonly()) ||\n (!a.isReadonly() && !b.isReadonly())\n ? a.getNameAsString().localeCompare(b.getNameAsString())\n : a.isReadonly()\n ? 1\n : -1\n )\n : []\n );\n\n return (\n <Show\n when={reflection && properties.value.length > 0}\n fallback={\n <BaseInterfaceDeclaration {...props} name={interfaceName.value} />\n }>\n <ReflectionClassContext.Provider\n value={{\n reflection: reflection!\n }}>\n <TSDocReflectionClass<T> heading={doc} reflection={reflection!} />\n <BaseInterfaceDeclaration\n export={true}\n name={interfaceName.value}\n defaultValue={defaultValue}\n {...rest}>\n <For each={properties} doubleHardline={true} semicolon={true}>\n {prop => (\n <InterfaceDeclarationProperty\n property={prop}\n defaultValue={defaultValue?.value?.[prop.getNameAsString()]}\n />\n )}\n </For>\n </BaseInterfaceDeclaration>\n </ReflectionClassContext.Provider>\n </Show>\n );\n}\n\n/**\n * Generates a TypeScript interface property for the given reflection class.\n */\nexport function InterfaceDeclarationProperty(\n props: InterfaceDeclarationPropertyProps\n) {\n const [{ property, defaultValue }, rest] = splitProps(props, [\n \"property\",\n \"defaultValue\"\n ]);\n\n return (\n <ReflectionPropertyContext.Provider value={{ property, defaultValue }}>\n <TSDocContextProperty />\n <InterfaceMember\n name={property.getNameAsString()}\n readonly={property.isReadonly()}\n optional={property.isOptional()}\n nullish={property.isNullable()}\n type={stringifyType(property.getType())}\n {...rest}\n />\n </ReflectionPropertyContext.Provider>\n );\n}\n"],"mappings":"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"}
@@ -1 +1,139 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../core/contexts/reflection.cjs`),t=require(`./tsdoc-reflection.cjs`);let n=require(`@alloy-js/core/jsx-runtime`),r=require(`@alloy-js/core`),i=require(`@powerlines/deepkit/utilities`),a=require(`@stryke/string-format/camel-case`),o=require(`@stryke/type-checks/is-undefined`),s=require(`@stryke/string-format/pascal-case`),c=require(`@stryke/type-checks/is-string`),l=require(`@alloy-js/typescript`);function u(i){if(!i.reflection?.value)return null;let u=(0,r.computed)(()=>(0,a.camelCase)(((0,c.isString)(i.name)?i.name:i.name.toString())||i.reflection.value.getName())),f=(0,r.computed)(()=>i.type||(0,s.pascalCase)(i.reflection.value.getName())),p=(0,r.computed)(()=>i.reflection.value.getProperties().filter(e=>!e.isIgnored()&&!e.isRuntime()&&!(0,o.isUndefined)(i.defaultValue?.value?.[e.getNameAsString()]??e.getAlias().reduce((e,t)=>(0,o.isUndefined)(e)&&!(0,o.isUndefined)(i.defaultValue?.value?.[t])?i.defaultValue?.value?.[t]:e,void 0)??e.getDefaultValue())).sort((e,t)=>e.isReadonly()&&t.isReadonly()||!e.isReadonly()&&!t.isReadonly()?e.getNameAsString().localeCompare(t.getNameAsString()):e.isReadonly()?1:-1)),m=(0,r.createSymbolSlot)(),h=(0,r.createSymbolSlot)(),g=(0,l.createValueSymbol)(i.name,{refkeys:i.refkey,default:i.default,export:i.export,metadata:i.metadata,tsFlags:i.nullish?l.TSSymbolFlags.Nullish:l.TSSymbolFlags.None,type:i.type?m.firstSymbol:void 0,namePolicy:(0,l.useTSNamePolicy)().for(`variable`)});i.type||h.moveMembersTo(g);let _=i.var?`var`:i.let?`let`:`const`,v=i.type?(0,n.createComponent)(l.TypeRefContext,{get children(){return[`: `,(0,n.createComponent)(m,{get children(){return i.type}})]}}):void 0;return(0,n.createComponent)(r.Show,{get when(){return!!i.reflection.value},get children(){return(0,n.createComponent)(e.ReflectionClassContext.Provider,{get value(){return{reflection:i.reflection.value,override:{name:u.value,type:f.value,defaultValue:i.defaultValue?.value}}},get children(){return[(0,n.createComponent)(r.Show,{get when(){return!!u.value&&!!f.value},get children(){return[(0,n.createComponent)(t.TSDocReflectionClass,{get reflection(){return i.reflection.value}}),(0,n.createComponent)(r.Declaration,{symbol:g,get children(){return[(0,n.memo)(()=>i.export?`export `:``),(0,n.memo)(()=>i.default?`default `:``),_,` `,(0,n.createComponent)(r.Name,{}),v,` =`,` `,(0,n.createComponent)(h,{get children(){return i.initializer??i.children??(0,n.createComponent)(l.ObjectExpression,{get children(){return(0,n.createComponent)(r.For,{get each(){return p.value??[]},comma:!0,doubleHardline:!0,children:e=>(0,n.createComponent)(d,{property:e,get defaultValue(){return i.defaultValue?.value?.[e.getNameAsString()]}})})}})}})]}})]}}),(0,n.createIntrinsic)(`hbr`,{})]}})}})}function d(a){let[{property:o,defaultValue:s}]=(0,r.splitProps)(a,[`property`,`defaultValue`]);return(0,n.createComponent)(e.ReflectionPropertyContext.Provider,{value:{property:o,defaultValue:s},get children(){return[(0,n.createComponent)(t.TSDocReflectionProperty,{reflection:o,defaultValue:s}),(0,n.createComponent)(l.ObjectProperty,{get name(){return o.getNameAsString()},get value(){return(0,i.stringifyDefaultValue)(o,s)}}),(0,n.createIntrinsic)(`hbr`,{})]}})}exports.ObjectDeclaration=u,exports.ObjectDeclarationProperty=d;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ const require_core_contexts_reflection = require('../../core/contexts/reflection.cjs');
4
+ const require_typescript_components_tsdoc_reflection = require('./tsdoc-reflection.cjs');
5
+ let _alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
6
+ let _alloy_js_core = require("@alloy-js/core");
7
+ let _powerlines_deepkit_utilities = require("@powerlines/deepkit/utilities");
8
+ let _stryke_string_format_camel_case = require("@stryke/string-format/camel-case");
9
+ let _stryke_type_checks_is_undefined = require("@stryke/type-checks/is-undefined");
10
+ let _stryke_string_format_pascal_case = require("@stryke/string-format/pascal-case");
11
+ let _stryke_type_checks_is_string = require("@stryke/type-checks/is-string");
12
+ let _alloy_js_typescript = require("@alloy-js/typescript");
13
+
14
+ //#region src/typescript/components/object-declaration.tsx
15
+ /**
16
+ * Generates a TypeScript object for the given reflection class.
17
+ */
18
+ function ObjectDeclaration(props) {
19
+ if (!props.reflection?.value) return null;
20
+ const objectName = (0, _alloy_js_core.computed)(() => (0, _stryke_string_format_camel_case.camelCase)(((0, _stryke_type_checks_is_string.isString)(props.name) ? props.name : props.name.toString()) || props.reflection.value.getName()));
21
+ const objectType = (0, _alloy_js_core.computed)(() => props.type || (0, _stryke_string_format_pascal_case.pascalCase)(props.reflection.value.getName()));
22
+ const properties = (0, _alloy_js_core.computed)(() => props.reflection.value.getProperties().filter((item) => !item.isIgnored() && !item.isRuntime() && !(0, _stryke_type_checks_is_undefined.isUndefined)(props.defaultValue?.value?.[item.getNameAsString()] ?? item.getAlias().reduce((ret, alias) => {
23
+ if ((0, _stryke_type_checks_is_undefined.isUndefined)(ret) && !(0, _stryke_type_checks_is_undefined.isUndefined)(props.defaultValue?.value?.[alias])) return props.defaultValue?.value?.[alias];
24
+ return ret;
25
+ }, void 0) ?? item.getDefaultValue())).sort((a, b) => a.isReadonly() && b.isReadonly() || !a.isReadonly() && !b.isReadonly() ? a.getNameAsString().localeCompare(b.getNameAsString()) : a.isReadonly() ? 1 : -1));
26
+ const TypeSymbolSlot = (0, _alloy_js_core.createSymbolSlot)();
27
+ const ValueTypeSymbolSlot = (0, _alloy_js_core.createSymbolSlot)();
28
+ const sym = (0, _alloy_js_typescript.createValueSymbol)(props.name, {
29
+ refkeys: props.refkey,
30
+ default: props.default,
31
+ export: props.export,
32
+ metadata: props.metadata,
33
+ tsFlags: props.nullish ? _alloy_js_typescript.TSSymbolFlags.Nullish : _alloy_js_typescript.TSSymbolFlags.None,
34
+ type: props.type ? TypeSymbolSlot.firstSymbol : void 0,
35
+ namePolicy: (0, _alloy_js_typescript.useTSNamePolicy)().for("variable")
36
+ });
37
+ if (!props.type) ValueTypeSymbolSlot.moveMembersTo(sym);
38
+ const keyword = props.var ? "var" : props.let ? "let" : "const";
39
+ const type = props.type ? (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.TypeRefContext, { get children() {
40
+ return [": ", (0, _alloy_js_core_jsx_runtime.createComponent)(TypeSymbolSlot, { get children() {
41
+ return props.type;
42
+ } })];
43
+ } }) : void 0;
44
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
45
+ get when() {
46
+ return !!props.reflection.value;
47
+ },
48
+ get children() {
49
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(require_core_contexts_reflection.ReflectionClassContext.Provider, {
50
+ get value() {
51
+ return {
52
+ reflection: props.reflection.value,
53
+ override: {
54
+ name: objectName.value,
55
+ type: objectType.value,
56
+ defaultValue: props.defaultValue?.value
57
+ }
58
+ };
59
+ },
60
+ get children() {
61
+ return [(0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
62
+ get when() {
63
+ return !!objectName.value && !!objectType.value;
64
+ },
65
+ get children() {
66
+ return [(0, _alloy_js_core_jsx_runtime.createComponent)(require_typescript_components_tsdoc_reflection.TSDocReflectionClass, { get reflection() {
67
+ return props.reflection.value;
68
+ } }), (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Declaration, {
69
+ symbol: sym,
70
+ get children() {
71
+ return [
72
+ (0, _alloy_js_core_jsx_runtime.memo)(() => props.export ? "export " : ""),
73
+ (0, _alloy_js_core_jsx_runtime.memo)(() => props.default ? "default " : ""),
74
+ keyword,
75
+ " ",
76
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Name, {}),
77
+ type,
78
+ " =",
79
+ " ",
80
+ (0, _alloy_js_core_jsx_runtime.createComponent)(ValueTypeSymbolSlot, { get children() {
81
+ return props.initializer ?? props.children ?? (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ObjectExpression, { get children() {
82
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.For, {
83
+ get each() {
84
+ return properties.value ?? [];
85
+ },
86
+ comma: true,
87
+ doubleHardline: true,
88
+ children: (prop) => (0, _alloy_js_core_jsx_runtime.createComponent)(ObjectDeclarationProperty, {
89
+ property: prop,
90
+ get defaultValue() {
91
+ return props.defaultValue?.value?.[prop.getNameAsString()];
92
+ }
93
+ })
94
+ });
95
+ } });
96
+ } })
97
+ ];
98
+ }
99
+ })];
100
+ }
101
+ }), (0, _alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})];
102
+ }
103
+ });
104
+ }
105
+ });
106
+ }
107
+ /**
108
+ * Generates a TypeScript object property for the given reflection class.
109
+ */
110
+ function ObjectDeclarationProperty(props) {
111
+ const [{ property, defaultValue }] = (0, _alloy_js_core.splitProps)(props, ["property", "defaultValue"]);
112
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(require_core_contexts_reflection.ReflectionPropertyContext.Provider, {
113
+ value: {
114
+ property,
115
+ defaultValue
116
+ },
117
+ get children() {
118
+ return [
119
+ (0, _alloy_js_core_jsx_runtime.createComponent)(require_typescript_components_tsdoc_reflection.TSDocReflectionProperty, {
120
+ reflection: property,
121
+ defaultValue
122
+ }),
123
+ (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ObjectProperty, {
124
+ get name() {
125
+ return property.getNameAsString();
126
+ },
127
+ get value() {
128
+ return (0, _powerlines_deepkit_utilities.stringifyDefaultValue)(property, defaultValue);
129
+ }
130
+ }),
131
+ (0, _alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
132
+ ];
133
+ }
134
+ });
135
+ }
136
+
137
+ //#endregion
138
+ exports.ObjectDeclaration = ObjectDeclaration;
139
+ exports.ObjectDeclarationProperty = ObjectDeclarationProperty;
@@ -1,2 +1,137 @@
1
- import{ReflectionClassContext as e,ReflectionPropertyContext as t}from"../../core/contexts/reflection.mjs";import{TSDocReflectionClass as n,TSDocReflectionProperty as r}from"./tsdoc-reflection.mjs";import{createComponent as i,createIntrinsic as a,memo as o}from"@alloy-js/core/jsx-runtime";import{Declaration as s,For as c,Name as l,Show as u,computed as d,createSymbolSlot as f,splitProps as p}from"@alloy-js/core";import{stringifyDefaultValue as m}from"@powerlines/deepkit/utilities";import{camelCase as h}from"@stryke/string-format/camel-case";import{isUndefined as g}from"@stryke/type-checks/is-undefined";import{pascalCase as _}from"@stryke/string-format/pascal-case";import{isString as v}from"@stryke/type-checks/is-string";import{ObjectExpression as y,ObjectProperty as b,TSSymbolFlags as x,TypeRefContext as S,createValueSymbol as C,useTSNamePolicy as w}from"@alloy-js/typescript";function T(t){if(!t.reflection?.value)return null;let r=d(()=>h((v(t.name)?t.name:t.name.toString())||t.reflection.value.getName())),p=d(()=>t.type||_(t.reflection.value.getName())),m=d(()=>t.reflection.value.getProperties().filter(e=>!e.isIgnored()&&!e.isRuntime()&&!g(t.defaultValue?.value?.[e.getNameAsString()]??e.getAlias().reduce((e,n)=>g(e)&&!g(t.defaultValue?.value?.[n])?t.defaultValue?.value?.[n]:e,void 0)??e.getDefaultValue())).sort((e,t)=>e.isReadonly()&&t.isReadonly()||!e.isReadonly()&&!t.isReadonly()?e.getNameAsString().localeCompare(t.getNameAsString()):e.isReadonly()?1:-1)),b=f(),T=f(),D=C(t.name,{refkeys:t.refkey,default:t.default,export:t.export,metadata:t.metadata,tsFlags:t.nullish?x.Nullish:x.None,type:t.type?b.firstSymbol:void 0,namePolicy:w().for(`variable`)});t.type||T.moveMembersTo(D);let O=t.var?`var`:t.let?`let`:`const`,k=t.type?i(S,{get children(){return[`: `,i(b,{get children(){return t.type}})]}}):void 0;return i(u,{get when(){return!!t.reflection.value},get children(){return i(e.Provider,{get value(){return{reflection:t.reflection.value,override:{name:r.value,type:p.value,defaultValue:t.defaultValue?.value}}},get children(){return[i(u,{get when(){return!!r.value&&!!p.value},get children(){return[i(n,{get reflection(){return t.reflection.value}}),i(s,{symbol:D,get children(){return[o(()=>t.export?`export `:``),o(()=>t.default?`default `:``),O,` `,i(l,{}),k,` =`,` `,i(T,{get children(){return t.initializer??t.children??i(y,{get children(){return i(c,{get each(){return m.value??[]},comma:!0,doubleHardline:!0,children:e=>i(E,{property:e,get defaultValue(){return t.defaultValue?.value?.[e.getNameAsString()]}})})}})}})]}})]}}),a(`hbr`,{})]}})}})}function E(e){let[{property:n,defaultValue:o}]=p(e,[`property`,`defaultValue`]);return i(t.Provider,{value:{property:n,defaultValue:o},get children(){return[i(r,{reflection:n,defaultValue:o}),i(b,{get name(){return n.getNameAsString()},get value(){return m(n,o)}}),a(`hbr`,{})]}})}export{T as ObjectDeclaration,E as ObjectDeclarationProperty};
1
+ import { ReflectionClassContext, ReflectionPropertyContext } from "../../core/contexts/reflection.mjs";
2
+ import { TSDocReflectionClass, TSDocReflectionProperty } from "./tsdoc-reflection.mjs";
3
+ import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
4
+ import { Declaration, For, Name, Show, computed, createSymbolSlot, splitProps } from "@alloy-js/core";
5
+ import { stringifyDefaultValue } from "@powerlines/deepkit/utilities";
6
+ import { camelCase } from "@stryke/string-format/camel-case";
7
+ import { isUndefined } from "@stryke/type-checks/is-undefined";
8
+ import { pascalCase } from "@stryke/string-format/pascal-case";
9
+ import { isString } from "@stryke/type-checks/is-string";
10
+ import { ObjectExpression, ObjectProperty, TSSymbolFlags, TypeRefContext, createValueSymbol, useTSNamePolicy } from "@alloy-js/typescript";
11
+
12
+ //#region src/typescript/components/object-declaration.tsx
13
+ /**
14
+ * Generates a TypeScript object for the given reflection class.
15
+ */
16
+ function ObjectDeclaration(props) {
17
+ if (!props.reflection?.value) return null;
18
+ const objectName = computed(() => camelCase((isString(props.name) ? props.name : props.name.toString()) || props.reflection.value.getName()));
19
+ const objectType = computed(() => props.type || pascalCase(props.reflection.value.getName()));
20
+ const properties = computed(() => props.reflection.value.getProperties().filter((item) => !item.isIgnored() && !item.isRuntime() && !isUndefined(props.defaultValue?.value?.[item.getNameAsString()] ?? item.getAlias().reduce((ret, alias) => {
21
+ if (isUndefined(ret) && !isUndefined(props.defaultValue?.value?.[alias])) return props.defaultValue?.value?.[alias];
22
+ return ret;
23
+ }, void 0) ?? item.getDefaultValue())).sort((a, b) => a.isReadonly() && b.isReadonly() || !a.isReadonly() && !b.isReadonly() ? a.getNameAsString().localeCompare(b.getNameAsString()) : a.isReadonly() ? 1 : -1));
24
+ const TypeSymbolSlot = createSymbolSlot();
25
+ const ValueTypeSymbolSlot = createSymbolSlot();
26
+ const sym = createValueSymbol(props.name, {
27
+ refkeys: props.refkey,
28
+ default: props.default,
29
+ export: props.export,
30
+ metadata: props.metadata,
31
+ tsFlags: props.nullish ? TSSymbolFlags.Nullish : TSSymbolFlags.None,
32
+ type: props.type ? TypeSymbolSlot.firstSymbol : void 0,
33
+ namePolicy: useTSNamePolicy().for("variable")
34
+ });
35
+ if (!props.type) ValueTypeSymbolSlot.moveMembersTo(sym);
36
+ const keyword = props.var ? "var" : props.let ? "let" : "const";
37
+ const type = props.type ? createComponent(TypeRefContext, { get children() {
38
+ return [": ", createComponent(TypeSymbolSlot, { get children() {
39
+ return props.type;
40
+ } })];
41
+ } }) : void 0;
42
+ return createComponent(Show, {
43
+ get when() {
44
+ return !!props.reflection.value;
45
+ },
46
+ get children() {
47
+ return createComponent(ReflectionClassContext.Provider, {
48
+ get value() {
49
+ return {
50
+ reflection: props.reflection.value,
51
+ override: {
52
+ name: objectName.value,
53
+ type: objectType.value,
54
+ defaultValue: props.defaultValue?.value
55
+ }
56
+ };
57
+ },
58
+ get children() {
59
+ return [createComponent(Show, {
60
+ get when() {
61
+ return !!objectName.value && !!objectType.value;
62
+ },
63
+ get children() {
64
+ return [createComponent(TSDocReflectionClass, { get reflection() {
65
+ return props.reflection.value;
66
+ } }), createComponent(Declaration, {
67
+ symbol: sym,
68
+ get children() {
69
+ return [
70
+ memo(() => props.export ? "export " : ""),
71
+ memo(() => props.default ? "default " : ""),
72
+ keyword,
73
+ " ",
74
+ createComponent(Name, {}),
75
+ type,
76
+ " =",
77
+ " ",
78
+ createComponent(ValueTypeSymbolSlot, { get children() {
79
+ return props.initializer ?? props.children ?? createComponent(ObjectExpression, { get children() {
80
+ return createComponent(For, {
81
+ get each() {
82
+ return properties.value ?? [];
83
+ },
84
+ comma: true,
85
+ doubleHardline: true,
86
+ children: (prop) => createComponent(ObjectDeclarationProperty, {
87
+ property: prop,
88
+ get defaultValue() {
89
+ return props.defaultValue?.value?.[prop.getNameAsString()];
90
+ }
91
+ })
92
+ });
93
+ } });
94
+ } })
95
+ ];
96
+ }
97
+ })];
98
+ }
99
+ }), createIntrinsic("hbr", {})];
100
+ }
101
+ });
102
+ }
103
+ });
104
+ }
105
+ /**
106
+ * Generates a TypeScript object property for the given reflection class.
107
+ */
108
+ function ObjectDeclarationProperty(props) {
109
+ const [{ property, defaultValue }] = splitProps(props, ["property", "defaultValue"]);
110
+ return createComponent(ReflectionPropertyContext.Provider, {
111
+ value: {
112
+ property,
113
+ defaultValue
114
+ },
115
+ get children() {
116
+ return [
117
+ createComponent(TSDocReflectionProperty, {
118
+ reflection: property,
119
+ defaultValue
120
+ }),
121
+ createComponent(ObjectProperty, {
122
+ get name() {
123
+ return property.getNameAsString();
124
+ },
125
+ get value() {
126
+ return stringifyDefaultValue(property, defaultValue);
127
+ }
128
+ }),
129
+ createIntrinsic("hbr", {})
130
+ ];
131
+ }
132
+ });
133
+ }
134
+
135
+ //#endregion
136
+ export { ObjectDeclaration, ObjectDeclarationProperty };
2
137
  //# sourceMappingURL=object-declaration.mjs.map