Skip to content

Commit 64770a1

Browse files
fix: Incomplete generation #8
1 parent 0802c95 commit 64770a1

31 files changed

+944
-481
lines changed

.vscode/settings.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"editor.formatOnSave": true,
3+
"editor.defaultFormatter": "biomejs.biome",
4+
"editor.codeActionsOnSave": {
5+
"quickfix.biome": "explicit",
6+
"source.organizeImports.biome": "explicit"
7+
},
8+
"[javascript]": {
9+
"editor.defaultFormatter": "biomejs.biome"
10+
},
11+
"[typescript]": {
12+
"editor.defaultFormatter": "biomejs.biome"
13+
},
14+
"[json]": {
15+
"editor.defaultFormatter": "biomejs.biome"
16+
}
17+
}

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,33 @@ They serve as safe spaces for your customizations, changes, and enhancements:
126126
**Customization Freedom**: You can confidently make modifications and enhancements in these subfolders without worrying about them being altered by future executions of the tool.
127127
This design allows you to tailor the generated code to your project's specific requirements, ensuring a seamless development experience.
128128

129+
## Mapping
130+
131+
### Basic Type
132+
133+
| SurrealQL | Zod (input) | Zod (output) |
134+
|-----------|---|---|
135+
| TYPE number | z.number() | z.number() |
136+
| TYPE option\<number\> | z.number().optional() | z.number().optional() |
137+
| TYPE string | z.string() | z.string() |
138+
| TYPE option\<string\> | z.string().optional() | z.string().optional() |
139+
| TYPE datetime | z.string().datetime() | z.string().datetime() |
140+
| TYPE option\<datetime\> | z.string().datetime().optional() | z.string().datetime().optional() |
141+
| TYPE bool | z.boolean() | z.boolean() |
142+
| TYPE option\<bool\> | z.boolean().optional() | z.boolean().optional() |
143+
| TYPE object | z.object({}) | z.object({}) |
144+
| TYPE option\<object\> | z.object({}).optional() | z.object({}).optional() |
145+
| TYPE array | z.array() | z.array(z.any()) |
146+
| TYPE option\<array\> | z.array(z.any()).optional() | z.array(z.any()).optional() |
147+
| TYPE array\<string\> | z.array() | z.array(z.string()) |
148+
| TYPE option\<array\<string\>\> | z.array(z.string()).optional() | z.array(z.string()).optional() |
149+
| TYPE array\<number\> | z.array() | z.array(z.number()) |
150+
| TYPE option\<array\<number\>\> | z.array(z.number()).optional() | z.array(z.number()).optional() |
151+
| TYPE array\<bool\> | z.array() | z.array(z.boolean()) |
152+
| TYPE option\<array\<bool\>\> | z.array(z.boolean()).optional() | z.array(z.boolean()).optional() |
153+
| TYPE record | z.any() | z.any() |
154+
| TYPE option\<record\> | z.any() | z.any() |
155+
129156
---
130157

131158
If you like this tool, I please you, to give a star ⭐️ on github:

biome.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/1.7.2/schema.json",
2+
"$schema": "https://biomejs.dev/schemas/1.8.0/schema.json",
33
"organizeImports": {
44
"enabled": true
55
},
@@ -8,7 +8,7 @@
88
"rules": {
99
"recommended": true
1010
},
11-
"ignore": ["dist/**", "node_modules/**", ".tshy/**", "./out/**"]
11+
"ignore": ["dist/**", "node_modules/**", ".tshy/**", "./out/**", "./client_generated/**"]
1212
},
1313
"formatter": {
1414
"ignore": ["dist/**", "node_modules/**", ".tshy/**", "./out/**"],
@@ -24,7 +24,7 @@
2424
"enabled": true,
2525
"semicolons": "asNeeded",
2626
"quoteStyle": "single",
27-
"trailingComma": "all",
27+
"trailingCommas": "all",
2828
"arrowParentheses": "asNeeded"
2929
}
3030
}

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@sebastianwessel/surql-gen",
33
"private": false,
4-
"version": "2.0.0",
4+
"version": "2.1.0",
55
"engines": {
66
"node": ">=18"
77
},
@@ -40,7 +40,8 @@
4040
"scripts": {
4141
"start": "node dist/esm/index.js",
4242
"dev": "tsx src/index.ts",
43-
"lint": "npx @biomejs/biome check --apply .",
43+
"build": "tshy",
44+
"lint": "npx @biomejs/biome check --write .",
4445
"test": "vitest",
4546
"prepare": "tshy"
4647
},

src/config/configFileSchema.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,4 @@ export const configFileSchema = z.object({
99
password: z.string().default('root'),
1010
outputFolder: z.string().default('client_generated'),
1111
generateClient: z.boolean().default(true),
12-
lib: z.enum(['surrealdb.js', 'surrealdb.node']).default('surrealdb.js'),
1312
})

src/database/db.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ export const connectDb = async (config: Config) => {
1515
console.log('connect to database')
1616
db = new Surreal()
1717
await db.connect(config.surreal)
18-
await db.use({
19-
namespace: config.ns,
18+
await db.use({
19+
namespace: config.ns,
2020
database: config.db,
21-
})
21+
})
2222
await db.signin({
2323
username: config.username,
2424
password: config.password,
@@ -28,7 +28,7 @@ export const connectDb = async (config: Config) => {
2828
export const insertDefinitions = async (content: string) => {
2929
const db = getDb()
3030
const result = await db.query(content, {})
31-
console.debug('insertDefinitions:', JSON.stringify(result, null, 2))
31+
console.log('definitions written to database')
3232
}
3333

3434
export const closeDb = async () => {

src/database/getAllTableNames.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import { getDb } from './db.js'
33
export const getAllTableNames = async () => {
44
const db = getDb()
55

6-
type InfoDB = {
7-
analyzers: Record<string,unknown>
8-
functions: Record<string,unknown>
9-
models: Record<string,unknown>
10-
params: Record<string,unknown>
11-
scopes: Record<string,unknown>
12-
tables: Record<string,string>
13-
tokens: Record<string,unknown>
14-
users: Record<string,unknown>
15-
}[]
6+
type InfoDB = {
7+
analyzers: Record<string, unknown>
8+
functions: Record<string, unknown>
9+
models: Record<string, unknown>
10+
params: Record<string, unknown>
11+
scopes: Record<string, unknown>
12+
tables: Record<string, string>
13+
tokens: Record<string, unknown>
14+
users: Record<string, unknown>
15+
}[]
1616

1717
const result = await db.query<InfoDB>('INFO FOR DB;', {})
1818
if (!result[0]?.tables) {

src/database/getTableFields.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { getDb } from './db.js'
22

33
type InfoTable = {
4-
events: Record<string,unknown>
5-
fields: Record<string,string>
6-
indexes: Record<string,unknown>
7-
lives: Record<string,unknown>
8-
tables: Record<string,unknown>
4+
events: Record<string, unknown>
5+
fields: Record<string, string>
6+
indexes: Record<string, unknown>
7+
lives: Record<string, unknown>
8+
tables: Record<string, unknown>
99
}[]
1010

1111
export const getTableFields = async (tableName: string) => {

src/genClient/generateClientJs.ts

Lines changed: 70 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,58 +27,112 @@ export const generateClientJs = async (outputFolder: string, tableNames: string[
2727
const repoFileName = resolve(clientTableFolder, `get${tableNameFirstUpper}Repository.ts`)
2828
if (!existsSync(repoFileName)) {
2929
const file = createWriteStream(repoFileName)
30-
file.write(getRepositoryContent(lib, tableNameFirstUpper))
30+
await new Promise((resolve, reject) =>
31+
file.write(getRepositoryContent(lib, tableNameFirstUpper), err => {
32+
if (err) {
33+
console.error(err)
34+
reject(err)
35+
} else {
36+
resolve(true)
37+
}
38+
}),
39+
)
3140
file.close()
3241
}
3342

3443
const createFileName = resolve(clientTableFolder, `create${tableNameFirstUpper}.ts`)
35-
if (!existsSync(repoFileName)) {
44+
if (!existsSync(createFileName)) {
3645
const file = createWriteStream(createFileName)
37-
file.write(getCreateEntityFileContent(lib, tableName, name))
46+
await new Promise((resolve, reject) =>
47+
file.write(getCreateEntityFileContent(lib, tableName, name), err => {
48+
if (err) {
49+
console.error(err)
50+
reject(err)
51+
} else {
52+
resolve(true)
53+
}
54+
}),
55+
)
3856
file.close()
3957
console.log(` ✅ [${tableName}]: create${tableNameFirstUpper}.ts`)
4058
} else {
41-
console.log(` [${tableName}]: create${tableNameFirstUpper}.ts already exists`)
59+
console.log(` [${tableName}]: create${tableNameFirstUpper}.ts already exists`)
4260
}
4361

4462
const updateFileName = resolve(clientTableFolder, `update${tableNameFirstUpper}.ts`)
45-
if (!existsSync(repoFileName)) {
63+
if (!existsSync(updateFileName)) {
4664
const file = createWriteStream(updateFileName)
47-
file.write(getUpdateEntityFileContent(lib, tableName))
65+
await new Promise((resolve, reject) =>
66+
file.write(getUpdateEntityFileContent(lib, tableName), err => {
67+
if (err) {
68+
console.error(err)
69+
reject(err)
70+
} else {
71+
resolve(true)
72+
}
73+
}),
74+
)
4875
file.close()
4976
console.log(` ✅ [${tableName}]: update${tableNameFirstUpper}.ts`)
5077
} else {
51-
console.log(` [${tableName}]: update${tableNameFirstUpper}.ts already exists`)
78+
console.log(` [${tableName}]: update${tableNameFirstUpper}.ts already exists ${updateFileName}`)
5279
}
5380

5481
const deleteFileName = resolve(clientTableFolder, `delete${tableNameFirstUpper}.ts`)
55-
if (!existsSync(repoFileName)) {
82+
if (!existsSync(deleteFileName)) {
5683
const file = createWriteStream(deleteFileName)
57-
file.write(getDeleteEntityFileContent(lib, tableName))
84+
await new Promise((resolve, reject) =>
85+
file.write(getDeleteEntityFileContent(lib, tableName), err => {
86+
if (err) {
87+
console.error(err)
88+
reject(err)
89+
} else {
90+
resolve(true)
91+
}
92+
}),
93+
)
5894
file.close()
5995
console.log(` ✅ [${tableName}]: delete${tableNameFirstUpper}.ts`)
6096
} else {
61-
console.log(` [${tableName}]: delete${tableNameFirstUpper}.ts already exists`)
97+
console.log(` [${tableName}]: delete${tableNameFirstUpper}.ts already exists`)
6298
}
6399

64100
const getAllFileName = resolve(clientTableFolder, `getAll${tableNameFirstUpper}s.ts`)
65-
if (!existsSync(repoFileName)) {
101+
if (!existsSync(getAllFileName)) {
66102
const file = createWriteStream(getAllFileName)
67-
file.write(getAllEntityFileContent(lib, tableName, name))
103+
await new Promise((resolve, reject) =>
104+
file.write(getAllEntityFileContent(lib, tableName, name), err => {
105+
if (err) {
106+
console.error(err)
107+
reject(err)
108+
} else {
109+
resolve(true)
110+
}
111+
}),
112+
)
68113
file.close()
69114
console.log(` ✅ [${tableName}]: getAll${tableNameFirstUpper}s.ts`)
70115
} else {
71-
console.log(` [${tableName}]: getAll${tableNameFirstUpper}s.ts already exists`)
116+
console.log(` [${tableName}]: getAll${tableNameFirstUpper}s.ts already exists`)
72117
}
73118

74119
const getByIdFileName = resolve(clientTableFolder, `get${tableNameFirstUpper}ById.ts`)
75-
if (!existsSync(repoFileName)) {
120+
if (!existsSync(getByIdFileName)) {
76121
const file = createWriteStream(getByIdFileName)
77-
file.write(getByIdEntityFileContent(lib, tableName))
122+
await new Promise((resolve, reject) =>
123+
file.write(getByIdEntityFileContent(lib, tableName), err => {
124+
if (err) {
125+
console.error(err)
126+
reject(err)
127+
} else {
128+
resolve(true)
129+
}
130+
}),
131+
)
78132
file.close()
79133
console.log(` ✅ [${tableName}]: get${tableNameFirstUpper}ById.ts`)
80134
} else {
81-
console.log(` [${tableName}]: get${tableNameFirstUpper}ById.ts already exists`)
135+
console.log(` [${tableName}]: get${tableNameFirstUpper}ById.ts already exists`)
82136
}
83137
}
84138
}

src/genClient/getAllEntityFileContent.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,7 @@ import type { Surreal } from "${lib}";
1010
import type { ${entityTypeName} } from "../../schema/${entityName}/${entityName}Types.js";
1111
1212
export const getAll${entityNameFirstUpper}s = async function (db: Surreal) {
13-
14-
const result = await db.query<[${entityTypeName}[]]>("SELECT * FROM ${tableName}", {});
15-
16-
if(result[0].status==="ERR") {
17-
throw new Error('[DB_ERR] '+result[0].result)
18-
}
19-
20-
return result[0].result;
13+
return db.select<${entityTypeName}>("${tableName}")
2114
};
2215
`
2316
}

0 commit comments

Comments
 (0)