@ikas/component-cli 1.4.0-beta.218 → 1.4.0-beta.219
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/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +10 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/config-texts.d.ts +30 -0
- package/dist/commands/config-texts.d.ts.map +1 -0
- package/dist/commands/config-texts.js +133 -0
- package/dist/commands/config-texts.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +29 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +60 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/list-translations.js +2 -2
- package/dist/commands/list-translations.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +9 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/i18n.d.ts +73 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +253 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/websocket-server.d.ts +24 -0
- package/dist/utils/websocket-server.d.ts.map +1 -1
- package/dist/utils/websocket-server.js +28 -0
- package/dist/utils/websocket-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6IpC,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C"}
|
package/dist/commands/build.js
CHANGED
|
@@ -8,6 +8,7 @@ import { execSync } from "child_process";
|
|
|
8
8
|
// scoping) from utils/compile.ts. This command previously carried its own copy, which
|
|
9
9
|
// is how the CSS-scoping fix could land in one place and not the other — keep it shared.
|
|
10
10
|
import { compileComponent } from "../utils/compile.js";
|
|
11
|
+
import { loadProjectI18n } from "../utils/i18n.js";
|
|
11
12
|
function runTypeCheck() {
|
|
12
13
|
const spinner = ora("Type checking with TypeScript...").start();
|
|
13
14
|
try {
|
|
@@ -33,12 +34,19 @@ async function buildComponents(options) {
|
|
|
33
34
|
console.error(chalk.gray("Make sure you're in an ikas component project directory"));
|
|
34
35
|
process.exit(1);
|
|
35
36
|
}
|
|
37
|
+
// Read config
|
|
38
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
39
|
+
// The UI texts' generated `index.ts`, which the components import (so before the type check); a text that
|
|
40
|
+
// breaks the rules fails the build rather than being left out unnoticed
|
|
41
|
+
const i18nErrors = loadProjectI18n(config).errors;
|
|
42
|
+
if (i18nErrors.length) {
|
|
43
|
+
i18nErrors.forEach((error) => console.error(chalk.red(` i18n: ${error}`)));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
36
46
|
// Run TypeScript type checking before building
|
|
37
47
|
if (!runTypeCheck()) {
|
|
38
48
|
process.exit(1);
|
|
39
49
|
}
|
|
40
|
-
// Read config
|
|
41
|
-
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
42
50
|
const outputDir = options.output || "dist";
|
|
43
51
|
console.log(chalk.cyan("\n Building ikas Components\n"));
|
|
44
52
|
console.log(chalk.gray(` Project: ${config.name}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,mFAAmF;AACnF,sFAAsF;AACtF,yFAAyF;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IkasComponentConfig } from "../types.js";
|
|
2
|
+
/** Where a project keeps its UI texts when its config names no folder yet. */
|
|
3
|
+
export declare const DEFAULT_I18N_DIR = "./src/i18n";
|
|
4
|
+
type Result = {
|
|
5
|
+
success: true;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
} | {
|
|
8
|
+
success: false;
|
|
9
|
+
error: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Adds or changes a UI text: the base text (`default.json`), or with `locale` a language's. Keys are dotted paths of
|
|
13
|
+
* identifiers (`common.addToCart`); a language's text needs the key in the base and the base text's `{{params}}`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function setText(config: IkasComponentConfig, options: {
|
|
16
|
+
key: string;
|
|
17
|
+
text: string;
|
|
18
|
+
locale?: string;
|
|
19
|
+
}, root: string): Result & {
|
|
20
|
+
configChanged?: boolean;
|
|
21
|
+
};
|
|
22
|
+
/** Removes a UI text: from the base and every language, or with `locale` only that language's. */
|
|
23
|
+
export declare function removeText(config: IkasComponentConfig, options: {
|
|
24
|
+
key: string;
|
|
25
|
+
locale?: string;
|
|
26
|
+
}, root: string): Result;
|
|
27
|
+
/** The UI texts: the base ones, each language's, and the keys a language lacks. */
|
|
28
|
+
export declare function listTexts(config: IkasComponentConfig, root: string): Result;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=config-texts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-texts.d.ts","sourceRoot":"","sources":["../../src/commands/config-texts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAYvD,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,KAAK,MAAM,GACP;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAqBtC;;;GAGG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACvD,IAAI,EAAE,MAAM,GACX,MAAM,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAkEtC;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CACxB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACzC,IAAI,EAAE,MAAM,GACX,MAAM,CAsBR;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAyB3E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { checkLocaleTexts, I18N_DEFAULT_FILE, I18N_SEGMENT_PATTERN, i18nDir, isLanguageCode, loadProjectI18n, readI18n, writeI18nFile, } from "../utils/i18n.js";
|
|
3
|
+
/** Where a project keeps its UI texts when its config names no folder yet. */
|
|
4
|
+
export const DEFAULT_I18N_DIR = "./src/i18n";
|
|
5
|
+
/** The texts as they are on disk; refused when a file breaks the rules, so a write never drops what it could not read. */
|
|
6
|
+
function readTexts(config, root) {
|
|
7
|
+
const dir = i18nDir(config, root);
|
|
8
|
+
if (!dir)
|
|
9
|
+
return {
|
|
10
|
+
error: "No UI texts yet: the config names no i18n folder.",
|
|
11
|
+
};
|
|
12
|
+
const read = readI18n(dir);
|
|
13
|
+
if (read.errors.length)
|
|
14
|
+
return {
|
|
15
|
+
error: `Fix the UI texts files first: ${read.errors.join(" ")}`,
|
|
16
|
+
};
|
|
17
|
+
return { dir, ...read };
|
|
18
|
+
}
|
|
19
|
+
/** Writes the generated `index.ts` (its typed keys) after a change. */
|
|
20
|
+
const regenerate = (config, root) => loadProjectI18n(config, undefined, root);
|
|
21
|
+
/**
|
|
22
|
+
* Adds or changes a UI text: the base text (`default.json`), or with `locale` a language's. Keys are dotted paths of
|
|
23
|
+
* identifiers (`common.addToCart`); a language's text needs the key in the base and the base text's `{{params}}`.
|
|
24
|
+
*/
|
|
25
|
+
export function setText(config, options, root) {
|
|
26
|
+
const { key, text, locale } = options;
|
|
27
|
+
const segments = key.split(".");
|
|
28
|
+
if (segments.some((segment) => !I18N_SEGMENT_PATTERN.test(segment)))
|
|
29
|
+
return {
|
|
30
|
+
success: false,
|
|
31
|
+
error: `Key "${key}": each dotted part must be an identifier (letters, digits, _; not starting with a digit).`,
|
|
32
|
+
};
|
|
33
|
+
if (!text.trim())
|
|
34
|
+
return { success: false, error: `Key "${key}" needs a text.` };
|
|
35
|
+
if (locale !== undefined &&
|
|
36
|
+
(locale === I18N_DEFAULT_FILE || !isLanguageCode(locale)))
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: `"${locale}" is not a language code (en, de, pt-BR).`,
|
|
40
|
+
};
|
|
41
|
+
const configChanged = !config.i18n;
|
|
42
|
+
if (configChanged)
|
|
43
|
+
config.i18n = DEFAULT_I18N_DIR;
|
|
44
|
+
const read = readTexts(config, root);
|
|
45
|
+
if ("error" in read)
|
|
46
|
+
return { success: false, error: read.error };
|
|
47
|
+
if (locale) {
|
|
48
|
+
const checked = checkLocaleTexts(read.base, { [key]: text }, locale);
|
|
49
|
+
if (checked.errors.length)
|
|
50
|
+
return { success: false, error: checked.errors.join(" ") };
|
|
51
|
+
writeI18nFile(read.dir, locale, { ...read.locales[locale], [key]: text });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// A path is a text or a group, never both
|
|
55
|
+
const clash = Object.keys(read.base).find((other) => other !== key &&
|
|
56
|
+
(other.startsWith(`${key}.`) || key.startsWith(`${other}.`)));
|
|
57
|
+
if (clash)
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
error: `Key "${key}" clashes with "${clash}": a key is a text or a group, not both.`,
|
|
61
|
+
};
|
|
62
|
+
// The languages' texts must keep using the base's params
|
|
63
|
+
const broken = Object.entries(read.locales).flatMap(([other, texts]) => key in texts
|
|
64
|
+
? checkLocaleTexts({ [key]: text }, { [key]: texts[key] }, other).errors
|
|
65
|
+
: []);
|
|
66
|
+
if (broken.length)
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
error: `Change the languages' texts first: ${broken.join(" ")}`,
|
|
70
|
+
};
|
|
71
|
+
writeI18nFile(read.dir, I18N_DEFAULT_FILE, { ...read.base, [key]: text });
|
|
72
|
+
}
|
|
73
|
+
regenerate(config, root);
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
key,
|
|
77
|
+
text,
|
|
78
|
+
...(locale ? { locale } : {}),
|
|
79
|
+
file: path.relative(root, path.join(read.dir, `${locale ?? I18N_DEFAULT_FILE}.json`)),
|
|
80
|
+
configChanged,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Removes a UI text: from the base and every language, or with `locale` only that language's. */
|
|
84
|
+
export function removeText(config, options, root) {
|
|
85
|
+
const { key, locale } = options;
|
|
86
|
+
const read = readTexts(config, root);
|
|
87
|
+
if ("error" in read)
|
|
88
|
+
return { success: false, error: read.error };
|
|
89
|
+
const texts = locale ? read.locales[locale] : read.base;
|
|
90
|
+
if (!texts || !(key in texts))
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: `No UI text "${key}"${locale ? ` in ${locale}` : ""}. Keys: ${Object.keys(texts ?? {}).join(", ") || "none"}.`,
|
|
94
|
+
};
|
|
95
|
+
const without = (from) => Object.fromEntries(Object.entries(from).filter(([other]) => other !== key));
|
|
96
|
+
if (locale)
|
|
97
|
+
writeI18nFile(read.dir, locale, without(texts));
|
|
98
|
+
else {
|
|
99
|
+
writeI18nFile(read.dir, I18N_DEFAULT_FILE, without(read.base));
|
|
100
|
+
Object.entries(read.locales).forEach(([other, otherTexts]) => {
|
|
101
|
+
if (key in otherTexts)
|
|
102
|
+
writeI18nFile(read.dir, other, without(otherTexts));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
regenerate(config, root);
|
|
106
|
+
return { success: true, removed: key, ...(locale ? { locale } : {}) };
|
|
107
|
+
}
|
|
108
|
+
/** The UI texts: the base ones, each language's, and the keys a language lacks. */
|
|
109
|
+
export function listTexts(config, root) {
|
|
110
|
+
const dir = i18nDir(config, root);
|
|
111
|
+
if (!dir)
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
dir: null,
|
|
115
|
+
base: {},
|
|
116
|
+
locales: {},
|
|
117
|
+
missing: {},
|
|
118
|
+
errors: [],
|
|
119
|
+
};
|
|
120
|
+
const read = readI18n(dir);
|
|
121
|
+
return {
|
|
122
|
+
success: true,
|
|
123
|
+
dir: path.relative(root, dir),
|
|
124
|
+
base: read.base,
|
|
125
|
+
locales: read.locales,
|
|
126
|
+
missing: Object.fromEntries(Object.entries(read.locales).map(([locale, texts]) => [
|
|
127
|
+
locale,
|
|
128
|
+
Object.keys(read.base).filter((key) => !(key in texts)),
|
|
129
|
+
])),
|
|
130
|
+
errors: read.errors,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=config-texts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-texts.js","sourceRoot":"","sources":["../../src/commands/config-texts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,EACP,cAAc,EACd,eAAe,EACf,QAAQ,EACR,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAM7C,0HAA0H;AAC1H,SAAS,SAAS,CAAC,MAA2B,EAAE,IAAY;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QACN,OAAO;YACL,KAAK,EAAE,mDAAmD;SAClD,CAAC;IACb,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;QACpB,OAAO;YACL,KAAK,EAAE,iCAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SACvD,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,EAAW,CAAC;AACnC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,GAAG,CAAC,MAA2B,EAAE,IAAY,EAAE,EAAE,CAC/D,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,OAAO,CACrB,MAA2B,EAC3B,OAAuD,EACvD,IAAY;IAEZ,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,QAAQ,GAAG,4FAA4F;SAC/G,CAAC;IACJ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACjE,IACE,MAAM,KAAK,SAAS;QACpB,CAAC,MAAM,KAAK,iBAAiB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEzD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI,MAAM,2CAA2C;SAC7D,CAAC;IAEJ,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IACnC,IAAI,aAAa;QAAE,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAe,EAAE,CAAC;IAE5E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM;YACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,0CAA0C;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACvC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,KAAK,GAAG;YACb,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAC/D,CAAC;QACF,IAAI,KAAK;YACP,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,QAAQ,GAAG,mBAAmB,KAAK,0CAA0C;aACrF,CAAC;QACJ,yDAAyD;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CACrE,GAAG,IAAI,KAAK;YACV,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM;YACxE,CAAC,CAAC,EAAE,CACP,CAAC;QACF,IAAI,MAAM,CAAC,MAAM;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sCAAsC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChE,CAAC;QACJ,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG;QACH,IAAI;QACJ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,EACJ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,iBAAiB,OAAO,CAAC,CAC3D;QACD,aAAa;KACd,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,UAAU,CACxB,MAA2B,EAC3B,OAAyC,EACzC,IAAY;IAEZ,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAe,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG;SACtH,CAAC;IACJ,MAAM,OAAO,GAAG,CAAC,IAA4B,EAAE,EAAE,CAC/C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9E,IAAI,MAAM;QAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD,CAAC;QACJ,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE;YAC3D,IAAI,GAAG,IAAI,UAAU;gBACnB,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,MAA2B,EAAE,IAAY;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QACN,OAAO;YACL,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;SACxD,CAAC,CACH;QACD,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuXpC,eAAO,MAAM,qBAAqB,SAAU;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,KAAG,OAA2D,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBlE;AAmyBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0B1E;AAMD,eAAO,MAAM,kBAAkB,UAkB9B,CAAC;AAOF,eAAO,MAAM,oBAAoB,aACrB,MAAM,YACN,MAAM,gBACF,OAAO,KACpB,IAUF,CAAC;AAuEF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAwBf;AAOD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAC/B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACjC,MAAM,GAAG,IAAI,CAuDf;AAoDD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAoBf;AAUD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,eAAe,EACX;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,SAAS,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAsCf;AASD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAgBf;AA+FD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,MAAM,GAAG,IAAI,CAwBf;AAqXD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/B,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAC5B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAUf;AAosBD,wBAAgB,mBAAmB,IAAI,OAAO,CA4b7C"}
|
package/dist/commands/config.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
import { runEditorAction } from "../utils/editor-action-client.js";
|
|
5
|
+
import { listTexts, removeText, setText } from "./config-texts.js";
|
|
5
6
|
import { PROP_TYPES, toPascalCase, generateTypesFile, isBuiltInEnumTypeId, normalizeEnumOptionsInput, generateGlobalTypesFile, collectUsedEnumIds, generateComponentFile, generateStylesFile, generateProjectId, isValidProjectId, generateComponentId, generateUniqueId, updateBarrelExport, findPropGroup, collectPropGroupIds, movePropGroupInTree, validateFilteredComponentIds, visibilityGateError, } from "../utils/component-helpers.js";
|
|
6
7
|
function loadConfig() {
|
|
7
8
|
const configPath = path.resolve(process.cwd(), "ikas.config.json");
|
|
@@ -2119,6 +2120,34 @@ export function createConfigCommand() {
|
|
|
2119
2120
|
.action((options) => {
|
|
2120
2121
|
updateComponent({ id: options.id, name: options.name }, options);
|
|
2121
2122
|
});
|
|
2123
|
+
// The project's UI texts (`src/i18n/default.json` + a `<locale>.json` per language)
|
|
2124
|
+
const textsCommand = (run) => {
|
|
2125
|
+
const { config: projectConfig, configPath } = loadConfig();
|
|
2126
|
+
const result = run(projectConfig, path.dirname(configPath));
|
|
2127
|
+
if (result.configChanged)
|
|
2128
|
+
saveConfig(configPath, projectConfig);
|
|
2129
|
+
console.log(JSON.stringify(result, null, 2));
|
|
2130
|
+
if (!result.success)
|
|
2131
|
+
process.exit(1);
|
|
2132
|
+
};
|
|
2133
|
+
config
|
|
2134
|
+
.command("set-text")
|
|
2135
|
+
.description("Add or update a UI text of the project (a fixed text of the components' UI, read with t(key, params) from the generated src/i18n/index.ts). " +
|
|
2136
|
+
"Keys are dotted groups: common.addToCart. Without --locale the base text (default.json); with --locale a language's. {{param}} placeholders must match the base text's.")
|
|
2137
|
+
.requiredOption("--key <key>", "Dotted key, e.g. common.addToCart")
|
|
2138
|
+
.requiredOption("--text <text>", 'The text, e.g. "{{count}} adet kaldı"')
|
|
2139
|
+
.option("--locale <code>", "A language code (en, de, ...): set that language's text instead of the base text")
|
|
2140
|
+
.action((options) => textsCommand((projectConfig, root) => setText(projectConfig, options, root)));
|
|
2141
|
+
config
|
|
2142
|
+
.command("remove-text")
|
|
2143
|
+
.description("Remove a UI text: from the base and every language, or with --locale only that language's text")
|
|
2144
|
+
.requiredOption("--key <key>", "Dotted key")
|
|
2145
|
+
.option("--locale <code>", "Remove only this language's text")
|
|
2146
|
+
.action((options) => textsCommand((projectConfig, root) => removeText(projectConfig, options, root)));
|
|
2147
|
+
config
|
|
2148
|
+
.command("list-texts")
|
|
2149
|
+
.description("List the project's UI texts: the base texts, each language's, and the keys a language lacks")
|
|
2150
|
+
.action(() => textsCommand((projectConfig, root) => listTexts(projectConfig, root)));
|
|
2122
2151
|
config
|
|
2123
2152
|
.command("remove-component")
|
|
2124
2153
|
.description("Remove a component from the project (deletes files). Identify by --id (preferred) or exact --name.")
|