prostgles-server 4.2.158 → 4.2.160
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/dist/Auth/AuthTypes.d.ts +4 -8
- package/dist/Auth/AuthTypes.d.ts.map +1 -1
- package/dist/Auth/setAuthProviders.d.ts.map +1 -1
- package/dist/Auth/setAuthProviders.js +4 -5
- package/dist/Auth/setAuthProviders.js.map +1 -1
- package/dist/Auth/setEmailProvider.js +3 -3
- package/dist/Auth/setEmailProvider.js.map +1 -1
- package/package.json +1 -1
- package/lib/Auth/AuthHandler.ts +0 -436
- package/lib/Auth/AuthTypes.ts +0 -285
- package/lib/Auth/getSafeReturnURL.ts +0 -35
- package/lib/Auth/sendEmail.ts +0 -83
- package/lib/Auth/setAuthProviders.ts +0 -129
- package/lib/Auth/setEmailProvider.ts +0 -85
- package/lib/Auth/setupAuthRoutes.ts +0 -161
- package/lib/DBEventsManager.ts +0 -178
- package/lib/DBSchemaBuilder.ts +0 -225
- package/lib/DboBuilder/DboBuilder.ts +0 -319
- package/lib/DboBuilder/DboBuilderTypes.ts +0 -361
- package/lib/DboBuilder/QueryBuilder/Functions.ts +0 -1153
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +0 -288
- package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +0 -263
- package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +0 -271
- package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +0 -136
- package/lib/DboBuilder/QueryBuilder/prepareHaving.ts +0 -22
- package/lib/DboBuilder/QueryStreamer.ts +0 -250
- package/lib/DboBuilder/TableHandler/DataValidator.ts +0 -428
- package/lib/DboBuilder/TableHandler/TableHandler.ts +0 -205
- package/lib/DboBuilder/TableHandler/delete.ts +0 -115
- package/lib/DboBuilder/TableHandler/insert.ts +0 -183
- package/lib/DboBuilder/TableHandler/insertTest.ts +0 -78
- package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +0 -62
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +0 -134
- package/lib/DboBuilder/TableHandler/update.ts +0 -126
- package/lib/DboBuilder/TableHandler/updateBatch.ts +0 -49
- package/lib/DboBuilder/TableHandler/updateFile.ts +0 -48
- package/lib/DboBuilder/TableHandler/upsert.ts +0 -34
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +0 -393
- package/lib/DboBuilder/ViewHandler/count.ts +0 -38
- package/lib/DboBuilder/ViewHandler/find.ts +0 -153
- package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +0 -73
- package/lib/DboBuilder/ViewHandler/getExistsFilters.ts +0 -74
- package/lib/DboBuilder/ViewHandler/getInfo.ts +0 -32
- package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +0 -84
- package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +0 -96
- package/lib/DboBuilder/ViewHandler/parseFieldFilter.ts +0 -105
- package/lib/DboBuilder/ViewHandler/parseJoinPath.ts +0 -208
- package/lib/DboBuilder/ViewHandler/prepareSortItems.ts +0 -163
- package/lib/DboBuilder/ViewHandler/prepareWhere.ts +0 -90
- package/lib/DboBuilder/ViewHandler/size.ts +0 -37
- package/lib/DboBuilder/ViewHandler/subscribe.ts +0 -118
- package/lib/DboBuilder/ViewHandler/validateViewRules.ts +0 -70
- package/lib/DboBuilder/dboBuilderUtils.ts +0 -222
- package/lib/DboBuilder/getColumns.ts +0 -114
- package/lib/DboBuilder/getCondition.ts +0 -201
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +0 -190
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +0 -426
- package/lib/DboBuilder/insertNestedRecords.ts +0 -355
- package/lib/DboBuilder/parseUpdateRules.ts +0 -187
- package/lib/DboBuilder/prepareShortestJoinPaths.ts +0 -186
- package/lib/DboBuilder/runSQL.ts +0 -182
- package/lib/DboBuilder/runTransaction.ts +0 -50
- package/lib/DboBuilder/sqlErrCodeToMsg.ts +0 -254
- package/lib/DboBuilder/uploadFile.ts +0 -69
- package/lib/Event_Trigger_Tags.ts +0 -118
- package/lib/FileManager/FileManager.ts +0 -358
- package/lib/FileManager/getValidatedFileType.ts +0 -69
- package/lib/FileManager/initFileManager.ts +0 -187
- package/lib/FileManager/upload.ts +0 -62
- package/lib/FileManager/uploadStream.ts +0 -79
- package/lib/Filtering.ts +0 -463
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +0 -502
- package/lib/JSONBValidation/validation.ts +0 -143
- package/lib/Logging.ts +0 -127
- package/lib/PostgresNotifListenManager.ts +0 -143
- package/lib/Prostgles.ts +0 -485
- package/lib/ProstglesTypes.ts +0 -196
- package/lib/PubSubManager/PubSubManager.ts +0 -609
- package/lib/PubSubManager/addSub.ts +0 -138
- package/lib/PubSubManager/addSync.ts +0 -141
- package/lib/PubSubManager/getCreatePubSubManagerError.ts +0 -72
- package/lib/PubSubManager/getPubSubManagerInitQuery.ts +0 -662
- package/lib/PubSubManager/initPubSubManager.ts +0 -79
- package/lib/PubSubManager/notifListener.ts +0 -173
- package/lib/PubSubManager/orphanTriggerCheck.ts +0 -70
- package/lib/PubSubManager/pushSubData.ts +0 -55
- package/lib/PublishParser/PublishParser.ts +0 -162
- package/lib/PublishParser/getFileTableRules.ts +0 -124
- package/lib/PublishParser/getSchemaFromPublish.ts +0 -141
- package/lib/PublishParser/getTableRulesWithoutFileTable.ts +0 -177
- package/lib/PublishParser/publishTypesAndUtils.ts +0 -399
- package/lib/RestApi.ts +0 -127
- package/lib/SchemaWatch/SchemaWatch.ts +0 -90
- package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +0 -3
- package/lib/SchemaWatch/getValidatedWatchSchemaType.ts +0 -45
- package/lib/SchemaWatch/getWatchSchemaTagList.ts +0 -27
- package/lib/SyncReplication.ts +0 -557
- package/lib/TableConfig/TableConfig.ts +0 -468
- package/lib/TableConfig/getColumnDefinitionQuery.ts +0 -111
- package/lib/TableConfig/getConstraintDefinitionQueries.ts +0 -95
- package/lib/TableConfig/getFutureTableSchema.ts +0 -64
- package/lib/TableConfig/getPGIndexes.ts +0 -53
- package/lib/TableConfig/getTableColumnQueries.ts +0 -129
- package/lib/TableConfig/initTableConfig.ts +0 -326
- package/lib/index.ts +0 -13
- package/lib/initProstgles.ts +0 -319
- package/lib/onSocketConnected.ts +0 -102
- package/lib/runClientRequest.ts +0 -129
- package/lib/shortestPath.ts +0 -122
- package/lib/typeTests/DBoGenerated.d.ts +0 -320
- package/lib/typeTests/dboTypeCheck.ts +0 -81
- package/lib/utils.ts +0 -15
- package/tests/client/hooks.spec.ts +0 -205
- package/tests/client/index.ts +0 -139
- package/tests/client/package-lock.json +0 -637
- package/tests/client/package.json +0 -26
- package/tests/client/renderReactHook.ts +0 -177
- package/tests/client/tsconfig.json +0 -15
- package/tests/client/useProstgles.spec.ts +0 -120
- package/tests/clientFileTests.spec.ts +0 -102
- package/tests/clientOnlyQueries.spec.ts +0 -667
- package/tests/clientRestApi.spec.ts +0 -82
- package/tests/config_test/DBoGenerated.d.ts +0 -407
- package/tests/config_test/index.html +0 -109
- package/tests/config_test/index.js +0 -86
- package/tests/config_test/index.js.map +0 -1
- package/tests/config_test/index.ts +0 -91
- package/tests/config_test/init.sql +0 -48
- package/tests/config_test/package.json +0 -29
- package/tests/config_test/tsconfig.json +0 -23
- package/tests/config_testDBoGenerated.d.ts +0 -407
- package/tests/isomorphicQueries.spec.ts +0 -1493
- package/tests/server/DBoGenerated.d.ts +0 -537
- package/tests/server/index.html +0 -73
- package/tests/server/index.ts +0 -289
- package/tests/server/init.sql +0 -224
- package/tests/server/package-lock.json +0 -2164
- package/tests/server/package.json +0 -25
- package/tests/server/publishTypeCheck.ts +0 -136
- package/tests/server/server.ts +0 -35
- package/tests/server/testPublish.ts +0 -147
- package/tests/server/testTableConfig.ts +0 -156
- package/tests/server/tsconfig.json +0 -22
- package/tests/serverOnlyQueries.spec.ts +0 -32
- package/tests/test.sh +0 -20
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "server_tests",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start": "tsc-watch --onSuccess \"node dist/server/index.js\"",
|
|
8
|
-
"dev": "NOSTOP=true npm start",
|
|
9
|
-
"build": "rm -rf ./node_modules/* && rm -rf ./media/* && rm -rf ./dist/* && npm i && tsc",
|
|
10
|
-
"test-server": "TEST_TYPE=server node --trace-uncaught --test dist/server/index.js ",
|
|
11
|
-
"test-client": "TEST_TYPE=client node --trace-uncaught --test dist/server/index.js "
|
|
12
|
-
},
|
|
13
|
-
"author": "",
|
|
14
|
-
"license": "ISC",
|
|
15
|
-
"dependencies": {
|
|
16
|
-
"express": "^4.21.1",
|
|
17
|
-
"prostgles-server": "file:../.."
|
|
18
|
-
},
|
|
19
|
-
"devDependencies": {
|
|
20
|
-
"@types/node": "^20.9.2",
|
|
21
|
-
"socket.io": "^4.8.1",
|
|
22
|
-
"tsc-watch": "^6.2.1",
|
|
23
|
-
"typescript": "^5.3.3"
|
|
24
|
-
}
|
|
25
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { DBSchemaGenerated } from "./DBoGenerated";
|
|
3
|
-
|
|
4
|
-
import { PublishFullyTyped } from "prostgles-server/dist/DBSchemaBuilder";
|
|
5
|
-
export const testPublishTypes = () => {
|
|
6
|
-
(() => {
|
|
7
|
-
const p1: PublishFullyTyped<DBSchemaGenerated> = {
|
|
8
|
-
items: {
|
|
9
|
-
delete: "*",
|
|
10
|
-
select: {
|
|
11
|
-
fields: { h: 1, id: 1 },
|
|
12
|
-
forcedFilter: { $and: [
|
|
13
|
-
{ h: { $overlaps: ["23", "32"]} },
|
|
14
|
-
{ $existsJoined: { items: { "h.$eq": [] } } }
|
|
15
|
-
]}
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
items3: "*"
|
|
19
|
-
}
|
|
20
|
-
const p2: PublishFullyTyped<DBSchemaGenerated> = "*"
|
|
21
|
-
|
|
22
|
-
const p11: PublishFullyTyped = {
|
|
23
|
-
items: {
|
|
24
|
-
delete: "*",
|
|
25
|
-
select: {
|
|
26
|
-
fields: { h: 1, id: 1 },
|
|
27
|
-
forcedFilter: {
|
|
28
|
-
$and: [
|
|
29
|
-
{ h: { $overlaps: ["23", "32"]} },
|
|
30
|
-
{ $existsJoined: { items: { "h.$eq": [] } } }
|
|
31
|
-
]
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
items3: "*"
|
|
36
|
-
};
|
|
37
|
-
const p123: PublishFullyTyped<DBSchemaGenerated> = p11;
|
|
38
|
-
//@ts-ignore
|
|
39
|
-
const p1234: PublishFullyTyped = p1;
|
|
40
|
-
|
|
41
|
-
const p12: PublishFullyTyped = "*";
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const res: PublishFullyTyped = {
|
|
46
|
-
shapes: "*",
|
|
47
|
-
items: "*",
|
|
48
|
-
items2: "*",
|
|
49
|
-
items3: "*",
|
|
50
|
-
v_items: "*",
|
|
51
|
-
various: "*",
|
|
52
|
-
tr1: "*",
|
|
53
|
-
tr2: "*",
|
|
54
|
-
tr3: "*",
|
|
55
|
-
planes: {
|
|
56
|
-
select: "*",
|
|
57
|
-
update: "*",
|
|
58
|
-
insert: "*",
|
|
59
|
-
delete: "*",
|
|
60
|
-
sync: {
|
|
61
|
-
id_fields: ["id"],
|
|
62
|
-
synced_field: "last_updated"
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
items4: {
|
|
67
|
-
select: Math.random()? "*" : {
|
|
68
|
-
fields: { name: 0 },
|
|
69
|
-
forcedFilter: { name: "abc" }
|
|
70
|
-
},
|
|
71
|
-
insert: "*",
|
|
72
|
-
update: "*",
|
|
73
|
-
delete: "*"
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
items4_pub: "*",
|
|
77
|
-
"*": {
|
|
78
|
-
select: { fields: { "*": 0 }},
|
|
79
|
-
insert: "*",
|
|
80
|
-
update: "*",
|
|
81
|
-
},
|
|
82
|
-
[`"*"`]: {
|
|
83
|
-
select: { fields: { [`"*"`]: 0 }},
|
|
84
|
-
insert: "*",
|
|
85
|
-
update: "*",
|
|
86
|
-
},
|
|
87
|
-
obj_table: "*",
|
|
88
|
-
media: "*",
|
|
89
|
-
insert_rules: {
|
|
90
|
-
insert: {
|
|
91
|
-
fields: "*",
|
|
92
|
-
returningFields: { name: 1 },
|
|
93
|
-
validate: async ({ row }) => {
|
|
94
|
-
if(row.name === "a") row.name = "b"
|
|
95
|
-
return row
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
uuid_text: {
|
|
100
|
-
insert: {
|
|
101
|
-
fields: "*",
|
|
102
|
-
forcedData: {
|
|
103
|
-
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
update: {
|
|
107
|
-
fields: [],
|
|
108
|
-
dynamicFields: [{
|
|
109
|
-
fields: { id: 1 },
|
|
110
|
-
filter: {
|
|
111
|
-
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
112
|
-
}
|
|
113
|
-
}]
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const res2: PublishFullyTyped<DBSchemaGenerated> = res;
|
|
119
|
-
const res3: PublishFullyTyped<DBSchemaGenerated> = {
|
|
120
|
-
items: {
|
|
121
|
-
select: {
|
|
122
|
-
fields: {
|
|
123
|
-
h: 1
|
|
124
|
-
},
|
|
125
|
-
forcedFilter: {
|
|
126
|
-
// "h.$eq": ["2"]
|
|
127
|
-
$and: [
|
|
128
|
-
{ "h.$eq": ["2"] }
|
|
129
|
-
]
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
})
|
|
136
|
-
}
|
package/tests/server/server.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import prostgles from "prostgles-server";
|
|
4
|
-
import { DBSchemaGenerated } from "./DBoGenerated";
|
|
5
|
-
|
|
6
|
-
prostgles<DBSchemaGenerated>({
|
|
7
|
-
dbConnection: {
|
|
8
|
-
connectionString: process.env.DB_CONNECTION
|
|
9
|
-
},
|
|
10
|
-
tsGeneratedTypesDir: path.join(__dirname + '/'),
|
|
11
|
-
tableConfig: {
|
|
12
|
-
user: {
|
|
13
|
-
columns: {
|
|
14
|
-
id: "SERIAL PRIMARY KEY",
|
|
15
|
-
email: "TEXT NOT NULL",
|
|
16
|
-
status: { enum: ["active", "disabled", "pending"] },
|
|
17
|
-
preferences: {
|
|
18
|
-
jsonbSchemaType: {
|
|
19
|
-
showIntro: { type: "boolean", optional: true },
|
|
20
|
-
theme: { enum: ["light", "dark", "auto"], optional: true },
|
|
21
|
-
two_factor_auth: { oneOf: [
|
|
22
|
-
{ type: { enum: ["app"] } }
|
|
23
|
-
] }
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
onReady: async (db) => {
|
|
30
|
-
const user = await db.users.findOne({ id: 123 });
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// user.preferences.theme =
|
|
34
|
-
}
|
|
35
|
-
});
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Publish, PublishTableRule } from "prostgles-server/dist/PublishParser/PublishParser";
|
|
3
|
-
import { DBSchemaGenerated } from "./DBoGenerated";
|
|
4
|
-
import type { PublishFullyTyped } from "prostgles-server/dist/DBSchemaBuilder";
|
|
5
|
-
|
|
6
|
-
export const testPublish: Publish<DBSchemaGenerated> = async ({ user, sid }) => {
|
|
7
|
-
if(sid === "noAuth"){
|
|
8
|
-
return {
|
|
9
|
-
planes: {
|
|
10
|
-
select: { fields: { last_updated: 0 } }
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
if(sid === "rest_api"){
|
|
15
|
-
return {
|
|
16
|
-
planes: "*"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const users_public_info = {
|
|
20
|
-
select: {
|
|
21
|
-
fields: "*",
|
|
22
|
-
forcedFilter: { sid },
|
|
23
|
-
},
|
|
24
|
-
insert: {
|
|
25
|
-
fields: "*",
|
|
26
|
-
forcedData: { sid },
|
|
27
|
-
},
|
|
28
|
-
delete: {
|
|
29
|
-
filterFields: "*",
|
|
30
|
-
forcedFilter: { sid },
|
|
31
|
-
},
|
|
32
|
-
update: {
|
|
33
|
-
fields: "*",
|
|
34
|
-
forcedFilter: { sid },
|
|
35
|
-
},
|
|
36
|
-
} satisfies PublishTableRule<DBSchemaGenerated["users_public_info"]["columns"], DBSchemaGenerated>;
|
|
37
|
-
|
|
38
|
-
if(sid === "files"){
|
|
39
|
-
return {
|
|
40
|
-
users_public_info
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const res: PublishFullyTyped<DBSchemaGenerated> = {
|
|
44
|
-
shapes: "*",
|
|
45
|
-
items: "*",
|
|
46
|
-
items2: "*",
|
|
47
|
-
items3: "*",
|
|
48
|
-
items4a: "*",
|
|
49
|
-
tjson: "*",
|
|
50
|
-
items_multi: "*",
|
|
51
|
-
v_items: "*",
|
|
52
|
-
various: "*",
|
|
53
|
-
tr1: "*",
|
|
54
|
-
tr2: "*",
|
|
55
|
-
tr3: "*",
|
|
56
|
-
planes: {
|
|
57
|
-
select: sid === "client_only"? { fields: { last_updated: false } } : "*",
|
|
58
|
-
update: "*",
|
|
59
|
-
insert: "*",
|
|
60
|
-
delete: "*",
|
|
61
|
-
sync: {
|
|
62
|
-
id_fields: ["id"],
|
|
63
|
-
synced_field: "last_updated"
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
items4: {
|
|
68
|
-
select: user? "*" : {
|
|
69
|
-
fields: { name: 0 },
|
|
70
|
-
orderByFields: { added: 1 },
|
|
71
|
-
forcedFilter: { name: "abc" }
|
|
72
|
-
},
|
|
73
|
-
insert: "*",
|
|
74
|
-
update: "*",
|
|
75
|
-
delete: "*"
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
items4_pub: "*",
|
|
79
|
-
[`"*"`]: {
|
|
80
|
-
select: { fields: { "*": 0 }},
|
|
81
|
-
insert: "*",
|
|
82
|
-
update: "*",
|
|
83
|
-
},
|
|
84
|
-
[`"""*"""`]: {
|
|
85
|
-
select: { fields: { [`"*"`]: 0 }},
|
|
86
|
-
insert: "*",
|
|
87
|
-
update: "*",
|
|
88
|
-
},
|
|
89
|
-
obj_table: "*",
|
|
90
|
-
files: "*",
|
|
91
|
-
users_public_info,
|
|
92
|
-
self_join: "*",
|
|
93
|
-
insert_rules: {
|
|
94
|
-
select: "*",
|
|
95
|
-
insert: {
|
|
96
|
-
fields: { added: 0 },
|
|
97
|
-
returningFields: { name: 1 },
|
|
98
|
-
validate: async ({ row }) => {
|
|
99
|
-
if(row.name === "a") row.name = "b";
|
|
100
|
-
row.added = (new Date()).toUTCString();
|
|
101
|
-
return row
|
|
102
|
-
},
|
|
103
|
-
checkFilter: {
|
|
104
|
-
$and: [{ "name.<>": "fail-check" }]
|
|
105
|
-
},
|
|
106
|
-
postValidate: async ({ row, dbx: dboTx}) => {
|
|
107
|
-
/** Records must exist in this transaction */
|
|
108
|
-
const exists = await dboTx.sql("SELECT * FROM insert_rules WHERE id = ${id}", row, { returnType: "row" });
|
|
109
|
-
const existsd = await dboTx.insert_rules.findOne({ id: row.id });
|
|
110
|
-
if(row.id !== exists.id || row.id !== existsd.id){
|
|
111
|
-
console.error("postValidate failed");
|
|
112
|
-
// process.exit(1)
|
|
113
|
-
}
|
|
114
|
-
if(row.name === "fail") throw "Failed";
|
|
115
|
-
return undefined
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
uuid_text: {
|
|
120
|
-
insert: {
|
|
121
|
-
fields: "*",
|
|
122
|
-
forcedData: {
|
|
123
|
-
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
update: {
|
|
127
|
-
fields: [],
|
|
128
|
-
dynamicFields: [{
|
|
129
|
-
fields: { id: 1 },
|
|
130
|
-
filter: {
|
|
131
|
-
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
132
|
-
}
|
|
133
|
-
}]
|
|
134
|
-
}
|
|
135
|
-
},
|
|
136
|
-
"prostgles_test.basic": "*",
|
|
137
|
-
"prostgles_test.basic1": "*",
|
|
138
|
-
"prostgles_test.mv_basic1": "*",
|
|
139
|
-
[`"""quoted0"""`]: "*",
|
|
140
|
-
[`"""quoted1"""`]: "*",
|
|
141
|
-
[`"""quoted2"""`]: "*",
|
|
142
|
-
symbols: "*",
|
|
143
|
-
trades: "*",
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
return res;
|
|
147
|
-
}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import type { TableConfig } from 'prostgles-server/dist/TableConfig/TableConfig';
|
|
2
|
-
|
|
3
|
-
export const testTableConfig: TableConfig<{ en: 1, fr: 1 }> = {
|
|
4
|
-
|
|
5
|
-
tr2: {
|
|
6
|
-
// dropIfExists: true,
|
|
7
|
-
columns: {
|
|
8
|
-
t1: { label: { fr: "fr_t1" }, info: { hint: "hint...", min: "a", max: "b" } },
|
|
9
|
-
t2: { label: { en: "en_t2" } },
|
|
10
|
-
},
|
|
11
|
-
triggers: {
|
|
12
|
-
atLeastOneA: {
|
|
13
|
-
actions: ["delete", "update"],
|
|
14
|
-
forEach: "statement",
|
|
15
|
-
type: "after",
|
|
16
|
-
query: `
|
|
17
|
-
DECLARE
|
|
18
|
-
x_rec record;
|
|
19
|
-
BEGIN
|
|
20
|
-
|
|
21
|
-
IF NOT EXISTS(SELECT * FROM tr2 WHERE t1 = 'a' AND t2 = 'b') THEN
|
|
22
|
-
RAISE EXCEPTION 'Must have at least one row with t1 = a AND t2 = b';
|
|
23
|
-
END IF;
|
|
24
|
-
|
|
25
|
-
RETURN NULL;
|
|
26
|
-
END;
|
|
27
|
-
`
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
users_public_info: {
|
|
32
|
-
// dropIfExists: true,
|
|
33
|
-
columns: {
|
|
34
|
-
id: "SERIAL PRIMARY KEY",
|
|
35
|
-
name: "TEXT",
|
|
36
|
-
// avatar: `UUID REFERENCES media ON DELETE CASCADE`
|
|
37
|
-
avatar: `UUID`,
|
|
38
|
-
sid: `TEXT`,
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
users: {
|
|
42
|
-
dropIfExists: true,
|
|
43
|
-
columns: {
|
|
44
|
-
id: { sqlDefinition: `SERIAL PRIMARY KEY ` },
|
|
45
|
-
email: { sqlDefinition: `TEXT NOT NULL` },
|
|
46
|
-
status: { enum: ["active", "disabled", "pending"] },
|
|
47
|
-
preferences: {
|
|
48
|
-
jsonbSchemaType: {
|
|
49
|
-
showIntro: { type: "boolean", optional: true },
|
|
50
|
-
theme: { enum: ["light", "dark", "auto"], optional: true },
|
|
51
|
-
others: { type: "any[]" }
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
tjson: {
|
|
57
|
-
dropIfExists: true,
|
|
58
|
-
columns: {
|
|
59
|
-
json: { jsonbSchemaType: {
|
|
60
|
-
a: { type: "boolean" },
|
|
61
|
-
arr: { enum: ["1", "2", "3"] },
|
|
62
|
-
arr1: { enum: [1, 2, 3] },
|
|
63
|
-
arr2: { type: "integer[]" },
|
|
64
|
-
arrStr: { type: "string[]", optional: true, nullable: true },
|
|
65
|
-
o: { optional: true, nullable: true, oneOfType: [
|
|
66
|
-
{ o1: "integer" },
|
|
67
|
-
{ o2: "boolean" }
|
|
68
|
-
] },
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
colOneOf: { enum: ["a", "b", "c"] },
|
|
72
|
-
status: {
|
|
73
|
-
nullable: true,
|
|
74
|
-
jsonbSchema: {
|
|
75
|
-
oneOfType: [
|
|
76
|
-
{ ok: { type: "string" } },
|
|
77
|
-
{ err: { type: "string" } },
|
|
78
|
-
{
|
|
79
|
-
loading: { type: {
|
|
80
|
-
loaded: { type: "number" },
|
|
81
|
-
total: { type: "number" }
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
jsonOneOf: {
|
|
89
|
-
nullable: true,
|
|
90
|
-
jsonbSchema: {
|
|
91
|
-
oneOfType: [
|
|
92
|
-
{ command: { enum: ["a"] } },
|
|
93
|
-
{
|
|
94
|
-
command: { enum: ["b"] },
|
|
95
|
-
option: { type: "integer[]" }
|
|
96
|
-
}
|
|
97
|
-
]
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
table_config: { nullable: true, jsonbSchemaType: {
|
|
101
|
-
referencedTables: { optional: true, arrayOfType: { name: "string", minFiles: "number" } },
|
|
102
|
-
recType: {
|
|
103
|
-
nullable: true, optional: true, record: { keysEnum: ["a", "b"], values: { type: { bools: "boolean[]" } } }
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
lookup_col1: {
|
|
110
|
-
dropIfExistsCascade: true,
|
|
111
|
-
isLookupTable: {
|
|
112
|
-
values: {
|
|
113
|
-
a: { description: "desc" },
|
|
114
|
-
b: {}
|
|
115
|
-
},
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
uuid_text: {
|
|
119
|
-
columns: {
|
|
120
|
-
id: "UUID",
|
|
121
|
-
col1: {
|
|
122
|
-
references: {
|
|
123
|
-
tableName: "lookup_col1",
|
|
124
|
-
nullable: true,
|
|
125
|
-
}
|
|
126
|
-
},
|
|
127
|
-
col2: {
|
|
128
|
-
references: {
|
|
129
|
-
tableName: "lookup_col1",
|
|
130
|
-
nullable: true,
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
api_table: {
|
|
136
|
-
dropIfExists: true,
|
|
137
|
-
columns: {
|
|
138
|
-
id: "SERIAL PRIMARY KEY",
|
|
139
|
-
},
|
|
140
|
-
onMount: async ({ _db, dbo }) => {
|
|
141
|
-
await _db.any(`ALTER TABLE api_table ADD COLUMN col1 TEXT`);
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
rec_ref: {
|
|
145
|
-
columns: {
|
|
146
|
-
id: "SERIAL PRIMARY KEY",
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
rec: {
|
|
150
|
-
columns: {
|
|
151
|
-
id: "SERIAL PRIMARY KEY",
|
|
152
|
-
parent_id: "INTEGER REFERENCES rec",
|
|
153
|
-
recf: "INTEGER REFERENCES rec_ref",
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"files": ["./index.ts"],
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"target": "es2022",
|
|
5
|
-
"lib": [ "es2022" ],
|
|
6
|
-
"esModuleInterop" : true,
|
|
7
|
-
"allowSyntheticDefaultImports": true,
|
|
8
|
-
"resolveJsonModule": true,
|
|
9
|
-
"allowJs": true,
|
|
10
|
-
"module": "commonjs",
|
|
11
|
-
"moduleResolution": "Node10",
|
|
12
|
-
"declaration": true,
|
|
13
|
-
"declarationMap": true,
|
|
14
|
-
"ignoreDeprecations": "5.0",
|
|
15
|
-
"skipLibCheck": true,
|
|
16
|
-
"outDir": "dist",
|
|
17
|
-
},
|
|
18
|
-
"exclude": [
|
|
19
|
-
"dist",
|
|
20
|
-
"DBoGenerated.d.ts"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
//@ts-ignore
|
|
2
|
-
import type { DBHandlerServer } from "../dist/DboBuilder";
|
|
3
|
-
import { test, describe } from "node:test";
|
|
4
|
-
|
|
5
|
-
export const serverOnlyQueries = async (db: DBHandlerServer) => {
|
|
6
|
-
|
|
7
|
-
await describe('Server Only Queries', async () => {
|
|
8
|
-
await test('Self reference recursion bug', async () => {
|
|
9
|
-
await db.rec.findOne!({ id: 1 }, { select: { "*": 1, rec_ref: "*" } });
|
|
10
|
-
});
|
|
11
|
-
await test('Transactions', async () => {
|
|
12
|
-
await db.tx!(async t => {
|
|
13
|
-
await t.items.insert!({ name: "tx_" });
|
|
14
|
-
const expect1 = await t.items.count!({ name: "tx_" });
|
|
15
|
-
const expect0 = await db.items.count!({ name: "tx_" });
|
|
16
|
-
if(expect0 !== 0 || expect1 !== 1) throw "db.tx failed";
|
|
17
|
-
|
|
18
|
-
//throw "err"; // Any errors will revert all data-changing commands using the transaction object ( t )
|
|
19
|
-
});
|
|
20
|
-
const expect1 = await db.items.count!({ name: "tx_" });
|
|
21
|
-
if(expect1 !== 1) throw "db.tx failed";
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
await test('TableConfig onMount works', async () => {
|
|
25
|
-
await db.api_table.findOne!({ id: 1 });
|
|
26
|
-
const newRow = await db.api_table.insert!({ }, { returning: "*" });
|
|
27
|
-
if(newRow.col1 !== null) {
|
|
28
|
-
throw "api_table onMount failed: col1 missing. Got: " + JSON.stringify(newRow);
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
}
|
package/tests/test.sh
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
cd client
|
|
3
|
-
npm run build
|
|
4
|
-
cd ../server
|
|
5
|
-
|
|
6
|
-
if [ $# -eq 0 ]; then
|
|
7
|
-
# no args passed
|
|
8
|
-
rm -rf ./node-modules
|
|
9
|
-
npm i
|
|
10
|
-
fi
|
|
11
|
-
|
|
12
|
-
npm run build
|
|
13
|
-
|
|
14
|
-
#npm run test-server 2>&1 ./server.log
|
|
15
|
-
npm run test-server && \
|
|
16
|
-
TEST_NAME="main" npm run test-client && \
|
|
17
|
-
TEST_NAME="useProstgles" npm run test-client && \
|
|
18
|
-
TEST_NAME="files" npm run test-client && \
|
|
19
|
-
TEST_NAME="rest_api" npm run test-client
|
|
20
|
-
|