@gtkx/cli 2.0.0-beta.3 → 2.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/codegen/config-dependencies.d.ts +3 -0
- package/dist/codegen/config-dependencies.d.ts.map +1 -0
- package/dist/codegen/config-dependencies.js +355 -0
- package/dist/codegen/config-dependencies.js.map +1 -0
- 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 +31 -6
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +1 -0
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +4 -2
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/cleanup.d.ts +9 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +31 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +4 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
- package/dist/deploy/freedesktop/validate.js +45 -12
- package/dist/deploy/freedesktop/validate.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +24 -3
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/settings/extra-files.d.ts.map +1 -1
- package/dist/deploy/settings/extra-files.js +4 -3
- package/dist/deploy/settings/extra-files.js.map +1 -1
- package/dist/dev/catalog-writes.d.ts +8 -0
- package/dist/dev/catalog-writes.d.ts.map +1 -0
- package/dist/dev/catalog-writes.js +26 -0
- package/dist/dev/catalog-writes.js.map +1 -0
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +10 -6
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner.d.ts +1 -0
- package/dist/dev/runner.d.ts.map +1 -1
- package/dist/dev/runner.js +8 -2
- package/dist/dev/runner.js.map +1 -1
- package/dist/dev/supervisor.d.ts +2 -1
- package/dist/dev/supervisor.d.ts.map +1 -1
- package/dist/dev/supervisor.js +128 -26
- package/dist/dev/supervisor.js.map +1 -1
- package/dist/i18n/catalogs.d.ts +6 -2
- package/dist/i18n/catalogs.d.ts.map +1 -1
- package/dist/i18n/catalogs.js +9 -7
- package/dist/i18n/catalogs.js.map +1 -1
- package/dist/i18n/source-messages.d.ts +3 -1
- package/dist/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +14 -2
- package/dist/i18n/source-messages.js.map +1 -1
- package/dist/internal/build-output.d.ts.map +1 -1
- package/dist/internal/build-output.js +45 -8
- package/dist/internal/build-output.js.map +1 -1
- package/dist/internal/prepare-project.d.ts +1 -0
- package/dist/internal/prepare-project.d.ts.map +1 -1
- package/dist/internal/prepare-project.js +8 -2
- package/dist/internal/prepare-project.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts +11 -2
- package/dist/vite-plugins/i18n.d.ts.map +1 -1
- package/dist/vite-plugins/i18n.js +20 -6
- package/dist/vite-plugins/i18n.js.map +1 -1
- package/dist/vite-plugins/index.d.ts +2 -0
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +10 -2
- package/dist/vite-plugins/index.js.map +1 -1
- package/package.json +12 -10
- package/src/cli.ts +5 -0
- package/src/codegen/config-dependencies.ts +470 -0
- package/src/codegen/run-codegen.ts +37 -5
- package/src/codegen/store-resolver.ts +5 -2
- package/src/commands/cleanup.ts +36 -0
- package/src/commands/dev.ts +9 -2
- package/src/deploy/freedesktop/validate.ts +63 -13
- package/src/deploy/payload/stage.ts +42 -3
- package/src/deploy/settings/extra-files.ts +5 -3
- package/src/dev/catalog-writes.ts +35 -0
- package/src/dev/runner-deps.ts +14 -6
- package/src/dev/runner.ts +11 -2
- package/src/dev/supervisor.ts +177 -29
- package/src/i18n/catalogs.ts +20 -8
- package/src/i18n/source-messages.ts +19 -3
- package/src/internal/build-output.ts +67 -9
- package/src/internal/prepare-project.ts +9 -3
- package/src/vite-plugins/i18n.ts +42 -9
- package/src/vite-plugins/index.ts +19 -3
package/dist/i18n/catalogs.d.ts
CHANGED
|
@@ -11,11 +11,15 @@ type CatalogProject = {
|
|
|
11
11
|
poFiles: string[];
|
|
12
12
|
root: string;
|
|
13
13
|
};
|
|
14
|
+
type WrittenCatalog = {
|
|
15
|
+
content: Buffer;
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
14
18
|
declare const LOCALE_DIRNAME = "locale";
|
|
15
19
|
declare const requiresCatalogInitialization: (project: CatalogProject) => boolean;
|
|
16
20
|
declare const resolveCatalogProject: (root: string, domain: string) => CatalogProject | null;
|
|
17
21
|
declare const compileCatalogs: (project: CatalogProject, outputDir: string) => string[];
|
|
18
|
-
declare const synchronizeCatalogs: (project: CatalogProject) =>
|
|
22
|
+
declare const synchronizeCatalogs: (project: CatalogProject) => WrittenCatalog[];
|
|
19
23
|
declare const isCatalogSource: (root: string, path: string) => boolean;
|
|
20
|
-
export { type CatalogProject, LOCALE_DIRNAME, compileCatalogs, isCatalogSource, requiresCatalogInitialization, resolveCatalogProject, synchronizeCatalogs, };
|
|
24
|
+
export { type CatalogProject, LOCALE_DIRNAME, compileCatalogs, isCatalogSource, requiresCatalogInitialization, resolveCatalogProject, synchronizeCatalogs, type WrittenCatalog, };
|
|
21
25
|
//# sourceMappingURL=catalogs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,QAAA,MAAM,cAAc,WAAW,CAAC;AAiChC,QAAA,MAAM,6BAA6B,GAAI,SAAS,cAAc,KAAG,OACA,CAAC;AAElE,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,cAAc,GAAG,IA8B9E,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,cAAc,EAAE,WAAW,MAAM,KAAG,MAAM,EAmB3E,CAAC;
|
|
1
|
+
{"version":3,"file":"catalogs.d.ts","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"AAcA,KAAK,OAAO,GAAG;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AASF,KAAK,cAAc,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,QAAA,MAAM,cAAc,WAAW,CAAC;AAiChC,QAAA,MAAM,6BAA6B,GAAI,SAAS,cAAc,KAAG,OACA,CAAC;AAElE,QAAA,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,cAAc,GAAG,IA8B9E,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,SAAS,cAAc,EAAE,WAAW,MAAM,KAAG,MAAM,EAmB3E,CAAC;AA4DF,QAAA,MAAM,mBAAmB,GAAI,SAAS,cAAc,KAAG,cAAc,EAiBpE,CAAC;AAEF,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAUrD,CAAC;AAEF,OAAO,EACH,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,cAAc,GACtB,CAAC"}
|
package/dist/i18n/catalogs.js
CHANGED
|
@@ -103,26 +103,28 @@ const prepareCatalog = (catalog, index, template, stagingDir) => {
|
|
|
103
103
|
else {
|
|
104
104
|
initializeCatalog(catalog, template, output);
|
|
105
105
|
}
|
|
106
|
+
const content = readFileSync(output);
|
|
106
107
|
return {
|
|
107
|
-
|
|
108
|
+
content,
|
|
109
|
+
isChanged: !isExisting || !content.equals(readFileSync(catalog.path)),
|
|
108
110
|
output,
|
|
109
111
|
target: catalog.path,
|
|
110
112
|
};
|
|
111
113
|
};
|
|
114
|
+
const replaceCatalog = (catalog) => {
|
|
115
|
+
renameSync(catalog.output, catalog.target);
|
|
116
|
+
return { content: catalog.content, path: catalog.target };
|
|
117
|
+
};
|
|
112
118
|
const synchronizeCatalogs = (project) => {
|
|
113
119
|
if (project.catalogs.length === 0) {
|
|
114
|
-
return;
|
|
120
|
+
return [];
|
|
115
121
|
}
|
|
116
122
|
const template = join(project.poDir, `${project.domain}.pot`);
|
|
117
123
|
requireFile(template);
|
|
118
124
|
const stagingDir = mkdtempSync(join(project.poDir, ".gtkx-catalog-"));
|
|
119
125
|
try {
|
|
120
126
|
const merged = project.catalogs.map((catalog, index) => prepareCatalog(catalog, index, template, stagingDir));
|
|
121
|
-
|
|
122
|
-
if (catalog.isChanged) {
|
|
123
|
-
renameSync(catalog.output, catalog.target);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
127
|
+
return merged.filter((catalog) => catalog.isChanged).map((catalog) => replaceCatalog(catalog));
|
|
126
128
|
}
|
|
127
129
|
finally {
|
|
128
130
|
rmSync(stagingDir, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside } from \"@gtkx/utils\";\nimport {\n chmodSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n statSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\n\ntype Catalog = {\n locale: string;\n path: string;\n};\n\ntype CatalogProject = {\n catalogs: Catalog[];\n domain: string;\n linguasPath: string;\n locales: string[];\n poDir: string;\n poFiles: string[];\n root: string;\n};\n\ntype PreparedCatalog = {\n isChanged: boolean;\n output: string;\n target: string;\n};\n\nconst PO_DIRNAME = \"po\";\nconst LOCALE_DIRNAME = \"locale\";\nconst LINGUAS_FILENAME = \"LINGUAS\";\nconst LOCALE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.@+-]*$/;\nconst DOMAIN_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\nconst MODE_MASK = 0o7777;\n\nconst parseLocales = (linguasPath: string): string[] => {\n const source = readFileSync(linguasPath, \"utf8\");\n\n const tokens = source\n .split(/\\r?\\n/)\n .flatMap((line) => line.replace(/#.*/, \"\").trim().split(/\\s+/))\n .filter((token) => token.length > 0);\n\n const seen: Set<string> = new Set();\n\n for (const token of tokens) {\n if (!LOCALE_PATTERN.test(token) || seen.has(token)) {\n throw new Error(`Invalid locale in ${linguasPath}: ${token}`);\n }\n\n seen.add(token);\n }\n\n return tokens;\n};\n\nconst requireFile = (path: string): void => {\n if (!existsSync(path) || !statSync(path).isFile()) {\n throw new Error(`Missing translation catalog: ${path}`);\n }\n};\n\nconst requiresCatalogInitialization = (project: CatalogProject): boolean =>\n project.catalogs.some((catalog) => !existsSync(catalog.path));\n\nconst resolveCatalogProject = (root: string, domain: string): CatalogProject | null => {\n const projectRoot = resolve(root);\n const poDir = join(projectRoot, PO_DIRNAME);\n\n if (!existsSync(poDir)) {\n return null;\n }\n\n if (!statSync(poDir).isDirectory()) {\n throw new Error(`Translation source is not a directory: ${poDir}`);\n }\n\n if (!DOMAIN_PATTERN.test(domain)) {\n throw new Error(`Invalid translation domain: ${domain}`);\n }\n\n const linguasPath = join(poDir, LINGUAS_FILENAME);\n requireFile(linguasPath);\n const locales = parseLocales(linguasPath);\n const catalogs = locales.map((locale) => ({ locale, path: join(poDir, `${locale}.po`) }));\n\n return {\n catalogs,\n domain,\n linguasPath,\n locales,\n poDir,\n poFiles: catalogs.map((catalog) => catalog.path),\n root: projectRoot,\n };\n};\n\nconst compileCatalogs = (project: CatalogProject, outputDir: string): string[] => {\n const localeDir = resolve(outputDir);\n\n for (const catalog of project.catalogs) {\n requireFile(catalog.path);\n }\n\n return project.catalogs.map((catalog) => {\n const output = join(localeDir, catalog.locale, \"LC_MESSAGES\", `${project.domain}.mo`);\n mkdirSync(dirname(output), { recursive: true });\n\n runCliTool({\n tool: \"msgfmt\",\n args: [\"--check\", \"--output-file\", output, catalog.path],\n target: catalog.path,\n });\n\n return output;\n });\n};\n\nconst initializeCatalog = (catalog: Catalog, template: string, output: string): void => {\n runCliTool({\n tool: \"msginit\",\n args: [\n \"--no-translator\",\n \"--no-wrap\",\n `--locale=${catalog.locale}`,\n `--input=${template}`,\n `--output-file=${output}`,\n ],\n options: { stdio: \"pipe\" },\n target: catalog.path,\n });\n};\n\nconst mergeCatalog = (catalog: Catalog, template: string, output: string): void => {\n requireFile(catalog.path);\n\n runCliTool({\n tool: \"msgmerge\",\n args: [\"--quiet\", \"--no-wrap\", `--output-file=${output}`, catalog.path, template],\n target: catalog.path,\n });\n\n chmodSync(output, statSync(catalog.path).mode & MODE_MASK);\n};\n\nconst prepareCatalog = (\n catalog: Catalog,\n index: number,\n template: string,\n stagingDir: string,\n): PreparedCatalog => {\n const output = join(stagingDir, `${String(index)}.po`);\n const isExisting = existsSync(catalog.path);\n\n if (isExisting) {\n mergeCatalog(catalog, template, output);\n } else {\n initializeCatalog(catalog, template, output);\n }\n\n return {\n isChanged: !isExisting || !readFileSync(output).equals(readFileSync(catalog.path)),\n output,\n target: catalog.path,\n };\n};\n\nconst synchronizeCatalogs = (project: CatalogProject): void => {\n if (project.catalogs.length === 0) {\n return;\n }\n\n const template = join(project.poDir, `${project.domain}.pot`);\n requireFile(template);\n const stagingDir = mkdtempSync(join(project.poDir, \".gtkx-catalog-\"));\n\n try {\n const merged = project.catalogs.map((catalog, index) =>\n prepareCatalog(catalog, index, template, stagingDir));\n\n for (const catalog of merged) {\n if (catalog.isChanged) {\n renameSync(catalog.output, catalog.target);\n }\n }\n } finally {\n rmSync(stagingDir, { recursive: true, force: true });\n }\n};\n\nconst isCatalogSource = (root: string, path: string): boolean => {\n const projectRoot = resolve(root);\n const sourcePath = isAbsolute(path) ? resolve(path) : resolve(projectRoot, path);\n const poPath = relative(join(projectRoot, PO_DIRNAME), sourcePath);\n\n if (!isPathInside(join(projectRoot, PO_DIRNAME), sourcePath)) {\n return false;\n }\n\n return !poPath.includes(sep) && (poPath === LINGUAS_FILENAME || poPath.endsWith(\".po\"));\n};\n\nexport {\n type CatalogProject,\n LOCALE_DIRNAME,\n compileCatalogs,\n isCatalogSource,\n requiresCatalogInitialization,\n resolveCatalogProject,\n synchronizeCatalogs,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"catalogs.js","sourceRoot":"","sources":["../../src/i18n/catalogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPathInside } from \"@gtkx/utils\";\nimport {\n chmodSync,\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n statSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { runCliTool } from \"../internal/run-cli-tool.js\";\n\ntype Catalog = {\n locale: string;\n path: string;\n};\n\ntype CatalogProject = {\n catalogs: Catalog[];\n domain: string;\n linguasPath: string;\n locales: string[];\n poDir: string;\n poFiles: string[];\n root: string;\n};\n\ntype PreparedCatalog = {\n content: Buffer;\n isChanged: boolean;\n output: string;\n target: string;\n};\n\ntype WrittenCatalog = {\n content: Buffer;\n path: string;\n};\n\nconst PO_DIRNAME = \"po\";\nconst LOCALE_DIRNAME = \"locale\";\nconst LINGUAS_FILENAME = \"LINGUAS\";\nconst LOCALE_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.@+-]*$/;\nconst DOMAIN_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\nconst MODE_MASK = 0o7777;\n\nconst parseLocales = (linguasPath: string): string[] => {\n const source = readFileSync(linguasPath, \"utf8\");\n\n const tokens = source\n .split(/\\r?\\n/)\n .flatMap((line) => line.replace(/#.*/, \"\").trim().split(/\\s+/))\n .filter((token) => token.length > 0);\n\n const seen: Set<string> = new Set();\n\n for (const token of tokens) {\n if (!LOCALE_PATTERN.test(token) || seen.has(token)) {\n throw new Error(`Invalid locale in ${linguasPath}: ${token}`);\n }\n\n seen.add(token);\n }\n\n return tokens;\n};\n\nconst requireFile = (path: string): void => {\n if (!existsSync(path) || !statSync(path).isFile()) {\n throw new Error(`Missing translation catalog: ${path}`);\n }\n};\n\nconst requiresCatalogInitialization = (project: CatalogProject): boolean =>\n project.catalogs.some((catalog) => !existsSync(catalog.path));\n\nconst resolveCatalogProject = (root: string, domain: string): CatalogProject | null => {\n const projectRoot = resolve(root);\n const poDir = join(projectRoot, PO_DIRNAME);\n\n if (!existsSync(poDir)) {\n return null;\n }\n\n if (!statSync(poDir).isDirectory()) {\n throw new Error(`Translation source is not a directory: ${poDir}`);\n }\n\n if (!DOMAIN_PATTERN.test(domain)) {\n throw new Error(`Invalid translation domain: ${domain}`);\n }\n\n const linguasPath = join(poDir, LINGUAS_FILENAME);\n requireFile(linguasPath);\n const locales = parseLocales(linguasPath);\n const catalogs = locales.map((locale) => ({ locale, path: join(poDir, `${locale}.po`) }));\n\n return {\n catalogs,\n domain,\n linguasPath,\n locales,\n poDir,\n poFiles: catalogs.map((catalog) => catalog.path),\n root: projectRoot,\n };\n};\n\nconst compileCatalogs = (project: CatalogProject, outputDir: string): string[] => {\n const localeDir = resolve(outputDir);\n\n for (const catalog of project.catalogs) {\n requireFile(catalog.path);\n }\n\n return project.catalogs.map((catalog) => {\n const output = join(localeDir, catalog.locale, \"LC_MESSAGES\", `${project.domain}.mo`);\n mkdirSync(dirname(output), { recursive: true });\n\n runCliTool({\n tool: \"msgfmt\",\n args: [\"--check\", \"--output-file\", output, catalog.path],\n target: catalog.path,\n });\n\n return output;\n });\n};\n\nconst initializeCatalog = (catalog: Catalog, template: string, output: string): void => {\n runCliTool({\n tool: \"msginit\",\n args: [\n \"--no-translator\",\n \"--no-wrap\",\n `--locale=${catalog.locale}`,\n `--input=${template}`,\n `--output-file=${output}`,\n ],\n options: { stdio: \"pipe\" },\n target: catalog.path,\n });\n};\n\nconst mergeCatalog = (catalog: Catalog, template: string, output: string): void => {\n requireFile(catalog.path);\n\n runCliTool({\n tool: \"msgmerge\",\n args: [\"--quiet\", \"--no-wrap\", `--output-file=${output}`, catalog.path, template],\n target: catalog.path,\n });\n\n chmodSync(output, statSync(catalog.path).mode & MODE_MASK);\n};\n\nconst prepareCatalog = (\n catalog: Catalog,\n index: number,\n template: string,\n stagingDir: string,\n): PreparedCatalog => {\n const output = join(stagingDir, `${String(index)}.po`);\n const isExisting = existsSync(catalog.path);\n\n if (isExisting) {\n mergeCatalog(catalog, template, output);\n } else {\n initializeCatalog(catalog, template, output);\n }\n\n const content = readFileSync(output);\n\n return {\n content,\n isChanged: !isExisting || !content.equals(readFileSync(catalog.path)),\n output,\n target: catalog.path,\n };\n};\n\nconst replaceCatalog = (catalog: PreparedCatalog): WrittenCatalog => {\n renameSync(catalog.output, catalog.target);\n\n return { content: catalog.content, path: catalog.target };\n};\n\nconst synchronizeCatalogs = (project: CatalogProject): WrittenCatalog[] => {\n if (project.catalogs.length === 0) {\n return [];\n }\n\n const template = join(project.poDir, `${project.domain}.pot`);\n requireFile(template);\n const stagingDir = mkdtempSync(join(project.poDir, \".gtkx-catalog-\"));\n\n try {\n const merged = project.catalogs.map((catalog, index) =>\n prepareCatalog(catalog, index, template, stagingDir));\n\n return merged.filter((catalog) => catalog.isChanged).map((catalog) => replaceCatalog(catalog));\n } finally {\n rmSync(stagingDir, { recursive: true, force: true });\n }\n};\n\nconst isCatalogSource = (root: string, path: string): boolean => {\n const projectRoot = resolve(root);\n const sourcePath = isAbsolute(path) ? resolve(path) : resolve(projectRoot, path);\n const poPath = relative(join(projectRoot, PO_DIRNAME), sourcePath);\n\n if (!isPathInside(join(projectRoot, PO_DIRNAME), sourcePath)) {\n return false;\n }\n\n return !poPath.includes(sep) && (poPath === LINGUAS_FILENAME || poPath.endsWith(\".po\"));\n};\n\nexport {\n type CatalogProject,\n LOCALE_DIRNAME,\n compileCatalogs,\n isCatalogSource,\n requiresCatalogInitialization,\n resolveCatalogProject,\n synchronizeCatalogs,\n type WrittenCatalog,\n};\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CatalogProject } from "./catalogs.js";
|
|
2
|
+
declare class SourceExtractionError extends Error {
|
|
3
|
+
}
|
|
2
4
|
declare const extractSourceCatalogTo: (project: CatalogProject, paths: string[], output: string) => Promise<void>;
|
|
3
5
|
declare const extractSourceCatalog: (project: CatalogProject, paths: string[], shouldPreserveMetadataMessages?: boolean) => Promise<void>;
|
|
4
|
-
export { extractSourceCatalog, extractSourceCatalogTo };
|
|
6
|
+
export { extractSourceCatalog, extractSourceCatalogTo, SourceExtractionError };
|
|
5
7
|
//# sourceMappingURL=source-messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-messages.d.ts","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"source-messages.d.ts","sourceRoot":"","sources":["../../src/i18n/source-messages.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAqGpD,cAAM,qBAAsB,SAAQ,KAAK;CAAG;AAwzD5C,QAAA,MAAM,sBAAsB,GACxB,SAAS,cAAc,EACvB,OAAO,MAAM,EAAE,EACf,QAAQ,MAAM,KACf,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,QAAA,MAAM,oBAAoB,GACtB,SAAS,cAAc,EACvB,OAAO,MAAM,EAAE,EACf,wCAAqC,KACtC,OAAO,CAAC,IAAI,CAKd,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -35,7 +35,19 @@ const STATIC_KEY_WRAPPER_TYPES = new Set([
|
|
|
35
35
|
]);
|
|
36
36
|
class SourceExtractionError extends Error {
|
|
37
37
|
}
|
|
38
|
-
const sourceErrorMessage = (error) =>
|
|
38
|
+
const sourceErrorMessage = (error) => {
|
|
39
|
+
if (!(error instanceof Error)) {
|
|
40
|
+
return String(error);
|
|
41
|
+
}
|
|
42
|
+
if ("code" in error &&
|
|
43
|
+
error.code === "BABEL_PARSE_ERROR") {
|
|
44
|
+
const separator = error.message.indexOf(": ");
|
|
45
|
+
if (separator !== -1) {
|
|
46
|
+
return error.message.slice(separator + 2);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return error.message;
|
|
50
|
+
};
|
|
39
51
|
const projectSourcePath = (root, path) => {
|
|
40
52
|
const absolute = isAbsolute(path) ? resolve(path) : resolve(root, path);
|
|
41
53
|
return toPosixPath(isPathInside(root, absolute) ? relative(root, absolute) : path);
|
|
@@ -1332,5 +1344,5 @@ const extractSourceCatalog = async (project, paths, shouldPreserveMetadataMessag
|
|
|
1332
1344
|
writePotfiles(project, sourceFiles);
|
|
1333
1345
|
extractCatalogTemplate({ project, messages, shouldPreserveMetadataMessages });
|
|
1334
1346
|
};
|
|
1335
|
-
export { extractSourceCatalog, extractSourceCatalogTo };
|
|
1347
|
+
export { extractSourceCatalog, extractSourceCatalogTo, SourceExtractionError };
|
|
1336
1348
|
//# sourceMappingURL=source-messages.js.map
|