@gtkx/codegen 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +1 -1
  2. package/dist/analysis/descriptor-render.d.ts +1 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +56 -28
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +3 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +10 -9
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/compile.d.ts.map +1 -1
  11. package/dist/compile.js +24 -3
  12. package/dist/compile.js.map +1 -1
  13. package/dist/docs/api-reference.d.ts +2 -0
  14. package/dist/docs/api-reference.d.ts.map +1 -1
  15. package/dist/docs/api-reference.js +2 -1
  16. package/dist/docs/api-reference.js.map +1 -1
  17. package/dist/docs/pipeline.d.ts +3 -0
  18. package/dist/docs/pipeline.d.ts.map +1 -1
  19. package/dist/docs/pipeline.js +44 -12
  20. package/dist/docs/pipeline.js.map +1 -1
  21. package/dist/fingerprint.d.ts +3 -0
  22. package/dist/fingerprint.d.ts.map +1 -1
  23. package/dist/fingerprint.js +4 -0
  24. package/dist/fingerprint.js.map +1 -1
  25. package/dist/gi.d.ts +1 -0
  26. package/dist/gi.d.ts.map +1 -1
  27. package/dist/gi.js +4 -1
  28. package/dist/gi.js.map +1 -1
  29. package/dist/gir/libraries.d.ts +12 -5
  30. package/dist/gir/libraries.d.ts.map +1 -1
  31. package/dist/gir/libraries.js +50 -14
  32. package/dist/gir/libraries.js.map +1 -1
  33. package/dist/gir/library.d.ts +5 -0
  34. package/dist/gir/library.d.ts.map +1 -1
  35. package/dist/gir/library.js +6 -0
  36. package/dist/gir/library.js.map +1 -1
  37. package/dist/internal.d.ts +1 -0
  38. package/dist/internal.d.ts.map +1 -1
  39. package/dist/internal.js +1 -0
  40. package/dist/internal.js.map +1 -1
  41. package/dist/jsx.d.ts +1 -0
  42. package/dist/jsx.d.ts.map +1 -1
  43. package/dist/jsx.js +2 -0
  44. package/dist/jsx.js.map +1 -1
  45. package/dist/runner.d.ts +2 -0
  46. package/dist/runner.d.ts.map +1 -1
  47. package/dist/runner.js +3 -1
  48. package/dist/runner.js.map +1 -1
  49. package/dist/store/gi/bootstrap.d.ts +4 -0
  50. package/dist/store/gi/bootstrap.d.ts.map +1 -0
  51. package/dist/store/gi/bootstrap.js +48 -0
  52. package/dist/store/gi/bootstrap.js.map +1 -0
  53. package/dist/store/gi/class.d.ts.map +1 -1
  54. package/dist/store/gi/class.js +75 -28
  55. package/dist/store/gi/class.js.map +1 -1
  56. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  57. package/dist/store/gi/constructor-props.js +2 -1
  58. package/dist/store/gi/constructor-props.js.map +1 -1
  59. package/dist/store/gi/enum.js +3 -3
  60. package/dist/store/gi/enum.js.map +1 -1
  61. package/dist/store/gi/folded.d.ts +14 -0
  62. package/dist/store/gi/folded.d.ts.map +1 -0
  63. package/dist/store/gi/folded.js +35 -0
  64. package/dist/store/gi/folded.js.map +1 -0
  65. package/dist/store/gi/function.d.ts.map +1 -1
  66. package/dist/store/gi/function.js +22 -3
  67. package/dist/store/gi/function.js.map +1 -1
  68. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  69. package/dist/store/gi/gtype-binding.js +11 -1
  70. package/dist/store/gi/gtype-binding.js.map +1 -1
  71. package/dist/store/gi/interface.d.ts.map +1 -1
  72. package/dist/store/gi/interface.js +43 -4
  73. package/dist/store/gi/interface.js.map +1 -1
  74. package/dist/store/gi/method.d.ts.map +1 -1
  75. package/dist/store/gi/method.js +2 -0
  76. package/dist/store/gi/method.js.map +1 -1
  77. package/dist/store/gi/pipeline.d.ts +5 -1
  78. package/dist/store/gi/pipeline.d.ts.map +1 -1
  79. package/dist/store/gi/pipeline.js +13 -1
  80. package/dist/store/gi/pipeline.js.map +1 -1
  81. package/dist/store/gi/property-accessor.js +1 -1
  82. package/dist/store/gi/property-accessor.js.map +1 -1
  83. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  84. package/dist/store/gi/record-field-accessor.js +3 -3
  85. package/dist/store/gi/record-field-accessor.js.map +1 -1
  86. package/dist/store/gi/record.d.ts.map +1 -1
  87. package/dist/store/gi/record.js +44 -12
  88. package/dist/store/gi/record.js.map +1 -1
  89. package/dist/store/gi/registration.js +2 -2
  90. package/dist/store/gi/registration.js.map +1 -1
  91. package/dist/store/gi/return-wrap.js +1 -1
  92. package/dist/store/gi/return-wrap.js.map +1 -1
  93. package/dist/store/gi/signal.d.ts.map +1 -1
  94. package/dist/store/gi/signal.js +7 -3
  95. package/dist/store/gi/signal.js.map +1 -1
  96. package/dist/store/gi/vtable.d.ts.map +1 -1
  97. package/dist/store/gi/vtable.js +1 -1
  98. package/dist/store/gi/vtable.js.map +1 -1
  99. package/dist/store/gi-store.d.ts +1 -0
  100. package/dist/store/gi-store.d.ts.map +1 -1
  101. package/dist/store/gi-store.js +16 -7
  102. package/dist/store/gi-store.js.map +1 -1
  103. package/dist/store/jsx/element-components.d.ts.map +1 -1
  104. package/dist/store/jsx/element-components.js +64 -10
  105. package/dist/store/jsx/element-components.js.map +1 -1
  106. package/dist/store/jsx/element-prop-types.d.ts +2 -0
  107. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  108. package/dist/store/jsx/element-prop-types.js +2 -0
  109. package/dist/store/jsx/element-prop-types.js.map +1 -1
  110. package/dist/store/jsx/metadata.d.ts.map +1 -1
  111. package/dist/store/jsx/metadata.js +28 -1
  112. package/dist/store/jsx/metadata.js.map +1 -1
  113. package/dist/store/jsx-store.d.ts +1 -0
  114. package/dist/store/jsx-store.d.ts.map +1 -1
  115. package/dist/store/jsx-store.js +7 -2
  116. package/dist/store/jsx-store.js.map +1 -1
  117. package/dist/store/resolve-store.d.ts.map +1 -1
  118. package/dist/store/resolve-store.js +2 -0
  119. package/dist/store/resolve-store.js.map +1 -1
  120. package/dist/store/store-fs.d.ts +2 -1
  121. package/dist/store/store-fs.d.ts.map +1 -1
  122. package/dist/store/store-fs.js +1 -1
  123. package/dist/store/store-fs.js.map +1 -1
  124. package/dist/writer/context.d.ts +17 -0
  125. package/dist/writer/context.d.ts.map +1 -1
  126. package/dist/writer/context.js +83 -11
  127. package/dist/writer/context.js.map +1 -1
  128. package/dist/writer/emit.d.ts +2 -1
  129. package/dist/writer/emit.d.ts.map +1 -1
  130. package/dist/writer/emit.js +2 -1
  131. package/dist/writer/emit.js.map +1 -1
  132. package/dist/writer/imports.d.ts.map +1 -1
  133. package/dist/writer/imports.js +6 -1
  134. package/dist/writer/imports.js.map +1 -1
  135. package/dist/writer/module.d.ts +1 -0
  136. package/dist/writer/module.d.ts.map +1 -1
  137. package/dist/writer/module.js +6 -1
  138. package/dist/writer/module.js.map +1 -1
  139. package/overrides/glib/regex.ts.ejs +2 -0
  140. package/package.json +4 -4
  141. package/src/analysis/descriptor-render.ts +79 -30
  142. package/src/analysis/descriptor.ts +19 -11
  143. package/src/compile.ts +42 -3
  144. package/src/docs/api-reference.ts +4 -1
  145. package/src/docs/pipeline.ts +64 -13
  146. package/src/fingerprint.ts +7 -0
  147. package/src/gi.ts +6 -1
  148. package/src/gir/libraries.ts +64 -16
  149. package/src/gir/library.ts +9 -0
  150. package/src/internal.ts +1 -0
  151. package/src/jsx.ts +3 -0
  152. package/src/runner.ts +5 -1
  153. package/src/store/gi/bootstrap.ts +64 -0
  154. package/src/store/gi/class.ts +100 -29
  155. package/src/store/gi/constructor-props.ts +2 -1
  156. package/src/store/gi/enum.ts +4 -4
  157. package/src/store/gi/folded.ts +57 -0
  158. package/src/store/gi/function.ts +22 -3
  159. package/src/store/gi/gtype-binding.ts +15 -2
  160. package/src/store/gi/interface.ts +64 -7
  161. package/src/store/gi/method.ts +2 -0
  162. package/src/store/gi/pipeline.ts +21 -2
  163. package/src/store/gi/property-accessor.ts +1 -1
  164. package/src/store/gi/record-field-accessor.ts +5 -3
  165. package/src/store/gi/record.ts +61 -14
  166. package/src/store/gi/registration.ts +2 -2
  167. package/src/store/gi/return-wrap.ts +1 -1
  168. package/src/store/gi/signal.ts +8 -3
  169. package/src/store/gi/vtable.ts +1 -0
  170. package/src/store/gi-store.ts +19 -7
  171. package/src/store/jsx/element-components.ts +107 -10
  172. package/src/store/jsx/element-prop-types.ts +4 -0
  173. package/src/store/jsx/metadata.ts +41 -0
  174. package/src/store/jsx-store.ts +10 -4
  175. package/src/store/resolve-store.ts +2 -0
  176. package/src/store/store-fs.ts +3 -2
  177. package/src/writer/context.ts +109 -16
  178. package/src/writer/emit.ts +3 -1
  179. package/src/writer/imports.ts +9 -1
  180. package/src/writer/module.ts +9 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { SourceModule } from \"../compile.js\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport {\n type GeneratedLibraries,\n LIBRARIES_FILENAME,\n renderGeneratedLibraries,\n} from \"./gi/generated-libraries.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n girFile: string;\n};\n\ntype GiExternalNamespaceInput = {\n directory: string;\n packageName: string;\n girFile: string;\n};\n\ntype GiStoreRecords = {\n fingerprint: GiFingerprint;\n libraries: GeneratedLibraries;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): SourceModule[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir)\n .filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\")\n .map((name) => overrideModule(`${directory}/overrides/${name.replace(/\\.ejs$/, \"\")}`, join(dir, name)));\n};\n\nconst overrideModule = (fileName: string, overridePath: string): SourceModule => ({\n fileName,\n source: readFileSync(overridePath, \"utf8\"),\n origin: overridePath,\n});\n\nconst barrelFile = (directory: string, girFile: string): SourceModule => {\n const barrel = namespaceBarrel(directory);\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return { ...barrel, origin: girFile };\n }\n\n return overrideModule(barrel.fileName, overrideIndex);\n};\n\nconst externalShimModule = ({ directory, packageName, girFile }: GiExternalNamespaceInput): SourceModule => ({\n fileName: `${directory}/index.ts`,\n source:\n `/** @deprecated Import from \"${packageName}\" instead; this alias is removed in GTKX 2.0. */\\n` +\n `export * from \"${packageName}\";\\n`,\n origin: girFile,\n});\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n externalNamespaces: GiExternalNamespaceInput[],\n): { collected: SourceModule[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: SourceModule[] = [];\n\n for (const { directory, rawSource, girFile } of namespaces) {\n collected.push(\n { fileName: `${directory}/${directory}.ts`, source: rawSource, origin: girFile },\n ...overrideFiles(directory),\n barrelFile(directory, girFile),\n );\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n for (const external of externalNamespaces) {\n collected.push(externalShimModule(external));\n exportsMap[`./${external.directory}`] = subpathExport(`${external.directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst storePeerDependencies = (externalNamespaces: GiExternalNamespaceInput[]): Record<string, string> =>\n Object.fromEntries(\n sortStrings([\"@gtkx/runtime\", ...externalNamespaces.map((entry) => entry.packageName)]).map((name) => [\n name,\n \"*\",\n ]),\n );\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n externalNamespaces: GiExternalNamespaceInput[],\n records: GiStoreRecords,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces, externalNamespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: storePeerDependencies(externalNamespaces),\n }),\n rawFiles: [\n { relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(records.fingerprint, null, 2)}\\n` },\n { relativePath: LIBRARIES_FILENAME, content: renderGeneratedLibraries(records.libraries) },\n ],\n });\n};\n\nexport { writeGiStore, type GiExternalNamespaceInput, type GiNamespaceInput };\n"]}
1
+ {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { SourceModule } from \"../compile.js\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport {\n type GeneratedLibraries,\n LIBRARIES_FILENAME,\n renderGeneratedLibraries,\n} from \"./gi/generated-libraries.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n rawBootstrapSource?: string | undefined;\n girFile: string;\n};\n\ntype GiExternalNamespaceInput = {\n directory: string;\n packageName: string;\n girFile: string;\n};\n\ntype GiStoreRecords = {\n fingerprint: GiFingerprint;\n libraries: GeneratedLibraries;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\nconst TREE_SHAKEN_SIDE_EFFECTS = [\"**/bootstrap.js\", \"**/overrides/*.js\", \"**/index.js\"];\n\nconst overrideFiles = (directory: string): SourceModule[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir)\n .filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\")\n .map((name) => overrideModule(`${directory}/overrides/${name.replace(/\\.ejs$/, \"\")}`, join(dir, name)));\n};\n\nconst overrideModule = (fileName: string, overridePath: string): SourceModule => ({\n fileName,\n source: readFileSync(overridePath, \"utf8\"),\n origin: overridePath,\n});\n\nconst barrelFile = (directory: string, girFile: string, hasBootstrap: boolean): SourceModule => {\n const barrel = namespaceBarrel(directory);\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n const file = existsSync(overrideIndex)\n ? overrideModule(barrel.fileName, overrideIndex)\n : { ...barrel, origin: girFile };\n\n if (!hasBootstrap) {\n return file;\n }\n\n return { ...file, source: `import \"./bootstrap.js\";\\n${file.source}` };\n};\n\nconst externalShimModule = ({ directory, packageName, girFile }: GiExternalNamespaceInput): SourceModule => ({\n fileName: `${directory}/index.ts`,\n source:\n `/** @deprecated Since 1.3. Import from \"${packageName}\" instead. Removed in v2. */\\n` +\n `export * from \"${packageName}\";\\n`,\n origin: girFile,\n});\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n externalNamespaces: GiExternalNamespaceInput[],\n): { collected: SourceModule[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: SourceModule[] = [];\n\n for (const { directory, rawSource, rawBootstrapSource, girFile } of namespaces) {\n collected.push(\n { fileName: `${directory}/${directory}.ts`, source: rawSource, origin: girFile },\n ...overrideFiles(directory),\n barrelFile(directory, girFile, rawBootstrapSource !== undefined),\n );\n\n if (rawBootstrapSource !== undefined) {\n collected.push({ fileName: `${directory}/bootstrap.ts`, source: rawBootstrapSource, origin: girFile });\n }\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n for (const external of externalNamespaces) {\n collected.push(externalShimModule(external));\n exportsMap[`./${external.directory}`] = subpathExport(`${external.directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst storePeerDependencies = (externalNamespaces: GiExternalNamespaceInput[]): Record<string, string> =>\n Object.fromEntries(\n sortStrings([\"@gtkx/runtime\", ...externalNamespaces.map((entry) => entry.packageName)]).map((name) => [\n name,\n \"*\",\n ]),\n );\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n externalNamespaces: GiExternalNamespaceInput[],\n records: GiStoreRecords,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces, externalNamespaces);\n const isTreeShaken = namespaces.some((namespace) => namespace.rawBootstrapSource !== undefined);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n sideEffects: isTreeShaken ? TREE_SHAKEN_SIDE_EFFECTS : true,\n peerDependencies: storePeerDependencies(externalNamespaces),\n }),\n rawFiles: [\n { relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(records.fingerprint, null, 2)}\\n` },\n { relativePath: LIBRARIES_FILENAME, content: renderGeneratedLibraries(records.libraries) },\n ],\n });\n};\n\nexport { writeGiStore, type GiExternalNamespaceInput, type GiNamespaceInput };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAgBlE,QAAA,MAAM,gCAAgC,GAClC,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS;IACL,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,yBAAyB,CAAC;CACzC,KACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAiB9C,CAAC;AAiGF,OAAO,EAAE,gCAAgC,EAAE,KAAK,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAuBlE,QAAA,MAAM,gCAAgC,GAClC,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS;IACL,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,yBAAyB,CAAC;CACzC,KACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAqB9C,CAAC;AAsLF,OAAO,EAAE,gCAAgC,EAAE,KAAK,yBAAyB,EAAE,CAAC"}
@@ -1,6 +1,8 @@
1
- import { sourceStringLiteral } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
2
+ import { externalPackageFor } from "../../gir/external-namespaces.js";
2
3
  import { getDoc } from "../gi/doc-spec.js";
3
4
  import { ancestorGlibNames } from "./intrinsic-elements.js";
5
+ const METADATA_ALIAS = "Metadata$";
4
6
  const generateElementComponentsSection = (targetNamespace, library, options) => {
5
7
  const collector = { imports: options.imports, exportedNames: new Set(), exportLines: [] };
6
8
  const lazyElements = options.lazyElements;
@@ -12,7 +14,10 @@ const generateElementComponentsSection = (targetNamespace, library, options) =>
12
14
  intrinsicElements: options.intrinsicElements,
13
15
  components: options.components,
14
16
  });
15
- collectLazyElementExports(collector, lazyElements);
17
+ collectLazyElementExports(collector, lazyElements, {
18
+ isTreeShaken: library.isTreeShaken,
19
+ intrinsicNames: new Set(options.intrinsicElements.map((entry) => entry.glibName)),
20
+ });
16
21
  const source = collector.exportLines.join("\n\n");
17
22
  return { source, exportedNames: collector.exportedNames };
18
23
  };
@@ -36,17 +41,48 @@ const collectCandidateExports = (collector, options) => {
36
41
  appendCandidateExport(collector, candidate, options);
37
42
  }
38
43
  };
39
- const collectLazyElementExports = (collector, lazyElements) => {
44
+ const collectLazyElementExports = (collector, lazyElements, options) => {
40
45
  for (const spec of lazyElements) {
41
46
  collector.imports.addNamed("@gtkx/react/internal", "createElementComponent", false);
42
47
  collector.imports.addNamed("react", "ReactNode", true);
43
- collector.exportLines.push(renderLazyElementExport(spec));
48
+ const refs = {
49
+ classRef: lazyClassRef(collector, spec, options),
50
+ metadataRef: lazyMetadataRef(collector, spec, options),
51
+ };
52
+ collector.exportLines.push(renderLazyElementExport(spec, refs, options));
44
53
  collector.exportedNames.add(spec.element);
45
54
  }
46
55
  };
47
- const renderLazyElementExport = (spec) => {
56
+ const lazyMetadataRef = (collector, spec, options) => {
57
+ if (!options.isTreeShaken || !options.intrinsicNames.has(spec.element)) {
58
+ return undefined;
59
+ }
60
+ collector.imports.addNamespace("../metadata.js", METADATA_ALIAS, false);
61
+ return `${METADATA_ALIAS}.${spec.element}`;
62
+ };
63
+ const lazyClassRef = (collector, spec, options) => {
64
+ if (!options.isTreeShaken) {
65
+ return undefined;
66
+ }
67
+ const alias = `${spec.namespaceName}$`;
68
+ const specifier = externalPackageFor(spec.namespaceName) ?? `@gtkx/gi/${spec.namespaceName.toLowerCase()}`;
69
+ collector.imports.addNamespace(specifier, alias, false);
70
+ return `${alias}.${sanitizeTypeIdentifier(spec.className)}`;
71
+ };
72
+ const renderLazyElementExport = (spec, refs, options) => {
48
73
  const doc = getDoc(spec);
49
- const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;
74
+ const args = [sourceStringLiteral(spec.element)];
75
+ if (refs.classRef !== undefined) {
76
+ args.push(refs.classRef);
77
+ }
78
+ else if (refs.metadataRef !== undefined) {
79
+ args.push("undefined");
80
+ }
81
+ if (refs.metadataRef !== undefined) {
82
+ args.push(refs.metadataRef);
83
+ }
84
+ const pure = options.isTreeShaken ? "/* @__PURE__ */ " : "";
85
+ const factory = `${pure}createElementComponent(${args.join(", ")})`;
50
86
  const component = `${doc}export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;
51
87
  return `${doc}${spec.typeSource}\n\n${component}`;
52
88
  };
@@ -59,8 +95,18 @@ const renderCandidateExport = (candidate, library, imports, components) => {
59
95
  if (component !== undefined) {
60
96
  imports.addNamed(component.module, component.export, false);
61
97
  }
98
+ let classRef;
99
+ let metadataRef;
100
+ if (library.isTreeShaken) {
101
+ const alias = `${namespace.name}$`;
102
+ const specifier = externalPackageFor(namespace.name) ?? `@gtkx/gi/${namespace.name.toLowerCase()}`;
103
+ imports.addNamespace(specifier, alias, false);
104
+ imports.addNamespace("../metadata.js", METADATA_ALIAS, false);
105
+ classRef = `${alias}.${sanitizeTypeIdentifier(klass.name)}`;
106
+ metadataRef = `${METADATA_ALIAS}.${glibName}`;
107
+ }
62
108
  const doc = getDoc(klass);
63
- return `${doc}${renderElementComponentExport(glibName, component)}`;
109
+ return `${doc}${renderElementComponentExport(glibName, component, classRef, metadataRef)}`;
64
110
  };
65
111
  const resolveElementComponent = (ancestry, components) => {
66
112
  for (const name of ancestry) {
@@ -71,14 +117,22 @@ const resolveElementComponent = (ancestry, components) => {
71
117
  }
72
118
  return undefined;
73
119
  };
74
- const renderElementComponentExport = (glibName, component) => {
120
+ const renderElementComponentExport = (glibName, component, classRef, metadataRef) => {
75
121
  const propsType = `${glibName}Props`;
76
122
  const annotation = `(props: ${propsType}) => ReactNode`;
77
- const factoryCall = `createElementComponent(${sourceStringLiteral(glibName)})`;
123
+ const args = [sourceStringLiteral(glibName)];
124
+ if (classRef !== undefined) {
125
+ args.push(classRef);
126
+ }
127
+ if (metadataRef !== undefined) {
128
+ args.push(metadataRef);
129
+ }
130
+ const pure = classRef === undefined ? "" : "/* @__PURE__ */ ";
131
+ const factoryCall = `${pure}createElementComponent(${args.join(", ")})`;
78
132
  if (component === undefined) {
79
133
  return `export const ${glibName}: ${annotation} = ${factoryCall};`;
80
134
  }
81
- return `export const ${glibName}: ${annotation} = ${component.export}(${factoryCall});`;
135
+ return `export const ${glibName}: ${annotation} = ${pure}${component.export}(${factoryCall});`;
82
136
  };
83
137
  export { generateElementComponentsSection };
84
138
  //# sourceMappingURL=element-components.js.map
@@ -1 +1 @@
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 { getDoc } from \"../gi/doc-spec.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 doc = getDoc(spec);\n const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;\n const component = `${doc}export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;\n\n return `${doc}${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 const doc = getDoc(klass);\n\n return `${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 ElementComponentOverrides };\n"]}
1
+ {"version":3,"file":"element-components.js","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, 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 { externalPackageFor } from \"../../gir/external-namespaces.js\";\nimport { getDoc } from \"../gi/doc-spec.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\ntype LazyMetadataOptions = {\n isTreeShaken: boolean;\n intrinsicNames: Set<string>;\n};\n\nconst METADATA_ALIAS = \"Metadata$\";\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 isTreeShaken: library.isTreeShaken,\n intrinsicNames: new Set(options.intrinsicElements.map((entry) => entry.glibName)),\n });\n\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 = (\n collector: ExportCollector,\n lazyElements: LazyElementSpec[],\n options: LazyMetadataOptions,\n): void => {\n for (const spec of lazyElements) {\n collector.imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n collector.imports.addNamed(\"react\", \"ReactNode\", true);\n\n const refs = {\n classRef: lazyClassRef(collector, spec, options),\n metadataRef: lazyMetadataRef(collector, spec, options),\n };\n\n collector.exportLines.push(renderLazyElementExport(spec, refs, options));\n collector.exportedNames.add(spec.element);\n }\n};\n\nconst lazyMetadataRef = (\n collector: ExportCollector,\n spec: LazyElementSpec,\n options: LazyMetadataOptions,\n): string | undefined => {\n if (!options.isTreeShaken || !options.intrinsicNames.has(spec.element)) {\n return undefined;\n }\n\n collector.imports.addNamespace(\"../metadata.js\", METADATA_ALIAS, false);\n\n return `${METADATA_ALIAS}.${spec.element}`;\n};\n\nconst lazyClassRef = (\n collector: ExportCollector,\n spec: LazyElementSpec,\n options: LazyMetadataOptions,\n): string | undefined => {\n if (!options.isTreeShaken) {\n return undefined;\n }\n\n const alias = `${spec.namespaceName}$`;\n const specifier = externalPackageFor(spec.namespaceName) ?? `@gtkx/gi/${spec.namespaceName.toLowerCase()}`;\n collector.imports.addNamespace(specifier, alias, false);\n\n return `${alias}.${sanitizeTypeIdentifier(spec.className)}`;\n};\n\nconst renderLazyElementExport = (\n spec: LazyElementSpec,\n refs: { classRef: string | undefined; metadataRef: string | undefined },\n options: LazyMetadataOptions,\n): string => {\n const doc = getDoc(spec);\n const args = [sourceStringLiteral(spec.element)];\n\n if (refs.classRef !== undefined) {\n args.push(refs.classRef);\n } else if (refs.metadataRef !== undefined) {\n args.push(\"undefined\");\n }\n\n if (refs.metadataRef !== undefined) {\n args.push(refs.metadataRef);\n }\n\n const pure = options.isTreeShaken ? \"/* @__PURE__ */ \" : \"\";\n const factory = `${pure}createElementComponent(${args.join(\", \")})`;\n const component = `${doc}export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;\n\n return `${doc}${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 let classRef: string | undefined;\n let metadataRef: string | undefined;\n\n if (library.isTreeShaken) {\n const alias = `${namespace.name}$`;\n const specifier = externalPackageFor(namespace.name) ?? `@gtkx/gi/${namespace.name.toLowerCase()}`;\n imports.addNamespace(specifier, alias, false);\n imports.addNamespace(\"../metadata.js\", METADATA_ALIAS, false);\n classRef = `${alias}.${sanitizeTypeIdentifier(klass.name)}`;\n metadataRef = `${METADATA_ALIAS}.${glibName}`;\n }\n\n const doc = getDoc(klass);\n\n return `${doc}${renderElementComponentExport(glibName, component, classRef, metadataRef)}`;\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 = (\n glibName: string,\n component: ElementComponent | undefined,\n classRef: string | undefined,\n metadataRef: string | undefined,\n): string => {\n const propsType = `${glibName}Props`;\n const annotation = `(props: ${propsType}) => ReactNode`;\n const args = [sourceStringLiteral(glibName)];\n\n if (classRef !== undefined) {\n args.push(classRef);\n }\n\n if (metadataRef !== undefined) {\n args.push(metadataRef);\n }\n\n const pure = classRef === undefined ? \"\" : \"/* @__PURE__ */ \";\n const factoryCall = `${pure}createElementComponent(${args.join(\", \")})`;\n\n if (component === undefined) {\n return `export const ${glibName}: ${annotation} = ${factoryCall};`;\n }\n\n return `export const ${glibName}: ${annotation} = ${pure}${component.export}(${factoryCall});`;\n};\n\nexport { generateElementComponentsSection, type ElementComponentOverrides };\n"]}
@@ -6,6 +6,8 @@ type LazyElementSpec = {
6
6
  typeSource: string;
7
7
  doc: string | undefined;
8
8
  annotations: GirAnnotations;
9
+ namespaceName: string;
10
+ className: string;
9
11
  };
10
12
  declare const lazyElementSpecs: (context: GirIndex, lazyElements: string[]) => Map<string, LazyElementSpec[]>;
11
13
  export { lazyElementSpecs, type LazyElementSpec };
@@ -1 +1 @@
1
- {"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,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;IACnB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;CAC/B,CAAC;AAoCF,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"}
1
+ {"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,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;IACnB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAsCF,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"}
@@ -27,6 +27,8 @@ const createLazyElementSpec = (context, element, entry) => {
27
27
  typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };`,
28
28
  doc: entry.klass.doc,
29
29
  annotations: entry.klass.annotations,
30
+ namespaceName: entry.namespace.name,
31
+ className: entry.klass.name,
30
32
  };
31
33
  };
32
34
  const lazyElementSpecs = (context, 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;AAGhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtD,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;QACH,OAAO;QACP,QAAQ;QACR,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B;QAC3E,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;QACpB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;KACvC,CAAC;AACN,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 { GirAnnotations } from \"../../gir/annotations.js\";\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 doc: string | undefined;\n annotations: GirAnnotations;\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 {\n element,\n typeName,\n typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };`,\n doc: entry.klass.doc,\n annotations: entry.klass.annotations,\n };\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"]}
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;AAGhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAYtD,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;QACH,OAAO;QACP,QAAQ;QACR,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B;QAC3E,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;QACpB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;QACpC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;QACnC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;KAC9B,CAAC;AACN,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 { GirAnnotations } from \"../../gir/annotations.js\";\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 doc: string | undefined;\n annotations: GirAnnotations;\n namespaceName: string;\n className: 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 {\n element,\n typeName,\n typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };`,\n doc: entry.klass.doc,\n annotations: entry.klass.annotations,\n namespaceName: entry.namespace.name,\n className: entry.klass.name,\n };\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA+BpD,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,MAiB5C,CAAC;AA2RF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAiCpD,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,MAqB5C,CAAC;AA8TF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
2
  import { inputParameters } from "../../analysis/param-structure.js";
3
3
  import { isConstructableProperty } from "../../gir/property.js";
4
- import { implementedInterfaces, isIntrinsicElementClass, iterateClassesWithGlibName, signalHandlerName, } from "./intrinsic-elements.js";
4
+ import { ancestorGlibNames, implementedInterfaces, isIntrinsicElementClass, iterateClassesWithGlibName, signalHandlerName, } from "./intrinsic-elements.js";
5
5
  const READABLE = 1;
6
6
  const WRITABLE = 2;
7
7
  const CONSTRUCT = 4;
@@ -12,6 +12,9 @@ const INTEGER_PATTERN = /^-?\d+$/;
12
12
  const FLOAT_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
13
13
  const generateMetadata = (library) => {
14
14
  const intrinsicElements = collectIntrinsicElements(library);
15
+ if (library.isTreeShaken) {
16
+ return generateEntryMetadata(intrinsicElements);
17
+ }
15
18
  const signalsEntries = intrinsicElements.map(({ glibName, signals }) => ` "${glibName}": ${renderSignalsObject(signals)},`);
16
19
  const propertyEntries = intrinsicElements
17
20
  .filter(({ properties }) => properties.length > 0)
@@ -23,6 +26,29 @@ const generateMetadata = (library) => {
23
26
  `{\n${propertyEntries.join("\n")}\n};`,
24
27
  ].join("\n\n")}\n`;
25
28
  };
29
+ const entryAncestorsInSet = (entry, names) => entry.ancestors.filter((name) => name !== entry.glibName && names.has(name));
30
+ const compareEntriesByDepth = (names) => (first, second) => entryAncestorsInSet(first, names).length - entryAncestorsInSet(second, names).length ||
31
+ first.glibName.localeCompare(second.glibName);
32
+ const renderEntryExport = (entry, names) => {
33
+ const parent = entryAncestorsInSet(entry, names)[0] ?? "undefined";
34
+ const literal = sourceStringLiteral(entry.glibName);
35
+ const ownSignals = renderSignalsObject(entry.signals);
36
+ const ownProperties = renderPropertiesObject(entry.properties);
37
+ const call = `registerElementMetadata(${literal}, ${parent}, ${ownSignals}, ${ownProperties})`;
38
+ return `export const ${entry.glibName}: string = /* @__PURE__ */ ${call};`;
39
+ };
40
+ const generateEntryMetadata = (intrinsicElements) => {
41
+ const names = new Set(intrinsicElements.map((entry) => entry.glibName));
42
+ const ordered = intrinsicElements.toSorted(compareEntriesByDepth(names));
43
+ const lines = ordered.map((entry) => renderEntryExport(entry, names));
44
+ return `${[
45
+ "import { registerElementMetadata } from \"@gtkx/runtime/internal\";",
46
+ PROPERTY_ENTRY_TYPE,
47
+ "export const signals: Record<string, Record<string, string>> = {};",
48
+ "export const properties: Record<string, Record<string, PropertyEntry>> = {};",
49
+ lines.join("\n\n"),
50
+ ].join("\n\n")}\n`;
51
+ };
26
52
  const collectIntrinsicElements = (library) => {
27
53
  const entries = [];
28
54
  const seen = new Set();
@@ -39,6 +65,7 @@ const collectIntrinsicElements = (library) => {
39
65
  glibName,
40
66
  signals: collectSignals(sources),
41
67
  properties: collectProperties(library, sources),
68
+ ancestors: ancestorGlibNames(klass, namespace, library),
42
69
  });
43
70
  }
44
71
  return sortStringsBy(entries, (entry) => entry.glibName);
@@ -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 properties: [string, string][];\n};\n\nconst READABLE = 1;\nconst WRITABLE = 2;\nconst CONSTRUCT = 4;\nconst CONSTRUCT_ONLY = 8;\n\nconst PROPERTY_ENTRY_TYPE =\n \"/** The GObject name of a property, what a write may do to it, and the value it resets to. */\\n\" +\n \"export type PropertyEntry = [name: string, flags: number, defaultValue?: unknown];\";\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 propertyEntries = intrinsicElements\n .filter(({ properties }) => properties.length > 0)\n .map(({ glibName, properties }) => ` \"${glibName}\": ${renderPropertiesObject(properties)},`);\n\n return `${[\n PROPERTY_ENTRY_TYPE,\n `export const signals: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n \"export const properties: Record<string, Record<string, PropertyEntry>> = \" +\n `{\\n${propertyEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n const seen: Set<string> = new Set();\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\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 properties: collectProperties(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 propertyFlags = (property: GirProperty): number => {\n const construct = isConstructableProperty(property) && !property.constructOnly ? CONSTRUCT : 0;\n const constructOnly = property.constructOnly ? CONSTRUCT_ONLY : 0;\n\n return (property.readable ? READABLE : 0) |\n (property.writable ? WRITABLE : 0) |\n construct |\n constructOnly;\n};\n\nconst propertyEntryLiteral = (library: Library, klass: GirClass, property: GirProperty): string => {\n const head = `${sourceStringLiteral(property.name)},${String(propertyFlags(property))}`;\n const literal = isDefaultCandidate(property) ? renderDefaultLiteral(library, klass, property) : undefined;\n\n return literal === undefined ? `[${head}]` : `[${head},${literal}]`;\n};\n\nconst collectPropertiesFromSource = (\n library: Library,\n source: GirClass,\n seen: Set<string>,\n entries: [string, string][],\n): void => {\n for (const property of source.properties) {\n const jsName = toCamelIdentifier(property.name);\n\n if (!property.introspectable || seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n entries.push([jsName, propertyEntryLiteral(library, source, property)]);\n }\n};\n\nconst collectProperties = (library: Library, sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const entries: [string, string][] = [];\n\n for (const source of sources) {\n collectPropertiesFromSource(library, source, seen, entries);\n }\n\n return entries;\n};\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 renderPropertiesObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (value) => value);\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\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 integer = integerDefaultLiteral(raw);\n\n return integer === undefined ? undefined : `${integer}n`;\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\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 ancestorGlibNames,\n implementedInterfaces,\n isIntrinsicElementClass,\n iterateClassesWithGlibName,\n signalHandlerName,\n} from \"./intrinsic-elements.js\";\n\ntype IntrinsicElementEntry = {\n glibName: string;\n signals: [string, string][];\n properties: [string, string][];\n ancestors: string[];\n};\n\nconst READABLE = 1;\nconst WRITABLE = 2;\nconst CONSTRUCT = 4;\nconst CONSTRUCT_ONLY = 8;\n\nconst PROPERTY_ENTRY_TYPE =\n \"/** The GObject name of a property, what a write may do to it, and the value it resets to. */\\n\" +\n \"export type PropertyEntry = [name: string, flags: number, defaultValue?: unknown];\";\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 if (library.isTreeShaken) {\n return generateEntryMetadata(intrinsicElements);\n }\n\n const signalsEntries = intrinsicElements.map(\n ({ glibName, signals }) => ` \"${glibName}\": ${renderSignalsObject(signals)},`,\n );\n\n const propertyEntries = intrinsicElements\n .filter(({ properties }) => properties.length > 0)\n .map(({ glibName, properties }) => ` \"${glibName}\": ${renderPropertiesObject(properties)},`);\n\n return `${[\n PROPERTY_ENTRY_TYPE,\n `export const signals: Record<string, Record<string, string>> = {\\n${signalsEntries.join(\"\\n\")}\\n};`,\n \"export const properties: Record<string, Record<string, PropertyEntry>> = \" +\n `{\\n${propertyEntries.join(\"\\n\")}\\n};`,\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst entryAncestorsInSet = (entry: IntrinsicElementEntry, names: Set<string>): string[] =>\n entry.ancestors.filter((name) => name !== entry.glibName && names.has(name));\n\nconst compareEntriesByDepth = (\n names: Set<string>,\n): ((first: IntrinsicElementEntry, second: IntrinsicElementEntry) => number) =>\n (first, second) =>\n entryAncestorsInSet(first, names).length - entryAncestorsInSet(second, names).length ||\n first.glibName.localeCompare(second.glibName);\n\nconst renderEntryExport = (entry: IntrinsicElementEntry, names: Set<string>): string => {\n const parent = entryAncestorsInSet(entry, names)[0] ?? \"undefined\";\n const literal = sourceStringLiteral(entry.glibName);\n const ownSignals = renderSignalsObject(entry.signals);\n const ownProperties = renderPropertiesObject(entry.properties);\n const call = `registerElementMetadata(${literal}, ${parent}, ${ownSignals}, ${ownProperties})`;\n\n return `export const ${entry.glibName}: string = /* @__PURE__ */ ${call};`;\n};\n\nconst generateEntryMetadata = (intrinsicElements: IntrinsicElementEntry[]): string => {\n const names = new Set(intrinsicElements.map((entry) => entry.glibName));\n const ordered = intrinsicElements.toSorted(compareEntriesByDepth(names));\n const lines = ordered.map((entry) => renderEntryExport(entry, names));\n\n return `${[\n \"import { registerElementMetadata } from \\\"@gtkx/runtime/internal\\\";\",\n PROPERTY_ENTRY_TYPE,\n \"export const signals: Record<string, Record<string, string>> = {};\",\n \"export const properties: Record<string, Record<string, PropertyEntry>> = {};\",\n lines.join(\"\\n\\n\"),\n ].join(\"\\n\\n\")}\\n`;\n};\n\nconst collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {\n const entries: IntrinsicElementEntry[] = [];\n const seen: Set<string> = new Set();\n\n for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\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 properties: collectProperties(library, sources),\n ancestors: ancestorGlibNames(klass, namespace, library),\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 propertyFlags = (property: GirProperty): number => {\n const construct = isConstructableProperty(property) && !property.constructOnly ? CONSTRUCT : 0;\n const constructOnly = property.constructOnly ? CONSTRUCT_ONLY : 0;\n\n return (property.readable ? READABLE : 0) |\n (property.writable ? WRITABLE : 0) |\n construct |\n constructOnly;\n};\n\nconst propertyEntryLiteral = (library: Library, klass: GirClass, property: GirProperty): string => {\n const head = `${sourceStringLiteral(property.name)},${String(propertyFlags(property))}`;\n const literal = isDefaultCandidate(property) ? renderDefaultLiteral(library, klass, property) : undefined;\n\n return literal === undefined ? `[${head}]` : `[${head},${literal}]`;\n};\n\nconst collectPropertiesFromSource = (\n library: Library,\n source: GirClass,\n seen: Set<string>,\n entries: [string, string][],\n): void => {\n for (const property of source.properties) {\n const jsName = toCamelIdentifier(property.name);\n\n if (!property.introspectable || seen.has(jsName)) {\n continue;\n }\n\n seen.add(jsName);\n entries.push([jsName, propertyEntryLiteral(library, source, property)]);\n }\n};\n\nconst collectProperties = (library: Library, sources: GirClass[]): [string, string][] => {\n const seen: Set<string> = new Set();\n const entries: [string, string][] = [];\n\n for (const source of sources) {\n collectPropertiesFromSource(library, source, seen, entries);\n }\n\n return entries;\n};\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 renderPropertiesObject = (entries: [string, string][]): string =>\n renderObjectLiteral(entries, (value) => value);\n\nconst renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);\n\nconst isDefaultCandidate = (property: GirProperty): boolean =>\n (property.writable || property.construct) && !property.constructOnly && property.introspectable;\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 integer = integerDefaultLiteral(raw);\n\n return integer === undefined ? undefined : `${integer}n`;\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\nexport { generateMetadata };\n"]}
@@ -7,6 +7,7 @@ type WriteJsxStoreParams = {
7
7
  metadata: string;
8
8
  externalPackages: string[];
9
9
  rawFiles: RawFile[];
10
+ isTreeShaken?: boolean;
10
11
  };
11
12
  declare const writeJsxStore: (params: WriteJsxStoreParams) => void;
12
13
  export { writeJsxStore };
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAkC,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE7G,KAAK,mBAAmB,GAAG;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACvB,CAAC;AAOF,QAAA,MAAM,aAAa,GAAI,QAAQ,mBAAmB,KAAG,IA+BpD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"jsx-store.d.ts","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAkC,KAAK,YAAY,EAA6B,MAAM,eAAe,CAAC;AAE7G,KAAK,mBAAmB,GAAG;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAWF,QAAA,MAAM,aAAa,GAAI,QAAQ,mBAAmB,KAAG,IAgCpD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import { sortStrings } from "@gtkx/utils";
2
2
  import { buildManifest, namespaceBarrel, subpathExport, writeStore } from "./store-fs.js";
3
- const jsxPeerDependencies = (externalPackages) => Object.fromEntries(sortStrings(["@gtkx/gi", "@gtkx/react", "react", ...externalPackages]).map((name) => [name, "*"]));
3
+ const jsxPeerDependencies = (externalPackages, isTreeShaken) => {
4
+ const runtime = isTreeShaken ? ["@gtkx/runtime"] : [];
5
+ return Object.fromEntries(sortStrings(["@gtkx/gi", "@gtkx/react", "react", ...runtime, ...externalPackages])
6
+ .map((name) => [name, "*"]));
7
+ };
4
8
  const writeJsxStore = (params) => {
5
9
  const { options, namespaces, metadata, externalPackages, rawFiles } = params;
6
10
  const exportsMap = {
@@ -23,7 +27,8 @@ const writeJsxStore = (params) => {
23
27
  name: "@gtkx/jsx",
24
28
  version: options.version,
25
29
  exports: exportsMap,
26
- peerDependencies: jsxPeerDependencies(externalPackages),
30
+ sideEffects: params.isTreeShaken !== true,
31
+ peerDependencies: jsxPeerDependencies(externalPackages, params.isTreeShaken === true),
27
32
  }),
28
33
  rawFiles,
29
34
  });
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAU7G,MAAM,mBAAmB,GAAG,CAAC,gBAA0B,EAA0B,EAAE,CAC/E,MAAM,CAAC,WAAW,CACd,WAAW,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACpG,CAAC;AAEN,MAAM,aAAa,GAAG,CAAC,MAA2B,EAAQ,EAAE;IACxD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE7E,MAAM,UAAU,GAA4B;QACxC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;QAC3B,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;QACnE,YAAY,CAAC,IAAI,CAAC,oBAAoB,SAAS,aAAa,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7E,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;SAC1D,CAAC;QACF,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype WriteJsxStoreParams = {\n options: StoreOptions;\n namespaces: JsxNamespaceFile[];\n metadata: string;\n externalPackages: string[];\n rawFiles: RawFile[];\n};\n\nconst jsxPeerDependencies = (externalPackages: string[]): Record<string, string> =>\n Object.fromEntries(\n sortStrings([\"@gtkx/gi\", \"@gtkx/react\", \"react\", ...externalPackages]).map((name) => [name, \"*\"]),\n );\n\nconst writeJsxStore = (params: WriteJsxStoreParams): void => {\n const { options, namespaces, metadata, externalPackages, rawFiles } = params;\n\n const exportsMap: Record<string, unknown> = {\n \".\": subpathExport(\"index\"),\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n const indexExports: string[] = [];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n indexExports.push(`export * from \"./${directory}/index.js\";`);\n }\n\n files.push({ fileName: \"index.ts\", source: `${indexExports.join(\"\\n\")}\\n` });\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: jsxPeerDependencies(externalPackages),\n }),\n rawFiles,\n });\n};\n\nexport { writeJsxStore };\n"]}
1
+ {"version":3,"file":"jsx-store.js","sourceRoot":"","sources":["../../src/store/jsx-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAW7G,MAAM,mBAAmB,GAAG,CAAC,gBAA0B,EAAE,YAAqB,EAA0B,EAAE;IACtG,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtD,OAAO,MAAM,CAAC,WAAW,CACrB,WAAW,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC;SAC7E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAClC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAA2B,EAAQ,EAAE;IACxD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE7E,MAAM,UAAU,GAA4B;QACxC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC;QAC3B,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC;KAC1C,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,SAAS,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC;QACnE,YAAY,CAAC,IAAI,CAAC,oBAAoB,SAAS,aAAa,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7E,UAAU,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,QAAQ,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,UAAU;YACnB,WAAW,EAAE,MAAM,CAAC,YAAY,KAAK,IAAI;YACzC,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC;SACxF,CAAC;QACF,QAAQ;KACX,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport type { JsxNamespaceFile } from \"./jsx/pipeline.js\";\nimport type { RawFile } from \"./store-fs.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype WriteJsxStoreParams = {\n options: StoreOptions;\n namespaces: JsxNamespaceFile[];\n metadata: string;\n externalPackages: string[];\n rawFiles: RawFile[];\n isTreeShaken?: boolean;\n};\n\nconst jsxPeerDependencies = (externalPackages: string[], isTreeShaken: boolean): Record<string, string> => {\n const runtime = isTreeShaken ? [\"@gtkx/runtime\"] : [];\n\n return Object.fromEntries(\n sortStrings([\"@gtkx/gi\", \"@gtkx/react\", \"react\", ...runtime, ...externalPackages])\n .map((name) => [name, \"*\"]),\n );\n};\n\nconst writeJsxStore = (params: WriteJsxStoreParams): void => {\n const { options, namespaces, metadata, externalPackages, rawFiles } = params;\n\n const exportsMap: Record<string, unknown> = {\n \".\": subpathExport(\"index\"),\n \"./metadata\": subpathExport(\"metadata\"),\n };\n\n const files = [{ fileName: \"metadata.ts\", source: metadata }];\n const indexExports: string[] = [];\n\n for (const { directory, source } of namespaces) {\n files.push({ fileName: `${directory}/${directory}.tsx`, source }, namespaceBarrel(directory));\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n indexExports.push(`export * from \"./${directory}/index.js\";`);\n }\n\n files.push({ fileName: \"index.ts\", source: `${indexExports.join(\"\\n\")}\\n` });\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files,\n manifest: buildManifest({\n name: \"@gtkx/jsx\",\n version: options.version,\n exports: exportsMap,\n sideEffects: params.isTreeShaken !== true,\n peerDependencies: jsxPeerDependencies(externalPackages, params.isTreeShaken === true),\n }),\n rawFiles,\n });\n};\n\nexport { writeJsxStore };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-store.d.ts","sourceRoot":"","sources":["../../src/store/resolve-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,mFAAmF;IACnF,EAAE,EAAE,YAAY,CAAC;IACjB,0GAA0G;IAC1G,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAsCF,QAAA,MAAM,gBAAgB,GAAc,aAAa,MAAM,KAAG,SAAS,CAAC,MAAM,CAUzE,CAAC;AA6FF,QAAA,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MAAM,EAS3D,CAAC;AASF,QAAA,MAAM,mBAAmB,GAAI,aAAa,MAAM,KAAG,IAMlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,aAW3C,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"resolve-store.d.ts","sourceRoot":"","sources":["../../src/store/resolve-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,mFAAmF;IACnF,EAAE,EAAE,YAAY,CAAC;IACjB,0GAA0G;IAC1G,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IACzB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAwCF,QAAA,MAAM,gBAAgB,GAAc,aAAa,MAAM,KAAG,SAAS,CAAC,MAAM,CAUzE,CAAC;AA6FF,QAAA,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MAAM,EAS3D,CAAC;AASF,QAAA,MAAM,mBAAmB,GAAI,aAAa,MAAM,KAAG,IAMlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,aAW3C,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,CAAC"}
@@ -9,6 +9,8 @@ const STORE_CONSUMERS = [
9
9
  "@gtkx/cli",
10
10
  "@gtkx/components",
11
11
  "@gtkx/css",
12
+ "@gtkx/forms",
13
+ "@gtkx/i18n",
12
14
  "@gtkx/navigation",
13
15
  "@gtkx/react",
14
16
  "@gtkx/runtime",