meow
All checks were successful
Code quality checks / build (23) (push) Successful in 34s
Push code / build (push) Successful in 1m20s

This commit is contained in:
Lara 2024-11-02 20:29:00 +02:00
parent b52ac3409b
commit 4c8f925d94
Signed by: laratheprotogen
GPG key ID: 5C0296EB3165F98B
11 changed files with 644 additions and 44 deletions

314
pnpm-lock.yaml generated
View file

@ -416,16 +416,16 @@ importers:
version: 1.48.2 version: 1.48.2
'@sveltejs/adapter-auto': '@sveltejs/adapter-auto':
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.3.1(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))) version: 3.3.1(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))
'@sveltejs/adapter-node': '@sveltejs/adapter-node':
specifier: ^5.2.9 specifier: ^5.2.9
version: 5.2.9(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))) version: 5.2.9(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))
'@sveltejs/kit': '@sveltejs/kit':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) version: 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
'@sveltejs/vite-plugin-svelte': '@sveltejs/vite-plugin-svelte':
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) version: 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
'@types/eslint': '@types/eslint':
specifier: ^9.6.0 specifier: ^9.6.0
version: 9.6.1 version: 9.6.1
@ -450,6 +450,9 @@ importers:
prettier-plugin-svelte: prettier-plugin-svelte:
specifier: ^3.2.6 specifier: ^3.2.6
version: 3.2.7(prettier@3.3.3)(svelte@5.1.9) version: 3.2.7(prettier@3.3.3)(svelte@5.1.9)
sass-embedded:
specifier: ^1.80.6
version: 1.80.6
svelte: svelte:
specifier: ^5.0.0 specifier: ^5.0.0
version: 5.1.9 version: 5.1.9
@ -467,10 +470,10 @@ importers:
version: 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) version: 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)
vite: vite:
specifier: ^5.0.3 specifier: ^5.0.3
version: 5.4.10(@types/node@22.8.6)(terser@5.36.0) version: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
vitest: vitest:
specifier: ^2.0.4 specifier: ^2.0.4
version: 2.1.4(@types/node@22.8.6)(terser@5.36.0) version: 2.1.4(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
shared: shared:
devDependencies: devDependencies:
@ -1016,6 +1019,9 @@ packages:
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@bufbuild/protobuf@2.2.2':
resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==}
'@clinic/bubbleprof@10.0.0': '@clinic/bubbleprof@10.0.0':
resolution: {integrity: sha512-7Y0uYO4cz7+Y1advV891uMJLXbZMIriLsV1IHSSVJxmf8tEFm8vogKi/GdYyi4CY0D5heuqOFze/WNrv+U3LRw==} resolution: {integrity: sha512-7Y0uYO4cz7+Y1advV891uMJLXbZMIriLsV1IHSSVJxmf8tEFm8vogKi/GdYyi4CY0D5heuqOFze/WNrv+U3LRw==}
@ -2574,6 +2580,9 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true hasBin: true
buffer-builder@0.2.0:
resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
buffer-equal@0.0.1: buffer-equal@0.0.1:
resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==} resolution: {integrity: sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
@ -2856,6 +2865,9 @@ packages:
colorette@2.0.20: colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
combine-source-map@0.8.0: combine-source-map@0.8.0:
resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==}
@ -4583,6 +4595,9 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
immutable@4.3.7:
resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
import-fresh@2.0.0: import-fresh@2.0.0:
resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -6877,6 +6892,9 @@ packages:
resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
engines: {npm: '>=2.0.0'} engines: {npm: '>=2.0.0'}
rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
sade@1.8.1: sade@1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -6908,6 +6926,131 @@ packages:
safer-buffer@2.1.2: safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
sass-embedded-android-arm64@1.80.6:
resolution: {integrity: sha512-4rC4ZGM/k4ENVjLXnK3JTst8e8FI9MHSol2Fl7dCdYyJ3KLnlt4qL4AEYfU8zq1tcBb7CBOSZVR+CzCKubnXdg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [android]
sass-embedded-android-arm@1.80.6:
resolution: {integrity: sha512-UeUKMTRsnz4/dh7IzvhjONxa4/jmVp539CHDd8VZOsqg9M3HcNJNIkUzQWbuwZ+nSlWrTuo7Tvn3XlypopCBzw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [android]
sass-embedded-android-ia32@1.80.6:
resolution: {integrity: sha512-Lxz2SXE2KdHnynuHF+D6flDvrd55/zaEAWUeka9MxEr6FmR66d8UBOIy5ETwCSUd//S/SE5Jl6oTnHppgD1zNA==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [android]
sass-embedded-android-riscv64@1.80.6:
resolution: {integrity: sha512-hKdxY/oOqB+JJhSoBTDM5DJO1j/xtxQgayh2cLCCUx37IQQe3SEdc3V2JFf/4mIo5peaS4cjqwwSATF+l2zaXg==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [android]
sass-embedded-android-x64@1.80.6:
resolution: {integrity: sha512-Eap2Fi3kTx/rVLBsOnOp5RYPr5+lFjTZ652zR24dmYFe9/sDgasakJIOPjOvD2bRuL9z0uWEY1AXVeeOPeZKrg==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [android]
sass-embedded-darwin-arm64@1.80.6:
resolution: {integrity: sha512-0mnAx8Vq6Gxj3PQt3imgITfK33hhqrSKpyHSuab71gZZni5opsdtoggq2JawW+1taRFTEZwbZJLKZ0MBDbwCCA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [darwin]
sass-embedded-darwin-x64@1.80.6:
resolution: {integrity: sha512-Ib20yNZFOrJ7YVT+ltoe+JQNKPcRclM3iLAK69XZZYcSeFM/72SCoQBAaVGIpT23dxDp7FXiE4lO602c3xTRwQ==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
sass-embedded-linux-arm64@1.80.6:
resolution: {integrity: sha512-n5r98pBXawrQQKaxIYCMM1zDpnngsqxTkOrmvsYLFiAMCSbR0lWf/7sBB33k/Pm0D6dsbp3jpHilCoQNKI3jIw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-arm@1.80.6:
resolution: {integrity: sha512-QR0Q6TZox/ThuU2r9c0s3fKCgU2rXAEocpitdgxFp6tta+GsQlMFV3oON2unAa8Bwnuxkmf0YOaK0Oy/TwzkXw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-ia32@1.80.6:
resolution: {integrity: sha512-O6dWZdcOkryRdDCxVMGOeVowgblpDgVcAuRtZ1F1X7XfbpDriTQm64D+9vVZIrywYSPoJfQMJJ662cr0wUs9IQ==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [linux]
sass-embedded-linux-musl-arm64@1.80.6:
resolution: {integrity: sha512-VeUSHUi3MAsvOlg9QI4X/2j04h1659aE+7qKP/282CYBTrGkjFGSXZhIki9WKWDgIpDiSInRYXfQQRWhPhjCDg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-musl-arm@1.80.6:
resolution: {integrity: sha512-X9FC8s8fvQGRiXc+eATlZ57N44Iq3nNa0M0ugi3ysdJwkaNYvOeS4QzBHKQAaw3QiTqdxTnLUHHVBkyzdCi9pw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-musl-ia32@1.80.6:
resolution: {integrity: sha512-GqitS2Nab8ah0+wfCqaxW1hnI1piC08FimL6+lM9YWK5DbCOOF82IapbvJOy0feUmd/wNnHmyNTgE9h0zVMFdQ==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [linux]
sass-embedded-linux-musl-riscv64@1.80.6:
resolution: {integrity: sha512-ySs15z7QSRRQK/aByEEqaJLYW/sTpfynefNPZCtsVNVEzNRwy+DRpxNChtxo+QjKq97ocXETbdG5KLik7QOTJg==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-musl-x64@1.80.6:
resolution: {integrity: sha512-DzeNqU/SN0mWFznoOH4RtVGcrg3Eoa41pUQhKMtrhNbCmIE1zNDunUiAEVTNpdHJF4nxf7ELUPXWmStM31CbUQ==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-linux-riscv64@1.80.6:
resolution: {integrity: sha512-AyoHJ3icV9xuJjq1YzJqpEj2XfiC/KBkVYTUrCELKiXP0DN1gi/BpUwZNCAgCM3CyEdMef4LQM/ztCYJxYzdyg==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-x64@1.80.6:
resolution: {integrity: sha512-EohsE9CEqx0ycylnsEj/0DNPG99Tb0qAVZspiAs5xHFCJjXOFfp3cRQu0BRf+lZ1b72IhPFXymzVtojvzUHb7g==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-win32-arm64@1.80.6:
resolution: {integrity: sha512-29wETQi1ykeVvpd4zMVokpQKFSOZskGJzZawuuNCdo7BHjHKIRDsqbz8YT1CewHPBshI0hfD21fenmjxYjGXPQ==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
sass-embedded-win32-ia32@1.80.6:
resolution: {integrity: sha512-1s3OpK2iTIfIL/a91QhAQnffsbuWfnsM8Lx4Fxt0f7ErnxjCV6q8MUFTV/UhcLtLyTFnPCA62DLjp2KGCjMI9A==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [win32]
sass-embedded-win32-x64@1.80.6:
resolution: {integrity: sha512-0pH4Zr9silHkcmLPC0ghnD3DI0vMsjA7dKvGR32/RbbjOSvHV5cDQRLiuVJAPp34dfMA7kJd1ysSchRdH0igAQ==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
sass-embedded@1.80.6:
resolution: {integrity: sha512-Og4aqBnaA3oJfIpHaLuNATAqzBRgUJDYJy2X15V59cot2wYOtiT/ciPnyuq1o7vpDEeOkHhEd+mSviSlXoETug==}
engines: {node: '>=16.0.0'}
hasBin: true
sax@1.2.4: sax@1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
@ -7904,6 +8047,9 @@ packages:
varint@5.0.2: varint@5.0.2:
resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==}
varint@6.0.0:
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
vary@1.1.2: vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@ -9018,6 +9164,8 @@ snapshots:
'@babel/helper-string-parser': 7.25.9 '@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9 '@babel/helper-validator-identifier': 7.25.9
'@bufbuild/protobuf@2.2.2': {}
'@clinic/bubbleprof@10.0.0': '@clinic/bubbleprof@10.0.0':
dependencies: dependencies:
'@clinic/clinic-common': 7.1.0 '@clinic/clinic-common': 7.1.0
@ -9724,22 +9872,22 @@ snapshots:
'@sqltools/formatter@1.2.5': {} '@sqltools/formatter@1.2.5': {}
'@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))': '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))':
dependencies: dependencies:
'@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
import-meta-resolve: 4.1.0 import-meta-resolve: 4.1.0
'@sveltejs/adapter-node@5.2.9(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))': '@sveltejs/adapter-node@5.2.9(@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))':
dependencies: dependencies:
'@rollup/plugin-commonjs': 28.0.1(rollup@4.24.3) '@rollup/plugin-commonjs': 28.0.1(rollup@4.24.3)
'@rollup/plugin-json': 6.1.0(rollup@4.24.3) '@rollup/plugin-json': 6.1.0(rollup@4.24.3)
'@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.3) '@rollup/plugin-node-resolve': 15.3.0(rollup@4.24.3)
'@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@sveltejs/kit': 2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
rollup: 4.24.3 rollup: 4.24.3
'@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))': '@sveltejs/kit@2.7.4(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))':
dependencies: dependencies:
'@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
'@types/cookie': 0.6.0 '@types/cookie': 0.6.0
cookie: 0.6.0 cookie: 0.6.0
devalue: 5.1.1 devalue: 5.1.1
@ -9753,27 +9901,27 @@ snapshots:
sirv: 3.0.0 sirv: 3.0.0
svelte: 5.1.9 svelte: 5.1.9
tiny-glob: 0.2.9 tiny-glob: 0.2.9
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
'@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))': '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))':
dependencies: dependencies:
'@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@sveltejs/vite-plugin-svelte': 4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
debug: 4.3.7 debug: 4.3.7
svelte: 5.1.9 svelte: 5.1.9
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))': '@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))':
dependencies: dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)))(svelte@5.1.9)(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
debug: 4.3.7 debug: 4.3.7
deepmerge: 4.3.1 deepmerge: 4.3.1
kleur: 4.1.5 kleur: 4.1.5
magic-string: 0.30.12 magic-string: 0.30.12
svelte: 5.1.9 svelte: 5.1.9
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
vitefu: 1.0.3(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) vitefu: 1.0.3(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -10101,13 +10249,13 @@ snapshots:
chai: 5.1.2 chai: 5.1.2
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
'@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0))': '@vitest/mocker@2.1.4(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))':
dependencies: dependencies:
'@vitest/spy': 2.1.4 '@vitest/spy': 2.1.4
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.12 magic-string: 0.30.12
optionalDependencies: optionalDependencies:
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
'@vitest/pretty-format@2.1.4': '@vitest/pretty-format@2.1.4':
dependencies: dependencies:
@ -10876,6 +11024,8 @@ snapshots:
node-releases: 2.0.18 node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2) update-browserslist-db: 1.1.1(browserslist@4.24.2)
buffer-builder@0.2.0: {}
buffer-equal@0.0.1: {} buffer-equal@0.0.1: {}
buffer-from@1.1.2: {} buffer-from@1.1.2: {}
@ -11193,6 +11343,8 @@ snapshots:
colorette@2.0.20: {} colorette@2.0.20: {}
colorjs.io@0.5.2: {}
combine-source-map@0.8.0: combine-source-map@0.8.0:
dependencies: dependencies:
convert-source-map: 1.1.3 convert-source-map: 1.1.3
@ -13062,6 +13214,8 @@ snapshots:
ignore@5.3.2: {} ignore@5.3.2: {}
immutable@4.3.7: {}
import-fresh@2.0.0: import-fresh@2.0.0:
dependencies: dependencies:
caller-path: 2.0.0 caller-path: 2.0.0
@ -15432,6 +15586,10 @@ snapshots:
dependencies: dependencies:
tslib: 1.14.1 tslib: 1.14.1
rxjs@7.8.1:
dependencies:
tslib: 2.8.1
sade@1.8.1: sade@1.8.1:
dependencies: dependencies:
mri: 1.2.0 mri: 1.2.0
@ -15465,6 +15623,97 @@ snapshots:
safer-buffer@2.1.2: {} safer-buffer@2.1.2: {}
sass-embedded-android-arm64@1.80.6:
optional: true
sass-embedded-android-arm@1.80.6:
optional: true
sass-embedded-android-ia32@1.80.6:
optional: true
sass-embedded-android-riscv64@1.80.6:
optional: true
sass-embedded-android-x64@1.80.6:
optional: true
sass-embedded-darwin-arm64@1.80.6:
optional: true
sass-embedded-darwin-x64@1.80.6:
optional: true
sass-embedded-linux-arm64@1.80.6:
optional: true
sass-embedded-linux-arm@1.80.6:
optional: true
sass-embedded-linux-ia32@1.80.6:
optional: true
sass-embedded-linux-musl-arm64@1.80.6:
optional: true
sass-embedded-linux-musl-arm@1.80.6:
optional: true
sass-embedded-linux-musl-ia32@1.80.6:
optional: true
sass-embedded-linux-musl-riscv64@1.80.6:
optional: true
sass-embedded-linux-musl-x64@1.80.6:
optional: true
sass-embedded-linux-riscv64@1.80.6:
optional: true
sass-embedded-linux-x64@1.80.6:
optional: true
sass-embedded-win32-arm64@1.80.6:
optional: true
sass-embedded-win32-ia32@1.80.6:
optional: true
sass-embedded-win32-x64@1.80.6:
optional: true
sass-embedded@1.80.6:
dependencies:
'@bufbuild/protobuf': 2.2.2
buffer-builder: 0.2.0
colorjs.io: 0.5.2
immutable: 4.3.7
rxjs: 7.8.1
supports-color: 8.1.1
varint: 6.0.0
optionalDependencies:
sass-embedded-android-arm: 1.80.6
sass-embedded-android-arm64: 1.80.6
sass-embedded-android-ia32: 1.80.6
sass-embedded-android-riscv64: 1.80.6
sass-embedded-android-x64: 1.80.6
sass-embedded-darwin-arm64: 1.80.6
sass-embedded-darwin-x64: 1.80.6
sass-embedded-linux-arm: 1.80.6
sass-embedded-linux-arm64: 1.80.6
sass-embedded-linux-ia32: 1.80.6
sass-embedded-linux-musl-arm: 1.80.6
sass-embedded-linux-musl-arm64: 1.80.6
sass-embedded-linux-musl-ia32: 1.80.6
sass-embedded-linux-musl-riscv64: 1.80.6
sass-embedded-linux-musl-x64: 1.80.6
sass-embedded-linux-riscv64: 1.80.6
sass-embedded-linux-x64: 1.80.6
sass-embedded-win32-arm64: 1.80.6
sass-embedded-win32-ia32: 1.80.6
sass-embedded-win32-x64: 1.80.6
sax@1.2.4: {} sax@1.2.4: {}
schema-utils@3.3.0: schema-utils@3.3.0:
@ -16618,6 +16867,8 @@ snapshots:
varint@5.0.2: {} varint@5.0.2: {}
varint@6.0.0: {}
vary@1.1.2: {} vary@1.1.2: {}
vendors@1.0.4: {} vendors@1.0.4: {}
@ -16628,12 +16879,12 @@ snapshots:
core-util-is: 1.0.2 core-util-is: 1.0.2
extsprintf: 1.3.0 extsprintf: 1.3.0
vite-node@2.1.4(@types/node@22.8.6)(terser@5.36.0): vite-node@2.1.4(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.3.7 debug: 4.3.7
pathe: 1.1.2 pathe: 1.1.2
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -16645,7 +16896,7 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite@5.4.10(@types/node@22.8.6)(terser@5.36.0): vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0):
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
postcss: 8.4.47 postcss: 8.4.47
@ -16653,16 +16904,17 @@ snapshots:
optionalDependencies: optionalDependencies:
'@types/node': 22.8.6 '@types/node': 22.8.6
fsevents: 2.3.3 fsevents: 2.3.3
sass-embedded: 1.80.6
terser: 5.36.0 terser: 5.36.0
vitefu@1.0.3(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)): vitefu@1.0.3(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)):
optionalDependencies: optionalDependencies:
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
vitest@2.1.4(@types/node@22.8.6)(terser@5.36.0): vitest@2.1.4(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0):
dependencies: dependencies:
'@vitest/expect': 2.1.4 '@vitest/expect': 2.1.4
'@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.6)(terser@5.36.0)) '@vitest/mocker': 2.1.4(vite@5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0))
'@vitest/pretty-format': 2.1.4 '@vitest/pretty-format': 2.1.4
'@vitest/runner': 2.1.4 '@vitest/runner': 2.1.4
'@vitest/snapshot': 2.1.4 '@vitest/snapshot': 2.1.4
@ -16678,8 +16930,8 @@ snapshots:
tinyexec: 0.3.1 tinyexec: 0.3.1
tinypool: 1.0.1 tinypool: 1.0.1
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vite: 5.4.10(@types/node@22.8.6)(terser@5.36.0) vite: 5.4.10(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
vite-node: 2.1.4(@types/node@22.8.6)(terser@5.36.0) vite-node: 2.1.4(@types/node@22.8.6)(sass-embedded@1.80.6)(terser@5.36.0)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 22.8.6 '@types/node': 22.8.6

View file

@ -28,6 +28,7 @@
"globals": "^15.0.0", "globals": "^15.0.0",
"prettier": "^3.3.2", "prettier": "^3.3.2",
"prettier-plugin-svelte": "^3.2.6", "prettier-plugin-svelte": "^3.2.6",
"sass-embedded": "^1.80.6",
"svelte": "^5.0.0", "svelte": "^5.0.0",
"svelte-check": "^4.0.0", "svelte-check": "^4.0.0",
"tailwindcss": "^3.4.9", "tailwindcss": "^3.4.9",

View file

@ -1,3 +0,0 @@
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -0,0 +1,13 @@
@use 'tailwindcss/base.css';
@use 'tailwindcss/components.css';
@use 'tailwindcss/utilities.css';
@use 'reset.scss';
body {
font: normal 18px/1.5 sans-serif;
font-family: system, -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif;
display: block;
@apply bg-gray-900;
@apply text-gray-300;
}

View file

@ -0,0 +1,31 @@
/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
/* Remove default padding */
ul,
ol {
padding: 0;
}
/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
font: inherit;
}
/* Remove all animations and transitions for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

View file

@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import '../app.css'; import '$lib/styles/app.scss';
let { children } = $props(); let { children } = $props();
</script> </script>

View file

@ -1,2 +1,159 @@
<h1>Welcome to SvelteKit</h1> <script lang="ts">
<p>Visit <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> to read the documentation</p> import logo from '$lib/splash/img/logo.png';
</script>
<div class="splash">
<div id="error"></div>
<div class="wrapper">
<div class="logo-column">
<img class="logo" src={logo} alt="ZappyZep Logo" />
</div>
<div class="info-column">
<h1>ZappyZep</h1>
<div class="description">
ZappyZep is a private moderation bot for Discord, designed with large servers and reliability in mind.
</div>
<div class="actions">
<a class="btn" href="/new/dashboard">Dashboard</a>
<a class="btn" href="/new/docs">Documentation</a>
</div>
<ul class="links">
<li>
<a href="https://github.com/Dragory/ZeppelinBot">Zeppelin Source</a>
</li>
<li>
<a href="https://discord.com/invite/w8njuNu">Discord</a>
</li>
<li>
<a href="https://www.patreon.com/zeppelinbot">Patreon</a>
</li>
<li>
<a href="/new/privacy-policy">Privacy Policy</a>
</li>
</ul>
</div>
</div>
</div>
<style lang="scss">
.splash {
width: 100vw;
min-height: 100vh;
background-color: #7289da;
background-image: linear-gradient(225deg, #7289da 0%, #5d70b4 100%);
color: #fff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
& a {
color: #fff;
}
& .wrapper {
flex: 0 0 auto;
width: 800px;
max-width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
& .logo-column {
flex: 0 0 auto;
padding: 24px;
}
& .info-column {
flex: 1 1 100%;
max-width: 448px;
padding: 24px;
text-align: center;
}
& .logo {
width: 300px;
height: 300px;
}
& h1 {
font-size: 80px;
font-weight: 300;
}
& .description {
color: #f1f5ff;
}
& .actions {
display: grid;
grid-template-columns: 1fr 1fr;
margin-top: 8px;
& .btn {
margin: 12px;
text-decoration: none;
text-align: center;
padding: 8px 24px;
border: 1px solid #fff;
border-radius: 4px;
transition: all 120ms ease-in-out;
background-color: hsla(0, 0%, 100%, 0.05);
}
}
& .links {
list-style: none;
display: flex;
font-size: 14px;
justify-content: center;
margin-top: 12px;
& li {
padding: 0 16px;
position: relative;
}
& li:first-child {
padding-left: 0;
}
& li:last-child {
padding-right: 0;
}
& li:not(:first-child)::before {
display: block;
content: ' ';
width: 4px;
height: 4px;
border-radius: 50%;
background-color: rgb(226, 232, 253);
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
}
& a {
color: rgb(226, 232, 253);
text-decoration: none;
&:hover {
color: white;
}
}
}
}
}
</style>

View file

@ -0,0 +1,141 @@
<div class="privacy-policy">
<div class="wrapper">
<h1>Zeppelin Privacy Policy</h1>
<h2>Zeppelin overview</h2>
<p>
Zeppelin is a moderation bot for Discord that allows server staff to
carry out moderator actions (warn, mute, kick, ban, clean messages, view
user information, etc.),
keep records of infractions, perform automated actions ("automod", e.g.
message filtering), post detailed logs on logging channels, and set up
systems such as reaction roles.
The bot also includes a web dashboard that server administrators can log
in to through Discord OAuth.
</p>
<p>
Zeppelin's source code (what we base on) is available at
<a href="https://github.com/ZeppelinBot/Zeppelin">
https://github.com/ZeppelinBot/Zeppelin
</a>
</p>
<h2>Stored data</h2>
<p>
When Zeppelin is used by a server, the following categories data can be
stored by the bot.
The specific categories of data saved for each server depends on how the
server has configured Zeppelin.
</p>
<ul>
<li>Recent messages and username/nickname changes of users engaged on
the server
</li>
<li>Recent bulk deleted messages</li>
<li>Basic user information, moderator-entered text, and relevant message
archives for infraction records
</li>
<li>A subset of previously held roles and nickname on the server to be
restored when a user rejoins
</li>
<li>Basic server details of the server using the bot</li>
</ul>
<p>
Additionally, when a user logs in to the web dashboard the following
types of data are stored:
</p>
<ul>
<li>Basic Discord user information</li>
<li>Time and originating IP address of the login for security audit
purposes
</li>
</ul>
<h2>Data retention</h2>
<ul>
<li>
Recent messages are stored for 24h
<ul>
<li>Deleted messages within this 24h are cleared 5 minutes after
deletion
</li>
</ul>
</li>
<li>5 most recent usernames and 10 most recent nicknames of users
engaged in chat or voice channels are stored for 30 days
</li>
<li>Archives of bulk-deleted messages are stored for 30 days</li>
<li>Infraction record data is kept until the server stops using Zeppelin
unless explicitly deleted
</li>
<li>Roles and nicknames that are restored on rejoin are cleared when the
user rejoins
</li>
<li>User information for users logged in to the bot's web dashboard via
Discord OAuth is stored as long as the server uses Zeppelin
</li>
</ul>
<h2>Data access and deletion requests</h2>
<p>
To request access to personal data stored about you, or to request its
deletion, to the extent permitted by GDPR, please send an email to <a
href="mailto:contact@mivir.fi">contact@mivir.fi</a>.
</p>
</div>
</div>
<style lang="scss">
.privacy-policy {
padding: 16px;
width: 100%;
min-height: 100vh;
background-color: #7289da;
background-image: linear-gradient(225deg, #7289da 0%, #5d70b4 100%);
color: #fff;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
& a {
color: #fff;
text-decoration: underline;
}
& .wrapper {
flex: 0 0 auto;
width: 100%;
max-width: 800px;
}
& h1 {
font-size: 60px;
font-weight: 300;
}
& h2 {
font-size: 30px;
margin-top: 16px;
}
& p {
margin-bottom: 16px;
}
& ul {
list-style: disc;
margin-left: 24px;
margin-bottom: 16px;
& ul {
margin-bottom: 0;
}
}
}
</style>

View file

@ -1,11 +1,19 @@
import { defineConfig } from "vitest/config"; import { defineConfig } from 'vitest/config';
import { sveltekit } from "@sveltejs/kit/vite"; import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({ export default defineConfig({
plugins: [sveltekit()], plugins: [sveltekit()],
test: { test: {
include: ["src/**/*.{test,spec}.{js,ts}"], include: ['src/**/*.{test,spec}.{js,ts}']
}, },
envDir: "..", envDir: '..',
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler'
}
}
}
}); });