@gtkx/cli 1.3.0 → 1.5.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 +5 -4
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +6 -6
- package/dist/builder.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +3 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +41 -12
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/commands/build.d.ts +0 -4
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +0 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/codegen.d.ts.map +1 -1
- package/dist/commands/codegen.js +2 -4
- package/dist/commands/codegen.js.map +1 -1
- package/dist/deploy/depends.d.ts +2 -2
- package/dist/deploy/depends.d.ts.map +1 -1
- package/dist/deploy/depends.js +30 -15
- package/dist/deploy/depends.js.map +1 -1
- 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/nfpm/config.js +1 -1
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/node-runtime/elf.d.ts +1 -1
- package/dist/deploy/node-runtime/elf.d.ts.map +1 -1
- package/dist/deploy/node-runtime/elf.js +2 -2
- package/dist/deploy/node-runtime/elf.js.map +1 -1
- package/dist/deploy/node-runtime/index.js +2 -2
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/notices/collect.d.ts +3 -1
- package/dist/deploy/notices/collect.d.ts.map +1 -1
- package/dist/deploy/notices/collect.js +2 -2
- package/dist/deploy/notices/collect.js.map +1 -1
- package/dist/deploy/notices/packages.d.ts +2 -1
- package/dist/deploy/notices/packages.d.ts.map +1 -1
- package/dist/deploy/notices/packages.js +4 -27
- package/dist/deploy/notices/packages.js.map +1 -1
- package/dist/deploy/payload/icons.d.ts +7 -3
- package/dist/deploy/payload/icons.d.ts.map +1 -1
- package/dist/deploy/payload/icons.js +46 -28
- package/dist/deploy/payload/icons.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 +23 -13
- 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 +149 -25
- package/dist/deploy/run-deploy.js.map +1 -1
- package/dist/deploy/settings/build-manifest.d.ts +9 -0
- package/dist/deploy/settings/build-manifest.d.ts.map +1 -0
- package/dist/deploy/settings/build-manifest.js +80 -0
- package/dist/deploy/settings/build-manifest.js.map +1 -0
- package/dist/deploy/settings/index.d.ts.map +1 -1
- package/dist/deploy/settings/index.js +9 -3
- package/dist/deploy/settings/index.js.map +1 -1
- package/dist/deploy/settings/libraries.d.ts +8 -0
- package/dist/deploy/settings/libraries.d.ts.map +1 -0
- package/dist/deploy/settings/libraries.js +39 -0
- package/dist/deploy/settings/libraries.js.map +1 -0
- package/dist/deploy/settings/paths.d.ts +3 -0
- package/dist/deploy/settings/paths.d.ts.map +1 -1
- package/dist/deploy/settings/paths.js +6 -32
- package/dist/deploy/settings/paths.js.map +1 -1
- package/dist/deploy/targets/appimage.d.ts.map +1 -1
- package/dist/deploy/targets/appimage.js +19 -13
- package/dist/deploy/targets/appimage.js.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts +2 -1
- package/dist/deploy/targets/flatpak-manifest.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-manifest.js +5 -1
- package/dist/deploy/targets/flatpak-manifest.js.map +1 -1
- package/dist/deploy/targets/flatpak-source.d.ts.map +1 -1
- package/dist/deploy/targets/flatpak-source.js +30 -16
- 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 +26 -1
- package/dist/deploy/tools.js.map +1 -1
- package/dist/deploy/types.d.ts +4 -4
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/dev/icon-dir.d.ts +1 -1
- package/dist/dev/icon-dir.d.ts.map +1 -1
- package/dist/dev/icon-dir.js +20 -7
- package/dist/dev/icon-dir.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-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +5 -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 +6 -4
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/runner.d.ts +1 -1
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +7 -1
- package/dist/dev/runner.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 +3 -1
- package/dist/dev/schema-dir.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/build-manifest.d.ts +20 -0
- package/dist/internal/build-manifest.d.ts.map +1 -0
- package/dist/internal/build-manifest.js +6 -0
- package/dist/internal/build-manifest.js.map +1 -0
- package/dist/internal/icon-path.d.ts +13 -0
- package/dist/internal/icon-path.d.ts.map +1 -0
- package/dist/internal/icon-path.js +86 -0
- package/dist/internal/icon-path.js.map +1 -0
- package/dist/internal/source-imports.d.ts +12 -0
- package/dist/internal/source-imports.d.ts.map +1 -0
- package/dist/internal/source-imports.js +123 -0
- package/dist/internal/source-imports.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/mcp/widget-properties.d.ts.map +1 -1
- package/dist/mcp/widget-properties.js +3 -12
- package/dist/mcp/widget-properties.js.map +1 -1
- package/dist/settings/render.d.ts +10 -1
- package/dist/settings/render.d.ts.map +1 -1
- package/dist/settings/render.js +78 -20
- package/dist/settings/render.js.map +1 -1
- package/dist/settings/schema.d.ts +4 -3
- package/dist/settings/schema.d.ts.map +1 -1
- package/dist/settings/schema.js +124 -15
- package/dist/settings/schema.js.map +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts +1 -1
- package/dist/vite-plugins/asset-emitter.d.ts.map +1 -1
- package/dist/vite-plugins/asset-emitter.js.map +1 -1
- package/dist/vite-plugins/asset-extensions.d.ts.map +1 -1
- package/dist/vite-plugins/asset-extensions.js +1 -0
- package/dist/vite-plugins/asset-extensions.js.map +1 -1
- package/dist/vite-plugins/asset-imports.d.ts +2 -1
- package/dist/vite-plugins/asset-imports.d.ts.map +1 -1
- package/dist/vite-plugins/asset-imports.js +39 -28
- package/dist/vite-plugins/asset-imports.js.map +1 -1
- package/dist/vite-plugins/asset-specifier.d.ts +13 -1
- package/dist/vite-plugins/asset-specifier.d.ts.map +1 -1
- package/dist/vite-plugins/asset-specifier.js +39 -1
- package/dist/vite-plugins/asset-specifier.js.map +1 -1
- package/dist/vite-plugins/build-manifest.d.ts +5 -0
- package/dist/vite-plugins/build-manifest.d.ts.map +1 -0
- package/dist/vite-plugins/{bundled-packages.js → build-manifest.js} +20 -14
- package/dist/vite-plugins/build-manifest.js.map +1 -0
- package/dist/vite-plugins/built-url.d.ts +1 -1
- package/dist/vite-plugins/built-url.d.ts.map +1 -1
- package/dist/vite-plugins/built-url.js +37 -24
- package/dist/vite-plugins/built-url.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/icons.d.ts +2 -1
- package/dist/vite-plugins/icons.d.ts.map +1 -1
- package/dist/vite-plugins/icons.js +25 -12
- package/dist/vite-plugins/icons.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +2 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +9 -5
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/native.d.ts.map +1 -1
- package/dist/vite-plugins/native.js +23 -4
- package/dist/vite-plugins/native.js.map +1 -1
- package/dist/vite-plugins/resource-init-module.d.ts +7 -3
- package/dist/vite-plugins/resource-init-module.d.ts.map +1 -1
- package/dist/vite-plugins/resource-init-module.js +39 -14
- package/dist/vite-plugins/resource-init-module.js.map +1 -1
- package/dist/vite-plugins/resource-shared.d.ts +3 -1
- package/dist/vite-plugins/resource-shared.d.ts.map +1 -1
- package/dist/vite-plugins/resource-shared.js +3 -1
- package/dist/vite-plugins/resource-shared.js.map +1 -1
- package/dist/vite-plugins/resources.d.ts +1 -1
- package/dist/vite-plugins/resources.d.ts.map +1 -1
- package/dist/vite-plugins/resources.js +877 -86
- 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.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +6 -3
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vite-plugins/settings.d.ts +3 -1
- package/dist/vite-plugins/settings.d.ts.map +1 -1
- package/dist/vite-plugins/settings.js +63 -23
- package/dist/vite-plugins/settings.js.map +1 -1
- package/env.d.ts +11 -192
- package/package.json +11 -10
- package/src/builder.ts +7 -7
- package/src/codegen/run-codegen.ts +64 -15
- package/src/commands/build.ts +0 -5
- package/src/commands/codegen.ts +2 -4
- package/src/deploy/depends.ts +47 -18
- package/src/deploy/freedesktop/localize.ts +144 -0
- package/src/deploy/install-hints.ts +5 -0
- package/src/deploy/nfpm/config.ts +1 -1
- package/src/deploy/node-runtime/elf.ts +3 -3
- package/src/deploy/node-runtime/index.ts +2 -2
- package/src/deploy/notices/collect.ts +4 -2
- package/src/deploy/notices/packages.ts +5 -43
- package/src/deploy/payload/icons.ts +64 -34
- package/src/deploy/payload/launcher.ts +2 -0
- package/src/deploy/payload/stage.ts +40 -12
- package/src/deploy/run-deploy.ts +214 -24
- package/src/deploy/settings/build-manifest.ts +122 -0
- package/src/deploy/settings/index.ts +9 -4
- package/src/deploy/settings/libraries.ts +57 -0
- package/src/deploy/settings/paths.ts +10 -47
- package/src/deploy/targets/appimage.ts +32 -15
- package/src/deploy/targets/flatpak-manifest.ts +7 -1
- package/src/deploy/targets/flatpak-source.ts +42 -20
- package/src/deploy/tools.ts +35 -0
- package/src/deploy/types.ts +4 -4
- package/src/dev/icon-dir.ts +31 -7
- package/src/dev/locale-dir.ts +22 -0
- package/src/dev/runner-deps.ts +5 -1
- package/src/dev/runner-main.ts +6 -4
- package/src/dev/runner.ts +10 -2
- package/src/dev/schema-dir.ts +3 -1
- 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/build-manifest.ts +32 -0
- package/src/internal/icon-path.ts +127 -0
- package/src/internal/source-imports.ts +171 -0
- package/src/mcp/client.ts +17 -44
- package/src/mcp/handlers.ts +7 -6
- package/src/mcp/widget-properties.ts +3 -14
- package/src/settings/render.ts +113 -21
- package/src/settings/schema.ts +192 -17
- package/src/vite-plugins/asset-emitter.ts +1 -1
- package/src/vite-plugins/asset-extensions.ts +1 -0
- package/src/vite-plugins/asset-imports.ts +62 -33
- package/src/vite-plugins/asset-specifier.ts +73 -1
- package/src/vite-plugins/{bundled-packages.ts → build-manifest.ts} +30 -19
- package/src/vite-plugins/built-url.ts +49 -28
- package/src/vite-plugins/i18n.ts +146 -0
- package/src/vite-plugins/icons.ts +33 -14
- package/src/vite-plugins/index.ts +15 -5
- package/src/vite-plugins/native.ts +31 -4
- package/src/vite-plugins/resource-init-module.ts +44 -15
- package/src/vite-plugins/resource-shared.ts +4 -0
- package/src/vite-plugins/resources.ts +1397 -100
- package/src/vite-plugins/self-contained.ts +150 -169
- package/src/vite-plugins/settings-worker-env.ts +7 -3
- package/src/vite-plugins/settings.ts +89 -21
- package/dist/vite-plugins/bundled-packages.d.ts +0 -5
- package/dist/vite-plugins/bundled-packages.d.ts.map +0 -1
- package/dist/vite-plugins/bundled-packages.js.map +0 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { extractBindings, } from "./binding-extractor.js";
|
|
2
|
+
const emptyExtraction = () => ({
|
|
3
|
+
blockedGetFixedT: new Set(),
|
|
4
|
+
calls: new Map(),
|
|
5
|
+
errors: [],
|
|
6
|
+
messages: [],
|
|
7
|
+
trans: new Map(),
|
|
8
|
+
});
|
|
9
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
10
|
+
const nodeSpanKey = (node) => {
|
|
11
|
+
if (!isRecord(node.span)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
return typeof node.span.start === "number" && typeof node.span.end === "number"
|
|
15
|
+
? `${String(node.span.start)}:${String(node.span.end)}`
|
|
16
|
+
: undefined;
|
|
17
|
+
};
|
|
18
|
+
const identifier = (value, source) => {
|
|
19
|
+
const span = isRecord(source) && isRecord(source.span) ? source.span : { end: 0, start: 0 };
|
|
20
|
+
return {
|
|
21
|
+
ctxt: 0,
|
|
22
|
+
optional: false,
|
|
23
|
+
span,
|
|
24
|
+
type: "Identifier",
|
|
25
|
+
value,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const sentinelFor = (code) => {
|
|
29
|
+
let sentinel = "__gtkxI18nSentinel";
|
|
30
|
+
while (new RegExp(String.raw `\b${sentinel}\b`, "u").test(code)) {
|
|
31
|
+
sentinel += "_";
|
|
32
|
+
}
|
|
33
|
+
return sentinel;
|
|
34
|
+
};
|
|
35
|
+
const canonicalSource = (code) => {
|
|
36
|
+
const hasBom = code.startsWith("\u{FEFF}");
|
|
37
|
+
let hashbangIndex = -1;
|
|
38
|
+
if (code.startsWith("#!")) {
|
|
39
|
+
hashbangIndex = 0;
|
|
40
|
+
}
|
|
41
|
+
else if (hasBom && code.startsWith("#!", 1)) {
|
|
42
|
+
hashbangIndex = 1;
|
|
43
|
+
}
|
|
44
|
+
let canonical = hasBom ? ` ${code.slice(1)}` : code;
|
|
45
|
+
if (hashbangIndex !== -1) {
|
|
46
|
+
canonical = `${canonical.slice(0, hashbangIndex)}//${canonical.slice(hashbangIndex + 2)}`;
|
|
47
|
+
}
|
|
48
|
+
return `;${canonical}`;
|
|
49
|
+
};
|
|
50
|
+
const replaceCallCallee = (node, sentinel) => {
|
|
51
|
+
node.callee = identifier(sentinel, node.callee);
|
|
52
|
+
};
|
|
53
|
+
const replaceJsxName = (element, sentinel) => {
|
|
54
|
+
if (!isRecord(element)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (isRecord(element.opening)) {
|
|
58
|
+
element.opening.name = identifier(sentinel, element.opening.name);
|
|
59
|
+
}
|
|
60
|
+
if (isRecord(element.closing)) {
|
|
61
|
+
element.closing.name = identifier(sentinel, element.closing.name);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const isJsxAttribute = (value) => isRecord(value) && value.type === "JSXAttribute";
|
|
65
|
+
const isTAttributeName = (value) => isRecord(value) && value.value === "t";
|
|
66
|
+
const isExpressionContainer = (value) => isRecord(value) && value.type === "JSXExpressionContainer";
|
|
67
|
+
const transTExpression = (attribute) => {
|
|
68
|
+
if (!isJsxAttribute(attribute)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!isTAttributeName(attribute.name)) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (!isExpressionContainer(attribute.value)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
return attribute.value;
|
|
78
|
+
};
|
|
79
|
+
const replaceTransTProp = (element, sentinel, info, context) => {
|
|
80
|
+
if (info === null || !isRecord(element.opening) || !Array.isArray(element.opening.attributes)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
for (const attribute of element.opening.attributes) {
|
|
84
|
+
const expression = transTExpression(attribute);
|
|
85
|
+
if (expression === undefined) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
context.setVarInScope(sentinel, info);
|
|
89
|
+
expression.expression = identifier(sentinel, expression.expression);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const reconcileBlockedNode = (value, key, extraction, reconciled) => {
|
|
94
|
+
if (value.type !== "VariableDeclarator") {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!extraction.blockedGetFixedT.has(key)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
blockUnrelatedGetFixedT(value);
|
|
101
|
+
reconciled.blocked.add(key);
|
|
102
|
+
};
|
|
103
|
+
const reconcileCallNode = (value, key, extraction, reconciled) => {
|
|
104
|
+
if (value.type === "CallExpression" && extraction.calls.has(key)) {
|
|
105
|
+
reconciled.calls.add(key);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const reconcileTransNode = (value, key, extraction, reconciled) => {
|
|
109
|
+
if (value.type === "JSXElement" && extraction.trans.has(key)) {
|
|
110
|
+
reconciled.trans.add(key);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const reconcileNode = (value, extraction, reconciled) => {
|
|
114
|
+
const key = nodeSpanKey(value);
|
|
115
|
+
if (key === undefined) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
reconcileBlockedNode(value, key, extraction, reconciled);
|
|
119
|
+
reconcileCallNode(value, key, extraction, reconciled);
|
|
120
|
+
reconcileTransNode(value, key, extraction, reconciled);
|
|
121
|
+
};
|
|
122
|
+
const visitModuleChild = (child, extraction, reconciled) => {
|
|
123
|
+
if (Array.isArray(child)) {
|
|
124
|
+
for (const item of child) {
|
|
125
|
+
visitModuleNode(item, extraction, reconciled);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
visitModuleNode(child, extraction, reconciled);
|
|
130
|
+
};
|
|
131
|
+
const visitModuleNode = (value, extraction, reconciled) => {
|
|
132
|
+
if (!isRecord(value)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
reconcileNode(value, extraction, reconciled);
|
|
136
|
+
for (const [name, child] of Object.entries(value)) {
|
|
137
|
+
if (name !== "span") {
|
|
138
|
+
visitModuleChild(child, extraction, reconciled);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const wasExtractionReconciled = (extraction, reconciled) => reconciled.blocked.size === extraction.blockedGetFixedT.size &&
|
|
143
|
+
reconciled.calls.size === extraction.calls.size &&
|
|
144
|
+
reconciled.trans.size === extraction.trans.size;
|
|
145
|
+
const blockUnrelatedGetFixedT = (declarator) => {
|
|
146
|
+
if (!isRecord(declarator.init) || !isRecord(declarator.init.callee)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const callee = declarator.init.callee;
|
|
150
|
+
if (callee.type === "MemberExpression" &&
|
|
151
|
+
isRecord(callee.property) &&
|
|
152
|
+
callee.property.value === "getFixedT") {
|
|
153
|
+
callee.property.value = "__gtkxIgnoredGetFixedT";
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
const prepareModule = (module, extraction, context) => {
|
|
157
|
+
const reconciled = {
|
|
158
|
+
blocked: new Set(),
|
|
159
|
+
calls: new Set(),
|
|
160
|
+
trans: new Set(),
|
|
161
|
+
};
|
|
162
|
+
visitModuleNode(module, extraction, reconciled);
|
|
163
|
+
if (!wasExtractionReconciled(extraction, reconciled)) {
|
|
164
|
+
context.logger.warn("GTKX could not reconcile the binding-aware and i18next syntax trees");
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const submitMessages = (extraction, context) => {
|
|
168
|
+
for (const error of extraction.errors) {
|
|
169
|
+
context.logger.warn(error);
|
|
170
|
+
}
|
|
171
|
+
for (const message of extraction.messages) {
|
|
172
|
+
context.addKey({
|
|
173
|
+
key: message.key,
|
|
174
|
+
defaultValue: message.defaultValue,
|
|
175
|
+
explicitDefault: message.explicitDefault,
|
|
176
|
+
locations: [message.location],
|
|
177
|
+
...(message.ns !== undefined && { ns: message.ns }),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
const loadSource = async (state, transComponents, code, path) => {
|
|
182
|
+
const canonical = canonicalSource(code);
|
|
183
|
+
state.extraction = await extractBindings(canonical, path);
|
|
184
|
+
state.sentinel = sentinelFor(canonical);
|
|
185
|
+
transComponents.splice(0, transComponents.length, state.sentinel);
|
|
186
|
+
return canonical;
|
|
187
|
+
};
|
|
188
|
+
const visitCall = (state, node, key, context) => {
|
|
189
|
+
const call = state.extraction.calls.get(key);
|
|
190
|
+
if (call !== undefined) {
|
|
191
|
+
context.setVarInScope(state.sentinel, call.info);
|
|
192
|
+
replaceCallCallee(node, state.sentinel);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const visitTrans = (state, node, key, context) => {
|
|
196
|
+
const transInfo = state.extraction.trans.get(key);
|
|
197
|
+
if (transInfo !== undefined) {
|
|
198
|
+
const tSentinel = `${state.sentinel}T`;
|
|
199
|
+
replaceJsxName(node, state.sentinel);
|
|
200
|
+
replaceTransTProp(node, tSentinel, transInfo, context);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
const visitMatchedNode = (state, node, key, context) => {
|
|
204
|
+
if (node.type === "VariableDeclarator" && state.extraction.blockedGetFixedT.has(key)) {
|
|
205
|
+
blockUnrelatedGetFixedT(node);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (node.type === "CallExpression") {
|
|
209
|
+
visitCall(state, node, key, context);
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (node.type === "JSXElement") {
|
|
213
|
+
visitTrans(state, node, key, context);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const visitNode = (state, node, context) => {
|
|
217
|
+
if (!isRecord(node)) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (node.type === "Module") {
|
|
221
|
+
prepareModule(node, state.extraction, context);
|
|
222
|
+
submitMessages(state.extraction, context);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const key = nodeSpanKey(node);
|
|
226
|
+
if (key !== undefined) {
|
|
227
|
+
visitMatchedNode(state, node, key, context);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const gtkxExtractorPlugin = () => {
|
|
231
|
+
const state = {
|
|
232
|
+
extraction: emptyExtraction(),
|
|
233
|
+
sentinel: "__gtkxI18nSentinel",
|
|
234
|
+
};
|
|
235
|
+
const transComponents = [];
|
|
236
|
+
const plugin = {
|
|
237
|
+
name: "gtkx-react-i18next",
|
|
238
|
+
onLoad: loadSource.bind(undefined, state, transComponents),
|
|
239
|
+
onVisitNode: visitNode.bind(undefined, state),
|
|
240
|
+
};
|
|
241
|
+
return {
|
|
242
|
+
plugin,
|
|
243
|
+
transComponents,
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
export { gtkxExtractorPlugin };
|
|
247
|
+
//# sourceMappingURL=extractor-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractor-plugin.js","sourceRoot":"","sources":["../../src/i18n/extractor-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin, PluginContext } from \"i18next-cli\";\nimport {\n type BindingExtraction,\n extractBindings,\n type ScopeInfo,\n} from \"./binding-extractor.js\";\n\ntype GtkxExtractorPlugin = {\n plugin: Plugin;\n transComponents: string[];\n};\n\ntype ExtractorState = {\n extraction: BindingExtraction;\n sentinel: string;\n};\n\ntype ReconciledNodes = {\n blocked: Set<string>;\n calls: Set<string>;\n trans: Set<string>;\n};\n\nconst emptyExtraction = (): BindingExtraction => ({\n blockedGetFixedT: new Set(),\n calls: new Map(),\n errors: [],\n messages: [],\n trans: new Map(),\n});\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nconst nodeSpanKey = (node: Record<string, unknown>): string | undefined => {\n if (!isRecord(node.span)) {\n return;\n }\n\n return typeof node.span.start === \"number\" && typeof node.span.end === \"number\"\n ? `${String(node.span.start)}:${String(node.span.end)}`\n : undefined;\n};\n\nconst identifier = (value: string, source: unknown): Record<string, unknown> => {\n const span = isRecord(source) && isRecord(source.span) ? source.span : { end: 0, start: 0 };\n\n return {\n ctxt: 0,\n optional: false,\n span,\n type: \"Identifier\",\n value,\n };\n};\n\nconst sentinelFor = (code: string): string => {\n let sentinel = \"__gtkxI18nSentinel\";\n\n while (new RegExp(String.raw`\\b${sentinel}\\b`, \"u\").test(code)) {\n sentinel += \"_\";\n }\n\n return sentinel;\n};\n\nconst canonicalSource = (code: string): string => {\n const hasBom = code.startsWith(\"\\u{FEFF}\");\n let hashbangIndex = -1;\n\n if (code.startsWith(\"#!\")) {\n hashbangIndex = 0;\n } else if (hasBom && code.startsWith(\"#!\", 1)) {\n hashbangIndex = 1;\n }\n\n let canonical = hasBom ? ` ${code.slice(1)}` : code;\n\n if (hashbangIndex !== -1) {\n canonical = `${canonical.slice(0, hashbangIndex)}//${canonical.slice(hashbangIndex + 2)}`;\n }\n\n return `;${canonical}`;\n};\n\nconst replaceCallCallee = (node: Record<string, unknown>, sentinel: string): void => {\n node.callee = identifier(sentinel, node.callee);\n};\n\nconst replaceJsxName = (element: unknown, sentinel: string): void => {\n if (!isRecord(element)) {\n return;\n }\n\n if (isRecord(element.opening)) {\n element.opening.name = identifier(sentinel, element.opening.name);\n }\n\n if (isRecord(element.closing)) {\n element.closing.name = identifier(sentinel, element.closing.name);\n }\n};\n\nconst isJsxAttribute = (value: unknown): value is Record<string, unknown> =>\n isRecord(value) && value.type === \"JSXAttribute\";\n\nconst isTAttributeName = (value: unknown): boolean =>\n isRecord(value) && value.value === \"t\";\n\nconst isExpressionContainer = (value: unknown): value is Record<string, unknown> =>\n isRecord(value) && value.type === \"JSXExpressionContainer\";\n\nconst transTExpression = (attribute: unknown): Record<string, unknown> | undefined => {\n if (!isJsxAttribute(attribute)) {\n return;\n }\n\n if (!isTAttributeName(attribute.name)) {\n return;\n }\n\n if (!isExpressionContainer(attribute.value)) {\n return;\n }\n\n return attribute.value;\n};\n\nconst replaceTransTProp = (\n element: Record<string, unknown>,\n sentinel: string,\n info: ScopeInfo | null,\n context: PluginContext,\n): void => {\n if (info === null || !isRecord(element.opening) || !Array.isArray(element.opening.attributes)) {\n return;\n }\n\n for (const attribute of element.opening.attributes) {\n const expression = transTExpression(attribute);\n\n if (expression === undefined) {\n continue;\n }\n\n context.setVarInScope(sentinel, info);\n expression.expression = identifier(sentinel, expression.expression);\n\n return;\n }\n};\n\nconst reconcileBlockedNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type !== \"VariableDeclarator\") {\n return;\n }\n\n if (!extraction.blockedGetFixedT.has(key)) {\n return;\n }\n\n blockUnrelatedGetFixedT(value);\n reconciled.blocked.add(key);\n};\n\nconst reconcileCallNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type === \"CallExpression\" && extraction.calls.has(key)) {\n reconciled.calls.add(key);\n }\n};\n\nconst reconcileTransNode = (\n value: Record<string, unknown>,\n key: string,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (value.type === \"JSXElement\" && extraction.trans.has(key)) {\n reconciled.trans.add(key);\n }\n};\n\nconst reconcileNode = (\n value: Record<string, unknown>,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n const key = nodeSpanKey(value);\n\n if (key === undefined) {\n return;\n }\n\n reconcileBlockedNode(value, key, extraction, reconciled);\n reconcileCallNode(value, key, extraction, reconciled);\n reconcileTransNode(value, key, extraction, reconciled);\n};\n\nconst visitModuleChild = (\n child: unknown,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (Array.isArray(child)) {\n for (const item of child) {\n visitModuleNode(item, extraction, reconciled);\n }\n\n return;\n }\n\n visitModuleNode(child, extraction, reconciled);\n};\n\nconst visitModuleNode = (\n value: unknown,\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): void => {\n if (!isRecord(value)) {\n return;\n }\n\n reconcileNode(value, extraction, reconciled);\n\n for (const [name, child] of Object.entries(value)) {\n if (name !== \"span\") {\n visitModuleChild(child, extraction, reconciled);\n }\n }\n};\n\nconst wasExtractionReconciled = (\n extraction: BindingExtraction,\n reconciled: ReconciledNodes,\n): boolean =>\n reconciled.blocked.size === extraction.blockedGetFixedT.size &&\n reconciled.calls.size === extraction.calls.size &&\n reconciled.trans.size === extraction.trans.size;\n\nconst blockUnrelatedGetFixedT = (declarator: Record<string, unknown>): void => {\n if (!isRecord(declarator.init) || !isRecord(declarator.init.callee)) {\n return;\n }\n\n const callee = declarator.init.callee;\n\n if (\n callee.type === \"MemberExpression\" &&\n isRecord(callee.property) &&\n callee.property.value === \"getFixedT\"\n ) {\n callee.property.value = \"__gtkxIgnoredGetFixedT\";\n }\n};\n\nconst prepareModule = (\n module: Record<string, unknown>,\n extraction: BindingExtraction,\n context: PluginContext,\n): void => {\n const reconciled: ReconciledNodes = {\n blocked: new Set(),\n calls: new Set(),\n trans: new Set(),\n };\n\n visitModuleNode(module, extraction, reconciled);\n\n if (!wasExtractionReconciled(extraction, reconciled)) {\n context.logger.warn(\"GTKX could not reconcile the binding-aware and i18next syntax trees\");\n }\n};\n\nconst submitMessages = (\n extraction: BindingExtraction,\n context: PluginContext,\n): void => {\n for (const error of extraction.errors) {\n context.logger.warn(error);\n }\n\n for (const message of extraction.messages) {\n context.addKey({\n key: message.key,\n defaultValue: message.defaultValue,\n explicitDefault: message.explicitDefault,\n locations: [message.location],\n ...(message.ns !== undefined && { ns: message.ns }),\n });\n }\n};\n\nconst loadSource = async (\n state: ExtractorState,\n transComponents: string[],\n code: string,\n path: string,\n): Promise<string> => {\n const canonical = canonicalSource(code);\n state.extraction = await extractBindings(canonical, path);\n state.sentinel = sentinelFor(canonical);\n transComponents.splice(0, transComponents.length, state.sentinel);\n\n return canonical;\n};\n\nconst visitCall = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n const call = state.extraction.calls.get(key);\n\n if (call !== undefined) {\n context.setVarInScope(state.sentinel, call.info);\n replaceCallCallee(node, state.sentinel);\n }\n};\n\nconst visitTrans = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n const transInfo = state.extraction.trans.get(key);\n\n if (transInfo !== undefined) {\n const tSentinel = `${state.sentinel}T`;\n replaceJsxName(node, state.sentinel);\n replaceTransTProp(node, tSentinel, transInfo, context);\n }\n};\n\nconst visitMatchedNode = (\n state: ExtractorState,\n node: Record<string, unknown>,\n key: string,\n context: PluginContext,\n): void => {\n if (node.type === \"VariableDeclarator\" && state.extraction.blockedGetFixedT.has(key)) {\n blockUnrelatedGetFixedT(node);\n\n return;\n }\n\n if (node.type === \"CallExpression\") {\n visitCall(state, node, key, context);\n\n return;\n }\n\n if (node.type === \"JSXElement\") {\n visitTrans(state, node, key, context);\n }\n};\n\nconst visitNode = (\n state: ExtractorState,\n node: unknown,\n context: PluginContext,\n): void => {\n if (!isRecord(node)) {\n return;\n }\n\n if (node.type === \"Module\") {\n prepareModule(node, state.extraction, context);\n submitMessages(state.extraction, context);\n\n return;\n }\n\n const key = nodeSpanKey(node);\n\n if (key !== undefined) {\n visitMatchedNode(state, node, key, context);\n }\n};\n\nconst gtkxExtractorPlugin = (): GtkxExtractorPlugin => {\n const state: ExtractorState = {\n extraction: emptyExtraction(),\n sentinel: \"__gtkxI18nSentinel\",\n };\n\n const transComponents: string[] = [];\n\n const plugin: Plugin = {\n name: \"gtkx-react-i18next\",\n onLoad: loadSource.bind(undefined, state, transComponents),\n onVisitNode: visitNode.bind(undefined, state),\n };\n\n return {\n plugin,\n transComponents,\n };\n};\n\nexport { gtkxExtractorPlugin };\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CatalogProject } from "./catalogs.js";
|
|
2
|
+
type MetadataTemplateKind = "desktop" | "metainfo.xml" | "mime.xml";
|
|
3
|
+
type MetadataTemplateFile = {
|
|
4
|
+
kind: MetadataTemplateKind;
|
|
5
|
+
path: string;
|
|
6
|
+
relativePath: string;
|
|
7
|
+
};
|
|
8
|
+
declare const metadataTemplateFile: (project: CatalogProject, kind: MetadataTemplateKind) => MetadataTemplateFile;
|
|
9
|
+
declare const metadataTemplateFiles: (project: CatalogProject) => MetadataTemplateFile[];
|
|
10
|
+
export { type MetadataTemplateKind, metadataTemplateFile, metadataTemplateFiles, };
|
|
11
|
+
//# sourceMappingURL=metadata-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-templates.d.ts","sourceRoot":"","sources":["../../src/i18n/metadata-templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,KAAK,oBAAoB,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AAEpE,KAAK,oBAAoB,GAAG;IACxB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC;AAKF,QAAA,MAAM,oBAAoB,GAAI,SAAS,cAAc,EAAE,MAAM,oBAAoB,KAAG,oBAKnF,CAAC;AAEF,QAAA,MAAM,qBAAqB,GAAI,SAAS,cAAc,KAAG,oBAAoB,EACC,CAAC;AAE/E,OAAO,EACH,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,qBAAqB,GACxB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { join, relative } from "node:path";
|
|
2
|
+
const METADATA_TEMPLATE_KINDS = ["desktop", "metainfo.xml", "mime.xml"];
|
|
3
|
+
const METADATA_TEMPLATE_DIRNAME = ".gtkx-metadata";
|
|
4
|
+
const metadataTemplateFile = (project, kind) => {
|
|
5
|
+
const path = join(project.poDir, METADATA_TEMPLATE_DIRNAME, `${project.domain}.template.${kind}`);
|
|
6
|
+
const relativePath = relative(project.root, path).replaceAll("\\", "/");
|
|
7
|
+
return { kind, path, relativePath };
|
|
8
|
+
};
|
|
9
|
+
const metadataTemplateFiles = (project) => METADATA_TEMPLATE_KINDS.map((kind) => metadataTemplateFile(project, kind));
|
|
10
|
+
export { metadataTemplateFile, metadataTemplateFiles, };
|
|
11
|
+
//# sourceMappingURL=metadata-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-templates.js","sourceRoot":"","sources":["../../src/i18n/metadata-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAW3C,MAAM,uBAAuB,GAA2B,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAChG,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAEnD,MAAM,oBAAoB,GAAG,CAAC,OAAuB,EAAE,IAA0B,EAAwB,EAAE;IACvG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,MAAM,aAAa,IAAI,EAAE,CAAC,CAAC;IAClG,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAExE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAuB,EAA0B,EAAE,CAC9E,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAE/E,OAAO,EAEH,oBAAoB,EACpB,qBAAqB,GACxB,CAAC","sourcesContent":["import { join, relative } from \"node:path\";\nimport type { CatalogProject } from \"./catalogs.js\";\n\ntype MetadataTemplateKind = \"desktop\" | \"metainfo.xml\" | \"mime.xml\";\n\ntype MetadataTemplateFile = {\n kind: MetadataTemplateKind;\n path: string;\n relativePath: string;\n};\n\nconst METADATA_TEMPLATE_KINDS: MetadataTemplateKind[] = [\"desktop\", \"metainfo.xml\", \"mime.xml\"];\nconst METADATA_TEMPLATE_DIRNAME = \".gtkx-metadata\";\n\nconst metadataTemplateFile = (project: CatalogProject, kind: MetadataTemplateKind): MetadataTemplateFile => {\n const path = join(project.poDir, METADATA_TEMPLATE_DIRNAME, `${project.domain}.template.${kind}`);\n const relativePath = relative(project.root, path).replaceAll(\"\\\\\", \"/\");\n\n return { kind, path, relativePath };\n};\n\nconst metadataTemplateFiles = (project: CatalogProject): MetadataTemplateFile[] =>\n METADATA_TEMPLATE_KINDS.map((kind) => metadataTemplateFile(project, kind));\n\nexport {\n type MetadataTemplateKind,\n metadataTemplateFile,\n metadataTemplateFiles,\n};\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CatalogProject } from "./catalogs.js";
|
|
2
|
+
type SourceLocation = {
|
|
3
|
+
file: string;
|
|
4
|
+
line?: number | undefined;
|
|
5
|
+
column?: number | undefined;
|
|
6
|
+
};
|
|
7
|
+
type SourceMessage = {
|
|
8
|
+
context: string | null;
|
|
9
|
+
kind: "default" | "plural" | "pluralDefaults" | "point";
|
|
10
|
+
locations: SourceLocation[];
|
|
11
|
+
msgid: string;
|
|
12
|
+
namespace: string;
|
|
13
|
+
plural: string | null;
|
|
14
|
+
singular: string;
|
|
15
|
+
};
|
|
16
|
+
type SourceCatalog = {
|
|
17
|
+
messages: SourceMessage[];
|
|
18
|
+
sourceFiles: string[];
|
|
19
|
+
};
|
|
20
|
+
declare const extractSourceCatalogTo: (project: CatalogProject, paths: string[], output: string) => Promise<SourceCatalog>;
|
|
21
|
+
declare const extractSourceCatalog: (project: CatalogProject, paths: string[], shouldPreserveMetadataMessages?: boolean) => Promise<SourceCatalog>;
|
|
22
|
+
export { type SourceMessage, extractSourceCatalog, extractSourceCatalogTo };
|
|
23
|
+
//# sourceMappingURL=source-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-messages.d.ts","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,OAAO,CAAC;IACxD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAiiBF,QAAA,MAAM,sBAAsB,GACxB,SAAS,cAAc,EACvB,OAAO,MAAM,EAAE,EACf,QAAQ,MAAM,KACf,OAAO,CAAC,aAAa,CAOvB,CAAC;AAEF,QAAA,MAAM,oBAAoB,GACtB,SAAS,cAAc,EACvB,OAAO,MAAM,EAAE,EACf,wCAAqC,KACtC,OAAO,CAAC,aAAa,CAOvB,CAAC;AAEF,OAAO,EAAE,KAAK,aAAa,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC"}
|