chore: update cloudly dependency stack

Align Cloudly with the current typedserver, smartconfig, smartstate, and Docker tooling releases so builds and Docker output stay compatible with the upgraded stack.
This commit is contained in:
2026-05-08 13:56:20 +00:00
parent 80226c8a1c
commit f40ef6b7c0
75 changed files with 4003 additions and 6406 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-backups')
export class CloudlyViewBackups extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
constructor() {
super();
+2 -2
View File
@@ -25,8 +25,8 @@ const sourcePresetArchitectures: Record<TBaseOsImageSourcePreset, string> = {
@customElement('cloudly-view-baseos')
export class CloudlyViewBaseOs extends DeesElement {
@state() private builds: TBaseOsImageBuild[] = [];
@state() private isLoading = false;
@state() private accessor builds: TBaseOsImageBuild[] = [];
@state() private accessor isLoading = false;
private refreshTimer?: number;
+1 -1
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-clusters')
export class CloudlyViewClusters extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
+1 -1
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-dbs')
export class CloudlyViewDbs extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
constructor() {
super();
+1 -2
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-deployments')
export class CloudlyViewDeployments extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
@@ -219,4 +219,3 @@ declare global {
'cloudly-view-deployments': CloudlyViewDeployments;
}
}
+1 -1
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-dns')
export class CloudlyViewDns extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [], dnsEntries: [], domains: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [], dnsEntries: [], domains: [] } as any;
constructor() {
super();
+1 -1
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-domains')
export class CloudlyViewDomains extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [], domains: [], dnsEntries: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [], domains: [], dnsEntries: [] } as any;
constructor() {
super();
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-externalregistries')
export class CloudlyViewExternalRegistries extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [], externalRegistries: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [], externalRegistries: [] } as any;
constructor() {
super();
@@ -115,4 +115,3 @@ export class CloudlyViewExternalRegistries extends DeesElement {
}
declare global { interface HTMLElementTagNameMap { 'cloudly-view-externalregistries': CloudlyViewExternalRegistries; } }
+3 -4
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-images')
export class CloudlyViewImages extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
@@ -86,8 +86,8 @@ export class CloudlyViewImages extends DeesElement {
</dees-form>
`,
menuOptions: [
{ name: 'Cancel', iconName: null, action: async (modalArg: any) => { await modalArg.destroy(); } },
{ name: 'Save', iconName: null, action: async (modalArg: any) => { const data = await modalArg.shadowRoot.querySelector('dees-form').collectFormData(); console.log(data); } },
{ name: 'Cancel', iconName: undefined, action: async (modalArg: any) => { await modalArg.destroy(); } },
{ name: 'Save', iconName: undefined, action: async (modalArg: any) => { const data = await modalArg.shadowRoot.querySelector('dees-form').collectFormData(); console.log(data); } },
],
});
},
@@ -139,4 +139,3 @@ declare global {
'cloudly-view-images': CloudlyViewImages;
}
}
+1 -1
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-logs')
export class CloudlyViewLogs extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
constructor() {
super();
+1 -1
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-mails')
export class CloudlyViewMails extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
constructor() {
super();
+1 -2
View File
@@ -14,7 +14,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-overview')
export class CloudlyViewOverview extends DeesElement {
@state()
private data: appstate.IDataState = {
private accessor data: appstate.IDataState = {
secretGroups: [],
secretBundles: [],
};
@@ -68,4 +68,3 @@ declare global {
'cloudly-view-overview': CloudlyViewOverview;
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-s3')
export class CloudlyViewS3 extends DeesElement {
@state()
private data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
private accessor data: appstate.IDataState = { secretGroups: [], secretBundles: [] } as any;
constructor() {
super();
+2 -3
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-secretbundles')
export class CloudlyViewSecretBundles extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
@@ -39,7 +39,7 @@ export class CloudlyViewSecretBundles extends DeesElement {
const secretGroupIds = itemArg.data.includedSecretGroupIds;
let secretGroupNames: string[] = [];
for (const secretGroupId of secretGroupIds) {
const secretGroup = this.data.secretGroups.find((secretGroupArg: any) => secretGroupArg.id === secretGroupId);
const secretGroup = this.data.secretGroups?.find((secretGroupArg: any) => secretGroupArg.id === secretGroupId);
if (secretGroup) { secretGroupNames.push(secretGroup.data.name); }
}
return secretGroupNames.join(', ');
@@ -73,4 +73,3 @@ export class CloudlyViewSecretBundles extends DeesElement {
}
declare global { interface HTMLElementTagNameMap { 'cloudly-view-secretbundles': CloudlyViewSecretBundles; } }
+4 -5
View File
@@ -8,7 +8,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-secretsgroups')
export class CloudlyViewSecretGroups extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
@@ -31,7 +31,7 @@ export class CloudlyViewSecretGroups extends DeesElement {
priority: secretGroup.data.priority,
tags: html`<dees-chips .selectionMode=${'none'} .selectableChips=${secretGroup.data.tags}></dees-chips>`,
key: secretGroup.data.key,
history: (() => { const allHistory = []; for (const environment in secretGroup.data.environments) { allHistory.push(...secretGroup.data.environments[environment].history); } return allHistory.length; })(),
history: (() => { const allHistory: Array<{ timestamp: string; value: string }> = []; for (const environment in secretGroup.data.environments) { allHistory.push(...secretGroup.data.environments[environment].history); } return allHistory.length; })(),
};
}}
.dataActions=${[
@@ -44,7 +44,7 @@ export class CloudlyViewSecretGroups extends DeesElement {
<dees-table heading1=${'Environments'} heading2=${'keys need to be unique'} key="environments" .data=${[{ environment: 'production', value: '' }, { environment: 'staging', value: '' }]} .dataActions=${[{ name: 'add environment', iconName: 'plus', type: ['footer'], actionFunc: async (dataArg: any) => { dataArg.table.data.push({ environment: 'new environment', value: '' }); dataArg.table.requestUpdate('data'); } }, { name: 'delete environment', iconName: 'trash', type: ['inRow'], actionFunc: async (dataArg: any) => { dataArg.table.data.splice(dataArg.table.data.indexOf(dataArg.item), 1); dataArg.table.requestUpdate('data'); } }] as plugins.deesCatalog.ITableAction[]} .editableFields=${['environment', 'value']}>
</dees-table>
</dees-form>
`, menuOptions: [ { name: 'cancel', action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'save', action: async (modalArg: any) => { const deesForm = modalArg.shadowRoot.querySelector('dees-form'); const formData = await deesForm.collectFormData(); const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = {}; for (const itemArg of formData['environments'] as any[]) { environments[itemArg.environment] = { value: itemArg.value, history: [], lastUpdated: Date.now(), }; } await appstate.dataState.dispatchAction(appstate.createSecretGroupAction, { id: null, data: { name: formData['data.name'] as string, description: formData['data.description'] as string, key: formData['data.key'] as string, environments, tags: [], }, }); await modalArg.destroy(); } } ] });
`, menuOptions: [ { name: 'cancel', action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'save', action: async (modalArg: any) => { const deesForm = modalArg.shadowRoot.querySelector('dees-form'); const formData = await deesForm.collectFormData(); const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = {}; for (const itemArg of formData['environments'] as any[]) { environments[itemArg.environment] = { value: itemArg.value, history: [], lastUpdated: Date.now(), }; } await appstate.dataState.dispatchAction(appstate.createSecretGroupAction, { data: { name: formData['data.name'] as string, description: formData['data.description'] as string, key: formData['data.key'] as string, environments, tags: [], }, }); await modalArg.destroy(); } } ] });
} },
{ name: 'edit', type: ['contextmenu', 'inRow', 'doubleClick'], iconName: 'penToSquare', actionFunc: async (dataArg: plugins.deesCatalog.ITableActionDataArg<plugins.interfaces.data.ISecretGroup>) => {
const environmentsArray: Array<plugins.interfaces.data.ISecretGroup['data']['environments'][any] & { environment: string; }> = [];
@@ -58,7 +58,7 @@ export class CloudlyViewSecretGroups extends DeesElement {
<dees-table .key=${'environments'} .heading1=${'Environments'} .heading2=${'double-click to edit values'} .data=${environmentsArray.map((itemArg) => ({ environment: itemArg.environment, value: itemArg.value, }))} .editableFields=${['environment', 'value']} .dataActions=${[{ name: 'delete', iconName: 'trash', type: ['inRow'], actionFunc: async (actionDataArg: any) => { actionDataArg.table.data.splice(actionDataArg.table.data.indexOf(actionDataArg.item), 1); } }] as plugins.deesCatalog.ITableAction[]}>
</dees-table>
</dees-form>
`, menuOptions: [ { name: 'Cancel', iconName: null, action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'Save', iconName: null, action: async (modalArg: any) => { const data = await modalArg.shadowRoot.querySelector('dees-form').collectFormData(); console.log(data); } } ] });
`, menuOptions: [ { name: 'Cancel', iconName: undefined, action: async (modalArg: any) => { await modalArg.destroy(); } }, { name: 'Save', iconName: undefined, action: async (modalArg: any) => { const data = await modalArg.shadowRoot.querySelector('dees-form').collectFormData(); console.log(data); } } ] });
} },
{ name: 'history', iconName: 'clockRotateLeft', type: ['contextmenu', 'inRow'], actionFunc: async (dataArg: plugins.deesCatalog.ITableActionDataArg<plugins.interfaces.data.ISecretGroup>) => {
const historyArray: Array<{ environment: string; value: string; }> = []; for (const environment of Object.keys(dataArg.item.data.environments)) { for (const historyItem of dataArg.item.data.environments[environment].history) { historyArray.push({ environment, value: historyItem.value, }); } }
@@ -74,4 +74,3 @@ export class CloudlyViewSecretGroups extends DeesElement {
}
declare global { interface HTMLElementTagNameMap { 'cloudly-view-secretsgroups': CloudlyViewSecretGroups; } }
+1 -1
View File
@@ -15,7 +15,7 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-services')
export class CloudlyViewServices extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
constructor() {
super();
+3 -3
View File
@@ -15,13 +15,13 @@ import * as appstate from '../../../appstate.js';
@customElement('cloudly-view-settings')
export class CloudlyViewSettings extends DeesElement {
@state()
private settings: plugins.interfaces.data.ICloudlySettingsMasked = {} as any;
private accessor settings: plugins.interfaces.data.ICloudlySettingsMasked = {} as any;
@state()
private isLoading = false;
private accessor isLoading = false;
@state()
private testResults: {[key: string]: {success: boolean; message: string}} = {};
private accessor testResults: {[key: string]: {success: boolean; message: string}} = {};
constructor() {
super();
+10 -10
View File
@@ -18,29 +18,29 @@ import { formatCronFriendly, formatDate, formatDuration } from './utils.js';
@customElement('cloudly-view-tasks')
export class CloudlyViewTasks extends DeesElement {
@state()
private data: appstate.IDataState = {} as any;
private accessor data: appstate.IDataState = {} as any;
@state()
private selectedExecution: plugins.interfaces.data.ITaskExecution | null = null;
private accessor selectedExecution: plugins.interfaces.data.ITaskExecution | null = null;
@state()
private loading = false;
private accessor loading = false;
@state()
private filterStatus: string = 'all';
private accessor filterStatus: string = 'all';
@state()
private searchQuery: string = '';
private accessor searchQuery: string = '';
@state()
private categoryFilter: string = 'all';
private accessor categoryFilter: string = 'all';
@state()
private autoRefresh: boolean = true;
private accessor autoRefresh: boolean = true;
private _refreshHandle: any = null;
@state()
private canceling: Record<string, boolean> = {};
private accessor canceling: Record<string, boolean> = {};
constructor() {
super();
@@ -143,7 +143,7 @@ export class CloudlyViewTasks extends DeesElement {
});
} catch (error) {
console.error('Failed to trigger task:', error);
plugins.deesCatalog.DeesToast.createAndShow({ message: `Failed to trigger: ${error.message}`, type: 'error' });
plugins.deesCatalog.DeesToast.createAndShow({ message: `Failed to trigger: ${error instanceof Error ? error.message : String(error)}`, type: 'error' });
}
}
@@ -165,7 +165,7 @@ export class CloudlyViewTasks extends DeesElement {
}
} catch (err) {
console.error('Failed to cancel task:', err);
plugins.deesCatalog.DeesToast.createAndShow({ message: `Cancel failed: ${err.message}`, type: 'error' });
plugins.deesCatalog.DeesToast.createAndShow({ message: `Cancel failed: ${err instanceof Error ? err.message : String(err)}`, type: 'error' });
}
}
@@ -3,7 +3,7 @@ import { formatDate, formatDuration } from '../utils.js';
@customElement('cloudly-execution-details')
export class CloudlyExecutionDetails extends DeesElement {
@property({ type: Object }) execution: any;
@property({ type: Object }) accessor execution: any = undefined;
public static styles = [
cssManager.defaultStyles,
@@ -90,4 +90,3 @@ declare global {
'cloudly-execution-details': CloudlyExecutionDetails;
}
}
@@ -3,15 +3,15 @@ import { formatCronFriendly, formatDuration, formatRelativeTime, getCategoryHue,
@customElement('cloudly-task-panel')
export class CloudlyTaskPanel extends DeesElement {
@property({ type: Object }) task: any;
@property({ type: Array }) executions: any[] = [];
@property({ type: Object }) canceling: Record<string, boolean> = {};
@property({ type: Object }) accessor task: any = undefined;
@property({ type: Array }) accessor executions: any[] = [];
@property({ type: Object }) accessor canceling: Record<string, boolean> = {};
// Callbacks provided by parent view
@property({ attribute: false }) onRun?: (taskName: string) => void;
@property({ attribute: false }) onCancel?: (taskName: string) => void;
@property({ attribute: false }) onOpenDetails?: (execution: any) => void;
@property({ attribute: false }) onOpenLogs?: (execution: any) => void;
@property({ attribute: false }) accessor onRun: ((taskName: string) => void) | undefined = undefined;
@property({ attribute: false }) accessor onCancel: ((taskName: string) => void) | undefined = undefined;
@property({ attribute: false }) accessor onOpenDetails: ((execution: any) => void) | undefined = undefined;
@property({ attribute: false }) accessor onOpenLogs: ((execution: any) => void) | undefined = undefined;
public static styles = [
cssManager.defaultStyles,
@@ -203,4 +203,3 @@ declare global {
'cloudly-task-panel': CloudlyTaskPanel;
}
}