@gtkx/cli 1.5.0 → 2.0.0-beta.1

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 (211) hide show
  1. package/README.md +5 -5
  2. package/dist/cli.js +4 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/codegen/freshness.d.ts.map +1 -1
  5. package/dist/codegen/freshness.js +45 -15
  6. package/dist/codegen/freshness.js.map +1 -1
  7. package/dist/codegen/reference.d.ts +17 -0
  8. package/dist/codegen/reference.d.ts.map +1 -0
  9. package/dist/codegen/reference.js +31 -0
  10. package/dist/codegen/reference.js.map +1 -0
  11. package/dist/codegen/report.d.ts.map +1 -1
  12. package/dist/codegen/report.js +18 -15
  13. package/dist/codegen/report.js.map +1 -1
  14. package/dist/codegen/run-codegen.d.ts +5 -5
  15. package/dist/codegen/run-codegen.d.ts.map +1 -1
  16. package/dist/codegen/run-codegen.js +24 -59
  17. package/dist/codegen/run-codegen.js.map +1 -1
  18. package/dist/codegen/store-resolver.d.ts +0 -1
  19. package/dist/codegen/store-resolver.d.ts.map +1 -1
  20. package/dist/codegen/store-resolver.js +8 -17
  21. package/dist/codegen/store-resolver.js.map +1 -1
  22. package/dist/commands/docs.d.ts.map +1 -1
  23. package/dist/commands/docs.js +6 -22
  24. package/dist/commands/docs.js.map +1 -1
  25. package/dist/commands/mcp.d.ts +13 -0
  26. package/dist/commands/mcp.d.ts.map +1 -0
  27. package/dist/commands/mcp.js +68 -0
  28. package/dist/commands/mcp.js.map +1 -0
  29. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  30. package/dist/deploy/freedesktop/copyright.js +2 -13
  31. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  32. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  33. package/dist/deploy/freedesktop/xml.js +21 -25
  34. package/dist/deploy/freedesktop/xml.js.map +1 -1
  35. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  36. package/dist/deploy/node-runtime/license.js +2 -9
  37. package/dist/deploy/node-runtime/license.js.map +1 -1
  38. package/dist/deploy/notices/gtkx.js +1 -1
  39. package/dist/deploy/notices/gtkx.js.map +1 -1
  40. package/dist/deploy/notices/libraries.d.ts.map +1 -1
  41. package/dist/deploy/notices/libraries.js +2 -1
  42. package/dist/deploy/notices/libraries.js.map +1 -1
  43. package/dist/deploy/notices/packages.d.ts.map +1 -1
  44. package/dist/deploy/notices/packages.js +3 -10
  45. package/dist/deploy/notices/packages.js.map +1 -1
  46. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  47. package/dist/deploy/payload/copy-tree.js +3 -3
  48. package/dist/deploy/payload/copy-tree.js.map +1 -1
  49. package/dist/deploy/payload/stage.d.ts.map +1 -1
  50. package/dist/deploy/payload/stage.js +1 -3
  51. package/dist/deploy/payload/stage.js.map +1 -1
  52. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  53. package/dist/deploy/settings/build-manifest.js +4 -15
  54. package/dist/deploy/settings/build-manifest.js.map +1 -1
  55. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  56. package/dist/deploy/settings/libraries.js +2 -21
  57. package/dist/deploy/settings/libraries.js.map +1 -1
  58. package/dist/deploy/settings/paths.d.ts +1 -2
  59. package/dist/deploy/settings/paths.d.ts.map +1 -1
  60. package/dist/deploy/settings/paths.js +5 -15
  61. package/dist/deploy/settings/paths.js.map +1 -1
  62. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  63. package/dist/deploy/settings/screenshots.js +6 -31
  64. package/dist/deploy/settings/screenshots.js.map +1 -1
  65. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  66. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  67. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  68. package/dist/deploy/targets/flatpak-source.js +4 -4
  69. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  70. package/dist/deploy/targets/flatpak-sources.js +1 -1
  71. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  72. package/dist/deploy/tools.d.ts.map +1 -1
  73. package/dist/deploy/tools.js +1 -3
  74. package/dist/deploy/tools.js.map +1 -1
  75. package/dist/dev/runner-main.js +1 -1
  76. package/dist/dev/runner-main.js.map +1 -1
  77. package/dist/dev/schema-dir.d.ts +1 -1
  78. package/dist/dev/schema-dir.d.ts.map +1 -1
  79. package/dist/dev/schema-dir.js +2 -4
  80. package/dist/dev/schema-dir.js.map +1 -1
  81. package/dist/i18n/catalogs.d.ts.map +1 -1
  82. package/dist/i18n/catalogs.js +2 -1
  83. package/dist/i18n/catalogs.js.map +1 -1
  84. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  85. package/dist/i18n/metadata-templates.js +2 -1
  86. package/dist/i18n/metadata-templates.js.map +1 -1
  87. package/dist/i18n/source-messages.d.ts +3 -21
  88. package/dist/i18n/source-messages.d.ts.map +1 -1
  89. package/dist/i18n/source-messages.js +66 -85
  90. package/dist/i18n/source-messages.js.map +1 -1
  91. package/dist/i18n/types.d.ts +6 -7
  92. package/dist/i18n/types.d.ts.map +1 -1
  93. package/dist/i18n/types.js +83 -96
  94. package/dist/i18n/types.js.map +1 -1
  95. package/dist/internal/agent-rules.d.ts +7 -0
  96. package/dist/internal/agent-rules.d.ts.map +1 -0
  97. package/dist/internal/agent-rules.js +106 -0
  98. package/dist/internal/agent-rules.js.map +1 -0
  99. package/dist/internal/docs-elements.d.ts +8 -0
  100. package/dist/internal/docs-elements.d.ts.map +1 -0
  101. package/dist/internal/docs-elements.js +12 -0
  102. package/dist/internal/docs-elements.js.map +1 -0
  103. package/dist/internal/icon-path.d.ts.map +1 -1
  104. package/dist/internal/icon-path.js +5 -16
  105. package/dist/internal/icon-path.js.map +1 -1
  106. package/dist/internal/source-imports.d.ts.map +1 -1
  107. package/dist/internal/source-imports.js +10 -42
  108. package/dist/internal/source-imports.js.map +1 -1
  109. package/dist/mcp/client-config.d.ts +22 -0
  110. package/dist/mcp/client-config.d.ts.map +1 -0
  111. package/dist/mcp/client-config.js +94 -0
  112. package/dist/mcp/client-config.js.map +1 -0
  113. package/dist/settings/render.d.ts +0 -1
  114. package/dist/settings/render.d.ts.map +1 -1
  115. package/dist/settings/render.js +1 -11
  116. package/dist/settings/render.js.map +1 -1
  117. package/dist/settings/schema.d.ts +2 -2
  118. package/dist/settings/schema.d.ts.map +1 -1
  119. package/dist/settings/schema.js +21 -62
  120. package/dist/settings/schema.js.map +1 -1
  121. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  122. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  123. package/dist/vite-plugins/asset-imports.js +19 -32
  124. package/dist/vite-plugins/asset-imports.js.map +1 -1
  125. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  126. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  127. package/dist/vite-plugins/asset-specifier.js +1 -4
  128. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  129. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  130. package/dist/vite-plugins/i18n.js +2 -1
  131. package/dist/vite-plugins/i18n.js.map +1 -1
  132. package/dist/vite-plugins/index.js +2 -2
  133. package/dist/vite-plugins/index.js.map +1 -1
  134. package/dist/vite-plugins/resources.d.ts.map +1 -1
  135. package/dist/vite-plugins/resources.js +31 -96
  136. package/dist/vite-plugins/resources.js.map +1 -1
  137. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  138. package/dist/vite-plugins/settings-worker-env.js +1 -3
  139. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  140. package/dist/vite-plugins/settings.d.ts +1 -2
  141. package/dist/vite-plugins/settings.d.ts.map +1 -1
  142. package/dist/vite-plugins/settings.js +8 -13
  143. package/dist/vite-plugins/settings.js.map +1 -1
  144. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  145. package/dist/vite-plugins/undeclared-library.js +10 -13
  146. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  147. package/dist/vite-plugins/worker.d.ts.map +1 -1
  148. package/dist/vite-plugins/worker.js +0 -1
  149. package/dist/vite-plugins/worker.js.map +1 -1
  150. package/package.json +21 -14
  151. package/src/cli.ts +5 -0
  152. package/src/codegen/freshness.ts +66 -16
  153. package/src/codegen/reference.ts +52 -0
  154. package/src/codegen/report.ts +16 -17
  155. package/src/codegen/run-codegen.ts +31 -91
  156. package/src/codegen/store-resolver.ts +8 -24
  157. package/src/commands/docs.ts +6 -36
  158. package/src/commands/mcp.ts +81 -0
  159. package/src/deploy/freedesktop/copyright.ts +2 -14
  160. package/src/deploy/freedesktop/xml.ts +24 -32
  161. package/src/deploy/node-runtime/license.ts +2 -8
  162. package/src/deploy/notices/gtkx.ts +1 -1
  163. package/src/deploy/notices/libraries.ts +2 -1
  164. package/src/deploy/notices/packages.ts +3 -11
  165. package/src/deploy/payload/copy-tree.ts +3 -4
  166. package/src/deploy/payload/stage.ts +2 -6
  167. package/src/deploy/settings/build-manifest.ts +4 -16
  168. package/src/deploy/settings/libraries.ts +1 -25
  169. package/src/deploy/settings/paths.ts +6 -16
  170. package/src/deploy/settings/screenshots.ts +8 -46
  171. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  172. package/src/deploy/targets/flatpak-source.ts +4 -4
  173. package/src/deploy/targets/flatpak-sources.ts +1 -1
  174. package/src/deploy/tools.ts +1 -3
  175. package/src/dev/runner-main.ts +1 -1
  176. package/src/dev/schema-dir.ts +2 -4
  177. package/src/i18n/catalogs.ts +2 -1
  178. package/src/i18n/metadata-templates.ts +2 -1
  179. package/src/i18n/source-messages.ts +77 -115
  180. package/src/i18n/types.ts +97 -131
  181. package/src/internal/agent-rules.ts +135 -0
  182. package/src/internal/docs-elements.ts +21 -0
  183. package/src/internal/icon-path.ts +6 -19
  184. package/src/internal/source-imports.ts +14 -50
  185. package/src/mcp/client-config.ts +130 -0
  186. package/src/settings/render.ts +1 -13
  187. package/src/settings/schema.ts +19 -81
  188. package/src/vite-plugins/asset-imports.ts +20 -44
  189. package/src/vite-plugins/asset-specifier.ts +0 -5
  190. package/src/vite-plugins/i18n.ts +2 -1
  191. package/src/vite-plugins/index.ts +2 -2
  192. package/src/vite-plugins/resources.ts +36 -139
  193. package/src/vite-plugins/settings-worker-env.ts +1 -3
  194. package/src/vite-plugins/settings.ts +11 -19
  195. package/src/vite-plugins/undeclared-library.ts +14 -20
  196. package/src/vite-plugins/worker.ts +0 -1
  197. package/dist/i18n/binding-extractor.d.ts +0 -30
  198. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  199. package/dist/i18n/binding-extractor.js +0 -1324
  200. package/dist/i18n/binding-extractor.js.map +0 -1
  201. package/dist/i18n/extractor-plugin.d.ts +0 -8
  202. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  203. package/dist/i18n/extractor-plugin.js +0 -247
  204. package/dist/i18n/extractor-plugin.js.map +0 -1
  205. package/dist/internal/data-dir.d.ts +0 -4
  206. package/dist/internal/data-dir.d.ts.map +0 -1
  207. package/dist/internal/data-dir.js +0 -52
  208. package/dist/internal/data-dir.js.map +0 -1
  209. package/src/i18n/binding-extractor.ts +0 -1969
  210. package/src/i18n/extractor-plugin.ts +0 -413
  211. package/src/internal/data-dir.ts +0 -70
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { statSync } from \"node:fs\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\nimport type { DeployConfig, DeployPaths } from \"../types.js\";\nimport { resolveApplicationIcon } from \"../../internal/icon-path.js\";\n\ntype PathsRequest = {\n root: string;\n deploy: DeployConfig;\n applicationIcon: Config[\"applicationIcon\"];\n applicationId: Config[\"applicationId\"];\n outDirOverride: string | undefined;\n};\n\nconst DEFAULT_OUT_DIR = \"build\";\nconst DIST_DIR = \"dist\";\nconst LICENSE_CANDIDATES = [\"LICENSE\", \"LICENSE.md\", \"LICENSE.txt\", \"COPYING\", \"COPYING.md\"];\n\nconst isInside = (parent: string, candidate: string): boolean => {\n const rel = relative(parent, candidate);\n\n return rel.length > 0 && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\nconst resolveOutDir = ({ root, deploy, outDirOverride }: PathsRequest): string => {\n const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;\n const outDir = resolve(root, configured);\n\n if (!isInside(root, outDir)) {\n throw new Error(`Cannot use \"${configured}\" as the deploy output directory: it is outside ${root}`);\n }\n\n return outDir;\n};\n\nconst existingFile = (path: string): string | null => {\n try {\n return statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;\n } catch {\n return null;\n }\n};\n\nconst resolveLicenseFile = (root: string, configured: string | undefined): string | null => {\n if (configured !== undefined) {\n const path = resolve(root, configured);\n\n if (existingFile(path) === null) {\n throw new Error(`Cannot read the license file \"${configured}\": no such file under ${root}`);\n }\n\n return path;\n }\n\n return LICENSE_CANDIDATES.map((name) => existingFile(join(root, name))).find((path) => path !== null) ?? null;\n};\n\nconst resolvePaths = (request: PathsRequest): DeployPaths => {\n const { root, deploy } = request;\n const outDir = resolveOutDir(request);\n\n return {\n root,\n dist: join(root, DIST_DIR),\n outDir,\n metadata: join(outDir, \"metadata\"),\n runtime: join(outDir, \"runtime\"),\n stage: join(outDir, \"stage\"),\n overlay: join(outDir, \"overlay\"),\n targets: join(outDir, \"targets\"),\n output: join(outDir, \"out\"),\n applicationIcon: resolveApplicationIcon(root, request.applicationId, request.applicationIcon),\n licenseFile: resolveLicenseFile(root, deploy.licenseFile),\n schemaFiles: [],\n };\n};\n\nexport { isInside, resolvePaths };\n"]}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/deploy/settings/paths.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport { isPathInside } from \"@gtkx/utils\";\nimport { statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { DeployConfig, DeployPaths } from \"../types.js\";\nimport { resolveApplicationIcon } from \"../../internal/icon-path.js\";\n\ntype PathsRequest = {\n root: string;\n deploy: DeployConfig;\n applicationIcon: Config[\"applicationIcon\"];\n applicationId: Config[\"applicationId\"];\n outDirOverride: string | undefined;\n};\n\nconst DEFAULT_OUT_DIR = \"build\";\nconst DIST_DIR = \"dist\";\nconst LICENSE_CANDIDATES = [\"LICENSE\", \"LICENSE.md\", \"LICENSE.txt\", \"COPYING\", \"COPYING.md\"];\n\nconst resolveOutDir = ({ root, deploy, outDirOverride }: PathsRequest): string => {\n const configured = outDirOverride ?? deploy.outDir ?? DEFAULT_OUT_DIR;\n const outDir = resolve(root, configured);\n\n if (!isPathInside(root, outDir)) {\n throw new Error(`Cannot use \"${configured}\" as the deploy output directory: it is outside ${root}`);\n }\n\n return outDir;\n};\n\nconst existingFile = (path: string): string | null =>\n statSync(path, { throwIfNoEntry: false })?.isFile() === true ? path : null;\n\nconst resolveLicenseFile = (root: string, configured: string | undefined): string | null => {\n if (configured !== undefined) {\n const path = resolve(root, configured);\n\n if (existingFile(path) === null) {\n throw new Error(`Cannot read the license file \"${configured}\": no such file under ${root}`);\n }\n\n return path;\n }\n\n return LICENSE_CANDIDATES.map((name) => existingFile(join(root, name))).find((path) => path !== null) ?? null;\n};\n\nconst resolvePaths = (request: PathsRequest): DeployPaths => {\n const { root, deploy } = request;\n const outDir = resolveOutDir(request);\n\n return {\n root,\n dist: join(root, DIST_DIR),\n outDir,\n metadata: join(outDir, \"metadata\"),\n runtime: join(outDir, \"runtime\"),\n stage: join(outDir, \"stage\"),\n overlay: join(outDir, \"overlay\"),\n targets: join(outDir, \"targets\"),\n output: join(outDir, \"out\"),\n applicationIcon: resolveApplicationIcon(root, request.applicationId, request.applicationIcon),\n licenseFile: resolveLicenseFile(root, deploy.licenseFile),\n schemaFiles: [],\n };\n};\n\nexport { resolvePaths };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACxB,CAAC;AAqGF,QAAA,MAAM,kBAAkB,GAAI,SAAS,iBAAiB,KAAG,gBAAgB,EAexE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,KAAK,iBAAiB,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACxB,CAAC;AA8DF,QAAA,MAAM,kBAAkB,GAAI,SAAS,iBAAiB,KAAG,gBAAgB,EAexE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,35 +1,13 @@
1
+ import hostedGitInfo from "hosted-git-info";
1
2
  import { gitRemoteUrl, runGit } from "../git.js";
2
3
  const DEFAULT_BRANCH = "main";
3
- const GIT_SUFFIX = ".git";
4
- const PORTED_HOST = /^([^/]*):\d+(?=\/|$)/;
5
- const SCHEME_SEPARATOR = "://";
6
4
  const TRAILING_SLASH = "/";
7
- const RAW_BASE_BY_HOST = {
8
- "github.com": (owner, repo, branch) => `https://raw.githubusercontent.com/${owner}/${repo}/${branch}`,
9
- "gitlab.com": (owner, repo, branch) => `https://gitlab.com/${owner}/${repo}/-/raw/${branch}`,
10
- };
11
5
  const readRepositoryPrefix = (root) => trimTrailingSlash(runGit(root, ["rev-parse", "--show-prefix"]) ?? "");
12
6
  const trimTrailingSlash = (value) => value.endsWith(TRAILING_SLASH) ? trimTrailingSlash(value.slice(0, -1)) : value;
13
7
  const trimLeadingSlash = (value) => {
14
8
  const withoutDot = value.startsWith("./") ? value.slice(2) : value;
15
9
  return withoutDot.startsWith(TRAILING_SLASH) ? withoutDot.slice(1) : withoutDot;
16
10
  };
17
- const afterMarker = (value, marker) => {
18
- const index = value.indexOf(marker);
19
- return index === -1 ? value : value.slice(index + marker.length);
20
- };
21
- const normalizeLocation = (trimmed) => {
22
- const location = afterMarker(afterMarker(trimmed, SCHEME_SEPARATOR), "@");
23
- return trimmed.includes(SCHEME_SEPARATOR) ? location.replace(PORTED_HOST, "$1") : location.replace(":", "/");
24
- };
25
- const parseRemote = (remote) => {
26
- const trimmed = remote.endsWith(GIT_SUFFIX) ? remote.slice(0, -GIT_SUFFIX.length) : remote;
27
- const [host, owner, repo, ...extra] = normalizeLocation(trimmed).split("/");
28
- if (repo === undefined || extra.length > 0) {
29
- return null;
30
- }
31
- return { host: host ?? "", owner: owner ?? "", repo };
32
- };
33
11
  const readDefaultBranch = (root) => {
34
12
  const head = runGit(root, ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"]);
35
13
  if (head === null || head.length === 0) {
@@ -38,22 +16,19 @@ const readDefaultBranch = (root) => {
38
16
  const separator = head.indexOf(TRAILING_SLASH);
39
17
  return separator === -1 ? head : head.slice(separator + 1);
40
18
  };
41
- const baseForRemote = (remote, branch) => {
42
- const parts = parseRemote(remote);
43
- if (parts === null) {
19
+ const baseForRemote = (root, remote) => {
20
+ const repository = hostedGitInfo.fromUrl(remote);
21
+ if (repository === undefined || (repository.type !== "github" && repository.type !== "gitlab")) {
44
22
  return null;
45
23
  }
46
- const build = RAW_BASE_BY_HOST[parts.host];
47
- return build === undefined ? null : build(parts.owner, parts.repo, branch);
24
+ return trimTrailingSlash(repository.file(readRepositoryPrefix(root), { committish: readDefaultBranch(root) }));
48
25
  };
49
26
  const resolveScreenshotBaseUrl = ({ root, deploy }) => {
50
27
  if (deploy.screenshotBaseUrl !== undefined) {
51
28
  return trimTrailingSlash(deploy.screenshotBaseUrl);
52
29
  }
53
30
  const remote = gitRemoteUrl(root);
54
- const base = remote === null ? null : baseForRemote(remote, readDefaultBranch(root));
55
- const prefix = base === null ? "" : readRepositoryPrefix(root);
56
- return base === null || prefix.length === 0 ? base : `${base}/${prefix}`;
31
+ return remote === null ? null : baseForRemote(root, remote);
57
32
  };
58
33
  const urlForScreenshot = (file, baseUrl) => {
59
34
  if (baseUrl === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeployConfig, DeployScreenshot } from \"../types.js\";\nimport { gitRemoteUrl, runGit } from \"../git.js\";\n\ntype ScreenshotRequest = {\n root: string;\n deploy: DeployConfig;\n};\n\ntype RemoteParts = {\n host: string;\n owner: string;\n repo: string;\n};\n\nconst DEFAULT_BRANCH = \"main\";\nconst GIT_SUFFIX = \".git\";\nconst PORTED_HOST = /^([^/]*):\\d+(?=\\/|$)/;\nconst SCHEME_SEPARATOR = \"://\";\nconst TRAILING_SLASH = \"/\";\n\nconst RAW_BASE_BY_HOST: Record<string, (owner: string, repo: string, branch: string) => string> = {\n \"github.com\": (owner, repo, branch) => `https://raw.githubusercontent.com/${owner}/${repo}/${branch}`,\n \"gitlab.com\": (owner, repo, branch) => `https://gitlab.com/${owner}/${repo}/-/raw/${branch}`,\n};\n\nconst readRepositoryPrefix = (root: string): string =>\n trimTrailingSlash(runGit(root, [\"rev-parse\", \"--show-prefix\"]) ?? \"\");\n\nconst trimTrailingSlash = (value: string): string =>\n value.endsWith(TRAILING_SLASH) ? trimTrailingSlash(value.slice(0, -1)) : value;\n\nconst trimLeadingSlash = (value: string): string => {\n const withoutDot = value.startsWith(\"./\") ? value.slice(2) : value;\n\n return withoutDot.startsWith(TRAILING_SLASH) ? withoutDot.slice(1) : withoutDot;\n};\n\nconst afterMarker = (value: string, marker: string): string => {\n const index = value.indexOf(marker);\n\n return index === -1 ? value : value.slice(index + marker.length);\n};\n\nconst normalizeLocation = (trimmed: string): string => {\n const location = afterMarker(afterMarker(trimmed, SCHEME_SEPARATOR), \"@\");\n\n return trimmed.includes(SCHEME_SEPARATOR) ? location.replace(PORTED_HOST, \"$1\") : location.replace(\":\", \"/\");\n};\n\nconst parseRemote = (remote: string): RemoteParts | null => {\n const trimmed = remote.endsWith(GIT_SUFFIX) ? remote.slice(0, -GIT_SUFFIX.length) : remote;\n const [host, owner, repo, ...extra] = normalizeLocation(trimmed).split(\"/\");\n\n if (repo === undefined || extra.length > 0) {\n return null;\n }\n\n return { host: host ?? \"\", owner: owner ?? \"\", repo };\n};\n\nconst readDefaultBranch = (root: string): string => {\n const head = runGit(root, [\"symbolic-ref\", \"--short\", \"refs/remotes/origin/HEAD\"]);\n\n if (head === null || head.length === 0) {\n return DEFAULT_BRANCH;\n }\n\n const separator = head.indexOf(TRAILING_SLASH);\n\n return separator === -1 ? head : head.slice(separator + 1);\n};\n\nconst baseForRemote = (remote: string, branch: string): string | null => {\n const parts = parseRemote(remote);\n\n if (parts === null) {\n return null;\n }\n\n const build = RAW_BASE_BY_HOST[parts.host];\n\n return build === undefined ? null : build(parts.owner, parts.repo, branch);\n};\n\nconst resolveScreenshotBaseUrl = ({ root, deploy }: ScreenshotRequest): string | null => {\n if (deploy.screenshotBaseUrl !== undefined) {\n return trimTrailingSlash(deploy.screenshotBaseUrl);\n }\n\n const remote = gitRemoteUrl(root);\n const base = remote === null ? null : baseForRemote(remote, readDefaultBranch(root));\n const prefix = base === null ? \"\" : readRepositoryPrefix(root);\n\n return base === null || prefix.length === 0 ? base : `${base}/${prefix}`;\n};\n\nconst urlForScreenshot = (file: string, baseUrl: string | null): string => {\n if (baseUrl === null) {\n throw new Error(\n `Cannot turn the screenshot \"${file}\" into a URL: a software center fetches screenshots over the ` +\n \"network. Set `deploy.screenshotBaseUrl`, or give the screenshot an absolute `url`.\",\n );\n }\n\n return `${baseUrl}/${trimLeadingSlash(file)}`;\n};\n\nconst resolveScreenshots = (request: ScreenshotRequest): DeployScreenshot[] => {\n const configured = request.deploy.screenshots ?? [];\n\n if (configured.length === 0) {\n return [];\n }\n\n const baseUrl = resolveScreenshotBaseUrl(request);\n const defaultIndex = configured.findIndex((entry) => entry.isDefault === true);\n\n return configured.map((entry, index) => ({\n url: entry.url ?? urlForScreenshot(entry.file ?? \"\", baseUrl),\n caption: entry.caption ?? null,\n isDefault: index === defaultIndex,\n }));\n};\n\nexport { resolveScreenshots };\n"]}
1
+ {"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../../../src/deploy/settings/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOjD,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAU,EAAE,CAClD,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAE1E,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE,CAChD,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAEnF,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEnE,OAAO,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAEnF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE/C,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,MAAc,EAAiB,EAAE;IAClE,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,iBAAiB,CACpB,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CACvF,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAqB,EAAiB,EAAE;IACpF,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAsB,EAAU,EAAE;IACtE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACX,+BAA+B,IAAI,+DAA+D;YAClG,oFAAoF,CACvF,CAAC;IACN,CAAC;IAED,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAA0B,EAAsB,EAAE;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IAEpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;IAE/E,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC;QAC7D,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,SAAS,EAAE,KAAK,KAAK,YAAY;KACpC,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import hostedGitInfo from \"hosted-git-info\";\nimport type { DeployConfig, DeployScreenshot } from \"../types.js\";\nimport { gitRemoteUrl, runGit } from \"../git.js\";\n\ntype ScreenshotRequest = {\n root: string;\n deploy: DeployConfig;\n};\n\nconst DEFAULT_BRANCH = \"main\";\nconst TRAILING_SLASH = \"/\";\n\nconst readRepositoryPrefix = (root: string): string =>\n trimTrailingSlash(runGit(root, [\"rev-parse\", \"--show-prefix\"]) ?? \"\");\n\nconst trimTrailingSlash = (value: string): string =>\n value.endsWith(TRAILING_SLASH) ? trimTrailingSlash(value.slice(0, -1)) : value;\n\nconst trimLeadingSlash = (value: string): string => {\n const withoutDot = value.startsWith(\"./\") ? value.slice(2) : value;\n\n return withoutDot.startsWith(TRAILING_SLASH) ? withoutDot.slice(1) : withoutDot;\n};\n\nconst readDefaultBranch = (root: string): string => {\n const head = runGit(root, [\"symbolic-ref\", \"--short\", \"refs/remotes/origin/HEAD\"]);\n\n if (head === null || head.length === 0) {\n return DEFAULT_BRANCH;\n }\n\n const separator = head.indexOf(TRAILING_SLASH);\n\n return separator === -1 ? head : head.slice(separator + 1);\n};\n\nconst baseForRemote = (root: string, remote: string): string | null => {\n const repository = hostedGitInfo.fromUrl(remote);\n\n if (repository === undefined || (repository.type !== \"github\" && repository.type !== \"gitlab\")) {\n return null;\n }\n\n return trimTrailingSlash(\n repository.file(readRepositoryPrefix(root), { committish: readDefaultBranch(root) }),\n );\n};\n\nconst resolveScreenshotBaseUrl = ({ root, deploy }: ScreenshotRequest): string | null => {\n if (deploy.screenshotBaseUrl !== undefined) {\n return trimTrailingSlash(deploy.screenshotBaseUrl);\n }\n\n const remote = gitRemoteUrl(root);\n\n return remote === null ? null : baseForRemote(root, remote);\n};\n\nconst urlForScreenshot = (file: string, baseUrl: string | null): string => {\n if (baseUrl === null) {\n throw new Error(\n `Cannot turn the screenshot \"${file}\" into a URL: a software center fetches screenshots over the ` +\n \"network. Set `deploy.screenshotBaseUrl`, or give the screenshot an absolute `url`.\",\n );\n }\n\n return `${baseUrl}/${trimLeadingSlash(file)}`;\n};\n\nconst resolveScreenshots = (request: ScreenshotRequest): DeployScreenshot[] => {\n const configured = request.deploy.screenshots ?? [];\n\n if (configured.length === 0) {\n return [];\n }\n\n const baseUrl = resolveScreenshotBaseUrl(request);\n const defaultIndex = configured.findIndex((entry) => entry.isDefault === true);\n\n return configured.map((entry, index) => ({\n url: entry.url ?? urlForScreenshot(entry.file ?? \"\", baseUrl),\n caption: entry.caption ?? null,\n isDefault: index === defaultIndex,\n }));\n};\n\nexport { resolveScreenshots };\n"]}
@@ -1,9 +1,9 @@
1
1
  import { readPackageManifest } from "../settings/package-manifest.js";
2
- const PNPM_VERSION = "11.22.0";
2
+ const PNPM_VERSION = "11.25.0";
3
3
  const PNPM_MAJOR = 11;
4
- const PNPM_MINOR = 22;
5
- const PNPM_SHA512 = "1ff870c4c6133dfd88fb2afc46dd13d47f09c9794b438c6fdb47ca98caf3bc16381ee0be9" +
6
- "3a091b8e3824cf01f889f46d7d9e20910fb0be1ab0fb5baa80dd621";
4
+ const PNPM_MINOR = 25;
5
+ const PNPM_SHA512 = "5cde925b4f075f725eb71fbae18a42ffe784524789f19b61c731cb8721ec28aaee160e01a" +
6
+ "8d5af4fedb2a42cdbf300efe23db356b0d4a17b4d63e11f8ab7c956";
7
7
  const PNPM_DIR = "flatpak-pnpm";
8
8
  const PNPM_COMMAND = "pnpm";
9
9
  const PNPM_PREFIX = "pnpm@";
@@ -1 +1 @@
1
- {"version":3,"file":"flatpak-pnpm.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-pnpm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeploySettings } from \"../types.js\";\nimport type { FlatpakModule } from \"./flatpak-prebuilt.js\";\nimport { readPackageManifest } from \"../settings/package-manifest.js\";\n\ntype PnpmPin = {\n version: string;\n major: number;\n minor: number;\n sha512: string;\n};\n\nconst PNPM_VERSION = \"11.22.0\";\nconst PNPM_MAJOR = 11;\nconst PNPM_MINOR = 22;\n\nconst PNPM_SHA512 = \"1ff870c4c6133dfd88fb2afc46dd13d47f09c9794b438c6fdb47ca98caf3bc16381ee0be9\" +\n \"3a091b8e3824cf01f889f46d7d9e20910fb0be1ab0fb5baa80dd621\";\n\nconst PNPM_DIR = \"flatpak-pnpm\";\nconst PNPM_COMMAND = \"pnpm\";\nconst PNPM_PREFIX = \"pnpm@\";\nconst PNPM_TARBALL_URL = \"https://registry.npmjs.org/pnpm/-/pnpm-\";\nconst PNPM_INSTALL = \"pnpm install --offline --frozen-lockfile\";\nconst TRUST_LOCKFILE = \"--trust-lockfile\";\nconst STORE_V10 = \"v10\";\nconst STORE_V11 = \"v11\";\nconst STORE_V10_MAJOR = 10;\nconst STORE_V11_MAJOR = 11;\nconst TRUST_LOCKFILE_MINOR = 3;\n\nconst DEFAULT_PIN: PnpmPin = {\n version: PNPM_VERSION,\n major: PNPM_MAJOR,\n minor: PNPM_MINOR,\n sha512: PNPM_SHA512,\n};\n\nconst PNPM_PIN_FIELD =\n /^pnpm@(?<version>(?<major>\\d+)\\.(?<minor>\\d+)\\.\\d+)\\+sha512\\.(?<sha512>[\\da-f]{128})$/;\n\nconst pinFromGroups = (groups: Record<string, string | undefined>): PnpmPin | null => {\n const { major, minor, sha512, version } = groups;\n\n if (major === undefined || minor === undefined || sha512 === undefined || version === undefined) {\n return null;\n }\n\n return { version, major: Number(major), minor: Number(minor), sha512 };\n};\n\nconst isSupportedPin = (pin: PnpmPin): boolean =>\n pin.major === STORE_V10_MAJOR || (pin.major === STORE_V11_MAJOR && pin.minor >= TRUST_LOCKFILE_MINOR);\n\nconst resolvePnpmPin = (settings: DeploySettings): PnpmPin => {\n const field = readPackageManifest(settings.paths.root).packageManager;\n\n if (field === null) {\n return DEFAULT_PIN;\n }\n\n if (!field.startsWith(PNPM_PREFIX)) {\n throw new Error(\n `Cannot vendor pnpm for the Flathub sandbox: \"packageManager\" is \"${field}\" but the offline install ` +\n \"resolves from a pnpm lockfile. Run `corepack use pnpm@<version>` to pin it to pnpm, or point \" +\n \"`deploy.flatpak.packageManager` at the manager whose lockfile the build should install from.\",\n );\n }\n\n const pin = pinFromGroups(PNPM_PIN_FIELD.exec(field)?.groups ?? {});\n\n if (pin === null) {\n throw new Error(\n `Cannot vendor pnpm for the Flathub sandbox: \"packageManager\" is \"${field}\", which carries no sha512 ` +\n \"integrity digest, and every source in a Flathub build has to be hash-pinned. Run \" +\n \"`corepack use pnpm@<version>` to rewrite it with its digest.\",\n );\n }\n\n if (!isSupportedPin(pin)) {\n throw new Error(\n `Cannot vendor pnpm ${pin.version} for the Flathub sandbox: the offline install runs on pnpm 10, or on ` +\n \"pnpm 11 from 11.3.0 on, where `--trust-lockfile` exists. Earlier pnpm 11 releases reach the registry \" +\n 'during the supply-chain check and the sandbox has no network. Pin \"packageManager\" to one of those.',\n );\n }\n\n return pin;\n};\n\nconst pnpmPathFor = (moduleDir: string): string => `${moduleDir}/${PNPM_DIR}`;\n\nconst pnpmSources = (pin: PnpmPin, moduleDir: string): FlatpakModule[] => [\n { type: \"archive\", url: `${PNPM_TARBALL_URL}${pin.version}.tgz`, sha512: pin.sha512, dest: PNPM_DIR },\n {\n type: \"script\",\n dest: PNPM_DIR,\n \"dest-filename\": PNPM_COMMAND,\n commands: [`exec node ${pnpmPathFor(moduleDir)}/bin/pnpm.cjs \"$@\"`],\n },\n];\n\nconst pnpmInstallCommand = (pin: PnpmPin): string =>\n pin.major === STORE_V11_MAJOR ? `${PNPM_INSTALL} ${TRUST_LOCKFILE}` : PNPM_INSTALL;\n\nconst pnpmStoreVersionFor = (pin: PnpmPin): string =>\n pin.major === STORE_V10_MAJOR ? STORE_V10 : STORE_V11;\n\nexport {\n pnpmInstallCommand,\n pnpmPathFor,\n type PnpmPin,\n pnpmSources,\n pnpmStoreVersionFor,\n resolvePnpmPin,\n};\n"]}
1
+ {"version":3,"file":"flatpak-pnpm.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-pnpm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DeploySettings } from \"../types.js\";\nimport type { FlatpakModule } from \"./flatpak-prebuilt.js\";\nimport { readPackageManifest } from \"../settings/package-manifest.js\";\n\ntype PnpmPin = {\n version: string;\n major: number;\n minor: number;\n sha512: string;\n};\n\nconst PNPM_VERSION = \"11.25.0\";\nconst PNPM_MAJOR = 11;\nconst PNPM_MINOR = 25;\n\nconst PNPM_SHA512 = \"5cde925b4f075f725eb71fbae18a42ffe784524789f19b61c731cb8721ec28aaee160e01a\" +\n \"8d5af4fedb2a42cdbf300efe23db356b0d4a17b4d63e11f8ab7c956\";\n\nconst PNPM_DIR = \"flatpak-pnpm\";\nconst PNPM_COMMAND = \"pnpm\";\nconst PNPM_PREFIX = \"pnpm@\";\nconst PNPM_TARBALL_URL = \"https://registry.npmjs.org/pnpm/-/pnpm-\";\nconst PNPM_INSTALL = \"pnpm install --offline --frozen-lockfile\";\nconst TRUST_LOCKFILE = \"--trust-lockfile\";\nconst STORE_V10 = \"v10\";\nconst STORE_V11 = \"v11\";\nconst STORE_V10_MAJOR = 10;\nconst STORE_V11_MAJOR = 11;\nconst TRUST_LOCKFILE_MINOR = 3;\n\nconst DEFAULT_PIN: PnpmPin = {\n version: PNPM_VERSION,\n major: PNPM_MAJOR,\n minor: PNPM_MINOR,\n sha512: PNPM_SHA512,\n};\n\nconst PNPM_PIN_FIELD =\n /^pnpm@(?<version>(?<major>\\d+)\\.(?<minor>\\d+)\\.\\d+)\\+sha512\\.(?<sha512>[\\da-f]{128})$/;\n\nconst pinFromGroups = (groups: Record<string, string | undefined>): PnpmPin | null => {\n const { major, minor, sha512, version } = groups;\n\n if (major === undefined || minor === undefined || sha512 === undefined || version === undefined) {\n return null;\n }\n\n return { version, major: Number(major), minor: Number(minor), sha512 };\n};\n\nconst isSupportedPin = (pin: PnpmPin): boolean =>\n pin.major === STORE_V10_MAJOR || (pin.major === STORE_V11_MAJOR && pin.minor >= TRUST_LOCKFILE_MINOR);\n\nconst resolvePnpmPin = (settings: DeploySettings): PnpmPin => {\n const field = readPackageManifest(settings.paths.root).packageManager;\n\n if (field === null) {\n return DEFAULT_PIN;\n }\n\n if (!field.startsWith(PNPM_PREFIX)) {\n throw new Error(\n `Cannot vendor pnpm for the Flathub sandbox: \"packageManager\" is \"${field}\" but the offline install ` +\n \"resolves from a pnpm lockfile. Run `corepack use pnpm@<version>` to pin it to pnpm, or point \" +\n \"`deploy.flatpak.packageManager` at the manager whose lockfile the build should install from.\",\n );\n }\n\n const pin = pinFromGroups(PNPM_PIN_FIELD.exec(field)?.groups ?? {});\n\n if (pin === null) {\n throw new Error(\n `Cannot vendor pnpm for the Flathub sandbox: \"packageManager\" is \"${field}\", which carries no sha512 ` +\n \"integrity digest, and every source in a Flathub build has to be hash-pinned. Run \" +\n \"`corepack use pnpm@<version>` to rewrite it with its digest.\",\n );\n }\n\n if (!isSupportedPin(pin)) {\n throw new Error(\n `Cannot vendor pnpm ${pin.version} for the Flathub sandbox: the offline install runs on pnpm 10, or on ` +\n \"pnpm 11 from 11.3.0 on, where `--trust-lockfile` exists. Earlier pnpm 11 releases reach the registry \" +\n 'during the supply-chain check and the sandbox has no network. Pin \"packageManager\" to one of those.',\n );\n }\n\n return pin;\n};\n\nconst pnpmPathFor = (moduleDir: string): string => `${moduleDir}/${PNPM_DIR}`;\n\nconst pnpmSources = (pin: PnpmPin, moduleDir: string): FlatpakModule[] => [\n { type: \"archive\", url: `${PNPM_TARBALL_URL}${pin.version}.tgz`, sha512: pin.sha512, dest: PNPM_DIR },\n {\n type: \"script\",\n dest: PNPM_DIR,\n \"dest-filename\": PNPM_COMMAND,\n commands: [`exec node ${pnpmPathFor(moduleDir)}/bin/pnpm.cjs \"$@\"`],\n },\n];\n\nconst pnpmInstallCommand = (pin: PnpmPin): string =>\n pin.major === STORE_V11_MAJOR ? `${PNPM_INSTALL} ${TRUST_LOCKFILE}` : PNPM_INSTALL;\n\nconst pnpmStoreVersionFor = (pin: PnpmPin): string =>\n pin.major === STORE_V10_MAJOR ? STORE_V10 : STORE_V11;\n\nexport {\n pnpmInstallCommand,\n pnpmPathFor,\n type PnpmPin,\n pnpmSources,\n pnpmStoreVersionFor,\n resolvePnpmPin,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flatpak-source.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAajE,OAAO,EAAe,KAAK,aAAa,EAA2C,MAAM,uBAAuB,CAAC;AAuOjH,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,KAAG,aAwCrD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"flatpak-source.d.ts","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-source.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAYjE,OAAO,EAAe,KAAK,aAAa,EAA2C,MAAM,uBAAuB,CAAC;AAuOjH,QAAA,MAAM,mBAAmB,GAAI,SAAS,aAAa,KAAG,aAwCrD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { isPathInside, toPosixPath } from "@gtkx/utils";
1
2
  import { existsSync, readFileSync, realpathSync } from "node:fs";
2
3
  import { posix, relative, resolve } from "node:path";
3
4
  import { LOCALE_DIRNAME } from "../../i18n/catalogs.js";
@@ -10,7 +11,6 @@ import { executableModeFor } from "../payload/copy-tree.js";
10
11
  import { iconPathFor } from "../payload/icons.js";
11
12
  import { renderLauncher } from "../payload/launcher.js";
12
13
  import { licenseDestination, nodeLicenseDestination, NOTICES_FILENAME, noticesDestination } from "../payload/stage.js";
13
- import { isInside } from "../settings/paths.js";
14
14
  import { pnpmPathFor, pnpmSources } from "./flatpak-pnpm.js";
15
15
  import { DESTINATION, postInstallCommands, validationCommands } from "./flatpak-prebuilt.js";
16
16
  import { detectPackageManager, GENERATED_SOURCES, installCommandFor, nodeExtensionPathFor, pnpmPinFor, resolveGitSource, } from "./flatpak-sources.js";
@@ -27,7 +27,7 @@ const inlineSource = (fileName, contents) => ({
27
27
  "dest-filename": fileName,
28
28
  contents,
29
29
  });
30
- const projectRelative = (settings, path) => relative(settings.paths.root, path).replaceAll("\\", "/");
30
+ const projectRelative = (settings, path) => toPosixPath(relative(settings.paths.root, path));
31
31
  const shellArgument = (value) => PLAIN_ARGUMENT.test(value) ? value : `'${value.split("'").join(QUOTE_ESCAPE)}'`;
32
32
  const pathArgument = (value) => shellArgument(value.startsWith("-") ? `./${value}` : value);
33
33
  const installCommand = (source, destination, mode) => `install -D${mode} ${pathArgument(source)} ${destination}`;
@@ -85,7 +85,7 @@ const schemaInstallCommands = (settings) => settings.paths.schemaFiles.map((file
85
85
  assertInsideProject(settings, { destination, source, resolved: file });
86
86
  return installCommand(source, destination, "m644");
87
87
  });
88
- const iconInstallCommand = (settings, source, rel) => installCommand(projectRelative(settings, source), `${DESTINATION}/share/icons/${shellArgument(rel.replaceAll("\\", "/"))}`, "m644");
88
+ const iconInstallCommand = (settings, source, rel) => installCommand(projectRelative(settings, source), `${DESTINATION}/share/icons/${shellArgument(toPosixPath(rel))}`, "m644");
89
89
  const iconInstallCommands = (settings) => {
90
90
  const source = settings.paths.applicationIcon;
91
91
  if (source.kind === "file") {
@@ -99,7 +99,7 @@ const iconInstallCommands = (settings) => {
99
99
  const assertInsideProject = (settings, installed) => {
100
100
  const { resolved } = installed;
101
101
  const target = existsSync(resolved) ? realpathSync(resolved) : resolved;
102
- if (isInside(settings.paths.root, target)) {
102
+ if (isPathInside(settings.paths.root, target)) {
103
103
  return;
104
104
  }
105
105
  throw new Error(`Cannot install "${installed.destination}" from "${installed.source}": a source-mode manifest builds from ` +
@@ -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 { 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 { isInside } from \"../settings/paths.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 relative(settings.paths.root, path).replaceAll(\"\\\\\", \"/\");\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(rel.replaceAll(\"\\\\\", \"/\"))}`,\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 (isInside(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 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 \"npx gtkx build\",\n ...runtimeInstallCommands(settings, nodeExtensionPath),\n ...metadataInstallCommands(settings),\n ...schemaInstallCommands(settings),\n ...iconInstallCommands(settings),\n ...licenseInstallCommands(settings),\n ...noticesInstallCommands(settings),\n ...extraFileInstallCommands(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 { 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 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 \"npx gtkx build\",\n ...runtimeInstallCommands(settings, nodeExtensionPath),\n ...metadataInstallCommands(settings),\n ...schemaInstallCommands(settings),\n ...iconInstallCommands(settings),\n ...licenseInstallCommands(settings),\n ...noticesInstallCommands(settings),\n ...extraFileInstallCommands(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"]}
@@ -9,7 +9,7 @@ import { pnpmInstallCommand, pnpmStoreVersionFor, resolvePnpmPin } from "./flatp
9
9
  const GENERATED_SOURCES = "generated-sources.json";
10
10
  const COMMIT_PEEL = "^{commit}";
11
11
  const FETCHABLE_URL = /^https?:\/\//;
12
- const DEFAULT_NODE_EXTENSION = "org.freedesktop.Sdk.Extension.node24";
12
+ const DEFAULT_NODE_EXTENSION = "org.freedesktop.Sdk.Extension.node26";
13
13
  const NODE_EXTENSION_PREFIX = "org.freedesktop.Sdk.Extension.";
14
14
  const SDK_EXTENSION_ROOT = "/usr/lib/sdk";
15
15
  const LOCKFILE_BY_MANAGER = {
@@ -1 +1 @@
1
- {"version":3,"file":"flatpak-sources.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-sources.ts"],"names":[],"mappings":"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","sourcesContent":["import { copyFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { gitRemoteUrl, runGit } from \"../git.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { FLATPAK_NODE_GENERATOR, GENERATOR_PNPM_OPTION } from \"../tools.js\";\nimport { pnpmInstallCommand, type PnpmPin, pnpmStoreVersionFor, resolvePnpmPin } from \"./flatpak-pnpm.js\";\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\";\ntype VendoredManager = Exclude<PackageManager, \"pnpm\">;\n\ntype GitSource = {\n type: \"git\";\n url: string;\n tag?: string;\n commit?: string;\n};\n\ntype GitRevision = {\n tag?: string;\n commit?: string;\n};\n\nconst GENERATED_SOURCES = \"generated-sources.json\";\nconst COMMIT_PEEL = \"^{commit}\";\nconst FETCHABLE_URL = /^https?:\\/\\//;\nconst DEFAULT_NODE_EXTENSION = \"org.freedesktop.Sdk.Extension.node24\";\nconst NODE_EXTENSION_PREFIX = \"org.freedesktop.Sdk.Extension.\";\nconst SDK_EXTENSION_ROOT = \"/usr/lib/sdk\";\n\nconst LOCKFILE_BY_MANAGER: Record<PackageManager, string> = {\n npm: \"package-lock.json\",\n pnpm: \"pnpm-lock.yaml\",\n yarn: \"yarn.lock\",\n};\n\nconst INSTALL_COMMAND: Record<VendoredManager, string> = {\n npm: \"npm ci --offline\",\n yarn: \"yarn install --offline\",\n};\n\nconst detectPackageManager = (settings: DeploySettings): PackageManager => {\n const configured = settings.deploy.flatpak?.packageManager;\n\n if (configured !== undefined) {\n return configured;\n }\n\n const found = ([\"pnpm\", \"yarn\", \"npm\"] as const)\n .find((manager) => existsSync(join(settings.paths.root, LOCKFILE_BY_MANAGER[manager])));\n\n if (found === undefined) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a lockfile: the sandbox installs dependencies offline. \" +\n \"Commit a package-lock.json, pnpm-lock.yaml, or yarn.lock, or set `deploy.flatpak.packageManager`.\",\n );\n }\n\n return found;\n};\n\nconst pnpmPinFor = (settings: DeploySettings, manager: PackageManager): PnpmPin | null =>\n manager === \"pnpm\" ? resolvePnpmPin(settings) : null;\n\nconst installCommandFor = (settings: DeploySettings, manager: PackageManager): string =>\n manager === \"pnpm\" ? pnpmInstallCommand(resolvePnpmPin(settings)) : INSTALL_COMMAND[manager];\n\nconst nodeExtensionFor = (settings: DeploySettings): string =>\n settings.deploy.flatpak?.nodeExtension ?? DEFAULT_NODE_EXTENSION;\n\nconst nodeExtensionPathFor = (settings: DeploySettings): string => {\n const extension = nodeExtensionFor(settings);\n\n if (!extension.startsWith(NODE_EXTENSION_PREFIX)) {\n throw new Error(\n `Cannot resolve where \"${extension}\" mounts: the sandbox installs Node SDK extensions under ` +\n `${SDK_EXTENSION_ROOT}, so \\`deploy.flatpak.nodeExtension\\` has to be an ${NODE_EXTENSION_PREFIX}* id.`,\n );\n }\n\n return `${SDK_EXTENSION_ROOT}/${extension.slice(NODE_EXTENSION_PREFIX.length)}`;\n};\n\nconst resolveSourceUrl = (settings: DeploySettings): string => {\n const url = settings.deploy.flatpak?.source?.url ?? gitRemoteUrl(settings.paths.root);\n\n if (url === null) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a public source: Flathub builds from a fetchable \" +\n \"repository, not from your working tree. Set `deploy.flatpak.source.url`.\",\n );\n }\n\n if (!FETCHABLE_URL.test(url)) {\n throw new Error(\n `Cannot build a Flathub-ready manifest from \"${url}\": Flathub's builders clone over HTTPS and have no ` +\n \"credentials, so an SSH remote never resolves there. Set `deploy.flatpak.source.url` to the \" +\n \"repository's https:// URL.\",\n );\n }\n\n return url;\n};\n\nconst commitForTag = (root: string, tag: string): string => {\n const commit = runGit(root, [\"rev-parse\", `${tag}${COMMIT_PEEL}`]);\n\n if (commit === null) {\n throw new Error(\n `Cannot pin the Flathub source to \"${tag}\": Flathub builds a fixed tree, not a movable tag, and that ` +\n `tag does not resolve in ${root}. Create or fetch it, or set \\`deploy.flatpak.source.commit\\`.`,\n );\n }\n\n return commit;\n};\n\nconst configuredRevision = (settings: DeploySettings): GitRevision | null => {\n const source = settings.deploy.flatpak?.source ?? {};\n\n if (source.commit !== undefined) {\n return { ...optional(\"tag\", source.tag), commit: source.commit };\n }\n\n if (source.tag === undefined) {\n return null;\n }\n\n return { tag: source.tag, commit: commitForTag(settings.paths.root, source.tag) };\n};\n\nconst workingTreeRevision = (settings: DeploySettings): GitRevision => {\n const root = settings.paths.root;\n\n return {\n ...optional(\"tag\", runGit(root, [\"describe\", \"--tags\", \"--exact-match\"]) ?? undefined),\n ...optional(\"commit\", runGit(root, [\"rev-parse\", \"HEAD\"]) ?? undefined),\n };\n};\n\nconst resolveGitSource = (settings: DeploySettings): GitSource => ({\n type: \"git\",\n url: resolveSourceUrl(settings),\n ...(configuredRevision(settings) ?? workingTreeRevision(settings)),\n});\n\nconst generatedSourcesPath = (settings: DeploySettings): string =>\n join(settings.paths.targets, \"flatpak\", GENERATED_SOURCES);\n\nconst isolateLockfile = (root: string, lockfile: string): string => {\n const source = join(root, lockfile);\n\n if (!existsSync(source)) {\n throw new Error(`Cannot vendor the offline sources: no ${lockfile} under ${root}`);\n }\n\n const manifest = join(dirname(source), \"package.json\");\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-lockfile-\"));\n copyFileSync(existsSync(manifest) ? manifest : join(root, \"package.json\"), join(dir, \"package.json\"));\n copyFileSync(source, join(dir, basename(lockfile)));\n\n return dir;\n};\n\nconst storeVersionArgs = (pin: PnpmPin | null): string[] =>\n pin === null ? [] : [GENERATOR_PNPM_OPTION, pnpmStoreVersionFor(pin)];\n\nconst generateNodeSources = (settings: DeploySettings, manager: PackageManager, pin: PnpmPin | null): void => {\n const lockfile = settings.deploy.flatpak?.lockfile ?? LOCKFILE_BY_MANAGER[manager];\n const output = generatedSourcesPath(settings);\n mkdirSync(dirname(output), { recursive: true });\n const isolated = isolateLockfile(settings.paths.root, lockfile);\n\n try {\n runCliTool({\n tool: FLATPAK_NODE_GENERATOR.command,\n args: [manager, join(isolated, basename(lockfile)), ...storeVersionArgs(pin), \"-o\", output],\n target: \"the offline dependency sources\",\n shouldStream: true,\n });\n } finally {\n rmSync(isolated, { recursive: true, force: true, maxRetries: 5 });\n }\n};\n\nexport {\n detectPackageManager,\n GENERATED_SOURCES,\n generateNodeSources,\n installCommandFor,\n nodeExtensionFor,\n nodeExtensionPathFor,\n type PackageManager,\n pnpmPinFor,\n resolveGitSource,\n};\n"]}
1
+ {"version":3,"file":"flatpak-sources.js","sourceRoot":"","sources":["../../../src/deploy/targets/flatpak-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiB1G,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AACnD,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,MAAM,aAAa,GAAG,cAAc,CAAC;AACrC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AACtE,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAE1C,MAAM,mBAAmB,GAAmC;IACxD,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,eAAe,GAAoC;IACrD,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,wBAAwB;CACjC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;IAE3D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAW;SAC3C,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACX,uGAAuG;YACvG,mGAAmG,CACtG,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,QAAwB,EAAE,OAAuB,EAAkB,EAAE,CACrF,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEzD,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAE,OAAuB,EAAU,EAAE,CACpF,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAEjG,MAAM,gBAAgB,GAAG,CAAC,QAAwB,EAAU,EAAE,CAC1D,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,sBAAsB,CAAC;AAErE,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAU,EAAE;IAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACX,yBAAyB,SAAS,2DAA2D;YAC7F,GAAG,kBAAkB,sDAAsD,qBAAqB,OAAO,CAC1G,CAAC;IACN,CAAC;IAED,OAAO,GAAG,kBAAkB,IAAI,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAAwB,EAAU,EAAE;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEtF,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACX,iGAAiG;YACjG,0EAA0E,CAC7E,CAAC;IACN,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACX,+CAA+C,GAAG,qDAAqD;YACvG,6FAA6F;YAC7F,4BAA4B,CAC/B,CAAC;IACN,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;IAEnE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACX,qCAAqC,GAAG,8DAA8D;YACtG,2BAA2B,IAAI,gEAAgE,CAClG,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAsB,EAAE;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;IAErD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAe,EAAE;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAEjC,OAAO;QACH,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,SAAS,CAAC;QACtF,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC;KAC1E,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,QAAwB,EAAa,EAAE,CAAC,CAAC;IAC/D,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IAC/B,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAU,EAAE,CAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE/D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,QAAgB,EAAU,EAAE;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,UAAU,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1D,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IACtG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,GAAmB,EAAY,EAAE,CACvD,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1E,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAE,OAAuB,EAAE,GAAmB,EAAQ,EAAE;IACzG,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEhE,IAAI,CAAC;QACD,UAAU,CAAC;YACP,IAAI,EAAE,sBAAsB,CAAC,OAAO;YACpC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC;YAC3F,MAAM,EAAE,gCAAgC;YACxC,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;IACP,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EAEpB,UAAU,EACV,gBAAgB,GACnB,CAAC","sourcesContent":["import { copyFileSync, existsSync, mkdirSync, mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { basename, dirname, join } from \"node:path\";\nimport type { DeploySettings } from \"../types.js\";\nimport { runCliTool } from \"../../internal/run-cli-tool.js\";\nimport { gitRemoteUrl, runGit } from \"../git.js\";\nimport { optional } from \"../nfpm/optional.js\";\nimport { FLATPAK_NODE_GENERATOR, GENERATOR_PNPM_OPTION } from \"../tools.js\";\nimport { pnpmInstallCommand, type PnpmPin, pnpmStoreVersionFor, resolvePnpmPin } from \"./flatpak-pnpm.js\";\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\";\ntype VendoredManager = Exclude<PackageManager, \"pnpm\">;\n\ntype GitSource = {\n type: \"git\";\n url: string;\n tag?: string;\n commit?: string;\n};\n\ntype GitRevision = {\n tag?: string;\n commit?: string;\n};\n\nconst GENERATED_SOURCES = \"generated-sources.json\";\nconst COMMIT_PEEL = \"^{commit}\";\nconst FETCHABLE_URL = /^https?:\\/\\//;\nconst DEFAULT_NODE_EXTENSION = \"org.freedesktop.Sdk.Extension.node26\";\nconst NODE_EXTENSION_PREFIX = \"org.freedesktop.Sdk.Extension.\";\nconst SDK_EXTENSION_ROOT = \"/usr/lib/sdk\";\n\nconst LOCKFILE_BY_MANAGER: Record<PackageManager, string> = {\n npm: \"package-lock.json\",\n pnpm: \"pnpm-lock.yaml\",\n yarn: \"yarn.lock\",\n};\n\nconst INSTALL_COMMAND: Record<VendoredManager, string> = {\n npm: \"npm ci --offline\",\n yarn: \"yarn install --offline\",\n};\n\nconst detectPackageManager = (settings: DeploySettings): PackageManager => {\n const configured = settings.deploy.flatpak?.packageManager;\n\n if (configured !== undefined) {\n return configured;\n }\n\n const found = ([\"pnpm\", \"yarn\", \"npm\"] as const)\n .find((manager) => existsSync(join(settings.paths.root, LOCKFILE_BY_MANAGER[manager])));\n\n if (found === undefined) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a lockfile: the sandbox installs dependencies offline. \" +\n \"Commit a package-lock.json, pnpm-lock.yaml, or yarn.lock, or set `deploy.flatpak.packageManager`.\",\n );\n }\n\n return found;\n};\n\nconst pnpmPinFor = (settings: DeploySettings, manager: PackageManager): PnpmPin | null =>\n manager === \"pnpm\" ? resolvePnpmPin(settings) : null;\n\nconst installCommandFor = (settings: DeploySettings, manager: PackageManager): string =>\n manager === \"pnpm\" ? pnpmInstallCommand(resolvePnpmPin(settings)) : INSTALL_COMMAND[manager];\n\nconst nodeExtensionFor = (settings: DeploySettings): string =>\n settings.deploy.flatpak?.nodeExtension ?? DEFAULT_NODE_EXTENSION;\n\nconst nodeExtensionPathFor = (settings: DeploySettings): string => {\n const extension = nodeExtensionFor(settings);\n\n if (!extension.startsWith(NODE_EXTENSION_PREFIX)) {\n throw new Error(\n `Cannot resolve where \"${extension}\" mounts: the sandbox installs Node SDK extensions under ` +\n `${SDK_EXTENSION_ROOT}, so \\`deploy.flatpak.nodeExtension\\` has to be an ${NODE_EXTENSION_PREFIX}* id.`,\n );\n }\n\n return `${SDK_EXTENSION_ROOT}/${extension.slice(NODE_EXTENSION_PREFIX.length)}`;\n};\n\nconst resolveSourceUrl = (settings: DeploySettings): string => {\n const url = settings.deploy.flatpak?.source?.url ?? gitRemoteUrl(settings.paths.root);\n\n if (url === null) {\n throw new Error(\n \"Cannot build a Flathub-ready manifest without a public source: Flathub builds from a fetchable \" +\n \"repository, not from your working tree. Set `deploy.flatpak.source.url`.\",\n );\n }\n\n if (!FETCHABLE_URL.test(url)) {\n throw new Error(\n `Cannot build a Flathub-ready manifest from \"${url}\": Flathub's builders clone over HTTPS and have no ` +\n \"credentials, so an SSH remote never resolves there. Set `deploy.flatpak.source.url` to the \" +\n \"repository's https:// URL.\",\n );\n }\n\n return url;\n};\n\nconst commitForTag = (root: string, tag: string): string => {\n const commit = runGit(root, [\"rev-parse\", `${tag}${COMMIT_PEEL}`]);\n\n if (commit === null) {\n throw new Error(\n `Cannot pin the Flathub source to \"${tag}\": Flathub builds a fixed tree, not a movable tag, and that ` +\n `tag does not resolve in ${root}. Create or fetch it, or set \\`deploy.flatpak.source.commit\\`.`,\n );\n }\n\n return commit;\n};\n\nconst configuredRevision = (settings: DeploySettings): GitRevision | null => {\n const source = settings.deploy.flatpak?.source ?? {};\n\n if (source.commit !== undefined) {\n return { ...optional(\"tag\", source.tag), commit: source.commit };\n }\n\n if (source.tag === undefined) {\n return null;\n }\n\n return { tag: source.tag, commit: commitForTag(settings.paths.root, source.tag) };\n};\n\nconst workingTreeRevision = (settings: DeploySettings): GitRevision => {\n const root = settings.paths.root;\n\n return {\n ...optional(\"tag\", runGit(root, [\"describe\", \"--tags\", \"--exact-match\"]) ?? undefined),\n ...optional(\"commit\", runGit(root, [\"rev-parse\", \"HEAD\"]) ?? undefined),\n };\n};\n\nconst resolveGitSource = (settings: DeploySettings): GitSource => ({\n type: \"git\",\n url: resolveSourceUrl(settings),\n ...(configuredRevision(settings) ?? workingTreeRevision(settings)),\n});\n\nconst generatedSourcesPath = (settings: DeploySettings): string =>\n join(settings.paths.targets, \"flatpak\", GENERATED_SOURCES);\n\nconst isolateLockfile = (root: string, lockfile: string): string => {\n const source = join(root, lockfile);\n\n if (!existsSync(source)) {\n throw new Error(`Cannot vendor the offline sources: no ${lockfile} under ${root}`);\n }\n\n const manifest = join(dirname(source), \"package.json\");\n const dir = mkdtempSync(join(tmpdir(), \"gtkx-lockfile-\"));\n copyFileSync(existsSync(manifest) ? manifest : join(root, \"package.json\"), join(dir, \"package.json\"));\n copyFileSync(source, join(dir, basename(lockfile)));\n\n return dir;\n};\n\nconst storeVersionArgs = (pin: PnpmPin | null): string[] =>\n pin === null ? [] : [GENERATOR_PNPM_OPTION, pnpmStoreVersionFor(pin)];\n\nconst generateNodeSources = (settings: DeploySettings, manager: PackageManager, pin: PnpmPin | null): void => {\n const lockfile = settings.deploy.flatpak?.lockfile ?? LOCKFILE_BY_MANAGER[manager];\n const output = generatedSourcesPath(settings);\n mkdirSync(dirname(output), { recursive: true });\n const isolated = isolateLockfile(settings.paths.root, lockfile);\n\n try {\n runCliTool({\n tool: FLATPAK_NODE_GENERATOR.command,\n args: [manager, join(isolated, basename(lockfile)), ...storeVersionArgs(pin), \"-o\", output],\n target: \"the offline dependency sources\",\n shouldStream: true,\n });\n } finally {\n rmSync(isolated, { recursive: true, force: true, maxRetries: 5 });\n }\n};\n\nexport {\n detectPackageManager,\n GENERATED_SOURCES,\n generateNodeSources,\n installCommandFor,\n nodeExtensionFor,\n nodeExtensionPathFor,\n type PackageManager,\n pnpmPinFor,\n resolveGitSource,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/deploy/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,KAAK,UAAU,GAAG;IACd,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,eAAe,EAAE,UAAU,EAAE,CAAC;CACjC,CAAC;AAKF,QAAA,MAAM,qBAAqB,yBAAyB,CAAC;AAErD,QAAA,MAAM,YAAY,EAAE,UAInB,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,UAI5B,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,UAIhB,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,UAMtB,CAAC;AAEF,QAAA,MAAM,sBAAsB,EAAE,UAI7B,CAAC;AAEF,QAAA,MAAM,2BAA2B,EAAE,UAGlC,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,UAIb,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,UAIf,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,UAIf,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,UAIZ,CAAC;AAEF,QAAA,MAAM,GAAG,EAAE,UAIV,CAAC;AA8BF,QAAA,MAAM,UAAU,GAAI,OAAO,UAAU,EAAE,KAAG,UAOzC,CAAC;AAwBF,QAAA,MAAM,WAAW,GAAI,QAAQ,UAAU,KAAG,IAIzC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,QAAQ,UAAU,KAAG,IAIjD,CAAC;AAEF,OAAO,EACH,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,KAAK,EACL,GAAG,EACH,mBAAmB,EACnB,QAAQ,GACX,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/deploy/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,KAAK,UAAU,GAAG;IACd,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,eAAe,EAAE,UAAU,EAAE,CAAC;CACjC,CAAC;AAKF,QAAA,MAAM,qBAAqB,yBAAyB,CAAC;AAErD,QAAA,MAAM,YAAY,EAAE,UAInB,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,UAI5B,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,UAIhB,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,UAMtB,CAAC;AAEF,QAAA,MAAM,sBAAsB,EAAE,UAI7B,CAAC;AAEF,QAAA,MAAM,2BAA2B,EAAE,UAGlC,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,UAIb,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,OAAO,EAAE,UAId,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,UAIf,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,UAIf,CAAC;AAEF,QAAA,MAAM,KAAK,EAAE,UAIZ,CAAC;AAEF,QAAA,MAAM,GAAG,EAAE,UAIV,CAAC;AA8BF,QAAA,MAAM,UAAU,GAAI,OAAO,UAAU,EAAE,KAAG,UAOzC,CAAC;AAsBF,QAAA,MAAM,WAAW,GAAI,QAAQ,UAAU,KAAG,IAIzC,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAI,QAAQ,UAAU,KAAG,IAIjD,CAAC;AAEF,OAAO,EACH,YAAY,EACZ,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,EACV,KAAK,EACL,GAAG,EACH,mBAAmB,EACnB,QAAQ,GACX,CAAC"}
@@ -107,10 +107,8 @@ const toolLines = (tool, hints) => [
107
107
  const missingToolsMessage = (report) => {
108
108
  const family = detectPackageFamily();
109
109
  const required = report.missingRequired.flatMap((tool) => toolLines(tool, installHints(tool.command, family)));
110
- const count = report.missingRequired.length;
111
- const plural = count === 1 ? "tool is" : "tools are";
112
110
  return [
113
- `Cannot deploy: ${String(count)} required ${plural} missing.`,
111
+ "Cannot deploy without these tools:",
114
112
  "",
115
113
  ...required,
116
114
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/deploy/tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { tryResolveExecutable, warn } from \"@gtkx/utils\";\nimport { spawnSync } from \"node:child_process\";\nimport type { DeployTool } from \"./types.js\";\nimport { detectPackageFamily, installHints } from \"./install-hints.js\";\n\ntype ToolReport = {\n missingRequired: DeployTool[];\n missingOptional: DeployTool[];\n};\n\nconst DETAIL_COLUMN = 26;\nconst FLATPAK_BUILDER_REF = \"org.flatpak.Builder\";\nconst FLATPAK_NODE_GENERATOR_COMMAND = \"flatpak-node-generator\";\nconst GENERATOR_PNPM_OPTION = \"--pnpm-store-version\";\n\nconst APPSTREAMCLI: DeployTool = {\n command: \"appstreamcli\",\n purpose: \"validates the AppStream metainfo\",\n isOptional: false,\n};\n\nconst DESKTOP_FILE_VALIDATE: DeployTool = {\n command: \"desktop-file-validate\",\n purpose: \"validates the desktop entry\",\n isOptional: false,\n};\n\nconst FILE_TOOL: DeployTool = {\n command: \"file\",\n purpose: \"required by appimagetool to inspect the payload\",\n isOptional: false,\n};\n\nconst FLATPAK: DeployTool = {\n command: \"flatpak\",\n purpose: \"installs the runtime and writes the bundle\",\n isOptional: false,\n};\n\nconst FLATPAK_BUILDER: DeployTool = {\n command: \"flatpak-builder\",\n purpose: \"builds the Flatpak\",\n isOptional: false,\n isPresent: () =>\n tryResolveExecutable(\"flatpak-builder\") !== undefined || isFlatpakRefInstalled(FLATPAK_BUILDER_REF),\n};\n\nconst FLATPAK_NODE_GENERATOR: DeployTool = {\n command: FLATPAK_NODE_GENERATOR_COMMAND,\n purpose: \"vendors the dependencies a Flathub build installs offline\",\n isOptional: false,\n};\n\nconst FLATPAK_NODE_GENERATOR_PNPM: DeployTool = {\n ...FLATPAK_NODE_GENERATOR,\n isPresent: () => hasGeneratorPnpmSupport(),\n};\n\nconst MSGFMT: DeployTool = {\n command: \"msgfmt\",\n purpose: \"compiles the gettext catalogs and localized metadata\",\n isOptional: false,\n};\n\nconst MSGGREP: DeployTool = {\n command: \"msggrep\",\n purpose: \"retains generated metadata while refreshing the catalog template\",\n isOptional: false,\n};\n\nconst MSGINIT: DeployTool = {\n command: \"msginit\",\n purpose: \"initializes newly listed gettext catalogs\",\n isOptional: false,\n};\n\nconst MSGMERGE: DeployTool = {\n command: \"msgmerge\",\n purpose: \"synchronizes translations with the catalog template\",\n isOptional: false,\n};\n\nconst XGETTEXT: DeployTool = {\n command: \"xgettext\",\n purpose: \"extracts the gettext catalog template\",\n isOptional: false,\n};\n\nconst STRIP: DeployTool = {\n command: \"strip\",\n purpose: \"would shrink the bundled Node.js by removing its symbols\",\n isOptional: true,\n};\n\nconst TAR: DeployTool = {\n command: \"tar\",\n purpose: \"unpacks the downloaded Node.js and packaging tools\",\n isOptional: false,\n};\n\nconst isFlatpakRefInstalled = (ref: string): boolean => {\n const flatpak = tryResolveExecutable(FLATPAK.command);\n\n if (flatpak === undefined) {\n return false;\n }\n\n return spawnSync(flatpak, [\"info\", ref], { stdio: \"ignore\" }).status === 0;\n};\n\nconst hasGeneratorPnpmSupport = (): boolean => {\n const generator = tryResolveExecutable(FLATPAK_NODE_GENERATOR_COMMAND);\n\n if (generator === undefined) {\n return false;\n }\n\n const help = spawnSync(generator, [\"--help\"], { encoding: \"utf8\" });\n\n return help.error === undefined && help.output.join(\"\").includes(GENERATOR_PNPM_OPTION);\n};\n\nconst isToolPresent = (tool: DeployTool): boolean =>\n tool.isPresent === undefined ? tryResolveExecutable(tool.command) !== undefined : tool.isPresent();\n\nconst uniqueTools = (tools: DeployTool[]): DeployTool[] =>\n new Map(tools.map((tool) => [tool.command, tool])).values().toArray();\n\nconst probeTools = (tools: DeployTool[]): ToolReport => {\n const missing = uniqueTools(tools).filter((tool) => !isToolPresent(tool));\n\n return {\n missingRequired: missing.filter((tool) => !tool.isOptional),\n missingOptional: missing.filter((tool) => tool.isOptional),\n };\n};\n\nconst pad = (text: string): string => text.padEnd(DETAIL_COLUMN);\n\nconst toolLines = (tool: DeployTool, hints: string[]): string[] => [\n ` ${pad(tool.command)}${tool.purpose}`,\n ...hints.map((hint) => ` ${pad(\"\")}${hint}`),\n];\n\nconst missingToolsMessage = (report: ToolReport): string => {\n const family = detectPackageFamily();\n const required = report.missingRequired.flatMap((tool) => toolLines(tool, installHints(tool.command, family)));\n const count = report.missingRequired.length;\n const plural = count === 1 ? \"tool is\" : \"tools are\";\n\n return [\n `Cannot deploy: ${String(count)} required ${plural} missing.`,\n \"\",\n ...required,\n \"\",\n \"Narrow the run with --target if you do not need every package format.\",\n ].join(\"\\n\");\n};\n\nconst assertTools = (report: ToolReport): void => {\n if (report.missingRequired.length > 0) {\n throw new Error(missingToolsMessage(report));\n }\n};\n\nconst warnMissingOptional = (report: ToolReport): void => {\n for (const tool of report.missingOptional) {\n warn(`${tool.command} is not installed: it ${tool.purpose}`);\n }\n};\n\nexport {\n APPSTREAMCLI,\n FLATPAK_NODE_GENERATOR,\n FLATPAK_NODE_GENERATOR_PNPM,\n GENERATOR_PNPM_OPTION,\n assertTools,\n DESKTOP_FILE_VALIDATE,\n FILE_TOOL,\n FLATPAK,\n FLATPAK_BUILDER,\n MSGFMT,\n MSGGREP,\n MSGINIT,\n MSGMERGE,\n probeTools,\n STRIP,\n TAR,\n warnMissingOptional,\n XGETTEXT,\n};\n"]}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/deploy/tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { tryResolveExecutable, warn } from \"@gtkx/utils\";\nimport { spawnSync } from \"node:child_process\";\nimport type { DeployTool } from \"./types.js\";\nimport { detectPackageFamily, installHints } from \"./install-hints.js\";\n\ntype ToolReport = {\n missingRequired: DeployTool[];\n missingOptional: DeployTool[];\n};\n\nconst DETAIL_COLUMN = 26;\nconst FLATPAK_BUILDER_REF = \"org.flatpak.Builder\";\nconst FLATPAK_NODE_GENERATOR_COMMAND = \"flatpak-node-generator\";\nconst GENERATOR_PNPM_OPTION = \"--pnpm-store-version\";\n\nconst APPSTREAMCLI: DeployTool = {\n command: \"appstreamcli\",\n purpose: \"validates the AppStream metainfo\",\n isOptional: false,\n};\n\nconst DESKTOP_FILE_VALIDATE: DeployTool = {\n command: \"desktop-file-validate\",\n purpose: \"validates the desktop entry\",\n isOptional: false,\n};\n\nconst FILE_TOOL: DeployTool = {\n command: \"file\",\n purpose: \"required by appimagetool to inspect the payload\",\n isOptional: false,\n};\n\nconst FLATPAK: DeployTool = {\n command: \"flatpak\",\n purpose: \"installs the runtime and writes the bundle\",\n isOptional: false,\n};\n\nconst FLATPAK_BUILDER: DeployTool = {\n command: \"flatpak-builder\",\n purpose: \"builds the Flatpak\",\n isOptional: false,\n isPresent: () =>\n tryResolveExecutable(\"flatpak-builder\") !== undefined || isFlatpakRefInstalled(FLATPAK_BUILDER_REF),\n};\n\nconst FLATPAK_NODE_GENERATOR: DeployTool = {\n command: FLATPAK_NODE_GENERATOR_COMMAND,\n purpose: \"vendors the dependencies a Flathub build installs offline\",\n isOptional: false,\n};\n\nconst FLATPAK_NODE_GENERATOR_PNPM: DeployTool = {\n ...FLATPAK_NODE_GENERATOR,\n isPresent: () => hasGeneratorPnpmSupport(),\n};\n\nconst MSGFMT: DeployTool = {\n command: \"msgfmt\",\n purpose: \"compiles the gettext catalogs and localized metadata\",\n isOptional: false,\n};\n\nconst MSGGREP: DeployTool = {\n command: \"msggrep\",\n purpose: \"retains generated metadata while refreshing the catalog template\",\n isOptional: false,\n};\n\nconst MSGINIT: DeployTool = {\n command: \"msginit\",\n purpose: \"initializes newly listed gettext catalogs\",\n isOptional: false,\n};\n\nconst MSGMERGE: DeployTool = {\n command: \"msgmerge\",\n purpose: \"synchronizes translations with the catalog template\",\n isOptional: false,\n};\n\nconst XGETTEXT: DeployTool = {\n command: \"xgettext\",\n purpose: \"extracts the gettext catalog template\",\n isOptional: false,\n};\n\nconst STRIP: DeployTool = {\n command: \"strip\",\n purpose: \"would shrink the bundled Node.js by removing its symbols\",\n isOptional: true,\n};\n\nconst TAR: DeployTool = {\n command: \"tar\",\n purpose: \"unpacks the downloaded Node.js and packaging tools\",\n isOptional: false,\n};\n\nconst isFlatpakRefInstalled = (ref: string): boolean => {\n const flatpak = tryResolveExecutable(FLATPAK.command);\n\n if (flatpak === undefined) {\n return false;\n }\n\n return spawnSync(flatpak, [\"info\", ref], { stdio: \"ignore\" }).status === 0;\n};\n\nconst hasGeneratorPnpmSupport = (): boolean => {\n const generator = tryResolveExecutable(FLATPAK_NODE_GENERATOR_COMMAND);\n\n if (generator === undefined) {\n return false;\n }\n\n const help = spawnSync(generator, [\"--help\"], { encoding: \"utf8\" });\n\n return help.error === undefined && help.output.join(\"\").includes(GENERATOR_PNPM_OPTION);\n};\n\nconst isToolPresent = (tool: DeployTool): boolean =>\n tool.isPresent === undefined ? tryResolveExecutable(tool.command) !== undefined : tool.isPresent();\n\nconst uniqueTools = (tools: DeployTool[]): DeployTool[] =>\n new Map(tools.map((tool) => [tool.command, tool])).values().toArray();\n\nconst probeTools = (tools: DeployTool[]): ToolReport => {\n const missing = uniqueTools(tools).filter((tool) => !isToolPresent(tool));\n\n return {\n missingRequired: missing.filter((tool) => !tool.isOptional),\n missingOptional: missing.filter((tool) => tool.isOptional),\n };\n};\n\nconst pad = (text: string): string => text.padEnd(DETAIL_COLUMN);\n\nconst toolLines = (tool: DeployTool, hints: string[]): string[] => [\n ` ${pad(tool.command)}${tool.purpose}`,\n ...hints.map((hint) => ` ${pad(\"\")}${hint}`),\n];\n\nconst missingToolsMessage = (report: ToolReport): string => {\n const family = detectPackageFamily();\n const required = report.missingRequired.flatMap((tool) => toolLines(tool, installHints(tool.command, family)));\n\n return [\n \"Cannot deploy without these tools:\",\n \"\",\n ...required,\n \"\",\n \"Narrow the run with --target if you do not need every package format.\",\n ].join(\"\\n\");\n};\n\nconst assertTools = (report: ToolReport): void => {\n if (report.missingRequired.length > 0) {\n throw new Error(missingToolsMessage(report));\n }\n};\n\nconst warnMissingOptional = (report: ToolReport): void => {\n for (const tool of report.missingOptional) {\n warn(`${tool.command} is not installed: it ${tool.purpose}`);\n }\n};\n\nexport {\n APPSTREAMCLI,\n FLATPAK_NODE_GENERATOR,\n FLATPAK_NODE_GENERATOR_PNPM,\n GENERATOR_PNPM_OPTION,\n assertTools,\n DESKTOP_FILE_VALIDATE,\n FILE_TOOL,\n FLATPAK,\n FLATPAK_BUILDER,\n MSGFMT,\n MSGGREP,\n MSGINIT,\n MSGMERGE,\n probeTools,\n STRIP,\n TAR,\n warnMissingOptional,\n XGETTEXT,\n};\n"]}
@@ -20,7 +20,7 @@ const main = async () => {
20
20
  }
21
21
  const { config, root } = await loadConfig(cwd, { mode: "development" });
22
22
  prepareDevLocaleDir(root, config.applicationId);
23
- prepareDevSchemaDir(root, config.future?.v2ResourceImports === true);
23
+ prepareDevSchemaDir(root);
24
24
  prepareDevIconDir(root, config.applicationId, config.applicationIcon);
25
25
  const entryPath = resolve(cwd, entryArg);
26
26
  const { defaultDevRunnerDeps } = await import("./runner-deps.js");
@@ -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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IACxE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC,CAAC;IACrE,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,EAAE,CAAC,CAAC;IACvD,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_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 { config, root } = await loadConfig(cwd, { mode: \"development\" });\n prepareDevLocaleDir(root, config.applicationId);\n prepareDevSchemaDir(root, config.future?.v2ResourceImports === true);\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());\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,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;IACxE,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,EAAE,CAAC,CAAC;IACvD,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_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 { config, root } = await loadConfig(cwd, { mode: \"development\" });\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());\n await runner.run(entryPath);\n};\n\nexport { main };\n"]}
@@ -1,3 +1,3 @@
1
- declare const prepareDevSchemaDir: (root: string, isV2ResourceImports: boolean) => string | null;
1
+ declare const prepareDevSchemaDir: (root: string) => string | null;
2
2
  export { prepareDevSchemaDir };
3
3
  //# sourceMappingURL=schema-dir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-dir.d.ts","sourceRoot":"","sources":["../../src/dev/schema-dir.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,qBAAqB,OAAO,KAAG,MAAM,GAAG,IAYlF,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"schema-dir.d.ts","sourceRoot":"","sources":["../../src/dev/schema-dir.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAWpD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,8 +1,6 @@
1
- import { resolveDataDir } from "../internal/data-dir.js";
2
1
  import { prependSchemaDir, stageAndCompileProjectSchemas } from "../settings/schema.js";
3
- const prepareDevSchemaDir = (root, isV2ResourceImports) => {
4
- const dataDir = isV2ResourceImports ? null : resolveDataDir(root);
5
- const dir = stageAndCompileProjectSchemas(root, dataDir);
2
+ const prepareDevSchemaDir = (root) => {
3
+ const dir = stageAndCompileProjectSchemas(root);
6
4
  if (dir === null) {
7
5
  return null;
8
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"schema-dir.js","sourceRoot":"","sources":["../../src/dev/schema-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,mBAA4B,EAAiB,EAAE;IACtF,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAE3F,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { resolveDataDir } from \"../internal/data-dir.js\";\nimport { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nconst prepareDevSchemaDir = (root: string, isV2ResourceImports: boolean): string | null => {\n const dataDir = isV2ResourceImports ? null : resolveDataDir(root);\n const dir = stageAndCompileProjectSchemas(root, dataDir);\n\n if (dir === null) {\n return null;\n }\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR);\n\n return dir;\n};\n\nexport { prepareDevSchemaDir };\n"]}
1
+ {"version":3,"file":"schema-dir.js","sourceRoot":"","sources":["../../src/dev/schema-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAiB,EAAE;IACxD,MAAM,GAAG,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAE3F,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nconst prepareDevSchemaDir = (root: string): string | null => {\n const dir = stageAndCompileProjectSchemas(root);\n\n if (dir === null) {\n return null;\n }\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR);\n\n return dir;\n};\n\nexport { prepareDevSchemaDir };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"AAaA,KAAK,OAAO,GAAG;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,QAAA,MAAM,cAAc,WAAW,CAAC;AAiChC,QAAA,MAAM,6BAA6B,GAAI,SAAS,cAAc,KAAG,OACA,CAAC;AAElE,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,cAAc,GAAG,IA8B9E,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,cAAc,EAAE,WAAW,MAAM,KAAG,MAAM,EAmB3E,CAAC;AAkDF,QAAA,MAAM,mBAAmB,GAAI,SAAS,cAAc,KAAG,IAqBtD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAUrD,CAAC;AAEF,OAAO,EACH,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GACtB,CAAC"}
1
+ {"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,QAAA,MAAM,cAAc,WAAW,CAAC;AAiChC,QAAA,MAAM,6BAA6B,GAAI,SAAS,cAAc,KAAG,OACA,CAAC;AAElE,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,cAAc,GAAG,IA8B9E,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,cAAc,EAAE,WAAW,MAAM,KAAG,MAAM,EAmB3E,CAAC;AAkDF,QAAA,MAAM,mBAAmB,GAAI,SAAS,cAAc,KAAG,IAqBtD,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAUrD,CAAC;AAEF,OAAO,EACH,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GACtB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { isPathInside } from "@gtkx/utils";
1
2
  import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, statSync, } from "node:fs";
2
3
  import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
4
  import { runCliTool } from "../internal/run-cli-tool.js";
@@ -130,7 +131,7 @@ const isCatalogSource = (root, path) => {
130
131
  const projectRoot = resolve(root);
131
132
  const sourcePath = isAbsolute(path) ? resolve(path) : resolve(projectRoot, path);
132
133
  const poPath = relative(join(projectRoot, PO_DIRNAME), sourcePath);
133
- if (poPath === "" || poPath === ".." || poPath.startsWith(`..${sep}`) || isAbsolute(poPath)) {
134
+ if (!isPathInside(join(projectRoot, PO_DIRNAME), sourcePath)) {
134
135
  return false;
135
136
  }
136
137
  return !poPath.includes(sep) && (poPath === LINGUAS_FILENAME || poPath.endsWith(".po"));