@retailcrm/embed-ui 0.9.22-alpha.3 → 0.9.22-alpha.4
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/CHANGELOG.md +7 -0
- package/README.md +1 -0
- package/bin/embed-ui.mjs +101 -12
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## [0.9.22-alpha.4](https://github.com/retailcrm/embed-ui/compare/v0.9.22-alpha.3...v0.9.22-alpha.4) (2026-05-19)
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* Deprecated deep equality dependency removed ([32abfbc](https://github.com/retailcrm/embed-ui/commit/32abfbc540609b4b3e611ca7dd5331d92be56d83))
|
|
9
|
+
* Embed UI init output noise reduced ([d8d8c7b](https://github.com/retailcrm/embed-ui/commit/d8d8c7b99e1e0201fc4a4a8753931c799fdc005a))
|
|
10
|
+
* Release job hang prevented ([17ca586](https://github.com/retailcrm/embed-ui/commit/17ca5861c2227936bf8ea2b24e2670a17a1e7295))
|
|
4
11
|
## [0.9.22-alpha.3](https://github.com/retailcrm/embed-ui/compare/v0.9.22-alpha.2...v0.9.22-alpha.3) (2026-05-18)
|
|
5
12
|
|
|
6
13
|
### Features
|
package/README.md
CHANGED
|
@@ -74,6 +74,7 @@ npx @retailcrm/embed-ui init ./web --cwd ./my-project --package-manager npm
|
|
|
74
74
|
|
|
75
75
|
- `--no-install` — не запускать установку зависимостей после изменения `package.json`.
|
|
76
76
|
- `--interactive` — задать основные параметры через TTY-интерфейс со списками выбора, сохранив флаги как явные ограничения.
|
|
77
|
+
- `--verbose` — вывести подробный список изменений после `init`; без него CLI печатает краткую сводку.
|
|
77
78
|
- `--version 0.9.21` — использовать указанную версию пакетов вместо версии запущенного CLI.
|
|
78
79
|
- `--exact` — записывать точные версии вместо диапазонов.
|
|
79
80
|
- `--packages embed-ui,components,contexts,types,endpoint` — явно выбрать пакеты для установки и настройки.
|
package/bin/embed-ui.mjs
CHANGED
|
@@ -27,6 +27,7 @@ Options:
|
|
|
27
27
|
--cwd <path> Project working directory for init
|
|
28
28
|
--package-manager Package manager for init installs
|
|
29
29
|
--interactive Ask init questions with TTY selection prompts
|
|
30
|
+
--verbose Print detailed init change lists
|
|
30
31
|
--no-install Do not run package manager install in init mode
|
|
31
32
|
--no-configs Do not create root TypeScript, Vite, ESLint and env config files
|
|
32
33
|
--force-deps Replace incompatible existing init dependencies
|
|
@@ -109,7 +110,7 @@ const parseInitArgs = (argv) => {
|
|
|
109
110
|
type: "string",
|
|
110
111
|
default: "order/card:common.after",
|
|
111
112
|
describe: "Starter widget target"
|
|
112
|
-
}).option("dry-run", { type: "boolean", default: false }).option("exact", { type: "boolean", default: false }).option("interactive", { type: "boolean", default: false }).option("install", { type: "boolean", default: true }).option("force", { type: "boolean", default: false }).option("force-deps", { type: "boolean", default: false }).option("fix-sections", { type: "boolean", default: false }).option("force-files", { type: "boolean", default: false }).option("configs", { type: "boolean", default: true }).option("dirs-enabled", { type: "boolean", default: true }).option("template-enabled", { type: "boolean", default: true }).option("agents", { type: "boolean", default: true }).option("force-agents", { type: "boolean", default: false }).option("agents-only", { type: "boolean", default: false }).option("mcp", { type: "boolean", default: true }).option("force-mcp", { type: "boolean", default: false }).option("mcp-client-configs", {
|
|
113
|
+
}).option("dry-run", { type: "boolean", default: false }).option("exact", { type: "boolean", default: false }).option("interactive", { type: "boolean", default: false }).option("verbose", { type: "boolean", default: false }).option("install", { type: "boolean", default: true }).option("force", { type: "boolean", default: false }).option("force-deps", { type: "boolean", default: false }).option("fix-sections", { type: "boolean", default: false }).option("force-files", { type: "boolean", default: false }).option("configs", { type: "boolean", default: true }).option("dirs-enabled", { type: "boolean", default: true }).option("template-enabled", { type: "boolean", default: true }).option("agents", { type: "boolean", default: true }).option("force-agents", { type: "boolean", default: false }).option("agents-only", { type: "boolean", default: false }).option("mcp", { type: "boolean", default: true }).option("force-mcp", { type: "boolean", default: false }).option("mcp-client-configs", {
|
|
113
114
|
type: "string",
|
|
114
115
|
coerce: parsePackageList,
|
|
115
116
|
describe: "Comma-separated MCP client config ids"
|
|
@@ -136,6 +137,7 @@ const parseInitArgs = (argv) => {
|
|
|
136
137
|
with: parsed.with ?? null,
|
|
137
138
|
packageManager: parsed.packageManager ?? null,
|
|
138
139
|
interactive: parsed.interactive,
|
|
140
|
+
verbose: parsed.verbose,
|
|
139
141
|
noInstall: !parsed.install,
|
|
140
142
|
force: parsed.force,
|
|
141
143
|
forceDeps: parsed.forceDeps,
|
|
@@ -455,12 +457,13 @@ const INIT_RUNTIME_DEPENDENCIES = [
|
|
|
455
457
|
{ name: "@remote-ui/rpc", range: "^1.4.7" },
|
|
456
458
|
{ name: "pinia", range: "^2.2" },
|
|
457
459
|
{ name: "vue", range: "^3.5" },
|
|
458
|
-
{ name: "vue-i18n", range: "^11" }
|
|
460
|
+
{ name: "vue-i18n", range: "^11" },
|
|
461
|
+
{ name: "zod", range: "^4.4" }
|
|
459
462
|
];
|
|
460
463
|
const INIT_DEV_DEPENDENCIES = [
|
|
461
464
|
{ name: "@eslint/js", range: "^9.39" },
|
|
462
|
-
{ name: "@intlify/eslint-plugin-vue-i18n", range: "
|
|
463
|
-
{ name: "@intlify/unplugin-vue-i18n", range: "^11.
|
|
465
|
+
{ name: "@intlify/eslint-plugin-vue-i18n", range: "^4.4" },
|
|
466
|
+
{ name: "@intlify/unplugin-vue-i18n", range: "^11.2" },
|
|
464
467
|
{ name: "@omnicajs/eslint-plugin-dependencies", range: "^0.0.2" },
|
|
465
468
|
{ name: "@types/node", range: "^22.19" },
|
|
466
469
|
{ name: "@vitejs/plugin-vue", range: "^6.0" },
|
|
@@ -640,7 +643,7 @@ const resolveDownloadCommand = (packageName, binName, packageManager, args, pack
|
|
|
640
643
|
source: "transient"
|
|
641
644
|
};
|
|
642
645
|
}
|
|
643
|
-
const commandArgs2 = ["-y", "-p", packageSpec, binName, ...args];
|
|
646
|
+
const commandArgs2 = ["-y", "--loglevel=error", "-p", packageSpec, binName, ...args];
|
|
644
647
|
return {
|
|
645
648
|
command: "npx",
|
|
646
649
|
args: commandArgs2,
|
|
@@ -666,7 +669,7 @@ const resolveDownloadCommand = (packageName, binName, packageManager, args, pack
|
|
|
666
669
|
source: "transient"
|
|
667
670
|
};
|
|
668
671
|
}
|
|
669
|
-
const commandArgs = ["exec", "--yes", "--package", packageSpec, "--", binName, ...args];
|
|
672
|
+
const commandArgs = ["exec", "--yes", "--loglevel=error", "--package", packageSpec, "--", binName, ...args];
|
|
670
673
|
return {
|
|
671
674
|
command: "npm",
|
|
672
675
|
args: commandArgs,
|
|
@@ -692,6 +695,15 @@ const resolvePackageHookCommand = (cwd, packageName, binName, packageManager, ar
|
|
|
692
695
|
return resolveDownloadCommand(packageName, binName, packageManager, args, packageVersion, versionResolver);
|
|
693
696
|
};
|
|
694
697
|
const getExecErrorMessage = (error) => {
|
|
698
|
+
if (error && typeof error === "object") {
|
|
699
|
+
const output = [
|
|
700
|
+
"stderr" in error ? error.stderr : null,
|
|
701
|
+
"stdout" in error ? error.stdout : null
|
|
702
|
+
].map((value) => value instanceof Buffer ? value.toString("utf8") : value).filter((value) => typeof value === "string" && value.trim().length > 0).map((value) => value.trim()).join("\n");
|
|
703
|
+
if (output) {
|
|
704
|
+
return output;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
695
707
|
if (error instanceof Error && error.message) {
|
|
696
708
|
return error.message;
|
|
697
709
|
}
|
|
@@ -713,7 +725,7 @@ const runPackageHookCommand = (cwd, packageName, binName, packageManager, args,
|
|
|
713
725
|
try {
|
|
714
726
|
execFileSync(command.command, command.args, {
|
|
715
727
|
cwd,
|
|
716
|
-
stdio: "
|
|
728
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
717
729
|
});
|
|
718
730
|
} catch (error) {
|
|
719
731
|
if (command.source === "transient" && failureMode === "advisory") {
|
|
@@ -2209,6 +2221,10 @@ const printChanges = (changes) => {
|
|
|
2209
2221
|
}
|
|
2210
2222
|
};
|
|
2211
2223
|
const printInitReport = (cwd, sourceRoot, version, packageManager, changes, options) => {
|
|
2224
|
+
if (!options.verbose && !options.dryRun) {
|
|
2225
|
+
printInitSummary(cwd, sourceRoot, version, packageManager, changes);
|
|
2226
|
+
return;
|
|
2227
|
+
}
|
|
2212
2228
|
console.log(`CWD: ${cwd}`);
|
|
2213
2229
|
console.log(`Target: ${sourceRoot}`);
|
|
2214
2230
|
console.log(`Resolved version: ${version}`);
|
|
@@ -2284,6 +2300,42 @@ const printInitReport = (cwd, sourceRoot, version, packageManager, changes, opti
|
|
|
2284
2300
|
console.log("Dry run enabled, no files were modified.");
|
|
2285
2301
|
}
|
|
2286
2302
|
};
|
|
2303
|
+
const printInitSummary = (cwd, sourceRoot, version, packageManager, changes) => {
|
|
2304
|
+
console.log(`Initialized ${cwd}`);
|
|
2305
|
+
console.log(` source root: ${sourceRoot}`);
|
|
2306
|
+
console.log(` version: ${version}`);
|
|
2307
|
+
console.log(` package manager: ${packageManager}`);
|
|
2308
|
+
const summary = [
|
|
2309
|
+
changes.packageJson.length ? `package.json updated (${changes.packageJson.length} change(s))` : null,
|
|
2310
|
+
changes.directories.length ? `directories created: ${changes.directories.length}` : null,
|
|
2311
|
+
changes.files.length ? `files created: ${changes.files.length}` : null,
|
|
2312
|
+
changes.agents.length ? "AGENTS.md updated" : null,
|
|
2313
|
+
changes.mcp.length ? "MCP config updated" : null,
|
|
2314
|
+
changes.hooks.length ? `package hooks ran: ${changes.hooks.length}` : null,
|
|
2315
|
+
changes.install ? `install: ${changes.install}` : null
|
|
2316
|
+
].filter((item) => typeof item === "string");
|
|
2317
|
+
if (summary.length > 0) {
|
|
2318
|
+
console.log("");
|
|
2319
|
+
console.log("changes");
|
|
2320
|
+
for (const item of summary) {
|
|
2321
|
+
console.log(` ${item}`);
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2324
|
+
if (changes.skipped.length > 0) {
|
|
2325
|
+
console.log("");
|
|
2326
|
+
console.log("skipped");
|
|
2327
|
+
for (const skipped of changes.skipped) {
|
|
2328
|
+
console.log(` ${skipped}`);
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
if (changes.warnings.length > 0) {
|
|
2332
|
+
console.log("");
|
|
2333
|
+
console.log("warnings");
|
|
2334
|
+
for (const warning of new Set(changes.warnings)) {
|
|
2335
|
+
console.log(` ${warning}`);
|
|
2336
|
+
}
|
|
2337
|
+
}
|
|
2338
|
+
};
|
|
2287
2339
|
const isUpKey = (key, keybindings = []) => (
|
|
2288
2340
|
// The up key
|
|
2289
2341
|
key.name === "up" || // Vim keybinding: hjkl keys map to left/down/up/right
|
|
@@ -4466,6 +4518,10 @@ const resolvePackageManagerVersion = (packageManager) => {
|
|
|
4466
4518
|
return null;
|
|
4467
4519
|
}
|
|
4468
4520
|
};
|
|
4521
|
+
const resolvePackageManagerMajorVersion = (packageManager) => {
|
|
4522
|
+
const major = resolvePackageManagerVersion(packageManager)?.match(/^\d+/u)?.[0];
|
|
4523
|
+
return major ? Number(major) : null;
|
|
4524
|
+
};
|
|
4469
4525
|
const promptForPackageManager = async () => {
|
|
4470
4526
|
const readline2 = createInterface({
|
|
4471
4527
|
input: process$2.stdin,
|
|
@@ -4706,15 +4762,48 @@ const runInstall = (cwd, packageManager, options, changes, packageJsonChanged) =
|
|
|
4706
4762
|
changes.skipped.push("install skipped because package.json was not changed");
|
|
4707
4763
|
return;
|
|
4708
4764
|
}
|
|
4709
|
-
const args =
|
|
4765
|
+
const args = resolveInstallArgs(packageManager);
|
|
4710
4766
|
changes.install = `${packageManager} ${args.join(" ")}`;
|
|
4711
4767
|
if (options.dryRun) {
|
|
4712
4768
|
return;
|
|
4713
4769
|
}
|
|
4714
|
-
|
|
4715
|
-
|
|
4716
|
-
|
|
4717
|
-
|
|
4770
|
+
try {
|
|
4771
|
+
execFileSync(packageManager, args, {
|
|
4772
|
+
cwd,
|
|
4773
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
4774
|
+
});
|
|
4775
|
+
} catch (error) {
|
|
4776
|
+
printExecErrorOutput(error);
|
|
4777
|
+
throw error;
|
|
4778
|
+
}
|
|
4779
|
+
};
|
|
4780
|
+
const resolveInstallArgs = (packageManager) => {
|
|
4781
|
+
if (packageManager === "yarn" && resolvePackageManagerMajorVersion(packageManager) === 1) {
|
|
4782
|
+
return ["install", "--silent"];
|
|
4783
|
+
}
|
|
4784
|
+
if (packageManager === "npm") {
|
|
4785
|
+
return ["install", "--loglevel=error"];
|
|
4786
|
+
}
|
|
4787
|
+
if (packageManager === "pnpm") {
|
|
4788
|
+
return ["install", "--loglevel=error"];
|
|
4789
|
+
}
|
|
4790
|
+
if (packageManager === "bun") {
|
|
4791
|
+
return ["install", "--silent"];
|
|
4792
|
+
}
|
|
4793
|
+
return ["install"];
|
|
4794
|
+
};
|
|
4795
|
+
const printExecErrorOutput = (error) => {
|
|
4796
|
+
if (!error || typeof error !== "object") {
|
|
4797
|
+
return;
|
|
4798
|
+
}
|
|
4799
|
+
const execError = error;
|
|
4800
|
+
for (const field of ["stdout", "stderr"]) {
|
|
4801
|
+
const value = execError[field];
|
|
4802
|
+
const output = value instanceof Buffer ? value.toString("utf8") : value;
|
|
4803
|
+
if (typeof output === "string" && output.trim().length > 0) {
|
|
4804
|
+
console.error(output.trim());
|
|
4805
|
+
}
|
|
4806
|
+
}
|
|
4718
4807
|
};
|
|
4719
4808
|
const runInit = async (options) => {
|
|
4720
4809
|
const cwd = resolveInitCwd(options);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retailcrm/embed-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.9.22-alpha.
|
|
4
|
+
"version": "0.9.22-alpha.4",
|
|
5
5
|
"description": "API and components for creating RetailCRM UI extensions",
|
|
6
6
|
"repository": "git@github.com:retailcrm/embed-ui.git",
|
|
7
7
|
"author": "RetailDriverLLC <integration@retailcrm.ru>",
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"@omnicajs/symfony-router": "^1.0.0",
|
|
55
55
|
"@omnicajs/vue-remote": "^0.2.23",
|
|
56
56
|
"@remote-ui/rpc": "^1.4.5",
|
|
57
|
-
"@retailcrm/embed-ui-v1-components": "^0.9.22-alpha.
|
|
58
|
-
"@retailcrm/embed-ui-v1-contexts": "^0.9.22-alpha.
|
|
59
|
-
"@retailcrm/embed-ui-v1-endpoint": "^0.9.22-alpha.
|
|
60
|
-
"@retailcrm/embed-ui-v1-types": "^0.9.22-alpha.
|
|
57
|
+
"@retailcrm/embed-ui-v1-components": "^0.9.22-alpha.4",
|
|
58
|
+
"@retailcrm/embed-ui-v1-contexts": "^0.9.22-alpha.4",
|
|
59
|
+
"@retailcrm/embed-ui-v1-endpoint": "^0.9.22-alpha.4",
|
|
60
|
+
"@retailcrm/embed-ui-v1-types": "^0.9.22-alpha.4",
|
|
61
61
|
"yargs": "^17.7.2"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@modulify/git-toolkit": "^0.0.2",
|
|
67
67
|
"@modulify/pkg": "^1.0.1",
|
|
68
68
|
"@omnicajs/eslint-plugin-dependencies": "^0.0.2",
|
|
69
|
-
"@retailcrm/embed-ui-v1-testing": "^0.9.22-alpha.
|
|
69
|
+
"@retailcrm/embed-ui-v1-testing": "^0.9.22-alpha.4",
|
|
70
70
|
"@types/git-semver-tags": "^7.0.0",
|
|
71
71
|
"@types/node": "^22.19.2",
|
|
72
72
|
"@types/semver": "^7.7.1",
|