@gtkx/codegen 1.0.0-rc.3 → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -5
- package/dist/analysis/descriptor-render.d.ts +1 -3
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +14 -37
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +6 -6
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +2 -2
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +5 -7
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +3 -5
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +77 -1
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +62 -0
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +4 -4
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +4 -4
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.js +6 -6
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +5 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +2 -2
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +2 -5
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +6 -8
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -11
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +0 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/field.d.ts +0 -1
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +0 -3
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +13 -0
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +12 -0
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +0 -4
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +1 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.js +1 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +7 -12
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -19
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +1 -1
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/pipeline.js +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +2 -2
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +6 -6
- package/dist/khronos/plan.js.map +1 -1
- package/dist/react/element-config.d.ts +17 -11
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +22 -15
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +35 -17
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -2
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.js +4 -4
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +0 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +1 -5
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +25 -23
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +1 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +5 -7
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -9
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +0 -4
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/return-wrap.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- 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 +13 -16
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +0 -8
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +0 -9
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +0 -2
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +0 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +2 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +0 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +0 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/jsx.js +6 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +7 -7
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +2 -4
- package/dist/store/jsx/omitted-props.d.ts.map +1 -1
- package/dist/store/jsx/omitted-props.js +2 -4
- package/dist/store/jsx/omitted-props.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +3 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +3 -2
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.js +2 -2
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +8 -8
- package/package.json +6 -10
- package/src/analysis/descriptor-render.ts +20 -45
- package/src/analysis/descriptor.ts +13 -13
- package/src/analysis/param-structure.ts +8 -10
- package/src/analysis/ts-type.ts +4 -6
- package/src/compile.ts +2 -1
- package/src/docs/api-reference.ts +127 -4
- package/src/docs/pipeline.ts +8 -8
- package/src/docs/render.ts +7 -7
- package/src/docs/symbol-page.ts +7 -2
- package/src/fingerprint.ts +8 -13
- package/src/gi.ts +4 -11
- package/src/gir/field.ts +0 -4
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +13 -0
- package/src/gir/parameter.ts +0 -4
- package/src/gir/size.ts +0 -3
- package/src/gir/type-id.ts +2 -4
- package/src/gir/type-ref.ts +1 -1
- package/src/index.ts +18 -16
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -26
- package/src/khronos/args.ts +1 -1
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +8 -8
- package/src/react/element-config.ts +22 -19
- package/src/runner.ts +57 -39
- package/src/store/compile-store.ts +3 -4
- package/src/store/gi/callables.ts +5 -5
- package/src/store/gi/constant.ts +0 -2
- package/src/store/gi/function.ts +1 -5
- package/src/store/gi/method.ts +30 -28
- package/src/store/gi/property-accessor.ts +6 -8
- package/src/store/gi/record-field-accessor.ts +4 -10
- package/src/store/gi/record-layout.ts +0 -4
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/signal.ts +17 -17
- package/src/store/gi/value-marshalable.ts +0 -9
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +0 -6
- package/src/store/jsx/element-prop-imports.ts +7 -4
- package/src/store/jsx/element-prop-types.ts +0 -1
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/jsx.ts +7 -7
- package/src/store/jsx/metadata.ts +8 -8
- package/src/store/jsx/omitted-props.ts +2 -4
- package/src/store/jsx/pipeline.ts +5 -3
- package/src/store/jsx/props.ts +2 -2
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-components.js","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKlD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAuB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"element-components.js","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport type { LazyElementSpec } from \"./element-prop-types.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { ancestorGlibNames, type GlibNamedClass } from \"./intrinsic-elements.js\";\n\ntype ElementComponent = { module: string; export: string };\ntype ElementComponentOverrides = Record<string, ElementComponent>;\n\ntype ExportCollector = {\n imports: ImportsBuilder;\n exportedNames: Set<string>;\n exportLines: string[];\n};\n\ntype CandidateExportOptions = {\n targetNamespace: GirNamespace;\n library: Library;\n virtualNames: Set<string>;\n intrinsicElements: GlibNamedClass[];\n components: Record<string, ElementComponent>;\n};\n\nconst generateElementComponentsSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: {\n imports: ImportsBuilder;\n lazyElements: LazyElementSpec[];\n intrinsicElements: GlibNamedClass[];\n components: ElementComponentOverrides;\n },\n): { source: string; exportedNames: Set<string> } => {\n const collector: ExportCollector = { imports: options.imports, exportedNames: new Set(), exportLines: [] };\n const lazyElements = options.lazyElements;\n const virtualNames = new Set(lazyElements.map((entry) => entry.element));\n\n collectCandidateExports(collector, {\n targetNamespace,\n library,\n virtualNames,\n intrinsicElements: options.intrinsicElements,\n components: options.components,\n });\n\n collectLazyElementExports(collector, lazyElements);\n const source = collector.exportLines.join(\"\\n\\n\");\n\n return { source, exportedNames: collector.exportedNames };\n};\n\nconst appendCandidateExport = (\n collector: ExportCollector,\n candidate: GlibNamedClass,\n options: CandidateExportOptions,\n): void => {\n const { targetNamespace, library, virtualNames, components } = options;\n\n if (candidate.namespace.name !== targetNamespace.name) {\n return;\n }\n\n if (virtualNames.has(candidate.glibName)) {\n return;\n }\n\n const line = renderCandidateExport(candidate, library, collector.imports, components);\n collector.exportLines.push(line);\n collector.exportedNames.add(candidate.glibName);\n};\n\nconst collectCandidateExports = (collector: ExportCollector, options: CandidateExportOptions): void => {\n for (const candidate of options.intrinsicElements) {\n if (candidate.klass.isAbstract) {\n continue;\n }\n\n appendCandidateExport(collector, candidate, options);\n }\n};\n\nconst collectLazyElementExports = (collector: ExportCollector, lazyElements: LazyElementSpec[]): void => {\n for (const spec of lazyElements) {\n collector.imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n collector.imports.addNamed(\"react\", \"ReactNode\", true);\n collector.exportLines.push(renderLazyElementExport(spec));\n collector.exportedNames.add(spec.element);\n }\n};\n\nconst renderLazyElementExport = (spec: LazyElementSpec): string => {\n const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;\n const component = `export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;\n\n return `${spec.typeSource}\\n\\n${component}`;\n};\n\nconst renderCandidateExport = (\n candidate: GlibNamedClass,\n library: Library,\n imports: ImportsBuilder,\n components: Record<string, ElementComponent>,\n): string => {\n const { glibName, klass, namespace } = candidate;\n const ancestry = ancestorGlibNames(klass, namespace, library);\n const component = resolveElementComponent(ancestry, components);\n imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n imports.addNamed(\"react\", \"ReactNode\", true);\n\n if (component !== undefined) {\n imports.addNamed(component.module, component.export, false);\n }\n\n return `${renderJsDoc(klass.doc)}${renderElementComponentExport(glibName, component)}`;\n};\n\nconst resolveElementComponent = (\n ancestry: string[],\n components: Record<string, ElementComponent>,\n): ElementComponent | undefined => {\n for (const name of ancestry) {\n const found = components[name];\n\n if (found !== undefined) {\n return found;\n }\n }\n\n return undefined;\n};\n\nconst renderElementComponentExport = (glibName: string, component: ElementComponent | undefined): string => {\n const propsType = `${glibName}Props`;\n const annotation = `(props: ${propsType}) => ReactNode`;\n const factoryCall = `createElementComponent(${sourceStringLiteral(glibName)})`;\n\n if (component === undefined) {\n return `export const ${glibName}: ${annotation} = ${factoryCall};`;\n }\n\n return `export const ${glibName}: ${annotation} = ${component.export}(${factoryCall});`;\n};\n\nexport { generateElementComponentsSection, type ElementComponent, type ElementComponentOverrides };\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/** Props interface a generated element's props extend, declared by hand in `@gtkx/react`. */
|
|
2
1
|
type ElementPropTypeRef = {
|
|
3
2
|
type: string;
|
|
4
3
|
module: string;
|
|
@@ -6,12 +5,12 @@ type ElementPropTypeRef = {
|
|
|
6
5
|
};
|
|
7
6
|
/** Base props interface each element extends, keyed by GLib type name (the module exports it). */
|
|
8
7
|
type ElementProps = Record<string, {
|
|
8
|
+
/** Specifier the props interface is imported from. */
|
|
9
9
|
module: string;
|
|
10
|
+
/** Identifier the module exports it under. */
|
|
10
11
|
export: string;
|
|
11
12
|
}>;
|
|
12
|
-
/** Installs the base props each element extends (GLib type name → `{ module, export }`); set once per run. */
|
|
13
13
|
declare const setElementProps: (props: ElementProps) => void;
|
|
14
|
-
/** The base props interface an element extends, when its element config declares one. */
|
|
15
14
|
declare const elementPropTypeFor: (glibName: string) => ElementPropTypeRef | undefined;
|
|
16
15
|
export { setElementProps, elementPropTypeFor, type ElementPropTypeRef, type ElementProps };
|
|
17
16
|
//# sourceMappingURL=element-prop-imports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-prop-imports.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"element-prop-imports.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,kGAAkG;AAClG,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAC/B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAIH,QAAA,MAAM,eAAe,GAAI,OAAO,YAAY,KAAG,IAM9C,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,SAInE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
const elementProps = new Map();
|
|
2
|
-
/** Installs the base props each element extends (GLib type name → `{ module, export }`); set once per run. */
|
|
3
2
|
const setElementProps = (props) => {
|
|
4
3
|
elementProps.clear();
|
|
5
4
|
for (const [glibName, ref] of Object.entries(props)) {
|
|
6
5
|
elementProps.set(glibName, ref);
|
|
7
6
|
}
|
|
8
7
|
};
|
|
9
|
-
/** The base props interface an element extends, when its element config declares one. */
|
|
10
8
|
const elementPropTypeFor = (glibName) => {
|
|
11
9
|
const ref = elementProps.get(glibName);
|
|
12
10
|
return ref === undefined ? undefined : { type: glibName, module: ref.module, export: ref.export };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-prop-imports.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"element-prop-imports.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAUA,MAAM,YAAY,GAAoD,IAAI,GAAG,EAAE,CAAC;AAEhF,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;IAClD,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAkC,EAAE;IAC5E,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA8C,CAAC","sourcesContent":["type ElementPropTypeRef = { type: string; module: string; export: string };\n\n/** Base props interface each element extends, keyed by GLib type name (the module exports it). */\ntype ElementProps = Record<string, {\n /** Specifier the props interface is imported from. */\n module: string;\n /** Identifier the module exports it under. */\n export: string;\n}>;\n\nconst elementProps: Map<string, { module: string; export: string }> = new Map();\n\nconst setElementProps = (props: ElementProps): void => {\n elementProps.clear();\n\n for (const [glibName, ref] of Object.entries(props)) {\n elementProps.set(glibName, ref);\n }\n};\n\nconst elementPropTypeFor = (glibName: string): ElementPropTypeRef | undefined => {\n const ref = elementProps.get(glibName);\n\n return ref === undefined ? undefined : { type: glibName, module: ref.module, export: ref.export };\n};\n\nexport { setElementProps, elementPropTypeFor, type ElementPropTypeRef, type ElementProps };\n"]}
|
|
@@ -4,7 +4,6 @@ type LazyElementSpec = {
|
|
|
4
4
|
typeName: string;
|
|
5
5
|
typeSource: string;
|
|
6
6
|
};
|
|
7
|
-
/** Lazy element prop types to emit, grouped by the namespace declaring each element. */
|
|
8
7
|
declare const lazyElementSpecs: (context: GirIndex, lazyElements: string[]) => Map<string, LazyElementSpec[]>;
|
|
9
8
|
export { lazyElementSpecs, type LazyElementSpec };
|
|
10
9
|
//# sourceMappingURL=element-prop-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAG5E,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AA8BF,
|
|
1
|
+
{"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAG5E,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AA8BF,QAAA,MAAM,gBAAgB,GAAI,SAAS,QAAQ,EAAE,cAAc,MAAM,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAgBlG,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
|
|
@@ -23,7 +23,6 @@ const createLazyElementSpec = (context, element, entry) => {
|
|
|
23
23
|
const base = omitted.length === 0 ? `${baseName}Props` : `Omit<${baseName}Props, ${omitUnion}>`;
|
|
24
24
|
return { element, typeName, typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };` };
|
|
25
25
|
};
|
|
26
|
-
/** Lazy element prop types to emit, grouped by the namespace declaring each element. */
|
|
27
26
|
const lazyElementSpecs = (context, lazyElements) => {
|
|
28
27
|
const specs = new Map();
|
|
29
28
|
for (const element of lazyElements) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-prop-types.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,MAAM,wBAAwB,GAAG,CAAC,KAAe,EAAE,KAAe,EAAQ,EAAE;IACxE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAiB,EAAE,KAAmB,EAAY,EAAE;IAC5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAE,OAAe,EAAE,KAAmB,EAAmB,EAAE;IACvG,MAAM,QAAQ,GAAG,GAAG,OAAO,cAAc,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ,UAAU,SAAS,GAAG,CAAC;IAEhG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B,EAAE,CAAC;AAC9G,CAAC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"element-prop-types.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,MAAM,wBAAwB,GAAG,CAAC,KAAe,EAAE,KAAe,EAAQ,EAAE;IACxE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAiB,EAAE,KAAmB,EAAY,EAAE;IAC5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAE,OAAe,EAAE,KAAmB,EAAmB,EAAE;IACvG,MAAM,QAAQ,GAAG,GAAG,OAAO,cAAc,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ,UAAU,SAAS,GAAG,CAAC;IAEhG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B,EAAE,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAiB,EAAE,YAAsB,EAAkC,EAAE;IACnG,MAAM,KAAK,GAAmC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAwB,CAAC","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport { getChain, type GirIndex, type GirTypeEntry } from \"./gir-index.js\";\nimport { getGlibName } from \"./intrinsic-elements.js\";\n\ntype LazyElementSpec = {\n element: string;\n typeName: string;\n typeSource: string;\n};\n\nconst appendConstructOnlyNames = (klass: GirClass, names: string[]): void => {\n for (const property of klass.properties) {\n if (property.constructOnly) {\n names.push(toCamelIdentifier(property.name));\n }\n }\n};\n\nconst constructOnlyNames = (context: GirIndex, entry: GirTypeEntry): string[] => {\n const names: string[] = [];\n\n for (const klass of getChain(context, entry)) {\n appendConstructOnlyNames(klass, names);\n }\n\n return names;\n};\n\nconst createLazyElementSpec = (context: GirIndex, element: string, entry: GirTypeEntry): LazyElementSpec => {\n const typeName = `${element}ElementProps`;\n const baseName = getGlibName(entry.klass) ?? element;\n const omitted = constructOnlyNames(context, entry);\n const omitUnion = omitted.map((name) => JSON.stringify(name)).join(\" | \");\n const base = omitted.length === 0 ? `${baseName}Props` : `Omit<${baseName}Props, ${omitUnion}>`;\n\n return { element, typeName, typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };` };\n};\n\nconst lazyElementSpecs = (context: GirIndex, lazyElements: string[]): Map<string, LazyElementSpec[]> => {\n const specs: Map<string, LazyElementSpec[]> = new Map();\n\n for (const element of lazyElements) {\n const entry = context.index.get(element);\n\n if (entry === undefined) {\n continue;\n }\n\n const list = specs.get(entry.namespace.name) ?? [];\n list.push(createLazyElementSpec(context, element, entry));\n specs.set(entry.namespace.name, list);\n }\n\n return specs;\n};\n\nexport { lazyElementSpecs, type LazyElementSpec };\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { GlibNamedClass } from "./intrinsic-elements.js";
|
|
2
|
+
/** One element the `@gtkx/jsx` store binds. */
|
|
3
|
+
type GeneratedElement = {
|
|
4
|
+
/** GIR namespace name, such as `"Gtk"`. */
|
|
5
|
+
namespace: string;
|
|
6
|
+
/** Subexport the element is reachable through, such as `"gtk"` in `@gtkx/jsx/gtk`. */
|
|
7
|
+
directory: string;
|
|
8
|
+
/** GLib type name, which is also the JSX tag name, such as `"GtkButton"`. */
|
|
9
|
+
glibName: string;
|
|
10
|
+
/**
|
|
11
|
+
* Whether the element can be rendered. An abstract GType is bound for its props and metadata but
|
|
12
|
+
* exports no component, because `g_object_new` on one is a fatal GObject error.
|
|
13
|
+
*/
|
|
14
|
+
isMountable: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare const ELEMENTS_FILENAME = "elements.json";
|
|
17
|
+
declare const collectGeneratedElements: (intrinsicElements: GlibNamedClass[]) => GeneratedElement[];
|
|
18
|
+
declare const renderGeneratedElements: (elements: GeneratedElement[]) => string;
|
|
19
|
+
/**
|
|
20
|
+
* Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers
|
|
21
|
+
* "what does this project's JSX layer cover" without loading the store, which resolves `virtual:` specifiers
|
|
22
|
+
* that only exist inside a Vite or Vitest build.
|
|
23
|
+
*
|
|
24
|
+
* @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
|
|
25
|
+
* @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
|
|
26
|
+
*/
|
|
27
|
+
declare const readGeneratedElements: (jsxStoreDir: string) => GeneratedElement[];
|
|
28
|
+
export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, type GeneratedElement, };
|
|
29
|
+
//# sourceMappingURL=generated-elements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,+CAA+C;AAC/C,KAAK,gBAAgB,GAAG;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAkB,CAAC;AAE1C,QAAA,MAAM,wBAAwB,GAAI,mBAAmB,cAAc,EAAE,KAAG,gBAAgB,EAQvB,CAAC;AAElE,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,EAAE,KAAG,MACpB,CAAC;AAE7C;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,gBAAgB,EAQpE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,gBAAgB,GACxB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { namespaceDirectory } from "../../gir/namespace.js";
|
|
4
|
+
const ELEMENTS_FILENAME = "elements.json";
|
|
5
|
+
const collectGeneratedElements = (intrinsicElements) => intrinsicElements
|
|
6
|
+
.map((entry) => ({
|
|
7
|
+
namespace: entry.namespace.name,
|
|
8
|
+
directory: namespaceDirectory(entry.namespace),
|
|
9
|
+
glibName: entry.glibName,
|
|
10
|
+
isMountable: !entry.klass.isAbstract,
|
|
11
|
+
}))
|
|
12
|
+
.toSorted((a, b) => a.glibName.localeCompare(b.glibName));
|
|
13
|
+
const renderGeneratedElements = (elements) => `${JSON.stringify(elements, null, 2)}\n`;
|
|
14
|
+
/**
|
|
15
|
+
* Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers
|
|
16
|
+
* "what does this project's JSX layer cover" without loading the store, which resolves `virtual:` specifiers
|
|
17
|
+
* that only exist inside a Vite or Vitest build.
|
|
18
|
+
*
|
|
19
|
+
* @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
|
|
20
|
+
* @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
|
|
21
|
+
*/
|
|
22
|
+
const readGeneratedElements = (jsxStoreDir) => {
|
|
23
|
+
const path = join(jsxStoreDir, ELEMENTS_FILENAME);
|
|
24
|
+
if (!existsSync(path)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
28
|
+
};
|
|
29
|
+
export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, };
|
|
30
|
+
//# sourceMappingURL=generated-elements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,wBAAwB,GAAG,CAAC,iBAAmC,EAAsB,EAAE,CACzF,iBAAiB;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAC/B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;CACvC,CAAC,CAAC;KACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAsB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAuB,CAAC;AACxE,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GAE1B,CAAC","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { namespaceDirectory } from \"../../gir/namespace.js\";\n\n/** One element the `@gtkx/jsx` store binds. */\ntype GeneratedElement = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n namespace: string;\n /** Subexport the element is reachable through, such as `\"gtk\"` in `@gtkx/jsx/gtk`. */\n directory: string;\n /** GLib type name, which is also the JSX tag name, such as `\"GtkButton\"`. */\n glibName: string;\n /**\n * Whether the element can be rendered. An abstract GType is bound for its props and metadata but\n * exports no component, because `g_object_new` on one is a fatal GObject error.\n */\n isMountable: boolean;\n};\n\nconst ELEMENTS_FILENAME = \"elements.json\";\n\nconst collectGeneratedElements = (intrinsicElements: GlibNamedClass[]): GeneratedElement[] =>\n intrinsicElements\n .map((entry) => ({\n namespace: entry.namespace.name,\n directory: namespaceDirectory(entry.namespace),\n glibName: entry.glibName,\n isMountable: !entry.klass.isAbstract,\n }))\n .toSorted((a, b) => a.glibName.localeCompare(b.glibName));\n\nconst renderGeneratedElements = (elements: GeneratedElement[]): string =>\n `${JSON.stringify(elements, null, 2)}\\n`;\n\n/**\n * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers\n * \"what does this project's JSX layer cover\" without loading the store, which resolves `virtual:` specifiers\n * that only exist inside a Vite or Vitest build.\n *\n * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.\n * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.\n */\nconst readGeneratedElements = (jsxStoreDir: string): GeneratedElement[] => {\n const path = join(jsxStoreDir, ELEMENTS_FILENAME);\n\n if (!existsSync(path)) {\n return [];\n }\n\n return JSON.parse(readFileSync(path, \"utf8\")) as GeneratedElement[];\n};\n\nexport {\n ELEMENTS_FILENAME,\n collectGeneratedElements,\n readGeneratedElements,\n renderGeneratedElements,\n type GeneratedElement,\n};\n"]}
|
package/dist/store/jsx/jsx.js
CHANGED
|
@@ -50,7 +50,7 @@ const generateJsxSection = (targetNamespace, library, options) => {
|
|
|
50
50
|
addReactBuiltin(imports, "ReactNode");
|
|
51
51
|
addReactBuiltin(imports, "Ref");
|
|
52
52
|
const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);
|
|
53
|
-
let
|
|
53
|
+
let requiresReactElement = interfaceResult.requiresReactElement;
|
|
54
54
|
const propBlocks = [...interfaceResult.blocks];
|
|
55
55
|
const blockContext = {
|
|
56
56
|
isIntrinsicElementAncestor,
|
|
@@ -62,11 +62,11 @@ const generateJsxSection = (targetNamespace, library, options) => {
|
|
|
62
62
|
for (const entry of namespaceElements) {
|
|
63
63
|
const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);
|
|
64
64
|
if (objectPropNames.length > 0) {
|
|
65
|
-
|
|
65
|
+
requiresReactElement = true;
|
|
66
66
|
}
|
|
67
67
|
propBlocks.push(block);
|
|
68
68
|
}
|
|
69
|
-
if (
|
|
69
|
+
if (requiresReactElement) {
|
|
70
70
|
addReactBuiltin(imports, "ReactElement");
|
|
71
71
|
}
|
|
72
72
|
const source = [
|
|
@@ -83,7 +83,7 @@ const renderInterfacePropBlocks = (library, targetNamespaceName, options) => {
|
|
|
83
83
|
const { imports, intrinsicElements } = options;
|
|
84
84
|
const context = { library, targetNamespaceName, imports, hasContainerProps };
|
|
85
85
|
const blocks = [];
|
|
86
|
-
let
|
|
86
|
+
let requiresReactElement = false;
|
|
87
87
|
for (const iface of collectInterfacePropsClasses(library, intrinsicElements, targetNamespaceName, hasContainerProps)) {
|
|
88
88
|
const glibName = getGlibName(iface.klass);
|
|
89
89
|
if (glibName === undefined) {
|
|
@@ -91,11 +91,11 @@ const renderInterfacePropBlocks = (library, targetNamespaceName, options) => {
|
|
|
91
91
|
}
|
|
92
92
|
const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);
|
|
93
93
|
if (objectPropNames.length > 0) {
|
|
94
|
-
|
|
94
|
+
requiresReactElement = true;
|
|
95
95
|
}
|
|
96
96
|
blocks.push(block);
|
|
97
97
|
}
|
|
98
|
-
return { blocks,
|
|
98
|
+
return { blocks, requiresReactElement, hasContainerProps };
|
|
99
99
|
};
|
|
100
100
|
const registerCrossNsProps = (imports, targetNamespaceName, namespaceName, propsName) => {
|
|
101
101
|
if (namespaceName === targetNamespaceName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) => `export const ${entry.glibName} = ${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let isNeedsReactElement = interfaceResult.needsReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n isNeedsReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (isNeedsReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; needsReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let isNeedsReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n isNeedsReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, needsReactElement: isNeedsReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;\n\n const block = `${renderJsDoc(entry.klass.doc)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) => `export const ${entry.glibName} = ${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let requiresReactElement = interfaceResult.requiresReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (requiresReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; requiresReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let requiresReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, requiresReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;\n\n const block = `${renderJsDoc(entry.klass.doc)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}
|
|
@@ -17,10 +17,10 @@ const generateMetadata = (library) => {
|
|
|
17
17
|
.filter(({ defaults }) => defaults.length > 0)
|
|
18
18
|
.map(({ glibName, defaults }) => ` "${glibName}": ${renderDefaultsObject(defaults)},`);
|
|
19
19
|
return `${[
|
|
20
|
-
`export const
|
|
21
|
-
`export const
|
|
22
|
-
`export const
|
|
23
|
-
`export const
|
|
20
|
+
`export const signals: Record<string, Record<string, string>> = {\n${signalsEntries.join("\n")}\n};`,
|
|
21
|
+
`export const constructOnlyProps: Record<string, Set<string>> = {\n${constructOnlyEntries.join("\n")}\n};`,
|
|
22
|
+
`export const constructProps: Record<string, Set<string>> = {\n${constructableEntries.join("\n")}\n};`,
|
|
23
|
+
`export const defaultProps: Record<string, Record<string, unknown>> = {\n${defaultsEntries.join("\n")}\n};`,
|
|
24
24
|
].join("\n\n")}\n`;
|
|
25
25
|
};
|
|
26
26
|
const collectIntrinsicElements = (library) => {
|
|
@@ -62,9 +62,9 @@ const collectSignals = (sources) => {
|
|
|
62
62
|
return signals;
|
|
63
63
|
};
|
|
64
64
|
const collectPropNamesFromSource = (source, collector) => {
|
|
65
|
-
const {
|
|
65
|
+
const { shouldKeep, seen, names } = collector;
|
|
66
66
|
for (const property of source.properties) {
|
|
67
|
-
if (!
|
|
67
|
+
if (!shouldKeep(property)) {
|
|
68
68
|
continue;
|
|
69
69
|
}
|
|
70
70
|
const jsName = toCamelIdentifier(property.name);
|
|
@@ -76,7 +76,7 @@ const collectPropNamesFromSource = (source, collector) => {
|
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
const collectPropNames = (sources, shouldKeep) => {
|
|
79
|
-
const collector = {
|
|
79
|
+
const collector = { shouldKeep, seen: new Set(), names: [] };
|
|
80
80
|
for (const source of sources) {
|
|
81
81
|
collectPropNamesFromSource(source, collector);
|
|
82
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirEnum } from \"../../gir/enum.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport {\n implementedInterfaces,\n isIntrinsicElementClass,\n iterateClassesWithGlibName,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementEntry = {\n glibName: string;\n signals: [string, string][];\n constructOnly: string[];\n constructable: string[];\n defaults: [string, string][];\n};\n\ntype PropNameCollector = {\n keep: (property: GirProperty) => boolean;\n seen: Set<string>;\n names: string[];\n};\n\ntype DefaultPropsCollector = {\n library: Library;\n seen: Set<string>;\n defaults: [string, string][];\n};\n\nconst INTEGER_PATTERN = /^-?\\d+$/;\nconst FLOAT_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\nconst generateMetadata = (library: Library): string => {\n const intrinsicElements = collectIntrinsicElements(library);\n\n const signalsEntries = intrinsicElements.map(\n ({ glibName, signals }) => ` \"${glibName}\": ${renderSignalsObject(signals)},`,\n );\n\n const constructOnlyEntries = intrinsicElements\n .filter(({ constructOnly }) => constructOnly.length > 0)\n .map(({ glibName, constructOnly }) => ` \"${glibName}\": ${renderStringSet(constructOnly)},`);\n\n const constructableEntries = intrinsicElements\n .filter(({ constructable }) => constructable.length > 0)\n .map(({ glibName, constructable }) => ` \"${glibName}\": ${renderStringSet(constructable)},`);\n\n const defaultsEntries = intrinsicElements\n .filter(({ defaults }) => defaults.length > 0)\n .map(({ glibName, defaults }) => ` \"${glibName}\": ${renderDefaultsObject(defaults)},`);\n\n return `${[\n `export const SIGNALS: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n `export const CONSTRUCT_ONLY_PROPS: Record<string, Set<string>> = {\\n${constructOnlyEntries.join(\"\\n\")}\\n};`,\n `export const CONSTRUCT_PROPS: Record<string, Set<string>> = {\\n${constructableEntries.join(\"\\n\")}\\n};`,\n `export const DEFAULT_PROPS: Record<string, Record<string, unknown>> = {\\n${defaultsEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library)) {\n continue;\n }\n\n const sources: GirClass[] = [\n klass,\n ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),\n ];\n\n entries.push({\n glibName,\n signals: collectSignals(sources),\n constructOnly: collectConstructOnly(sources),\n constructable: collectConstructable(sources),\n defaults: collectDefaultProps(library, sources),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nconst collectSignalsFromSource = (source: GirClass, seen: Set<string>, signals: [string, string][]): void => {\n for (const signal of source.signals) {\n const handlerName = signalHandlerName(signal.name);\n\n if (seen.has(handlerName)) {\n continue;\n }\n\n seen.add(handlerName);\n signals.push([handlerName, signal.name] as const);\n }\n};\n\nconst collectSignals = (sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const signals: [string, string][] = [];\n\n for (const source of sources) {\n collectSignalsFromSource(source, seen, signals);\n }\n\n return signals;\n};\n\nconst collectPropNamesFromSource = (source: GirClass, collector: PropNameCollector): void => {\n const { keep, seen, names } = collector;\n\n for (const property of source.properties) {\n if (!keep(property)) {\n continue;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n names.push(jsName);\n }\n};\n\nconst collectPropNames = (sources: GirClass[], shouldKeep: (property: GirProperty) => boolean): string[] => {\n const collector: PropNameCollector = { keep: shouldKeep, seen: new Set<string>(), names: [] };\n\n for (const source of sources) {\n collectPropNamesFromSource(source, collector);\n }\n\n return collector.names;\n};\n\nconst collectConstructOnly = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => property.constructOnly && property.introspectable);\n\nconst collectConstructable = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => isConstructableProperty(property) && property.introspectable);\n\nconst renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);\n\n return `{\\n${lines.join(\",\\n\")}\\n }`;\n};\n\nconst renderStringSet = (names: string[]): string =>\n `new Set([${names.map((name) => sourceStringLiteral(name)).join(\",\")}])`;\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst collectDefaultsFromClass = (klass: GirClass, collector: DefaultPropsCollector): void => {\n for (const property of klass.properties) {\n const entry = defaultPropEntry(collector.library, klass, property, collector.seen);\n\n if (entry !== undefined) {\n collector.defaults.push(entry);\n }\n }\n};\n\nconst collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {\n const collector: DefaultPropsCollector = { library, seen: new Set<string>(), defaults: [] };\n\n for (const klass of sources) {\n collectDefaultsFromClass(klass, collector);\n }\n\n return collector.defaults;\n};\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\n\nconst defaultPropEntry = (\n library: Library,\n klass: GirClass,\n property: GirProperty,\n seen: Set<string>,\n): [string, string] | undefined => {\n if (!isDefaultCandidate(property)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n const literal = renderDefaultLiteral(library, klass, property);\n\n if (literal === undefined) {\n return undefined;\n }\n\n return [jsName, literal];\n};\n\nconst willSetterRejectNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {\n if (property.setter === undefined) {\n return false;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return false;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value !== undefined && !value.parameter.nullable && !value.parameter.optional;\n};\n\nconst setterValueRef = (library: Library, klass: GirClass, property: GirProperty): TypeId | undefined => {\n if (property.setter === undefined) {\n return undefined;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return undefined;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value?.parameter.type;\n};\n\nconst renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {\n if (property.defaultValue === \"NULL\" && willSetterRejectNull(library, klass, property)) {\n return undefined;\n }\n\n const ref = setterValueRef(library, klass, property) ?? property.type;\n\n return resolveDefaultLiteral(library, ref, property.defaultValue);\n};\n\nconst resolveDefaultLiteral = (\n library: Library,\n ref: TypeId | undefined,\n raw: string | undefined,\n): string | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n\n if (raw === \"NULL\") {\n return \"null\";\n }\n\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n return resolveTypeDefaultLiteral(library, resolved, raw);\n};\n\nconst resolveTypeDefaultLiteral = (library: Library, resolved: GirType, raw: string): string | undefined => {\n if (resolved.kind === \"primitive\") {\n return primitiveDefaultLiteral(resolved.category, raw);\n }\n\n if (resolved.kind === \"enum\") {\n return enumDefaultLiteral(resolved.value, raw);\n }\n\n if (resolved.kind === \"alias\") {\n return resolveDefaultLiteral(library, resolved.value.target, raw);\n }\n\n return undefined;\n};\n\nconst booleanDefaultLiteral = (raw: string): string | undefined => {\n if (raw === \"TRUE\") {\n return \"true\";\n }\n\n if (raw === \"FALSE\") {\n return \"false\";\n }\n\n return undefined;\n};\n\nconst integerDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? trimmed : undefined;\n};\n\nconst floatDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (!FLOAT_PATTERN.test(trimmed)) {\n return undefined;\n }\n\n const value = Number(trimmed);\n\n return Number.isFinite(value) ? String(value) : undefined;\n};\n\nconst primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {\n switch (category) {\n case \"boolean\": {\n return booleanDefaultLiteral(raw);\n }\n case \"int8\":\n case \"int16\":\n case \"int32\":\n case \"uint8\":\n case \"uint16\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"unichar\": {\n return integerDefaultLiteral(raw);\n }\n case \"float32\":\n case \"float64\": {\n return floatDefaultLiteral(raw);\n }\n case \"string\": {\n return sourceStringLiteral(raw);\n }\n case \"bigint64\":\n case \"biguint64\":\n case \"gtype\": {\n return bigintDefaultLiteral(raw);\n }\n case \"pointer\":\n case \"void\": {\n return undefined;\n }\n }\n};\n\nconst bigintDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? `${trimmed}n` : undefined;\n};\n\nconst enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (INTEGER_PATTERN.test(trimmed)) {\n return trimmed;\n }\n\n const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);\n\n return member?.value;\n};\n\nconst renderDefaultsObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (literal) => literal);\n\nexport { generateMetadata };\n"]}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { GirEnum } from \"../../gir/enum.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { PrimitiveCategory } from \"../../gir/primitives.js\";\nimport type { TypeId } from \"../../gir/type-id.js\";\nimport type { GirType } from \"../../gir/type.js\";\nimport { inputParameters } from \"../../analysis/param-structure.js\";\nimport { type GirProperty, isConstructableProperty } from \"../../gir/property.js\";\nimport {\n implementedInterfaces,\n isIntrinsicElementClass,\n iterateClassesWithGlibName,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementEntry = {\n glibName: string;\n signals: [string, string][];\n constructOnly: string[];\n constructable: string[];\n defaults: [string, string][];\n};\n\ntype PropNameCollector = {\n shouldKeep: (property: GirProperty) => boolean;\n seen: Set<string>;\n names: string[];\n};\n\ntype DefaultPropsCollector = {\n library: Library;\n seen: Set<string>;\n defaults: [string, string][];\n};\n\nconst INTEGER_PATTERN = /^-?\\d+$/;\nconst FLOAT_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i;\n\nconst generateMetadata = (library: Library): string => {\n const intrinsicElements = collectIntrinsicElements(library);\n\n const signalsEntries = intrinsicElements.map(\n ({ glibName, signals }) => ` \"${glibName}\": ${renderSignalsObject(signals)},`,\n );\n\n const constructOnlyEntries = intrinsicElements\n .filter(({ constructOnly }) => constructOnly.length > 0)\n .map(({ glibName, constructOnly }) => ` \"${glibName}\": ${renderStringSet(constructOnly)},`);\n\n const constructableEntries = intrinsicElements\n .filter(({ constructable }) => constructable.length > 0)\n .map(({ glibName, constructable }) => ` \"${glibName}\": ${renderStringSet(constructable)},`);\n\n const defaultsEntries = intrinsicElements\n .filter(({ defaults }) => defaults.length > 0)\n .map(({ glibName, defaults }) => ` \"${glibName}\": ${renderDefaultsObject(defaults)},`);\n\n return `${[\n `export const signals: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n `export const constructOnlyProps: Record<string, Set<string>> = {\\n${constructOnlyEntries.join(\"\\n\")}\\n};`,\n `export const constructProps: Record<string, Set<string>> = {\\n${constructableEntries.join(\"\\n\")}\\n};`,\n `export const defaultProps: Record<string, Record<string, unknown>> = {\\n${defaultsEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library)) {\n continue;\n }\n\n const sources: GirClass[] = [\n klass,\n ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),\n ];\n\n entries.push({\n glibName,\n signals: collectSignals(sources),\n constructOnly: collectConstructOnly(sources),\n constructable: collectConstructable(sources),\n defaults: collectDefaultProps(library, sources),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nconst collectSignalsFromSource = (source: GirClass, seen: Set<string>, signals: [string, string][]): void => {\n for (const signal of source.signals) {\n const handlerName = signalHandlerName(signal.name);\n\n if (seen.has(handlerName)) {\n continue;\n }\n\n seen.add(handlerName);\n signals.push([handlerName, signal.name] as const);\n }\n};\n\nconst collectSignals = (sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const signals: [string, string][] = [];\n\n for (const source of sources) {\n collectSignalsFromSource(source, seen, signals);\n }\n\n return signals;\n};\n\nconst collectPropNamesFromSource = (source: GirClass, collector: PropNameCollector): void => {\n const { shouldKeep, seen, names } = collector;\n\n for (const property of source.properties) {\n if (!shouldKeep(property)) {\n continue;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n names.push(jsName);\n }\n};\n\nconst collectPropNames = (sources: GirClass[], shouldKeep: (property: GirProperty) => boolean): string[] => {\n const collector: PropNameCollector = { shouldKeep, seen: new Set<string>(), names: [] };\n\n for (const source of sources) {\n collectPropNamesFromSource(source, collector);\n }\n\n return collector.names;\n};\n\nconst collectConstructOnly = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => property.constructOnly && property.introspectable);\n\nconst collectConstructable = (sources: GirClass[]): string[] =>\n collectPropNames(sources, (property) => isConstructableProperty(property) && property.introspectable);\n\nconst renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {\n if (entries.length === 0) {\n return \"{}\";\n }\n\n const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);\n\n return `{\\n${lines.join(\",\\n\")}\\n }`;\n};\n\nconst renderStringSet = (names: string[]): string =>\n `new Set([${names.map((name) => sourceStringLiteral(name)).join(\",\")}])`;\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst collectDefaultsFromClass = (klass: GirClass, collector: DefaultPropsCollector): void => {\n for (const property of klass.properties) {\n const entry = defaultPropEntry(collector.library, klass, property, collector.seen);\n\n if (entry !== undefined) {\n collector.defaults.push(entry);\n }\n }\n};\n\nconst collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {\n const collector: DefaultPropsCollector = { library, seen: new Set<string>(), defaults: [] };\n\n for (const klass of sources) {\n collectDefaultsFromClass(klass, collector);\n }\n\n return collector.defaults;\n};\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\n\nconst defaultPropEntry = (\n library: Library,\n klass: GirClass,\n property: GirProperty,\n seen: Set<string>,\n): [string, string] | undefined => {\n if (!isDefaultCandidate(property)) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n const literal = renderDefaultLiteral(library, klass, property);\n\n if (literal === undefined) {\n return undefined;\n }\n\n return [jsName, literal];\n};\n\nconst willSetterRejectNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {\n if (property.setter === undefined) {\n return false;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return false;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value !== undefined && !value.parameter.nullable && !value.parameter.optional;\n};\n\nconst setterValueRef = (library: Library, klass: GirClass, property: GirProperty): TypeId | undefined => {\n if (property.setter === undefined) {\n return undefined;\n }\n\n const setter = klass.methods.find((method) => method.name === property.setter);\n\n if (setter === undefined) {\n return undefined;\n }\n\n const [value] = inputParameters(library, setter);\n\n return value?.parameter.type;\n};\n\nconst renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {\n if (property.defaultValue === \"NULL\" && willSetterRejectNull(library, klass, property)) {\n return undefined;\n }\n\n const ref = setterValueRef(library, klass, property) ?? property.type;\n\n return resolveDefaultLiteral(library, ref, property.defaultValue);\n};\n\nconst resolveDefaultLiteral = (\n library: Library,\n ref: TypeId | undefined,\n raw: string | undefined,\n): string | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n\n if (raw === \"NULL\") {\n return \"null\";\n }\n\n if (ref === undefined) {\n return undefined;\n }\n\n const resolved = library.typeFor(ref);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n return resolveTypeDefaultLiteral(library, resolved, raw);\n};\n\nconst resolveTypeDefaultLiteral = (library: Library, resolved: GirType, raw: string): string | undefined => {\n if (resolved.kind === \"primitive\") {\n return primitiveDefaultLiteral(resolved.category, raw);\n }\n\n if (resolved.kind === \"enum\") {\n return enumDefaultLiteral(resolved.value, raw);\n }\n\n if (resolved.kind === \"alias\") {\n return resolveDefaultLiteral(library, resolved.value.target, raw);\n }\n\n return undefined;\n};\n\nconst booleanDefaultLiteral = (raw: string): string | undefined => {\n if (raw === \"TRUE\") {\n return \"true\";\n }\n\n if (raw === \"FALSE\") {\n return \"false\";\n }\n\n return undefined;\n};\n\nconst integerDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? trimmed : undefined;\n};\n\nconst floatDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (!FLOAT_PATTERN.test(trimmed)) {\n return undefined;\n }\n\n const value = Number(trimmed);\n\n return Number.isFinite(value) ? String(value) : undefined;\n};\n\nconst primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {\n switch (category) {\n case \"boolean\": {\n return booleanDefaultLiteral(raw);\n }\n case \"int8\":\n case \"int16\":\n case \"int32\":\n case \"uint8\":\n case \"uint16\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"unichar\": {\n return integerDefaultLiteral(raw);\n }\n case \"float32\":\n case \"float64\": {\n return floatDefaultLiteral(raw);\n }\n case \"string\": {\n return sourceStringLiteral(raw);\n }\n case \"bigint64\":\n case \"biguint64\":\n case \"gtype\": {\n return bigintDefaultLiteral(raw);\n }\n case \"pointer\":\n case \"void\": {\n return undefined;\n }\n }\n};\n\nconst bigintDefaultLiteral = (raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n return INTEGER_PATTERN.test(trimmed) ? `${trimmed}n` : undefined;\n};\n\nconst enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {\n const trimmed = raw.trim();\n\n if (INTEGER_PATTERN.test(trimmed)) {\n return trimmed;\n }\n\n const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);\n\n return member?.value;\n};\n\nconst renderDefaultsObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (literal) => literal);\n\nexport { generateMetadata };\n"]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/** Props left out of the generated element props, keyed by GLib type name. */
|
|
2
2
|
type OmittedProps = Record<string, string[]>;
|
|
3
|
-
/** Installs the props each element omits (GLib type name → prop names); set once per run. */
|
|
4
3
|
declare const setOmittedProps: (props: OmittedProps) => void;
|
|
5
|
-
/** Whether the element config declares this prop omitted for the type that declares the property. */
|
|
6
4
|
declare const isOmittedProp: (glibName: string | undefined, jsName: string) => boolean;
|
|
7
5
|
/** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */
|
|
8
|
-
declare const
|
|
9
|
-
export { setOmittedProps, isOmittedProp,
|
|
6
|
+
declare const mergeOmittedProps: (...maps: OmittedProps[]) => OmittedProps;
|
|
7
|
+
export { setOmittedProps, isOmittedProp, mergeOmittedProps, type OmittedProps };
|
|
10
8
|
//# sourceMappingURL=omitted-props.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omitted-props.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAI7C,
|
|
1
|
+
{"version":3,"file":"omitted-props.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAI7C,QAAA,MAAM,eAAe,GAAI,OAAO,YAAY,KAAG,IAM9C,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,UAAU,MAAM,GAAG,SAAS,EAAE,QAAQ,MAAM,KAAG,OACQ,CAAC;AAE/E,sGAAsG;AACtG,QAAA,MAAM,iBAAiB,GAAI,GAAG,MAAM,YAAY,EAAE,KAAG,YAUpD,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
const omittedProps = new Map();
|
|
2
|
-
/** Installs the props each element omits (GLib type name → prop names); set once per run. */
|
|
3
2
|
const setOmittedProps = (props) => {
|
|
4
3
|
omittedProps.clear();
|
|
5
4
|
for (const [glibName, names] of Object.entries(props)) {
|
|
6
5
|
omittedProps.set(glibName, new Set(names));
|
|
7
6
|
}
|
|
8
7
|
};
|
|
9
|
-
/** Whether the element config declares this prop omitted for the type that declares the property. */
|
|
10
8
|
const isOmittedProp = (glibName, jsName) => glibName !== undefined && omittedProps.get(glibName)?.has(jsName) === true;
|
|
11
9
|
/** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */
|
|
12
|
-
const
|
|
10
|
+
const mergeOmittedProps = (...maps) => {
|
|
13
11
|
const merged = {};
|
|
14
12
|
for (const map of maps) {
|
|
15
13
|
for (const [glibName, names] of Object.entries(map)) {
|
|
@@ -18,5 +16,5 @@ const mergeOmitProps = (...maps) => {
|
|
|
18
16
|
}
|
|
19
17
|
return merged;
|
|
20
18
|
};
|
|
21
|
-
export { setOmittedProps, isOmittedProp,
|
|
19
|
+
export { setOmittedProps, isOmittedProp, mergeOmittedProps };
|
|
22
20
|
//# sourceMappingURL=omitted-props.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omitted-props.js","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEzD,
|
|
1
|
+
{"version":3,"file":"omitted-props.js","sourceRoot":"","sources":["../../../src/store/jsx/omitted-props.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEzD,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;IAClD,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAA4B,EAAE,MAAc,EAAW,EAAE,CAC5E,QAAQ,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAE/E,sGAAsG;AACtG,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAoB,EAAgB,EAAE;IAChE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAqB,CAAC","sourcesContent":["/** Props left out of the generated element props, keyed by GLib type name. */\ntype OmittedProps = Record<string, string[]>;\n\nconst omittedProps: Map<string, Set<string>> = new Map();\n\nconst setOmittedProps = (props: OmittedProps): void => {\n omittedProps.clear();\n\n for (const [glibName, names] of Object.entries(props)) {\n omittedProps.set(glibName, new Set(names));\n }\n};\n\nconst isOmittedProp = (glibName: string | undefined, jsName: string): boolean =>\n glibName !== undefined && omittedProps.get(glibName)?.has(jsName) === true;\n\n/** Merges omitted-prop maps keyed by GLib type name, concatenating the names each map contributes. */\nconst mergeOmittedProps = (...maps: OmittedProps[]): OmittedProps => {\n const merged: OmittedProps = {};\n\n for (const map of maps) {\n for (const [glibName, names] of Object.entries(map)) {\n merged[glibName] = [...(merged[glibName] ?? []), ...names];\n }\n }\n\n return merged;\n};\n\nexport { setOmittedProps, isOmittedProp, mergeOmittedProps, type OmittedProps };\n"]}
|