supalite 0.1.12 → 0.2.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.
- package/CHANGELOG.md +6 -37
- package/CHANGE_REPORT_LOG.md +115 -113
- package/dist/query-builder.d.ts +3 -0
- package/dist/query-builder.js +7 -0
- package/dist/types.d.ts +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,46 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [0.1.
|
|
4
|
-
|
|
5
|
-
### Added
|
|
6
|
-
- Views 테이블 조회 기능 추가
|
|
7
|
-
- TableOrViewName 타입 추가로 Tables와 Views 모두 지원
|
|
8
|
-
- View 테이블 조회 예제 코드 추가
|
|
9
|
-
- View 테이블 테스트를 위한 SQL 스크립트 추가
|
|
10
|
-
|
|
11
|
-
## [0.1.11] - 2025-03-02
|
|
12
|
-
|
|
13
|
-
### Fixed
|
|
14
|
-
- 빌드 결과물 업데이트 및 배포 문제 해결
|
|
15
|
-
|
|
16
|
-
## [0.1.10] - 2025-03-02
|
|
17
|
-
|
|
18
|
-
### Fixed
|
|
19
|
-
- order 메서드를 수정하여 컬럼 이름만 전달하는 경우에도 기본적으로 오름차순 정렬이 적용되도록 개선
|
|
20
|
-
- Supabase와의 호환성 개선 (.order('post_index') 형식 지원)
|
|
21
|
-
- order 메서드 사용 예제 추가
|
|
22
|
-
|
|
23
|
-
## [0.1.9] - 2025-03-02
|
|
3
|
+
## [0.1.8] - 2025-03-04
|
|
24
4
|
|
|
25
5
|
### Fixed
|
|
26
|
-
-
|
|
27
|
-
- 타입 단언 없이도 single() 메서드를 사용할 수 있도록 수정
|
|
28
|
-
- single() 메서드 사용 예제 추가
|
|
6
|
+
- 누락된 `dist` 파일들을 포함하도록 수정
|
|
29
7
|
|
|
30
|
-
## [0.1.
|
|
31
|
-
|
|
32
|
-
### Fixed
|
|
33
|
-
- from 메서드의 반환 타입을 수정하여 타입 단언 없이도 배열 메서드를 사용할 수 있도록 개선
|
|
34
|
-
- await 사용 시 자동으로 QueryResult<Row<T, S, K>>를 반환하도록 수정
|
|
35
|
-
- Supabase와의 호환성 개선
|
|
8
|
+
## [0.1.7] - 2025-03-04
|
|
36
9
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- QueryResult 타입의 data 필드가 항상 배열을 반환하도록 수정
|
|
41
|
-
- 쿼리 결과가 없을 때 null 대신 빈 배열([])을 반환하도록 수정
|
|
42
|
-
- 에러 발생 시에도 data 필드가 빈 배열을 반환하도록 수정
|
|
43
|
-
- Supabase와의 호환성 개선
|
|
10
|
+
### Added
|
|
11
|
+
- QueryBuilder에 `match` 메서드 추가
|
|
12
|
+
- `match` 메서드 테스트 코드 작성
|
|
44
13
|
|
|
45
14
|
## [0.1.6] - 2025-03-01
|
|
46
15
|
|
package/CHANGE_REPORT_LOG.md
CHANGED
|
@@ -1,121 +1,123 @@
|
|
|
1
|
-
# 변경
|
|
2
|
-
|
|
3
|
-
## 날짜: 2025-03-02
|
|
4
|
-
## 버전: 0.1.12
|
|
5
|
-
## 기능: Views 테이블 조회 기능 추가
|
|
6
|
-
|
|
7
|
-
### 개요
|
|
8
|
-
이번 업데이트에서는 Supabase 데이터베이스 타입 정의에서 Views 테이블도 조회할 수 있도록 기능을 추가했습니다. 이를 통해 사용자는 일반 테이블뿐만 아니라 데이터베이스 뷰도 동일한 방식으로 조회할 수 있게 되었습니다.
|
|
9
|
-
|
|
10
|
-
### 변경 사항 상세 내용
|
|
11
|
-
|
|
12
|
-
#### 1. 타입 정의 수정 (`src/types.ts`)
|
|
13
|
-
- `ViewName` 타입 추가: 스키마 내의 Views 이름을 참조하는 타입
|
|
14
|
-
- `TableOrViewName` 타입 추가: Tables와 Views를 모두 포함하는 통합 타입
|
|
15
|
-
- `Row`, `InsertRow`, `UpdateRow` 타입 수정: Views도 처리할 수 있도록 조건부 타입 적용
|
|
16
|
-
- Views는 읽기 전용이므로 `InsertRow`와 `UpdateRow`는 Views에 대해 `never` 타입 반환
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
export type ViewName<
|
|
20
|
-
T extends DatabaseSchema,
|
|
21
|
-
S extends SchemaName<T> = SchemaName<T>
|
|
22
|
-
> = keyof NonNullable<T[S]['Views']>;
|
|
23
|
-
|
|
24
|
-
export type TableOrViewName<
|
|
25
|
-
T extends DatabaseSchema,
|
|
26
|
-
S extends SchemaName<T> = SchemaName<T>
|
|
27
|
-
> = TableName<T, S> | ViewName<T, S>;
|
|
28
|
-
|
|
29
|
-
export type Row<
|
|
30
|
-
T extends DatabaseSchema,
|
|
31
|
-
S extends SchemaName<T>,
|
|
32
|
-
K extends TableOrViewName<T, S>
|
|
33
|
-
> = K extends TableName<T, S>
|
|
34
|
-
? T[S]['Tables'][K]['Row']
|
|
35
|
-
: K extends ViewName<T, S>
|
|
36
|
-
? NonNullable<T[S]['Views']>[K]['Row']
|
|
37
|
-
: never;
|
|
38
|
-
```
|
|
1
|
+
# 변경 작업 보고서
|
|
39
2
|
|
|
40
|
-
|
|
41
|
-
- `QueryBuilder` 클래스의 제네릭 타입 매개변수를 `TableOrViewName`으로 변경하여 Views도 처리할 수 있도록 수정
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
export class QueryBuilder<
|
|
45
|
-
T extends DatabaseSchema,
|
|
46
|
-
S extends SchemaName<T> = 'public',
|
|
47
|
-
K extends TableOrViewName<T, S> = TableOrViewName<T, S>
|
|
48
|
-
> implements Promise<QueryResult<Row<T, S, K>> | SingleQueryResult<Row<T, S, K>>> {
|
|
49
|
-
// ...
|
|
50
|
-
}
|
|
51
|
-
```
|
|
3
|
+
## [2025-03-04] 누락된 dist 파일들을 포함하도록 수정
|
|
52
4
|
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
type SchemaWithTables = {
|
|
59
|
-
Tables: {
|
|
60
|
-
[key: string]: {
|
|
61
|
-
Row: any;
|
|
62
|
-
Insert: any;
|
|
63
|
-
Update: any;
|
|
64
|
-
Relationships: unknown[];
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
Views?: {
|
|
68
|
-
[key: string]: {
|
|
69
|
-
Row: any;
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
// ...
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
from<K extends TableOrViewName<T, 'public'>>(
|
|
76
|
-
table: K
|
|
77
|
-
): QueryBuilder<T, 'public', K> & Promise<QueryResult<Row<T, 'public', K>>> & { single(): Promise<SingleQueryResult<Row<T, 'public', K>>> };
|
|
78
|
-
```
|
|
5
|
+
### 작업 내용
|
|
6
|
+
- 빌드 시 생성되는 dist 디렉토리의 파일들이 이전 커밋에 포함되지 않은 문제를 발견했습니다.
|
|
7
|
+
- dist 디렉토리를 삭제하고 다시 빌드하여 누락된 파일들을 생성했습니다.
|
|
8
|
+
- package.json 파일의 버전을 0.1.8로 업데이트했습니다.
|
|
9
|
+
- CHANGELOG.md 파일에 변경 사항을 기록했습니다.
|
|
79
10
|
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
11
|
+
### 변경된 파일
|
|
12
|
+
- dist/*
|
|
13
|
+
- package.json
|
|
14
|
+
- CHANGELOG.md
|
|
15
|
+
|
|
16
|
+
### 개발 과정
|
|
17
|
+
1. dist 디렉토리 삭제
|
|
18
|
+
2. npm run build 명령어 실행
|
|
19
|
+
3. git add . 명령어로 변경된 파일 스테이징
|
|
20
|
+
4. git commit -m "fix: Include missing files in dist directory" 명령어로 커밋
|
|
21
|
+
5. package.json 파일의 버전 업데이트
|
|
22
|
+
6. CHANGELOG.md 파일에 변경 사항 기록
|
|
23
|
+
|
|
24
|
+
### 결론
|
|
25
|
+
이번 작업을 통해 누락되었던 dist 파일들을 커밋에 포함시켰습니다.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## [2025-03-04] QueryBuilder에 match 메서드 추가
|
|
30
|
+
|
|
31
|
+
### 작업 내용
|
|
32
|
+
|
|
33
|
+
1. **`match` 메서드 구현**:
|
|
34
|
+
- `QueryBuilder` 클래스에 `match` 메서드를 추가했습니다.
|
|
35
|
+
- 이 메서드는 객체를 인자로 받아, 객체의 각 키-값 쌍을 `"${key}" = $${index}` 형태의 조건으로 변환하여 `whereConditions` 배열에 추가합니다.
|
|
36
|
+
- 이를 통해 사용자는 객체 리터럴을 사용하여 간편하게 쿼리 조건을 추가할 수 있습니다.
|
|
37
|
+
|
|
38
|
+
2. **테스트용 테이블 생성**:
|
|
39
|
+
- `examples/setup.sql` 파일에 `test_table`을 생성하는 SQL 문을 추가했습니다.
|
|
40
|
+
- 이 테이블은 `match` 메서드의 동작을 테스트하는 데 사용됩니다.
|
|
41
|
+
|
|
42
|
+
3. **테스트용 함수 구현**:
|
|
43
|
+
- `src/test-table.ts` 파일에 `test_table`과 상호작용하는 함수를 작성했습니다.
|
|
44
|
+
- `insertIntoTestTable` 함수는 `test_table`에 데이터를 삽입합니다.
|
|
45
|
+
- `getFromTestTable` 함수는 `test_table`에서 데이터를 조회하고, `match` 메서드를 사용하여 조건을 적용합니다.
|
|
46
|
+
|
|
47
|
+
4. **테스트 코드 작성**:
|
|
48
|
+
- `examples/tests/query-builder.test.ts` 파일에 `match` 메서드를 테스트하는 코드를 작성했습니다.
|
|
49
|
+
- 이 코드는 `test_table`에 데이터를 삽입하고, `match` 메서드를 사용하여 다양한 조건으로 데이터를 조회합니다.
|
|
50
|
+
- 조회 결과가 예상과 일치하는지 확인합니다.
|
|
51
|
+
|
|
52
|
+
5. **테스트 실행**:
|
|
53
|
+
- `bun examples/tests/query-builder.test.ts` 명령어를 사용하여 테스트를 실행했습니다.
|
|
54
|
+
- 모든 테스트가 성공적으로 완료되었습니다.
|
|
107
55
|
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
|
|
112
|
-
|
|
56
|
+
6. **문서화**:
|
|
57
|
+
- CHANGELOG.md 파일에 `match` 메서드 추가 사항을 기록했습니다.
|
|
58
|
+
- 버전을 0.1.7로 업데이트했습니다.
|
|
59
|
+
|
|
60
|
+
### 변경된 파일
|
|
61
|
+
|
|
62
|
+
1. `src/query-builder.ts`: `match` 메서드 추가
|
|
63
|
+
2. `examples/setup.sql`: `test_table` 생성 SQL 문 추가
|
|
64
|
+
3. `src/test-table.ts`: `test_table` 관련 함수 구현
|
|
65
|
+
4. `examples/tests/query-builder.test.ts`: `match` 메서드 테스트 코드 작성
|
|
66
|
+
5. `CHANGELOG.md`: 변경 사항 문서화 및 버전 업데이트
|
|
67
|
+
|
|
68
|
+
### 개발 과정
|
|
69
|
+
|
|
70
|
+
1. `feature/add-match-method` 브랜치 생성
|
|
71
|
+
2. `QueryBuilder` 클래스에 `match` 메서드 구현
|
|
72
|
+
3. `examples/setup.sql` 파일에 `test_table` 생성 SQL 문 추가
|
|
73
|
+
4. `src/test-table.ts` 파일에 `test_table` 관련 함수 구현
|
|
74
|
+
5. `examples/tests/query-builder.test.ts` 파일에 `match` 메서드 테스트 코드 작성
|
|
75
|
+
6. 테스트 실행 및 결과 확인
|
|
76
|
+
7. 문서화 및 버전 업데이트
|
|
77
|
+
8. 변경 사항 커밋
|
|
78
|
+
9. main 브랜치로 병합
|
|
113
79
|
|
|
114
80
|
### 테스트 결과
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
81
|
+
|
|
82
|
+
테스트 결과는 다음과 같습니다:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
Result 1: [
|
|
86
|
+
{
|
|
87
|
+
id: 1
|
|
88
|
+
name: "test1"
|
|
89
|
+
value: 10
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
Result 2: [
|
|
93
|
+
{
|
|
94
|
+
id: 2
|
|
95
|
+
name: "test2"
|
|
96
|
+
value: 20
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
Result 3: [
|
|
100
|
+
{
|
|
101
|
+
id: 1
|
|
102
|
+
name: "test1"
|
|
103
|
+
value: 10
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
Result 4: null
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Result1, 2, 3은 예상대로 출력되었고, Result 4는 존재하지 않는 데이터에 대한 결과로 null을 반환했습니다.
|
|
119
110
|
|
|
120
111
|
### 결론
|
|
121
|
-
|
|
112
|
+
|
|
113
|
+
이번 작업을 통해 `QueryBuilder` 클래스에 `match` 메서드를 추가하여, 사용자가 객체 리터럴을 사용하여 간편하게 쿼리 조건을 추가할 수 있게 되었습니다. 또한, 테스트 코드를 통해 `match` 메서드의 동작을 검증했습니다.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
# 변경 작업 보고서
|
|
118
|
+
|
|
119
|
+
## [2025-03-01] corepack을 통한 다중 패키지 관리자 지원 추가
|
|
120
|
+
|
|
121
|
+
### 작업 내용
|
|
122
|
+
|
|
123
|
+
... (생략) ...
|
package/dist/query-builder.d.ts
CHANGED
|
@@ -27,6 +27,9 @@ export declare class QueryBuilder<T extends DatabaseSchema, S extends SchemaName
|
|
|
27
27
|
count?: 'exact' | 'planned' | 'estimated';
|
|
28
28
|
head?: boolean;
|
|
29
29
|
}): this;
|
|
30
|
+
match(conditions: {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
}): this;
|
|
30
33
|
eq(column: string, value: any): this;
|
|
31
34
|
neq(column: string, value: any): this;
|
|
32
35
|
is(column: string, value: any): this;
|
package/dist/query-builder.js
CHANGED
|
@@ -32,6 +32,13 @@ class QueryBuilder {
|
|
|
32
32
|
this.headOption = options?.head;
|
|
33
33
|
return this;
|
|
34
34
|
}
|
|
35
|
+
match(conditions) {
|
|
36
|
+
for (const key in conditions) {
|
|
37
|
+
this.whereConditions.push(`"${key}" = $${this.whereValues.length + 1}`);
|
|
38
|
+
this.whereValues.push(conditions[key]);
|
|
39
|
+
}
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
35
42
|
eq(column, value) {
|
|
36
43
|
this.whereConditions.push(`"${column}" = $${this.whereValues.length + 1}`);
|
|
37
44
|
this.whereValues.push(value);
|
package/dist/types.d.ts
CHANGED
|
@@ -40,8 +40,8 @@ export type TableOrViewName<T extends DatabaseSchema, S extends SchemaName<T> =
|
|
|
40
40
|
export type Row<T extends DatabaseSchema, S extends SchemaName<T>, K extends TableOrViewName<T, S>> = K extends TableName<T, S> ? T[S]['Tables'][K]['Row'] : K extends ViewName<T, S> ? NonNullable<T[S]['Views']>[K]['Row'] : never;
|
|
41
41
|
export type InsertRow<T extends DatabaseSchema, S extends SchemaName<T>, K extends TableOrViewName<T, S>> = K extends TableName<T, S> ? T[S]['Tables'][K]['Insert'] : never;
|
|
42
42
|
export type UpdateRow<T extends DatabaseSchema, S extends SchemaName<T>, K extends TableOrViewName<T, S>> = K extends TableName<T, S> ? T[S]['Tables'][K]['Update'] & {
|
|
43
|
-
modified_at?: string;
|
|
44
|
-
updated_at?: string;
|
|
43
|
+
modified_at?: string | null;
|
|
44
|
+
updated_at?: string | null;
|
|
45
45
|
} : never;
|
|
46
46
|
export type EnumType<T extends DatabaseSchema, S extends SchemaName<T>, E extends keyof NonNullable<T[S]['Enums']>> = NonNullable<T[S]['Enums']>[E];
|
|
47
47
|
export interface SupaliteConfig {
|