diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index c49c990..0000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "./node_modules/oxfmt/configuration_schema.json", - "semi": false, - "ignorePatterns": [] -} diff --git a/.oxlintrc.json b/.oxlintrc.json deleted file mode 100644 index b99210f..0000000 --- a/.oxlintrc.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": null, - "categories": {}, - "rules": {}, - "settings": { - "jsx-a11y": { - "polymorphicPropName": null, - "components": {}, - "attributes": {} - }, - "next": { - "rootDir": [] - }, - "react": { - "formComponents": [], - "linkComponents": [], - "version": null, - "componentWrapperFunctions": [] - }, - "jsdoc": { - "ignorePrivate": false, - "ignoreInternal": false, - "ignoreReplacesDocs": true, - "overrideReplacesDocs": true, - "augmentsExtendsReplacesDocs": false, - "implementsReplacesDocs": false, - "exemptDestructuredRootsFromChecks": false, - "tagNamePreference": {} - }, - "vitest": { - "typecheck": false - } - }, - "env": { - "builtin": true - }, - "globals": {}, - "ignorePatterns": [] -} diff --git a/.zed/settings.json b/.zed/settings.json deleted file mode 100644 index 98bc17b..0000000 --- a/.zed/settings.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "languages": { - "JSON": { - "language_servers": ["vtsls", "oxfmt", "json-language-server"], - "formatter": "language_server" - }, - "JSONC": { - "language_servers": ["vtsls", "oxfmt", "json-language-server"], - "formatter": "language_server" - }, - "JavaScript": { - "language_servers": ["vtsls", "oxfmt"], - "formatter": "language_server" - }, - "TypeScript": { - "language_servers": ["vtsls", "oxfmt"], - "formatter": "language_server" - } - } -} diff --git a/README.md b/README.md index 38049df..c4add89 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,9 @@ This typically generates modules under `src/lexicons` (or your configured output ## Quick start ```ts -import { defineCollection } from "astro:content"; -import { atLoader } from "at-astro-loader"; -import * as app from "../src/lexicons/app"; +import { defineCollection } from "astro:content" +import { atLoader } from "at-astro-loader" +import * as app from "../src/lexicons/app" export const collections = { posts: defineCollection({ @@ -47,7 +47,7 @@ export const collections = { reverse: true, }), }), -}; +} ``` ## API @@ -65,9 +65,9 @@ Creates a regular Astro content loader (`Loader`) that fetches records via `clie Example: ```ts -import { defineCollection } from "astro:content"; -import { atLoader } from "at-astro-loader"; -import * as app from "../src/lexicons/app"; +import { defineCollection } from "astro:content" +import { atLoader } from "at-astro-loader" +import * as app from "../src/lexicons/app" const posts = defineCollection({ loader: atLoader(app.bsky.feed.post, { @@ -75,7 +75,7 @@ const posts = defineCollection({ limit: 100, reverse: true, }), -}); +}) ``` ### `atLiveLoader(ns, config?)` @@ -90,16 +90,16 @@ Creates an Astro `LiveLoader` backed by an ATProto record schema. Example: ```ts -import { defineCollection } from "astro:content"; -import { atLiveLoader } from "at-astro-loader"; -import * as app from "../src/lexicons/app"; +import { defineCollection } from "astro:content" +import { atLiveLoader } from "at-astro-loader" +import * as app from "../src/lexicons/app" const posts = defineCollection({ loader: atLiveLoader(app.bsky.feed.post, { repo: "myhandle.com", endpoint: "https://public.api.bsky.app", }), -}); +}) ``` ### `atZodSchema(ns)` @@ -107,10 +107,10 @@ const posts = defineCollection({ Builds a Zod schema using the lexicon schema `safeParse`, useful when you need schema reuse outside `atLoader`. ```ts -import { atZodSchema } from "at-astro-loader"; -import * as app from "../src/lexicons/app"; +import { atZodSchema } from "at-astro-loader" +import * as app from "../src/lexicons/app" -const postSchema = atZodSchema(app.bsky.feed.post); +const postSchema = atZodSchema(app.bsky.feed.post) ``` ## Config (`ATLoaderConfig`) diff --git a/bun.lock b/bun.lock index faa5944..05e6bd9 100644 --- a/bun.lock +++ b/bun.lock @@ -15,6 +15,7 @@ "@typescript/native-preview": "^7.0.0-dev.20260420.1", "oxfmt": "^0.46.0", "oxlint": "^1.61.0", + "oxlint-tsgolint": "^0.22.1", "tsdown": "^0.21.9", "typescript": "^6.0.3", }, @@ -257,6 +258,18 @@ "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.46.0", "", { "os": "win32", "cpu": "x64" }, "sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA=="], + "@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.22.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4150Lpgc1YM09GcjA6GSrra1JoPjC7aOpfywLjWEY4vW0Sd1qKzqHF1WRaiw0/qUZ40OATYdv3aRd7ipPkWQbw=="], + + "@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.22.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-vFWcPWYOgZs4HWcgS1EjUZg33NLcNfEYU49KGImmCfZWkflENrmBYV4HN/C0YeAPum6ZZ/goPSvQrB/cOD+NfA=="], + + "@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.22.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-6LiUpP0Zir3+29FvBm7Y28q/dBjSHqTZ5MhG1Ckw4fGhI4cAvbcwXaKvbjx1TP7rRmBNOoq/M5xdpHjTb+GAew=="], + + "@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.22.1", "", { "os": "linux", "cpu": "x64" }, "sha512-fuX1hEQfpHauUbXADsfqVhRzrUrGabzGXbj5wsp2vKhV5uk/Rze8Mba9GdjFGECzvXudMGqHqxB4r6jGRdhxVA=="], + + "@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.22.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SZidAj+jrbZf9ZjBEYW0tiNZ+KasqB2zgW26qdiPpQSF/DzURnPmXz651IeA9YsmbVdHGIooEHUmev6QJdquA=="], + + "@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.22.1", "", { "os": "win32", "cpu": "x64" }, "sha512-QweSk9H5lFh5Y+WUf2Kq/OAN88V6+62ZwGhP38gqdRotI90luXSMkruFTj7Q2rYrzH4ZVNaSqx7NY8JpSfIzqg=="], + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.61.0", "", { "os": "android", "cpu": "arm" }, "sha512-6eZBPgiigK5txqoVgRqxbaxiom4lM8AP8CyKPPvpzKnQ3iFRFOIDc+0AapF+qsUSwjOzr5SGk4SxQDpQhkSJMQ=="], "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.61.0", "", { "os": "android", "cpu": "arm64" }, "sha512-CkwLR69MUnyv5wjzebvbbtTSUwqLxM35CXE79bHqDIK+NtKmPEUpStTcLQRZMCo4MP0qRT6TXIQVpK0ZVScnMA=="], @@ -809,6 +822,8 @@ "oxlint": ["oxlint@1.61.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.61.0", "@oxlint/binding-android-arm64": "1.61.0", "@oxlint/binding-darwin-arm64": "1.61.0", "@oxlint/binding-darwin-x64": "1.61.0", "@oxlint/binding-freebsd-x64": "1.61.0", "@oxlint/binding-linux-arm-gnueabihf": "1.61.0", "@oxlint/binding-linux-arm-musleabihf": "1.61.0", "@oxlint/binding-linux-arm64-gnu": "1.61.0", "@oxlint/binding-linux-arm64-musl": "1.61.0", "@oxlint/binding-linux-ppc64-gnu": "1.61.0", "@oxlint/binding-linux-riscv64-gnu": "1.61.0", "@oxlint/binding-linux-riscv64-musl": "1.61.0", "@oxlint/binding-linux-s390x-gnu": "1.61.0", "@oxlint/binding-linux-x64-gnu": "1.61.0", "@oxlint/binding-linux-x64-musl": "1.61.0", "@oxlint/binding-openharmony-arm64": "1.61.0", "@oxlint/binding-win32-arm64-msvc": "1.61.0", "@oxlint/binding-win32-ia32-msvc": "1.61.0", "@oxlint/binding-win32-x64-msvc": "1.61.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-ZC0ALuhDZ6ivOFG+sy0D0pEDN49EvsId98zVlmYdkcXHsEM14m/qTNUEsUpiFiCVbpIxYtVBmmLE87nsbUHohQ=="], + "oxlint-tsgolint": ["oxlint-tsgolint@0.22.1", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.22.1", "@oxlint-tsgolint/darwin-x64": "0.22.1", "@oxlint-tsgolint/linux-arm64": "0.22.1", "@oxlint-tsgolint/linux-x64": "0.22.1", "@oxlint-tsgolint/win32-arm64": "0.22.1", "@oxlint-tsgolint/win32-x64": "0.22.1" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg=="], + "p-limit": ["p-limit@7.3.0", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw=="], "p-queue": ["p-queue@9.1.0", "", { "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^7.0.0" } }, "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw=="], diff --git a/oxfmt.config.ts b/oxfmt.config.ts new file mode 100644 index 0000000..855f14f --- /dev/null +++ b/oxfmt.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from "oxfmt" + +export default defineConfig({ + semi: false, + ignorePatterns: ["./src/lexicons/**/*", "./lexicons/**/*"], +}) diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000..e8347b6 --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "oxlint" + +export default defineConfig({ + plugins: ["eslint", "typescript", "unicorn", "oxc"], + options: { + typeAware: true, + typeCheck: true, + }, + env: { + builtin: true, + }, + rules: { + "typescript/switch-exhaustiveness-check": "error", + }, +}) diff --git a/package.json b/package.json index 9a35a2c..7ac3b45 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@typescript/native-preview": "^7.0.0-dev.20260420.1", "oxfmt": "^0.46.0", "oxlint": "^1.61.0", + "oxlint-tsgolint": "^0.22.1", "tsdown": "^0.21.9", "typescript": "^6.0.3" }, diff --git a/tsdown.config.ts b/tsdown.config.ts index 6cf33be..dfe76d5 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from "tsdown"; +import { defineConfig } from "tsdown" export default defineConfig({ entry: ["./src/index.ts", "./src/lexicons.ts"], -}); +})