@gtkx/cli 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/codegen/freshness.d.ts.map +1 -1
  4. package/dist/codegen/freshness.js +2 -1
  5. package/dist/codegen/freshness.js.map +1 -1
  6. package/dist/codegen/reference.d.ts +17 -0
  7. package/dist/codegen/reference.d.ts.map +1 -0
  8. package/dist/codegen/reference.js +37 -0
  9. package/dist/codegen/reference.js.map +1 -0
  10. package/dist/codegen/report.d.ts.map +1 -1
  11. package/dist/codegen/report.js +17 -3
  12. package/dist/codegen/report.js.map +1 -1
  13. package/dist/codegen/run-codegen.d.ts +2 -0
  14. package/dist/codegen/run-codegen.d.ts.map +1 -1
  15. package/dist/codegen/run-codegen.js +63 -21
  16. package/dist/codegen/run-codegen.js.map +1 -1
  17. package/dist/commands/docs.d.ts.map +1 -1
  18. package/dist/commands/docs.js +10 -16
  19. package/dist/commands/docs.js.map +1 -1
  20. package/dist/commands/mcp.d.ts +13 -0
  21. package/dist/commands/mcp.d.ts.map +1 -0
  22. package/dist/commands/mcp.js +68 -0
  23. package/dist/commands/mcp.js.map +1 -0
  24. package/dist/deploy/notices/gtkx.js +1 -1
  25. package/dist/deploy/notices/gtkx.js.map +1 -1
  26. package/dist/deploy/notices/libraries.d.ts.map +1 -1
  27. package/dist/deploy/notices/libraries.js +2 -1
  28. package/dist/deploy/notices/libraries.js.map +1 -1
  29. package/dist/deploy/settings/libraries.d.ts.map +1 -1
  30. package/dist/deploy/settings/libraries.js +7 -9
  31. package/dist/deploy/settings/libraries.js.map +1 -1
  32. package/dist/deploy/tools.d.ts.map +1 -1
  33. package/dist/deploy/tools.js +1 -3
  34. package/dist/deploy/tools.js.map +1 -1
  35. package/dist/dev/runner-main.d.ts.map +1 -1
  36. package/dist/dev/runner-main.js +2 -1
  37. package/dist/dev/runner-main.js.map +1 -1
  38. package/dist/internal/agent-rules.d.ts +7 -0
  39. package/dist/internal/agent-rules.d.ts.map +1 -0
  40. package/dist/internal/agent-rules.js +106 -0
  41. package/dist/internal/agent-rules.js.map +1 -0
  42. package/dist/internal/docs-elements.d.ts +8 -0
  43. package/dist/internal/docs-elements.d.ts.map +1 -0
  44. package/dist/internal/docs-elements.js +12 -0
  45. package/dist/internal/docs-elements.js.map +1 -0
  46. package/dist/internal/source-imports.d.ts.map +1 -1
  47. package/dist/internal/source-imports.js +2 -3
  48. package/dist/internal/source-imports.js.map +1 -1
  49. package/dist/mcp/client-config.d.ts +22 -0
  50. package/dist/mcp/client-config.d.ts.map +1 -0
  51. package/dist/mcp/client-config.js +94 -0
  52. package/dist/mcp/client-config.js.map +1 -0
  53. package/dist/vite-plugins/animated.d.ts +5 -0
  54. package/dist/vite-plugins/animated.d.ts.map +1 -0
  55. package/dist/vite-plugins/animated.js +325 -0
  56. package/dist/vite-plugins/animated.js.map +1 -0
  57. package/dist/vite-plugins/asset-imports.js +2 -2
  58. package/dist/vite-plugins/asset-imports.js.map +1 -1
  59. package/dist/vite-plugins/index.d.ts.map +1 -1
  60. package/dist/vite-plugins/index.js +2 -0
  61. package/dist/vite-plugins/index.js.map +1 -1
  62. package/dist/vite-plugins/resources.js +2 -2
  63. package/dist/vite-plugins/resources.js.map +1 -1
  64. package/dist/vite-plugins/settings-worker-env.js +2 -2
  65. package/dist/vite-plugins/settings-worker-env.js.map +1 -1
  66. package/dist/vite-plugins/settings.d.ts.map +1 -1
  67. package/dist/vite-plugins/settings.js +2 -1
  68. package/dist/vite-plugins/settings.js.map +1 -1
  69. package/package.json +10 -9
  70. package/src/cli.ts +5 -0
  71. package/src/codegen/freshness.ts +2 -1
  72. package/src/codegen/reference.ts +59 -0
  73. package/src/codegen/report.ts +18 -3
  74. package/src/codegen/run-codegen.ts +81 -24
  75. package/src/commands/docs.ts +10 -28
  76. package/src/commands/mcp.ts +81 -0
  77. package/src/deploy/notices/gtkx.ts +1 -1
  78. package/src/deploy/notices/libraries.ts +2 -1
  79. package/src/deploy/settings/libraries.ts +7 -10
  80. package/src/deploy/tools.ts +1 -3
  81. package/src/dev/runner-main.ts +2 -1
  82. package/src/internal/agent-rules.ts +135 -0
  83. package/src/internal/docs-elements.ts +21 -0
  84. package/src/internal/source-imports.ts +3 -3
  85. package/src/mcp/client-config.ts +130 -0
  86. package/src/vite-plugins/animated.ts +486 -0
  87. package/src/vite-plugins/asset-imports.ts +2 -2
  88. package/src/vite-plugins/index.ts +2 -0
  89. package/src/vite-plugins/resources.ts +2 -2
  90. package/src/vite-plugins/settings-worker-env.ts +2 -2
  91. package/src/vite-plugins/settings.ts +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAgCA,QAAA,MAAM,GAAG;;;;;;;;;;EA4BP,CAAC;AAoBH,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { info } from "@gtkx/utils";
2
+ import { defineCommand } from "citty";
3
+ import { cwdArg, resolveCwd } from "../internal/entry-arg.js";
4
+ import { CLIENTS, isClientName, writeClientConfig } from "../mcp/client-config.js";
5
+ const clientList = CLIENTS.map((client) => client.name).join(", ");
6
+ const init = defineCommand({
7
+ meta: {
8
+ name: "init",
9
+ description: "Write the gtkx MCP server into an editor's configuration file",
10
+ },
11
+ args: {
12
+ client: {
13
+ type: "string",
14
+ description: `Which editor to configure: one of ${clientList}`,
15
+ required: true,
16
+ },
17
+ ...cwdArg,
18
+ },
19
+ run({ args }) {
20
+ const cwd = resolveCwd(args);
21
+ const name = args.client;
22
+ if (!isClientName(name)) {
23
+ throw new Error(`Unknown --client "${name}". Pass one of ${clientList}.`);
24
+ }
25
+ report(name, writeClientConfig(cwd, name));
26
+ },
27
+ });
28
+ const mcp = defineCommand({
29
+ meta: {
30
+ name: "mcp",
31
+ description: "Run the MCP server that exposes this project's running app and generated API reference",
32
+ },
33
+ args: {
34
+ tools: {
35
+ type: "string",
36
+ description: "Comma-separated tool name patterns to register, `*` matching any run of characters and a " +
37
+ "leading `!` excluding. Overrides `mcp.tools` in gtkx.config.ts",
38
+ },
39
+ "read-only": {
40
+ type: "boolean",
41
+ description: "Register only the tools that read state, leaving out the ones that drive the app",
42
+ },
43
+ ...cwdArg,
44
+ },
45
+ subCommands: { init },
46
+ async run({ args }) {
47
+ const { runMcpServer } = await import("@gtkx/mcp/server");
48
+ await runMcpServer({
49
+ cwd: resolveCwd(args),
50
+ ...(args.tools !== undefined && { tools: splitPatterns(args.tools) }),
51
+ ...(args["read-only"] !== undefined && { isReadOnly: args["read-only"] }),
52
+ });
53
+ },
54
+ });
55
+ const splitPatterns = (value) => value.split(",").map((pattern) => pattern.trim()).filter((pattern) => pattern.length > 0);
56
+ const report = (name, result) => {
57
+ if (result.kind === "manual") {
58
+ info(`mcp: ${name} keeps its servers in ${result.path}, which is outside this project. Add:`);
59
+ for (const line of result.snippet.split("\n")) {
60
+ info(`mcp: ${line}`);
61
+ }
62
+ return;
63
+ }
64
+ info(`mcp: ${result.isCreated ? "created" : "updated"} ${result.path} for ${name}`);
65
+ info("mcp: restart the editor for it to pick the server up");
66
+ };
67
+ export { mcp };
68
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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","sourcesContent":["import { info } from \"@gtkx/utils\";\nimport { defineCommand } from \"citty\";\nimport { cwdArg, resolveCwd } from \"../internal/entry-arg.js\";\nimport { type ClientName, type ClientResult, CLIENTS, isClientName, writeClientConfig } from \"../mcp/client-config.js\";\n\nconst clientList = CLIENTS.map((client) => client.name).join(\", \");\n\nconst init = defineCommand({\n meta: {\n name: \"init\",\n description: \"Write the gtkx MCP server into an editor's configuration file\",\n },\n args: {\n client: {\n type: \"string\",\n description: `Which editor to configure: one of ${clientList}`,\n required: true,\n },\n ...cwdArg,\n },\n run({ args }) {\n const cwd = resolveCwd(args);\n const name = args.client;\n\n if (!isClientName(name)) {\n throw new Error(`Unknown --client \"${name}\". Pass one of ${clientList}.`);\n }\n\n report(name, writeClientConfig(cwd, name));\n },\n});\n\nconst mcp = defineCommand({\n meta: {\n name: \"mcp\",\n description: \"Run the MCP server that exposes this project's running app and generated API reference\",\n },\n args: {\n tools: {\n type: \"string\",\n description:\n \"Comma-separated tool name patterns to register, `*` matching any run of characters and a \" +\n \"leading `!` excluding. Overrides `mcp.tools` in gtkx.config.ts\",\n },\n \"read-only\": {\n type: \"boolean\",\n description: \"Register only the tools that read state, leaving out the ones that drive the app\",\n },\n ...cwdArg,\n },\n subCommands: { init },\n async run({ args }) {\n const { runMcpServer } = await import(\"@gtkx/mcp/server\");\n\n await runMcpServer({\n cwd: resolveCwd(args),\n ...(args.tools !== undefined && { tools: splitPatterns(args.tools) }),\n ...(args[\"read-only\"] !== undefined && { isReadOnly: args[\"read-only\"] }),\n });\n },\n});\n\nconst splitPatterns = (value: string): string[] =>\n value.split(\",\").map((pattern) => pattern.trim()).filter((pattern) => pattern.length > 0);\n\nconst report = (name: ClientName, result: ClientResult): void => {\n if (result.kind === \"manual\") {\n info(`mcp: ${name} keeps its servers in ${result.path}, which is outside this project. Add:`);\n\n for (const line of result.snippet.split(\"\\n\")) {\n info(`mcp: ${line}`);\n }\n\n return;\n }\n\n info(`mcp: ${result.isCreated ? \"created\" : \"updated\"} ${result.path} for ${name}`);\n info(\"mcp: restart the editor for it to pick the server up\");\n};\n\nexport { mcp };\n"]}
@@ -29,7 +29,7 @@ const summaryFor = (settings, packages) => {
29
29
  "Section 3.2(a) asks that whoever receives an executable form be told how to obtain the source code,",
30
30
  "which is what the source pointer below is for: it leads to the release these files were built from.",
31
31
  `The addon also statically links Rust crates GTKX did not write, so ${lib}/${NATIVE_FILENAME} is not`,
32
- `${LICENSE_NAME} alone. The second notice below names the licenses those crates carry; it does not`,
32
+ `${LICENSE_NAME} alone. The crates notice below names the licenses those crates carry; it does not`,
33
33
  `reproduce their texts, and ${CRATES_MANIFEST} in the source pointed at records which crates went in`,
34
34
  "and at which versions.",
35
35
  ...modulesLine(packages),
@@ -1 +1 @@
1
- {"version":3,"file":"gtkx.js","sourceRoot":"","sources":["../../../src/deploy/notices/gtkx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport type { DeploySettings, Notice, NoticeSection } from \"../types.js\";\nimport type { BundledPackage } from \"./packages.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\n\nconst TITLE = \"GTKX\";\nconst SCOPE = \"@gtkx/\";\nconst LICENSE_NAME = \"MPL-2.0\";\nconst LICENSE_URL = \"https://www.mozilla.org/MPL/2.0/\";\nconst REPOSITORY_URL = \"https://github.com/gtkx-org/gtkx\";\nconst NATIVE_FILENAME = \"gtkx.node\";\nconst CRATES_SUBJECT = \"Rust crates linked into the GTKX native addon\";\nconst CRATES_LICENSE = \"MIT and Apache-2.0 and ISC and Unicode-3.0\";\nconst CRATES_MANIFEST = \"packages/native/Cargo.toml\";\n\nconst isGtkxPackage = (entry: BundledPackage): boolean => entry.name.startsWith(SCOPE);\n\nconst getVersion = (packages: BundledPackage[]): string | null =>\n packages.map((entry) => entry.version).find((version) => version !== null) ?? null;\n\nconst getRepository = (packages: BundledPackage[]): string =>\n packages.map((entry) => entry.source).find((source) => source !== null) ?? REPOSITORY_URL;\n\nconst sourceFor = (packages: BundledPackage[]): string => {\n const repository = getRepository(packages);\n const version = getVersion(packages);\n\n return version === null ? repository : `${repository}/tree/v${version}`;\n};\n\nconst cratesSourceFor = (packages: BundledPackage[]): string => `${sourceFor(packages)}/${CRATES_MANIFEST}`;\n\nconst modulesLine = (packages: BundledPackage[]): string[] =>\n packages.length === 0 ? [] : [`Modules: ${sortStrings(packages.map((entry) => entry.name)).join(\", \")}.`];\n\nconst summaryFor = (settings: DeploySettings, packages: BundledPackage[]): string[] => {\n const lib = `lib/${settings.binaryName}`;\n\n return [\n \"GTKX is the framework this application is built on. Its JavaScript is compiled into\",\n `${lib}/${BUNDLE_FILENAME}, and its native addon is ${lib}/${NATIVE_FILENAME}.`,\n `The ${LICENSE_NAME} notice below covers the code GTKX wrote, all of which is in both files, and the`,\n `Mozilla Public License 2.0 is published at ${LICENSE_URL}.`,\n \"Section 3.2(a) asks that whoever receives an executable form be told how to obtain the source code,\",\n \"which is what the source pointer below is for: it leads to the release these files were built from.\",\n `The addon also statically links Rust crates GTKX did not write, so ${lib}/${NATIVE_FILENAME} is not`,\n `${LICENSE_NAME} alone. The second notice below names the licenses those crates carry; it does not`,\n `reproduce their texts, and ${CRATES_MANIFEST} in the source pointed at records which crates went in`,\n \"and at which versions.\",\n ...modulesLine(packages),\n ];\n};\n\nconst getText = (packages: BundledPackage[]): string | null =>\n packages.map((entry) => entry.text).find((text) => text !== null) ?? null;\n\nconst getCopyright = (packages: BundledPackage[]): string[] =>\n sortStrings(new Set(packages.flatMap((entry) => entry.copyright)));\n\nconst subjectFor = (packages: BundledPackage[]): string => {\n const version = getVersion(packages);\n\n return version === null ? TITLE : `${TITLE} ${version}`;\n};\n\nconst cratesNotice = (packages: BundledPackage[]): Notice => ({\n subject: CRATES_SUBJECT,\n license: CRATES_LICENSE,\n source: cratesSourceFor(packages),\n copyright: [],\n text: null,\n});\n\nconst gtkxNotices = (settings: DeploySettings, packages: BundledPackage[]): NoticeSection => {\n const own = packages.filter((entry) => isGtkxPackage(entry));\n const lib = `lib/${settings.binaryName}`;\n\n return {\n title: TITLE,\n files: [`${lib}/${NATIVE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`],\n summary: summaryFor(settings, own),\n notices: [{\n subject: subjectFor(own),\n license: LICENSE_NAME,\n source: sourceFor(own),\n copyright: getCopyright(own),\n text: getText(own),\n }, cratesNotice(own)],\n };\n};\n\nexport { gtkxNotices, isGtkxPackage };\n"]}
1
+ {"version":3,"file":"gtkx.js","sourceRoot":"","sources":["../../../src/deploy/notices/gtkx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,MAAM,KAAK,GAAG,MAAM,CAAC;AACrB,MAAM,KAAK,GAAG,QAAQ,CAAC;AACvB,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,WAAW,GAAG,kCAAkC,CAAC;AACvD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAC1D,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,cAAc,GAAG,+CAA+C,CAAC;AACvE,MAAM,cAAc,GAAG,4CAA4C,CAAC;AACpE,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,KAAqB,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvF,MAAM,UAAU,GAAG,CAAC,QAA0B,EAAiB,EAAE,CAC7D,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AAEvF,MAAM,aAAa,GAAG,CAAC,QAA0B,EAAU,EAAE,CACzD,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,cAAc,CAAC;AAE9F,MAAM,SAAS,GAAG,CAAC,QAA0B,EAAU,EAAE;IACrD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,UAAU,OAAO,EAAE,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAA0B,EAAU,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;AAE5G,MAAM,WAAW,GAAG,CAAC,QAA0B,EAAY,EAAE,CACzD,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE9G,MAAM,UAAU,GAAG,CAAC,QAAwB,EAAE,QAA0B,EAAY,EAAE;IAClF,MAAM,GAAG,GAAG,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAC;IAEzC,OAAO;QACH,qFAAqF;QACrF,GAAG,GAAG,IAAI,eAAe,6BAA6B,GAAG,IAAI,eAAe,GAAG;QAC/E,OAAO,YAAY,kFAAkF;QACrG,8CAA8C,WAAW,GAAG;QAC5D,qGAAqG;QACrG,qGAAqG;QACrG,sEAAsE,GAAG,IAAI,eAAe,SAAS;QACrG,GAAG,YAAY,oFAAoF;QACnG,8BAA8B,eAAe,wDAAwD;QACrG,wBAAwB;QACxB,GAAG,WAAW,CAAC,QAAQ,CAAC;KAC3B,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,QAA0B,EAAiB,EAAE,CAC1D,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AAE9E,MAAM,YAAY,GAAG,CAAC,QAA0B,EAAY,EAAE,CAC1D,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,UAAU,GAAG,CAAC,QAA0B,EAAU,EAAE;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,EAAE,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,QAA0B,EAAU,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC;IACjC,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,QAAwB,EAAE,QAA0B,EAAiB,EAAE;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAC;IAEzC,OAAO;QACH,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,CAAC,GAAG,GAAG,IAAI,eAAe,EAAE,EAAE,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;QACjE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;QAClC,OAAO,EAAE,CAAC;gBACN,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC;gBACxB,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;gBACtB,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC;gBAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;aACrB,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;KACxB,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { sortStrings } from \"@gtkx/utils\";\nimport type { DeploySettings, Notice, NoticeSection } from \"../types.js\";\nimport type { BundledPackage } from \"./packages.js\";\nimport { BUNDLE_FILENAME } from \"../../vite-plugins/esm-extension.js\";\n\nconst TITLE = \"GTKX\";\nconst SCOPE = \"@gtkx/\";\nconst LICENSE_NAME = \"MPL-2.0\";\nconst LICENSE_URL = \"https://www.mozilla.org/MPL/2.0/\";\nconst REPOSITORY_URL = \"https://github.com/gtkx-org/gtkx\";\nconst NATIVE_FILENAME = \"gtkx.node\";\nconst CRATES_SUBJECT = \"Rust crates linked into the GTKX native addon\";\nconst CRATES_LICENSE = \"MIT and Apache-2.0 and ISC and Unicode-3.0\";\nconst CRATES_MANIFEST = \"packages/native/Cargo.toml\";\n\nconst isGtkxPackage = (entry: BundledPackage): boolean => entry.name.startsWith(SCOPE);\n\nconst getVersion = (packages: BundledPackage[]): string | null =>\n packages.map((entry) => entry.version).find((version) => version !== null) ?? null;\n\nconst getRepository = (packages: BundledPackage[]): string =>\n packages.map((entry) => entry.source).find((source) => source !== null) ?? REPOSITORY_URL;\n\nconst sourceFor = (packages: BundledPackage[]): string => {\n const repository = getRepository(packages);\n const version = getVersion(packages);\n\n return version === null ? repository : `${repository}/tree/v${version}`;\n};\n\nconst cratesSourceFor = (packages: BundledPackage[]): string => `${sourceFor(packages)}/${CRATES_MANIFEST}`;\n\nconst modulesLine = (packages: BundledPackage[]): string[] =>\n packages.length === 0 ? [] : [`Modules: ${sortStrings(packages.map((entry) => entry.name)).join(\", \")}.`];\n\nconst summaryFor = (settings: DeploySettings, packages: BundledPackage[]): string[] => {\n const lib = `lib/${settings.binaryName}`;\n\n return [\n \"GTKX is the framework this application is built on. Its JavaScript is compiled into\",\n `${lib}/${BUNDLE_FILENAME}, and its native addon is ${lib}/${NATIVE_FILENAME}.`,\n `The ${LICENSE_NAME} notice below covers the code GTKX wrote, all of which is in both files, and the`,\n `Mozilla Public License 2.0 is published at ${LICENSE_URL}.`,\n \"Section 3.2(a) asks that whoever receives an executable form be told how to obtain the source code,\",\n \"which is what the source pointer below is for: it leads to the release these files were built from.\",\n `The addon also statically links Rust crates GTKX did not write, so ${lib}/${NATIVE_FILENAME} is not`,\n `${LICENSE_NAME} alone. The crates notice below names the licenses those crates carry; it does not`,\n `reproduce their texts, and ${CRATES_MANIFEST} in the source pointed at records which crates went in`,\n \"and at which versions.\",\n ...modulesLine(packages),\n ];\n};\n\nconst getText = (packages: BundledPackage[]): string | null =>\n packages.map((entry) => entry.text).find((text) => text !== null) ?? null;\n\nconst getCopyright = (packages: BundledPackage[]): string[] =>\n sortStrings(new Set(packages.flatMap((entry) => entry.copyright)));\n\nconst subjectFor = (packages: BundledPackage[]): string => {\n const version = getVersion(packages);\n\n return version === null ? TITLE : `${TITLE} ${version}`;\n};\n\nconst cratesNotice = (packages: BundledPackage[]): Notice => ({\n subject: CRATES_SUBJECT,\n license: CRATES_LICENSE,\n source: cratesSourceFor(packages),\n copyright: [],\n text: null,\n});\n\nconst gtkxNotices = (settings: DeploySettings, packages: BundledPackage[]): NoticeSection => {\n const own = packages.filter((entry) => isGtkxPackage(entry));\n const lib = `lib/${settings.binaryName}`;\n\n return {\n title: TITLE,\n files: [`${lib}/${NATIVE_FILENAME}`, `${lib}/${BUNDLE_FILENAME}`],\n summary: summaryFor(settings, own),\n notices: [{\n subject: subjectFor(own),\n license: LICENSE_NAME,\n source: sourceFor(own),\n copyright: getCopyright(own),\n text: getText(own),\n }, cratesNotice(own)],\n };\n};\n\nexport { gtkxNotices, isGtkxPackage };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/notices/libraries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,MAAM,aAAa,CAAC;AAoEzE,QAAA,MAAM,cAAc,GAAI,UAAU,cAAc,KAAG,aASlD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/notices/libraries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,MAAM,aAAa,CAAC;AAqEzE,QAAA,MAAM,cAAc,GAAI,UAAU,cAAc,KAAG,aASlD,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -25,7 +25,8 @@ const SUMMARY = [
25
25
  "their own terms; this package does not distribute them at all.",
26
26
  "The GTKX native addon does link GLib, GObject and GIO dynamically against the copies already installed",
27
27
  "on the system, which makes the addon a work that uses those libraries, and section 6 of the LGPL asks",
28
- "such a work to carry three things. This is the notice it asks for. The license itself is published at",
28
+ "such a work to carry a notice, the license, and the copyright notices. This is the notice it asks for,",
29
+ "and the license itself is published at",
29
30
  `${LGPL_URL},`,
30
31
  "and the copyright notice of each library is published with its sources, at the address listed beside",
31
32
  "it below. Linking against an installed shared library is the mechanism section 6(b) allows, so the",
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/notices/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,MAAM,KAAK,GAAG,oBAAoB,CAAC;AACnC,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,MAAM,QAAQ,GAAG,yDAAyD,CAAC;AAE3E,MAAM,IAAI,GAAoB;IAC1B,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,GAAG,SAAS,OAAO;CAC9B,CAAC;AAEF,MAAM,eAAe,GAAoC;IACrD,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,aAAa,EAAE;IACpF,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE;IACxE,aAAa,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,gBAAgB,EAAE;IAChG,YAAY,EAAE;QACV,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,oCAAoC;QAC7C,MAAM,EAAE,kCAAkC;KAC7C;CACJ,CAAC;AAEF,MAAM,OAAO,GAAG;IACZ,+FAA+F;IAC/F,uGAAuG;IACvG,uGAAuG;IACvG,gEAAgE;IAChE,wGAAwG;IACxG,uGAAuG;IACvG,uGAAuG;IACvG,GAAG,QAAQ,GAAG;IACd,sGAAsG;IACtG,oGAAoG;IACpG,oEAAoE;CACvE,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAwB,EAAU,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,QAAwB,EAAqB,EAAE,CACnE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AAE7G,MAAM,cAAc,GAAG,CAAC,QAAwB,EAAY,EAAE,CAC1D,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC;AAEnF,MAAM,YAAY,GAAG,CAAC,QAAwB,EAAY,EAAE;IACxD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAwB,EAAiB,EAAE;IAC/D,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAExF,OAAO;QACH,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACrE,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport type { DeploySettings, Notice, NoticeSection } from \"../types.js\";\n\ntype PlatformLibrary = {\n subject: string;\n license: string;\n source: string;\n};\n\nconst TITLE = \"Platform libraries\";\nconst GNOME_URL = \"https://gitlab.gnome.org/GNOME\";\nconst LGPL = \"LGPL-2.1-or-later\";\nconst LGPL_URL = \"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html\";\n\nconst GLIB: PlatformLibrary = {\n subject: \"GLib, GObject and GIO\",\n license: LGPL,\n source: `${GNOME_URL}/glib`,\n};\n\nconst KNOWN_LIBRARIES: Record<string, PlatformLibrary> = {\n \"Adw-1\": { subject: \"libadwaita\", license: LGPL, source: `${GNOME_URL}/libadwaita` },\n \"Gtk-4.0\": { subject: \"GTK\", license: LGPL, source: `${GNOME_URL}/gtk` },\n \"GtkSource-5\": { subject: \"GtkSourceView\", license: LGPL, source: `${GNOME_URL}/gtksourceview` },\n \"WebKit-6.0\": {\n subject: \"WebKitGTK\",\n license: \"LGPL-2.1-or-later and BSD-2-Clause\",\n source: \"https://github.com/WebKit/WebKit\",\n },\n};\n\nconst SUMMARY = [\n \"Not one of the libraries below is included in this package. GTKX reaches them through GObject\",\n \"introspection, so they are resolved when the application runs: from the host system for a deb, an rpm\",\n \"or an AppImage, and from the GNOME runtime for a flatpak. Your platform distributes them to you under\",\n \"their own terms; this package does not distribute them at all.\",\n \"The GTKX native addon does link GLib, GObject and GIO dynamically against the copies already installed\",\n \"on the system, which makes the addon a work that uses those libraries, and section 6 of the LGPL asks\",\n \"such a work to carry three things. This is the notice it asks for. The license itself is published at\",\n `${LGPL_URL},`,\n \"and the copyright notice of each library is published with its sources, at the address listed beside\",\n \"it below. Linking against an installed shared library is the mechanism section 6(b) allows, so the\",\n \"source of the libraries does not have to travel with this package.\",\n];\n\nconst noticeFor = (library: PlatformLibrary): Notice => ({\n subject: library.subject,\n license: library.license,\n source: library.source,\n copyright: [],\n text: null,\n});\n\nconst knownLibraries = (settings: DeploySettings): PlatformLibrary[] =>\n settings.libraries.map((library) => KNOWN_LIBRARIES[library]).filter((library) => library !== undefined);\n\nconst otherLibraries = (settings: DeploySettings): string[] =>\n settings.libraries.filter((library) => KNOWN_LIBRARIES[library] === undefined);\n\nconst otherSummary = (settings: DeploySettings): string[] => {\n const others = otherLibraries(settings);\n\n if (others.length === 0) {\n return [];\n }\n\n return [`This application also declares ${others.join(\", \")}, resolved from the platform the same way.`];\n};\n\nconst libraryNotices = (settings: DeploySettings): NoticeSection => {\n const libraries = sortStringsBy(knownLibraries(settings), (library) => library.subject);\n\n return {\n title: TITLE,\n files: [],\n summary: [...SUMMARY, ...otherSummary(settings)],\n notices: [GLIB, ...libraries].map((library) => noticeFor(library)),\n };\n};\n\nexport { libraryNotices };\n"]}
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/notices/libraries.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport type { DeploySettings, Notice, NoticeSection } from \"../types.js\";\n\ntype PlatformLibrary = {\n subject: string;\n license: string;\n source: string;\n};\n\nconst TITLE = \"Platform libraries\";\nconst GNOME_URL = \"https://gitlab.gnome.org/GNOME\";\nconst LGPL = \"LGPL-2.1-or-later\";\nconst LGPL_URL = \"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html\";\n\nconst GLIB: PlatformLibrary = {\n subject: \"GLib, GObject and GIO\",\n license: LGPL,\n source: `${GNOME_URL}/glib`,\n};\n\nconst KNOWN_LIBRARIES: Record<string, PlatformLibrary> = {\n \"Adw-1\": { subject: \"libadwaita\", license: LGPL, source: `${GNOME_URL}/libadwaita` },\n \"Gtk-4.0\": { subject: \"GTK\", license: LGPL, source: `${GNOME_URL}/gtk` },\n \"GtkSource-5\": { subject: \"GtkSourceView\", license: LGPL, source: `${GNOME_URL}/gtksourceview` },\n \"WebKit-6.0\": {\n subject: \"WebKitGTK\",\n license: \"LGPL-2.1-or-later and BSD-2-Clause\",\n source: \"https://github.com/WebKit/WebKit\",\n },\n};\n\nconst SUMMARY = [\n \"Not one of the libraries below is included in this package. GTKX reaches them through GObject\",\n \"introspection, so they are resolved when the application runs: from the host system for a deb, an rpm\",\n \"or an AppImage, and from the GNOME runtime for a flatpak. Your platform distributes them to you under\",\n \"their own terms; this package does not distribute them at all.\",\n \"The GTKX native addon does link GLib, GObject and GIO dynamically against the copies already installed\",\n \"on the system, which makes the addon a work that uses those libraries, and section 6 of the LGPL asks\",\n \"such a work to carry a notice, the license, and the copyright notices. This is the notice it asks for,\",\n \"and the license itself is published at\",\n `${LGPL_URL},`,\n \"and the copyright notice of each library is published with its sources, at the address listed beside\",\n \"it below. Linking against an installed shared library is the mechanism section 6(b) allows, so the\",\n \"source of the libraries does not have to travel with this package.\",\n];\n\nconst noticeFor = (library: PlatformLibrary): Notice => ({\n subject: library.subject,\n license: library.license,\n source: library.source,\n copyright: [],\n text: null,\n});\n\nconst knownLibraries = (settings: DeploySettings): PlatformLibrary[] =>\n settings.libraries.map((library) => KNOWN_LIBRARIES[library]).filter((library) => library !== undefined);\n\nconst otherLibraries = (settings: DeploySettings): string[] =>\n settings.libraries.filter((library) => KNOWN_LIBRARIES[library] === undefined);\n\nconst otherSummary = (settings: DeploySettings): string[] => {\n const others = otherLibraries(settings);\n\n if (others.length === 0) {\n return [];\n }\n\n return [`This application also declares ${others.join(\", \")}, resolved from the platform the same way.`];\n};\n\nconst libraryNotices = (settings: DeploySettings): NoticeSection => {\n const libraries = sortStringsBy(knownLibraries(settings), (library) => library.subject);\n\n return {\n title: TITLE,\n files: [],\n summary: [...SUMMARY, ...otherSummary(settings)],\n notices: [GLIB, ...libraries].map((library) => noticeFor(library)),\n };\n};\n\nexport { libraryNotices };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAS3C,KAAK,iBAAiB,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AAiCF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,iBASxD,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,KAAK,iBAAiB,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,CAAC;AA6BF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,iBASxD,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { resolveLibraries as expandLibraries, readGeneratedLibraries, resolveGirPath, resolveStore, } from "@gtkx/codegen";
2
- const DEFAULT_LIBRARY = "Gtk-4.0";
3
- const DEFAULT_LIBRARY_PREFIX = "Gtk-";
2
+ import { resolveFuture } from "@gtkx/config/internal";
4
3
  const generatedLibraries = (root) => {
5
4
  try {
6
5
  return readGeneratedLibraries(resolveStore(root).gi.storeDir);
@@ -9,22 +8,21 @@ const generatedLibraries = (root) => {
9
8
  return null;
10
9
  }
11
10
  };
12
- const discoveredLibraries = (config) => {
11
+ const discoveredLibraries = (config, isAdwaitaDefault) => {
13
12
  try {
14
- return expandLibraries(config.libraries, resolveGirPath(config.girPath));
13
+ return expandLibraries(config.libraries, resolveGirPath(config.girPath), isAdwaitaDefault);
15
14
  }
16
15
  catch {
17
16
  return null;
18
17
  }
19
18
  };
20
19
  const configLibraries = (config) => {
20
+ const { isAdwaitaDefault } = resolveFuture(config.future);
21
21
  const libraries = config.libraries;
22
- if (!Array.isArray(libraries)) {
23
- return discoveredLibraries(config) ?? [DEFAULT_LIBRARY];
22
+ if (Array.isArray(libraries)) {
23
+ return expandLibraries(libraries, [], isAdwaitaDefault);
24
24
  }
25
- return libraries.some((library) => library.startsWith(DEFAULT_LIBRARY_PREFIX))
26
- ? [...libraries]
27
- : [DEFAULT_LIBRARY, ...libraries];
25
+ return discoveredLibraries(config, isAdwaitaDefault) ?? expandLibraries(undefined, [], isAdwaitaDefault);
28
26
  };
29
27
  const resolveLibraries = (root, config) => {
30
28
  const generated = generatedLibraries(root);
@@ -1 +1 @@
1
- {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AACA,OAAO,EACH,gBAAgB,IAAI,eAAe,EAEnC,sBAAsB,EACtB,cAAc,EACd,YAAY,GACf,MAAM,eAAe,CAAC;AAOvB,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA6B,EAAE;IACnE,IAAI,CAAC;QACD,OAAO,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAmB,EAAE;IAC5D,IAAI,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAY,EAAE;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QAChB,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAqB,EAAE;IACzE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,OAAO;QACH,SAAS;QACT,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;KAC9D,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport {\n resolveLibraries as expandLibraries,\n type GeneratedLibraries,\n readGeneratedLibraries,\n resolveGirPath,\n resolveStore,\n} from \"@gtkx/codegen\";\n\ntype ResolvedLibraries = {\n libraries: string[];\n minimumLibraryVersions: Record<string, string>;\n};\n\nconst DEFAULT_LIBRARY = \"Gtk-4.0\";\nconst DEFAULT_LIBRARY_PREFIX = \"Gtk-\";\n\nconst generatedLibraries = (root: string): GeneratedLibraries | null => {\n try {\n return readGeneratedLibraries(resolveStore(root).gi.storeDir);\n } catch {\n return null;\n }\n};\n\nconst discoveredLibraries = (config: Config): string[] | null => {\n try {\n return expandLibraries(config.libraries, resolveGirPath(config.girPath));\n } catch {\n return null;\n }\n};\n\nconst configLibraries = (config: Config): string[] => {\n const libraries = config.libraries;\n\n if (!Array.isArray(libraries)) {\n return discoveredLibraries(config) ?? [DEFAULT_LIBRARY];\n }\n\n return libraries.some((library) => library.startsWith(DEFAULT_LIBRARY_PREFIX))\n ? [...libraries]\n : [DEFAULT_LIBRARY, ...libraries];\n};\n\nconst resolveLibraries = (root: string, config: Config): ResolvedLibraries => {\n const generated = generatedLibraries(root);\n const libraries = generated?.libraries ?? configLibraries(config);\n const deploy = config.deploy ?? {};\n\n return {\n libraries,\n minimumLibraryVersions: deploy.minimumLibraryVersions ?? {},\n };\n};\n\nexport { resolveLibraries };\n"]}
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../../src/deploy/settings/libraries.ts"],"names":[],"mappings":"AACA,OAAO,EACH,gBAAgB,IAAI,eAAe,EAEnC,sBAAsB,EACtB,cAAc,EACd,YAAY,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA6B,EAAE;IACnE,IAAI,CAAC;QACD,OAAO,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,gBAAyB,EAAmB,EAAE;IACvF,IAAI,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC/F,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAY,EAAE;IACjD,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,eAAe,CAAC,SAAS,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,MAAc,EAAqB,EAAE;IACzE,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,OAAO;QACH,SAAS;QACT,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,EAAE;KAC9D,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { Config } from \"@gtkx/config\";\nimport {\n resolveLibraries as expandLibraries,\n type GeneratedLibraries,\n readGeneratedLibraries,\n resolveGirPath,\n resolveStore,\n} from \"@gtkx/codegen\";\nimport { resolveFuture } from \"@gtkx/config/internal\";\n\ntype ResolvedLibraries = {\n libraries: string[];\n minimumLibraryVersions: Record<string, string>;\n};\n\nconst generatedLibraries = (root: string): GeneratedLibraries | null => {\n try {\n return readGeneratedLibraries(resolveStore(root).gi.storeDir);\n } catch {\n return null;\n }\n};\n\nconst discoveredLibraries = (config: Config, isAdwaitaDefault: boolean): string[] | null => {\n try {\n return expandLibraries(config.libraries, resolveGirPath(config.girPath), isAdwaitaDefault);\n } catch {\n return null;\n }\n};\n\nconst configLibraries = (config: Config): string[] => {\n const { isAdwaitaDefault } = resolveFuture(config.future);\n const libraries = config.libraries;\n\n if (Array.isArray(libraries)) {\n return expandLibraries(libraries, [], isAdwaitaDefault);\n }\n\n return discoveredLibraries(config, isAdwaitaDefault) ?? expandLibraries(undefined, [], isAdwaitaDefault);\n};\n\nconst resolveLibraries = (root: string, config: Config): ResolvedLibraries => {\n const generated = generatedLibraries(root);\n const libraries = generated?.libraries ?? configLibraries(config);\n const deploy = config.deploy ?? {};\n\n return {\n libraries,\n minimumLibraryVersions: deploy.minimumLibraryVersions ?? {},\n };\n};\n\nexport { resolveLibraries };\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"runner-main.d.ts","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CAuBlC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"runner-main.d.ts","sourceRoot":"","sources":["../../src/dev/runner-main.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CAuBlC,CAAC;AAEF,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { loadConfig } from "@gtkx/config";
2
+ import { resolveFuture } from "@gtkx/config/internal";
2
3
  import { error } from "@gtkx/utils";
3
4
  import { resolve } from "node:path";
4
5
  import { DEV_ENTRY_ENV } from "./entry-env.js";
@@ -20,7 +21,7 @@ const main = async () => {
20
21
  }
21
22
  const { config, root } = await loadConfig(cwd, { mode: "development" });
22
23
  prepareDevLocaleDir(root, config.applicationId);
23
- prepareDevSchemaDir(root, config.future?.v2ResourceImports === true);
24
+ prepareDevSchemaDir(root, resolveFuture(config.future).isResourceImported);
24
25
  prepareDevIconDir(root, config.applicationId, config.applicationIcon);
25
26
  const entryPath = resolve(cwd, entryArg);
26
27
  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,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,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,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC3E,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 { resolveFuture } from \"@gtkx/config/internal\";\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, resolveFuture(config.future).isResourceImported);\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"]}
@@ -0,0 +1,7 @@
1
+ type AgentRulesResult = {
2
+ isWritten: boolean;
3
+ files: string[];
4
+ };
5
+ declare const upsertAgentRules: (root: string) => AgentRulesResult;
6
+ export { upsertAgentRules };
7
+ //# sourceMappingURL=agent-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-rules.d.ts","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA+GF,QAAA,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,gBAcxC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { REFERENCE_PATH } from "../codegen/reference.js";
4
+ const AGENTS_FILENAME = "AGENTS.md";
5
+ const CLAUDE_FILENAME = "CLAUDE.md";
6
+ const CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\n`;
7
+ const BEGIN_MARKER = "<!-- BEGIN:gtkx-agent-rules -->";
8
+ const END_MARKER = "<!-- END:gtkx-agent-rules -->";
9
+ const BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\s\S]*?<!-- END:gtkx-agent-rules -->/;
10
+ const TOP_LEVEL_HEADING = /^# /m;
11
+ const rulesBody = (heading) => [
12
+ `${heading} GTKX`,
13
+ "",
14
+ "This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or " +
15
+ "GJS, and almost none of it is valid here. Check the rules below against what you are about to write.",
16
+ "",
17
+ "- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.",
18
+ '- Signals are props: `onClicked`, not `widget.connect("clicked", ...)`.',
19
+ "- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.",
20
+ "- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.",
21
+ "- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from " +
22
+ "`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, " +
23
+ "so they match the GIR libraries this project declares.",
24
+ "",
25
+ `Read \`${REFERENCE_PATH}/index.md\` before writing widget code. It is generated from this project's own ` +
26
+ "GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from " +
27
+ "another toolkit, from a C function name, or from a similar element.",
28
+ "",
29
+ "| Command | What it does |",
30
+ "| --- | --- |",
31
+ "| `gtkx dev` | Run the app with fast refresh |",
32
+ "| `gtkx codegen` | Regenerate bindings and this reference |",
33
+ "| `tsc --noEmit` | Typecheck |",
34
+ "| `vitest run` | Run the tests |",
35
+ "",
36
+ "Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server " +
37
+ "exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.",
38
+ "",
39
+ "This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and " +
40
+ "committing the block with your work keeps the tree clean.",
41
+ ];
42
+ const renderBlock = (heading) => [BEGIN_MARKER, "", ...rulesBody(heading), "", END_MARKER].join("\n");
43
+ const headingFor = (contents) => (TOP_LEVEL_HEADING.test(contents) ? "##" : "#");
44
+ const withTrailingNewline = (contents) => (contents.endsWith("\n") ? contents : `${contents}\n`);
45
+ const appendBlock = (contents, block) => {
46
+ if (contents.trim() === "") {
47
+ return `${block}\n`;
48
+ }
49
+ return `${withTrailingNewline(contents)}\n${block}\n`;
50
+ };
51
+ const replaceBlock = (contents, block) => {
52
+ const match = BLOCK_PATTERN.exec(contents);
53
+ if (match === null) {
54
+ return appendBlock(contents, block);
55
+ }
56
+ return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);
57
+ };
58
+ const nextContents = (contents) => {
59
+ const heading = headingFor(contents.replace(BLOCK_PATTERN, ""));
60
+ return replaceBlock(contents, renderBlock(heading));
61
+ };
62
+ const errorCode = (error) => error instanceof Error ? error.code : undefined;
63
+ const readOrUndefined = (path) => {
64
+ try {
65
+ return readFileSync(path, "utf8");
66
+ }
67
+ catch (error) {
68
+ if (errorCode(error) === "ENOENT") {
69
+ return undefined;
70
+ }
71
+ throw error;
72
+ }
73
+ };
74
+ const hasWritten = (path, contents) => {
75
+ if (readOrUndefined(path) === contents) {
76
+ return false;
77
+ }
78
+ writeFileSync(path, contents);
79
+ return true;
80
+ };
81
+ const hasWrittenClaudeImport = (root) => {
82
+ try {
83
+ writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: "wx" });
84
+ return true;
85
+ }
86
+ catch (error) {
87
+ if (errorCode(error) === "EEXIST") {
88
+ return false;
89
+ }
90
+ throw error;
91
+ }
92
+ };
93
+ const upsertAgentRules = (root) => {
94
+ const agentsPath = join(root, AGENTS_FILENAME);
95
+ const existing = readOrUndefined(agentsPath) ?? "";
96
+ const files = [];
97
+ if (hasWritten(agentsPath, nextContents(existing))) {
98
+ files.push(AGENTS_FILENAME);
99
+ }
100
+ if (hasWrittenClaudeImport(root)) {
101
+ files.push(CLAUDE_FILENAME);
102
+ }
103
+ return { isWritten: files.length > 0, files };
104
+ };
105
+ export { upsertAgentRules };
106
+ //# sourceMappingURL=agent-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-rules.js","sourceRoot":"","sources":["../../src/internal/agent-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { REFERENCE_PATH } from \"../codegen/reference.js\";\n\ntype AgentRulesResult = {\n isWritten: boolean;\n files: string[];\n};\n\nconst AGENTS_FILENAME = \"AGENTS.md\";\nconst CLAUDE_FILENAME = \"CLAUDE.md\";\nconst CLAUDE_CONTENTS = `@${AGENTS_FILENAME}\\n`;\nconst BEGIN_MARKER = \"<!-- BEGIN:gtkx-agent-rules -->\";\nconst END_MARKER = \"<!-- END:gtkx-agent-rules -->\";\nconst BLOCK_PATTERN = /<!-- BEGIN:gtkx-agent-rules -->[\\s\\S]*?<!-- END:gtkx-agent-rules -->/;\nconst TOP_LEVEL_HEADING = /^# /m;\n\nconst rulesBody = (heading: string): string[] => [\n `${heading} GTKX`,\n \"\",\n \"This is not the GTK you have seen before. Most GTK code in your training data is C, PyGObject, Vala or \" +\n \"GJS, and almost none of it is valid here. Check the rules below against what you are about to write.\",\n \"\",\n \"- Children are JSX, never `.append()`, `pack_start()`, `set_child()` or `add()`.\",\n '- Signals are props: `onClicked`, not `widget.connect(\"clicked\", ...)`.',\n \"- Props are camelCase: `marginTop`, not `margin-top` or `margin_top`.\",\n \"- There is no `Gtk.Template`, no `.ui` XML, and no `GtkBuilder`. The JSX tree is the definition.\",\n \"- Elements come from `@gtkx/jsx/<namespace>` and classes, enums and functions from \" +\n \"`@gtkx/gi/<namespace>`. Both are generated for this project by `gtkx codegen`, not installed from npm, \" +\n \"so they match the GIR libraries this project declares.\",\n \"\",\n `Read \\`${REFERENCE_PATH}/index.md\\` before writing widget code. It is generated from this project's own ` +\n \"GIR libraries and is the authority on which props, signals and methods exist. Do not infer a prop from \" +\n \"another toolkit, from a C function name, or from a similar element.\",\n \"\",\n \"| Command | What it does |\",\n \"| --- | --- |\",\n \"| `gtkx dev` | Run the app with fast refresh |\",\n \"| `gtkx codegen` | Regenerate bindings and this reference |\",\n \"| `tsc --noEmit` | Typecheck |\",\n \"| `vitest run` | Run the tests |\",\n \"\",\n \"Never call UI work done without looking at the running app. With `gtkx dev` up, the gtkx MCP server \" +\n \"exposes the live widget tree, queries, clicks and screenshots; use them to confirm the change landed.\",\n \"\",\n \"This block is written by `gtkx codegen`. Anything outside the markers is yours and is left alone, and \" +\n \"committing the block with your work keeps the tree clean.\",\n];\n\nconst renderBlock = (heading: string): string =>\n [BEGIN_MARKER, \"\", ...rulesBody(heading), \"\", END_MARKER].join(\"\\n\");\n\nconst headingFor = (contents: string): string => (TOP_LEVEL_HEADING.test(contents) ? \"##\" : \"#\");\nconst withTrailingNewline = (contents: string): string => (contents.endsWith(\"\\n\") ? contents : `${contents}\\n`);\n\nconst appendBlock = (contents: string, block: string): string => {\n if (contents.trim() === \"\") {\n return `${block}\\n`;\n }\n\n return `${withTrailingNewline(contents)}\\n${block}\\n`;\n};\n\nconst replaceBlock = (contents: string, block: string): string => {\n const match = BLOCK_PATTERN.exec(contents);\n\n if (match === null) {\n return appendBlock(contents, block);\n }\n\n return contents.slice(0, match.index) + block + contents.slice(match.index + match[0].length);\n};\n\nconst nextContents = (contents: string): string => {\n const heading = headingFor(contents.replace(BLOCK_PATTERN, \"\"));\n\n return replaceBlock(contents, renderBlock(heading));\n};\n\nconst errorCode = (error: unknown): string | undefined =>\n error instanceof Error ? (error as NodeJS.ErrnoException).code : undefined;\n\nconst readOrUndefined = (path: string): string | undefined => {\n try {\n return readFileSync(path, \"utf8\");\n } catch (error) {\n if (errorCode(error) === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst hasWritten = (path: string, contents: string): boolean => {\n if (readOrUndefined(path) === contents) {\n return false;\n }\n\n writeFileSync(path, contents);\n\n return true;\n};\n\nconst hasWrittenClaudeImport = (root: string): boolean => {\n try {\n writeFileSync(join(root, CLAUDE_FILENAME), CLAUDE_CONTENTS, { flag: \"wx\" });\n\n return true;\n } catch (error) {\n if (errorCode(error) === \"EEXIST\") {\n return false;\n }\n\n throw error;\n }\n};\n\nconst upsertAgentRules = (root: string): AgentRulesResult => {\n const agentsPath = join(root, AGENTS_FILENAME);\n const existing = readOrUndefined(agentsPath) ?? \"\";\n const files: string[] = [];\n\n if (hasWritten(agentsPath, nextContents(existing))) {\n files.push(AGENTS_FILENAME);\n }\n\n if (hasWrittenClaudeImport(root)) {\n files.push(CLAUDE_FILENAME);\n }\n\n return { isWritten: files.length > 0, files };\n};\n\nexport { upsertAgentRules };\n"]}
@@ -0,0 +1,8 @@
1
+ import { type ElementProps, type OmittedProps } from "@gtkx/codegen";
2
+ type DocsElements = {
3
+ props: ElementProps;
4
+ omittedProps: OmittedProps;
5
+ };
6
+ declare const resolveDocsElements: (cwd: string) => Promise<DocsElements>;
7
+ export { resolveDocsElements };
8
+ //# sourceMappingURL=docs-elements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-elements.d.ts","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAqC,MAAM,eAAe,CAAC;AAGxG,KAAK,YAAY,GAAG;IAChB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,YAAY,CAUpE,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { readBuiltinElements, resolveStore } from "@gtkx/codegen";
2
+ import { existsSync } from "node:fs";
3
+ const resolveDocsElements = async (cwd) => {
4
+ const { gi, reactSubexports } = resolveStore(cwd);
5
+ if (!existsSync(gi.storeDir)) {
6
+ return { props: {}, omittedProps: {} };
7
+ }
8
+ const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);
9
+ return { props, omittedProps };
10
+ };
11
+ export { resolveDocsElements };
12
+ //# sourceMappingURL=docs-elements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-elements.js","sourceRoot":"","sources":["../../src/internal/docs-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAOrC,MAAM,mBAAmB,GAAG,KAAK,EAAE,GAAW,EAAyB,EAAE;IACrE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAAC,eAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAExF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,CAAC","sourcesContent":["import { type ElementProps, type OmittedProps, readBuiltinElements, resolveStore } from \"@gtkx/codegen\";\nimport { existsSync } from \"node:fs\";\n\ntype DocsElements = {\n props: ElementProps;\n omittedProps: OmittedProps;\n};\n\nconst resolveDocsElements = async (cwd: string): Promise<DocsElements> => {\n const { gi, reactSubexports } = resolveStore(cwd);\n\n if (!existsSync(gi.storeDir)) {\n return { props: {}, omittedProps: {} };\n }\n\n const { props, omittedProps } = await readBuiltinElements(reactSubexports, gi.storeDir);\n\n return { props, omittedProps };\n};\n\nexport { resolveDocsElements };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"source-imports.d.ts","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,MAAM,CAAC;AAM/D,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAwBzD,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,cAAc,GAAG,SAMvD,CAAC;AAgCF,QAAA,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,MAAM,EAKhD,CAAC;AA+EF,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,YAAY,EAAE,GAAG,IACP,CAAC;AAKzD,QAAA,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,YAAY,EAKxD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"source-imports.d.ts","sourceRoot":"","sources":["../../src/internal/source-imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,aAAa,EAAE,MAAM,MAAM,CAAC;AAM/D,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAsBzD,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,cAAc,GAAG,SAMvD,CAAC;AAkCF,QAAA,MAAM,mBAAmB,GAAI,KAAK,MAAM,KAAG,MAAM,EAKhD,CAAC;AA+EF,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,YAAY,EAAE,GAAG,IACP,CAAC;AAKzD,QAAA,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,YAAY,EAKxD,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -13,8 +13,6 @@ const SOURCE_LANGUAGES = new Map([
13
13
  [".tsx", "tsx"],
14
14
  ]);
15
15
  const EXCLUDED_DIRECTORIES = new Set([
16
- ".git",
17
- ".gtkx",
18
16
  "build",
19
17
  "coverage",
20
18
  "dist",
@@ -27,10 +25,11 @@ const sourceLanguage = (path) => {
27
25
  }
28
26
  return SOURCE_LANGUAGES.get(extname(path).toLowerCase());
29
27
  };
28
+ const isWalkableDirectory = (name) => !name.startsWith(".") && !EXCLUDED_DIRECTORIES.has(name);
30
29
  const collectSourceEntry = (dir, entry, found) => {
31
30
  const path = join(dir, entry.name);
32
31
  if (entry.isDirectory()) {
33
- if (!EXCLUDED_DIRECTORIES.has(entry.name)) {
32
+ if (isWalkableDirectory(entry.name)) {
34
33
  sourceFilesIn(path, found);
35
34
  }
36
35
  return;