@gtkx/cli 1.6.0 → 2.0.0-beta.2

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 (309) hide show
  1. package/README.md +5 -5
  2. package/dist/builder.d.ts +1 -0
  3. package/dist/builder.d.ts.map +1 -1
  4. package/dist/builder.js +17 -5
  5. package/dist/builder.js.map +1 -1
  6. package/dist/cli.js +2 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/codegen/freshness.d.ts.map +1 -1
  9. package/dist/codegen/freshness.js +45 -16
  10. package/dist/codegen/freshness.js.map +1 -1
  11. package/dist/codegen/reference.d.ts.map +1 -1
  12. package/dist/codegen/reference.js +1 -7
  13. package/dist/codegen/reference.js.map +1 -1
  14. package/dist/codegen/report.d.ts.map +1 -1
  15. package/dist/codegen/report.js +5 -16
  16. package/dist/codegen/report.js.map +1 -1
  17. package/dist/codegen/run-codegen.d.ts +7 -7
  18. package/dist/codegen/run-codegen.d.ts.map +1 -1
  19. package/dist/codegen/run-codegen.js +35 -107
  20. package/dist/codegen/run-codegen.js.map +1 -1
  21. package/dist/codegen/store-resolver.d.ts +1 -2
  22. package/dist/codegen/store-resolver.d.ts.map +1 -1
  23. package/dist/codegen/store-resolver.js +10 -19
  24. package/dist/codegen/store-resolver.js.map +1 -1
  25. package/dist/commands/build.d.ts +5 -0
  26. package/dist/commands/build.d.ts.map +1 -1
  27. package/dist/commands/build.js +83 -10
  28. package/dist/commands/build.js.map +1 -1
  29. package/dist/commands/codegen.d.ts +1 -0
  30. package/dist/commands/codegen.d.ts.map +1 -1
  31. package/dist/commands/codegen.js +6 -5
  32. package/dist/commands/codegen.js.map +1 -1
  33. package/dist/commands/deploy.d.ts +1 -0
  34. package/dist/commands/deploy.d.ts.map +1 -1
  35. package/dist/commands/deploy.js +4 -2
  36. package/dist/commands/deploy.js.map +1 -1
  37. package/dist/commands/dev.d.ts +8 -0
  38. package/dist/commands/dev.d.ts.map +1 -1
  39. package/dist/commands/dev.js +19 -1
  40. package/dist/commands/dev.js.map +1 -1
  41. package/dist/commands/docs.d.ts.map +1 -1
  42. package/dist/commands/docs.js +5 -15
  43. package/dist/commands/docs.js.map +1 -1
  44. package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
  45. package/dist/deploy/freedesktop/copyright.js +2 -13
  46. package/dist/deploy/freedesktop/copyright.js.map +1 -1
  47. package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
  48. package/dist/deploy/freedesktop/metainfo.js +41 -2
  49. package/dist/deploy/freedesktop/metainfo.js.map +1 -1
  50. package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
  51. package/dist/deploy/freedesktop/xml.js +21 -25
  52. package/dist/deploy/freedesktop/xml.js.map +1 -1
  53. package/dist/deploy/nfpm/config.d.ts.map +1 -1
  54. package/dist/deploy/nfpm/config.js +5 -2
  55. package/dist/deploy/nfpm/config.js.map +1 -1
  56. package/dist/deploy/nfpm/contents.d.ts.map +1 -1
  57. package/dist/deploy/nfpm/contents.js +8 -0
  58. package/dist/deploy/nfpm/contents.js.map +1 -1
  59. package/dist/deploy/node-runtime/elf.d.ts +2 -1
  60. package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
  61. package/dist/deploy/node-runtime/elf.js +32 -5
  62. package/dist/deploy/node-runtime/elf.js.map +1 -1
  63. package/dist/deploy/node-runtime/index.d.ts +2 -1
  64. package/dist/deploy/node-runtime/index.d.ts.map +1 -1
  65. package/dist/deploy/node-runtime/index.js +73 -4
  66. package/dist/deploy/node-runtime/index.js.map +1 -1
  67. package/dist/deploy/node-runtime/license.d.ts.map +1 -1
  68. package/dist/deploy/node-runtime/license.js +2 -9
  69. package/dist/deploy/node-runtime/license.js.map +1 -1
  70. package/dist/deploy/notices/node-runtime.js +2 -2
  71. package/dist/deploy/notices/node-runtime.js.map +1 -1
  72. package/dist/deploy/notices/packages.d.ts.map +1 -1
  73. package/dist/deploy/notices/packages.js +3 -10
  74. package/dist/deploy/notices/packages.js.map +1 -1
  75. package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
  76. package/dist/deploy/payload/copy-tree.js +3 -3
  77. package/dist/deploy/payload/copy-tree.js.map +1 -1
  78. package/dist/deploy/payload/launcher.d.ts.map +1 -1
  79. package/dist/deploy/payload/launcher.js +14 -1
  80. package/dist/deploy/payload/launcher.js.map +1 -1
  81. package/dist/deploy/payload/stage.d.ts.map +1 -1
  82. package/dist/deploy/payload/stage.js +2 -4
  83. package/dist/deploy/payload/stage.js.map +1 -1
  84. package/dist/deploy/run-deploy.d.ts +1 -0
  85. package/dist/deploy/run-deploy.d.ts.map +1 -1
  86. package/dist/deploy/run-deploy.js +100 -14
  87. package/dist/deploy/run-deploy.js.map +1 -1
  88. package/dist/deploy/settings/build-manifest.d.ts +6 -1
  89. package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
  90. package/dist/deploy/settings/build-manifest.js +17 -17
  91. package/dist/deploy/settings/build-manifest.js.map +1 -1
  92. package/dist/deploy/settings/extra-files.d.ts +1 -1
  93. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  94. package/dist/deploy/settings/extra-files.js +22 -1
  95. package/dist/deploy/settings/extra-files.js.map +1 -1
  96. package/dist/deploy/settings/index.d.ts +1 -0
  97. package/dist/deploy/settings/index.d.ts.map +1 -1
  98. package/dist/deploy/settings/index.js +2 -1
  99. package/dist/deploy/settings/index.js.map +1 -1
  100. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  101. package/dist/deploy/settings/libraries.js +2 -19
  102. package/dist/deploy/settings/libraries.js.map +1 -1
  103. package/dist/deploy/settings/paths.d.ts +2 -2
  104. package/dist/deploy/settings/paths.d.ts.map +1 -1
  105. package/dist/deploy/settings/paths.js +110 -12
  106. package/dist/deploy/settings/paths.js.map +1 -1
  107. package/dist/deploy/settings/screenshots.d.ts.map +1 -1
  108. package/dist/deploy/settings/screenshots.js +6 -31
  109. package/dist/deploy/settings/screenshots.js.map +1 -1
  110. package/dist/deploy/targets/flatpak-pnpm.js +4 -4
  111. package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
  112. package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
  113. package/dist/deploy/targets/flatpak-source.js +15 -6
  114. package/dist/deploy/targets/flatpak-source.js.map +1 -1
  115. package/dist/deploy/targets/flatpak-sources.js +1 -1
  116. package/dist/deploy/targets/flatpak-sources.js.map +1 -1
  117. package/dist/deploy/types.d.ts +1 -0
  118. package/dist/deploy/types.d.ts.map +1 -1
  119. package/dist/deploy/types.js.map +1 -1
  120. package/dist/dev/headless.d.ts +3 -0
  121. package/dist/dev/headless.d.ts.map +1 -0
  122. package/dist/dev/headless.js +35 -0
  123. package/dist/dev/headless.js.map +1 -0
  124. package/dist/dev/runner-deps.js +1 -1
  125. package/dist/dev/runner-deps.js.map +1 -1
  126. package/dist/dev/runner-main.d.ts.map +1 -1
  127. package/dist/dev/runner-main.js +1 -2
  128. package/dist/dev/runner-main.js.map +1 -1
  129. package/dist/dev/schema-dir.d.ts +1 -1
  130. package/dist/dev/schema-dir.d.ts.map +1 -1
  131. package/dist/dev/schema-dir.js +2 -4
  132. package/dist/dev/schema-dir.js.map +1 -1
  133. package/dist/i18n/catalogs.d.ts.map +1 -1
  134. package/dist/i18n/catalogs.js +2 -1
  135. package/dist/i18n/catalogs.js.map +1 -1
  136. package/dist/i18n/metadata-templates.d.ts.map +1 -1
  137. package/dist/i18n/metadata-templates.js +2 -1
  138. package/dist/i18n/metadata-templates.js.map +1 -1
  139. package/dist/i18n/source-messages.d.ts +3 -21
  140. package/dist/i18n/source-messages.d.ts.map +1 -1
  141. package/dist/i18n/source-messages.js +900 -85
  142. package/dist/i18n/source-messages.js.map +1 -1
  143. package/dist/i18n/types.d.ts +6 -7
  144. package/dist/i18n/types.d.ts.map +1 -1
  145. package/dist/i18n/types.js +83 -96
  146. package/dist/i18n/types.js.map +1 -1
  147. package/dist/internal/build-manifest.d.ts +5 -2
  148. package/dist/internal/build-manifest.d.ts.map +1 -1
  149. package/dist/internal/build-manifest.js +15 -2
  150. package/dist/internal/build-manifest.js.map +1 -1
  151. package/dist/internal/build-output.d.ts +8 -0
  152. package/dist/internal/build-output.d.ts.map +1 -0
  153. package/dist/internal/build-output.js +69 -0
  154. package/dist/internal/build-output.js.map +1 -0
  155. package/dist/internal/docs-elements.js +2 -2
  156. package/dist/internal/docs-elements.js.map +1 -1
  157. package/dist/internal/entry-arg.d.ts +4 -1
  158. package/dist/internal/entry-arg.d.ts.map +1 -1
  159. package/dist/internal/entry-arg.js +7 -1
  160. package/dist/internal/entry-arg.js.map +1 -1
  161. package/dist/internal/icon-path.d.ts.map +1 -1
  162. package/dist/internal/icon-path.js +5 -16
  163. package/dist/internal/icon-path.js.map +1 -1
  164. package/dist/internal/output-directory.d.ts +15 -0
  165. package/dist/internal/output-directory.d.ts.map +1 -0
  166. package/dist/internal/output-directory.js +490 -0
  167. package/dist/internal/output-directory.js.map +1 -0
  168. package/dist/internal/prepare-project.d.ts +2 -0
  169. package/dist/internal/prepare-project.d.ts.map +1 -1
  170. package/dist/internal/prepare-project.js +3 -3
  171. package/dist/internal/prepare-project.js.map +1 -1
  172. package/dist/internal/source-imports.d.ts.map +1 -1
  173. package/dist/internal/source-imports.js +10 -41
  174. package/dist/internal/source-imports.js.map +1 -1
  175. package/dist/mcp/client.js +2 -2
  176. package/dist/mcp/client.js.map +1 -1
  177. package/dist/settings/render.d.ts +0 -1
  178. package/dist/settings/render.d.ts.map +1 -1
  179. package/dist/settings/render.js +1 -11
  180. package/dist/settings/render.js.map +1 -1
  181. package/dist/settings/schema.d.ts +2 -2
  182. package/dist/settings/schema.d.ts.map +1 -1
  183. package/dist/settings/schema.js +21 -62
  184. package/dist/settings/schema.js.map +1 -1
  185. package/dist/vite-plugins/asset-imports.d.ts +1 -2
  186. package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
  187. package/dist/vite-plugins/asset-imports.js +19 -32
  188. package/dist/vite-plugins/asset-imports.js.map +1 -1
  189. package/dist/vite-plugins/asset-specifier.d.ts +1 -3
  190. package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
  191. package/dist/vite-plugins/asset-specifier.js +1 -4
  192. package/dist/vite-plugins/asset-specifier.js.map +1 -1
  193. package/dist/vite-plugins/build-manifest.d.ts +5 -1
  194. package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
  195. package/dist/vite-plugins/build-manifest.js +2 -1
  196. package/dist/vite-plugins/build-manifest.js.map +1 -1
  197. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  198. package/dist/vite-plugins/i18n.js +59 -6
  199. package/dist/vite-plugins/i18n.js.map +1 -1
  200. package/dist/vite-plugins/index.d.ts +8 -1
  201. package/dist/vite-plugins/index.d.ts.map +1 -1
  202. package/dist/vite-plugins/index.js +8 -6
  203. package/dist/vite-plugins/index.js.map +1 -1
  204. package/dist/vite-plugins/resources.d.ts.map +1 -1
  205. package/dist/vite-plugins/resources.js +32 -97
  206. package/dist/vite-plugins/resources.js.map +1 -1
  207. package/dist/vite-plugins/self-contained.d.ts.map +1 -1
  208. package/dist/vite-plugins/self-contained.js +159 -158
  209. package/dist/vite-plugins/self-contained.js.map +1 -1
  210. package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
  211. package/dist/vite-plugins/settings-worker-env.js +2 -4
  212. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  213. package/dist/vite-plugins/settings.d.ts +1 -2
  214. package/dist/vite-plugins/settings.d.ts.map +1 -1
  215. package/dist/vite-plugins/settings.js +8 -14
  216. package/dist/vite-plugins/settings.js.map +1 -1
  217. package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
  218. package/dist/vite-plugins/undeclared-library.js +10 -13
  219. package/dist/vite-plugins/undeclared-library.js.map +1 -1
  220. package/dist/vite-plugins/worker.d.ts.map +1 -1
  221. package/dist/vite-plugins/worker.js +0 -1
  222. package/dist/vite-plugins/worker.js.map +1 -1
  223. package/package.json +21 -15
  224. package/src/builder.ts +18 -5
  225. package/src/cli.ts +3 -0
  226. package/src/codegen/freshness.ts +66 -17
  227. package/src/codegen/reference.ts +1 -8
  228. package/src/codegen/report.ts +5 -21
  229. package/src/codegen/run-codegen.ts +42 -151
  230. package/src/codegen/store-resolver.ts +10 -26
  231. package/src/commands/build.ts +13 -2
  232. package/src/commands/codegen.ts +6 -5
  233. package/src/commands/deploy.ts +4 -2
  234. package/src/commands/dev.ts +20 -1
  235. package/src/commands/docs.ts +5 -17
  236. package/src/deploy/freedesktop/copyright.ts +2 -14
  237. package/src/deploy/freedesktop/metainfo.ts +73 -21
  238. package/src/deploy/freedesktop/xml.ts +24 -32
  239. package/src/deploy/nfpm/config.ts +5 -2
  240. package/src/deploy/nfpm/contents.ts +8 -0
  241. package/src/deploy/node-runtime/elf.ts +43 -5
  242. package/src/deploy/node-runtime/index.ts +105 -5
  243. package/src/deploy/node-runtime/license.ts +2 -8
  244. package/src/deploy/notices/node-runtime.ts +2 -2
  245. package/src/deploy/notices/packages.ts +3 -11
  246. package/src/deploy/payload/copy-tree.ts +3 -4
  247. package/src/deploy/payload/launcher.ts +20 -1
  248. package/src/deploy/payload/stage.ts +3 -7
  249. package/src/deploy/run-deploy.ts +56 -16
  250. package/src/deploy/settings/build-manifest.ts +30 -17
  251. package/src/deploy/settings/extra-files.ts +26 -2
  252. package/src/deploy/settings/index.ts +3 -1
  253. package/src/deploy/settings/libraries.ts +1 -22
  254. package/src/deploy/settings/paths.ts +68 -13
  255. package/src/deploy/settings/screenshots.ts +8 -46
  256. package/src/deploy/targets/flatpak-pnpm.ts +4 -4
  257. package/src/deploy/targets/flatpak-source.ts +17 -6
  258. package/src/deploy/targets/flatpak-sources.ts +1 -1
  259. package/src/deploy/types.ts +1 -0
  260. package/src/dev/headless.ts +40 -0
  261. package/src/dev/runner-deps.ts +1 -1
  262. package/src/dev/runner-main.ts +1 -2
  263. package/src/dev/schema-dir.ts +2 -4
  264. package/src/i18n/catalogs.ts +2 -1
  265. package/src/i18n/metadata-templates.ts +2 -1
  266. package/src/i18n/source-messages.ts +1442 -262
  267. package/src/i18n/types.ts +97 -131
  268. package/src/internal/build-manifest.ts +25 -1
  269. package/src/internal/build-output.ts +99 -0
  270. package/src/internal/docs-elements.ts +2 -2
  271. package/src/internal/entry-arg.ts +8 -1
  272. package/src/internal/icon-path.ts +6 -19
  273. package/src/internal/output-directory.ts +699 -0
  274. package/src/internal/prepare-project.ts +5 -5
  275. package/src/internal/source-imports.ts +14 -50
  276. package/src/mcp/client.ts +2 -2
  277. package/src/settings/render.ts +1 -13
  278. package/src/settings/schema.ts +19 -81
  279. package/src/vite-plugins/asset-imports.ts +20 -44
  280. package/src/vite-plugins/asset-specifier.ts +0 -5
  281. package/src/vite-plugins/build-manifest.ts +7 -1
  282. package/src/vite-plugins/i18n.ts +87 -5
  283. package/src/vite-plugins/index.ts +16 -11
  284. package/src/vite-plugins/resources.ts +37 -140
  285. package/src/vite-plugins/self-contained.ts +184 -185
  286. package/src/vite-plugins/settings-worker-env.ts +2 -4
  287. package/src/vite-plugins/settings.ts +11 -20
  288. package/src/vite-plugins/undeclared-library.ts +14 -20
  289. package/src/vite-plugins/worker.ts +0 -1
  290. package/dist/i18n/binding-extractor.d.ts +0 -30
  291. package/dist/i18n/binding-extractor.d.ts.map +0 -1
  292. package/dist/i18n/binding-extractor.js +0 -1324
  293. package/dist/i18n/binding-extractor.js.map +0 -1
  294. package/dist/i18n/extractor-plugin.d.ts +0 -8
  295. package/dist/i18n/extractor-plugin.d.ts.map +0 -1
  296. package/dist/i18n/extractor-plugin.js +0 -247
  297. package/dist/i18n/extractor-plugin.js.map +0 -1
  298. package/dist/internal/data-dir.d.ts +0 -4
  299. package/dist/internal/data-dir.d.ts.map +0 -1
  300. package/dist/internal/data-dir.js +0 -52
  301. package/dist/internal/data-dir.js.map +0 -1
  302. package/dist/vite-plugins/animated.d.ts +0 -5
  303. package/dist/vite-plugins/animated.d.ts.map +0 -1
  304. package/dist/vite-plugins/animated.js +0 -325
  305. package/dist/vite-plugins/animated.js.map +0 -1
  306. package/src/i18n/binding-extractor.ts +0 -1969
  307. package/src/i18n/extractor-plugin.ts +0 -413
  308. package/src/internal/data-dir.ts +0 -70
  309. package/src/vite-plugins/animated.ts +0 -486
@@ -1,193 +1,195 @@
1
+ import { parseSync, traverse } from "@babel/core";
1
2
  import { isBuiltin } from "node:module";
2
3
  import { posix } from "node:path";
3
- import { parseSync, Visitor } from "vite";
4
4
  const REQUIRE_FACTORY = "createRequire";
5
5
  const REQUIRE_BINDING = "require";
6
6
  const RESOLVE_PROPERTY = "resolve";
7
- const MODULE_BUILTIN = "node:module";
7
+ const URL_PROPERTY = "url";
8
+ const MODULE_BUILTINS = new Set(["module", "node:module"]);
8
9
  const OUTPUT_DIRECTORY = ".";
9
10
  const RELATIVE_SPECIFIER = /^\.\.?(?:\/|$)/;
10
- const exportName = (name) => (name.type === "Identifier" ? name.name : null);
11
- const referenceName = (node) => (node.type === "Identifier" ? node.name : null);
12
- const countName = (declarations, name) => {
13
- if (name !== null) {
14
- declarations.set(name, (declarations.get(name) ?? 0) + 1);
11
+ const importedName = (path) => {
12
+ if (!path.isImportSpecifier()) {
13
+ return null;
15
14
  }
15
+ const { imported } = path.node;
16
+ return imported.type === "Identifier" ? imported.name : imported.value;
16
17
  };
17
- const boundPattern = (item) => {
18
- if (item === null) {
18
+ const importKind = (path) => {
19
+ const declaration = path.parentPath;
20
+ if (!declaration.isImportDeclaration() || !MODULE_BUILTINS.has(declaration.node.source.value)) {
19
21
  return null;
20
22
  }
21
- if (item.type === "Property") {
22
- return item.value;
23
+ if (importedName(path) === REQUIRE_FACTORY) {
24
+ return "factory";
25
+ }
26
+ return path.isImportNamespaceSpecifier() || path.isImportDefaultSpecifier() ? "module" : null;
27
+ };
28
+ const memberName = (path) => {
29
+ if (!path.isMemberExpression()) {
30
+ return null;
23
31
  }
24
- if (item.type === "RestElement") {
25
- return item.argument;
32
+ const property = path.get("property");
33
+ if (path.node.computed) {
34
+ return property.isStringLiteral() ? property.node.value : null;
26
35
  }
27
- return item.type === "TSParameterProperty" ? item.parameter : item;
36
+ return property.isIdentifier() ? property.node.name : null;
28
37
  };
29
- const countPatterns = (declarations, items) => {
30
- for (const item of items) {
31
- countPattern(declarations, boundPattern(item));
38
+ const isImportMeta = (path) => path.isMetaProperty() && path.node.meta.name === "import" && path.node.property.name === "meta";
39
+ const isDirectMetaUrl = (path) => {
40
+ if (!path.isMemberExpression() || memberName(path) !== URL_PROPERTY) {
41
+ return false;
32
42
  }
43
+ const object = path.get("object");
44
+ return isImportMeta(object);
33
45
  };
34
- const countPattern = (declarations, pattern) => {
35
- if (pattern === null) {
36
- return;
46
+ const bindingKind = (binding, seen) => {
47
+ if (seen.has(binding)) {
48
+ return null;
37
49
  }
38
- if (pattern.type === "Identifier") {
39
- countName(declarations, pattern.name);
40
- return;
50
+ const next = new Set(seen).add(binding);
51
+ const imported = importKind(binding.path);
52
+ if (imported !== null) {
53
+ return imported;
41
54
  }
42
- if (pattern.type === "AssignmentPattern") {
43
- countPattern(declarations, pattern.left);
44
- return;
55
+ if (!binding.path.isVariableDeclarator()) {
56
+ return null;
45
57
  }
46
- countPatterns(declarations, pattern.type === "ObjectPattern" ? pattern.properties : pattern.elements);
47
- };
48
- const countFunction = (declarations, node) => {
49
- countPattern(declarations, node.id);
50
- countPatterns(declarations, node.params);
51
- };
52
- const declarationVisitor = (declarations) => ({
53
- ArrowFunctionExpression: (node) => {
54
- countFunction(declarations, node);
55
- },
56
- CatchClause: (node) => {
57
- countPattern(declarations, node.param);
58
- },
59
- ClassDeclaration: (node) => {
60
- countPattern(declarations, node.id);
61
- },
62
- ClassExpression: (node) => {
63
- countPattern(declarations, node.id);
64
- },
65
- ExportSpecifier: (node) => {
66
- countName(declarations, exportName(node.local));
67
- },
68
- FunctionDeclaration: (node) => {
69
- countFunction(declarations, node);
70
- },
71
- FunctionExpression: (node) => {
72
- countFunction(declarations, node);
73
- },
74
- ImportDefaultSpecifier: (node) => {
75
- countPattern(declarations, node.local);
76
- },
77
- ImportNamespaceSpecifier: (node) => {
78
- countPattern(declarations, node.local);
79
- },
80
- ImportSpecifier: (node) => {
81
- countPattern(declarations, node.local);
82
- },
83
- VariableDeclarator: (node) => {
84
- countPattern(declarations, node.id);
85
- },
86
- });
87
- const isUnshadowed = (name, bindings) => (bindings.declarations.get(name) ?? 0) <= 1;
88
- const templateString = (node) => {
89
- const [quasi] = node.quasis;
90
- return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;
91
- };
92
- const literalString = (node) => {
93
- if (node?.type === "TemplateLiteral") {
94
- return templateString(node);
95
- }
96
- return node?.type === "Literal" && typeof node.value === "string" ? node.value : null;
97
- };
98
- const isMetaUrl = (node, bindings) => {
99
- if (node.type === "MemberExpression") {
100
- return node.object.type === "MetaProperty";
101
- }
102
- const name = referenceName(node);
103
- return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);
104
- };
105
- const hasMetaUrl = (node, bindings) => node.arguments.some((argument) => isMetaUrl(argument, bindings));
106
- const isRequireName = (name, bindings) => name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);
107
- const isFactoryName = (name, bindings) => name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);
108
- const isRequireFactory = (node, bindings) => node.type === "CallExpression" &&
109
- (isFactoryName(referenceName(node.callee), bindings) || hasMetaUrl(node, bindings));
110
- const isResolveTarget = (object, bindings) => object.type === "MetaProperty" ||
111
- isRequireName(referenceName(object), bindings) ||
112
- isRequireFactory(object, bindings);
113
- const isResolveMember = (callee, bindings) => callee.type === "MemberExpression" &&
114
- !callee.computed &&
115
- callee.property.type === "Identifier" &&
116
- callee.property.name === RESOLVE_PROPERTY &&
117
- isResolveTarget(callee.object, bindings);
118
- const isResolvingCall = (call, bindings) => hasMetaUrl(call, bindings) ||
119
- isRequireName(referenceName(call.callee), bindings) ||
120
- isRequireFactory(call.callee, bindings) ||
121
- isResolveMember(call.callee, bindings);
122
- const collectFactories = (node, bindings) => {
123
- if (node.source.value !== MODULE_BUILTIN) {
124
- return;
58
+ const initializer = binding.path.get("init");
59
+ return initializer.node === null ? null : expressionKind(initializer, next);
60
+ };
61
+ const nameKind = (scope, name, seen) => {
62
+ const binding = scope.getBinding(name);
63
+ if (binding !== undefined) {
64
+ return bindingKind(binding, seen);
125
65
  }
126
- for (const specifier of node.specifiers) {
127
- if (specifier.type === "ImportSpecifier" && exportName(specifier.imported) === REQUIRE_FACTORY) {
128
- bindings.factories.add(specifier.local.name);
129
- }
66
+ if (name === REQUIRE_FACTORY) {
67
+ return "factory";
130
68
  }
69
+ return name === REQUIRE_BINDING ? "require" : null;
131
70
  };
132
- const collectBinding = (node, bindings) => {
133
- const { id, init } = node;
134
- if (init === null || id.type !== "Identifier") {
135
- return;
71
+ const isModuleExpression = (path, seen) => {
72
+ if (path.isIdentifier()) {
73
+ return nameKind(path.scope, path.node.name, seen) === "module";
74
+ }
75
+ if (!path.isCallExpression()) {
76
+ return false;
77
+ }
78
+ const [source] = path.get("arguments");
79
+ const callee = path.get("callee");
80
+ const sourceName = source === undefined ? null : literalString(source);
81
+ return (sourceName !== null &&
82
+ MODULE_BUILTINS.has(sourceName) &&
83
+ isRequireExpression(callee, seen));
84
+ };
85
+ const isFactoryExpression = (path, seen) => {
86
+ if (path.isIdentifier()) {
87
+ return nameKind(path.scope, path.node.name, seen) === "factory";
88
+ }
89
+ if (!path.isMemberExpression() || memberName(path) !== REQUIRE_FACTORY) {
90
+ return false;
91
+ }
92
+ return isModuleExpression(path.get("object"), seen);
93
+ };
94
+ const isRequireFactoryCall = (path, seen) => {
95
+ if (!path.isCallExpression()) {
96
+ return false;
97
+ }
98
+ const callee = path.get("callee");
99
+ return isFactoryExpression(callee, seen);
100
+ };
101
+ const expressionKind = (path, seen) => {
102
+ if (isDirectMetaUrl(path)) {
103
+ return "url";
136
104
  }
137
- if (isMetaUrl(init, bindings)) {
138
- bindings.urls.add(id.name);
105
+ if (path.isIdentifier()) {
106
+ return nameKind(path.scope, path.node.name, seen);
139
107
  }
140
- if (isRequireFactory(init, bindings)) {
141
- bindings.requires.add(id.name);
108
+ if (isFactoryExpression(path, seen)) {
109
+ return "factory";
142
110
  }
111
+ if (isModuleExpression(path, seen)) {
112
+ return "module";
113
+ }
114
+ return isRequireFactoryCall(path, seen) ? "require" : null;
115
+ };
116
+ const isMetaUrl = (path) => isDirectMetaUrl(path) ||
117
+ (path.isIdentifier() && nameKind(path.scope, path.node.name, new Set()) === "url");
118
+ const isRequireExpression = (path, seen = new Set()) => isRequireFactoryCall(path, seen) ||
119
+ (path.isIdentifier() && nameKind(path.scope, path.node.name, seen) === "require");
120
+ const hasMetaUrlArgument = (path) => {
121
+ if (!path.isCallExpression()) {
122
+ return false;
123
+ }
124
+ return path.get("arguments").some((argument) => isMetaUrl(argument));
125
+ };
126
+ const isResolveMember = (path) => {
127
+ if (!path.isMemberExpression() || memberName(path) !== RESOLVE_PROPERTY) {
128
+ return false;
129
+ }
130
+ const object = path.get("object");
131
+ return isImportMeta(object) || isRequireExpression(object);
132
+ };
133
+ const isResolvingCall = (path) => {
134
+ if (!path.isCallExpression()) {
135
+ return false;
136
+ }
137
+ const callee = path.get("callee");
138
+ return hasMetaUrlArgument(path) || isRequireExpression(callee) || isResolveMember(callee);
139
+ };
140
+ const literalString = (path) => {
141
+ if (path.isStringLiteral()) {
142
+ return path.node.value;
143
+ }
144
+ if (!path.isTemplateLiteral() || path.node.expressions.length > 0) {
145
+ return null;
146
+ }
147
+ return path.node.quasis[0]?.value.cooked ?? null;
143
148
  };
144
149
  const collectSource = (scan, source) => {
145
150
  if (source !== null) {
146
151
  scan.sources.push(source);
147
152
  }
148
153
  };
149
- const collectCall = (scan, node) => {
150
- if (node.arguments.some((argument) => literalString(argument) !== null)) {
151
- scan.calls.push(node);
152
- }
153
- };
154
- const scanVisitor = (scan) => ({
155
- CallExpression: (node) => {
156
- collectCall(scan, node);
157
- },
158
- ExportAllDeclaration: (node) => {
159
- collectSource(scan, node.source.value);
160
- },
161
- ExportNamedDeclaration: (node) => {
162
- collectSource(scan, node.source?.value ?? null);
163
- },
164
- ImportDeclaration: (node) => {
165
- collectFactories(node, scan.bindings);
166
- collectSource(scan, node.source.value);
167
- },
168
- ImportExpression: (node) => {
169
- collectSource(scan, literalString(node.source));
170
- },
171
- VariableDeclarator: (node) => {
172
- collectBinding(node, scan.bindings);
173
- },
174
- });
154
+ const collectCallSources = (scan, path) => {
155
+ if (!isResolvingCall(path) || !path.isCallExpression()) {
156
+ return;
157
+ }
158
+ for (const argument of path.get("arguments")) {
159
+ collectSource(scan, literalString(argument));
160
+ }
161
+ };
175
162
  const scanChunk = (chunk) => {
176
- const scan = {
177
- bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },
178
- calls: [],
179
- sources: [],
180
- };
181
- const { program } = parseSync(chunk.fileName, chunk.code);
182
- new Visitor(declarationVisitor(scan.bindings.declarations)).visit(program);
183
- new Visitor(scanVisitor(scan)).visit(program);
163
+ const scan = { sources: [] };
164
+ const ast = parseSync(chunk.code, {
165
+ ast: true,
166
+ babelrc: false,
167
+ configFile: false,
168
+ filename: chunk.fileName,
169
+ sourceType: "module",
170
+ });
171
+ if (ast === null) {
172
+ throw new Error(`Cannot inspect ${chunk.fileName}`);
173
+ }
174
+ traverse(ast, {
175
+ CallExpression: (path) => {
176
+ collectCallSources(scan, path);
177
+ },
178
+ ExportAllDeclaration: (path) => {
179
+ collectSource(scan, path.node.source.value);
180
+ },
181
+ ExportNamedDeclaration: (path) => {
182
+ collectSource(scan, path.node.source?.value ?? null);
183
+ },
184
+ ImportDeclaration: (path) => {
185
+ collectSource(scan, path.node.source.value);
186
+ },
187
+ ImportExpression: (path) => {
188
+ collectSource(scan, literalString(path.get("source")));
189
+ },
190
+ });
184
191
  return scan;
185
192
  };
186
- const callSpecifiers = (scan) => scan.calls
187
- .filter((call) => isResolvingCall(call, scan.bindings))
188
- .flatMap((call) => call.arguments)
189
- .map((argument) => literalString(argument))
190
- .filter((specifier) => specifier !== null);
191
193
  const isReachable = (specifier, directory, emitted) => {
192
194
  if (isBuiltin(specifier)) {
193
195
  return true;
@@ -199,9 +201,8 @@ const isReachable = (specifier, directory, emitted) => {
199
201
  return target === OUTPUT_DIRECTORY || emitted.has(target);
200
202
  };
201
203
  const unreachableSpecifiers = (chunk, emitted) => {
202
- const scan = scanChunk(chunk);
203
204
  const directory = posix.dirname(chunk.fileName);
204
- return new Set([...scan.sources, ...callSpecifiers(scan)])
205
+ return new Set(scanChunk(chunk).sources)
205
206
  .values()
206
207
  .filter((specifier) => !isReachable(specifier, directory, emitted))
207
208
  .toArray()
@@ -1 +1 @@
1
- {"version":3,"file":"self-contained.js","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ESTree, Plugin, VisitorObject } from \"vite\";\nimport { isBuiltin } from \"node:module\";\nimport { posix } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\n\ntype Bindings = {\n declarations: Map<string, number>;\n factories: Set<string>;\n requires: Set<string>;\n urls: Set<string>;\n};\n\ntype Scan = {\n bindings: Bindings;\n calls: ESTree.CallExpression[];\n sources: string[];\n};\n\ntype Chunk = {\n fileName: string;\n code: string;\n};\n\ntype PatternItem =\n | ESTree.BindingPattern |\n ESTree.BindingProperty |\n ESTree.BindingRestElement |\n ESTree.FormalParameterRest |\n ESTree.TSParameterProperty |\n null;\n\nconst REQUIRE_FACTORY = \"createRequire\";\nconst REQUIRE_BINDING = \"require\";\nconst RESOLVE_PROPERTY = \"resolve\";\nconst MODULE_BUILTIN = \"node:module\";\nconst OUTPUT_DIRECTORY = \".\";\nconst RELATIVE_SPECIFIER = /^\\.\\.?(?:\\/|$)/;\n\nconst exportName = (name: ESTree.ModuleExportName): string | null => (name.type === \"Identifier\" ? name.name : null);\nconst referenceName = (node: ESTree.Argument): string | null => (node.type === \"Identifier\" ? node.name : null);\n\nconst countName = (declarations: Map<string, number>, name: string | null): void => {\n if (name !== null) {\n declarations.set(name, (declarations.get(name) ?? 0) + 1);\n }\n};\n\nconst boundPattern = (item: PatternItem): ESTree.BindingPattern | null => {\n if (item === null) {\n return null;\n }\n\n if (item.type === \"Property\") {\n return item.value;\n }\n\n if (item.type === \"RestElement\") {\n return item.argument;\n }\n\n return item.type === \"TSParameterProperty\" ? item.parameter : item;\n};\n\nconst countPatterns = (declarations: Map<string, number>, items: PatternItem[]): void => {\n for (const item of items) {\n countPattern(declarations, boundPattern(item));\n }\n};\n\nconst countPattern = (declarations: Map<string, number>, pattern: ESTree.BindingPattern | null): void => {\n if (pattern === null) {\n return;\n }\n\n if (pattern.type === \"Identifier\") {\n countName(declarations, pattern.name);\n\n return;\n }\n\n if (pattern.type === \"AssignmentPattern\") {\n countPattern(declarations, pattern.left);\n\n return;\n }\n\n countPatterns(declarations, pattern.type === \"ObjectPattern\" ? pattern.properties : pattern.elements);\n};\n\nconst countFunction = (\n declarations: Map<string, number>,\n node: ESTree.ArrowFunctionExpression | ESTree.Function,\n): void => {\n countPattern(declarations, node.id);\n countPatterns(declarations, node.params);\n};\n\nconst declarationVisitor = (declarations: Map<string, number>): VisitorObject => ({\n ArrowFunctionExpression: (node) => {\n countFunction(declarations, node);\n },\n CatchClause: (node) => {\n countPattern(declarations, node.param);\n },\n ClassDeclaration: (node) => {\n countPattern(declarations, node.id);\n },\n ClassExpression: (node) => {\n countPattern(declarations, node.id);\n },\n ExportSpecifier: (node) => {\n countName(declarations, exportName(node.local));\n },\n FunctionDeclaration: (node) => {\n countFunction(declarations, node);\n },\n FunctionExpression: (node) => {\n countFunction(declarations, node);\n },\n ImportDefaultSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n ImportNamespaceSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n ImportSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n VariableDeclarator: (node) => {\n countPattern(declarations, node.id);\n },\n});\n\nconst isUnshadowed = (name: string, bindings: Bindings): boolean => (bindings.declarations.get(name) ?? 0) <= 1;\n\nconst templateString = (node: ESTree.TemplateLiteral): string | null => {\n const [quasi] = node.quasis;\n\n return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;\n};\n\nconst literalString = (node: ESTree.Argument | null): string | null => {\n if (node?.type === \"TemplateLiteral\") {\n return templateString(node);\n }\n\n return node?.type === \"Literal\" && typeof node.value === \"string\" ? node.value : null;\n};\n\nconst isMetaUrl = (node: ESTree.Argument, bindings: Bindings): boolean => {\n if (node.type === \"MemberExpression\") {\n return node.object.type === \"MetaProperty\";\n }\n\n const name = referenceName(node);\n\n return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);\n};\n\nconst hasMetaUrl = (node: ESTree.CallExpression, bindings: Bindings): boolean =>\n node.arguments.some((argument) => isMetaUrl(argument, bindings));\n\nconst isRequireName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);\n\nconst isFactoryName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);\n\nconst isRequireFactory = (node: ESTree.Argument, bindings: Bindings): boolean =>\n node.type === \"CallExpression\" &&\n (isFactoryName(referenceName(node.callee), bindings) || hasMetaUrl(node, bindings));\n\nconst isResolveTarget = (object: ESTree.Expression, bindings: Bindings): boolean =>\n object.type === \"MetaProperty\" ||\n isRequireName(referenceName(object), bindings) ||\n isRequireFactory(object, bindings);\n\nconst isResolveMember = (callee: ESTree.Expression, bindings: Bindings): boolean =>\n callee.type === \"MemberExpression\" &&\n !callee.computed &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === RESOLVE_PROPERTY &&\n isResolveTarget(callee.object, bindings);\n\nconst isResolvingCall = (call: ESTree.CallExpression, bindings: Bindings): boolean =>\n hasMetaUrl(call, bindings) ||\n isRequireName(referenceName(call.callee), bindings) ||\n isRequireFactory(call.callee, bindings) ||\n isResolveMember(call.callee, bindings);\n\nconst collectFactories = (node: ESTree.ImportDeclaration, bindings: Bindings): void => {\n if (node.source.value !== MODULE_BUILTIN) {\n return;\n }\n\n for (const specifier of node.specifiers) {\n if (specifier.type === \"ImportSpecifier\" && exportName(specifier.imported) === REQUIRE_FACTORY) {\n bindings.factories.add(specifier.local.name);\n }\n }\n};\n\nconst collectBinding = (node: ESTree.VariableDeclarator, bindings: Bindings): void => {\n const { id, init } = node;\n\n if (init === null || id.type !== \"Identifier\") {\n return;\n }\n\n if (isMetaUrl(init, bindings)) {\n bindings.urls.add(id.name);\n }\n\n if (isRequireFactory(init, bindings)) {\n bindings.requires.add(id.name);\n }\n};\n\nconst collectSource = (scan: Scan, source: string | null): void => {\n if (source !== null) {\n scan.sources.push(source);\n }\n};\n\nconst collectCall = (scan: Scan, node: ESTree.CallExpression): void => {\n if (node.arguments.some((argument) => literalString(argument) !== null)) {\n scan.calls.push(node);\n }\n};\n\nconst scanVisitor = (scan: Scan): VisitorObject => ({\n CallExpression: (node) => {\n collectCall(scan, node);\n },\n ExportAllDeclaration: (node) => {\n collectSource(scan, node.source.value);\n },\n ExportNamedDeclaration: (node) => {\n collectSource(scan, node.source?.value ?? null);\n },\n ImportDeclaration: (node) => {\n collectFactories(node, scan.bindings);\n collectSource(scan, node.source.value);\n },\n ImportExpression: (node) => {\n collectSource(scan, literalString(node.source));\n },\n VariableDeclarator: (node) => {\n collectBinding(node, scan.bindings);\n },\n});\n\nconst scanChunk = (chunk: Chunk): Scan => {\n const scan: Scan = {\n bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },\n calls: [],\n sources: [],\n };\n\n const { program } = parseSync(chunk.fileName, chunk.code);\n new Visitor(declarationVisitor(scan.bindings.declarations)).visit(program);\n new Visitor(scanVisitor(scan)).visit(program);\n\n return scan;\n};\n\nconst callSpecifiers = (scan: Scan): string[] =>\n scan.calls\n .filter((call) => isResolvingCall(call, scan.bindings))\n .flatMap((call) => call.arguments)\n .map((argument) => literalString(argument))\n .filter((specifier) => specifier !== null);\n\nconst isReachable = (specifier: string, directory: string, emitted: Set<string>): boolean => {\n if (isBuiltin(specifier)) {\n return true;\n }\n\n if (!RELATIVE_SPECIFIER.test(specifier)) {\n return false;\n }\n\n const target = posix.normalize(posix.join(directory, specifier));\n\n return target === OUTPUT_DIRECTORY || emitted.has(target);\n};\n\nconst unreachableSpecifiers = (chunk: Chunk, emitted: Set<string>): string[] => {\n const scan = scanChunk(chunk);\n const directory = posix.dirname(chunk.fileName);\n\n return new Set([...scan.sources, ...callSpecifiers(scan)])\n .values()\n .filter((specifier) => !isReachable(specifier, directory, emitted))\n .toArray()\n .toSorted((left, right) => left.localeCompare(right));\n};\n\nconst assertSelfContained = (chunk: Chunk, emitted: Set<string>): void => {\n const specifiers = unreachableSpecifiers(chunk, emitted);\n\n if (specifiers.length === 0) {\n return;\n }\n\n throw new Error(\n [\n `${chunk.fileName} resolves ${specifiers.join(\", \")} at runtime,`,\n \"so the built app only starts where that resolution succeeds from wherever it was installed.\",\n \"The artifact may resolve node: builtins and the files the build emits beside it, nothing else:\",\n \"bundle the module, emit the file, or read the data at build time.\",\n ].join(\" \"),\n );\n};\n\nfunction gtkxSelfContained(): Plugin {\n return {\n name: \"gtkx:self-contained\",\n apply: \"build\",\n\n generateBundle(_options, bundle) {\n const emitted = new Set(Object.keys(bundle));\n\n for (const output of Object.values(bundle)) {\n if (output.type === \"chunk\") {\n assertSelfContained({ fileName: output.fileName, code: output.code }, emitted);\n }\n }\n },\n };\n}\n\nexport { gtkxSelfContained };\n"]}
1
+ {"version":3,"file":"self-contained.js","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"vite\";\nimport { type NodePath, parseSync, type Scope, traverse } from \"@babel/core\";\nimport { isBuiltin } from \"node:module\";\nimport { posix } from \"node:path\";\n\ntype BindingKind = \"factory\" | \"module\" | \"require\" | \"url\";\n\ntype ResolvedBinding = NonNullable<ReturnType<Scope[\"getBinding\"]>>;\n\ntype Scan = {\n sources: string[];\n};\n\ntype Chunk = {\n fileName: string;\n code: string;\n};\n\nconst REQUIRE_FACTORY = \"createRequire\";\nconst REQUIRE_BINDING = \"require\";\nconst RESOLVE_PROPERTY = \"resolve\";\nconst URL_PROPERTY = \"url\";\nconst MODULE_BUILTINS = new Set([\"module\", \"node:module\"]);\nconst OUTPUT_DIRECTORY = \".\";\nconst RELATIVE_SPECIFIER = /^\\.\\.?(?:\\/|$)/;\n\nconst importedName = (path: NodePath): string | null => {\n if (!path.isImportSpecifier()) {\n return null;\n }\n\n const { imported } = path.node;\n\n return imported.type === \"Identifier\" ? imported.name : imported.value;\n};\n\nconst importKind = (path: NodePath): BindingKind | null => {\n const declaration = path.parentPath;\n\n if (!declaration.isImportDeclaration() || !MODULE_BUILTINS.has(declaration.node.source.value)) {\n return null;\n }\n\n if (importedName(path) === REQUIRE_FACTORY) {\n return \"factory\";\n }\n\n return path.isImportNamespaceSpecifier() || path.isImportDefaultSpecifier() ? \"module\" : null;\n};\n\nconst memberName = (path: NodePath): string | null => {\n if (!path.isMemberExpression()) {\n return null;\n }\n\n const property = path.get(\"property\");\n\n if (path.node.computed) {\n return property.isStringLiteral() ? property.node.value : null;\n }\n\n return property.isIdentifier() ? property.node.name : null;\n};\n\nconst isImportMeta = (path: NodePath): boolean =>\n path.isMetaProperty() && path.node.meta.name === \"import\" && path.node.property.name === \"meta\";\n\nconst isDirectMetaUrl = (path: NodePath): boolean => {\n if (!path.isMemberExpression() || memberName(path) !== URL_PROPERTY) {\n return false;\n }\n\n const object = path.get(\"object\");\n\n return isImportMeta(object);\n};\n\nconst bindingKind = (binding: ResolvedBinding, seen: Set<ResolvedBinding>): BindingKind | null => {\n if (seen.has(binding)) {\n return null;\n }\n\n const next = new Set(seen).add(binding);\n const imported = importKind(binding.path);\n\n if (imported !== null) {\n return imported;\n }\n\n if (!binding.path.isVariableDeclarator()) {\n return null;\n }\n\n const initializer = binding.path.get(\"init\");\n\n return initializer.node === null ? null : expressionKind(initializer, next);\n};\n\nconst nameKind = (scope: Scope, name: string, seen: Set<ResolvedBinding>): BindingKind | null => {\n const binding = scope.getBinding(name);\n\n if (binding !== undefined) {\n return bindingKind(binding, seen);\n }\n\n if (name === REQUIRE_FACTORY) {\n return \"factory\";\n }\n\n return name === REQUIRE_BINDING ? \"require\" : null;\n};\n\nconst isModuleExpression = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {\n if (path.isIdentifier()) {\n return nameKind(path.scope, path.node.name, seen) === \"module\";\n }\n\n if (!path.isCallExpression()) {\n return false;\n }\n\n const [source] = path.get(\"arguments\");\n const callee = path.get(\"callee\");\n const sourceName = source === undefined ? null : literalString(source);\n\n return (\n sourceName !== null &&\n MODULE_BUILTINS.has(sourceName) &&\n isRequireExpression(callee, seen)\n );\n};\n\nconst isFactoryExpression = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {\n if (path.isIdentifier()) {\n return nameKind(path.scope, path.node.name, seen) === \"factory\";\n }\n\n if (!path.isMemberExpression() || memberName(path) !== REQUIRE_FACTORY) {\n return false;\n }\n\n return isModuleExpression(path.get(\"object\"), seen);\n};\n\nconst isRequireFactoryCall = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {\n if (!path.isCallExpression()) {\n return false;\n }\n\n const callee = path.get(\"callee\");\n\n return isFactoryExpression(callee, seen);\n};\n\nconst expressionKind = (path: NodePath, seen: Set<ResolvedBinding>): BindingKind | null => {\n if (isDirectMetaUrl(path)) {\n return \"url\";\n }\n\n if (path.isIdentifier()) {\n return nameKind(path.scope, path.node.name, seen);\n }\n\n if (isFactoryExpression(path, seen)) {\n return \"factory\";\n }\n\n if (isModuleExpression(path, seen)) {\n return \"module\";\n }\n\n return isRequireFactoryCall(path, seen) ? \"require\" : null;\n};\n\nconst isMetaUrl = (path: NodePath): boolean =>\n isDirectMetaUrl(path) ||\n (path.isIdentifier() && nameKind(path.scope, path.node.name, new Set()) === \"url\");\n\nconst isRequireExpression = (path: NodePath, seen: Set<ResolvedBinding> = new Set()): boolean =>\n isRequireFactoryCall(path, seen) ||\n (path.isIdentifier() && nameKind(path.scope, path.node.name, seen) === \"require\");\n\nconst hasMetaUrlArgument = (path: NodePath): boolean => {\n if (!path.isCallExpression()) {\n return false;\n }\n\n return path.get(\"arguments\").some((argument) => isMetaUrl(argument));\n};\n\nconst isResolveMember = (path: NodePath): boolean => {\n if (!path.isMemberExpression() || memberName(path) !== RESOLVE_PROPERTY) {\n return false;\n }\n\n const object = path.get(\"object\");\n\n return isImportMeta(object) || isRequireExpression(object);\n};\n\nconst isResolvingCall = (path: NodePath): boolean => {\n if (!path.isCallExpression()) {\n return false;\n }\n\n const callee = path.get(\"callee\");\n\n return hasMetaUrlArgument(path) || isRequireExpression(callee) || isResolveMember(callee);\n};\n\nconst literalString = (path: NodePath): string | null => {\n if (path.isStringLiteral()) {\n return path.node.value;\n }\n\n if (!path.isTemplateLiteral() || path.node.expressions.length > 0) {\n return null;\n }\n\n return path.node.quasis[0]?.value.cooked ?? null;\n};\n\nconst collectSource = (scan: Scan, source: string | null): void => {\n if (source !== null) {\n scan.sources.push(source);\n }\n};\n\nconst collectCallSources = (scan: Scan, path: NodePath): void => {\n if (!isResolvingCall(path) || !path.isCallExpression()) {\n return;\n }\n\n for (const argument of path.get(\"arguments\")) {\n collectSource(scan, literalString(argument));\n }\n};\n\nconst scanChunk = (chunk: Chunk): Scan => {\n const scan: Scan = { sources: [] };\n const ast = parseSync(chunk.code, {\n ast: true,\n babelrc: false,\n configFile: false,\n filename: chunk.fileName,\n sourceType: \"module\",\n });\n\n if (ast === null) {\n throw new Error(`Cannot inspect ${chunk.fileName}`);\n }\n\n traverse(ast, {\n CallExpression: (path) => {\n collectCallSources(scan, path);\n },\n ExportAllDeclaration: (path) => {\n collectSource(scan, path.node.source.value);\n },\n ExportNamedDeclaration: (path) => {\n collectSource(scan, path.node.source?.value ?? null);\n },\n ImportDeclaration: (path) => {\n collectSource(scan, path.node.source.value);\n },\n ImportExpression: (path) => {\n collectSource(scan, literalString(path.get(\"source\")));\n },\n });\n\n return scan;\n};\n\nconst isReachable = (specifier: string, directory: string, emitted: Set<string>): boolean => {\n if (isBuiltin(specifier)) {\n return true;\n }\n\n if (!RELATIVE_SPECIFIER.test(specifier)) {\n return false;\n }\n\n const target = posix.normalize(posix.join(directory, specifier));\n\n return target === OUTPUT_DIRECTORY || emitted.has(target);\n};\n\nconst unreachableSpecifiers = (chunk: Chunk, emitted: Set<string>): string[] => {\n const directory = posix.dirname(chunk.fileName);\n\n return new Set(scanChunk(chunk).sources)\n .values()\n .filter((specifier) => !isReachable(specifier, directory, emitted))\n .toArray()\n .toSorted((left, right) => left.localeCompare(right));\n};\n\nconst assertSelfContained = (chunk: Chunk, emitted: Set<string>): void => {\n const specifiers = unreachableSpecifiers(chunk, emitted);\n\n if (specifiers.length === 0) {\n return;\n }\n\n throw new Error(\n [\n `${chunk.fileName} resolves ${specifiers.join(\", \")} at runtime,`,\n \"so the built app only starts where that resolution succeeds from wherever it was installed.\",\n \"The artifact may resolve node: builtins and the files the build emits beside it, nothing else:\",\n \"bundle the module, emit the file, or read the data at build time.\",\n ].join(\" \"),\n );\n};\n\nfunction gtkxSelfContained(): Plugin {\n return {\n name: \"gtkx:self-contained\",\n apply: \"build\",\n\n generateBundle(_options, bundle) {\n const emitted = new Set(Object.keys(bundle));\n\n for (const output of Object.values(bundle)) {\n if (output.type === \"chunk\") {\n assertSelfContained({ fileName: output.fileName, code: output.code }, emitted);\n }\n }\n },\n };\n}\n\nexport { gtkxSelfContained };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-worker-env.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,iBAAS,qBAAqB,IAAI,MAAM,CAyBvC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"settings-worker-env.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,iBAAS,qBAAqB,IAAI,MAAM,CAwBvC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -1,5 +1,4 @@
1
- import { createConfigLoader, resolveFuture } from "@gtkx/config/internal";
2
- import { resolveDataDir } from "../internal/data-dir.js";
1
+ import { createConfigLoader } from "@gtkx/config/internal";
3
2
  import { prependSchemaDir, stageAndCompileProjectSchemas } from "../settings/schema.js";
4
3
  function gtkxSettingsWorkerEnv() {
5
4
  const loadConfig = createConfigLoader();
@@ -8,8 +7,7 @@ function gtkxSettingsWorkerEnv() {
8
7
  enforce: "pre",
9
8
  async config(config) {
10
9
  const loaded = await loadConfig.load(config.root ?? process.cwd());
11
- const dataDir = resolveFuture(loaded.config.future).isResourceImported ? null : resolveDataDir(loaded.root);
12
- const dir = stageAndCompileProjectSchemas(loaded.root, dataDir);
10
+ const dir = stageAndCompileProjectSchemas(loaded.root);
13
11
  if (dir === null) {
14
12
  return;
15
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"settings-worker-env.js","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,SAAS,qBAAqB;IAC1B,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,OAAO;QACH,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,MAAM,CAAC,MAAkB;YAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5G,MAAM,GAAG,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;YAEtC,OAAO;gBACH,IAAI,EAAE;oBACF,GAAG,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;iBACzF;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { UserConfig } from \"vite\";\nimport type { Plugin } from \"vitest/config\";\nimport { createConfigLoader, resolveFuture } from \"@gtkx/config/internal\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nfunction gtkxSettingsWorkerEnv(): Plugin {\n const loadConfig = createConfigLoader();\n\n return {\n name: \"gtkx:settings-worker-env\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n const dataDir = resolveFuture(loaded.config.future).isResourceImported ? null : resolveDataDir(loaded.root);\n const dir = stageAndCompileProjectSchemas(loaded.root, dataDir);\n\n if (dir === null) {\n return;\n }\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n\n return {\n test: {\n env: { GSETTINGS_SCHEMA_DIR: prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR) },\n },\n };\n },\n };\n}\n\nexport { gtkxSettingsWorkerEnv };\n"]}
1
+ {"version":3,"file":"settings-worker-env.js","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,SAAS,qBAAqB;IAC1B,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,OAAO;QACH,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,MAAM,CAAC,MAAkB;YAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;YAEtC,OAAO;gBACH,IAAI,EAAE;oBACF,GAAG,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;iBACzF;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { UserConfig } from \"vite\";\nimport type { Plugin } from \"vitest/config\";\nimport { createConfigLoader } from \"@gtkx/config/internal\";\nimport { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nfunction gtkxSettingsWorkerEnv(): Plugin {\n const loadConfig = createConfigLoader();\n\n return {\n name: \"gtkx:settings-worker-env\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n const dir = stageAndCompileProjectSchemas(loaded.root);\n\n if (dir === null) {\n return;\n }\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n\n return {\n test: {\n env: { GSETTINGS_SCHEMA_DIR: prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR) },\n },\n };\n },\n };\n}\n\nexport { gtkxSettingsWorkerEnv };\n"]}
@@ -1,6 +1,5 @@
1
- import type { ConfigLoader } from "@gtkx/config";
2
1
  import type { Plugin } from "vite";
3
2
  import type { BuildManifestCollector } from "../internal/build-manifest.js";
4
- declare function gtkxSettings(loadConfig: ConfigLoader, buildManifest?: BuildManifestCollector): Plugin;
3
+ declare function gtkxSettings(buildManifest?: BuildManifestCollector): Plugin;
5
4
  export { gtkxSettings };
6
5
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAc,MAAM,EAA6C,MAAM,MAAM,CAAC;AAK1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAkQ5E,iBAAS,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,sBAAsB,GAAG,MAAM,CA6D9F;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,MAAM,EAAiC,MAAM,MAAM,CAAC;AAI9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AA+P5E,iBAAS,YAAY,CAAC,aAAa,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAyDpE;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,9 +1,7 @@
1
- import { resolveFuture } from "@gtkx/config/internal";
2
1
  import { error, errorMessage, info, sortStrings } from "@gtkx/utils";
3
2
  import { readFileSync } from "node:fs";
4
3
  import { basename, join } from "node:path";
5
4
  import { prependBanner } from "../internal/banner.js";
6
- import { resolveDataDir } from "../internal/data-dir.js";
7
5
  import { createRetainedStagingDir, withStagingDir } from "../internal/staging-dir.js";
8
6
  import { compileSchemas } from "../settings/compile.js";
9
7
  import { parseSchemaXml, SchemaParseError } from "../settings/parser.js";
@@ -44,7 +42,7 @@ const syncSchemaEnv = (state) => {
44
42
  return;
45
43
  }
46
44
  try {
47
- emitSchemaEnv(state.rootDir, state.dataDir, state.isV2ResourceImports);
45
+ emitSchemaEnv(state.rootDir);
48
46
  }
49
47
  catch (error_) {
50
48
  error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);
@@ -64,11 +62,6 @@ const scheduleSchemaEnvSync = (state) => {
64
62
  syncSchemaEnv(state);
65
63
  }, SCHEMA_ENV_DEBOUNCE_MS);
66
64
  };
67
- const applyUserConfig = async (state, config, loadConfig) => {
68
- const loaded = await loadConfig.load(config.root ?? process.cwd());
69
- state.isV2ResourceImports = resolveFuture(loaded.config.future).isResourceImported;
70
- state.dataDir = state.isV2ResourceImports ? null : resolveDataDir(loaded.root);
71
- };
72
65
  const applyResolvedConfig = (state, config) => {
73
66
  state.isBuild = config.command === "build";
74
67
  state.rootDir = typeof config.root === "string" ? config.root : null;
@@ -117,6 +110,11 @@ const compileBuildSchemas = (schemaFiles) => withStagingDir("schemas-build", (di
117
110
  compileSchemas(dir);
118
111
  return readFileSync(join(dir, "gschemas.compiled"));
119
112
  });
113
+ const rejectLegacySchemaSpecifier = (source) => {
114
+ if (source.startsWith("#data/")) {
115
+ throw new Error(`${JSON.stringify(source)} uses the legacy #data schema form`);
116
+ }
117
+ };
120
118
  const buildSchemaPaths = (rootDir, schemaFiles) => schemaFiles.map((filePath) => {
121
119
  const rel = projectRelativeSchemaPath(rootDir, filePath);
122
120
  if (rel === null) {
@@ -180,12 +178,10 @@ const watchSchemaFiles = (state, server) => {
180
178
  server.watcher.on("add", refreshSchemaTypes);
181
179
  server.watcher.on("unlink", refreshSchemaTypes);
182
180
  };
183
- function gtkxSettings(loadConfig, buildManifest) {
181
+ function gtkxSettings(buildManifest) {
184
182
  const state = {
185
183
  schemaDir: createRetainedStagingDir(SCHEMA_STAGING_PREFIX),
186
184
  rootDir: null,
187
- dataDir: null,
188
- isV2ResourceImports: false,
189
185
  isBuild: false,
190
186
  schemaEnvTimer: null,
191
187
  trackedSchemas: new Map(),
@@ -194,9 +190,6 @@ function gtkxSettings(loadConfig, buildManifest) {
194
190
  return {
195
191
  name: "gtkx:settings",
196
192
  enforce: "pre",
197
- async config(config) {
198
- await applyUserConfig(state, config, loadConfig);
199
- },
200
193
  configResolved(config) {
201
194
  applyResolvedConfig(state, config);
202
195
  },
@@ -213,6 +206,7 @@ function gtkxSettings(loadConfig, buildManifest) {
213
206
  if (!source.endsWith(SCHEMA_SUFFIX)) {
214
207
  return;
215
208
  }
209
+ rejectLegacySchemaSpecifier(source);
216
210
  return resolveToVirtual(this, { source, importer, options });
217
211
  },
218
212
  load(id) {