diff --git a/.dvmrc b/.dvmrc
index bf50e91..d707557 100644
--- a/.dvmrc
+++ b/.dvmrc
@@ -1 +1 @@
-1.37.0
+1.39.3
diff --git a/.github/workflows/cron-check-subscriptions.yml b/.github/workflows/cron-check-subscriptions.yml
index 6c468f9..0cb1888 100644
--- a/.github/workflows/cron-check-subscriptions.yml
+++ b/.github/workflows/cron-check-subscriptions.yml
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v3
- uses: denoland/setup-deno@v1
with:
- deno-version: v1.37.0
+ deno-version: v1.39.3
- env:
POSTGRESQL_HOST: ${{ secrets.POSTGRESQL_HOST }}
POSTGRESQL_USER: ${{ secrets.POSTGRESQL_USER }}
diff --git a/.github/workflows/cron-cleanup.yml b/.github/workflows/cron-cleanup.yml
index 5d06a30..3c165cc 100644
--- a/.github/workflows/cron-cleanup.yml
+++ b/.github/workflows/cron-cleanup.yml
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v3
- uses: denoland/setup-deno@v1
with:
- deno-version: v1.37.0
+ deno-version: v1.39.3
- env:
POSTGRESQL_HOST: ${{ secrets.POSTGRESQL_HOST }}
POSTGRESQL_USER: ${{ secrets.POSTGRESQL_USER }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index b5f3795..4830da5 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -9,7 +9,7 @@ jobs:
- uses: actions/checkout@v3
- uses: denoland/setup-deno@v1
with:
- deno-version: v1.37.0
+ deno-version: v1.39.3
- run: docker-compose pull
- uses: jpribyl/action-docker-layer-caching@v0.1.1
continue-on-error: true
diff --git a/Dockerfile b/Dockerfile
index 067a1d0..d1456e9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM denoland/deno:1.37.0
+FROM denoland/deno:1.39.3
EXPOSE 8000
diff --git a/import_map.json b/import_map.json
index dae0ddc..f6f831d 100644
--- a/import_map.json
+++ b/import_map.json
@@ -3,6 +3,6 @@
"/": "./",
"./": "./",
- "std/": "https://deno.land/std@0.202.0/"
+ "std/": "https://deno.land/std@0.212.0/"
}
}
diff --git a/lib/utils.ts b/lib/utils.ts
index ef384b3..2c1e388 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -87,7 +87,7 @@ export function basicLayoutResponse(htmlContent: string, options: BasicLayoutOpt
headers: {
'content-type': 'text/html; charset=utf-8',
'content-security-policy':
- 'default-src \'self\'; child-src \'self\'; img-src \'self\'; style-src \'self\' \'unsafe-inline\'; script-src \'self\' \'unsafe-inline\' \'unsafe-eval\';',
+ "default-src 'self'; child-src 'self'; img-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';",
'x-frame-options': 'DENY',
'x-content-type-options': 'nosniff',
'strict-transport-security': 'max-age=31536000; includeSubDomains; preload',
@@ -101,7 +101,7 @@ export function isRunningLocally(urlPatternResult: URLPatternResult) {
export function escapeHtml(unsafe: string) {
return unsafe.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"')
- .replaceAll('\'', ''');
+ .replaceAll("'", ''');
}
async function transpileTs(content: string, specifier: URL) {
diff --git a/lib/utils_test.ts b/lib/utils_test.ts
index af1029a..b6ba641 100644
--- a/lib/utils_test.ts
+++ b/lib/utils_test.ts
@@ -8,7 +8,7 @@ Deno.test('that escapeHtml works', () => {
expected: '<a href="https://brunobernardino.com">URL</a>',
},
{
- input: '">',
+ input: "\">",
expected: '"><img onerror='alert(1)' />',
},
];
diff --git a/public/ts/billing.ts b/public/ts/billing.ts
index 4feb389..007a007 100644
--- a/public/ts/billing.ts
+++ b/public/ts/billing.ts
@@ -57,7 +57,7 @@ document.addEventListener('app-loaded', async () => {
const { isConfirmed } = await Swal.fire({
title: 'Are you sure?',
- text: 'You won\'t be able to recover your data!',
+ text: "You won't be able to recover your data!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: 'red',
diff --git a/public/ts/index.ts b/public/ts/index.ts
index a0dc23a..d0c413e 100644
--- a/public/ts/index.ts
+++ b/public/ts/index.ts
@@ -461,7 +461,7 @@ document.addEventListener('app-loaded', async () => {
const { isConfirmed } = await Swal.fire({
title: 'Are you sure?',
- text: 'You won\'t be able to recover this expense!',
+ text: "You won't be able to recover this expense!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: 'red',
@@ -568,7 +568,7 @@ document.addEventListener('app-loaded', async () => {
const { isConfirmed } = await Swal.fire({
title: 'Are you sure?',
- text: 'You won\'t be able to recover this budget!',
+ text: "You won't be able to recover this budget!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: 'red',
diff --git a/public/ts/utils.ts b/public/ts/utils.ts
index 43336a2..5132043 100644
--- a/public/ts/utils.ts
+++ b/public/ts/utils.ts
@@ -588,7 +588,7 @@ export async function deleteBudget(budgetId: string) {
if (matchingBudgets.length === 1) {
showNotification(
- 'There are expenses using this budget. You can\'t delete a budget with expenses',
+ "There are expenses using this budget. You can't delete a budget with expenses",
'error',
);
return false;