ui: add lightweight frontend build pipeline

This commit is contained in:
a.tolmachev
2026-04-12 02:28:05 +03:00
parent 2848d74929
commit b92350a6ac
22 changed files with 809 additions and 191 deletions
+27 -45
View File
@@ -3,7 +3,7 @@
return typeof t === 'function' ? t(key) : key;
}
var state = {
var defaults = {
currentStep: 1,
wizardProtocol: 'rest',
wizardMode: 'create',
@@ -27,6 +27,22 @@
selectedRpcMethod: null,
};
Object.keys(defaults).forEach(function(key) {
if (typeof window[key] !== 'undefined') {
return;
}
var value = defaults[key];
if (Array.isArray(value)) {
window[key] = value.slice();
return;
}
if (value && typeof value === 'object') {
window[key] = Object.assign({}, value);
return;
}
window[key] = value;
});
function defaultProtocolCapabilities() {
return {
rest: {
@@ -53,28 +69,28 @@
}
function currentProtocolCapabilities() {
var capabilities = state.wizardProtocolCapabilities || defaultProtocolCapabilities();
return capabilities[state.wizardProtocol] || capabilities.rest;
var capabilities = window.wizardProtocolCapabilities || defaultProtocolCapabilities();
return capabilities[window.wizardProtocol] || capabilities.rest;
}
async function loadProtocolCapabilities() {
if (!state.wizardWorkspaceId || !window.CrankApi || typeof window.CrankApi.getProtocolCapabilities !== 'function') {
state.wizardProtocolCapabilities = defaultProtocolCapabilities();
return state.wizardProtocolCapabilities;
if (!window.wizardWorkspaceId || !window.CrankApi || typeof window.CrankApi.getProtocolCapabilities !== 'function') {
window.wizardProtocolCapabilities = defaultProtocolCapabilities();
return window.wizardProtocolCapabilities;
}
try {
var response = await window.CrankApi.getProtocolCapabilities(state.wizardWorkspaceId);
var response = await window.CrankApi.getProtocolCapabilities(window.wizardWorkspaceId);
var mapped = {};
(response.items || []).forEach(function(item) {
mapped[item.protocol] = item;
});
state.wizardProtocolCapabilities = mapped;
window.wizardProtocolCapabilities = mapped;
} catch (_error) {
state.wizardProtocolCapabilities = defaultProtocolCapabilities();
window.wizardProtocolCapabilities = defaultProtocolCapabilities();
}
return state.wizardProtocolCapabilities;
return window.wizardProtocolCapabilities;
}
function step3Labels() {
@@ -88,44 +104,10 @@
}
window.CrankWizardState = {
state: state,
state: window,
defaultProtocolCapabilities: defaultProtocolCapabilities,
currentProtocolCapabilities: currentProtocolCapabilities,
loadProtocolCapabilities: loadProtocolCapabilities,
step3Labels: step3Labels,
};
[
'currentStep',
'wizardProtocol',
'wizardMode',
'wizardEditId',
'wizardWorkspaceId',
'wizardCurrentOperation',
'wizardCurrentVersion',
'wizardProtoUpload',
'wizardDescriptorSetUpload',
'wizardSoapWsdlUpload',
'wizardSoapXsdUpload',
'wizardTestResponsePreview',
'grpcDescriptorServices',
'soapServiceCatalog',
'wizardProtocolCapabilities',
'wizardSecrets',
'wizardAuthProfiles',
'selectedUpstreamId',
'editingUpstreamId',
'protoParsed',
'selectedRpcMethod'
].forEach(function(key) {
Object.defineProperty(window, key, {
configurable: true,
get: function() {
return state[key];
},
set: function(value) {
state[key] = value;
},
});
});
}());
+21 -7
View File
@@ -13,6 +13,27 @@ var _doGoToStep = window.CrankWizardShell.doGoToStep;
var loadWizardPanels = window.CrankWizardShell.loadWizardPanels;
var bindProtocolCards = window.CrankWizardShell.bindProtocolCards;
var step3PanelId = window.CrankWizardShell.step3PanelId;
var currentStep = window.currentStep;
var wizardProtocol = window.wizardProtocol;
var wizardMode = window.wizardMode;
var wizardEditId = window.wizardEditId;
var wizardWorkspaceId = window.wizardWorkspaceId;
var wizardCurrentOperation = window.wizardCurrentOperation;
var wizardCurrentVersion = window.wizardCurrentVersion;
var wizardProtoUpload = window.wizardProtoUpload;
var wizardDescriptorSetUpload = window.wizardDescriptorSetUpload;
var wizardSoapWsdlUpload = window.wizardSoapWsdlUpload;
var wizardSoapXsdUpload = window.wizardSoapXsdUpload;
var wizardTestResponsePreview = window.wizardTestResponsePreview;
var grpcDescriptorServices = window.grpcDescriptorServices;
var soapServiceCatalog = window.soapServiceCatalog;
var wizardProtocolCapabilities = window.wizardProtocolCapabilities;
var wizardSecrets = window.wizardSecrets;
var wizardAuthProfiles = window.wizardAuthProfiles;
var selectedUpstreamId = window.selectedUpstreamId;
var editingUpstreamId = window.editingUpstreamId;
var protoParsed = window.protoParsed;
var selectedRpcMethod = window.selectedRpcMethod;
document.addEventListener('DOMContentLoaded', async function() {
document.querySelector('.btn-continue').addEventListener('click', function() {
@@ -163,11 +184,7 @@ var upstreams = [
{ id: 'grpcb', name: 'grpcb.in', url: 'https://grpcb.in:443', staticHeaders: '{}', authProfileId: null, authProfileName: '', authKind: null }
];
var wizardSecrets = [];
var wizardAuthProfiles = [];
var selectedUpstreamId = null;
var dropdownOpen = false;
var editingUpstreamId = null;
function authProfileById(authProfileId) {
return wizardAuthProfiles.find(function(item) { return item.id === authProfileId; }) || null;
@@ -738,9 +755,6 @@ function selectGrpcSource(source) {
gRPC — Proto file parser & UI
══════════════════════════════════════════════ */
var protoParsed = null; // { package, services, messages, streamingCount }
var selectedRpcMethod = null; // { service, method, request, response }
/* Extract top-level blocks with proper brace matching */
function extractBlocks(text, keyword) {
var blocks = [];