@pdg/drizzle-mysql 1.0.1 → 1.0.2
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/README.md
CHANGED
|
@@ -320,7 +320,7 @@ await db.trans(async () => {
|
|
|
320
320
|
|
|
321
321
|
### 생성·수정 시각
|
|
322
322
|
|
|
323
|
-
컬럼 정책은 이 패키지에서 가져온 `mysqlTable`에 선언합니다. 자동 증가 컬럼은 기본적으로 등록과 수정이 금지되며, 각각 `insertAllowed()`와 `updateAllowed()`로 허용할 수 있습니다. 다른 컬럼은 `insertBlocked()`와 `updateBlocked()`로 금지하거나 `updateRequired()`로 수정 시 필수로 지정합니다. 금지된 값을 전달하거나 필수 수정 값을 누락하면 런타임에도 오류가 발생합니다.
|
|
323
|
+
컬럼 정책은 이 패키지에서 가져온 `mysqlTable`에 선언합니다. 자동 증가 컬럼은 기본적으로 등록과 수정이 금지되며, 각각 `insertAllowed()`와 `updateAllowed()`로 허용할 수 있습니다. `primaryKey()`로 지정한 컬럼도 기본적으로 수정이 금지되며, `updateAllowed()`를 명시해야 수정할 수 있습니다. 다른 컬럼은 `insertBlocked()`와 `updateBlocked()`로 금지하거나 `updateRequired()`로 수정 시 필수로 지정합니다. 금지된 값을 전달하거나 필수 수정 값을 누락하면 런타임에도 오류가 발생합니다.
|
|
324
324
|
|
|
325
325
|
```ts
|
|
326
326
|
import { drizzleMySql, mysqlTable, int, varchar, datetime } from '@pdg/drizzle-mysql';
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import type { MySqlTable } from 'drizzle-orm/mysql-core/table';
|
|
2
2
|
import type { MySqlUpdateSetSource } from 'drizzle-orm/mysql-core/query-builders/update';
|
|
3
3
|
import type { TablePolicies } from '../mysqlTable.cjs';
|
|
4
|
+
type DefaultBlocked<T extends MySqlTable, K> = K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['isPrimaryKey'] extends true ? K : T['_']['columns'][K]['_']['isAutoincrement'] extends true ? K : never : never;
|
|
4
5
|
type Blocked<T extends MySqlTable> = {
|
|
5
6
|
[K in keyof MySqlUpdateSetSource<T>]-?: K extends keyof TablePolicies<T> ? TablePolicies<T>[K] extends {
|
|
6
7
|
timestamp: string;
|
|
7
8
|
} | {
|
|
8
9
|
update: 'blocked';
|
|
9
10
|
} ? K : TablePolicies<T>[K] extends {
|
|
10
|
-
update: 'allowed'
|
|
11
|
-
} ? never : K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['
|
|
11
|
+
update: 'allowed';
|
|
12
|
+
} ? never : K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['isPrimaryKey'] extends true ? K : TablePolicies<T>[K] extends {
|
|
13
|
+
update: 'required';
|
|
14
|
+
} ? never : DefaultBlocked<T, K> : never : DefaultBlocked<T, K>;
|
|
12
15
|
}[keyof MySqlUpdateSetSource<T>] & keyof MySqlUpdateSetSource<T>;
|
|
13
16
|
type RequiredKeys<T extends MySqlTable> = {
|
|
14
17
|
[K in keyof MySqlUpdateSetSource<T>]-?: K extends keyof TablePolicies<T> ? TablePolicies<T>[K] extends {
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import type { MySqlTable } from 'drizzle-orm/mysql-core/table';
|
|
2
2
|
import type { MySqlUpdateSetSource } from 'drizzle-orm/mysql-core/query-builders/update';
|
|
3
3
|
import type { TablePolicies } from '../mysqlTable.js';
|
|
4
|
+
type DefaultBlocked<T extends MySqlTable, K> = K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['isPrimaryKey'] extends true ? K : T['_']['columns'][K]['_']['isAutoincrement'] extends true ? K : never : never;
|
|
4
5
|
type Blocked<T extends MySqlTable> = {
|
|
5
6
|
[K in keyof MySqlUpdateSetSource<T>]-?: K extends keyof TablePolicies<T> ? TablePolicies<T>[K] extends {
|
|
6
7
|
timestamp: string;
|
|
7
8
|
} | {
|
|
8
9
|
update: 'blocked';
|
|
9
10
|
} ? K : TablePolicies<T>[K] extends {
|
|
10
|
-
update: 'allowed'
|
|
11
|
-
} ? never : K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['
|
|
11
|
+
update: 'allowed';
|
|
12
|
+
} ? never : K extends keyof T['_']['columns'] ? T['_']['columns'][K]['_']['isPrimaryKey'] extends true ? K : TablePolicies<T>[K] extends {
|
|
13
|
+
update: 'required';
|
|
14
|
+
} ? never : DefaultBlocked<T, K> : never : DefaultBlocked<T, K>;
|
|
12
15
|
}[keyof MySqlUpdateSetSource<T>] & keyof MySqlUpdateSetSource<T>;
|
|
13
16
|
type RequiredKeys<T extends MySqlTable> = {
|
|
14
17
|
[K in keyof MySqlUpdateSetSource<T>]-?: K extends keyof TablePolicies<T> ? TablePolicies<T>[K] extends {
|
package/dist/index.cjs
CHANGED
|
@@ -405,10 +405,14 @@ class MySqlQuery {
|
|
|
405
405
|
const policy = policies[key] ?? {};
|
|
406
406
|
const auto = 'autoIncrement' in column && column.autoIncrement === true;
|
|
407
407
|
const rule = operation === 'insert' ? policy.insert : policy.update;
|
|
408
|
-
const
|
|
408
|
+
const primary = column.primary;
|
|
409
|
+
const blocked = !!policy.timestamp ||
|
|
410
|
+
rule === 'blocked' ||
|
|
411
|
+
(operation === 'update' && primary && rule !== 'allowed') ||
|
|
412
|
+
(auto && rule !== 'allowed' && rule !== 'required');
|
|
409
413
|
if (blocked && Object.hasOwn(values, key))
|
|
410
414
|
throw new Error(`${operation}: column "${key}" is blocked.`);
|
|
411
|
-
if (operation === 'update' && rule === 'required' && values[key] === undefined) {
|
|
415
|
+
if (operation === 'update' && !blocked && rule === 'required' && values[key] === undefined) {
|
|
412
416
|
throw new Error(`update: column "${key}" is required.`);
|
|
413
417
|
}
|
|
414
418
|
if (policy.timestamp && (operation === 'insert' || policy.timestamp === 'updated')) {
|
package/dist/index.esm.js
CHANGED
|
@@ -405,10 +405,14 @@ class MySqlQuery {
|
|
|
405
405
|
const policy = policies[key] ?? {};
|
|
406
406
|
const auto = 'autoIncrement' in column && column.autoIncrement === true;
|
|
407
407
|
const rule = operation === 'insert' ? policy.insert : policy.update;
|
|
408
|
-
const
|
|
408
|
+
const primary = column.primary;
|
|
409
|
+
const blocked = !!policy.timestamp ||
|
|
410
|
+
rule === 'blocked' ||
|
|
411
|
+
(operation === 'update' && primary && rule !== 'allowed') ||
|
|
412
|
+
(auto && rule !== 'allowed' && rule !== 'required');
|
|
409
413
|
if (blocked && Object.hasOwn(values, key))
|
|
410
414
|
throw new Error(`${operation}: column "${key}" is blocked.`);
|
|
411
|
-
if (operation === 'update' && rule === 'required' && values[key] === undefined) {
|
|
415
|
+
if (operation === 'update' && !blocked && rule === 'required' && values[key] === undefined) {
|
|
412
416
|
throw new Error(`update: column "${key}" is required.`);
|
|
413
417
|
}
|
|
414
418
|
if (policy.timestamp && (operation === 'insert' || policy.timestamp === 'updated')) {
|