{"_id":"@applomb/eslint-config","_rev":"4-0b5181890d1f67615b3df6b076f093ba","name":"@applomb/eslint-config","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@applomb/eslint-config","version":"0.1.0","license":"MIT","_id":"@applomb/eslint-config@0.1.0","maintainers":[{"name":"twostack","email":"contact@twostack.be"}],"dist":{"shasum":"3ad6d7de0f32ec7a8b8dd4ef0162b7d12b45a664","tarball":"https://registry.npmjs.org/@applomb/eslint-config/-/eslint-config-0.1.0.tgz","fileCount":7,"integrity":"sha512-w5fT8DrnS35hqvq8ao7HcQiPJiQxMvqDDZGKEMkxB3ZO3GJ5rmS9jpvYfKG+Gvhxqex+d5iwZhb1gtOZTckHXw==","signatures":[{"sig":"MEUCICZWDSMBZEiA9AwI8H97Bcegi2wB/w5NWhhNJlfV8FLLAiEA8J33X0tUGwy59TkusQ+pTsdQaAKsx0tTnyJe2Bl3K6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11423},"main":"index.js","type":"module","exports":{".":"./index.js","./react-native":"./react-native.js"},"gitHead":"a14c9d4388035685cd27dc559fd4ad9c2362a2bf","_npmUser":{"name":"twostack","email":"contact@twostack.be"},"_npmVersion":"10.9.8","description":"Applomb's ESLint rules — the quality contract for Applomb-generated apps (base + react-native presets).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@typescript-eslint/parser":"^8.20.0","eslint-plugin-react-hooks":"^7.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.1.0_1784748722544_0.40405381404158125","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@applomb/eslint-config","version":"0.2.0","license":"MIT","_id":"@applomb/eslint-config@0.2.0","maintainers":[{"name":"twostack","email":"contact@twostack.be"}],"dist":{"shasum":"3e6da2fc40a6beeb0cf652ae9df5cd74a5a823b6","tarball":"https://registry.npmjs.org/@applomb/eslint-config/-/eslint-config-0.2.0.tgz","fileCount":7,"integrity":"sha512-E0dZmJrnikiRyw+NErMLDqkQiHuHABJ1wiYQJw712JsFOvPaUsWrf78eBZRmRslc27pecTB8DARQRylQ6ncprQ==","signatures":[{"sig":"MEQCIBjHEr/TYO3YqVswnPH8p/J7WB5e8tOatYaebJUSgNi4AiBr7vPnvP6igKpaW7QAwjvxNanZ08Hk+1qC/1joLwsdrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12268},"main":"index.js","type":"module","exports":{".":"./index.js","./react-native":"./react-native.js"},"gitHead":"45072b958eb8528ae7525c310ff5051f1d8d18a1","_npmUser":{"name":"twostack","email":"contact@twostack.be"},"_npmVersion":"10.9.8","description":"Applomb's ESLint rules — the quality contract for Applomb-generated apps (base + react-native presets).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@typescript-eslint/parser":"^8.20.0","eslint-plugin-react-hooks":"^7.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.2.0_1784814694213_0.3696831748584697","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@applomb/eslint-config","version":"0.3.0","license":"MIT","_id":"@applomb/eslint-config@0.3.0","maintainers":[{"name":"twostack","email":"contact@twostack.be"}],"dist":{"shasum":"88cfe62e39f065a72c4e7dd5350e37938388efa2","tarball":"https://registry.npmjs.org/@applomb/eslint-config/-/eslint-config-0.3.0.tgz","fileCount":8,"integrity":"sha512-0IRTHk+QeO7ljcj0wO8jBDxeTueyO5I680iv5D1RQnCSemmk8itwrs8W/0H8XjQkJjFwsxsbHnR1AlfRTjglRA==","signatures":[{"sig":"MEUCIGjoxAdiBGgU5c3Xtwl/mNGaOxv0ZDi/ood0Jc9jnA9mAiEAod/GFu6YCoZIUFSQw/Iby7v+Wo5gSRQViZecyJVWEMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16063},"main":"index.js","type":"module","exports":{".":"./index.js","./react-native":"./react-native.js"},"gitHead":"367fe8c0c4b65c56a12fb972aee0daeeb035e2eb","_npmUser":{"name":"twostack","email":"contact@twostack.be"},"_npmVersion":"10.9.8","description":"Applomb's ESLint rules — the quality contract for Applomb-generated apps (base + react-native presets).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@typescript-eslint/parser":"^8.20.0","eslint-plugin-react-hooks":"^7.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"eslint":">=9"},"_npmOperationalInternal":{"tmp":"tmp/eslint-config_0.3.0_1784884937695_0.5005530866481804","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@applomb/eslint-config","version":"0.4.0","description":"Applomb's ESLint rules — the quality contract for Applomb-generated apps (base + react-native presets).","license":"MIT","type":"module","main":"index.js","exports":{".":"./index.js","./react-native":"./react-native.js"},"publishConfig":{"access":"public"},"peerDependencies":{"eslint":">=9"},"dependencies":{"@typescript-eslint/parser":"^8.20.0","eslint-plugin-react-hooks":"^7.1.1"},"_id":"@applomb/eslint-config@0.4.0","gitHead":"e2bf25e54de02aca9559e317a85eaba29b193ea6","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-sT/dhP96zj9QhvAGH1rlUvi/ZioN+foAK/2SfLptaOPgUS10EPGXz8AB/WQOusJmzOX/vUy7kMZ3InopGmL53g==","shasum":"0a06a3b1b0e77eabdb0f415e962ba1b52a7b074e","tarball":"https://registry.npmjs.org/@applomb/eslint-config/-/eslint-config-0.4.0.tgz","fileCount":9,"unpackedSize":19118,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHI1IKUMvz1U42OMfkT+pXNGEnSzzxyyxbmXycBhtvZIAiEA9bgnSp1HSiCARCOSslJ0XNk/VKi8GuZPIOQEmmEpurs="}]},"_npmUser":{"name":"twostack","email":"contact@twostack.be"},"directories":{},"maintainers":[{"name":"twostack","email":"contact@twostack.be"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eslint-config_0.4.0_1784892203225_0.1514399030765996"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T19:32:02.351Z","modified":"2026-07-24T11:23:23.507Z","0.1.0":"2026-07-22T19:32:02.710Z","0.2.0":"2026-07-23T13:51:34.365Z","0.3.0":"2026-07-24T09:22:17.846Z","0.4.0":"2026-07-24T11:23:23.366Z"},"license":"MIT","description":"Applomb's ESLint rules — the quality contract for Applomb-generated apps (base + react-native presets).","maintainers":[{"name":"twostack","email":"contact@twostack.be"}],"readme":"# @applomb/eslint-config\n\nApplomb's ESLint rules — the quality contract every Applomb-generated app is\nborn with. Published so exported apps keep linting (and upgrading) outside\nApplomb: no lock-in.\n\n## Usage (flat config, ESLint ≥9)\n\n```js\n// eslint.config.mjs — web apps\nimport applomb from \"@applomb/eslint-config\";\nexport default applomb;\n```\n\n```js\n// eslint.config.mjs — React Native / Expo apps\nimport applombReactNative from \"@applomb/eslint-config/react-native\";\nexport default applombReactNative;\n```\n\n## What it enforces\n\n- `@applomb/no-hardcoded-strings` — user-facing text goes through i18n keys\n  (RN preset adds `accessibilityLabel`, `accessibilityHint`, …)\n- `@applomb/no-hardcoded-colors` — semantic design tokens only\n- RN preset: FlashList/expo-image import bans (no RN `FlatList`/`Image`),\n  react-hooks rules as errors\n- RN preset: supabase is import-banned under `app/` — screens never fetch,\n  data and auth actions go through `use<Entity>Query`/`Mutation` hooks\n- RN preset: `@applomb/no-font-weight` — no `fontWeight` in styles, no\n  Tailwind weight utilities (`font-bold`, `font-[600]`) in className; weight\n  travels via the font family classes (Android renders no synthetic weights\n  with custom fonts)\n- `@applomb/no-unchecked-ts-escape` — no `@ts-ignore`/`@ts-nocheck`, a\n  description required on `@ts-expect-error`, and no `any` without a\n  justifying comment on the same or previous line\n\nVersioning: generated apps pin an exact version at birth; upgrades are\nexplicit (`npm i @applomb/eslint-config@latest` works like any package).\n","readmeFilename":"README.md"}