csv-sql-engine 0.0.0 → 0.0.1
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/LICENSE-CC0 +121 -0
- package/LICENSE-MIT +21 -0
- package/README.md +49 -0
- package/dist/augments/trim-lines.d.ts +6 -0
- package/dist/augments/trim-lines.js +12 -0
- package/dist/csv/csv-file.d.ts +70 -0
- package/dist/csv/csv-file.js +98 -0
- package/dist/csv/csv-text.d.ts +52 -0
- package/dist/csv/csv-text.js +79 -0
- package/dist/engine/define-ast-handler.d.ts +27 -0
- package/dist/engine/define-ast-handler.js +8 -0
- package/dist/engine/engine.d.ts +16 -0
- package/dist/engine/engine.js +66 -0
- package/dist/engine/handlers/row-delete.handler.d.ts +6 -0
- package/dist/engine/handlers/row-delete.handler.js +51 -0
- package/dist/engine/handlers/row-insert.handler.d.ts +6 -0
- package/dist/engine/handlers/row-insert.handler.js +54 -0
- package/dist/engine/handlers/row-select.handler.d.ts +6 -0
- package/dist/engine/handlers/row-select.handler.js +46 -0
- package/dist/engine/handlers/row-update.handler.d.ts +6 -0
- package/dist/engine/handlers/row-update.handler.js +61 -0
- package/dist/engine/handlers/table-alter.handler.d.ts +6 -0
- package/dist/engine/handlers/table-alter.handler.js +85 -0
- package/dist/engine/handlers/table-create.handler.d.ts +6 -0
- package/dist/engine/handlers/table-create.handler.js +38 -0
- package/dist/engine/handlers/table-drop.handler.d.ts +6 -0
- package/dist/engine/handlers/table-drop.handler.js +36 -0
- package/dist/engine/params.d.ts +51 -0
- package/dist/engine/params.js +1 -0
- package/dist/engine/where-matcher.d.ts +9 -0
- package/dist/engine/where-matcher.js +52 -0
- package/dist/errors/csv-sql-engine.error.d.ts +9 -0
- package/dist/errors/csv-sql-engine.error.js +9 -0
- package/dist/errors/csv.error.d.ts +57 -0
- package/dist/errors/csv.error.js +68 -0
- package/dist/errors/sql.error.d.ts +45 -0
- package/dist/errors/sql.error.js +64 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +20 -0
- package/dist/sql/ast.d.ts +472 -0
- package/dist/sql/ast.js +266 -0
- package/dist/sql/parse-sql.d.ts +9 -0
- package/dist/sql/parse-sql.js +38 -0
- package/dist/sql/sql.d.ts +24 -0
- package/dist/sql/sql.js +26 -0
- package/package.json +99 -11
package/dist/sql/ast.js
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { Type } from '@sinclair/typebox';
|
|
2
|
+
import { defineShape, enumShape, exactShape, nullableShape, primitiveShape, unionShape, } from 'object-shape-tester';
|
|
3
|
+
/**
|
|
4
|
+
* All AST types (corresponding to various SQL commands). Extracted from
|
|
5
|
+
* [node-sql-parser](https://npmjs.com/package/node-sql-parser).
|
|
6
|
+
*
|
|
7
|
+
* @category Internal
|
|
8
|
+
*/
|
|
9
|
+
export var AstType;
|
|
10
|
+
(function (AstType) {
|
|
11
|
+
AstType["Alter"] = "alter";
|
|
12
|
+
AstType["Create"] = "create";
|
|
13
|
+
AstType["Delete"] = "delete";
|
|
14
|
+
AstType["Drop"] = "drop";
|
|
15
|
+
AstType["Insert"] = "insert";
|
|
16
|
+
AstType["Replace"] = "replace";
|
|
17
|
+
AstType["Select"] = "select";
|
|
18
|
+
AstType["Update"] = "update";
|
|
19
|
+
AstType["Use"] = "use";
|
|
20
|
+
})(AstType || (AstType = {}));
|
|
21
|
+
/**
|
|
22
|
+
* Shape definition for parsed AST output of a SQL command's list of applicable tables.
|
|
23
|
+
*
|
|
24
|
+
* @category Internal
|
|
25
|
+
*/
|
|
26
|
+
export const tablesShape = defineShape([
|
|
27
|
+
{
|
|
28
|
+
table: '',
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* All supported and known alter table actions.
|
|
33
|
+
*
|
|
34
|
+
* @category Internal
|
|
35
|
+
*/
|
|
36
|
+
export var AlterExpressionAction;
|
|
37
|
+
(function (AlterExpressionAction) {
|
|
38
|
+
AlterExpressionAction["Add"] = "add";
|
|
39
|
+
AlterExpressionAction["Rename"] = "rename";
|
|
40
|
+
AlterExpressionAction["Drop"] = "drop";
|
|
41
|
+
})(AlterExpressionAction || (AlterExpressionAction = {}));
|
|
42
|
+
/**
|
|
43
|
+
* Shape definition for parsed AST output of a ALTER command.
|
|
44
|
+
*
|
|
45
|
+
* @category Internal
|
|
46
|
+
*/
|
|
47
|
+
export const alterExpressionShape = defineShape(unionShape({
|
|
48
|
+
action: exactShape(AlterExpressionAction.Add),
|
|
49
|
+
resource: exactShape('column'),
|
|
50
|
+
column: {
|
|
51
|
+
type: exactShape('column_ref'),
|
|
52
|
+
column: '',
|
|
53
|
+
},
|
|
54
|
+
default_val: nullableShape({
|
|
55
|
+
value: {
|
|
56
|
+
value: '',
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
}, {
|
|
60
|
+
action: exactShape(AlterExpressionAction.Rename),
|
|
61
|
+
resource: exactShape('column'),
|
|
62
|
+
old_column: {
|
|
63
|
+
/** Old name of the column. */
|
|
64
|
+
column: '',
|
|
65
|
+
},
|
|
66
|
+
column: {
|
|
67
|
+
/** Name name for the column. */
|
|
68
|
+
column: '',
|
|
69
|
+
},
|
|
70
|
+
}, {
|
|
71
|
+
action: exactShape(AlterExpressionAction.Drop),
|
|
72
|
+
resource: exactShape('column'),
|
|
73
|
+
column: {
|
|
74
|
+
/** Name name for the column. */
|
|
75
|
+
column: '',
|
|
76
|
+
},
|
|
77
|
+
}));
|
|
78
|
+
/**
|
|
79
|
+
* Keywords allowed for the create command. Extracted from
|
|
80
|
+
* [node-sql-parser](https://npmjs.com/package/node-sql-parser).
|
|
81
|
+
*
|
|
82
|
+
* @category Internal
|
|
83
|
+
*/
|
|
84
|
+
export var CreateKeyword;
|
|
85
|
+
(function (CreateKeyword) {
|
|
86
|
+
CreateKeyword["Aggregate"] = "aggregate";
|
|
87
|
+
CreateKeyword["Database"] = "database";
|
|
88
|
+
CreateKeyword["Domain"] = "domain";
|
|
89
|
+
CreateKeyword["Extension"] = "extension";
|
|
90
|
+
CreateKeyword["Function"] = "function";
|
|
91
|
+
CreateKeyword["Index"] = "index";
|
|
92
|
+
CreateKeyword["Schema"] = "schema";
|
|
93
|
+
CreateKeyword["Table"] = "table";
|
|
94
|
+
CreateKeyword["Trigger"] = "trigger";
|
|
95
|
+
CreateKeyword["Type"] = "type";
|
|
96
|
+
CreateKeyword["User"] = "user";
|
|
97
|
+
CreateKeyword["View"] = "view";
|
|
98
|
+
})(CreateKeyword || (CreateKeyword = {}));
|
|
99
|
+
/**
|
|
100
|
+
* Known / supported where types from the SQL AST.
|
|
101
|
+
*
|
|
102
|
+
* @category Internal
|
|
103
|
+
*/
|
|
104
|
+
export var WhereType;
|
|
105
|
+
(function (WhereType) {
|
|
106
|
+
WhereType["BinaryExpression"] = "binary_expr";
|
|
107
|
+
})(WhereType || (WhereType = {}));
|
|
108
|
+
/**
|
|
109
|
+
* Known / supported where operators from the SQL AST.
|
|
110
|
+
*
|
|
111
|
+
* @category Internal
|
|
112
|
+
*/
|
|
113
|
+
export var WhereOperator;
|
|
114
|
+
(function (WhereOperator) {
|
|
115
|
+
WhereOperator["Equals"] = "=";
|
|
116
|
+
WhereOperator["Or"] = "OR";
|
|
117
|
+
WhereOperator["And"] = "AND";
|
|
118
|
+
})(WhereOperator || (WhereOperator = {}));
|
|
119
|
+
/**
|
|
120
|
+
* SQL AST shape for the column selection part of a where clause.
|
|
121
|
+
*
|
|
122
|
+
* @category Internal
|
|
123
|
+
*/
|
|
124
|
+
export const whereColumnShape = defineShape({
|
|
125
|
+
type: exactShape('column_ref'),
|
|
126
|
+
/** The column name. */
|
|
127
|
+
column: '',
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* SQL AST shape for basic where comparison.
|
|
131
|
+
*
|
|
132
|
+
* @category Internal
|
|
133
|
+
*/
|
|
134
|
+
export const basicWhereShape = defineShape({
|
|
135
|
+
operator: unionShape(exactShape(WhereOperator.Equals)),
|
|
136
|
+
left: {
|
|
137
|
+
type: exactShape('column_ref'),
|
|
138
|
+
/** The column name. */
|
|
139
|
+
column: '',
|
|
140
|
+
},
|
|
141
|
+
right: {
|
|
142
|
+
value: primitiveShape(),
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* SQL AST _schema_ for conjunction where clauses (like `or` or `and`).
|
|
147
|
+
*
|
|
148
|
+
* @category Internal
|
|
149
|
+
* @see {@link whereConjunctionShape} for the shape.
|
|
150
|
+
*/
|
|
151
|
+
export const whereConjunctionSchema = Type.Recursive((Self) => Type.Object({
|
|
152
|
+
operator: Type.Union([
|
|
153
|
+
Type.Literal(WhereOperator.Or),
|
|
154
|
+
Type.Literal(WhereOperator.And),
|
|
155
|
+
]),
|
|
156
|
+
left: Type.Union([
|
|
157
|
+
basicWhereShape.$_schema,
|
|
158
|
+
Self,
|
|
159
|
+
]),
|
|
160
|
+
right: basicWhereShape.$_schema,
|
|
161
|
+
}));
|
|
162
|
+
/**
|
|
163
|
+
* SQL AST _shape_ for conjunction where clauses (like `or` or `and`).
|
|
164
|
+
*
|
|
165
|
+
* @category Internal
|
|
166
|
+
* @see {@link whereConjunctionSchema} for the schema.
|
|
167
|
+
*/
|
|
168
|
+
export const whereConjunctionShape = defineShape(whereConjunctionSchema);
|
|
169
|
+
/**
|
|
170
|
+
* SQL AST shape for SQL where clauses.
|
|
171
|
+
*
|
|
172
|
+
* @category Internal
|
|
173
|
+
*/
|
|
174
|
+
export const whereShape = unionShape(basicWhereShape, whereConjunctionShape);
|
|
175
|
+
/**
|
|
176
|
+
* SQL AST shape for queries that also select data.
|
|
177
|
+
*
|
|
178
|
+
* @category Internal
|
|
179
|
+
*/
|
|
180
|
+
export const returningShape = defineShape({
|
|
181
|
+
type: exactShape('returning'),
|
|
182
|
+
columns: [
|
|
183
|
+
{
|
|
184
|
+
expr: {
|
|
185
|
+
column: '',
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
});
|
|
190
|
+
/**
|
|
191
|
+
* The AST types provided by node-sql-parser are missing a lot of information, so we define our own
|
|
192
|
+
* here.
|
|
193
|
+
*
|
|
194
|
+
* @category Internal
|
|
195
|
+
*/
|
|
196
|
+
export const sqlAstShape = defineShape(unionShape({
|
|
197
|
+
type: exactShape(AstType.Insert),
|
|
198
|
+
table: tablesShape,
|
|
199
|
+
columns: nullableShape(['']),
|
|
200
|
+
values: {
|
|
201
|
+
values: [
|
|
202
|
+
{
|
|
203
|
+
value: [
|
|
204
|
+
{
|
|
205
|
+
value: primitiveShape(),
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
returning: nullableShape(returningShape),
|
|
212
|
+
}, {
|
|
213
|
+
type: exactShape(AstType.Delete),
|
|
214
|
+
table: tablesShape,
|
|
215
|
+
from: tablesShape,
|
|
216
|
+
where: whereShape,
|
|
217
|
+
returning: nullableShape(returningShape),
|
|
218
|
+
}, {
|
|
219
|
+
type: exactShape(AstType.Select),
|
|
220
|
+
columns: [
|
|
221
|
+
{
|
|
222
|
+
expr: {
|
|
223
|
+
/** Selected column name. */
|
|
224
|
+
column: '',
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
from: tablesShape,
|
|
229
|
+
where: whereShape,
|
|
230
|
+
}, {
|
|
231
|
+
type: exactShape(AstType.Update),
|
|
232
|
+
table: tablesShape,
|
|
233
|
+
where: whereShape,
|
|
234
|
+
set: [
|
|
235
|
+
{
|
|
236
|
+
/** The name of the column to overwrite. */
|
|
237
|
+
column: '',
|
|
238
|
+
value: {
|
|
239
|
+
/** The new value to insert. */
|
|
240
|
+
value: '',
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
],
|
|
244
|
+
returning: nullableShape(returningShape),
|
|
245
|
+
}, {
|
|
246
|
+
type: exactShape(AstType.Drop),
|
|
247
|
+
name: tablesShape,
|
|
248
|
+
prefix: nullableShape(exactShape('if exists')),
|
|
249
|
+
keyword: exactShape('table'),
|
|
250
|
+
}, {
|
|
251
|
+
type: exactShape(AstType.Alter),
|
|
252
|
+
table: tablesShape,
|
|
253
|
+
expr: [alterExpressionShape],
|
|
254
|
+
}, {
|
|
255
|
+
type: exactShape(AstType.Create),
|
|
256
|
+
keyword: enumShape(CreateKeyword),
|
|
257
|
+
table: tablesShape,
|
|
258
|
+
create_definitions: [
|
|
259
|
+
{
|
|
260
|
+
column: {
|
|
261
|
+
/** The name of the new column. */
|
|
262
|
+
column: '',
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ParseSqlOptions } from '../engine/params.js';
|
|
2
|
+
import { type SqlAst } from './ast.js';
|
|
3
|
+
import { type Sql } from './sql.js';
|
|
4
|
+
/**
|
|
5
|
+
* Parse SQL into multiple SQL ASTs.
|
|
6
|
+
*
|
|
7
|
+
* @category SQL
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseSql(sql: Sql, options?: Readonly<ParseSqlOptions>): SqlAst[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { combineErrorMessages, ensureArray, extractErrorMessage, indent, wrapInTry, } from '@augment-vir/common';
|
|
2
|
+
import NodeSqlParser from 'node-sql-parser';
|
|
3
|
+
import { assertValidShape, checkValidShape } from 'object-shape-tester';
|
|
4
|
+
import { SqlParseError } from '../errors/sql.error.js';
|
|
5
|
+
import { sqlAstShape } from './ast.js';
|
|
6
|
+
const defaultParser = new NodeSqlParser.Parser();
|
|
7
|
+
/**
|
|
8
|
+
* Parse SQL into multiple SQL ASTs.
|
|
9
|
+
*
|
|
10
|
+
* @category SQL
|
|
11
|
+
*/
|
|
12
|
+
export function parseSql(sql, options = {}) {
|
|
13
|
+
try {
|
|
14
|
+
return ensureArray(
|
|
15
|
+
// cspell:word astify
|
|
16
|
+
(options.parser || defaultParser).astify(sql.sql, {
|
|
17
|
+
database: 'Sqlite',
|
|
18
|
+
})).filter((ast) => {
|
|
19
|
+
if (checkValidShape(ast, sqlAstShape, {
|
|
20
|
+
allowExtraKeys: true,
|
|
21
|
+
})) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
else if (options.rejectUnsupportedOperations) {
|
|
25
|
+
const failureReason = extractErrorMessage(wrapInTry(() => assertValidShape(ast, sqlAstShape, {
|
|
26
|
+
allowExtraKeys: true,
|
|
27
|
+
})));
|
|
28
|
+
throw new Error(combineErrorMessages('AST failed', failureReason, '\n', indent(JSON.stringify(ast, null, 4))));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new SqlParseError(sql, error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type MaybeArray } from '@augment-vir/common';
|
|
2
|
+
import { Sql as OriginalSql } from 'sql-template-tag';
|
|
3
|
+
/**
|
|
4
|
+
* A SQL command's strings and values.
|
|
5
|
+
*
|
|
6
|
+
* @category Internal
|
|
7
|
+
*/
|
|
8
|
+
export declare class Sql extends OriginalSql {
|
|
9
|
+
values: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parses a SQL string with interpolations extracted into values so that they can be properly
|
|
13
|
+
* sanitized.
|
|
14
|
+
*
|
|
15
|
+
* @category SQL
|
|
16
|
+
*/
|
|
17
|
+
export declare function sql(strings: ReadonlyArray<string>, ...values: Array<MaybeArray<string> | Sql>): Sql;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a raw, _unsafe_, {@link Sql} command. Prefer {@link sql} whenever possible.
|
|
20
|
+
*
|
|
21
|
+
* @deprecated This is unsafe: refer {@link sql} whenever possible.
|
|
22
|
+
* @category Internal
|
|
23
|
+
*/
|
|
24
|
+
export declare function rawSql(value: string): Sql;
|
package/dist/sql/sql.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Sql as OriginalSql } from 'sql-template-tag';
|
|
2
|
+
/**
|
|
3
|
+
* A SQL command's strings and values.
|
|
4
|
+
*
|
|
5
|
+
* @category Internal
|
|
6
|
+
*/
|
|
7
|
+
export class Sql extends OriginalSql {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Parses a SQL string with interpolations extracted into values so that they can be properly
|
|
11
|
+
* sanitized.
|
|
12
|
+
*
|
|
13
|
+
* @category SQL
|
|
14
|
+
*/
|
|
15
|
+
export function sql(strings, ...values) {
|
|
16
|
+
return new Sql(strings, values);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a raw, _unsafe_, {@link Sql} command. Prefer {@link sql} whenever possible.
|
|
20
|
+
*
|
|
21
|
+
* @deprecated This is unsafe: refer {@link sql} whenever possible.
|
|
22
|
+
* @category Internal
|
|
23
|
+
*/
|
|
24
|
+
export function rawSql(value) {
|
|
25
|
+
return sql([value]);
|
|
26
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,101 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
"name": "csv-sql-engine",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "API for executing SQL statements on CSV files.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"CSV",
|
|
7
|
+
"SQL",
|
|
8
|
+
"SQLite"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/electrovir/csv-sql-engine",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/electrovir/csv-sql-engine/issues"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/electrovir/csv-sql-engine.git"
|
|
17
|
+
},
|
|
18
|
+
"license": "(MIT or CC0 1.0)",
|
|
19
|
+
"author": {
|
|
20
|
+
"name": "electrovir",
|
|
21
|
+
"url": "https://github.com/electrovir"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "dist/index.js",
|
|
26
|
+
"module": "dist/index.js",
|
|
27
|
+
"types": "dist/index.d.ts",
|
|
28
|
+
"scripts": {
|
|
29
|
+
"compile": "virmator compile",
|
|
30
|
+
"docs": "virmator docs",
|
|
31
|
+
"format": "virmator format",
|
|
32
|
+
"lint": "virmator lint fix",
|
|
33
|
+
"publish": "virmator publish npm run test:all",
|
|
34
|
+
"start": "tsx src/index.ts",
|
|
35
|
+
"test": "virmator test node",
|
|
36
|
+
"test:all": "npm run compile && runstorm --names tests,spelling,format,docs,deps,lint \"npm run test\" \"npm run test:spelling\" \"npm run test:format\" \"npm run test:docs\" \"npm run test:deps\" \"npm run test:lint\"",
|
|
37
|
+
"test:coverage": "npm run test coverage",
|
|
38
|
+
"test:deps": "virmator deps check",
|
|
39
|
+
"test:docs": "virmator docs check",
|
|
40
|
+
"test:format": "virmator format check",
|
|
41
|
+
"test:lint": "virmator lint",
|
|
42
|
+
"test:spelling": "virmator spellcheck",
|
|
43
|
+
"test:update": "npm run test update"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@augment-vir/assert": "^31.55.0",
|
|
47
|
+
"@augment-vir/common": "^31.55.0",
|
|
48
|
+
"@augment-vir/node": "^31.55.0",
|
|
49
|
+
"@sinclair/typebox": "^0.34.45",
|
|
50
|
+
"d3-dsv": "^3.0.1",
|
|
51
|
+
"node-sql-parser": "^5.3.13",
|
|
52
|
+
"object-shape-tester": "^6.11.0",
|
|
53
|
+
"sql-template-tag": "^5.2.1"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@augment-vir/test": "^31.55.0",
|
|
57
|
+
"@eslint/eslintrc": "^3.3.3",
|
|
58
|
+
"@eslint/js": "^9.39.2",
|
|
59
|
+
"@stylistic/eslint-plugin": "^5.6.1",
|
|
60
|
+
"@stylistic/eslint-plugin-ts": "^4.4.1",
|
|
61
|
+
"@types/d3-dsv": "^3.0.7",
|
|
62
|
+
"@types/node": "^25.0.3",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^8.50.1",
|
|
64
|
+
"c8": "^10.1.3",
|
|
65
|
+
"cspell": "^9.4.0",
|
|
66
|
+
"dependency-cruiser": "^17.3.5",
|
|
67
|
+
"esbuild": "^0.27.2",
|
|
68
|
+
"eslint": "^9.39.2",
|
|
69
|
+
"eslint-config-prettier": "^10.1.8",
|
|
70
|
+
"eslint-plugin-jsdoc": "^61.5.0",
|
|
71
|
+
"eslint-plugin-monorepo-cop": "^1.0.2",
|
|
72
|
+
"eslint-plugin-playwright": "^2.4.0",
|
|
73
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
74
|
+
"eslint-plugin-require-extensions": "^0.1.3",
|
|
75
|
+
"eslint-plugin-sonarjs": "^3.0.5",
|
|
76
|
+
"eslint-plugin-unicorn": "^62.0.0",
|
|
77
|
+
"istanbul-smart-text-reporter": "^1.1.5",
|
|
78
|
+
"markdown-code-example-inserter": "^3.0.3",
|
|
79
|
+
"npm-check-updates": "^19.2.0",
|
|
80
|
+
"prettier": "~3.3.3",
|
|
81
|
+
"prettier-plugin-embed": "^0.5.1",
|
|
82
|
+
"prettier-plugin-interpolated-html-tags": "^2.0.1",
|
|
83
|
+
"prettier-plugin-jsdoc": "^1.8.0",
|
|
84
|
+
"prettier-plugin-multiline-arrays": "^4.1.3",
|
|
85
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
86
|
+
"prettier-plugin-packagejson": "^2.5.20",
|
|
87
|
+
"prettier-plugin-sort-json": "^4.1.1",
|
|
88
|
+
"prettier-plugin-sql": "^0.19.2",
|
|
89
|
+
"prettier-plugin-toml": "^2.0.6",
|
|
90
|
+
"runstorm": "^1.0.0",
|
|
91
|
+
"tsx": "^4.21.0",
|
|
92
|
+
"type-fest": "^5.3.1",
|
|
93
|
+
"typedoc": "^0.28.15",
|
|
94
|
+
"typescript": "^5.9.3",
|
|
95
|
+
"typescript-eslint": "^8.50.1",
|
|
96
|
+
"virmator": "^14.3.5"
|
|
97
|
+
},
|
|
98
|
+
"engines": {
|
|
99
|
+
"node": ">=22"
|
|
100
|
+
}
|
|
13
101
|
}
|