chore: setup husky, eslint, prettier

This commit is contained in:
Ayo Ayco 2024-12-25 23:03:50 +01:00
parent 249caabd67
commit 38addd30bf
8 changed files with 811 additions and 56 deletions

2
.husky/pre-commit Normal file
View file

@ -0,0 +1,2 @@
npm run lint

1
.pretterignore Normal file
View file

@ -0,0 +1 @@
site/**

23
eslint.config.mjs Normal file
View file

@ -0,0 +1,23 @@
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import astroSwGlobals from '@ayco/astro-sw/globals';
/** @type {import('eslint').Linter.Config[]} */
export default [
{files: ["**/*.{js,mjs,cjs,ts}"]},
{languageOptions: { globals: {...globals.browser, ...globals.node, ...astroSwGlobals } }},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
{
ignores: [
'dist/*',
'.output/*',
'.astro/*',
'**/node_modules/*',
'**/coverage/*',
'**/env.d.ts'
],
},
]

View file

@ -16,7 +16,9 @@
"publish:patch": "npm version patch && npm publish --access public", "publish:patch": "npm version patch && npm publish --access public",
"publish:minor": "npm version minor && npm publish --access public", "publish:minor": "npm version minor && npm publish --access public",
"deploy:client": "astro build && scp -r dist/client/ ayo@ayco.io:~/cozy/dist/", "deploy:client": "astro build && scp -r dist/client/ ayo@ayco.io:~/cozy/dist/",
"test": "vitest" "test": "vitest",
"prepare": "husky",
"lint": "eslint . --config eslint.config.mjs"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/check": "^0.9.4", "@astrojs/check": "^0.9.4",
@ -24,15 +26,20 @@
"@astrojs/node": "^8.3.4", "@astrojs/node": "^8.3.4",
"@astrojs/rss": "^4.0.9", "@astrojs/rss": "^4.0.9",
"@astrojs/sitemap": "^3.2.1", "@astrojs/sitemap": "^3.2.1",
"@ayco/astro-sw": "^0.8.8", "@ayco/astro-sw": "^0.8.14",
"@eslint/js": "^9.17.0",
"@extractus/article-extractor": "^8.0.10", "@extractus/article-extractor": "^8.0.10",
"@fastify/middie": "^8.3.1", "@fastify/middie": "^8.3.1",
"@fastify/static": "^7.0.4", "@fastify/static": "^7.0.4",
"astro": "^4.16.7", "astro": "^4.16.7",
"astro-iconify": "^1.2.0", "astro-iconify": "^1.2.0",
"eslint": "^9.17.0",
"fastify": "^4.28.1", "fastify": "^4.28.1",
"globals": "^15.14.0",
"husky": "^9.1.7",
"sass": "^1.77.8", "sass": "^1.77.8",
"typescript": "^5.5.4", "typescript": "^5.5.4",
"typescript-eslint": "^8.18.2",
"ultrahtml": "^1.5.3", "ultrahtml": "^1.5.3",
"vitest": "^2.1.4" "vitest": "^2.1.4"
} }

File diff suppressed because it is too large Load diff

12
prettier.config.mjs Normal file
View file

@ -0,0 +1,12 @@
/**
* @see https://prettier.io/docs/en/configuration.html
* @type {import("prettier").Config}
*/
const config = {
trailingComma: 'es5',
tabWidth: 2,
semi: false,
singleQuote: true,
}
export default config

View file

@ -58,11 +58,11 @@ const cacheAndRevalidate = async ({ request, fallbackUrl }) => {
// get network response for revalidation of cached assets // get network response for revalidation of cached assets
fetch(request.clone()).then((responseFromNetwork) => { fetch(request.clone()).then((responseFromNetwork) => {
if (responseFromNetwork) { if (responseFromNetwork) {
console.info('fetched updated resource...', { force: forceLogging, context: 'cozy-sw', data: responseFromNetwork.url }) console.info('fetched updated resource...', responseFromNetwork.url)
putInCache(request, responseFromNetwork.clone()); putInCache(request, responseFromNetwork.clone());
} }
}).catch((error) => { }).catch((error) => {
console.info('failed to fetch updated resource', { force: forceLogging, context: 'cozy-sw', data: error }) console.info('failed to fetch updated resource', error)
}); });
return responseFromCache; return responseFromCache;
@ -75,15 +75,16 @@ const cacheAndRevalidate = async ({ request, fallbackUrl }) => {
// we need to save clone to put one copy in cache // we need to save clone to put one copy in cache
// and serve second one // and serve second one
putInCache(request, responseFromNetwork.clone()); putInCache(request, responseFromNetwork.clone());
console.info('using network response', { force: forceLogging, context: 'cozy-sw', data: responseFromNetwork.url }) console.info('using network response', responseFromNetwork.url)
return responseFromNetwork; return responseFromNetwork;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (error) { } catch (error) {
// Try the fallback // Try the fallback
const fallbackResponse = await cache.match(fallbackUrl); const fallbackResponse = await cache.match(fallbackUrl);
if (fallbackResponse) { if (fallbackResponse) {
console.info('using fallback cached response...', { force: forceLogging, context: 'cozy-sw', data: fallbackResponse.url }) console.info('using fallback cached response...', fallbackResponse.url)
return fallbackResponse; return fallbackResponse;
} }
@ -97,14 +98,15 @@ const cacheAndRevalidate = async ({ request, fallbackUrl }) => {
} }
}; };
// eslint-disable-next-line @typescript-eslint/no-unused-vars
self.addEventListener('activate', (event) => { self.addEventListener('activate', (event) => {
console.info('activating service worker...', { force: forceLogging, context: 'cozy-sw' }) console.info('activating service worker...')
cleanOldCaches(); cleanOldCaches();
}); });
self.addEventListener('install', (event) => { self.addEventListener('install', (event) => {
console.info('installing service worker...', { force: forceLogging, context: 'cozy-sw' }) console.info('installing service worker...')
self.skipWaiting(); // go straight to activate self.skipWaiting(); // go straight to activate
event.waitUntil( event.waitUntil(

View file

@ -24,6 +24,3 @@ export async function cozify(html: string, baseUrl: string): Promise<string> {
]) ])
} }
function set(value: string) {
return () => value
}