@@ -5,41 +5,35 @@ import { v4 } from 'uuid'
55const kData = Symbol ( 'kData' )
66const kDatabase = Symbol ( 'kDatabase' )
77
8- export type GenericDatabaseType = {
9- [ k : string ] : any [ ]
10- }
11-
12- export type DatabaseRecord < T > = { _id : string } & T
13-
148type ArrayElement < T > = T extends readonly ( infer ElementType ) [ ]
159 ? ElementType
1610 : never
1711
18- type CollectionRef < T extends GenericDatabaseType , K extends keyof T > = {
12+ type CollectionRef < T extends FsDB . GenericDatabaseType , K extends keyof T > = {
1913 [ kData ] : Array < ArrayElement < T [ K ] > >
20- [ kDatabase ] : FileSystemDatabase < T >
14+ [ kDatabase ] : Database < T >
2115}
2216
23- export default class FileSystemDatabase < T extends GenericDatabaseType > {
17+ export default class Database < T extends FsDB . GenericDatabaseType > {
2418 public [ kData ] : T | null
2519
2620 private constructor ( private filename : string ) {
2721 this [ kData ] = null
2822 }
2923
30- static fromRef < T extends GenericDatabaseType > (
24+ static fromRef < T extends FsDB . GenericDatabaseType > (
3125 filename : string ,
3226 ref : T
33- ) : FileSystemDatabase < T > {
34- const database = new FileSystemDatabase < T > ( filename )
27+ ) : Database < T > {
28+ const database = new Database < T > ( filename )
3529 database [ kData ] = ref
3630 return database
3731 }
3832
39- static async fromFile < T extends GenericDatabaseType > (
33+ static async fromFile < T extends FsDB . GenericDatabaseType > (
4034 filename : string
41- ) : Promise < FileSystemDatabase < T > > {
42- const database = new FileSystemDatabase < T > ( filename )
35+ ) : Promise < Database < T > > {
36+ const database = new Database < T > ( filename )
4337 await database . load ( )
4438 return database
4539 }
@@ -63,8 +57,11 @@ export default class FileSystemDatabase<T extends GenericDatabaseType> {
6357 }
6458}
6559
66- export const collection = < T extends GenericDatabaseType , K extends keyof T > (
67- database : FileSystemDatabase < T > ,
60+ export const collection = <
61+ T extends FsDB . GenericDatabaseType ,
62+ K extends keyof T
63+ > (
64+ database : Database < T > ,
6865 key : K
6966) : CollectionRef < T , K > => {
7067 if ( ! database [ kData ] ! [ key ] ) {
@@ -78,7 +75,7 @@ export const collection = <T extends GenericDatabaseType, K extends keyof T>(
7875}
7976
8077export const createDoc = async <
81- T extends GenericDatabaseType ,
78+ T extends FsDB . GenericDatabaseType ,
8279 R extends keyof T
8380> (
8481 collection : CollectionRef < T , R > ,
@@ -96,7 +93,7 @@ export const createDoc = async <
9693}
9794
9895export const updateDoc = async <
99- T extends GenericDatabaseType ,
96+ T extends FsDB . GenericDatabaseType ,
10097 R extends keyof T
10198> (
10299 collection : CollectionRef < T , R > ,
@@ -115,7 +112,10 @@ export const updateDoc = async <
115112 return collection [ kData ] [ index ]
116113}
117114
118- export const getDoc = async < T extends GenericDatabaseType , R extends keyof T > (
115+ export const getDoc = async <
116+ T extends FsDB . GenericDatabaseType ,
117+ R extends keyof T
118+ > (
119119 collection : CollectionRef < T , R > ,
120120 id : string
121121) => {
@@ -128,14 +128,17 @@ export const getDoc = async <T extends GenericDatabaseType, R extends keyof T>(
128128 return collection [ kData ] [ index ]
129129}
130130
131- export const getDocs = async < T extends GenericDatabaseType , R extends keyof T > (
131+ export const getDocs = async <
132+ T extends FsDB . GenericDatabaseType ,
133+ R extends keyof T
134+ > (
132135 collection : CollectionRef < T , R >
133136) => {
134137 return collection [ kData ]
135138}
136139
137140export const deleteDoc = async <
138- T extends GenericDatabaseType ,
141+ T extends FsDB . GenericDatabaseType ,
139142 R extends keyof T
140143> (
141144 collection : CollectionRef < T , R > ,
0 commit comments