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

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 (88) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/codegen/config-dependencies.d.ts +3 -0
  4. package/dist/codegen/config-dependencies.d.ts.map +1 -0
  5. package/dist/codegen/config-dependencies.js +355 -0
  6. package/dist/codegen/config-dependencies.js.map +1 -0
  7. package/dist/codegen/run-codegen.d.ts +3 -2
  8. package/dist/codegen/run-codegen.d.ts.map +1 -1
  9. package/dist/codegen/run-codegen.js +31 -6
  10. package/dist/codegen/run-codegen.js.map +1 -1
  11. package/dist/codegen/store-resolver.d.ts +1 -0
  12. package/dist/codegen/store-resolver.d.ts.map +1 -1
  13. package/dist/codegen/store-resolver.js +4 -2
  14. package/dist/codegen/store-resolver.js.map +1 -1
  15. package/dist/commands/cleanup.d.ts +9 -0
  16. package/dist/commands/cleanup.d.ts.map +1 -0
  17. package/dist/commands/cleanup.js +31 -0
  18. package/dist/commands/cleanup.js.map +1 -0
  19. package/dist/commands/dev.d.ts.map +1 -1
  20. package/dist/commands/dev.js +4 -2
  21. package/dist/commands/dev.js.map +1 -1
  22. package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
  23. package/dist/deploy/freedesktop/validate.js +45 -12
  24. package/dist/deploy/freedesktop/validate.js.map +1 -1
  25. package/dist/deploy/payload/stage.d.ts.map +1 -1
  26. package/dist/deploy/payload/stage.js +24 -3
  27. package/dist/deploy/payload/stage.js.map +1 -1
  28. package/dist/deploy/settings/extra-files.d.ts.map +1 -1
  29. package/dist/deploy/settings/extra-files.js +4 -3
  30. package/dist/deploy/settings/extra-files.js.map +1 -1
  31. package/dist/dev/catalog-writes.d.ts +8 -0
  32. package/dist/dev/catalog-writes.d.ts.map +1 -0
  33. package/dist/dev/catalog-writes.js +26 -0
  34. package/dist/dev/catalog-writes.js.map +1 -0
  35. package/dist/dev/runner-deps.d.ts.map +1 -1
  36. package/dist/dev/runner-deps.js +10 -6
  37. package/dist/dev/runner-deps.js.map +1 -1
  38. package/dist/dev/runner.d.ts +1 -0
  39. package/dist/dev/runner.d.ts.map +1 -1
  40. package/dist/dev/runner.js +8 -2
  41. package/dist/dev/runner.js.map +1 -1
  42. package/dist/dev/supervisor.d.ts +2 -1
  43. package/dist/dev/supervisor.d.ts.map +1 -1
  44. package/dist/dev/supervisor.js +128 -26
  45. package/dist/dev/supervisor.js.map +1 -1
  46. package/dist/i18n/catalogs.d.ts +6 -2
  47. package/dist/i18n/catalogs.d.ts.map +1 -1
  48. package/dist/i18n/catalogs.js +9 -7
  49. package/dist/i18n/catalogs.js.map +1 -1
  50. package/dist/i18n/source-messages.d.ts +3 -1
  51. package/dist/i18n/source-messages.d.ts.map +1 -1
  52. package/dist/i18n/source-messages.js +14 -2
  53. package/dist/i18n/source-messages.js.map +1 -1
  54. package/dist/internal/build-output.d.ts.map +1 -1
  55. package/dist/internal/build-output.js +45 -8
  56. package/dist/internal/build-output.js.map +1 -1
  57. package/dist/internal/prepare-project.d.ts +1 -0
  58. package/dist/internal/prepare-project.d.ts.map +1 -1
  59. package/dist/internal/prepare-project.js +8 -2
  60. package/dist/internal/prepare-project.js.map +1 -1
  61. package/dist/vite-plugins/i18n.d.ts +11 -2
  62. package/dist/vite-plugins/i18n.d.ts.map +1 -1
  63. package/dist/vite-plugins/i18n.js +20 -6
  64. package/dist/vite-plugins/i18n.js.map +1 -1
  65. package/dist/vite-plugins/index.d.ts +2 -0
  66. package/dist/vite-plugins/index.d.ts.map +1 -1
  67. package/dist/vite-plugins/index.js +10 -2
  68. package/dist/vite-plugins/index.js.map +1 -1
  69. package/package.json +12 -10
  70. package/src/cli.ts +5 -0
  71. package/src/codegen/config-dependencies.ts +470 -0
  72. package/src/codegen/run-codegen.ts +37 -5
  73. package/src/codegen/store-resolver.ts +5 -2
  74. package/src/commands/cleanup.ts +36 -0
  75. package/src/commands/dev.ts +9 -2
  76. package/src/deploy/freedesktop/validate.ts +63 -13
  77. package/src/deploy/payload/stage.ts +42 -3
  78. package/src/deploy/settings/extra-files.ts +5 -3
  79. package/src/dev/catalog-writes.ts +35 -0
  80. package/src/dev/runner-deps.ts +14 -6
  81. package/src/dev/runner.ts +11 -2
  82. package/src/dev/supervisor.ts +177 -29
  83. package/src/i18n/catalogs.ts +20 -8
  84. package/src/i18n/source-messages.ts +19 -3
  85. package/src/internal/build-output.ts +67 -9
  86. package/src/internal/prepare-project.ts +9 -3
  87. package/src/vite-plugins/i18n.ts +42 -9
  88. package/src/vite-plugins/index.ts +19 -3
package/dist/cli.js CHANGED
@@ -47,6 +47,10 @@ const main = defineCommand({
47
47
  const { scaffoldCommand } = await import("create-gtkx");
48
48
  return withErrorBoundary(scaffoldCommand);
49
49
  },
50
+ cleanup: async () => {
51
+ const { cleanup } = await import("./commands/cleanup.js");
52
+ return withErrorBoundary(cleanup);
53
+ },
50
54
  },
51
55
  });
52
56
  await runMain(main, { rawArgs: cliArgs });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,8BAA8B,CAAC;AAEtC,IAAI,CAAC;IACD,0BAA0B,EAAE,CAAC;AACjC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,UAAU,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AACxC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,IAAI,GAAG,aAAa,CAAC;IACvB,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,WAAW,EAAE,0DAA0D;KAC1E;IACD,WAAW,EAAE;QACT,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEtD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAEpD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { assertSupportedNodeVersion } from \"@gtkx/config/internal\";\nimport { defineCommand, runMain } from \"citty\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { splitApplicationArgs } from \"./internal/application-args.js\";\nimport { printError, withErrorBoundary } from \"./internal/errors.js\";\nimport \"./internal/parent-process.js\";\n\ntry {\n assertSupportedNodeVersion();\n} catch (error) {\n printError(error);\n}\n\nconst version = packageManifest.version;\nconst { cliArgs } = splitApplicationArgs(process.argv.slice(2));\n\nconst main = defineCommand({\n meta: {\n name: \"gtkx\",\n version,\n description: \"CLI for GTKX: create and develop GTK4 React applications\",\n },\n subCommands: {\n dev: async () => {\n const { dev } = await import(\"./commands/dev.js\");\n\n return withErrorBoundary(dev);\n },\n build: async () => {\n const { build } = await import(\"./commands/build.js\");\n\n return withErrorBoundary(build);\n },\n deploy: async () => {\n const { deploy } = await import(\"./commands/deploy.js\");\n\n return withErrorBoundary(deploy);\n },\n codegen: async () => {\n const { codegen } = await import(\"./commands/codegen.js\");\n\n return withErrorBoundary(codegen);\n },\n docs: async () => {\n const { docs } = await import(\"./commands/docs.js\");\n\n return withErrorBoundary(docs);\n },\n mcp: async () => {\n const { mcp } = await import(\"./commands/mcp.js\");\n\n return withErrorBoundary(mcp);\n },\n create: async () => {\n const { scaffoldCommand } = await import(\"create-gtkx\");\n\n return withErrorBoundary(scaffoldCommand);\n },\n },\n});\n\nawait runMain(main, { rawArgs: cliArgs });\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,eAAe,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,8BAA8B,CAAC;AAEtC,IAAI,CAAC;IACD,0BAA0B,EAAE,CAAC;AACjC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,UAAU,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;AACxC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,IAAI,GAAG,aAAa,CAAC;IACvB,IAAI,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,WAAW,EAAE,0DAA0D;KAC1E;IACD,WAAW,EAAE;QACT,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAEtD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAEpD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE;YACZ,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAElD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAExD,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;KACJ;CACJ,CAAC,CAAC;AAEH,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC","sourcesContent":["import { assertSupportedNodeVersion } from \"@gtkx/config/internal\";\nimport { defineCommand, runMain } from \"citty\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { splitApplicationArgs } from \"./internal/application-args.js\";\nimport { printError, withErrorBoundary } from \"./internal/errors.js\";\nimport \"./internal/parent-process.js\";\n\ntry {\n assertSupportedNodeVersion();\n} catch (error) {\n printError(error);\n}\n\nconst version = packageManifest.version;\nconst { cliArgs } = splitApplicationArgs(process.argv.slice(2));\n\nconst main = defineCommand({\n meta: {\n name: \"gtkx\",\n version,\n description: \"CLI for GTKX: create and develop GTK4 React applications\",\n },\n subCommands: {\n dev: async () => {\n const { dev } = await import(\"./commands/dev.js\");\n\n return withErrorBoundary(dev);\n },\n build: async () => {\n const { build } = await import(\"./commands/build.js\");\n\n return withErrorBoundary(build);\n },\n deploy: async () => {\n const { deploy } = await import(\"./commands/deploy.js\");\n\n return withErrorBoundary(deploy);\n },\n codegen: async () => {\n const { codegen } = await import(\"./commands/codegen.js\");\n\n return withErrorBoundary(codegen);\n },\n docs: async () => {\n const { docs } = await import(\"./commands/docs.js\");\n\n return withErrorBoundary(docs);\n },\n mcp: async () => {\n const { mcp } = await import(\"./commands/mcp.js\");\n\n return withErrorBoundary(mcp);\n },\n create: async () => {\n const { scaffoldCommand } = await import(\"create-gtkx\");\n\n return withErrorBoundary(scaffoldCommand);\n },\n cleanup: async () => {\n const { cleanup } = await import(\"./commands/cleanup.js\");\n\n return withErrorBoundary(cleanup);\n },\n },\n});\n\nawait runMain(main, { rawArgs: cliArgs });\n"]}
@@ -0,0 +1,3 @@
1
+ declare const resolveConfigDependencies: (configFile: string, configName?: string, configRoot?: string) => string[];
2
+ export { resolveConfigDependencies };
3
+ //# sourceMappingURL=config-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-dependencies.d.ts","sourceRoot":"","sources":["../../src/codegen/config-dependencies.ts"],"names":[],"mappings":"AA2bA,QAAA,MAAM,yBAAyB,GAC3B,YAAY,MAAM,EAClB,mBAAiC,EACjC,mBAAgC,KACjC,MAAM,EAoBR,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,355 @@
1
+ import { parseSync, traverse, types } from "@babel/core";
2
+ import { parseJSON, parseJSON5, parseJSONC, parseTOML, parseYAML } from "confbox";
3
+ import { createJiti } from "jiti";
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { basename, dirname, extname, isAbsolute, join, resolve, sep } from "node:path";
6
+ import { fileURLToPath, pathToFileURL } from "node:url";
7
+ const MODULE_EXTENSIONS = new Set([
8
+ ".cjs",
9
+ ".cts",
10
+ ".js",
11
+ ".mjs",
12
+ ".mts",
13
+ ".ts",
14
+ ]);
15
+ const RESOLVABLE_EXTENSIONS = [
16
+ ".js",
17
+ ".ts",
18
+ ".mjs",
19
+ ".cjs",
20
+ ".mts",
21
+ ".cts",
22
+ ".json",
23
+ ".jsonc",
24
+ ".json5",
25
+ ".yaml",
26
+ ".yml",
27
+ ".toml",
28
+ ];
29
+ const JAVASCRIPT_FALLBACKS = {
30
+ ".cjs": [".cts"],
31
+ ".js": [".ts"],
32
+ ".jsx": [".tsx"],
33
+ ".mjs": [".mts"],
34
+ };
35
+ const DATA_PARSERS = {
36
+ ".json": parseJSON,
37
+ ".json5": parseJSON5,
38
+ ".jsonc": parseJSONC,
39
+ ".toml": parseTOML,
40
+ ".yaml": parseYAML,
41
+ ".yml": parseYAML,
42
+ };
43
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
44
+ const parserPlugins = (path) => {
45
+ const extension = extname(path).toLowerCase();
46
+ return [
47
+ "decorators",
48
+ ...([".cts", ".mts", ".ts"].includes(extension) ? ["typescript"] : []),
49
+ ];
50
+ };
51
+ function expressionSources(value) {
52
+ if (types.isStringLiteral(value)) {
53
+ return [value.value];
54
+ }
55
+ if (types.isArrayExpression(value)) {
56
+ return value.elements.flatMap((element) => types.isExpression(element) ? expressionSources(element) : []);
57
+ }
58
+ return types.isObjectExpression(value)
59
+ ? value.properties.flatMap((property) => sourcePropertySources(property))
60
+ : [];
61
+ }
62
+ const isNamedProperty = (property, name) => (types.isIdentifier(property.key) && property.key.name === name) ||
63
+ (types.isStringLiteral(property.key) && property.key.value === name);
64
+ function sourcePropertySources(property) {
65
+ return types.isObjectProperty(property) &&
66
+ isNamedProperty(property, "source") &&
67
+ types.isExpression(property.value)
68
+ ? expressionSources(property.value)
69
+ : [];
70
+ }
71
+ const extendsSources = (value) => expressionSources(value);
72
+ const isExtendsProperty = (property) => isNamedProperty(property, "extends");
73
+ const parseModule = (path) => {
74
+ try {
75
+ return parseSync(readFileSync(path, "utf8"), {
76
+ ast: true,
77
+ babelrc: false,
78
+ configFile: false,
79
+ filename: path,
80
+ parserOpts: { allowReturnOutsideFunction: true, plugins: parserPlugins(path) },
81
+ sourceType: "unambiguous",
82
+ }) ?? undefined;
83
+ }
84
+ catch {
85
+ return undefined;
86
+ }
87
+ };
88
+ const addSource = (sources, source) => {
89
+ if (source !== null && source !== undefined) {
90
+ sources.add(source.value);
91
+ }
92
+ };
93
+ const requireSource = (call) => types.isIdentifier(call.callee, { name: "require" }) && types.isStringLiteral(call.arguments[0])
94
+ ? call.arguments[0]
95
+ : undefined;
96
+ const importEqualsSource = (declaration) => {
97
+ const { moduleReference } = declaration;
98
+ return types.isTSExternalModuleReference(moduleReference) ? moduleReference.expression : undefined;
99
+ };
100
+ const propertySources = (property) => isExtendsProperty(property) && types.isExpression(property.value)
101
+ ? extendsSources(property.value)
102
+ : [];
103
+ const collectModuleSources = (ast) => {
104
+ const sources = new Set();
105
+ const extended = new Set();
106
+ traverse(ast, {
107
+ CallExpression: (nodePath) => {
108
+ addSource(sources, requireSource(nodePath.node));
109
+ },
110
+ ExportAllDeclaration: (nodePath) => {
111
+ addSource(sources, nodePath.node.source);
112
+ },
113
+ ExportNamedDeclaration: (nodePath) => {
114
+ addSource(sources, nodePath.node.source);
115
+ },
116
+ ImportDeclaration: (nodePath) => {
117
+ addSource(sources, nodePath.node.source);
118
+ },
119
+ ImportExpression: (nodePath) => {
120
+ const { source } = nodePath.node;
121
+ addSource(sources, types.isStringLiteral(source) ? source : undefined);
122
+ },
123
+ ObjectProperty: (nodePath) => {
124
+ for (const source of propertySources(nodePath.node)) {
125
+ sources.add(source);
126
+ extended.add(source);
127
+ }
128
+ },
129
+ TSImportEqualsDeclaration: (nodePath) => {
130
+ addSource(sources, importEqualsSource(nodePath.node));
131
+ },
132
+ });
133
+ return { all: [...sources], extended: [...extended] };
134
+ };
135
+ const moduleSources = (path) => {
136
+ const ast = parseModule(path);
137
+ return ast === undefined ? { all: [], extended: [] } : collectModuleSources(ast);
138
+ };
139
+ function parsedExtendsSources(value) {
140
+ if (typeof value === "string") {
141
+ return [value];
142
+ }
143
+ if (Array.isArray(value)) {
144
+ return value.flatMap((item) => parsedExtendsSources(item));
145
+ }
146
+ return objectExtendsSources(value);
147
+ }
148
+ const objectExtendsSources = (value) => {
149
+ if (typeof value !== "object" || value === null) {
150
+ return [];
151
+ }
152
+ return "source" in value ? parsedExtendsSources(value.source) : [];
153
+ };
154
+ const configExtendsSources = (value) => {
155
+ if (typeof value !== "object" || value === null) {
156
+ return [];
157
+ }
158
+ return "extends" in value ? parsedExtendsSources(value.extends) : [];
159
+ };
160
+ const dataSources = (path) => {
161
+ const parser = DATA_PARSERS[extname(path).toLowerCase()];
162
+ if (parser === undefined) {
163
+ return [];
164
+ }
165
+ try {
166
+ return configExtendsSources(parser(readFileSync(path, "utf8")));
167
+ }
168
+ catch {
169
+ return [];
170
+ }
171
+ };
172
+ const extensionCandidates = (path) => {
173
+ const extension = extname(path).toLowerCase();
174
+ if (extension.length === 0) {
175
+ return RESOLVABLE_EXTENSIONS.map((candidate) => `${path}${candidate}`);
176
+ }
177
+ const stem = path.slice(0, -extension.length);
178
+ return (JAVASCRIPT_FALLBACKS[extension] ?? []).map((candidate) => `${stem}${candidate}`);
179
+ };
180
+ const targetCandidates = (target, configName) => {
181
+ const extension = extname(target);
182
+ if (extension.length > 0) {
183
+ return [target, ...extensionCandidates(target)];
184
+ }
185
+ return [
186
+ target,
187
+ ...extensionCandidates(target),
188
+ join(target, configName),
189
+ ...RESOLVABLE_EXTENSIONS.map((candidate) => join(target, `index${candidate}`)),
190
+ ];
191
+ };
192
+ const localSourceTarget = (source, importer) => {
193
+ const clean = source.split(/[?#]/u, 1)[0] ?? "";
194
+ if (clean.startsWith("file:")) {
195
+ return fileURLToPath(clean);
196
+ }
197
+ if (!isAbsolute(clean) && !clean.startsWith(".")) {
198
+ return undefined;
199
+ }
200
+ return resolve(dirname(importer), clean);
201
+ };
202
+ const unresolvedCandidates = (source, importer, configName) => {
203
+ const target = localSourceTarget(source, importer);
204
+ if (target === undefined) {
205
+ return [];
206
+ }
207
+ return targetCandidates(target, configName);
208
+ };
209
+ const nearestPackageFile = (importer) => {
210
+ let directory = dirname(importer);
211
+ let previous = "";
212
+ while (directory !== previous) {
213
+ const candidate = join(directory, "package.json");
214
+ if (existsSync(candidate)) {
215
+ return candidate;
216
+ }
217
+ previous = directory;
218
+ directory = dirname(directory);
219
+ }
220
+ return undefined;
221
+ };
222
+ const readPackageImports = (importer) => {
223
+ const file = nearestPackageFile(importer);
224
+ if (file === undefined) {
225
+ return undefined;
226
+ }
227
+ try {
228
+ const manifest = parseJSON(readFileSync(file, "utf8"));
229
+ return isRecord(manifest) && isRecord(manifest.imports)
230
+ ? { file, imports: manifest.imports, root: dirname(file) }
231
+ : undefined;
232
+ }
233
+ catch {
234
+ return undefined;
235
+ }
236
+ };
237
+ function stringTargets(value) {
238
+ if (typeof value === "string") {
239
+ return [value];
240
+ }
241
+ if (Array.isArray(value)) {
242
+ return value.flatMap((item) => stringTargets(item));
243
+ }
244
+ return isRecord(value)
245
+ ? Object.values(value).flatMap((item) => stringTargets(item))
246
+ : [];
247
+ }
248
+ const importPatternMatch = (pattern, source) => {
249
+ if (pattern === source) {
250
+ return "";
251
+ }
252
+ const wildcard = pattern.indexOf("*");
253
+ if (wildcard === -1) {
254
+ return undefined;
255
+ }
256
+ const prefix = pattern.slice(0, wildcard);
257
+ const suffix = pattern.slice(wildcard + 1);
258
+ return source.startsWith(prefix) && source.endsWith(suffix)
259
+ ? source.slice(prefix.length, source.length - suffix.length)
260
+ : undefined;
261
+ };
262
+ const packageImportTargets = (source, imports) => Object.entries(imports).flatMap(([pattern, value]) => {
263
+ const match = importPatternMatch(pattern, source);
264
+ return match === undefined
265
+ ? []
266
+ : stringTargets(value).map((target) => target.split("*").join(match));
267
+ });
268
+ const packageImportDependencies = (source, importer, configName) => {
269
+ if (!source.startsWith("#")) {
270
+ return [];
271
+ }
272
+ const packageImports = readPackageImports(importer);
273
+ if (packageImports === undefined) {
274
+ return [];
275
+ }
276
+ const targets = packageImportTargets(source, packageImports.imports)
277
+ .filter((target) => target.startsWith("."))
278
+ .flatMap((target) => targetCandidates(resolve(packageImports.root, target), configName));
279
+ return [packageImports.file, ...targets];
280
+ };
281
+ const normalizedResolvedPath = (path) => path.startsWith("file:") ? fileURLToPath(path) : path;
282
+ const resolvedSourcePath = (source, importer, jiti) => {
283
+ try {
284
+ const path = jiti.esmResolve(source, {
285
+ parentURL: pathToFileURL(importer).href,
286
+ try: true,
287
+ });
288
+ return path === undefined ? undefined : normalizedResolvedPath(path);
289
+ }
290
+ catch {
291
+ return undefined;
292
+ }
293
+ };
294
+ const sourceDependencies = (source, importer, configName, jiti) => {
295
+ const dependency = resolvedSourcePath(source, importer, jiti);
296
+ const packageDependencies = packageImportDependencies(source, importer, configName);
297
+ return dependency === undefined
298
+ ? [...unresolvedCandidates(source, importer, configName), ...packageDependencies]
299
+ : [dependency, ...packageDependencies];
300
+ };
301
+ const configLayerDirectory = (path, configName, configRoot) => {
302
+ const segments = configName.split(/[\\/]/u).filter((segment) => segment.length > 0);
303
+ let directory = resolve(path);
304
+ let remaining = segments.length;
305
+ while (remaining > 0) {
306
+ directory = dirname(directory);
307
+ remaining -= 1;
308
+ }
309
+ return resolve(directory, ...segments) === resolve(path) ? directory : resolve(configRoot);
310
+ };
311
+ const c12SourceDependencies = (source, importer, configName, configRoot) => {
312
+ const clean = source.split(/[?#]/u, 1)[0] ?? "";
313
+ if (clean === "." || (!isAbsolute(clean) && !clean.startsWith("."))) {
314
+ return [];
315
+ }
316
+ const cwd = configLayerDirectory(importer, configName, configRoot);
317
+ const extension = extname(clean);
318
+ const target = (extension.length === 0 || extension === basename(clean))
319
+ ? resolve(cwd, clean, configName)
320
+ : resolve(cwd, clean);
321
+ return targetCandidates(target, configName);
322
+ };
323
+ const directDependencies = (path, configName, configRoot) => {
324
+ const module = MODULE_EXTENSIONS.has(extname(path).toLowerCase()) ? moduleSources(path) : undefined;
325
+ const sources = module?.all ?? dataSources(path);
326
+ const extended = module?.extended ?? sources;
327
+ const jiti = createJiti(path, {
328
+ extensions: RESOLVABLE_EXTENSIONS,
329
+ fsCache: false,
330
+ moduleCache: false,
331
+ });
332
+ return [
333
+ ...sources.flatMap((source) => sourceDependencies(source, path, configName, jiti)),
334
+ ...extended.flatMap((source) => c12SourceDependencies(source, path, configName, configRoot)),
335
+ ]
336
+ .filter((dependency) => !dependency.includes(`${sep}node_modules${sep}`));
337
+ };
338
+ const resolveConfigDependencies = (configFile, configName = basename(configFile), configRoot = dirname(configFile)) => {
339
+ const dependencies = new Set();
340
+ const pending = [resolve(configFile)];
341
+ while (pending.length > 0) {
342
+ const path = pending.pop();
343
+ if (path === undefined) {
344
+ break;
345
+ }
346
+ if (dependencies.has(path)) {
347
+ continue;
348
+ }
349
+ dependencies.add(path);
350
+ pending.push(...directDependencies(path, configName, configRoot));
351
+ }
352
+ return [...dependencies];
353
+ };
354
+ export { resolveConfigDependencies };
355
+ //# sourceMappingURL=config-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-dependencies.js","sourceRoot":"","sources":["../../src/codegen/config-dependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseSync, traverse, types } from \"@babel/core\";\nimport { parseJSON, parseJSON5, parseJSONC, parseTOML, parseYAML } from \"confbox\";\nimport { createJiti, type Jiti } from \"jiti\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, dirname, extname, isAbsolute, join, resolve, sep } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nconst MODULE_EXTENSIONS: ReadonlySet<string> = new Set([\n \".cjs\",\n \".cts\",\n \".js\",\n \".mjs\",\n \".mts\",\n \".ts\",\n]);\nconst RESOLVABLE_EXTENSIONS = [\n \".js\",\n \".ts\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n \".json\",\n \".jsonc\",\n \".json5\",\n \".yaml\",\n \".yml\",\n \".toml\",\n];\nconst JAVASCRIPT_FALLBACKS: Readonly<Record<string, string[]>> = {\n \".cjs\": [\".cts\"],\n \".js\": [\".ts\"],\n \".jsx\": [\".tsx\"],\n \".mjs\": [\".mts\"],\n};\nconst DATA_PARSERS: Readonly<Record<string, (source: string) => unknown>> = {\n \".json\": parseJSON,\n \".json5\": parseJSON5,\n \".jsonc\": parseJSONC,\n \".toml\": parseTOML,\n \".yaml\": parseYAML,\n \".yml\": parseYAML,\n};\n\ntype PackageImports = { file: string; imports: Record<string, unknown>; root: string };\ntype ModuleSources = { all: string[]; extended: string[] };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst parserPlugins = (path: string): (\"decorators\" | \"jsx\" | \"typescript\")[] => {\n const extension = extname(path).toLowerCase();\n\n return [\n \"decorators\",\n ...([\".cts\", \".mts\", \".ts\"].includes(extension) ? [\"typescript\" as const] : []),\n ];\n};\n\nfunction expressionSources(value: types.Expression): string[] {\n if (types.isStringLiteral(value)) {\n return [value.value];\n }\n\n if (types.isArrayExpression(value)) {\n return value.elements.flatMap((element) =>\n types.isExpression(element) ? expressionSources(element) : []);\n }\n\n return types.isObjectExpression(value)\n ? value.properties.flatMap((property) => sourcePropertySources(property))\n : [];\n}\n\nconst isNamedProperty = (property: types.ObjectProperty, name: string): boolean =>\n (types.isIdentifier(property.key) && property.key.name === name) ||\n (types.isStringLiteral(property.key) && property.key.value === name);\n\nfunction sourcePropertySources(\n property: types.ObjectMethod | types.ObjectProperty | types.SpreadElement,\n): string[] {\n return types.isObjectProperty(property) &&\n isNamedProperty(property, \"source\") &&\n types.isExpression(property.value)\n ? expressionSources(property.value)\n : [];\n}\n\nconst extendsSources = (value: types.Expression): string[] => expressionSources(value);\n\nconst isExtendsProperty = (property: types.ObjectProperty): boolean =>\n isNamedProperty(property, \"extends\");\n\ntype ParsedModule = NonNullable<ReturnType<typeof parseSync>>;\n\nconst parseModule = (path: string): ParsedModule | undefined => {\n try {\n return parseSync(readFileSync(path, \"utf8\"), {\n ast: true,\n babelrc: false,\n configFile: false,\n filename: path,\n parserOpts: { allowReturnOutsideFunction: true, plugins: parserPlugins(path) },\n sourceType: \"unambiguous\",\n }) ?? undefined;\n } catch {\n return undefined;\n }\n};\n\nconst addSource = (sources: Set<string>, source: types.StringLiteral | null | undefined): void => {\n if (source !== null && source !== undefined) {\n sources.add(source.value);\n }\n};\n\nconst requireSource = (call: types.CallExpression): types.StringLiteral | undefined =>\n types.isIdentifier(call.callee, { name: \"require\" }) && types.isStringLiteral(call.arguments[0])\n ? call.arguments[0]\n : undefined;\n\nconst importEqualsSource = (declaration: types.TSImportEqualsDeclaration): types.StringLiteral | undefined => {\n const { moduleReference } = declaration;\n\n return types.isTSExternalModuleReference(moduleReference) ? moduleReference.expression : undefined;\n};\n\nconst propertySources = (property: types.ObjectProperty): string[] =>\n isExtendsProperty(property) && types.isExpression(property.value)\n ? extendsSources(property.value)\n : [];\n\nconst collectModuleSources = (ast: ParsedModule): ModuleSources => {\n const sources: Set<string> = new Set();\n const extended: Set<string> = new Set();\n\n traverse(ast, {\n CallExpression: (nodePath) => {\n addSource(sources, requireSource(nodePath.node));\n },\n ExportAllDeclaration: (nodePath) => {\n addSource(sources, nodePath.node.source);\n },\n ExportNamedDeclaration: (nodePath) => {\n addSource(sources, nodePath.node.source);\n },\n ImportDeclaration: (nodePath) => {\n addSource(sources, nodePath.node.source);\n },\n ImportExpression: (nodePath) => {\n const { source } = nodePath.node;\n addSource(sources, types.isStringLiteral(source) ? source : undefined);\n },\n ObjectProperty: (nodePath) => {\n for (const source of propertySources(nodePath.node)) {\n sources.add(source);\n extended.add(source);\n }\n },\n TSImportEqualsDeclaration: (nodePath) => {\n addSource(sources, importEqualsSource(nodePath.node));\n },\n });\n\n return { all: [...sources], extended: [...extended] };\n};\n\nconst moduleSources = (path: string): ModuleSources => {\n const ast = parseModule(path);\n\n return ast === undefined ? { all: [], extended: [] } : collectModuleSources(ast);\n};\n\nfunction parsedExtendsSources(value: unknown): string[] {\n if (typeof value === \"string\") {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.flatMap((item) => parsedExtendsSources(item));\n }\n\n return objectExtendsSources(value);\n}\n\nconst objectExtendsSources = (value: unknown): string[] => {\n if (typeof value !== \"object\" || value === null) {\n return [];\n }\n\n return \"source\" in value ? parsedExtendsSources(value.source) : [];\n};\n\nconst configExtendsSources = (value: unknown): string[] => {\n if (typeof value !== \"object\" || value === null) {\n return [];\n }\n\n return \"extends\" in value ? parsedExtendsSources(value.extends) : [];\n};\n\nconst dataSources = (path: string): string[] => {\n const parser = DATA_PARSERS[extname(path).toLowerCase()];\n\n if (parser === undefined) {\n return [];\n }\n\n try {\n return configExtendsSources(parser(readFileSync(path, \"utf8\")));\n } catch {\n return [];\n }\n};\n\nconst extensionCandidates = (path: string): string[] => {\n const extension = extname(path).toLowerCase();\n\n if (extension.length === 0) {\n return RESOLVABLE_EXTENSIONS.map((candidate) => `${path}${candidate}`);\n }\n\n const stem = path.slice(0, -extension.length);\n\n return (JAVASCRIPT_FALLBACKS[extension] ?? []).map((candidate) => `${stem}${candidate}`);\n};\n\nconst targetCandidates = (target: string, configName: string): string[] => {\n const extension = extname(target);\n\n if (extension.length > 0) {\n return [target, ...extensionCandidates(target)];\n }\n\n return [\n target,\n ...extensionCandidates(target),\n join(target, configName),\n ...RESOLVABLE_EXTENSIONS.map((candidate) => join(target, `index${candidate}`)),\n ];\n};\n\nconst localSourceTarget = (source: string, importer: string): string | undefined => {\n const clean = source.split(/[?#]/u, 1)[0] ?? \"\";\n\n if (clean.startsWith(\"file:\")) {\n return fileURLToPath(clean);\n }\n\n if (!isAbsolute(clean) && !clean.startsWith(\".\")) {\n return undefined;\n }\n\n return resolve(dirname(importer), clean);\n};\n\nconst unresolvedCandidates = (source: string, importer: string, configName: string): string[] => {\n const target = localSourceTarget(source, importer);\n\n if (target === undefined) {\n return [];\n }\n\n return targetCandidates(target, configName);\n};\n\nconst nearestPackageFile = (importer: string): string | undefined => {\n let directory = dirname(importer);\n let previous = \"\";\n\n while (directory !== previous) {\n const candidate = join(directory, \"package.json\");\n\n if (existsSync(candidate)) {\n return candidate;\n }\n\n previous = directory;\n directory = dirname(directory);\n }\n\n return undefined;\n};\n\nconst readPackageImports = (importer: string): PackageImports | undefined => {\n const file = nearestPackageFile(importer);\n\n if (file === undefined) {\n return undefined;\n }\n\n try {\n const manifest = parseJSON(readFileSync(file, \"utf8\"));\n\n return isRecord(manifest) && isRecord(manifest.imports)\n ? { file, imports: manifest.imports, root: dirname(file) }\n : undefined;\n } catch {\n return undefined;\n }\n};\n\nfunction stringTargets(value: unknown): string[] {\n if (typeof value === \"string\") {\n return [value];\n }\n\n if (Array.isArray(value)) {\n return value.flatMap((item) => stringTargets(item));\n }\n\n return isRecord(value)\n ? Object.values(value).flatMap((item) => stringTargets(item))\n : [];\n}\n\nconst importPatternMatch = (pattern: string, source: string): string | undefined => {\n if (pattern === source) {\n return \"\";\n }\n\n const wildcard = pattern.indexOf(\"*\");\n\n if (wildcard === -1) {\n return undefined;\n }\n\n const prefix = pattern.slice(0, wildcard);\n const suffix = pattern.slice(wildcard + 1);\n\n return source.startsWith(prefix) && source.endsWith(suffix)\n ? source.slice(prefix.length, source.length - suffix.length)\n : undefined;\n};\n\nconst packageImportTargets = (source: string, imports: Record<string, unknown>): string[] =>\n Object.entries(imports).flatMap(([pattern, value]) => {\n const match = importPatternMatch(pattern, source);\n\n return match === undefined\n ? []\n : stringTargets(value).map((target) => target.split(\"*\").join(match));\n });\n\nconst packageImportDependencies = (source: string, importer: string, configName: string): string[] => {\n if (!source.startsWith(\"#\")) {\n return [];\n }\n\n const packageImports = readPackageImports(importer);\n\n if (packageImports === undefined) {\n return [];\n }\n\n const targets = packageImportTargets(source, packageImports.imports)\n .filter((target) => target.startsWith(\".\"))\n .flatMap((target) => targetCandidates(resolve(packageImports.root, target), configName));\n\n return [packageImports.file, ...targets];\n};\n\nconst normalizedResolvedPath = (path: string): string =>\n path.startsWith(\"file:\") ? fileURLToPath(path) : path;\n\nconst resolvedSourcePath = (source: string, importer: string, jiti: Jiti): string | undefined => {\n try {\n const path = jiti.esmResolve(source, {\n parentURL: pathToFileURL(importer).href,\n try: true,\n });\n\n return path === undefined ? undefined : normalizedResolvedPath(path);\n } catch {\n return undefined;\n }\n};\n\nconst sourceDependencies = (\n source: string,\n importer: string,\n configName: string,\n jiti: Jiti,\n): string[] => {\n const dependency = resolvedSourcePath(source, importer, jiti);\n const packageDependencies = packageImportDependencies(source, importer, configName);\n\n return dependency === undefined\n ? [...unresolvedCandidates(source, importer, configName), ...packageDependencies]\n : [dependency, ...packageDependencies];\n};\n\nconst configLayerDirectory = (path: string, configName: string, configRoot: string): string => {\n const segments = configName.split(/[\\\\/]/u).filter((segment) => segment.length > 0);\n let directory = resolve(path);\n let remaining = segments.length;\n\n while (remaining > 0) {\n directory = dirname(directory);\n remaining -= 1;\n }\n\n return resolve(directory, ...segments) === resolve(path) ? directory : resolve(configRoot);\n};\n\nconst c12SourceDependencies = (\n source: string,\n importer: string,\n configName: string,\n configRoot: string,\n): string[] => {\n const clean = source.split(/[?#]/u, 1)[0] ?? \"\";\n\n if (clean === \".\" || (!isAbsolute(clean) && !clean.startsWith(\".\"))) {\n return [];\n }\n\n const cwd = configLayerDirectory(importer, configName, configRoot);\n const extension = extname(clean);\n const target = (extension.length === 0 || extension === basename(clean))\n ? resolve(cwd, clean, configName)\n : resolve(cwd, clean);\n\n return targetCandidates(target, configName);\n};\n\nconst directDependencies = (path: string, configName: string, configRoot: string): string[] => {\n const module = MODULE_EXTENSIONS.has(extname(path).toLowerCase()) ? moduleSources(path) : undefined;\n const sources = module?.all ?? dataSources(path);\n const extended = module?.extended ?? sources;\n const jiti = createJiti(path, {\n extensions: RESOLVABLE_EXTENSIONS,\n fsCache: false,\n moduleCache: false,\n });\n\n return [\n ...sources.flatMap((source) => sourceDependencies(source, path, configName, jiti)),\n ...extended.flatMap((source) => c12SourceDependencies(source, path, configName, configRoot)),\n ]\n .filter((dependency) => !dependency.includes(`${sep}node_modules${sep}`));\n};\n\nconst resolveConfigDependencies = (\n configFile: string,\n configName = basename(configFile),\n configRoot = dirname(configFile),\n): string[] => {\n const dependencies: Set<string> = new Set();\n const pending = [resolve(configFile)];\n\n while (pending.length > 0) {\n const path = pending.pop();\n\n if (path === undefined) {\n break;\n }\n\n if (dependencies.has(path)) {\n continue;\n }\n\n dependencies.add(path);\n pending.push(...directDependencies(path, configName, configRoot));\n }\n\n return [...dependencies];\n};\n\nexport { resolveConfigDependencies };\n"]}
@@ -35,9 +35,10 @@ declare const runCodegen: (options?: RunCodegenOptions) => Promise<RunCodegenRes
35
35
  declare const isCodegenDisabled: (cwd: string, mode?: string, configFile?: string) => Promise<boolean>;
36
36
  declare const ensureGeneratedIn: (context: CodegenContext, options?: EnsureGeneratedOptions) => Promise<boolean>;
37
37
  declare const ensureGenerated: (cwd: string, options?: EnsureGeneratedOptions) => Promise<boolean>;
38
- declare const resolveConfigWatch: (cwd: string, mode?: string, configFile?: string) => Promise<{
38
+ declare const resolveConfigWatch: (cwd: string, mode?: string, configFile?: string, initialDependencies?: string[]) => Promise<{
39
39
  paths: string[];
40
- regenerate: () => Promise<void>;
40
+ resolvePaths: () => string[];
41
+ regenerate: () => Promise<string[]>;
41
42
  }>;
42
43
  export { runCodegen, isCodegenDisabled, ensureGenerated, ensureGeneratedIn, resolveConfigWatch, type RunCodegenResult, };
43
44
  //# sourceMappingURL=run-codegen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAiBvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CAC3C,CAAC;AAWF,KAAK,sBAAsB,GAAG;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAgEF,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CAsCnF,CAAC;AAsBF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,OAAO,CAQjG,CAAC;AAoDF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CAGH,CAAC;AAEhG,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,aAAa,MAAM,KACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAS9D,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAmBvD,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,qBAAqB,CAAC;AAEpG,KAAK,iBAAiB,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CAC3C,CAAC;AAWF,KAAK,sBAAsB,GAAG;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAgEF,QAAA,MAAM,UAAU,GAAU,UAAS,iBAAsB,KAAG,OAAO,CAAC,gBAAgB,CAsCnF,CAAC;AAsBF,QAAA,MAAM,iBAAiB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,OAAO,CAQjG,CAAC;AAoDF,QAAA,MAAM,iBAAiB,GACnB,SAAS,cAAc,EACvB,UAAS,sBAA2B,KACrC,OAAO,CAAC,OAAO,CAAuE,CAAC;AAG1F,QAAA,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,UAAS,sBAA2B,KAAG,OAAO,CAAC,OAAO,CAGH,CAAC;AAEhG,QAAA,MAAM,kBAAkB,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,aAAa,MAAM,EACnB,sBAAqB,MAAM,EAAO,KACnC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAAE,CAsChG,CAAC;AAEF,OAAO,EACH,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -1,16 +1,17 @@
1
1
  import { runCodegen as runCodegenCore } from "@gtkx/codegen";
2
2
  import { getShadowingStorePaths, sweepProjectStaging } from "@gtkx/codegen/internal";
3
3
  import { loadConfig } from "@gtkx/config";
4
- import { isAgentRulesEnabled, resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "@gtkx/config/internal";
4
+ import { configDependenciesFor, isAgentRulesEnabled, resolveElementComponents, resolveElementProps, resolveLazyElements, resolveOmittedProps, } from "@gtkx/config/internal";
5
5
  import { info } from "@gtkx/utils";
6
6
  import { existsSync, rmSync } from "node:fs";
7
- import { join, resolve } from "node:path";
7
+ import { join, relative, resolve } from "node:path";
8
8
  import { resolveCatalogProject, synchronizeCatalogs } from "../i18n/catalogs.js";
9
9
  import { extractSourceCatalog } from "../i18n/source-messages.js";
10
10
  import { clearI18nTypes, emitI18nTypes } from "../i18n/types.js";
11
11
  import { upsertAgentRules } from "../internal/agent-rules.js";
12
12
  import { discoverSourceFiles } from "../internal/source-imports.js";
13
13
  import { emitSchemaEnv } from "../settings/schema.js";
14
+ import { resolveConfigDependencies } from "./config-dependencies.js";
14
15
  import { isCodegenStale, resolveCodegenInputs } from "./freshness.js";
15
16
  import { writeReference } from "./reference.js";
16
17
  import { resolveCodegenContext } from "./store-resolver.js";
@@ -164,12 +165,36 @@ const ensureGeneratedIn = async (context, options = {}) => (isPreflightSkipped(o
164
165
  const ensureGenerated = async (cwd, options = {}) => isPreflightSkipped(options)
165
166
  ? false
166
167
  : generate(await resolveCodegenContext(cwd, options.mode, options.configFile), options);
167
- const resolveConfigWatch = async (cwd, mode, configFile) => {
168
- const loaded = await loadConfig(cwd, { mode, configFile });
168
+ const resolveConfigWatch = async (cwd, mode, configFile, initialDependencies = []) => {
169
+ let selectedConfigFile;
170
+ if (configFile === undefined) {
171
+ const loaded = await loadConfig(cwd, { mode });
172
+ selectedConfigFile = loaded.configFile;
173
+ }
174
+ else {
175
+ selectedConfigFile = resolve(cwd, configFile);
176
+ }
177
+ let knownDependencies = initialDependencies;
178
+ const selectedConfigName = relative(cwd, selectedConfigFile);
179
+ const resolvePaths = () => [
180
+ ...new Set([selectedConfigFile, ...knownDependencies]
181
+ .flatMap((path) => resolveConfigDependencies(path, selectedConfigName, cwd))),
182
+ ];
169
183
  return {
170
- paths: [resolve(loaded.root, loaded.configFile)],
184
+ paths: resolvePaths(),
185
+ resolvePaths,
171
186
  regenerate: async () => {
172
- await runCodegen({ cwd: loaded.root, mode, configFile: loaded.configFile });
187
+ let loaded;
188
+ try {
189
+ loaded = await loadConfig(cwd, { mode, configFile: selectedConfigFile });
190
+ }
191
+ catch (error) {
192
+ knownDependencies = [...new Set([...knownDependencies, ...configDependenciesFor(error)])];
193
+ throw error;
194
+ }
195
+ knownDependencies = configDependenciesFor(loaded);
196
+ await runCodegen({ cwd, mode, resolved: loaded });
197
+ return resolvePaths();
173
198
  },
174
199
  };
175
200
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run-codegen.js","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCodegen as runCodegenCore } from \"@gtkx/codegen\";\nimport { getShadowingStorePaths, sweepProjectStaging } from \"@gtkx/codegen/internal\";\nimport { type Config, loadConfig } from \"@gtkx/config\";\nimport {\n isAgentRulesEnabled,\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { resolveCatalogProject, synchronizeCatalogs } from \"../i18n/catalogs.js\";\nimport { extractSourceCatalog } from \"../i18n/source-messages.js\";\nimport { clearI18nTypes, emitI18nTypes } from \"../i18n/types.js\";\nimport { upsertAgentRules } from \"../internal/agent-rules.js\";\nimport { discoverSourceFiles } from \"../internal/source-imports.js\";\nimport { emitSchemaEnv } from \"../settings/schema.js\";\nimport { type CodegenInputs, isCodegenStale, resolveCodegenInputs } from \"./freshness.js\";\nimport { type ReferenceResult, writeReference } from \"./reference.js\";\nimport { type CodegenContext, type CodegenStore, resolveCodegenContext } from \"./store-resolver.js\";\n\ntype RunCodegenOptions = {\n cwd?: string;\n mode?: string | undefined;\n configFile?: string | undefined;\n isForced?: boolean;\n inputs?: CodegenInputs;\n resolved?: LoadedConfig;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\ntype LoadedConfig = {\n config: Config;\n configFile: string;\n};\n\ntype RunCodegenResult = {\n isRegenerated: boolean;\n namespaces: number;\n intrinsicElements: number;\n duration: number;\n girPath: string[];\n configFile: string;\n libraries: string[];\n reference?: ReferenceResult | undefined;\n};\n\ntype CodegenOptionsInput = {\n store: CodegenStore;\n libraries: string[];\n girPath: string[];\n elements: Config[\"elements\"];\n};\n\ntype PreparedCodegen = CodegenInputs & { isForced: boolean };\n\ntype EnsureGeneratedOptions = {\n shouldAnnounce?: boolean;\n mode?: string;\n configFile?: string | undefined;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\nconst GIR_PATH_MISSING_MESSAGE =\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or `sudo apt install libgirepository1.0-dev`), \" +\n \"or set `girPath` in gtkx.config.ts.\";\n\nconst removeStores = (paths: string[]): void => {\n for (const path of paths) {\n rmSync(path, { recursive: true, force: true });\n }\n};\n\nconst removeShadowingStores = (cwd: string): void => {\n sweepProjectStaging(cwd);\n removeStores(getShadowingStorePaths(cwd));\n};\n\nconst codegenOptions = ({ store, libraries, girPath, elements }: CodegenOptionsInput) => ({\n libraries,\n girPath,\n gi: {\n storeDir: store.giStoreDir,\n linkDir: store.giLinkDir,\n version: store.runtimeVersion,\n owner: store.owner,\n },\n jsx:\n store.react === null\n ? undefined\n : {\n storeDir: store.jsxStoreDir,\n linkDir: store.jsxLinkDir,\n version: store.react.version,\n owner: store.owner,\n },\n userComponents: resolveElementComponents(elements),\n userProps: resolveElementProps(elements),\n userLazyElements: resolveLazyElements(elements),\n userOmittedProps: resolveOmittedProps(elements),\n});\n\nconst disabledCodegenResult = (configFile: string): RunCodegenResult => ({\n isRegenerated: false,\n namespaces: 0,\n intrinsicElements: 0,\n duration: 0,\n girPath: [],\n configFile,\n libraries: [],\n});\n\nconst prepareCodegen = (options: RunCodegenOptions, cwd: string, config: Config): PreparedCodegen => {\n const { girPath, libraries, store } = options.inputs ?? resolveCodegenInputs(cwd, config);\n\n if (girPath.length === 0) {\n throw new Error(GIR_PATH_MISSING_MESSAGE);\n }\n\n const isForced = options.isForced === true || isCodegenStale({ girPath, libraries, store });\n\n return { girPath, libraries, store, isForced };\n};\n\nconst runCodegen = async (options: RunCodegenOptions = {}): Promise<RunCodegenResult> => {\n const cwd = options.cwd ?? process.cwd();\n const { config, configFile } = options.resolved ?? (await loadConfig(cwd, {\n mode: options.mode,\n configFile: options.configFile,\n }));\n await syncI18n(cwd, config.applicationId, options.shouldPreserveI18nMetadata);\n emitSchemaEnv(cwd);\n\n if (config.codegen === false) {\n removeShadowingStores(cwd);\n\n return disabledCodegenResult(configFile);\n }\n\n const { girPath, libraries, store, isForced } = prepareCodegen(options, cwd, config);\n\n const result = await runCodegenCore({\n ...codegenOptions({ store, libraries, girPath, elements: config.elements }),\n isForced,\n });\n\n const reference = await writeReference({ root: cwd, config, girPath, libraries, isForced });\n\n if (isAgentRulesEnabled(config)) {\n upsertAgentRules(cwd);\n }\n\n return {\n isRegenerated: result.isRegenerated,\n namespaces: result.namespaces,\n intrinsicElements: result.intrinsicElements,\n duration: result.duration,\n girPath,\n configFile,\n libraries,\n reference,\n };\n};\n\nconst syncI18n = async (\n root: string,\n applicationId: string,\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const project = resolveCatalogProject(root, applicationId);\n\n if (project === null) {\n clearI18nTypes(root);\n\n return;\n }\n\n const srcDir = join(root, \"src\");\n const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : root);\n await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);\n synchronizeCatalogs(project);\n await emitI18nTypes(root);\n};\n\nconst isCodegenDisabled = async (cwd: string, mode?: string, configFile?: string): Promise<boolean> => {\n try {\n const { config } = await loadConfig(cwd, { mode, configFile });\n\n return config.codegen === false;\n } catch {\n return false;\n }\n};\n\nconst resolveInputsOrNull = (cwd: string, config: Config): CodegenInputs | null => {\n try {\n return resolveCodegenInputs(cwd, config);\n } catch {\n return null;\n }\n};\n\nconst maybeAnnounceStale = (shouldAnnounce: boolean | undefined, inputs: CodegenInputs | null): void => {\n if (!shouldAnnounce) {\n return;\n }\n\n if (inputs === null || isCodegenStale(inputs)) {\n info(\"generated bindings missing; running codegen...\");\n }\n};\n\nconst isPreflightSkipped = (options: EnsureGeneratedOptions): boolean =>\n options.shouldAnnounce === true && process.env.GTKX_DISABLE_PREFLIGHT === \"1\";\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst generate = async (context: CodegenContext, options: EnsureGeneratedOptions): Promise<boolean> => {\n if (context.config.codegen === false) {\n const result = await runCodegen({\n cwd: context.root,\n mode: options.mode,\n resolved: { config: context.config, configFile: context.configFile },\n shouldPreserveI18nMetadata: options.shouldPreserveI18nMetadata,\n });\n\n return result.isRegenerated;\n }\n\n const inputs = resolveInputsOrNull(context.root, context.config);\n maybeAnnounceStale(options.shouldAnnounce, inputs);\n const resolved = { config: context.config, configFile: context.configFile };\n\n const result = await runCodegen({\n cwd: context.root,\n mode: options.mode,\n resolved,\n shouldPreserveI18nMetadata: options.shouldPreserveI18nMetadata,\n ...(inputs !== null && { inputs }),\n });\n\n return result.isRegenerated;\n};\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGeneratedIn = async (\n context: CodegenContext,\n options: EnsureGeneratedOptions = {},\n): Promise<boolean> => (isPreflightSkipped(options) ? false : generate(context, options));\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGenerated = async (cwd: string, options: EnsureGeneratedOptions = {}): Promise<boolean> =>\n isPreflightSkipped(options)\n ? false\n : generate(await resolveCodegenContext(cwd, options.mode, options.configFile), options);\n\nconst resolveConfigWatch = async (\n cwd: string,\n mode?: string,\n configFile?: string,\n): Promise<{ paths: string[]; regenerate: () => Promise<void> }> => {\n const loaded = await loadConfig(cwd, { mode, configFile });\n\n return {\n paths: [resolve(loaded.root, loaded.configFile)],\n regenerate: async () => {\n await runCodegen({ cwd: loaded.root, mode, configFile: loaded.configFile });\n },\n };\n};\n\nexport {\n runCodegen,\n isCodegenDisabled,\n ensureGenerated,\n ensureGeneratedIn,\n resolveConfigWatch,\n type RunCodegenResult,\n};\n"]}
1
+ {"version":3,"file":"run-codegen.js","sourceRoot":"","sources":["../../src/codegen/run-codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import { runCodegen as runCodegenCore } from \"@gtkx/codegen\";\nimport { getShadowingStorePaths, sweepProjectStaging } from \"@gtkx/codegen/internal\";\nimport { type Config, loadConfig } from \"@gtkx/config\";\nimport {\n configDependenciesFor,\n isAgentRulesEnabled,\n resolveElementComponents,\n resolveElementProps,\n resolveLazyElements,\n resolveOmittedProps,\n} from \"@gtkx/config/internal\";\nimport { info } from \"@gtkx/utils\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport { join, relative, resolve } from \"node:path\";\nimport { resolveCatalogProject, synchronizeCatalogs } from \"../i18n/catalogs.js\";\nimport { extractSourceCatalog } from \"../i18n/source-messages.js\";\nimport { clearI18nTypes, emitI18nTypes } from \"../i18n/types.js\";\nimport { upsertAgentRules } from \"../internal/agent-rules.js\";\nimport { discoverSourceFiles } from \"../internal/source-imports.js\";\nimport { emitSchemaEnv } from \"../settings/schema.js\";\nimport { resolveConfigDependencies } from \"./config-dependencies.js\";\nimport { type CodegenInputs, isCodegenStale, resolveCodegenInputs } from \"./freshness.js\";\nimport { type ReferenceResult, writeReference } from \"./reference.js\";\nimport { type CodegenContext, type CodegenStore, resolveCodegenContext } from \"./store-resolver.js\";\n\ntype RunCodegenOptions = {\n cwd?: string;\n mode?: string | undefined;\n configFile?: string | undefined;\n isForced?: boolean;\n inputs?: CodegenInputs;\n resolved?: LoadedConfig;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\ntype LoadedConfig = {\n config: Config;\n configFile: string;\n};\n\ntype RunCodegenResult = {\n isRegenerated: boolean;\n namespaces: number;\n intrinsicElements: number;\n duration: number;\n girPath: string[];\n configFile: string;\n libraries: string[];\n reference?: ReferenceResult | undefined;\n};\n\ntype CodegenOptionsInput = {\n store: CodegenStore;\n libraries: string[];\n girPath: string[];\n elements: Config[\"elements\"];\n};\n\ntype PreparedCodegen = CodegenInputs & { isForced: boolean };\n\ntype EnsureGeneratedOptions = {\n shouldAnnounce?: boolean;\n mode?: string;\n configFile?: string | undefined;\n shouldPreserveI18nMetadata?: boolean | undefined;\n};\n\nconst GIR_PATH_MISSING_MESSAGE =\n \"No GIR search paths available. Install gobject-introspection \" +\n \"(Linux: `sudo dnf install gobject-introspection-devel` or `sudo apt install libgirepository1.0-dev`), \" +\n \"or set `girPath` in gtkx.config.ts.\";\n\nconst removeStores = (paths: string[]): void => {\n for (const path of paths) {\n rmSync(path, { recursive: true, force: true });\n }\n};\n\nconst removeShadowingStores = (cwd: string): void => {\n sweepProjectStaging(cwd);\n removeStores(getShadowingStorePaths(cwd));\n};\n\nconst codegenOptions = ({ store, libraries, girPath, elements }: CodegenOptionsInput) => ({\n libraries,\n girPath,\n gi: {\n storeDir: store.giStoreDir,\n linkDir: store.giLinkDir,\n version: store.runtimeVersion,\n owner: store.owner,\n },\n jsx:\n store.react === null\n ? undefined\n : {\n storeDir: store.jsxStoreDir,\n linkDir: store.jsxLinkDir,\n version: store.react.version,\n owner: store.owner,\n },\n userComponents: resolveElementComponents(elements),\n userProps: resolveElementProps(elements),\n userLazyElements: resolveLazyElements(elements),\n userOmittedProps: resolveOmittedProps(elements),\n});\n\nconst disabledCodegenResult = (configFile: string): RunCodegenResult => ({\n isRegenerated: false,\n namespaces: 0,\n intrinsicElements: 0,\n duration: 0,\n girPath: [],\n configFile,\n libraries: [],\n});\n\nconst prepareCodegen = (options: RunCodegenOptions, cwd: string, config: Config): PreparedCodegen => {\n const { girPath, libraries, store } = options.inputs ?? resolveCodegenInputs(cwd, config);\n\n if (girPath.length === 0) {\n throw new Error(GIR_PATH_MISSING_MESSAGE);\n }\n\n const isForced = options.isForced === true || isCodegenStale({ girPath, libraries, store });\n\n return { girPath, libraries, store, isForced };\n};\n\nconst runCodegen = async (options: RunCodegenOptions = {}): Promise<RunCodegenResult> => {\n const cwd = options.cwd ?? process.cwd();\n const { config, configFile } = options.resolved ?? (await loadConfig(cwd, {\n mode: options.mode,\n configFile: options.configFile,\n }));\n await syncI18n(cwd, config.applicationId, options.shouldPreserveI18nMetadata);\n emitSchemaEnv(cwd);\n\n if (config.codegen === false) {\n removeShadowingStores(cwd);\n\n return disabledCodegenResult(configFile);\n }\n\n const { girPath, libraries, store, isForced } = prepareCodegen(options, cwd, config);\n\n const result = await runCodegenCore({\n ...codegenOptions({ store, libraries, girPath, elements: config.elements }),\n isForced,\n });\n\n const reference = await writeReference({ root: cwd, config, girPath, libraries, isForced });\n\n if (isAgentRulesEnabled(config)) {\n upsertAgentRules(cwd);\n }\n\n return {\n isRegenerated: result.isRegenerated,\n namespaces: result.namespaces,\n intrinsicElements: result.intrinsicElements,\n duration: result.duration,\n girPath,\n configFile,\n libraries,\n reference,\n };\n};\n\nconst syncI18n = async (\n root: string,\n applicationId: string,\n shouldPreserveMetadataMessages = true,\n): Promise<void> => {\n const project = resolveCatalogProject(root, applicationId);\n\n if (project === null) {\n clearI18nTypes(root);\n\n return;\n }\n\n const srcDir = join(root, \"src\");\n const sourceFiles = discoverSourceFiles(existsSync(srcDir) ? srcDir : root);\n await extractSourceCatalog(project, sourceFiles, shouldPreserveMetadataMessages);\n synchronizeCatalogs(project);\n await emitI18nTypes(root);\n};\n\nconst isCodegenDisabled = async (cwd: string, mode?: string, configFile?: string): Promise<boolean> => {\n try {\n const { config } = await loadConfig(cwd, { mode, configFile });\n\n return config.codegen === false;\n } catch {\n return false;\n }\n};\n\nconst resolveInputsOrNull = (cwd: string, config: Config): CodegenInputs | null => {\n try {\n return resolveCodegenInputs(cwd, config);\n } catch {\n return null;\n }\n};\n\nconst maybeAnnounceStale = (shouldAnnounce: boolean | undefined, inputs: CodegenInputs | null): void => {\n if (!shouldAnnounce) {\n return;\n }\n\n if (inputs === null || isCodegenStale(inputs)) {\n info(\"generated bindings missing; running codegen...\");\n }\n};\n\nconst isPreflightSkipped = (options: EnsureGeneratedOptions): boolean =>\n options.shouldAnnounce === true && process.env.GTKX_DISABLE_PREFLIGHT === \"1\";\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst generate = async (context: CodegenContext, options: EnsureGeneratedOptions): Promise<boolean> => {\n if (context.config.codegen === false) {\n const result = await runCodegen({\n cwd: context.root,\n mode: options.mode,\n resolved: { config: context.config, configFile: context.configFile },\n shouldPreserveI18nMetadata: options.shouldPreserveI18nMetadata,\n });\n\n return result.isRegenerated;\n }\n\n const inputs = resolveInputsOrNull(context.root, context.config);\n maybeAnnounceStale(options.shouldAnnounce, inputs);\n const resolved = { config: context.config, configFile: context.configFile };\n\n const result = await runCodegen({\n cwd: context.root,\n mode: options.mode,\n resolved,\n shouldPreserveI18nMetadata: options.shouldPreserveI18nMetadata,\n ...(inputs !== null && { inputs }),\n });\n\n return result.isRegenerated;\n};\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGeneratedIn = async (\n context: CodegenContext,\n options: EnsureGeneratedOptions = {},\n): Promise<boolean> => (isPreflightSkipped(options) ? false : generate(context, options));\n\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- the boolean reports whether codegen ran */\nconst ensureGenerated = async (cwd: string, options: EnsureGeneratedOptions = {}): Promise<boolean> =>\n isPreflightSkipped(options)\n ? false\n : generate(await resolveCodegenContext(cwd, options.mode, options.configFile), options);\n\nconst resolveConfigWatch = async (\n cwd: string,\n mode?: string,\n configFile?: string,\n initialDependencies: string[] = [],\n): Promise<{ paths: string[]; resolvePaths: () => string[]; regenerate: () => Promise<string[]> }> => {\n let selectedConfigFile: string;\n\n if (configFile === undefined) {\n const loaded = await loadConfig(cwd, { mode });\n selectedConfigFile = loaded.configFile;\n } else {\n selectedConfigFile = resolve(cwd, configFile);\n }\n\n let knownDependencies = initialDependencies;\n const selectedConfigName = relative(cwd, selectedConfigFile);\n const resolvePaths = (): string[] => [\n ...new Set(\n [selectedConfigFile, ...knownDependencies]\n .flatMap((path) => resolveConfigDependencies(path, selectedConfigName, cwd)),\n ),\n ];\n\n return {\n paths: resolvePaths(),\n resolvePaths,\n regenerate: async () => {\n let loaded: Awaited<ReturnType<typeof loadConfig>>;\n\n try {\n loaded = await loadConfig(cwd, { mode, configFile: selectedConfigFile });\n } catch (error) {\n knownDependencies = [...new Set([...knownDependencies, ...configDependenciesFor(error)])];\n throw error;\n }\n\n knownDependencies = configDependenciesFor(loaded);\n await runCodegen({ cwd, mode, resolved: loaded });\n\n return resolvePaths();\n },\n };\n};\n\nexport {\n runCodegen,\n isCodegenDisabled,\n ensureGenerated,\n ensureGeneratedIn,\n resolveConfigWatch,\n type RunCodegenResult,\n};\n"]}
@@ -15,6 +15,7 @@ type CodegenContext = {
15
15
  root: string;
16
16
  config: Config;
17
17
  configFile: string;
18
+ configDependencies: string[];
18
19
  };
19
20
  declare const resolveCodegenStore: (dir: string) => CodegenStore;
20
21
  declare const resolveCodegenContext: (cwd: string, mode?: string, selectedConfig?: string) => Promise<CodegenContext>;