@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 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: "~4.3.0" },
463
- { name: "@intlify/unplugin-vue-i18n", range: "^11.1" },
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: "inherit"
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 = ["install"];
4765
+ const args = resolveInstallArgs(packageManager);
4710
4766
  changes.install = `${packageManager} ${args.join(" ")}`;
4711
4767
  if (options.dryRun) {
4712
4768
  return;
4713
4769
  }
4714
- execFileSync(packageManager, args, {
4715
- cwd,
4716
- stdio: "inherit"
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.3",
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.3",
58
- "@retailcrm/embed-ui-v1-contexts": "^0.9.22-alpha.3",
59
- "@retailcrm/embed-ui-v1-endpoint": "^0.9.22-alpha.3",
60
- "@retailcrm/embed-ui-v1-types": "^0.9.22-alpha.3",
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.3",
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",