{"owner":"teableio","repo":"teable","hasSkills":true,"totalSkillsCount":8,"totalTokensCount":3479,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/common-i18n/README.md","packages/core/README.md","packages/core/src/formula/parser/README.md","packages/db-main-prisma/README.md","packages/eslint-config-bases/README.md","packages/sdk/README.md","packages/ui-lib/README.md","packages/ui-lib/src/icons/social/README.md"],"skills":{"packages/common-i18n/README.md":"# @teable/common-i18n\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nOne possible way to share locales amongst apps in the monorepo.\n\n### Usage\n\nAdd the workspace dependency to the consuming app or package.\n\n```bash\nyarn add @teable/common-locales:\"workspace:^\"\n```\n\nAdd an alias in tsconfig.js to enable fast-refresh.\n\n```json5\n{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@teable/common-i18n\": [\"../../../packages/common-i18n/src/index\"],\n      \"@teable/common-i18n/locales/*\": [\"../../../packages/common-i18n/src/locales/*\"],\n    },\n  },\n}\n```\n\nOptionally create a file named `./types.d/react-i18next.d.ts` to enable typechecks and autocompletion of keys.\n\n```typescript\nimport \"react-i18next\";\nimport type { I18nNamespaces } from \"@teable/common-i18n\";\n\ndeclare module \"react-i18next\" {\n  interface CustomTypeOptions {\n    defaultNS: \"common\";\n    resources: I18nNamespaces;\n  }\n}\n```\n","packages/core/README.md":"# @teable/core\n\n> **Note**\n> This package is part of [teableio/teable](https://github.com/teableio/teable).\n\nA package holding some basic typescript utilities: typeguards, assertions...\n\n- [x] Packaged as ES module (type: module in package.json).\n- [x] Can be build with tsup (no need if using tsconfig aliases).\n- [x] Simple unit tests demo with either Vitest (`pnpm test-unit`) or TS-Jest (`pnpm test-unit-jest`).\n\n## Install\n\nFrom any package or apps:\n\n```bash\nyarn add @teable/core@\"workspace:^\"\n```\n\n## Enable aliases\n\n```json5\n{\n  //\"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \"./src\",\n    \"paths\": {\n      \"@teable/core\": [\"../../../packages/core/src/index\"],\n    },\n  },\n}\n```\n\n## Consume\n\n```typescript\nimport { isPlainObject } from \"@teable/core\";\n\nisPlainObject(true) === false;\n```\n","packages/core/src/formula/parser/README.md":"# Formula Language\n\nThis directory contains the [ANLTR Grammar](https://www.antlr.org/) for Teable formula\n\n## Making changes to the language\n\nIf you want to make changes to the syntax of the formula language first you must update\nthe grammar .g4 files found in this directory. Once done you will then need to run `pnpm antlr4ts`\nto re-build it.\n","packages/db-main-prisma/README.md":"# @teable/db-main-prisma\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nBasic demo of a shared package using [prisma](<(https://prisma.io)>) to handle database access, part of the [nextjs-monorepo-example](https://github.com/teableio/teable)\n\n## Quick start\n\nStart the database with `docker-compose up database` then run\n\n```bash\ncd packages/db-main-prisma\nyarn prisma-db-push\n```\n\n> See the .env(.local|.production|.development) file to edit the connection.\n> **Curious about the setup ?**, we use [dotenv-flow](https://github.com/kerimdzhanov/dotenv-flow) under the hood read [this](https://github.com/prisma/prisma/issues/3865)\n> and see the script section of [./package.json](./package.json)\n\n## Install\n\n### Database\n\n#### Option 0: sqlite local\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the sqlite file main.db\n\n#### Option 1: Postgresql local (deprecated)\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the postgresql service defined in [../../docker-compose.yml](../../dockers/docker-compose.yml).\n\nEnsure you have docker and docker-compose and run\n\n```bash\n# In the root folder\ndocker-compose up database\n# Alternatively, from any folder\nyarn docker:up\n```\n\n#### Option 2: An hosted postgres instance (deprecated)\n\nTo quick start, you can use a free tier at supabase.io, but all providers will work.\n\nAs an example, simply create an `.env.local` and set the supabase pgbouncer url:\n\n```env\nPRISMA_DATABASE_URL=postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres?schema=public&pgbouncer=true&sslmode=require&sslaccept=strict&sslcert=../config/certs/supabase-prod-ca-2021.crt\n```\n\n> You can append `&connection_limit=1` if deploying on a serverless/lambda provider (ie: vercel, netlify...)\n\n## DB creation\n\nTo create the database, simply run\n\n```bash\nyarn prisma-db-push\n```\n\n## DB type generation\n\nCreate or update the types. This is generally automatically done in\na postinstall from any app, see script section of [../../apps/nextjs-app/package.json](../../apps/nextjs-app/package.json)\nor try it out with `yarn workspace web-app postinstall`\n\n```bash\nyarn prisma generate\n```\n","packages/eslint-config-bases/README.md":"# @teable/eslint-config-bases\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n# About\n\nExample of composable eslint config bases that can be easily shared and fine-tuned by apps and\npackages that lives in a [monorepo](https://github.com/teableio/teable).\n\n## Features\n\n## Features\n\n- **Monorepo friendly:** Each workspace can have its own config.\n- **Composable:** Compose your workspace eslint config from pre-defined bases.\n- **Peace of mind:** Plugins does not need to be installed per workspaces, thx to [@rushstack/eslint-patch](https://www.npmjs.com/package/@rushstack/eslint-patch).\n- **Extensible:** Easily add additional plugins per workspaces (ie: nextjs, remix...)\n- **Performance:** Plugins enabled on file conventions patterns to increase perf.\n\n## Install\n\nAdd the following devDependencies to workspace (apps/packages in monorepo) or main project package.json.\n\n```bash\n$ yarn add --dev eslint\n$ yarn add --dev @teable/eslint-config-bases:\"workspace:^\"\n```\n\n> **Tip** the [workspace:^](https://yarnpkg.com/features/workspaces#workspace-ranges-workspace) is supported by yarn and pnpm.\n\n## Usage\n\nIn your app or package, create an `./apps/my-app/.eslintrc.js` file that extends any of the\nexisting base configs. For example:\n\n```javascript\n// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch)\nrequire(\"@teable/eslint-config-bases/patch/modern-module-resolution\");\n\nmodule.exports = {\n  // Be sure to set root to true in monorepo.\n  root: true,\n  // Will help typescript extended rules.\n  parserOptions: {\n    tsconfigRootDir: __dirname,\n    project: \"tsconfig.json\",\n  },\n  ignorePatterns: [\"**/node_modules\", \"**/.cache\", \"build\", \".next\"],\n  extends: [\n    \"@teable/eslint-config-bases/typescript\",\n    \"@teable/eslint-config-bases/sonar\",\n    \"@teable/eslint-config-bases/regexp\",\n    \"@teable/eslint-config-bases/react\",\n    \"@teable/eslint-config-bases/jest\",\n    \"@teable/eslint-config-bases/rtl\",\n    \"@teable/eslint-config-bases/storybook\",\n    \"@teable/eslint-config-bases/playwright\",\n\n    // Add specific rules for your framework if needed.\n    // ie:\n    // - nextjs: 'plugin:@next/next/core-web-vitals',\n    // - remix:  '@remix-run/eslint-config',\n    // ...\n\n    // Post configure the prettier base so there won't be\n    // any conficts between eslint / prettier\n    \"@teable/eslint-config-bases/prettier-plugin\",\n  ],\n  rules: {\n    // Specific global rules for your app or package\n  },\n  overrides: [\n    // Specific file rules for your app or package\n  ],\n};\n```\n\n> **Tip:** \"@teable/eslint-config-bases/prettier-plugin\" must be set at the end to disable any\n> conflicting rules.\n\n## Bases\n\nYou can find the bases in [./src/bases](./src/bases).\n\n| Base                                    | Match convention                  | Scope                                                           |\n| :-------------------------------------- | :-------------------------------- | :-------------------------------------------------------------- |\n| [typescript](./src/bases/typescript.js) | _all_                             | Naming conventions, consistent imports, import sorting...       |\n| [sonar](./src/bases/sonar.js)           | `*.{js,jsx,ts,tsx}`               | Keep levels of code complexity sane. (excl test and stories)    |\n| [regexp](./src/bases/regexp.js)         | `*.{js,jsx,jsx,tsx}`              | Keep regexp consistent and safer.                               |\n| [react](./src/bases/react.js)           | `*.{jsx,tsx}`                     | Recommendations for react, react-hooks and jsx projects.        |\n| [jest](./src/bases/jest.js)             | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Catch inconsistencies or error in jest tests.                   |\n| [rtl](./src/bases/rtl.js)               | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Potential errors / deprecations in react-testing-library tests. |\n| [storybook](./src/bases/storybook.js)   | `*.stories.{ts,tsx,mdx}`          | Potential errors / deprecations in stories.                     |\n| [playwright](./src/bases/playwright.js) | `**/e2e/**/*.test.{js,ts}`        | Post configure eslint for prettier compatibility.               |\n| [prettier](./src/bases/prettier.js)     | _all_                             | Post configure eslint for prettier compatibility.               |\n\n> **Notes**:\n>\n> - The order is important. Some bases will disable or tune previously defined\n>   rules. For example the [react base](./src/bases/react.js) will tune the naming conventions\n>   for function components and increase recommended cognitive complexity. The [typescript base](./src/bases/typescript.js)\n>   will also relax conventions for javascript files.\n> - Based on filename conventions some rules are relaxed or disabled to avoid false positives and\n>   keep a good level of performance. For example the [sonar base](./src/bases/sonar.js) won't run on\n>   test and storybook files. If you work on different conventions the patterns must be updated.\n\n## Prettier integration\n\nTo prevent conflicts between prettier and eslint, you must re-export the prettier base from `@teable/eslint-config-bases`.\n\n```javascript\nconst { getPrettierConfig } = require(\"@teable/eslint-config-bases/helpers\");\nmodule.exports = {\n  ...prettierConfig,\n  overrides: [\n    // whatever you need\n  ],\n};\n```\n\n> **Tip**: You can tune the provided [prettier.base.config](./src/prettier.base.config.js) for your own needs.\n\n## Notes\n\n### Typescript\n\nGeneric typescript project, mostly based on\n\n| Type/Plugin                                                                                      | Comment                                                                      |\n| :----------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- |\n| [eslint:recommended](https://eslint.org/docs/rules/)                                             | The basics for code linting.                                                 |\n| [@typescript-eslint/recommended](https://typescript-eslint.io/rules/)                            | The basics for typescript.                                                   |\n| [@typescript-eslint/consistent-type](https://typescript-eslint.io/rules/consistent-type-imports) | Use TS 3.8+ imports/exports, helps with [esbuild](https://esbuild.github.io) |\n| [@typescript-eslint/naming-convention](https://typescript-eslint.io/rules/naming-convention)     |                                                                              |\n| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)                        | Order imports                                                                |\n\n## Sonarjs\n\n| Type/Plugin                                                                               | Comment                      |\n| :---------------------------------------------------------------------------------------- | :--------------------------- |\n| [eslint-plugin-sonarjs/recommended](https://github.com/SonarSource/eslint-plugin-sonarjs) | Help to keep complexity sane |\n\n### React\n\n| Type/Plugin                                                                                                             | Comment                                  |\n| :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |\n| [eslint-plugin-react/recommended](https://github.com/yannickcr/eslint-plugin-react)                                     |                                          |\n| [eslint-plugin-react-hooks/recommended](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks) |                                          |\n| [eslint-plugin-jsx-a11y/recommended](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)                              | Helps to produce accessibility-ready jsx |\n\n### Jest\n\n| Type/Plugin                                                                            | Comment                     |\n| :------------------------------------------------------------------------------------- | :-------------------------- |\n| [eslint-plugin-jest/recommended](https://github.com/jest-community/eslint-plugin-jest) | Jest recommended practices. |\n\n### React Testing Library\n\n| Type/Plugin                                                                                                   | Comment                               |\n| :------------------------------------------------------------------------------------------------------------ | :------------------------------------ |\n| [eslint-plugin-testing-library/recommended](https://github.com/testing-library/eslint-plugin-testing-library) | Ease when using react-testing-library |\n\n### Regexp\n\n| Type/Plugin                                                                           | Comment |\n| :------------------------------------------------------------------------------------ | :------ |\n| [eslint-plugin-regexp/recommended](https://github.com/ota-meshi/eslint-plugin-regexp) |         |\n\n### Etc\n\n...\n","packages/sdk/README.md":"# @teable/sdk\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nSDK for teable extensions\n","packages/ui-lib/README.md":"# @teable/ui-lib\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nA basic example of a design-system setup with storybook.\n","packages/ui-lib/src/icons/social/README.md":"## Credits\n\n- **github.svg** by https://www.iconfinder.com/Adi_Sinchetru from https://www.iconfinder.com/icons/1390302/github_icon\n"},"files":{"packages/common-i18n/README.md":"# @teable/common-i18n\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nOne possible way to share locales amongst apps in the monorepo.\n\n### Usage\n\nAdd the workspace dependency to the consuming app or package.\n\n```bash\nyarn add @teable/common-locales:\"workspace:^\"\n```\n\nAdd an alias in tsconfig.js to enable fast-refresh.\n\n```json5\n{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@teable/common-i18n\": [\"../../../packages/common-i18n/src/index\"],\n      \"@teable/common-i18n/locales/*\": [\"../../../packages/common-i18n/src/locales/*\"],\n    },\n  },\n}\n```\n\nOptionally create a file named `./types.d/react-i18next.d.ts` to enable typechecks and autocompletion of keys.\n\n```typescript\nimport \"react-i18next\";\nimport type { I18nNamespaces } from \"@teable/common-i18n\";\n\ndeclare module \"react-i18next\" {\n  interface CustomTypeOptions {\n    defaultNS: \"common\";\n    resources: I18nNamespaces;\n  }\n}\n```\n","packages/core/README.md":"# @teable/core\n\n> **Note**\n> This package is part of [teableio/teable](https://github.com/teableio/teable).\n\nA package holding some basic typescript utilities: typeguards, assertions...\n\n- [x] Packaged as ES module (type: module in package.json).\n- [x] Can be build with tsup (no need if using tsconfig aliases).\n- [x] Simple unit tests demo with either Vitest (`pnpm test-unit`) or TS-Jest (`pnpm test-unit-jest`).\n\n## Install\n\nFrom any package or apps:\n\n```bash\nyarn add @teable/core@\"workspace:^\"\n```\n\n## Enable aliases\n\n```json5\n{\n  //\"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \"./src\",\n    \"paths\": {\n      \"@teable/core\": [\"../../../packages/core/src/index\"],\n    },\n  },\n}\n```\n\n## Consume\n\n```typescript\nimport { isPlainObject } from \"@teable/core\";\n\nisPlainObject(true) === false;\n```\n","packages/core/src/formula/parser/README.md":"# Formula Language\n\nThis directory contains the [ANLTR Grammar](https://www.antlr.org/) for Teable formula\n\n## Making changes to the language\n\nIf you want to make changes to the syntax of the formula language first you must update\nthe grammar .g4 files found in this directory. Once done you will then need to run `pnpm antlr4ts`\nto re-build it.\n","packages/db-main-prisma/README.md":"# @teable/db-main-prisma\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nBasic demo of a shared package using [prisma](<(https://prisma.io)>) to handle database access, part of the [nextjs-monorepo-example](https://github.com/teableio/teable)\n\n## Quick start\n\nStart the database with `docker-compose up database` then run\n\n```bash\ncd packages/db-main-prisma\nyarn prisma-db-push\n```\n\n> See the .env(.local|.production|.development) file to edit the connection.\n> **Curious about the setup ?**, we use [dotenv-flow](https://github.com/kerimdzhanov/dotenv-flow) under the hood read [this](https://github.com/prisma/prisma/issues/3865)\n> and see the script section of [./package.json](./package.json)\n\n## Install\n\n### Database\n\n#### Option 0: sqlite local\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the sqlite file main.db\n\n#### Option 1: Postgresql local (deprecated)\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the postgresql service defined in [../../docker-compose.yml](../../dockers/docker-compose.yml).\n\nEnsure you have docker and docker-compose and run\n\n```bash\n# In the root folder\ndocker-compose up database\n# Alternatively, from any folder\nyarn docker:up\n```\n\n#### Option 2: An hosted postgres instance (deprecated)\n\nTo quick start, you can use a free tier at supabase.io, but all providers will work.\n\nAs an example, simply create an `.env.local` and set the supabase pgbouncer url:\n\n```env\nPRISMA_DATABASE_URL=postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres?schema=public&pgbouncer=true&sslmode=require&sslaccept=strict&sslcert=../config/certs/supabase-prod-ca-2021.crt\n```\n\n> You can append `&connection_limit=1` if deploying on a serverless/lambda provider (ie: vercel, netlify...)\n\n## DB creation\n\nTo create the database, simply run\n\n```bash\nyarn prisma-db-push\n```\n\n## DB type generation\n\nCreate or update the types. This is generally automatically done in\na postinstall from any app, see script section of [../../apps/nextjs-app/package.json](../../apps/nextjs-app/package.json)\nor try it out with `yarn workspace web-app postinstall`\n\n```bash\nyarn prisma generate\n```\n","packages/eslint-config-bases/README.md":"# @teable/eslint-config-bases\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n# About\n\nExample of composable eslint config bases that can be easily shared and fine-tuned by apps and\npackages that lives in a [monorepo](https://github.com/teableio/teable).\n\n## Features\n\n## Features\n\n- **Monorepo friendly:** Each workspace can have its own config.\n- **Composable:** Compose your workspace eslint config from pre-defined bases.\n- **Peace of mind:** Plugins does not need to be installed per workspaces, thx to [@rushstack/eslint-patch](https://www.npmjs.com/package/@rushstack/eslint-patch).\n- **Extensible:** Easily add additional plugins per workspaces (ie: nextjs, remix...)\n- **Performance:** Plugins enabled on file conventions patterns to increase perf.\n\n## Install\n\nAdd the following devDependencies to workspace (apps/packages in monorepo) or main project package.json.\n\n```bash\n$ yarn add --dev eslint\n$ yarn add --dev @teable/eslint-config-bases:\"workspace:^\"\n```\n\n> **Tip** the [workspace:^](https://yarnpkg.com/features/workspaces#workspace-ranges-workspace) is supported by yarn and pnpm.\n\n## Usage\n\nIn your app or package, create an `./apps/my-app/.eslintrc.js` file that extends any of the\nexisting base configs. For example:\n\n```javascript\n// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch)\nrequire(\"@teable/eslint-config-bases/patch/modern-module-resolution\");\n\nmodule.exports = {\n  // Be sure to set root to true in monorepo.\n  root: true,\n  // Will help typescript extended rules.\n  parserOptions: {\n    tsconfigRootDir: __dirname,\n    project: \"tsconfig.json\",\n  },\n  ignorePatterns: [\"**/node_modules\", \"**/.cache\", \"build\", \".next\"],\n  extends: [\n    \"@teable/eslint-config-bases/typescript\",\n    \"@teable/eslint-config-bases/sonar\",\n    \"@teable/eslint-config-bases/regexp\",\n    \"@teable/eslint-config-bases/react\",\n    \"@teable/eslint-config-bases/jest\",\n    \"@teable/eslint-config-bases/rtl\",\n    \"@teable/eslint-config-bases/storybook\",\n    \"@teable/eslint-config-bases/playwright\",\n\n    // Add specific rules for your framework if needed.\n    // ie:\n    // - nextjs: 'plugin:@next/next/core-web-vitals',\n    // - remix:  '@remix-run/eslint-config',\n    // ...\n\n    // Post configure the prettier base so there won't be\n    // any conficts between eslint / prettier\n    \"@teable/eslint-config-bases/prettier-plugin\",\n  ],\n  rules: {\n    // Specific global rules for your app or package\n  },\n  overrides: [\n    // Specific file rules for your app or package\n  ],\n};\n```\n\n> **Tip:** \"@teable/eslint-config-bases/prettier-plugin\" must be set at the end to disable any\n> conflicting rules.\n\n## Bases\n\nYou can find the bases in [./src/bases](./src/bases).\n\n| Base                                    | Match convention                  | Scope                                                           |\n| :-------------------------------------- | :-------------------------------- | :-------------------------------------------------------------- |\n| [typescript](./src/bases/typescript.js) | _all_                             | Naming conventions, consistent imports, import sorting...       |\n| [sonar](./src/bases/sonar.js)           | `*.{js,jsx,ts,tsx}`               | Keep levels of code complexity sane. (excl test and stories)    |\n| [regexp](./src/bases/regexp.js)         | `*.{js,jsx,jsx,tsx}`              | Keep regexp consistent and safer.                               |\n| [react](./src/bases/react.js)           | `*.{jsx,tsx}`                     | Recommendations for react, react-hooks and jsx projects.        |\n| [jest](./src/bases/jest.js)             | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Catch inconsistencies or error in jest tests.                   |\n| [rtl](./src/bases/rtl.js)               | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Potential errors / deprecations in react-testing-library tests. |\n| [storybook](./src/bases/storybook.js)   | `*.stories.{ts,tsx,mdx}`          | Potential errors / deprecations in stories.                     |\n| [playwright](./src/bases/playwright.js) | `**/e2e/**/*.test.{js,ts}`        | Post configure eslint for prettier compatibility.               |\n| [prettier](./src/bases/prettier.js)     | _all_                             | Post configure eslint for prettier compatibility.               |\n\n> **Notes**:\n>\n> - The order is important. Some bases will disable or tune previously defined\n>   rules. For example the [react base](./src/bases/react.js) will tune the naming conventions\n>   for function components and increase recommended cognitive complexity. The [typescript base](./src/bases/typescript.js)\n>   will also relax conventions for javascript files.\n> - Based on filename conventions some rules are relaxed or disabled to avoid false positives and\n>   keep a good level of performance. For example the [sonar base](./src/bases/sonar.js) won't run on\n>   test and storybook files. If you work on different conventions the patterns must be updated.\n\n## Prettier integration\n\nTo prevent conflicts between prettier and eslint, you must re-export the prettier base from `@teable/eslint-config-bases`.\n\n```javascript\nconst { getPrettierConfig } = require(\"@teable/eslint-config-bases/helpers\");\nmodule.exports = {\n  ...prettierConfig,\n  overrides: [\n    // whatever you need\n  ],\n};\n```\n\n> **Tip**: You can tune the provided [prettier.base.config](./src/prettier.base.config.js) for your own needs.\n\n## Notes\n\n### Typescript\n\nGeneric typescript project, mostly based on\n\n| Type/Plugin                                                                                      | Comment                                                                      |\n| :----------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- |\n| [eslint:recommended](https://eslint.org/docs/rules/)                                             | The basics for code linting.                                                 |\n| [@typescript-eslint/recommended](https://typescript-eslint.io/rules/)                            | The basics for typescript.                                                   |\n| [@typescript-eslint/consistent-type](https://typescript-eslint.io/rules/consistent-type-imports) | Use TS 3.8+ imports/exports, helps with [esbuild](https://esbuild.github.io) |\n| [@typescript-eslint/naming-convention](https://typescript-eslint.io/rules/naming-convention)     |                                                                              |\n| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)                        | Order imports                                                                |\n\n## Sonarjs\n\n| Type/Plugin                                                                               | Comment                      |\n| :---------------------------------------------------------------------------------------- | :--------------------------- |\n| [eslint-plugin-sonarjs/recommended](https://github.com/SonarSource/eslint-plugin-sonarjs) | Help to keep complexity sane |\n\n### React\n\n| Type/Plugin                                                                                                             | Comment                                  |\n| :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |\n| [eslint-plugin-react/recommended](https://github.com/yannickcr/eslint-plugin-react)                                     |                                          |\n| [eslint-plugin-react-hooks/recommended](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks) |                                          |\n| [eslint-plugin-jsx-a11y/recommended](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)                              | Helps to produce accessibility-ready jsx |\n\n### Jest\n\n| Type/Plugin                                                                            | Comment                     |\n| :------------------------------------------------------------------------------------- | :-------------------------- |\n| [eslint-plugin-jest/recommended](https://github.com/jest-community/eslint-plugin-jest) | Jest recommended practices. |\n\n### React Testing Library\n\n| Type/Plugin                                                                                                   | Comment                               |\n| :------------------------------------------------------------------------------------------------------------ | :------------------------------------ |\n| [eslint-plugin-testing-library/recommended](https://github.com/testing-library/eslint-plugin-testing-library) | Ease when using react-testing-library |\n\n### Regexp\n\n| Type/Plugin                                                                           | Comment |\n| :------------------------------------------------------------------------------------ | :------ |\n| [eslint-plugin-regexp/recommended](https://github.com/ota-meshi/eslint-plugin-regexp) |         |\n\n### Etc\n\n...\n","packages/sdk/README.md":"# @teable/sdk\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nSDK for teable extensions\n","packages/ui-lib/README.md":"# @teable/ui-lib\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nA basic example of a design-system setup with storybook.\n","packages/ui-lib/src/icons/social/README.md":"## Credits\n\n- **github.svg** by https://www.iconfinder.com/Adi_Sinchetru from https://www.iconfinder.com/icons/1390302/github_icon\n"},"items":[{"name":"README.md","path":"packages/common-i18n/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/common-i18n/README.md","title":"common-i18n Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/common-i18n\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nOne possible way to share locales amongst apps in the monorepo.\n\n### Usage\n\nAdd the workspace dependency to the consuming app or package.\n\n```bash\nyarn add @teable/common-locales:\"workspace:^\"\n```\n\nAdd an alias in tsconfig.js to enable fast-refresh.\n\n```json5\n{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@teable/common-i18n\": [\"../../../packages/common-i18n/src/index\"],\n      \"@teable/common-i18n/locales/*\": [\"../../../packages/common-i18n/src/locales/*\"],\n    },\n  },\n}\n```\n\nOptionally create a file named `./types.d/react-i18next.d.ts` to enable typechecks and autocompletion of keys.\n\n```typescript\nimport \"react-i18next\";\nimport type { I18nNamespaces } from \"@teable/common-i18n\";\n\ndeclare module \"react-i18next\" {\n  interface CustomTypeOptions {\n    defaultNS: \"common\";\n    resources: I18nNamespaces;\n  }\n}\n```\n","isInternal":false,"tokens":324,"sizeBytes":1144},{"name":"README.md","path":"packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/core\n\n> **Note**\n> This package is part of [teableio/teable](https://github.com/teableio/teable).\n\nA package holding some basic typescript utilities: typeguards, assertions...\n\n- [x] Packaged as ES module (type: module in package.json).\n- [x] Can be build with tsup (no need if using tsconfig aliases).\n- [x] Simple unit tests demo with either Vitest (`pnpm test-unit`) or TS-Jest (`pnpm test-unit-jest`).\n\n## Install\n\nFrom any package or apps:\n\n```bash\nyarn add @teable/core@\"workspace:^\"\n```\n\n## Enable aliases\n\n```json5\n{\n  //\"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \"./src\",\n    \"paths\": {\n      \"@teable/core\": [\"../../../packages/core/src/index\"],\n    },\n  },\n}\n```\n\n## Consume\n\n```typescript\nimport { isPlainObject } from \"@teable/core\";\n\nisPlainObject(true) === false;\n```\n","isInternal":false,"tokens":228,"sizeBytes":827},{"name":"README.md","path":"packages/core/src/formula/parser/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/core/src/formula/parser/README.md","title":"parser Documentation","category":"plugin-manifest","format":"markdown","content":"# Formula Language\n\nThis directory contains the [ANLTR Grammar](https://www.antlr.org/) for Teable formula\n\n## Making changes to the language\n\nIf you want to make changes to the syntax of the formula language first you must update\nthe grammar .g4 files found in this directory. Once done you will then need to run `pnpm antlr4ts`\nto re-build it.\n","isInternal":false,"tokens":81,"sizeBytes":346},{"name":"README.md","path":"packages/db-main-prisma/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/db-main-prisma/README.md","title":"db-main-prisma Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/db-main-prisma\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nBasic demo of a shared package using [prisma](<(https://prisma.io)>) to handle database access, part of the [nextjs-monorepo-example](https://github.com/teableio/teable)\n\n## Quick start\n\nStart the database with `docker-compose up database` then run\n\n```bash\ncd packages/db-main-prisma\nyarn prisma-db-push\n```\n\n> See the .env(.local|.production|.development) file to edit the connection.\n> **Curious about the setup ?**, we use [dotenv-flow](https://github.com/kerimdzhanov/dotenv-flow) under the hood read [this](https://github.com/prisma/prisma/issues/3865)\n> and see the script section of [./package.json](./package.json)\n\n## Install\n\n### Database\n\n#### Option 0: sqlite local\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the sqlite file main.db\n\n#### Option 1: Postgresql local (deprecated)\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the postgresql service defined in [../../docker-compose.yml](../../dockers/docker-compose.yml).\n\nEnsure you have docker and docker-compose and run\n\n```bash\n# In the root folder\ndocker-compose up database\n# Alternatively, from any folder\nyarn docker:up\n```\n\n#### Option 2: An hosted postgres instance (deprecated)\n\nTo quick start, you can use a free tier at supabase.io, but all providers will work.\n\nAs an example, simply create an `.env.local` and set the supabase pgbouncer url:\n\n```env\nPRISMA_DATABASE_URL=postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres?schema=public&pgbouncer=true&sslmode=require&sslaccept=strict&sslcert=../config/certs/supabase-prod-ca-2021.crt\n```\n\n> You can append `&connection_limit=1` if deploying on a serverless/lambda provider (ie: vercel, netlify...)\n\n## DB creation\n\nTo create the database, simply run\n\n```bash\nyarn prisma-db-push\n```\n\n## DB type generation\n\nCreate or update the types. This is generally automatically done in\na postinstall from any app, see script section of [../../apps/nextjs-app/package.json](../../apps/nextjs-app/package.json)\nor try it out with `yarn workspace web-app postinstall`\n\n```bash\nyarn prisma generate\n```\n","isInternal":false,"tokens":668,"sizeBytes":2479},{"name":"README.md","path":"packages/eslint-config-bases/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/eslint-config-bases/README.md","title":"eslint-config-bases Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/eslint-config-bases\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n# About\n\nExample of composable eslint config bases that can be easily shared and fine-tuned by apps and\npackages that lives in a [monorepo](https://github.com/teableio/teable).\n\n## Features\n\n## Features\n\n- **Monorepo friendly:** Each workspace can have its own config.\n- **Composable:** Compose your workspace eslint config from pre-defined bases.\n- **Peace of mind:** Plugins does not need to be installed per workspaces, thx to [@rushstack/eslint-patch](https://www.npmjs.com/package/@rushstack/eslint-patch).\n- **Extensible:** Easily add additional plugins per workspaces (ie: nextjs, remix...)\n- **Performance:** Plugins enabled on file conventions patterns to increase perf.\n\n## Install\n\nAdd the following devDependencies to workspace (apps/packages in monorepo) or main project package.json.\n\n```bash\n$ yarn add --dev eslint\n$ yarn add --dev @teable/eslint-config-bases:\"workspace:^\"\n```\n\n> **Tip** the [workspace:^](https://yarnpkg.com/features/workspaces#workspace-ranges-workspace) is supported by yarn and pnpm.\n\n## Usage\n\nIn your app or package, create an `./apps/my-app/.eslintrc.js` file that extends any of the\nexisting base configs. For example:\n\n```javascript\n// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch)\nrequire(\"@teable/eslint-config-bases/patch/modern-module-resolution\");\n\nmodule.exports = {\n  // Be sure to set root to true in monorepo.\n  root: true,\n  // Will help typescript extended rules.\n  parserOptions: {\n    tsconfigRootDir: __dirname,\n    project: \"tsconfig.json\",\n  },\n  ignorePatterns: [\"**/node_modules\", \"**/.cache\", \"build\", \".next\"],\n  extends: [\n    \"@teable/eslint-config-bases/typescript\",\n    \"@teable/eslint-config-bases/sonar\",\n    \"@teable/eslint-config-bases/regexp\",\n    \"@teable/eslint-config-bases/react\",\n    \"@teable/eslint-config-bases/jest\",\n    \"@teable/eslint-config-bases/rtl\",\n    \"@teable/eslint-config-bases/storybook\",\n    \"@teable/eslint-config-bases/playwright\",\n\n    // Add specific rules for your framework if needed.\n    // ie:\n    // - nextjs: 'plugin:@next/next/core-web-vitals',\n    // - remix:  '@remix-run/eslint-config',\n    // ...\n\n    // Post configure the prettier base so there won't be\n    // any conficts between eslint / prettier\n    \"@teable/eslint-config-bases/prettier-plugin\",\n  ],\n  rules: {\n    // Specific global rules for your app or package\n  },\n  overrides: [\n    // Specific file rules for your app or package\n  ],\n};\n```\n\n> **Tip:** \"@teable/eslint-config-bases/prettier-plugin\" must be set at the end to disable any\n> conflicting rules.\n\n## Bases\n\nYou can find the bases in [./src/bases](./src/bases).\n\n| Base                                    | Match convention                  | Scope                                                           |\n| :-------------------------------------- | :-------------------------------- | :-------------------------------------------------------------- |\n| [typescript](./src/bases/typescript.js) | _all_                             | Naming conventions, consistent imports, import sorting...       |\n| [sonar](./src/bases/sonar.js)           | `*.{js,jsx,ts,tsx}`               | Keep levels of code complexity sane. (excl test and stories)    |\n| [regexp](./src/bases/regexp.js)         | `*.{js,jsx,jsx,tsx}`              | Keep regexp consistent and safer.                               |\n| [react](./src/bases/react.js)           | `*.{jsx,tsx}`                     | Recommendations for react, react-hooks and jsx projects.        |\n| [jest](./src/bases/jest.js)             | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Catch inconsistencies or error in jest tests.                   |\n| [rtl](./src/bases/rtl.js)               | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Potential errors / deprecations in react-testing-library tests. |\n| [storybook](./src/bases/storybook.js)   | `*.stories.{ts,tsx,mdx}`          | Potential errors / deprecations in stories.                     |\n| [playwright](./src/bases/playwright.js) | `**/e2e/**/*.test.{js,ts}`        | Post configure eslint for prettier compatibility.               |\n| [prettier](./src/bases/prettier.js)     | _all_                             | Post configure eslint for prettier compatibility.               |\n\n> **Notes**:\n>\n> - The order is important. Some bases will disable or tune previously defined\n>   rules. For example the [react base](./src/bases/react.js) will tune the naming conventions\n>   for function components and increase recommended cognitive complexity. The [typescript base](./src/bases/typescript.js)\n>   will also relax conventions for javascript files.\n> - Based on filename conventions some rules are relaxed or disabled to avoid false positives and\n>   keep a good level of performance. For example the [sonar base](./src/bases/sonar.js) won't run on\n>   test and storybook files. If you work on different conventions the patterns must be updated.\n\n## Prettier integration\n\nTo prevent conflicts between prettier and eslint, you must re-export the prettier base from `@teable/eslint-config-bases`.\n\n```javascript\nconst { getPrettierConfig } = require(\"@teable/eslint-config-bases/helpers\");\nmodule.exports = {\n  ...prettierConfig,\n  overrides: [\n    // whatever you need\n  ],\n};\n```\n\n> **Tip**: You can tune the provided [prettier.base.config](./src/prettier.base.config.js) for your own needs.\n\n## Notes\n\n### Typescript\n\nGeneric typescript project, mostly based on\n\n| Type/Plugin                                                                                      | Comment                                                                      |\n| :----------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- |\n| [eslint:recommended](https://eslint.org/docs/rules/)                                             | The basics for code linting.                                                 |\n| [@typescript-eslint/recommended](https://typescript-eslint.io/rules/)                            | The basics for typescript.                                                   |\n| [@typescript-eslint/consistent-type](https://typescript-eslint.io/rules/consistent-type-imports) | Use TS 3.8+ imports/exports, helps with [esbuild](https://esbuild.github.io) |\n| [@typescript-eslint/naming-convention](https://typescript-eslint.io/rules/naming-convention)     |                                                                              |\n| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)                        | Order imports                                                                |\n\n## Sonarjs\n\n| Type/Plugin                                                                               | Comment                      |\n| :---------------------------------------------------------------------------------------- | :--------------------------- |\n| [eslint-plugin-sonarjs/recommended](https://github.com/SonarSource/eslint-plugin-sonarjs) | Help to keep complexity sane |\n\n### React\n\n| Type/Plugin                                                                                                             | Comment                                  |\n| :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |\n| [eslint-plugin-react/recommended](https://github.com/yannickcr/eslint-plugin-react)                                     |                                          |\n| [eslint-plugin-react-hooks/recommended](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks) |                                          |\n| [eslint-plugin-jsx-a11y/recommended](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)                              | Helps to produce accessibility-ready jsx |\n\n### Jest\n\n| Type/Plugin                                                                            | Comment                     |\n| :------------------------------------------------------------------------------------- | :-------------------------- |\n| [eslint-plugin-jest/recommended](https://github.com/jest-community/eslint-plugin-jest) | Jest recommended practices. |\n\n### React Testing Library\n\n| Type/Plugin                                                                                                   | Comment                               |\n| :------------------------------------------------------------------------------------------------------------ | :------------------------------------ |\n| [eslint-plugin-testing-library/recommended](https://github.com/testing-library/eslint-plugin-testing-library) | Ease when using react-testing-library |\n\n### Regexp\n\n| Type/Plugin                                                                           | Comment |\n| :------------------------------------------------------------------------------------ | :------ |\n| [eslint-plugin-regexp/recommended](https://github.com/ota-meshi/eslint-plugin-regexp) |         |\n\n### Etc\n\n...\n","isInternal":false,"tokens":1912,"sizeBytes":9444},{"name":"README.md","path":"packages/sdk/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/sdk/README.md","title":"sdk Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/sdk\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nSDK for teable extensions\n","isInternal":false,"tokens":111,"sizeBytes":340},{"name":"README.md","path":"packages/ui-lib/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/ui-lib/README.md","title":"ui-lib Documentation","category":"plugin-manifest","format":"markdown","content":"# @teable/ui-lib\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nA basic example of a design-system setup with storybook.\n","isInternal":false,"tokens":118,"sizeBytes":374},{"name":"README.md","path":"packages/ui-lib/src/icons/social/README.md","rawUrl":"https://raw.githubusercontent.com/teableio/teable/HEAD/packages/ui-lib/src/icons/social/README.md","title":"social Documentation","category":"plugin-manifest","format":"markdown","content":"## Credits\n\n- **github.svg** by https://www.iconfinder.com/Adi_Sinchetru from https://www.iconfinder.com/icons/1390302/github_icon\n","isInternal":false,"tokens":37,"sizeBytes":131}],"systemPromptSnippet":"<yakaai_skills repo=\"teableio/teable\">\n<!-- File: packages/common-i18n/README.md (Tokens: ~324 | Category: plugin-manifest) -->\n# @teable/common-i18n\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nOne possible way to share locales amongst apps in the monorepo.\n\n### Usage\n\nAdd the workspace dependency to the consuming app or package.\n\n```bash\nyarn add @teable/common-locales:\"workspace:^\"\n```\n\nAdd an alias in tsconfig.js to enable fast-refresh.\n\n```json5\n{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@teable/common-i18n\": [\"../../../packages/common-i18n/src/index\"],\n      \"@teable/common-i18n/locales/*\": [\"../../../packages/common-i18n/src/locales/*\"],\n    },\n  },\n}\n```\n\nOptionally create a file named `./types.d/react-i18next.d.ts` to enable typechecks and autocompletion of keys.\n\n```typescript\nimport \"react-i18next\";\nimport type { I18nNamespaces } from \"@teable/common-i18n\";\n\ndeclare module \"react-i18next\" {\n  interface CustomTypeOptions {\n    defaultNS: \"common\";\n    resources: I18nNamespaces;\n  }\n}\n```\n\n<!-- File: packages/core/README.md (Tokens: ~228 | Category: plugin-manifest) -->\n# @teable/core\n\n> **Note**\n> This package is part of [teableio/teable](https://github.com/teableio/teable).\n\nA package holding some basic typescript utilities: typeguards, assertions...\n\n- [x] Packaged as ES module (type: module in package.json).\n- [x] Can be build with tsup (no need if using tsconfig aliases).\n- [x] Simple unit tests demo with either Vitest (`pnpm test-unit`) or TS-Jest (`pnpm test-unit-jest`).\n\n## Install\n\nFrom any package or apps:\n\n```bash\nyarn add @teable/core@\"workspace:^\"\n```\n\n## Enable aliases\n\n```json5\n{\n  //\"extends\": \"../../tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"baseUrl\": \"./src\",\n    \"paths\": {\n      \"@teable/core\": [\"../../../packages/core/src/index\"],\n    },\n  },\n}\n```\n\n## Consume\n\n```typescript\nimport { isPlainObject } from \"@teable/core\";\n\nisPlainObject(true) === false;\n```\n\n<!-- File: packages/core/src/formula/parser/README.md (Tokens: ~81 | Category: plugin-manifest) -->\n# Formula Language\n\nThis directory contains the [ANLTR Grammar](https://www.antlr.org/) for Teable formula\n\n## Making changes to the language\n\nIf you want to make changes to the syntax of the formula language first you must update\nthe grammar .g4 files found in this directory. Once done you will then need to run `pnpm antlr4ts`\nto re-build it.\n\n<!-- File: packages/db-main-prisma/README.md (Tokens: ~668 | Category: plugin-manifest) -->\n# @teable/db-main-prisma\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nBasic demo of a shared package using [prisma](<(https://prisma.io)>) to handle database access, part of the [nextjs-monorepo-example](https://github.com/teableio/teable)\n\n## Quick start\n\nStart the database with `docker-compose up database` then run\n\n```bash\ncd packages/db-main-prisma\nyarn prisma-db-push\n```\n\n> See the .env(.local|.production|.development) file to edit the connection.\n> **Curious about the setup ?**, we use [dotenv-flow](https://github.com/kerimdzhanov/dotenv-flow) under the hood read [this](https://github.com/prisma/prisma/issues/3865)\n> and see the script section of [./package.json](./package.json)\n\n## Install\n\n### Database\n\n#### Option 0: sqlite local\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the sqlite file main.db\n\n#### Option 1: Postgresql local (deprecated)\n\nThe default env for `PRISMA_DATABASE_URL` is defined in the main [.env](.env) file.\nBy default, it connects to the postgresql service defined in [../../docker-compose.yml](../../dockers/docker-compose.yml).\n\nEnsure you have docker and docker-compose and run\n\n```bash\n# In the root folder\ndocker-compose up database\n# Alternatively, from any folder\nyarn docker:up\n```\n\n#### Option 2: An hosted postgres instance (deprecated)\n\nTo quick start, you can use a free tier at supabase.io, but all providers will work.\n\nAs an example, simply create an `.env.local` and set the supabase pgbouncer url:\n\n```env\nPRISMA_DATABASE_URL=postgresql://postgres:[PASSWORD]@[HOST]:[PORT]/postgres?schema=public&pgbouncer=true&sslmode=require&sslaccept=strict&sslcert=../config/certs/supabase-prod-ca-2021.crt\n```\n\n> You can append `&connection_limit=1` if deploying on a serverless/lambda provider (ie: vercel, netlify...)\n\n## DB creation\n\nTo create the database, simply run\n\n```bash\nyarn prisma-db-push\n```\n\n## DB type generation\n\nCreate or update the types. This is generally automatically done in\na postinstall from any app, see script section of [../../apps/nextjs-app/package.json](../../apps/nextjs-app/package.json)\nor try it out with `yarn workspace web-app postinstall`\n\n```bash\nyarn prisma generate\n```\n\n<!-- File: packages/eslint-config-bases/README.md (Tokens: ~1912 | Category: plugin-manifest) -->\n# @teable/eslint-config-bases\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n# About\n\nExample of composable eslint config bases that can be easily shared and fine-tuned by apps and\npackages that lives in a [monorepo](https://github.com/teableio/teable).\n\n## Features\n\n## Features\n\n- **Monorepo friendly:** Each workspace can have its own config.\n- **Composable:** Compose your workspace eslint config from pre-defined bases.\n- **Peace of mind:** Plugins does not need to be installed per workspaces, thx to [@rushstack/eslint-patch](https://www.npmjs.com/package/@rushstack/eslint-patch).\n- **Extensible:** Easily add additional plugins per workspaces (ie: nextjs, remix...)\n- **Performance:** Plugins enabled on file conventions patterns to increase perf.\n\n## Install\n\nAdd the following devDependencies to workspace (apps/packages in monorepo) or main project package.json.\n\n```bash\n$ yarn add --dev eslint\n$ yarn add --dev @teable/eslint-config-bases:\"workspace:^\"\n```\n\n> **Tip** the [workspace:^](https://yarnpkg.com/features/workspaces#workspace-ranges-workspace) is supported by yarn and pnpm.\n\n## Usage\n\nIn your app or package, create an `./apps/my-app/.eslintrc.js` file that extends any of the\nexisting base configs. For example:\n\n```javascript\n// Workaround for https://github.com/eslint/eslint/issues/3458 (re-export of @rushstack/eslint-patch)\nrequire(\"@teable/eslint-config-bases/patch/modern-module-resolution\");\n\nmodule.exports = {\n  // Be sure to set root to true in monorepo.\n  root: true,\n  // Will help typescript extended rules.\n  parserOptions: {\n    tsconfigRootDir: __dirname,\n    project: \"tsconfig.json\",\n  },\n  ignorePatterns: [\"**/node_modules\", \"**/.cache\", \"build\", \".next\"],\n  extends: [\n    \"@teable/eslint-config-bases/typescript\",\n    \"@teable/eslint-config-bases/sonar\",\n    \"@teable/eslint-config-bases/regexp\",\n    \"@teable/eslint-config-bases/react\",\n    \"@teable/eslint-config-bases/jest\",\n    \"@teable/eslint-config-bases/rtl\",\n    \"@teable/eslint-config-bases/storybook\",\n    \"@teable/eslint-config-bases/playwright\",\n\n    // Add specific rules for your framework if needed.\n    // ie:\n    // - nextjs: 'plugin:@next/next/core-web-vitals',\n    // - remix:  '@remix-run/eslint-config',\n    // ...\n\n    // Post configure the prettier base so there won't be\n    // any conficts between eslint / prettier\n    \"@teable/eslint-config-bases/prettier-plugin\",\n  ],\n  rules: {\n    // Specific global rules for your app or package\n  },\n  overrides: [\n    // Specific file rules for your app or package\n  ],\n};\n```\n\n> **Tip:** \"@teable/eslint-config-bases/prettier-plugin\" must be set at the end to disable any\n> conflicting rules.\n\n## Bases\n\nYou can find the bases in [./src/bases](./src/bases).\n\n| Base                                    | Match convention                  | Scope                                                           |\n| :-------------------------------------- | :-------------------------------- | :-------------------------------------------------------------- |\n| [typescript](./src/bases/typescript.js) | _all_                             | Naming conventions, consistent imports, import sorting...       |\n| [sonar](./src/bases/sonar.js)           | `*.{js,jsx,ts,tsx}`               | Keep levels of code complexity sane. (excl test and stories)    |\n| [regexp](./src/bases/regexp.js)         | `*.{js,jsx,jsx,tsx}`              | Keep regexp consistent and safer.                               |\n| [react](./src/bases/react.js)           | `*.{jsx,tsx}`                     | Recommendations for react, react-hooks and jsx projects.        |\n| [jest](./src/bases/jest.js)             | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Catch inconsistencies or error in jest tests.                   |\n| [rtl](./src/bases/rtl.js)               | `**/?(*.)+(test).{js,jsx,ts,tsx}` | Potential errors / deprecations in react-testing-library tests. |\n| [storybook](./src/bases/storybook.js)   | `*.stories.{ts,tsx,mdx}`          | Potential errors / deprecations in stories.                     |\n| [playwright](./src/bases/playwright.js) | `**/e2e/**/*.test.{js,ts}`        | Post configure eslint for prettier compatibility.               |\n| [prettier](./src/bases/prettier.js)     | _all_                             | Post configure eslint for prettier compatibility.               |\n\n> **Notes**:\n>\n> - The order is important. Some bases will disable or tune previously defined\n>   rules. For example the [react base](./src/bases/react.js) will tune the naming conventions\n>   for function components and increase recommended cognitive complexity. The [typescript base](./src/bases/typescript.js)\n>   will also relax conventions for javascript files.\n> - Based on filename conventions some rules are relaxed or disabled to avoid false positives and\n>   keep a good level of performance. For example the [sonar base](./src/bases/sonar.js) won't run on\n>   test and storybook files. If you work on different conventions the patterns must be updated.\n\n## Prettier integration\n\nTo prevent conflicts between prettier and eslint, you must re-export the prettier base from `@teable/eslint-config-bases`.\n\n```javascript\nconst { getPrettierConfig } = require(\"@teable/eslint-config-bases/helpers\");\nmodule.exports = {\n  ...prettierConfig,\n  overrides: [\n    // whatever you need\n  ],\n};\n```\n\n> **Tip**: You can tune the provided [prettier.base.config](./src/prettier.base.config.js) for your own needs.\n\n## Notes\n\n### Typescript\n\nGeneric typescript project, mostly based on\n\n| Type/Plugin                                                                                      | Comment                                                                      |\n| :----------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- |\n| [eslint:recommended](https://eslint.org/docs/rules/)                                             | The basics for code linting.                                                 |\n| [@typescript-eslint/recommended](https://typescript-eslint.io/rules/)                            | The basics for typescript.                                                   |\n| [@typescript-eslint/consistent-type](https://typescript-eslint.io/rules/consistent-type-imports) | Use TS 3.8+ imports/exports, helps with [esbuild](https://esbuild.github.io) |\n| [@typescript-eslint/naming-convention](https://typescript-eslint.io/rules/naming-convention)     |                                                                              |\n| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)                        | Order imports                                                                |\n\n## Sonarjs\n\n| Type/Plugin                                                                               | Comment                      |\n| :---------------------------------------------------------------------------------------- | :--------------------------- |\n| [eslint-plugin-sonarjs/recommended](https://github.com/SonarSource/eslint-plugin-sonarjs) | Help to keep complexity sane |\n\n### React\n\n| Type/Plugin                                                                                                             | Comment                                  |\n| :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |\n| [eslint-plugin-react/recommended](https://github.com/yannickcr/eslint-plugin-react)                                     |                                          |\n| [eslint-plugin-react-hooks/recommended](https://github.com/facebook/react/tree/main/packages/eslint-plugin-react-hooks) |                                          |\n| [eslint-plugin-jsx-a11y/recommended](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)                              | Helps to produce accessibility-ready jsx |\n\n### Jest\n\n| Type/Plugin                                                                            | Comment                     |\n| :------------------------------------------------------------------------------------- | :-------------------------- |\n| [eslint-plugin-jest/recommended](https://github.com/jest-community/eslint-plugin-jest) | Jest recommended practices. |\n\n### React Testing Library\n\n| Type/Plugin                                                                                                   | Comment                               |\n| :------------------------------------------------------------------------------------------------------------ | :------------------------------------ |\n| [eslint-plugin-testing-library/recommended](https://github.com/testing-library/eslint-plugin-testing-library) | Ease when using react-testing-library |\n\n### Regexp\n\n| Type/Plugin                                                                           | Comment |\n| :------------------------------------------------------------------------------------ | :------ |\n| [eslint-plugin-regexp/recommended](https://github.com/ota-meshi/eslint-plugin-regexp) |         |\n\n### Etc\n\n...\n\n<!-- File: packages/sdk/README.md (Tokens: ~111 | Category: plugin-manifest) -->\n# @teable/sdk\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nSDK for teable extensions\n\n<!-- File: packages/ui-lib/README.md (Tokens: ~118 | Category: plugin-manifest) -->\n# @teable/ui-lib\n\n<p align=\"left\">\n  <a aria-label=\"Build\" href=\"https://github.com/teableio/teable/actions?query=workflow%3ACI\">\n    <img alt=\"build\" src=\"https://img.shields.io/github/workflow/status/teableio/teable/CI-web-app/main?label=CI&logo=github&style=flat-quare&labelColor=000000\" />\n  </a>\n</p>\n\n## Intro\n\nA basic example of a design-system setup with storybook.\n\n<!-- File: packages/ui-lib/src/icons/social/README.md (Tokens: ~37 | Category: plugin-manifest) -->\n## Credits\n\n- **github.svg** by https://www.iconfinder.com/Adi_Sinchetru from https://www.iconfinder.com/icons/1390302/github_icon\n</yakaai_skills>"}