@gtkx/cli 1.6.0 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +17 -5
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts.map +1 -1
- package/dist/codegen/freshness.js +45 -16
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/reference.d.ts.map +1 -1
- package/dist/codegen/reference.js +1 -7
- package/dist/codegen/reference.js.map +1 -1
- package/dist/codegen/report.d.ts.map +1 -1
- package/dist/codegen/report.js +5 -16
- package/dist/codegen/report.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +7 -7
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +35 -107
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -2
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +10 -19
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/build.d.ts +5 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +83 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts +1 -0
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +6 -5
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/deploy.d.ts +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +4 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +19 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +5 -15
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/freedesktop/copyright.d.ts.map +1 -1
- package/dist/deploy/freedesktop/copyright.js +2 -13
- package/dist/deploy/freedesktop/copyright.js.map +1 -1
- package/dist/deploy/freedesktop/metainfo.d.ts.map +1 -1
- package/dist/deploy/freedesktop/metainfo.js +41 -2
- package/dist/deploy/freedesktop/metainfo.js.map +1 -1
- package/dist/deploy/freedesktop/xml.d.ts.map +1 -1
- package/dist/deploy/freedesktop/xml.js +21 -25
- package/dist/deploy/freedesktop/xml.js.map +1 -1
- package/dist/deploy/nfpm/config.d.ts.map +1 -1
- package/dist/deploy/nfpm/config.js +5 -2
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/nfpm/contents.d.ts.map +1 -1
- package/dist/deploy/nfpm/contents.js +8 -0
- package/dist/deploy/nfpm/contents.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +2 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +32 -5
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.d.ts +2 -1
- package/dist/deploy/node-runtime/index.d.ts.map +1 -1
- package/dist/deploy/node-runtime/index.js +73 -4
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/node-runtime/license.d.ts.map +1 -1
- package/dist/deploy/node-runtime/license.js +2 -9
- package/dist/deploy/node-runtime/license.js.map +1 -1
- package/dist/deploy/notices/node-runtime.js +2 -2
- package/dist/deploy/notices/node-runtime.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +3 -10
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/copy-tree.d.ts.map +1 -1
- package/dist/deploy/payload/copy-tree.js +3 -3
- package/dist/deploy/payload/copy-tree.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +14 -1
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +2 -4
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts +1 -0
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +100 -14
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +6 -1
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -1
- package/dist/deploy/settings/build-manifest.js +17 -17
- package/dist/deploy/settings/build-manifest.js.map +1 -1
- package/dist/deploy/settings/extra-files.d.ts +1 -1
- package/dist/deploy/settings/extra-files.d.ts.map +1 -1
- package/dist/deploy/settings/extra-files.js +22 -1
- package/dist/deploy/settings/extra-files.js.map +1 -1
- package/dist/deploy/settings/index.d.ts +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +2 -1
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts.map +1 -1
- package/dist/deploy/settings/libraries.js +2 -19
- package/dist/deploy/settings/libraries.js.map +1 -1
- package/dist/deploy/settings/paths.d.ts +2 -2
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +110 -12
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/settings/screenshots.d.ts.map +1 -1
- package/dist/deploy/settings/screenshots.js +6 -31
- package/dist/deploy/settings/screenshots.js.map +1 -1
- package/dist/deploy/targets/flatpak-pnpm.js +4 -4
- package/dist/deploy/targets/flatpak-pnpm.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +15 -6
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/targets/flatpak-sources.js +1 -1
- package/dist/deploy/targets/flatpak-sources.js.map +1 -1
- package/dist/deploy/types.d.ts +1 -0
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/headless.d.ts +3 -0
- package/dist/dev/headless.d.ts.map +1 -0
- package/dist/dev/headless.js +35 -0
- package/dist/dev/headless.js.map +1 -0
- package/dist/dev/runner-deps.js +1 -1
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +1 -2
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/schema-dir.d.ts +1 -1
- package/dist/dev/schema-dir.d.ts.map +1 -1
- package/dist/dev/schema-dir.js +2 -4
- package/dist/dev/schema-dir.js.map +1 -1
- package/dist/i18n/catalogs.d.ts.map +1 -1
- package/dist/i18n/catalogs.js +2 -1
- package/dist/i18n/catalogs.js.map +1 -1
- package/dist/i18n/metadata-templates.d.ts.map +1 -1
- package/dist/i18n/metadata-templates.js +2 -1
- package/dist/i18n/metadata-templates.js.map +1 -1
- package/dist/i18n/source-messages.d.ts +3 -21
- package/dist/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +900 -85
- package/dist/i18n/source-messages.js.map +1 -1
- package/dist/i18n/types.d.ts +6 -7
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/i18n/types.js +83 -96
- package/dist/i18n/types.js.map +1 -1
- package/dist/internal/build-manifest.d.ts +5 -2
- package/dist/internal/build-manifest.d.ts.map +1 -1
- package/dist/internal/build-manifest.js +15 -2
- package/dist/internal/build-manifest.js.map +1 -1
- package/dist/internal/build-output.d.ts +8 -0
- package/dist/internal/build-output.d.ts.map +1 -0
- package/dist/internal/build-output.js +69 -0
- package/dist/internal/build-output.js.map +1 -0
- package/dist/internal/docs-elements.js +2 -2
- package/dist/internal/docs-elements.js.map +1 -1
- package/dist/internal/entry-arg.d.ts +4 -1
- package/dist/internal/entry-arg.d.ts.map +1 -1
- package/dist/internal/entry-arg.js +7 -1
- package/dist/internal/entry-arg.js.map +1 -1
- package/dist/internal/icon-path.d.ts.map +1 -1
- package/dist/internal/icon-path.js +5 -16
- package/dist/internal/icon-path.js.map +1 -1
- package/dist/internal/output-directory.d.ts +15 -0
- package/dist/internal/output-directory.d.ts.map +1 -0
- package/dist/internal/output-directory.js +490 -0
- package/dist/internal/output-directory.js.map +1 -0
- package/dist/internal/prepare-project.d.ts +2 -0
- package/dist/internal/prepare-project.d.ts.map +1 -1
- package/dist/internal/prepare-project.js +3 -3
- package/dist/internal/prepare-project.js.map +1 -1
- package/dist/internal/source-imports.d.ts.map +1 -1
- package/dist/internal/source-imports.js +10 -41
- package/dist/internal/source-imports.js.map +1 -1
- package/dist/mcp/client.js +2 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/settings/render.d.ts +0 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +1 -11
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +2 -2
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +21 -62
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +1 -2
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +19 -32
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +1 -3
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +1 -4
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -1
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -1
- package/dist/vite-plugins/build-manifest.js +2 -1
- package/dist/vite-plugins/build-manifest.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts.map +1 -1
- package/dist/vite-plugins/i18n.js +59 -6
- package/dist/vite-plugins/i18n.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +8 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +8 -6
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +32 -97
- package/dist/vite-plugins/resources.js.map +1 -1
- package/dist/vite-plugins/self-contained.d.ts.map +1 -1
- package/dist/vite-plugins/self-contained.js +159 -158
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +2 -4
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +1 -2
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +8 -14
- package/dist/vite-plugins/settings.js.map +1 -1
- package/dist/vite-plugins/undeclared-library.d.ts.map +1 -1
- package/dist/vite-plugins/undeclared-library.js +10 -13
- package/dist/vite-plugins/undeclared-library.js.map +1 -1
- package/dist/vite-plugins/worker.d.ts.map +1 -1
- package/dist/vite-plugins/worker.js +0 -1
- package/dist/vite-plugins/worker.js.map +1 -1
- package/package.json +21 -15
- package/src/builder.ts +18 -5
- package/src/cli.ts +3 -0
- package/src/codegen/freshness.ts +66 -17
- package/src/codegen/reference.ts +1 -8
- package/src/codegen/report.ts +5 -21
- package/src/codegen/run-codegen.ts +42 -151
- package/src/codegen/store-resolver.ts +10 -26
- package/src/commands/build.ts +13 -2
- package/src/commands/codegen.ts +6 -5
- package/src/commands/deploy.ts +4 -2
- package/src/commands/dev.ts +20 -1
- package/src/commands/docs.ts +5 -17
- package/src/deploy/freedesktop/copyright.ts +2 -14
- package/src/deploy/freedesktop/metainfo.ts +73 -21
- package/src/deploy/freedesktop/xml.ts +24 -32
- package/src/deploy/nfpm/config.ts +5 -2
- package/src/deploy/nfpm/contents.ts +8 -0
- package/src/deploy/node-runtime/elf.ts +43 -5
- package/src/deploy/node-runtime/index.ts +105 -5
- package/src/deploy/node-runtime/license.ts +2 -8
- package/src/deploy/notices/node-runtime.ts +2 -2
- package/src/deploy/notices/packages.ts +3 -11
- package/src/deploy/payload/copy-tree.ts +3 -4
- package/src/deploy/payload/launcher.ts +20 -1
- package/src/deploy/payload/stage.ts +3 -7
- package/src/deploy/run-deploy.ts +56 -16
- package/src/deploy/settings/build-manifest.ts +30 -17
- package/src/deploy/settings/extra-files.ts +26 -2
- package/src/deploy/settings/index.ts +3 -1
- package/src/deploy/settings/libraries.ts +1 -22
- package/src/deploy/settings/paths.ts +68 -13
- package/src/deploy/settings/screenshots.ts +8 -46
- package/src/deploy/targets/flatpak-pnpm.ts +4 -4
- package/src/deploy/targets/flatpak-source.ts +17 -6
- package/src/deploy/targets/flatpak-sources.ts +1 -1
- package/src/deploy/types.ts +1 -0
- package/src/dev/headless.ts +40 -0
- package/src/dev/runner-deps.ts +1 -1
- package/src/dev/runner-main.ts +1 -2
- package/src/dev/schema-dir.ts +2 -4
- package/src/i18n/catalogs.ts +2 -1
- package/src/i18n/metadata-templates.ts +2 -1
- package/src/i18n/source-messages.ts +1442 -262
- package/src/i18n/types.ts +97 -131
- package/src/internal/build-manifest.ts +25 -1
- package/src/internal/build-output.ts +99 -0
- package/src/internal/docs-elements.ts +2 -2
- package/src/internal/entry-arg.ts +8 -1
- package/src/internal/icon-path.ts +6 -19
- package/src/internal/output-directory.ts +699 -0
- package/src/internal/prepare-project.ts +5 -5
- package/src/internal/source-imports.ts +14 -50
- package/src/mcp/client.ts +2 -2
- package/src/settings/render.ts +1 -13
- package/src/settings/schema.ts +19 -81
- package/src/vite-plugins/asset-imports.ts +20 -44
- package/src/vite-plugins/asset-specifier.ts +0 -5
- package/src/vite-plugins/build-manifest.ts +7 -1
- package/src/vite-plugins/i18n.ts +87 -5
- package/src/vite-plugins/index.ts +16 -11
- package/src/vite-plugins/resources.ts +37 -140
- package/src/vite-plugins/self-contained.ts +184 -185
- package/src/vite-plugins/settings-worker-env.ts +2 -4
- package/src/vite-plugins/settings.ts +11 -20
- package/src/vite-plugins/undeclared-library.ts +14 -20
- package/src/vite-plugins/worker.ts +0 -1
- package/dist/i18n/binding-extractor.d.ts +0 -30
- package/dist/i18n/binding-extractor.d.ts.map +0 -1
- package/dist/i18n/binding-extractor.js +0 -1324
- package/dist/i18n/binding-extractor.js.map +0 -1
- package/dist/i18n/extractor-plugin.d.ts +0 -8
- package/dist/i18n/extractor-plugin.d.ts.map +0 -1
- package/dist/i18n/extractor-plugin.js +0 -247
- package/dist/i18n/extractor-plugin.js.map +0 -1
- package/dist/internal/data-dir.d.ts +0 -4
- package/dist/internal/data-dir.d.ts.map +0 -1
- package/dist/internal/data-dir.js +0 -52
- package/dist/internal/data-dir.js.map +0 -1
- package/dist/vite-plugins/animated.d.ts +0 -5
- package/dist/vite-plugins/animated.d.ts.map +0 -1
- package/dist/vite-plugins/animated.js +0 -325
- package/dist/vite-plugins/animated.js.map +0 -1
- package/src/i18n/binding-extractor.ts +0 -1969
- package/src/i18n/extractor-plugin.ts +0 -413
- package/src/internal/data-dir.ts +0 -70
- package/src/vite-plugins/animated.ts +0 -486
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
import { type NodePath, parseSync, type Scope, traverse } from "@babel/core";
|
|
2
3
|
import { isBuiltin } from "node:module";
|
|
3
4
|
import { posix } from "node:path";
|
|
4
|
-
import { parseSync, Visitor } from "vite";
|
|
5
5
|
|
|
6
|
-
type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
requires: Set<string>;
|
|
10
|
-
urls: Set<string>;
|
|
11
|
-
};
|
|
6
|
+
type BindingKind = "factory" | "module" | "require" | "url";
|
|
7
|
+
|
|
8
|
+
type ResolvedBinding = NonNullable<ReturnType<Scope["getBinding"]>>;
|
|
12
9
|
|
|
13
10
|
type Scan = {
|
|
14
|
-
bindings: Bindings;
|
|
15
|
-
calls: ESTree.CallExpression[];
|
|
16
11
|
sources: string[];
|
|
17
12
|
};
|
|
18
13
|
|
|
@@ -21,199 +16,208 @@ type Chunk = {
|
|
|
21
16
|
code: string;
|
|
22
17
|
};
|
|
23
18
|
|
|
24
|
-
type PatternItem =
|
|
25
|
-
| ESTree.BindingPattern |
|
|
26
|
-
ESTree.BindingProperty |
|
|
27
|
-
ESTree.BindingRestElement |
|
|
28
|
-
ESTree.FormalParameterRest |
|
|
29
|
-
ESTree.TSParameterProperty |
|
|
30
|
-
null;
|
|
31
|
-
|
|
32
19
|
const REQUIRE_FACTORY = "createRequire";
|
|
33
20
|
const REQUIRE_BINDING = "require";
|
|
34
21
|
const RESOLVE_PROPERTY = "resolve";
|
|
35
|
-
const
|
|
22
|
+
const URL_PROPERTY = "url";
|
|
23
|
+
const MODULE_BUILTINS = new Set(["module", "node:module"]);
|
|
36
24
|
const OUTPUT_DIRECTORY = ".";
|
|
37
25
|
const RELATIVE_SPECIFIER = /^\.\.?(?:\/|$)/;
|
|
38
26
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const countName = (declarations: Map<string, number>, name: string | null): void => {
|
|
43
|
-
if (name !== null) {
|
|
44
|
-
declarations.set(name, (declarations.get(name) ?? 0) + 1);
|
|
27
|
+
const importedName = (path: NodePath): string | null => {
|
|
28
|
+
if (!path.isImportSpecifier()) {
|
|
29
|
+
return null;
|
|
45
30
|
}
|
|
31
|
+
|
|
32
|
+
const { imported } = path.node;
|
|
33
|
+
|
|
34
|
+
return imported.type === "Identifier" ? imported.name : imported.value;
|
|
46
35
|
};
|
|
47
36
|
|
|
48
|
-
const
|
|
49
|
-
|
|
37
|
+
const importKind = (path: NodePath): BindingKind | null => {
|
|
38
|
+
const declaration = path.parentPath;
|
|
39
|
+
|
|
40
|
+
if (!declaration.isImportDeclaration() || !MODULE_BUILTINS.has(declaration.node.source.value)) {
|
|
50
41
|
return null;
|
|
51
42
|
}
|
|
52
43
|
|
|
53
|
-
if (
|
|
54
|
-
return
|
|
44
|
+
if (importedName(path) === REQUIRE_FACTORY) {
|
|
45
|
+
return "factory";
|
|
55
46
|
}
|
|
56
47
|
|
|
57
|
-
|
|
58
|
-
|
|
48
|
+
return path.isImportNamespaceSpecifier() || path.isImportDefaultSpecifier() ? "module" : null;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const memberName = (path: NodePath): string | null => {
|
|
52
|
+
if (!path.isMemberExpression()) {
|
|
53
|
+
return null;
|
|
59
54
|
}
|
|
60
55
|
|
|
61
|
-
|
|
62
|
-
};
|
|
56
|
+
const property = path.get("property");
|
|
63
57
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
countPattern(declarations, boundPattern(item));
|
|
58
|
+
if (path.node.computed) {
|
|
59
|
+
return property.isStringLiteral() ? property.node.value : null;
|
|
67
60
|
}
|
|
61
|
+
|
|
62
|
+
return property.isIdentifier() ? property.node.name : null;
|
|
68
63
|
};
|
|
69
64
|
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
const isImportMeta = (path: NodePath): boolean =>
|
|
66
|
+
path.isMetaProperty() && path.node.meta.name === "import" && path.node.property.name === "meta";
|
|
67
|
+
|
|
68
|
+
const isDirectMetaUrl = (path: NodePath): boolean => {
|
|
69
|
+
if (!path.isMemberExpression() || memberName(path) !== URL_PROPERTY) {
|
|
70
|
+
return false;
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
|
|
76
|
-
countName(declarations, pattern.name);
|
|
73
|
+
const object = path.get("object");
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
return isImportMeta(object);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const bindingKind = (binding: ResolvedBinding, seen: Set<ResolvedBinding>): BindingKind | null => {
|
|
79
|
+
if (seen.has(binding)) {
|
|
80
|
+
return null;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
const next = new Set(seen).add(binding);
|
|
84
|
+
const imported = importKind(binding.path);
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
if (imported !== null) {
|
|
87
|
+
return imported;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (!binding.path.isVariableDeclarator()) {
|
|
91
|
+
return null;
|
|
85
92
|
}
|
|
86
93
|
|
|
87
|
-
|
|
94
|
+
const initializer = binding.path.get("init");
|
|
95
|
+
|
|
96
|
+
return initializer.node === null ? null : expressionKind(initializer, next);
|
|
88
97
|
};
|
|
89
98
|
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
const nameKind = (scope: Scope, name: string, seen: Set<ResolvedBinding>): BindingKind | null => {
|
|
100
|
+
const binding = scope.getBinding(name);
|
|
101
|
+
|
|
102
|
+
if (binding !== undefined) {
|
|
103
|
+
return bindingKind(binding, seen);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (name === REQUIRE_FACTORY) {
|
|
107
|
+
return "factory";
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return name === REQUIRE_BINDING ? "require" : null;
|
|
96
111
|
};
|
|
97
112
|
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
},
|
|
117
|
-
FunctionExpression: (node) => {
|
|
118
|
-
countFunction(declarations, node);
|
|
119
|
-
},
|
|
120
|
-
ImportDefaultSpecifier: (node) => {
|
|
121
|
-
countPattern(declarations, node.local);
|
|
122
|
-
},
|
|
123
|
-
ImportNamespaceSpecifier: (node) => {
|
|
124
|
-
countPattern(declarations, node.local);
|
|
125
|
-
},
|
|
126
|
-
ImportSpecifier: (node) => {
|
|
127
|
-
countPattern(declarations, node.local);
|
|
128
|
-
},
|
|
129
|
-
VariableDeclarator: (node) => {
|
|
130
|
-
countPattern(declarations, node.id);
|
|
131
|
-
},
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
const isUnshadowed = (name: string, bindings: Bindings): boolean => (bindings.declarations.get(name) ?? 0) <= 1;
|
|
135
|
-
|
|
136
|
-
const templateString = (node: ESTree.TemplateLiteral): string | null => {
|
|
137
|
-
const [quasi] = node.quasis;
|
|
138
|
-
|
|
139
|
-
return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;
|
|
113
|
+
const isModuleExpression = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {
|
|
114
|
+
if (path.isIdentifier()) {
|
|
115
|
+
return nameKind(path.scope, path.node.name, seen) === "module";
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!path.isCallExpression()) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const [source] = path.get("arguments");
|
|
123
|
+
const callee = path.get("callee");
|
|
124
|
+
const sourceName = source === undefined ? null : literalString(source);
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
sourceName !== null &&
|
|
128
|
+
MODULE_BUILTINS.has(sourceName) &&
|
|
129
|
+
isRequireExpression(callee, seen)
|
|
130
|
+
);
|
|
140
131
|
};
|
|
141
132
|
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
144
|
-
return
|
|
133
|
+
const isFactoryExpression = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {
|
|
134
|
+
if (path.isIdentifier()) {
|
|
135
|
+
return nameKind(path.scope, path.node.name, seen) === "factory";
|
|
145
136
|
}
|
|
146
137
|
|
|
147
|
-
|
|
138
|
+
if (!path.isMemberExpression() || memberName(path) !== REQUIRE_FACTORY) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return isModuleExpression(path.get("object"), seen);
|
|
148
143
|
};
|
|
149
144
|
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
return
|
|
145
|
+
const isRequireFactoryCall = (path: NodePath, seen: Set<ResolvedBinding>): boolean => {
|
|
146
|
+
if (!path.isCallExpression()) {
|
|
147
|
+
return false;
|
|
153
148
|
}
|
|
154
149
|
|
|
155
|
-
const
|
|
150
|
+
const callee = path.get("callee");
|
|
156
151
|
|
|
157
|
-
return
|
|
152
|
+
return isFactoryExpression(callee, seen);
|
|
158
153
|
};
|
|
159
154
|
|
|
160
|
-
const
|
|
161
|
-
|
|
155
|
+
const expressionKind = (path: NodePath, seen: Set<ResolvedBinding>): BindingKind | null => {
|
|
156
|
+
if (isDirectMetaUrl(path)) {
|
|
157
|
+
return "url";
|
|
158
|
+
}
|
|
162
159
|
|
|
163
|
-
|
|
164
|
-
|
|
160
|
+
if (path.isIdentifier()) {
|
|
161
|
+
return nameKind(path.scope, path.node.name, seen);
|
|
162
|
+
}
|
|
165
163
|
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
if (isFactoryExpression(path, seen)) {
|
|
165
|
+
return "factory";
|
|
166
|
+
}
|
|
168
167
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
if (isModuleExpression(path, seen)) {
|
|
169
|
+
return "module";
|
|
170
|
+
}
|
|
172
171
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
isRequireName(referenceName(object), bindings) ||
|
|
176
|
-
isRequireFactory(object, bindings);
|
|
172
|
+
return isRequireFactoryCall(path, seen) ? "require" : null;
|
|
173
|
+
};
|
|
177
174
|
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
callee.property.type === "Identifier" &&
|
|
182
|
-
callee.property.name === RESOLVE_PROPERTY &&
|
|
183
|
-
isResolveTarget(callee.object, bindings);
|
|
175
|
+
const isMetaUrl = (path: NodePath): boolean =>
|
|
176
|
+
isDirectMetaUrl(path) ||
|
|
177
|
+
(path.isIdentifier() && nameKind(path.scope, path.node.name, new Set()) === "url");
|
|
184
178
|
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
isRequireFactory(call.callee, bindings) ||
|
|
189
|
-
isResolveMember(call.callee, bindings);
|
|
179
|
+
const isRequireExpression = (path: NodePath, seen: Set<ResolvedBinding> = new Set()): boolean =>
|
|
180
|
+
isRequireFactoryCall(path, seen) ||
|
|
181
|
+
(path.isIdentifier() && nameKind(path.scope, path.node.name, seen) === "require");
|
|
190
182
|
|
|
191
|
-
const
|
|
192
|
-
if (
|
|
193
|
-
return;
|
|
183
|
+
const hasMetaUrlArgument = (path: NodePath): boolean => {
|
|
184
|
+
if (!path.isCallExpression()) {
|
|
185
|
+
return false;
|
|
194
186
|
}
|
|
195
187
|
|
|
196
|
-
|
|
197
|
-
if (specifier.type === "ImportSpecifier" && exportName(specifier.imported) === REQUIRE_FACTORY) {
|
|
198
|
-
bindings.factories.add(specifier.local.name);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
188
|
+
return path.get("arguments").some((argument) => isMetaUrl(argument));
|
|
201
189
|
};
|
|
202
190
|
|
|
203
|
-
const
|
|
204
|
-
|
|
191
|
+
const isResolveMember = (path: NodePath): boolean => {
|
|
192
|
+
if (!path.isMemberExpression() || memberName(path) !== RESOLVE_PROPERTY) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
205
195
|
|
|
206
|
-
|
|
207
|
-
|
|
196
|
+
const object = path.get("object");
|
|
197
|
+
|
|
198
|
+
return isImportMeta(object) || isRequireExpression(object);
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const isResolvingCall = (path: NodePath): boolean => {
|
|
202
|
+
if (!path.isCallExpression()) {
|
|
203
|
+
return false;
|
|
208
204
|
}
|
|
209
205
|
|
|
210
|
-
|
|
211
|
-
|
|
206
|
+
const callee = path.get("callee");
|
|
207
|
+
|
|
208
|
+
return hasMetaUrlArgument(path) || isRequireExpression(callee) || isResolveMember(callee);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const literalString = (path: NodePath): string | null => {
|
|
212
|
+
if (path.isStringLiteral()) {
|
|
213
|
+
return path.node.value;
|
|
212
214
|
}
|
|
213
215
|
|
|
214
|
-
if (
|
|
215
|
-
|
|
216
|
+
if (!path.isTemplateLiteral() || path.node.expressions.length > 0) {
|
|
217
|
+
return null;
|
|
216
218
|
}
|
|
219
|
+
|
|
220
|
+
return path.node.quasis[0]?.value.cooked ?? null;
|
|
217
221
|
};
|
|
218
222
|
|
|
219
223
|
const collectSource = (scan: Scan, source: string | null): void => {
|
|
@@ -222,55 +226,51 @@ const collectSource = (scan: Scan, source: string | null): void => {
|
|
|
222
226
|
}
|
|
223
227
|
};
|
|
224
228
|
|
|
225
|
-
const
|
|
226
|
-
if (
|
|
227
|
-
|
|
229
|
+
const collectCallSources = (scan: Scan, path: NodePath): void => {
|
|
230
|
+
if (!isResolvingCall(path) || !path.isCallExpression()) {
|
|
231
|
+
return;
|
|
228
232
|
}
|
|
229
|
-
};
|
|
230
233
|
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
ExportAllDeclaration: (node) => {
|
|
236
|
-
collectSource(scan, node.source.value);
|
|
237
|
-
},
|
|
238
|
-
ExportNamedDeclaration: (node) => {
|
|
239
|
-
collectSource(scan, node.source?.value ?? null);
|
|
240
|
-
},
|
|
241
|
-
ImportDeclaration: (node) => {
|
|
242
|
-
collectFactories(node, scan.bindings);
|
|
243
|
-
collectSource(scan, node.source.value);
|
|
244
|
-
},
|
|
245
|
-
ImportExpression: (node) => {
|
|
246
|
-
collectSource(scan, literalString(node.source));
|
|
247
|
-
},
|
|
248
|
-
VariableDeclarator: (node) => {
|
|
249
|
-
collectBinding(node, scan.bindings);
|
|
250
|
-
},
|
|
251
|
-
});
|
|
234
|
+
for (const argument of path.get("arguments")) {
|
|
235
|
+
collectSource(scan, literalString(argument));
|
|
236
|
+
}
|
|
237
|
+
};
|
|
252
238
|
|
|
253
239
|
const scanChunk = (chunk: Chunk): Scan => {
|
|
254
|
-
const scan: Scan = {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
240
|
+
const scan: Scan = { sources: [] };
|
|
241
|
+
const ast = parseSync(chunk.code, {
|
|
242
|
+
ast: true,
|
|
243
|
+
babelrc: false,
|
|
244
|
+
configFile: false,
|
|
245
|
+
filename: chunk.fileName,
|
|
246
|
+
sourceType: "module",
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
if (ast === null) {
|
|
250
|
+
throw new Error(`Cannot inspect ${chunk.fileName}`);
|
|
251
|
+
}
|
|
259
252
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
253
|
+
traverse(ast, {
|
|
254
|
+
CallExpression: (path) => {
|
|
255
|
+
collectCallSources(scan, path);
|
|
256
|
+
},
|
|
257
|
+
ExportAllDeclaration: (path) => {
|
|
258
|
+
collectSource(scan, path.node.source.value);
|
|
259
|
+
},
|
|
260
|
+
ExportNamedDeclaration: (path) => {
|
|
261
|
+
collectSource(scan, path.node.source?.value ?? null);
|
|
262
|
+
},
|
|
263
|
+
ImportDeclaration: (path) => {
|
|
264
|
+
collectSource(scan, path.node.source.value);
|
|
265
|
+
},
|
|
266
|
+
ImportExpression: (path) => {
|
|
267
|
+
collectSource(scan, literalString(path.get("source")));
|
|
268
|
+
},
|
|
269
|
+
});
|
|
263
270
|
|
|
264
271
|
return scan;
|
|
265
272
|
};
|
|
266
273
|
|
|
267
|
-
const callSpecifiers = (scan: Scan): string[] =>
|
|
268
|
-
scan.calls
|
|
269
|
-
.filter((call) => isResolvingCall(call, scan.bindings))
|
|
270
|
-
.flatMap((call) => call.arguments)
|
|
271
|
-
.map((argument) => literalString(argument))
|
|
272
|
-
.filter((specifier) => specifier !== null);
|
|
273
|
-
|
|
274
274
|
const isReachable = (specifier: string, directory: string, emitted: Set<string>): boolean => {
|
|
275
275
|
if (isBuiltin(specifier)) {
|
|
276
276
|
return true;
|
|
@@ -286,10 +286,9 @@ const isReachable = (specifier: string, directory: string, emitted: Set<string>)
|
|
|
286
286
|
};
|
|
287
287
|
|
|
288
288
|
const unreachableSpecifiers = (chunk: Chunk, emitted: Set<string>): string[] => {
|
|
289
|
-
const scan = scanChunk(chunk);
|
|
290
289
|
const directory = posix.dirname(chunk.fileName);
|
|
291
290
|
|
|
292
|
-
return new Set(
|
|
291
|
+
return new Set(scanChunk(chunk).sources)
|
|
293
292
|
.values()
|
|
294
293
|
.filter((specifier) => !isReachable(specifier, directory, emitted))
|
|
295
294
|
.toArray()
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { UserConfig } from "vite";
|
|
2
2
|
import type { Plugin } from "vitest/config";
|
|
3
|
-
import { createConfigLoader
|
|
4
|
-
import { resolveDataDir } from "../internal/data-dir.js";
|
|
3
|
+
import { createConfigLoader } from "@gtkx/config/internal";
|
|
5
4
|
import { prependSchemaDir, stageAndCompileProjectSchemas } from "../settings/schema.js";
|
|
6
5
|
|
|
7
6
|
function gtkxSettingsWorkerEnv(): Plugin {
|
|
@@ -13,8 +12,7 @@ function gtkxSettingsWorkerEnv(): Plugin {
|
|
|
13
12
|
|
|
14
13
|
async config(config: UserConfig) {
|
|
15
14
|
const loaded = await loadConfig.load(config.root ?? process.cwd());
|
|
16
|
-
const
|
|
17
|
-
const dir = stageAndCompileProjectSchemas(loaded.root, dataDir);
|
|
15
|
+
const dir = stageAndCompileProjectSchemas(loaded.root);
|
|
18
16
|
|
|
19
17
|
if (dir === null) {
|
|
20
18
|
return;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ModuleNode, Plugin, ResolvedConfig, UserConfig, ViteDevServer } from "vite";
|
|
3
|
-
import { resolveFuture } from "@gtkx/config/internal";
|
|
1
|
+
import type { ModuleNode, Plugin, ResolvedConfig, ViteDevServer } from "vite";
|
|
4
2
|
import { error, errorMessage, info, sortStrings } from "@gtkx/utils";
|
|
5
3
|
import { readFileSync } from "node:fs";
|
|
6
4
|
import { basename, join } from "node:path";
|
|
7
5
|
import type { BuildManifestCollector } from "../internal/build-manifest.js";
|
|
8
6
|
import type { AssetEmitter } from "./asset-emitter.js";
|
|
9
7
|
import { prependBanner } from "../internal/banner.js";
|
|
10
|
-
import { resolveDataDir } from "../internal/data-dir.js";
|
|
11
8
|
import { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from "../internal/staging-dir.js";
|
|
12
9
|
import { compileSchemas } from "../settings/compile.js";
|
|
13
10
|
import { parseSchemaXml, SchemaParseError } from "../settings/parser.js";
|
|
@@ -25,8 +22,6 @@ import { createVirtualNamespace } from "./virtual-module.js";
|
|
|
25
22
|
type PluginState = {
|
|
26
23
|
schemaDir: RetainedStagingDir;
|
|
27
24
|
rootDir: string | null;
|
|
28
|
-
dataDir: string | null;
|
|
29
|
-
isV2ResourceImports: boolean;
|
|
30
25
|
isBuild: boolean;
|
|
31
26
|
schemaEnvTimer: ReturnType<typeof setTimeout> | null;
|
|
32
27
|
trackedSchemas: Map<string, string>;
|
|
@@ -81,7 +76,7 @@ const syncSchemaEnv = (state: PluginState): void => {
|
|
|
81
76
|
}
|
|
82
77
|
|
|
83
78
|
try {
|
|
84
|
-
emitSchemaEnv(state.rootDir
|
|
79
|
+
emitSchemaEnv(state.rootDir);
|
|
85
80
|
} catch (error_) {
|
|
86
81
|
error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);
|
|
87
82
|
}
|
|
@@ -105,12 +100,6 @@ const scheduleSchemaEnvSync = (state: PluginState): void => {
|
|
|
105
100
|
}, SCHEMA_ENV_DEBOUNCE_MS);
|
|
106
101
|
};
|
|
107
102
|
|
|
108
|
-
const applyUserConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader): Promise<void> => {
|
|
109
|
-
const loaded = await loadConfig.load(config.root ?? process.cwd());
|
|
110
|
-
state.isV2ResourceImports = resolveFuture(loaded.config.future).isResourceImported;
|
|
111
|
-
state.dataDir = state.isV2ResourceImports ? null : resolveDataDir(loaded.root);
|
|
112
|
-
};
|
|
113
|
-
|
|
114
103
|
const applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {
|
|
115
104
|
state.isBuild = config.command === "build";
|
|
116
105
|
state.rootDir = typeof config.root === "string" ? config.root : null;
|
|
@@ -173,6 +162,12 @@ const compileBuildSchemas = (schemaFiles: string[]): Buffer =>
|
|
|
173
162
|
return readFileSync(join(dir, "gschemas.compiled"));
|
|
174
163
|
});
|
|
175
164
|
|
|
165
|
+
const rejectLegacySchemaSpecifier = (source: string): void => {
|
|
166
|
+
if (source.startsWith("#data/")) {
|
|
167
|
+
throw new Error(`${JSON.stringify(source)} uses the legacy #data schema form`);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
176
171
|
const buildSchemaPaths = (rootDir: string, schemaFiles: string[]): string[] =>
|
|
177
172
|
schemaFiles.map((filePath) => {
|
|
178
173
|
const rel = projectRelativeSchemaPath(rootDir, filePath);
|
|
@@ -262,12 +257,10 @@ const watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {
|
|
|
262
257
|
server.watcher.on("unlink", refreshSchemaTypes);
|
|
263
258
|
};
|
|
264
259
|
|
|
265
|
-
function gtkxSettings(
|
|
260
|
+
function gtkxSettings(buildManifest?: BuildManifestCollector): Plugin {
|
|
266
261
|
const state: PluginState = {
|
|
267
262
|
schemaDir: createRetainedStagingDir(SCHEMA_STAGING_PREFIX),
|
|
268
263
|
rootDir: null,
|
|
269
|
-
dataDir: null,
|
|
270
|
-
isV2ResourceImports: false,
|
|
271
264
|
isBuild: false,
|
|
272
265
|
schemaEnvTimer: null,
|
|
273
266
|
trackedSchemas: new Map(),
|
|
@@ -278,10 +271,6 @@ function gtkxSettings(loadConfig: ConfigLoader, buildManifest?: BuildManifestCol
|
|
|
278
271
|
name: "gtkx:settings",
|
|
279
272
|
enforce: "pre",
|
|
280
273
|
|
|
281
|
-
async config(config: UserConfig) {
|
|
282
|
-
await applyUserConfig(state, config, loadConfig);
|
|
283
|
-
},
|
|
284
|
-
|
|
285
274
|
configResolved(config) {
|
|
286
275
|
applyResolvedConfig(state, config);
|
|
287
276
|
},
|
|
@@ -303,6 +292,8 @@ function gtkxSettings(loadConfig: ConfigLoader, buildManifest?: BuildManifestCol
|
|
|
303
292
|
return;
|
|
304
293
|
}
|
|
305
294
|
|
|
295
|
+
rejectLegacySchemaSpecifier(source);
|
|
296
|
+
|
|
306
297
|
return resolveToVirtual(this, { source, importer, options });
|
|
307
298
|
},
|
|
308
299
|
|
|
@@ -15,11 +15,12 @@ type PluginState = {
|
|
|
15
15
|
type GeneratedModule = {
|
|
16
16
|
source: string;
|
|
17
17
|
kind: string;
|
|
18
|
-
namespace: string
|
|
18
|
+
namespace: string;
|
|
19
19
|
importer: string;
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
const GENERATED_MODULE_PATTERN = /^@gtkx\/(gi|jsx)\/([a-z0-9]+)$/;
|
|
23
|
+
const DEFAULT_LIBRARY_NAMESPACES: Set<string> = new Set(["gtk", "adw"]);
|
|
23
24
|
|
|
24
25
|
const girSearchPaths = async (state: PluginState): Promise<string[]> => {
|
|
25
26
|
if (state.girPath === null) {
|
|
@@ -36,10 +37,6 @@ const findGirIdentifier = (girPath: string[], namespace: string): string | undef
|
|
|
36
37
|
discoverGirNamespaces(girPath).find((identifier) => getNamespace(identifier) === namespace);
|
|
37
38
|
|
|
38
39
|
const parseGeneratedModule = (source: string, importer: string | undefined): GeneratedModule | null => {
|
|
39
|
-
if (source === "@gtkx/jsx") {
|
|
40
|
-
return { source, kind: "jsx", namespace: null, importer: importer ?? "the project's sources" };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
40
|
const matched = GENERATED_MODULE_PATTERN.exec(source);
|
|
44
41
|
const kind = matched?.[1];
|
|
45
42
|
const namespace = matched?.[2];
|
|
@@ -74,7 +71,7 @@ const hasStoreModule = (storeDir: string, exportKey: string): boolean => {
|
|
|
74
71
|
};
|
|
75
72
|
|
|
76
73
|
const unreachableStoreError = (generated: GeneratedModule, options: StoreOptions): Error => {
|
|
77
|
-
const provided =
|
|
74
|
+
const provided = `"${generated.namespace}"`;
|
|
78
75
|
|
|
79
76
|
return new Error(
|
|
80
77
|
`Cannot resolve "${generated.source}": the generated store in ${options.storeDir} does provide ` +
|
|
@@ -84,21 +81,22 @@ const unreachableStoreError = (generated: GeneratedModule, options: StoreOptions
|
|
|
84
81
|
);
|
|
85
82
|
};
|
|
86
83
|
|
|
87
|
-
const missingIndexError = (generated: GeneratedModule): Error =>
|
|
88
|
-
new Error(
|
|
89
|
-
`Cannot resolve "${generated.source}": the binding store has no index module. ` +
|
|
90
|
-
"Run gtkx codegen to regenerate the store.",
|
|
91
|
-
);
|
|
92
|
-
|
|
93
84
|
const undeclaredLibraryError = (source: string, namespace: string, girPath: string[]): Error => {
|
|
94
85
|
const identifier = findGirIdentifier(girPath, namespace);
|
|
95
86
|
|
|
96
87
|
if (identifier === undefined) {
|
|
97
88
|
return new Error(
|
|
98
89
|
`Cannot resolve "${source}": the binding store has no "${namespace}" module, and no ` +
|
|
99
|
-
`GIR data for it was found in [${girPath.join(", ")}]. If "${namespace}" is a library, ` +
|
|
100
|
-
"
|
|
101
|
-
"gtkx.config.ts. Otherwise run gtkx codegen to regenerate the store.",
|
|
90
|
+
`GIR data for it was found in [${girPath.join(", ")}]. If "${namespace}" is a library, install ` +
|
|
91
|
+
"its gobject-introspection data package. Gtk-4.0 and Adw-1 are bound by default; add only other " +
|
|
92
|
+
"GIR identifiers to `libraries` in gtkx.config.ts. Otherwise run gtkx codegen to regenerate the store.",
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (DEFAULT_LIBRARY_NAMESPACES.has(namespace)) {
|
|
97
|
+
return new Error(
|
|
98
|
+
`Cannot resolve "${source}": the "${identifier}" bindings have not been generated. ` +
|
|
99
|
+
"The Gtk and Adwaita namespaces are bound by default; run gtkx dev or gtkx build again.",
|
|
102
100
|
);
|
|
103
101
|
}
|
|
104
102
|
|
|
@@ -110,16 +108,12 @@ const undeclaredLibraryError = (source: string, namespace: string, girPath: stri
|
|
|
110
108
|
|
|
111
109
|
const unresolvedModuleError = async (state: PluginState, generated: GeneratedModule): Promise<Error> => {
|
|
112
110
|
const options = getStoreOptions(state.root, generated.kind);
|
|
113
|
-
const exportKey =
|
|
111
|
+
const exportKey = `./${generated.namespace}`;
|
|
114
112
|
|
|
115
113
|
if (options !== null && hasStoreModule(options.storeDir, exportKey)) {
|
|
116
114
|
return unreachableStoreError(generated, options);
|
|
117
115
|
}
|
|
118
116
|
|
|
119
|
-
if (generated.namespace === null) {
|
|
120
|
-
return missingIndexError(generated);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
117
|
return undeclaredLibraryError(generated.source, generated.namespace, await girSearchPaths(state));
|
|
124
118
|
};
|
|
125
119
|
|