From 54d27915fc3798705d87cd2b470fc24a70e38311 Mon Sep 17 00:00:00 2001 From: Scott Spence Date: Fri, 31 May 2024 12:09:15 +0100 Subject: [PATCH] Add Svead head component (#123) * Add Svead head component Added links to Svead, the Svelte head component for adding head metadata to your project pages * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add Svead to readme and make screenshots * update eslint commit hook and migrate to flat config * skip eslint in ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Janosh Riebesell --- .pre-commit-config.yaml | 11 +++---- readme.md | 13 +++++++- site/.eslintrc.yml | 25 --------------- site/eslint.config.js | 32 ++++++++++++++++++++ site/package.json | 37 +++++++++++------------ site/src/sites.yml | 36 ++++++++++++++++++++++ site/src/tasks/fetch-github-metadata.ts | 1 - site/src/tasks/screenshots.ts | 1 - site/src/tasks/update-readme.ts | 1 - site/static/screenshots/svead.avif | Bin 0 -> 23085 bytes site/static/screenshots/svead.small.avif | Bin 0 -> 9834 bytes sites.yml | 18 +++++++++++ tools.yml | 1 + 13 files changed, 122 insertions(+), 54 deletions(-) delete mode 100644 site/.eslintrc.yml create mode 100644 site/eslint.config.js create mode 100644 site/static/screenshots/svead.avif create mode 100644 site/static/screenshots/svead.small.avif diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3592b5c..5ee6329 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,6 @@ ci: autoupdate_schedule: quarterly + skip: [eslint] default_stages: [commit] @@ -53,20 +54,18 @@ repos: stages: [commit, commit-msg] - repo: https://github.com/pre-commit/mirrors-eslint - rev: v9.0.0-rc.0 + rev: v9.3.0 hooks: - id: eslint types: [file] - args: [--fix] + args: [--fix, --config, site/eslint.config.js] files: \.(js|ts|svelte)$ additional_dependencies: - eslint + - eslint-plugin-svelte - svelte - typescript - - eslint-plugin-svelte - - '@typescript-eslint/eslint-plugin' - - '@typescript-eslint/parser' - - svelte-eslint-parser + - typescript-eslint - repo: local hooks: diff --git a/readme.md b/readme.md index 88a88fa..8097a9d 100644 --- a/readme.md +++ b/readme.md @@ -714,6 +714,16 @@ Awesome examples of SvelteKit in the wild. Visit **[janosh.github.io/awesome-sve uses: [MDsveX], [GSAP], [Netlify] +1. **[Svead](https://svead.pages.dev)**  + [[code](https://github.com/spences10/svead)]  + + GitHub stars + + + Svead 🍺, a component that allows you to set head meta information, canonical, title, Twitter and Facebook Open Graph tags, and schema.org data.
+ + uses: [TypeScript], [PNPM], [Cloudflare Pages], [MDsveX], [Tailwind], [PostCSS], [DaisyUI] + 1. **[The Pudding](https://pudding.cool)**  [[code](https://github.com/the-pudding/website)]  @@ -933,8 +943,8 @@ Awesome examples of SvelteKit in the wild. Visit **[janosh.github.io/awesome-sve [tailwind]: https://tailwindcss.com [testing library]: https://testing-library.com [three.js]: https://threejs.org -[trpc]: https://trpc.io [trpc-sveltekit]: https://github.com/icflorescu/trpc-sveltekit +[trpc]: https://trpc.io [turbo]: https://github.com/vercel/turbo [typescript]: https://typescriptlang.org [underscore]: https://underscorejs.org @@ -945,6 +955,7 @@ Awesome examples of SvelteKit in the wild. Visit **[janosh.github.io/awesome-sve [wasm]: https://webassembly.org [webgl]: https://developer.mozilla.org/docs/Web/API/WebGL_API [ytdl-core]: https://github.com/fent/node-ytdl-core +[cloudflare pages]: https://pages.cloudflare.com ## 🎉 Suggestions Welcome diff --git a/site/.eslintrc.yml b/site/.eslintrc.yml deleted file mode 100644 index 994a328..0000000 --- a/site/.eslintrc.yml +++ /dev/null @@ -1,25 +0,0 @@ -env: - browser: true - node: true -extends: - - plugin:svelte/recommended - - eslint:recommended - - plugin:@typescript-eslint/recommended -overrides: - - files: ['*.svelte'] - parser: svelte-eslint-parser - parserOptions: - parser: '@typescript-eslint/parser' -rules: - indent: [error, 2, SwitchCase: 1] - '@typescript-eslint/quotes': [error, backtick, avoidEscape: true] - semi: [error, never] - linebreak-style: [error, unix] - no-console: [error, allow: [warn, error]] - no-var: error - '@typescript-eslint/no-inferrable-types': off - '@typescript-eslint/no-unused-vars': - [error, { argsIgnorePattern: ^_, varsIgnorePattern: ^_ }] - svelte/no-at-html-tags: off - no-inner-declarations: off -ignorePatterns: [build/, dist/] diff --git a/site/eslint.config.js b/site/eslint.config.js new file mode 100644 index 0000000..65ec3fb --- /dev/null +++ b/site/eslint.config.js @@ -0,0 +1,32 @@ +import svelte from 'eslint-plugin-svelte' +import tslint from 'typescript-eslint' + +/** @type { import("eslint").Linter.FlatConfig[] } */ +export default [ + ...tslint.configs.recommended, + ...svelte.configs[`flat/recommended`], + { + rules: { + '@typescript-eslint/no-unused-vars': [ + `error`, + { argsIgnorePattern: `^_`, varsIgnorePattern: `^_` }, + ], + '@typescript-eslint/quotes': [`error`, `backtick`, { avoidEscape: true }], + 'svelte/no-at-html-tags': `off`, + }, + }, + { + languageOptions: { ecmaVersion: 2020 }, + }, + { + files: [`**/*.svelte`], + languageOptions: { + parserOptions: { + parser: tslint.parser, + }, + }, + }, + { + ignores: [`build/`], + }, +] diff --git a/site/package.json b/site/package.json index 77e16b4..84a2914 100644 --- a/site/package.json +++ b/site/package.json @@ -17,31 +17,30 @@ "test": "playwright test tests/*.test.ts" }, "devDependencies": { - "@iconify/svelte": "^3.1.6", - "@playwright/test": "^1.42.1", + "@iconify/svelte": "^4.0.2", + "@playwright/test": "^1.44.1", "@rollup/plugin-yaml": "^4.1.2", "@sveltejs/adapter-static": "^3.0.1", - "@sveltejs/kit": "^2.5.4", - "@sveltejs/vite-plugin-svelte": "^3.0.2", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.3.1", + "@sveltejs/kit": "^2.5.10", + "@sveltejs/vite-plugin-svelte": "^3.1.1", "dotenv": "^16.4.5", - "eslint": "^8.57.0", - "eslint-plugin-svelte": "^2.35.1", + "eslint": "^9.3.0", + "eslint-plugin-svelte": "^2.39.0", "js-yaml": "^4.1.0", - "marked": "^12.0.1", + "marked": "^12.0.2", "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.2.2", - "puppeteer": "^22.6.0", - "sharp": "^0.33.3", - "svelte": "4.2.12", - "svelte-check": "^3.6.8", - "svelte-multiselect": "^10.2.0", - "svelte-preprocess": "^5.1.3", + "prettier-plugin-svelte": "^3.2.3", + "puppeteer": "^22.10.0", + "sharp": "^0.33.4", + "svelte": "4.2.17", + "svelte-check": "^3.8.0", + "svelte-multiselect": "^10.3.0", + "svelte-preprocess": "^5.1.4", "svelte-zoo": "^0.4.10", - "svelte2tsx": "^0.7.5", - "typescript": "5.4.3", - "vite": "^5.2.5" + "svelte2tsx": "^0.7.9", + "typescript": "5.4.5", + "typescript-eslint": "^7.11.0", + "vite": "^5.2.12" }, "keywords": [ "sveltekit", diff --git a/site/src/sites.yml b/site/src/sites.yml index 36a9e9e..75d097b 100644 --- a/site/src/sites.yml +++ b/site/src/sites.yml @@ -3012,3 +3012,39 @@ name: martin location: France company: null +- title: Svead + url: https://svead.pages.dev + repo: https://github.com/spences10/svead + description: >- + Svead 🍺, a component that allows you to set head meta information, + canonical, title, Twitter and Facebook Open Graph tags, and schema.org data. + uses: + - TypeScript + - PNPM + - Cloudflare Pages + - MDsveX + - Tailwind + - PostCSS + - DaisyUI + tags: + - component library + - open source + date_created: 2022-05-15T00:00:00.000Z + date_added: 2024-05-31T00:00:00.000Z + slug: svead + repo_stars: 59 + contributors: + - github: spences10 + twitter: spences10 + url: https://scottspence.com + avatar: https://avatars.githubusercontent.com/u/234708?v=4 + name: Scott Spence + location: London, United Kingdom + company: '@XtendOps-developers' + - github: renovate-bot + twitter: renovatebot + url: https://www.mend.io/free-developer-tools/renovate/ + avatar: https://avatars.githubusercontent.com/u/25180681?v=4 + name: Mend Renovate + location: null + company: '@mend' diff --git a/site/src/tasks/fetch-github-metadata.ts b/site/src/tasks/fetch-github-metadata.ts index a604b14..5f3d07a 100644 --- a/site/src/tasks/fetch-github-metadata.ts +++ b/site/src/tasks/fetch-github-metadata.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* This file parses sites.yml, fetches GH metadata like contributors and stars for each site, then writes the results to site/src/sites.yml. */ diff --git a/site/src/tasks/screenshots.ts b/site/src/tasks/screenshots.ts index fdb6e65..313d7bb 100644 --- a/site/src/tasks/screenshots.ts +++ b/site/src/tasks/screenshots.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* This file parses sites.yml, generates low+hi-res screenshots for each site, saves them as WebP to site/static/screenshots/ and compresses them. */ diff --git a/site/src/tasks/update-readme.ts b/site/src/tasks/update-readme.ts index ccb6aec..4929404 100755 --- a/site/src/tasks/update-readme.ts +++ b/site/src/tasks/update-readme.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ /* This file parses sites.yml, then updates the list of sites in the readme. */ import fs from 'fs' diff --git a/site/static/screenshots/svead.avif b/site/static/screenshots/svead.avif new file mode 100644 index 0000000000000000000000000000000000000000..75b87535d2bf35c9950af4b4cc56266111f9eb59 GIT binary patch literal 23085 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 literal 0 HcmV?d00001 diff --git a/sites.yml b/sites.yml index 19fedfa..9c3ea5e 100644 --- a/sites.yml +++ b/sites.yml @@ -892,3 +892,21 @@ tags: [photos, photo-gallery, self-hosted, backup-tool, media] date_created: 2022-02-03 date_added: 2024-01-22 + +- title: Svead + url: https://svead.pages.dev + repo: https://github.com/spences10/svead + description: + Svead 🍺, a component that allows you to set head meta information, canonical, title, + Twitter and Facebook Open Graph tags, and schema.org data. + uses: + - TypeScript + - PNPM + - Cloudflare Pages + - MDsveX + - Tailwind + - PostCSS + - DaisyUI + tags: [component library] + date_created: 2022-05-15 + date_added: 2024-05-31 diff --git a/tools.yml b/tools.yml index 081f91b..f59932d 100644 --- a/tools.yml +++ b/tools.yml @@ -4,6 +4,7 @@ aws: https://aws.amazon.com babel: https://babeljs.io changesets: https://github.com/changesets/changesets chart.js: https://chartjs.org +cloudflare pages: https://pages.cloudflare.com cloudflare: https://cloudflare.com cloudinary: https://cloudinary.com codemirror: https://codemirror.net