From 71fb351d0108e7191c6c9df178397282639fab78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Dubois?= Date: Wed, 13 May 2026 21:06:59 +0200 Subject: [PATCH] chore(all): removed husky and started fixing obsidian plugin review issues --- .gitconfig | 18 +++++++ .husky/commit-msg | 2 - .husky/pre-commit | 2 - CONTRIBUTING.md | 32 ++++++++++++ bun.lock | 78 ------------------------------ bunfig.toml | 8 ++- eslint.config.ts | 2 - package.json | 7 +-- scripts/git-hooks/format-staged.sh | 17 +++++++ src/app/assets/buy-me-a-coffee.ts | 4 ++ src/app/settings/settings-tab.ts | 4 +- 11 files changed, 81 insertions(+), 93 deletions(-) create mode 100644 .gitconfig delete mode 100644 .husky/commit-msg delete mode 100644 .husky/pre-commit create mode 100755 scripts/git-hooks/format-staged.sh create mode 100644 src/app/assets/buy-me-a-coffee.ts diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..6743be8 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,18 @@ +# Repo-scoped Git configuration with config-based hooks (Git 2.54+). +# +# Activate once per clone: +# +# git config --local include.path ../.gitconfig +# +# (Path is relative to .git/, so `../.gitconfig` resolves to the repo root.) +# +# After that, the hooks below run automatically on `git commit`. + +[hook "format-staged"] + event = pre-commit + command = scripts/git-hooks/format-staged.sh + +[hook "commitlint"] + event = commit-msg + # Git appends the commit-msg file path as the trailing arg, which becomes the value of --edit. + command = bunx commitlint --edit diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100644 index 2c104b9..0000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -bunx commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index d19c36e..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -bunx lint-staged diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c67c3f..49eb252 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,6 +28,38 @@ ### Install Dependencies bun install ``` +## Git hooks (Git 2.54+) + +This repo uses [Git's built-in config-based hooks](https://github.blog/open-source/git/highlights-from-git-2-54/) (introduced in **Git 2.54**) instead of Husky + `lint-staged`. The hook definitions live in a tracked `.gitconfig` file at the repo root and are committed to source control. + +### Enable the hooks once per clone + +After the first `bun install`, run: + +```bash +bun run setup +``` + +That script runs `git config --local --replace-all include.path ../.gitconfig` — the path is relative to `.git/`, so `../.gitconfig` resolves to the repo root. Git then reads the tracked `.gitconfig`, picking up: + +- **`pre-commit` → `scripts/git-hooks/format-staged.sh`** — runs Prettier over the staged files and re-stages them. +- **`commit-msg` → `bunx commitlint --edit`** — validates the commit message against `commitlint.config.ts`. + +Confirm the hooks are wired up: + +```bash +git hook list pre-commit +git hook list commit-msg +``` + +### Requirements + +- Git **≥ 2.54** is required for config-based hooks. Older Git versions silently ignore them, so the hooks won't run (but nothing will break). + +### Why not Husky? + +Husky + `lint-staged` together pull in ~80 transitive deps and require a `prepare` post-install script to inject shims into `.git/hooks/`. Git 2.54 provides the same functionality natively, the hook config is plain text in version control, and there's no install-time magic. + ## Development Workflow ### Create a Branch diff --git a/bun.lock b/bun.lock index 8c9ba00..9feef82 100644 --- a/bun.lock +++ b/bun.lock @@ -23,8 +23,6 @@ "eslint-config-prettier": "^10.1.5", "eslint-plugin-obsidianmd": "0.1.9", "globals": "17.0.0", - "husky": "^9.1.7", - "lint-staged": "^16.2.7", "obsidian": "latest", "prettier": "^3.6.2", "tailwindcss": "4.1.17", @@ -310,8 +308,6 @@ "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], - "cli-truncate": ["cli-truncate@5.1.1", "", { "dependencies": { "slice-ansi": "^7.1.0", "string-width": "^8.0.0" } }, "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A=="], - "cli-width": ["cli-width@3.0.0", "", {}, "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="], "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], @@ -322,10 +318,6 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "colorette": ["colorette@2.0.20", "", {}, "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w=="], - - "commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - "commitizen": ["commitizen@4.3.1", "", { "dependencies": { "cachedir": "2.3.0", "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", "detect-indent": "6.1.0", "find-node-modules": "^2.1.2", "find-root": "1.1.0", "fs-extra": "9.1.0", "glob": "7.2.3", "inquirer": "8.2.5", "is-utf8": "^0.2.1", "lodash": "4.17.21", "minimist": "1.2.7", "strip-bom": "4.0.0", "strip-json-comments": "3.1.1" }, "bin": { "cz": "bin/git-cz", "git-cz": "bin/git-cz", "commitizen": "bin/commitizen" } }, "sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw=="], "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="], @@ -458,8 +450,6 @@ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], - "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], - "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], @@ -522,8 +512,6 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], - "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - "expand-tilde": ["expand-tilde@2.0.2", "", { "dependencies": { "homedir-polyfill": "^1.0.1" } }, "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw=="], "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], @@ -580,8 +568,6 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], @@ -634,8 +620,6 @@ "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], - "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], - "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], @@ -796,10 +780,6 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@16.2.7", "", { "dependencies": { "commander": "^14.0.2", "listr2": "^9.0.5", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow=="], - - "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], - "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], @@ -828,8 +808,6 @@ "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], - "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], - "longest": ["longest@2.0.1", "", {}, "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -848,8 +826,6 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.7", "", {}, "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="], @@ -866,8 +842,6 @@ "mute-stream": ["mute-stream@0.0.8", "", {}, "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="], - "nano-spawn": ["nano-spawn@2.0.0", "", {}, "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw=="], - "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], @@ -930,8 +904,6 @@ "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "pidtree": ["pidtree@0.6.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="], - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], "preact": ["preact@10.29.1", "", {}, "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg=="], @@ -974,8 +946,6 @@ "ret": ["ret@0.1.15", "", {}, "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="], - "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - "rimraf": ["rimraf@2.6.3", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="], "run-async": ["run-async@2.4.1", "", {}, "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="], @@ -1016,8 +986,6 @@ "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "slice-ansi": ["slice-ansi@7.1.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -1034,8 +1002,6 @@ "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], @@ -1210,8 +1176,6 @@ "bun-types/@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="], - "cli-truncate/string-width": ["string-width@8.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" } }, "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg=="], - "conventional-changelog/conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@8.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA=="], "conventional-changelog-core/conventional-commits-parser": ["conventional-commits-parser@6.2.1", "", { "dependencies": { "meow": "^13.0.0" }, "bin": { "conventional-commits-parser": "dist/cli/index.js" } }, "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA=="], @@ -1272,16 +1236,6 @@ "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "listr2/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], - - "log-update/ansi-escapes": ["ansi-escapes@7.2.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="], - - "log-update/cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - - "log-update/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - - "log-update/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], - "mkdirp/minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], "read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], @@ -1290,10 +1244,6 @@ "read-pkg/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], - "slice-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "slice-ansi/is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], - "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "toml-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], @@ -1318,8 +1268,6 @@ "bun-types/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - "cli-truncate/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - "cz-conventional-changelog/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], "cz-conventional-changelog/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], @@ -1352,24 +1300,8 @@ "json-schema-migrate/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "listr2/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "listr2/wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "listr2/wrap-ansi/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - - "log-update/cli-cursor/restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], - - "log-update/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - - "log-update/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], - - "log-update/wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "@commitlint/top-level/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], - "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "cz-conventional-changelog/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], "cz-conventional-changelog/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], @@ -1392,16 +1324,6 @@ "cz-customizable/inquirer/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], - "listr2/wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - - "listr2/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - - "log-update/cli-cursor/restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], - - "log-update/cli-cursor/restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "log-update/wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - "@commitlint/top-level/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], "cz-conventional-changelog/chalk/ansi-styles/color-convert/color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], diff --git a/bunfig.toml b/bunfig.toml index 27002ee..88f11c2 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -7,7 +7,13 @@ depth = 2 [install] auto = "auto" exact = true -optional = false +# Optional deps must stay enabled — @tailwindcss/cli pulls in @parcel/watcher, +# which require()s a platform-specific prebuilt at module load. With +# optional = false the release build crashes on Bun 1.3.14+ with "No prebuild +# or local build of @parcel/watcher found". Earlier Bun versions tolerated +# this through side channels (e.g. bunx's lazy resolver), but the supported +# fix is to keep optional dependencies enabled. +optional = true # Only install package versions published at least 3 days ago minimumReleaseAge = 259200 # These packages will bypass the 3-day minimum age requirement diff --git a/eslint.config.ts b/eslint.config.ts index 5df6fa7..e5aba36 100644 --- a/eslint.config.ts +++ b/eslint.config.ts @@ -53,8 +53,6 @@ export default tseslint.config( // Obsidian methods are dynamically added to prototypes '@typescript-eslint/no-unsafe-enum-comparison': 'off', 'no-prototype-builtins': 'off', - // Disable dependency ban rule - lint-staged is intentionally used - 'depend/ban-dependencies': 'off', // Allow confirm for delete confirmations 'no-alert': 'off', // Disable sentence case rule - it has false positives for already-correct text diff --git a/package.json b/package.json index 93a0c26..401cc0b 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,6 @@ }, "main": "main.js", "packageManager": "bun@1.3.2", - "lint-staged": { - "**/*": "prettier --write --ignore-unknown" - }, "config": { "commitizen": { "path": "node_modules/cz-customizable" @@ -41,6 +38,7 @@ "scripts": { "dev": "bun scripts/build.ts", "build": "bun run tsc && bun scripts/build.ts --prod", + "setup": "git config --local --replace-all include.path ../.gitconfig", "tsc": "tsc --noEmit", "tsc:watch": "tsc --noEmit --watch --preserveWatchOutput", "tscw": "bun run tsc:watch", @@ -49,7 +47,6 @@ "format": "prettier --write .", "format:check": "prettier --check .", "test": "bun test", - "prepare": "husky", "commit": "cz", "cm": "cz", "commit:lint": "commitlint --edit", @@ -74,8 +71,6 @@ "eslint-config-prettier": "^10.1.5", "eslint-plugin-obsidianmd": "0.1.9", "globals": "17.0.0", - "husky": "^9.1.7", - "lint-staged": "^16.2.7", "obsidian": "latest", "prettier": "^3.6.2", "tailwindcss": "4.1.17", diff --git a/scripts/git-hooks/format-staged.sh b/scripts/git-hooks/format-staged.sh new file mode 100755 index 0000000..ff39d17 --- /dev/null +++ b/scripts/git-hooks/format-staged.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# Pre-commit hook: format staged files with Prettier and re-stage them. +# Invoked by Git 2.54+ config-based hooks via `.gitconfig` at the repo root. +# Replaces the previous husky + lint-staged setup. + +set -euo pipefail + +# Collect staged files (added, copied, modified, renamed), NUL-separated to +# survive whitespace in paths. Skip deletions. +mapfile -d '' -t staged_files < <(git diff --cached --name-only --diff-filter=ACMR -z) + +if ((${#staged_files[@]} == 0)); then + exit 0 +fi + +bunx prettier --write --ignore-unknown -- "${staged_files[@]}" +git add -- "${staged_files[@]}" diff --git a/src/app/assets/buy-me-a-coffee.ts b/src/app/assets/buy-me-a-coffee.ts new file mode 100644 index 0000000..0bdd658 --- /dev/null +++ b/src/app/assets/buy-me-a-coffee.ts @@ -0,0 +1,4 @@ +// Auto-generated from src/assets/buy-me-a-coffee.png +// Embedded so the plugin does not make a cross-domain request for the BMC badge. +export const BUY_ME_A_COFFEE_BADGE_DATA_URL = + 'data:image/png;base64,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' diff --git a/src/app/settings/settings-tab.ts b/src/app/settings/settings-tab.ts index 038794f..7dfd1c8 100644 --- a/src/app/settings/settings-tab.ts +++ b/src/app/settings/settings-tab.ts @@ -1,5 +1,6 @@ import { App, PluginSettingTab, Setting } from 'obsidian' import type { GraphExplorerPlugin } from '../plugin' +import { BUY_ME_A_COFFEE_BADGE_DATA_URL } from '../assets/buy-me-a-coffee' export class GraphExplorerSettingTab extends PluginSettingTab { plugin: GraphExplorerPlugin @@ -216,8 +217,7 @@ export class GraphExplorerSettingTab extends PluginSettingTab { href: 'https://www.buymeacoffee.com/dsebastien' }) const imgEl = linkEl.createEl('img') - imgEl.src = - 'https://github.com/dsebastien/obsidian-plugin-template/blob/main/src/assets/buy-me-a-coffee.png?raw=true' + imgEl.src = BUY_ME_A_COFFEE_BADGE_DATA_URL imgEl.alt = 'Buy me a coffee' imgEl.width = width }