forj 0.1.1 → 0.1.3
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/package.json +1 -1
- package/src/migrations/blueprint.ts +1 -1
- package/src/utils.ts +26 -33
package/package.json
CHANGED
|
@@ -115,7 +115,7 @@ export class Blueprint {
|
|
|
115
115
|
timestamps(columnType: 'int' | 'date' = 'int') {
|
|
116
116
|
const isInt = columnType == 'int'
|
|
117
117
|
const type = isInt ? 'INTEGER' : 'DATETIME'
|
|
118
|
-
this.#column({ name: 'created_at', type, raw: 'DEFAULT '+ (isInt ? '(unixepoch())' : 'CURRENT_TIMESTAMP') })
|
|
118
|
+
this.#column({ name: 'created_at', type, nullable: true, raw: 'DEFAULT '+ (isInt ? '(unixepoch())' : 'CURRENT_TIMESTAMP') })
|
|
119
119
|
this.#column({ name: 'updated_at', type, nullable: true })
|
|
120
120
|
return this
|
|
121
121
|
}
|
package/src/utils.ts
CHANGED
|
@@ -132,41 +132,34 @@ export function isJoinCompare(val: any, schema?: DBSchema) {
|
|
|
132
132
|
const keys = zGet(val, schema)
|
|
133
133
|
return keys && keys?.length
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
'
|
|
139
|
-
'
|
|
140
|
-
'CONFLICT', 'CONSTRAINT', 'CREATE', 'CROSS', 'CURRENT',
|
|
141
|
-
'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATABASE', 'DEFAULT', '
|
|
142
|
-
'
|
|
143
|
-
'
|
|
144
|
-
'
|
|
145
|
-
'IF', 'IGNORE', 'IMMEDIATE', 'IN', 'INDEX', 'INDEXED', 'INITIALLY',
|
|
146
|
-
'
|
|
147
|
-
'
|
|
148
|
-
'
|
|
149
|
-
'
|
|
150
|
-
'
|
|
151
|
-
'
|
|
152
|
-
'
|
|
153
|
-
'
|
|
154
|
-
'VIEW', 'VIRTUAL', 'WHEN', 'WHERE', 'WITH', 'WITHOUT',
|
|
135
|
+
// List taken from `aKeywordTable` in https://github.com/sqlite/sqlite/blob/378bf82e2bc09734b8c5869f9b148efe37d29527/tool/mkkeywordhash.c#L172
|
|
136
|
+
// prettier-ignore
|
|
137
|
+
export const SQLITE_KEYWORDS = new Set([
|
|
138
|
+
'ABORT', 'ACTION', 'ADD', 'AFTER', 'ALL', 'ALTER', 'ALWAYS', 'ANALYZE', 'AND', 'AS', 'ASC',
|
|
139
|
+
'ATTACH', 'AUTOINCREMENT', 'BEFORE', 'BEGIN', 'BETWEEN', 'BY', 'CASCADE', 'CASE', 'CAST',
|
|
140
|
+
'CHECK', 'COLLATE', 'COLUMN', 'COMMIT', 'CONFLICT', 'CONSTRAINT', 'CREATE', 'CROSS', 'CURRENT',
|
|
141
|
+
'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATABASE', 'DEFAULT', 'DEFERRED',
|
|
142
|
+
'DEFERRABLE', 'DELETE', 'DESC', 'DETACH', 'DISTINCT', 'DO', 'DROP', 'END', 'EACH', 'ELSE',
|
|
143
|
+
'ESCAPE', 'EXCEPT', 'EXCLUSIVE', 'EXCLUDE', 'EXISTS', 'EXPLAIN', 'FAIL', 'FILTER', 'FIRST',
|
|
144
|
+
'FOLLOWING', 'FOR', 'FOREIGN', 'FROM', 'FULL', 'GENERATED', 'GLOB', 'GROUP', 'GROUPS', 'HAVING',
|
|
145
|
+
'IF', 'IGNORE', 'IMMEDIATE', 'IN', 'INDEX', 'INDEXED', 'INITIALLY', 'INNER', 'INSERT', 'INSTEAD',
|
|
146
|
+
'INTERSECT', 'INTO', 'IS', 'ISNULL', 'JOIN', 'KEY', 'LAST', 'LEFT', 'LIKE', 'LIMIT', 'MATCH',
|
|
147
|
+
'MATERIALIZED', 'NATURAL', 'NO', 'NOT', 'NOTHING', 'NOTNULL', 'NULL', 'NULLS', 'OF', 'OFFSET',
|
|
148
|
+
'ON', 'OR', 'ORDER', 'OTHERS', 'OUTER', 'OVER', 'PARTITION', 'PLAN', 'PRAGMA', 'PRECEDING',
|
|
149
|
+
'PRIMARY', 'QUERY', 'RAISE', 'RANGE', 'RECURSIVE', 'REFERENCES', 'REGEXP', 'REINDEX', 'RELEASE',
|
|
150
|
+
'RENAME', 'REPLACE', 'RESTRICT', 'RETURNING', 'RIGHT', 'ROLLBACK', 'ROW', 'ROWS', 'SAVEPOINT',
|
|
151
|
+
'SELECT', 'SET', 'TABLE', 'TEMP', 'TEMPORARY', 'THEN', 'TIES', 'TO', 'TRANSACTION', 'TRIGGER',
|
|
152
|
+
'UNBOUNDED', 'UNION', 'UNIQUE', 'UPDATE', 'USING', 'VACUUM', 'VALUES', 'VIEW', 'VIRTUAL', 'WHEN',
|
|
153
|
+
'WHERE', 'WINDOW', 'WITH', 'WITHOUT',
|
|
155
154
|
])
|
|
156
|
-
export function tableName(name: string) {
|
|
157
|
-
name = name.trim()
|
|
158
|
-
if (!name || name?.includes('.'))
|
|
159
|
-
throw new Error(`Invalid table name "${!name ? 'empty' : name}"`)
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
/^[0-9]/.test(name)
|
|
163
|
-
|| !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)
|
|
164
|
-
|| reservedWords.has(name.toUpperCase())
|
|
165
|
-
) {
|
|
166
|
-
return `"${name}"`
|
|
167
|
-
}
|
|
168
155
|
|
|
169
|
-
|
|
156
|
+
export function tableName(name: string) {
|
|
157
|
+
return !name
|
|
158
|
+
|| !name.match(/^[a-zA-Z_]/)
|
|
159
|
+
|| name.match(/\W/)
|
|
160
|
+
|| SQLITE_KEYWORDS.has(name.toUpperCase())
|
|
161
|
+
? `"${name}"`
|
|
162
|
+
: name
|
|
170
163
|
}
|
|
171
164
|
|
|
172
165
|
export function tableSlug(name: string) {
|