@prisma-next/eslint-plugin 0.0.1-dev.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.
- package/README.md +160 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +216 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/lint-build-call.d.ts.map +1 -0
- package/dist/utils.d.ts +45 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# @prisma-next/eslint-plugin
|
|
2
|
+
|
|
3
|
+
ESLint plugin for Prisma Next query builder that provides TypeScript-powered linting and validation of query builder `build()` calls.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install --save-dev @prisma-next/eslint-plugin @typescript-eslint/parser
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
### ESLint 9 (Flat Config)
|
|
14
|
+
|
|
15
|
+
Add to your ESLint configuration:
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
// eslint.config.js
|
|
19
|
+
import prismaNext from '@prisma-next/eslint-plugin';
|
|
20
|
+
|
|
21
|
+
export default [
|
|
22
|
+
{
|
|
23
|
+
files: ['**/*.ts', '**/*.tsx'],
|
|
24
|
+
languageOptions: {
|
|
25
|
+
parser: '@typescript-eslint/parser',
|
|
26
|
+
parserOptions: {
|
|
27
|
+
project: './tsconfig.json',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
plugins: {
|
|
31
|
+
'@prisma-next': prismaNext,
|
|
32
|
+
},
|
|
33
|
+
rules: {
|
|
34
|
+
'@prisma-next/lint-build-call': 'error',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Or use the recommended flat configuration:
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
// eslint.config.js
|
|
44
|
+
import prismaNext from '@prisma-next/eslint-plugin';
|
|
45
|
+
|
|
46
|
+
export default [
|
|
47
|
+
prismaNext.configs['flat/recommended'],
|
|
48
|
+
];
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### ESLint 8 (Legacy Configuration)
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"plugins": ["@prisma-next"],
|
|
56
|
+
"rules": {
|
|
57
|
+
"@prisma-next/lint-build-call": "error"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Rules
|
|
63
|
+
|
|
64
|
+
### `lint-build-call`
|
|
65
|
+
|
|
66
|
+
Validates query builder `build()` calls using TypeScript type information to catch common issues and enforce best practices.
|
|
67
|
+
|
|
68
|
+
#### What it checks
|
|
69
|
+
|
|
70
|
+
1. **Unbounded Queries**: Detects SELECT queries without `.limit()` calls that could fetch unlimited rows
|
|
71
|
+
2. **Excessive Limits**: Warns when `.limit()` exceeds a configurable maximum value
|
|
72
|
+
|
|
73
|
+
#### Options
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
{
|
|
77
|
+
// Enforce limit() calls on SELECT queries (default: true)
|
|
78
|
+
requireLimit?: boolean;
|
|
79
|
+
|
|
80
|
+
// Maximum allowed limit value (default: 1000)
|
|
81
|
+
maxLimit?: number;
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### Examples
|
|
86
|
+
|
|
87
|
+
❌ **Incorrect** - Unbounded query:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
const plan = sql
|
|
91
|
+
.from(userTable)
|
|
92
|
+
.select({
|
|
93
|
+
id: userTable.columns.id,
|
|
94
|
+
email: userTable.columns.email,
|
|
95
|
+
})
|
|
96
|
+
.build(); // Error: unbounded query
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
✅ **Correct** - Bounded query:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
const plan = sql
|
|
103
|
+
.from(userTable)
|
|
104
|
+
.select({
|
|
105
|
+
id: userTable.columns.id,
|
|
106
|
+
email: userTable.columns.email,
|
|
107
|
+
})
|
|
108
|
+
.limit(100)
|
|
109
|
+
.build(); // OK
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### Configuration Examples
|
|
113
|
+
|
|
114
|
+
**Basic usage:**
|
|
115
|
+
```js
|
|
116
|
+
{
|
|
117
|
+
'@prisma-next/lint-build-call': 'error'
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Custom configuration:**
|
|
122
|
+
```js
|
|
123
|
+
{
|
|
124
|
+
'@prisma-next/lint-build-call': [
|
|
125
|
+
'error',
|
|
126
|
+
{
|
|
127
|
+
requireLimit: true,
|
|
128
|
+
maxLimit: 500,
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Disable limit requirement:**
|
|
135
|
+
```js
|
|
136
|
+
{
|
|
137
|
+
'@prisma-next/lint-build-call': [
|
|
138
|
+
'error',
|
|
139
|
+
{
|
|
140
|
+
requireLimit: false
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## TypeScript Integration
|
|
147
|
+
|
|
148
|
+
This plugin leverages TypeScript's type checker to provide accurate analysis of query builder calls. For best results:
|
|
149
|
+
|
|
150
|
+
1. Ensure `@typescript-eslint/parser` is configured
|
|
151
|
+
2. Include `project` in parser options pointing to your `tsconfig.json`
|
|
152
|
+
3. Run ESLint on TypeScript files (`.ts`, `.tsx`)
|
|
153
|
+
|
|
154
|
+
## Contributing
|
|
155
|
+
|
|
156
|
+
This plugin is part of the Prisma Next project. See the main repository for contribution guidelines.
|
|
157
|
+
|
|
158
|
+
## License
|
|
159
|
+
|
|
160
|
+
See the main Prisma Next repository for license information.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../package.json","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/typescript.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+types@8.50.0/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+types@8.50.0/node_modules/@typescript-eslint/types/dist/lib.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+types@8.50.0/node_modules/@typescript-eslint/types/dist/parser-options.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+types@8.50.0/node_modules/@typescript-eslint/types/dist/ts-estree.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+types@8.50.0/node_modules/@typescript-eslint/types/dist/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/clear-caches.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/create-program/getscriptkind.d.ts","../../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/tsserverlibrary.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+project-service@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/project-service/dist/createprojectservice.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+project-service@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/project-service/dist/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/parsesettings/expiringcache.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/parsesettings/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/create-program/useprovidedprograms.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/getmodifiers.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/node-utils.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/parsesettings/candidatetsconfigrootdirs.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+visitor-keys@8.50.0/node_modules/@typescript-eslint/visitor-keys/dist/get-keys.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+visitor-keys@8.50.0/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+visitor-keys@8.50.0/node_modules/@typescript-eslint/visitor-keys/dist/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/version-check.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/version.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/withoutprojectparseroptions.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+typescript-estree@8.50.0_typescript@5.9.3/node_modules/@typescript-eslint/typescript-estree/dist/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-estree.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/ast.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/parseroptions.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/definitiontype.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/definitionbase.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/catchclausedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/classnamedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/functionnamedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/implicitglobalvariabledefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/importbindingdefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/parameterdefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/tsenummemberdefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/tsenumnamedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/tsmodulenamedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/typedefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/variabledefinition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/definition.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/definition/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/reference.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/variable/variablebase.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/variable/eslintscopevariable.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/variable/variable.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/variable/implicitlibvariable.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/variable/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/scopetype.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/functionscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/globalscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/modulescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/tsmodulescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/scopebase.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/catchscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/classscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/classstaticblockscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/conditionaltypescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/forscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/functionexpressionnamescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/functiontypescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/mappedtypescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/switchscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/tsenumscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/typescope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/withscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/scope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/classfieldinitializerscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scopemanager.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/blockscope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/scope/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/visitorbase.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/patternvisitor.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/visitor.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/referencer.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/referencer/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/analyze.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+scope-manager@8.50.0/node_modules/@typescript-eslint/scope-manager/dist/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/scope.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/parser.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/json-schema.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/sourcecode.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/rule.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/linter.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/processor.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/config.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/eslintshared.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/flateslint.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint/legacyeslint.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/eslint.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/ruletester.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-eslint/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/astutilities.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/patternmatcher.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/predicates.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/referencetracker.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/scopeanalysis.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/eslint-utils/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/helpers.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/misc.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/predicates.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ast-utils/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/applydefault.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/deepmerge.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/getparserservices.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/infertypesfromrule.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/nullthrows.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/rulecreator.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/eslint-utils/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-utils/isarray.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-utils/noinfer.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/ts-utils/index.d.ts","../../../../../node_modules/.pnpm/@typescript-eslint+utils@8.50.0_eslint@9.39.2_jiti@2.6.1__typescript@5.9.3/node_modules/@typescript-eslint/utils/dist/index.d.ts","../src/utils/typescript-utils.ts","../src/rules/validate-query-build-call.ts","../src/index.ts","../../../../../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../../../../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../../../../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../../../../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/index.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/disposable.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/indexable.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/iterators.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/compatibility/index.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/globals.typedarray.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/buffer.buffer.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/globals.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/domexception.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/events.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/web-globals/fetch.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/assert.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/assert/strict.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/async_hooks.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/buffer.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/child_process.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/cluster.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/console.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/constants.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/crypto.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dgram.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/diagnostics_channel.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dns.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/dns/promises.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/domain.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/events.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/fs.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/fs/promises.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/http.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/http2.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/https.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/inspector.generated.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/module.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/net.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/os.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/path.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/perf_hooks.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/process.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/punycode.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/querystring.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/readline.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/readline/promises.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/repl.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/sea.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/promises.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/consumers.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/stream/web.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/string_decoder.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/test.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/timers.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/timers/promises.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/tls.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/trace_events.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/tty.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/url.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/util.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/v8.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/vm.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/wasi.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/worker_threads.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/zlib.d.ts","../../../../../node_modules/.pnpm/@types+node@20.19.24/node_modules/@types/node/index.d.ts"],"fileIdsList":[[182,183,184,191,237],[185,191,237],[191,237],[191,234,237],[191,236,237],[237],[191,237,242,270],[191,237,238,243,248,256,267,278],[191,237,238,239,248,256],[186,187,188,191,237],[191,237,240,279],[191,237,241,242,249,257],[191,237,242,267,275],[191,237,243,245,248,256],[191,236,237,244],[191,237,245,246],[191,237,247,248],[191,236,237,248],[191,237,248,249,250,267,278],[191,237,248,249,250,263,267,270],[191,237,245,248,251,256,267,278],[191,237,248,249,251,252,256,267,275,278],[191,237,251,253,267,275,278],[189,190,191,192,193,194,195,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284],[191,237,248,254],[191,237,255,278,283],[191,237,245,248,256,267],[191,237,257],[191,237,258],[191,236,237,259],[191,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284],[191,237,261],[191,237,262],[191,237,248,263,264],[191,237,263,265,279,281],[191,237,248,267,268,270],[191,237,269,270],[191,237,267,268],[191,237,270],[191,237,271],[191,234,237,267,272],[191,237,248,273,274],[191,237,273,274],[191,237,242,256,267,275],[191,237,276],[191,237,256,277],[191,237,251,262,278],[191,237,242,279],[191,237,267,280],[191,237,255,281],[191,237,282],[191,232,237],[191,232,237,248,250,259,267,270,278,281,283],[191,237,267,284],[64,67,191,237],[68,191,237],[64,134,141,191,237],[64,93,94,191,237],[95,96,97,98,99,100,101,102,103,104,105,191,237],[64,93,191,237],[93,95,96,97,98,99,100,101,102,103,104,105,106,191,237],[107,108,113,134,136,138,139,142,191,237],[140,191,237],[64,137,191,237],[64,113,136,191,237],[64,108,134,136,139,191,237],[64,137,138,191,237],[64,84,191,237],[64,114,119,132,134,191,237],[64,108,113,114,119,132,134,191,237],[64,113,114,119,132,134,191,237],[114,115,116,117,118,120,121,123,124,125,126,127,128,129,130,131,132,133,135,191,237],[115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,133,135,191,237],[64,107,108,113,114,115,116,117,118,132,134,191,237],[64,113,122,133,136,191,237],[64,109,191,237],[110,111,136,191,237],[110,111,112,191,237],[109,191,237],[64,107,108,136,191,237],[59,191,237],[60,61,62,63,191,237],[59,61,191,237],[60,63,191,237],[59,74,191,237],[59,74,75,191,237],[65,66,72,75,76,77,78,79,80,81,85,86,87,88,191,237],[59,72,191,237],[59,64,72,191,237],[59,72,79,191,237],[64,191,237],[59,69,70,72,73,75,191,237],[72,84,191,237],[59,64,70,191,237],[64,70,71,191,237],[90,157,191,237],[158,159,160,161,162,191,237],[90,191,237],[163,164,165,166,191,237],[168,169,170,171,172,173,191,237],[157,191,237],[148,191,237],[90,146,157,167,174,177,191,237],[92,145,148,150,191,237],[153,154,191,237],[148,149,191,237],[151,152,191,237],[149,151,152,191,237],[91,92,144,145,147,148,149,150,151,155,156,191,237],[145,147,148,150,151,191,237],[90,92,144,191,237],[149,191,237],[90,91,144,146,147,149,151,191,237],[90,92,148,149,151,191,237],[143,191,237],[90,144,145,191,237],[64,89,191,237],[175,176,191,237],[82,83,191,237],[191,204,208,237,278],[191,204,237,267,278],[191,199,237],[191,201,204,237,275,278],[191,237,256,275],[191,237,285],[191,199,237,285],[191,201,204,237,256,278],[191,196,197,200,203,237,248,267,278],[191,204,211,237],[191,196,202,237],[191,204,225,226,237],[191,200,204,237,270,278,285],[191,225,237,285],[191,198,199,237,285],[191,204,237],[191,198,199,200,201,202,203,204,205,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,237],[191,204,219,237],[191,204,211,212,237],[191,202,204,212,213,237],[191,203,237],[191,196,199,204,237],[191,204,208,212,213,237],[191,208,237],[191,202,204,207,237,278],[191,196,201,204,211,237],[191,237,267],[191,199,204,225,237,283,285],[58,180,191,237],[59,64,178,179,191,237],[59,64,178,191,237]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bb230e751f5a7f056d9402382cef7f06f43d64de1e83942d293b18952a79c46","signature":"35c454d964f8aa90c6fa637537c72d919024f41f182d5ddc028e4bd8d0c3df6d"},{"version":"e134052a6b1ded61693b4037f615dc72f14e2881e79c1ddbff6c514c8a516b05","impliedFormat":1},{"version":"6f006b3ccbf257ae375fcab5ca158c40338bf9c056b381c207e560d699db918f","impliedFormat":1},{"version":"cc512139c85c41ba2dc95076b1ce05786c98129bcfe875017946ba2c82607ef1","impliedFormat":1},{"version":"12bffdbf179bfe787334d1aa31393bac5b79a84d2285ad94bcf36c1cce9eed57","impliedFormat":1},{"version":"e81484fc62d5e6add90882339bb2cdba0c87b85ca4002add438d0771ce2fdfa7","impliedFormat":1},{"version":"92ebc3261b20037c4e078cd3d26bccedb719b3eec653925e103b6ced4a936c0d","impliedFormat":1},{"version":"9acc441d14a127dea0228cd2645203c3285b296f452f723f850dc2941d2b9c7e","impliedFormat":1},{"version":"a4075b7a8211620f01d7a0cffb2d31fde9a2a6a108dec4cbaa3856b6a8e8864a","impliedFormat":1},{"version":"73b15a0b7cf5c6df9076b9408c5ce682f11813453bf54c54cb284f075b5224cf","impliedFormat":1},{"version":"9254b745aad208ce7f8e82e72698dc40573c7cb828ea9d5cdf42a42528a81665","impliedFormat":1},{"version":"7eb92baa673b920122e72e714caf84b78323758a3a214fb6383d717948143668","impliedFormat":1},{"version":"f37616d5f3b755ef9d2765218b06b933faf05cf094d18107cf4c50d81b44b6b0","impliedFormat":1},{"version":"c61e09e2a01aacd789fbcdbea4d386701422b8539ddc0285203d2a6bd0c4c1b5","impliedFormat":1},{"version":"3b78a632fd8d0490bf0eb5f8df1455e6f33028fb7c373d3d75275d06bfb6a7d9","impliedFormat":1},{"version":"d923dc7686f8a0bdabdbb0e8e61e6a95c403a3d6bc6f303af5381c9cd973ee43","impliedFormat":1},{"version":"da633553c8248c6ee21fd93a667d71ba4dcefc64f33632e3dc20ded5cbdd317c","impliedFormat":1},{"version":"050e8efc9defdf21d4c12a2ec280758c13ce66303d3e4e591d003089d99cbe4b","impliedFormat":1},{"version":"d924e653afba6a341ad72c3cbcc62a9c1206d5fcdf02db13fded64bfbca27e87","impliedFormat":1},{"version":"5d1201e776c3167527653c835035e4ad29cd79e0d6b139aa250ca74899e0741e","impliedFormat":1},{"version":"cd9ba75d558011a951e48bc0ec99aef7c477c45a7808031acb6b6727bf6d359b","impliedFormat":1},{"version":"ee1003cdce99e6cd28c9a9aa3f570cad400b89218b81f8f9d3b05025241d5db4","impliedFormat":1},{"version":"1fdf5c750e4164249aaa3095803330eae7cc9fb2523535811800460b98f8e7ed","impliedFormat":1},{"version":"8674e77147967c8f75aaa22923ebc836dd7620ee0cf52bbe91b89114f8d91413","impliedFormat":1},{"version":"9f4ef6fd452db4c4d5f96293732ee29c03f54755744342809dea96f63fd7227b","impliedFormat":1},{"version":"57cdb6dba0f7f107cd3ec872e52916ea2901c9a80611e7e669c2ccf3a2219f17","impliedFormat":1},{"version":"20d246417a79b06bca6fe01426258a3408068442899b990472e521eafd6ac5b4","impliedFormat":1},{"version":"c3f937028caf49d383b109a93128164de319c1a5ec3796c02da60acb580e1e9a","impliedFormat":1},{"version":"cf3849bd6f54b42c19db6327b026bdefea6c711f8a4e5b060b7e3e9d796f0f38","impliedFormat":1},{"version":"8a60ed93d81f472e270e213c5da23bdfc2a87b6616031f4d397aced25f727217","impliedFormat":1},{"version":"5f2b95921cc6b959e8ca7abc17943382f7e5fe0ea6ef36c5b8dc383def96b1f8","impliedFormat":1},{"version":"43006ce2de2caf33f0e26d937195d197e8b91af1222a1b24532daa3915446c86","impliedFormat":1},{"version":"006577276d8f3b0012b4f856662618082910ed31a71464a42753692be92e4a2a","impliedFormat":1},{"version":"58004a9240ee74db43ce3ab2343cc29473e969adcd592c6fce46939d94512d93","impliedFormat":1},{"version":"492409753b45983851b6d66272f384bcb2dfc045d48eb07e8c8998a571495e63","impliedFormat":1},{"version":"2db60104bde79eac5c47dcfa9738246190173cb76966d88e42959ca8d1ea7e27","impliedFormat":1},{"version":"1fa946b4013f86f5a90107c6cf08850edd290a11b8b400fe3a4c7c24bc800785","impliedFormat":1},{"version":"594c88e45a919f575775b6b5999b4662d583bfdde60709e92b3eb13e053008be","impliedFormat":1},{"version":"9e0b7af2247ab847874dc5ca0a92c4f28f55332b8241591bd06fafd3d184f605","impliedFormat":1},{"version":"39bff71bf16f3a020c438f5ddc1a24ab26c28dad91d324372eabbce88abaec74","impliedFormat":1},{"version":"5a395ff9e24f89cc08679e731889b2ed1bfe451ba76f16184ccef0b742589d13","impliedFormat":1},{"version":"0651a8dd2c6446154e0994391f7bdebbde389dc7ec75ac4a0f727fff5255143c","impliedFormat":1},{"version":"2088a7c3bf5a885904de841f5fa6103d8689e439a3cb3273f3bac69c1b3a3b1b","impliedFormat":1},{"version":"6dbc5313fe49ecbab3215f1cb1733d7348b392f1ca12c331c5720f4ea0036f47","impliedFormat":1},{"version":"3ed4ef1f210705e2c320e5b05787d7b6e74b7920492a76bb8712857bb22fc915","impliedFormat":1},{"version":"6fca2337de679c9c118e9005f3ee7f41725690a923bbff4ee20401e879471acd","impliedFormat":1},{"version":"58f59363f3c50919bdc19c44e68b35bb471548486ca98f6e757de252d5d1e856","impliedFormat":1},{"version":"109381191d7b0beb0de64a68ce3735fff9c91944180bfb6abfe42080b116689b","impliedFormat":1},{"version":"b04f68c5b937801cebf5264072a6f4a1f76050a75fd0830d65ae0bf0275ed1fc","impliedFormat":1},{"version":"ad42060f3e0f92a294748f19d9490a8a6a980fb40dda0fd4627991d1361862cc","impliedFormat":1},{"version":"8c00c7abd1e6e594cb9726674fdc65e4d9681d1e4c890bdbd602096e3b48f917","impliedFormat":1},{"version":"ce6b390be6cdd541f54e393b87ce72b0d1171732f9e93c59716e622a5b2e3be5","impliedFormat":1},{"version":"5aa50acb079a18441d0984acda7d3dbbc66a326fccacb20a75d836e797bc8b80","impliedFormat":1},{"version":"6735eae673357ba7f9fc7e55af3b00e1415b32d3b639c38fb936151f336a5978","impliedFormat":1},{"version":"386ff073cfe770b93867e65c26e969d672aeb42fc5506279c71a0185fd653539","impliedFormat":1},{"version":"e967582e89f2a455eafd8bf1232dd81ee207709a48c07322e996ecb0672148bb","impliedFormat":1},{"version":"25528369e718c89acd957ae0e72b1b5105b1111329d31442d8d639ee020b3fce","impliedFormat":1},{"version":"8764a0ff3269684a2c85a54acd7e90d33876927140e28880b8a4c95e8ca63bd6","impliedFormat":1},{"version":"1d381320cf1cf9990e8bdc6bf43ffe220728fae7adfe45c754a44f8535d22486","impliedFormat":1},{"version":"ea09e3f830cb4da7a144e49803ebd79ad7871e21763fd0a0072ab8fb4aee43b5","impliedFormat":1},{"version":"02cbdc4c83ba725dfb0b9a230d9514eca2769190ea7ef6e6f29816e7ad21ea98","impliedFormat":1},{"version":"8490bd3f838bacccd8496893db204d1e9a559923f5bf54154444bf95596b55df","impliedFormat":1},{"version":"f1e533f10851941ccd2ee623988b26b07aecb84a290eb56627182bc4ca96d1a8","impliedFormat":1},{"version":"5d89916c41cc7051b9c83148d704c4e5aa20343a07efd14b953d16c693eda3ee","impliedFormat":1},{"version":"06124be387e6fc43c6a5727ecb8d6f5380c52878341a2cd065dc968e203029e0","impliedFormat":1},{"version":"44c575e350e5b2c7771137b2797eb3d755b67dd286622158a3855487a6182253","impliedFormat":1},{"version":"a088d5ba9a4fa3a96bcda498268269d163348229c43187950a9b2b7503d46813","impliedFormat":1},{"version":"cf5408ade74fb2ec127a10bb3b1079a386131818bc7ac67a002c4a6c3ec81b62","impliedFormat":1},{"version":"6cf129a29ce866e432f575c5e4c90f44f2fb72d070b9c3901acdb3cbb56fa46d","impliedFormat":1},{"version":"8af2fead6dd3a9cd0471d27018dd49f65f5cc264c4604a11aba4e46b2252eb89","impliedFormat":1},{"version":"677c78ed184c32e4ff0be1e4baf0fbf1a0cccd4f41532527735a2c43edd58a87","impliedFormat":1},{"version":"70415c6e264d10d01f7438d40e1a85b815ace6598e4a73f491b33db7820e1469","impliedFormat":1},{"version":"38fa05ec45e9bddcb55c47b437330c229655e3b0325b07dd72206a10bf329a05","impliedFormat":1},{"version":"8b11a987390721ea4930dcc7aca1dec606a2cd1b03fb27d05e4c995875ee54bb","impliedFormat":1},{"version":"3b05973f4a6dc88d28c125b744dc99d2a527bdb3c567eda1b439d10ce70246f5","impliedFormat":1},{"version":"2ee3f52f480021bd7d23fe72e66ba0ec8d0a464d2295ab612d409d45a3f9d7ae","impliedFormat":1},{"version":"95098f44f9d1961d2b1d1bde703e40819923d6a933ec853834235ba76470848d","impliedFormat":1},{"version":"c56439d9bf05c500219f2db6e49cd4b418f2f9fb14043dee96b2d115276012b8","impliedFormat":1},{"version":"55fa234a04eacdf253e0b46d72f6e3bd8a044339c43547a29cf3b9f29ccd050d","impliedFormat":1},{"version":"9811146d06f6b7615165f0dcd3d2aaea72adb260c8e747449b7a87c4c44f7ff1","impliedFormat":1},{"version":"b4e618b2d4422fa5fae63e999dccb69736b03ec7b0c6fd2d4dc833263d40921c","impliedFormat":1},{"version":"21a06a5d3e4f859723386772d4c481ed5b40f883ecd4ed9a8ec8bcb54a10e542","impliedFormat":1},{"version":"e7f90e75963afebd4c3c5f052703818eb0a7a689d6b2c3a499d9bcc545088095","impliedFormat":1},{"version":"5ef6b0404100d30e3b47c73021f2da740d1fa8088fda5adc741706cb3e73cf13","impliedFormat":1},{"version":"24081c38e738a14e6d002c166ba297a9656cd8b18475b36bc7c99bb55c7d5cca","impliedFormat":1},{"version":"d1342658b16b92d24b961db5c1779dc03fe30194fd6fea0d15dc8e946f82d83f","impliedFormat":1},{"version":"cbd4ff12f799a44b629643edc686aeec830fbb867c69cb6609da57d205057717","impliedFormat":1},{"version":"4f4d1284bc93168a1a0b2888f528aa689828917cdc547802ab29c0d1f553be40","impliedFormat":1},{"version":"fd15b208613892273f0675f55b31c878e22a28d62d306e589867009592f67166","impliedFormat":1},{"version":"ef5bc836c5c0886cd8c9cf1cff6192f4f1e82ef1f8088c9f136586b9860051e0","impliedFormat":1},{"version":"b4db69807a3b111c3b05fa1359832c4793b507341a4d4c3736a80303e769cd91","impliedFormat":1},{"version":"001fc9e5e2a353521cc0807e759f7c5a88cc18a8389568cf94b8809c38f00cd4","impliedFormat":1},{"version":"d14cd6c9001dfa6f96660952945c344370109247764ab42b47d110fcbff678e7","impliedFormat":1},{"version":"03697b6adcb2c37314fe8bd6361912cbcb772914303f8c43c61a5caa6dd6d9b2","impliedFormat":1},{"version":"4db00e3ce9cd4d68249907352b1f6c41c687b58f088bc2c8bff1bc41800bb732","impliedFormat":1},{"version":"316b2ea3cb57f2ccf86a19c4016eebb97eb177f3d5b5dc4b3d0508439afffff0","impliedFormat":1},{"version":"71de65e470fb5a0920472a8b13d37fff8960822e34d709aee14599802c15770c","impliedFormat":1},{"version":"c0cbe98c4e104042383444c718d2ce2d0dd602e6b7d52dc3185bbdf289da1128","impliedFormat":1},{"version":"c3c8297d66976e60076da541ec418590bf26d1056980b9adfea2c14baaf2089e","impliedFormat":1},{"version":"17ec351733c9b9a5de7d0aee5f710ca792a19efc365bed93ec045b885c309fde","impliedFormat":1},{"version":"8bb061c812d97dedb8549ca46cd3b8bae3f2494ef681d9712c64c1b933801ebf","impliedFormat":1},{"version":"969ab03feed7516ece5c6c0468e6c39391ed75317dd641d5600736b131559ad6","impliedFormat":1},{"version":"54e989ecd24eec06935b7770caee22386e9b7cdc47aca29bb2be83080460db36","impliedFormat":1},{"version":"ef4529c51657c83eabdda0b7818c25b6c7d827bfd7a49f38553f7fd3deba94e3","impliedFormat":1},{"version":"89c710eef54f9726d13eb123a800285d9b5cf2eb64d98f4c3a7b0e5a162ad24f","impliedFormat":1},{"version":"a97990e77a23aea39060610aef4b4bb92154d5330ecb0b557324ba4c14a1db41","impliedFormat":1},{"version":"d2b89296b175b0a1a11ce09cc682e6f86b24d34abd1bdf8c932a82c4e99b551a","impliedFormat":1},{"version":"3c85c2b16d0a1fa45095793b90467bcef3bfeaa85b3fdc00ff1eb3c32ca97cb2","impliedFormat":1},{"version":"8cdd09ab2d9fe19d5cb3ca1dcb6c6437d6164a9de46405afe1954e533a77120e","impliedFormat":1},{"version":"b90283ab6c36fc580b06cb293629a9b37eaba24e17ff9ae2f0d874a3f3a962a1","impliedFormat":1},{"version":"c1425155d2396f10be607f43392284b6bfc98b542bb49c611eaa2038b6a72112","impliedFormat":1},{"version":"30e0e58b2b36491323f748cc938b93eba059d354abecee659ba0e9312a842a5d","impliedFormat":1},{"version":"c2d8eccfe4adada4730bbd4f2568627d5d4aeb27cfbc8d39aa974ce33e855977","impliedFormat":1},{"version":"21d0cc7ad656b0348bfd745fb598399c6f9531ffef6ff1b8996fe42c5f185f0a","impliedFormat":1},{"version":"d29d2e64870b453a96329bf0f88eccf270812fb1989e853588fd5f3b0bc94919","impliedFormat":1},{"version":"ea422c1715a51450b3bab549d86f4fd52612c37bac489c347e367e47cc26bda1","impliedFormat":1},{"version":"6eddc1432777582b4797eb53c43b9917b1ba8908a737f7823a7049620f98588b","impliedFormat":1},{"version":"79e7eb72b4d9ca2d268460d35fa7bfe01db96e93659752bd5fc5cbf5c5be8294","impliedFormat":1},{"version":"10ad4c890e509380deb83c8bec650899df9bd70ee20238f2221d6bdc36043a0e","impliedFormat":1},{"version":"1a3b837513da5afd3bb0b228dab3a089fce405344243e372672f641ededf9b48","impliedFormat":1},{"version":"901f6b020440eac80a83a7ca248ca244e2a296be6b1ed8645a884a4509e11fc7","impliedFormat":1},{"version":"a21cd5fe056efa26c184b39f34977ae1a57f80adaa3d118654f785c8e7862108","signature":"f72201798b674601945e96c188a900eca84678efbd0580822c9973418266e0d6"},{"version":"9cd95be56c18f288dbfaedbe6103e8c4db211c84a680e4bb098ea7b42e177bd7","signature":"842586a57a679c89160761d9fea803727b961df5529eb08518b2ae55c2cb5a9e"},{"version":"cb833322998d7b89ae379761b05e74950c36ddb236d361408128d0615812f334","signature":"37286e1e5f0ef54451d0db8bab7f8cd24a10e96aa99820007a04b3be2e3428f2"},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"2fd4c143eff88dabb57701e6a40e02a4dbc36d5eb1362e7964d32028056a782b","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"27fdb0da0daf3b337c5530c5f266efe046a6ceb606e395b346974e4360c36419","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1dc4bc37e2476766f29718f5006981009e2c7470ddd538d87be731b8bb24280","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"47ab634529c5955b6ad793474ae188fce3e6163e3a3fb5edd7e0e48f14435333","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"f9ab232778f2842ffd6955f88b1049982fa2ecb764d129ee4893cbc290f41977","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"05db535df8bdc30d9116fe754a3473d1b6479afbc14ae8eb18b605c62677d518","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1}],"root":[[179,181]],"options":{"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noPropertyAccessFromIndexSignature":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[185,1],[184,2],[182,3],[183,3],[234,4],[235,4],[236,5],[191,6],[237,7],[238,8],[239,9],[186,3],[189,10],[187,3],[188,3],[240,11],[241,12],[242,13],[243,14],[244,15],[245,16],[246,16],[247,17],[248,18],[249,19],[250,20],[192,3],[190,3],[251,21],[252,22],[253,23],[285,24],[254,25],[255,26],[256,27],[257,28],[258,29],[259,30],[260,31],[261,32],[262,33],[263,34],[264,34],[265,35],[266,3],[267,36],[269,37],[268,38],[270,39],[271,40],[272,41],[273,42],[274,43],[275,44],[276,45],[277,46],[278,47],[279,48],[280,49],[281,50],[282,51],[193,3],[194,3],[195,3],[233,52],[283,53],[284,54],[68,55],[69,56],[142,57],[95,58],[96,58],[106,59],[94,60],[93,3],[97,58],[98,58],[99,58],[107,61],[100,58],[101,58],[102,58],[103,58],[104,58],[105,58],[143,62],[141,63],[138,64],[108,65],[140,66],[139,67],[137,68],[135,69],[120,69],[133,69],[121,69],[122,69],[123,69],[124,69],[125,69],[115,70],[126,69],[116,71],[136,72],[127,69],[117,69],[132,73],[119,74],[114,3],[128,69],[129,69],[118,69],[130,69],[131,69],[134,75],[110,76],[112,77],[113,78],[111,79],[109,80],[60,81],[64,82],[61,3],[62,83],[63,84],[65,3],[66,81],[75,85],[76,86],[77,81],[89,87],[78,88],[79,89],[80,90],[81,3],[73,91],[74,92],[85,93],[71,94],[72,95],[70,85],[86,3],[87,3],[88,3],[158,96],[163,97],[159,3],[160,98],[161,96],[162,96],[164,98],[167,99],[165,98],[166,98],[168,3],[169,3],[170,96],[174,100],[171,101],[172,3],[173,102],[178,103],[146,3],[91,98],[151,104],[155,105],[152,106],[153,107],[154,108],[157,109],[149,110],[145,111],[92,91],[150,112],[148,113],[156,114],[144,115],[147,116],[90,117],[177,118],[175,3],[176,3],[82,91],[84,119],[83,3],[56,3],[57,3],[11,3],[10,3],[2,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[3,3],[20,3],[21,3],[4,3],[22,3],[26,3],[23,3],[24,3],[25,3],[27,3],[28,3],[29,3],[5,3],[30,3],[31,3],[32,3],[33,3],[6,3],[37,3],[34,3],[35,3],[36,3],[38,3],[7,3],[39,3],[44,3],[45,3],[40,3],[41,3],[42,3],[43,3],[8,3],[49,3],[46,3],[47,3],[48,3],[50,3],[9,3],[51,3],[52,3],[53,3],[55,3],[54,3],[1,3],[67,81],[59,3],[211,120],[221,121],[210,120],[231,122],[202,123],[201,124],[230,125],[224,126],[229,127],[204,128],[218,129],[203,130],[227,131],[199,132],[198,125],[228,133],[200,134],[205,135],[206,3],[209,135],[196,3],[232,136],[222,137],[213,138],[214,139],[216,140],[212,141],[215,142],[225,125],[207,143],[208,144],[217,145],[197,146],[220,137],[219,135],[223,3],[226,147],[58,3],[181,148],[180,149],[179,150]],"affectedFilesPendingEmit":[[181,3],[180,3],[179,3]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAmBxD,UAAU,YAAY;IACpB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAGD,QAAA,MAAM,MAAM,EAAE,YASb,CAAC;AAWF,eAAe,MAAM,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// package.json
|
|
2
|
+
var name = "@prisma-next/eslint-plugin";
|
|
3
|
+
var version = "0.0.1";
|
|
4
|
+
|
|
5
|
+
// src/rules/lint-build-call.ts
|
|
6
|
+
import { ESLintUtils as ESLintUtils2 } from "@typescript-eslint/utils";
|
|
7
|
+
|
|
8
|
+
// src/utils.ts
|
|
9
|
+
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
10
|
+
var PRISMA_NEXT_SQL_PACKAGES = ["@prisma-next/sql-lane", "packages/sql/lanes/sql-lane"];
|
|
11
|
+
var PLAN_TYPE_PATTERNS = [/^SqlQueryPlan$/];
|
|
12
|
+
function getTypeScriptServices(context) {
|
|
13
|
+
try {
|
|
14
|
+
const parserServices = ESLintUtils.getParserServices(context, false);
|
|
15
|
+
if (!parserServices?.program) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
program: parserServices.program,
|
|
20
|
+
checker: parserServices.program.getTypeChecker(),
|
|
21
|
+
esTreeNodeToTSNodeMap: parserServices.esTreeNodeToTSNodeMap,
|
|
22
|
+
tsNodeToESTreeNodeMap: parserServices.tsNodeToESTreeNodeMap
|
|
23
|
+
};
|
|
24
|
+
} catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isMethodCall(node, methodName) {
|
|
29
|
+
return node.callee.type === "MemberExpression" && node.callee.property.type === "Identifier" && node.callee.property.name === methodName;
|
|
30
|
+
}
|
|
31
|
+
function isPrismaNextQueryBuildCall(node, services) {
|
|
32
|
+
if (!isMethodCall(node, "build") || node.arguments.length > 1 || !services) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (node.callee.type !== "MemberExpression") {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const objectType = getTypeOfNode(node.callee.object, services);
|
|
39
|
+
if (!objectType) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!isTypeFromPackages(objectType, PRISMA_NEXT_SQL_PACKAGES)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const returnType = getTypeOfNode(node, services);
|
|
46
|
+
return returnType ? isPrismaNextQueryPlanType(returnType) : false;
|
|
47
|
+
}
|
|
48
|
+
function getTypeOfNode(node, services) {
|
|
49
|
+
try {
|
|
50
|
+
const tsNode = services.esTreeNodeToTSNodeMap.get(node);
|
|
51
|
+
return tsNode ? services.checker.getTypeAtLocation(tsNode) : null;
|
|
52
|
+
} catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function isPrismaNextQueryPlanType(type) {
|
|
57
|
+
return PLAN_TYPE_PATTERNS.some((pattern) => pattern.test(type.symbol.name));
|
|
58
|
+
}
|
|
59
|
+
function extractCallChain(node) {
|
|
60
|
+
const chain = [];
|
|
61
|
+
function traverse(current) {
|
|
62
|
+
switch (current.type) {
|
|
63
|
+
case "CallExpression":
|
|
64
|
+
if (current.callee.type === "MemberExpression") {
|
|
65
|
+
traverse(current.callee.object);
|
|
66
|
+
if (current.callee.property.type === "Identifier") {
|
|
67
|
+
chain.push({ method: current.callee.property.name, args: current.arguments });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case "MemberExpression":
|
|
72
|
+
traverse(current.object);
|
|
73
|
+
break;
|
|
74
|
+
case "Identifier":
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
traverse(node);
|
|
79
|
+
return chain;
|
|
80
|
+
}
|
|
81
|
+
function isTypeFromPackages(type, packages) {
|
|
82
|
+
const fileName = type.getSymbol()?.valueDeclaration?.getSourceFile().fileName;
|
|
83
|
+
return fileName ? packages.some((pkg) => fileName.includes(`${pkg}/`)) : false;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// src/rules/lint-build-call.ts
|
|
87
|
+
var DEFAULT_OPTIONS = {
|
|
88
|
+
requireLimit: true,
|
|
89
|
+
maxLimit: 1e3,
|
|
90
|
+
requiredFields: []
|
|
91
|
+
};
|
|
92
|
+
var SELECT_QUERY_METHODS = ["select", "from"];
|
|
93
|
+
var lintBuildCall = ESLintUtils2.RuleCreator.withoutDocs({
|
|
94
|
+
meta: {
|
|
95
|
+
type: "problem",
|
|
96
|
+
docs: {
|
|
97
|
+
description: "Validate query builder build() calls using TypeScript type information"
|
|
98
|
+
},
|
|
99
|
+
schema: [
|
|
100
|
+
{
|
|
101
|
+
type: "object",
|
|
102
|
+
properties: {
|
|
103
|
+
requireLimit: {
|
|
104
|
+
type: "boolean",
|
|
105
|
+
description: "Enforce limit() calls on SELECT queries"
|
|
106
|
+
},
|
|
107
|
+
maxLimit: {
|
|
108
|
+
type: "number",
|
|
109
|
+
description: "Maximum allowed limit value",
|
|
110
|
+
minimum: 1
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
additionalProperties: false
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
messages: {
|
|
117
|
+
unboundedQuery: "Query build() call may result in unbounded query. Consider adding .limit() to prevent fetching too many rows.",
|
|
118
|
+
maxLimitExceeded: "Query build() call has a limit() value that exceeds the maximum allowed of {{maxLimit}}."
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
122
|
+
create(context, [options]) {
|
|
123
|
+
const services = getTypeScriptServices(context);
|
|
124
|
+
if (!services) {
|
|
125
|
+
throw new Error(
|
|
126
|
+
"TypeScript services are required for lint-build-call rule. Please ensure you are using @typescript-eslint/parser."
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
CallExpression(node) {
|
|
131
|
+
if (!isPrismaNextQueryBuildCall(node, services)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
lintQuery(node, extractCallChain(node));
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
function lintQuery(node, callChain) {
|
|
138
|
+
if (isSelectQuery(callChain)) {
|
|
139
|
+
checkUnboundedQuery(node, callChain);
|
|
140
|
+
checkLimitExceedsMax(node, callChain);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function isSelectQuery(callChain) {
|
|
144
|
+
return SELECT_QUERY_METHODS.some(
|
|
145
|
+
(method) => callChain.some((call) => call.method === method)
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
function checkUnboundedQuery(node, callChain) {
|
|
149
|
+
if (options.requireLimit && !callChain.some((call) => call.method === "limit")) {
|
|
150
|
+
reportUnboundedQuery(node);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function checkLimitExceedsMax(node, callChain) {
|
|
154
|
+
if (!options.maxLimit) return;
|
|
155
|
+
const limitArg = callChain.find((call) => call.method === "limit")?.args.pop();
|
|
156
|
+
const literalValue = limitArg ? extractNumericLiteral(limitArg) : void 0;
|
|
157
|
+
if (literalValue !== void 0 && literalValue > options.maxLimit) {
|
|
158
|
+
reportLimitExceeded(node);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function extractNumericLiteral(arg) {
|
|
162
|
+
if (arg?.type === "Literal" && "value" in arg && typeof arg.value === "number") {
|
|
163
|
+
return arg.value;
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
function reportUnboundedQuery(node) {
|
|
168
|
+
context.report({
|
|
169
|
+
node,
|
|
170
|
+
messageId: "unboundedQuery"
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function reportLimitExceeded(node) {
|
|
174
|
+
context.report({
|
|
175
|
+
node,
|
|
176
|
+
messageId: "maxLimitExceeded",
|
|
177
|
+
data: { maxLimit: options.maxLimit?.toString() ?? "undefined" }
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// src/index.ts
|
|
184
|
+
var PLUGIN_META = {
|
|
185
|
+
name,
|
|
186
|
+
version
|
|
187
|
+
};
|
|
188
|
+
var RULES = {
|
|
189
|
+
"lint-build-call": lintBuildCall
|
|
190
|
+
};
|
|
191
|
+
var RULE_CONFIG = {
|
|
192
|
+
"@prisma-next/lint-build-call": "error"
|
|
193
|
+
};
|
|
194
|
+
var plugin = {
|
|
195
|
+
meta: PLUGIN_META,
|
|
196
|
+
rules: RULES,
|
|
197
|
+
configs: {
|
|
198
|
+
recommended: {
|
|
199
|
+
plugins: ["@prisma-next"],
|
|
200
|
+
rules: RULE_CONFIG
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
plugin.configs["flat/recommended"] = {
|
|
205
|
+
plugins: {
|
|
206
|
+
"@prisma-next": plugin
|
|
207
|
+
},
|
|
208
|
+
rules: RULE_CONFIG
|
|
209
|
+
};
|
|
210
|
+
var index_default = plugin;
|
|
211
|
+
export {
|
|
212
|
+
index_default as default,
|
|
213
|
+
lintBuildCall,
|
|
214
|
+
plugin
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/rules/lint-build-call.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@prisma-next/eslint-plugin\",\n \"version\": \"0.0.1\",\n \"type\": \"module\",\n \"sideEffects\": false,\n \"description\": \"ESLint plugin for Prisma Next query builder type checking and linting\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"typescript\",\n \"prisma-next\",\n \"query-builder\"\n ],\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"build\": \"tsup --config tsup.config.ts && tsc --emitDeclarationOnly\",\n \"test\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"biome check . --config-path ../../../../biome.json --error-on-warnings\",\n \"clean\": \"node ../../../../scripts/clean.mjs\"\n },\n \"dependencies\": {\n \"@typescript-eslint/types\": \"^8.0.0\",\n \"@typescript-eslint/utils\": \"^8.0.0\"\n },\n \"devDependencies\": {\n \"@prisma-next/sql-contract\": \"workspace:*\",\n \"@prisma-next/sql-contract-ts\": \"workspace:*\",\n \"@prisma-next/sql-lane\": \"workspace:*\",\n \"@prisma-next/sql-relational-core\": \"workspace:*\",\n \"@prisma-next/sql-runtime\": \"workspace:*\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@types/eslint\": \"^9.0.0\",\n \"@types/node\": \"^20.0.0\",\n \"eslint\": \"^9.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^2.1.1\"\n },\n \"peerDependencies\": {\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"eslint\": \"^9.0.0\",\n \"typescript\": \"*\"\n }\n}\n","import type { TSESTree } from '@typescript-eslint/types';\nimport { ESLintUtils } from '@typescript-eslint/utils';\nimport {\n type BuilderCall,\n extractCallChain,\n getTypeScriptServices,\n isPrismaNextQueryBuildCall,\n} from '../utils';\n\nconst DEFAULT_OPTIONS = {\n requireLimit: true,\n maxLimit: 1000,\n requiredFields: [],\n};\n\nconst SELECT_QUERY_METHODS = ['select', 'from'] as const;\n\n// Types\ntype MessageIds = 'unboundedQuery' | 'maxLimitExceeded';\n\ninterface RuleOptions {\n /** Enforce limit() calls on SELECT queries to prevent unbounded queries */\n requireLimit?: boolean;\n /** Maximum allowed limit value */\n maxLimit?: number;\n}\n\ntype Options = [RuleOptions];\n\n// Rule implementation\nexport const lintBuildCall = ESLintUtils.RuleCreator.withoutDocs<Options, MessageIds>({\n meta: {\n type: 'problem',\n docs: {\n description: 'Validate query builder build() calls using TypeScript type information',\n },\n schema: [\n {\n type: 'object',\n properties: {\n requireLimit: {\n type: 'boolean',\n description: 'Enforce limit() calls on SELECT queries',\n },\n maxLimit: {\n type: 'number',\n description: 'Maximum allowed limit value',\n minimum: 1,\n },\n },\n additionalProperties: false,\n },\n ],\n messages: {\n unboundedQuery:\n 'Query build() call may result in unbounded query. Consider adding .limit() to prevent fetching too many rows.',\n maxLimitExceeded:\n 'Query build() call has a limit() value that exceeds the maximum allowed of {{maxLimit}}.',\n },\n },\n defaultOptions: [DEFAULT_OPTIONS],\n create(context, [options]) {\n const services = getTypeScriptServices(context);\n\n if (!services) {\n throw new Error(\n 'TypeScript services are required for lint-build-call rule. Please ensure you are using @typescript-eslint/parser.',\n );\n }\n\n return {\n CallExpression(node: TSESTree.CallExpression) {\n if (!isPrismaNextQueryBuildCall(node, services)) {\n return;\n }\n lintQuery(node, extractCallChain(node));\n },\n };\n\n function lintQuery(node: TSESTree.CallExpression, callChain: BuilderCall[]) {\n if (isSelectQuery(callChain)) {\n checkUnboundedQuery(node, callChain);\n checkLimitExceedsMax(node, callChain);\n }\n }\n\n function isSelectQuery(callChain: BuilderCall[]): boolean {\n return SELECT_QUERY_METHODS.some((method) =>\n callChain.some((call) => call.method === method),\n );\n }\n\n function checkUnboundedQuery(node: TSESTree.CallExpression, callChain: BuilderCall[]) {\n if (options.requireLimit && !callChain.some((call) => call.method === 'limit')) {\n reportUnboundedQuery(node);\n }\n }\n\n function checkLimitExceedsMax(node: TSESTree.CallExpression, callChain: BuilderCall[]) {\n if (!options.maxLimit) return;\n\n const limitArg = callChain.find((call) => call.method === 'limit')?.args.pop();\n const literalValue = limitArg ? extractNumericLiteral(limitArg) : undefined;\n if (literalValue !== undefined && literalValue > options.maxLimit) {\n reportLimitExceeded(node);\n }\n }\n\n function extractNumericLiteral(\n arg: TSESTree.Expression | TSESTree.SpreadElement,\n ): number | undefined {\n if (arg?.type === 'Literal' && 'value' in arg && typeof arg.value === 'number') {\n return arg.value;\n }\n return;\n }\n\n function reportUnboundedQuery(node: TSESTree.CallExpression) {\n context.report({\n node,\n messageId: 'unboundedQuery',\n });\n }\n\n function reportLimitExceeded(node: TSESTree.CallExpression) {\n context.report({\n node,\n messageId: 'maxLimitExceeded',\n data: { maxLimit: options.maxLimit?.toString() ?? 'undefined' },\n });\n }\n },\n});\n","import type { TSESTree } from '@typescript-eslint/types';\nimport type { ParserServices } from '@typescript-eslint/utils';\nimport { ESLintUtils } from '@typescript-eslint/utils';\nimport type * as ts from 'typescript';\n\nconst PRISMA_NEXT_SQL_PACKAGES = ['@prisma-next/sql-lane', 'packages/sql/lanes/sql-lane'] as const;\n\nconst PLAN_TYPE_PATTERNS = [/^SqlQueryPlan$/] as const;\n\nexport type BuilderCall = { method: string; args: TSESTree.CallExpressionArgument[] };\n\n// Types\nexport interface TypeScriptServices {\n program: ts.Program;\n checker: ts.TypeChecker;\n esTreeNodeToTSNodeMap: ParserServices['esTreeNodeToTSNodeMap'];\n tsNodeToESTreeNodeMap: ParserServices['tsNodeToESTreeNodeMap'];\n}\n\n/**\n * Get TypeScript services from ESLint context\n */\nexport function getTypeScriptServices(\n context: Parameters<typeof ESLintUtils.getParserServices>[0],\n): TypeScriptServices | null {\n try {\n const parserServices = ESLintUtils.getParserServices(context, false);\n\n if (!parserServices?.program) {\n return null;\n }\n\n return {\n program: parserServices.program,\n checker: parserServices.program.getTypeChecker(),\n esTreeNodeToTSNodeMap: parserServices.esTreeNodeToTSNodeMap,\n tsNodeToESTreeNodeMap: parserServices.tsNodeToESTreeNodeMap,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a call expression is a method call with a specific name\n */\nexport function isMethodCall(node: TSESTree.CallExpression, methodName: string): boolean {\n return (\n node.callee.type === 'MemberExpression' &&\n node.callee.property.type === 'Identifier' &&\n node.callee.property.name === methodName\n );\n}\n\n/**\n * Check if a call expression is a query builder build() call\n * Uses type information to verify it's actually our query builder's build method\n */\nexport function isPrismaNextQueryBuildCall(\n node: TSESTree.CallExpression,\n services?: TypeScriptServices | null,\n): boolean {\n if (!isMethodCall(node, 'build') || node.arguments.length > 1 || !services) {\n return false;\n }\n\n if (node.callee.type !== 'MemberExpression') {\n return false;\n }\n\n const objectType = getTypeOfNode(node.callee.object, services);\n if (!objectType) {\n return false;\n }\n\n if (!isTypeFromPackages(objectType, PRISMA_NEXT_SQL_PACKAGES)) {\n return false;\n }\n\n const returnType = getTypeOfNode(node, services);\n return returnType ? isPrismaNextQueryPlanType(returnType) : false;\n}\n\n/**\n * Get the TypeScript type of an ESTree node\n */\nexport function getTypeOfNode(node: TSESTree.Node, services: TypeScriptServices): ts.Type | null {\n try {\n const tsNode = services.esTreeNodeToTSNodeMap.get(node);\n return tsNode ? services.checker.getTypeAtLocation(tsNode) : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a type has a specific property\n */\nexport function typeHasProperty(\n type: ts.Type,\n propertyName: string,\n checker: ts.TypeChecker,\n): boolean {\n try {\n const properties = checker.getPropertiesOfType(type);\n return properties.some((prop) => prop.getName() === propertyName);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if type is a Prisma Next query plan type by name and origin\n */\nexport function isPrismaNextQueryPlanType(type: ts.Type): boolean {\n return PLAN_TYPE_PATTERNS.some((pattern) => pattern.test(type.symbol.name));\n}\n\n/**\n * Extract call chain from a call expression\n * Returns array of method names called in sequence\n */\nexport function extractCallChain(node: TSESTree.CallExpression): BuilderCall[] {\n const chain: BuilderCall[] = [];\n\n function traverse(current: TSESTree.Node): void {\n switch (current.type) {\n case 'CallExpression':\n if (current.callee.type === 'MemberExpression') {\n traverse(current.callee.object);\n if (current.callee.property.type === 'Identifier') {\n chain.push({ method: current.callee.property.name, args: current.arguments });\n }\n }\n break;\n\n case 'MemberExpression':\n traverse(current.object);\n break;\n\n case 'Identifier':\n break;\n }\n }\n\n traverse(node);\n return chain;\n}\n\n/**\n * Helper to check if a type originates from specific packages\n */\nfunction isTypeFromPackages(type: ts.Type, packages: readonly string[]): boolean {\n const fileName = type.getSymbol()?.valueDeclaration?.getSourceFile().fileName;\n return fileName ? packages.some((pkg) => fileName.includes(`${pkg}/`)) : false;\n}\n","import { name, version } from '../package.json';\nimport { lintBuildCall } from './rules/lint-build-call';\n\n// Plugin metadata\nconst PLUGIN_META = {\n name,\n version,\n};\n\n// Rule definitions\nconst RULES = {\n 'lint-build-call': lintBuildCall,\n};\n\n// Configuration presets\nconst RULE_CONFIG = {\n '@prisma-next/lint-build-call': 'error',\n};\n\n// Plugin interface\ninterface ESLintPlugin {\n meta: {\n name: string;\n version: string;\n };\n // biome-ignore lint/suspicious/noExplicitAny: Required for ESLint plugin interface compatibility\n rules: Record<string, any>;\n // biome-ignore lint/suspicious/noExplicitAny: Required for ESLint plugin interface compatibility\n configs: Record<string, any>;\n}\n\n// Plugin implementation\nconst plugin: ESLintPlugin = {\n meta: PLUGIN_META,\n rules: RULES,\n configs: {\n recommended: {\n plugins: ['@prisma-next'],\n rules: RULE_CONFIG,\n },\n },\n};\n\n// Add flat config after plugin is defined to avoid circular reference\nplugin.configs['flat/recommended'] = {\n plugins: {\n '@prisma-next': plugin,\n },\n rules: RULE_CONFIG,\n};\n\n// Exports\nexport default plugin;\nexport { lintBuildCall };\nexport { plugin };\nexport type { ESLintPlugin };\n"],"mappings":";AACE,WAAQ;AACR,cAAW;;;ACDb,SAAS,eAAAA,oBAAmB;;;ACC5B,SAAS,mBAAmB;AAG5B,IAAM,2BAA2B,CAAC,yBAAyB,6BAA6B;AAExF,IAAM,qBAAqB,CAAC,gBAAgB;AAerC,SAAS,sBACd,SAC2B;AAC3B,MAAI;AACF,UAAM,iBAAiB,YAAY,kBAAkB,SAAS,KAAK;AAEnE,QAAI,CAAC,gBAAgB,SAAS;AAC5B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,SAAS,eAAe;AAAA,MACxB,SAAS,eAAe,QAAQ,eAAe;AAAA,MAC/C,uBAAuB,eAAe;AAAA,MACtC,uBAAuB,eAAe;AAAA,IACxC;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,aAAa,MAA+B,YAA6B;AACvF,SACE,KAAK,OAAO,SAAS,sBACrB,KAAK,OAAO,SAAS,SAAS,gBAC9B,KAAK,OAAO,SAAS,SAAS;AAElC;AAMO,SAAS,2BACd,MACA,UACS;AACT,MAAI,CAAC,aAAa,MAAM,OAAO,KAAK,KAAK,UAAU,SAAS,KAAK,CAAC,UAAU;AAC1E,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,OAAO,SAAS,oBAAoB;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,cAAc,KAAK,OAAO,QAAQ,QAAQ;AAC7D,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,mBAAmB,YAAY,wBAAwB,GAAG;AAC7D,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,cAAc,MAAM,QAAQ;AAC/C,SAAO,aAAa,0BAA0B,UAAU,IAAI;AAC9D;AAKO,SAAS,cAAc,MAAqB,UAA8C;AAC/F,MAAI;AACF,UAAM,SAAS,SAAS,sBAAsB,IAAI,IAAI;AACtD,WAAO,SAAS,SAAS,QAAQ,kBAAkB,MAAM,IAAI;AAAA,EAC/D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAqBO,SAAS,0BAA0B,MAAwB;AAChE,SAAO,mBAAmB,KAAK,CAAC,YAAY,QAAQ,KAAK,KAAK,OAAO,IAAI,CAAC;AAC5E;AAMO,SAAS,iBAAiB,MAA8C;AAC7E,QAAM,QAAuB,CAAC;AAE9B,WAAS,SAAS,SAA8B;AAC9C,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,YAAI,QAAQ,OAAO,SAAS,oBAAoB;AAC9C,mBAAS,QAAQ,OAAO,MAAM;AAC9B,cAAI,QAAQ,OAAO,SAAS,SAAS,cAAc;AACjD,kBAAM,KAAK,EAAE,QAAQ,QAAQ,OAAO,SAAS,MAAM,MAAM,QAAQ,UAAU,CAAC;AAAA,UAC9E;AAAA,QACF;AACA;AAAA,MAEF,KAAK;AACH,iBAAS,QAAQ,MAAM;AACvB;AAAA,MAEF,KAAK;AACH;AAAA,IACJ;AAAA,EACF;AAEA,WAAS,IAAI;AACb,SAAO;AACT;AAKA,SAAS,mBAAmB,MAAe,UAAsC;AAC/E,QAAM,WAAW,KAAK,UAAU,GAAG,kBAAkB,cAAc,EAAE;AACrE,SAAO,WAAW,SAAS,KAAK,CAAC,QAAQ,SAAS,SAAS,GAAG,GAAG,GAAG,CAAC,IAAI;AAC3E;;;ADlJA,IAAM,kBAAkB;AAAA,EACtB,cAAc;AAAA,EACd,UAAU;AAAA,EACV,gBAAgB,CAAC;AACnB;AAEA,IAAM,uBAAuB,CAAC,UAAU,MAAM;AAevC,IAAM,gBAAgBC,aAAY,YAAY,YAAiC;AAAA,EACpF,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,UACV,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,aAAa;AAAA,UACf;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,aAAa;AAAA,YACb,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,sBAAsB;AAAA,MACxB;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,gBACE;AAAA,MACF,kBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC,eAAe;AAAA,EAChC,OAAO,SAAS,CAAC,OAAO,GAAG;AACzB,UAAM,WAAW,sBAAsB,OAAO;AAE9C,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,eAAe,MAA+B;AAC5C,YAAI,CAAC,2BAA2B,MAAM,QAAQ,GAAG;AAC/C;AAAA,QACF;AACA,kBAAU,MAAM,iBAAiB,IAAI,CAAC;AAAA,MACxC;AAAA,IACF;AAEA,aAAS,UAAU,MAA+B,WAA0B;AAC1E,UAAI,cAAc,SAAS,GAAG;AAC5B,4BAAoB,MAAM,SAAS;AACnC,6BAAqB,MAAM,SAAS;AAAA,MACtC;AAAA,IACF;AAEA,aAAS,cAAc,WAAmC;AACxD,aAAO,qBAAqB;AAAA,QAAK,CAAC,WAChC,UAAU,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,MACjD;AAAA,IACF;AAEA,aAAS,oBAAoB,MAA+B,WAA0B;AACpF,UAAI,QAAQ,gBAAgB,CAAC,UAAU,KAAK,CAAC,SAAS,KAAK,WAAW,OAAO,GAAG;AAC9E,6BAAqB,IAAI;AAAA,MAC3B;AAAA,IACF;AAEA,aAAS,qBAAqB,MAA+B,WAA0B;AACrF,UAAI,CAAC,QAAQ,SAAU;AAEvB,YAAM,WAAW,UAAU,KAAK,CAAC,SAAS,KAAK,WAAW,OAAO,GAAG,KAAK,IAAI;AAC7E,YAAM,eAAe,WAAW,sBAAsB,QAAQ,IAAI;AAClE,UAAI,iBAAiB,UAAa,eAAe,QAAQ,UAAU;AACjE,4BAAoB,IAAI;AAAA,MAC1B;AAAA,IACF;AAEA,aAAS,sBACP,KACoB;AACpB,UAAI,KAAK,SAAS,aAAa,WAAW,OAAO,OAAO,IAAI,UAAU,UAAU;AAC9E,eAAO,IAAI;AAAA,MACb;AACA;AAAA,IACF;AAEA,aAAS,qBAAqB,MAA+B;AAC3D,cAAQ,OAAO;AAAA,QACb;AAAA,QACA,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,aAAS,oBAAoB,MAA+B;AAC1D,cAAQ,OAAO;AAAA,QACb;AAAA,QACA,WAAW;AAAA,QACX,MAAM,EAAE,UAAU,QAAQ,UAAU,SAAS,KAAK,YAAY;AAAA,MAChE,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;;;AEhID,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AACF;AAGA,IAAM,QAAQ;AAAA,EACZ,mBAAmB;AACrB;AAGA,IAAM,cAAc;AAAA,EAClB,gCAAgC;AAClC;AAeA,IAAM,SAAuB;AAAA,EAC3B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,IACP,aAAa;AAAA,MACX,SAAS,CAAC,cAAc;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAGA,OAAO,QAAQ,kBAAkB,IAAI;AAAA,EACnC,SAAS;AAAA,IACP,gBAAgB;AAAA,EAClB;AAAA,EACA,OAAO;AACT;AAGA,IAAO,gBAAQ;","names":["ESLintUtils","ESLintUtils"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-build-call.d.ts","sourceRoot":"","sources":["../../src/rules/lint-build-call.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiBvD,KAAK,UAAU,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAExD,UAAU,WAAW;IACnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;AAG7B,eAAO,MAAM,aAAa,gFAsGxB,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TSESTree } from '@typescript-eslint/types';
|
|
2
|
+
import type { ParserServices } from '@typescript-eslint/utils';
|
|
3
|
+
import { ESLintUtils } from '@typescript-eslint/utils';
|
|
4
|
+
import type * as ts from 'typescript';
|
|
5
|
+
export type BuilderCall = {
|
|
6
|
+
method: string;
|
|
7
|
+
args: TSESTree.CallExpressionArgument[];
|
|
8
|
+
};
|
|
9
|
+
export interface TypeScriptServices {
|
|
10
|
+
program: ts.Program;
|
|
11
|
+
checker: ts.TypeChecker;
|
|
12
|
+
esTreeNodeToTSNodeMap: ParserServices['esTreeNodeToTSNodeMap'];
|
|
13
|
+
tsNodeToESTreeNodeMap: ParserServices['tsNodeToESTreeNodeMap'];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get TypeScript services from ESLint context
|
|
17
|
+
*/
|
|
18
|
+
export declare function getTypeScriptServices(context: Parameters<typeof ESLintUtils.getParserServices>[0]): TypeScriptServices | null;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a call expression is a method call with a specific name
|
|
21
|
+
*/
|
|
22
|
+
export declare function isMethodCall(node: TSESTree.CallExpression, methodName: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a call expression is a query builder build() call
|
|
25
|
+
* Uses type information to verify it's actually our query builder's build method
|
|
26
|
+
*/
|
|
27
|
+
export declare function isPrismaNextQueryBuildCall(node: TSESTree.CallExpression, services?: TypeScriptServices | null): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get the TypeScript type of an ESTree node
|
|
30
|
+
*/
|
|
31
|
+
export declare function getTypeOfNode(node: TSESTree.Node, services: TypeScriptServices): ts.Type | null;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a type has a specific property
|
|
34
|
+
*/
|
|
35
|
+
export declare function typeHasProperty(type: ts.Type, propertyName: string, checker: ts.TypeChecker): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Check if type is a Prisma Next query plan type by name and origin
|
|
38
|
+
*/
|
|
39
|
+
export declare function isPrismaNextQueryPlanType(type: ts.Type): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Extract call chain from a call expression
|
|
42
|
+
* Returns array of method names called in sequence
|
|
43
|
+
*/
|
|
44
|
+
export declare function extractCallChain(node: TSESTree.CallExpression): BuilderCall[];
|
|
45
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAMtC,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC,sBAAsB,EAAE,CAAA;CAAE,CAAC;AAGtF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,qBAAqB,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;IAC/D,qBAAqB,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3D,kBAAkB,GAAG,IAAI,CAiB3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAMvF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,QAAQ,CAAC,cAAc,EAC7B,QAAQ,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACnC,OAAO,CAoBT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,kBAAkB,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,CAO/F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAEhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,GAAG,WAAW,EAAE,CAyB7E"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@prisma-next/eslint-plugin",
|
|
3
|
+
"version": "0.0.1-dev.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"sideEffects": false,
|
|
6
|
+
"description": "ESLint plugin for Prisma Next query builder type checking and linting",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"eslint",
|
|
9
|
+
"eslintplugin",
|
|
10
|
+
"typescript",
|
|
11
|
+
"prisma-next",
|
|
12
|
+
"query-builder"
|
|
13
|
+
],
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@typescript-eslint/types": "^8.0.0",
|
|
23
|
+
"@typescript-eslint/utils": "^8.0.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
27
|
+
"@types/eslint": "^9.0.0",
|
|
28
|
+
"@types/node": "^20.0.0",
|
|
29
|
+
"eslint": "^9.0.0",
|
|
30
|
+
"tsup": "^8.3.0",
|
|
31
|
+
"typescript": "^5.9.3",
|
|
32
|
+
"vitest": "^2.1.1",
|
|
33
|
+
"@prisma-next/sql-contract-ts": "0.0.1",
|
|
34
|
+
"@prisma-next/sql-contract": "0.0.1",
|
|
35
|
+
"@prisma-next/sql-lane": "0.0.1",
|
|
36
|
+
"@prisma-next/sql-relational-core": "0.0.1",
|
|
37
|
+
"@prisma-next/sql-runtime": "0.0.1"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
41
|
+
"eslint": "^9.0.0",
|
|
42
|
+
"typescript": "*"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsup --config tsup.config.ts && tsc --emitDeclarationOnly",
|
|
46
|
+
"test": "vitest run",
|
|
47
|
+
"test:coverage": "vitest run --coverage",
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"lint": "biome check . --config-path ../../../../biome.json --error-on-warnings",
|
|
50
|
+
"clean": "node ../../../../scripts/clean.mjs"
|
|
51
|
+
}
|
|
52
|
+
}
|