@gtkx/cli 1.0.0-rc.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/builder.d.ts +2 -2
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +21 -3
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts.map +1 -1
- package/dist/codegen/freshness.js +2 -4
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +8 -5
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +25 -19
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -1
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +5 -6
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +11 -1
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/deploy.d.ts +22 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +44 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +7 -5
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts +2 -2
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +27 -4
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/depends.d.ts +8 -0
- package/dist/deploy/depends.d.ts.map +1 -0
- package/dist/deploy/depends.js +27 -0
- package/dist/deploy/depends.js.map +1 -0
- package/dist/deploy/download.d.ts +20 -0
- package/dist/deploy/download.d.ts.map +1 -0
- package/dist/deploy/download.js +98 -0
- package/dist/deploy/download.js.map +1 -0
- package/dist/deploy/freedesktop/copyright.d.ts +4 -0
- package/dist/deploy/freedesktop/copyright.d.ts.map +1 -0
- package/dist/deploy/freedesktop/copyright.js +33 -0
- package/dist/deploy/freedesktop/copyright.js.map +1 -0
- package/dist/deploy/freedesktop/dbus-service.d.ts +4 -0
- package/dist/deploy/freedesktop/dbus-service.d.ts.map +1 -0
- package/dist/deploy/freedesktop/dbus-service.js +15 -0
- package/dist/deploy/freedesktop/dbus-service.js.map +1 -0
- package/dist/deploy/freedesktop/desktop-entry.d.ts +4 -0
- package/dist/deploy/freedesktop/desktop-entry.d.ts.map +1 -0
- package/dist/deploy/freedesktop/desktop-entry.js +73 -0
- package/dist/deploy/freedesktop/desktop-entry.js.map +1 -0
- package/dist/deploy/freedesktop/ini.d.ts +7 -0
- package/dist/deploy/freedesktop/ini.d.ts.map +1 -0
- package/dist/deploy/freedesktop/ini.js +22 -0
- package/dist/deploy/freedesktop/ini.js.map +1 -0
- package/dist/deploy/freedesktop/metainfo-sections.d.ts +13 -0
- package/dist/deploy/freedesktop/metainfo-sections.d.ts.map +1 -0
- package/dist/deploy/freedesktop/metainfo-sections.js +73 -0
- package/dist/deploy/freedesktop/metainfo-sections.js.map +1 -0
- package/dist/deploy/freedesktop/metainfo.d.ts +4 -0
- package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -0
- package/dist/deploy/freedesktop/metainfo.js +29 -0
- package/dist/deploy/freedesktop/metainfo.js.map +1 -0
- package/dist/deploy/freedesktop/mime-package.d.ts +4 -0
- package/dist/deploy/freedesktop/mime-package.d.ts.map +1 -0
- package/dist/deploy/freedesktop/mime-package.js +16 -0
- package/dist/deploy/freedesktop/mime-package.js.map +1 -0
- package/dist/deploy/freedesktop/validate.d.ts +4 -0
- package/dist/deploy/freedesktop/validate.d.ts.map +1 -0
- package/dist/deploy/freedesktop/validate.js +81 -0
- package/dist/deploy/freedesktop/validate.js.map +1 -0
- package/dist/deploy/freedesktop/xml.d.ts +11 -0
- package/dist/deploy/freedesktop/xml.d.ts.map +1 -0
- package/dist/deploy/freedesktop/xml.js +33 -0
- package/dist/deploy/freedesktop/xml.js.map +1 -0
- package/dist/deploy/git.d.ts +4 -0
- package/dist/deploy/git.d.ts.map +1 -0
- package/dist/deploy/git.js +17 -0
- package/dist/deploy/git.js.map +1 -0
- package/dist/deploy/install-hints.d.ts +5 -0
- package/dist/deploy/install-hints.d.ts.map +1 -0
- package/dist/deploy/install-hints.js +85 -0
- package/dist/deploy/install-hints.js.map +1 -0
- package/dist/deploy/nfpm/config.d.ts +8 -0
- package/dist/deploy/nfpm/config.d.ts.map +1 -0
- package/dist/deploy/nfpm/config.js +119 -0
- package/dist/deploy/nfpm/config.js.map +1 -0
- package/dist/deploy/nfpm/contents.d.ts +12 -0
- package/dist/deploy/nfpm/contents.d.ts.map +1 -0
- package/dist/deploy/nfpm/contents.js +48 -0
- package/dist/deploy/nfpm/contents.js.map +1 -0
- package/dist/deploy/nfpm/description.d.ts +5 -0
- package/dist/deploy/nfpm/description.d.ts.map +1 -0
- package/dist/deploy/nfpm/description.js +5 -0
- package/dist/deploy/nfpm/description.js.map +1 -0
- package/dist/deploy/nfpm/optional.d.ts +5 -0
- package/dist/deploy/nfpm/optional.d.ts.map +1 -0
- package/dist/deploy/nfpm/optional.js +4 -0
- package/dist/deploy/nfpm/optional.js.map +1 -0
- package/dist/deploy/nfpm/pack.d.ts +5 -0
- package/dist/deploy/nfpm/pack.d.ts.map +1 -0
- package/dist/deploy/nfpm/pack.js +32 -0
- package/dist/deploy/nfpm/pack.js.map +1 -0
- package/dist/deploy/node-runtime/download.d.ts +3 -0
- package/dist/deploy/node-runtime/download.d.ts.map +1 -0
- package/dist/deploy/node-runtime/download.js +39 -0
- package/dist/deploy/node-runtime/download.js.map +1 -0
- package/dist/deploy/node-runtime/elf.d.ts +7 -0
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -0
- package/dist/deploy/node-runtime/elf.js +100 -0
- package/dist/deploy/node-runtime/elf.js.map +1 -0
- package/dist/deploy/node-runtime/guard.d.ts +4 -0
- package/dist/deploy/node-runtime/guard.d.ts.map +1 -0
- package/dist/deploy/node-runtime/guard.js +22 -0
- package/dist/deploy/node-runtime/guard.js.map +1 -0
- package/dist/deploy/node-runtime/index.d.ts +4 -0
- package/dist/deploy/node-runtime/index.d.ts.map +1 -0
- package/dist/deploy/node-runtime/index.js +61 -0
- package/dist/deploy/node-runtime/index.js.map +1 -0
- package/dist/deploy/payload/copy-tree.d.ts +7 -0
- package/dist/deploy/payload/copy-tree.d.ts.map +1 -0
- package/dist/deploy/payload/copy-tree.js +36 -0
- package/dist/deploy/payload/copy-tree.js.map +1 -0
- package/dist/deploy/payload/icons.d.ts +6 -0
- package/dist/deploy/payload/icons.d.ts.map +1 -0
- package/dist/deploy/payload/icons.js +53 -0
- package/dist/deploy/payload/icons.js.map +1 -0
- package/dist/deploy/payload/launcher.d.ts +5 -0
- package/dist/deploy/payload/launcher.d.ts.map +1 -0
- package/dist/deploy/payload/launcher.js +22 -0
- package/dist/deploy/payload/launcher.js.map +1 -0
- package/dist/deploy/payload/schemas.d.ts +4 -0
- package/dist/deploy/payload/schemas.d.ts.map +1 -0
- package/dist/deploy/payload/schemas.js +17 -0
- package/dist/deploy/payload/schemas.js.map +1 -0
- package/dist/deploy/payload/stage.d.ts +15 -0
- package/dist/deploy/payload/stage.d.ts.map +1 -0
- package/dist/deploy/payload/stage.js +100 -0
- package/dist/deploy/payload/stage.js.map +1 -0
- package/dist/deploy/registry.d.ts +7 -0
- package/dist/deploy/registry.d.ts.map +1 -0
- package/dist/deploy/registry.js +30 -0
- package/dist/deploy/registry.js.map +1 -0
- package/dist/deploy/run-deploy.d.ts +11 -0
- package/dist/deploy/run-deploy.d.ts.map +1 -0
- package/dist/deploy/run-deploy.js +153 -0
- package/dist/deploy/run-deploy.js.map +1 -0
- package/dist/deploy/settings/arch.d.ts +4 -0
- package/dist/deploy/settings/arch.d.ts.map +1 -0
- package/dist/deploy/settings/arch.js +13 -0
- package/dist/deploy/settings/arch.js.map +1 -0
- package/dist/deploy/settings/categories.d.ts +4 -0
- package/dist/deploy/settings/categories.d.ts.map +1 -0
- package/dist/deploy/settings/categories.js +29 -0
- package/dist/deploy/settings/categories.js.map +1 -0
- package/dist/deploy/settings/exec.d.ts +6 -0
- package/dist/deploy/settings/exec.d.ts.map +1 -0
- package/dist/deploy/settings/exec.js +20 -0
- package/dist/deploy/settings/exec.js.map +1 -0
- package/dist/deploy/settings/identity.d.ts +18 -0
- package/dist/deploy/settings/identity.d.ts.map +1 -0
- package/dist/deploy/settings/identity.js +73 -0
- package/dist/deploy/settings/identity.js.map +1 -0
- package/dist/deploy/settings/index.d.ts +11 -0
- package/dist/deploy/settings/index.d.ts.map +1 -0
- package/dist/deploy/settings/index.js +103 -0
- package/dist/deploy/settings/index.js.map +1 -0
- package/dist/deploy/settings/package-manifest.d.ts +15 -0
- package/dist/deploy/settings/package-manifest.d.ts.map +1 -0
- package/dist/deploy/settings/package-manifest.js +41 -0
- package/dist/deploy/settings/package-manifest.js.map +1 -0
- package/dist/deploy/settings/paths.d.ts +9 -0
- package/dist/deploy/settings/paths.d.ts.map +1 -0
- package/dist/deploy/settings/paths.js +82 -0
- package/dist/deploy/settings/paths.js.map +1 -0
- package/dist/deploy/settings/screenshots.d.ts +8 -0
- package/dist/deploy/settings/screenshots.d.ts.map +1 -0
- package/dist/deploy/settings/screenshots.js +79 -0
- package/dist/deploy/settings/screenshots.js.map +1 -0
- package/dist/deploy/settings/starter.d.ts +4 -0
- package/dist/deploy/settings/starter.d.ts.map +1 -0
- package/dist/deploy/settings/starter.js +28 -0
- package/dist/deploy/settings/starter.js.map +1 -0
- package/dist/deploy/settings/version.d.ts +9 -0
- package/dist/deploy/settings/version.d.ts.map +1 -0
- package/dist/deploy/settings/version.js +37 -0
- package/dist/deploy/settings/version.js.map +1 -0
- package/dist/deploy/targets/appimage.d.ts +4 -0
- package/dist/deploy/targets/appimage.d.ts.map +1 -0
- package/dist/deploy/targets/appimage.js +105 -0
- package/dist/deploy/targets/appimage.js.map +1 -0
- package/dist/deploy/targets/deb.d.ts +4 -0
- package/dist/deploy/targets/deb.d.ts.map +1 -0
- package/dist/deploy/targets/deb.js +4 -0
- package/dist/deploy/targets/deb.js.map +1 -0
- package/dist/deploy/targets/flatpak-manifest.d.ts +6 -0
- package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -0
- package/dist/deploy/targets/flatpak-manifest.js +48 -0
- package/dist/deploy/targets/flatpak-manifest.js.map +1 -0
- package/dist/deploy/targets/flatpak-prebuilt.d.ts +8 -0
- package/dist/deploy/targets/flatpak-prebuilt.d.ts.map +1 -0
- package/dist/deploy/targets/flatpak-prebuilt.js +43 -0
- package/dist/deploy/targets/flatpak-prebuilt.js.map +1 -0
- package/dist/deploy/targets/flatpak-source.d.ts +5 -0
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -0
- package/dist/deploy/targets/flatpak-source.js +110 -0
- package/dist/deploy/targets/flatpak-source.js.map +1 -0
- package/dist/deploy/targets/flatpak-sources.d.ts +17 -0
- package/dist/deploy/targets/flatpak-sources.d.ts.map +1 -0
- package/dist/deploy/targets/flatpak-sources.js +108 -0
- package/dist/deploy/targets/flatpak-sources.js.map +1 -0
- package/dist/deploy/targets/flatpak.d.ts +4 -0
- package/dist/deploy/targets/flatpak.d.ts.map +1 -0
- package/dist/deploy/targets/flatpak.js +112 -0
- package/dist/deploy/targets/flatpak.js.map +1 -0
- package/dist/deploy/targets/nfpm-target.d.ts +5 -0
- package/dist/deploy/targets/nfpm-target.d.ts.map +1 -0
- package/dist/deploy/targets/nfpm-target.js +26 -0
- package/dist/deploy/targets/nfpm-target.js.map +1 -0
- package/dist/deploy/targets/rpm.d.ts +4 -0
- package/dist/deploy/targets/rpm.d.ts.map +1 -0
- package/dist/deploy/targets/rpm.js +4 -0
- package/dist/deploy/targets/rpm.js.map +1 -0
- package/dist/deploy/tools.d.ts +18 -0
- package/dist/deploy/tools.d.ts.map +1 -0
- package/dist/deploy/tools.js +92 -0
- package/dist/deploy/tools.js.map +1 -0
- package/dist/deploy/types.d.ts +140 -0
- package/dist/deploy/types.d.ts.map +1 -0
- package/dist/deploy/types.js +2 -0
- package/dist/deploy/types.js.map +1 -0
- package/dist/deploy/vendored/appimagetool.d.ts +7 -0
- package/dist/deploy/vendored/appimagetool.d.ts.map +1 -0
- package/dist/deploy/vendored/appimagetool.js +42 -0
- package/dist/deploy/vendored/appimagetool.js.map +1 -0
- package/dist/deploy/vendored/nfpm.d.ts +3 -0
- package/dist/deploy/vendored/nfpm.d.ts.map +1 -0
- package/dist/deploy/vendored/nfpm.js +60 -0
- package/dist/deploy/vendored/nfpm.js.map +1 -0
- package/dist/dev/change-queue.d.ts +11 -0
- package/dist/dev/change-queue.d.ts.map +1 -0
- package/dist/dev/change-queue.js +34 -0
- package/dist/dev/change-queue.js.map +1 -0
- package/dist/dev/entry-env.d.ts +3 -0
- package/dist/dev/entry-env.d.ts.map +1 -0
- package/dist/dev/entry-env.js +3 -0
- package/dist/dev/entry-env.js.map +1 -0
- package/dist/dev/failure-tracker.d.ts +10 -0
- package/dist/dev/failure-tracker.d.ts.map +1 -0
- package/dist/dev/failure-tracker.js +61 -0
- package/dist/dev/failure-tracker.js.map +1 -0
- package/dist/dev/missing-import.d.ts +4 -0
- package/dist/dev/missing-import.d.ts.map +1 -0
- package/dist/dev/missing-import.js +23 -0
- package/dist/dev/missing-import.js.map +1 -0
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +25 -5
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +3 -3
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts +8 -3
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +343 -65
- package/dist/dev/runner.js.map +1 -1
- package/dist/dev/supervisor.d.ts +10 -4
- package/dist/dev/supervisor.d.ts.map +1 -1
- package/dist/dev/supervisor.js +23 -4
- package/dist/dev/supervisor.js.map +1 -1
- package/dist/dev/vite-dev-server.d.ts +13 -2
- package/dist/dev/vite-dev-server.d.ts.map +1 -1
- package/dist/dev/vite-dev-server.js +30 -2
- package/dist/dev/vite-dev-server.js.map +1 -1
- package/dist/internal/application-args.d.ts +6 -0
- package/dist/internal/application-args.d.ts.map +1 -0
- package/dist/internal/application-args.js +10 -0
- package/dist/internal/application-args.js.map +1 -0
- package/dist/internal/entry-arg.d.ts +1 -7
- package/dist/internal/entry-arg.d.ts.map +1 -1
- package/dist/internal/entry-arg.js +18 -11
- package/dist/internal/entry-arg.js.map +1 -1
- package/dist/internal/errors.d.ts +1 -2
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +1 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/module-loads.d.ts +7 -0
- package/dist/internal/module-loads.d.ts.map +1 -0
- package/dist/internal/module-loads.js +21 -0
- package/dist/internal/module-loads.js.map +1 -0
- package/dist/internal/prepare-project.d.ts +16 -0
- package/dist/internal/prepare-project.d.ts.map +1 -0
- package/dist/internal/prepare-project.js +15 -0
- package/dist/internal/prepare-project.js.map +1 -0
- package/dist/internal/run-cli-tool.d.ts +11 -0
- package/dist/internal/run-cli-tool.d.ts.map +1 -0
- package/dist/internal/run-cli-tool.js +24 -0
- package/dist/internal/run-cli-tool.js.map +1 -0
- package/dist/internal/staging-dir.d.ts +8 -1
- package/dist/internal/staging-dir.d.ts.map +1 -1
- package/dist/internal/staging-dir.js +38 -2
- package/dist/internal/staging-dir.js.map +1 -1
- package/dist/mcp/client.d.ts +1 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/handlers.d.ts +1 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +78 -41
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/serialize-widget.d.ts +4 -3
- package/dist/mcp/serialize-widget.d.ts.map +1 -1
- package/dist/mcp/serialize-widget.js +47 -17
- package/dist/mcp/serialize-widget.js.map +1 -1
- package/dist/mcp/testing-loader.d.ts +5 -2
- package/dist/mcp/testing-loader.d.ts.map +1 -1
- package/dist/mcp/testing-loader.js +7 -3
- package/dist/mcp/testing-loader.js.map +1 -1
- package/dist/mcp/widget-properties.d.ts +6 -0
- package/dist/mcp/widget-properties.d.ts.map +1 -0
- package/dist/mcp/widget-properties.js +102 -0
- package/dist/mcp/widget-properties.js.map +1 -0
- package/dist/refresh-runtime.d.ts +2 -1
- package/dist/refresh-runtime.d.ts.map +1 -1
- package/dist/refresh-runtime.js +32 -2
- package/dist/refresh-runtime.js.map +1 -1
- package/dist/settings/compile.d.ts.map +1 -1
- package/dist/settings/compile.js +8 -12
- package/dist/settings/compile.js.map +1 -1
- package/dist/settings/schema.d.ts +1 -2
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +1 -1
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts +9 -0
- package/dist/vite-plugins/asset-emitter.d.ts.map +1 -0
- package/dist/vite-plugins/asset-emitter.js +2 -0
- package/dist/vite-plugins/asset-emitter.js.map +1 -0
- package/dist/vite-plugins/asset-extensions.d.ts +2 -2
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
- package/dist/vite-plugins/asset-extensions.js +2 -1
- package/dist/vite-plugins/asset-extensions.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +4 -0
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -0
- package/dist/vite-plugins/asset-imports.js +88 -0
- package/dist/vite-plugins/asset-imports.js.map +1 -0
- package/dist/vite-plugins/asset-specifier.d.ts +5 -0
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -0
- package/dist/vite-plugins/asset-specifier.js +7 -0
- package/dist/vite-plugins/asset-specifier.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts.map +1 -1
- package/dist/vite-plugins/built-url.js +14 -10
- package/dist/vite-plugins/built-url.js.map +1 -1
- package/dist/vite-plugins/ensure-store.d.ts +4 -0
- package/dist/vite-plugins/ensure-store.d.ts.map +1 -0
- package/dist/vite-plugins/ensure-store.js +10 -0
- package/dist/vite-plugins/ensure-store.js.map +1 -0
- package/dist/vite-plugins/esm-extension.d.ts +4 -0
- package/dist/vite-plugins/esm-extension.d.ts.map +1 -0
- package/dist/vite-plugins/esm-extension.js +4 -0
- package/dist/vite-plugins/esm-extension.js.map +1 -0
- package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts +1 -3
- package/dist/vite-plugins/fast-refresh/swc-refresh.d.ts.map +1 -1
- package/dist/vite-plugins/fast-refresh/swc-refresh.js +1 -1
- package/dist/vite-plugins/fast-refresh/swc-refresh.js.map +1 -1
- package/dist/vite-plugins/icons.d.ts.map +1 -1
- package/dist/vite-plugins/icons.js.map +1 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +4 -0
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/react-compiler.d.ts +1 -1
- package/dist/vite-plugins/react-compiler.d.ts.map +1 -1
- package/dist/vite-plugins/react-compiler.js.map +1 -1
- package/dist/vite-plugins/resource-shared.d.ts +2 -1
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
- package/dist/vite-plugins/resource-shared.js +2 -1
- package/dist/vite-plugins/resource-shared.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +36 -44
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts +4 -0
- package/dist/vite-plugins/self-contained.d.ts.map +1 -0
- package/dist/vite-plugins/self-contained.js +244 -0
- package/dist/vite-plugins/self-contained.js.map +1 -0
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +19 -40
- package/dist/vite-plugins/settings.js.map +1 -1
- package/dist/vite-plugins/store-links.d.ts +4 -0
- package/dist/vite-plugins/store-links.d.ts.map +1 -0
- package/dist/vite-plugins/store-links.js +19 -0
- package/dist/vite-plugins/store-links.js.map +1 -0
- package/dist/vite-plugins/undeclared-library.d.ts +1 -1
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
- package/dist/vite-plugins/undeclared-library.js +51 -12
- package/dist/vite-plugins/undeclared-library.js.map +1 -1
- package/dist/vite-plugins/worker.d.ts +4 -0
- package/dist/vite-plugins/worker.d.ts.map +1 -0
- package/dist/vite-plugins/worker.js +138 -0
- package/dist/vite-plugins/worker.js.map +1 -0
- package/dist/vitest-plugin.d.ts +7 -0
- package/dist/vitest-plugin.d.ts.map +1 -1
- package/dist/vitest-plugin.js +14 -1
- package/dist/vitest-plugin.js.map +1 -1
- package/env.d.ts +106 -25
- package/package.json +23 -12
- package/src/builder.ts +24 -5
- package/src/cli.ts +10 -3
- package/src/codegen/freshness.ts +2 -4
- package/src/codegen/run-codegen.ts +37 -23
- package/src/codegen/store-resolver.ts +1 -1
- package/src/commands/build.ts +5 -6
- package/src/commands/codegen.ts +14 -1
- package/src/commands/deploy.ts +47 -0
- package/src/commands/dev.ts +7 -5
- package/src/commands/docs.ts +39 -4
- package/src/deploy/depends.ts +42 -0
- package/src/deploy/download.ts +148 -0
- package/src/deploy/freedesktop/copyright.ts +41 -0
- package/src/deploy/freedesktop/dbus-service.ts +19 -0
- package/src/deploy/freedesktop/desktop-entry.ts +102 -0
- package/src/deploy/freedesktop/ini.ts +39 -0
- package/src/deploy/freedesktop/metainfo-sections.ts +116 -0
- package/src/deploy/freedesktop/metainfo.ts +46 -0
- package/src/deploy/freedesktop/mime-package.ts +28 -0
- package/src/deploy/freedesktop/validate.ts +124 -0
- package/src/deploy/freedesktop/xml.ts +53 -0
- package/src/deploy/git.ts +20 -0
- package/src/deploy/install-hints.ts +108 -0
- package/src/deploy/nfpm/config.ts +153 -0
- package/src/deploy/nfpm/contents.ts +69 -0
- package/src/deploy/nfpm/description.ts +11 -0
- package/src/deploy/nfpm/optional.ts +8 -0
- package/src/deploy/nfpm/pack.ts +44 -0
- package/src/deploy/node-runtime/download.ts +48 -0
- package/src/deploy/node-runtime/elf.ts +145 -0
- package/src/deploy/node-runtime/guard.ts +29 -0
- package/src/deploy/node-runtime/index.ts +80 -0
- package/src/deploy/payload/copy-tree.ts +51 -0
- package/src/deploy/payload/icons.ts +80 -0
- package/src/deploy/payload/launcher.ts +27 -0
- package/src/deploy/payload/schemas.ts +27 -0
- package/src/deploy/payload/stage.ts +145 -0
- package/src/deploy/registry.ts +40 -0
- package/src/deploy/run-deploy.ts +235 -0
- package/src/deploy/settings/arch.ts +18 -0
- package/src/deploy/settings/categories.ts +39 -0
- package/src/deploy/settings/exec.ts +29 -0
- package/src/deploy/settings/identity.ts +133 -0
- package/src/deploy/settings/index.ts +189 -0
- package/src/deploy/settings/package-manifest.ts +66 -0
- package/src/deploy/settings/paths.ts +115 -0
- package/src/deploy/settings/screenshots.ts +125 -0
- package/src/deploy/settings/starter.ts +41 -0
- package/src/deploy/settings/version.ts +59 -0
- package/src/deploy/targets/appimage.ts +140 -0
- package/src/deploy/targets/deb.ts +6 -0
- package/src/deploy/targets/flatpak-manifest.ts +61 -0
- package/src/deploy/targets/flatpak-prebuilt.ts +59 -0
- package/src/deploy/targets/flatpak-source.ts +168 -0
- package/src/deploy/targets/flatpak-sources.ts +171 -0
- package/src/deploy/targets/flatpak.ts +143 -0
- package/src/deploy/targets/nfpm-target.ts +33 -0
- package/src/deploy/targets/rpm.ts +6 -0
- package/src/deploy/tools.ts +135 -0
- package/src/deploy/types.ts +174 -0
- package/src/deploy/vendored/appimagetool.ts +57 -0
- package/src/deploy/vendored/nfpm.ts +79 -0
- package/src/dev/change-queue.ts +59 -0
- package/src/dev/entry-env.ts +3 -0
- package/src/dev/failure-tracker.ts +92 -0
- package/src/dev/missing-import.ts +32 -0
- package/src/dev/runner-deps.ts +34 -5
- package/src/dev/runner-main.ts +3 -4
- package/src/dev/runner.ts +524 -89
- package/src/dev/supervisor.ts +51 -11
- package/src/dev/vite-dev-server.ts +54 -3
- package/src/internal/application-args.ts +13 -0
- package/src/internal/entry-arg.ts +25 -11
- package/src/internal/errors.ts +1 -1
- package/src/internal/module-loads.ts +32 -0
- package/src/internal/prepare-project.ts +23 -0
- package/src/internal/run-cli-tool.ts +38 -0
- package/src/internal/staging-dir.ts +57 -2
- package/src/mcp/client.ts +1 -1
- package/src/mcp/handlers.ts +123 -56
- package/src/mcp/index.ts +1 -0
- package/src/mcp/serialize-widget.ts +73 -22
- package/src/mcp/testing-loader.ts +19 -4
- package/src/mcp/widget-properties.ts +153 -0
- package/src/refresh-runtime.ts +48 -2
- package/src/settings/compile.ts +8 -11
- package/src/settings/schema.ts +0 -1
- package/src/vite-plugins/asset-emitter.ts +5 -0
- package/src/vite-plugins/asset-extensions.ts +2 -1
- package/src/vite-plugins/asset-imports.ts +134 -0
- package/src/vite-plugins/asset-specifier.ts +9 -0
- package/src/vite-plugins/built-url.ts +19 -13
- package/src/vite-plugins/ensure-store.ts +14 -0
- package/src/vite-plugins/esm-extension.ts +4 -0
- package/src/vite-plugins/fast-refresh/swc-refresh.ts +1 -1
- package/src/vite-plugins/icons.ts +2 -5
- package/src/vite-plugins/index.ts +4 -0
- package/src/vite-plugins/react-compiler.ts +2 -1
- package/src/vite-plugins/resource-shared.ts +2 -0
- package/src/vite-plugins/resources.ts +43 -52
- package/src/vite-plugins/self-contained.ts +352 -0
- package/src/vite-plugins/settings.ts +23 -50
- package/src/vite-plugins/store-links.ts +25 -0
- package/src/vite-plugins/undeclared-library.ts +75 -13
- package/src/vite-plugins/worker.ts +238 -0
- package/src/vitest-plugin.ts +15 -1
- package/dist/internal/resolve-cli-tool.d.ts +0 -3
- package/dist/internal/resolve-cli-tool.d.ts.map +0 -1
- package/dist/internal/resolve-cli-tool.js +0 -27
- package/dist/internal/resolve-cli-tool.js.map +0 -1
- package/src/internal/resolve-cli-tool.ts +0 -37
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
declare const deploy: import("citty").CommandDef<{
|
|
2
|
+
readonly target: {
|
|
3
|
+
readonly type: "string";
|
|
4
|
+
readonly description: `Comma-separated package formats to build (${string})`;
|
|
5
|
+
};
|
|
6
|
+
readonly out: {
|
|
7
|
+
readonly type: "string";
|
|
8
|
+
readonly description: "Output directory relative to the project root (default: build)";
|
|
9
|
+
};
|
|
10
|
+
readonly "print-manifests": {
|
|
11
|
+
readonly type: "boolean";
|
|
12
|
+
readonly description: "Write the generated manifests and metadata, then stop without packaging";
|
|
13
|
+
};
|
|
14
|
+
readonly "skip-build": {
|
|
15
|
+
readonly type: "boolean";
|
|
16
|
+
readonly description: "Package what is already in dist/ instead of rebuilding";
|
|
17
|
+
};
|
|
18
|
+
readonly entry: import("citty").PositionalArgDef;
|
|
19
|
+
readonly cwd: import("citty").StringArgDef;
|
|
20
|
+
}>;
|
|
21
|
+
export { deploy };
|
|
22
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAQA,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;EAoCV,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { KNOWN_NAMES } from "../deploy/registry.js";
|
|
3
|
+
import { runDeploy } from "../deploy/run-deploy.js";
|
|
4
|
+
import { entryArg } from "../internal/entry-arg.js";
|
|
5
|
+
import { resolveProject } from "../internal/prepare-project.js";
|
|
6
|
+
const DEPLOY_MODE = "production";
|
|
7
|
+
const deploy = defineCommand({
|
|
8
|
+
meta: {
|
|
9
|
+
name: "deploy",
|
|
10
|
+
description: "Package the application for distribution",
|
|
11
|
+
},
|
|
12
|
+
args: {
|
|
13
|
+
...entryArg,
|
|
14
|
+
target: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: `Comma-separated package formats to build (${KNOWN_NAMES})`,
|
|
17
|
+
},
|
|
18
|
+
out: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "Output directory relative to the project root (default: build)",
|
|
21
|
+
},
|
|
22
|
+
"print-manifests": {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
description: "Write the generated manifests and metadata, then stop without packaging",
|
|
25
|
+
},
|
|
26
|
+
"skip-build": {
|
|
27
|
+
type: "boolean",
|
|
28
|
+
description: "Package what is already in dist/ instead of rebuilding",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
async run({ args }) {
|
|
32
|
+
const { cwd, entry } = await resolveProject(args, DEPLOY_MODE);
|
|
33
|
+
await runDeploy({
|
|
34
|
+
entry,
|
|
35
|
+
cwd,
|
|
36
|
+
targets: args.target,
|
|
37
|
+
outDir: args.out,
|
|
38
|
+
shouldPrintManifests: args["print-manifests"] === true,
|
|
39
|
+
shouldSkipBuild: args["skip-build"] === true,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
export { deploy };
|
|
44
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,MAAM,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACF,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;KAC1D;IACD,IAAI,EAAE;QACF,GAAG,QAAQ;QACX,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6CAA6C,WAAW,GAAG;SAC3E;QACD,GAAG,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gEAAgE;SAChF;QACD,iBAAiB,EAAE;YACf,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yEAAyE;SACzF;QACD,YAAY,EAAE;YACV,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,wDAAwD;SACxE;KACJ;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,SAAS,CAAC;YACZ,KAAK;YACL,GAAG;YACH,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI;YACtD,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI;SAC/C,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC","sourcesContent":["import { defineCommand } from \"citty\";\nimport { KNOWN_NAMES } from \"../deploy/registry.js\";\nimport { runDeploy } from \"../deploy/run-deploy.js\";\nimport { entryArg } from \"../internal/entry-arg.js\";\nimport { resolveProject } from \"../internal/prepare-project.js\";\n\nconst DEPLOY_MODE = \"production\";\n\nconst deploy = defineCommand({\n meta: {\n name: \"deploy\",\n description: \"Package the application for distribution\",\n },\n args: {\n ...entryArg,\n target: {\n type: \"string\",\n description: `Comma-separated package formats to build (${KNOWN_NAMES})`,\n },\n out: {\n type: \"string\",\n description: \"Output directory relative to the project root (default: build)\",\n },\n \"print-manifests\": {\n type: \"boolean\",\n description: \"Write the generated manifests and metadata, then stop without packaging\",\n },\n \"skip-build\": {\n type: \"boolean\",\n description: \"Package what is already in dist/ instead of rebuilding\",\n },\n },\n async run({ args }) {\n const { cwd, entry } = await resolveProject(args, DEPLOY_MODE);\n\n await runDeploy({\n entry,\n cwd,\n targets: args.target,\n outDir: args.out,\n shouldPrintManifests: args[\"print-manifests\"] === true,\n shouldSkipBuild: args[\"skip-build\"] === true,\n });\n },\n});\n\nexport { deploy };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,GAAG;;;EAcP,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { defineCommand } from "citty";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveConfigWatch } from "../codegen/run-codegen.js";
|
|
3
3
|
import { runDevSupervisor } from "../dev/supervisor.js";
|
|
4
|
-
import {
|
|
4
|
+
import { splitApplicationArgs } from "../internal/application-args.js";
|
|
5
|
+
import { entryArg } from "../internal/entry-arg.js";
|
|
6
|
+
import { prepareProject } from "../internal/prepare-project.js";
|
|
5
7
|
const DEV_MODE = "development";
|
|
6
8
|
const dev = defineCommand({
|
|
7
9
|
meta: {
|
|
@@ -12,10 +14,10 @@ const dev = defineCommand({
|
|
|
12
14
|
...entryArg,
|
|
13
15
|
},
|
|
14
16
|
async run({ args }) {
|
|
15
|
-
const { cwd, entry: entryPath } =
|
|
16
|
-
await ensureGenerated(cwd, { shouldAnnounce: true, mode: DEV_MODE });
|
|
17
|
+
const { cwd, entry: entryPath } = await prepareProject(args, DEV_MODE);
|
|
17
18
|
const watch = await resolveConfigWatch(cwd, DEV_MODE);
|
|
18
|
-
|
|
19
|
+
const { applicationArgs } = splitApplicationArgs(process.argv.slice(2));
|
|
20
|
+
await runDevSupervisor({ entryPath, cwd, args: applicationArgs, watch });
|
|
19
21
|
},
|
|
20
22
|
});
|
|
21
23
|
export { dev };
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAiB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,QAAQ,GAAG,aAAa,CAAC;AAE/B,MAAM,GAAG,GAAG,aAAa,CAAC;IACtB,IAAI,EAAE;QACF,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,mCAAmC;KACnD;IACD,IAAI,EAAE;QACF,GAAG,QAAQ;KACd;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QACd,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,KAAK,GAAyB,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5E,MAAM,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;CACJ,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC","sourcesContent":["import { defineCommand } from \"citty\";\nimport { resolveConfigWatch } from \"../codegen/run-codegen.js\";\nimport { type DevWatch, runDevSupervisor } from \"../dev/supervisor.js\";\nimport { splitApplicationArgs } from \"../internal/application-args.js\";\nimport { entryArg } from \"../internal/entry-arg.js\";\nimport { prepareProject } from \"../internal/prepare-project.js\";\n\nconst DEV_MODE = \"development\";\n\nconst dev = defineCommand({\n meta: {\n name: \"dev\",\n description: \"Start development server with HMR\",\n },\n args: {\n ...entryArg,\n },\n async run({ args }) {\n const { cwd, entry: entryPath } = await prepareProject(args, DEV_MODE);\n const watch: DevWatch | undefined = await resolveConfigWatch(cwd, DEV_MODE);\n const { applicationArgs } = splitApplicationArgs(process.argv.slice(2));\n await runDevSupervisor({ entryPath, cwd, args: applicationArgs, watch });\n },\n});\n\nexport { dev };\n"]}
|
package/dist/commands/docs.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ declare const docs: import("citty").CommandDef<{
|
|
|
2
2
|
readonly cwd: import("citty").StringArgDef;
|
|
3
3
|
readonly out: {
|
|
4
4
|
readonly type: "string";
|
|
5
|
-
readonly description:
|
|
5
|
+
readonly description: string;
|
|
6
6
|
readonly default: "docs/reference";
|
|
7
7
|
};
|
|
8
8
|
readonly "base-path": {
|
|
@@ -12,7 +12,7 @@ declare const docs: import("citty").CommandDef<{
|
|
|
12
12
|
};
|
|
13
13
|
readonly force: {
|
|
14
14
|
readonly type: "boolean";
|
|
15
|
-
readonly description:
|
|
15
|
+
readonly description: string;
|
|
16
16
|
readonly default: false;
|
|
17
17
|
};
|
|
18
18
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA6ER,CAAC;AA6CH,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
package/dist/commands/docs.js
CHANGED
|
@@ -5,7 +5,7 @@ import { resolveOmittedProps } from "@gtkx/config/internal";
|
|
|
5
5
|
import { info } from "@gtkx/utils";
|
|
6
6
|
import { defineCommand } from "citty";
|
|
7
7
|
import { existsSync } from "node:fs";
|
|
8
|
-
import { resolve } from "node:path";
|
|
8
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
9
9
|
import { cwdArg, resolveCwd } from "../internal/entry-arg.js";
|
|
10
10
|
const docs = defineCommand({
|
|
11
11
|
meta: {
|
|
@@ -15,7 +15,8 @@ const docs = defineCommand({
|
|
|
15
15
|
args: {
|
|
16
16
|
out: {
|
|
17
17
|
type: "string",
|
|
18
|
-
description: "Output directory for the generated markdown pages,
|
|
18
|
+
description: "Output directory for the generated markdown pages, below the project root. It must be empty " +
|
|
19
|
+
"or hold an earlier `gtkx docs` run, whose pages are replaced",
|
|
19
20
|
default: "docs/reference",
|
|
20
21
|
},
|
|
21
22
|
"base-path": {
|
|
@@ -25,7 +26,8 @@ const docs = defineCommand({
|
|
|
25
26
|
},
|
|
26
27
|
force: {
|
|
27
28
|
type: "boolean",
|
|
28
|
-
description: "Regenerate even when the pages are up to date with the GIR libraries"
|
|
29
|
+
description: "Regenerate even when the pages are up to date with the GIR libraries, the base path, " +
|
|
30
|
+
"and the element props the project configures",
|
|
29
31
|
default: false,
|
|
30
32
|
},
|
|
31
33
|
...cwdArg,
|
|
@@ -45,7 +47,7 @@ const docs = defineCommand({
|
|
|
45
47
|
}
|
|
46
48
|
const libraries = resolveLibraries(config.libraries, girPath);
|
|
47
49
|
const startedAt = Date.now();
|
|
48
|
-
const outDir =
|
|
50
|
+
const outDir = resolveOutDir(cwd, args.out);
|
|
49
51
|
const builtin = await resolveDocsElements(cwd);
|
|
50
52
|
const { isRegenerated, namespaces } = writeDocs({
|
|
51
53
|
libraries,
|
|
@@ -65,6 +67,27 @@ const docs = defineCommand({
|
|
|
65
67
|
`to ${outDir} in ${String(Date.now() - startedAt)}ms`);
|
|
66
68
|
},
|
|
67
69
|
});
|
|
70
|
+
const isBelow = (parent, child) => {
|
|
71
|
+
const path = relative(parent, child);
|
|
72
|
+
return path !== "" && path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path);
|
|
73
|
+
};
|
|
74
|
+
const outDirReason = (cwd, out, outDir) => {
|
|
75
|
+
if (out.trim() === "") {
|
|
76
|
+
return "it was empty, which names the project root itself";
|
|
77
|
+
}
|
|
78
|
+
if (outDir === cwd) {
|
|
79
|
+
return "it names the project root itself";
|
|
80
|
+
}
|
|
81
|
+
return `${outDir} is outside it`;
|
|
82
|
+
};
|
|
83
|
+
const resolveOutDir = (cwd, out) => {
|
|
84
|
+
const outDir = out.trim() === "" ? cwd : resolve(cwd, out);
|
|
85
|
+
if (isBelow(cwd, outDir)) {
|
|
86
|
+
return outDir;
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +
|
|
89
|
+
"Pass a path such as --out=docs/reference.");
|
|
90
|
+
};
|
|
68
91
|
const resolveDocsElements = async (cwd) => {
|
|
69
92
|
const { gi, reactSubexports } = resolveStore(cwd);
|
|
70
93
|
if (!existsSync(gi.storeDir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,iBAAiB,EAEjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,YAAY,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ElementProps,\n mergeOmittedProps,\n type OmittedProps,\n readBuiltinElements,\n resolveGirPath,\n resolveLibraries,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { writeDocs } from \"@gtkx/codegen/internal\";\nimport { loadConfig } from \"@gtkx/config\";\nimport { resolveOmittedProps } from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\n\nconst docs = defineCommand({\n meta: {\n name: \"docs\",\n description:\n \"Generate markdown reference pages for the JSX elements of the GIR libraries declared in gtkx.config.ts\",\n },\n args: {\n out: {\n type: \"string\",\n description:\n \"Output directory for the generated markdown pages, below the project root. It must be empty \" +\n \"or hold an earlier `gtkx docs` run, whose pages are replaced\",\n default: \"docs/reference\",\n },\n \"base-path\": {\n type: \"string\",\n description: \"URL base path used for links between generated pages\",\n default: \"/reference\",\n },\n force: {\n type: \"boolean\",\n description:\n \"Regenerate even when the pages are up to date with the GIR libraries, the base path, \" +\n \"and the element props the project configures\",\n default: false,\n },\n ...cwdArg,\n },\n async run({ args }) {\n const cwd = resolveCwd(args);\n const { config } = await loadConfig(cwd);\n\n if (config.codegen === false) {\n throw new Error(\n \"codegen is disabled for this project, so there are no GIR libraries to document. \" +\n \"Remove `codegen: false` from gtkx.config.ts to use `gtkx docs`.\",\n );\n }\n\n const girPath = resolveGirPath(config.girPath);\n\n if (girPath.length === 0) {\n throw new Error(\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or \" +\n \"`sudo apt install libgirepository1.0-dev`), or set `girPath` in gtkx.config.ts.\",\n );\n }\n\n const libraries = resolveLibraries(config.libraries, girPath);\n const startedAt = Date.now();\n const outDir = resolveOutDir(cwd, args.out);\n const builtin = await resolveDocsElements(cwd);\n\n const { isRegenerated, namespaces } = writeDocs({\n libraries,\n girPath,\n outDir,\n basePath: args[\"base-path\"],\n props: builtin.props,\n omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),\n isForced: args.force,\n });\n\n if (!isRegenerated) {\n info(`docs: pages in ${outDir} are up to date`);\n\n return;\n }\n\n const count = namespaces.reduce((total, namespace) => total + namespace.elements.length, 0);\n\n info(\n `docs: wrote ${String(count)} element pages across ${String(namespaces.length)} namespaces ` +\n `to ${outDir} in ${String(Date.now() - startedAt)}ms`,\n );\n },\n});\n\nconst isBelow = (parent: string, child: string): boolean => {\n const path = relative(parent, child);\n\n return path !== \"\" && path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path);\n};\n\nconst outDirReason = (cwd: string, out: string, outDir: string): string => {\n if (out.trim() === \"\") {\n return \"it was empty, which names the project root itself\";\n }\n\n if (outDir === cwd) {\n return \"it names the project root itself\";\n }\n\n return `${outDir} is outside it`;\n};\n\nconst resolveOutDir = (cwd: string, out: string): string => {\n const outDir = out.trim() === \"\" ? cwd : resolve(cwd, out);\n\n if (isBelow(cwd, outDir)) {\n return outDir;\n }\n\n throw new Error(\n `--out must name a directory below the project root ${cwd}, and ${outDirReason(cwd, out, outDir)}. ` +\n \"Pass a path such as --out=docs/reference.\",\n );\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<{ props: ElementProps; omittedProps: OmittedProps }> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { docs };\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DeployConfig } from "./types.js";
|
|
2
|
+
type Relations = {
|
|
3
|
+
deb: string[];
|
|
4
|
+
rpm: string[];
|
|
5
|
+
};
|
|
6
|
+
declare const resolveDepends: (deploy: DeployConfig, libraries: string[], glibcFloor: string | null) => Relations;
|
|
7
|
+
export { resolveDepends };
|
|
8
|
+
//# sourceMappingURL=depends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depends.d.ts","sourceRoot":"","sources":["../../src/deploy/depends.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,SAAS,GAAG;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AA0BF,QAAA,MAAM,cAAc,GAAI,QAAQ,YAAY,EAAE,WAAW,MAAM,EAAE,EAAE,YAAY,MAAM,GAAG,IAAI,KAAG,SAQ9F,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const GLES_SONAME = "libGLESv2.so.2()(64bit)";
|
|
2
|
+
const BASE_DEPENDS = {
|
|
3
|
+
deb: ["hicolor-icon-theme", "adwaita-icon-theme", "gsettings-desktop-schemas"],
|
|
4
|
+
rpm: ["hicolor-icon-theme", "adwaita-icon-theme", "gsettings-desktop-schemas"],
|
|
5
|
+
};
|
|
6
|
+
const DEPENDS_BY_LIBRARY = {
|
|
7
|
+
"Adw-1": { deb: ["libadwaita-1-0"], rpm: ["libadwaita"] },
|
|
8
|
+
"Gtk-4.0": { deb: ["libgtk-4-1"], rpm: ["gtk4", GLES_SONAME] },
|
|
9
|
+
"GtkSource-5": { deb: ["libgtksourceview-5-0"], rpm: ["gtksourceview5"] },
|
|
10
|
+
"WebKit-6.0": { deb: ["libwebkitgtk-6.0-4"], rpm: ["webkitgtk6.0"] },
|
|
11
|
+
};
|
|
12
|
+
const libraryDepends = (libraries) => ({
|
|
13
|
+
deb: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.deb ?? []),
|
|
14
|
+
rpm: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.rpm ?? []),
|
|
15
|
+
});
|
|
16
|
+
const glibcDepends = (glibcFloor) => glibcFloor === null ? { deb: [], rpm: [] } : { deb: [`libc6 (>= ${glibcFloor})`], rpm: [`glibc >= ${glibcFloor}`] };
|
|
17
|
+
const dedupe = (entries) => [...new Set(entries)];
|
|
18
|
+
const resolveDepends = (deploy, libraries, glibcFloor) => {
|
|
19
|
+
const fromLibraries = libraryDepends(libraries);
|
|
20
|
+
const fromGlibc = glibcDepends(glibcFloor);
|
|
21
|
+
return {
|
|
22
|
+
deb: dedupe([...fromLibraries.deb, ...BASE_DEPENDS.deb, ...fromGlibc.deb, ...(deploy.depends?.deb ?? [])]),
|
|
23
|
+
rpm: dedupe([...fromLibraries.rpm, ...BASE_DEPENDS.rpm, ...fromGlibc.rpm, ...(deploy.depends?.rpm ?? [])]),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export { resolveDepends };
|
|
27
|
+
//# sourceMappingURL=depends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depends.js","sourceRoot":"","sources":["../../src/deploy/depends.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAE9C,MAAM,YAAY,GAAc;IAC5B,GAAG,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,2BAA2B,CAAC;IAC9E,GAAG,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,2BAA2B,CAAC;CACjF,CAAC;AAEF,MAAM,kBAAkB,GAA8B;IAClD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE;IACzD,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IAC9D,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE;IACzE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE;CACvE,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,SAAmB,EAAa,EAAE,CAAC,CAAC;IACxD,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;IAC3E,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,UAAyB,EAAa,EAAE,CAC1D,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,aAAa,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,UAAU,EAAE,CAAC,EAAE,CAAC;AAExH,MAAM,MAAM,GAAG,CAAC,OAAiB,EAAY,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtE,MAAM,cAAc,GAAG,CAAC,MAAoB,EAAE,SAAmB,EAAE,UAAyB,EAAa,EAAE;IACvG,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE3C,OAAO;QACH,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1G,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7G,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import type { DeployConfig } from \"./types.js\";\n\ntype Relations = {\n deb: string[];\n rpm: string[];\n};\n\nconst GLES_SONAME = \"libGLESv2.so.2()(64bit)\";\n\nconst BASE_DEPENDS: Relations = {\n deb: [\"hicolor-icon-theme\", \"adwaita-icon-theme\", \"gsettings-desktop-schemas\"],\n rpm: [\"hicolor-icon-theme\", \"adwaita-icon-theme\", \"gsettings-desktop-schemas\"],\n};\n\nconst DEPENDS_BY_LIBRARY: Record<string, Relations> = {\n \"Adw-1\": { deb: [\"libadwaita-1-0\"], rpm: [\"libadwaita\"] },\n \"Gtk-4.0\": { deb: [\"libgtk-4-1\"], rpm: [\"gtk4\", GLES_SONAME] },\n \"GtkSource-5\": { deb: [\"libgtksourceview-5-0\"], rpm: [\"gtksourceview5\"] },\n \"WebKit-6.0\": { deb: [\"libwebkitgtk-6.0-4\"], rpm: [\"webkitgtk6.0\"] },\n};\n\nconst libraryDepends = (libraries: string[]): Relations => ({\n deb: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.deb ?? []),\n rpm: libraries.flatMap((library) => DEPENDS_BY_LIBRARY[library]?.rpm ?? []),\n});\n\nconst glibcDepends = (glibcFloor: string | null): Relations =>\n glibcFloor === null ? { deb: [], rpm: [] } : { deb: [`libc6 (>= ${glibcFloor})`], rpm: [`glibc >= ${glibcFloor}`] };\n\nconst dedupe = (entries: string[]): string[] => [...new Set(entries)];\n\nconst resolveDepends = (deploy: DeployConfig, libraries: string[], glibcFloor: string | null): Relations => {\n const fromLibraries = libraryDepends(libraries);\n const fromGlibc = glibcDepends(glibcFloor);\n\n return {\n deb: dedupe([...fromLibraries.deb, ...BASE_DEPENDS.deb, ...fromGlibc.deb, ...(deploy.depends?.deb ?? [])]),\n rpm: dedupe([...fromLibraries.rpm, ...BASE_DEPENDS.rpm, ...fromGlibc.rpm, ...(deploy.depends?.rpm ?? [])]),\n };\n};\n\nexport { resolveDepends };\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type DigestRequest = {
|
|
2
|
+
url: string;
|
|
3
|
+
dest: string;
|
|
4
|
+
assetName: string;
|
|
5
|
+
subject: string;
|
|
6
|
+
};
|
|
7
|
+
type DownloadRequest = {
|
|
8
|
+
url: string;
|
|
9
|
+
dest: string;
|
|
10
|
+
label: string;
|
|
11
|
+
sha256: string;
|
|
12
|
+
freshSha256?: (() => Promise<string>) | undefined;
|
|
13
|
+
mode?: number | undefined;
|
|
14
|
+
};
|
|
15
|
+
declare const cacheDir: (segments: string[]) => string;
|
|
16
|
+
declare const publishedDigest: (request: DigestRequest) => Promise<string>;
|
|
17
|
+
declare const cachedDigest: (request: DigestRequest) => Promise<string>;
|
|
18
|
+
declare const downloadFile: (request: DownloadRequest) => Promise<string>;
|
|
19
|
+
export { cacheDir, cachedDigest, type DigestRequest, downloadFile, publishedDigest };
|
|
20
|
+
//# sourceMappingURL=download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/deploy/download.ts"],"names":[],"mappings":"AAMA,KAAK,aAAa,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAWF,QAAA,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,KAAG,MAKtC,CAAC;AA4CF,QAAA,MAAM,eAAe,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,MAAM,CAWrE,CAAC;AAEF,QAAA,MAAM,YAAY,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,MAAM,CAIlE,CAAC;AAgBF,QAAA,MAAM,YAAY,GAAU,SAAS,eAAe,KAAG,OAAO,CAAC,MAAM,CAqBpE,CAAC;AAaF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { info, warn } from "@gtkx/utils";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
const CACHE_NAMESPACE = "gtkx";
|
|
7
|
+
const DIGEST_PATTERN = /^[\da-f]{64}$/;
|
|
8
|
+
const cacheRoot = () => {
|
|
9
|
+
const base = process.env.XDG_CACHE_HOME;
|
|
10
|
+
return join(base !== undefined && base.length > 0 ? base : join(homedir(), ".cache"), CACHE_NAMESPACE);
|
|
11
|
+
};
|
|
12
|
+
const cacheDir = (segments) => {
|
|
13
|
+
const dir = join(cacheRoot(), ...segments);
|
|
14
|
+
mkdirSync(dir, { recursive: true });
|
|
15
|
+
return dir;
|
|
16
|
+
};
|
|
17
|
+
const getDigest = (contents) => createHash("sha256").update(contents).digest("hex");
|
|
18
|
+
const assertDigest = (url, contents, expected) => {
|
|
19
|
+
const actual = getDigest(contents);
|
|
20
|
+
if (actual !== expected) {
|
|
21
|
+
throw new Error(`Checksum mismatch for ${url}\n expected ${expected}\n received ${actual}`);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const fetchBytes = async (url) => {
|
|
25
|
+
const response = await fetch(url);
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
throw new Error(`Cannot download ${url}: HTTP ${String(response.status)} ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
return Buffer.from(await response.arrayBuffer());
|
|
30
|
+
};
|
|
31
|
+
const fetchText = async (url) => {
|
|
32
|
+
const bytes = await fetchBytes(url);
|
|
33
|
+
return bytes.toString("utf8");
|
|
34
|
+
};
|
|
35
|
+
const readCachedDigest = (dest) => {
|
|
36
|
+
try {
|
|
37
|
+
const cached = readFileSync(dest, "utf8").trim();
|
|
38
|
+
return DIGEST_PATTERN.test(cached) ? cached : undefined;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const writeAtomically = (dest, contents) => {
|
|
45
|
+
const staging = `${dest}.partial`;
|
|
46
|
+
writeFileSync(staging, contents);
|
|
47
|
+
renameSync(staging, dest);
|
|
48
|
+
};
|
|
49
|
+
const publishedDigest = async (request) => {
|
|
50
|
+
const checksums = await fetchText(request.url);
|
|
51
|
+
const digest = digestFromChecksums(checksums, request.assetName, request.subject);
|
|
52
|
+
if (!DIGEST_PATTERN.test(digest)) {
|
|
53
|
+
throw new Error(`${request.subject} published a malformed checksum for ${request.assetName}: "${digest}"`);
|
|
54
|
+
}
|
|
55
|
+
writeAtomically(request.dest, digest);
|
|
56
|
+
return digest;
|
|
57
|
+
};
|
|
58
|
+
const cachedDigest = async (request) => {
|
|
59
|
+
const cached = readCachedDigest(request.dest);
|
|
60
|
+
return cached ?? publishedDigest(request);
|
|
61
|
+
};
|
|
62
|
+
const isCacheUsable = (dest, sha256) => {
|
|
63
|
+
if (!existsSync(dest)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (getDigest(readFileSync(dest)) === sha256) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
warn(`Discarding the cached ${dest}: its checksum no longer matches`);
|
|
70
|
+
return false;
|
|
71
|
+
};
|
|
72
|
+
const downloadFile = async (request) => {
|
|
73
|
+
const { url, dest, label, sha256, mode } = request;
|
|
74
|
+
if (isCacheUsable(dest, sha256)) {
|
|
75
|
+
return dest;
|
|
76
|
+
}
|
|
77
|
+
info(`Downloading ${label}`);
|
|
78
|
+
const expected = request.freshSha256 === undefined ? sha256 : await request.freshSha256();
|
|
79
|
+
const contents = await fetchBytes(url);
|
|
80
|
+
assertDigest(url, contents, expected);
|
|
81
|
+
const staging = `${dest}.partial`;
|
|
82
|
+
writeFileSync(staging, contents);
|
|
83
|
+
if (mode !== undefined) {
|
|
84
|
+
chmodSync(staging, mode);
|
|
85
|
+
}
|
|
86
|
+
renameSync(staging, dest);
|
|
87
|
+
return dest;
|
|
88
|
+
};
|
|
89
|
+
const digestFromChecksums = (checksums, assetName, subject) => {
|
|
90
|
+
const line = checksums.split("\n").find((entry) => entry.trim().endsWith(` ${assetName}`));
|
|
91
|
+
const digest = line?.trim().split(/\s+/, 1)[0];
|
|
92
|
+
if (digest === undefined) {
|
|
93
|
+
throw new Error(`${subject} publishes no checksum for ${assetName}`);
|
|
94
|
+
}
|
|
95
|
+
return digest;
|
|
96
|
+
};
|
|
97
|
+
export { cacheDir, cachedDigest, downloadFile, publishedDigest };
|
|
98
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/deploy/download.ts"],"names":[],"mappings":"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","sourcesContent":["import { info, warn } from \"@gtkx/utils\";\nimport { createHash } from \"node:crypto\";\nimport { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\ntype DigestRequest = {\n url: string;\n dest: string;\n assetName: string;\n subject: string;\n};\n\ntype DownloadRequest = {\n url: string;\n dest: string;\n label: string;\n sha256: string;\n freshSha256?: (() => Promise<string>) | undefined;\n mode?: number | undefined;\n};\n\nconst CACHE_NAMESPACE = \"gtkx\";\nconst DIGEST_PATTERN = /^[\\da-f]{64}$/;\n\nconst cacheRoot = (): string => {\n const base = process.env.XDG_CACHE_HOME;\n\n return join(base !== undefined && base.length > 0 ? base : join(homedir(), \".cache\"), CACHE_NAMESPACE);\n};\n\nconst cacheDir = (segments: string[]): string => {\n const dir = join(cacheRoot(), ...segments);\n mkdirSync(dir, { recursive: true });\n\n return dir;\n};\n\nconst getDigest = (contents: Buffer): string => createHash(\"sha256\").update(contents).digest(\"hex\");\n\nconst assertDigest = (url: string, contents: Buffer, expected: string): void => {\n const actual = getDigest(contents);\n\n if (actual !== expected) {\n throw new Error(`Checksum mismatch for ${url}\\n expected ${expected}\\n received ${actual}`);\n }\n};\n\nconst fetchBytes = async (url: string): Promise<Buffer> => {\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Cannot download ${url}: HTTP ${String(response.status)} ${response.statusText}`);\n }\n\n return Buffer.from(await response.arrayBuffer());\n};\n\nconst fetchText = async (url: string): Promise<string> => {\n const bytes = await fetchBytes(url);\n\n return bytes.toString(\"utf8\");\n};\n\nconst readCachedDigest = (dest: string): string | undefined => {\n try {\n const cached = readFileSync(dest, \"utf8\").trim();\n\n return DIGEST_PATTERN.test(cached) ? cached : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst writeAtomically = (dest: string, contents: string): void => {\n const staging = `${dest}.partial`;\n writeFileSync(staging, contents);\n renameSync(staging, dest);\n};\n\nconst publishedDigest = async (request: DigestRequest): Promise<string> => {\n const checksums = await fetchText(request.url);\n const digest = digestFromChecksums(checksums, request.assetName, request.subject);\n\n if (!DIGEST_PATTERN.test(digest)) {\n throw new Error(`${request.subject} published a malformed checksum for ${request.assetName}: \"${digest}\"`);\n }\n\n writeAtomically(request.dest, digest);\n\n return digest;\n};\n\nconst cachedDigest = async (request: DigestRequest): Promise<string> => {\n const cached = readCachedDigest(request.dest);\n\n return cached ?? publishedDigest(request);\n};\n\nconst isCacheUsable = (dest: string, sha256: string): boolean => {\n if (!existsSync(dest)) {\n return false;\n }\n\n if (getDigest(readFileSync(dest)) === sha256) {\n return true;\n }\n\n warn(`Discarding the cached ${dest}: its checksum no longer matches`);\n\n return false;\n};\n\nconst downloadFile = async (request: DownloadRequest): Promise<string> => {\n const { url, dest, label, sha256, mode } = request;\n\n if (isCacheUsable(dest, sha256)) {\n return dest;\n }\n\n info(`Downloading ${label}`);\n const expected = request.freshSha256 === undefined ? sha256 : await request.freshSha256();\n const contents = await fetchBytes(url);\n assertDigest(url, contents, expected);\n const staging = `${dest}.partial`;\n writeFileSync(staging, contents);\n\n if (mode !== undefined) {\n chmodSync(staging, mode);\n }\n\n renameSync(staging, dest);\n\n return dest;\n};\n\nconst digestFromChecksums = (checksums: string, assetName: string, subject: string): string => {\n const line = checksums.split(\"\\n\").find((entry) => entry.trim().endsWith(` ${assetName}`));\n const digest = line?.trim().split(/\\s+/, 1)[0];\n\n if (digest === undefined) {\n throw new Error(`${subject} publishes no checksum for ${assetName}`);\n }\n\n return digest;\n};\n\nexport { cacheDir, cachedDigest, type DigestRequest, downloadFile, publishedDigest };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyright.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA4BlD,QAAA,MAAM,eAAe,GAAI,UAAU,cAAc,KAAG,MASpC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
const FORMAT_URL = "https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/";
|
|
3
|
+
const CONTINUATION_BLANK = " .";
|
|
4
|
+
const indentLicenseBody = (body) => body
|
|
5
|
+
.split("\n")
|
|
6
|
+
.map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));
|
|
7
|
+
const licenseBody = (licenseFile) => {
|
|
8
|
+
if (licenseFile === null) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return indentLicenseBody(readFileSync(licenseFile, "utf8").trimEnd());
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const headerLines = (settings) => [
|
|
19
|
+
`Format: ${FORMAT_URL}`,
|
|
20
|
+
`Upstream-Name: ${settings.name}`,
|
|
21
|
+
...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),
|
|
22
|
+
];
|
|
23
|
+
const renderCopyright = (settings) => [
|
|
24
|
+
...headerLines(settings),
|
|
25
|
+
"",
|
|
26
|
+
"Files: *",
|
|
27
|
+
`Copyright: ${settings.copyright}`,
|
|
28
|
+
`License: ${settings.license}`,
|
|
29
|
+
...licenseBody(settings.paths.licenseFile),
|
|
30
|
+
"",
|
|
31
|
+
].join("\n");
|
|
32
|
+
export { renderCopyright };
|
|
33
|
+
//# sourceMappingURL=copyright.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyright.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/copyright.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,UAAU,GAAG,oEAAoE,CAAC;AACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAY,EAAE,CACjD,IAAI;KACC,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,GAAG,CAAC,WAA0B,EAAY,EAAE;IACzD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,OAAO,iBAAiB,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,QAAwB,EAAY,EAAE,CAAC;IACxD,WAAW,UAAU,EAAE;IACvB,kBAAkB,QAAQ,CAAC,IAAI,EAAE;IACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAwB,EAAU,EAAE,CACzD;IACI,GAAG,WAAW,CAAC,QAAQ,CAAC;IACxB,EAAE;IACF,UAAU;IACV,cAAc,QAAQ,CAAC,SAAS,EAAE;IAClC,YAAY,QAAQ,CAAC,OAAO,EAAE;IAC9B,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { DeploySettings } from \"../types.js\";\n\nconst FORMAT_URL = \"https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\";\nconst CONTINUATION_BLANK = \" .\";\n\nconst indentLicenseBody = (body: string): string[] =>\n body\n .split(\"\\n\")\n .map((line) => (line.trim().length === 0 ? CONTINUATION_BLANK : ` ${line}`));\n\nconst licenseBody = (licenseFile: string | null): string[] => {\n if (licenseFile === null) {\n return [];\n }\n\n try {\n return indentLicenseBody(readFileSync(licenseFile, \"utf8\").trimEnd());\n } catch {\n return [];\n }\n};\n\nconst headerLines = (settings: DeploySettings): string[] => [\n `Format: ${FORMAT_URL}`,\n `Upstream-Name: ${settings.name}`,\n ...(settings.homepage === null ? [] : [`Source: ${settings.homepage}`]),\n];\n\nconst renderCopyright = (settings: DeploySettings): string =>\n [\n ...headerLines(settings),\n \"\",\n \"Files: *\",\n `Copyright: ${settings.copyright}`,\n `License: ${settings.license}`,\n ...licenseBody(settings.paths.licenseFile),\n \"\",\n ].join(\"\\n\");\n\nexport { renderCopyright };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbus-service.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/dbus-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,QAAA,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,QAAQ,MAAM,KAAG,MAShE,CAAC;AAEP,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { posix } from "node:path";
|
|
2
|
+
import { renderIni } from "./ini.js";
|
|
3
|
+
const SERVICE_GROUP = "D-BUS Service";
|
|
4
|
+
const SERVICE_FLAG = "--gapplication-service";
|
|
5
|
+
const renderDbusService = (settings, prefix) => renderIni([
|
|
6
|
+
{
|
|
7
|
+
name: SERVICE_GROUP,
|
|
8
|
+
entries: [
|
|
9
|
+
["Name", settings.applicationId],
|
|
10
|
+
["Exec", `${posix.join(prefix, "bin", settings.binaryName)} ${SERVICE_FLAG}`],
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
]);
|
|
14
|
+
export { renderDbusService };
|
|
15
|
+
//# sourceMappingURL=dbus-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbus-service.js","sourceRoot":"","sources":["../../../src/deploy/freedesktop/dbus-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAE,MAAc,EAAU,EAAE,CAC3E,SAAS,CAAC;IACN;QACI,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE;YACL,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC;YAChC,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,YAAY,EAAE,CAAC;SAChF;KACJ;CACJ,CAAC,CAAC;AAEP,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { posix } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport { renderIni } from \"./ini.js\";\n\nconst SERVICE_GROUP = \"D-BUS Service\";\nconst SERVICE_FLAG = \"--gapplication-service\";\n\nconst renderDbusService = (settings: DeploySettings, prefix: string): string =>\n renderIni([\n {\n name: SERVICE_GROUP,\n entries: [\n [\"Name\", settings.applicationId],\n [\"Exec\", `${posix.join(prefix, \"bin\", settings.binaryName)} ${SERVICE_FLAG}`],\n ],\n },\n ]);\n\nexport { renderDbusService };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-entry.d.ts","sourceRoot":"","sources":["../../../src/deploy/freedesktop/desktop-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,aAAa,CAAC;AAuFvE,QAAA,MAAM,kBAAkB,GAAI,UAAU,cAAc,KAAG,MAYtD,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { renderIni } from "./ini.js";
|
|
2
|
+
const DESKTOP_ENTRY_GROUP = "Desktop Entry";
|
|
3
|
+
const EXEC_QUOTED_CHARACTERS = /["`$\\]/g;
|
|
4
|
+
const EXEC_RESERVED_CHARACTERS = /[\s"'\\><~|&;$*?#()`]/;
|
|
5
|
+
const RESERVED_KEYS = new Map([
|
|
6
|
+
["DBusActivatable", "use `deploy.isDbusActivatable` instead"],
|
|
7
|
+
["Version", "it names the desktop entry spec version, not the application's"],
|
|
8
|
+
]);
|
|
9
|
+
const quoteExecToken = (token) => {
|
|
10
|
+
const escaped = token.replaceAll("%", "%%");
|
|
11
|
+
if (!EXEC_RESERVED_CHARACTERS.test(escaped)) {
|
|
12
|
+
return escaped;
|
|
13
|
+
}
|
|
14
|
+
const quoted = escaped.replaceAll(EXEC_QUOTED_CHARACTERS, (character) => `\\${character}`);
|
|
15
|
+
return `"${quoted}"`;
|
|
16
|
+
};
|
|
17
|
+
const execLine = (settings) => [
|
|
18
|
+
...[settings.binaryName, ...settings.execArgs].map((part) => quoteExecToken(part)),
|
|
19
|
+
settings.execToken ?? "",
|
|
20
|
+
]
|
|
21
|
+
.filter((part) => part.length > 0)
|
|
22
|
+
.join(" ");
|
|
23
|
+
const optionalEntry = (key, value) => (value === null ? [] : [[key, value]]);
|
|
24
|
+
const listEntry = (key, values) => (values.length === 0 ? [] : [[key, values]]);
|
|
25
|
+
const assertNoReservedOverrides = (settings) => {
|
|
26
|
+
for (const key of Object.keys(settings.desktopEntry)) {
|
|
27
|
+
const remedy = RESERVED_KEYS.get(key);
|
|
28
|
+
if (remedy !== undefined) {
|
|
29
|
+
throw new Error(`Cannot set "${key}" through \`deploy.desktopEntry\`: gtkx deploy writes it, ${remedy}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const baseEntries = (settings) => [
|
|
34
|
+
["Type", "Application"],
|
|
35
|
+
["Name", settings.name],
|
|
36
|
+
...optionalEntry("GenericName", settings.genericName),
|
|
37
|
+
["Comment", settings.summary],
|
|
38
|
+
["Exec", execLine(settings)],
|
|
39
|
+
["Icon", settings.applicationId],
|
|
40
|
+
["Terminal", "false"],
|
|
41
|
+
...listEntry("Categories", settings.categories),
|
|
42
|
+
...listEntry("Keywords", settings.keywords),
|
|
43
|
+
...listEntry("MimeType", settings.mimeTypes),
|
|
44
|
+
["StartupNotify", "true"],
|
|
45
|
+
["StartupWMClass", settings.applicationId],
|
|
46
|
+
];
|
|
47
|
+
const actionEntries = (settings) => settings.desktopActions.length === 0 ? [] : [["Actions", settings.desktopActions.map((action) => action.id)]];
|
|
48
|
+
const activationEntries = (settings) => settings.isDbusActivatable ? [["DBusActivatable", "true"]] : [];
|
|
49
|
+
const actionGroup = (settings, action) => ({
|
|
50
|
+
name: `Desktop Action ${action.id}`,
|
|
51
|
+
entries: [
|
|
52
|
+
["Name", action.name],
|
|
53
|
+
["Exec", [settings.binaryName, ...action.args].map((part) => quoteExecToken(part)).join(" ")],
|
|
54
|
+
...optionalEntry("Icon", action.icon),
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
const mergeEntries = (entries, overrides) => {
|
|
58
|
+
const merged = new Map(entries);
|
|
59
|
+
for (const [key, value] of overrides) {
|
|
60
|
+
merged.set(key, value);
|
|
61
|
+
}
|
|
62
|
+
return merged.entries().toArray();
|
|
63
|
+
};
|
|
64
|
+
const renderDesktopEntry = (settings) => {
|
|
65
|
+
assertNoReservedOverrides(settings);
|
|
66
|
+
const main = {
|
|
67
|
+
name: DESKTOP_ENTRY_GROUP,
|
|
68
|
+
entries: mergeEntries([...baseEntries(settings), ...actionEntries(settings), ...activationEntries(settings)], Object.entries(settings.desktopEntry)),
|
|
69
|
+
};
|
|
70
|
+
return renderIni([main, ...settings.desktopActions.map((action) => actionGroup(settings, action))]);
|
|
71
|
+
};
|
|
72
|
+
export { renderDesktopEntry };
|
|
73
|
+
//# sourceMappingURL=desktop-entry.js.map
|