@ignisia/sql 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cjs/column/constants.d.cts +150 -0
  2. package/dist/cjs/column/constants.js +158 -0
  3. package/dist/cjs/column/index.d.cts +43 -0
  4. package/dist/cjs/column/index.js +127 -0
  5. package/dist/cjs/column/types.d.cts +43 -0
  6. package/dist/cjs/column/types.js +4 -0
  7. package/dist/cjs/column/utils.d.cts +133 -0
  8. package/dist/cjs/column/utils.js +34 -0
  9. package/dist/cjs/database/alter.d.cts +53 -0
  10. package/dist/cjs/database/alter.js +93 -0
  11. package/dist/cjs/database/column.d.cts +25 -0
  12. package/dist/cjs/database/column.js +39 -0
  13. package/dist/cjs/database/contract.d.cts +9 -0
  14. package/dist/cjs/database/contract.js +2 -0
  15. package/dist/cjs/database/index.d.cts +9 -0
  16. package/dist/cjs/database/index.js +107 -0
  17. package/dist/cjs/database/table.d.cts +22 -0
  18. package/dist/cjs/database/table.js +49 -0
  19. package/dist/cjs/database/types.d.cts +8 -0
  20. package/dist/cjs/database/types.js +2 -0
  21. package/dist/cjs/database/wrapper.d.cts +32 -0
  22. package/dist/cjs/database/wrapper.js +87 -0
  23. package/dist/cjs/index-2jl8MRfX.d.cts +105 -0
  24. package/dist/cjs/index-CnQVnCEI.d.cts +392 -0
  25. package/dist/cjs/index.d.cts +11 -0
  26. package/dist/cjs/index.js +30 -0
  27. package/dist/cjs/migration/index.d.cts +31 -0
  28. package/dist/{migration → cjs/migration}/index.js +3 -1
  29. package/dist/cjs/migration/runner.js +58 -0
  30. package/dist/cjs/migration/type.d.cts +20 -0
  31. package/dist/cjs/migration/type.js +2 -0
  32. package/dist/cjs/package.json +3 -0
  33. package/dist/cjs/query/builder.d.cts +15 -0
  34. package/dist/cjs/query/builder.js +71 -0
  35. package/dist/cjs/query/condition.d.cts +8 -0
  36. package/dist/cjs/query/condition.js +109 -0
  37. package/dist/cjs/query/constants.js +64 -0
  38. package/dist/cjs/query/contract.d.cts +8 -0
  39. package/dist/cjs/query/contract.js +2 -0
  40. package/dist/cjs/query/helper.d.cts +8 -0
  41. package/dist/cjs/query/helper.js +36 -0
  42. package/dist/cjs/query/index.d.cts +8 -0
  43. package/dist/cjs/query/index.js +206 -0
  44. package/dist/cjs/query/join.d.cts +17 -0
  45. package/dist/cjs/query/join.js +18 -0
  46. package/dist/cjs/query/sql.d.cts +18 -0
  47. package/dist/cjs/query/sql.js +132 -0
  48. package/dist/cjs/query/types.d.cts +8 -0
  49. package/dist/cjs/query/types.js +2 -0
  50. package/dist/cjs/query/utilities.d.cts +37 -0
  51. package/dist/cjs/query/utilities.js +194 -0
  52. package/dist/cjs/table/constants.d.cts +8 -0
  53. package/dist/cjs/table/constants.js +9 -0
  54. package/dist/cjs/table/index.d.cts +8 -0
  55. package/dist/cjs/table/index.js +74 -0
  56. package/dist/cjs/table/types.d.cts +8 -0
  57. package/dist/cjs/table/types.js +2 -0
  58. package/dist/cjs/table/utilities.d.cts +8 -0
  59. package/dist/cjs/table/utilities.js +55 -0
  60. package/dist/cjs/types.js +2 -0
  61. package/dist/cjs/utilities.js +21 -0
  62. package/dist/{column → esm/column}/constants.d.ts +58 -5
  63. package/dist/esm/column/constants.js +154 -0
  64. package/dist/{column → esm/column}/index.d.ts +1 -0
  65. package/dist/{column → esm/column}/index.js +36 -15
  66. package/dist/esm/column/types.js +1 -0
  67. package/dist/esm/column/utils.d.ts +133 -0
  68. package/dist/esm/column/utils.js +32 -0
  69. package/dist/{database → esm/database}/alter.d.ts +3 -2
  70. package/dist/{database → esm/database}/alter.js +17 -16
  71. package/dist/{database → esm/database}/column.d.ts +3 -2
  72. package/dist/{database → esm/database}/column.js +11 -8
  73. package/dist/{database → esm/database}/contract.d.ts +3 -2
  74. package/dist/{database → esm/database}/index.d.ts +3 -2
  75. package/dist/{database → esm/database}/index.js +24 -10
  76. package/dist/{database → esm/database}/table.d.ts +3 -2
  77. package/dist/{database → esm/database}/table.js +14 -5
  78. package/dist/esm/database/types.d.ts +8 -0
  79. package/dist/esm/database/wrapper.d.ts +32 -0
  80. package/dist/esm/database/wrapper.js +83 -0
  81. package/dist/{index-DFrpzXEn.d.ts → esm/index-BXOAxB_h.d.ts} +4 -2
  82. package/dist/{index-FMT0YEO7.d.ts → esm/index-BdpoD4zk.d.ts} +80 -46
  83. package/dist/{index.d.ts → esm/index.d.ts} +3 -2
  84. package/dist/esm/index.js +5 -0
  85. package/dist/{migration → esm/migration}/index.d.ts +3 -2
  86. package/dist/esm/migration/index.js +49 -0
  87. package/dist/esm/migration/runner.d.ts +3 -0
  88. package/dist/{migration → esm/migration}/runner.js +7 -6
  89. package/dist/{migration → esm/migration}/type.d.ts +3 -2
  90. package/dist/{query → esm/query}/builder.d.ts +2 -1
  91. package/dist/{query → esm/query}/builder.js +3 -2
  92. package/dist/esm/query/condition.d.ts +8 -0
  93. package/dist/{query → esm/query}/condition.js +9 -5
  94. package/dist/esm/query/constants.d.ts +63 -0
  95. package/dist/{query → esm/query}/constants.js +9 -8
  96. package/dist/{query → esm/query}/contract.d.ts +3 -2
  97. package/dist/{query → esm/query}/helper.d.ts +2 -1
  98. package/dist/{query → esm/query}/helper.js +3 -2
  99. package/dist/{query → esm/query}/index.d.ts +2 -1
  100. package/dist/{query → esm/query}/index.js +26 -16
  101. package/dist/{query → esm/query}/join.d.ts +2 -1
  102. package/dist/{query → esm/query}/join.js +1 -0
  103. package/dist/{query → esm/query}/sql.d.ts +5 -4
  104. package/dist/{query → esm/query}/sql.js +40 -11
  105. package/dist/esm/query/types.d.ts +8 -0
  106. package/dist/{query → esm/query}/utilities.d.ts +4 -1
  107. package/dist/{query → esm/query}/utilities.js +20 -9
  108. package/dist/{table → esm/table}/constants.d.ts +1 -0
  109. package/dist/{table → esm/table}/constants.js +3 -1
  110. package/dist/{table → esm/table}/index.d.ts +2 -1
  111. package/dist/{table → esm/table}/index.js +35 -14
  112. package/dist/{table → esm/table}/types.d.ts +2 -1
  113. package/dist/{table → esm/table}/utilities.d.ts +2 -1
  114. package/dist/{table → esm/table}/utilities.js +5 -4
  115. package/dist/esm/types.d.ts +3 -0
  116. package/dist/esm/utilities.d.ts +4 -0
  117. package/dist/{utilities.js → esm/utilities.js} +1 -0
  118. package/package.json +42 -19
  119. package/dist/column/constants.js +0 -98
  120. package/dist/column/types.js +0 -1
  121. package/dist/database/types.d.ts +0 -7
  122. package/dist/database/wrapper.d.ts +0 -36
  123. package/dist/database/wrapper.js +0 -92
  124. package/dist/index.js +0 -5
  125. package/dist/query/condition.d.ts +0 -7
  126. package/dist/query/types.d.ts +0 -7
  127. /package/dist/{migration/runner.d.ts → cjs/migration/runner.d.cts} +0 -0
  128. /package/dist/{query/constants.d.ts → cjs/query/constants.d.cts} +0 -0
  129. /package/dist/{types.d.ts → cjs/types.d.cts} +0 -0
  130. /package/dist/{utilities.d.ts → cjs/utilities.d.cts} +0 -0
  131. /package/dist/{column → esm/column}/types.d.ts +0 -0
  132. /package/dist/{database → esm/database}/contract.js +0 -0
  133. /package/dist/{database → esm/database}/types.js +0 -0
  134. /package/dist/{migration → esm/migration}/type.js +0 -0
  135. /package/dist/{query → esm/query}/contract.js +0 -0
  136. /package/dist/{query → esm/query}/types.js +0 -0
  137. /package/dist/{table → esm/table}/types.js +0 -0
  138. /package/dist/{types.js → esm/types.js} +0 -0
@@ -0,0 +1,150 @@
1
+ declare const AcceptedColumnTypes: {
2
+ readonly INTEGER: "INTEGER";
3
+ readonly STRING: "STRING";
4
+ readonly BOOLEAN: "BOOLEAN";
5
+ readonly DATE: "DATE";
6
+ readonly FLOAT: "FLOAT";
7
+ readonly DECIMAL: "DECIMAL";
8
+ readonly BIGINT: "BIGINT";
9
+ readonly TEXT: "TEXT";
10
+ readonly BLOB: "BLOB";
11
+ readonly JSON: "JSON";
12
+ readonly VARCHAR: "VARCHAR";
13
+ readonly TIME: "TIME";
14
+ readonly TIMESTAMP: "TIMESTAMP";
15
+ readonly DOUBLE: "DOUBLE";
16
+ readonly DATETIME: "DATETIME";
17
+ readonly DATEONLY: "DATEONLY";
18
+ readonly ENUM: "ENUM";
19
+ readonly SERIAL: "SERIAL";
20
+ };
21
+ type AcceptedColumnTypes = (typeof AcceptedColumnTypes)[keyof typeof AcceptedColumnTypes];
22
+ declare const ColumnTypeMapping: {
23
+ readonly INTEGER: {
24
+ readonly sqlite: "INTEGER";
25
+ readonly postgres: "INTEGER";
26
+ readonly mysql: "INT";
27
+ };
28
+ readonly STRING: {
29
+ readonly sqlite: "TEXT";
30
+ readonly postgres: "VARCHAR";
31
+ readonly mysql: "VARCHAR";
32
+ };
33
+ readonly BOOLEAN: {
34
+ readonly sqlite: "INTEGER";
35
+ readonly postgres: "BOOLEAN";
36
+ readonly mysql: "TINYINT";
37
+ };
38
+ readonly DATE: {
39
+ readonly sqlite: "TEXT";
40
+ readonly postgres: "DATE";
41
+ readonly mysql: "DATE";
42
+ };
43
+ readonly FLOAT: {
44
+ readonly sqlite: "REAL";
45
+ readonly postgres: "FLOAT";
46
+ readonly mysql: "FLOAT PRECISION";
47
+ };
48
+ readonly DECIMAL: {
49
+ readonly sqlite: "NUMERIC";
50
+ readonly postgres: "DECIMAL";
51
+ readonly mysql: "DECIMAL";
52
+ };
53
+ readonly BIGINT: {
54
+ readonly sqlite: "INTEGER";
55
+ readonly postgres: "BIGINT";
56
+ readonly mysql: "BIGINT";
57
+ };
58
+ readonly TEXT: {
59
+ readonly sqlite: "TEXT";
60
+ readonly postgres: "TEXT";
61
+ readonly mysql: "TEXT";
62
+ };
63
+ readonly BLOB: {
64
+ readonly sqlite: "BLOB";
65
+ readonly postgres: "BYTEA";
66
+ readonly mysql: "BLOB";
67
+ };
68
+ readonly JSON: {
69
+ readonly sqlite: "TEXT";
70
+ readonly postgres: "JSONB";
71
+ readonly mysql: "JSON";
72
+ };
73
+ readonly VARCHAR: {
74
+ readonly sqlite: "VARCHAR";
75
+ readonly postgres: "VARCHAR";
76
+ readonly mysql: "VARCHAR";
77
+ };
78
+ readonly TIME: {
79
+ readonly sqlite: "TEXT";
80
+ readonly postgres: "TIME";
81
+ readonly mysql: "TIME";
82
+ };
83
+ readonly TIMESTAMP: {
84
+ readonly sqlite: "TEXT";
85
+ readonly postgres: "TIMESTAMP";
86
+ readonly mysql: "DATETIME";
87
+ };
88
+ readonly DOUBLE: {
89
+ readonly sqlite: "REAL";
90
+ readonly postgres: "DOUBLE PRECISION";
91
+ readonly mysql: "DOUBLE PRECISION";
92
+ };
93
+ readonly DATETIME: {
94
+ readonly sqlite: "TEXT";
95
+ readonly postgres: "TIMESTAMP";
96
+ readonly mysql: "DATETIME";
97
+ };
98
+ readonly DATEONLY: {
99
+ readonly sqlite: "TEXT";
100
+ readonly postgres: "DATE";
101
+ readonly mysql: "DATE";
102
+ };
103
+ readonly ENUM: {
104
+ readonly sqlite: "TEXT";
105
+ readonly postgres: "TEXT";
106
+ readonly mysql: "TEXT";
107
+ };
108
+ readonly SERIAL: {
109
+ readonly sqlite: "INTEGER";
110
+ readonly postgres: "SERIAL";
111
+ readonly mysql: "INT";
112
+ };
113
+ };
114
+ declare const ColumnProperties: {
115
+ readonly NOT_NULL: "NOT_NULL";
116
+ readonly UNIQUE: "UNIQUE";
117
+ readonly DEFAULT: "DEFAULT";
118
+ readonly AUTO_INCREMENT: "AUTO_INCREMENT";
119
+ readonly PRIMARY_KEY: "PRIMARY_KEY";
120
+ };
121
+ type ColumnProperties = (typeof ColumnProperties)[keyof typeof ColumnProperties];
122
+ declare const ColumnPropertyMapping: {
123
+ NOT_NULL: {
124
+ sqlite: string;
125
+ postgres: string;
126
+ mysql: string;
127
+ };
128
+ UNIQUE: {
129
+ sqlite: string;
130
+ postgres: string;
131
+ mysql: string;
132
+ };
133
+ DEFAULT: {
134
+ sqlite: string;
135
+ postgres: string;
136
+ mysql: string;
137
+ };
138
+ AUTO_INCREMENT: {
139
+ sqlite: string;
140
+ postgres: string;
141
+ mysql: string;
142
+ };
143
+ PRIMARY_KEY: {
144
+ sqlite: string;
145
+ postgres: string;
146
+ mysql: string;
147
+ };
148
+ };
149
+
150
+ export { AcceptedColumnTypes, ColumnProperties, ColumnPropertyMapping, ColumnTypeMapping };
@@ -0,0 +1,158 @@
1
+ 'use strict';
2
+
3
+ var constants = require('../table/constants');
4
+
5
+ const AcceptedColumnTypes = {
6
+ INTEGER: "INTEGER",
7
+ STRING: "STRING",
8
+ BOOLEAN: "BOOLEAN",
9
+ DATE: "DATE",
10
+ FLOAT: "FLOAT",
11
+ DECIMAL: "DECIMAL",
12
+ BIGINT: "BIGINT",
13
+ TEXT: "TEXT",
14
+ BLOB: "BLOB",
15
+ JSON: "JSON",
16
+ VARCHAR: "VARCHAR",
17
+ TIME: "TIME",
18
+ TIMESTAMP: "TIMESTAMP",
19
+ DOUBLE: "DOUBLE",
20
+ DATETIME: "DATETIME",
21
+ DATEONLY: "DATEONLY",
22
+ ENUM: "ENUM",
23
+ SERIAL: "SERIAL"
24
+ };
25
+ const ColumnTypeMapping = {
26
+ [AcceptedColumnTypes.INTEGER]: {
27
+ [constants.Dialect.SQLITE]: "INTEGER",
28
+ [constants.Dialect.POSTGRES]: "INTEGER",
29
+ [constants.Dialect.MYSQL]: "INT"
30
+ },
31
+ [AcceptedColumnTypes.STRING]: {
32
+ [constants.Dialect.SQLITE]: "TEXT",
33
+ [constants.Dialect.POSTGRES]: "VARCHAR",
34
+ [constants.Dialect.MYSQL]: "VARCHAR"
35
+ },
36
+ [AcceptedColumnTypes.BOOLEAN]: {
37
+ [constants.Dialect.SQLITE]: "INTEGER",
38
+ [constants.Dialect.POSTGRES]: "BOOLEAN",
39
+ [constants.Dialect.MYSQL]: "TINYINT"
40
+ },
41
+ [AcceptedColumnTypes.DATE]: {
42
+ [constants.Dialect.SQLITE]: "TEXT",
43
+ [constants.Dialect.POSTGRES]: "DATE",
44
+ [constants.Dialect.MYSQL]: "DATE"
45
+ },
46
+ [AcceptedColumnTypes.FLOAT]: {
47
+ [constants.Dialect.SQLITE]: "REAL",
48
+ [constants.Dialect.POSTGRES]: "FLOAT",
49
+ [constants.Dialect.MYSQL]: "FLOAT PRECISION"
50
+ },
51
+ [AcceptedColumnTypes.DECIMAL]: {
52
+ [constants.Dialect.SQLITE]: "NUMERIC",
53
+ [constants.Dialect.POSTGRES]: "DECIMAL",
54
+ [constants.Dialect.MYSQL]: "DECIMAL"
55
+ },
56
+ [AcceptedColumnTypes.BIGINT]: {
57
+ [constants.Dialect.SQLITE]: "INTEGER",
58
+ [constants.Dialect.POSTGRES]: "BIGINT",
59
+ [constants.Dialect.MYSQL]: "BIGINT"
60
+ },
61
+ [AcceptedColumnTypes.TEXT]: {
62
+ [constants.Dialect.SQLITE]: "TEXT",
63
+ [constants.Dialect.POSTGRES]: "TEXT",
64
+ [constants.Dialect.MYSQL]: "TEXT"
65
+ },
66
+ [AcceptedColumnTypes.BLOB]: {
67
+ [constants.Dialect.SQLITE]: "BLOB",
68
+ [constants.Dialect.POSTGRES]: "BYTEA",
69
+ [constants.Dialect.MYSQL]: "BLOB"
70
+ },
71
+ [AcceptedColumnTypes.JSON]: {
72
+ [constants.Dialect.SQLITE]: "TEXT",
73
+ [constants.Dialect.POSTGRES]: "JSONB",
74
+ [constants.Dialect.MYSQL]: "JSON"
75
+ },
76
+ [AcceptedColumnTypes.VARCHAR]: {
77
+ [constants.Dialect.SQLITE]: "VARCHAR",
78
+ [constants.Dialect.POSTGRES]: "VARCHAR",
79
+ [constants.Dialect.MYSQL]: "VARCHAR"
80
+ },
81
+ [AcceptedColumnTypes.TIME]: {
82
+ [constants.Dialect.SQLITE]: "TEXT",
83
+ [constants.Dialect.POSTGRES]: "TIME",
84
+ [constants.Dialect.MYSQL]: "TIME"
85
+ },
86
+ [AcceptedColumnTypes.TIMESTAMP]: {
87
+ [constants.Dialect.SQLITE]: "TEXT",
88
+ [constants.Dialect.POSTGRES]: "TIMESTAMP",
89
+ [constants.Dialect.MYSQL]: "DATETIME"
90
+ },
91
+ [AcceptedColumnTypes.DOUBLE]: {
92
+ [constants.Dialect.SQLITE]: "REAL",
93
+ [constants.Dialect.POSTGRES]: "DOUBLE PRECISION",
94
+ [constants.Dialect.MYSQL]: "DOUBLE PRECISION"
95
+ },
96
+ [AcceptedColumnTypes.DATETIME]: {
97
+ [constants.Dialect.SQLITE]: "TEXT",
98
+ [constants.Dialect.POSTGRES]: "TIMESTAMP",
99
+ [constants.Dialect.MYSQL]: "DATETIME"
100
+ },
101
+ [AcceptedColumnTypes.DATEONLY]: {
102
+ [constants.Dialect.SQLITE]: "TEXT",
103
+ [constants.Dialect.POSTGRES]: "DATE",
104
+ [constants.Dialect.MYSQL]: "DATE"
105
+ },
106
+ [AcceptedColumnTypes.ENUM]: {
107
+ [constants.Dialect.SQLITE]: "TEXT",
108
+ [constants.Dialect.POSTGRES]: "TEXT",
109
+ [constants.Dialect.MYSQL]: "TEXT"
110
+ },
111
+ [AcceptedColumnTypes.SERIAL]: {
112
+ [constants.Dialect.SQLITE]: "INTEGER",
113
+ [constants.Dialect.POSTGRES]: "SERIAL",
114
+ [constants.Dialect.MYSQL]: "INT"
115
+ }
116
+ };
117
+ const ColumnProperties = {
118
+ NOT_NULL: "NOT_NULL",
119
+ UNIQUE: "UNIQUE",
120
+ DEFAULT: "DEFAULT",
121
+ AUTO_INCREMENT: "AUTO_INCREMENT",
122
+ PRIMARY_KEY: "PRIMARY_KEY"
123
+ };
124
+ const ColumnPropertyMapping = {
125
+ [ColumnProperties.NOT_NULL]: {
126
+ [constants.Dialect.SQLITE]: "NOT NULL",
127
+ [constants.Dialect.POSTGRES]: "NOT NULL",
128
+ [constants.Dialect.MYSQL]: "NOT NULL"
129
+ },
130
+ [ColumnProperties.UNIQUE]: {
131
+ [constants.Dialect.SQLITE]: "UNIQUE",
132
+ [constants.Dialect.POSTGRES]: "UNIQUE",
133
+ [constants.Dialect.MYSQL]: "UNIQUE"
134
+ },
135
+ [ColumnProperties.DEFAULT]: {
136
+ [constants.Dialect.SQLITE]: "DEFAULT",
137
+ [constants.Dialect.POSTGRES]: "DEFAULT",
138
+ [constants.Dialect.MYSQL]: "DEFAULT"
139
+ },
140
+ [ColumnProperties.AUTO_INCREMENT]: {
141
+ // sqlite does not support AUTOINCREMENT
142
+ [constants.Dialect.SQLITE]: "AUTOINCREMENT",
143
+ // postgres does not support AUTOINCREMENT
144
+ [constants.Dialect.POSTGRES]: "AUTOINCREMENT",
145
+ // Exists only for mysql since mysql supports AUTOINCREMENT
146
+ [constants.Dialect.MYSQL]: "AUTO_INCREMENT"
147
+ },
148
+ [ColumnProperties.PRIMARY_KEY]: {
149
+ [constants.Dialect.SQLITE]: "PRIMARY KEY",
150
+ [constants.Dialect.POSTGRES]: "PRIMARY KEY",
151
+ [constants.Dialect.MYSQL]: "PRIMARY KEY"
152
+ }
153
+ };
154
+
155
+ exports.AcceptedColumnTypes = AcceptedColumnTypes;
156
+ exports.ColumnProperties = ColumnProperties;
157
+ exports.ColumnPropertyMapping = ColumnPropertyMapping;
158
+ exports.ColumnTypeMapping = ColumnTypeMapping;
@@ -0,0 +1,43 @@
1
+ import { Dialect } from '../table/constants.cjs';
2
+ import { AcceptedColumnTypes } from './constants.cjs';
3
+ import { ColumnOptions, AcceptedColumnTypeMap, EnumOptions, ColumnDefinition, ValueSelector } from './types.cjs';
4
+
5
+ declare class Column<Type extends AcceptedColumnTypes = AcceptedColumnTypes, Values extends number | readonly string[] = Type extends typeof AcceptedColumnTypes.ENUM ? readonly string[] : number, Options extends ColumnOptions<Type, Values> = ColumnOptions<Type, Values>, ColumnValue extends AcceptedColumnTypeMap[Options['type']] = AcceptedColumnTypeMap[Options['type']], Value extends Options extends EnumOptions<infer Value> ? Value[number] : ColumnValue = ColumnValue, Definition extends Partial<ColumnDefinition<Value, Dialect>> = NonNullable<unknown>> {
6
+ readonly definition: Definition;
7
+ readonly type: Options['type'];
8
+ readonly length: number | null;
9
+ readonly enums: readonly Value[];
10
+ readonly _output: ValueSelector<Definition, Value>;
11
+ protected constructor(options: Options);
12
+ static define<Type extends AcceptedColumnTypes = AcceptedColumnTypes, Values extends number | readonly string[] = number | readonly string[], Options extends ColumnOptions<Type, Values> = ColumnOptions<Type, Values>>(options: Options): Column<AcceptedColumnTypes, number | readonly string[], Options, AcceptedColumnTypeMap[Options["type"]], Options extends EnumOptions<infer Value extends readonly string[]> ? Value[number] : AcceptedColumnTypeMap[Options["type"]], {}>;
13
+ autoIncrement(): Column<Type, Values, Options, ColumnValue, Value, Definition & {
14
+ autoIncrement: true;
15
+ }>;
16
+ primaryKey(): Column<Type, Values, Options, ColumnValue, Value, Definition & {
17
+ primaryKey: true;
18
+ }>;
19
+ notNull(): Column<Type, Values, Options, ColumnValue, Value, Definition & {
20
+ notNull: true;
21
+ }>;
22
+ unique(): Column<Type, Values, Options, ColumnValue, Value, Definition & {
23
+ unique: true;
24
+ }>;
25
+ comment<Comment extends string | null>(value: Comment): Column<Type, Values, Options, ColumnValue, Value, Definition & {
26
+ comment: Comment;
27
+ }>;
28
+ default<FinalValue extends ValueSelector<Definition, Value>>(value: FinalValue): Column<Type, Values, Options, ColumnValue, Value, Definition & {
29
+ default: FinalValue;
30
+ }>;
31
+ dialect<DbDialect extends Dialect>(dialect: DbDialect): Column<Type, Values, Options, ColumnValue, Value, Definition & {
32
+ dialect: DbDialect;
33
+ }>;
34
+ clone(): Column<Type, Values, Options, ColumnValue, Value, {}>;
35
+ toQuery(): {
36
+ query: string;
37
+ params: never[];
38
+ };
39
+ toString(): string;
40
+ infer(): this['_output'];
41
+ }
42
+
43
+ export { Column };
@@ -0,0 +1,127 @@
1
+ 'use strict';
2
+
3
+ var constants$1 = require('../table/constants');
4
+ var utilities = require('../utilities');
5
+ var constants = require('./constants');
6
+ var utils = require('./utils');
7
+
8
+ class Column {
9
+ definition;
10
+ type;
11
+ length;
12
+ enums;
13
+ _output;
14
+ constructor(options) {
15
+ this.type = options.type;
16
+ this.enums = [];
17
+ this.length = null;
18
+ if ("length" in options) {
19
+ this.length = options.length;
20
+ }
21
+ if ("values" in options) {
22
+ this.enums = options.values;
23
+ }
24
+ this.definition = {
25
+ autoIncrement: false,
26
+ primaryKey: false,
27
+ notNull: false,
28
+ unique: false,
29
+ comment: null,
30
+ default: void 0
31
+ };
32
+ }
33
+ static define(options) {
34
+ return new Column(options);
35
+ }
36
+ autoIncrement() {
37
+ this.definition.autoIncrement = true;
38
+ return this;
39
+ }
40
+ primaryKey() {
41
+ this.definition.primaryKey = true;
42
+ return this;
43
+ }
44
+ notNull() {
45
+ this.definition.notNull = true;
46
+ return this;
47
+ }
48
+ unique() {
49
+ this.definition.unique = true;
50
+ return this;
51
+ }
52
+ comment(value) {
53
+ this.definition.comment = value;
54
+ return this;
55
+ }
56
+ default(value) {
57
+ this.definition.default = value;
58
+ return this;
59
+ }
60
+ dialect(dialect) {
61
+ this.definition.dialect = dialect;
62
+ return this;
63
+ }
64
+ clone() {
65
+ const column = new Column({
66
+ type: this.type,
67
+ ...this.length && { length: this.length },
68
+ ...this.enums.length && { values: this.enums }
69
+ });
70
+ Object.assign(column.definition, utilities.deepClone(this.definition));
71
+ return column;
72
+ }
73
+ toQuery() {
74
+ if (!this.definition.dialect) {
75
+ throw new Error("No DB Dialect defined");
76
+ }
77
+ const type = constants.ColumnTypeMapping[this.type][this.definition.dialect];
78
+ const properties = utils.columnProperty(this.definition.dialect);
79
+ let sql = type + (this.length ? `(${this.length})` : "");
80
+ if (this.definition.primaryKey) {
81
+ sql += ` ${properties.PRIMARY_KEY}`;
82
+ }
83
+ if (this.definition.autoIncrement || this.type === constants.AcceptedColumnTypes.SERIAL) {
84
+ const isPrimaryKey = !!this.definition.primaryKey;
85
+ const sqls = [];
86
+ if (this.definition.dialect === constants$1.Dialect.POSTGRES) {
87
+ sqls.push(type);
88
+ if (isPrimaryKey) {
89
+ sqls.push(properties.PRIMARY_KEY);
90
+ }
91
+ sql = sqls.join(" ");
92
+ } else {
93
+ if (this.type !== constants.AcceptedColumnTypes.SERIAL) {
94
+ sql += ` ${properties.AUTO_INCREMENT}`;
95
+ } else {
96
+ sqls.push(type);
97
+ if (isPrimaryKey) {
98
+ sqls.push(properties.PRIMARY_KEY);
99
+ }
100
+ sqls.push(properties.AUTO_INCREMENT);
101
+ sql = sqls.join(" ");
102
+ }
103
+ }
104
+ }
105
+ if (this.definition.notNull) {
106
+ sql += ` ${properties.NOT_NULL}`;
107
+ }
108
+ if (this.definition.unique) {
109
+ sql += ` ${properties.UNIQUE}`;
110
+ }
111
+ if (this.definition.default !== void 0) {
112
+ const value = this.definition.default;
113
+ const isString = typeof this.definition.default === "string";
114
+ const finalValue = isString ? `'${value}'` : value;
115
+ sql += ` ${properties.DEFAULT} ${finalValue}`;
116
+ }
117
+ return { query: sql, params: [] };
118
+ }
119
+ toString() {
120
+ return this.toQuery().query;
121
+ }
122
+ infer() {
123
+ return null;
124
+ }
125
+ }
126
+
127
+ exports.Column = Column;
@@ -0,0 +1,43 @@
1
+ import { Dialect } from '../table/constants.cjs';
2
+ import { AcceptedColumnTypes } from './constants.cjs';
3
+
4
+ interface ColumnDefinition<T, U extends Dialect | null = null> {
5
+ primaryKey: boolean;
6
+ autoIncrement: boolean;
7
+ notNull: boolean;
8
+ unique: boolean;
9
+ comment: string | null;
10
+ default: T | undefined;
11
+ dialect: U | null;
12
+ }
13
+ type ValueSelector<Definition extends Partial<ColumnDefinition<Value, Dialect>> | ColumnDefinition<Value, Dialect>, Value> = Definition['notNull'] extends true ? Value | (string & {}) : Value | (string & {}) | null;
14
+ type AcceptedColumnTypeMap<T = any> = {
15
+ [K in AcceptedColumnTypes]: K extends typeof AcceptedColumnTypes.INTEGER | typeof AcceptedColumnTypes.BIGINT | typeof AcceptedColumnTypes.FLOAT | typeof AcceptedColumnTypes.DOUBLE | typeof AcceptedColumnTypes.DECIMAL | typeof AcceptedColumnTypes.SERIAL ? number : K extends typeof AcceptedColumnTypes.STRING | typeof AcceptedColumnTypes.TEXT | typeof AcceptedColumnTypes.VARCHAR ? string : K extends typeof AcceptedColumnTypes.BOOLEAN ? boolean : K extends typeof AcceptedColumnTypes.DATE | typeof AcceptedColumnTypes.TIME | typeof AcceptedColumnTypes.TIMESTAMP | typeof AcceptedColumnTypes.DATETIME | typeof AcceptedColumnTypes.DATEONLY ? Date : K extends typeof AcceptedColumnTypes.JSON ? object : K extends typeof AcceptedColumnTypes.BLOB ? Buffer : K extends typeof AcceptedColumnTypes.ENUM ? T[number][] : never;
16
+ };
17
+ type DateOptions = {
18
+ type: typeof AcceptedColumnTypes.DATE | typeof AcceptedColumnTypes.TIME | typeof AcceptedColumnTypes.TIMESTAMP | typeof AcceptedColumnTypes.DATETIME | typeof AcceptedColumnTypes.DATEONLY;
19
+ };
20
+ type NumberOptions<Length extends number = number> = {
21
+ type: typeof AcceptedColumnTypes.INTEGER | typeof AcceptedColumnTypes.BIGINT | typeof AcceptedColumnTypes.FLOAT | typeof AcceptedColumnTypes.DECIMAL | typeof AcceptedColumnTypes.DOUBLE | typeof AcceptedColumnTypes.SERIAL;
22
+ length?: Length;
23
+ };
24
+ type StringOptions<Length extends number = number> = {
25
+ type: typeof AcceptedColumnTypes.STRING | typeof AcceptedColumnTypes.VARCHAR | typeof AcceptedColumnTypes.TEXT;
26
+ length?: Length;
27
+ };
28
+ type EnumOptions<Values extends readonly string[]> = {
29
+ type: typeof AcceptedColumnTypes.ENUM;
30
+ values: Values;
31
+ };
32
+ type BooleanOptions = {
33
+ type: typeof AcceptedColumnTypes.BOOLEAN;
34
+ };
35
+ type JsonOptions = {
36
+ type: typeof AcceptedColumnTypes.JSON;
37
+ };
38
+ type BlobOptions = {
39
+ type: typeof AcceptedColumnTypes.BLOB;
40
+ };
41
+ type ColumnOptions<Type extends AcceptedColumnTypes, U extends number | readonly string[]> = Type extends typeof AcceptedColumnTypes.BLOB ? BlobOptions : Type extends typeof AcceptedColumnTypes.JSON ? JsonOptions : Type extends typeof AcceptedColumnTypes.BOOLEAN ? BooleanOptions : Type extends typeof AcceptedColumnTypes.DATE | typeof AcceptedColumnTypes.TIME | typeof AcceptedColumnTypes.TIMESTAMP | typeof AcceptedColumnTypes.DATETIME | typeof AcceptedColumnTypes.DATEONLY ? DateOptions : Type extends typeof AcceptedColumnTypes.STRING | typeof AcceptedColumnTypes.VARCHAR | typeof AcceptedColumnTypes.TEXT ? U extends number ? StringOptions<U> : StringOptions : Type extends typeof AcceptedColumnTypes.INTEGER | typeof AcceptedColumnTypes.BIGINT | typeof AcceptedColumnTypes.FLOAT | typeof AcceptedColumnTypes.DECIMAL | typeof AcceptedColumnTypes.DOUBLE | typeof AcceptedColumnTypes.SERIAL ? U extends number ? NumberOptions<U> : NumberOptions : Type extends typeof AcceptedColumnTypes.ENUM ? U extends readonly string[] ? EnumOptions<U> : never : never;
42
+
43
+ export type { AcceptedColumnTypeMap, BlobOptions, BooleanOptions, ColumnDefinition, ColumnOptions, DateOptions, EnumOptions, JsonOptions, NumberOptions, StringOptions, ValueSelector };
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ require('./constants');
4
+
@@ -0,0 +1,133 @@
1
+ import { Dialect } from '../table/constants.cjs';
2
+ import { ColumnProperties } from './constants.cjs';
3
+
4
+ declare function getColumnProperty<DbDialect extends Dialect>(dialect: DbDialect, property: ColumnProperties): ({
5
+ sqlite: string;
6
+ postgres: string;
7
+ mysql: string;
8
+ } | {
9
+ sqlite: string;
10
+ postgres: string;
11
+ mysql: string;
12
+ } | {
13
+ sqlite: string;
14
+ postgres: string;
15
+ mysql: string;
16
+ } | {
17
+ sqlite: string;
18
+ postgres: string;
19
+ mysql: string;
20
+ } | {
21
+ sqlite: string;
22
+ postgres: string;
23
+ mysql: string;
24
+ })[DbDialect];
25
+ declare function columnProperty<DbDialect extends Dialect>(dialect: DbDialect): {
26
+ NOT_NULL: ({
27
+ sqlite: string;
28
+ postgres: string;
29
+ mysql: string;
30
+ } | {
31
+ sqlite: string;
32
+ postgres: string;
33
+ mysql: string;
34
+ } | {
35
+ sqlite: string;
36
+ postgres: string;
37
+ mysql: string;
38
+ } | {
39
+ sqlite: string;
40
+ postgres: string;
41
+ mysql: string;
42
+ } | {
43
+ sqlite: string;
44
+ postgres: string;
45
+ mysql: string;
46
+ })[DbDialect];
47
+ UNIQUE: ({
48
+ sqlite: string;
49
+ postgres: string;
50
+ mysql: string;
51
+ } | {
52
+ sqlite: string;
53
+ postgres: string;
54
+ mysql: string;
55
+ } | {
56
+ sqlite: string;
57
+ postgres: string;
58
+ mysql: string;
59
+ } | {
60
+ sqlite: string;
61
+ postgres: string;
62
+ mysql: string;
63
+ } | {
64
+ sqlite: string;
65
+ postgres: string;
66
+ mysql: string;
67
+ })[DbDialect];
68
+ DEFAULT: ({
69
+ sqlite: string;
70
+ postgres: string;
71
+ mysql: string;
72
+ } | {
73
+ sqlite: string;
74
+ postgres: string;
75
+ mysql: string;
76
+ } | {
77
+ sqlite: string;
78
+ postgres: string;
79
+ mysql: string;
80
+ } | {
81
+ sqlite: string;
82
+ postgres: string;
83
+ mysql: string;
84
+ } | {
85
+ sqlite: string;
86
+ postgres: string;
87
+ mysql: string;
88
+ })[DbDialect];
89
+ AUTO_INCREMENT: ({
90
+ sqlite: string;
91
+ postgres: string;
92
+ mysql: string;
93
+ } | {
94
+ sqlite: string;
95
+ postgres: string;
96
+ mysql: string;
97
+ } | {
98
+ sqlite: string;
99
+ postgres: string;
100
+ mysql: string;
101
+ } | {
102
+ sqlite: string;
103
+ postgres: string;
104
+ mysql: string;
105
+ } | {
106
+ sqlite: string;
107
+ postgres: string;
108
+ mysql: string;
109
+ })[DbDialect];
110
+ PRIMARY_KEY: ({
111
+ sqlite: string;
112
+ postgres: string;
113
+ mysql: string;
114
+ } | {
115
+ sqlite: string;
116
+ postgres: string;
117
+ mysql: string;
118
+ } | {
119
+ sqlite: string;
120
+ postgres: string;
121
+ mysql: string;
122
+ } | {
123
+ sqlite: string;
124
+ postgres: string;
125
+ mysql: string;
126
+ } | {
127
+ sqlite: string;
128
+ postgres: string;
129
+ mysql: string;
130
+ })[DbDialect];
131
+ };
132
+
133
+ export { columnProperty, getColumnProperty };
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var constants = require('./constants');
4
+
5
+ function getColumnProperty(dialect, property) {
6
+ return constants.ColumnPropertyMapping[property][dialect];
7
+ }
8
+ function columnProperty(dialect) {
9
+ return {
10
+ [constants.ColumnProperties.NOT_NULL]: getColumnProperty(
11
+ dialect,
12
+ constants.ColumnProperties.NOT_NULL
13
+ ),
14
+ [constants.ColumnProperties.UNIQUE]: getColumnProperty(
15
+ dialect,
16
+ constants.ColumnProperties.UNIQUE
17
+ ),
18
+ [constants.ColumnProperties.DEFAULT]: getColumnProperty(
19
+ dialect,
20
+ constants.ColumnProperties.DEFAULT
21
+ ),
22
+ [constants.ColumnProperties.AUTO_INCREMENT]: getColumnProperty(
23
+ dialect,
24
+ constants.ColumnProperties.AUTO_INCREMENT
25
+ ),
26
+ [constants.ColumnProperties.PRIMARY_KEY]: getColumnProperty(
27
+ dialect,
28
+ constants.ColumnProperties.PRIMARY_KEY
29
+ )
30
+ };
31
+ }
32
+
33
+ exports.columnProperty = columnProperty;
34
+ exports.getColumnProperty = getColumnProperty;