metal-orm 1.1.11 → 1.1.16

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 (182) hide show
  1. package/README.md +758 -769
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/package.json +100 -96
  5. package/scripts/generate-entities/schema.mjs +122 -122
  6. package/scripts/generate-entities/tree-detection.mjs +92 -92
  7. package/scripts/inflection/pt-br.mjs +468 -468
  8. package/scripts/run-eslint.mjs +33 -34
  9. package/scripts/show-sql-seed.sql +102 -0
  10. package/scripts/show-sql.mjs +321 -325
  11. package/src/codegen/naming-strategy.ts +54 -54
  12. package/src/codegen/typescript.ts +482 -482
  13. package/src/core/ast/adapters.ts +1 -1
  14. package/src/core/ast/builders.ts +123 -123
  15. package/src/core/ast/expression-builders.ts +745 -745
  16. package/src/core/ast/expression-nodes.ts +304 -304
  17. package/src/core/ast/expression-visitor.ts +212 -212
  18. package/src/core/ast/expression.ts +20 -20
  19. package/src/core/ast/helpers.ts +14 -14
  20. package/src/core/ast/join.ts +18 -18
  21. package/src/core/ast/query.ts +200 -200
  22. package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
  23. package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
  24. package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
  25. package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
  26. package/src/core/ddl/dialects/render-reference.test.ts +70 -70
  27. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
  28. package/src/core/ddl/introspect/catalogs/index.ts +5 -5
  29. package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
  30. package/src/core/ddl/introspect/context.ts +15 -15
  31. package/src/core/ddl/introspect/functions/postgres.ts +35 -35
  32. package/src/core/ddl/introspect/registry.ts +40 -40
  33. package/src/core/ddl/introspect/run-select.ts +35 -35
  34. package/src/core/ddl/introspect/utils.ts +56 -56
  35. package/src/core/ddl/naming-strategy.ts +16 -16
  36. package/src/core/ddl/schema-dialect.ts +56 -56
  37. package/src/core/ddl/schema-diff.ts +234 -234
  38. package/src/core/ddl/schema-generator.ts +1 -1
  39. package/src/core/ddl/schema-introspect.ts +25 -25
  40. package/src/core/ddl/sql-writing.ts +171 -171
  41. package/src/core/dialect/abstract.ts +541 -541
  42. package/src/core/dialect/base/cte-compiler.ts +33 -33
  43. package/src/core/dialect/base/function-table-formatter.ts +103 -103
  44. package/src/core/dialect/base/groupby-compiler.ts +21 -21
  45. package/src/core/dialect/base/join-compiler.ts +25 -25
  46. package/src/core/dialect/base/orderby-compiler.ts +35 -35
  47. package/src/core/dialect/base/pagination-strategy.ts +32 -32
  48. package/src/core/dialect/base/returning-strategy.ts +57 -57
  49. package/src/core/dialect/base/sql-dialect.ts +294 -294
  50. package/src/core/dialect/dialect-factory.ts +91 -91
  51. package/src/core/dialect/mssql/functions.ts +120 -120
  52. package/src/core/dialect/mssql/index.ts +317 -317
  53. package/src/core/dialect/mysql/functions.ts +103 -103
  54. package/src/core/dialect/mysql/index.ts +105 -105
  55. package/src/core/dialect/postgres/functions.ts +108 -108
  56. package/src/core/dialect/postgres/index.ts +91 -91
  57. package/src/core/dialect/sqlite/functions.ts +129 -129
  58. package/src/core/dialect/sqlite/index.ts +67 -67
  59. package/src/core/driver/database-driver.ts +19 -19
  60. package/src/core/driver/mssql-driver.ts +23 -23
  61. package/src/core/driver/mysql-driver.ts +23 -23
  62. package/src/core/driver/postgres-driver.ts +23 -23
  63. package/src/core/driver/sqlite-driver.ts +23 -23
  64. package/src/core/execution/db-executor.ts +92 -92
  65. package/src/core/execution/executors/better-sqlite3-executor.ts +90 -90
  66. package/src/core/execution/executors/mssql-executor.ts +184 -184
  67. package/src/core/execution/executors/mysql-executor.ts +88 -88
  68. package/src/core/execution/executors/postgres-executor.ts +26 -26
  69. package/src/core/execution/executors/sqlite-executor.ts +42 -42
  70. package/src/core/execution/pooling/pool-types.ts +30 -30
  71. package/src/core/execution/pooling/pool.ts +275 -275
  72. package/src/core/functions/array.ts +35 -35
  73. package/src/core/functions/control-flow.ts +79 -79
  74. package/src/core/functions/datetime.ts +237 -237
  75. package/src/core/functions/json.ts +70 -70
  76. package/src/core/functions/numeric.ts +297 -297
  77. package/src/core/functions/text.ts +334 -334
  78. package/src/core/functions/types.ts +33 -33
  79. package/src/core/hydration/types.ts +51 -51
  80. package/src/core/sql/sql-operator-config.ts +39 -39
  81. package/src/core/sql/sql.ts +152 -152
  82. package/src/decorators/column-decorator.ts +87 -87
  83. package/src/decorators/decorator-metadata.ts +143 -143
  84. package/src/decorators/entity.ts +93 -93
  85. package/src/decorators/index.ts +39 -39
  86. package/src/decorators/relations.ts +231 -231
  87. package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
  88. package/src/decorators/transformers/transformer-decorators.ts +134 -134
  89. package/src/decorators/transformers/transformer-executor.ts +171 -171
  90. package/src/decorators/transformers/transformer-metadata.ts +73 -73
  91. package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
  92. package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
  93. package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
  94. package/src/decorators/validators/country-validator-registry.ts +64 -64
  95. package/src/decorators/validators/country-validators-decorators.ts +203 -203
  96. package/src/decorators/validators/country-validators.ts +105 -105
  97. package/src/decorators/validators/validator-metadata.ts +59 -59
  98. package/src/dto/dto-types.ts +226 -226
  99. package/src/dto/filter-types.ts +141 -141
  100. package/src/dto/index.ts +95 -95
  101. package/src/dto/openapi/generators/base.ts +29 -29
  102. package/src/dto/openapi/generators/column.ts +37 -37
  103. package/src/dto/openapi/generators/dto.ts +91 -91
  104. package/src/dto/openapi/generators/filter.ts +75 -75
  105. package/src/dto/openapi/generators/nested-dto.ts +618 -618
  106. package/src/dto/openapi/generators/pagination.ts +111 -111
  107. package/src/dto/openapi/generators/relation-filter.ts +228 -228
  108. package/src/dto/openapi/index.ts +12 -12
  109. package/src/dto/openapi/types.ts +101 -101
  110. package/src/dto/openapi/utilities.ts +95 -95
  111. package/src/dto/pagination-utils.ts +150 -150
  112. package/src/dto/transform.ts +197 -197
  113. package/src/index.ts +86 -86
  114. package/src/orm/als.ts +58 -58
  115. package/src/orm/domain-event-bus.ts +119 -119
  116. package/src/orm/entity-context.ts +86 -86
  117. package/src/orm/entity-materializer.ts +159 -159
  118. package/src/orm/entity-meta.ts +97 -97
  119. package/src/orm/entity-registry.ts +39 -39
  120. package/src/orm/entity-relation-cache.ts +39 -39
  121. package/src/orm/execute.ts +194 -194
  122. package/src/orm/execution-context.ts +18 -18
  123. package/src/orm/hydration-context.ts +26 -26
  124. package/src/orm/hydration.ts +112 -112
  125. package/src/orm/identity-map.ts +61 -61
  126. package/src/orm/interceptor-pipeline.ts +16 -16
  127. package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
  128. package/src/orm/lazy-batch/belongs-to.ts +108 -108
  129. package/src/orm/lazy-batch/has-many.ts +69 -69
  130. package/src/orm/lazy-batch/has-one.ts +68 -68
  131. package/src/orm/lazy-batch/shared.ts +125 -125
  132. package/src/orm/orm-session.ts +620 -620
  133. package/src/orm/orm.ts +34 -34
  134. package/src/orm/pooled-executor-factory.ts +121 -121
  135. package/src/orm/query-logger.ts +40 -40
  136. package/src/orm/relation-change-processor.ts +420 -420
  137. package/src/orm/relations/belongs-to.ts +143 -143
  138. package/src/orm/relations/has-many.ts +204 -204
  139. package/src/orm/relations/has-one.ts +174 -174
  140. package/src/orm/relations/many-to-many.ts +288 -288
  141. package/src/orm/relations/morph-many.ts +156 -156
  142. package/src/orm/relations/morph-one.ts +151 -151
  143. package/src/orm/relations/morph-to.ts +162 -162
  144. package/src/orm/runtime-types.ts +92 -92
  145. package/src/orm/save-graph.ts +561 -561
  146. package/src/orm/transaction-runner.ts +24 -24
  147. package/src/orm/unit-of-work.ts +426 -426
  148. package/src/query/index.ts +69 -69
  149. package/src/query/target.ts +46 -46
  150. package/src/query-builder/column-selector.ts +81 -81
  151. package/src/query-builder/delete.ts +141 -141
  152. package/src/query-builder/insert-query-state.ts +149 -149
  153. package/src/query-builder/insert.ts +117 -117
  154. package/src/query-builder/query-ast-service.ts +287 -287
  155. package/src/query-builder/query-resolution.ts +78 -78
  156. package/src/query-builder/raw-column-parser.ts +38 -38
  157. package/src/query-builder/relation-filter-utils.ts +153 -153
  158. package/src/query-builder/relation-join-planner.ts +10 -10
  159. package/src/query-builder/relation-manager.ts +87 -87
  160. package/src/query-builder/relation-projection-helper.ts +102 -102
  161. package/src/query-builder/relation-types.ts +9 -9
  162. package/src/query-builder/relation-utils.ts +15 -15
  163. package/src/query-builder/select/cte-facet.ts +40 -40
  164. package/src/query-builder/select/from-facet.ts +80 -80
  165. package/src/query-builder/select/join-facet.ts +62 -62
  166. package/src/query-builder/select/predicate-facet.ts +104 -104
  167. package/src/query-builder/select/projection-facet.ts +70 -70
  168. package/src/query-builder/select/relation-facet.ts +81 -81
  169. package/src/query-builder/select/setop-facet.ts +36 -36
  170. package/src/query-builder/select-helpers.ts +1 -1
  171. package/src/query-builder/select-query-builder-deps.ts +130 -130
  172. package/src/query-builder/select-query-state.ts +207 -207
  173. package/src/query-builder/update.ts +151 -151
  174. package/src/schema/column-types.ts +322 -322
  175. package/src/schema/table-guards.ts +37 -37
  176. package/src/schema/table.ts +281 -281
  177. package/src/tree/index.ts +13 -13
  178. package/src/tree/nested-set-strategy.ts +545 -545
  179. package/src/tree/tree-decorator.ts +397 -397
  180. package/src/tree/tree-manager.ts +754 -754
  181. package/src/tree/tree-query.ts +427 -427
  182. package/src/tree/tree-types.ts +299 -299
@@ -1,158 +1,158 @@
1
- import { TableDef } from '../schema/table.js';
2
- import { ColumnDef } from '../schema/column-types.js';
3
- import { ColumnNode, ExpressionNode } from '../core/ast/expression.js';
4
- import { JOIN_KINDS, JoinKind } from '../core/sql/sql.js';
5
- import { CompiledQuery, Dialect } from '../core/dialect/abstract.js';
6
- import { DialectKey, resolveDialectInput } from '../core/dialect/dialect-factory.js';
7
- import { TableSourceNode, UpdateQueryNode } from '../core/ast/query.js';
8
- import { UpdateQueryState } from './update-query-state.js';
9
- import { createJoinNode } from '../core/ast/join-node.js';
10
- import { buildColumnNode } from '../core/ast/builders.js';
11
- import { OrmSession } from '../orm/orm-session.js';
1
+ import { TableDef } from '../schema/table.js';
2
+ import { ColumnDef } from '../schema/column-types.js';
3
+ import { ColumnNode, ExpressionNode } from '../core/ast/expression.js';
4
+ import { JOIN_KINDS, JoinKind } from '../core/sql/sql.js';
5
+ import { CompiledQuery, Dialect } from '../core/dialect/abstract.js';
6
+ import { DialectKey, resolveDialectInput } from '../core/dialect/dialect-factory.js';
7
+ import { TableSourceNode, UpdateQueryNode } from '../core/ast/query.js';
8
+ import { UpdateQueryState } from './update-query-state.js';
9
+ import { createJoinNode } from '../core/ast/join-node.js';
10
+ import { buildColumnNode } from '../core/ast/builders.js';
11
+ import { OrmSession } from '../orm/orm-session.js';
12
12
  import { payloadResultSets, QueryResult } from '../core/execution/db-executor.js';
13
-
14
- type UpdateDialectInput = Dialect | DialectKey;
15
-
16
- /**
17
- * Builder for UPDATE queries
18
- */
19
- export class UpdateQueryBuilder<T> {
20
- private readonly table: TableDef;
21
- private readonly state: UpdateQueryState;
22
-
23
- /**
24
- * Creates a new UpdateQueryBuilder instance
25
- * @param table - The table definition for the UPDATE query
26
- * @param state - Optional initial query state, defaults to a new UpdateQueryState
27
- */
28
- constructor(table: TableDef, state?: UpdateQueryState) {
29
- this.table = table;
30
- this.state = state ?? new UpdateQueryState(table);
31
- }
32
-
33
- private clone(state: UpdateQueryState): UpdateQueryBuilder<T> {
34
- return new UpdateQueryBuilder(this.table, state);
35
- }
36
-
37
- /**
38
- * Sets an alias for the table in the UPDATE query
39
- * @param alias - The alias to assign to the table
40
- * @returns A new UpdateQueryBuilder with the table alias set
41
- */
42
- as(alias: string): UpdateQueryBuilder<T> {
43
- return this.clone(this.state.withTableAlias(alias));
44
- }
45
-
46
- /**
47
- * Adds a FROM clause to the UPDATE query
48
- * @param source - The table source to use in the FROM clause
49
- * @returns A new UpdateQueryBuilder with the FROM clause added
50
- */
51
- from(source: TableDef | TableSourceNode): UpdateQueryBuilder<T> {
52
- const tableSource = this.resolveTableSource(source);
53
- return this.clone(this.state.withFrom(tableSource));
54
- }
55
-
56
- /**
57
- * Adds a JOIN clause to the UPDATE query
58
- * @param table - The table to join with
59
- * @param condition - The join condition expression
60
- * @param kind - The type of join (defaults to INNER)
61
- * @param relationName - Optional name for the relation
62
- * @returns A new UpdateQueryBuilder with the JOIN clause added
63
- */
64
- join(
65
- table: TableDef | TableSourceNode | string,
66
- condition: ExpressionNode,
67
- kind: JoinKind = JOIN_KINDS.INNER,
68
- relationName?: string
69
- ): UpdateQueryBuilder<T> {
70
- const joinTarget = this.resolveJoinTarget(table);
71
- const joinNode = createJoinNode(kind, joinTarget, condition, relationName);
72
- return this.clone(this.state.withJoin(joinNode));
73
- }
74
-
75
- /**
76
- * Adds a SET clause to the UPDATE query
77
- * @param values - The column-value pairs to update
78
- * @returns A new UpdateQueryBuilder with the SET clause added
79
- */
80
- set(values: Record<string, unknown>): UpdateQueryBuilder<T> {
81
- return this.clone(this.state.withSet(values));
82
- }
83
-
84
- /**
85
- * Adds a WHERE clause to the UPDATE query
86
- * @param expr - The expression to use as the WHERE condition
87
- * @returns A new UpdateQueryBuilder with the WHERE clause added
88
- */
89
- where(expr: ExpressionNode): UpdateQueryBuilder<T> {
90
- return this.clone(this.state.withWhere(expr));
91
- }
92
-
93
- /**
94
- * Adds a RETURNING clause to the UPDATE query
95
- * @param columns - Columns to return after update
96
- * @returns A new UpdateQueryBuilder with the RETURNING clause added
97
- */
98
- returning(...columns: (ColumnDef | ColumnNode)[]): UpdateQueryBuilder<T> {
99
- if (!columns.length) return this;
100
- const nodes = columns.map(column => buildColumnNode(this.table, column));
101
- return this.clone(this.state.withReturning(nodes));
102
- }
103
-
104
- private resolveTableSource(source: TableDef | TableSourceNode): TableSourceNode {
105
- if (isTableSourceNode(source)) {
106
- return source;
107
- }
108
- return { type: 'Table', name: source.name, schema: source.schema };
109
- }
110
-
111
- private resolveJoinTarget(table: TableDef | TableSourceNode | string): TableSourceNode | string {
112
- if (typeof table === 'string') return table;
113
- return this.resolveTableSource(table);
114
- }
115
-
116
- /**
117
- * Compiles the UPDATE query for the specified dialect
118
- * @param dialect - The SQL dialect to compile for
119
- * @returns The compiled query with SQL and parameters
120
- */
121
- compile(dialect: UpdateDialectInput): CompiledQuery {
122
- const resolved = resolveDialectInput(dialect);
123
- return resolved.compileUpdate(this.state.ast);
124
- }
125
-
126
- /**
127
- * Returns the SQL string for the UPDATE query
128
- * @param dialect - The SQL dialect to generate SQL for
129
- * @returns The SQL string representation of the query
130
- */
131
- toSql(dialect: UpdateDialectInput): string {
132
- return this.compile(dialect).sql;
133
- }
134
-
135
- /**
136
- * Executes the UPDATE query using the provided session
137
- * @param session - The ORM session to execute the query with
138
- * @returns A promise that resolves to the query results
139
- */
13
+
14
+ type UpdateDialectInput = Dialect | DialectKey;
15
+
16
+ /**
17
+ * Builder for UPDATE queries
18
+ */
19
+ export class UpdateQueryBuilder<T> {
20
+ private readonly table: TableDef;
21
+ private readonly state: UpdateQueryState;
22
+
23
+ /**
24
+ * Creates a new UpdateQueryBuilder instance
25
+ * @param table - The table definition for the UPDATE query
26
+ * @param state - Optional initial query state, defaults to a new UpdateQueryState
27
+ */
28
+ constructor(table: TableDef, state?: UpdateQueryState) {
29
+ this.table = table;
30
+ this.state = state ?? new UpdateQueryState(table);
31
+ }
32
+
33
+ private clone(state: UpdateQueryState): UpdateQueryBuilder<T> {
34
+ return new UpdateQueryBuilder(this.table, state);
35
+ }
36
+
37
+ /**
38
+ * Sets an alias for the table in the UPDATE query
39
+ * @param alias - The alias to assign to the table
40
+ * @returns A new UpdateQueryBuilder with the table alias set
41
+ */
42
+ as(alias: string): UpdateQueryBuilder<T> {
43
+ return this.clone(this.state.withTableAlias(alias));
44
+ }
45
+
46
+ /**
47
+ * Adds a FROM clause to the UPDATE query
48
+ * @param source - The table source to use in the FROM clause
49
+ * @returns A new UpdateQueryBuilder with the FROM clause added
50
+ */
51
+ from(source: TableDef | TableSourceNode): UpdateQueryBuilder<T> {
52
+ const tableSource = this.resolveTableSource(source);
53
+ return this.clone(this.state.withFrom(tableSource));
54
+ }
55
+
56
+ /**
57
+ * Adds a JOIN clause to the UPDATE query
58
+ * @param table - The table to join with
59
+ * @param condition - The join condition expression
60
+ * @param kind - The type of join (defaults to INNER)
61
+ * @param relationName - Optional name for the relation
62
+ * @returns A new UpdateQueryBuilder with the JOIN clause added
63
+ */
64
+ join(
65
+ table: TableDef | TableSourceNode | string,
66
+ condition: ExpressionNode,
67
+ kind: JoinKind = JOIN_KINDS.INNER,
68
+ relationName?: string
69
+ ): UpdateQueryBuilder<T> {
70
+ const joinTarget = this.resolveJoinTarget(table);
71
+ const joinNode = createJoinNode(kind, joinTarget, condition, relationName);
72
+ return this.clone(this.state.withJoin(joinNode));
73
+ }
74
+
75
+ /**
76
+ * Adds a SET clause to the UPDATE query
77
+ * @param values - The column-value pairs to update
78
+ * @returns A new UpdateQueryBuilder with the SET clause added
79
+ */
80
+ set(values: Record<string, unknown>): UpdateQueryBuilder<T> {
81
+ return this.clone(this.state.withSet(values));
82
+ }
83
+
84
+ /**
85
+ * Adds a WHERE clause to the UPDATE query
86
+ * @param expr - The expression to use as the WHERE condition
87
+ * @returns A new UpdateQueryBuilder with the WHERE clause added
88
+ */
89
+ where(expr: ExpressionNode): UpdateQueryBuilder<T> {
90
+ return this.clone(this.state.withWhere(expr));
91
+ }
92
+
93
+ /**
94
+ * Adds a RETURNING clause to the UPDATE query
95
+ * @param columns - Columns to return after update
96
+ * @returns A new UpdateQueryBuilder with the RETURNING clause added
97
+ */
98
+ returning(...columns: (ColumnDef | ColumnNode)[]): UpdateQueryBuilder<T> {
99
+ if (!columns.length) return this;
100
+ const nodes = columns.map(column => buildColumnNode(this.table, column));
101
+ return this.clone(this.state.withReturning(nodes));
102
+ }
103
+
104
+ private resolveTableSource(source: TableDef | TableSourceNode): TableSourceNode {
105
+ if (isTableSourceNode(source)) {
106
+ return source;
107
+ }
108
+ return { type: 'Table', name: source.name, schema: source.schema };
109
+ }
110
+
111
+ private resolveJoinTarget(table: TableDef | TableSourceNode | string): TableSourceNode | string {
112
+ if (typeof table === 'string') return table;
113
+ return this.resolveTableSource(table);
114
+ }
115
+
116
+ /**
117
+ * Compiles the UPDATE query for the specified dialect
118
+ * @param dialect - The SQL dialect to compile for
119
+ * @returns The compiled query with SQL and parameters
120
+ */
121
+ compile(dialect: UpdateDialectInput): CompiledQuery {
122
+ const resolved = resolveDialectInput(dialect);
123
+ return resolved.compileUpdate(this.state.ast);
124
+ }
125
+
126
+ /**
127
+ * Returns the SQL string for the UPDATE query
128
+ * @param dialect - The SQL dialect to generate SQL for
129
+ * @returns The SQL string representation of the query
130
+ */
131
+ toSql(dialect: UpdateDialectInput): string {
132
+ return this.compile(dialect).sql;
133
+ }
134
+
135
+ /**
136
+ * Executes the UPDATE query using the provided session
137
+ * @param session - The ORM session to execute the query with
138
+ * @returns A promise that resolves to the query results
139
+ */
140
140
  async execute(session: OrmSession): Promise<QueryResult[]> {
141
141
  const execCtx = session.getExecutionContext();
142
142
  const compiled = this.compile(execCtx.dialect);
143
143
  const payload = await execCtx.interceptors.run({ sql: compiled.sql, params: compiled.params }, execCtx.executor);
144
144
  return payloadResultSets(payload);
145
145
  }
146
-
147
- /**
148
- * Returns the Abstract Syntax Tree (AST) representation of the query
149
- * @returns The AST node for the UPDATE query
150
- */
151
- getAST(): UpdateQueryNode {
152
- return this.state.ast;
153
- }
154
- }
155
-
156
- const isTableSourceNode = (source: TableDef | TableSourceNode): source is TableSourceNode =>
157
- typeof (source as TableSourceNode).type === 'string';
158
-
146
+
147
+ /**
148
+ * Returns the Abstract Syntax Tree (AST) representation of the query
149
+ * @returns The AST node for the UPDATE query
150
+ */
151
+ getAST(): UpdateQueryNode {
152
+ return this.state.ast;
153
+ }
154
+ }
155
+
156
+ const isTableSourceNode = (source: TableDef | TableSourceNode): source is TableSourceNode =>
157
+ typeof (source as TableSourceNode).type === 'string';
158
+