@santi020k/eslint-config-libraries 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/ai.d.ts +8 -0
  4. package/dist/ai.js +29 -0
  5. package/dist/ai.js.map +1 -0
  6. package/dist/autogen.d.ts +8 -0
  7. package/dist/autogen.js +24 -0
  8. package/dist/autogen.js.map +1 -0
  9. package/dist/google-genai.d.ts +8 -0
  10. package/dist/google-genai.js +30 -0
  11. package/dist/google-genai.js.map +1 -0
  12. package/dist/i18next.d.ts +9 -0
  13. package/dist/i18next.js +26 -0
  14. package/dist/i18next.js.map +1 -0
  15. package/dist/index.d.ts +19 -0
  16. package/dist/index.js +42 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/langchain.d.ts +8 -0
  19. package/dist/langchain.js +30 -0
  20. package/dist/langchain.js.map +1 -0
  21. package/dist/lazy.d.ts +24 -0
  22. package/dist/lazy.js +46 -0
  23. package/dist/lazy.js.map +1 -0
  24. package/dist/llamaindex.d.ts +8 -0
  25. package/dist/llamaindex.js +30 -0
  26. package/dist/llamaindex.js.map +1 -0
  27. package/dist/mastra.d.ts +8 -0
  28. package/dist/mastra.js +30 -0
  29. package/dist/mastra.js.map +1 -0
  30. package/dist/mcp.d.ts +8 -0
  31. package/dist/mcp.js +33 -0
  32. package/dist/mcp.js.map +1 -0
  33. package/dist/openai-agents.d.ts +8 -0
  34. package/dist/openai-agents.js +32 -0
  35. package/dist/openai-agents.js.map +1 -0
  36. package/dist/orm.d.ts +31 -0
  37. package/dist/orm.js +104 -0
  38. package/dist/orm.js.map +1 -0
  39. package/dist/registry.d.ts +5 -0
  40. package/dist/registry.js +43 -0
  41. package/dist/registry.js.map +1 -0
  42. package/dist/stencil.d.ts +9 -0
  43. package/dist/stencil.js +48 -0
  44. package/dist/stencil.js.map +1 -0
  45. package/dist/storybook.d.ts +9 -0
  46. package/dist/storybook.js +11 -0
  47. package/dist/storybook.js.map +1 -0
  48. package/dist/tailwind.d.ts +9 -0
  49. package/dist/tailwind.js +21 -0
  50. package/dist/tailwind.js.map +1 -0
  51. package/dist/tanstack.d.ts +12 -0
  52. package/dist/tanstack.js +37 -0
  53. package/dist/tanstack.js.map +1 -0
  54. package/dist/turbo.d.ts +9 -0
  55. package/dist/turbo.js +25 -0
  56. package/dist/turbo.js.map +1 -0
  57. package/dist/zod.d.ts +9 -0
  58. package/dist/zod.js +21 -0
  59. package/dist/zod.js.map +1 -0
  60. package/package.json +90 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 santi020k
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @santi020k/eslint-config-libraries
2
+
3
+ Library-specific rules for Tailwind, Storybook, AI SDKs, ORMs, and related ecosystems.
4
+
5
+ This package is part of the [`@santi020k/eslint-config-basic`](https://github.com/santi020k/eslint-config-basic) monorepo.
6
+
7
+ - Docs: [Libraries](https://eslint.santi020k.com/tooling/libraries)
8
+ - Repository: [santi020k/eslint-config-basic](https://github.com/santi020k/eslint-config-basic)
9
+ - Author: [santi020k](https://santi020k.com)
10
+
11
+ The canonical documentation lives on the Starlight site, so this README intentionally stays short to avoid duplication.
package/dist/ai.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Vercel AI SDK security ESLint configuration.
5
+ */
6
+ declare const aiSdk: () => Promise<TSESLint.FlatConfig.ConfigArray>;
7
+
8
+ export { aiSdk };
package/dist/ai.js ADDED
@@ -0,0 +1,29 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadModule } from "./lazy.js";
3
+ const hasRecommendedConfig = (value) => typeof value === "object" && value !== null && "configs" in value && typeof value.configs.recommended === "object";
4
+ const resolveAiSecurityPlugin = (module) => {
5
+ if (hasRecommendedConfig(module)) return module;
6
+ const candidate = module;
7
+ if (hasRecommendedConfig(candidate.default)) return candidate.default;
8
+ if (hasRecommendedConfig(candidate.plugin)) return candidate.plugin;
9
+ throw new Error("eslint-plugin-vercel-ai-security did not expose a recommended config.");
10
+ };
11
+ const aiSdk = defineLazyConfig("ai-sdk", async () => {
12
+ const plugin = resolveAiSecurityPlugin(await loadModule("eslint-plugin-vercel-ai-security"));
13
+ return [
14
+ {
15
+ files: GLOB_JS_TS_ALL,
16
+ name: "eslint-config-integrations/ai-sdk",
17
+ plugins: {
18
+ "vercel-ai-security": plugin
19
+ },
20
+ rules: {
21
+ ...plugin.configs.recommended.rules
22
+ }
23
+ }
24
+ ];
25
+ });
26
+ export {
27
+ aiSdk
28
+ };
29
+ //# sourceMappingURL=ai.js.map
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ai.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { defineLazyConfig, loadModule, type PluginWithConfigs } from './lazy.js'\n\ntype AiSecurityPlugin = PluginWithConfigs<'recommended'> & {\n plugin?: PluginWithConfigs<'recommended'>\n}\n\nconst hasRecommendedConfig = (value: unknown): value is PluginWithConfigs<'recommended'> => (\n typeof value === 'object' &&\n value !== null &&\n 'configs' in value &&\n typeof (value as PluginWithConfigs<'recommended'>).configs.recommended === 'object'\n)\n\nconst resolveAiSecurityPlugin = (module: unknown): PluginWithConfigs<'recommended'> => {\n if (hasRecommendedConfig(module)) return module\n\n const candidate = module as AiSecurityPlugin & { default?: unknown }\n\n if (hasRecommendedConfig(candidate.default)) return candidate.default\n\n if (hasRecommendedConfig(candidate.plugin)) return candidate.plugin\n\n throw new Error('eslint-plugin-vercel-ai-security did not expose a recommended config.')\n}\n\n/**\n * Vercel AI SDK security ESLint configuration.\n */\nexport const aiSdk: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('ai-sdk', async () => {\n const plugin = resolveAiSecurityPlugin(await loadModule('eslint-plugin-vercel-ai-security'))\n\n return [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/ai-sdk',\n plugins: {\n 'vercel-ai-security': plugin\n },\n rules: {\n ...plugin.configs.recommended.rules\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,sBAAsB;AAI/B,SAAS,kBAAkB,kBAA0C;AAMrE,MAAM,uBAAuB,CAAC,UAC5B,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,OAAQ,MAA2C,QAAQ,gBAAgB;AAG7E,MAAM,0BAA0B,CAAC,WAAsD;AACrF,MAAI,qBAAqB,MAAM,EAAG,QAAO;AAEzC,QAAM,YAAY;AAElB,MAAI,qBAAqB,UAAU,OAAO,EAAG,QAAO,UAAU;AAE9D,MAAI,qBAAqB,UAAU,MAAM,EAAG,QAAO,UAAU;AAE7D,QAAM,IAAI,MAAM,uEAAuE;AACzF;AAKO,MAAM,QAAwD,iBAAiB,UAAU,YAAY;AAC1G,QAAM,SAAS,wBAAwB,MAAM,WAAW,kCAAkC,CAAC;AAE3F,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,sBAAsB;AAAA,MACxB;AAAA,MACA,OAAO;AAAA,QACL,GAAG,OAAO,QAAQ,YAAY;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * AutoGen SDK ESLint configuration.
5
+ */
6
+ declare const autogen: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { autogen };
@@ -0,0 +1,24 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const autogen = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/autogen",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ patterns: [
9
+ {
10
+ group: [
11
+ "autogen-agentchat/dist/*",
12
+ "autogen-core/dist/*"
13
+ ],
14
+ message: "Import AutoGen APIs from their designated package entry points instead of internals."
15
+ }
16
+ ]
17
+ }]
18
+ }
19
+ }
20
+ ];
21
+ export {
22
+ autogen
23
+ };
24
+ //# sourceMappingURL=autogen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autogen.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * AutoGen SDK ESLint configuration.\n */\nexport const autogen = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/autogen',\n rules: {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n 'autogen-agentchat/dist/*',\n 'autogen-core/dist/*'\n ],\n message: 'Import AutoGen APIs from their designated package entry points instead of internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,UAAU,MAAuC;AAAA,EAC5D;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Google GenAI SDK ESLint configuration.
5
+ */
6
+ declare const googleGenAi: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { googleGenAi };
@@ -0,0 +1,30 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const googleGenAi = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/google-genai",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ paths: [
9
+ {
10
+ message: "Use the new @google/genai SDK instead of the legacy @google/generative-ai SDK.",
11
+ name: "@google/generative-ai"
12
+ }
13
+ ],
14
+ patterns: [
15
+ {
16
+ group: [
17
+ "@google/genai/dist/*",
18
+ "@google/genai/src/*"
19
+ ],
20
+ message: 'Import Google GenAI SDK APIs directly from "@google/genai" instead of internals.'
21
+ }
22
+ ]
23
+ }]
24
+ }
25
+ }
26
+ ];
27
+ export {
28
+ googleGenAi
29
+ };
30
+ //# sourceMappingURL=google-genai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/google-genai.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * Google GenAI SDK ESLint configuration.\n */\nexport const googleGenAi = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/google-genai',\n rules: {\n 'no-restricted-imports': ['error', {\n paths: [\n {\n message: 'Use the new @google/genai SDK instead of the legacy @google/generative-ai SDK.',\n name: '@google/generative-ai'\n }\n ],\n patterns: [\n {\n group: [\n '@google/genai/dist/*',\n '@google/genai/src/*'\n ],\n message: 'Import Google GenAI SDK APIs directly from \"@google/genai\" instead of internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,cAAc,MAAuC;AAAA,EAChE;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,OAAO;AAAA,UACL;AAAA,YACE,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * i18next ESLint configuration
5
+ * Enables i18next plugin for internationalization best practices
6
+ */
7
+ declare const i18next: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { i18next };
@@ -0,0 +1,26 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
3
+ const i18next = defineLazyConfig("i18next", async () => {
4
+ const pluginI18next = await loadDefault("eslint-plugin-i18next");
5
+ return [
6
+ {
7
+ files: GLOB_JS_TS_ALL,
8
+ name: "integrations/i18next",
9
+ plugins: {
10
+ i18next: pluginI18next
11
+ },
12
+ rules: {
13
+ "i18next/no-literal-string": ["warn", {
14
+ "jsx-attributes": {
15
+ include: ["label", "placeholder", "alt", "title", "aria-label"]
16
+ },
17
+ mode: "jsx-text-only"
18
+ }]
19
+ }
20
+ }
21
+ ];
22
+ });
23
+ export {
24
+ i18next
25
+ };
26
+ //# sourceMappingURL=i18next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18next.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\nimport type PluginI18next from 'eslint-plugin-i18next'\n\nimport { defineLazyConfig, loadDefault } from './lazy.js'\n\n/**\n * i18next ESLint configuration\n * Enables i18next plugin for internationalization best practices\n */\nexport const i18next: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('i18next', async () => {\n const pluginI18next = await loadDefault<typeof PluginI18next>('eslint-plugin-i18next')\n\n return [\n {\n files: GLOB_JS_TS_ALL,\n name: 'integrations/i18next',\n plugins: {\n i18next: pluginI18next\n },\n rules: {\n 'i18next/no-literal-string': ['warn', {\n 'jsx-attributes': {\n include: ['label', 'placeholder', 'alt', 'title', 'aria-label']\n },\n mode: 'jsx-text-only'\n }]\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,sBAAsB;AAK/B,SAAS,kBAAkB,mBAAmB;AAMvC,MAAM,UAA0D,iBAAiB,WAAW,YAAY;AAC7G,QAAM,gBAAgB,MAAM,YAAkC,uBAAuB;AAErF,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,6BAA6B,CAAC,QAAQ;AAAA,UACpC,kBAAkB;AAAA,YAChB,SAAS,CAAC,SAAS,eAAe,OAAO,SAAS,YAAY;AAAA,UAChE;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,19 @@
1
+ export { aiSdk } from './ai.js';
2
+ export { autogen } from './autogen.js';
3
+ export { googleGenAi } from './google-genai.js';
4
+ export { i18next } from './i18next.js';
5
+ export { langchain } from './langchain.js';
6
+ export { llamaIndex } from './llamaindex.js';
7
+ export { mastra } from './mastra.js';
8
+ export { mcp } from './mcp.js';
9
+ export { openAiAgents } from './openai-agents.js';
10
+ export { drizzle, mikroOrm, prisma, sequelize, typeorm } from './orm.js';
11
+ export { features as libraryFeatures } from './registry.js';
12
+ export { stencil } from './stencil.js';
13
+ export { storybook } from './storybook.js';
14
+ export { tailwind } from './tailwind.js';
15
+ export { tanstackQuery, tanstackRouter } from './tanstack.js';
16
+ export { turbo } from './turbo.js';
17
+ export { zod } from './zod.js';
18
+ import '@typescript-eslint/utils';
19
+ import '@santi020k/eslint-config-core';
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ import { aiSdk } from "./ai.js";
2
+ import { autogen } from "./autogen.js";
3
+ import { googleGenAi } from "./google-genai.js";
4
+ import { i18next } from "./i18next.js";
5
+ import { langchain } from "./langchain.js";
6
+ import { llamaIndex } from "./llamaindex.js";
7
+ import { mastra } from "./mastra.js";
8
+ import { mcp } from "./mcp.js";
9
+ import { openAiAgents } from "./openai-agents.js";
10
+ import { drizzle, mikroOrm, prisma, sequelize, typeorm } from "./orm.js";
11
+ import { features } from "./registry.js";
12
+ import { stencil } from "./stencil.js";
13
+ import { storybook } from "./storybook.js";
14
+ import { tailwind } from "./tailwind.js";
15
+ import { tanstackQuery, tanstackRouter } from "./tanstack.js";
16
+ import { turbo } from "./turbo.js";
17
+ import { zod } from "./zod.js";
18
+ export {
19
+ aiSdk,
20
+ autogen,
21
+ drizzle,
22
+ googleGenAi,
23
+ i18next,
24
+ langchain,
25
+ features as libraryFeatures,
26
+ llamaIndex,
27
+ mastra,
28
+ mcp,
29
+ mikroOrm,
30
+ openAiAgents,
31
+ prisma,
32
+ sequelize,
33
+ stencil,
34
+ storybook,
35
+ tailwind,
36
+ tanstackQuery,
37
+ tanstackRouter,
38
+ turbo,
39
+ typeorm,
40
+ zod
41
+ };
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { aiSdk } from './ai.js'\nexport { autogen } from './autogen.js'\nexport { googleGenAi } from './google-genai.js'\nexport { i18next } from './i18next.js'\nexport { langchain } from './langchain.js'\nexport { llamaIndex } from './llamaindex.js'\nexport { mastra } from './mastra.js'\nexport { mcp } from './mcp.js'\nexport { openAiAgents } from './openai-agents.js'\nexport { drizzle, mikroOrm, prisma, sequelize, typeorm } from './orm.js'\nexport { features as libraryFeatures } from './registry.js'\nexport { stencil } from './stencil.js'\nexport { storybook } from './storybook.js'\nexport { tailwind } from './tailwind.js'\nexport { tanstackQuery, tanstackRouter } from './tanstack.js'\nexport { turbo } from './turbo.js'\nexport { zod } from './zod.js'\n"],"mappings":"AAAA,SAAS,aAAa;AACtB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,WAAW;AACpB,SAAS,oBAAoB;AAC7B,SAAS,SAAS,UAAU,QAAQ,WAAW,eAAe;AAC9D,SAAqB,gBAAuB;AAC5C,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,eAAe,sBAAsB;AAC9C,SAAS,aAAa;AACtB,SAAS,WAAW;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * LangChain.js ESLint configuration.
5
+ */
6
+ declare const langchain: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { langchain };
@@ -0,0 +1,30 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const langchain = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/langchain",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ patterns: [
9
+ {
10
+ group: [
11
+ "langchain/dist/*",
12
+ "langchain/dist/**",
13
+ "langchain/src/*",
14
+ "langchain/src/**",
15
+ "@langchain/*/dist/*",
16
+ "@langchain/*/dist/**",
17
+ "@langchain/*/src/*",
18
+ "@langchain/*/src/**"
19
+ ],
20
+ message: 'Import LangChain APIs from documented package entry points (e.g. "@langchain/core/messages") instead of source or distribution internals.'
21
+ }
22
+ ]
23
+ }]
24
+ }
25
+ }
26
+ ];
27
+ export {
28
+ langchain
29
+ };
30
+ //# sourceMappingURL=langchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/langchain.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * LangChain.js ESLint configuration.\n */\nexport const langchain = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/langchain',\n rules: {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n 'langchain/dist/*',\n 'langchain/dist/**',\n 'langchain/src/*',\n 'langchain/src/**',\n '@langchain/*/dist/*',\n '@langchain/*/dist/**',\n '@langchain/*/src/*',\n '@langchain/*/src/**'\n ],\n message: 'Import LangChain APIs from documented package entry points (e.g. \"@langchain/core/messages\") instead of source or distribution internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,YAAY,MAAuC;AAAA,EAC9D;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
package/dist/lazy.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ type ConfigWithRules = FlatConfig & {
4
+ rules?: FlatRules;
5
+ };
6
+ type FlatParser = NonNullable<FlatConfig['languageOptions']>['parser'];
7
+ type FlatPlugin = NonNullable<FlatConfig['plugins']>[string];
8
+ type FlatRules = NonNullable<FlatConfig['rules']>;
9
+ type PluginWithConfigs<ConfigName extends string = string> = FlatPlugin & {
10
+ configs: Record<ConfigName, ConfigWithRules>;
11
+ };
12
+ type ConfigArray = TSESLint.FlatConfig.ConfigArray;
13
+ type FlatConfig = TSESLint.FlatConfig.Config;
14
+ declare const loadDefault: <T = unknown>(specifier: string) => Promise<T>;
15
+ declare const loadModule: <T = unknown>(specifier: string) => Promise<T>;
16
+ /**
17
+ * Keeps optional integrations import-safe for consumers that do not enable them.
18
+ * @param name - The name of the integration
19
+ * @param load - Function to load the configuration
20
+ * @returns A function that resolves the configuration array lazily
21
+ */
22
+ declare const defineLazyConfig: (name: string, load: () => ConfigArray | Promise<ConfigArray>) => () => Promise<ConfigArray>;
23
+
24
+ export { type ConfigWithRules, type FlatParser, type FlatPlugin, type FlatRules, type PluginWithConfigs, defineLazyConfig, loadDefault, loadModule };
package/dist/lazy.js ADDED
@@ -0,0 +1,46 @@
1
+ import { createRequire } from "node:module";
2
+ import { pathToFileURL } from "node:url";
3
+ const getErrorMessage = (error) => error instanceof Error ? error.message : String(error);
4
+ const hasDefaultExport = (module) => typeof module === "object" && module !== null && "default" in module;
5
+ const isVitest = typeof process !== "undefined" && process.env.VITEST;
6
+ const dynamicImport = isVitest ? (specifier) => import(
7
+ /* @vite-ignore */
8
+ specifier
9
+ ) : Reflect.construct(Function, ["specifier", "return import(specifier)"]);
10
+ const req = createRequire(import.meta.url);
11
+ const resolveSpecifier = (specifier) => {
12
+ let resolved = specifier;
13
+ try {
14
+ resolved = pathToFileURL(req.resolve(specifier)).href;
15
+ } catch {
16
+ }
17
+ return resolved;
18
+ };
19
+ const loadDefault = async (specifier) => {
20
+ const module = await dynamicImport(resolveSpecifier(specifier));
21
+ if (hasDefaultExport(module)) {
22
+ return module.default ?? module;
23
+ }
24
+ return module;
25
+ };
26
+ const loadModule = async (specifier) => await dynamicImport(resolveSpecifier(specifier));
27
+ const defineLazyConfig = (name, load) => {
28
+ let config;
29
+ return async () => {
30
+ try {
31
+ config ??= await load();
32
+ return config;
33
+ } catch (error) {
34
+ throw new Error(
35
+ `Unable to load optional ESLint config "${name}". Install the peer dependencies for that integration or remove it from your defineConfig options. Original error: ${getErrorMessage(error)}`,
36
+ { cause: error }
37
+ );
38
+ }
39
+ };
40
+ };
41
+ export {
42
+ defineLazyConfig,
43
+ loadDefault,
44
+ loadModule
45
+ };
46
+ //# sourceMappingURL=lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lazy.ts"],"sourcesContent":["import { createRequire } from 'node:module'\nimport { pathToFileURL } from 'node:url'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nexport type ConfigWithRules = FlatConfig & { rules?: FlatRules }\n\nexport type FlatParser = NonNullable<FlatConfig['languageOptions']>['parser']\n\nexport type FlatPlugin = NonNullable<FlatConfig['plugins']>[string]\nexport type FlatRules = NonNullable<FlatConfig['rules']>\nexport type PluginWithConfigs<ConfigName extends string = string> = FlatPlugin & {\n configs: Record<ConfigName, ConfigWithRules>\n}\n\ntype ConfigArray = TSESLint.FlatConfig.ConfigArray\n\ntype FlatConfig = TSESLint.FlatConfig.Config\n\nconst getErrorMessage = (error: unknown): string => error instanceof Error ?\n error.message :\n String(error)\n\nconst hasDefaultExport = (module: unknown): module is { default?: unknown } => (\n typeof module === 'object' &&\n module !== null &&\n 'default' in module\n)\n\n// Bypass jiti/bundler transformation of import() to require().\n// Reflect.construct avoids a direct `new Function()` reference (which triggers\n// no-implied-eval) while achieving the same runtime behaviour: the string body\n// is opaque to static analyser so jiti cannot transform it to require().\n\nconst isVitest = typeof process !== 'undefined' && process.env.VITEST\n\n// v8 ignore next 3 -- Reflect.construct branch only runs outside Vitest; not reachable in test suite\nconst dynamicImport: (specifier: string) => Promise<unknown> = isVitest ?\n (specifier: string) => import(/* @vite-ignore */ specifier) :\n Reflect.construct(Function, ['specifier', 'return import(specifier)']) as (specifier: string) => Promise<unknown>\n\nconst req = createRequire(import.meta.url)\n\nconst resolveSpecifier = (specifier: string): string => {\n let resolved = specifier\n\n try {\n resolved = pathToFileURL(req.resolve(specifier)).href\n } catch {\n // Ignore and let dynamicImport throw natural error\n }\n\n return resolved\n}\n\nexport const loadDefault = async <T = unknown>(specifier: string): Promise<T> => {\n const module = await dynamicImport(resolveSpecifier(specifier))\n\n if (hasDefaultExport(module)) {\n return (module.default ?? module) as T\n }\n\n return module as T\n}\n\nexport const loadModule = async <T = unknown>(specifier: string): Promise<T> => await dynamicImport(resolveSpecifier(specifier)) as T\n\n/**\n * Keeps optional integrations import-safe for consumers that do not enable them.\n * @param name - The name of the integration\n * @param load - Function to load the configuration\n * @returns A function that resolves the configuration array lazily\n */\nexport const defineLazyConfig = (\n name: string,\n load: () => ConfigArray | Promise<ConfigArray>\n): () => Promise<ConfigArray> => {\n let config: ConfigArray | undefined\n\n return async (): Promise<ConfigArray> => {\n try {\n config ??= await load()\n\n return config\n } catch (error) {\n throw new Error(\n `Unable to load optional ESLint config \"${name}\". ` +\n 'Install the peer dependencies for that integration or remove it from your defineConfig options. ' +\n `Original error: ${getErrorMessage(error)}`, { cause: error }\n )\n }\n }\n}\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAkB9B,MAAM,kBAAkB,CAAC,UAA2B,iBAAiB,QACnE,MAAM,UACN,OAAO,KAAK;AAEd,MAAM,mBAAmB,CAAC,WACxB,OAAO,WAAW,YAClB,WAAW,QACX,aAAa;AAQf,MAAM,WAAW,OAAO,YAAY,eAAe,QAAQ,IAAI;AAG/D,MAAM,gBAAyD,WAC7D,CAAC,cAAsB;AAAA;AAAA,EAA0B;AAAA,IACjD,QAAQ,UAAU,UAAU,CAAC,aAAa,0BAA0B,CAAC;AAEvE,MAAM,MAAM,cAAc,YAAY,GAAG;AAEzC,MAAM,mBAAmB,CAAC,cAA8B;AACtD,MAAI,WAAW;AAEf,MAAI;AACF,eAAW,cAAc,IAAI,QAAQ,SAAS,CAAC,EAAE;AAAA,EACnD,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAEO,MAAM,cAAc,OAAoB,cAAkC;AAC/E,QAAM,SAAS,MAAM,cAAc,iBAAiB,SAAS,CAAC;AAE9D,MAAI,iBAAiB,MAAM,GAAG;AAC5B,WAAQ,OAAO,WAAW;AAAA,EAC5B;AAEA,SAAO;AACT;AAEO,MAAM,aAAa,OAAoB,cAAkC,MAAM,cAAc,iBAAiB,SAAS,CAAC;AAQxH,MAAM,mBAAmB,CAC9B,MACA,SAC+B;AAC/B,MAAI;AAEJ,SAAO,YAAkC;AACvC,QAAI;AACF,iBAAW,MAAM,KAAK;AAEtB,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,0CAA0C,IAAI,sHAE3B,gBAAgB,KAAK,CAAC;AAAA,QAAI,EAAE,OAAO,MAAM;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * LlamaIndex.TS ESLint configuration.
5
+ */
6
+ declare const llamaIndex: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { llamaIndex };
@@ -0,0 +1,30 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const llamaIndex = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/llamaindex",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ patterns: [
9
+ {
10
+ group: [
11
+ "llamaindex/dist/*",
12
+ "llamaindex/dist/**",
13
+ "llamaindex/src/*",
14
+ "llamaindex/src/**",
15
+ "@llamaindex/*/dist/*",
16
+ "@llamaindex/*/dist/**",
17
+ "@llamaindex/*/src/*",
18
+ "@llamaindex/*/src/**"
19
+ ],
20
+ message: 'Import LlamaIndex APIs from documented package entry points (e.g. "llamaindex" or "@llamaindex/core") instead of source or distribution internals.'
21
+ }
22
+ ]
23
+ }]
24
+ }
25
+ }
26
+ ];
27
+ export {
28
+ llamaIndex
29
+ };
30
+ //# sourceMappingURL=llamaindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/llamaindex.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * LlamaIndex.TS ESLint configuration.\n */\nexport const llamaIndex = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/llamaindex',\n rules: {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n 'llamaindex/dist/*',\n 'llamaindex/dist/**',\n 'llamaindex/src/*',\n 'llamaindex/src/**',\n '@llamaindex/*/dist/*',\n '@llamaindex/*/dist/**',\n '@llamaindex/*/src/*',\n '@llamaindex/*/src/**'\n ],\n message: 'Import LlamaIndex APIs from documented package entry points (e.g. \"llamaindex\" or \"@llamaindex/core\") instead of source or distribution internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,aAAa,MAAuC;AAAA,EAC/D;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Mastra agent framework ESLint configuration.
5
+ */
6
+ declare const mastra: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { mastra };
package/dist/mastra.js ADDED
@@ -0,0 +1,30 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const mastra = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/mastra",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ patterns: [
9
+ {
10
+ group: [
11
+ "@mastra/*/dist/*",
12
+ "@mastra/*/dist/**",
13
+ "@mastra/*/src/*",
14
+ "@mastra/*/src/**",
15
+ "@mastra/core/dist/*",
16
+ "@mastra/core/dist/**",
17
+ "@mastra/core/src/*",
18
+ "@mastra/core/src/**"
19
+ ],
20
+ message: "Import Mastra APIs from documented package entry points instead of source or distribution internals."
21
+ }
22
+ ]
23
+ }]
24
+ }
25
+ }
26
+ ];
27
+ export {
28
+ mastra
29
+ };
30
+ //# sourceMappingURL=mastra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mastra.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * Mastra agent framework ESLint configuration.\n */\nexport const mastra = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/mastra',\n rules: {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n '@mastra/*/dist/*',\n '@mastra/*/dist/**',\n '@mastra/*/src/*',\n '@mastra/*/src/**',\n '@mastra/core/dist/*',\n '@mastra/core/dist/**',\n '@mastra/core/src/*',\n '@mastra/core/src/**'\n ],\n message: 'Import Mastra APIs from documented package entry points instead of source or distribution internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,SAAS,MAAuC;AAAA,EAC3D;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Model Context Protocol SDK ESLint configuration.
5
+ */
6
+ declare const mcp: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { mcp };
package/dist/mcp.js ADDED
@@ -0,0 +1,33 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const mcp = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/mcp",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ paths: [
9
+ {
10
+ importNames: ["McpServer"],
11
+ message: 'Import McpServer from "@modelcontextprotocol/sdk/server/mcp.js" so server code stays on the public SDK entry point.',
12
+ name: "@modelcontextprotocol/sdk"
13
+ }
14
+ ],
15
+ patterns: [
16
+ {
17
+ group: [
18
+ "@modelcontextprotocol/sdk/dist/*",
19
+ "@modelcontextprotocol/sdk/dist/**",
20
+ "@modelcontextprotocol/sdk/shared/*",
21
+ "@modelcontextprotocol/sdk/shared/**"
22
+ ],
23
+ message: "Import MCP SDK APIs from documented server, client, or types entry points instead of internal package modules."
24
+ }
25
+ ]
26
+ }]
27
+ }
28
+ }
29
+ ];
30
+ export {
31
+ mcp
32
+ };
33
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mcp.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * Model Context Protocol SDK ESLint configuration.\n */\nexport const mcp = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/mcp',\n rules: {\n 'no-restricted-imports': ['error', {\n paths: [\n {\n importNames: ['McpServer'],\n message: 'Import McpServer from \"@modelcontextprotocol/sdk/server/mcp.js\" so server code stays on the public SDK entry point.',\n name: '@modelcontextprotocol/sdk'\n }\n ],\n patterns: [\n {\n group: [\n '@modelcontextprotocol/sdk/dist/*',\n '@modelcontextprotocol/sdk/dist/**',\n '@modelcontextprotocol/sdk/shared/*',\n '@modelcontextprotocol/sdk/shared/**'\n ],\n message: 'Import MCP SDK APIs from documented server, client, or types entry points instead of internal package modules.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,MAAM,MAAuC;AAAA,EACxD;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,OAAO;AAAA,UACL;AAAA,YACE,aAAa,CAAC,WAAW;AAAA,YACzB,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * OpenAI Agents SDK ESLint configuration.
5
+ */
6
+ declare const openAiAgents: () => TSESLint.FlatConfig.ConfigArray;
7
+
8
+ export { openAiAgents };
@@ -0,0 +1,32 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const openAiAgents = () => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: "eslint-config-integrations/openai-agents",
6
+ rules: {
7
+ "no-restricted-imports": ["error", {
8
+ paths: [
9
+ {
10
+ message: 'Use the dedicated "@openai/agents" SDK for agent workflows instead of importing agents from the base OpenAI client.',
11
+ name: "openai/agents"
12
+ }
13
+ ],
14
+ patterns: [
15
+ {
16
+ group: [
17
+ "@openai/agents/dist/*",
18
+ "@openai/agents/dist/**",
19
+ "@openai/agents/src/*",
20
+ "@openai/agents/src/**"
21
+ ],
22
+ message: 'Import OpenAI Agents SDK APIs from "@openai/agents" or documented subpath entry points instead of internals.'
23
+ }
24
+ ]
25
+ }]
26
+ }
27
+ }
28
+ ];
29
+ export {
30
+ openAiAgents
31
+ };
32
+ //# sourceMappingURL=openai-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/openai-agents.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\n/**\n * OpenAI Agents SDK ESLint configuration.\n */\nexport const openAiAgents = (): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/openai-agents',\n rules: {\n 'no-restricted-imports': ['error', {\n paths: [\n {\n message: 'Use the dedicated \"@openai/agents\" SDK for agent workflows instead of importing agents from the base OpenAI client.',\n name: 'openai/agents'\n }\n ],\n patterns: [\n {\n group: [\n '@openai/agents/dist/*',\n '@openai/agents/dist/**',\n '@openai/agents/src/*',\n '@openai/agents/src/**'\n ],\n message: 'Import OpenAI Agents SDK APIs from \"@openai/agents\" or documented subpath entry points instead of internals.'\n }\n ]\n }]\n }\n }\n]\n"],"mappings":"AAAA,SAAS,sBAAsB;AAOxB,MAAM,eAAe,MAAuC;AAAA,EACjE;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,yBAAyB,CAAC,SAAS;AAAA,QACjC,OAAO;AAAA,UACL;AAAA,YACE,SAAS;AAAA,YACT,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
package/dist/orm.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * TypeORM ESLint configuration.
5
+ *
6
+ * TypeORM does not currently provide an ESLint 10-ready recommended flat
7
+ * config. This integration focuses on stable imports and avoids legacy global
8
+ * helpers that make migrations and tests harder to reason about.
9
+ */
10
+ declare const typeorm: () => TSESLint.FlatConfig.ConfigArray;
11
+ /**
12
+ * Prisma ESLint configuration.
13
+ *
14
+ * Keeps Prisma Client usage on public package entry points. This avoids runtime
15
+ * internals that frequently change between generated client versions.
16
+ */
17
+ declare const prisma: () => TSESLint.FlatConfig.ConfigArray;
18
+ /**
19
+ * Drizzle ORM ESLint configuration.
20
+ */
21
+ declare const drizzle: () => TSESLint.FlatConfig.ConfigArray;
22
+ /**
23
+ * MikroORM ESLint configuration.
24
+ */
25
+ declare const mikroOrm: () => TSESLint.FlatConfig.ConfigArray;
26
+ /**
27
+ * Sequelize ESLint configuration.
28
+ */
29
+ declare const sequelize: () => TSESLint.FlatConfig.ConfigArray;
30
+
31
+ export { drizzle, mikroOrm, prisma, sequelize, typeorm };
package/dist/orm.js ADDED
@@ -0,0 +1,104 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ const createOrmConfig = (ormName, rules) => [
3
+ {
4
+ files: GLOB_JS_TS_ALL,
5
+ name: `eslint-config-integrations/${ormName}`,
6
+ rules
7
+ }
8
+ ];
9
+ const typeorm = () => createOrmConfig("typeorm", {
10
+ "no-restricted-imports": ["error", {
11
+ paths: [
12
+ {
13
+ importNames: [
14
+ "getConnection",
15
+ "getManager",
16
+ "getMongoManager",
17
+ "getMongoRepository",
18
+ "getRepository",
19
+ "getTreeRepository"
20
+ ],
21
+ message: "Prefer DataSource, EntityManager, or injected Repository instances over legacy TypeORM global helpers.",
22
+ name: "typeorm"
23
+ },
24
+ {
25
+ message: 'Import TypeORM APIs from "typeorm" instead of the browser build.',
26
+ name: "typeorm/browser"
27
+ }
28
+ ],
29
+ patterns: [
30
+ {
31
+ group: ["typeorm/*", "!typeorm/browser"],
32
+ message: 'Import public TypeORM APIs from "typeorm"; subpath imports can couple code to internal package layout.'
33
+ }
34
+ ]
35
+ }]
36
+ });
37
+ const prisma = () => createOrmConfig("prisma", {
38
+ "no-restricted-imports": ["error", {
39
+ patterns: [
40
+ {
41
+ group: [
42
+ "@prisma/client/runtime",
43
+ "@prisma/client/runtime/*",
44
+ ".prisma/client",
45
+ ".prisma/client/*"
46
+ ],
47
+ message: 'Import Prisma APIs from "@prisma/client"; generated runtime internals are not a stable application API.'
48
+ }
49
+ ]
50
+ }]
51
+ });
52
+ const drizzle = () => createOrmConfig("drizzle", {
53
+ "no-restricted-imports": ["error", {
54
+ patterns: [
55
+ {
56
+ group: [
57
+ "drizzle-orm/*/session",
58
+ "drizzle-orm/*/session.*",
59
+ "drizzle-orm/*/query-builders/*",
60
+ "drizzle-orm/*/migrator",
61
+ "drizzle-orm/*/migrator.*"
62
+ ],
63
+ message: "Use Drizzle public driver, schema, migration, and query APIs instead of internal session or builder modules."
64
+ }
65
+ ]
66
+ }]
67
+ });
68
+ const mikroOrm = () => createOrmConfig("mikro-orm", {
69
+ "no-restricted-imports": ["error", {
70
+ patterns: [
71
+ {
72
+ group: [
73
+ "@mikro-orm/core/entity/*",
74
+ "@mikro-orm/core/platforms/*",
75
+ "@mikro-orm/core/unit-of-work/*",
76
+ "@mikro-orm/core/utils/*"
77
+ ],
78
+ message: "Import MikroORM APIs from documented package entry points instead of core internals."
79
+ }
80
+ ]
81
+ }]
82
+ });
83
+ const sequelize = () => createOrmConfig("sequelize", {
84
+ "no-restricted-imports": ["error", {
85
+ patterns: [
86
+ {
87
+ group: [
88
+ "sequelize/types/*",
89
+ "sequelize/lib/*",
90
+ "@sequelize/core/_non-semver-use-at-your-own-risk_/*"
91
+ ],
92
+ message: "Use Sequelize public exports; internal type, lib, and non-semver modules are unstable."
93
+ }
94
+ ]
95
+ }]
96
+ });
97
+ export {
98
+ drizzle,
99
+ mikroOrm,
100
+ prisma,
101
+ sequelize,
102
+ typeorm
103
+ };
104
+ //# sourceMappingURL=orm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orm.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nconst createOrmConfig = (\n ormName: string,\n rules: NonNullable<TSESLint.FlatConfig.Config['rules']>\n): TSESLint.FlatConfig.ConfigArray => [\n {\n files: GLOB_JS_TS_ALL,\n name: `eslint-config-integrations/${ormName}`,\n rules\n }\n]\n\n/**\n * TypeORM ESLint configuration.\n *\n * TypeORM does not currently provide an ESLint 10-ready recommended flat\n * config. This integration focuses on stable imports and avoids legacy global\n * helpers that make migrations and tests harder to reason about.\n */\nexport const typeorm = (): TSESLint.FlatConfig.ConfigArray => createOrmConfig('typeorm', {\n 'no-restricted-imports': ['error', {\n paths: [\n {\n importNames: [\n 'getConnection',\n 'getManager',\n 'getMongoManager',\n 'getMongoRepository',\n 'getRepository',\n 'getTreeRepository'\n ],\n message: 'Prefer DataSource, EntityManager, or injected Repository instances over legacy TypeORM global helpers.',\n name: 'typeorm'\n },\n {\n message: 'Import TypeORM APIs from \"typeorm\" instead of the browser build.',\n name: 'typeorm/browser'\n }\n ],\n patterns: [\n {\n group: ['typeorm/*', '!typeorm/browser'],\n message: 'Import public TypeORM APIs from \"typeorm\"; subpath imports can couple code to internal package layout.'\n }\n ]\n }]\n})\n\n/**\n * Prisma ESLint configuration.\n *\n * Keeps Prisma Client usage on public package entry points. This avoids runtime\n * internals that frequently change between generated client versions.\n */\nexport const prisma = (): TSESLint.FlatConfig.ConfigArray => createOrmConfig('prisma', {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n '@prisma/client/runtime',\n '@prisma/client/runtime/*',\n '.prisma/client',\n '.prisma/client/*'\n ],\n message: 'Import Prisma APIs from \"@prisma/client\"; generated runtime internals are not a stable application API.'\n }\n ]\n }]\n})\n\n/**\n * Drizzle ORM ESLint configuration.\n */\nexport const drizzle = (): TSESLint.FlatConfig.ConfigArray => createOrmConfig('drizzle', {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n 'drizzle-orm/*/session',\n 'drizzle-orm/*/session.*',\n 'drizzle-orm/*/query-builders/*',\n 'drizzle-orm/*/migrator',\n 'drizzle-orm/*/migrator.*'\n ],\n message: 'Use Drizzle public driver, schema, migration, and query APIs instead of internal session or builder modules.'\n }\n ]\n }]\n})\n\n/**\n * MikroORM ESLint configuration.\n */\nexport const mikroOrm = (): TSESLint.FlatConfig.ConfigArray => createOrmConfig('mikro-orm', {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n '@mikro-orm/core/entity/*',\n '@mikro-orm/core/platforms/*',\n '@mikro-orm/core/unit-of-work/*',\n '@mikro-orm/core/utils/*'\n ],\n message: 'Import MikroORM APIs from documented package entry points instead of core internals.'\n }\n ]\n }]\n})\n\n/**\n * Sequelize ESLint configuration.\n */\nexport const sequelize = (): TSESLint.FlatConfig.ConfigArray => createOrmConfig('sequelize', {\n 'no-restricted-imports': ['error', {\n patterns: [\n {\n group: [\n 'sequelize/types/*',\n 'sequelize/lib/*',\n '@sequelize/core/_non-semver-use-at-your-own-risk_/*'\n ],\n message: 'Use Sequelize public exports; internal type, lib, and non-semver modules are unstable.'\n }\n ]\n }]\n})\n"],"mappings":"AAAA,SAAS,sBAAsB;AAI/B,MAAM,kBAAkB,CACtB,SACA,UACoC;AAAA,EACpC;AAAA,IACE,OAAO;AAAA,IACP,MAAM,8BAA8B,OAAO;AAAA,IAC3C;AAAA,EACF;AACF;AASO,MAAM,UAAU,MAAuC,gBAAgB,WAAW;AAAA,EACvF,yBAAyB,CAAC,SAAS;AAAA,IACjC,OAAO;AAAA,MACL;AAAA,QACE,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,OAAO,CAAC,aAAa,kBAAkB;AAAA,QACvC,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;AAQM,MAAM,SAAS,MAAuC,gBAAgB,UAAU;AAAA,EACrF,yBAAyB,CAAC,SAAS;AAAA,IACjC,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;AAKM,MAAM,UAAU,MAAuC,gBAAgB,WAAW;AAAA,EACvF,yBAAyB,CAAC,SAAS;AAAA,IACjC,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;AAKM,MAAM,WAAW,MAAuC,gBAAgB,aAAa;AAAA,EAC1F,yBAAyB,CAAC,SAAS;AAAA,IACjC,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;AAKM,MAAM,YAAY,MAAuC,gBAAgB,aAAa;AAAA,EAC3F,yBAAyB,CAAC,SAAS;AAAA,IACjC,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;","names":[]}
@@ -0,0 +1,5 @@
1
+ import { ConfigFeature } from '@santi020k/eslint-config-core';
2
+
3
+ declare const features: ConfigFeature[];
4
+
5
+ export { features };
@@ -0,0 +1,43 @@
1
+ import { aiSdk } from "./ai.js";
2
+ import { autogen } from "./autogen.js";
3
+ import { googleGenAi } from "./google-genai.js";
4
+ import { i18next } from "./i18next.js";
5
+ import { langchain } from "./langchain.js";
6
+ import { llamaIndex } from "./llamaindex.js";
7
+ import { mastra } from "./mastra.js";
8
+ import { mcp } from "./mcp.js";
9
+ import { openAiAgents } from "./openai-agents.js";
10
+ import { drizzle, mikroOrm, prisma, sequelize, typeorm } from "./orm.js";
11
+ import { stencil } from "./stencil.js";
12
+ import { storybook } from "./storybook.js";
13
+ import { tailwind } from "./tailwind.js";
14
+ import { tanstackQuery, tanstackRouter } from "./tanstack.js";
15
+ import { turbo } from "./turbo.js";
16
+ import { zod } from "./zod.js";
17
+ const features = [
18
+ { category: "library", create: aiSdk, id: "ai-sdk", order: 200 },
19
+ { category: "library", create: mcp, id: "mcp", order: 201 },
20
+ { category: "library", create: mastra, id: "mastra", order: 202 },
21
+ { category: "library", create: openAiAgents, id: "openai-agents", order: 203 },
22
+ { category: "library", create: googleGenAi, id: "google-genai", order: 204 },
23
+ { category: "library", create: autogen, id: "autogen", order: 205 },
24
+ { category: "library", create: langchain, id: "langchain", order: 206 },
25
+ { category: "library", create: llamaIndex, id: "llamaindex", order: 207 },
26
+ { category: "library", create: typeorm, id: "typeorm", order: 208 },
27
+ { category: "library", create: prisma, id: "prisma", order: 209 },
28
+ { category: "library", create: drizzle, id: "drizzle", order: 210 },
29
+ { category: "library", create: mikroOrm, id: "mikro-orm", order: 211 },
30
+ { category: "library", create: sequelize, id: "sequelize", order: 212 },
31
+ { category: "library", create: tailwind, id: "tailwind", order: 213 },
32
+ { category: "library", create: i18next, id: "i18next", order: 214 },
33
+ { category: "library", create: stencil, id: "stencil", order: 215 },
34
+ { category: "library", create: tanstackQuery, id: "tanstack-query", order: 216 },
35
+ { category: "library", create: tanstackRouter, id: "tanstack-router", order: 217 },
36
+ { category: "library", create: storybook, id: "storybook", order: 218 },
37
+ { category: "library", create: zod, id: "zod", order: 219 },
38
+ { category: "library", create: turbo, id: "turbo", order: 220 }
39
+ ];
40
+ export {
41
+ features
42
+ };
43
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["import type { ConfigFeature } from '@santi020k/eslint-config-core'\n\nimport { aiSdk } from './ai.js'\nimport { autogen } from './autogen.js'\nimport { googleGenAi } from './google-genai.js'\nimport { i18next } from './i18next.js'\nimport { langchain } from './langchain.js'\nimport { llamaIndex } from './llamaindex.js'\nimport { mastra } from './mastra.js'\nimport { mcp } from './mcp.js'\nimport { openAiAgents } from './openai-agents.js'\nimport { drizzle, mikroOrm, prisma, sequelize, typeorm } from './orm.js'\nimport { stencil } from './stencil.js'\nimport { storybook } from './storybook.js'\nimport { tailwind } from './tailwind.js'\nimport { tanstackQuery, tanstackRouter } from './tanstack.js'\nimport { turbo } from './turbo.js'\nimport { zod } from './zod.js'\n\nexport const features: ConfigFeature[] = [\n { category: 'library', create: aiSdk, id: 'ai-sdk', order: 200 },\n { category: 'library', create: mcp, id: 'mcp', order: 201 },\n { category: 'library', create: mastra, id: 'mastra', order: 202 },\n { category: 'library', create: openAiAgents, id: 'openai-agents', order: 203 },\n { category: 'library', create: googleGenAi, id: 'google-genai', order: 204 },\n { category: 'library', create: autogen, id: 'autogen', order: 205 },\n { category: 'library', create: langchain, id: 'langchain', order: 206 },\n { category: 'library', create: llamaIndex, id: 'llamaindex', order: 207 },\n { category: 'library', create: typeorm, id: 'typeorm', order: 208 },\n { category: 'library', create: prisma, id: 'prisma', order: 209 },\n { category: 'library', create: drizzle, id: 'drizzle', order: 210 },\n { category: 'library', create: mikroOrm, id: 'mikro-orm', order: 211 },\n { category: 'library', create: sequelize, id: 'sequelize', order: 212 },\n { category: 'library', create: tailwind, id: 'tailwind', order: 213 },\n { category: 'library', create: i18next, id: 'i18next', order: 214 },\n { category: 'library', create: stencil, id: 'stencil', order: 215 },\n { category: 'library', create: tanstackQuery, id: 'tanstack-query', order: 216 },\n { category: 'library', create: tanstackRouter, id: 'tanstack-router', order: 217 },\n { category: 'library', create: storybook, id: 'storybook', order: 218 },\n { category: 'library', create: zod, id: 'zod', order: 219 },\n { category: 'library', create: turbo, id: 'turbo', order: 220 }\n]\n"],"mappings":"AAEA,SAAS,aAAa;AACtB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,WAAW;AACpB,SAAS,oBAAoB;AAC7B,SAAS,SAAS,UAAU,QAAQ,WAAW,eAAe;AAC9D,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,eAAe,sBAAsB;AAC9C,SAAS,aAAa;AACtB,SAAS,WAAW;AAEb,MAAM,WAA4B;AAAA,EACvC,EAAE,UAAU,WAAW,QAAQ,OAAO,IAAI,UAAU,OAAO,IAAI;AAAA,EAC/D,EAAE,UAAU,WAAW,QAAQ,KAAK,IAAI,OAAO,OAAO,IAAI;AAAA,EAC1D,EAAE,UAAU,WAAW,QAAQ,QAAQ,IAAI,UAAU,OAAO,IAAI;AAAA,EAChE,EAAE,UAAU,WAAW,QAAQ,cAAc,IAAI,iBAAiB,OAAO,IAAI;AAAA,EAC7E,EAAE,UAAU,WAAW,QAAQ,aAAa,IAAI,gBAAgB,OAAO,IAAI;AAAA,EAC3E,EAAE,UAAU,WAAW,QAAQ,SAAS,IAAI,WAAW,OAAO,IAAI;AAAA,EAClE,EAAE,UAAU,WAAW,QAAQ,WAAW,IAAI,aAAa,OAAO,IAAI;AAAA,EACtE,EAAE,UAAU,WAAW,QAAQ,YAAY,IAAI,cAAc,OAAO,IAAI;AAAA,EACxE,EAAE,UAAU,WAAW,QAAQ,SAAS,IAAI,WAAW,OAAO,IAAI;AAAA,EAClE,EAAE,UAAU,WAAW,QAAQ,QAAQ,IAAI,UAAU,OAAO,IAAI;AAAA,EAChE,EAAE,UAAU,WAAW,QAAQ,SAAS,IAAI,WAAW,OAAO,IAAI;AAAA,EAClE,EAAE,UAAU,WAAW,QAAQ,UAAU,IAAI,aAAa,OAAO,IAAI;AAAA,EACrE,EAAE,UAAU,WAAW,QAAQ,WAAW,IAAI,aAAa,OAAO,IAAI;AAAA,EACtE,EAAE,UAAU,WAAW,QAAQ,UAAU,IAAI,YAAY,OAAO,IAAI;AAAA,EACpE,EAAE,UAAU,WAAW,QAAQ,SAAS,IAAI,WAAW,OAAO,IAAI;AAAA,EAClE,EAAE,UAAU,WAAW,QAAQ,SAAS,IAAI,WAAW,OAAO,IAAI;AAAA,EAClE,EAAE,UAAU,WAAW,QAAQ,eAAe,IAAI,kBAAkB,OAAO,IAAI;AAAA,EAC/E,EAAE,UAAU,WAAW,QAAQ,gBAAgB,IAAI,mBAAmB,OAAO,IAAI;AAAA,EACjF,EAAE,UAAU,WAAW,QAAQ,WAAW,IAAI,aAAa,OAAO,IAAI;AAAA,EACtE,EAAE,UAAU,WAAW,QAAQ,KAAK,IAAI,OAAO,OAAO,IAAI;AAAA,EAC1D,EAAE,UAAU,WAAW,QAAQ,OAAO,IAAI,SAAS,OAAO,IAAI;AAChE;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Stencil ESLint configuration
5
+ * Enforces best practices for Stencil.js components
6
+ */
7
+ declare const stencil: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { stencil };
@@ -0,0 +1,48 @@
1
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
2
+ const stencil = defineLazyConfig("stencil", async () => {
3
+ const stencilPlugin = await loadDefault("@stencil/eslint-plugin");
4
+ return [
5
+ {
6
+ files: ["**/*.{tsx,ts}"],
7
+ name: "integrations/stencil",
8
+ plugins: {
9
+ "@stencil-community": stencilPlugin
10
+ },
11
+ rules: {
12
+ "@stencil-community/async-methods": "error",
13
+ "@stencil-community/ban-prefix": ["error", ["stencil", "stnl", "st"]],
14
+ "@stencil-community/decorators-context": "error",
15
+ "@stencil-community/decorators-style": [
16
+ "error",
17
+ {
18
+ element: "inline",
19
+ event: "inline",
20
+ listen: "multiline",
21
+ method: "multiline",
22
+ prop: "inline",
23
+ state: "inline",
24
+ watch: "multiline"
25
+ }
26
+ ],
27
+ "@stencil-community/element-type": "error",
28
+ "@stencil-community/host-data-deprecated": "error",
29
+ "@stencil-community/methods-must-be-public": "error",
30
+ "@stencil-community/no-unused-watch": "error",
31
+ "@stencil-community/own-methods-must-be-private": "error",
32
+ "@stencil-community/own-props-must-be-private": "error",
33
+ "@stencil-community/prefer-vdom-listener": "error",
34
+ "@stencil-community/props-must-be-public": "error",
35
+ "@stencil-community/props-must-be-readonly": "error",
36
+ "@stencil-community/render-returns-host": "error",
37
+ "@stencil-community/required-jsdoc": "error",
38
+ "@stencil-community/reserved-member-names": "error",
39
+ "@stencil-community/single-export": "error",
40
+ "@stencil-community/strict-mutable": "error"
41
+ }
42
+ }
43
+ ];
44
+ });
45
+ export {
46
+ stencil
47
+ };
48
+ //# sourceMappingURL=stencil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stencil.ts"],"sourcesContent":["import type StencilPlugin from '@stencil/eslint-plugin'\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { defineLazyConfig, loadDefault } from './lazy.js'\n\n/**\n * Stencil ESLint configuration\n * Enforces best practices for Stencil.js components\n */\nexport const stencil: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('stencil', async () => {\n const stencilPlugin = await loadDefault<typeof StencilPlugin>('@stencil/eslint-plugin')\n\n return [\n {\n files: ['**/*.{tsx,ts}'],\n name: 'integrations/stencil',\n plugins: {\n '@stencil-community': stencilPlugin as unknown as TSESLint.FlatConfig.Plugin\n },\n rules: {\n '@stencil-community/async-methods': 'error',\n '@stencil-community/ban-prefix': ['error', ['stencil', 'stnl', 'st']],\n '@stencil-community/decorators-context': 'error',\n '@stencil-community/decorators-style': [\n 'error', {\n element: 'inline',\n event: 'inline',\n listen: 'multiline',\n method: 'multiline',\n prop: 'inline',\n state: 'inline',\n watch: 'multiline'\n }],\n '@stencil-community/element-type': 'error',\n '@stencil-community/host-data-deprecated': 'error',\n '@stencil-community/methods-must-be-public': 'error',\n '@stencil-community/no-unused-watch': 'error',\n '@stencil-community/own-methods-must-be-private': 'error',\n '@stencil-community/own-props-must-be-private': 'error',\n '@stencil-community/prefer-vdom-listener': 'error',\n '@stencil-community/props-must-be-public': 'error',\n '@stencil-community/props-must-be-readonly': 'error',\n '@stencil-community/render-returns-host': 'error',\n '@stencil-community/required-jsdoc': 'error',\n '@stencil-community/reserved-member-names': 'error',\n '@stencil-community/single-export': 'error',\n '@stencil-community/strict-mutable': 'error'\n }\n }\n ]\n})\n"],"mappings":"AAGA,SAAS,kBAAkB,mBAAmB;AAMvC,MAAM,UAA0D,iBAAiB,WAAW,YAAY;AAC7G,QAAM,gBAAgB,MAAM,YAAkC,wBAAwB;AAEtF,SAAO;AAAA,IACL;AAAA,MACE,OAAO,CAAC,eAAe;AAAA,MACvB,MAAM;AAAA,MACN,SAAS;AAAA,QACP,sBAAsB;AAAA,MACxB;AAAA,MACA,OAAO;AAAA,QACL,oCAAoC;AAAA,QACpC,iCAAiC,CAAC,SAAS,CAAC,WAAW,QAAQ,IAAI,CAAC;AAAA,QACpE,yCAAyC;AAAA,QACzC,uCAAuC;AAAA,UACrC;AAAA,UAAS;AAAA,YACP,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,QAAC;AAAA,QACH,mCAAmC;AAAA,QACnC,2CAA2C;AAAA,QAC3C,6CAA6C;AAAA,QAC7C,sCAAsC;AAAA,QACtC,kDAAkD;AAAA,QAClD,gDAAgD;AAAA,QAChD,2CAA2C;AAAA,QAC3C,2CAA2C;AAAA,QAC3C,6CAA6C;AAAA,QAC7C,0CAA0C;AAAA,QAC1C,qCAAqC;AAAA,QACrC,4CAA4C;AAAA,QAC5C,oCAAoC;AAAA,QACpC,qCAAqC;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Storybook ESLint configuration
5
+ * Provides rules for Storybook story best practices
6
+ */
7
+ declare const storybook: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { storybook };
@@ -0,0 +1,11 @@
1
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
2
+ const storybook = defineLazyConfig("storybook", async () => {
3
+ const pluginStorybook = await loadDefault("eslint-plugin-storybook");
4
+ return [
5
+ ...pluginStorybook.configs["flat/recommended"]
6
+ ];
7
+ });
8
+ export {
9
+ storybook
10
+ };
11
+ //# sourceMappingURL=storybook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storybook.ts"],"sourcesContent":["import type { TSESLint } from '@typescript-eslint/utils'\nimport type PluginStorybook from 'eslint-plugin-storybook'\n\nimport { defineLazyConfig, loadDefault } from './lazy.js'\n\n/**\n * Storybook ESLint configuration\n * Provides rules for Storybook story best practices\n */\nexport const storybook: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('storybook', async () => {\n const pluginStorybook = await loadDefault<typeof PluginStorybook>('eslint-plugin-storybook')\n\n return [\n ...(pluginStorybook.configs['flat/recommended'])\n ]\n})\n"],"mappings":"AAGA,SAAS,kBAAkB,mBAAmB;AAMvC,MAAM,YAA4D,iBAAiB,aAAa,YAAY;AACjH,QAAM,kBAAkB,MAAM,YAAoC,yBAAyB;AAE3F,SAAO;AAAA,IACL,GAAI,gBAAgB,QAAQ,kBAAkB;AAAA,EAChD;AACF,CAAC;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Tailwind CSS ESLint configuration
5
+ * Enforces Tailwind CSS best practices using eslint-plugin-better-tailwindcss
6
+ */
7
+ declare const tailwind: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { tailwind };
@@ -0,0 +1,21 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
3
+ const tailwind = defineLazyConfig("tailwind", async () => {
4
+ const pluginTailwind = await loadDefault("eslint-plugin-better-tailwindcss");
5
+ return [
6
+ {
7
+ ...pluginTailwind.configs.recommended,
8
+ files: GLOB_JS_TS_ALL,
9
+ name: "santi020k/tailwind/recommended",
10
+ settings: {
11
+ "better-tailwindcss": {
12
+ // Enable faster resolution in monorepos
13
+ }
14
+ }
15
+ }
16
+ ];
17
+ });
18
+ export {
19
+ tailwind
20
+ };
21
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tailwind.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { defineLazyConfig, loadDefault, type PluginWithConfigs } from './lazy.js'\n\n/**\n * Tailwind CSS ESLint configuration\n * Enforces Tailwind CSS best practices using eslint-plugin-better-tailwindcss\n */\nexport const tailwind: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('tailwind', async () => {\n const pluginTailwind = await loadDefault<PluginWithConfigs<'recommended'>>('eslint-plugin-better-tailwindcss')\n\n return [\n {\n ...pluginTailwind.configs.recommended,\n files: GLOB_JS_TS_ALL,\n name: 'santi020k/tailwind/recommended',\n settings: {\n 'better-tailwindcss': {\n // Enable faster resolution in monorepos\n }\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,sBAAsB;AAI/B,SAAS,kBAAkB,mBAA2C;AAM/D,MAAM,WAA2D,iBAAiB,YAAY,YAAY;AAC/G,QAAM,iBAAiB,MAAM,YAA8C,kCAAkC;AAE7G,SAAO;AAAA,IACL;AAAA,MACE,GAAG,eAAe,QAAQ;AAAA,MAC1B,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,QACR,sBAAsB;AAAA;AAAA,QAEtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * TanStack Query ESLint configuration
5
+ */
6
+ declare const tanstackQuery: () => Promise<TSESLint.FlatConfig.ConfigArray>;
7
+ /**
8
+ * TanStack Router ESLint configuration
9
+ */
10
+ declare const tanstackRouter: () => Promise<TSESLint.FlatConfig.ConfigArray>;
11
+
12
+ export { tanstackQuery, tanstackRouter };
@@ -0,0 +1,37 @@
1
+ import { GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
3
+ const tanstackQuery = defineLazyConfig("tanstack-query", async () => {
4
+ const pluginQuery = await loadDefault("@tanstack/eslint-plugin-query");
5
+ return [
6
+ {
7
+ files: GLOB_JS_TS_ALL,
8
+ name: "eslint-config-integrations/tanstack-query",
9
+ plugins: {
10
+ "@tanstack/query": pluginQuery
11
+ },
12
+ rules: {
13
+ ...pluginQuery.configs.recommended.rules
14
+ }
15
+ }
16
+ ];
17
+ });
18
+ const tanstackRouter = defineLazyConfig("tanstack-router", async () => {
19
+ const pluginRouter = await loadDefault("@tanstack/eslint-plugin-router");
20
+ return [
21
+ {
22
+ files: GLOB_JS_TS_ALL,
23
+ name: "eslint-config-integrations/tanstack-router",
24
+ plugins: {
25
+ "@tanstack/router": pluginRouter
26
+ },
27
+ rules: {
28
+ ...pluginRouter.configs.recommended.rules
29
+ }
30
+ }
31
+ ];
32
+ });
33
+ export {
34
+ tanstackQuery,
35
+ tanstackRouter
36
+ };
37
+ //# sourceMappingURL=tanstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tanstack.ts"],"sourcesContent":["import { GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { defineLazyConfig, loadDefault, type PluginWithConfigs } from './lazy.js'\n\n/**\n * TanStack Query ESLint configuration\n */\nexport const tanstackQuery: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('tanstack-query', async () => {\n const pluginQuery = await loadDefault<PluginWithConfigs<'recommended'>>('@tanstack/eslint-plugin-query')\n\n return [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/tanstack-query',\n plugins: {\n '@tanstack/query': pluginQuery\n },\n rules: {\n ...pluginQuery.configs.recommended.rules\n }\n }\n ]\n})\n\n/**\n * TanStack Router ESLint configuration\n */\nexport const tanstackRouter: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('tanstack-router', async () => {\n const pluginRouter = await loadDefault<PluginWithConfigs<'recommended'>>('@tanstack/eslint-plugin-router')\n\n return [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-integrations/tanstack-router',\n plugins: {\n '@tanstack/router': pluginRouter\n },\n rules: {\n ...pluginRouter.configs.recommended.rules\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,sBAAsB;AAI/B,SAAS,kBAAkB,mBAA2C;AAK/D,MAAM,gBAAgE,iBAAiB,kBAAkB,YAAY;AAC1H,QAAM,cAAc,MAAM,YAA8C,+BAA+B;AAEvG,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,mBAAmB;AAAA,MACrB;AAAA,MACA,OAAO;AAAA,QACL,GAAG,YAAY,QAAQ,YAAY;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAKM,MAAM,iBAAiE,iBAAiB,mBAAmB,YAAY;AAC5H,QAAM,eAAe,MAAM,YAA8C,gCAAgC;AAEzG,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,oBAAoB;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,QACL,GAAG,aAAa,QAAQ,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Turborepo ESLint configuration
5
+ * Validates process.env usage against turbo.json
6
+ */
7
+ declare const turbo: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { turbo };
package/dist/turbo.js ADDED
@@ -0,0 +1,25 @@
1
+ import { GLOB_JS_TS, GLOB_JS_TS_ALL } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
3
+ const turbo = defineLazyConfig("turbo", async () => {
4
+ const pluginTurbo = await loadDefault("eslint-plugin-turbo");
5
+ return [
6
+ {
7
+ files: GLOB_JS_TS_ALL,
8
+ name: "eslint-config-turbo/plugins",
9
+ plugins: {
10
+ turbo: pluginTurbo
11
+ }
12
+ },
13
+ {
14
+ files: GLOB_JS_TS,
15
+ name: "eslint-config-turbo/rules",
16
+ rules: {
17
+ "turbo/no-undeclared-env-vars": "error"
18
+ }
19
+ }
20
+ ];
21
+ });
22
+ export {
23
+ turbo
24
+ };
25
+ //# sourceMappingURL=turbo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/turbo.ts"],"sourcesContent":["import { GLOB_JS_TS, GLOB_JS_TS_ALL } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\nimport type PluginTurbo from 'eslint-plugin-turbo'\n\nimport { defineLazyConfig, loadDefault } from './lazy.js'\n\n/**\n * Turborepo ESLint configuration\n * Validates process.env usage against turbo.json\n */\nexport const turbo: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('turbo', async () => {\n const pluginTurbo = await loadDefault<typeof PluginTurbo>('eslint-plugin-turbo')\n\n return [\n {\n files: GLOB_JS_TS_ALL,\n name: 'eslint-config-turbo/plugins',\n plugins: {\n turbo: pluginTurbo\n }\n },\n {\n files: GLOB_JS_TS,\n name: 'eslint-config-turbo/rules',\n rules: {\n 'turbo/no-undeclared-env-vars': 'error'\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,YAAY,sBAAsB;AAK3C,SAAS,kBAAkB,mBAAmB;AAMvC,MAAM,QAAwD,iBAAiB,SAAS,YAAY;AACzG,QAAM,cAAc,MAAM,YAAgC,qBAAqB;AAE/E,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,QACL,gCAAgC;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
package/dist/zod.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { TSESLint } from '@typescript-eslint/utils';
2
+
3
+ /**
4
+ * Zod ESLint configuration
5
+ * Provides validation rules for Zod schemas
6
+ */
7
+ declare const zod: () => Promise<TSESLint.FlatConfig.ConfigArray>;
8
+
9
+ export { zod };
package/dist/zod.js ADDED
@@ -0,0 +1,21 @@
1
+ import { GLOB_JS_TS } from "@santi020k/eslint-config-core";
2
+ import { defineLazyConfig, loadDefault } from "./lazy.js";
3
+ const zod = defineLazyConfig("zod", async () => {
4
+ const pluginZod = await loadDefault("eslint-plugin-zod");
5
+ return [
6
+ {
7
+ files: GLOB_JS_TS,
8
+ name: "eslint-config-integrations/zod",
9
+ plugins: {
10
+ zod: pluginZod
11
+ },
12
+ rules: {
13
+ ...pluginZod.configs.recommended.rules
14
+ }
15
+ }
16
+ ];
17
+ });
18
+ export {
19
+ zod
20
+ };
21
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/zod.ts"],"sourcesContent":["import { GLOB_JS_TS } from '@santi020k/eslint-config-core'\n\nimport type { TSESLint } from '@typescript-eslint/utils'\n\nimport { defineLazyConfig, loadDefault, type PluginWithConfigs } from './lazy.js'\n\n/**\n * Zod ESLint configuration\n * Provides validation rules for Zod schemas\n */\nexport const zod: () => Promise<TSESLint.FlatConfig.ConfigArray> = defineLazyConfig('zod', async () => {\n const pluginZod = await loadDefault<PluginWithConfigs<'recommended'>>('eslint-plugin-zod')\n\n return [\n {\n files: GLOB_JS_TS,\n name: 'eslint-config-integrations/zod',\n plugins: {\n zod: pluginZod\n },\n rules: {\n ...pluginZod.configs.recommended.rules\n }\n }\n ]\n})\n"],"mappings":"AAAA,SAAS,kBAAkB;AAI3B,SAAS,kBAAkB,mBAA2C;AAM/D,MAAM,MAAsD,iBAAiB,OAAO,YAAY;AACrG,QAAM,YAAY,MAAM,YAA8C,mBAAmB;AAEzF,SAAO;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,QACP,KAAK;AAAA,MACP;AAAA,MACA,OAAO;AAAA,QACL,GAAG,UAAU,QAAQ,YAAY;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@santi020k/eslint-config-libraries",
3
+ "version": "3.1.0",
4
+ "publishConfig": {
5
+ "access": "public",
6
+ "provenance": true
7
+ },
8
+ "description": "Library-specific ESLint configs for eslint-config-basic",
9
+ "type": "module",
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "sideEffects": false,
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./registry": {
20
+ "types": "./dist/registry.d.ts",
21
+ "import": "./dist/registry.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "dependencies": {
28
+ "@stencil/eslint-plugin": "^1.4.0",
29
+ "@tanstack/eslint-plugin-query": "^5.101.4",
30
+ "@tanstack/eslint-plugin-router": "^1.162.0",
31
+ "@typescript-eslint/utils": "^8.65.0",
32
+ "eslint-plugin-better-tailwindcss": "^4.7.0",
33
+ "eslint-plugin-i18next": "^6.1.5",
34
+ "eslint-plugin-storybook": "^10.5.5",
35
+ "eslint-plugin-turbo": "^2.10.7",
36
+ "eslint-plugin-vercel-ai-security": "^1.3.7",
37
+ "eslint-plugin-zod": "^4.9.0",
38
+ "@santi020k/eslint-config-core": "^3.1.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^26.1.2",
42
+ "eslint": "^10.8.0",
43
+ "publint": "^0.3.22",
44
+ "storybook": "^10.5.5",
45
+ "tailwindcss": "^4.3.3",
46
+ "tsup": "^8.5.1",
47
+ "typescript": "^6.0.3",
48
+ "zod": "^4.4.3"
49
+ },
50
+ "peerDependencies": {
51
+ "eslint": "^10.0.0",
52
+ "storybook": "^10.0.0",
53
+ "tailwindcss": "^3.3.0 || ^4.1.0",
54
+ "typescript": ">=5.0.0",
55
+ "zod": "^4.0.0"
56
+ },
57
+ "peerDependenciesMeta": {
58
+ "storybook": {
59
+ "optional": true
60
+ },
61
+ "tailwindcss": {
62
+ "optional": true
63
+ },
64
+ "typescript": {
65
+ "optional": true
66
+ },
67
+ "zod": {
68
+ "optional": true
69
+ }
70
+ },
71
+ "engines": {
72
+ "node": ">=22.19.0"
73
+ },
74
+ "repository": {
75
+ "type": "git",
76
+ "url": "git+https://github.com/santi020k/eslint-config-basic.git",
77
+ "directory": "packages/libraries"
78
+ },
79
+ "homepage": "https://eslint.santi020k.com/tooling/libraries",
80
+ "license": "MIT",
81
+ "scripts": {
82
+ "build": "tsup",
83
+ "check:exports": "publint",
84
+ "clean": "rm -rf dist",
85
+ "dev": "tsup --watch",
86
+ "lint": "eslint . --no-warn-ignored --pass-on-no-patterns",
87
+ "lint:fix": "eslint . --fix --no-warn-ignored --pass-on-no-patterns",
88
+ "typecheck": "tsc --noEmit"
89
+ }
90
+ }