@gtkx/cli 1.3.0 → 1.4.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 (217) hide show
  1. package/README.md +5 -4
  2. package/dist/builder.d.ts +0 -1
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +6 -6
  5. package/dist/builder.js.map +1 -1
  6. package/dist/codegen/run-codegen.d.ts +1 -2
  7. package/dist/codegen/run-codegen.d.ts.map +1 -1
  8. package/dist/codegen/run-codegen.js +11 -6
  9. package/dist/codegen/run-codegen.js.map +1 -1
  10. package/dist/commands/build.d.ts +0 -4
  11. package/dist/commands/build.d.ts.map +1 -1
  12. package/dist/commands/build.js +0 -5
  13. package/dist/commands/build.js.map +1 -1
  14. package/dist/commands/codegen.d.ts.map +1 -1
  15. package/dist/commands/codegen.js +1 -3
  16. package/dist/commands/codegen.js.map +1 -1
  17. package/dist/deploy/depends.d.ts +2 -2
  18. package/dist/deploy/depends.d.ts.map +1 -1
  19. package/dist/deploy/depends.js +30 -15
  20. package/dist/deploy/depends.js.map +1 -1
  21. package/dist/deploy/nfpm/config.js +1 -1
  22. package/dist/deploy/nfpm/config.js.map +1 -1
  23. package/dist/deploy/node-runtime/elf.d.ts +1 -1
  24. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  25. package/dist/deploy/node-runtime/elf.js +2 -2
  26. package/dist/deploy/node-runtime/elf.js.map +1 -1
  27. package/dist/deploy/node-runtime/index.js +2 -2
  28. package/dist/deploy/node-runtime/index.js.map +1 -1
  29. package/dist/deploy/notices/collect.d.ts +3 -1
  30. package/dist/deploy/notices/collect.d.ts.map +1 -1
  31. package/dist/deploy/notices/collect.js +2 -2
  32. package/dist/deploy/notices/collect.js.map +1 -1
  33. package/dist/deploy/notices/packages.d.ts +2 -1
  34. package/dist/deploy/notices/packages.d.ts.map +1 -1
  35. package/dist/deploy/notices/packages.js +4 -27
  36. package/dist/deploy/notices/packages.js.map +1 -1
  37. package/dist/deploy/payload/icons.d.ts +7 -3
  38. package/dist/deploy/payload/icons.d.ts.map +1 -1
  39. package/dist/deploy/payload/icons.js +46 -28
  40. package/dist/deploy/payload/icons.js.map +1 -1
  41. package/dist/deploy/payload/stage.d.ts.map +1 -1
  42. package/dist/deploy/payload/stage.js +3 -2
  43. package/dist/deploy/payload/stage.js.map +1 -1
  44. package/dist/deploy/run-deploy.d.ts.map +1 -1
  45. package/dist/deploy/run-deploy.js +63 -11
  46. package/dist/deploy/run-deploy.js.map +1 -1
  47. package/dist/deploy/settings/build-manifest.d.ts +9 -0
  48. package/dist/deploy/settings/build-manifest.d.ts.map +1 -0
  49. package/dist/deploy/settings/build-manifest.js +80 -0
  50. package/dist/deploy/settings/build-manifest.js.map +1 -0
  51. package/dist/deploy/settings/index.d.ts.map +1 -1
  52. package/dist/deploy/settings/index.js +9 -3
  53. package/dist/deploy/settings/index.js.map +1 -1
  54. package/dist/deploy/settings/libraries.d.ts +8 -0
  55. package/dist/deploy/settings/libraries.d.ts.map +1 -0
  56. package/dist/deploy/settings/libraries.js +39 -0
  57. package/dist/deploy/settings/libraries.js.map +1 -0
  58. package/dist/deploy/settings/paths.d.ts +3 -0
  59. package/dist/deploy/settings/paths.d.ts.map +1 -1
  60. package/dist/deploy/settings/paths.js +6 -32
  61. package/dist/deploy/settings/paths.js.map +1 -1
  62. package/dist/deploy/targets/appimage.d.ts.map +1 -1
  63. package/dist/deploy/targets/appimage.js +19 -13
  64. package/dist/deploy/targets/appimage.js.map +1 -1
  65. package/dist/deploy/targets/flatpak-manifest.d.ts +2 -1
  66. package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
  67. package/dist/deploy/targets/flatpak-manifest.js +5 -1
  68. package/dist/deploy/targets/flatpak-manifest.js.map +1 -1
  69. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  70. package/dist/deploy/targets/flatpak-source.js +9 -6
  71. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  72. package/dist/deploy/types.d.ts +4 -4
  73. package/dist/deploy/types.d.ts.map +1 -1
  74. package/dist/deploy/types.js.map +1 -1
  75. package/dist/dev/icon-dir.d.ts +1 -1
  76. package/dist/dev/icon-dir.d.ts.map +1 -1
  77. package/dist/dev/icon-dir.js +20 -7
  78. package/dist/dev/icon-dir.js.map +1 -1
  79. package/dist/dev/runner-deps.d.ts.map +1 -1
  80. package/dist/dev/runner-deps.js +5 -1
  81. package/dist/dev/runner-deps.js.map +1 -1
  82. package/dist/dev/runner-main.js +4 -4
  83. package/dist/dev/runner-main.js.map +1 -1
  84. package/dist/dev/runner.d.ts +1 -1
  85. package/dist/dev/runner.d.ts.map +1 -1
  86. package/dist/dev/runner.js +1 -1
  87. package/dist/dev/runner.js.map +1 -1
  88. package/dist/dev/schema-dir.d.ts +1 -1
  89. package/dist/dev/schema-dir.d.ts.map +1 -1
  90. package/dist/dev/schema-dir.js +3 -1
  91. package/dist/dev/schema-dir.js.map +1 -1
  92. package/dist/internal/build-manifest.d.ts +20 -0
  93. package/dist/internal/build-manifest.d.ts.map +1 -0
  94. package/dist/internal/build-manifest.js +6 -0
  95. package/dist/internal/build-manifest.js.map +1 -0
  96. package/dist/internal/icon-path.d.ts +13 -0
  97. package/dist/internal/icon-path.d.ts.map +1 -0
  98. package/dist/internal/icon-path.js +86 -0
  99. package/dist/internal/icon-path.js.map +1 -0
  100. package/dist/internal/source-imports.d.ts +8 -0
  101. package/dist/internal/source-imports.d.ts.map +1 -0
  102. package/dist/internal/source-imports.js +144 -0
  103. package/dist/internal/source-imports.js.map +1 -0
  104. package/dist/mcp/widget-properties.d.ts.map +1 -1
  105. package/dist/mcp/widget-properties.js +3 -12
  106. package/dist/mcp/widget-properties.js.map +1 -1
  107. package/dist/settings/render.d.ts +7 -1
  108. package/dist/settings/render.d.ts.map +1 -1
  109. package/dist/settings/render.js +69 -20
  110. package/dist/settings/render.js.map +1 -1
  111. package/dist/settings/schema.d.ts +4 -3
  112. package/dist/settings/schema.d.ts.map +1 -1
  113. package/dist/settings/schema.js +122 -15
  114. package/dist/settings/schema.js.map +1 -1
  115. package/dist/vite-plugins/asset-emitter.d.ts +1 -1
  116. package/dist/vite-plugins/asset-emitter.d.ts.map +1 -1
  117. package/dist/vite-plugins/asset-emitter.js.map +1 -1
  118. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  119. package/dist/vite-plugins/asset-extensions.js +1 -0
  120. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  121. package/dist/vite-plugins/asset-imports.d.ts +2 -1
  122. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  123. package/dist/vite-plugins/asset-imports.js +37 -16
  124. package/dist/vite-plugins/asset-imports.js.map +1 -1
  125. package/dist/vite-plugins/asset-specifier.d.ts +13 -1
  126. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  127. package/dist/vite-plugins/asset-specifier.js +39 -1
  128. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  129. package/dist/vite-plugins/build-manifest.d.ts +5 -0
  130. package/dist/vite-plugins/build-manifest.d.ts.map +1 -0
  131. package/dist/vite-plugins/{bundled-packages.js → build-manifest.js} +20 -14
  132. package/dist/vite-plugins/build-manifest.js.map +1 -0
  133. package/dist/vite-plugins/built-url.d.ts +1 -1
  134. package/dist/vite-plugins/built-url.d.ts.map +1 -1
  135. package/dist/vite-plugins/built-url.js +37 -24
  136. package/dist/vite-plugins/built-url.js.map +1 -1
  137. package/dist/vite-plugins/icons.d.ts +2 -1
  138. package/dist/vite-plugins/icons.d.ts.map +1 -1
  139. package/dist/vite-plugins/icons.js +25 -12
  140. package/dist/vite-plugins/icons.js.map +1 -1
  141. package/dist/vite-plugins/index.d.ts +2 -1
  142. package/dist/vite-plugins/index.d.ts.map +1 -1
  143. package/dist/vite-plugins/index.js +7 -5
  144. package/dist/vite-plugins/index.js.map +1 -1
  145. package/dist/vite-plugins/native.d.ts.map +1 -1
  146. package/dist/vite-plugins/native.js +23 -4
  147. package/dist/vite-plugins/native.js.map +1 -1
  148. package/dist/vite-plugins/resource-init-module.d.ts +7 -3
  149. package/dist/vite-plugins/resource-init-module.d.ts.map +1 -1
  150. package/dist/vite-plugins/resource-init-module.js +39 -14
  151. package/dist/vite-plugins/resource-init-module.js.map +1 -1
  152. package/dist/vite-plugins/resource-shared.d.ts +3 -1
  153. package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
  154. package/dist/vite-plugins/resource-shared.js +3 -1
  155. package/dist/vite-plugins/resource-shared.js.map +1 -1
  156. package/dist/vite-plugins/resources.d.ts +1 -1
  157. package/dist/vite-plugins/resources.d.ts.map +1 -1
  158. package/dist/vite-plugins/resources.js +922 -86
  159. package/dist/vite-plugins/resources.js.map +1 -1
  160. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  161. package/dist/vite-plugins/settings-worker-env.js +6 -3
  162. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  163. package/dist/vite-plugins/settings.d.ts +3 -1
  164. package/dist/vite-plugins/settings.d.ts.map +1 -1
  165. package/dist/vite-plugins/settings.js +63 -23
  166. package/dist/vite-plugins/settings.js.map +1 -1
  167. package/env.d.ts +11 -192
  168. package/package.json +10 -10
  169. package/src/builder.ts +6 -7
  170. package/src/codegen/run-codegen.ts +10 -7
  171. package/src/commands/build.ts +0 -5
  172. package/src/commands/codegen.ts +1 -3
  173. package/src/deploy/depends.ts +47 -18
  174. package/src/deploy/nfpm/config.ts +1 -1
  175. package/src/deploy/node-runtime/elf.ts +3 -3
  176. package/src/deploy/node-runtime/index.ts +2 -2
  177. package/src/deploy/notices/collect.ts +4 -2
  178. package/src/deploy/notices/packages.ts +5 -43
  179. package/src/deploy/payload/icons.ts +64 -34
  180. package/src/deploy/payload/stage.ts +5 -2
  181. package/src/deploy/run-deploy.ts +87 -12
  182. package/src/deploy/settings/build-manifest.ts +122 -0
  183. package/src/deploy/settings/index.ts +9 -4
  184. package/src/deploy/settings/libraries.ts +57 -0
  185. package/src/deploy/settings/paths.ts +10 -47
  186. package/src/deploy/targets/appimage.ts +32 -15
  187. package/src/deploy/targets/flatpak-manifest.ts +7 -1
  188. package/src/deploy/targets/flatpak-source.ts +9 -10
  189. package/src/deploy/types.ts +4 -4
  190. package/src/dev/icon-dir.ts +31 -7
  191. package/src/dev/runner-deps.ts +5 -1
  192. package/src/dev/runner-main.ts +4 -4
  193. package/src/dev/runner.ts +2 -2
  194. package/src/dev/schema-dir.ts +3 -1
  195. package/src/internal/build-manifest.ts +32 -0
  196. package/src/internal/icon-path.ts +127 -0
  197. package/src/internal/source-imports.ts +200 -0
  198. package/src/mcp/widget-properties.ts +3 -14
  199. package/src/settings/render.ts +99 -21
  200. package/src/settings/schema.ts +190 -17
  201. package/src/vite-plugins/asset-emitter.ts +1 -1
  202. package/src/vite-plugins/asset-extensions.ts +1 -0
  203. package/src/vite-plugins/asset-imports.ts +60 -19
  204. package/src/vite-plugins/asset-specifier.ts +73 -1
  205. package/src/vite-plugins/{bundled-packages.ts → build-manifest.ts} +30 -19
  206. package/src/vite-plugins/built-url.ts +49 -28
  207. package/src/vite-plugins/icons.ts +33 -14
  208. package/src/vite-plugins/index.ts +12 -5
  209. package/src/vite-plugins/native.ts +31 -4
  210. package/src/vite-plugins/resource-init-module.ts +44 -15
  211. package/src/vite-plugins/resource-shared.ts +4 -0
  212. package/src/vite-plugins/resources.ts +1459 -100
  213. package/src/vite-plugins/settings-worker-env.ts +7 -3
  214. package/src/vite-plugins/settings.ts +89 -21
  215. package/dist/vite-plugins/bundled-packages.d.ts +0 -5
  216. package/dist/vite-plugins/bundled-packages.d.ts.map +0 -1
  217. package/dist/vite-plugins/bundled-packages.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAmB,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAMhF,MAAM,SAAS,GAAG,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG;IACnB,+BAA+B;IAC/B,mEAAmE;IACnE,mEAAmE;IACnE,gBAAgB;CACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,aAAa,GAAG,CAAC,QAAuB,EAAgB,EAAE,CAC5D,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAE1D,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAiB,EAAE,KAAmB,EAAQ,EAAE;IAC/D,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,SAAS,GAAG,CAAC,CAAC;IACtE,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,SAAS;IACd,MAAM,KAAK,GAAgB;QACvB,QAAQ,EAAE,IAAI;KACjB,CAAC;IAEF,OAAO;QACH,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QAEd,MAAM,CAAC,MAAkB;YACrB,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAED,aAAa,CAAC,OAAO;YACjB,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,OAAO;YACX,CAAC;YAED,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,QAAQ;YACJ,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import type { Plugin, UserConfig } from \"vite\";\nimport { info } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\n\ntype PluginState = {\n iconsDir: string | null;\n};\n\nconst ICONS_DIR = \"icons\";\n\nconst XDG_ENV_BANNER = [\n \"process.env.XDG_DATA_DIRS = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.XDG_DATA_DIRS || \\\"/usr/local/share:/usr/share\\\",\",\n \"].join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst findIconFiles = (iconsDir: string | null): ListedFile[] =>\n iconsDir === null ? [] : listFilesRecursive(iconsDir);\n\nconst resolveIconsDir = (config: UserConfig): string | null => {\n const root = config.root ?? process.cwd();\n const dataDir = resolveDataDir(root);\n\n return dataDir === null ? null : join(root, dataDir, ICONS_DIR);\n};\n\nconst emitIcons = (ctx: AssetEmitter, icons: ListedFile[]): void => {\n for (const { absPath, rel } of icons) {\n ctx.emitFile({ type: \"asset\", fileName: join(ICONS_DIR, rel), source: readFileSync(absPath) });\n }\n\n if (icons.length > 0) {\n info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);\n }\n};\n\nfunction gtkxIcons(): Plugin {\n const state: PluginState = {\n iconsDir: null,\n };\n\n return {\n name: \"gtkx:icons\",\n enforce: \"pre\",\n apply: \"build\",\n\n config(config: UserConfig) {\n state.iconsDir = resolveIconsDir(config);\n },\n\n outputOptions(options) {\n if (findIconFiles(state.iconsDir).length === 0) {\n return;\n }\n\n return prependBanner(options, XDG_ENV_BANNER);\n },\n\n buildEnd() {\n emitIcons(this, findIconFiles(state.iconsDir));\n },\n };\n}\n\nexport { gtkxIcons };\n"]}
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/vite-plugins/icons.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { Plugin, UserConfig } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport {\n relativeIconPath,\n resolveApplicationIcon,\n type ResolvedApplicationIcon,\n} from \"../internal/icon-path.js\";\nimport { type ListedFile, listFilesRecursive } from \"../internal/list-files.js\";\n\ntype PluginState = {\n applicationId: string;\n source: ResolvedApplicationIcon;\n};\n\nconst ICONS_DIR = \"icons\";\n\nconst XDG_ENV_BANNER = [\n \"process.env.XDG_DATA_DIRS = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.XDG_DATA_DIRS || \\\"/usr/local/share:/usr/share\\\",\",\n \"].join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst findIconFiles = (state: PluginState): ListedFile[] => {\n if (state.source.kind === \"theme\") {\n return listFilesRecursive(state.source.path);\n }\n\n if (state.source.kind === \"none\") {\n return [];\n }\n\n return [{\n absPath: state.source.path,\n rel: relativeIconPath(state.applicationId, state.source.path),\n }];\n};\n\nconst applyUserConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader): Promise<void> => {\n const { config: gtkxConfig, root } = await loadConfig.load(config.root ?? process.cwd());\n state.applicationId = gtkxConfig.applicationId;\n state.source = resolveApplicationIcon(root, gtkxConfig.applicationId, gtkxConfig.applicationIcon);\n};\n\nconst emitIcons = (ctx: AssetEmitter, icons: ListedFile[]): void => {\n for (const { absPath, rel } of icons) {\n ctx.emitFile({ type: \"asset\", fileName: join(ICONS_DIR, rel), source: readFileSync(absPath) });\n }\n\n if (icons.length > 0) {\n info(`Copied ${String(icons.length)} icon(s) into ${ICONS_DIR}/`);\n }\n};\n\nfunction gtkxIcons(loadConfig: ConfigLoader = createConfigLoader()): Plugin {\n const state: PluginState = {\n applicationId: \"\",\n source: { kind: \"none\" },\n };\n\n return {\n name: \"gtkx:icons\",\n enforce: \"pre\",\n apply: \"build\",\n\n async config(config: UserConfig) {\n await applyUserConfig(state, config, loadConfig);\n },\n\n outputOptions(options) {\n if (findIconFiles(state).length === 0) {\n return;\n }\n\n return prependBanner(options, XDG_ENV_BANNER);\n },\n\n buildEnd() {\n emitIcons(this, findIconFiles(state));\n },\n };\n}\n\nexport { gtkxIcons };\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Plugin } from "vite";
2
- declare const gtkxVitePlugins: (mode?: string) => Plugin[];
2
+ import type { BuildManifestCollector } from "../internal/build-manifest.js";
3
+ declare const gtkxVitePlugins: (mode?: string, entryPath?: string, buildManifest?: BuildManifestCollector) => Plugin[];
3
4
  export { gtkxVitePlugins };
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAYnC,QAAA,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAAM,EAc9C,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAW5E,QAAA,MAAM,eAAe,GACjB,OAAO,MAAM,EACb,YAAY,MAAM,EAClB,gBAAgB,sBAAsB,KACvC,MAAM,EAeR,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { createConfigLoader } from "@gtkx/config/internal";
2
2
  import createConfigPlugin from "@gtkx/config/vite-plugin";
3
3
  import { gtkxAssetImports } from "./asset-imports.js";
4
+ import { gtkxBuiltUrl } from "./built-url.js";
4
5
  import { gtkxCss } from "./css.js";
5
6
  import { gtkxIcons } from "./icons.js";
6
7
  import { gtkxReactCompiler } from "./react-compiler.js";
@@ -8,16 +9,17 @@ import { gtkxResources } from "./resources.js";
8
9
  import { gtkxSettings } from "./settings.js";
9
10
  import { gtkxStoreLinks } from "./store-links.js";
10
11
  import { gtkxUndeclaredLibrary } from "./undeclared-library.js";
11
- const gtkxVitePlugins = (mode) => {
12
+ const gtkxVitePlugins = (mode, entryPath, buildManifest) => {
12
13
  const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });
13
14
  return [
14
15
  createConfigPlugin({ name: "gtkx:config", loadConfig }),
15
16
  gtkxStoreLinks(),
16
17
  gtkxUndeclaredLibrary(loadConfig),
17
- gtkxSettings(),
18
- gtkxIcons(),
19
- gtkxAssetImports(),
20
- gtkxResources(loadConfig),
18
+ gtkxSettings(loadConfig, buildManifest),
19
+ gtkxIcons(loadConfig),
20
+ gtkxAssetImports(loadConfig),
21
+ gtkxBuiltUrl(),
22
+ gtkxResources(loadConfig, entryPath),
21
23
  gtkxCss(),
22
24
  gtkxReactCompiler(loadConfig),
23
25
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,eAAe,GAAG,CAAC,IAAa,EAAY,EAAE;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,cAAc,EAAE;QAChB,qBAAqB,CAAC,UAAU,CAAC;QACjC,YAAY,EAAE;QACd,SAAS,EAAE;QACX,gBAAgB,EAAE;QAClB,aAAa,CAAC,UAAU,CAAC;QACzB,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport { gtkxAssetImports } from \"./asset-imports.js\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxStoreLinks } from \"./store-links.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\nconst gtkxVitePlugins = (mode?: string): Plugin[] => {\n const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n gtkxStoreLinks(),\n gtkxUndeclaredLibrary(loadConfig),\n gtkxSettings(),\n gtkxIcons(),\n gtkxAssetImports(),\n gtkxResources(loadConfig),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite-plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,eAAe,GAAG,CACpB,IAAa,EACb,SAAkB,EAClB,aAAsC,EAC9B,EAAE;IACV,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,OAAO;QACH,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;QACvD,cAAc,EAAE;QAChB,qBAAqB,CAAC,UAAU,CAAC;QACjC,YAAY,CAAC,UAAU,EAAE,aAAa,CAAC;QACvC,SAAS,CAAC,UAAU,CAAC;QACrB,gBAAgB,CAAC,UAAU,CAAC;QAC5B,YAAY,EAAE;QACd,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;QACpC,OAAO,EAAE;QACT,iBAAiB,CAAC,UAAU,CAAC;KAChC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport createConfigPlugin from \"@gtkx/config/vite-plugin\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport { gtkxAssetImports } from \"./asset-imports.js\";\nimport { gtkxBuiltUrl } from \"./built-url.js\";\nimport { gtkxCss } from \"./css.js\";\nimport { gtkxIcons } from \"./icons.js\";\nimport { gtkxReactCompiler } from \"./react-compiler.js\";\nimport { gtkxResources } from \"./resources.js\";\nimport { gtkxSettings } from \"./settings.js\";\nimport { gtkxStoreLinks } from \"./store-links.js\";\nimport { gtkxUndeclaredLibrary } from \"./undeclared-library.js\";\n\nconst gtkxVitePlugins = (\n mode?: string,\n entryPath?: string,\n buildManifest?: BuildManifestCollector,\n): Plugin[] => {\n const loadConfig = createConfigLoader(mode === undefined ? {} : { mode });\n\n return [\n createConfigPlugin({ name: \"gtkx:config\", loadConfig }),\n gtkxStoreLinks(),\n gtkxUndeclaredLibrary(loadConfig),\n gtkxSettings(loadConfig, buildManifest),\n gtkxIcons(loadConfig),\n gtkxAssetImports(loadConfig),\n gtkxBuiltUrl(),\n gtkxResources(loadConfig, entryPath),\n gtkxCss(),\n gtkxReactCompiler(loadConfig),\n ];\n};\n\nexport { gtkxVitePlugins };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAqDnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA2EnC,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgCxC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import { arch, platform } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
5
  import { stripQuery } from "./strip-query.js";
6
6
  const EMITTED_BINDING_SPECIFIER = "./gtkx.node";
7
+ const BINDING_FILENAME = "gtkx.node";
7
8
  function resolveBinaryPath(projectRequire, currentArch) {
8
9
  const nativeRoot = dirname(projectRequire.resolve("@gtkx/native/package.json"));
9
10
  const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);
@@ -20,7 +21,7 @@ function resolvePlatformBinary(projectRequire) {
20
21
  }
21
22
  return readFileSync(resolveBinaryPath(projectRequire, currentArch));
22
23
  }
23
- function rewriteLoader(code) {
24
+ function rewriteLoader(code, bindingReferenceId) {
24
25
  const idents = [];
25
26
  for (const match of code.matchAll(/export\s*\{\s*([A-Za-z0-9_$]+)\s*\}/g)) {
26
27
  const ident = match[1];
@@ -31,14 +32,28 @@ function rewriteLoader(code) {
31
32
  const bindings = idents.join(", ");
32
33
  return [
33
34
  "import { createRequire as __gtkxCreateRequire } from \"node:module\";",
34
- `const __gtkxNative = __gtkxCreateRequire(import.meta.url)(${JSON.stringify(EMITTED_BINDING_SPECIFIER)});`,
35
+ "import { fileURLToPath as __gtkxFileURLToPath } from \"node:url\";",
36
+ `const __gtkxNativeLocation = import.meta.ROLLUP_FILE_URL_${bindingReferenceId};`,
37
+ "const __gtkxNativePath = __gtkxNativeLocation.startsWith(\"file:\") " +
38
+ "? __gtkxFileURLToPath(__gtkxNativeLocation) : __gtkxNativeLocation;",
39
+ "const __gtkxNative = __gtkxCreateRequire(import.meta.url)(__gtkxNativePath);",
35
40
  `const { ${bindings} } = __gtkxNative;`,
36
41
  `export { ${bindings} };`,
37
42
  ].join("\n");
38
43
  }
44
+ const transformLoader = (code, id, loaderPath, bindingReferenceId) => {
45
+ if (stripQuery(id) !== loaderPath) {
46
+ return null;
47
+ }
48
+ if (bindingReferenceId === null) {
49
+ throw new Error("Cannot render the native loader before its binary has been emitted");
50
+ }
51
+ return rewriteLoader(code, bindingReferenceId);
52
+ };
39
53
  function gtkxNative(root) {
40
54
  const projectRequire = createRequire(join(root, "package.json"));
41
55
  let cachedLoaderPath;
56
+ let bindingReferenceId = null;
42
57
  const loaderPath = () => {
43
58
  cachedLoaderPath ??= join(dirname(projectRequire.resolve("@gtkx/native/package.json")), "index.js");
44
59
  return cachedLoaderPath;
@@ -48,13 +63,17 @@ function gtkxNative(root) {
48
63
  enforce: "pre",
49
64
  apply: "build",
50
65
  buildStart() {
51
- this.emitFile({ type: "asset", fileName: "gtkx.node", source: resolvePlatformBinary(projectRequire) });
66
+ bindingReferenceId = this.emitFile({
67
+ type: "asset",
68
+ fileName: BINDING_FILENAME,
69
+ source: resolvePlatformBinary(projectRequire),
70
+ });
52
71
  },
53
72
  resolveId(id) {
54
73
  return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;
55
74
  },
56
75
  transform(code, id) {
57
- return stripQuery(id) === loaderPath() ? rewriteLoader(code) : null;
76
+ return transformLoader(code, id, loaderPath(), bindingReferenceId);
58
77
  },
59
78
  };
60
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { arch, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { stripQuery } from \"./strip-query.js\";\n\nconst EMITTED_BINDING_SPECIFIER = \"./gtkx.node\";\n\nfunction resolveBinaryPath(projectRequire: ReturnType<typeof createRequire>, currentArch: string): string {\n const nativeRoot = dirname(projectRequire.resolve(\"@gtkx/native/package.json\"));\n const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);\n\n return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);\n}\n\nfunction resolvePlatformBinary(projectRequire: ReturnType<typeof createRequire>): Buffer {\n const currentPlatform = platform();\n\n if (currentPlatform !== \"linux\") {\n throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);\n }\n\n const currentArch = arch();\n\n if (currentArch !== \"x64\" && currentArch !== \"arm64\") {\n throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);\n }\n\n return readFileSync(resolveBinaryPath(projectRequire, currentArch));\n}\n\nfunction rewriteLoader(code: string): string {\n const idents: string[] = [];\n\n for (const match of code.matchAll(/export\\s*\\{\\s*([A-Za-z0-9_$]+)\\s*\\}/g)) {\n const ident = match[1];\n\n if (ident) {\n idents.push(ident);\n }\n }\n\n const bindings = idents.join(\", \");\n\n return [\n \"import { createRequire as __gtkxCreateRequire } from \\\"node:module\\\";\",\n `const __gtkxNative = __gtkxCreateRequire(import.meta.url)(${JSON.stringify(EMITTED_BINDING_SPECIFIER)});`,\n `const { ${bindings} } = __gtkxNative;`,\n `export { ${bindings} };`,\n ].join(\"\\n\");\n}\n\nfunction gtkxNative(root: string): Plugin {\n const projectRequire = createRequire(join(root, \"package.json\"));\n let cachedLoaderPath: string | undefined;\n\n const loaderPath = (): string => {\n cachedLoaderPath ??= join(dirname(projectRequire.resolve(\"@gtkx/native/package.json\")), \"index.js\");\n\n return cachedLoaderPath;\n };\n\n return {\n name: \"gtkx:native\",\n enforce: \"pre\",\n apply: \"build\",\n\n buildStart() {\n this.emitFile({ type: \"asset\", fileName: \"gtkx.node\", source: resolvePlatformBinary(projectRequire) });\n },\n\n resolveId(id) {\n return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;\n },\n\n transform(code, id) {\n return stripQuery(id) === loaderPath() ? rewriteLoader(code) : null;\n },\n };\n}\n\nexport { gtkxNative };\n"]}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/vite-plugins/native.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { arch, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { stripQuery } from \"./strip-query.js\";\n\nconst EMITTED_BINDING_SPECIFIER = \"./gtkx.node\";\nconst BINDING_FILENAME = \"gtkx.node\";\n\nfunction resolveBinaryPath(projectRequire: ReturnType<typeof createRequire>, currentArch: string): string {\n const nativeRoot = dirname(projectRequire.resolve(\"@gtkx/native/package.json\"));\n const localBinary = join(nativeRoot, `native.linux-${currentArch}-gnu.node`);\n\n return existsSync(localBinary) ? localBinary : projectRequire.resolve(`@gtkx/native-linux-${currentArch}-gnu`);\n}\n\nfunction resolvePlatformBinary(projectRequire: ReturnType<typeof createRequire>): Buffer {\n const currentPlatform = platform();\n\n if (currentPlatform !== \"linux\") {\n throw new Error(`Unsupported build platform: ${currentPlatform}, only Linux is supported`);\n }\n\n const currentArch = arch();\n\n if (currentArch !== \"x64\" && currentArch !== \"arm64\") {\n throw new Error(`Unsupported build architecture: ${currentArch}, only x64 and arm64 are supported`);\n }\n\n return readFileSync(resolveBinaryPath(projectRequire, currentArch));\n}\n\nfunction rewriteLoader(code: string, bindingReferenceId: string): string {\n const idents: string[] = [];\n\n for (const match of code.matchAll(/export\\s*\\{\\s*([A-Za-z0-9_$]+)\\s*\\}/g)) {\n const ident = match[1];\n\n if (ident) {\n idents.push(ident);\n }\n }\n\n const bindings = idents.join(\", \");\n\n return [\n \"import { createRequire as __gtkxCreateRequire } from \\\"node:module\\\";\",\n \"import { fileURLToPath as __gtkxFileURLToPath } from \\\"node:url\\\";\",\n `const __gtkxNativeLocation = import.meta.ROLLUP_FILE_URL_${bindingReferenceId};`,\n \"const __gtkxNativePath = __gtkxNativeLocation.startsWith(\\\"file:\\\") \" +\n \"? __gtkxFileURLToPath(__gtkxNativeLocation) : __gtkxNativeLocation;\",\n \"const __gtkxNative = __gtkxCreateRequire(import.meta.url)(__gtkxNativePath);\",\n `const { ${bindings} } = __gtkxNative;`,\n `export { ${bindings} };`,\n ].join(\"\\n\");\n}\n\nconst transformLoader = (\n code: string,\n id: string,\n loaderPath: string,\n bindingReferenceId: string | null,\n): string | null => {\n if (stripQuery(id) !== loaderPath) {\n return null;\n }\n\n if (bindingReferenceId === null) {\n throw new Error(\"Cannot render the native loader before its binary has been emitted\");\n }\n\n return rewriteLoader(code, bindingReferenceId);\n};\n\nfunction gtkxNative(root: string): Plugin {\n const projectRequire = createRequire(join(root, \"package.json\"));\n let cachedLoaderPath: string | undefined;\n let bindingReferenceId: string | null = null;\n\n const loaderPath = (): string => {\n cachedLoaderPath ??= join(dirname(projectRequire.resolve(\"@gtkx/native/package.json\")), \"index.js\");\n\n return cachedLoaderPath;\n };\n\n return {\n name: \"gtkx:native\",\n enforce: \"pre\",\n apply: \"build\",\n\n buildStart() {\n bindingReferenceId = this.emitFile({\n type: \"asset\",\n fileName: BINDING_FILENAME,\n source: resolvePlatformBinary(projectRequire),\n });\n },\n\n resolveId(id) {\n return id === EMITTED_BINDING_SPECIFIER ? { id, external: true } : null;\n },\n\n transform(code, id) {\n return transformLoader(code, id, loaderPath(), bindingReferenceId);\n },\n };\n}\n\nexport { gtkxNative };\n"]}
@@ -1,6 +1,10 @@
1
- declare const renderInitModule: (options: {
2
- isBuild: boolean;
1
+ type InitModuleOptions = {
2
+ isBuild: true;
3
+ bundleReferenceId: string;
4
+ } | {
5
+ isBuild: false;
3
6
  devBundlePath: string;
4
- }) => string;
7
+ };
8
+ declare const renderInitModule: (options: InitModuleOptions) => string;
5
9
  export { renderInitModule };
6
10
  //# sourceMappingURL=resource-init-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-init-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAqDA,QAAA,MAAM,gBAAgB,GAAI,SAAS;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KAAG,MACS,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"resource-init-module.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAEA,KAAK,iBAAiB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AA+E9C,QAAA,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,MAC4D,CAAC;AAEpH,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,13 +1,27 @@
1
- import { BUNDLE_FILENAME, REFRESH_EXPORT } from "./resource-shared.js";
2
- const buildInitModuleSource = () => [
3
- "import { dirname, join } from \"node:path\";",
1
+ import { REFRESH_EXPORT, REGISTER_REFRESH_EXPORT } from "./resource-shared.js";
2
+ const refreshCallbackSource = () => [
3
+ "const refreshCallbacks = new Map();",
4
+ "",
5
+ `export function ${REGISTER_REFRESH_EXPORT}(key, callback) {`,
6
+ " refreshCallbacks.set(key, callback);",
7
+ " callback();",
8
+ "}",
9
+ "",
10
+ "function runRefreshCallbacks() {",
11
+ " for (const callback of refreshCallbacks.values()) callback();",
12
+ "}",
13
+ ];
14
+ const buildInitModuleSource = (bundleReferenceId) => [
4
15
  "import { fileURLToPath } from \"node:url\";",
5
16
  "import { Resource, resourcesRegister } from \"@gtkx/gi/gio\";",
6
17
  "",
7
- "const bundleDir = dirname(fileURLToPath(import.meta.url));",
8
- `const resource = Resource.load(join(bundleDir, ${JSON.stringify(BUNDLE_FILENAME)}));`,
18
+ `const bundleLocation = import.meta.ROLLUP_FILE_URL_${bundleReferenceId};`,
19
+ "const bundlePath = bundleLocation.startsWith(\"file:\") ? fileURLToPath(bundleLocation) : bundleLocation;",
20
+ "const resource = Resource.load(bundlePath);",
9
21
  "resourcesRegister(resource);",
10
22
  "",
23
+ ...refreshCallbackSource(),
24
+ "",
11
25
  "export function ensureRegistered() {}",
12
26
  `export function ${REFRESH_EXPORT}() {}`,
13
27
  ].join("\n");
@@ -27,25 +41,36 @@ const devInitModuleSource = (bundlePath) => {
27
41
  " current = next;",
28
42
  "}",
29
43
  "",
44
+ "function unregister() {",
45
+ " if (!current) return;",
46
+ " resourcesUnregister(current);",
47
+ " current = null;",
48
+ " lastSig = \"\";",
49
+ "}",
50
+ "",
51
+ ...refreshCallbackSource(),
52
+ "",
30
53
  "export function ensureRegistered() {",
31
- ` if (!existsSync(${bundlePathLiteral})) return;`,
54
+ ` if (!existsSync(${bundlePathLiteral})) {`,
55
+ " unregister();",
56
+ " return;",
57
+ " }",
32
58
  ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
33
59
  " const sig = size + \":\" + mtimeMs;",
34
- " if (sig === lastSig) return;",
35
- " register();",
36
- " lastSig = sig;",
60
+ " if (sig !== lastSig) {",
61
+ " register();",
62
+ " lastSig = sig;",
63
+ " }",
37
64
  "}",
38
65
  "",
39
66
  "ensureRegistered();",
40
67
  "",
41
68
  `export function ${REFRESH_EXPORT}() {`,
42
- ` if (!existsSync(${bundlePathLiteral})) return;`,
43
- " register();",
44
- ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,
45
- " lastSig = size + \":\" + mtimeMs;",
69
+ " ensureRegistered();",
70
+ " runRefreshCallbacks();",
46
71
  "}",
47
72
  ].join("\n");
48
73
  };
49
- const renderInitModule = (options) => options.isBuild ? buildInitModuleSource() : devInitModuleSource(options.devBundlePath);
74
+ const renderInitModule = (options) => options.isBuild ? buildInitModuleSource(options.bundleReferenceId) : devInitModuleSource(options.devBundlePath);
50
75
  export { renderInitModule };
51
76
  //# sourceMappingURL=resource-init-module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-init-module.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,qBAAqB,GAAG,GAAW,EAAE,CACvC;IACI,8CAA8C;IAC9C,6CAA6C;IAC7C,+DAA+D;IAC/D,EAAE;IACF,4DAA4D;IAC5D,kDAAkD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK;IACtF,8BAA8B;IAC9B,EAAE;IACF,uCAAuC;IACvC,mBAAmB,cAAc,OAAO;CAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO;QACH,mDAAmD;QACnD,oFAAoF;QACpF,EAAE;QACF,qBAAqB;QACrB,qBAAqB;QACrB,EAAE;QACF,uBAAuB;QACvB,kCAAkC,iBAAiB,IAAI;QACvD,gDAAgD;QAChD,8BAA8B;QAC9B,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,sCAAsC;QACtC,uBAAuB,iBAAiB,YAAY;QACpD,0CAA0C,iBAAiB,IAAI;QAC/D,yCAAyC;QACzC,kCAAkC;QAClC,iBAAiB;QACjB,oBAAoB;QACpB,GAAG;QACH,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,mBAAmB,cAAc,MAAM;QACvC,uBAAuB,iBAAiB,YAAY;QACpD,iBAAiB;QACjB,0CAA0C,iBAAiB,IAAI;QAC/D,uCAAuC;QACvC,GAAG;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAoD,EAAU,EAAE,CACtF,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { BUNDLE_FILENAME, REFRESH_EXPORT } from \"./resource-shared.js\";\n\nconst buildInitModuleSource = (): string =>\n [\n \"import { dirname, join } from \\\"node:path\\\";\",\n \"import { fileURLToPath } from \\\"node:url\\\";\",\n \"import { Resource, resourcesRegister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n \"const bundleDir = dirname(fileURLToPath(import.meta.url));\",\n `const resource = Resource.load(join(bundleDir, ${JSON.stringify(BUNDLE_FILENAME)}));`,\n \"resourcesRegister(resource);\",\n \"\",\n \"export function ensureRegistered() {}\",\n `export function ${REFRESH_EXPORT}() {}`,\n ].join(\"\\n\");\n\nconst devInitModuleSource = (bundlePath: string): string => {\n const bundlePathLiteral = JSON.stringify(bundlePath);\n\n return [\n \"import { existsSync, statSync } from \\\"node:fs\\\";\",\n \"import { Resource, resourcesRegister, resourcesUnregister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n \"let current = null;\",\n \"let lastSig = \\\"\\\";\",\n \"\",\n \"function register() {\",\n ` const next = Resource.load(${bundlePathLiteral});`,\n \" if (current) resourcesUnregister(current);\",\n \" resourcesRegister(next);\",\n \" current = next;\",\n \"}\",\n \"\",\n \"export function ensureRegistered() {\",\n ` if (!existsSync(${bundlePathLiteral})) return;`,\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n \" const sig = size + \\\":\\\" + mtimeMs;\",\n \" if (sig === lastSig) return;\",\n \" register();\",\n \" lastSig = sig;\",\n \"}\",\n \"\",\n \"ensureRegistered();\",\n \"\",\n `export function ${REFRESH_EXPORT}() {`,\n ` if (!existsSync(${bundlePathLiteral})) return;`,\n \" register();\",\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n \" lastSig = size + \\\":\\\" + mtimeMs;\",\n \"}\",\n ].join(\"\\n\");\n};\n\nconst renderInitModule = (options: { isBuild: boolean; devBundlePath: string }): string =>\n options.isBuild ? buildInitModuleSource() : devInitModuleSource(options.devBundlePath);\n\nexport { renderInitModule };\n"]}
1
+ {"version":3,"file":"resource-init-module.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-init-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAK/E,MAAM,qBAAqB,GAAG,GAAa,EAAE,CAAC;IAC1C,qCAAqC;IACrC,EAAE;IACF,mBAAmB,uBAAuB,mBAAmB;IAC7D,0CAA0C;IAC1C,iBAAiB;IACjB,GAAG;IACH,EAAE;IACF,kCAAkC;IAClC,mEAAmE;IACnE,GAAG;CACN,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,iBAAyB,EAAU,EAAE,CAChE;IACI,6CAA6C;IAC7C,+DAA+D;IAC/D,EAAE;IACF,sDAAsD,iBAAiB,GAAG;IAC1E,2GAA2G;IAC3G,6CAA6C;IAC7C,8BAA8B;IAC9B,EAAE;IACF,GAAG,qBAAqB,EAAE;IAC1B,EAAE;IACF,uCAAuC;IACvC,mBAAmB,cAAc,OAAO;CAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAU,EAAE;IACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO;QACH,mDAAmD;QACnD,oFAAoF;QACpF,EAAE;QACF,qBAAqB;QACrB,qBAAqB;QACrB,EAAE;QACF,uBAAuB;QACvB,kCAAkC,iBAAiB,IAAI;QACvD,gDAAgD;QAChD,8BAA8B;QAC9B,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,yBAAyB;QACzB,2BAA2B;QAC3B,mCAAmC;QACnC,qBAAqB;QACrB,qBAAqB;QACrB,GAAG;QACH,EAAE;QACF,GAAG,qBAAqB,EAAE;QAC1B,EAAE;QACF,sCAAsC;QACtC,uBAAuB,iBAAiB,MAAM;QAC9C,uBAAuB;QACvB,iBAAiB;QACjB,OAAO;QACP,0CAA0C,iBAAiB,IAAI;QAC/D,yCAAyC;QACzC,4BAA4B;QAC5B,qBAAqB;QACrB,wBAAwB;QACxB,OAAO;QACP,GAAG;QACH,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,mBAAmB,cAAc,MAAM;QACvC,yBAAyB;QACzB,4BAA4B;QAC5B,GAAG;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAU,EAAE,CAC5D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAEpH,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { REFRESH_EXPORT, REGISTER_REFRESH_EXPORT } from \"./resource-shared.js\";\n\ntype InitModuleOptions = { isBuild: true; bundleReferenceId: string } |\n { isBuild: false; devBundlePath: string };\n\nconst refreshCallbackSource = (): string[] => [\n \"const refreshCallbacks = new Map();\",\n \"\",\n `export function ${REGISTER_REFRESH_EXPORT}(key, callback) {`,\n \" refreshCallbacks.set(key, callback);\",\n \" callback();\",\n \"}\",\n \"\",\n \"function runRefreshCallbacks() {\",\n \" for (const callback of refreshCallbacks.values()) callback();\",\n \"}\",\n];\n\nconst buildInitModuleSource = (bundleReferenceId: string): string =>\n [\n \"import { fileURLToPath } from \\\"node:url\\\";\",\n \"import { Resource, resourcesRegister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n `const bundleLocation = import.meta.ROLLUP_FILE_URL_${bundleReferenceId};`,\n \"const bundlePath = bundleLocation.startsWith(\\\"file:\\\") ? fileURLToPath(bundleLocation) : bundleLocation;\",\n \"const resource = Resource.load(bundlePath);\",\n \"resourcesRegister(resource);\",\n \"\",\n ...refreshCallbackSource(),\n \"\",\n \"export function ensureRegistered() {}\",\n `export function ${REFRESH_EXPORT}() {}`,\n ].join(\"\\n\");\n\nconst devInitModuleSource = (bundlePath: string): string => {\n const bundlePathLiteral = JSON.stringify(bundlePath);\n\n return [\n \"import { existsSync, statSync } from \\\"node:fs\\\";\",\n \"import { Resource, resourcesRegister, resourcesUnregister } from \\\"@gtkx/gi/gio\\\";\",\n \"\",\n \"let current = null;\",\n \"let lastSig = \\\"\\\";\",\n \"\",\n \"function register() {\",\n ` const next = Resource.load(${bundlePathLiteral});`,\n \" if (current) resourcesUnregister(current);\",\n \" resourcesRegister(next);\",\n \" current = next;\",\n \"}\",\n \"\",\n \"function unregister() {\",\n \" if (!current) return;\",\n \" resourcesUnregister(current);\",\n \" current = null;\",\n \" lastSig = \\\"\\\";\",\n \"}\",\n \"\",\n ...refreshCallbackSource(),\n \"\",\n \"export function ensureRegistered() {\",\n ` if (!existsSync(${bundlePathLiteral})) {`,\n \" unregister();\",\n \" return;\",\n \" }\",\n ` const { size, mtimeMs } = statSync(${bundlePathLiteral});`,\n \" const sig = size + \\\":\\\" + mtimeMs;\",\n \" if (sig !== lastSig) {\",\n \" register();\",\n \" lastSig = sig;\",\n \" }\",\n \"}\",\n \"\",\n \"ensureRegistered();\",\n \"\",\n `export function ${REFRESH_EXPORT}() {`,\n \" ensureRegistered();\",\n \" runRefreshCallbacks();\",\n \"}\",\n ].join(\"\\n\");\n};\n\nconst renderInitModule = (options: InitModuleOptions): string =>\n options.isBuild ? buildInitModuleSource(options.bundleReferenceId) : devInitModuleSource(options.devBundlePath);\n\nexport { renderInitModule };\n"]}
@@ -1,9 +1,11 @@
1
1
  declare const VIRTUAL_INIT = "\0gtkx-resources-init";
2
2
  declare const BUNDLE_FILENAME = "gtkx.gresource";
3
3
  declare const REL_SEPARATOR = "\0rel=";
4
+ declare const ICON_NAME_SEPARATOR = "\0icon=";
4
5
  declare const REFRESH_EXPORT = "__refresh";
6
+ declare const REGISTER_REFRESH_EXPORT = "__registerRefresh";
5
7
  declare const RESOURCE_PATH_EXPORT = "path";
6
8
  declare const isVirtual: (id: string) => boolean, toVirtualId: (realId: string) => string, fromVirtualId: (id: string) => string;
7
9
  declare const escapeXml: (value: string) => string;
8
- export { VIRTUAL_INIT, BUNDLE_FILENAME, REL_SEPARATOR, REFRESH_EXPORT, RESOURCE_PATH_EXPORT, escapeXml, isVirtual, toVirtualId, fromVirtualId, };
10
+ export { VIRTUAL_INIT, BUNDLE_FILENAME, REL_SEPARATOR, ICON_NAME_SEPARATOR, REFRESH_EXPORT, REGISTER_REFRESH_EXPORT, RESOURCE_PATH_EXPORT, escapeXml, isVirtual, toVirtualId, fromVirtualId, };
9
11
  //# sourceMappingURL=resource-shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-shared.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,YAAY,0BAA0B,CAAC;AAC7C,QAAA,MAAM,eAAe,mBAAmB,CAAC;AACzC,QAAA,MAAM,aAAa,WAAW,CAAC;AAC/B,QAAA,MAAM,cAAc,cAAc,CAAC;AACnC,QAAA,MAAM,oBAAoB,SAAS,CAAC;AACpC,QAAA,MAAQ,SAAS,2BAAE,WAAW,8BAAE,aAAa,wBAA2C,CAAC;AAEzF,QAAA,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAmB7B,CAAC;AAEP,OAAO,EACH,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,GAChB,CAAC"}
1
+ {"version":3,"file":"resource-shared.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,YAAY,0BAA0B,CAAC;AAC7C,QAAA,MAAM,eAAe,mBAAmB,CAAC;AACzC,QAAA,MAAM,aAAa,WAAW,CAAC;AAC/B,QAAA,MAAM,mBAAmB,YAAY,CAAC;AACtC,QAAA,MAAM,cAAc,cAAc,CAAC;AACnC,QAAA,MAAM,uBAAuB,sBAAsB,CAAC;AACpD,QAAA,MAAM,oBAAoB,SAAS,CAAC;AACpC,QAAA,MAAQ,SAAS,2BAAE,WAAW,8BAAE,aAAa,wBAA2C,CAAC;AAEzF,QAAA,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAmB7B,CAAC;AAEP,OAAO,EACH,YAAY,EACZ,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,GAChB,CAAC"}
@@ -3,7 +3,9 @@ const VIRTUAL_PREFIX = "\0gtkx-resources:";
3
3
  const VIRTUAL_INIT = "\0gtkx-resources-init";
4
4
  const BUNDLE_FILENAME = "gtkx.gresource";
5
5
  const REL_SEPARATOR = "\0rel=";
6
+ const ICON_NAME_SEPARATOR = "\0icon=";
6
7
  const REFRESH_EXPORT = "__refresh";
8
+ const REGISTER_REFRESH_EXPORT = "__registerRefresh";
7
9
  const RESOURCE_PATH_EXPORT = "path";
8
10
  const { isVirtual, toVirtualId, fromVirtualId } = createVirtualNamespace(VIRTUAL_PREFIX);
9
11
  const escapeXml = (value) => value.replaceAll(/[<>&"']/g, (char) => {
@@ -25,5 +27,5 @@ const escapeXml = (value) => value.replaceAll(/[<>&"']/g, (char) => {
25
27
  }
26
28
  }
27
29
  });
28
- export { VIRTUAL_INIT, BUNDLE_FILENAME, REL_SEPARATOR, REFRESH_EXPORT, RESOURCE_PATH_EXPORT, escapeXml, isVirtual, toVirtualId, fromVirtualId, };
30
+ export { VIRTUAL_INIT, BUNDLE_FILENAME, REL_SEPARATOR, ICON_NAME_SEPARATOR, REFRESH_EXPORT, REGISTER_REFRESH_EXPORT, RESOURCE_PATH_EXPORT, escapeXml, isVirtual, toVirtualId, fromVirtualId, };
29
31
  //# sourceMappingURL=resource-shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource-shared.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAEzF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CACxC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;IAClC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACR,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,EACH,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,GAChB,CAAC","sourcesContent":["import { createVirtualNamespace } from \"./virtual-module.js\";\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-resources:\";\nconst VIRTUAL_INIT = \"\\0gtkx-resources-init\";\nconst BUNDLE_FILENAME = \"gtkx.gresource\";\nconst REL_SEPARATOR = \"\\0rel=\";\nconst REFRESH_EXPORT = \"__refresh\";\nconst RESOURCE_PATH_EXPORT = \"path\";\nconst { isVirtual, toVirtualId, fromVirtualId } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst escapeXml = (value: string): string =>\n value.replaceAll(/[<>&\"']/g, (char) => {\n switch (char) {\n case \"<\": {\n return \"&lt;\";\n }\n case \">\": {\n return \"&gt;\";\n }\n case \"&\": {\n return \"&amp;\";\n }\n case \"\\\"\": {\n return \"&quot;\";\n }\n default: {\n return \"&apos;\";\n }\n }\n });\n\nexport {\n VIRTUAL_INIT,\n BUNDLE_FILENAME,\n REL_SEPARATOR,\n REFRESH_EXPORT,\n RESOURCE_PATH_EXPORT,\n escapeXml,\n isVirtual,\n toVirtualId,\n fromVirtualId,\n};\n"]}
1
+ {"version":3,"file":"resource-shared.js","sourceRoot":"","sources":["../../src/vite-plugins/resource-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AACpD,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;AAEzF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CACxC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;IAClC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACR,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,QAAQ,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,EACH,YAAY,EACZ,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,GAChB,CAAC","sourcesContent":["import { createVirtualNamespace } from \"./virtual-module.js\";\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-resources:\";\nconst VIRTUAL_INIT = \"\\0gtkx-resources-init\";\nconst BUNDLE_FILENAME = \"gtkx.gresource\";\nconst REL_SEPARATOR = \"\\0rel=\";\nconst ICON_NAME_SEPARATOR = \"\\0icon=\";\nconst REFRESH_EXPORT = \"__refresh\";\nconst REGISTER_REFRESH_EXPORT = \"__registerRefresh\";\nconst RESOURCE_PATH_EXPORT = \"path\";\nconst { isVirtual, toVirtualId, fromVirtualId } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst escapeXml = (value: string): string =>\n value.replaceAll(/[<>&\"']/g, (char) => {\n switch (char) {\n case \"<\": {\n return \"&lt;\";\n }\n case \">\": {\n return \"&gt;\";\n }\n case \"&\": {\n return \"&amp;\";\n }\n case \"\\\"\": {\n return \"&quot;\";\n }\n default: {\n return \"&apos;\";\n }\n }\n });\n\nexport {\n VIRTUAL_INIT,\n BUNDLE_FILENAME,\n REL_SEPARATOR,\n ICON_NAME_SEPARATOR,\n REFRESH_EXPORT,\n REGISTER_REFRESH_EXPORT,\n RESOURCE_PATH_EXPORT,\n escapeXml,\n isVirtual,\n toVirtualId,\n fromVirtualId,\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ConfigLoader } from "@gtkx/config";
2
2
  import type { Plugin } from "vite";
3
- declare function gtkxResources(loadConfig?: ConfigLoader): Plugin;
3
+ declare function gtkxResources(loadConfig?: ConfigLoader, entryPath?: string): Plugin;
4
4
  export { gtkxResources };
5
5
  //# sourceMappingURL=resources.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAA6C,MAAM,MAAM,CAAC;AAyS9E,iBAAS,aAAa,CAAC,UAAU,GAAE,YAAmC,GAAG,MAAM,CAwD9E;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAA6B,MAAM,EAAuD,MAAM,MAAM,CAAC;AAqpDnH,iBAAS,aAAa,CAAC,UAAU,GAAE,YAAmC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BlG;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}