@gtkx/codegen 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analysis/descriptor-render.d.ts +1 -0
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +56 -28
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +3 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +10 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +24 -3
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +2 -1
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +3 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +44 -12
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +4 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +4 -1
- package/dist/gi.js.map +1 -1
- package/dist/gir/libraries.d.ts +12 -5
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +50 -14
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +5 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +6 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/jsx.d.ts +1 -0
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +2 -0
- package/dist/jsx.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +3 -1
- package/dist/runner.js.map +1 -1
- package/dist/store/gi/bootstrap.d.ts +4 -0
- package/dist/store/gi/bootstrap.d.ts.map +1 -0
- package/dist/store/gi/bootstrap.js +48 -0
- package/dist/store/gi/bootstrap.js.map +1 -0
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +75 -28
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +2 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.js +3 -3
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/folded.d.ts +14 -0
- package/dist/store/gi/folded.d.ts.map +1 -0
- package/dist/store/gi/folded.js +35 -0
- package/dist/store/gi/folded.js.map +1 -0
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +22 -3
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +11 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +43 -4
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +2 -0
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts +5 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +13 -1
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/property-accessor.js +1 -1
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +44 -12
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +7 -3
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +1 -1
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +16 -7
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +64 -10
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +2 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +2 -0
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +28 -1
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts +1 -0
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +7 -2
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +2 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +1 -1
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +17 -0
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +83 -11
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/emit.d.ts +2 -1
- package/dist/writer/emit.d.ts.map +1 -1
- package/dist/writer/emit.js +2 -1
- package/dist/writer/emit.js.map +1 -1
- package/dist/writer/imports.d.ts.map +1 -1
- package/dist/writer/imports.js +6 -1
- package/dist/writer/imports.js.map +1 -1
- package/dist/writer/module.d.ts +1 -0
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +6 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/glib/regex.ts.ejs +2 -0
- package/package.json +4 -4
- package/src/analysis/descriptor-render.ts +79 -30
- package/src/analysis/descriptor.ts +19 -11
- package/src/compile.ts +42 -3
- package/src/docs/api-reference.ts +4 -1
- package/src/docs/pipeline.ts +64 -13
- package/src/fingerprint.ts +7 -0
- package/src/gi.ts +6 -1
- package/src/gir/libraries.ts +64 -16
- package/src/gir/library.ts +9 -0
- package/src/internal.ts +1 -0
- package/src/jsx.ts +3 -0
- package/src/runner.ts +5 -1
- package/src/store/gi/bootstrap.ts +64 -0
- package/src/store/gi/class.ts +100 -29
- package/src/store/gi/constructor-props.ts +2 -1
- package/src/store/gi/enum.ts +4 -4
- package/src/store/gi/folded.ts +57 -0
- package/src/store/gi/function.ts +22 -3
- package/src/store/gi/gtype-binding.ts +15 -2
- package/src/store/gi/interface.ts +64 -7
- package/src/store/gi/method.ts +2 -0
- package/src/store/gi/pipeline.ts +21 -2
- package/src/store/gi/property-accessor.ts +1 -1
- package/src/store/gi/record-field-accessor.ts +5 -3
- package/src/store/gi/record.ts +61 -14
- package/src/store/gi/registration.ts +2 -2
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +8 -3
- package/src/store/gi/vtable.ts +1 -0
- package/src/store/gi-store.ts +19 -7
- package/src/store/jsx/element-components.ts +107 -10
- package/src/store/jsx/element-prop-types.ts +4 -0
- package/src/store/jsx/metadata.ts +41 -0
- package/src/store/jsx-store.ts +10 -4
- package/src/store/store-fs.ts +3 -2
- package/src/writer/context.ts +109 -16
- package/src/writer/emit.ts +3 -1
- package/src/writer/imports.ts +9 -1
- package/src/writer/module.ts +9 -1
package/dist/store/gi/class.js
CHANGED
|
@@ -7,6 +7,7 @@ import { indentMembers } from "../../writer/emit.js";
|
|
|
7
7
|
import { dedupeCallables, generateBindings, instanceScope, renderClassInstanceMember, renderStaticHead, staticMembers, } from "./callables.js";
|
|
8
8
|
import { renderClassConstructor, renderConstructorPropsInterface } from "./constructor-props.js";
|
|
9
9
|
import { getDoc } from "./doc-spec.js";
|
|
10
|
+
import { declareFoldedClass, localClassName } from "./folded.js";
|
|
10
11
|
import { gtypeMemberDeclaration, renderSourceGtype } from "./gtype-binding.js";
|
|
11
12
|
import { methodExportName } from "./method.js";
|
|
12
13
|
import { renderPropertyDeclarations } from "./properties.js";
|
|
@@ -28,24 +29,53 @@ const generateClass = (context, klass) => {
|
|
|
28
29
|
const parentExpression = resolveParent(context, klass);
|
|
29
30
|
const extendsClause = renderExtendsClause(context, parentExpression, klass, callables);
|
|
30
31
|
const implemented = resolveImplementedRefs(context, klass);
|
|
31
|
-
const
|
|
32
|
-
|
|
32
|
+
const implementsClause = renderImplementsClause(implemented);
|
|
33
|
+
if (context.isTreeShaken) {
|
|
34
|
+
context.beginRegistrations();
|
|
35
|
+
}
|
|
33
36
|
const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);
|
|
34
37
|
const body = indentMembers(members);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
const heritage = `${extendsClause}${implementsClause}`;
|
|
39
|
+
if (context.isTreeShaken) {
|
|
40
|
+
declareTreeShakenClass(context, { klass, className, heritage, body, implemented });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
context.declare({
|
|
44
|
+
name: className,
|
|
45
|
+
code: `${getDoc(klass)}export ${classModifier(klass)}class ${className}${heritage} {\n${body}\n}`,
|
|
46
|
+
owner: klass.name,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
42
49
|
context.declare({
|
|
43
50
|
name: `${className}ConstructorProps`,
|
|
44
51
|
code: renderConstructorPropsInterface(context, klass, className),
|
|
45
52
|
});
|
|
46
53
|
appendMemberDeclarations({ context, klass, className, accessors, implemented });
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
if (!context.isTreeShaken) {
|
|
55
|
+
appendInstallMixins(context, className, implemented);
|
|
56
|
+
appendClassRegistrations(context, klass, className);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const classModifier = (klass) => (klass.isAbstract ? "abstract " : "");
|
|
60
|
+
const renderImplementsClause = (implemented) => {
|
|
61
|
+
const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));
|
|
62
|
+
return typeRefs.length === 0 ? "" : ` implements ${typeRefs.join(", ")}`;
|
|
63
|
+
};
|
|
64
|
+
const declareTreeShakenClass = (context, options) => {
|
|
65
|
+
const { klass, className, heritage, body, implemented } = options;
|
|
66
|
+
const localName = localClassName(className);
|
|
67
|
+
appendInstallMixins(context, localName, implemented);
|
|
68
|
+
appendClassRegistrations(context, klass, localName);
|
|
69
|
+
const registrations = context.takeRegistrations();
|
|
70
|
+
declareFoldedClass({
|
|
71
|
+
context,
|
|
72
|
+
className,
|
|
73
|
+
doc: getDoc(klass),
|
|
74
|
+
owner: klass.name,
|
|
75
|
+
localDeclaration: `${classModifier(klass)}class ${localName}${heritage} {\n${body}\n}`,
|
|
76
|
+
registrations,
|
|
77
|
+
hasInstanceInterface: true,
|
|
78
|
+
});
|
|
49
79
|
};
|
|
50
80
|
const appendMemberDeclarations = (options) => {
|
|
51
81
|
const { context, klass, className, accessors, implemented } = options;
|
|
@@ -121,28 +151,43 @@ const appendInstanceMethods = (options) => {
|
|
|
121
151
|
claimedNames.add(rename ?? methodExportName(callable));
|
|
122
152
|
}
|
|
123
153
|
};
|
|
124
|
-
const appendInstallMixins = (context,
|
|
154
|
+
const appendInstallMixins = (context, targetName, implemented) => {
|
|
125
155
|
if (implemented.length === 0) {
|
|
126
156
|
return;
|
|
127
157
|
}
|
|
128
|
-
context.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
158
|
+
if (!context.isTreeShaken) {
|
|
159
|
+
context.addRuntimeImport("installMixins");
|
|
160
|
+
const makerRefs = implemented.map((ref) => ref.makerRef);
|
|
161
|
+
const localRefs = makerRefs.filter((ref) => !ref.includes("."));
|
|
162
|
+
context.module.appendRegistration(`installMixins(${targetName}, [${makerRefs.join(", ")}]);`, [
|
|
163
|
+
targetName,
|
|
164
|
+
...localRefs,
|
|
165
|
+
]);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const registered = implemented.filter((ref) => ref.interfaceKlass.glibGetType !== undefined);
|
|
169
|
+
const unregistered = implemented.filter((ref) => ref.interfaceKlass.glibGetType === undefined);
|
|
170
|
+
if (registered.length > 0) {
|
|
171
|
+
context.addRuntimeImport("installInterfaces");
|
|
172
|
+
const refs = registered.map((ref) => ref.typeRef);
|
|
173
|
+
context.collectRegistration(`installInterfaces(${targetName}, [${refs.join(", ")}]);`);
|
|
174
|
+
}
|
|
175
|
+
if (unregistered.length > 0) {
|
|
176
|
+
context.addRuntimeImport("installMixins");
|
|
177
|
+
const refs = unregistered.map((ref) => ref.makerRef);
|
|
178
|
+
context.collectRegistration(`installMixins(${targetName}, [${refs.join(", ")}]);`);
|
|
179
|
+
}
|
|
135
180
|
};
|
|
136
|
-
const appendClassRegistrations = (context, klass,
|
|
181
|
+
const appendClassRegistrations = (context, klass, targetName) => {
|
|
137
182
|
const gtypeExpr = renderSourceGtype(context, klass);
|
|
138
183
|
appendWrapperClassRegistration(context, {
|
|
139
|
-
className,
|
|
184
|
+
className: targetName,
|
|
140
185
|
gtypeExpr,
|
|
141
186
|
vfuncs: renderVfuncMetadata(context, klass),
|
|
142
187
|
});
|
|
143
|
-
appendClassStructRegistration(context, klass,
|
|
188
|
+
appendClassStructRegistration(context, klass, targetName, gtypeExpr);
|
|
144
189
|
};
|
|
145
|
-
const appendClassStructRegistration = (context, klass,
|
|
190
|
+
const appendClassStructRegistration = (context, klass, targetName, gtypeExpr) => {
|
|
146
191
|
const typeStruct = klass.glibTypeStruct;
|
|
147
192
|
if (gtypeExpr === undefined || typeStruct === undefined) {
|
|
148
193
|
return;
|
|
@@ -153,8 +198,8 @@ const appendClassStructRegistration = (context, klass, className, gtypeExpr) =>
|
|
|
153
198
|
}
|
|
154
199
|
const structName = sanitizeTypeIdentifier(resolved.value.name);
|
|
155
200
|
context.addRuntimeImport("registerClassStruct");
|
|
156
|
-
context.
|
|
157
|
-
|
|
201
|
+
context.collectRegistration(`registerClassStruct(${targetName}, ${structName});`, [
|
|
202
|
+
targetName,
|
|
158
203
|
structName,
|
|
159
204
|
]);
|
|
160
205
|
};
|
|
@@ -279,9 +324,11 @@ const renderExtendsClause = (context, parentExpression, klass, callables) => {
|
|
|
279
324
|
};
|
|
280
325
|
const resolveParent = (context, klass) => {
|
|
281
326
|
const parent = getParentRef(klass);
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
327
|
+
if (parent === undefined) {
|
|
328
|
+
return undefined;
|
|
329
|
+
}
|
|
330
|
+
const qualified = context.qualify(parent.namespaceName ?? context.namespace.name, sanitizeTypeIdentifier(parent.typeName));
|
|
331
|
+
return context.isTreeShaken ? context.hoistBaseRef(qualified) : qualified;
|
|
285
332
|
};
|
|
286
333
|
export { generateClass };
|
|
287
334
|
//# sourceMappingURL=class.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/store/gi/class.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n ancestorClassMethodNames,\n collectInheritedMethods,\n collectInheritedPropertyTypes,\n collectInterfaceMergeOmissions,\n conflictRename,\n type InheritedMethods,\n} from \"../../analysis/inheritance.js\";\nimport {\n areCallablesAssignable,\n type ClaimedMembers,\n claimInterfaceMembers,\n inheritedMembers,\n interfaceConflicts,\n omittedKeys,\n omittedTypeRef,\n} from \"../../analysis/interface-conflicts.js\";\nimport { ancestorChain, getParentRef, type ResolvedAncestor } from \"../../gir/ancestry.js\";\nimport { isEmittableEntity } from \"../../gir/emittable.js\";\nimport { indentMembers } from \"../../writer/emit.js\";\nimport {\n type Callables,\n dedupeCallables,\n generateBindings,\n type InstanceScope,\n instanceScope,\n renderClassInstanceMember,\n renderStaticHead,\n staticMembers,\n} from \"./callables.js\";\nimport { renderClassConstructor, renderConstructorPropsInterface } from \"./constructor-props.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { gtypeMemberDeclaration, renderSourceGtype } from \"./gtype-binding.js\";\nimport { methodExportName } from \"./method.js\";\nimport { renderPropertyDeclarations } from \"./properties.js\";\nimport { renderResolvedPropertyAccessor, resolveAccessor, type ResolvedAccessor } from \"./property-accessor.js\";\nimport { appendWrapperClassRegistration } from \"./registration.js\";\nimport { renderSignalDeclarations, renderSignalMembers } from \"./signal.js\";\nimport { renderVfuncMembers, renderVfuncMetadata } from \"./vtable.js\";\n\ntype ImplementedRef = {\n typeRef: string;\n makerRef: string;\n interfaceKlass: GirClass;\n interfaceNamespace: string;\n conflicts: string[];\n};\n\ntype MemberDeclarationsOptions = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n accessors: ResolvedAccessor[];\n implemented: ImplementedRef[];\n};\n\ntype ClassMembers = { members: string[]; accessors: ResolvedAccessor[] };\n\ntype ImplementedRefOptions = {\n context: ModuleContext;\n klass: GirClass;\n name: string;\n inherited: Set<string>;\n claimed: ClaimedMembers;\n};\n\ntype AppendInstanceMethodsOptions = {\n context: ModuleContext;\n methods: GirFunction[];\n scope: InstanceScope;\n inherited: InheritedMethods;\n members: string[];\n claimedNames: Set<string>;\n className: string;\n};\n\nconst generateClass = (context: ModuleContext, klass: GirClass): void => {\n if (!isEmittableEntity(klass)) {\n return;\n }\n\n const className = sanitizeTypeIdentifier(klass.name);\n\n const callables: Callables = {\n constructors: dedupeCallables(klass.constructors),\n functions: dedupeCallables(klass.functions),\n methods: dedupeCallables(klass.methods),\n };\n\n generateBindings(context, callables);\n const parentExpression = resolveParent(context, klass);\n const extendsClause = renderExtendsClause(context, parentExpression, klass, callables);\n const implemented = resolveImplementedRefs(context, klass);\n const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));\n const implementsClause = typeRefs.length === 0 ? \"\" : ` implements ${typeRefs.join(\", \")}`;\n const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);\n const body = indentMembers(members);\n const doc = getDoc(klass);\n const modifier = klass.isAbstract ? \"abstract \" : \"\";\n\n context.declare({\n name: className,\n code: `${doc}export ${modifier}class ${className}${extendsClause}${implementsClause} {\\n${body}\\n}`,\n owner: klass.name,\n });\n\n context.declare({\n name: `${className}ConstructorProps`,\n code: renderConstructorPropsInterface(context, klass, className),\n });\n\n appendMemberDeclarations({ context, klass, className, accessors, implemented });\n appendInstallMixins(context, className, implemented);\n appendClassRegistrations(context, klass, className);\n};\n\nconst appendMemberDeclarations = (options: MemberDeclarationsOptions): void => {\n const { context, klass, className, accessors, implemented } = options;\n\n for (const declaration of renderPropertyDeclarations(context, klass, className, accessors)) {\n context.declare(declaration);\n }\n\n for (const declaration of renderSignalDeclarations(context, klass, className, false)) {\n context.declare(declaration);\n }\n\n appendInterfaceMerge(context, klass, className, implemented);\n};\n\nconst appendInterfaceMerge = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n implemented: ImplementedRef[],\n): void => {\n if (implemented.length === 0) {\n return;\n }\n\n const mergeRefs = implemented.map((ref) => interfaceMergeRef(context, klass, ref));\n\n context.declare({\n name: className,\n code: `export interface ${className} extends ${mergeRefs.join(\", \")} {}`,\n });\n};\n\nconst renderClassMembers = (\n context: ModuleContext,\n klass: GirClass,\n callables: Callables,\n hasParent: boolean,\n): ClassMembers => {\n const className = sanitizeTypeIdentifier(klass.name);\n const members: string[] = [gtypeMemberDeclaration(context)];\n const constructorBlock = renderClassConstructor(context, klass, className, hasParent);\n\n if (constructorBlock !== undefined) {\n members.push(constructorBlock);\n }\n\n const claimedNames: Set<string> = new Set();\n members.push(...renderStaticHead(context, callables, className));\n const inherited = collectInheritedMethods(context, klass);\n const scope = instanceScope(className, callables);\n\n appendInstanceMethods({\n context,\n methods: callables.methods,\n scope,\n inherited,\n members,\n claimedNames,\n className,\n });\n\n members.push(...renderVfuncMembers({ context, klass, mode: \"implementation\" }));\n const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);\n const inheritedNames = ancestorClassMethodNames(context, klass);\n const accessors: ResolvedAccessor[] = [];\n\n for (const property of klass.properties) {\n const inheritedTypes = inheritedPropertyTypes.get(toCamelIdentifier(property.name));\n\n const accessor = resolveAccessor({\n context,\n property,\n claimedNames,\n inheritedTypes,\n inheritedNames,\n });\n\n if (accessor === undefined) {\n continue;\n }\n\n accessors.push(accessor);\n members.push(renderResolvedPropertyAccessor(context, property, accessor));\n }\n\n members.push(...renderSignalMembers(context, klass));\n\n return { members, accessors };\n};\n\nconst appendInstanceMethods = (options: AppendInstanceMethodsOptions): void => {\n const { context, methods, scope, inherited, members, claimedNames, className } = options;\n\n for (const callable of methods) {\n const rename = conflictRename(context, callable, inherited, className);\n const block = renderClassInstanceMember(context, callable, scope, rename);\n\n if (block === undefined) {\n continue;\n }\n\n members.push(block);\n claimedNames.add(rename ?? methodExportName(callable));\n }\n};\n\nconst appendInstallMixins = (context: ModuleContext, className: string, implemented: ImplementedRef[]): void => {\n if (implemented.length === 0) {\n return;\n }\n\n context.addRuntimeImport(\"installMixins\");\n const makerRefs = implemented.map((ref) => ref.makerRef);\n const localRefs = makerRefs.filter((ref) => !ref.includes(\".\"));\n\n context.module.appendRegistration(`installMixins(${className}, [${makerRefs.join(\", \")}]);`, [\n className,\n ...localRefs,\n ]);\n};\n\nconst appendClassRegistrations = (context: ModuleContext, klass: GirClass, className: string): void => {\n const gtypeExpr = renderSourceGtype(context, klass);\n\n appendWrapperClassRegistration(context, {\n className,\n gtypeExpr,\n vfuncs: renderVfuncMetadata(context, klass),\n });\n\n appendClassStructRegistration(context, klass, className, gtypeExpr);\n};\n\nconst appendClassStructRegistration = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n gtypeExpr: string | undefined,\n): void => {\n const typeStruct = klass.glibTypeStruct;\n\n if (gtypeExpr === undefined || typeStruct === undefined) {\n return;\n }\n\n const resolved = context.library.resolveType(context.namespace.name, typeStruct);\n\n if (resolved?.kind !== \"record\" || !isEmittableEntity(resolved.value)) {\n return;\n }\n\n const structName = sanitizeTypeIdentifier(resolved.value.name);\n context.addRuntimeImport(\"registerClassStruct\");\n\n context.module.appendRegistration(`registerClassStruct(${className}, ${structName});`, [\n className,\n structName,\n ]);\n};\n\nconst addAncestorInterfaceKeys = (context: ModuleContext, ancestor: ResolvedAncestor, keys: Set<string>): void => {\n for (const name of ancestor.klass.implements) {\n const resolved = context.library.resolveType(ancestor.namespaceName, name);\n\n if (resolved?.kind === \"interface\") {\n keys.add(`${resolved.namespace.name}.${resolved.value.name}`);\n }\n }\n};\n\nconst inheritedInterfaceKeys = (context: ModuleContext, klass: GirClass): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const parent = context.library.resolveType(context.namespace.name, klass.parent);\n\n if (parent?.kind !== \"class\") {\n return keys;\n }\n\n for (const ancestor of ancestorChain(context.library, parent.value, parent.namespace.name)) {\n addAncestorInterfaceKeys(context, ancestor, keys);\n }\n\n return keys;\n};\n\nconst interfaceMergeRef = (context: ModuleContext, klass: GirClass, ref: ImplementedRef): string => {\n const omissions = collectInterfaceMergeOmissions(context, klass, {\n klass: ref.interfaceKlass,\n namespaceName: ref.interfaceNamespace,\n });\n\n return omittedTypeRef(ref.typeRef, [...omissions, ...ref.conflicts]);\n};\n\nconst implementedRefFor = (options: ImplementedRefOptions): ImplementedRef | undefined => {\n const { context, klass, name, inherited } = options;\n const resolved = context.library.resolveType(context.namespace.name, name);\n\n if (resolved?.kind !== \"interface\" || !isEmittableEntity(resolved.value)) {\n return undefined;\n }\n\n if (inherited.has(`${resolved.namespace.name}.${resolved.value.name}`)) {\n return undefined;\n }\n\n const typeName = sanitizeTypeIdentifier(resolved.value.name);\n\n const conflictOptions = {\n context,\n klass,\n iface: resolved.value,\n ifaceNamespace: resolved.namespace.name,\n };\n\n const conflicts = interfaceConflicts(conflictOptions, options.claimed);\n claimInterfaceMembers(conflictOptions, options.claimed);\n\n return {\n typeRef: context.qualify(resolved.namespace.name, typeName),\n makerRef: context.qualify(resolved.namespace.name, `make${typeName}`),\n interfaceKlass: resolved.value,\n interfaceNamespace: resolved.namespace.name,\n conflicts,\n };\n};\n\nconst resolveImplementedRefs = (context: ModuleContext, klass: GirClass): ImplementedRef[] => {\n const inherited = inheritedInterfaceKeys(context, klass);\n const claimed = inheritedMembers(context, klass);\n const refs: ImplementedRef[] = [];\n\n for (const name of klass.implements) {\n const ref = implementedRefFor({ context, klass, name, inherited, claimed });\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst classCallables = (klass: GirClass): Callables => ({\n constructors: klass.constructors,\n functions: klass.functions,\n methods: klass.methods,\n});\n\nconst resolveParentClass = (context: ModuleContext, klass: GirClass): ResolvedAncestor | undefined => {\n const parent = getParentRef(klass);\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = context.library.resolveType(parent.namespaceName ?? context.namespace.name, parent.typeName);\n\n return resolved?.kind === \"class\" ? { klass: resolved.value, namespaceName: resolved.namespace.name } : undefined;\n};\n\nconst addAncestorStatics = (context: ModuleContext, klass: GirClass, table: Map<string, GirFunction>): void => {\n const members = staticMembers(context, classCallables(klass));\n\n for (const member of members) {\n if (!table.has(member.name)) {\n table.set(member.name, member.callable);\n }\n }\n};\n\nconst inheritedStatics = (context: ModuleContext, klass: GirClass): Map<string, GirFunction> => {\n const table: Map<string, GirFunction> = new Map();\n const parent = resolveParentClass(context, klass);\n\n if (parent === undefined) {\n return table;\n }\n\n for (const ancestor of ancestorChain(context.library, parent.klass, parent.namespaceName)) {\n addAncestorStatics(context, ancestor.klass, table);\n }\n\n return table;\n};\n\nconst shadowedStaticNames = (context: ModuleContext, klass: GirClass, callables: Callables): string[] => {\n const inherited = inheritedStatics(context, klass);\n\n return staticMembers(context, callables)\n .filter((member) => {\n const shadowed = inherited.get(member.name);\n\n return shadowed !== undefined && !areCallablesAssignable(context.library, member.callable, shadowed);\n })\n .map((member) => member.name);\n};\n\nconst renderExtendsClause = (\n context: ModuleContext,\n parentExpression: string | undefined,\n klass: GirClass,\n callables: Callables,\n): string => {\n if (parentExpression === undefined) {\n return \"\";\n }\n\n const staticNames = shadowedStaticNames(context, klass, callables);\n\n if (staticNames.length === 0) {\n return ` extends ${parentExpression}`;\n }\n\n context.addRuntimeTypeImport(\"StaticBase\");\n\n return ` extends (${parentExpression} as StaticBase<typeof ${parentExpression}, ${omittedKeys(staticNames)}>)`;\n};\n\nconst resolveParent = (context: ModuleContext, klass: GirClass): string | undefined => {\n const parent = getParentRef(klass);\n\n return parent === undefined\n ? undefined\n : context.qualify(parent.namespaceName ?? context.namespace.name, sanitizeTypeIdentifier(parent.typeName));\n};\n\nexport { generateClass };\n"]}
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/store/gi/class.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport {\n ancestorClassMethodNames,\n collectInheritedMethods,\n collectInheritedPropertyTypes,\n collectInterfaceMergeOmissions,\n conflictRename,\n type InheritedMethods,\n} from \"../../analysis/inheritance.js\";\nimport {\n areCallablesAssignable,\n type ClaimedMembers,\n claimInterfaceMembers,\n inheritedMembers,\n interfaceConflicts,\n omittedKeys,\n omittedTypeRef,\n} from \"../../analysis/interface-conflicts.js\";\nimport { ancestorChain, getParentRef, type ResolvedAncestor } from \"../../gir/ancestry.js\";\nimport { isEmittableEntity } from \"../../gir/emittable.js\";\nimport { indentMembers } from \"../../writer/emit.js\";\nimport {\n type Callables,\n dedupeCallables,\n generateBindings,\n type InstanceScope,\n instanceScope,\n renderClassInstanceMember,\n renderStaticHead,\n staticMembers,\n} from \"./callables.js\";\nimport { renderClassConstructor, renderConstructorPropsInterface } from \"./constructor-props.js\";\nimport { getDoc } from \"./doc-spec.js\";\nimport { declareFoldedClass, localClassName } from \"./folded.js\";\nimport { gtypeMemberDeclaration, renderSourceGtype } from \"./gtype-binding.js\";\nimport { methodExportName } from \"./method.js\";\nimport { renderPropertyDeclarations } from \"./properties.js\";\nimport { renderResolvedPropertyAccessor, resolveAccessor, type ResolvedAccessor } from \"./property-accessor.js\";\nimport { appendWrapperClassRegistration } from \"./registration.js\";\nimport { renderSignalDeclarations, renderSignalMembers } from \"./signal.js\";\nimport { renderVfuncMembers, renderVfuncMetadata } from \"./vtable.js\";\n\ntype ImplementedRef = {\n typeRef: string;\n makerRef: string;\n interfaceKlass: GirClass;\n interfaceNamespace: string;\n conflicts: string[];\n};\n\ntype MemberDeclarationsOptions = {\n context: ModuleContext;\n klass: GirClass;\n className: string;\n accessors: ResolvedAccessor[];\n implemented: ImplementedRef[];\n};\n\ntype ClassMembers = { members: string[]; accessors: ResolvedAccessor[] };\n\ntype ImplementedRefOptions = {\n context: ModuleContext;\n klass: GirClass;\n name: string;\n inherited: Set<string>;\n claimed: ClaimedMembers;\n};\n\ntype AppendInstanceMethodsOptions = {\n context: ModuleContext;\n methods: GirFunction[];\n scope: InstanceScope;\n inherited: InheritedMethods;\n members: string[];\n claimedNames: Set<string>;\n className: string;\n};\n\ntype TreeShakenClassOptions = {\n klass: GirClass;\n className: string;\n heritage: string;\n body: string;\n implemented: ImplementedRef[];\n};\n\nconst generateClass = (context: ModuleContext, klass: GirClass): void => {\n if (!isEmittableEntity(klass)) {\n return;\n }\n\n const className = sanitizeTypeIdentifier(klass.name);\n\n const callables: Callables = {\n constructors: dedupeCallables(klass.constructors),\n functions: dedupeCallables(klass.functions),\n methods: dedupeCallables(klass.methods),\n };\n\n generateBindings(context, callables);\n const parentExpression = resolveParent(context, klass);\n const extendsClause = renderExtendsClause(context, parentExpression, klass, callables);\n const implemented = resolveImplementedRefs(context, klass);\n const implementsClause = renderImplementsClause(implemented);\n\n if (context.isTreeShaken) {\n context.beginRegistrations();\n }\n\n const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);\n const body = indentMembers(members);\n const heritage = `${extendsClause}${implementsClause}`;\n\n if (context.isTreeShaken) {\n declareTreeShakenClass(context, { klass, className, heritage, body, implemented });\n } else {\n context.declare({\n name: className,\n code: `${getDoc(klass)}export ${classModifier(klass)}class ${className}${heritage} {\\n${body}\\n}`,\n owner: klass.name,\n });\n }\n\n context.declare({\n name: `${className}ConstructorProps`,\n code: renderConstructorPropsInterface(context, klass, className),\n });\n\n appendMemberDeclarations({ context, klass, className, accessors, implemented });\n\n if (!context.isTreeShaken) {\n appendInstallMixins(context, className, implemented);\n appendClassRegistrations(context, klass, className);\n }\n};\n\nconst classModifier = (klass: GirClass): string => (klass.isAbstract ? \"abstract \" : \"\");\n\nconst renderImplementsClause = (implemented: ImplementedRef[]): string => {\n const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));\n\n return typeRefs.length === 0 ? \"\" : ` implements ${typeRefs.join(\", \")}`;\n};\n\nconst declareTreeShakenClass = (context: ModuleContext, options: TreeShakenClassOptions): void => {\n const { klass, className, heritage, body, implemented } = options;\n const localName = localClassName(className);\n appendInstallMixins(context, localName, implemented);\n appendClassRegistrations(context, klass, localName);\n const registrations = context.takeRegistrations();\n\n declareFoldedClass({\n context,\n className,\n doc: getDoc(klass),\n owner: klass.name,\n localDeclaration: `${classModifier(klass)}class ${localName}${heritage} {\\n${body}\\n}`,\n registrations,\n hasInstanceInterface: true,\n });\n};\n\nconst appendMemberDeclarations = (options: MemberDeclarationsOptions): void => {\n const { context, klass, className, accessors, implemented } = options;\n\n for (const declaration of renderPropertyDeclarations(context, klass, className, accessors)) {\n context.declare(declaration);\n }\n\n for (const declaration of renderSignalDeclarations(context, klass, className, false)) {\n context.declare(declaration);\n }\n\n appendInterfaceMerge(context, klass, className, implemented);\n};\n\nconst appendInterfaceMerge = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n implemented: ImplementedRef[],\n): void => {\n if (implemented.length === 0) {\n return;\n }\n\n const mergeRefs = implemented.map((ref) => interfaceMergeRef(context, klass, ref));\n\n context.declare({\n name: className,\n code: `export interface ${className} extends ${mergeRefs.join(\", \")} {}`,\n });\n};\n\nconst renderClassMembers = (\n context: ModuleContext,\n klass: GirClass,\n callables: Callables,\n hasParent: boolean,\n): ClassMembers => {\n const className = sanitizeTypeIdentifier(klass.name);\n const members: string[] = [gtypeMemberDeclaration(context)];\n const constructorBlock = renderClassConstructor(context, klass, className, hasParent);\n\n if (constructorBlock !== undefined) {\n members.push(constructorBlock);\n }\n\n const claimedNames: Set<string> = new Set();\n members.push(...renderStaticHead(context, callables, className));\n const inherited = collectInheritedMethods(context, klass);\n const scope = instanceScope(className, callables);\n\n appendInstanceMethods({\n context,\n methods: callables.methods,\n scope,\n inherited,\n members,\n claimedNames,\n className,\n });\n\n members.push(...renderVfuncMembers({ context, klass, mode: \"implementation\" }));\n const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);\n const inheritedNames = ancestorClassMethodNames(context, klass);\n const accessors: ResolvedAccessor[] = [];\n\n for (const property of klass.properties) {\n const inheritedTypes = inheritedPropertyTypes.get(toCamelIdentifier(property.name));\n\n const accessor = resolveAccessor({\n context,\n property,\n claimedNames,\n inheritedTypes,\n inheritedNames,\n });\n\n if (accessor === undefined) {\n continue;\n }\n\n accessors.push(accessor);\n members.push(renderResolvedPropertyAccessor(context, property, accessor));\n }\n\n members.push(...renderSignalMembers(context, klass));\n\n return { members, accessors };\n};\n\nconst appendInstanceMethods = (options: AppendInstanceMethodsOptions): void => {\n const { context, methods, scope, inherited, members, claimedNames, className } = options;\n\n for (const callable of methods) {\n const rename = conflictRename(context, callable, inherited, className);\n const block = renderClassInstanceMember(context, callable, scope, rename);\n\n if (block === undefined) {\n continue;\n }\n\n members.push(block);\n claimedNames.add(rename ?? methodExportName(callable));\n }\n};\n\nconst appendInstallMixins = (context: ModuleContext, targetName: string, implemented: ImplementedRef[]): void => {\n if (implemented.length === 0) {\n return;\n }\n\n if (!context.isTreeShaken) {\n context.addRuntimeImport(\"installMixins\");\n const makerRefs = implemented.map((ref) => ref.makerRef);\n const localRefs = makerRefs.filter((ref) => !ref.includes(\".\"));\n\n context.module.appendRegistration(`installMixins(${targetName}, [${makerRefs.join(\", \")}]);`, [\n targetName,\n ...localRefs,\n ]);\n\n return;\n }\n\n const registered = implemented.filter((ref) => ref.interfaceKlass.glibGetType !== undefined);\n const unregistered = implemented.filter((ref) => ref.interfaceKlass.glibGetType === undefined);\n\n if (registered.length > 0) {\n context.addRuntimeImport(\"installInterfaces\");\n const refs = registered.map((ref) => ref.typeRef);\n context.collectRegistration(`installInterfaces(${targetName}, [${refs.join(\", \")}]);`);\n }\n\n if (unregistered.length > 0) {\n context.addRuntimeImport(\"installMixins\");\n const refs = unregistered.map((ref) => ref.makerRef);\n context.collectRegistration(`installMixins(${targetName}, [${refs.join(\", \")}]);`);\n }\n};\n\nconst appendClassRegistrations = (context: ModuleContext, klass: GirClass, targetName: string): void => {\n const gtypeExpr = renderSourceGtype(context, klass);\n\n appendWrapperClassRegistration(context, {\n className: targetName,\n gtypeExpr,\n vfuncs: renderVfuncMetadata(context, klass),\n });\n\n appendClassStructRegistration(context, klass, targetName, gtypeExpr);\n};\n\nconst appendClassStructRegistration = (\n context: ModuleContext,\n klass: GirClass,\n targetName: string,\n gtypeExpr: string | undefined,\n): void => {\n const typeStruct = klass.glibTypeStruct;\n\n if (gtypeExpr === undefined || typeStruct === undefined) {\n return;\n }\n\n const resolved = context.library.resolveType(context.namespace.name, typeStruct);\n\n if (resolved?.kind !== \"record\" || !isEmittableEntity(resolved.value)) {\n return;\n }\n\n const structName = sanitizeTypeIdentifier(resolved.value.name);\n context.addRuntimeImport(\"registerClassStruct\");\n\n context.collectRegistration(`registerClassStruct(${targetName}, ${structName});`, [\n targetName,\n structName,\n ]);\n};\n\nconst addAncestorInterfaceKeys = (context: ModuleContext, ancestor: ResolvedAncestor, keys: Set<string>): void => {\n for (const name of ancestor.klass.implements) {\n const resolved = context.library.resolveType(ancestor.namespaceName, name);\n\n if (resolved?.kind === \"interface\") {\n keys.add(`${resolved.namespace.name}.${resolved.value.name}`);\n }\n }\n};\n\nconst inheritedInterfaceKeys = (context: ModuleContext, klass: GirClass): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const parent = context.library.resolveType(context.namespace.name, klass.parent);\n\n if (parent?.kind !== \"class\") {\n return keys;\n }\n\n for (const ancestor of ancestorChain(context.library, parent.value, parent.namespace.name)) {\n addAncestorInterfaceKeys(context, ancestor, keys);\n }\n\n return keys;\n};\n\nconst interfaceMergeRef = (context: ModuleContext, klass: GirClass, ref: ImplementedRef): string => {\n const omissions = collectInterfaceMergeOmissions(context, klass, {\n klass: ref.interfaceKlass,\n namespaceName: ref.interfaceNamespace,\n });\n\n return omittedTypeRef(ref.typeRef, [...omissions, ...ref.conflicts]);\n};\n\nconst implementedRefFor = (options: ImplementedRefOptions): ImplementedRef | undefined => {\n const { context, klass, name, inherited } = options;\n const resolved = context.library.resolveType(context.namespace.name, name);\n\n if (resolved?.kind !== \"interface\" || !isEmittableEntity(resolved.value)) {\n return undefined;\n }\n\n if (inherited.has(`${resolved.namespace.name}.${resolved.value.name}`)) {\n return undefined;\n }\n\n const typeName = sanitizeTypeIdentifier(resolved.value.name);\n\n const conflictOptions = {\n context,\n klass,\n iface: resolved.value,\n ifaceNamespace: resolved.namespace.name,\n };\n\n const conflicts = interfaceConflicts(conflictOptions, options.claimed);\n claimInterfaceMembers(conflictOptions, options.claimed);\n\n return {\n typeRef: context.qualify(resolved.namespace.name, typeName),\n makerRef: context.qualify(resolved.namespace.name, `make${typeName}`),\n interfaceKlass: resolved.value,\n interfaceNamespace: resolved.namespace.name,\n conflicts,\n };\n};\n\nconst resolveImplementedRefs = (context: ModuleContext, klass: GirClass): ImplementedRef[] => {\n const inherited = inheritedInterfaceKeys(context, klass);\n const claimed = inheritedMembers(context, klass);\n const refs: ImplementedRef[] = [];\n\n for (const name of klass.implements) {\n const ref = implementedRefFor({ context, klass, name, inherited, claimed });\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst classCallables = (klass: GirClass): Callables => ({\n constructors: klass.constructors,\n functions: klass.functions,\n methods: klass.methods,\n});\n\nconst resolveParentClass = (context: ModuleContext, klass: GirClass): ResolvedAncestor | undefined => {\n const parent = getParentRef(klass);\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = context.library.resolveType(parent.namespaceName ?? context.namespace.name, parent.typeName);\n\n return resolved?.kind === \"class\" ? { klass: resolved.value, namespaceName: resolved.namespace.name } : undefined;\n};\n\nconst addAncestorStatics = (context: ModuleContext, klass: GirClass, table: Map<string, GirFunction>): void => {\n const members = staticMembers(context, classCallables(klass));\n\n for (const member of members) {\n if (!table.has(member.name)) {\n table.set(member.name, member.callable);\n }\n }\n};\n\nconst inheritedStatics = (context: ModuleContext, klass: GirClass): Map<string, GirFunction> => {\n const table: Map<string, GirFunction> = new Map();\n const parent = resolveParentClass(context, klass);\n\n if (parent === undefined) {\n return table;\n }\n\n for (const ancestor of ancestorChain(context.library, parent.klass, parent.namespaceName)) {\n addAncestorStatics(context, ancestor.klass, table);\n }\n\n return table;\n};\n\nconst shadowedStaticNames = (context: ModuleContext, klass: GirClass, callables: Callables): string[] => {\n const inherited = inheritedStatics(context, klass);\n\n return staticMembers(context, callables)\n .filter((member) => {\n const shadowed = inherited.get(member.name);\n\n return shadowed !== undefined && !areCallablesAssignable(context.library, member.callable, shadowed);\n })\n .map((member) => member.name);\n};\n\nconst renderExtendsClause = (\n context: ModuleContext,\n parentExpression: string | undefined,\n klass: GirClass,\n callables: Callables,\n): string => {\n if (parentExpression === undefined) {\n return \"\";\n }\n\n const staticNames = shadowedStaticNames(context, klass, callables);\n\n if (staticNames.length === 0) {\n return ` extends ${parentExpression}`;\n }\n\n context.addRuntimeTypeImport(\"StaticBase\");\n\n return ` extends (${parentExpression} as StaticBase<typeof ${parentExpression}, ${omittedKeys(staticNames)}>)`;\n};\n\nconst resolveParent = (context: ModuleContext, klass: GirClass): string | undefined => {\n const parent = getParentRef(klass);\n\n if (parent === undefined) {\n return undefined;\n }\n\n const qualified = context.qualify(\n parent.namespaceName ?? context.namespace.name,\n sanitizeTypeIdentifier(parent.typeName),\n );\n\n return context.isTreeShaken ? context.hoistBaseRef(qualified) : qualified;\n};\n\nexport { generateClass };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructor-props.d.ts","sourceRoot":"","sources":["../../../src/store/gi/constructor-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAwC7D,QAAA,MAAM,+BAA+B,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,EAAE,WAAW,MAAM,KAAG,MAWrG,CAAC;AAEF,QAAA,MAAM,sBAAsB,GACxB,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,WAAW,OAAO,KACnB,MAAM,GAAG,SAYX,CAAC;
|
|
1
|
+
{"version":3,"file":"constructor-props.d.ts","sourceRoot":"","sources":["../../../src/store/gi/constructor-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAwC7D,QAAA,MAAM,+BAA+B,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,EAAE,WAAW,MAAM,KAAG,MAWrG,CAAC;AAEF,QAAA,MAAM,sBAAsB,GACxB,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,WAAW,MAAM,EACjB,WAAW,OAAO,KACnB,MAAM,GAAG,SAYX,CAAC;AAgCF,OAAO,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -62,7 +62,8 @@ const renderTranslatingConstructor = (context, props, className) => {
|
|
|
62
62
|
context.addRuntimeImport("t");
|
|
63
63
|
context.addRuntimeImport("registerConstructProperties");
|
|
64
64
|
const bindings = renderConstructBindings(context, props);
|
|
65
|
-
context.
|
|
65
|
+
const target = context.isTreeShaken ? `_${className}` : className;
|
|
66
|
+
context.collectRegistration(`registerConstructProperties(${target}, ${bindings});`, [className]);
|
|
66
67
|
return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, "super(props);");
|
|
67
68
|
};
|
|
68
69
|
export { renderConstructorPropsInterface, renderClassConstructor };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructor-props.js","sourceRoot":"","sources":["../../../src/store/gi/constructor-props.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"constructor-props.js","sourceRoot":"","sources":["../../../src/store/gi/constructor-props.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral, toCamelIdentifier, uniqBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { renderDescriptor } from \"../../analysis/descriptor-render.js\";\nimport { collectInterfaceProperties } from \"../../analysis/inheritance.js\";\nimport { renderTsType } from \"../../analysis/ts-type.js\";\nimport { ancestorChain } from \"../../gir/ancestry.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport { renderBlock, renderBraced, renderBracedOrEmpty } from \"../../writer/emit.js\";\nimport { parentCompanionRef } from \"./companion.js\";\nimport { propertyDoc } from \"./property-accessor.js\";\n\nconst constructablePropNames = (klass: GirClass): string[] =>\n klass.properties.filter(isConstructableProperty).map((property) => toCamelIdentifier(property.name));\n\nconst ancestorConstructablePropNames = (context: ModuleContext, klass: GirClass): Set<string> => {\n const names: Set<string> = new Set();\n\n for (const { klass: ancestor } of ancestorChain(context.library, klass, context.namespace.name)) {\n if (ancestor === klass) {\n continue;\n }\n\n for (const name of constructablePropNames(ancestor)) {\n names.add(name);\n }\n }\n\n return names;\n};\n\nconst collectConstructableProps = (context: ModuleContext, klass: GirClass): GirProperty[] => {\n const inherited = ancestorConstructablePropNames(context, klass);\n\n return uniqBy(\n [...klass.properties, ...collectInterfaceProperties(context, klass).map((entry) => entry.property)]\n .filter(isConstructableProperty)\n .filter((property) => !inherited.has(toCamelIdentifier(property.name))),\n (property) => toCamelIdentifier(property.name),\n );\n};\n\nconst renderConstructorPropsInterface = (context: ModuleContext, klass: GirClass, className: string): string => {\n const parentRef = parentCompanionRef(context, klass, \"ConstructorProps\");\n const extendsClause = parentRef === undefined ? \"\" : ` extends ${parentRef}`;\n\n const lines = collectConstructableProps(context, klass).map(\n (property) =>\n `${propertyDoc(property)}${toCamelIdentifier(property.name)}?: ` +\n `${renderTsType(context, property.type, true)} | undefined;`,\n );\n\n return renderBracedOrEmpty(`export interface ${className}ConstructorProps${extendsClause}`, lines.join(\"\\n\"));\n};\n\nconst renderClassConstructor = (\n context: ModuleContext,\n klass: GirClass,\n className: string,\n hasParent: boolean,\n): string | undefined => {\n if (!hasParent) {\n return renderRootConstructor(context);\n }\n\n const props = collectConstructableProps(context, klass);\n\n if (props.length === 0) {\n return undefined;\n }\n\n return renderTranslatingConstructor(context, props, className);\n};\n\nconst renderRootConstructor = (context: ModuleContext): string => {\n context.addRuntimeTypeImport(\"AnyClass\");\n context.addRuntimeImport(\"getClassType\");\n context.addRuntimeImport(\"newObjectWithProperties\");\n const body = \"return newObjectWithProperties(getClassType(this.constructor as AnyClass), props, this);\";\n\n return renderBlock(\"constructor(props: object = {})\", body);\n};\n\nconst renderConstructBindings = (context: ModuleContext, props: GirProperty[]): string => {\n const entries = props.map((property) => {\n const descriptor = renderDescriptor(context, property.type, property.transferOwnership);\n const key = sourceStringLiteral(toCamelIdentifier(property.name));\n\n return `${key}: [${sourceStringLiteral(property.name)}, ${descriptor}],`;\n });\n\n return renderBraced(entries.join(\"\\n\"));\n};\n\nconst renderTranslatingConstructor = (context: ModuleContext, props: GirProperty[], className: string): string => {\n context.addRuntimeImport(\"t\");\n context.addRuntimeImport(\"registerConstructProperties\");\n const bindings = renderConstructBindings(context, props);\n const target = context.isTreeShaken ? `_${className}` : className;\n context.collectRegistration(`registerConstructProperties(${target}, ${bindings});`, [className]);\n\n return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, \"super(props);\");\n};\n\nexport { renderConstructorPropsInterface, renderClassConstructor };\n"]}
|
package/dist/store/gi/enum.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { escapeIdentifierStart, sanitizeTypeIdentifier, sourceStringLiteral, uniqBy } from "@gtkx/utils";
|
|
2
2
|
import { hasAnnotations } from "../../gir/annotations.js";
|
|
3
3
|
import { isEmittableEntity } from "../../gir/emittable.js";
|
|
4
|
-
import { indent } from "../../writer/emit.js";
|
|
4
|
+
import { indent, pure } from "../../writer/emit.js";
|
|
5
5
|
import { getDoc } from "./doc-spec.js";
|
|
6
6
|
const memberDoc = (member) => getDoc(member);
|
|
7
7
|
const enumDoc = (enumeration) => getDoc(enumeration);
|
|
@@ -33,10 +33,10 @@ const appendErrorDomain = (context, enumeration, members, errorDomain) => {
|
|
|
33
33
|
code: `${doc}export type ${name} = number;`,
|
|
34
34
|
owner: enumeration.name,
|
|
35
35
|
});
|
|
36
|
+
const domain = pure(`createErrorDomain(${quarkExpression}, { ${memberEntries.join(", ")} })`);
|
|
36
37
|
context.declare({
|
|
37
38
|
name,
|
|
38
|
-
code: `${doc}export const ${name}: ErrorDomain<${shape}> =
|
|
39
|
-
`createErrorDomain(${quarkExpression}, { ${memberEntries.join(", ")} });`,
|
|
39
|
+
code: `${doc}export const ${name}: ErrorDomain<${shape}> = ${domain};`,
|
|
40
40
|
});
|
|
41
41
|
};
|
|
42
42
|
const isMemberDocumented = (member) => member.doc !== undefined || hasAnnotations(member.annotations);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/store/gi/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGzG,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/store/gi/enum.ts"],"names":[],"mappings":"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","sourcesContent":["import { escapeIdentifierStart, sanitizeTypeIdentifier, sourceStringLiteral, uniqBy } from \"@gtkx/utils\";\nimport type { EnumMember, GirEnum } from \"../../gir/enum.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { hasAnnotations } from \"../../gir/annotations.js\";\nimport { isEmittableEntity } from \"../../gir/emittable.js\";\nimport { indent, pure } from \"../../writer/emit.js\";\nimport { getDoc } from \"./doc-spec.js\";\n\ntype KeyedMember = EnumMember & { key: string };\n\nconst memberDoc = (member: KeyedMember): string =>\n getDoc(member);\n\nconst enumDoc = (enumeration: GirEnum): string =>\n getDoc(enumeration);\n\nconst generateEnum = (context: ModuleContext, enumeration: GirEnum): void => {\n if (!isEmittableEntity(enumeration)) {\n return;\n }\n\n const members = uniqBy(\n enumeration.members\n .map((member) => ({ ...member, key: enumMemberKey(member.name) }))\n .filter((member) => member.key.length > 0),\n (member) => member.key,\n );\n\n const errorDomain = enumeration.errorDomain;\n\n if (errorDomain !== undefined) {\n appendErrorDomain(context, enumeration, members, errorDomain);\n\n return;\n }\n\n appendEnumDeclaration(context, enumeration, members);\n};\n\nconst appendErrorDomain = (\n context: ModuleContext,\n enumeration: GirEnum,\n members: KeyedMember[],\n errorDomain: string,\n): void => {\n const memberEntries = members.map((member) => `${member.key}: ${member.value}`);\n const typeFields = members.map((member) => `${memberDoc(member)}${member.key}: number;`);\n context.addRuntimeImport(\"createErrorDomain\");\n context.addRuntimeImport(\"ErrorDomain\");\n const quarkExpression = renderQuarkExpression(context, errorDomain);\n const doc = enumDoc(enumeration);\n const shape = typeFields.length === 0 ? \"{}\" : `{\\n${indent(typeFields.join(\"\\n\"), 1)}\\n}`;\n const name = sanitizeTypeIdentifier(enumeration.name);\n\n context.declare({\n name,\n code: `${doc}export type ${name} = number;`,\n owner: enumeration.name,\n });\n\n const domain = pure(`createErrorDomain(${quarkExpression}, { ${memberEntries.join(\", \")} })`);\n\n context.declare({\n name,\n code: `${doc}export const ${name}: ErrorDomain<${shape}> = ${domain};`,\n });\n};\n\nconst isMemberDocumented = (member: KeyedMember): boolean =>\n member.doc !== undefined || hasAnnotations(member.annotations);\n\nconst appendEnumDeclaration = (context: ModuleContext, enumeration: GirEnum, members: KeyedMember[]): void => {\n const doc = enumDoc(enumeration);\n const name = sanitizeTypeIdentifier(enumeration.name);\n\n if (members.some((member) => isMemberDocumented(member))) {\n const blocks = members.map((member) => `${memberDoc(member)}${member.key} = ${member.value},`);\n\n context.declare({\n name,\n code: `${doc}export enum ${name} {\\n${indent(blocks.join(\"\\n\"), 1)}\\n}`,\n owner: enumeration.name,\n });\n\n return;\n }\n\n const declarations = members.map((member) => `${member.key} = ${member.value}`);\n\n context.declare({\n name,\n code: `${doc}export enum ${name} { ${declarations.join(\", \")} }`,\n owner: enumeration.name,\n });\n};\n\nconst enumMemberKey = (name: string): string => escapeIdentifierStart(name.toUpperCase().replaceAll(\"-\", \"_\"));\n\nconst renderQuarkExpression = (context: ModuleContext, errorDomain: string): string => {\n if (context.namespace.name === \"GLib\") {\n return `() => quarkFromString(${sourceStringLiteral(errorDomain)})`;\n }\n\n const alias = context.addCrossNamespaceImport(\"GLib\");\n\n return `() => ${alias}.quarkFromString(${sourceStringLiteral(errorDomain)})`;\n};\n\nexport { generateEnum, enumMemberKey };\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ModuleContext } from "../../writer/context.js";
|
|
2
|
+
type FoldedClassOptions = {
|
|
3
|
+
context: ModuleContext;
|
|
4
|
+
className: string;
|
|
5
|
+
doc: string;
|
|
6
|
+
owner: string;
|
|
7
|
+
localDeclaration: string;
|
|
8
|
+
registrations: string[];
|
|
9
|
+
hasInstanceInterface: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const localClassName: (className: string) => string;
|
|
12
|
+
declare const declareFoldedClass: (options: FoldedClassOptions) => void;
|
|
13
|
+
export { declareFoldedClass, localClassName };
|
|
14
|
+
//# sourceMappingURL=folded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folded.d.ts","sourceRoot":"","sources":["../../../src/store/gi/folded.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,KAAK,kBAAkB,GAAG;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,MAAyB,CAAC;AAMtE,QAAA,MAAM,kBAAkB,GAAI,SAAS,kBAAkB,KAAG,IAkCzD,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { sourceStringLiteral } from "@gtkx/utils";
|
|
2
|
+
import { indent } from "../../writer/emit.js";
|
|
3
|
+
const localClassName = (className) => `_${className}`;
|
|
4
|
+
const renderNameStatement = (className) => `globalThis.Object.defineProperty(${localClassName(className)}, "name", ` +
|
|
5
|
+
`{ value: ${sourceStringLiteral(className)}, configurable: true });`;
|
|
6
|
+
const declareFoldedClass = (options) => {
|
|
7
|
+
const { context, className, doc, owner, localDeclaration, registrations, hasInstanceInterface } = options;
|
|
8
|
+
const localName = localClassName(className);
|
|
9
|
+
context.module.appendDeclaration({ name: localName, code: localDeclaration, isLocal: true });
|
|
10
|
+
const body = [renderNameStatement(className), ...registrations, `return ${localName};`]
|
|
11
|
+
.map((statement) => indent(statement, 1))
|
|
12
|
+
.join("\n");
|
|
13
|
+
if (!hasInstanceInterface) {
|
|
14
|
+
context.declare({
|
|
15
|
+
name: className,
|
|
16
|
+
code: `${doc}export const ${className}: typeof ${localName} = /* @__PURE__ */ (() => {\n${body}\n})();`,
|
|
17
|
+
owner,
|
|
18
|
+
});
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
context.declare({
|
|
22
|
+
name: className,
|
|
23
|
+
code: `export interface ${className} extends ${localName} {}`,
|
|
24
|
+
});
|
|
25
|
+
context.addRuntimeTypeImport("WrapperClass");
|
|
26
|
+
const constType = `WrapperClass<typeof ${localName}, ${className}>`;
|
|
27
|
+
context.declare({
|
|
28
|
+
name: className,
|
|
29
|
+
code: `${doc}export const ${className}: ${constType} = ` +
|
|
30
|
+
`/* @__PURE__ */ (() => {\n${body}\n})() as ${constType};`,
|
|
31
|
+
owner,
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
export { declareFoldedClass, localClassName };
|
|
35
|
+
//# sourceMappingURL=folded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folded.js","sourceRoot":"","sources":["../../../src/store/gi/folded.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAY9C,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;AAEtE,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAU,EAAE,CACtD,oCAAoC,cAAc,CAAC,SAAS,CAAC,YAAY;IACzE,YAAY,mBAAmB,CAAC,SAAS,CAAC,0BAA0B,CAAC;AAEzE,MAAM,kBAAkB,GAAG,CAAC,OAA2B,EAAQ,EAAE;IAC7D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAC1G,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7F,MAAM,IAAI,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,GAAG,aAAa,EAAE,UAAU,SAAS,GAAG,CAAC;SAClF,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,CAAC;YACZ,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,GAAG,GAAG,gBAAgB,SAAS,YAAY,SAAS,gCAAgC,IAAI,SAAS;YACvG,KAAK;SACR,CAAC,CAAC;QAEH,OAAO;IACX,CAAC;IAED,OAAO,CAAC,OAAO,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,oBAAoB,SAAS,YAAY,SAAS,KAAK;KAChE,CAAC,CAAC;IAEH,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,uBAAuB,SAAS,KAAK,SAAS,GAAG,CAAC;IAEpE,OAAO,CAAC,OAAO,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,IAAI,EACA,GAAG,GAAG,gBAAgB,SAAS,KAAK,SAAS,KAAK;YAClD,6BAA6B,IAAI,aAAa,SAAS,GAAG;QAC9D,KAAK;KACR,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { indent } from \"../../writer/emit.js\";\n\ntype FoldedClassOptions = {\n context: ModuleContext;\n className: string;\n doc: string;\n owner: string;\n localDeclaration: string;\n registrations: string[];\n hasInstanceInterface: boolean;\n};\n\nconst localClassName = (className: string): string => `_${className}`;\n\nconst renderNameStatement = (className: string): string =>\n `globalThis.Object.defineProperty(${localClassName(className)}, \"name\", ` +\n `{ value: ${sourceStringLiteral(className)}, configurable: true });`;\n\nconst declareFoldedClass = (options: FoldedClassOptions): void => {\n const { context, className, doc, owner, localDeclaration, registrations, hasInstanceInterface } = options;\n const localName = localClassName(className);\n context.module.appendDeclaration({ name: localName, code: localDeclaration, isLocal: true });\n\n const body = [renderNameStatement(className), ...registrations, `return ${localName};`]\n .map((statement) => indent(statement, 1))\n .join(\"\\n\");\n\n if (!hasInstanceInterface) {\n context.declare({\n name: className,\n code: `${doc}export const ${className}: typeof ${localName} = /* @__PURE__ */ (() => {\\n${body}\\n})();`,\n owner,\n });\n\n return;\n }\n\n context.declare({\n name: className,\n code: `export interface ${className} extends ${localName} {}`,\n });\n\n context.addRuntimeTypeImport(\"WrapperClass\");\n const constType = `WrapperClass<typeof ${localName}, ${className}>`;\n\n context.declare({\n name: className,\n code:\n `${doc}export const ${className}: ${constType} = ` +\n `/* @__PURE__ */ (() => {\\n${body}\\n})() as ${constType};`,\n owner,\n });\n};\n\nexport { declareFoldedClass, localClassName };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/store/gi/function.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6B7D,QAAA,MAAM,kBAAkB,GAAI,SAAS,aAAa,EAAE,IAAI,WAAW,KAAG,MAAM,GAAG,SAsB9E,CAAC;AA2BF,QAAA,MAAM,yBAAyB,GAAI,SAAS,aAAa,EAAE,IAAI,WAAW,KAAG,IA8B5E,CAAC;AA4CF,QAAA,MAAM,2BAA2B,GAAI,aAAa,MAAM,EAAE,SAAS,MAAM,EAAE,gBAAgB,MAAM,EAAE,KAAG,MAQrG,CAAC;
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/store/gi/function.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6B7D,QAAA,MAAM,kBAAkB,GAAI,SAAS,aAAa,EAAE,IAAI,WAAW,KAAG,MAAM,GAAG,SAsB9E,CAAC;AA2BF,QAAA,MAAM,yBAAyB,GAAI,SAAS,aAAa,EAAE,IAAI,WAAW,KAAG,IA8B5E,CAAC;AA4CF,QAAA,MAAM,2BAA2B,GAAI,aAAa,MAAM,EAAE,SAAS,MAAM,EAAE,gBAAgB,MAAM,EAAE,KAAG,MAQrG,CAAC;AAoDF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -113,17 +113,36 @@ const stripLongestPrefix = (input, prefixes) => {
|
|
|
113
113
|
}
|
|
114
114
|
return best.length === 0 ? input : input.slice(best.length);
|
|
115
115
|
};
|
|
116
|
+
const appendInitBootstrap = (context, exportName) => {
|
|
117
|
+
if (context.isTreeShaken) {
|
|
118
|
+
context.addBootstrapCall(`${exportName}();`, { moduleExports: [exportName] });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
context.module.appendRegistration(`${exportName}();`, [exportName]);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const appendFinalizeBootstrap = (context, exportName) => {
|
|
125
|
+
if (context.isTreeShaken) {
|
|
126
|
+
context.addBootstrapCall(`onExit(${exportName});`, {
|
|
127
|
+
moduleExports: [exportName],
|
|
128
|
+
runtimeImports: ["onExit"],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
context.addRuntimeImport("onExit");
|
|
133
|
+
context.module.appendRegistration(`onExit(${exportName});`, [exportName]);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
116
136
|
const appendBootstrapRegistration = (context, fn, exportName) => {
|
|
117
137
|
if (fn.parameters.length > 0) {
|
|
118
138
|
return;
|
|
119
139
|
}
|
|
120
140
|
if (fn.name === "init") {
|
|
121
|
-
context
|
|
141
|
+
appendInitBootstrap(context, exportName);
|
|
122
142
|
return;
|
|
123
143
|
}
|
|
124
144
|
if (fn.name === "finalize") {
|
|
125
|
-
context
|
|
126
|
-
context.module.appendRegistration(`onExit(${exportName});`, [exportName]);
|
|
145
|
+
appendFinalizeBootstrap(context, exportName);
|
|
127
146
|
}
|
|
128
147
|
};
|
|
129
148
|
export { renderFnExpression, generateNamespaceFunction, namespaceFunctionExportName };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/store/gi/function.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { tFn } from \"../../analysis/descriptor.js\";\nimport { hasUnmarshalableParam } from \"../../analysis/param-capability.js\";\nimport { arrayLiteral, renderBlock } from \"../../writer/emit.js\";\nimport { matchAsyncFinish } from \"./async.js\";\nimport { callableDoc } from \"./callable-doc.js\";\nimport {\n planCallArgs,\n renderMethodBody,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedBody,\n renderPromisifiedSignature,\n renderReturnDescriptor,\n} from \"./method.js\";\n\ntype NamespaceFinish = {\n fn: GirFunction;\n exportName: string;\n};\n\ntype NamespaceFunctionOptions = {\n context: ModuleContext;\n fn: GirFunction;\n finish: NamespaceFinish | undefined;\n exportName: string;\n bindingName: string;\n};\n\nconst renderFnExpression = (context: ModuleContext, fn: GirFunction): string | undefined => {\n if (fn.cIdentifier === undefined) {\n return undefined;\n }\n\n const library = context.namespace.sharedLibrary;\n\n if (library === undefined) {\n return undefined;\n }\n\n context.addRuntimeImport(\"t\");\n const params = planCallArgs(context, fn).map((arg) => arg.paramLiteral);\n const returnPlan = renderReturnDescriptor(context, fn);\n\n return tFn(library, fn.cIdentifier, {\n args: arrayLiteral(params),\n returns: returnPlan.descriptor,\n isReturnSkipped: returnPlan.isSkipped,\n isReturnUnpacked: returnPlan.isUnpacked,\n canThrow: fn.throws,\n });\n};\n\nconst isMovedOntoEmittedMember = (context: ModuleContext, fn: GirFunction): boolean => {\n const [typeName, memberName] = fn.movedTo?.split(\".\") ?? [];\n\n if (typeName === undefined || memberName === undefined) {\n return false;\n }\n\n const resolved = context.library.resolveType(context.namespace.name, typeName);\n\n if (resolved?.kind !== \"class\" && resolved?.kind !== \"interface\" && resolved?.kind !== \"record\") {\n return false;\n }\n\n const members = [...resolved.value.methods, ...resolved.value.functions, ...resolved.value.constructors];\n\n return members.some((member) => member.name === memberName);\n};\n\nconst canEmitNamespaceFunction = (context: ModuleContext, fn: GirFunction): boolean =>\n fn.introspectable &&\n !isMovedOntoEmittedMember(context, fn) &&\n fn.shadowedBy === undefined &&\n fn.cIdentifier !== undefined &&\n !hasUnmarshalableParam(context, fn);\n\nconst generateNamespaceFunction = (context: ModuleContext, fn: GirFunction): void => {\n if (!canEmitNamespaceFunction(context, fn)) {\n return;\n }\n\n const expression = renderFnExpression(context, fn);\n\n if (expression === undefined) {\n return;\n }\n\n const cIdentifier = fn.cIdentifier;\n\n if (cIdentifier === undefined) {\n return;\n }\n\n const exportName = namespaceFunctionExportName(cIdentifier, fn.name, context.namespace.cSymbolPrefixes);\n\n if (exportName.length === 0) {\n return;\n }\n\n const bindingName = namespaceBindingName(cIdentifier, exportName);\n context.module.appendBinding(`const ${bindingName} = ${expression};`, cIdentifier);\n const finish = matchNamespaceFinish(context, fn);\n const declaration = renderNamespaceFunctionDeclaration({ context, fn, finish, exportName, bindingName });\n const doc = callableDoc(context, fn, { finishFn: finish?.fn });\n context.declare({ name: exportName, code: `${doc}${declaration}` });\n appendBootstrapRegistration(context, fn, exportName);\n};\n\nconst namespaceBindingName = (cIdentifier: string, exportName: string): string => {\n const bindingName = toCamelIdentifier(cIdentifier);\n\n return bindingName === exportName ? `_${bindingName}` : bindingName;\n};\n\nconst matchNamespaceFinish = (context: ModuleContext, fn: GirFunction): NamespaceFinish | undefined => {\n const finishFn = matchAsyncFinish(context.library, fn, context.namespace.functions);\n const cIdentifier = finishFn?.cIdentifier;\n\n if (finishFn === undefined || cIdentifier === undefined || !canEmitNamespaceFunction(context, finishFn)) {\n return undefined;\n }\n\n return {\n fn: finishFn,\n exportName: namespaceFunctionExportName(cIdentifier, finishFn.name, context.namespace.cSymbolPrefixes),\n };\n};\n\nconst renderPromisifiedNamespaceFunction = (options: NamespaceFunctionOptions, finish: NamespaceFinish): string => {\n const { context, fn, exportName, bindingName } = options;\n const { signature, returnType } = renderPromisifiedSignature(context, fn, finish.fn);\n const body = renderPromisifiedBody(context, fn, { fn: finish.fn, expression: finish.exportName }, bindingName);\n\n return renderBlock(`export function ${exportName}(${signature}): ${returnType}`, body);\n};\n\nconst renderNamespaceFunctionDeclaration = (options: NamespaceFunctionOptions): string => {\n const { context, fn, finish, exportName, bindingName } = options;\n\n if (finish !== undefined) {\n return renderPromisifiedNamespaceFunction(options, finish);\n }\n\n const signature = renderMethodSignature(context, fn);\n const returnType = renderMethodReturnType(context, fn);\n const body = renderMethodBody(context, fn, { bindingExpression: bindingName });\n\n return renderBlock(`export function ${exportName}(${signature}): ${returnType}`, body);\n};\n\nconst namespaceFunctionExportName = (cIdentifier: string, girName: string, symbolPrefixes: string[]): string => {\n if (girName.length > 0) {\n return toCamelIdentifier(girName);\n }\n\n const stripped = stripLongestPrefix(cIdentifier, symbolPrefixes);\n\n return toCamelIdentifier(stripped);\n};\n\nconst stripLongestPrefix = (input: string, prefixes: string[]): string => {\n let best = \"\";\n\n for (const prefix of prefixes) {\n const candidate = `${prefix}_`;\n\n if (input.startsWith(candidate) && candidate.length > best.length) {\n best = candidate;\n }\n }\n\n return best.length === 0 ? input : input.slice(best.length);\n};\n\nconst appendBootstrapRegistration = (context: ModuleContext, fn: GirFunction, exportName: string): void => {\n if (fn.parameters.length > 0) {\n return;\n }\n\n if (fn.name === \"init\") {\n context.module.appendRegistration(`${exportName}();`, [exportName]);\n\n return;\n }\n\n if (fn.name === \"finalize\") {\n context.addRuntimeImport(\"onExit\");\n context.module.appendRegistration(`onExit(${exportName});`, [exportName]);\n }\n};\n\nexport { renderFnExpression, generateNamespaceFunction, namespaceFunctionExportName };\n"]}
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/store/gi/function.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { tFn } from \"../../analysis/descriptor.js\";\nimport { hasUnmarshalableParam } from \"../../analysis/param-capability.js\";\nimport { arrayLiteral, renderBlock } from \"../../writer/emit.js\";\nimport { matchAsyncFinish } from \"./async.js\";\nimport { callableDoc } from \"./callable-doc.js\";\nimport {\n planCallArgs,\n renderMethodBody,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedBody,\n renderPromisifiedSignature,\n renderReturnDescriptor,\n} from \"./method.js\";\n\ntype NamespaceFinish = {\n fn: GirFunction;\n exportName: string;\n};\n\ntype NamespaceFunctionOptions = {\n context: ModuleContext;\n fn: GirFunction;\n finish: NamespaceFinish | undefined;\n exportName: string;\n bindingName: string;\n};\n\nconst renderFnExpression = (context: ModuleContext, fn: GirFunction): string | undefined => {\n if (fn.cIdentifier === undefined) {\n return undefined;\n }\n\n const library = context.namespace.sharedLibrary;\n\n if (library === undefined) {\n return undefined;\n }\n\n context.addRuntimeImport(\"t\");\n const params = planCallArgs(context, fn).map((arg) => arg.paramLiteral);\n const returnPlan = renderReturnDescriptor(context, fn);\n\n return tFn(library, fn.cIdentifier, {\n args: arrayLiteral(params),\n returns: returnPlan.descriptor,\n isReturnSkipped: returnPlan.isSkipped,\n isReturnUnpacked: returnPlan.isUnpacked,\n canThrow: fn.throws,\n });\n};\n\nconst isMovedOntoEmittedMember = (context: ModuleContext, fn: GirFunction): boolean => {\n const [typeName, memberName] = fn.movedTo?.split(\".\") ?? [];\n\n if (typeName === undefined || memberName === undefined) {\n return false;\n }\n\n const resolved = context.library.resolveType(context.namespace.name, typeName);\n\n if (resolved?.kind !== \"class\" && resolved?.kind !== \"interface\" && resolved?.kind !== \"record\") {\n return false;\n }\n\n const members = [...resolved.value.methods, ...resolved.value.functions, ...resolved.value.constructors];\n\n return members.some((member) => member.name === memberName);\n};\n\nconst canEmitNamespaceFunction = (context: ModuleContext, fn: GirFunction): boolean =>\n fn.introspectable &&\n !isMovedOntoEmittedMember(context, fn) &&\n fn.shadowedBy === undefined &&\n fn.cIdentifier !== undefined &&\n !hasUnmarshalableParam(context, fn);\n\nconst generateNamespaceFunction = (context: ModuleContext, fn: GirFunction): void => {\n if (!canEmitNamespaceFunction(context, fn)) {\n return;\n }\n\n const expression = renderFnExpression(context, fn);\n\n if (expression === undefined) {\n return;\n }\n\n const cIdentifier = fn.cIdentifier;\n\n if (cIdentifier === undefined) {\n return;\n }\n\n const exportName = namespaceFunctionExportName(cIdentifier, fn.name, context.namespace.cSymbolPrefixes);\n\n if (exportName.length === 0) {\n return;\n }\n\n const bindingName = namespaceBindingName(cIdentifier, exportName);\n context.module.appendBinding(`const ${bindingName} = ${expression};`, cIdentifier);\n const finish = matchNamespaceFinish(context, fn);\n const declaration = renderNamespaceFunctionDeclaration({ context, fn, finish, exportName, bindingName });\n const doc = callableDoc(context, fn, { finishFn: finish?.fn });\n context.declare({ name: exportName, code: `${doc}${declaration}` });\n appendBootstrapRegistration(context, fn, exportName);\n};\n\nconst namespaceBindingName = (cIdentifier: string, exportName: string): string => {\n const bindingName = toCamelIdentifier(cIdentifier);\n\n return bindingName === exportName ? `_${bindingName}` : bindingName;\n};\n\nconst matchNamespaceFinish = (context: ModuleContext, fn: GirFunction): NamespaceFinish | undefined => {\n const finishFn = matchAsyncFinish(context.library, fn, context.namespace.functions);\n const cIdentifier = finishFn?.cIdentifier;\n\n if (finishFn === undefined || cIdentifier === undefined || !canEmitNamespaceFunction(context, finishFn)) {\n return undefined;\n }\n\n return {\n fn: finishFn,\n exportName: namespaceFunctionExportName(cIdentifier, finishFn.name, context.namespace.cSymbolPrefixes),\n };\n};\n\nconst renderPromisifiedNamespaceFunction = (options: NamespaceFunctionOptions, finish: NamespaceFinish): string => {\n const { context, fn, exportName, bindingName } = options;\n const { signature, returnType } = renderPromisifiedSignature(context, fn, finish.fn);\n const body = renderPromisifiedBody(context, fn, { fn: finish.fn, expression: finish.exportName }, bindingName);\n\n return renderBlock(`export function ${exportName}(${signature}): ${returnType}`, body);\n};\n\nconst renderNamespaceFunctionDeclaration = (options: NamespaceFunctionOptions): string => {\n const { context, fn, finish, exportName, bindingName } = options;\n\n if (finish !== undefined) {\n return renderPromisifiedNamespaceFunction(options, finish);\n }\n\n const signature = renderMethodSignature(context, fn);\n const returnType = renderMethodReturnType(context, fn);\n const body = renderMethodBody(context, fn, { bindingExpression: bindingName });\n\n return renderBlock(`export function ${exportName}(${signature}): ${returnType}`, body);\n};\n\nconst namespaceFunctionExportName = (cIdentifier: string, girName: string, symbolPrefixes: string[]): string => {\n if (girName.length > 0) {\n return toCamelIdentifier(girName);\n }\n\n const stripped = stripLongestPrefix(cIdentifier, symbolPrefixes);\n\n return toCamelIdentifier(stripped);\n};\n\nconst stripLongestPrefix = (input: string, prefixes: string[]): string => {\n let best = \"\";\n\n for (const prefix of prefixes) {\n const candidate = `${prefix}_`;\n\n if (input.startsWith(candidate) && candidate.length > best.length) {\n best = candidate;\n }\n }\n\n return best.length === 0 ? input : input.slice(best.length);\n};\n\nconst appendInitBootstrap = (context: ModuleContext, exportName: string): void => {\n if (context.isTreeShaken) {\n context.addBootstrapCall(`${exportName}();`, { moduleExports: [exportName] });\n } else {\n context.module.appendRegistration(`${exportName}();`, [exportName]);\n }\n};\n\nconst appendFinalizeBootstrap = (context: ModuleContext, exportName: string): void => {\n if (context.isTreeShaken) {\n context.addBootstrapCall(`onExit(${exportName});`, {\n moduleExports: [exportName],\n runtimeImports: [\"onExit\"],\n });\n } else {\n context.addRuntimeImport(\"onExit\");\n context.module.appendRegistration(`onExit(${exportName});`, [exportName]);\n }\n};\n\nconst appendBootstrapRegistration = (context: ModuleContext, fn: GirFunction, exportName: string): void => {\n if (fn.parameters.length > 0) {\n return;\n }\n\n if (fn.name === \"init\") {\n appendInitBootstrap(context, exportName);\n\n return;\n }\n\n if (fn.name === \"finalize\") {\n appendFinalizeBootstrap(context, exportName);\n }\n};\n\nexport { renderFnExpression, generateNamespaceFunction, namespaceFunctionExportName };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtype-binding.d.ts","sourceRoot":"","sources":["../../../src/store/gi/gtype-binding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,KAAK,UAAU,GAAG;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,SAAS,aAAa,KAAG,MAC6B,CAAC;AAE5E,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,KAAG,MAKlD,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,SAAS,aAAa,KAAG,MAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"gtype-binding.d.ts","sourceRoot":"","sources":["../../../src/store/gi/gtype-binding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,KAAK,UAAU,GAAG;IACd,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,SAAS,aAAa,KAAG,MAC6B,CAAC;AAE5E,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,KAAG,MAKlD,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,SAAS,aAAa,KAAG,MAAsD,CAAC;AA8ChH,QAAA,MAAM,iBAAiB,GAAI,SAAS,aAAa,EAAE,QAAQ,UAAU,KAAG,MAAM,GAAG,SAGA,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,CAAC"}
|