@gtkx/cli 2.0.0-beta.5 → 2.0.0-beta.7

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 (127) hide show
  1. package/README.md +43 -40
  2. package/dist/builder.d.ts.map +1 -1
  3. package/dist/builder.js +28 -8
  4. package/dist/builder.js.map +1 -1
  5. package/dist/cli.js +1 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/codegen/freshness.d.ts.map +1 -1
  8. package/dist/codegen/freshness.js +5 -1
  9. package/dist/codegen/freshness.js.map +1 -1
  10. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  11. package/dist/deploy/freedesktop/validate.js +6 -1
  12. package/dist/deploy/freedesktop/validate.js.map +1 -1
  13. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  14. package/dist/deploy/settings/libraries.js +2 -1
  15. package/dist/deploy/settings/libraries.js.map +1 -1
  16. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  17. package/dist/deploy/targets/flatpak-source.js +2 -0
  18. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  19. package/dist/dev/font-dir.d.ts +3 -0
  20. package/dist/dev/font-dir.d.ts.map +1 -0
  21. package/dist/dev/font-dir.js +12 -0
  22. package/dist/dev/font-dir.js.map +1 -0
  23. package/dist/dev/runner-main.d.ts.map +1 -1
  24. package/dist/dev/runner-main.js +2 -0
  25. package/dist/dev/runner-main.js.map +1 -1
  26. package/dist/internal/agent-rules.d.ts.map +1 -1
  27. package/dist/internal/agent-rules.js +7 -2
  28. package/dist/internal/agent-rules.js.map +1 -1
  29. package/dist/internal/banner.d.ts +4 -2
  30. package/dist/internal/banner.d.ts.map +1 -1
  31. package/dist/internal/banner.js +19 -5
  32. package/dist/internal/banner.js.map +1 -1
  33. package/dist/internal/font-path.d.ts +4 -0
  34. package/dist/internal/font-path.d.ts.map +1 -0
  35. package/dist/internal/font-path.js +12 -0
  36. package/dist/internal/font-path.js.map +1 -0
  37. package/dist/internal/font-staging.d.ts +3 -0
  38. package/dist/internal/font-staging.d.ts.map +1 -0
  39. package/dist/internal/font-staging.js +43 -0
  40. package/dist/internal/font-staging.js.map +1 -0
  41. package/dist/internal/source-imports.d.ts +2 -1
  42. package/dist/internal/source-imports.d.ts.map +1 -1
  43. package/dist/internal/source-imports.js +7 -2
  44. package/dist/internal/source-imports.js.map +1 -1
  45. package/dist/internal/xdg-banner.d.ts +4 -0
  46. package/dist/internal/xdg-banner.d.ts.map +1 -0
  47. package/dist/internal/xdg-banner.js +11 -0
  48. package/dist/internal/xdg-banner.js.map +1 -0
  49. package/dist/internal/xdg-data-dirs.d.ts +2 -1
  50. package/dist/internal/xdg-data-dirs.d.ts.map +1 -1
  51. package/dist/internal/xdg-data-dirs.js +1 -1
  52. package/dist/internal/xdg-data-dirs.js.map +1 -1
  53. package/dist/settings/schema.d.ts.map +1 -1
  54. package/dist/settings/schema.js +1 -6
  55. package/dist/settings/schema.js.map +1 -1
  56. package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
  57. package/dist/vite-plugins/asset-extensions.js +2 -0
  58. package/dist/vite-plugins/asset-extensions.js.map +1 -1
  59. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  60. package/dist/vite-plugins/asset-imports.js +7 -2
  61. package/dist/vite-plugins/asset-imports.js.map +1 -1
  62. package/dist/vite-plugins/asset-specifier.d.ts +5 -1
  63. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  64. package/dist/vite-plugins/asset-specifier.js +10 -1
  65. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  66. package/dist/vite-plugins/css.d.ts.map +1 -1
  67. package/dist/vite-plugins/css.js +3 -2
  68. package/dist/vite-plugins/css.js.map +1 -1
  69. package/dist/vite-plugins/font-name.d.ts +3 -0
  70. package/dist/vite-plugins/font-name.d.ts.map +1 -0
  71. package/dist/vite-plugins/font-name.js +406 -0
  72. package/dist/vite-plugins/font-name.js.map +1 -0
  73. package/dist/vite-plugins/font-worker-env.d.ts +4 -0
  74. package/dist/vite-plugins/font-worker-env.d.ts.map +1 -0
  75. package/dist/vite-plugins/font-worker-env.js +22 -0
  76. package/dist/vite-plugins/font-worker-env.js.map +1 -0
  77. package/dist/vite-plugins/font.d.ts +4 -0
  78. package/dist/vite-plugins/font.d.ts.map +1 -0
  79. package/dist/vite-plugins/font.js +87 -0
  80. package/dist/vite-plugins/font.js.map +1 -0
  81. package/dist/vite-plugins/icons.d.ts.map +1 -1
  82. package/dist/vite-plugins/icons.js +2 -7
  83. package/dist/vite-plugins/icons.js.map +1 -1
  84. package/dist/vite-plugins/index.d.ts.map +1 -1
  85. package/dist/vite-plugins/index.js +2 -0
  86. package/dist/vite-plugins/index.js.map +1 -1
  87. package/dist/vite-plugins/resources.js +1 -1
  88. package/dist/vite-plugins/resources.js.map +1 -1
  89. package/dist/vite-plugins/settings.d.ts.map +1 -1
  90. package/dist/vite-plugins/settings.js +6 -6
  91. package/dist/vite-plugins/settings.js.map +1 -1
  92. package/dist/vite-plugins/undeclared-library.js +3 -3
  93. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  94. package/dist/vitest-plugin.d.ts.map +1 -1
  95. package/dist/vitest-plugin.js +2 -0
  96. package/dist/vitest-plugin.js.map +1 -1
  97. package/env.d.ts +9 -0
  98. package/package.json +14 -12
  99. package/src/builder.ts +28 -8
  100. package/src/cli.ts +1 -1
  101. package/src/codegen/freshness.ts +5 -1
  102. package/src/deploy/freedesktop/validate.ts +8 -1
  103. package/src/deploy/settings/libraries.ts +2 -1
  104. package/src/deploy/targets/flatpak-source.ts +2 -0
  105. package/src/dev/font-dir.ts +16 -0
  106. package/src/dev/runner-main.ts +2 -0
  107. package/src/internal/agent-rules.ts +7 -2
  108. package/src/internal/banner.ts +27 -6
  109. package/src/internal/font-path.ts +15 -0
  110. package/src/internal/font-staging.ts +57 -0
  111. package/src/internal/source-imports.ts +17 -2
  112. package/src/internal/xdg-banner.ts +13 -0
  113. package/src/internal/xdg-data-dirs.ts +1 -1
  114. package/src/settings/schema.ts +1 -8
  115. package/src/vite-plugins/asset-extensions.ts +2 -0
  116. package/src/vite-plugins/asset-imports.ts +9 -1
  117. package/src/vite-plugins/asset-specifier.ts +17 -0
  118. package/src/vite-plugins/css.ts +4 -2
  119. package/src/vite-plugins/font-name.ts +582 -0
  120. package/src/vite-plugins/font-worker-env.ts +29 -0
  121. package/src/vite-plugins/font.ts +147 -0
  122. package/src/vite-plugins/icons.ts +2 -8
  123. package/src/vite-plugins/index.ts +2 -0
  124. package/src/vite-plugins/resources.ts +1 -1
  125. package/src/vite-plugins/settings.ts +7 -7
  126. package/src/vite-plugins/undeclared-library.ts +3 -3
  127. package/src/vitest-plugin.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"flatpak-source.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside, toPosixPath } from \"@gtkx/utils\";\nimport { existsSync, readFileSync, realpathSync } from \"node:fs\";\nimport { posix, relative, resolve } from \"node:path\";\nimport type { DeployPayload, DeploySettings } from \"../types.js\";\nimport { LOCALE_DIRNAME } from \"../../i18n/catalogs.js\";\nimport { listFilesRecursive } from \"../../internal/list-files.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\nimport { renderDbusService } from \"../freedesktop/dbus-service.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { renderNotices } from \"../notices/render.js\";\nimport { executableModeFor } from \"../payload/copy-tree.js\";\nimport { iconPathFor } from \"../payload/icons.js\";\nimport { renderLauncher } from \"../payload/launcher.js\";\nimport { licenseDestination, nodeLicenseDestination, NOTICES_FILENAME, noticesDestination } from \"../payload/stage.js\";\nimport { pnpmPathFor, type PnpmPin, pnpmSources } from \"./flatpak-pnpm.js\";\nimport { DESTINATION, type FlatpakModule, postInstallCommands, validationCommands } from \"./flatpak-prebuilt.js\";\nimport {\n detectPackageManager,\n GENERATED_SOURCES,\n installCommandFor,\n nodeExtensionPathFor,\n type PackageManager,\n pnpmPinFor,\n resolveGitSource,\n} from \"./flatpak-sources.js\";\n\ntype InstalledFile = {\n destination: string;\n source: string;\n resolved: string;\n};\n\nconst LAUNCHER_FILENAME = \"launcher.sh\";\nconst MODULE_BUILD_ROOT = \"/run/build\";\nconst RUNTIME_PREFIX = \"/app\";\nconst NPM_CACHE_DIR = \"flatpak-node/npm-cache\";\nconst YARN_MIRROR_DIR = \"flatpak-node/yarn-mirror\";\nconst PLAIN_ARGUMENT = /^[\\w./-]+$/;\nconst QUOTE_ESCAPE = String.raw`'\\''`;\nconst OCTAL_RADIX = 8;\n\nconst inlineSource = (fileName: string, contents: string): FlatpakModule => ({\n type: \"inline\",\n \"dest-filename\": fileName,\n contents,\n});\n\nconst projectRelative = (settings: DeploySettings, path: string): string =>\n toPosixPath(relative(settings.paths.root, path));\n\nconst shellArgument = (value: string): string =>\n PLAIN_ARGUMENT.test(value) ? value : `'${value.split(\"'\").join(QUOTE_ESCAPE)}'`;\n\nconst pathArgument = (value: string): string => shellArgument(value.startsWith(\"-\") ? `./${value}` : value);\n\nconst installCommand = (source: string, destination: string, mode: string): string =>\n `install -D${mode} ${pathArgument(source)} ${destination}`;\n\nconst runtimeInstallCommands = (settings: DeploySettings, nodeExtensionPath: string): string[] => {\n const lib = `${DESTINATION}/lib/${settings.binaryName}`;\n const locale = `${DESTINATION}/share/${LOCALE_DIRNAME}`;\n\n return [\n installCommand(`${nodeExtensionPath}/bin/node`, `${lib}/node`, \"m755\"),\n installCommand(`dist/${BUNDLE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`, \"m644\"),\n installCommand(\"dist/gtkx.node\", `${lib}/gtkx.node`, \"m755\"),\n \"test ! -f dist/gtkx.gresource || \" + installCommand(\"dist/gtkx.gresource\", `${lib}/gtkx.gresource`, \"m644\"),\n \"test ! -f dist/gschemas.compiled || \" +\n installCommand(\"dist/gschemas.compiled\", `${lib}/gschemas.compiled`, \"m644\"),\n `test ! -d dist/assets || cp -a dist/assets ${lib}/assets`,\n `test ! -d dist/${LOCALE_DIRNAME} || { mkdir -p ${locale} && cp -a dist/${LOCALE_DIRNAME}/. ${locale}/; }`,\n installCommand(LAUNCHER_FILENAME, `${DESTINATION}/bin/${settings.binaryName}`, \"m755\"),\n ];\n};\n\nconst activationSource = (settings: DeploySettings): FlatpakModule[] =>\n settings.isDbusActivatable\n ? [inlineSource(`${settings.applicationId}.service`, renderDbusService(settings, RUNTIME_PREFIX))]\n : [];\n\nconst activationInstallCommands = (settings: DeploySettings): string[] =>\n settings.isDbusActivatable\n ? [installCommand(\n `${settings.applicationId}.service`,\n `${DESTINATION}/share/dbus-1/services/${settings.applicationId}.service`,\n \"m644\",\n )]\n : [];\n\nconst stagedContents = (payload: DeployPayload, destination: string): string => {\n const file = payload.stage.find((candidate) => candidate.rel === destination);\n\n if (file === undefined) {\n throw new Error(`Cannot render the source Flatpak: ${destination} was not staged`);\n }\n\n return readFileSync(file.abs, \"utf8\");\n};\n\nconst stagedMetadataSources = (payload: DeployPayload): FlatpakModule[] => {\n const settings = payload.settings;\n\n return [\n inlineSource(\n `${settings.applicationId}.desktop`,\n stagedContents(payload, posix.join(\"share\", \"applications\", `${settings.applicationId}.desktop`)),\n ),\n inlineSource(\n `${settings.applicationId}.metainfo.xml`,\n stagedContents(payload, posix.join(\"share\", \"metainfo\", `${settings.applicationId}.metainfo.xml`)),\n ),\n ...(settings.fileAssociations.length === 0\n ? []\n : [inlineSource(\n `${settings.applicationId}.xml`,\n stagedContents(payload, posix.join(\"share\", \"mime\", \"packages\", `${settings.applicationId}.xml`)),\n )]),\n ];\n};\n\nconst mimeInstallCommands = (settings: DeploySettings): string[] =>\n settings.fileAssociations.length === 0\n ? []\n : [installCommand(\n `${settings.applicationId}.xml`,\n `${DESTINATION}/share/mime/packages/${settings.applicationId}.xml`,\n \"m644\",\n )];\n\nconst metadataInstallCommands = (settings: DeploySettings): string[] => [\n installCommand(\n `${settings.applicationId}.desktop`,\n `${DESTINATION}/share/applications/${settings.applicationId}.desktop`,\n \"m644\",\n ),\n installCommand(\n `${settings.applicationId}.metainfo.xml`,\n `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`,\n \"m644\",\n ),\n ...activationInstallCommands(settings),\n ...mimeInstallCommands(settings),\n];\n\nconst schemaInstallCommands = (settings: DeploySettings): string[] =>\n settings.paths.schemaFiles.map((file) => {\n const name = posix.basename(file);\n const source = projectRelative(settings, file);\n const destination = `${DESTINATION}/share/glib-2.0/schemas/${shellArgument(name)}`;\n assertInsideProject(settings, { destination, source, resolved: file });\n\n return installCommand(source, destination, \"m644\");\n });\n\nconst iconInstallCommand = (settings: DeploySettings, source: string, rel: string): string =>\n installCommand(\n projectRelative(settings, source),\n `${DESTINATION}/share/icons/${shellArgument(toPosixPath(rel))}`,\n \"m644\",\n );\n\nconst iconInstallCommands = (settings: DeploySettings): string[] => {\n const source = settings.paths.applicationIcon;\n\n if (source.kind === \"file\") {\n return [iconInstallCommand(settings, source.path, iconPathFor(settings, source.path))];\n }\n\n if (source.kind === \"none\") {\n return [];\n }\n\n return listFilesRecursive(source.path).map((icon) => iconInstallCommand(settings, icon.absPath, icon.rel));\n};\n\nconst assertInsideProject = (settings: DeploySettings, installed: InstalledFile): void => {\n const { resolved } = installed;\n const target = existsSync(resolved) ? realpathSync(resolved) : resolved;\n\n if (isPathInside(settings.paths.root, target)) {\n return;\n }\n\n throw new Error(\n `Cannot install \"${installed.destination}\" from \"${installed.source}\": a source-mode manifest builds from ` +\n `your git checkout, so every file it installs has to live inside ${settings.paths.root} and be committed. ` +\n \"Move it into the project, or drop it from the source build.\",\n );\n};\n\nconst licenseInstallCommands = (settings: DeploySettings): string[] => {\n const licenseFile = settings.paths.licenseFile;\n\n if (licenseFile === null) {\n return [];\n }\n\n const destination = licenseDestination(settings);\n assertInsideProject(settings, { destination, source: licenseFile, resolved: licenseFile });\n const target = `${DESTINATION}/${shellArgument(destination)}`;\n\n return [installCommand(projectRelative(settings, licenseFile), target, \"m644\")];\n};\n\nconst noticesInstallCommands = (settings: DeploySettings): string[] => {\n const extensionLicense = `${nodeExtensionPathFor(settings)}/LICENSE`;\n const nodeTarget = `${DESTINATION}/${shellArgument(nodeLicenseDestination(settings))}`;\n\n return [\n installCommand(NOTICES_FILENAME, `${DESTINATION}/${shellArgument(noticesDestination(settings))}`, \"m644\"),\n `test ! -f ${extensionLicense} || ${installCommand(extensionLicense, nodeTarget, \"m644\")}`,\n ];\n};\n\nconst extraFileInstallCommands = (settings: DeploySettings): string[] =>\n settings.extraFiles.map((file) => {\n const resolved = resolve(settings.paths.root, file.source);\n assertInsideProject(settings, { destination: file.destination, source: file.source, resolved });\n const mode = file.mode ?? executableModeFor(resolved);\n\n return installCommand(\n projectRelative(settings, resolved),\n `${DESTINATION}/${shellArgument(file.destination)}`,\n `m${mode.toString(OCTAL_RADIX)}`,\n );\n });\n\nconst moduleDirFor = (settings: DeploySettings): string => `${MODULE_BUILD_ROOT}/${settings.binaryName}`;\n\nconst offlineEnvFor = (manager: PackageManager, settings: DeploySettings): Record<string, string> => {\n if (manager === \"pnpm\") {\n return {};\n }\n\n if (manager === \"yarn\") {\n return { YARN_OFFLINE_MIRROR: `${moduleDirFor(settings)}/${YARN_MIRROR_DIR}` };\n }\n\n return { npm_config_cache: `${moduleDirFor(settings)}/${NPM_CACHE_DIR}`, npm_config_offline: \"true\" };\n};\n\nconst appendPathFor = (settings: DeploySettings, pin: PnpmPin | null, nodeExtensionPath: string): string =>\n pin === null\n ? `${nodeExtensionPath}/bin`\n : `${pnpmPathFor(moduleDirFor(settings))}:${nodeExtensionPath}/bin`;\n\nconst sourceBuildCommand = (settings: DeploySettings): string => {\n const configFile = projectRelative(settings, settings.configFile);\n assertInsideProject(settings, {\n destination: \"the Flatpak build configuration\",\n source: configFile,\n resolved: settings.configFile,\n });\n\n return `npx gtkx build --config ${pathArgument(configFile)}`;\n};\n\nconst flatpakSourceModule = (payload: DeployPayload): FlatpakModule => {\n const settings = payload.settings;\n const manager = detectPackageManager(settings);\n const pin = pnpmPinFor(settings, manager);\n const postInstall = postInstallCommands(payload);\n const nodeExtensionPath = nodeExtensionPathFor(settings);\n\n return {\n name: settings.binaryName,\n buildsystem: \"simple\",\n \"build-options\": {\n \"append-path\": appendPathFor(settings, pin, nodeExtensionPath),\n env: { npm_config_nodedir: nodeExtensionPath, ...offlineEnvFor(manager, settings) },\n strip: false,\n \"no-debuginfo\": true,\n },\n sources: [\n resolveGitSource(settings),\n ...(pin === null ? [] : pnpmSources(pin, moduleDirFor(settings))),\n GENERATED_SOURCES,\n ...stagedMetadataSources(payload),\n inlineSource(LAUNCHER_FILENAME, renderLauncher(settings)),\n inlineSource(NOTICES_FILENAME, renderNotices(settings, payload.notices)),\n ...activationSource(settings),\n ],\n \"build-commands\": [\n installCommandFor(settings, manager),\n sourceBuildCommand(settings),\n ...runtimeInstallCommands(settings, nodeExtensionPath),\n ...extraFileInstallCommands(settings),\n ...metadataInstallCommands(settings),\n ...schemaInstallCommands(settings),\n ...iconInstallCommands(settings),\n ...licenseInstallCommands(settings),\n ...noticesInstallCommands(settings),\n ...(settings.deploy.flatpak?.buildCommands ?? []),\n ...validationCommands(settings),\n ],\n ...optional(\"post-install\", postInstall.length === 0 ? undefined : postInstall),\n };\n};\n\nexport { flatpakSourceModule };\n"]}
1
+ {"version":3,"file":"flatpak-source.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside, toPosixPath } from \"@gtkx/utils\";\nimport { existsSync, readFileSync, realpathSync } from \"node:fs\";\nimport { posix, relative, resolve } from \"node:path\";\nimport type { DeployPayload, DeploySettings } from \"../types.js\";\nimport { LOCALE_DIRNAME } from \"../../i18n/catalogs.js\";\nimport { FONTS_DIR } from \"../../internal/font-path.js\";\nimport { listFilesRecursive } from \"../../internal/list-files.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\nimport { renderDbusService } from \"../freedesktop/dbus-service.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { renderNotices } from \"../notices/render.js\";\nimport { executableModeFor } from \"../payload/copy-tree.js\";\nimport { iconPathFor } from \"../payload/icons.js\";\nimport { renderLauncher } from \"../payload/launcher.js\";\nimport { licenseDestination, nodeLicenseDestination, NOTICES_FILENAME, noticesDestination } from \"../payload/stage.js\";\nimport { pnpmPathFor, type PnpmPin, pnpmSources } from \"./flatpak-pnpm.js\";\nimport { DESTINATION, type FlatpakModule, postInstallCommands, validationCommands } from \"./flatpak-prebuilt.js\";\nimport {\n detectPackageManager,\n GENERATED_SOURCES,\n installCommandFor,\n nodeExtensionPathFor,\n type PackageManager,\n pnpmPinFor,\n resolveGitSource,\n} from \"./flatpak-sources.js\";\n\ntype InstalledFile = {\n destination: string;\n source: string;\n resolved: string;\n};\n\nconst LAUNCHER_FILENAME = \"launcher.sh\";\nconst MODULE_BUILD_ROOT = \"/run/build\";\nconst RUNTIME_PREFIX = \"/app\";\nconst NPM_CACHE_DIR = \"flatpak-node/npm-cache\";\nconst YARN_MIRROR_DIR = \"flatpak-node/yarn-mirror\";\nconst PLAIN_ARGUMENT = /^[\\w./-]+$/;\nconst QUOTE_ESCAPE = String.raw`'\\''`;\nconst OCTAL_RADIX = 8;\n\nconst inlineSource = (fileName: string, contents: string): FlatpakModule => ({\n type: \"inline\",\n \"dest-filename\": fileName,\n contents,\n});\n\nconst projectRelative = (settings: DeploySettings, path: string): string =>\n toPosixPath(relative(settings.paths.root, path));\n\nconst shellArgument = (value: string): string =>\n PLAIN_ARGUMENT.test(value) ? value : `'${value.split(\"'\").join(QUOTE_ESCAPE)}'`;\n\nconst pathArgument = (value: string): string => shellArgument(value.startsWith(\"-\") ? `./${value}` : value);\n\nconst installCommand = (source: string, destination: string, mode: string): string =>\n `install -D${mode} ${pathArgument(source)} ${destination}`;\n\nconst runtimeInstallCommands = (settings: DeploySettings, nodeExtensionPath: string): string[] => {\n const lib = `${DESTINATION}/lib/${settings.binaryName}`;\n const locale = `${DESTINATION}/share/${LOCALE_DIRNAME}`;\n\n return [\n installCommand(`${nodeExtensionPath}/bin/node`, `${lib}/node`, \"m755\"),\n installCommand(`dist/${BUNDLE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`, \"m644\"),\n installCommand(\"dist/gtkx.node\", `${lib}/gtkx.node`, \"m755\"),\n \"test ! -f dist/gtkx.gresource || \" + installCommand(\"dist/gtkx.gresource\", `${lib}/gtkx.gresource`, \"m644\"),\n \"test ! -f dist/gschemas.compiled || \" +\n installCommand(\"dist/gschemas.compiled\", `${lib}/gschemas.compiled`, \"m644\"),\n `test ! -d dist/assets || cp -a dist/assets ${lib}/assets`,\n `test ! -d dist/${FONTS_DIR} || cp -a dist/${FONTS_DIR} ${lib}/${FONTS_DIR}`,\n `test ! -d dist/${LOCALE_DIRNAME} || { mkdir -p ${locale} && cp -a dist/${LOCALE_DIRNAME}/. ${locale}/; }`,\n installCommand(LAUNCHER_FILENAME, `${DESTINATION}/bin/${settings.binaryName}`, \"m755\"),\n ];\n};\n\nconst activationSource = (settings: DeploySettings): FlatpakModule[] =>\n settings.isDbusActivatable\n ? [inlineSource(`${settings.applicationId}.service`, renderDbusService(settings, RUNTIME_PREFIX))]\n : [];\n\nconst activationInstallCommands = (settings: DeploySettings): string[] =>\n settings.isDbusActivatable\n ? [installCommand(\n `${settings.applicationId}.service`,\n `${DESTINATION}/share/dbus-1/services/${settings.applicationId}.service`,\n \"m644\",\n )]\n : [];\n\nconst stagedContents = (payload: DeployPayload, destination: string): string => {\n const file = payload.stage.find((candidate) => candidate.rel === destination);\n\n if (file === undefined) {\n throw new Error(`Cannot render the source Flatpak: ${destination} was not staged`);\n }\n\n return readFileSync(file.abs, \"utf8\");\n};\n\nconst stagedMetadataSources = (payload: DeployPayload): FlatpakModule[] => {\n const settings = payload.settings;\n\n return [\n inlineSource(\n `${settings.applicationId}.desktop`,\n stagedContents(payload, posix.join(\"share\", \"applications\", `${settings.applicationId}.desktop`)),\n ),\n inlineSource(\n `${settings.applicationId}.metainfo.xml`,\n stagedContents(payload, posix.join(\"share\", \"metainfo\", `${settings.applicationId}.metainfo.xml`)),\n ),\n ...(settings.fileAssociations.length === 0\n ? []\n : [inlineSource(\n `${settings.applicationId}.xml`,\n stagedContents(payload, posix.join(\"share\", \"mime\", \"packages\", `${settings.applicationId}.xml`)),\n )]),\n ];\n};\n\nconst mimeInstallCommands = (settings: DeploySettings): string[] =>\n settings.fileAssociations.length === 0\n ? []\n : [installCommand(\n `${settings.applicationId}.xml`,\n `${DESTINATION}/share/mime/packages/${settings.applicationId}.xml`,\n \"m644\",\n )];\n\nconst metadataInstallCommands = (settings: DeploySettings): string[] => [\n installCommand(\n `${settings.applicationId}.desktop`,\n `${DESTINATION}/share/applications/${settings.applicationId}.desktop`,\n \"m644\",\n ),\n installCommand(\n `${settings.applicationId}.metainfo.xml`,\n `${DESTINATION}/share/metainfo/${settings.applicationId}.metainfo.xml`,\n \"m644\",\n ),\n ...activationInstallCommands(settings),\n ...mimeInstallCommands(settings),\n];\n\nconst schemaInstallCommands = (settings: DeploySettings): string[] =>\n settings.paths.schemaFiles.map((file) => {\n const name = posix.basename(file);\n const source = projectRelative(settings, file);\n const destination = `${DESTINATION}/share/glib-2.0/schemas/${shellArgument(name)}`;\n assertInsideProject(settings, { destination, source, resolved: file });\n\n return installCommand(source, destination, \"m644\");\n });\n\nconst iconInstallCommand = (settings: DeploySettings, source: string, rel: string): string =>\n installCommand(\n projectRelative(settings, source),\n `${DESTINATION}/share/icons/${shellArgument(toPosixPath(rel))}`,\n \"m644\",\n );\n\nconst iconInstallCommands = (settings: DeploySettings): string[] => {\n const source = settings.paths.applicationIcon;\n\n if (source.kind === \"file\") {\n return [iconInstallCommand(settings, source.path, iconPathFor(settings, source.path))];\n }\n\n if (source.kind === \"none\") {\n return [];\n }\n\n return listFilesRecursive(source.path).map((icon) => iconInstallCommand(settings, icon.absPath, icon.rel));\n};\n\nconst assertInsideProject = (settings: DeploySettings, installed: InstalledFile): void => {\n const { resolved } = installed;\n const target = existsSync(resolved) ? realpathSync(resolved) : resolved;\n\n if (isPathInside(settings.paths.root, target)) {\n return;\n }\n\n throw new Error(\n `Cannot install \"${installed.destination}\" from \"${installed.source}\": a source-mode manifest builds from ` +\n `your git checkout, so every file it installs has to live inside ${settings.paths.root} and be committed. ` +\n \"Move it into the project, or drop it from the source build.\",\n );\n};\n\nconst licenseInstallCommands = (settings: DeploySettings): string[] => {\n const licenseFile = settings.paths.licenseFile;\n\n if (licenseFile === null) {\n return [];\n }\n\n const destination = licenseDestination(settings);\n assertInsideProject(settings, { destination, source: licenseFile, resolved: licenseFile });\n const target = `${DESTINATION}/${shellArgument(destination)}`;\n\n return [installCommand(projectRelative(settings, licenseFile), target, \"m644\")];\n};\n\nconst noticesInstallCommands = (settings: DeploySettings): string[] => {\n const extensionLicense = `${nodeExtensionPathFor(settings)}/LICENSE`;\n const nodeTarget = `${DESTINATION}/${shellArgument(nodeLicenseDestination(settings))}`;\n\n return [\n installCommand(NOTICES_FILENAME, `${DESTINATION}/${shellArgument(noticesDestination(settings))}`, \"m644\"),\n `test ! -f ${extensionLicense} || ${installCommand(extensionLicense, nodeTarget, \"m644\")}`,\n ];\n};\n\nconst extraFileInstallCommands = (settings: DeploySettings): string[] =>\n settings.extraFiles.map((file) => {\n const resolved = resolve(settings.paths.root, file.source);\n assertInsideProject(settings, { destination: file.destination, source: file.source, resolved });\n const mode = file.mode ?? executableModeFor(resolved);\n\n return installCommand(\n projectRelative(settings, resolved),\n `${DESTINATION}/${shellArgument(file.destination)}`,\n `m${mode.toString(OCTAL_RADIX)}`,\n );\n });\n\nconst moduleDirFor = (settings: DeploySettings): string => `${MODULE_BUILD_ROOT}/${settings.binaryName}`;\n\nconst offlineEnvFor = (manager: PackageManager, settings: DeploySettings): Record<string, string> => {\n if (manager === \"pnpm\") {\n return {};\n }\n\n if (manager === \"yarn\") {\n return { YARN_OFFLINE_MIRROR: `${moduleDirFor(settings)}/${YARN_MIRROR_DIR}` };\n }\n\n return { npm_config_cache: `${moduleDirFor(settings)}/${NPM_CACHE_DIR}`, npm_config_offline: \"true\" };\n};\n\nconst appendPathFor = (settings: DeploySettings, pin: PnpmPin | null, nodeExtensionPath: string): string =>\n pin === null\n ? `${nodeExtensionPath}/bin`\n : `${pnpmPathFor(moduleDirFor(settings))}:${nodeExtensionPath}/bin`;\n\nconst sourceBuildCommand = (settings: DeploySettings): string => {\n const configFile = projectRelative(settings, settings.configFile);\n assertInsideProject(settings, {\n destination: \"the Flatpak build configuration\",\n source: configFile,\n resolved: settings.configFile,\n });\n\n return `npx gtkx build --config ${pathArgument(configFile)}`;\n};\n\nconst flatpakSourceModule = (payload: DeployPayload): FlatpakModule => {\n const settings = payload.settings;\n const manager = detectPackageManager(settings);\n const pin = pnpmPinFor(settings, manager);\n const postInstall = postInstallCommands(payload);\n const nodeExtensionPath = nodeExtensionPathFor(settings);\n\n return {\n name: settings.binaryName,\n buildsystem: \"simple\",\n \"build-options\": {\n \"append-path\": appendPathFor(settings, pin, nodeExtensionPath),\n env: { npm_config_nodedir: nodeExtensionPath, ...offlineEnvFor(manager, settings) },\n strip: false,\n \"no-debuginfo\": true,\n },\n sources: [\n resolveGitSource(settings),\n ...(pin === null ? [] : pnpmSources(pin, moduleDirFor(settings))),\n GENERATED_SOURCES,\n ...stagedMetadataSources(payload),\n inlineSource(LAUNCHER_FILENAME, renderLauncher(settings)),\n inlineSource(NOTICES_FILENAME, renderNotices(settings, payload.notices)),\n ...activationSource(settings),\n ],\n \"build-commands\": [\n installCommandFor(settings, manager),\n sourceBuildCommand(settings),\n ...runtimeInstallCommands(settings, nodeExtensionPath),\n ...extraFileInstallCommands(settings),\n ...metadataInstallCommands(settings),\n ...schemaInstallCommands(settings),\n ...iconInstallCommands(settings),\n ...licenseInstallCommands(settings),\n ...noticesInstallCommands(settings),\n ...(settings.deploy.flatpak?.buildCommands ?? []),\n ...validationCommands(settings),\n ],\n ...optional(\"post-install\", postInstall.length === 0 ? undefined : postInstall),\n };\n};\n\nexport { flatpakSourceModule };\n"]}
@@ -0,0 +1,3 @@
1
+ declare const prepareDevFontDir: (root: string) => string | null;
2
+ export { prepareDevFontDir };
3
+ //# sourceMappingURL=font-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-dir.d.ts","sourceRoot":"","sources":["../../src/dev/font-dir.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAUlD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { stageProjectFonts } from "../internal/font-staging.js";
2
+ import { prependXdgDataDir } from "../internal/xdg-data-dirs.js";
3
+ const prepareDevFontDir = (root) => {
4
+ const shareDir = stageProjectFonts(root);
5
+ if (shareDir === null) {
6
+ return null;
7
+ }
8
+ process.env.XDG_DATA_DIRS = prependXdgDataDir(shareDir, process.env.XDG_DATA_DIRS);
9
+ return shareDir;
10
+ };
11
+ export { prepareDevFontDir };
12
+ //# sourceMappingURL=font-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-dir.js","sourceRoot":"","sources":["../../src/dev/font-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAiB,EAAE;IACtD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { stageProjectFonts } from \"../internal/font-staging.js\";\nimport { prependXdgDataDir } from \"../internal/xdg-data-dirs.js\";\n\nconst prepareDevFontDir = (root: string): string | null => {\n const shareDir = stageProjectFonts(root);\n\n if (shareDir === null) {\n return null;\n }\n\n process.env.XDG_DATA_DIRS = prependXdgDataDir(shareDir, process.env.XDG_DATA_DIRS);\n\n return shareDir;\n};\n\nexport { prepareDevFontDir };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runner-main.d.ts","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CA8BlC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"runner-main.d.ts","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CA+BlC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import { loadConfig } from "@gtkx/config";
2
2
  import { error } from "@gtkx/utils";
3
3
  import { resolve } from "node:path";
4
4
  import { DEV_CONFIG_ENV, DEV_ENTRY_ENV } from "./entry-env.js";
5
+ import { prepareDevFontDir } from "./font-dir.js";
5
6
  import { prepareDevIconDir } from "./icon-dir.js";
6
7
  import { prepareDevLocaleDir } from "./locale-dir.js";
7
8
  import { createDevRunner } from "./runner.js";
@@ -27,6 +28,7 @@ const main = async () => {
27
28
  prepareDevLocaleDir(root, config.applicationId);
28
29
  prepareDevSchemaDir(root);
29
30
  prepareDevIconDir(root, config.applicationId, config.applicationIcon);
31
+ prepareDevFontDir(root);
30
32
  const entryPath = resolve(cwd, entryArg);
31
33
  const { defaultDevRunnerDeps } = await import("./runner-deps.js");
32
34
  const runner = createDevRunner(defaultDevRunnerDeps(configFile));
@@ -1 +1 @@
1
- {"version":3,"file":"runner-main.js","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,KAAK,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,KAAK,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IACpF,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { loadConfig } from \"@gtkx/config\";\nimport { error } from \"@gtkx/utils\";\nimport { resolve } from \"node:path\";\nimport { DEV_CONFIG_ENV, DEV_ENTRY_ENV } from \"./entry-env.js\";\nimport { prepareDevIconDir } from \"./icon-dir.js\";\nimport { prepareDevLocaleDir } from \"./locale-dir.js\";\nimport { createDevRunner } from \"./runner.js\";\nimport { prepareDevSchemaDir } from \"./schema-dir.js\";\n\nconst main = async (): Promise<void> => {\n if (process.channel) {\n process.once(\"disconnect\", () => {\n process.exit(0);\n });\n }\n\n const cwd = process.cwd();\n const entryArg = process.env[DEV_ENTRY_ENV];\n\n if (!entryArg) {\n error(`Missing ${DEV_ENTRY_ENV}`);\n process.exit(1);\n }\n\n const configFile = process.env[DEV_CONFIG_ENV];\n\n if (!configFile) {\n error(`Missing ${DEV_CONFIG_ENV}`);\n process.exit(1);\n }\n\n const { config, root } = await loadConfig(cwd, { mode: \"development\", configFile });\n prepareDevLocaleDir(root, config.applicationId);\n prepareDevSchemaDir(root);\n prepareDevIconDir(root, config.applicationId, config.applicationIcon);\n const entryPath = resolve(cwd, entryArg);\n const { defaultDevRunnerDeps } = await import(\"./runner-deps.js\");\n const runner = createDevRunner(defaultDevRunnerDeps(configFile));\n await runner.run(entryPath);\n};\n\nexport { main };\n"]}
1
+ {"version":3,"file":"runner-main.js","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACnC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,KAAK,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,KAAK,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IACpF,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACtE,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { loadConfig } from \"@gtkx/config\";\nimport { error } from \"@gtkx/utils\";\nimport { resolve } from \"node:path\";\nimport { DEV_CONFIG_ENV, DEV_ENTRY_ENV } from \"./entry-env.js\";\nimport { prepareDevFontDir } from \"./font-dir.js\";\nimport { prepareDevIconDir } from \"./icon-dir.js\";\nimport { prepareDevLocaleDir } from \"./locale-dir.js\";\nimport { createDevRunner } from \"./runner.js\";\nimport { prepareDevSchemaDir } from \"./schema-dir.js\";\n\nconst main = async (): Promise<void> => {\n if (process.channel) {\n process.once(\"disconnect\", () => {\n process.exit(0);\n });\n }\n\n const cwd = process.cwd();\n const entryArg = process.env[DEV_ENTRY_ENV];\n\n if (!entryArg) {\n error(`Missing ${DEV_ENTRY_ENV}`);\n process.exit(1);\n }\n\n const configFile = process.env[DEV_CONFIG_ENV];\n\n if (!configFile) {\n error(`Missing ${DEV_CONFIG_ENV}`);\n process.exit(1);\n }\n\n const { config, root } = await loadConfig(cwd, { mode: \"development\", configFile });\n prepareDevLocaleDir(root, config.applicationId);\n prepareDevSchemaDir(root);\n prepareDevIconDir(root, config.applicationId, config.applicationIcon);\n prepareDevFontDir(root);\n const entryPath = resolve(cwd, entryArg);\n const { defaultDevRunnerDeps } = await import(\"./runner-deps.js\");\n const runner = createDevRunner(defaultDevRunnerDeps(configFile));\n await runner.run(entryPath);\n};\n\nexport { main };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA+GF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,gBAcxC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAoHF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,gBAcxC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -11,9 +11,13 @@ const TOP_LEVEL_HEADING = /^# /m;
11
11
  const rulesBody = (heading) => [
12
12
  `${heading} GTKX`,
13
13
  "",
14
- "This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or " +
15
- "GJS, and almost none of it is valid here. Check the rules below against what you are about to write.",
14
+ "GTKX applications are Adwaita-first, with GTK4 underneath. Most GNOME UI code in your training data is C, " +
15
+ "PyGObject, Vala or GJS, and almost none of it is valid here. Check the rules below against what you are " +
16
+ "about to write.",
16
17
  "",
18
+ "- Start application shells with `AdwApplication` and `AdwApplicationWindow`. Freeform windows normally use " +
19
+ "`AdwToolbarView` and `AdwHeaderBar`; navigation containers own their Adwaita chrome. Prefer Adwaita for " +
20
+ "structure, navigation, dialogs, rows, and adaptive patterns; use GTK4 for lower-level primitives.",
17
21
  "- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.",
18
22
  '- Signals are props: `onClicked`, not `widget.connect("clicked", ...)`.',
19
23
  "- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.",
@@ -30,6 +34,7 @@ const rulesBody = (heading) => [
30
34
  "| --- | --- |",
31
35
  "| `gtkx dev` | Run the app with fast refresh |",
32
36
  "| `gtkx codegen` | Regenerate bindings and this reference |",
37
+ "| `gtkx cleanup` | Remove stale headless runtime directories |",
33
38
  "| `tsc --noEmit` | Typecheck |",
34
39
  "| `vitest run` | Run the tests |",
35
40
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { REFERENCE_PATH } from \"../codegen/reference.js\";\n\ntype AgentRulesResult = {\n isWritten: boolean;\n files: string[];\n};\n\nconst AGENTS_FILENAME = \"AGENTS.md\";\nconst CLAUDE_FILENAME = \"CLAUDE.md\";\nconst CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\\n`;\nconst BEGIN_MARKER = \"<!-- BEGIN:gtkx-agent-rules -->\";\nconst END_MARKER = \"<!-- END:gtkx-agent-rules -->\";\nconst BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\\s\\S]*?<!-- END:gtkx-agent-rules -->/;\nconst TOP_LEVEL_HEADING = /^# /m;\n\nconst rulesBody = (heading: string): string[] => [\n `${heading} GTKX`,\n \"\",\n \"This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or \" +\n \"GJS, and almost none of it is valid here. Check the rules below against what you are about to write.\",\n \"\",\n \"- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.\",\n '- Signals are props: `onClicked`, not `widget.connect(\"clicked\", ...)`.',\n \"- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.\",\n \"- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.\",\n \"- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from \" +\n \"`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, \" +\n \"so they match the GIR libraries this project declares.\",\n \"\",\n `Read \\`${REFERENCE_PATH}/index.md\\` before writing widget code. It is generated from this project's own ` +\n \"GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from \" +\n \"another toolkit, from a C function name, or from a similar element.\",\n \"\",\n \"| Command | What it does |\",\n \"| --- | --- |\",\n \"| `gtkx dev` | Run the app with fast refresh |\",\n \"| `gtkx codegen` | Regenerate bindings and this reference |\",\n \"| `tsc --noEmit` | Typecheck |\",\n \"| `vitest run` | Run the tests |\",\n \"\",\n \"Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server \" +\n \"exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.\",\n \"\",\n \"This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and \" +\n \"committing the block with your work keeps the tree clean.\",\n];\n\nconst renderBlock = (heading: string): string =>\n [BEGIN_MARKER, \"\", ...rulesBody(heading), \"\", END_MARKER].join(\"\\n\");\n\nconst headingFor = (contents: string): string => (TOP_LEVEL_HEADING.test(contents) ? \"##\" : \"#\");\nconst withTrailingNewline = (contents: string): string => (contents.endsWith(\"\\n\") ? contents : `${contents}\\n`);\n\nconst appendBlock = (contents: string, block: string): string => {\n if (contents.trim() === \"\") {\n return `${block}\\n`;\n }\n\n return `${withTrailingNewline(contents)}\\n${block}\\n`;\n};\n\nconst replaceBlock = (contents: string, block: string): string => {\n const match = BLOCK_PATTERN.exec(contents);\n\n if (match === null) {\n return appendBlock(contents, block);\n }\n\n return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);\n};\n\nconst nextContents = (contents: string): string => {\n const heading = headingFor(contents.replace(BLOCK_PATTERN, \"\"));\n\n return replaceBlock(contents, renderBlock(heading));\n};\n\nconst errorCode = (error: unknown): string | undefined =>\n error instanceof Error ? (error as NodeJS.ErrnoException).code : undefined;\n\nconst readOrUndefined = (path: string): string | undefined => {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst hasWritten = (path: string, contents: string): boolean => {\n if (readOrUndefined(path) === contents) {\n return false;\n }\n\n writeFileSync(path, contents);\n\n return true;\n};\n\nconst hasWrittenClaudeImport = (root: string): boolean => {\n try {\n writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: \"wx\" });\n\n return true;\n } catch (error) {\n if (errorCode(error) === \"EEXIST\") {\n return false;\n }\n\n throw error;\n }\n};\n\nconst upsertAgentRules = (root: string): AgentRulesResult => {\n const agentsPath = join(root, AGENTS_FILENAME);\n const existing = readOrUndefined(agentsPath) ?? \"\";\n const files: string[] = [];\n\n if (hasWritten(agentsPath, nextContents(existing))) {\n files.push(AGENTS_FILENAME);\n }\n\n if (hasWrittenClaudeImport(root)) {\n files.push(CLAUDE_FILENAME);\n }\n\n return { isWritten: files.length > 0, files };\n};\n\nexport { upsertAgentRules };\n"]}
1
+ {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAOzD,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,eAAe,GAAG,IAAI,eAAe,IAAI,CAAC;AAChD,MAAM,YAAY,GAAG,iCAAiC,CAAC;AACvD,MAAM,UAAU,GAAG,+BAA+B,CAAC;AACnD,MAAM,aAAa,GAAG,sEAAsE,CAAC;AAC7F,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAY,EAAE,CAAC;IAC7C,GAAG,OAAO,OAAO;IACjB,EAAE;IACF,4GAA4G;QAC5G,0GAA0G;QAC1G,iBAAiB;IACjB,EAAE;IACF,6GAA6G;QAC7G,0GAA0G;QAC1G,mGAAmG;IACnG,kFAAkF;IAClF,yEAAyE;IACzE,uEAAuE;IACvE,kGAAkG;IAClG,qFAAqF;QACrF,yGAAyG;QACzG,wDAAwD;IACxD,EAAE;IACF,UAAU,cAAc,kFAAkF;QAC1G,yGAAyG;QACzG,qEAAqE;IACrE,EAAE;IACF,4BAA4B;IAC5B,eAAe;IACf,gDAAgD;IAChD,6DAA6D;IAC7D,gEAAgE;IAChE,gCAAgC;IAChC,kCAAkC;IAClC,EAAE;IACF,sGAAsG;QACtG,uGAAuG;IACvG,EAAE;IACF,wGAAwG;QACxG,2DAA2D;CAC9D,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE,CAC5C,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzE,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjG,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;AAEjH,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU,EAAE;IAC5D,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzB,OAAO,GAAG,KAAK,IAAI,CAAC;IACxB,CAAC;IAED,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,KAAa,EAAU,EAAE;IAC7D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClG,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IAEhE,OAAO,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAsB,EAAE,CACrD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAE,KAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAE/E,MAAM,eAAe,GAAG,CAAC,IAAY,EAAsB,EAAE;IACzD,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAW,EAAE;IAC3D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE9B,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAW,EAAE;IACrD,IAAI,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAoB,EAAE;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { REFERENCE_PATH } from \"../codegen/reference.js\";\n\ntype AgentRulesResult = {\n isWritten: boolean;\n files: string[];\n};\n\nconst AGENTS_FILENAME = \"AGENTS.md\";\nconst CLAUDE_FILENAME = \"CLAUDE.md\";\nconst CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\\n`;\nconst BEGIN_MARKER = \"<!-- BEGIN:gtkx-agent-rules -->\";\nconst END_MARKER = \"<!-- END:gtkx-agent-rules -->\";\nconst BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\\s\\S]*?<!-- END:gtkx-agent-rules -->/;\nconst TOP_LEVEL_HEADING = /^# /m;\n\nconst rulesBody = (heading: string): string[] => [\n `${heading} GTKX`,\n \"\",\n \"GTKX applications are Adwaita-first, with GTK4 underneath. Most GNOME UI code in your training data is C, \" +\n \"PyGObject, Vala or GJS, and almost none of it is valid here. Check the rules below against what you are \" +\n \"about to write.\",\n \"\",\n \"- Start application shells with `AdwApplication` and `AdwApplicationWindow`. Freeform windows normally use \" +\n \"`AdwToolbarView` and `AdwHeaderBar`; navigation containers own their Adwaita chrome. Prefer Adwaita for \" +\n \"structure, navigation, dialogs, rows, and adaptive patterns; use GTK4 for lower-level primitives.\",\n \"- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.\",\n '- Signals are props: `onClicked`, not `widget.connect(\"clicked\", ...)`.',\n \"- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.\",\n \"- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.\",\n \"- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from \" +\n \"`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, \" +\n \"so they match the GIR libraries this project declares.\",\n \"\",\n `Read \\`${REFERENCE_PATH}/index.md\\` before writing widget code. It is generated from this project's own ` +\n \"GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from \" +\n \"another toolkit, from a C function name, or from a similar element.\",\n \"\",\n \"| Command | What it does |\",\n \"| --- | --- |\",\n \"| `gtkx dev` | Run the app with fast refresh |\",\n \"| `gtkx codegen` | Regenerate bindings and this reference |\",\n \"| `gtkx cleanup` | Remove stale headless runtime directories |\",\n \"| `tsc --noEmit` | Typecheck |\",\n \"| `vitest run` | Run the tests |\",\n \"\",\n \"Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server \" +\n \"exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.\",\n \"\",\n \"This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and \" +\n \"committing the block with your work keeps the tree clean.\",\n];\n\nconst renderBlock = (heading: string): string =>\n [BEGIN_MARKER, \"\", ...rulesBody(heading), \"\", END_MARKER].join(\"\\n\");\n\nconst headingFor = (contents: string): string => (TOP_LEVEL_HEADING.test(contents) ? \"##\" : \"#\");\nconst withTrailingNewline = (contents: string): string => (contents.endsWith(\"\\n\") ? contents : `${contents}\\n`);\n\nconst appendBlock = (contents: string, block: string): string => {\n if (contents.trim() === \"\") {\n return `${block}\\n`;\n }\n\n return `${withTrailingNewline(contents)}\\n${block}\\n`;\n};\n\nconst replaceBlock = (contents: string, block: string): string => {\n const match = BLOCK_PATTERN.exec(contents);\n\n if (match === null) {\n return appendBlock(contents, block);\n }\n\n return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);\n};\n\nconst nextContents = (contents: string): string => {\n const heading = headingFor(contents.replace(BLOCK_PATTERN, \"\"));\n\n return replaceBlock(contents, renderBlock(heading));\n};\n\nconst errorCode = (error: unknown): string | undefined =>\n error instanceof Error ? (error as NodeJS.ErrnoException).code : undefined;\n\nconst readOrUndefined = (path: string): string | undefined => {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst hasWritten = (path: string, contents: string): boolean => {\n if (readOrUndefined(path) === contents) {\n return false;\n }\n\n writeFileSync(path, contents);\n\n return true;\n};\n\nconst hasWrittenClaudeImport = (root: string): boolean => {\n try {\n writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: \"wx\" });\n\n return true;\n } catch (error) {\n if (errorCode(error) === \"EEXIST\") {\n return false;\n }\n\n throw error;\n }\n};\n\nconst upsertAgentRules = (root: string): AgentRulesResult => {\n const agentsPath = join(root, AGENTS_FILENAME);\n const existing = readOrUndefined(agentsPath) ?? \"\";\n const files: string[] = [];\n\n if (hasWritten(agentsPath, nextContents(existing))) {\n files.push(AGENTS_FILENAME);\n }\n\n if (hasWrittenClaudeImport(root)) {\n files.push(CLAUDE_FILENAME);\n }\n\n return { isWritten: files.length > 0, files };\n};\n\nexport { upsertAgentRules };\n"]}
@@ -1,4 +1,6 @@
1
1
  import type { Rollup } from "vite";
2
- declare const prependBanner: (options: Rollup.OutputOptions, banner: string) => Rollup.OutputOptions;
3
- export { prependBanner };
2
+ type Banner = string | Rollup.AddonFunction;
3
+ declare const prependBanner: (options: Rollup.OutputOptions, banner: Banner) => Rollup.OutputOptions;
4
+ declare const outputRootUrlExpression: (chunk: Rollup.RenderedChunk) => string;
5
+ export { outputRootUrlExpression, prependBanner };
4
6
  //# sourceMappingURL=banner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,aAAa,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,aAQ7E,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAK5C,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,CAAC,aAAa,EAAE,QAAQ,MAAM,KAAG,MAAM,CAAC,aAgB7E,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,OAAO,MAAM,CAAC,aAAa,KAAG,MAK9D,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC"}
@@ -1,9 +1,23 @@
1
+ import { posix } from "node:path";
2
+ const renderBanner = async (banner, chunk) => typeof banner === "function" ? banner(chunk) : banner;
1
3
  const prependBanner = (options, banner) => {
2
4
  const existing = options.banner;
3
- if (typeof existing === "function") {
4
- return { ...options, banner: async (chunk) => `${banner}\n${await existing(chunk)}` };
5
- }
6
- return { ...options, banner: existing ? `${banner}\n${existing}` : banner };
5
+ return {
6
+ ...options,
7
+ banner: async (chunk) => {
8
+ const prefix = await renderBanner(banner, chunk);
9
+ const suffix = existing === undefined ? "" : await renderBanner(existing, chunk);
10
+ if (prefix.length === 0) {
11
+ return suffix;
12
+ }
13
+ return suffix.length === 0 ? prefix : `${prefix}\n${suffix}`;
14
+ },
15
+ };
7
16
  };
8
- export { prependBanner };
17
+ const outputRootUrlExpression = (chunk) => {
18
+ const relativeRoot = posix.relative(posix.dirname(chunk.fileName), ".");
19
+ const specifier = relativeRoot.length === 0 ? "./" : `${relativeRoot}/`;
20
+ return `decodeURIComponent(new URL(${JSON.stringify(specifier)}, import.meta.url).pathname)`;
21
+ };
22
+ export { outputRootUrlExpression, prependBanner };
9
23
  //# sourceMappingURL=banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAwB,EAAE;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAChF,CAAC,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { Rollup } from \"vite\";\n\nconst prependBanner = (options: Rollup.OutputOptions, banner: string): Rollup.OutputOptions => {\n const existing = options.banner;\n\n if (typeof existing === \"function\") {\n return { ...options, banner: async (chunk) => `${banner}\\n${await existing(chunk)}` };\n }\n\n return { ...options, banner: existing ? `${banner}\\n${existing}` : banner };\n};\n\nexport { prependBanner };\n"]}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/internal/banner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIlC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAE,KAA2B,EAAmB,EAAE,CACxF,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAE1D,MAAM,aAAa,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAwB,EAAE;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,OAAO;QACH,GAAG,OAAO;QACV,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;QACjE,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,KAA2B,EAAU,EAAE;IACpE,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC;IAExE,OAAO,8BAA8B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjG,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import type { Rollup } from \"vite\";\nimport { posix } from \"node:path\";\n\ntype Banner = string | Rollup.AddonFunction;\n\nconst renderBanner = async (banner: Banner, chunk: Rollup.RenderedChunk): Promise<string> =>\n typeof banner === \"function\" ? banner(chunk) : banner;\n\nconst prependBanner = (options: Rollup.OutputOptions, banner: Banner): Rollup.OutputOptions => {\n const existing = options.banner;\n\n return {\n ...options,\n banner: async (chunk) => {\n const prefix = await renderBanner(banner, chunk);\n const suffix = existing === undefined ? \"\" : await renderBanner(existing, chunk);\n\n if (prefix.length === 0) {\n return suffix;\n }\n\n return suffix.length === 0 ? prefix : `${prefix}\\n${suffix}`;\n },\n };\n};\n\nconst outputRootUrlExpression = (chunk: Rollup.RenderedChunk): string => {\n const relativeRoot = posix.relative(posix.dirname(chunk.fileName), \".\");\n const specifier = relativeRoot.length === 0 ? \"./\" : `${relativeRoot}/`;\n\n return `decodeURIComponent(new URL(${JSON.stringify(specifier)}, import.meta.url).pathname)`;\n};\n\nexport { outputRootUrlExpression, prependBanner };\n"]}
@@ -0,0 +1,4 @@
1
+ declare const FONTS_DIR = "fonts";
2
+ declare const fontFileName: (sourcePath: string, content: Buffer) => string;
3
+ export { fontFileName, FONTS_DIR };
4
+ //# sourceMappingURL=font-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-path.d.ts","sourceRoot":"","sources":["../../src/internal/font-path.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,SAAS,UAAU,CAAC;AAG1B,QAAA,MAAM,YAAY,GAAI,YAAY,MAAM,EAAE,SAAS,MAAM,KAAG,MAM3D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { createHash } from "node:crypto";
2
+ import { basename, extname } from "node:path";
3
+ const FONTS_DIR = "fonts";
4
+ const DIGEST_LENGTH = 8;
5
+ const fontFileName = (sourcePath, content) => {
6
+ const extension = extname(sourcePath).toLowerCase();
7
+ const stem = basename(sourcePath, extname(sourcePath));
8
+ const digest = createHash("sha1").update(content).digest("hex").slice(0, DIGEST_LENGTH);
9
+ return `${stem}-${digest}${extension}`;
10
+ };
11
+ export { fontFileName, FONTS_DIR };
12
+ //# sourceMappingURL=font-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-path.js","sourceRoot":"","sources":["../../src/internal/font-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,OAAe,EAAU,EAAE;IACjE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAExF,OAAO,GAAG,IAAI,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { basename, extname } from \"node:path\";\n\nconst FONTS_DIR = \"fonts\";\nconst DIGEST_LENGTH = 8;\n\nconst fontFileName = (sourcePath: string, content: Buffer): string => {\n const extension = extname(sourcePath).toLowerCase();\n const stem = basename(sourcePath, extname(sourcePath));\n const digest = createHash(\"sha1\").update(content).digest(\"hex\").slice(0, DIGEST_LENGTH);\n\n return `${stem}-${digest}${extension}`;\n};\n\nexport { fontFileName, FONTS_DIR };\n"]}
@@ -0,0 +1,3 @@
1
+ declare const stageProjectFonts: (root: string) => string | null;
2
+ export { stageProjectFonts };
3
+ //# sourceMappingURL=font-staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-staging.d.ts","sourceRoot":"","sources":["../../src/internal/font-staging.ts"],"names":[],"mappings":"AAmCA,QAAA,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAmBlD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { sortStrings } from "@gtkx/utils";
2
+ import { mkdirSync, mkdtempSync, readFileSync, symlinkSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { parseFontSpecifier } from "../vite-plugins/asset-specifier.js";
6
+ import { fontFileName, FONTS_DIR } from "./font-path.js";
7
+ import { discoverSourceImports, sourceDirFor } from "./source-imports.js";
8
+ import { removeTempDir } from "./staging-dir.js";
9
+ const FONT_STAGING_PREFIX = "gtkx-fonts-";
10
+ const isRelativeImport = (source) => source.startsWith("./") || source.startsWith("../");
11
+ const fontFileFor = ({ importer, source }) => {
12
+ const specifier = parseFontSpecifier(source);
13
+ return specifier === null || !isRelativeImport(source)
14
+ ? null
15
+ : resolve(dirname(importer), specifier.assetSource);
16
+ };
17
+ const findImportedFontFiles = (imports) => {
18
+ const files = imports
19
+ .map((entry) => fontFileFor(entry))
20
+ .filter((path) => path !== null);
21
+ return sortStrings(new Set(files));
22
+ };
23
+ const stageFont = (fontsDir, sourcePath) => {
24
+ const fileName = fontFileName(sourcePath, readFileSync(sourcePath));
25
+ symlinkSync(sourcePath, join(fontsDir, fileName), "file");
26
+ };
27
+ const stageProjectFonts = (root) => {
28
+ const fontFiles = findImportedFontFiles(discoverSourceImports(sourceDirFor(root)));
29
+ if (fontFiles.length === 0) {
30
+ return null;
31
+ }
32
+ const shareDir = mkdtempSync(join(tmpdir(), FONT_STAGING_PREFIX));
33
+ mkdirSync(join(shareDir, FONTS_DIR));
34
+ for (const sourcePath of fontFiles) {
35
+ stageFont(join(shareDir, FONTS_DIR), sourcePath);
36
+ }
37
+ process.once("exit", () => {
38
+ removeTempDir(shareDir);
39
+ });
40
+ return shareDir;
41
+ };
42
+ export { stageProjectFonts };
43
+ //# sourceMappingURL=font-staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-staging.js","sourceRoot":"","sources":["../../src/internal/font-staging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAE1G,MAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAgB,EAAiB,EAAE;IACtE,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAClD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAuB,EAAY,EAAE;IAChE,MAAM,KAAK,GAAG,OAAO;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAErD,OAAO,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAQ,EAAE;IAC7D,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpE,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAiB,EAAE;IACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAClE,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAErC,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport { mkdirSync, mkdtempSync, readFileSync, symlinkSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { parseFontSpecifier } from \"../vite-plugins/asset-specifier.js\";\nimport { fontFileName, FONTS_DIR } from \"./font-path.js\";\nimport { discoverSourceImports, sourceDirFor, type SourceImport } from \"./source-imports.js\";\nimport { removeTempDir } from \"./staging-dir.js\";\n\nconst FONT_STAGING_PREFIX = \"gtkx-fonts-\";\n\nconst isRelativeImport = (source: string): boolean => source.startsWith(\"./\") || source.startsWith(\"../\");\n\nconst fontFileFor = ({ importer, source }: SourceImport): string | null => {\n const specifier = parseFontSpecifier(source);\n\n return specifier === null || !isRelativeImport(source)\n ? null\n : resolve(dirname(importer), specifier.assetSource);\n};\n\nconst findImportedFontFiles = (imports: SourceImport[]): string[] => {\n const files = imports\n .map((entry) => fontFileFor(entry))\n .filter((path): path is string => path !== null);\n\n return sortStrings(new Set(files));\n};\n\nconst stageFont = (fontsDir: string, sourcePath: string): void => {\n const fileName = fontFileName(sourcePath, readFileSync(sourcePath));\n\n symlinkSync(sourcePath, join(fontsDir, fileName), \"file\");\n};\n\nconst stageProjectFonts = (root: string): string | null => {\n const fontFiles = findImportedFontFiles(discoverSourceImports(sourceDirFor(root)));\n\n if (fontFiles.length === 0) {\n return null;\n }\n\n const shareDir = mkdtempSync(join(tmpdir(), FONT_STAGING_PREFIX));\n mkdirSync(join(shareDir, FONTS_DIR));\n\n for (const sourcePath of fontFiles) {\n stageFont(join(shareDir, FONTS_DIR), sourcePath);\n }\n\n process.once(\"exit\", () => {\n removeTempDir(shareDir);\n });\n\n return shareDir;\n};\n\nexport { stageProjectFonts };\n"]}
@@ -5,8 +5,9 @@ type SourceImport = {
5
5
  };
6
6
  type SourceLanguage = NonNullable<ParserOptions["lang"]>;
7
7
  declare const sourceLanguage: (path: string) => SourceLanguage | undefined;
8
+ declare const sourceDirFor: (root: string) => string;
8
9
  declare const discoverSourceFiles: (dir: string) => string[];
9
10
  declare const parseRuntimeImportsIn: (path: string) => SourceImport[] | null;
10
11
  declare const discoverSourceImports: (dir: string) => SourceImport[];
11
- export { discoverSourceFiles, discoverSourceImports, parseRuntimeImportsIn, type SourceImport, sourceLanguage };
12
+ export { discoverSourceFiles, discoverSourceImports, parseRuntimeImportsIn, sourceDirFor, sourceLanguage, type SourceImport, };
12
13
  //# sourceMappingURL=source-imports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-imports.d.ts","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,MAAM,CAAC;AAM/D,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAYzD,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,cAAc,GAAG,SAMvD,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,MAAM,EAW5C,CAAC;AA+EN,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,YAAY,EAAE,GAAG,IACP,CAAC;AAKzD,QAAA,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,YAAY,EAKxD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"source-imports.d.ts","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,MAAM,CAAC;AAM/D,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAYzD,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,cAAc,GAAG,SAMvD,CAAC;AAIF,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAIpC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,MAAM,EAW5C,CAAC;AA+EN,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,YAAY,EAAE,GAAG,IACP,CAAC;AAKzD,QAAA,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,YAAY,EAKxD,CAAC;AAEF,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,KAAK,YAAY,GACpB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { sortStringsBy } from "@gtkx/utils";
2
- import { globSync, readFileSync } from "node:fs";
2
+ import { existsSync, globSync, readFileSync } from "node:fs";
3
3
  import { extname, join } from "node:path";
4
4
  import { parseSync, Visitor } from "vite";
5
5
  const SOURCE_LANGUAGES = new Map([
@@ -16,6 +16,11 @@ const sourceLanguage = (path) => {
16
16
  }
17
17
  return SOURCE_LANGUAGES.get(extname(path).toLowerCase());
18
18
  };
19
+ const SOURCE_DIR = "src";
20
+ const sourceDirFor = (root) => {
21
+ const sourceDir = join(root, SOURCE_DIR);
22
+ return existsSync(sourceDir) ? sourceDir : root;
23
+ };
19
24
  const discoverSourceFiles = (dir) => sortStringsBy(globSync("**/{*,.*}", {
20
25
  cwd: dir,
21
26
  exclude: ["**/{build,coverage,dist,node_modules,out-tsc}/**", "**/.gtkx-output-*/**"],
@@ -87,5 +92,5 @@ const discoverSourceImports = (dir) => {
87
92
  const imports = files.flatMap((path) => importsIn(path));
88
93
  return sortStringsBy(imports, importKey);
89
94
  };
90
- export { discoverSourceFiles, discoverSourceImports, parseRuntimeImportsIn, sourceLanguage };
95
+ export { discoverSourceFiles, discoverSourceImports, parseRuntimeImportsIn, sourceDirFor, sourceLanguage, };
91
96
  //# sourceMappingURL=source-imports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-imports.js","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ESTree, ParseResult, ParserOptions } from \"vite\";\nimport { sortStringsBy } from \"@gtkx/utils\";\nimport { globSync, readFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\n\ntype SourceImport = {\n importer: string;\n source: string;\n};\n\ntype SourceLanguage = NonNullable<ParserOptions[\"lang\"]>;\ntype ParsedModule = ParseResult[\"module\"];\n\nconst SOURCE_LANGUAGES: Map<string, SourceLanguage> = new Map([\n [\".js\", \"jsx\"],\n [\".jsx\", \"jsx\"],\n [\".mjs\", \"jsx\"],\n [\".mts\", \"ts\"],\n [\".ts\", \"ts\"],\n [\".tsx\", \"tsx\"],\n]);\n\nconst sourceLanguage = (path: string): SourceLanguage | undefined => {\n if (path.endsWith(\".d.ts\") || path.endsWith(\".d.mts\")) {\n return undefined;\n }\n\n return SOURCE_LANGUAGES.get(extname(path).toLowerCase());\n};\n\nconst discoverSourceFiles = (dir: string): string[] =>\n sortStringsBy(\n globSync(\"**/{*,.*}\", {\n cwd: dir,\n exclude: [\"**/{build,coverage,dist,node_modules,out-tsc}/**\", \"**/.gtkx-output-*/**\"],\n withFileTypes: true,\n })\n .filter((entry) => entry.isFile())\n .map((entry) => join(entry.parentPath, entry.name))\n .filter((path) => sourceLanguage(path) !== undefined),\n (path) => path,\n );\n\nconst staticImportSources = (module: ParsedModule): string[] => [\n ...module.staticImports.map((statement) => statement.moduleRequest.value),\n ...module.staticExports.flatMap((statement) =>\n statement.entries\n .map((entry) => entry.moduleRequest?.value)\n .filter((source): source is string => source !== undefined),\n ),\n];\n\nconst staticRuntimeImportSources = (module: ParsedModule): string[] => [\n ...module.staticImports\n .filter((statement) => statement.entries.length === 0 || statement.entries.some((entry) => !entry.isType))\n .map((statement) => statement.moduleRequest.value),\n ...module.staticExports.flatMap((statement) =>\n statement.entries\n .filter((entry) => !entry.isType)\n .map((entry) => entry.moduleRequest?.value)\n .filter((source): source is string => source !== undefined),\n ),\n];\n\nconst templateImportSource = (node: ESTree.TemplateLiteral): string | null => {\n const [quasi] = node.quasis;\n\n return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;\n};\n\nconst literalImportSource = (node: ESTree.Expression): string | null => {\n if (node.type === \"TemplateLiteral\") {\n return templateImportSource(node);\n }\n\n return node.type === \"Literal\" && typeof node.value === \"string\" ? node.value : null;\n};\n\nconst collectDynamicImportSources = (program: ESTree.Program, found: string[]): void => {\n new Visitor({\n ImportExpression: (node) => {\n const source = literalImportSource(node.source);\n\n if (source !== null) {\n found.push(source);\n }\n },\n }).visit(program);\n};\n\nconst parseImportsInWith = (\n path: string,\n staticSources: (module: ParsedModule) => string[],\n): SourceImport[] | null => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return [];\n }\n\n let parsed: ParseResult;\n\n try {\n parsed = parseSync(path, readFileSync(path, \"utf8\"), { lang });\n } catch {\n return null;\n }\n\n if (parsed.errors.length > 0) {\n return null;\n }\n\n const sources = staticSources(parsed.module);\n collectDynamicImportSources(parsed.program, sources);\n\n return [...new Set(sources)].map((source) => ({ importer: path, source }));\n};\n\nconst parseImportsIn = (path: string): SourceImport[] | null => parseImportsInWith(path, staticImportSources);\n\nconst parseRuntimeImportsIn = (path: string): SourceImport[] | null =>\n parseImportsInWith(path, staticRuntimeImportSources);\n\nconst importsIn = (path: string): SourceImport[] => parseImportsIn(path) ?? [];\nconst importKey = (entry: SourceImport): string => `${entry.importer}\\0${entry.source}`;\n\nconst discoverSourceImports = (dir: string): SourceImport[] => {\n const files = discoverSourceFiles(dir);\n const imports = files.flatMap((path) => importsIn(path));\n\n return sortStringsBy(imports, importKey);\n};\n\nexport { discoverSourceFiles, discoverSourceImports, parseRuntimeImportsIn, type SourceImport, sourceLanguage };\n"]}
1
+ {"version":3,"file":"source-imports.js","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ESTree, ParseResult, ParserOptions } from \"vite\";\nimport { sortStringsBy } from \"@gtkx/utils\";\nimport { existsSync, globSync, readFileSync } from \"node:fs\";\nimport { extname, join } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\n\ntype SourceImport = {\n importer: string;\n source: string;\n};\n\ntype SourceLanguage = NonNullable<ParserOptions[\"lang\"]>;\ntype ParsedModule = ParseResult[\"module\"];\n\nconst SOURCE_LANGUAGES: Map<string, SourceLanguage> = new Map([\n [\".js\", \"jsx\"],\n [\".jsx\", \"jsx\"],\n [\".mjs\", \"jsx\"],\n [\".mts\", \"ts\"],\n [\".ts\", \"ts\"],\n [\".tsx\", \"tsx\"],\n]);\n\nconst sourceLanguage = (path: string): SourceLanguage | undefined => {\n if (path.endsWith(\".d.ts\") || path.endsWith(\".d.mts\")) {\n return undefined;\n }\n\n return SOURCE_LANGUAGES.get(extname(path).toLowerCase());\n};\n\nconst SOURCE_DIR = \"src\";\n\nconst sourceDirFor = (root: string): string => {\n const sourceDir = join(root, SOURCE_DIR);\n\n return existsSync(sourceDir) ? sourceDir : root;\n};\n\nconst discoverSourceFiles = (dir: string): string[] =>\n sortStringsBy(\n globSync(\"**/{*,.*}\", {\n cwd: dir,\n exclude: [\"**/{build,coverage,dist,node_modules,out-tsc}/**\", \"**/.gtkx-output-*/**\"],\n withFileTypes: true,\n })\n .filter((entry) => entry.isFile())\n .map((entry) => join(entry.parentPath, entry.name))\n .filter((path) => sourceLanguage(path) !== undefined),\n (path) => path,\n );\n\nconst staticImportSources = (module: ParsedModule): string[] => [\n ...module.staticImports.map((statement) => statement.moduleRequest.value),\n ...module.staticExports.flatMap((statement) =>\n statement.entries\n .map((entry) => entry.moduleRequest?.value)\n .filter((source): source is string => source !== undefined),\n ),\n];\n\nconst staticRuntimeImportSources = (module: ParsedModule): string[] => [\n ...module.staticImports\n .filter((statement) => statement.entries.length === 0 || statement.entries.some((entry) => !entry.isType))\n .map((statement) => statement.moduleRequest.value),\n ...module.staticExports.flatMap((statement) =>\n statement.entries\n .filter((entry) => !entry.isType)\n .map((entry) => entry.moduleRequest?.value)\n .filter((source): source is string => source !== undefined),\n ),\n];\n\nconst templateImportSource = (node: ESTree.TemplateLiteral): string | null => {\n const [quasi] = node.quasis;\n\n return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;\n};\n\nconst literalImportSource = (node: ESTree.Expression): string | null => {\n if (node.type === \"TemplateLiteral\") {\n return templateImportSource(node);\n }\n\n return node.type === \"Literal\" && typeof node.value === \"string\" ? node.value : null;\n};\n\nconst collectDynamicImportSources = (program: ESTree.Program, found: string[]): void => {\n new Visitor({\n ImportExpression: (node) => {\n const source = literalImportSource(node.source);\n\n if (source !== null) {\n found.push(source);\n }\n },\n }).visit(program);\n};\n\nconst parseImportsInWith = (\n path: string,\n staticSources: (module: ParsedModule) => string[],\n): SourceImport[] | null => {\n const lang = sourceLanguage(path);\n\n if (lang === undefined) {\n return [];\n }\n\n let parsed: ParseResult;\n\n try {\n parsed = parseSync(path, readFileSync(path, \"utf8\"), { lang });\n } catch {\n return null;\n }\n\n if (parsed.errors.length > 0) {\n return null;\n }\n\n const sources = staticSources(parsed.module);\n collectDynamicImportSources(parsed.program, sources);\n\n return [...new Set(sources)].map((source) => ({ importer: path, source }));\n};\n\nconst parseImportsIn = (path: string): SourceImport[] | null => parseImportsInWith(path, staticImportSources);\n\nconst parseRuntimeImportsIn = (path: string): SourceImport[] | null =>\n parseImportsInWith(path, staticRuntimeImportSources);\n\nconst importsIn = (path: string): SourceImport[] => parseImportsIn(path) ?? [];\nconst importKey = (entry: SourceImport): string => `${entry.importer}\\0${entry.source}`;\n\nconst discoverSourceImports = (dir: string): SourceImport[] => {\n const files = discoverSourceFiles(dir);\n const imports = files.flatMap((path) => importsIn(path));\n\n return sortStringsBy(imports, importKey);\n};\n\nexport {\n discoverSourceFiles,\n discoverSourceImports,\n parseRuntimeImportsIn,\n sourceDirFor,\n sourceLanguage,\n type SourceImport,\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Rollup } from "vite";
2
+ declare const xdgDataDirsBanner: (chunk: Rollup.RenderedChunk) => string;
3
+ export { xdgDataDirsBanner };
4
+ //# sourceMappingURL=xdg-banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xdg-banner.d.ts","sourceRoot":"","sources":["../../src/internal/xdg-banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,QAAA,MAAM,iBAAiB,GAAI,OAAO,MAAM,CAAC,aAAa,KAAG,MAM7C,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { outputRootUrlExpression } from "./banner.js";
2
+ import { XDG_DATA_DIRS_DEFAULT } from "./xdg-data-dirs.js";
3
+ const xdgDataDirsBanner = (chunk) => [
4
+ "globalThis.process.env.XDG_DATA_DIRS = (() => {",
5
+ ` const root = ${outputRootUrlExpression(chunk)};`,
6
+ ` const dirs = globalThis.process.env.XDG_DATA_DIRS || ${JSON.stringify(XDG_DATA_DIRS_DEFAULT)};`,
7
+ " return dirs.split(\":\").includes(root) ? dirs : `${root}:${dirs}`;",
8
+ "})();",
9
+ ].join("\n");
10
+ export { xdgDataDirsBanner };
11
+ //# sourceMappingURL=xdg-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xdg-banner.js","sourceRoot":"","sources":["../../src/internal/xdg-banner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,iBAAiB,GAAG,CAAC,KAA2B,EAAU,EAAE,CAAC;IAC/D,iDAAiD;IACjD,oBAAoB,uBAAuB,CAAC,KAAK,CAAC,GAAG;IACrD,4DAA4D,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG;IACpG,yEAAyE;IACzE,OAAO;CACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { Rollup } from \"vite\";\nimport { outputRootUrlExpression } from \"./banner.js\";\nimport { XDG_DATA_DIRS_DEFAULT } from \"./xdg-data-dirs.js\";\n\nconst xdgDataDirsBanner = (chunk: Rollup.RenderedChunk): string => [\n \"globalThis.process.env.XDG_DATA_DIRS = (() => {\",\n ` const root = ${outputRootUrlExpression(chunk)};`,\n ` const dirs = globalThis.process.env.XDG_DATA_DIRS || ${JSON.stringify(XDG_DATA_DIRS_DEFAULT)};`,\n \" return dirs.split(\\\":\\\").includes(root) ? dirs : `${root}:${dirs}`;\",\n \"})();\",\n].join(\"\\n\");\n\nexport { xdgDataDirsBanner };\n"]}
@@ -1,3 +1,4 @@
1
+ declare const XDG_DATA_DIRS_DEFAULT = "/usr/local/share:/usr/share";
1
2
  declare const prependXdgDataDir: (dir: string, existing: string | undefined) => string;
2
- export { prependXdgDataDir };
3
+ export { prependXdgDataDir, XDG_DATA_DIRS_DEFAULT };
3
4
  //# sourceMappingURL=xdg-data-dirs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xdg-data-dirs.d.ts","sourceRoot":"","sources":["../../src/internal/xdg-data-dirs.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,iBAAiB,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAQtE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"xdg-data-dirs.d.ts","sourceRoot":"","sources":["../../src/internal/xdg-data-dirs.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,gCAAgC,CAAC;AAE5D,QAAA,MAAM,iBAAiB,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAQtE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -6,5 +6,5 @@ const prependXdgDataDir = (dir, existing) => {
6
6
  }
7
7
  return `${dir}:${base}`;
8
8
  };
9
- export { prependXdgDataDir };
9
+ export { prependXdgDataDir, XDG_DATA_DIRS_DEFAULT };
10
10
  //# sourceMappingURL=xdg-data-dirs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xdg-data-dirs.js","sourceRoot":"","sources":["../../src/internal/xdg-data-dirs.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAE5D,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,QAA4B,EAAU,EAAE;IAC5E,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEhG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["const XDG_DATA_DIRS_DEFAULT = \"/usr/local/share:/usr/share\";\n\nconst prependXdgDataDir = (dir: string, existing: string | undefined): string => {\n const base = existing === undefined || existing.length === 0 ? XDG_DATA_DIRS_DEFAULT : existing;\n\n if (base.split(\":\").includes(dir)) {\n return base;\n }\n\n return `${dir}:${base}`;\n};\n\nexport { prependXdgDataDir };\n"]}
1
+ {"version":3,"file":"xdg-data-dirs.js","sourceRoot":"","sources":["../../src/internal/xdg-data-dirs.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAE5D,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,QAA4B,EAAU,EAAE;IAC5E,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEhG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["const XDG_DATA_DIRS_DEFAULT = \"/usr/local/share:/usr/share\";\n\nconst prependXdgDataDir = (dir: string, existing: string | undefined): string => {\n const base = existing === undefined || existing.length === 0 ? XDG_DATA_DIRS_DEFAULT : existing;\n\n if (base.split(\":\").includes(dir)) {\n return base;\n }\n\n return `${dir}:${base}`;\n};\n\nexport { prependXdgDataDir, XDG_DATA_DIRS_DEFAULT };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/settings/schema.ts"],"names":[],"mappings":"AAyBA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,aAAa,iBAAiB,CAAC;AAMrC,QAAA,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAUrE,CAAC;AAKF,QAAA,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,KAAG,IAEpD,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,GAAG,IAY5E,CAAC;AAmGF,QAAA,MAAM,2BAA2B,GAAI,aAAa,MAAM,EAAE,KAAG,IAiB5D,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAsB9D,CAAC;AAmDF,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,eAYxC,CAAC;AAEF,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,aAAa,GAChB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/settings/schema.ts"],"names":[],"mappings":"AAyBA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,aAAa,iBAAiB,CAAC;AAKrC,QAAA,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAUrE,CAAC;AAKF,QAAA,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,KAAG,IAEpD,CAAC;AAEF,QAAA,MAAM,yBAAyB,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,GAAG,IAY5E,CAAC;AA6FF,QAAA,MAAM,2BAA2B,GAAI,aAAa,MAAM,EAAE,KAAG,IAiB5D,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAsB9D,CAAC;AAmDF,QAAA,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,eAYxC,CAAC;AAEF,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,aAAa,GAChB,CAAC"}