@gtkx/cli 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/builder.d.ts +1 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -2
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/codegen/freshness.d.ts.map +1 -1
- package/dist/codegen/freshness.js +2 -1
- package/dist/codegen/freshness.js.map +1 -1
- package/dist/codegen/reference.d.ts +17 -0
- package/dist/codegen/reference.d.ts.map +1 -0
- package/dist/codegen/reference.js +37 -0
- package/dist/codegen/reference.js.map +1 -0
- package/dist/codegen/report.d.ts.map +1 -1
- package/dist/codegen/report.js +17 -3
- package/dist/codegen/report.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +4 -0
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +93 -27
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/codegen.js +1 -1
- package/dist/commands/codegen.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +10 -16
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/mcp.d.ts +13 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +68 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/deploy/freedesktop/localize.d.ts +6 -0
- package/dist/deploy/freedesktop/localize.d.ts.map +1 -0
- package/dist/deploy/freedesktop/localize.js +107 -0
- package/dist/deploy/freedesktop/localize.js.map +1 -0
- package/dist/deploy/install-hints.d.ts.map +1 -1
- package/dist/deploy/install-hints.js +5 -0
- package/dist/deploy/install-hints.js.map +1 -1
- package/dist/deploy/notices/gtkx.js +1 -1
- package/dist/deploy/notices/gtkx.js.map +1 -1
- package/dist/deploy/notices/libraries.d.ts.map +1 -1
- package/dist/deploy/notices/libraries.js +2 -1
- package/dist/deploy/notices/libraries.js.map +1 -1
- package/dist/deploy/payload/launcher.d.ts.map +1 -1
- package/dist/deploy/payload/launcher.js +2 -0
- package/dist/deploy/payload/launcher.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +20 -11
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/run-deploy.d.ts.map +1 -1
- package/dist/deploy/run-deploy.js +87 -15
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts.map +1 -1
- package/dist/deploy/settings/libraries.js +7 -9
- package/dist/deploy/settings/libraries.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +21 -10
- package/dist/deploy/targets/flatpak-source.js.map +1 -1
- package/dist/deploy/tools.d.ts +6 -1
- package/dist/deploy/tools.d.ts.map +1 -1
- package/dist/deploy/tools.js +27 -4
- package/dist/deploy/tools.js.map +1 -1
- package/dist/dev/locale-dir.d.ts +3 -0
- package/dist/dev/locale-dir.d.ts.map +1 -0
- package/dist/dev/locale-dir.js +17 -0
- package/dist/dev/locale-dir.js.map +1 -0
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +4 -1
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +6 -0
- package/dist/dev/runner.js.map +1 -1
- package/dist/dev/vite-dev-server.d.ts +1 -0
- package/dist/dev/vite-dev-server.d.ts.map +1 -1
- package/dist/dev/vite-dev-server.js.map +1 -1
- package/dist/i18n/binding-extractor.d.ts +30 -0
- package/dist/i18n/binding-extractor.d.ts.map +1 -0
- package/dist/i18n/binding-extractor.js +1324 -0
- package/dist/i18n/binding-extractor.js.map +1 -0
- package/dist/i18n/catalog-template.d.ts +3 -0
- package/dist/i18n/catalog-template.d.ts.map +1 -0
- package/dist/i18n/catalog-template.js +18 -0
- package/dist/i18n/catalog-template.js.map +1 -0
- package/dist/i18n/catalogs.d.ts +21 -0
- package/dist/i18n/catalogs.d.ts.map +1 -0
- package/dist/i18n/catalogs.js +139 -0
- package/dist/i18n/catalogs.js.map +1 -0
- package/dist/i18n/extractor-plugin.d.ts +8 -0
- package/dist/i18n/extractor-plugin.d.ts.map +1 -0
- package/dist/i18n/extractor-plugin.js +247 -0
- package/dist/i18n/extractor-plugin.js.map +1 -0
- package/dist/i18n/metadata-templates.d.ts +11 -0
- package/dist/i18n/metadata-templates.d.ts.map +1 -0
- package/dist/i18n/metadata-templates.js +11 -0
- package/dist/i18n/metadata-templates.js.map +1 -0
- package/dist/i18n/source-messages.d.ts +23 -0
- package/dist/i18n/source-messages.d.ts.map +1 -0
- package/dist/i18n/source-messages.js +403 -0
- package/dist/i18n/source-messages.js.map +1 -0
- package/dist/i18n/types.d.ts +10 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +108 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/internal/agent-rules.d.ts +7 -0
- package/dist/internal/agent-rules.d.ts.map +1 -0
- package/dist/internal/agent-rules.js +106 -0
- package/dist/internal/agent-rules.js.map +1 -0
- package/dist/internal/docs-elements.d.ts +8 -0
- package/dist/internal/docs-elements.d.ts.map +1 -0
- package/dist/internal/docs-elements.js +12 -0
- package/dist/internal/docs-elements.js.map +1 -0
- package/dist/internal/source-imports.d.ts +5 -1
- package/dist/internal/source-imports.d.ts.map +1 -1
- package/dist/internal/source-imports.js +25 -47
- package/dist/internal/source-imports.js.map +1 -1
- package/dist/mcp/client-config.d.ts +22 -0
- package/dist/mcp/client-config.d.ts.map +1 -0
- package/dist/mcp/client-config.js +94 -0
- package/dist/mcp/client-config.js.map +1 -0
- package/dist/mcp/client.d.ts +0 -1
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +11 -39
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/handlers.d.ts +2 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/settings/render.d.ts +4 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +11 -2
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +3 -1
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/animated.d.ts +5 -0
- package/dist/vite-plugins/animated.d.ts.map +1 -0
- package/dist/vite-plugins/animated.js +325 -0
- package/dist/vite-plugins/animated.js.map +1 -0
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +4 -14
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts +5 -0
- package/dist/vite-plugins/i18n.d.ts.map +1 -0
- package/dist/vite-plugins/i18n.js +88 -0
- package/dist/vite-plugins/i18n.js.map +1 -0
- package/dist/vite-plugins/index.d.ts +1 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +5 -1
- 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 +12 -57
- 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 +128 -135
- package/dist/vite-plugins/self-contained.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +2 -2
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +2 -1
- package/dist/vite-plugins/settings.js.map +1 -1
- package/package.json +11 -9
- package/src/builder.ts +3 -2
- package/src/cli.ts +5 -0
- package/src/codegen/freshness.ts +2 -1
- package/src/codegen/reference.ts +59 -0
- package/src/codegen/report.ts +18 -3
- package/src/codegen/run-codegen.ts +134 -31
- package/src/commands/codegen.ts +1 -1
- package/src/commands/docs.ts +10 -28
- package/src/commands/mcp.ts +81 -0
- package/src/deploy/freedesktop/localize.ts +144 -0
- package/src/deploy/install-hints.ts +5 -0
- package/src/deploy/notices/gtkx.ts +1 -1
- package/src/deploy/notices/libraries.ts +2 -1
- package/src/deploy/payload/launcher.ts +2 -0
- package/src/deploy/payload/stage.ts +35 -10
- package/src/deploy/run-deploy.ts +128 -13
- package/src/deploy/settings/libraries.ts +7 -10
- package/src/deploy/targets/flatpak-source.ts +33 -10
- package/src/deploy/tools.ts +36 -3
- package/src/dev/locale-dir.ts +22 -0
- package/src/dev/runner-main.ts +4 -1
- package/src/dev/runner.ts +8 -0
- package/src/dev/vite-dev-server.ts +1 -0
- package/src/i18n/binding-extractor.ts +1969 -0
- package/src/i18n/catalog-template.ts +24 -0
- package/src/i18n/catalogs.ts +216 -0
- package/src/i18n/extractor-plugin.ts +413 -0
- package/src/i18n/metadata-templates.ts +29 -0
- package/src/i18n/source-messages.ts +608 -0
- package/src/i18n/types.ts +154 -0
- package/src/internal/agent-rules.ts +135 -0
- package/src/internal/docs-elements.ts +21 -0
- package/src/internal/source-imports.ts +31 -60
- package/src/mcp/client-config.ts +130 -0
- package/src/mcp/client.ts +17 -44
- package/src/mcp/handlers.ts +7 -6
- package/src/settings/render.ts +16 -2
- package/src/settings/schema.ts +3 -1
- package/src/vite-plugins/animated.ts +486 -0
- package/src/vite-plugins/asset-imports.ts +5 -17
- package/src/vite-plugins/i18n.ts +146 -0
- package/src/vite-plugins/index.ts +5 -0
- package/src/vite-plugins/resources.ts +12 -74
- package/src/vite-plugins/self-contained.ts +150 -169
- package/src/vite-plugins/settings-worker-env.ts +2 -2
- package/src/vite-plugins/settings.ts +2 -1
|
@@ -1,198 +1,191 @@
|
|
|
1
|
-
import { isRecord } from "@gtkx/utils";
|
|
2
1
|
import { isBuiltin } from "node:module";
|
|
3
2
|
import { posix } from "node:path";
|
|
4
|
-
import { parseSync } from "vite";
|
|
3
|
+
import { parseSync, Visitor } from "vite";
|
|
5
4
|
const REQUIRE_FACTORY = "createRequire";
|
|
6
5
|
const REQUIRE_BINDING = "require";
|
|
7
6
|
const RESOLVE_PROPERTY = "resolve";
|
|
8
7
|
const MODULE_BUILTIN = "node:module";
|
|
9
8
|
const OUTPUT_DIRECTORY = ".";
|
|
10
9
|
const RELATIVE_SPECIFIER = /^\.\.?(?:\/|$)/;
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
"ExportNamedDeclaration",
|
|
15
|
-
"ImportDeclaration",
|
|
16
|
-
"ImportExpression",
|
|
17
|
-
]);
|
|
18
|
-
const isAstNode = (value) => isRecord(value) && typeof value.type === "string";
|
|
19
|
-
const nodeType = (node) => (typeof node.type === "string" ? node.type : "");
|
|
20
|
-
const nodeName = (node) => node !== null && typeof node.name === "string" ? node.name : null;
|
|
21
|
-
const childNode = (node, key) => {
|
|
22
|
-
const value = node[key];
|
|
23
|
-
return isAstNode(value) ? value : null;
|
|
24
|
-
};
|
|
25
|
-
const childNodes = (node, key) => {
|
|
26
|
-
const value = node[key];
|
|
27
|
-
if (!Array.isArray(value)) {
|
|
28
|
-
return [];
|
|
29
|
-
}
|
|
30
|
-
const entries = value;
|
|
31
|
-
return entries.filter(isAstNode);
|
|
32
|
-
};
|
|
33
|
-
const childValues = (value) => {
|
|
34
|
-
if (Array.isArray(value)) {
|
|
35
|
-
const entries = value;
|
|
36
|
-
return entries;
|
|
37
|
-
}
|
|
38
|
-
if (!isAstNode(value)) {
|
|
39
|
-
return [];
|
|
40
|
-
}
|
|
41
|
-
return Object.values(value).filter((child) => typeof child === "object" && child !== null);
|
|
42
|
-
};
|
|
43
|
-
const visitNode = (value, visit) => {
|
|
44
|
-
if (isAstNode(value)) {
|
|
45
|
-
visit(value);
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
const walk = (root, visit) => {
|
|
49
|
-
const stack = [root];
|
|
50
|
-
while (stack.length > 0) {
|
|
51
|
-
const current = stack.pop();
|
|
52
|
-
visitNode(current, visit);
|
|
53
|
-
for (const value of childValues(current)) {
|
|
54
|
-
stack.push(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const countName = (declarations, node) => {
|
|
59
|
-
const name = nodeName(node);
|
|
10
|
+
const exportName = (name) => (name.type === "Identifier" ? name.name : null);
|
|
11
|
+
const referenceName = (node) => (node.type === "Identifier" ? node.name : null);
|
|
12
|
+
const countName = (declarations, name) => {
|
|
60
13
|
if (name !== null) {
|
|
61
14
|
declarations.set(name, (declarations.get(name) ?? 0) + 1);
|
|
62
15
|
}
|
|
63
16
|
};
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
17
|
+
const boundPattern = (item) => {
|
|
18
|
+
if (item === null) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (item.type === "Property") {
|
|
22
|
+
return item.value;
|
|
23
|
+
}
|
|
24
|
+
if (item.type === "RestElement") {
|
|
25
|
+
return item.argument;
|
|
26
|
+
}
|
|
27
|
+
return item.type === "TSParameterProperty" ? item.parameter : item;
|
|
28
|
+
};
|
|
29
|
+
const countPatterns = (declarations, items) => {
|
|
30
|
+
for (const item of items) {
|
|
31
|
+
countPattern(declarations, boundPattern(item));
|
|
69
32
|
}
|
|
70
33
|
};
|
|
34
|
+
const countPattern = (declarations, pattern) => {
|
|
35
|
+
if (pattern === null) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (pattern.type === "Identifier") {
|
|
39
|
+
countName(declarations, pattern.name);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (pattern.type === "AssignmentPattern") {
|
|
43
|
+
countPattern(declarations, pattern.left);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
countPatterns(declarations, pattern.type === "ObjectPattern" ? pattern.properties : pattern.elements);
|
|
47
|
+
};
|
|
48
|
+
const countFunction = (declarations, node) => {
|
|
49
|
+
countPattern(declarations, node.id);
|
|
50
|
+
countPatterns(declarations, node.params);
|
|
51
|
+
};
|
|
52
|
+
const declarationVisitor = (declarations) => ({
|
|
53
|
+
ArrowFunctionExpression: (node) => {
|
|
54
|
+
countFunction(declarations, node);
|
|
55
|
+
},
|
|
56
|
+
CatchClause: (node) => {
|
|
57
|
+
countPattern(declarations, node.param);
|
|
58
|
+
},
|
|
59
|
+
ClassDeclaration: (node) => {
|
|
60
|
+
countPattern(declarations, node.id);
|
|
61
|
+
},
|
|
62
|
+
ClassExpression: (node) => {
|
|
63
|
+
countPattern(declarations, node.id);
|
|
64
|
+
},
|
|
65
|
+
ExportSpecifier: (node) => {
|
|
66
|
+
countName(declarations, exportName(node.local));
|
|
67
|
+
},
|
|
68
|
+
FunctionDeclaration: (node) => {
|
|
69
|
+
countFunction(declarations, node);
|
|
70
|
+
},
|
|
71
|
+
FunctionExpression: (node) => {
|
|
72
|
+
countFunction(declarations, node);
|
|
73
|
+
},
|
|
74
|
+
ImportDefaultSpecifier: (node) => {
|
|
75
|
+
countPattern(declarations, node.local);
|
|
76
|
+
},
|
|
77
|
+
ImportNamespaceSpecifier: (node) => {
|
|
78
|
+
countPattern(declarations, node.local);
|
|
79
|
+
},
|
|
80
|
+
ImportSpecifier: (node) => {
|
|
81
|
+
countPattern(declarations, node.local);
|
|
82
|
+
},
|
|
83
|
+
VariableDeclarator: (node) => {
|
|
84
|
+
countPattern(declarations, node.id);
|
|
85
|
+
},
|
|
86
|
+
});
|
|
71
87
|
const isUnshadowed = (name, bindings) => (bindings.declarations.get(name) ?? 0) <= 1;
|
|
72
88
|
const templateString = (node) => {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
const [quasi] = childNodes(node, "quasis");
|
|
77
|
-
const value = quasi === undefined ? null : quasi.value;
|
|
78
|
-
return isRecord(value) && typeof value.cooked === "string" ? value.cooked : null;
|
|
89
|
+
const [quasi] = node.quasis;
|
|
90
|
+
return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;
|
|
79
91
|
};
|
|
80
92
|
const literalString = (node) => {
|
|
81
|
-
if (node ===
|
|
82
|
-
return
|
|
83
|
-
}
|
|
84
|
-
if (nodeType(node) === "Literal") {
|
|
85
|
-
return typeof node.value === "string" ? node.value : null;
|
|
93
|
+
if (node?.type === "TemplateLiteral") {
|
|
94
|
+
return templateString(node);
|
|
86
95
|
}
|
|
87
|
-
return
|
|
96
|
+
return node?.type === "Literal" && typeof node.value === "string" ? node.value : null;
|
|
88
97
|
};
|
|
89
98
|
const isMetaUrl = (node, bindings) => {
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
return object !== null && nodeType(object) === "MetaProperty";
|
|
99
|
+
if (node.type === "MemberExpression") {
|
|
100
|
+
return node.object.type === "MetaProperty";
|
|
93
101
|
}
|
|
94
|
-
const name =
|
|
102
|
+
const name = referenceName(node);
|
|
95
103
|
return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);
|
|
96
104
|
};
|
|
97
|
-
const hasMetaUrl = (node, bindings) =>
|
|
105
|
+
const hasMetaUrl = (node, bindings) => node.arguments.some((argument) => isMetaUrl(argument, bindings));
|
|
98
106
|
const isRequireName = (name, bindings) => name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);
|
|
99
107
|
const isFactoryName = (name, bindings) => name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);
|
|
100
|
-
const isRequireFactory = (node, bindings) =>
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return isFactoryName(nodeName(childNode(node, "callee")), bindings) || hasMetaUrl(node, bindings);
|
|
105
|
-
};
|
|
106
|
-
const isResolveTarget = (object, bindings) => nodeType(object) === "MetaProperty" ||
|
|
107
|
-
isRequireName(nodeName(object), bindings) ||
|
|
108
|
+
const isRequireFactory = (node, bindings) => node.type === "CallExpression" &&
|
|
109
|
+
(isFactoryName(referenceName(node.callee), bindings) || hasMetaUrl(node, bindings));
|
|
110
|
+
const isResolveTarget = (object, bindings) => object.type === "MetaProperty" ||
|
|
111
|
+
isRequireName(referenceName(object), bindings) ||
|
|
108
112
|
isRequireFactory(object, bindings);
|
|
109
|
-
const isResolveMember = (callee, bindings) =>
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
119
|
-
const isResolvingCall = (call, bindings) => {
|
|
120
|
-
if (hasMetaUrl(call, bindings)) {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
const callee = childNode(call, "callee");
|
|
124
|
-
if (callee === null) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
return (isRequireName(nodeName(callee), bindings) ||
|
|
128
|
-
isRequireFactory(callee, bindings) ||
|
|
129
|
-
isResolveMember(callee, bindings));
|
|
130
|
-
};
|
|
113
|
+
const isResolveMember = (callee, bindings) => callee.type === "MemberExpression" &&
|
|
114
|
+
!callee.computed &&
|
|
115
|
+
callee.property.type === "Identifier" &&
|
|
116
|
+
callee.property.name === RESOLVE_PROPERTY &&
|
|
117
|
+
isResolveTarget(callee.object, bindings);
|
|
118
|
+
const isResolvingCall = (call, bindings) => hasMetaUrl(call, bindings) ||
|
|
119
|
+
isRequireName(referenceName(call.callee), bindings) ||
|
|
120
|
+
isRequireFactory(call.callee, bindings) ||
|
|
121
|
+
isResolveMember(call.callee, bindings);
|
|
131
122
|
const collectFactories = (node, bindings) => {
|
|
132
|
-
if (
|
|
123
|
+
if (node.source.value !== MODULE_BUILTIN) {
|
|
133
124
|
return;
|
|
134
125
|
}
|
|
135
|
-
for (const specifier of
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
bindings.factories.add(local);
|
|
126
|
+
for (const specifier of node.specifiers) {
|
|
127
|
+
if (specifier.type === "ImportSpecifier" && exportName(specifier.imported) === REQUIRE_FACTORY) {
|
|
128
|
+
bindings.factories.add(specifier.local.name);
|
|
139
129
|
}
|
|
140
130
|
}
|
|
141
131
|
};
|
|
142
132
|
const collectBinding = (node, bindings) => {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
if (name === null || init === null) {
|
|
133
|
+
const { id, init } = node;
|
|
134
|
+
if (init === null || id.type !== "Identifier") {
|
|
146
135
|
return;
|
|
147
136
|
}
|
|
148
137
|
if (isMetaUrl(init, bindings)) {
|
|
149
|
-
bindings.urls.add(name);
|
|
138
|
+
bindings.urls.add(id.name);
|
|
150
139
|
}
|
|
151
140
|
if (isRequireFactory(init, bindings)) {
|
|
152
|
-
bindings.requires.add(name);
|
|
141
|
+
bindings.requires.add(id.name);
|
|
153
142
|
}
|
|
154
143
|
};
|
|
155
|
-
const
|
|
156
|
-
const collectSource = (scan, node, type) => {
|
|
157
|
-
if (!SOURCE_STATEMENTS.has(type)) {
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const source = literalString(childNode(node, "source"));
|
|
144
|
+
const collectSource = (scan, source) => {
|
|
161
145
|
if (source !== null) {
|
|
162
146
|
scan.sources.push(source);
|
|
163
147
|
}
|
|
164
148
|
};
|
|
165
|
-
const collectCall = (scan, node
|
|
166
|
-
if (
|
|
149
|
+
const collectCall = (scan, node) => {
|
|
150
|
+
if (node.arguments.some((argument) => literalString(argument) !== null)) {
|
|
167
151
|
scan.calls.push(node);
|
|
168
152
|
}
|
|
169
153
|
};
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
154
|
+
const scanVisitor = (scan) => ({
|
|
155
|
+
CallExpression: (node) => {
|
|
156
|
+
collectCall(scan, node);
|
|
157
|
+
},
|
|
158
|
+
ExportAllDeclaration: (node) => {
|
|
159
|
+
collectSource(scan, node.source.value);
|
|
160
|
+
},
|
|
161
|
+
ExportNamedDeclaration: (node) => {
|
|
162
|
+
collectSource(scan, node.source?.value ?? null);
|
|
163
|
+
},
|
|
164
|
+
ImportDeclaration: (node) => {
|
|
174
165
|
collectFactories(node, scan.bindings);
|
|
175
|
-
|
|
176
|
-
|
|
166
|
+
collectSource(scan, node.source.value);
|
|
167
|
+
},
|
|
168
|
+
ImportExpression: (node) => {
|
|
169
|
+
collectSource(scan, literalString(node.source));
|
|
170
|
+
},
|
|
171
|
+
VariableDeclarator: (node) => {
|
|
177
172
|
collectBinding(node, scan.bindings);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
collectCall(scan, node, type);
|
|
181
|
-
};
|
|
173
|
+
},
|
|
174
|
+
});
|
|
182
175
|
const scanChunk = (chunk) => {
|
|
183
176
|
const scan = {
|
|
184
177
|
bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },
|
|
185
178
|
calls: [],
|
|
186
179
|
sources: [],
|
|
187
180
|
};
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
181
|
+
const { program } = parseSync(chunk.fileName, chunk.code);
|
|
182
|
+
new Visitor(declarationVisitor(scan.bindings.declarations)).visit(program);
|
|
183
|
+
new Visitor(scanVisitor(scan)).visit(program);
|
|
191
184
|
return scan;
|
|
192
185
|
};
|
|
193
186
|
const callSpecifiers = (scan) => scan.calls
|
|
194
187
|
.filter((call) => isResolvingCall(call, scan.bindings))
|
|
195
|
-
.flatMap((call) =>
|
|
188
|
+
.flatMap((call) => call.arguments)
|
|
196
189
|
.map((argument) => literalString(argument))
|
|
197
190
|
.filter((specifier) => specifier !== null);
|
|
198
191
|
const isReachable = (specifier, directory, emitted) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-contained.js","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAsBjC,MAAM,eAAe,GAAG,eAAe,CAAC;AACxC,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAC5C,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAC9B,sBAAsB;IACtB,wBAAwB;IACxB,mBAAmB;IACnB,kBAAkB;CACrB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1G,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAU,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE7F,MAAM,QAAQ,GAAG,CAAC,IAAoB,EAAiB,EAAE,CACrD,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAEtE,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,GAAW,EAAkB,EAAE;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,GAAW,EAAa,EAAE;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAc,KAAK,CAAC;IAEjC,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAa,EAAE;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAc,KAAK,CAAC;QAEjC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,KAA8B,EAAQ,EAAE;IACvE,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,KAA8B,EAAQ,EAAE;IACjE,MAAM,KAAK,GAAc,CAAC,IAAI,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,YAAiC,EAAE,IAAa,EAAQ,EAAE;IACzE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAE,YAAiC,EAAQ,EAAE;IACjF,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;YACzB,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,QAAkB,EAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAEhH,MAAM,cAAc,GAAG,CAAC,IAAa,EAAiB,EAAE;IACpD,IAAI,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAEvD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAoB,EAAiB,EAAE;IAC1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAW,EAAE;IAC7D,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEzC,OAAO,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAW,EAAE,CAC9D,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpF,MAAM,aAAa,GAAG,CAAC,IAAmB,EAAE,QAAkB,EAAW,EAAE,CACvE,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAE/G,MAAM,aAAa,GAAG,CAAC,IAAmB,EAAE,QAAkB,EAAW,EAAE,CACvE,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEhH,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAW,EAAE;IACpE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAe,EAAE,QAAkB,EAAW,EAAE,CACrE,QAAQ,CAAC,MAAM,CAAC,KAAK,cAAc;IACnC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IACzC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEvC,MAAM,eAAe,GAAG,CAAC,MAAe,EAAE,QAAkB,EAAW,EAAE;IACrE,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,gBAAgB,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE3C,OAAO,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAW,EAAE;IACnE,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEzC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,CACH,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;QACzC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAClC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CACpC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAQ,EAAE;IACjE,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;QAC9D,OAAO;IACX,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAEtD,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YACnF,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAa,EAAE,QAAkB,EAAQ,EAAE;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAErC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAW,EAAE,CACjD,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AAEvF,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,IAAa,EAAE,IAAY,EAAQ,EAAE;IACpE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,IAAa,EAAE,IAAY,EAAQ,EAAE;IAClE,IAAI,IAAI,KAAK,gBAAgB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,IAAa,EAAQ,EAAE;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEpD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC/B,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACvC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAY,EAAQ,EAAE;IACrC,MAAM,IAAI,GAAS;QACf,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;QACjG,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;KACd,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,IAAU,EAAY,EAAE,CAC5C,IAAI,CAAC,KAAK;KACL,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtD,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KAChD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;KAC1C,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;AAEnD,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAoB,EAAW,EAAE;IACxF,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjE,OAAO,MAAM,KAAK,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,KAAY,EAAE,OAAoB,EAAY,EAAE;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEhD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;SACrD,MAAM,EAAE;SACR,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;SAClE,OAAO,EAAE;SACT,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAY,EAAE,OAAoB,EAAQ,EAAE;IACrE,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACX,CAAC;IAED,MAAM,IAAI,KAAK,CACX;QACI,GAAG,KAAK,CAAC,QAAQ,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc;QACjE,6FAA6F;QAC7F,gGAAgG;QAChG,mEAAmE;KACtE,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,iBAAiB;IACtB,OAAO;QACH,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,OAAO;QAEd,cAAc,CAAC,QAAQ,EAAE,MAAM;YAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAE7C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC1B,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACnF,CAAC;YACL,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import type { Plugin } from \"vite\";\nimport { isRecord } from \"@gtkx/utils\";\nimport { isBuiltin } from \"node:module\";\nimport { posix } from \"node:path\";\nimport { parseSync } from \"vite\";\n\ntype AstNode = Record<string, unknown>;\n\ntype Bindings = {\n declarations: Map<string, number>;\n factories: Set<string>;\n requires: Set<string>;\n urls: Set<string>;\n};\n\ntype Scan = {\n bindings: Bindings;\n calls: AstNode[];\n sources: string[];\n};\n\ntype Chunk = {\n fileName: string;\n code: string;\n};\n\nconst REQUIRE_FACTORY = \"createRequire\";\nconst REQUIRE_BINDING = \"require\";\nconst RESOLVE_PROPERTY = \"resolve\";\nconst MODULE_BUILTIN = \"node:module\";\nconst OUTPUT_DIRECTORY = \".\";\nconst RELATIVE_SPECIFIER = /^\\.\\.?(?:\\/|$)/;\nconst DECLARATION_KEYS = [\"id\", \"local\", \"param\", \"params\"];\n\nconst SOURCE_STATEMENTS = new Set([\n \"ExportAllDeclaration\",\n \"ExportNamedDeclaration\",\n \"ImportDeclaration\",\n \"ImportExpression\",\n]);\n\nconst isAstNode = (value: unknown): value is AstNode => isRecord(value) && typeof value.type === \"string\";\nconst nodeType = (node: AstNode): string => (typeof node.type === \"string\" ? node.type : \"\");\n\nconst nodeName = (node: AstNode | null): string | null =>\n node !== null && typeof node.name === \"string\" ? node.name : null;\n\nconst childNode = (node: AstNode, key: string): AstNode | null => {\n const value = node[key];\n\n return isAstNode(value) ? value : null;\n};\n\nconst childNodes = (node: AstNode, key: string): AstNode[] => {\n const value = node[key];\n\n if (!Array.isArray(value)) {\n return [];\n }\n\n const entries: unknown[] = value;\n\n return entries.filter(isAstNode);\n};\n\nconst childValues = (value: unknown): unknown[] => {\n if (Array.isArray(value)) {\n const entries: unknown[] = value;\n\n return entries;\n }\n\n if (!isAstNode(value)) {\n return [];\n }\n\n return Object.values(value).filter((child) => typeof child === \"object\" && child !== null);\n};\n\nconst visitNode = (value: unknown, visit: (node: AstNode) => void): void => {\n if (isAstNode(value)) {\n visit(value);\n }\n};\n\nconst walk = (root: unknown, visit: (node: AstNode) => void): void => {\n const stack: unknown[] = [root];\n\n while (stack.length > 0) {\n const current = stack.pop();\n visitNode(current, visit);\n\n for (const value of childValues(current)) {\n stack.push(value);\n }\n }\n};\n\nconst countName = (declarations: Map<string, number>, node: AstNode): void => {\n const name = nodeName(node);\n\n if (name !== null) {\n declarations.set(name, (declarations.get(name) ?? 0) + 1);\n }\n};\n\nconst countDeclarations = (node: AstNode, declarations: Map<string, number>): void => {\n for (const key of DECLARATION_KEYS) {\n walk(node[key], (declared) => {\n countName(declarations, declared);\n });\n }\n};\n\nconst isUnshadowed = (name: string, bindings: Bindings): boolean => (bindings.declarations.get(name) ?? 0) <= 1;\n\nconst templateString = (node: AstNode): string | null => {\n if (childNodes(node, \"expressions\").length > 0) {\n return null;\n }\n\n const [quasi] = childNodes(node, \"quasis\");\n const value = quasi === undefined ? null : quasi.value;\n\n return isRecord(value) && typeof value.cooked === \"string\" ? value.cooked : null;\n};\n\nconst literalString = (node: AstNode | null): string | null => {\n if (node === null) {\n return null;\n }\n\n if (nodeType(node) === \"Literal\") {\n return typeof node.value === \"string\" ? node.value : null;\n }\n\n return nodeType(node) === \"TemplateLiteral\" ? templateString(node) : null;\n};\n\nconst isMetaUrl = (node: AstNode, bindings: Bindings): boolean => {\n if (nodeType(node) === \"MemberExpression\") {\n const object = childNode(node, \"object\");\n\n return object !== null && nodeType(object) === \"MetaProperty\";\n }\n\n const name = nodeName(node);\n\n return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);\n};\n\nconst hasMetaUrl = (node: AstNode, bindings: Bindings): boolean =>\n childNodes(node, \"arguments\").some((argument) => isMetaUrl(argument, bindings));\n\nconst isRequireName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);\n\nconst isFactoryName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);\n\nconst isRequireFactory = (node: AstNode, bindings: Bindings): boolean => {\n if (nodeType(node) !== \"CallExpression\") {\n return false;\n }\n\n return isFactoryName(nodeName(childNode(node, \"callee\")), bindings) || hasMetaUrl(node, bindings);\n};\n\nconst isResolveTarget = (object: AstNode, bindings: Bindings): boolean =>\n nodeType(object) === \"MetaProperty\" ||\n isRequireName(nodeName(object), bindings) ||\n isRequireFactory(object, bindings);\n\nconst isResolveMember = (callee: AstNode, bindings: Bindings): boolean => {\n if (nodeType(callee) !== \"MemberExpression\" || callee.computed === true) {\n return false;\n }\n\n if (nodeName(childNode(callee, \"property\")) !== RESOLVE_PROPERTY) {\n return false;\n }\n\n const object = childNode(callee, \"object\");\n\n return object !== null && isResolveTarget(object, bindings);\n};\n\nconst isResolvingCall = (call: AstNode, bindings: Bindings): boolean => {\n if (hasMetaUrl(call, bindings)) {\n return true;\n }\n\n const callee = childNode(call, \"callee\");\n\n if (callee === null) {\n return false;\n }\n\n return (\n isRequireName(nodeName(callee), bindings) ||\n isRequireFactory(callee, bindings) ||\n isResolveMember(callee, bindings)\n );\n};\n\nconst collectFactories = (node: AstNode, bindings: Bindings): void => {\n if (literalString(childNode(node, \"source\")) !== MODULE_BUILTIN) {\n return;\n }\n\n for (const specifier of childNodes(node, \"specifiers\")) {\n const local = nodeName(childNode(specifier, \"local\"));\n\n if (local !== null && nodeName(childNode(specifier, \"imported\")) === REQUIRE_FACTORY) {\n bindings.factories.add(local);\n }\n }\n};\n\nconst collectBinding = (node: AstNode, bindings: Bindings): void => {\n const name = nodeName(childNode(node, \"id\"));\n const init = childNode(node, \"init\");\n\n if (name === null || init === null) {\n return;\n }\n\n if (isMetaUrl(init, bindings)) {\n bindings.urls.add(name);\n }\n\n if (isRequireFactory(init, bindings)) {\n bindings.requires.add(name);\n }\n};\n\nconst hasStringArgument = (call: AstNode): boolean =>\n childNodes(call, \"arguments\").some((argument) => literalString(argument) !== null);\n\nconst collectSource = (scan: Scan, node: AstNode, type: string): void => {\n if (!SOURCE_STATEMENTS.has(type)) {\n return;\n }\n\n const source = literalString(childNode(node, \"source\"));\n\n if (source !== null) {\n scan.sources.push(source);\n }\n};\n\nconst collectCall = (scan: Scan, node: AstNode, type: string): void => {\n if (type === \"CallExpression\" && hasStringArgument(node)) {\n scan.calls.push(node);\n }\n};\n\nconst scanNode = (scan: Scan, node: AstNode): void => {\n const type = nodeType(node);\n countDeclarations(node, scan.bindings.declarations);\n\n if (type === \"ImportDeclaration\") {\n collectFactories(node, scan.bindings);\n } else if (type === \"VariableDeclarator\") {\n collectBinding(node, scan.bindings);\n }\n\n collectSource(scan, node, type);\n collectCall(scan, node, type);\n};\n\nconst scanChunk = (chunk: Chunk): Scan => {\n const scan: Scan = {\n bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },\n calls: [],\n sources: [],\n };\n\n walk(parseSync(chunk.fileName, chunk.code).program, (node) => {\n scanNode(scan, node);\n });\n\n return scan;\n};\n\nconst callSpecifiers = (scan: Scan): string[] =>\n scan.calls\n .filter((call) => isResolvingCall(call, scan.bindings))\n .flatMap((call) => childNodes(call, \"arguments\"))\n .map((argument) => literalString(argument))\n .filter((specifier) => specifier !== null);\n\nconst isReachable = (specifier: string, directory: string, emitted: Set<string>): boolean => {\n if (isBuiltin(specifier)) {\n return true;\n }\n\n if (!RELATIVE_SPECIFIER.test(specifier)) {\n return false;\n }\n\n const target = posix.normalize(posix.join(directory, specifier));\n\n return target === OUTPUT_DIRECTORY || emitted.has(target);\n};\n\nconst unreachableSpecifiers = (chunk: Chunk, emitted: Set<string>): string[] => {\n const scan = scanChunk(chunk);\n const directory = posix.dirname(chunk.fileName);\n\n return new Set([...scan.sources, ...callSpecifiers(scan)])\n .values()\n .filter((specifier) => !isReachable(specifier, directory, emitted))\n .toArray()\n .toSorted((left, right) => left.localeCompare(right));\n};\n\nconst assertSelfContained = (chunk: Chunk, emitted: Set<string>): void => {\n const specifiers = unreachableSpecifiers(chunk, emitted);\n\n if (specifiers.length === 0) {\n return;\n }\n\n throw new Error(\n [\n `${chunk.fileName} resolves ${specifiers.join(\", \")} at runtime,`,\n \"so the built app only starts where that resolution succeeds from wherever it was installed.\",\n \"The artifact may resolve node: builtins and the files the build emits beside it, nothing else:\",\n \"bundle the module, emit the file, or read the data at build time.\",\n ].join(\" \"),\n );\n};\n\nfunction gtkxSelfContained(): Plugin {\n return {\n name: \"gtkx:self-contained\",\n apply: \"build\",\n\n generateBundle(_options, bundle) {\n const emitted = new Set(Object.keys(bundle));\n\n for (const output of Object.values(bundle)) {\n if (output.type === \"chunk\") {\n assertSelfContained({ fileName: output.fileName, code: output.code }, emitted);\n }\n }\n },\n };\n}\n\nexport { gtkxSelfContained };\n"]}
|
|
1
|
+
{"version":3,"file":"self-contained.js","sourceRoot":"","sources":["../../src/vite-plugins/self-contained.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ESTree, Plugin, VisitorObject } from \"vite\";\nimport { isBuiltin } from \"node:module\";\nimport { posix } from \"node:path\";\nimport { parseSync, Visitor } from \"vite\";\n\ntype Bindings = {\n declarations: Map<string, number>;\n factories: Set<string>;\n requires: Set<string>;\n urls: Set<string>;\n};\n\ntype Scan = {\n bindings: Bindings;\n calls: ESTree.CallExpression[];\n sources: string[];\n};\n\ntype Chunk = {\n fileName: string;\n code: string;\n};\n\ntype PatternItem =\n | ESTree.BindingPattern |\n ESTree.BindingProperty |\n ESTree.BindingRestElement |\n ESTree.FormalParameterRest |\n ESTree.TSParameterProperty |\n null;\n\nconst REQUIRE_FACTORY = \"createRequire\";\nconst REQUIRE_BINDING = \"require\";\nconst RESOLVE_PROPERTY = \"resolve\";\nconst MODULE_BUILTIN = \"node:module\";\nconst OUTPUT_DIRECTORY = \".\";\nconst RELATIVE_SPECIFIER = /^\\.\\.?(?:\\/|$)/;\n\nconst exportName = (name: ESTree.ModuleExportName): string | null => (name.type === \"Identifier\" ? name.name : null);\nconst referenceName = (node: ESTree.Argument): string | null => (node.type === \"Identifier\" ? node.name : null);\n\nconst countName = (declarations: Map<string, number>, name: string | null): void => {\n if (name !== null) {\n declarations.set(name, (declarations.get(name) ?? 0) + 1);\n }\n};\n\nconst boundPattern = (item: PatternItem): ESTree.BindingPattern | null => {\n if (item === null) {\n return null;\n }\n\n if (item.type === \"Property\") {\n return item.value;\n }\n\n if (item.type === \"RestElement\") {\n return item.argument;\n }\n\n return item.type === \"TSParameterProperty\" ? item.parameter : item;\n};\n\nconst countPatterns = (declarations: Map<string, number>, items: PatternItem[]): void => {\n for (const item of items) {\n countPattern(declarations, boundPattern(item));\n }\n};\n\nconst countPattern = (declarations: Map<string, number>, pattern: ESTree.BindingPattern | null): void => {\n if (pattern === null) {\n return;\n }\n\n if (pattern.type === \"Identifier\") {\n countName(declarations, pattern.name);\n\n return;\n }\n\n if (pattern.type === \"AssignmentPattern\") {\n countPattern(declarations, pattern.left);\n\n return;\n }\n\n countPatterns(declarations, pattern.type === \"ObjectPattern\" ? pattern.properties : pattern.elements);\n};\n\nconst countFunction = (\n declarations: Map<string, number>,\n node: ESTree.ArrowFunctionExpression | ESTree.Function,\n): void => {\n countPattern(declarations, node.id);\n countPatterns(declarations, node.params);\n};\n\nconst declarationVisitor = (declarations: Map<string, number>): VisitorObject => ({\n ArrowFunctionExpression: (node) => {\n countFunction(declarations, node);\n },\n CatchClause: (node) => {\n countPattern(declarations, node.param);\n },\n ClassDeclaration: (node) => {\n countPattern(declarations, node.id);\n },\n ClassExpression: (node) => {\n countPattern(declarations, node.id);\n },\n ExportSpecifier: (node) => {\n countName(declarations, exportName(node.local));\n },\n FunctionDeclaration: (node) => {\n countFunction(declarations, node);\n },\n FunctionExpression: (node) => {\n countFunction(declarations, node);\n },\n ImportDefaultSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n ImportNamespaceSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n ImportSpecifier: (node) => {\n countPattern(declarations, node.local);\n },\n VariableDeclarator: (node) => {\n countPattern(declarations, node.id);\n },\n});\n\nconst isUnshadowed = (name: string, bindings: Bindings): boolean => (bindings.declarations.get(name) ?? 0) <= 1;\n\nconst templateString = (node: ESTree.TemplateLiteral): string | null => {\n const [quasi] = node.quasis;\n\n return quasi === undefined || node.expressions.length > 0 ? null : quasi.value.cooked;\n};\n\nconst literalString = (node: ESTree.Argument | null): string | null => {\n if (node?.type === \"TemplateLiteral\") {\n return templateString(node);\n }\n\n return node?.type === \"Literal\" && typeof node.value === \"string\" ? node.value : null;\n};\n\nconst isMetaUrl = (node: ESTree.Argument, bindings: Bindings): boolean => {\n if (node.type === \"MemberExpression\") {\n return node.object.type === \"MetaProperty\";\n }\n\n const name = referenceName(node);\n\n return name !== null && bindings.urls.has(name) && isUnshadowed(name, bindings);\n};\n\nconst hasMetaUrl = (node: ESTree.CallExpression, bindings: Bindings): boolean =>\n node.arguments.some((argument) => isMetaUrl(argument, bindings));\n\nconst isRequireName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_BINDING || bindings.requires.has(name)) && isUnshadowed(name, bindings);\n\nconst isFactoryName = (name: string | null, bindings: Bindings): boolean =>\n name !== null && (name === REQUIRE_FACTORY || bindings.factories.has(name)) && isUnshadowed(name, bindings);\n\nconst isRequireFactory = (node: ESTree.Argument, bindings: Bindings): boolean =>\n node.type === \"CallExpression\" &&\n (isFactoryName(referenceName(node.callee), bindings) || hasMetaUrl(node, bindings));\n\nconst isResolveTarget = (object: ESTree.Expression, bindings: Bindings): boolean =>\n object.type === \"MetaProperty\" ||\n isRequireName(referenceName(object), bindings) ||\n isRequireFactory(object, bindings);\n\nconst isResolveMember = (callee: ESTree.Expression, bindings: Bindings): boolean =>\n callee.type === \"MemberExpression\" &&\n !callee.computed &&\n callee.property.type === \"Identifier\" &&\n callee.property.name === RESOLVE_PROPERTY &&\n isResolveTarget(callee.object, bindings);\n\nconst isResolvingCall = (call: ESTree.CallExpression, bindings: Bindings): boolean =>\n hasMetaUrl(call, bindings) ||\n isRequireName(referenceName(call.callee), bindings) ||\n isRequireFactory(call.callee, bindings) ||\n isResolveMember(call.callee, bindings);\n\nconst collectFactories = (node: ESTree.ImportDeclaration, bindings: Bindings): void => {\n if (node.source.value !== MODULE_BUILTIN) {\n return;\n }\n\n for (const specifier of node.specifiers) {\n if (specifier.type === \"ImportSpecifier\" && exportName(specifier.imported) === REQUIRE_FACTORY) {\n bindings.factories.add(specifier.local.name);\n }\n }\n};\n\nconst collectBinding = (node: ESTree.VariableDeclarator, bindings: Bindings): void => {\n const { id, init } = node;\n\n if (init === null || id.type !== \"Identifier\") {\n return;\n }\n\n if (isMetaUrl(init, bindings)) {\n bindings.urls.add(id.name);\n }\n\n if (isRequireFactory(init, bindings)) {\n bindings.requires.add(id.name);\n }\n};\n\nconst collectSource = (scan: Scan, source: string | null): void => {\n if (source !== null) {\n scan.sources.push(source);\n }\n};\n\nconst collectCall = (scan: Scan, node: ESTree.CallExpression): void => {\n if (node.arguments.some((argument) => literalString(argument) !== null)) {\n scan.calls.push(node);\n }\n};\n\nconst scanVisitor = (scan: Scan): VisitorObject => ({\n CallExpression: (node) => {\n collectCall(scan, node);\n },\n ExportAllDeclaration: (node) => {\n collectSource(scan, node.source.value);\n },\n ExportNamedDeclaration: (node) => {\n collectSource(scan, node.source?.value ?? null);\n },\n ImportDeclaration: (node) => {\n collectFactories(node, scan.bindings);\n collectSource(scan, node.source.value);\n },\n ImportExpression: (node) => {\n collectSource(scan, literalString(node.source));\n },\n VariableDeclarator: (node) => {\n collectBinding(node, scan.bindings);\n },\n});\n\nconst scanChunk = (chunk: Chunk): Scan => {\n const scan: Scan = {\n bindings: { declarations: new Map(), factories: new Set(), requires: new Set(), urls: new Set() },\n calls: [],\n sources: [],\n };\n\n const { program } = parseSync(chunk.fileName, chunk.code);\n new Visitor(declarationVisitor(scan.bindings.declarations)).visit(program);\n new Visitor(scanVisitor(scan)).visit(program);\n\n return scan;\n};\n\nconst callSpecifiers = (scan: Scan): string[] =>\n scan.calls\n .filter((call) => isResolvingCall(call, scan.bindings))\n .flatMap((call) => call.arguments)\n .map((argument) => literalString(argument))\n .filter((specifier) => specifier !== null);\n\nconst isReachable = (specifier: string, directory: string, emitted: Set<string>): boolean => {\n if (isBuiltin(specifier)) {\n return true;\n }\n\n if (!RELATIVE_SPECIFIER.test(specifier)) {\n return false;\n }\n\n const target = posix.normalize(posix.join(directory, specifier));\n\n return target === OUTPUT_DIRECTORY || emitted.has(target);\n};\n\nconst unreachableSpecifiers = (chunk: Chunk, emitted: Set<string>): string[] => {\n const scan = scanChunk(chunk);\n const directory = posix.dirname(chunk.fileName);\n\n return new Set([...scan.sources, ...callSpecifiers(scan)])\n .values()\n .filter((specifier) => !isReachable(specifier, directory, emitted))\n .toArray()\n .toSorted((left, right) => left.localeCompare(right));\n};\n\nconst assertSelfContained = (chunk: Chunk, emitted: Set<string>): void => {\n const specifiers = unreachableSpecifiers(chunk, emitted);\n\n if (specifiers.length === 0) {\n return;\n }\n\n throw new Error(\n [\n `${chunk.fileName} resolves ${specifiers.join(\", \")} at runtime,`,\n \"so the built app only starts where that resolution succeeds from wherever it was installed.\",\n \"The artifact may resolve node: builtins and the files the build emits beside it, nothing else:\",\n \"bundle the module, emit the file, or read the data at build time.\",\n ].join(\" \"),\n );\n};\n\nfunction gtkxSelfContained(): Plugin {\n return {\n name: \"gtkx:self-contained\",\n apply: \"build\",\n\n generateBundle(_options, bundle) {\n const emitted = new Set(Object.keys(bundle));\n\n for (const output of Object.values(bundle)) {\n if (output.type === \"chunk\") {\n assertSelfContained({ fileName: output.fileName, code: output.code }, emitted);\n }\n }\n },\n };\n}\n\nexport { gtkxSelfContained };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createConfigLoader } from "@gtkx/config/internal";
|
|
1
|
+
import { createConfigLoader, resolveFuture } from "@gtkx/config/internal";
|
|
2
2
|
import { resolveDataDir } from "../internal/data-dir.js";
|
|
3
3
|
import { prependSchemaDir, stageAndCompileProjectSchemas } from "../settings/schema.js";
|
|
4
4
|
function gtkxSettingsWorkerEnv() {
|
|
@@ -8,7 +8,7 @@ function gtkxSettingsWorkerEnv() {
|
|
|
8
8
|
enforce: "pre",
|
|
9
9
|
async config(config) {
|
|
10
10
|
const loaded = await loadConfig.load(config.root ?? process.cwd());
|
|
11
|
-
const dataDir = loaded.config.future
|
|
11
|
+
const dataDir = resolveFuture(loaded.config.future).isResourceImported ? null : resolveDataDir(loaded.root);
|
|
12
12
|
const dir = stageAndCompileProjectSchemas(loaded.root, dataDir);
|
|
13
13
|
if (dir === null) {
|
|
14
14
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-worker-env.js","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-worker-env.js","sourceRoot":"","sources":["../../src/vite-plugins/settings-worker-env.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAExF,SAAS,qBAAqB;IAC1B,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,OAAO;QACH,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,MAAM,CAAC,MAAkB;YAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5G,MAAM,GAAG,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEhE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC;YAEtC,OAAO;gBACH,IAAI,EAAE;oBACF,GAAG,EAAE,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;iBACzF;aACJ,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["import type { UserConfig } from \"vite\";\nimport type { Plugin } from \"vitest/config\";\nimport { createConfigLoader, resolveFuture } from \"@gtkx/config/internal\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { prependSchemaDir, stageAndCompileProjectSchemas } from \"../settings/schema.js\";\n\nfunction gtkxSettingsWorkerEnv(): Plugin {\n const loadConfig = createConfigLoader();\n\n return {\n name: \"gtkx:settings-worker-env\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n const dataDir = resolveFuture(loaded.config.future).isResourceImported ? null : resolveDataDir(loaded.root);\n const dir = stageAndCompileProjectSchemas(loaded.root, dataDir);\n\n if (dir === null) {\n return;\n }\n\n process.env.GTKX_DEV_SCHEMA_DIR = dir;\n\n return {\n test: {\n env: { GSETTINGS_SCHEMA_DIR: prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR) },\n },\n };\n },\n };\n}\n\nexport { gtkxSettingsWorkerEnv };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAc,MAAM,EAA6C,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAc,MAAM,EAA6C,MAAM,MAAM,CAAC;AAK1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAkQ5E,iBAAS,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,sBAAsB,GAAG,MAAM,CA6D9F;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveFuture } from "@gtkx/config/internal";
|
|
1
2
|
import { error, errorMessage, info, sortStrings } from "@gtkx/utils";
|
|
2
3
|
import { readFileSync } from "node:fs";
|
|
3
4
|
import { basename, join } from "node:path";
|
|
@@ -65,7 +66,7 @@ const scheduleSchemaEnvSync = (state) => {
|
|
|
65
66
|
};
|
|
66
67
|
const applyUserConfig = async (state, config, loadConfig) => {
|
|
67
68
|
const loaded = await loadConfig.load(config.root ?? process.cwd());
|
|
68
|
-
state.isV2ResourceImports = loaded.config.future
|
|
69
|
+
state.isV2ResourceImports = resolveFuture(loaded.config.future).isResourceImported;
|
|
69
70
|
state.dataDir = state.isV2ResourceImports ? null : resolveDataDir(loaded.root);
|
|
70
71
|
};
|
|
71
72
|
const applyResolvedConfig = (state, config) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { ModuleNode, Plugin, ResolvedConfig, UserConfig, ViteDevServer } from \"vite\";\nimport { error, errorMessage, info, sortStrings } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"../settings/compile.js\";\nimport { parseSchemaXml, SchemaParseError } from \"../settings/parser.js\";\nimport { renderRuntimeModule } from \"../settings/render.js\";\nimport {\n assertUniqueSchemaBasenames,\n emitSchemaEnv,\n prependSchemaDir,\n projectRelativeSchemaPath,\n SCHEMA_SUFFIX,\n stageSchema,\n} from \"../settings/schema.js\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\ntype PluginState = {\n schemaDir: RetainedStagingDir;\n rootDir: string | null;\n dataDir: string | null;\n isV2ResourceImports: boolean;\n isBuild: boolean;\n schemaEnvTimer: ReturnType<typeof setTimeout> | null;\n trackedSchemas: Map<string, string>;\n buildSchemas: Set<string>;\n};\n\ntype PluginContext = AssetEmitter & {\n error: (message: string) => never;\n};\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-settings:\";\nconst SCHEMA_STAGING_PREFIX = \"schemas\";\nconst SOURCE_MODULE_RE = /\\.[cm]?[jt]sx?$/;\nconst SCHEMA_ENV_DEBOUNCE_MS = 50;\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst SCHEMA_ENV_BANNER = [\n \"process.env.GSETTINGS_SCHEMA_DIR = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.GSETTINGS_SCHEMA_DIR,\",\n \"]\",\n \" .filter(Boolean)\",\n \" .join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst ensureSchemaDir = (state: PluginState): string => {\n const existing = state.schemaDir.getPath();\n\n if (existing !== null) {\n return existing;\n }\n\n const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;\n\n return runnerDir ? state.schemaDir.adopt(runnerDir) : state.schemaDir.retain();\n};\n\nconst compileSchemaDir = (state: PluginState): void => {\n const dir = state.schemaDir.getPath();\n\n if (dir === null) {\n return;\n }\n\n compileSchemas(dir);\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR);\n};\n\nconst syncSchemaEnv = (state: PluginState): void => {\n if (state.rootDir === null) {\n return;\n }\n\n try {\n emitSchemaEnv(state.rootDir, state.dataDir, state.isV2ResourceImports);\n } catch (error_) {\n error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);\n }\n};\n\nconst cancelSchemaEnvSync = (state: PluginState): void => {\n if (state.schemaEnvTimer === null) {\n return;\n }\n\n clearTimeout(state.schemaEnvTimer);\n state.schemaEnvTimer = null;\n};\n\nconst scheduleSchemaEnvSync = (state: PluginState): void => {\n cancelSchemaEnvSync(state);\n\n state.schemaEnvTimer = setTimeout(() => {\n state.schemaEnvTimer = null;\n syncSchemaEnv(state);\n }, SCHEMA_ENV_DEBOUNCE_MS);\n};\n\nconst applyUserConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader): Promise<void> => {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n state.isV2ResourceImports = loaded.config.future?.v2ResourceImports === true;\n state.dataDir = state.isV2ResourceImports ? null : resolveDataDir(loaded.root);\n};\n\nconst applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {\n state.isBuild = config.command === \"build\";\n state.rootDir = typeof config.root === \"string\" ? config.root : null;\n syncSchemaEnv(state);\n};\n\nconst registerSchemaForMode = (state: PluginState, filePath: string, id: string): void => {\n const fileName = basename(filePath);\n\n if (state.isBuild) {\n state.buildSchemas.add(filePath);\n info(`Queued GSettings schema: ${fileName}`);\n\n return;\n }\n\n state.trackedSchemas.set(filePath, id);\n const dir = ensureSchemaDir(state);\n stageSchema(dir, filePath);\n compileSchemaDir(state);\n info(`Compiled GSettings schema: ${fileName}`);\n};\n\nconst loadSchemaModule = (ctx: PluginContext, state: PluginState, id: string): string | undefined => {\n if (!isVirtual(id)) {\n return undefined;\n }\n\n const filePath = fromVirtualId(id);\n const xml = readFileSync(filePath, \"utf8\");\n const fileName = basename(filePath);\n registerSchemaForMode(state, filePath, id);\n let parsed: ReturnType<typeof parseSchemaXml>;\n\n try {\n parsed = parseSchemaXml(xml, fileName);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) {\n throw error;\n }\n\n ctx.error(error.message);\n }\n\n if (parsed.schemas.length === 0) {\n ctx.error(`No <schema id=\"...\"> found in ${fileName}`);\n }\n\n return renderRuntimeModule(parsed);\n};\n\nconst compileBuildSchemas = (schemaFiles: string[]): Buffer =>\n withStagingDir(\"schemas-build\", (dir) => {\n for (const filePath of schemaFiles) {\n stageSchema(dir, filePath);\n }\n\n compileSchemas(dir);\n\n return readFileSync(join(dir, \"gschemas.compiled\"));\n });\n\nconst buildSchemaPaths = (rootDir: string, schemaFiles: string[]): string[] =>\n schemaFiles.map((filePath) => {\n const rel = projectRelativeSchemaPath(rootDir, filePath);\n\n if (rel === null) {\n throw new Error(`Cannot package the GSettings schema ${filePath}: it is outside ${rootDir}`);\n }\n\n return rel;\n });\n\nconst emitBuildSchemas = (\n ctx: PluginContext,\n state: PluginState,\n buildManifest: BuildManifestCollector | undefined,\n): void => {\n if (!state.isBuild || state.rootDir === null) {\n return;\n }\n\n const rootDir = state.rootDir;\n const schemaFiles = sortStrings(state.buildSchemas);\n assertUniqueSchemaBasenames(schemaFiles);\n const schemas = buildSchemaPaths(rootDir, schemaFiles);\n\n if (buildManifest !== undefined) {\n buildManifest.schemas = schemas;\n }\n\n if (schemaFiles.length === 0) {\n return;\n }\n\n const compiled = compileBuildSchemas(schemaFiles);\n\n ctx.emitFile({\n type: \"asset\",\n fileName: \"gschemas.compiled\",\n source: compiled,\n });\n\n info(`Compiled ${String(schemaFiles.length)} GSettings schema(s)`);\n};\n\nconst handleSchemaHotUpdate = (state: PluginState, file: string, server: ViteDevServer): ModuleNode[] | undefined => {\n if (file.endsWith(SCHEMA_SUFFIX) || SOURCE_MODULE_RE.test(file)) {\n scheduleSchemaEnvSync(state);\n }\n\n const virtualId = state.trackedSchemas.get(file);\n\n if (!virtualId) {\n return;\n }\n\n const dir = ensureSchemaDir(state);\n stageSchema(dir, file);\n compileSchemaDir(state);\n info(`Recompiled GSettings schema: ${basename(file)}`);\n const mod = server.moduleGraph.getModuleById(virtualId);\n\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n\n return [mod];\n }\n\n return undefined;\n};\n\nconst watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {\n const onClose = (): void => {\n cancelSchemaEnvSync(state);\n state.schemaDir.release();\n };\n\n server.httpServer?.once(\"close\", onClose);\n server.watcher.once(\"close\", onClose);\n\n const refreshSchemaTypes = (file: string): void => {\n if (file.endsWith(SCHEMA_SUFFIX) || SOURCE_MODULE_RE.test(file)) {\n scheduleSchemaEnvSync(state);\n }\n };\n\n server.watcher.on(\"add\", refreshSchemaTypes);\n server.watcher.on(\"unlink\", refreshSchemaTypes);\n};\n\nfunction gtkxSettings(loadConfig: ConfigLoader, buildManifest?: BuildManifestCollector): Plugin {\n const state: PluginState = {\n schemaDir: createRetainedStagingDir(SCHEMA_STAGING_PREFIX),\n rootDir: null,\n dataDir: null,\n isV2ResourceImports: false,\n isBuild: false,\n schemaEnvTimer: null,\n trackedSchemas: new Map(),\n buildSchemas: new Set(),\n };\n\n return {\n name: \"gtkx:settings\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n await applyUserConfig(state, config, loadConfig);\n },\n\n configResolved(config) {\n applyResolvedConfig(state, config);\n },\n\n configureServer(server) {\n watchSchemaFiles(state, server);\n },\n\n outputOptions(options) {\n if (!state.isBuild) {\n return;\n }\n\n return prependBanner(options, SCHEMA_ENV_BANNER);\n },\n\n async resolveId(source, importer, options) {\n if (!source.endsWith(SCHEMA_SUFFIX)) {\n return;\n }\n\n return resolveToVirtual(this, { source, importer, options });\n },\n\n load(id) {\n return loadSchemaModule(this, state, id);\n },\n\n buildEnd() {\n emitBuildSchemas(this, state, buildManifest);\n },\n\n closeBundle() {\n cancelSchemaEnvSync(state);\n state.schemaDir.release();\n },\n\n handleHotUpdate({ file, server }) {\n return handleSchemaHotUpdate(state, file, server);\n },\n };\n}\n\nexport { gtkxSettings };\n"]}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/vite-plugins/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ConfigLoader } from \"@gtkx/config\";\nimport type { ModuleNode, Plugin, ResolvedConfig, UserConfig, ViteDevServer } from \"vite\";\nimport { resolveFuture } from \"@gtkx/config/internal\";\nimport { error, errorMessage, info, sortStrings } from \"@gtkx/utils\";\nimport { readFileSync } from \"node:fs\";\nimport { basename, join } from \"node:path\";\nimport type { BuildManifestCollector } from \"../internal/build-manifest.js\";\nimport type { AssetEmitter } from \"./asset-emitter.js\";\nimport { prependBanner } from \"../internal/banner.js\";\nimport { resolveDataDir } from \"../internal/data-dir.js\";\nimport { createRetainedStagingDir, type RetainedStagingDir, withStagingDir } from \"../internal/staging-dir.js\";\nimport { compileSchemas } from \"../settings/compile.js\";\nimport { parseSchemaXml, SchemaParseError } from \"../settings/parser.js\";\nimport { renderRuntimeModule } from \"../settings/render.js\";\nimport {\n assertUniqueSchemaBasenames,\n emitSchemaEnv,\n prependSchemaDir,\n projectRelativeSchemaPath,\n SCHEMA_SUFFIX,\n stageSchema,\n} from \"../settings/schema.js\";\nimport { createVirtualNamespace } from \"./virtual-module.js\";\n\ntype PluginState = {\n schemaDir: RetainedStagingDir;\n rootDir: string | null;\n dataDir: string | null;\n isV2ResourceImports: boolean;\n isBuild: boolean;\n schemaEnvTimer: ReturnType<typeof setTimeout> | null;\n trackedSchemas: Map<string, string>;\n buildSchemas: Set<string>;\n};\n\ntype PluginContext = AssetEmitter & {\n error: (message: string) => never;\n};\n\nconst VIRTUAL_PREFIX = \"\\0gtkx-settings:\";\nconst SCHEMA_STAGING_PREFIX = \"schemas\";\nconst SOURCE_MODULE_RE = /\\.[cm]?[jt]sx?$/;\nconst SCHEMA_ENV_DEBOUNCE_MS = 50;\nconst { isVirtual, fromVirtualId, resolveToVirtual } = createVirtualNamespace(VIRTUAL_PREFIX);\n\nconst SCHEMA_ENV_BANNER = [\n \"process.env.GSETTINGS_SCHEMA_DIR = [\",\n \" decodeURIComponent(new URL(\\\".\\\", import.meta.url).pathname),\",\n \" process.env.GSETTINGS_SCHEMA_DIR,\",\n \"]\",\n \" .filter(Boolean)\",\n \" .join(\\\":\\\");\",\n].join(\"\\n\");\n\nconst ensureSchemaDir = (state: PluginState): string => {\n const existing = state.schemaDir.getPath();\n\n if (existing !== null) {\n return existing;\n }\n\n const runnerDir = process.env.GTKX_DEV_SCHEMA_DIR;\n\n return runnerDir ? state.schemaDir.adopt(runnerDir) : state.schemaDir.retain();\n};\n\nconst compileSchemaDir = (state: PluginState): void => {\n const dir = state.schemaDir.getPath();\n\n if (dir === null) {\n return;\n }\n\n compileSchemas(dir);\n process.env.GSETTINGS_SCHEMA_DIR = prependSchemaDir(dir, process.env.GSETTINGS_SCHEMA_DIR);\n};\n\nconst syncSchemaEnv = (state: PluginState): void => {\n if (state.rootDir === null) {\n return;\n }\n\n try {\n emitSchemaEnv(state.rootDir, state.dataDir, state.isV2ResourceImports);\n } catch (error_) {\n error(`Failed to generate GSettings schema types: ${errorMessage(error_)}`);\n }\n};\n\nconst cancelSchemaEnvSync = (state: PluginState): void => {\n if (state.schemaEnvTimer === null) {\n return;\n }\n\n clearTimeout(state.schemaEnvTimer);\n state.schemaEnvTimer = null;\n};\n\nconst scheduleSchemaEnvSync = (state: PluginState): void => {\n cancelSchemaEnvSync(state);\n\n state.schemaEnvTimer = setTimeout(() => {\n state.schemaEnvTimer = null;\n syncSchemaEnv(state);\n }, SCHEMA_ENV_DEBOUNCE_MS);\n};\n\nconst applyUserConfig = async (state: PluginState, config: UserConfig, loadConfig: ConfigLoader): Promise<void> => {\n const loaded = await loadConfig.load(config.root ?? process.cwd());\n state.isV2ResourceImports = resolveFuture(loaded.config.future).isResourceImported;\n state.dataDir = state.isV2ResourceImports ? null : resolveDataDir(loaded.root);\n};\n\nconst applyResolvedConfig = (state: PluginState, config: ResolvedConfig): void => {\n state.isBuild = config.command === \"build\";\n state.rootDir = typeof config.root === \"string\" ? config.root : null;\n syncSchemaEnv(state);\n};\n\nconst registerSchemaForMode = (state: PluginState, filePath: string, id: string): void => {\n const fileName = basename(filePath);\n\n if (state.isBuild) {\n state.buildSchemas.add(filePath);\n info(`Queued GSettings schema: ${fileName}`);\n\n return;\n }\n\n state.trackedSchemas.set(filePath, id);\n const dir = ensureSchemaDir(state);\n stageSchema(dir, filePath);\n compileSchemaDir(state);\n info(`Compiled GSettings schema: ${fileName}`);\n};\n\nconst loadSchemaModule = (ctx: PluginContext, state: PluginState, id: string): string | undefined => {\n if (!isVirtual(id)) {\n return undefined;\n }\n\n const filePath = fromVirtualId(id);\n const xml = readFileSync(filePath, \"utf8\");\n const fileName = basename(filePath);\n registerSchemaForMode(state, filePath, id);\n let parsed: ReturnType<typeof parseSchemaXml>;\n\n try {\n parsed = parseSchemaXml(xml, fileName);\n } catch (error) {\n if (!(error instanceof SchemaParseError)) {\n throw error;\n }\n\n ctx.error(error.message);\n }\n\n if (parsed.schemas.length === 0) {\n ctx.error(`No <schema id=\"...\"> found in ${fileName}`);\n }\n\n return renderRuntimeModule(parsed);\n};\n\nconst compileBuildSchemas = (schemaFiles: string[]): Buffer =>\n withStagingDir(\"schemas-build\", (dir) => {\n for (const filePath of schemaFiles) {\n stageSchema(dir, filePath);\n }\n\n compileSchemas(dir);\n\n return readFileSync(join(dir, \"gschemas.compiled\"));\n });\n\nconst buildSchemaPaths = (rootDir: string, schemaFiles: string[]): string[] =>\n schemaFiles.map((filePath) => {\n const rel = projectRelativeSchemaPath(rootDir, filePath);\n\n if (rel === null) {\n throw new Error(`Cannot package the GSettings schema ${filePath}: it is outside ${rootDir}`);\n }\n\n return rel;\n });\n\nconst emitBuildSchemas = (\n ctx: PluginContext,\n state: PluginState,\n buildManifest: BuildManifestCollector | undefined,\n): void => {\n if (!state.isBuild || state.rootDir === null) {\n return;\n }\n\n const rootDir = state.rootDir;\n const schemaFiles = sortStrings(state.buildSchemas);\n assertUniqueSchemaBasenames(schemaFiles);\n const schemas = buildSchemaPaths(rootDir, schemaFiles);\n\n if (buildManifest !== undefined) {\n buildManifest.schemas = schemas;\n }\n\n if (schemaFiles.length === 0) {\n return;\n }\n\n const compiled = compileBuildSchemas(schemaFiles);\n\n ctx.emitFile({\n type: \"asset\",\n fileName: \"gschemas.compiled\",\n source: compiled,\n });\n\n info(`Compiled ${String(schemaFiles.length)} GSettings schema(s)`);\n};\n\nconst handleSchemaHotUpdate = (state: PluginState, file: string, server: ViteDevServer): ModuleNode[] | undefined => {\n if (file.endsWith(SCHEMA_SUFFIX) || SOURCE_MODULE_RE.test(file)) {\n scheduleSchemaEnvSync(state);\n }\n\n const virtualId = state.trackedSchemas.get(file);\n\n if (!virtualId) {\n return;\n }\n\n const dir = ensureSchemaDir(state);\n stageSchema(dir, file);\n compileSchemaDir(state);\n info(`Recompiled GSettings schema: ${basename(file)}`);\n const mod = server.moduleGraph.getModuleById(virtualId);\n\n if (mod) {\n server.moduleGraph.invalidateModule(mod);\n\n return [mod];\n }\n\n return undefined;\n};\n\nconst watchSchemaFiles = (state: PluginState, server: ViteDevServer): void => {\n const onClose = (): void => {\n cancelSchemaEnvSync(state);\n state.schemaDir.release();\n };\n\n server.httpServer?.once(\"close\", onClose);\n server.watcher.once(\"close\", onClose);\n\n const refreshSchemaTypes = (file: string): void => {\n if (file.endsWith(SCHEMA_SUFFIX) || SOURCE_MODULE_RE.test(file)) {\n scheduleSchemaEnvSync(state);\n }\n };\n\n server.watcher.on(\"add\", refreshSchemaTypes);\n server.watcher.on(\"unlink\", refreshSchemaTypes);\n};\n\nfunction gtkxSettings(loadConfig: ConfigLoader, buildManifest?: BuildManifestCollector): Plugin {\n const state: PluginState = {\n schemaDir: createRetainedStagingDir(SCHEMA_STAGING_PREFIX),\n rootDir: null,\n dataDir: null,\n isV2ResourceImports: false,\n isBuild: false,\n schemaEnvTimer: null,\n trackedSchemas: new Map(),\n buildSchemas: new Set(),\n };\n\n return {\n name: \"gtkx:settings\",\n enforce: \"pre\",\n\n async config(config: UserConfig) {\n await applyUserConfig(state, config, loadConfig);\n },\n\n configResolved(config) {\n applyResolvedConfig(state, config);\n },\n\n configureServer(server) {\n watchSchemaFiles(state, server);\n },\n\n outputOptions(options) {\n if (!state.isBuild) {\n return;\n }\n\n return prependBanner(options, SCHEMA_ENV_BANNER);\n },\n\n async resolveId(source, importer, options) {\n if (!source.endsWith(SCHEMA_SUFFIX)) {\n return;\n }\n\n return resolveToVirtual(this, { source, importer, options });\n },\n\n load(id) {\n return loadSchemaModule(this, state, id);\n },\n\n buildEnd() {\n emitBuildSchemas(this, state, buildManifest);\n },\n\n closeBundle() {\n cancelSchemaEnvSync(state);\n state.schemaDir.release();\n },\n\n handleHotUpdate({ file, server }) {\n return handleSchemaHotUpdate(state, file, server);\n },\n };\n}\n\nexport { gtkxSettings };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "GTK app toolchain for React: scaffold, dev server, build, docs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -70,22 +70,24 @@
|
|
|
70
70
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
71
71
|
"citty": "^0.2.2",
|
|
72
72
|
"fast-xml-parser": "^5.11.0",
|
|
73
|
+
"i18next-cli": "1.71.3",
|
|
73
74
|
"react-refresh": "^0.18.0",
|
|
74
75
|
"vite": "^8.2.2",
|
|
75
76
|
"yaml": "^2.9.0",
|
|
76
|
-
"@gtkx/codegen": "1.
|
|
77
|
-
"@gtkx/config": "1.
|
|
78
|
-
"@gtkx/
|
|
79
|
-
"@gtkx/
|
|
80
|
-
"@gtkx/
|
|
81
|
-
"
|
|
82
|
-
"
|
|
77
|
+
"@gtkx/codegen": "1.6.0",
|
|
78
|
+
"@gtkx/config": "1.6.0",
|
|
79
|
+
"@gtkx/runtime": "1.6.0",
|
|
80
|
+
"@gtkx/mcp": "1.6.0",
|
|
81
|
+
"@gtkx/utils": "1.6.0",
|
|
82
|
+
"create-gtkx": "1.6.0",
|
|
83
|
+
"@gtkx/vitest": "1.6.0"
|
|
83
84
|
},
|
|
84
85
|
"devDependencies": {
|
|
85
86
|
"@types/babel__core": "^7.20.5",
|
|
86
87
|
"@types/react-refresh": "^0.14.7",
|
|
87
88
|
"vitest": "^4.1.11",
|
|
88
|
-
"@gtkx/
|
|
89
|
+
"@gtkx/animated": "1.6.0",
|
|
90
|
+
"@gtkx/testing": "1.6.0"
|
|
89
91
|
},
|
|
90
92
|
"peerDependencies": {
|
|
91
93
|
"react": "^19"
|