assets: Run ts-standard

This commit is contained in:
Tom Wiesing 2023-12-02 09:09:28 +01:00
parent ef4ed86bc2
commit 78976d0179
No known key found for this signature in database
27 changed files with 155 additions and 157 deletions

File diff suppressed because one or more lines are too long

View file

@ -12,30 +12,30 @@ const Public = "/⛰/"
// AssetsDefault contains assets for the 'Default' entrypoint.
var AssetsDefault = Assets{
Scripts: `<script type="module" src="/⛰/Default.3fbac1ee.js"></script><script src="/⛰/Default.566ff7d3.js" nomodule defer></script><script type="module" src="/⛰/Default.68829c56.js"></script><script src="/⛰/Default.5dd67eb3.js" nomodule defer></script>`,
Scripts: `<script type="module" src="/⛰/Default.f6deb600.js"></script><script src="/⛰/Default.93529533.js" nomodule defer></script><script type="module" src="/⛰/Default.68829c56.js"></script><script src="/⛰/Default.5dd67eb3.js" nomodule defer></script>`,
Styles: `<link rel="stylesheet" href="/⛰/Default.ed052f6d.css"><link rel="stylesheet" href="/⛰/Default.749670b3.css">`,
}
// AssetsUser contains assets for the 'User' entrypoint.
var AssetsUser = Assets{
Scripts: `<script type="module" src="/⛰/Default.3fbac1ee.js"></script><script src="/⛰/Default.566ff7d3.js" nomodule defer></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script src="/⛰/User.d3b2edc7.js" nomodule defer></script>`,
Scripts: `<script type="module" src="/⛰/Default.f6deb600.js"></script><script src="/⛰/Default.93529533.js" nomodule defer></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script src="/⛰/User.d3b2edc7.js" nomodule defer></script>`,
Styles: `<link rel="stylesheet" href="/⛰/Default.ed052f6d.css"><link rel="stylesheet" href="/⛰/User.72760bc7.css"><link rel="stylesheet" href="/⛰/User.1664d889.css">`,
}
// AssetsAdmin contains assets for the 'Admin' entrypoint.
var AssetsAdmin = Assets{
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Default.3fbac1ee.js"></script><script src="/⛰/Default.566ff7d3.js" nomodule defer></script><script type="module" src="/⛰/Admin.2a36863a.js"></script><script src="/⛰/Admin.f197eb04.js" nomodule defer></script>`,
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Default.f6deb600.js"></script><script src="/⛰/Default.93529533.js" nomodule defer></script><script type="module" src="/⛰/Admin.508b8772.js"></script><script src="/⛰/Admin.d73ed858.js" nomodule defer></script>`,
Styles: `<link rel="stylesheet" href="/⛰/Default.ed052f6d.css"><link rel="stylesheet" href="/⛰/User.1664d889.css"><link rel="stylesheet" href="/⛰/Admin.9235a6f6.css"><link rel="stylesheet" href="/⛰/User.72760bc7.css"><link rel="stylesheet" href="/⛰/Admin.d1020143.css">`,
}
// AssetsAdminProvision contains assets for the 'AdminProvision' entrypoint.
var AssetsAdminProvision = Assets{
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script nomodule defer src="/⛰/Admin.f197eb04.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Admin.2a36863a.js"></script><script type="module" src="/⛰/Default.3fbac1ee.js"></script><script src="/⛰/Default.566ff7d3.js" nomodule defer></script><script type="module" src="/⛰/AdminProvision.994883f5.js"></script><script src="/⛰/AdminProvision.5f2c7fe4.js" nomodule defer></script>`,
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script nomodule defer src="/⛰/Admin.d73ed858.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Admin.508b8772.js"></script><script type="module" src="/⛰/Default.f6deb600.js"></script><script src="/⛰/Default.93529533.js" nomodule defer></script><script type="module" src="/⛰/AdminProvision.994883f5.js"></script><script src="/⛰/AdminProvision.5f2c7fe4.js" nomodule defer></script>`,
Styles: `<link rel="stylesheet" href="/⛰/Default.ed052f6d.css"><link rel="stylesheet" href="/⛰/Admin.d1020143.css"><link rel="stylesheet" href="/⛰/User.72760bc7.css"><link rel="stylesheet" href="/⛰/User.1664d889.css"><link rel="stylesheet" href="/⛰/Admin.9235a6f6.css"><link rel="stylesheet" href="/⛰/AdminProvision.8569d237.css">`,
}
// AssetsAdminRebuild contains assets for the 'AdminRebuild' entrypoint.
var AssetsAdminRebuild = Assets{
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script nomodule defer src="/⛰/Admin.f197eb04.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Admin.2a36863a.js"></script><script type="module" src="/⛰/Default.3fbac1ee.js"></script><script src="/⛰/Default.566ff7d3.js" nomodule defer></script><script type="module" src="/⛰/AdminRebuild.5b253105.js"></script><script src="/⛰/AdminRebuild.bd32e5c4.js" nomodule defer></script>`,
Scripts: `<script nomodule defer src="/⛰/User.d3b2edc7.js"></script><script nomodule defer src="/⛰/Admin.d73ed858.js"></script><script type="module" src="/⛰/User.67ac1e81.js"></script><script type="module" src="/⛰/Admin.508b8772.js"></script><script type="module" src="/⛰/Default.f6deb600.js"></script><script src="/⛰/Default.93529533.js" nomodule defer></script><script type="module" src="/⛰/AdminRebuild.5b253105.js"></script><script src="/⛰/AdminRebuild.bd32e5c4.js" nomodule defer></script>`,
Styles: `<link rel="stylesheet" href="/⛰/Default.ed052f6d.css"><link rel="stylesheet" href="/⛰/Admin.d1020143.css"><link rel="stylesheet" href="/⛰/User.72760bc7.css"><link rel="stylesheet" href="/⛰/User.1664d889.css"><link rel="stylesheet" href="/⛰/Admin.9235a6f6.css"><link rel="stylesheet" href="/⛰/AdminRebuild.e554824e.css">`,
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
const e="onorientationchange"in window?"orientationchange":"resize";document.querySelectorAll(".pure-toggle-menu").forEach(t=>{let n=t.querySelector(".toggle");if(!n){console.warn("'.pure-toggle-menu' without '.toggle'");return}let o=()=>{t.classList.toggle("closed"),n.classList.toggle("x")};n.addEventListener("click",e=>{e.preventDefault(),o()}),window.addEventListener(e,()=>{t.classList.contains("closed")||o()})});
//# sourceMappingURL=Default.3fbac1ee.js.map

View file

@ -1 +0,0 @@
{"mappings":"AEEA,MAAM,EAAuB,wBAAyB,OAAU,oBAAsB,SAEtF,SAAS,gBAAA,CAAiB,qBAAqB,OAAA,CAAQ,AAAC,IACpD,IAAM,EAAS,EAAK,aAAA,CAAc,WAClC,GAAI,CAAC,EAAQ,CACT,QAAQ,IAAA,CAAK,yCACb,MACJ,CAEA,IAAM,EAAa,KACf,EAAK,SAAA,CAAU,MAAA,CAAO,UACtB,EAAO,SAAA,CAAU,MAAA,CAAO,IAC5B,EAEA,EAAO,gBAAA,CAAiB,QAAS,AAAC,IAC9B,EAAE,cAAF,GACA,GACJ,GAEA,OAAO,gBAAA,CAAiB,EAAqB,KACrC,EAAK,SAAA,CAAU,QAAA,CAAS,WAC5B,GACJ,EACJ","sources":["<anon>","src/base/index.ts","src/lib/pure-toggle-menu/index.ts"],"sourcesContent":["\n\n\nconst $c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT = \"onorientationchange\" in window ? \"orientationchange\" : \"resize\";\ndocument.querySelectorAll(\".pure-toggle-menu\").forEach((menu)=>{\n const toggle = menu.querySelector(\".toggle\");\n if (!toggle) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n const toggleMenu = ()=>{\n menu.classList.toggle(\"closed\");\n toggle.classList.toggle(\"x\");\n };\n toggle.addEventListener(\"click\", (e)=>{\n e.preventDefault();\n toggleMenu();\n });\n window.addEventListener($c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT, ()=>{\n if (menu.classList.contains(\"closed\")) return;\n toggleMenu();\n });\n});\n\n\n\n\n\n//# sourceMappingURL=Default.3fbac1ee.js.map\n","import 'purecss/build/pure.css'\nimport 'purecss/build/grids-responsive.css'\n\nimport '~/src/lib/pure-toggle-menu'\nimport './index.css'","import './index.css';\n\nconst WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize';\n\ndocument.querySelectorAll('.pure-toggle-menu').forEach((menu) => {\n const toggle = menu.querySelector('.toggle');\n if (!toggle) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n\n const toggleMenu = () => {\n menu.classList.toggle('closed');\n toggle.classList.toggle('x');\n };\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n toggleMenu();\n });\n\n window.addEventListener(WINDOW_CHANGE_EVENT, () => {\n if (menu.classList.contains('closed')) return;\n toggleMenu();\n });\n});"],"names":["$c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT","window","document","querySelectorAll","forEach","menu","toggle","querySelector","console","warn","toggleMenu","classList","addEventListener","e","preventDefault","contains"],"version":3,"file":"Default.3fbac1ee.js.map","sourceRoot":"../"}

View file

@ -1,2 +0,0 @@
!function(){let e="onorientationchange"in window?"orientationchange":"resize";document.querySelectorAll(".pure-toggle-menu").forEach(t=>{let n=t.querySelector(".toggle");if(!n){console.warn("'.pure-toggle-menu' without '.toggle'");return}let o=()=>{t.classList.toggle("closed"),n.classList.toggle("x")};n.addEventListener("click",e=>{e.preventDefault(),o()}),window.addEventListener(e,()=>{t.classList.contains("closed")||o()})})}();
//# sourceMappingURL=Default.566ff7d3.js.map

View file

@ -1 +0,0 @@
{"mappings":"C,A,WEEA,IAAM,EAAuB,wBAAyB,OAAU,oBAAsB,SAEtF,SAAS,gBAAA,CAAiB,qBAAqB,OAAA,CAAQ,AAAC,IACpD,IAAM,EAAS,EAAK,aAAA,CAAc,WAClC,GAAI,CAAC,EAAQ,CACT,QAAQ,IAAA,CAAK,yCACb,MACJ,CAEA,IAAM,EAAa,KACf,EAAK,SAAA,CAAU,MAAA,CAAO,UACtB,EAAO,SAAA,CAAU,MAAA,CAAO,IAC5B,EAEA,EAAO,gBAAA,CAAiB,QAAS,AAAC,IAC9B,EAAE,cAAF,GACA,GACJ,GAEA,OAAO,gBAAA,CAAiB,EAAqB,KACrC,EAAK,SAAA,CAAU,QAAA,CAAS,WAC5B,GACJ,EACJ,E","sources":["<anon>","src/base/index.ts","src/lib/pure-toggle-menu/index.ts"],"sourcesContent":["(function () {\n\n\n\nconst $20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT = \"onorientationchange\" in window ? \"orientationchange\" : \"resize\";\ndocument.querySelectorAll(\".pure-toggle-menu\").forEach((menu)=>{\n const toggle = menu.querySelector(\".toggle\");\n if (!toggle) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n const toggleMenu = ()=>{\n menu.classList.toggle(\"closed\");\n toggle.classList.toggle(\"x\");\n };\n toggle.addEventListener(\"click\", (e)=>{\n e.preventDefault();\n toggleMenu();\n });\n window.addEventListener($20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT, ()=>{\n if (menu.classList.contains(\"closed\")) return;\n toggleMenu();\n });\n});\n\n\n\n\n})();\n//# sourceMappingURL=Default.566ff7d3.js.map\n","import 'purecss/build/pure.css'\nimport 'purecss/build/grids-responsive.css'\n\nimport '~/src/lib/pure-toggle-menu'\nimport './index.css'","import './index.css';\n\nconst WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize';\n\ndocument.querySelectorAll('.pure-toggle-menu').forEach((menu) => {\n const toggle = menu.querySelector('.toggle');\n if (!toggle) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n\n const toggleMenu = () => {\n menu.classList.toggle('closed');\n toggle.classList.toggle('x');\n };\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n toggleMenu();\n });\n\n window.addEventListener(WINDOW_CHANGE_EVENT, () => {\n if (menu.classList.contains('closed')) return;\n toggleMenu();\n });\n});"],"names":["$20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT","window","document","querySelectorAll","forEach","menu","toggle","querySelector","console","warn","toggleMenu","classList","addEventListener","e","preventDefault","contains"],"version":3,"file":"Default.566ff7d3.js.map","sourceRoot":"../"}

View file

@ -0,0 +1,2 @@
!function(){let e="onorientationchange"in window?"orientationchange":"resize";document.querySelectorAll(".pure-toggle-menu").forEach(t=>{let n=t.querySelector(".toggle");if(null==n){console.warn("'.pure-toggle-menu' without '.toggle'");return}let o=()=>{t.classList.toggle("closed"),n.classList.toggle("x")};n.addEventListener("click",e=>{e.preventDefault(),o()}),window.addEventListener(e,()=>{t.classList.contains("closed")||o()})})}();
//# sourceMappingURL=Default.93529533.js.map

View file

@ -0,0 +1 @@
{"mappings":"C,A,WEEA,IAAM,EAAuB,wBAAyB,OAAU,oBAAsB,SAEtF,SAAS,gBAAA,CAAiB,qBAAqB,OAAA,CAAQ,AAAC,IACtD,IAAM,EAAS,EAAK,aAAA,CAAc,WAClC,GAAI,AAAU,MAAV,EAAgB,CAClB,QAAQ,IAAA,CAAK,yCACb,MACF,CAEA,IAAM,EAAa,KACjB,EAAK,SAAA,CAAU,MAAA,CAAO,UACtB,EAAO,SAAA,CAAU,MAAA,CAAO,IAC1B,EAEA,EAAO,gBAAA,CAAiB,QAAS,AAAC,IAChC,EAAE,cAAF,GACA,GACF,GAEA,OAAO,gBAAA,CAAiB,EAAqB,KACvC,EAAK,SAAA,CAAU,QAAA,CAAS,WAC5B,GACF,EACF,E","sources":["<anon>","src/base/index.ts","src/lib/pure-toggle-menu/index.ts"],"sourcesContent":["(function () {\n\n\n\nconst $20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT = \"onorientationchange\" in window ? \"orientationchange\" : \"resize\";\ndocument.querySelectorAll(\".pure-toggle-menu\").forEach((menu)=>{\n const toggle = menu.querySelector(\".toggle\");\n if (toggle == null) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n const toggleMenu = ()=>{\n menu.classList.toggle(\"closed\");\n toggle.classList.toggle(\"x\");\n };\n toggle.addEventListener(\"click\", (e)=>{\n e.preventDefault();\n toggleMenu();\n });\n window.addEventListener($20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT, ()=>{\n if (menu.classList.contains(\"closed\")) return;\n toggleMenu();\n });\n});\n\n\n\n\n})();\n//# sourceMappingURL=Default.93529533.js.map\n","import 'purecss/build/pure.css'\nimport 'purecss/build/grids-responsive.css'\n\nimport '~/src/lib/pure-toggle-menu'\nimport './index.css'\n","import './index.css'\n\nconst WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize'\n\ndocument.querySelectorAll('.pure-toggle-menu').forEach((menu) => {\n const toggle = menu.querySelector('.toggle')\n if (toggle == null) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\")\n return\n }\n\n const toggleMenu = (): void => {\n menu.classList.toggle('closed')\n toggle.classList.toggle('x')\n }\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault()\n toggleMenu()\n })\n\n window.addEventListener(WINDOW_CHANGE_EVENT, () => {\n if (menu.classList.contains('closed')) return\n toggleMenu()\n })\n})\n"],"names":["$20c5c1843a87be9e$var$WINDOW_CHANGE_EVENT","window","document","querySelectorAll","forEach","menu","toggle","querySelector","console","warn","toggleMenu","classList","addEventListener","e","preventDefault","contains"],"version":3,"file":"Default.93529533.js.map","sourceRoot":"../"}

View file

@ -0,0 +1,2 @@
const e="onorientationchange"in window?"orientationchange":"resize";document.querySelectorAll(".pure-toggle-menu").forEach(t=>{let n=t.querySelector(".toggle");if(null==n){console.warn("'.pure-toggle-menu' without '.toggle'");return}let o=()=>{t.classList.toggle("closed"),n.classList.toggle("x")};n.addEventListener("click",e=>{e.preventDefault(),o()}),window.addEventListener(e,()=>{t.classList.contains("closed")||o()})});
//# sourceMappingURL=Default.f6deb600.js.map

View file

@ -0,0 +1 @@
{"mappings":"AEEA,MAAM,EAAuB,wBAAyB,OAAU,oBAAsB,SAEtF,SAAS,gBAAA,CAAiB,qBAAqB,OAAA,CAAQ,AAAC,IACtD,IAAM,EAAS,EAAK,aAAA,CAAc,WAClC,GAAI,AAAU,MAAV,EAAgB,CAClB,QAAQ,IAAA,CAAK,yCACb,MACF,CAEA,IAAM,EAAa,KACjB,EAAK,SAAA,CAAU,MAAA,CAAO,UACtB,EAAO,SAAA,CAAU,MAAA,CAAO,IAC1B,EAEA,EAAO,gBAAA,CAAiB,QAAS,AAAC,IAChC,EAAE,cAAF,GACA,GACF,GAEA,OAAO,gBAAA,CAAiB,EAAqB,KACvC,EAAK,SAAA,CAAU,QAAA,CAAS,WAC5B,GACF,EACF","sources":["<anon>","src/base/index.ts","src/lib/pure-toggle-menu/index.ts"],"sourcesContent":["\n\n\nconst $c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT = \"onorientationchange\" in window ? \"orientationchange\" : \"resize\";\ndocument.querySelectorAll(\".pure-toggle-menu\").forEach((menu)=>{\n const toggle = menu.querySelector(\".toggle\");\n if (toggle == null) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\");\n return;\n }\n const toggleMenu = ()=>{\n menu.classList.toggle(\"closed\");\n toggle.classList.toggle(\"x\");\n };\n toggle.addEventListener(\"click\", (e)=>{\n e.preventDefault();\n toggleMenu();\n });\n window.addEventListener($c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT, ()=>{\n if (menu.classList.contains(\"closed\")) return;\n toggleMenu();\n });\n});\n\n\n\n\n\n//# sourceMappingURL=Default.f6deb600.js.map\n","import 'purecss/build/pure.css'\nimport 'purecss/build/grids-responsive.css'\n\nimport '~/src/lib/pure-toggle-menu'\nimport './index.css'\n","import './index.css'\n\nconst WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize'\n\ndocument.querySelectorAll('.pure-toggle-menu').forEach((menu) => {\n const toggle = menu.querySelector('.toggle')\n if (toggle == null) {\n console.warn(\"'.pure-toggle-menu' without '.toggle'\")\n return\n }\n\n const toggleMenu = (): void => {\n menu.classList.toggle('closed')\n toggle.classList.toggle('x')\n }\n\n toggle.addEventListener('click', (e) => {\n e.preventDefault()\n toggleMenu()\n })\n\n window.addEventListener(WINDOW_CHANGE_EVENT, () => {\n if (menu.classList.contains('closed')) return\n toggleMenu()\n })\n})\n"],"names":["$c9fa5a8be4dbc78e$var$WINDOW_CHANGE_EVENT","window","document","querySelectorAll","forEach","menu","toggle","querySelector","console","warn","toggleMenu","classList","addEventListener","e","preventDefault","contains"],"version":3,"file":"Default.f6deb600.js.map","sourceRoot":"../"}

View file

@ -14,8 +14,8 @@ const iipserver = document.getElementById('iipserver') as HTMLInputElement
system.addEventListener('submit', (evt) => {
evt.preventDefault()
const flavorElement = document.querySelector('input[name="flavor"]:checked');
const flavor = (flavorElement instanceof HTMLInputElement) ? flavorElement.value : "";
const flavorElement = document.querySelector('input[name="flavor"]:checked')
const flavor = (flavorElement instanceof HTMLInputElement) ? flavorElement.value : ''
Provision({
Slug: slug.value,

View file

@ -1,86 +1,85 @@
/** @file provides a list of websocket calls supported by the backend */
import type { CallSpec } from ".";
import type { CallSpec } from '.'
/** Backup backups everything */
export function Backup(): CallSpec {
export function Backup (): CallSpec {
return {
'call': 'backup',
'params': [],
call: 'backup',
params: []
}
}
type ProvisionParams = {
Slug: string;
Flavor?: "Drupal 10" | "Drupal 9",
IIPServer?: string,
interface ProvisionParams {
Slug: string
Flavor?: 'Drupal 10' | 'Drupal 9'
IIPServer?: string
System: SystemParams
}
type SystemParams = {
PHP: "Default (8.1)" | "8.0" | "8.1" | "8.2",
OpCacheDevelopment: boolean,
ContentSecurityPolicy: string,
interface SystemParams {
PHP: 'Default (8.1)' | '8.0' | '8.1' | '8.2'
OpCacheDevelopment: boolean
ContentSecurityPolicy: string
}
/** Provision provisions a new instance */
export function Provision(params: ProvisionParams): CallSpec {
export function Provision (params: ProvisionParams): CallSpec {
return {
'call': 'provision',
'params': [
call: 'provision',
params: [
JSON.stringify(params)
],
]
}
}
/** Snapshot makes a snapshot of an instance */
export function Snapshot(Slug: string): CallSpec {
export function Snapshot (Slug: string): CallSpec {
return {
'call': 'snapshot',
'params': [Slug],
call: 'snapshot',
params: [Slug]
}
}
/** Rebuild rebuilds an instance */
export function Rebuild(Slug: string, params: SystemParams): CallSpec {
export function Rebuild (Slug: string, params: SystemParams): CallSpec {
return {
'call': 'rebuild',
'params': [
call: 'rebuild',
params: [
Slug,
JSON.stringify(params)
],
]
}
}
/** Update updates a specific instance */
export function Update(Slug: string): CallSpec {
export function Update (Slug: string): CallSpec {
return {
'call': 'update',
'params': [Slug],
call: 'update',
params: [Slug]
}
}
/** Start starts a specific instance */
export function Start(Slug: string): CallSpec {
export function Start (Slug: string): CallSpec {
return {
'call': 'start',
'params': [Slug],
call: 'start',
params: [Slug]
}
}
/** Stop stops a specific instance */
export function Stop(Slug: string): CallSpec {
export function Stop (Slug: string): CallSpec {
return {
'call': 'stop',
'params': [Slug],
call: 'stop',
params: [Slug]
}
}
/** Purge purges a specific instance */
export function Purge(Slug: string): CallSpec {
export function Purge (Slug: string): CallSpec {
return {
'call': 'purge',
'params': [Slug],
call: 'purge',
params: [Slug]
}
}

View file

@ -1,16 +1,15 @@
/** @file implements the websocket protocol used by the distillery */
import { default as WebSocket } from "isomorphic-ws"
import { Buffer } from "buffer";
import WebSocket from 'isomorphic-ws'
import { Buffer } from 'buffer'
/** Call represents a specific WebSocket call */
export default class Call {
constructor(remote: Remote, spec: CallSpec) {
constructor (remote: Remote, spec: CallSpec) {
this.remote = remote
this.call = spec
}
public readonly remote: Readonly<Remote>
public readonly call: Readonly<CallSpec>
@ -36,7 +35,7 @@ export default class Call {
* Connect to the specified remote endpoint and perform the action
* @param remote Remote to connect to
*/
connect(): Promise<Result> {
async connect (): Promise<Result> {
// ensure that connect is only run once.
if (this.connected) {
throw new Error('connect() may only be called once')
@ -44,18 +43,17 @@ export default class Call {
this.connected = true
// and do the connection!
return new Promise((resolve, reject) => {
return await new Promise((resolve, reject) => {
// create the websocket
const ws = new WebSocket(this.remote.url, this.remote.token ? { 'headers': { 'Authorization': 'Bearer ' + this.remote.token } } : undefined)
const ws = new WebSocket(this.remote.url, typeof this.remote.token === 'string' ? { headers: { Authorization: 'Bearer ' + this.remote.token } } : undefined)
this.ws = ws // make it available to other things
// result is a promise, because some APIs in the browser are async
let result = Promise.resolve(JSON.stringify({'success': false, 'message': 'Unknown error'}))
let result = Promise.resolve(JSON.stringify({ success: false, message: 'Unknown error' }))
ws.onopen = () => {
if (this.beforeCall) {
this.beforeCall.call(this)
if (this.beforeCall != null) {
this.beforeCall()
}
ws.send(Buffer.from(JSON.stringify(this.call), 'utf8'))
}
@ -63,8 +61,8 @@ export default class Call {
ws.onmessage = ({ data }) => {
// if this is a string it is a log line
if (typeof data === 'string') {
if (this.onLogLine) {
this.onLogLine.call(this, data)
if (this.onLogLine != null) {
this.onLogLine(data)
}
return
}
@ -82,8 +80,8 @@ export default class Call {
this.close()
// call the handler and reject
if (this.onError) {
this.onError.call(this, err)
if (this.onError != null) {
this.onError(err)
}
reject(err)
}
@ -95,17 +93,18 @@ export default class Call {
result
.then(t => JSON.parse(t))
.then((res) => {
if (this.afterCall) {
this.afterCall.call(this, res)
if (this.afterCall != null) {
this.afterCall(res)
}
resolve(res)
})
.catch((e) => console.error(e))
}
})
}
/** sendText sends some text to the server requests cancellation of an ongoing operation */
sendText(text: string) {
sendText (text: string): void {
const ws = this.ws
if (ws == null) {
throw new Error('websocket not connected')
@ -115,24 +114,24 @@ export default class Call {
}
/** cancel requests cancellation of an ongoing operation */
cancel() {
cancel (): void {
const ws = this.ws
if (ws == null) {
throw new Error('websocket not connected')
}
ws.send(Buffer.from(JSON.stringify({ signal: 'cancel'}), 'utf8'))
ws.send(Buffer.from(JSON.stringify({ signal: 'cancel' }), 'utf8'))
}
/** close closes this websocket connection */
private close() {
private close (): void {
const ws = this.ws
if (ws == null) {
throw new Error('websocket not connected')
}
ws.close()
this.ws = null;
this.ws = null
}
}
@ -142,7 +141,7 @@ export interface Remote {
token?: string // optional token
}
/** CallSpec represents the specification for a call*/
/** CallSpec represents the specification for a call */
export interface CallSpec {
call: string
params: string[]
@ -150,6 +149,6 @@ export interface CallSpec {
/** the result of a websocket call */
export interface Result {
success: boolean,
message: string,
success: boolean
message: string
}

View file

@ -1,26 +1,26 @@
import './index.css';
import './index.css'
const WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize';
const WINDOW_CHANGE_EVENT = ('onorientationchange' in window) ? 'orientationchange' : 'resize'
document.querySelectorAll('.pure-toggle-menu').forEach((menu) => {
const toggle = menu.querySelector('.toggle');
if (!toggle) {
console.warn("'.pure-toggle-menu' without '.toggle'");
return;
const toggle = menu.querySelector('.toggle')
if (toggle == null) {
console.warn("'.pure-toggle-menu' without '.toggle'")
return
}
const toggleMenu = () => {
menu.classList.toggle('closed');
toggle.classList.toggle('x');
};
const toggleMenu = (): void => {
menu.classList.toggle('closed')
toggle.classList.toggle('x')
}
toggle.addEventListener('click', (e) => {
e.preventDefault();
toggleMenu();
});
e.preventDefault()
toggleMenu()
})
window.addEventListener(WINDOW_CHANGE_EVENT, () => {
if (menu.classList.contains('closed')) return;
toggleMenu();
});
});
if (menu.classList.contains('closed')) return
toggleMenu()
})
})

View file

@ -219,9 +219,9 @@ export function createModal (action: string, params: string[], opts: Partial<Mod
const call = new LocalCall({
call: action,
params
});
})
call.beforeCall = function() {
call.beforeCall = function () {
cancelButton.removeAttribute('disabled')
cancelButton.addEventListener('click', (event) => {
event.preventDefault()
@ -231,9 +231,9 @@ export function createModal (action: string, params: string[], opts: Partial<Mod
})
print(' Connected.\n', true)
}
call.onLogLine = print;
call.onLogLine = print
call.connect()
.then((result) => close(result))
.catch(() => close({ success: false, message: 'connection closed unexpectedly' }));
.catch(() => close({ success: false, message: 'connection closed unexpectedly' }))
}

View file

@ -1,8 +1,8 @@
import { default as Call, CallSpec } from '../apiclient/websocket';
import Call, { CallSpec } from '../apiclient/websocket'
/** LocalCall is like Call, but uses the current page */
export default class LocalCall extends Call {
constructor(spec: CallSpec) {
super({ url: location.protocol.replace('http', 'ws') + '//' + location.host + '/api/v1/ws'}, spec);
constructor (spec: CallSpec) {
super({ url: location.protocol.replace('http', 'ws') + '//' + location.host + '/api/v1/ws' }, spec)
}
}