viberadar 0.3.214 → 0.3.215

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.
@@ -1793,6 +1793,7 @@ let loadDurationDraft = '30s';
1793
1793
  let loadDataDirDraft = '';
1794
1794
  let loadResultDirDraft = '';
1795
1795
  let loadAccountsJsonDraft = '';
1796
+ let loadImportedEnvVarsDraft = {};
1796
1797
  let loadView = 'library'; // 'library' | 'editor'
1797
1798
 
1798
1799
  function toggleObsHint(id) {
@@ -7767,6 +7768,8 @@ function applyLoadConfigToFields(cfg) {
7767
7768
  loadDurationDraft = cfg.duration || loadDurationDraft;
7768
7769
  loadDataDirDraft = cfg.dataDir || loadDataDirDraft;
7769
7770
  loadResultDirDraft = cfg.resultDir || loadResultDirDraft;
7771
+ if (cfg.accountsJson) loadAccountsJsonDraft = cfg.accountsJson;
7772
+ if (cfg.accounts) loadAccountsJsonDraft = typeof cfg.accounts === 'string' ? cfg.accounts : JSON.stringify(cfg.accounts, null, 2);
7770
7773
  const baseEl = document.getElementById('loadBaseUrl');
7771
7774
  const vusEl = document.getElementById('loadVus');
7772
7775
  const durEl = document.getElementById('loadDuration');
@@ -7800,6 +7803,71 @@ function normalizeAccountsJson(raw) {
7800
7803
  }
7801
7804
  }
7802
7805
 
7806
+ function normalizeLoadImport(raw, sourceName) {
7807
+ const root = raw && typeof raw === 'object' ? raw : {};
7808
+ const cfg = root.config && typeof root.config === 'object' ? { ...root.config, ...root } : root;
7809
+ const envVars = cfg.envVars && typeof cfg.envVars === 'object' && !Array.isArray(cfg.envVars) ? { ...cfg.envVars } : {};
7810
+ const imported = {
7811
+ scriptName: cfg.scriptName || cfg.name || (sourceName || '').replace(/\.json$/i, '') || '',
7812
+ script: cfg.script || cfg.k6Script || cfg.code || '',
7813
+ baseUrl: cfg.baseUrl || envVars.BASE_URL || '',
7814
+ vus: cfg.vus || cfg.VUs || cfg.users || '',
7815
+ duration: cfg.duration || cfg.testDuration || '',
7816
+ dataDir: cfg.dataDir || cfg.dataPath || '',
7817
+ resultDir: cfg.resultDir || cfg.resultsDir || '',
7818
+ accounts: cfg.accounts || cfg.usersJson || cfg.accountsJson || envVars.TEST_ACCOUNTS_JSON || '',
7819
+ envVars,
7820
+ };
7821
+ delete imported.envVars.BASE_URL;
7822
+ delete imported.envVars.TEST_ACCOUNTS_JSON;
7823
+ delete imported.envVars.TEST_EMAIL;
7824
+ delete imported.envVars.TEST_PASSWORD;
7825
+ return imported;
7826
+ }
7827
+
7828
+ function applyLoadImport(raw, sourceName) {
7829
+ const imported = normalizeLoadImport(raw, sourceName);
7830
+ if (imported.script) loadScriptDraft = String(imported.script);
7831
+ if (imported.scriptName) loadScriptNameDraft = String(imported.scriptName);
7832
+ if (imported.baseUrl) loadBaseUrlDraft = String(imported.baseUrl);
7833
+ if (imported.vus) loadVusDraft = parseInt(String(imported.vus), 10) || loadVusDraft;
7834
+ if (imported.duration) loadDurationDraft = String(imported.duration);
7835
+ if (imported.dataDir) loadDataDirDraft = String(imported.dataDir);
7836
+ if (imported.resultDir) loadResultDirDraft = String(imported.resultDir);
7837
+ if (imported.accounts) {
7838
+ loadAccountsJsonDraft = typeof imported.accounts === 'string'
7839
+ ? imported.accounts
7840
+ : JSON.stringify(imported.accounts, null, 2);
7841
+ }
7842
+ loadImportedEnvVarsDraft = imported.envVars || {};
7843
+ loadView = 'editor';
7844
+ renderContent();
7845
+ }
7846
+
7847
+ function loadImportConfigClick() {
7848
+ const input = document.getElementById('loadConfigImportFile');
7849
+ if (input) {
7850
+ input.value = '';
7851
+ input.click();
7852
+ }
7853
+ }
7854
+
7855
+ function loadImportConfigFile(input) {
7856
+ const file = input && input.files && input.files[0];
7857
+ if (!file) return;
7858
+ const reader = new FileReader();
7859
+ reader.onload = () => {
7860
+ try {
7861
+ const raw = JSON.parse(String(reader.result || '{}'));
7862
+ applyLoadImport(raw, file.name);
7863
+ } catch (e) {
7864
+ alert('Конфиг не импортирован: ' + e.message);
7865
+ }
7866
+ };
7867
+ reader.onerror = () => alert('Не удалось прочитать файл конфига');
7868
+ reader.readAsText(file);
7869
+ }
7870
+
7803
7871
  function renderLoad(c) {
7804
7872
  const isRunning = loadState && loadState.status === 'running';
7805
7873
  const isDone = loadState && (loadState.status === 'done' || loadState.status === 'stopped');
@@ -7853,10 +7921,14 @@ function renderLoad(c) {
7853
7921
  <div class="load-library-header">
7854
7922
  <div>
7855
7923
  <div style="font-size:16px;font-weight:600;color:var(--fg)">Нагрузочные тесты</div>
7856
- <div style="font-size:12px;color:var(--muted);margin-top:2px">${loadK6Version ? escapeHtml(loadK6Version) : ''} · ${loadSavedScripts.length} сохранённых</div>
7857
- </div>
7858
- <button class="load-btn load-btn-run" style="font-size:13px;padding:8px 20px" onclick="loadNewTest()">+ Новый тест</button>
7859
- </div>
7924
+ <div style="font-size:12px;color:var(--muted);margin-top:2px">${loadK6Version ? escapeHtml(loadK6Version) : ''} · ${loadSavedScripts.length} сохранённых</div>
7925
+ </div>
7926
+ <div class="load-btns" style="margin:0">
7927
+ <button class="load-btn" style="font-size:13px;padding:8px 14px" onclick="loadImportConfigClick()">Импорт конфига</button>
7928
+ <button class="load-btn load-btn-run" style="font-size:13px;padding:8px 20px" onclick="loadNewTest()">+ Новый тест</button>
7929
+ </div>
7930
+ </div>
7931
+ <input id="loadConfigImportFile" type="file" accept=".json,application/json" style="display:none" onchange="loadImportConfigFile(this)" />
7860
7932
 
7861
7933
  ${loadSavedScripts.length === 0
7862
7934
  ? `<div class="load-library-empty">
@@ -7905,10 +7977,12 @@ function renderLoad(c) {
7905
7977
 
7906
7978
  c.innerHTML = `<div class="load-screen">
7907
7979
 
7908
- <div class="load-editor-topbar">
7909
- ${!isRunning ? `<button class="load-back-btn" onclick="loadView='library';renderContent()">← Все тесты</button>` : ''}
7910
- <span style="font-size:12px;color:var(--muted);margin-left:4px">${statusBadge}</span>
7911
- </div>
7980
+ <div class="load-editor-topbar">
7981
+ ${!isRunning ? `<button class="load-back-btn" onclick="loadView='library';renderContent()">← Все тесты</button>` : ''}
7982
+ ${!isRunning ? `<button class="load-btn" style="font-size:12px;padding:5px 10px" onclick="loadImportConfigClick()">Импорт конфига</button>` : ''}
7983
+ <input id="loadConfigImportFile" type="file" accept=".json,application/json" style="display:none" onchange="loadImportConfigFile(this)" />
7984
+ <span style="font-size:12px;color:var(--muted);margin-left:4px">${statusBadge}</span>
7985
+ </div>
7912
7986
 
7913
7987
  <div class="load-section">
7914
7988
  <div class="load-section-title">Конфигурация ${loadK6Version ? `<span style="color:var(--dim);font-weight:400">${escapeHtml(loadK6Version)}</span>` : ''}</div>
@@ -8021,18 +8095,20 @@ function renderLoad(c) {
8021
8095
  }
8022
8096
  }
8023
8097
 
8024
- function loadNewTest() {
8025
- loadScriptDraft = '';
8026
- loadScriptNameDraft = '';
8027
- loadView = 'editor';
8028
- renderContent();
8029
- }
8098
+ function loadNewTest() {
8099
+ loadScriptDraft = '';
8100
+ loadScriptNameDraft = '';
8101
+ loadImportedEnvVarsDraft = {};
8102
+ loadView = 'editor';
8103
+ renderContent();
8104
+ }
8030
8105
 
8031
8106
  function loadOpenScript(name) {
8032
8107
  const s = loadSavedScripts.find(x => x.name === name);
8033
8108
  if (!s) return;
8034
8109
  loadScriptDraft = s.script;
8035
8110
  loadScriptNameDraft = s.name;
8111
+ loadImportedEnvVarsDraft = {};
8036
8112
  if (s.baseUrl) loadBaseUrlDraft = s.baseUrl;
8037
8113
  if (s.vus) loadVusDraft = s.vus;
8038
8114
  if (s.duration) loadDurationDraft = s.duration;
@@ -8082,8 +8158,8 @@ async function runLoadTest() {
8082
8158
  loadLogLines = [];
8083
8159
  loadBuckets = [];
8084
8160
 
8085
- try {
8086
- const envVars = {};
8161
+ try {
8162
+ const envVars = { ...(loadImportedEnvVarsDraft || {}) };
8087
8163
  if (accountsInfo.accounts.length > 0) {
8088
8164
  envVars.TEST_ACCOUNTS_JSON = accountsInfo.text;
8089
8165
  envVars.TEST_EMAIL = accountsInfo.accounts[0].email;
@@ -8278,6 +8354,7 @@ async function loadOpenRun(runId) {
8278
8354
  loadLogLines = d.logs || [];
8279
8355
  loadScriptDraft = d.script || '';
8280
8356
  loadScriptNameDraft = d.config?.scriptName || d.scriptName || '';
8357
+ loadImportedEnvVarsDraft = {};
8281
8358
  if (d.config) applyLoadConfigToFields(d.config);
8282
8359
  loadView = 'editor';
8283
8360
  renderContent();
@@ -8321,6 +8398,7 @@ async function loadLoadScript(name) {
8321
8398
  if (!s) return;
8322
8399
  loadScriptDraft = s.script;
8323
8400
  loadScriptNameDraft = s.name;
8401
+ loadImportedEnvVarsDraft = {};
8324
8402
  if (s.baseUrl) loadBaseUrlDraft = s.baseUrl;
8325
8403
  if (s.vus) loadVusDraft = s.vus;
8326
8404
  if (s.duration) loadDurationDraft = s.duration;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viberadar",
3
- "version": "0.3.214",
3
+ "version": "0.3.215",
4
4
  "description": "Live module map with test coverage for vibecoding projects",
5
5
  "main": "./dist/cli.js",
6
6
  "bin": {