ci(docs): linter bump version + expand scope (#30860)

This commit is contained in:
Charis authored and GitHub committed 2024-12-04 20:37:49 +00:00
1 parent 0ecd2446ff
commit 4cecae1e09
23 files changed
+462 -160

No files matched your search

+9 -3
View File
@@ -16,8 +16,10 @@ jobs:
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
sparse-checkout: |
supa-mdx-lint.config.toml
supa-mdx-lint
apps/docs/content
- name: cache cargo
id: cache-cargo
@@ -28,17 +30,21 @@ jobs:
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
key: 2d535367b06fe62354035464cf8334929bafca85
key: 6435a4cd1eeea7c2bbd343731de7e8a5127cb2d1
- name: install linter
if: steps.cache-cargo.outputs.cache-hit != 'true'
run: cargo install --locked --git https://github.com/supabase-community/supa-mdx-lint --rev 2d535367b06fe62354035464cf8334929bafca85
run: cargo install --locked --git https://github.com/supabase-community/supa-mdx-lint --rev 6435a4cd1eeea7c2bbd343731de7e8a5127cb2d1
- name: install reviewdog
uses: reviewdog/action-setup@3f401fe1d58fe77e10d665ab713057375e39b887 # v1.3.0
with:
reviewdog_version: v0.20.2
- name: run linter
env:
BASE_REF: ${{ github.base_ref }}
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -o pipefail
supa-mdx-lint apps/docs/content/guides/getting-started apps/docs/content/guides/ai apps/docs/content/guides/auth --format rdf | tee >(cat) | reviewdog -f=rdjsonl -reporter=github-pr-review
git diff --name-only origin/$BASE_REF HEAD \
| grep -E "^apps/docs/content/guides/(getting-started|ai|api|auth|database|deployment|functions)/" \
| xargs -r supa-mdx-lint --format rdf \
| reviewdog -f=rdjsonl -reporter=github-pr-review
@@ -1,13 +1,13 @@
---
id: 'auth-captcha'
title: 'Enable Captcha Protection'
description: 'Add Captcha Protection to your Supabase project'
title: 'Enable CAPTCHA Protection'
description: 'Add CAPTCHA Protection to your Supabase project'
tocVideo: 'em1cpOAXknM'
---
Supabase provides you with the option of adding captcha to your sign-in, sign-up, and password reset forms. This keeps your website safe from bots and malicious scripts. Supabase authentication has support for [hCaptcha](https://www.hcaptcha.com/) and [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/).
Supabase provides you with the option of adding CAPTCHA to your sign-in, sign-up, and password reset forms. This keeps your website safe from bots and malicious scripts. Supabase authentication has support for [hCaptcha](https://www.hcaptcha.com/) and [Cloudflare Turnstile](https://www.cloudflare.com/products/turnstile/).
## Sign up for Captcha
## Sign up for CAPTCHA
<Tabs
scrollable
@@ -39,13 +39,13 @@ In the Settings page, look for the **Sitekey** section and copy the key.
</TabPanel>
</Tabs>
## Enable Captcha protection for your Supabase project
## Enable CAPTCHA protection for your Supabase project
Navigate to the **[Auth](https://supabase.com/dashboard/project/_/settings/auth)** section of your Project Settings in the Supabase Dashboard and find the **Enable Captcha protection** toggle under Settings > Authentication > Bot and Abuse Protection > Enable Captcha protection.
Select your CAPTCHA provider from the dropdown, enter your Captcha **Secret key**, and click **Save**.
## Add the Captcha frontend component
## Add the CAPTCHA frontend component
The frontend requires some changes to provide the captcha on-screen for the user. This example uses React and the corresponding Captcha React component, but both Captcha providers can be used with any JavaScript framework.
@@ -54,7 +54,7 @@ In addition to the pre-configured extensions, you can also install your own SQL
</Admonition>
### Upgrade Extensions
### Upgrade extensions
If a new version of an extension becomes available on Supabase, you need to initiate a software upgrade in the [Infrastructure Settings](https://supabase.com/dashboard/project/_/settings/infrastructure) to access it. Software upgrades can also be initiated by restarting your server in the [General Settings](https://supabase.com/dashboard/project/_/settings/general).
@@ -58,7 +58,7 @@ drop extension if exists rum;
### Syntax
#### For type: tsvector
#### For type: `tsvector`
To understand the following you may need first to see [Official PostgreSQL documentation on text
search](https://www.postgresql.org/docs/current/functions-textsearch.html)
@@ -116,7 +116,7 @@ SELECT id, d, d `<=>` '2016-05-16 14:21:25' FROM tsts WHERE t @@ 'wr&qh' ORDER B
(5 rows)
```
#### For type: anyarray
#### For type: `anyarray`
`rum_anyarray_ops`
@@ -12,7 +12,7 @@ PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/
roles.
</Admonition>
## Policies at the Row Level
## Policies at the row level
Policies in Row Level Security (RLS) are used to restrict access to rows in a table. Think of them like adding a `WHERE` clause to every query.
@@ -35,7 +35,7 @@ update
However, this gives the post owner full access to update the row, including all of the columns.
## Privileges at the Column Level
## Privileges at the column level
To restrict access to columns, you can use [Privileges](https://www.postgresql.org/docs/current/ddl-priv.html).
@@ -80,7 +80,7 @@ You can view and edit the privileges in the [Supabase Studio](https://supabase.c
![Column level privileges](/docs/img/guides/privileges/column-level-privileges-2.png)
## Manage column privileges in Migrations
## Manage column privileges in migrations
While you can manage privileges directly from the Dashboard, as your project grows you may want to manage them in your migrations. Read about database migrations in the [Local Development](https://supabase.com/docs/guides/getting-started/local-development#database-migrations) guide.
@@ -46,7 +46,7 @@ When you created your project you were also asked to enter a password. This is a
Changing the password does not result in any downtime. All connected services, such as postgrest, pgbouncer, and other Supabase managed services, are automatically updated to use the latest password to ensure availability. However, if you have any external services connecting to the Supabase database using hardcoded username/password credentials, a manual update will be required.
## Granting Permissions
## Granting permissions
Roles can be granted various permissions on database objects using the `GRANT` command. Permissions include `SELECT`, `INSERT`, `UPDATE`, and `DELETE`. You can configure access to almost any object inside your database - including tables, views, functions, and triggers.
@@ -124,9 +124,9 @@ language sql;
The Supabase Dashboard contains tools to help you identify timed-out and long-running queries.
### Using the Log Explorer
### Using the Logs Explorer
Go to the [Log Explorer](/dashboard/project/_/logs/explorer), and run the following query to identify timed-out events (`statement timeout`) and queries that successfully run for longer than 10 seconds (`duration`).
Go to the [Logs Explorer](/dashboard/project/_/logs/explorer), and run the following query to identify timed-out events (`statement timeout`) and queries that successfully run for longer than 10 seconds (`duration`).
```sql
select
@@ -27,6 +27,8 @@ connection_string.../postgres?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE
# Errors
{/* supa-mdx-lint-disable-next-line Rule001HeadingCase */}
## ... prepared statement already exists
Supavisor in transaction mode (port 6543) does not support [prepared statements](https://www.postgresql.org/docs/current/sql-prepare.html), which Prisma will try to create in the background.
@@ -162,7 +164,7 @@ An alternative strategy to reference these tables is to duplicate values into Pr
<details>
<summary>Show/Hide Details</summary>
```sql table_in_public
-- Create the 'profiles' table in the 'public' schema
create table public.profiles (
@@ -34,7 +34,7 @@ limit 10;
In this query, there are several parts that indexes could likely help in optimizing the performance:
### `where` Clause:
### `where` clause:
The `where` clause filters rows based on certain conditions, and indexing the columns involved can improve this process:
@@ -47,7 +47,7 @@ create index idx_customers_sign_up_date on customers (sign_up_date);
create index idx_orders_status on orders (status);
```
### `join` Columns
### `join` columns
Indexes on the columns used for joining tables can help Postgres avoid scanning tables in their entirety when connecting tables.
@@ -58,7 +58,7 @@ Indexes on the columns used for joining tables can help Postgres avoid scanning
create index idx_orders_customer_id on orders (customer_id);
```
### `order by` Clause
### `order by` clause
Sorting can also be optimized by indexing:
@@ -114,7 +114,7 @@ Deno.serve(async (req) => {
})
```
### 3. Create React Email Templates
### 3. Create React Email templates
Create a new folder `_templates` and create a new file `magic-link.tsx` with the following code:
@@ -296,7 +296,7 @@ supabase secrets set --env-file supabase/functions/.env
That's it, now your Supabase Edge Function will be triggered anytime an Auth Email needs to be send to the user!
## More Resources
## More resources
- [Send Email Hooks](/docs/guides/auth/auth-hooks/send-email-hook)
- [Auth Hooks](/docs/guides/auth/auth-hooks)
@@ -138,7 +138,7 @@ function hexToUint8Array(hex: string) {
}
```
## Deploy the Slash Command handler
## Deploy the slash command handler
```bash
supabase functions deploy discord-bot --no-verify-jwt
@@ -154,7 +154,7 @@ Navigate to your Function details in the Supabase Dashboard to get your Endpoint
The application is now ready. Let's proceed to the next section to install it.
## Install the Slash Command on your Discord server
## Install the slash command on your Discord server
So to use the `hello` Slash Command, we need to install our Greeter application on our Discord server. Here are the steps:
@@ -18,14 +18,14 @@ Push notifications are an important part of any mobile app. They allow you to se
Find the example code on [GitHub](https://github.com/supabase/supabase/blob/master/examples/user-management/expo-push-notifications/).
## Supabase Setup
## Supabase setup
- [Create a new Supabase project](https://database.new).
- Link your project: `supabase link --project-ref your-supabase-project-ref`
- Start supabase locally: `supabase start`
- Push up the schema: `supabase db push` (schema is defined in [supabase/migrations](https://github.com/supabase/supabase/blob/master/examples/user-management/expo-push-notifications/supabase/migrations/))
## Expo Setup
## Expo setup
To utilize Expo's push notification service, you must configure your app by installing a set of libraries, implementing functions to handle notifications, and setting up credentials for Android and iOS. Follow the official [Expo Push Notifications Setup Guide](https://docs.expo.dev/push-notifications/push-notifications-setup/) to get the credentials for Android and iOS. This project uses [Expo's EAS build](https://docs.expo.dev/build/introduction/) service to simplify this part.
@@ -126,7 +126,7 @@ Push notifications are an important part of any mobile app. They allow you to se
This guide will show you how to send push notifications to your app when a new row is inserted into a table using FCM, Supabase Edge Functions, and database web hooks.
## Supabase Setup
## Supabase setup
We will create two tables. One to store the user's FCM token and a `notifications` table. The edge function will be triggered when a new row is inserted into the `notifications` table and sends a push notification to the user.
@@ -258,7 +258,7 @@ Push notifications are an important part of any mobile app. They allow you to se
}
```
## FCM Setup
## FCM setup
1. Follow the official [FCM Setup Guide](https://firebase.google.com/docs/cloud-messaging) to set up FCM for your client side application.
1. Generate a new service account private key from the Firebase console `Project Settings > Service Accounts > Generate new private key`.
@@ -61,7 +61,7 @@ Deno.serve(async (req) => {
})
```
## Create a Postgres Function and RPC
## Create a Database Function and RPC
With the embeddings now stored in your Postgres database table, you can query them from Supabase Edge Functions by utilizing [Remote Procedure Calls (RPC)](/docs/guides/database/functions?language=js).
@@ -79,7 +79,7 @@ supabase functions deploy sentryfied --no-verify-jwt
Find the complete example on [GitHub](https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/sentryfied/index.ts).
## Working With Scopes
## Working with scopes
Sentry Deno SDK currently do not support `Deno.serve` instrumentation, which means that there is no scope separation between requests.
Because of that, when the Edge Functions runtime is reused between multiple requests, all globally captured breadcrumbs and contextual data
@@ -12,7 +12,7 @@ Developing with Edge Functions is similar to developing with Node.js, but with a
There are two ways to manage your dependencies in Supabase Edge Functions:
### Using deno.json (Recommended)
### Using deno.json (recommended)
<Admonition type="info">
@@ -50,7 +50,7 @@ The recommended file structure when using `deno.json`:
└── config.toml
```
### Using Import Maps (Legacy)
### Using import maps (legacy)
Import Maps are a legacy way to manage dependencies, similar to a `package.json` file. While still supported, we recommend using `deno.json`. If both exist, `deno.json` takes precedence.
@@ -112,7 +112,7 @@ Supabase Edge Functions support several ways to import dependencies:
- Built-in [Node APIs](https://docs.deno.com/runtime/manual/node/compatibility)
- Third party modules published to [JSR](https://jsr.io/) or [deno.land/x](https://deno.land/x)
### NPM Modules
### NPM modules
You can import npm modules using the `npm:` specifier:
@@ -120,7 +120,7 @@ You can import npm modules using the `npm:` specifier:
import { createClient } from 'npm:@supabase/supabase-js@2'
```
### Node.js Built-ins
### Node.js built-ins
For Node.js built-in APIs, use the `node:` specifier:
@@ -130,7 +130,7 @@ import process from 'node:process'
Learn more about npm specifiers and Node built-in APIs in [Deno's documentation](https://docs.deno.com/runtime/manual/node/npm_specifiers).
### Importing from Private Registries
### Importing from private registries
<Admonition type="info">
@@ -61,9 +61,9 @@ Deno.serve(async (req) => {
})
```
## Logging Tips
## Logging tips
### Logging Request Headers
### Logging request headers
When debugging Edge Functions, a common mistake is to try to log headers to the developer console via code like this:
@@ -88,7 +88,7 @@ The reason behind this behavior is that [Headers](https://developer.mozilla.org/
However, `Headers` objects are iterable. You can utilize this feature to craft a couple of succinct one-liners for debugging and printing headers.
### Convert headers into an object with Object.fromEntries:
### Convert headers into an object with `Object.fromEntries`:
You can use `Object.fromEntries` which is a call to convert the headers into an object:
@@ -15,7 +15,7 @@ To combine multiple endpoints into a single Edge Function, you can use web appli
Let's dive into some examples.
## Routing with Frameworks
## Routing with frameworks
Here's a simple hello world example using some popular web frameworks.
@@ -158,7 +158,7 @@ curl --request POST 'https://<project_ref>.supabase.co/functions/v1/hello-world'
We should see a response printing `Hello Foo!`.
## Using Route Parameters
## Using route parameters
We can use route parameters to capture values at specific URL segments (eg: `/tasks/:taskId/notes/:noteId`).
@@ -415,7 +415,7 @@ Deno.serve(async (req) => {
</TabPanel>
</Tabs>
## URL Patterns API
## URL patterns API
If you prefer not to use a web framework, you can directly use [URLPattern API](https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API) within your Edge Functions to implement routing.
This is ideal for small apps with only couple of routes and you want to have a custom matching algorithm.
@@ -5,6 +5,8 @@ description: 'Edge Functions can return following status codes.'
subtitle: 'Edge Functions can return following status codes.'
---
{/* supa-mdx-lint-disable Rule001HeadingCase */}
## 2XX Success
A successful Edge Function Response
@@ -30,6 +30,8 @@ If your Edge Function takes too long to respond or times out:
- If the boot times are similar, it’s likely an issue with your function’s code, such as a large dependency, a slow API call, or a complex computation. You can try to optimize your code, reduce the size of your dependencies, or use caching techniques to improve the performance of your function.
- If only some of the `booted` events are slow, find the affected `region` in the metadata and submit a support request via the "Help" button at the top.
{/* supa-mdx-lint-disable-next-line Rule001HeadingCase */}
### Receiving 546 Error Response
The 546 error response might occur because:
@@ -47,7 +49,7 @@ The 546 error response might occur because:
## Advanced techniques
### Monitoring Edge Function Resource Usage
### Monitoring Edge Function resource usage
To determine how much memory and CPU your Edge Function consumes, follow these steps:
@@ -62,7 +64,7 @@ To determine how much memory and CPU your Edge Function consumes, follow these s
resources.
</Admonition>
### Understanding CPU soft and hard Limits
### Understanding CPU soft and hard limits
An isolate is like a worker that can handle multiple requests for a function. It works until a time limit of 400 seconds is reached. Now, there are two types of limits for the CPU.
@@ -89,7 +91,7 @@ When analyzing dependencies for your Supabase Edge Functions, it's essential to
By selectively importing only the required submodules, you can effectively reduce the size of your function's dependencies and optimize its performance.
Before finalizing your imports, ensure to review both Deno and NPM dependencies, checking for any unnecessary or redundant dependencies that can be removed. Additionally, check for outdated dependencies and update to the latest versions if possible.
#### Deno Dependencies
#### Deno dependencies
Run `deno info`, providing the path to your input map if you use one.
Review the dependencies listed in the output. Pay attention to any significantly large dependencies, as they can contribute to increased bundle size and potential boot time issues.
@@ -99,7 +101,7 @@ Examine if there are any unnecessary or redundant dependencies that can be remov
deno info --import-map=/path/to/import_map.json /path/to/function/index.ts
```
#### NPM Dependencies
#### NPM dependencies
Additionally, if you utilize NPM modules in your Edge Functions, it's crucial to be mindful of their size and impact on the overall bundle size. While importing NPM modules, consider using the notation `import { submodule } from 'npm:package/submodule'` to selectively import specific submodules rather than importing the entire package. This approach can help minimize unnecessary overhead and streamline the execution of your function.
@@ -88,7 +88,7 @@ server.listen(8080);
</TabPanel>
</Tabs>
### Outbound Websockets
### Outbound WebSockets
You can also establish an outbound WebSocket connection to another server from an Edge Function.
+11 -112
View File
@@ -1,115 +1,14 @@
ignore_patterns = ["**/_*.mdx"]
# Heading should be sentence case
[Rule001HeadingCase]
# Words that may be uppercased even if they are not the first word in the sentence.
# Can also specify a regex that is compatible with the [Rust regex crate](https://docs.rs/regex/latest/regex/).
may_uppercase = [
"[A-Z0-9]{2,5}",
"APIs",
"Android",
"Angular",
"Apple",
"Auth",
"Auth0",
"Auth0 Actions?",
"Azure",
"Azure Developers?",
"Bitbucket",
"Boolean",
"Captcha",
"ChatGPT",
"Chrome",
"Code Exchange",
"Content Delivery Network",
"Dart",
"Discord",
"Edge Functions?",
"Expo",
"Facebook",
"Facebook Developers?",
"Figma",
"Figma Developers?",
"Firebase",
"Firebase Authentication",
"Flutter",
"GitHub",
"GitHub Actions",
"GitLab",
"GoTrue",
"Google",
"GraphQL",
"Hooks?",
"Hugging Face",
"I",
"IVFFlat",
"Inbucket",
"Ionic Angular",
"Ionic React",
"Ionic Vue",
"JavaScript",
"JWTs",
"Kakao",
"Kakao Developers?",
"Kakao Login",
"Keycloak",
"Kotlin",
"Kotlin Multiplatform",
"LinkedIn",
"LinkedIn Developers?",
"Linux",
"Magic Link",
"Navigable Small World",
"Next.js",
"Notion",
"Nuxt",
"OAuth",
"OpenAI",
"Open ID Connect",
"Poetry",
"Postgres",
"PostgreSQL",
"PostgREST",
"Python",
"React",
"React Native",
"Reciprocal Ranked Fusion",
"RedwoodJS",
"Remix",
"Retrieval Plugin",
"Roboflow Inference",
"Row Level Security",
"Server-Side Auth",
"Server-Side Rendering",
"Single Sign-On",
"Slack",
"Slack Developers?",
"SolidJS",
"Spotify",
"Spotify Developers?",
"Supabase",
"Svelte",
"SvelteKit",
"Swift",
"SwiftUI",
"Third-Party Auth",
"Twitch",
"Twitch Developers?",
"Twitter",
"Twitter Developers?",
"TypeScript",
"URIs",
"URLs",
"Xcode",
"Vecs",
"Vue",
"Web",
"Windows",
"WorkOS",
"Wrappers",
"Zoom",
"Zoom Developers?",
]
# Words that may be lowercased even if they are the first word in the sentence.
# Can also specify a regex that is compatible with the [Rust regex crate](https://docs.rs/regex/latest/regex/).
may_lowercase = ["iOS"]
Rule001HeadingCase = "include('supa-mdx-lint/Rule001HeadingCase.toml')"
Rule003Spelling = false
# Check spelling
# Error message: "Word not found in dictionary"
# Rule003Spelling = "include('supa-mdx-lint/Rule003Spelling.toml')"
Rule002AdmonitionTypes = false
# [Rule002AdmonitionTypes]
# Allowed admonition types are:
# admonition_types = ["note", "tip", "caution", "deprecation", "danger"]
+200
View File
@@ -0,0 +1,200 @@
# Heading should be sentence case
# Words that may be uppercased even if they are not the first word in the sentence.
# Can also specify a regex that is compatible with the [Rust regex crate](https://docs.rs/regex/latest/regex/).
may_uppercase = [
"[A-Z0-9]{2,5}s?",
"Amazon RDS",
"APIs",
"Analytics",
"Android",
"Angular",
"Apple",
"Audit Logs?",
"Auth",
"Auth0",
"Auth0 Actions?",
"Azure",
"Azure Developers?",
"BigQuery",
"Bitbucket",
"Bitbucket Pipelines",
"Boolean",
"Broadcast",
"CAPTCHA",
"Channel",
"ChatGPT",
"Chrome",
"Chrome Developer Tools",
"Cloudflare",
"Cloudflare Workers?",
"Code Exchange",
"Colab",
"Content Delivery Network",
"Cron Jobs?",
"Data API",
"DataDog",
"Dart",
"Dashboard",
"Database Functions?",
"Deno",
"DigitalOcean",
"Discord",
"Discord Developers?",
"Django",
"Docker",
"Drizzle",
"Edge Functions?",
"Enterprise Plan",
"Expo",
"Facebook",
"Facebook Developers?",
"Figma",
"Figma Developers?",
"Firebase",
"Firebase Authentication",
"Firestore",
"Flutter",
"Functions?",
"Free Plan",
"Git",
"GitHub",
"GitHub Actions",
"GitLab",
"GoTrue",
"Google",
"Grafana",
"GraphQL",
"Heroku",
"Homebrew",
"Hooks?",
"Hugging Face",
"I",
"IPv4",
"IPv6",
"IVFFlat",
"IdP",
"Inbucket",
"Index Advisor",
"IntelliJ",
"Ionic Angular",
"Ionic React",
"Ionic Vue",
"JavaScript",
"JSON Web Tokens?",
"JWTs",
"Kakao",
"Kakao Developers?",
"Kakao Login",
"Keycloak",
"Kotlin",
"Kotlin Multiplatform",
"Kysely",
"Large Language Models?",
"LinkedIn",
"LinkedIn Developers?",
"Linux",
"LlamaIndex",
"Llamafile",
"Logs Explorer",
"Magic Link",
"Mixpeek",
"Mixpeek Embed",
"MySQL",
"Navigable Small World",
"Neon",
"Next.js",
"Node.js",
"Notion",
"Nuxt",
"OAuth",
"Okta",
"Ollama",
"OpenAI",
"Open ID Connect",
"OrbStack",
"OrioleDB",
"PGAudit",
"Phoenix",
"Pro Plan",
"Podman",
"Poetry",
"Postgres",
"Postgres Changes",
"PostgreSQL",
"PostgREST",
"Presence",
"Prometheus",
"Python",
"Query Performance",
"React",
"React Email",
"React Native",
"Reciprocal Ranked Fusion",
"Redis",
"RedwoodJS",
"Remix",
"Render",
"Retrieval Plugin",
"Roboflow Inference",
"Row Level Security",
"Send Email Hook",
"SendGrid",
"Sentry",
"Server-Side Auth",
"Server-Side Rendering",
"Single Sign-On",
"Slack",
"Slack Developers?",
"SolidJS",
"Spotify",
"Spotify Developers?",
"Sqitch",
"Storage",
"Studio",
"Supabase",
"Supabase Marketplace",
"Supavisor('s)?",
"Svelte",
"SvelteKit",
"Swift",
"SwiftUI",
"Team Plan",
"Third-Party Auth",
"TimescaleDB",
"Transformers.js",
"Twilio",
"Twitch",
"Twitch Developers?",
"Twitter",
"Twitter Developers?",
"TypeScript",
"Uppy",
"Upstash",
"URIs",
"URLs",
"Unsplash",
"Xcode",
"Vault",
"VSCode",
"Vecs",
"Vercel",
"Vercel Marketplace",
"Visual Studio Code",
"Vue",
"Web",
"WebAssembly",
"WebP",
"WebSockets?",
"WebStorm",
"Windows",
"WorkOS",
"Wrappers",
"Write-Ahead Log(s|ging)?",
"Zoom",
"Zoom Developers?",
]
# Words that may be lowercased even if they are the first word in the sentence.
# Can also specify a regex that is compatible with the [Rust regex crate](https://docs.rs/regex/latest/regex/).
may_lowercase = ["iOS"]
+191
View File
@@ -0,0 +1,191 @@
# Check spelling
# Error message: "Word not found in dictionary"
#
# Allow list: Spellings that are actually correct, though they aren't in the
# dictionary.
#
# Prefixes: Strings that are not standalone words, but that can be used in a
# prefix before a hyphen, such as "pre" or "bi".
#
# Before adding a new word to the allow list, double check that it is in fact
# the correct casing for the word! Especially for styling of company and product
# names, the "official" casing might not be what you think.
allow_list = [
"[A-Za-z0-9_-]+(\\.[A-Z-a-z0-9_-]+)+(\\/[A-Za-z0-9_-]+)*",
"[KMG]iB",
"\\[#[A-Za-z0-9-]+\\]",
"\\$\\$.+?\\$\\$",
"\\S+\\.json",
"\\S+\\.toml",
"\\S+\\.yaml",
"[A-Z]{2,5}s?",
"[Aa]utovacuum(s|ing|ed)?",
"[Bb]ackend",
"[Bb]uilt-ins?",
"[Cc]onfigs?",
"[Cc]ooldowns?",
"[Cc]ron",
"[Dd]atasets?",
"[Dd]evs?",
"[Dd]ropdown",
"[Ee]nums?",
"[Ee]nv",
"[Ff]rontend",
"[Gg]zip(s|ed)?",
"[Mm]iddlewares?",
"[Mm]ultimodal",
"[Mm]ultipart",
"[Mm]ultithreading",
"[Nn]onces?",
"[Nn]ullable",
"[Pp]arams?",
"[Pp]laintext",
"[Pp]olyfill(s|ed)?",
"[Pp]ooler",
"[Qq]uickstarts?",
"[Rr]ealtime",
"[Rr]ebas(e|ed|es|ing)",
"[Rr]epos?",
"[Rr]untimes?",
"[Ss]erverless",
"[Ss]ubcommands?",
"[Ss]ubdomains?",
"[Ss]ubfolders?",
"[Ss]ubmodules?",
"[Tt]odos?",
"[Tt]radeoffs?",
"[Uu]pserts?",
"[Uu]ptime",
"[Ww]aitlists?",
"[Ww]ebhooks?",
"AndroidX",
"AsyncStorage",
"BigQuery",
"Bitbucket",
"CAPTCHA",
"ChatGPT",
"Clippy",
"Cloudflare",
"Colab",
"Database Functions?",
"DataDog",
"DevTools",
"DDoS",
"Deno",
"Django",
"Docker",
"Drizzle",
"Erlang",
"Firestore",
"GDScript",
"Git",
"GitHub",
"GitLab",
"GoTrue",
"Grafana",
"GraphQL",
"Heroku",
"Homebrew",
"Hono",
"IdP",
"ImageMagick",
"Inbucket",
"IntelliJ",
"IVFFlat",
"Jupyter",
"JWTs",
"Kotlin",
"Ktor",
"Kysely",
"LangChain",
"Laravel",
"LlamaIndex",
"Llamafile",
"Lua",
"Mixpeek",
"MySQL",
"Nano",
"Netlify",
"Next.js",
"NoSQL",
"Node.js",
"Nuxt",
"OAuth",
"Okta",
"Ollama",
"OpenAI",
"OrbStack",
"PascalCase",
"Podman",
"PostgREST",
"Postgres",
# We prefer Postgres, but check for vocabulary preference in a separate rule
"PostgreSQL",
"PubSub",
"Prisma",
"Redis",
"RedwoodJS",
"Roboflow",
"SDKs",
"SQLAlchemy",
"SQLite",
"SendGrid",
"Snaplet",
"SolidJS",
"Supavisor",
"SvelteKit",
"SwiftUI",
"Supabase",
"TimescaleDB",
"Transformers.js",
"Twilio",
"Undici",
"Unsplash",
"Uppy",
"Upstash",
"VSCode",
"Vecs",
"Vercel",
"Vite",
"Vue",
"WebAssembly",
"WebP",
"WebSockets?",
"WebStorm",
"Xcode",
"bcrypt",
"camelCase",
"deno-postgres",
"e.g.",
"gte-small",
"https?:\\/\\/\\S+",
"i.e.",
"iOS",
"localhost",
"macOS",
"npm",
"npmrc",
"pgAudit",
"pgsodium",
"pgvector",
"psql",
"scrypt",
"stdin",
"stdout",
"supabase-auth-ui",
"supabase-csharp",
"supabase-flutter",
"supabase-gdscript",
"supabase-go",
"supabase-js",
"supabase-kt",
"supabase-management-js",
"supabase-py",
"supabase-rb",
"supabase-swift",
"supautils",
"vecs",
]
prefixes = ["bi", "pre"]