diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6635cf5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..43b82b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# stage build +FROM node:20-alpine + +WORKDIR /app + +# copy everything to the container +COPY . . + +# clean install all dependencies +RUN corepack enable && pnpm i + +# remove potential security issues +RUN pnpm audit fix + +# build SvelteKit appmakeAuthjsRequest +RUN pnpm run build + + +# stage run +FROM node:20-alpine + +WORKDIR /app + +# copy dependency list +COPY --from=0 /app/package*.json /app/pnpm-lock.yaml ./ +COPY --from=0 /app/patches ./patches +COPY --from=0 /app/prisma ./prisma + +# Setup pnpm, install Prisma CLI (for generating client) and install dependencies +RUN corepack enable && pnpm i --prod && pnpm audit fix && npx prisma generate + +# copy built SvelteKit app to /app +COPY --from=0 /app/build ./ + +EXPOSE 3000 +CMD ["node", "./index.js"] diff --git a/eslint.config.js b/eslint.config.js index fcc8f15..4f58599 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -415,18 +415,6 @@ export default [ }, ], - // disallow dangling underscores in identifiers - // https://eslint.org/docs/rules/no-underscore-dangle - "no-underscore-dangle": [ - "warn", - { - allow: [], - allowAfterThis: false, - allowAfterSuper: false, - enforceInMethodNames: true, - }, - ], - // disallow the use of Boolean literals in conditional expressions // also, prefer `a || b` over `a ? a : b` // https://eslint.org/docs/rules/no-unneeded-ternary diff --git a/package.json b/package.json index f57f89c..5d3e1eb 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,10 @@ "@floating-ui/core": "^1.6.0", "@mdi/js": "^7.4.47", "@prisma/client": "^5.12.1", - "carta-md": "^4.0.0", + "carta-md": "4.0.2", "diff": "^5.2.0", "isomorphic-dompurify": "^2.7.0", + "prisma": "^5.12.1", "qs": "^6.12.1", "set-cookie-parser": "^2.6.0", "svelte-floating-ui": "^1.5.8", @@ -56,7 +57,6 @@ "globals": "^15.0.0", "postcss-import": "^16.1.0", "postcss-nesting": "^12.1.1", - "prisma": "^5.12.1", "svelte": "^4.2.15", "svelte-check": "^3.6.9", "sveltekit-superforms": "^2.12.5", @@ -72,7 +72,7 @@ "type": "module", "pnpm": { "patchedDependencies": { - "carta-md@4.0.0": "patches/carta-md@4.0.0.patch" + "carta-md@4.0.2": "patches/carta-md@4.0.2.patch" } } } diff --git a/patches/carta-md@4.0.0.patch b/patches/carta-md@4.0.2.patch similarity index 100% rename from patches/carta-md@4.0.0.patch rename to patches/carta-md@4.0.2.patch diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 124ed8d..0a247f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,9 @@ settings: excludeLinksFromLockfile: false patchedDependencies: - carta-md@4.0.0: - hash: 4dz4dhp4dewr3xkzk2rwum2jdq - path: patches/carta-md@4.0.0.patch + carta-md@4.0.2: + hash: i33ea43vfgrg3ziu25cfu7s2zq + path: patches/carta-md@4.0.2.patch dependencies: '@auth/core': @@ -23,8 +23,8 @@ dependencies: specifier: ^5.12.1 version: 5.12.1(prisma@5.12.1) carta-md: - specifier: ^4.0.0 - version: 4.0.0(patch_hash=4dz4dhp4dewr3xkzk2rwum2jdq)(svelte@4.2.15) + specifier: 4.0.2 + version: 4.0.2(patch_hash=i33ea43vfgrg3ziu25cfu7s2zq)(svelte@4.2.15) diff: specifier: ^5.2.0 version: 5.2.0 @@ -1075,8 +1075,8 @@ packages: dev: true optional: true - /@shikijs/core@1.3.0: - resolution: {integrity: sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA==} + /@shikijs/core@1.4.0: + resolution: {integrity: sha512-CxpKLntAi64h3j+TwWqVIQObPTED0FyXLHTTh3MKXtqiQNn2JGcMQQ362LftDbc9kYbDtrksNMNoVmVXzKFYUQ==} dev: false /@sideway/address@4.1.5: @@ -1935,8 +1935,8 @@ packages: resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} dev: true - /carta-md@4.0.0(patch_hash=4dz4dhp4dewr3xkzk2rwum2jdq)(svelte@4.2.15): - resolution: {integrity: sha512-mxIoN3dqcjgv8i5FIUBH69lclx8A1/FB/FaFymWBzKE4AvUdy/X6VQGBNzAO3ybSAdceMT0RrAhY5/KnoFI8Hg==} + /carta-md@4.0.2(patch_hash=i33ea43vfgrg3ziu25cfu7s2zq)(svelte@4.2.15): + resolution: {integrity: sha512-wMlw0r5RZiVwvF3dyxE/vHj9pXlXbzpijJ3m/o9zqZe7Cf6D96AjyBHBpa0A0OPj/uEJVF3k0R6ctopBJCpCQg==} peerDependencies: svelte: ^3.54.0 || ^4.0.0 dependencies: @@ -1944,7 +1944,7 @@ packages: remark-gfm: 4.0.0 remark-parse: 11.0.0 remark-rehype: 11.1.0 - shiki: 1.3.0 + shiki: 1.4.0 svelte: 4.2.15 unified: 11.0.4 transitivePeerDependencies: @@ -4860,10 +4860,10 @@ packages: engines: {node: '>=8'} dev: true - /shiki@1.3.0: - resolution: {integrity: sha512-9aNdQy/etMXctnPzsje1h1XIGm9YfRcSksKOGqZWXA/qP9G18/8fpz5Bjpma8bOgz3tqIpjERAd6/lLjFyzoww==} + /shiki@1.4.0: + resolution: {integrity: sha512-5WIn0OL8PWm7JhnTwRWXniy6eEDY234mRrERVlFa646V2ErQqwIFd2UML7e0Pq9eqSKLoMa3Ke+xbsF+DAuy+Q==} dependencies: - '@shikijs/core': 1.3.0 + '@shikijs/core': 1.4.0 dev: false /side-channel@1.0.6: diff --git a/src/app.pcss b/src/app.pcss index 3e105c8..7ddf037 100644 --- a/src/app.pcss +++ b/src/app.pcss @@ -4,11 +4,9 @@ @tailwind utilities; @layer components { - .btn-transition { + .btn-animation { @apply duration-200 ease-out; animation: button-pop var(--animation-btn, 0.25s) ease-out; - transition-property: color, background-color, border-color, opacity, box-shadow, - transform; &:active:hover, &:active:focus { animation: button-pop 0s ease-out; @@ -47,7 +45,7 @@ button { @apply border border-solid border-base-content/30; .row { - @apply flex flex-row; + @apply flex; } .row, @@ -76,3 +74,12 @@ button { @apply bg-primary text-primary-content py-1; } } + +.card-animation { + @apply duration-200 ease-out; + &:active:hover, + &:active:focus { + animation: button-pop 0s ease-out; + transform: scale(0.99); + } +} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 87c81a0..9a0c57d 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -31,3 +31,7 @@ export const handle = sequence( authorization, createTRPCHandle({ router, createContext }), ); + +// Allow server application to exit +process.on("SIGINT", process.exit); // Ctrl+C +process.on("SIGTERM", process.exit); // docker stop diff --git a/src/lib/components/entry/EntryBody.svelte b/src/lib/components/entry/EntryBody.svelte index a4bfc38..2dd3afc 100644 --- a/src/lib/components/entry/EntryBody.svelte +++ b/src/lib/components/entry/EntryBody.svelte @@ -36,7 +36,7 @@ -

+

Erstellt {humanDate(entry.created_at, true)} · {#if entry.execution} diff --git a/src/lib/components/entry/PatientCard.svelte b/src/lib/components/entry/PatientCard.svelte index 76da389..373e2ad 100644 --- a/src/lib/components/entry/PatientCard.svelte +++ b/src/lib/components/entry/PatientCard.svelte @@ -1,5 +1,6 @@ -

+
{/if} + + {#if clearBtn && selection} +
+ +
+ {/if}