happy-sql 1.4.0 → 1.5.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.
Files changed (67) hide show
  1. package/ChangeLog +13 -0
  2. package/lib/parser/visitors/clause/delete/delete.js +1 -1
  3. package/lib/parser/visitors/clause/delete/fixture/delete-fix.js +1 -1
  4. package/lib/parser/visitors/clause/from/fixture/join-fix.js +6 -0
  5. package/lib/parser/visitors/clause/from/fixture/join-multi-fix.js +6 -0
  6. package/lib/parser/visitors/clause/from/fixture/join-multi.sql +1 -0
  7. package/lib/parser/visitors/clause/from/fixture/join.sql +1 -0
  8. package/lib/parser/visitors/clause/from/from.js +87 -3
  9. package/lib/parser/visitors/clause/insert/insert.js +2 -4
  10. package/lib/parser/visitors/clause/operand.js +12 -0
  11. package/lib/parser/visitors/clause/select/select.js +4 -0
  12. package/lib/parser/visitors/clause/where/where.js +6 -17
  13. package/lib/printer/fixture/select.js +3 -0
  14. package/lib/printer/visitors/call-expression/clauses/as/as.js +11 -2
  15. package/lib/printer/visitors/call-expression/clauses/clauses.js +6 -2
  16. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-fix.sql +2 -0
  17. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one-fix.js +3 -0
  18. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one.js +1 -0
  19. package/lib/printer/visitors/call-expression/clauses/count/fixture/count.js +1 -0
  20. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTable.js +5 -0
  21. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableSerial.js +5 -0
  22. package/lib/printer/visitors/call-expression/clauses/delete/delete.js +1 -1
  23. package/lib/printer/visitors/call-expression/clauses/delete/fixture/delete.js +3 -0
  24. package/lib/printer/visitors/call-expression/clauses/from/fixture/from-fix.js +3 -0
  25. package/lib/printer/visitors/call-expression/clauses/from/fixture/from.js +1 -0
  26. package/lib/printer/visitors/call-expression/clauses/from/from.js +4 -0
  27. package/lib/printer/visitors/call-expression/clauses/insert/fixture/insert.js +3 -0
  28. package/lib/printer/visitors/call-expression/clauses/into/fixture/into-fix.js +3 -0
  29. package/lib/printer/visitors/call-expression/clauses/into/fixture/into.js +1 -0
  30. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.js +3 -0
  31. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.sql +1 -0
  32. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column.js +3 -0
  33. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-fix.sql +4 -0
  34. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi-fix.sql +4 -0
  35. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi.js +1 -0
  36. package/lib/printer/visitors/call-expression/clauses/join/fixture/join.js +1 -0
  37. package/lib/printer/visitors/call-expression/clauses/join/join.js +8 -0
  38. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/lastInsertRowid.js +3 -0
  39. package/lib/printer/visitors/call-expression/clauses/lastval/fixture/lastval.js +3 -0
  40. package/lib/printer/visitors/call-expression/clauses/on/on.js +4 -0
  41. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict-multi.js +3 -0
  42. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict.js +3 -0
  43. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-conflict.js +3 -0
  44. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-id.js +7 -0
  45. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-multi.js +3 -0
  46. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning.js +7 -0
  47. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-multi.js +6 -0
  48. package/lib/printer/visitors/call-expression/clauses/section/fixture/section.js +3 -0
  49. package/lib/printer/visitors/call-expression/clauses/select/fixture/select.js +3 -0
  50. package/lib/printer/visitors/call-expression/clauses/select/fixture/string.js +3 -0
  51. package/lib/printer/visitors/call-expression/clauses/update/fixture/update.js +3 -0
  52. package/lib/printer/visitors/call-expression/clauses/where/fixture/where.js +3 -0
  53. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed.js +11 -0
  54. package/lib/printer/visitors/index.js +2 -0
  55. package/lib/printer/visitors/member-expression.js +5 -0
  56. package/package.json +13 -13
  57. /package/lib/printer/visitors/call-expression/clauses/count/fixture/{count.sql → count-fix.js} +0 -0
  58. /package/lib/printer/visitors/call-expression/clauses/count/fixture/{count-one.sql → count-one-fix.sql} +0 -0
  59. /package/lib/printer/visitors/call-expression/clauses/create-table/fixture/{createTable.sql → createTable-fix.sql} +0 -0
  60. /package/lib/printer/visitors/call-expression/clauses/create-table/fixture/{createTableSerial.sql → createTableSerial-fix.sql} +0 -0
  61. /package/lib/printer/visitors/call-expression/clauses/delete/fixture/{delete.sql → delete-fix.sql} +0 -0
  62. /package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/{lastInsertRowid.sql → lastInsertRowid-fix.sql} +0 -0
  63. /package/lib/printer/visitors/call-expression/clauses/lastval/fixture/{lastval.sql → lastval-fix.sql} +0 -0
  64. /package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/{on-conflict.sql → on-conflict-fix.sql} +0 -0
  65. /package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/{on-conflict-multi.sql → on-conflict-multi-fix.sql} +0 -0
  66. /package/lib/printer/visitors/call-expression/clauses/select/fixture/{select.sql → select-fix.sql} +0 -0
  67. /package/lib/printer/visitors/call-expression/clauses/select/fixture/{string.sql → string-fix.sql} +0 -0
package/ChangeLog CHANGED
@@ -1,3 +1,16 @@
1
+ 2026.08.15, v1.5.1
2
+
3
+ feature:
4
+ - 3f71b12 convertOperand: boolean
5
+
6
+ 2026.08.15, v1.5.0
7
+
8
+ fix:
9
+ - b8aff13 printer: test
10
+
11
+ feature:
12
+ - 465fc93 join: add support
13
+
1
14
  2026.08.14, v1.4.0
2
15
 
3
16
  feature:
@@ -15,5 +15,5 @@ export const convertDelete = ({clauses}) => {
15
15
  whereClause && convertWhere(whereClause),
16
16
  ].filter(Boolean);
17
17
 
18
- return callExpression(identifier('delete'), args);
18
+ return callExpression(identifier('deleteFrom'), args);
19
19
  };
@@ -1,3 +1,3 @@
1
1
  [
2
- delete(from(t), where(id === ':id')),
2
+ deleteFrom(from(t), where(id === ':id')),
3
3
  ];
@@ -0,0 +1,6 @@
1
+ [
2
+ select(bin.id, from(as(
3
+ BinaryExpression,
4
+ bin,
5
+ ), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id && nan_id.name === 'NaN')))),
6
+ ];
@@ -0,0 +1,6 @@
1
+ [
2
+ select(bin.id, arg_id.name, from(as(
3
+ BinaryExpression,
4
+ bin,
5
+ ), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id)), join(as(Identifier, arg_id), on(arg_id.parent_id === bin.id)))),
6
+ ];
@@ -0,0 +1 @@
1
+ SELECT bin.id, arg_id.name FROM BinaryExpression bin JOIN Identifier nan_id ON nan_id.parent_id = bin.id JOIN Identifier arg_id ON arg_id.parent_id = bin.id
@@ -0,0 +1 @@
1
+ SELECT bin.id FROM BinaryExpression bin JOIN Identifier nan_id ON nan_id.parent_id = bin.id AND nan_id.name = 'NaN'
@@ -1,7 +1,91 @@
1
1
  import {types} from '@putout/babel';
2
2
 
3
- const {identifier, callExpression} = types;
3
+ const {
4
+ identifier,
5
+ callExpression,
6
+ memberExpression,
7
+ binaryExpression,
8
+ logicalExpression,
9
+ stringLiteral,
10
+ numericLiteral,
11
+ booleanLiteral,
12
+ nullLiteral,
13
+ } = types;
4
14
 
5
- export const convertFrom = (node) => callExpression(identifier('from'), [
6
- identifier(node.expr.name),
15
+ const convertOperand = (node) => {
16
+ if (node.type === 'member_expr')
17
+ return memberExpression(identifier(node.object.name), identifier(node.property.name));
18
+
19
+ if (node.type === 'parameter')
20
+ return stringLiteral(node.text);
21
+
22
+ if (node.type === 'number_literal')
23
+ return numericLiteral(node.value);
24
+
25
+ if (node.type === 'string_literal')
26
+ return stringLiteral(node.value);
27
+
28
+ if (node.type === 'boolean_literal')
29
+ return booleanLiteral(node.value);
30
+
31
+ if (node.type === 'null_literal')
32
+ return nullLiteral(node.value);
33
+
34
+ return identifier(node.name);
35
+ };
36
+
37
+ const convertCondition = (node) => {
38
+ if (node.operator?.name === 'AND')
39
+ return logicalExpression('&&', convertCondition(node.left), convertCondition(node.right));
40
+
41
+ if (node.operator?.name === 'OR')
42
+ return logicalExpression('||', convertCondition(node.left), convertCondition(node.right));
43
+
44
+ return binaryExpression('===', convertOperand(node.left), convertOperand(node.right));
45
+ };
46
+
47
+ const convertOn = (spec) => callExpression(identifier('on'), [
48
+ convertCondition(spec.expr),
7
49
  ]);
50
+
51
+ const convertAlias = (node) => {
52
+ if (node.type === 'alias')
53
+ return callExpression(identifier('as'), [
54
+ identifier(node.expr.name),
55
+ identifier(node.alias.name),
56
+ ]);
57
+
58
+ return identifier(node.name);
59
+ };
60
+
61
+ const flattenJoins = (node, joins = []) => {
62
+ if (node.type === 'join_expr') {
63
+ flattenJoins(node.left, joins);
64
+ joins.push(callExpression(identifier('join'), [
65
+ convertAlias(node.right),
66
+ convertOn(node.specification),
67
+ ]));
68
+
69
+ return joins;
70
+ }
71
+
72
+ joins.unshift(convertAlias(node));
73
+
74
+ return joins;
75
+ };
76
+
77
+ export const convertFrom = ({expr}) => {
78
+ if (expr.type === 'join_expr') {
79
+ const parts = flattenJoins(expr);
80
+ return callExpression(identifier('from'), parts);
81
+ }
82
+
83
+ if (expr.type === 'alias')
84
+ return callExpression(identifier('from'), [
85
+ convertAlias(expr),
86
+ ]);
87
+
88
+ return callExpression(identifier('from'), [
89
+ identifier(expr.name),
90
+ ]);
91
+ };
@@ -1,4 +1,5 @@
1
1
  import {types} from '@putout/babel';
2
+ import {convertOperand} from '#parser/clause/operand';
2
3
  import {convertSet} from '#parser/clause/set';
3
4
  import {convertSelect} from '#parser/clause/select';
4
5
  import {findClause} from '#parser/clause/find';
@@ -38,10 +39,7 @@ const convertSource = (vc) => {
38
39
  return convertSelect(vc);
39
40
 
40
41
  const vals = vc.values.items[0].expr.items;
41
- const valArgs = [];
42
-
43
- for (const p of vals)
44
- valArgs.push(stringLiteral(p.text));
42
+ const valArgs = vals.map(convertOperand);
45
43
 
46
44
  return callExpression(identifier('values'), valArgs);
47
45
  };
@@ -4,9 +4,15 @@ const {
4
4
  identifier,
5
5
  stringLiteral,
6
6
  numericLiteral,
7
+ booleanLiteral,
8
+ nullLiteral,
9
+ memberExpression,
7
10
  } = types;
8
11
 
9
12
  export const convertOperand = (node) => {
13
+ if (node.type === 'member_expr')
14
+ return memberExpression(identifier(node.object.name), identifier(node.property.name));
15
+
10
16
  if (node.type === 'parameter')
11
17
  return stringLiteral(node.text);
12
18
 
@@ -16,5 +22,11 @@ export const convertOperand = (node) => {
16
22
  if (node.type === 'string_literal')
17
23
  return stringLiteral(node.value);
18
24
 
25
+ if (node.type === 'boolean_literal')
26
+ return booleanLiteral(node.value);
27
+
28
+ if (node.type === 'null_literal')
29
+ return nullLiteral(node.value);
30
+
19
31
  return identifier(node.name);
20
32
  };
@@ -10,6 +10,7 @@ const {
10
10
  stringLiteral,
11
11
  assignmentExpression,
12
12
  callExpression,
13
+ memberExpression,
13
14
  } = types;
14
15
 
15
16
  const convertColumn = (column) => {
@@ -25,6 +26,9 @@ const convertColumn = (column) => {
25
26
  if (column.type === 'string_literal')
26
27
  return stringLiteral(column.value);
27
28
 
29
+ if (column.type === 'member_expr')
30
+ return memberExpression(identifier(column.object.name), identifier(column.property.name));
31
+
28
32
  return identifier(column.name);
29
33
  };
30
34
 
@@ -1,30 +1,19 @@
1
1
  import {types} from '@putout/babel';
2
+ import {convertOperand} from '#parser/clause/operand';
2
3
 
3
4
  const {
4
- binaryExpression,
5
5
  logicalExpression,
6
6
  identifier,
7
- stringLiteral,
8
- numericLiteral,
9
7
  callExpression,
10
8
  } = types;
11
9
 
12
- const convertOperand = (node) => {
13
- if (node.type === 'parameter')
14
- return stringLiteral(node.text);
15
-
16
- if (node.type === 'number_literal')
17
- return numericLiteral(node.value);
18
-
19
- if (node.type === 'string_literal')
20
- return stringLiteral(node.value);
21
-
22
- return identifier(node.name);
23
- };
24
-
25
10
  const convertAnd = (node) => logicalExpression('&&', convertCondition(node.left), convertCondition(node.right));
26
11
  const convertOr = (node) => logicalExpression('||', convertCondition(node.left), convertCondition(node.right));
27
- const convertEq = (node) => binaryExpression('===', convertOperand(node.left), convertOperand(node.right));
12
+
13
+ const convertEq = (node) => {
14
+ const {binaryExpression} = types;
15
+ return binaryExpression('===', convertOperand(node.left), convertOperand(node.right));
16
+ };
28
17
 
29
18
  const convertCondition = (node) => {
30
19
  if (node.operator?.name === 'AND')
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users)),
3
+ ];
@@ -1,6 +1,15 @@
1
1
  export const as = (path, {write, traverse}) => {
2
2
  const [column, alias] = path.get('arguments');
3
+
3
4
  traverse(column);
4
- write(' AS ');
5
- write(alias.node.value);
5
+
6
+ if (alias.node.type === 'StringLiteral') {
7
+ write(' AS ');
8
+ write(alias.node.value);
9
+
10
+ return;
11
+ }
12
+
13
+ write(' ');
14
+ traverse(alias);
6
15
  };
@@ -1,3 +1,5 @@
1
+ import {join} from './join/join.js';
2
+ import {on} from './on/on.js';
1
3
  import {select} from './select/select.js';
2
4
  import {from} from './from/from.js';
3
5
  import {where} from './where/where.js';
@@ -7,7 +9,7 @@ import {values} from './values/values.js';
7
9
  import {onConflict} from './on-conflict/on-conflict.js';
8
10
  import {update} from './update/update.js';
9
11
  import {set} from './set/set.js';
10
- import {del} from './delete/delete.js';
12
+ import {deleteFrom} from './delete/delete.js';
11
13
  import {section} from './section/section.js';
12
14
  import {count} from './count/count.js';
13
15
  import {returning} from './returning/returning.js';
@@ -22,6 +24,8 @@ import {lastInsertRowid} from './last-insert-rowid/last-insert-rowid.js';
22
24
  import {lastval} from './lastval/lastval.js';
23
25
 
24
26
  export const clauses = {
27
+ join,
28
+ on,
25
29
  count,
26
30
  from,
27
31
  select,
@@ -32,7 +36,7 @@ export const clauses = {
32
36
  onConflict,
33
37
  update,
34
38
  set,
35
- delete: del,
39
+ deleteFrom,
36
40
  section,
37
41
  returning,
38
42
  as,
@@ -0,0 +1,2 @@
1
+ SELECT COUNT(*)
2
+ FROM users
@@ -0,0 +1,3 @@
1
+ [
2
+ select(count(1), from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ select(count(1), from(users));
@@ -0,0 +1 @@
1
+ select(count('*'), from(users));
@@ -0,0 +1,5 @@
1
+ [
2
+ createTable(t, [
3
+ column(id, INTEGER, primaryKey(), autoIncrement()),
4
+ ]),
5
+ ];
@@ -0,0 +1,5 @@
1
+ [
2
+ createTable(t, [
3
+ column(id, serial(), primaryKey()),
4
+ ]),
5
+ ];
@@ -1,4 +1,4 @@
1
- export const del = (path, {write, traverse}) => {
1
+ export const deleteFrom = (path, {write, traverse}) => {
2
2
  const args = path.get('arguments');
3
3
  const [fromArg] = args;
4
4
  const [, whereArg] = args;
@@ -0,0 +1,3 @@
1
+ [
2
+ deleteFrom(from(t), where(id === ':id')),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ select('*', from(users));
@@ -1,5 +1,9 @@
1
1
  export const from = (path, {write, traverse}) => {
2
2
  const args = path.get('arguments');
3
+
3
4
  write('FROM ');
4
5
  traverse(args[0]);
6
+
7
+ for (let i = 1; i < args.length; i++)
8
+ traverse(args[i]);
5
9
  };
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -0,0 +1 @@
1
+ insert(into(t, x), values(':x'));
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -0,0 +1 @@
1
+ INSERT INTO t (x) VALUES (:x)
@@ -0,0 +1,3 @@
1
+ [
2
+ into(t, x, values(':x')),
3
+ ];
@@ -0,0 +1,4 @@
1
+ SELECT bin.id
2
+ FROM BinaryExpression bin
3
+ JOIN Identifier nan_id ON nan_id.parent_id = bin.id
4
+ AND nan_id.name = 'NaN'
@@ -0,0 +1,4 @@
1
+ SELECT bin.id, arg_id.name
2
+ FROM BinaryExpression bin
3
+ JOIN Identifier nan_id ON nan_id.parent_id = bin.id
4
+ JOIN Identifier arg_id ON arg_id.parent_id = bin.id
@@ -0,0 +1 @@
1
+ [select(bin.id, arg_id.name, from(as(BinaryExpression, bin), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id)), join(as(Identifier, arg_id), on(arg_id.parent_id === bin.id))))];
@@ -0,0 +1 @@
1
+ [select(bin.id, from(as(BinaryExpression, bin), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id && nan_id.name === 'NaN'))))];
@@ -0,0 +1,8 @@
1
+ export const join = (path, {write, traverse}) => {
2
+ const [table, onClause] = path.get('arguments');
3
+
4
+ write('\nJOIN ');
5
+ traverse(table);
6
+ write(' ');
7
+ traverse(onClause);
8
+ };
@@ -0,0 +1,3 @@
1
+ [
2
+ select(lastInsertRowid(), from(users)),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select(lastval(), from(users)),
3
+ ];
@@ -0,0 +1,4 @@
1
+ export const on = (path, {write, traverse}) => {
2
+ write('ON ');
3
+ traverse(path.get('arguments.0'));
4
+ };
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, y, set(x === ':x'))),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, set(x === ':x'))),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, set(y === ':y')), returning(id)),
3
+ ];
@@ -0,0 +1,7 @@
1
+ [
2
+ insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(id)),
7
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), returning(id, created_at)),
3
+ ];
@@ -0,0 +1,7 @@
1
+ [
2
+ insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(as(id, 'call_id'))),
7
+ ];
@@ -0,0 +1,6 @@
1
+ [
2
+ section('@fix', [
3
+ update(Identifier, set(name === 'isNaN'), where(id === ':nan_id')),
4
+ update(BinaryExpression, set(operator === '==='), where(id === ':id')),
5
+ ]),
6
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ section('@select', select('*', from(users))),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users)),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ update(t, set(x === ':x'), where(id === ':id')),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users), where(id === ':id')),
3
+ ];
@@ -0,0 +1,11 @@
1
+ [
2
+ withNamed(call = insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(id)), member = insert(into(
7
+ MemberExpression,
8
+ parent_id,
9
+ select(id, from(call)),
10
+ ), returning(id)), insert(into(Identifier, [name, parent_id], select('x', id, from(member))))),
11
+ ];
@@ -5,6 +5,7 @@ import {ArrayExpression} from './array-expression.js';
5
5
  import {BinaryExpression} from './binary-expression.js';
6
6
  import {LogicalExpression} from './logical-expression.js';
7
7
  import {AssignmentExpression} from './assignment-expression.js';
8
+ import {MemberExpression} from './member-expression.js';
8
9
 
9
10
  export const visitors = {
10
11
  ArrayExpression,
@@ -14,4 +15,5 @@ export const visitors = {
14
15
  BinaryExpression,
15
16
  LogicalExpression,
16
17
  AssignmentExpression,
18
+ MemberExpression,
17
19
  };
@@ -0,0 +1,5 @@
1
+ export const MemberExpression = (path, {write, traverse}) => {
2
+ traverse(path.get('object'));
3
+ write('.');
4
+ traverse(path.get('property'));
5
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-sql",
3
- "version": "1.4.0",
3
+ "version": "1.5.1",
4
4
  "type": "module",
5
5
  "description": "sql to js ast parser and printer",
6
6
  "exports": {
@@ -64,24 +64,24 @@
64
64
  },
65
65
  "homepage": "https://github.com/coderaiser/happy-sql",
66
66
  "devDependencies": {
67
- "@putout/plugin-printer": "^8.17.0",
68
- "@putout/test": "^15.4.0",
69
- "eslint": "^10.0.3",
70
- "eslint-plugin-node": "^11.0.0",
71
- "eslint-plugin-putout": "^31.1.1",
67
+ "@putout/plugin-printer": "^8.22.0",
68
+ "@putout/test": "^15.8.2",
69
+ "eslint": "^10.8.1",
70
+ "eslint-plugin-node": "^11.1.0",
71
+ "eslint-plugin-putout": "^31.4.2",
72
72
  "just-kebab-case": "^4.2.0",
73
- "madrun": "^13.0.1",
73
+ "madrun": "^13.0.4",
74
74
  "montag": "^2.0.1",
75
- "nodemon": "^3.1.11",
76
- "putout": "^42.2.3",
75
+ "nodemon": "^3.1.14",
76
+ "putout": "^42.11.0",
77
77
  "redlint": "^6.9.2",
78
78
  "superc8": "^12.7.0",
79
- "supertape": "^13.2.0"
79
+ "supertape": "^13.5.1"
80
80
  },
81
81
  "dependencies": {
82
- "@putout/babel": "^5.7.3",
83
- "@putout/operator-json": "^3.4.0",
84
- "@putout/printer": "^18.17.0",
82
+ "@putout/babel": "^5.9.9",
83
+ "@putout/operator-json": "^3.5.0",
84
+ "@putout/printer": "^18.38.1",
85
85
  "just-camel-case": "^6.2.0",
86
86
  "redstd": "^1.0.2",
87
87
  "sql-parser-cst": "^0.42.1",