From b3edd4769f3e2b7baf9eabb69fbff68010daa729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= Date: Thu, 7 Mar 2024 00:05:58 +0300 Subject: [PATCH 01/60] style: apply "npm pkg fix" --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5cc1c81b..f9c21f64 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "private": true, "repository": { "type": "git", - "url": "https://github.com/ozgurg/vergihesaplayici.com" + "url": "git+https://github.com/ozgurg/vergihesaplayici.com.git" }, "scripts": { "dev": "nuxt", From 79ddb17d44b648214e922e62af2a9ffaa196ec46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= Date: Sun, 10 Mar 2024 17:22:36 +0300 Subject: [PATCH 02/60] style: uninstall eslint-plugin-jsdoc --- .eslintrc.js | 51 +------------------- package-lock.json | 120 ---------------------------------------------- package.json | 1 - 3 files changed, 1 insertion(+), 171 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5bcc1be3..57c51881 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -9,9 +9,6 @@ module.exports = { "plugin:nuxt/recommended", "google" ], - plugins: [ - "jsdoc" - ], parserOptions: { parser: "@babel/eslint-parser", requireConfigFile: false @@ -108,52 +105,6 @@ module.exports = { } }], "vue/multi-word-component-names": "off", - "valid-jsdoc": 0, - "jsdoc/check-access": 1, - "jsdoc/check-alignment": 1, - "jsdoc/check-indentation": 1, - "jsdoc/check-line-alignment": 1, - "jsdoc/check-param-names": 1, - "jsdoc/check-property-names": 1, - "jsdoc/check-syntax": 1, - "jsdoc/check-tag-names": 1, - "jsdoc/check-types": 1, - "jsdoc/check-values": 1, - "jsdoc/empty-tags": 1, - "jsdoc/implements-on-classes": 1, - "jsdoc/match-description": 1, - "jsdoc/multiline-blocks": 1, - "jsdoc/newline-after-description": 0, - "jsdoc/no-bad-blocks": 1, - "jsdoc/no-defaults": 1, - "jsdoc/no-missing-syntax": 0, - "jsdoc/no-multi-asterisks": 1, - "jsdoc/no-restricted-syntax": 0, - "jsdoc/no-types": 0, - "jsdoc/no-undefined-types": 1, - "jsdoc/require-asterisk-prefix": 1, - "jsdoc/require-description": 0, - "jsdoc/require-description-complete-sentence": 0, - "jsdoc/require-example": 0, - "jsdoc/require-file-overview": 0, - "jsdoc/require-hyphen-before-param-description": 1, - "jsdoc/require-jsdoc": 1, - "jsdoc/require-param": 1, - "jsdoc/require-param-description": 0, - "jsdoc/require-param-name": 1, - "jsdoc/require-param-type": 1, - "jsdoc/require-property": 1, - "jsdoc/require-property-description": 1, - "jsdoc/require-property-name": 1, - "jsdoc/require-property-type": 1, - "jsdoc/require-returns": 1, - "jsdoc/require-returns-check": 1, - "jsdoc/require-returns-description": 0, - "jsdoc/require-returns-type": 1, - "jsdoc/require-throws": 1, - "jsdoc/require-yields": 1, - "jsdoc/require-yields-check": 1, - "jsdoc/tag-lines": 0, - "jsdoc/valid-types": 1 + "valid-jsdoc": 0 } }; diff --git a/package-lock.json b/package-lock.json index 879f030a..e937a6d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "cheerio": "1.0.0-rc.12", "eslint": "8.57.0", "eslint-config-google": "0.14.0", - "eslint-plugin-jsdoc": "48.2.0", "eslint-plugin-nuxt": "4.0.0", "eslint-plugin-vue": "9.22.0", "husky": "9.0.11", @@ -2783,20 +2782,6 @@ "url": "https://github.com/sponsors/dword-design" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", - "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==", - "dev": true, - "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -7309,15 +7294,6 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "engines": { - "node": ">=14" - } - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -9229,15 +9205,6 @@ "node": ">=16" } }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -10868,74 +10835,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jsdoc": { - "version": "48.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.0.tgz", - "integrity": "sha512-O2B1XLBJnUCRkggFzUQ+PBYJDit8iAgXdlu8ucolqGrbmOWPvttZQZX8d1sC0MbqDMSLs8SHSQxaNPRY1RQREg==", - "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.42.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.6.0", - "spdx-expression-parse": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-plugin-n": { "version": "15.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", @@ -16185,15 +16084,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -23022,16 +22912,6 @@ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, "node_modules/spdx-license-ids": { "version": "3.0.16", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", diff --git a/package.json b/package.json index f9c21f64..8b3d8ac6 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ "cheerio": "1.0.0-rc.12", "eslint": "8.57.0", "eslint-config-google": "0.14.0", - "eslint-plugin-jsdoc": "48.2.0", "eslint-plugin-nuxt": "4.0.0", "eslint-plugin-vue": "9.22.0", "husky": "9.0.11", From 178c6f845406557d7ee05d164591112b9fcc286f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20G=C3=B6rg=C3=BCl=C3=BC?= Date: Sun, 10 Mar 2024 17:59:46 +0300 Subject: [PATCH 03/60] refactor: migrate to new page-def strategy for / page --- components/App/AppLogo.vue | 6 ++++-- data/pages/ana-sayfa.page.js | 22 ---------------------- package-lock.json | 16 +++++++++++++++- package.json | 4 +++- page-def/ana-sayfa.page-def.js | 32 ++++++++++++++++++++++++++++++++ pages/index.vue | 6 ++++-- tsconfig.json | 14 ++++++++++++++ types/common.d.js | 13 +++++++++++++ types/page.d.js | 11 +++++++++++ 9 files changed, 96 insertions(+), 28 deletions(-) delete mode 100644 data/pages/ana-sayfa.page.js create mode 100644 page-def/ana-sayfa.page-def.js create mode 100644 tsconfig.json create mode 100644 types/common.d.js create mode 100644 types/page.d.js diff --git a/components/App/AppLogo.vue b/components/App/AppLogo.vue index 2a1ce6fe..55eeccaf 100644 --- a/components/App/AppLogo.vue +++ b/components/App/AppLogo.vue @@ -4,13 +4,15 @@ v-ripple="" class="vh-app-logo d-flex align-center justify-center px-4 rounded-pill" aria-label="Ana sayfaya git" - :to="AnaSayfa.url" + :to="anaSayfaPage.url" v-html="logo" /> diff --git a/data/pages/ana-sayfa.page.js b/data/pages/ana-sayfa.page.js deleted file mode 100644 index b1c36f65..00000000 --- a/data/pages/ana-sayfa.page.js +++ /dev/null @@ -1,22 +0,0 @@ -import { buildHeadTags } from "@/utils/build-head-tags.js"; - -export default (() => { - const title = "Vergi Hesaplayıcı"; - const description = "Telefon ve oyun konsolu gibi farklı ürün gruplarının yurt içi ve yurt dışı fiyatlarına Türkiye'de ne kadar vergi uygulandığını hesaplayın."; - const url = "/"; - const head = { - titleTemplate: null, - ...buildHeadTags({ - title, - description, - ogImageName: "ana-sayfa.jpg" - }) - }; - - return { - title, - description, - url, - head - }; -})(); diff --git a/package-lock.json b/package-lock.json index e937a6d4..b0e5b280 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,8 @@ "husky": "9.0.11", "jest": "29.7.0", "lint-staged": "15.2.2", - "nuxt-content-git": "3.0.32" + "nuxt-content-git": "3.0.32", + "typescript": "5.4.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -24530,6 +24531,19 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/ua-parser-js": { "version": "1.0.37", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", diff --git a/package.json b/package.json index 8b3d8ac6..1239b424 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "url": "git+https://github.com/ozgurg/vergihesaplayici.com.git" }, "scripts": { + "tsc": "tsc", "dev": "nuxt", "build": "nuxt build", "start": "nuxt start", @@ -66,7 +67,8 @@ "husky": "9.0.11", "jest": "29.7.0", "lint-staged": "15.2.2", - "nuxt-content-git": "3.0.32" + "nuxt-content-git": "3.0.32", + "typescript": "5.4.2" }, "overrides": { "webpack-dev-middleware": "5.0.0" diff --git a/page-def/ana-sayfa.page-def.js b/page-def/ana-sayfa.page-def.js new file mode 100644 index 00000000..06c00c85 --- /dev/null +++ b/page-def/ana-sayfa.page-def.js @@ -0,0 +1,32 @@ +import { buildHeadTags } from "@/utils/build-head-tags.js"; + +/** @type {PageDef} */ +const AnaSayfaPageDef = () => { + const title = "Vergi Hesaplayıcı"; + const url = "/"; + const breadcrumbs = [ + { + title, + url + } + ]; + const head = { + titleTemplate: null, + ...buildHeadTags({ + title, + description: "Telefon ve oyun konsolu gibi farklı ürün gruplarının yurt içi ve yurt dışı fiyatlarına Türkiye'de ne kadar vergi uygulandığını hesaplayın.", + ogImageName: "ana-sayfa.jpg" + }) + }; + + return { + title, + url, + breadcrumbs, + head + }; +}; + +export { + AnaSayfaPageDef +}; diff --git a/pages/index.vue b/pages/index.vue index 5bae5552..2221e1db 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -35,15 +35,17 @@ diff --git a/pages/index.vue b/pages/index.vue index 2221e1db..3dd34772 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -17,8 +17,8 @@
- - {{ Hesaplayicilar.title }} + + {{ hesaplayicilarPage.title }}
@@ -36,9 +36,10 @@ diff --git a/page-def/yazilar-slug.page-def.js b/page-def/yazilar-slug.page-def.js new file mode 100644 index 00000000..793a2965 --- /dev/null +++ b/page-def/yazilar-slug.page-def.js @@ -0,0 +1,44 @@ +import { YazilarPageDef } from "@/page-def/yazilar.page-def.js"; +import { buildHeadTags } from "@/utils/build-head-tags.js"; + +const parentPage = YazilarPageDef(); + +/** + * @param {{[key: string]: any}} nuxtContentObject + * @return {Article} + */ +const mapNuxtContentObjectAsArticle = nuxtContentObject => ({ + title: nuxtContentObject.title, + slug: nuxtContentObject.slug, + description: nuxtContentObject.description +}); + +/** @type {YazilarSlugPageDefinition} */ +const YazilarSlugPageDef = article => { + const title = article.title; + const url = `${parentPage.url}${article.slug}/`; + const breadcrumbs = [ + ...parentPage.breadcrumbs, + { + title, + url + } + ]; + const head = buildHeadTags({ + title, + description: article.description + }); + + return { + title, + url, + breadcrumbs, + head, + description: article.description + }; +}; + +export { + mapNuxtContentObjectAsArticle, + YazilarSlugPageDef +}; diff --git a/pages/index.vue b/pages/index.vue index 7ab00347..7be05afd 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -38,6 +38,7 @@ import { AnaSayfaPageDef } from "@/page-def/ana-sayfa.page-def.js"; import { HesaplayicilarPageDef } from "@/page-def/hesaplayicilar.page-def.js"; import { YazilarPageDef } from "@/page-def/yazilar.page-def.js"; +import { mapNuxtContentObjectAsArticle, YazilarSlugPageDef } from "@/page-def/yazilar-slug.page-def.js"; const anaSayfaPage = AnaSayfaPageDef(); const hesaplayicilarPage = HesaplayicilarPageDef(); @@ -53,8 +54,10 @@ export default { yazilarPage }), async asyncData({ $content }) { + const nuxtContents = await $content("/").sortBy("gitCreatedAt", "desc").limit(15).fetch(); + const articles = nuxtContents.map(mapNuxtContentObjectAsArticle).map(YazilarSlugPageDef); return { - articles: await $content("/").sortBy("gitCreatedAt", "desc").limit(15).fetch() + articles }; } }; diff --git a/pages/yazilar/_slug.vue b/pages/yazilar/_slug.vue index bfa899ec..bb1f0cf8 100644 --- a/pages/yazilar/_slug.vue +++ b/pages/yazilar/_slug.vue @@ -1,9 +1,9 @@