prostgles-server 2.0.13 → 2.0.17
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/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +15 -13
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts +2 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +6 -1
- package/dist/FileManager.js.map +1 -1
- package/dist/Prostgles.d.ts +3 -0
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +7 -1
- package/dist/Prostgles.js.map +1 -1
- package/dist/QueryBuilder.js +2 -2
- package/dist/QueryBuilder.js.map +1 -1
- package/dist/TableConfig.d.ts +57 -0
- package/dist/TableConfig.d.ts.map +1 -0
- package/dist/TableConfig.js +79 -0
- package/dist/TableConfig.js.map +1 -0
- package/lib/DboBuilder.ts +17 -11
- package/lib/FileManager.ts +6 -2
- package/lib/Prostgles.ts +13 -1
- package/lib/QueryBuilder.ts +2 -2
- package/lib/TableConfig.ts +117 -0
- package/package.json +2 -2
- package/tests/client_only_queries.js +3 -0
- package/tests/client_only_queries.ts +4 -0
- package/tests/config_test/DBoGenerated.d.ts +29 -1
- package/tests/config_test/index.js +29 -3
- package/tests/config_test/index.js.map +1 -1
- package/tests/config_test/index.ts +34 -5
- package/tests/config_test/init.sql +6 -0
- package/tests/isomorphic_queries.js +6 -2
- package/tests/isomorphic_queries.ts +8 -2
- package/tests/server/DBoGenerated.d.ts +20 -1
- package/tests/server/index.js +9 -1
- package/tests/server/index.ts +9 -1
- package/tests/server/init.sql +7 -0
- package/tests/server/media/{5b4c60e4-28ed-4695-8970-43f3b83d1372.txt → 07244a06-b87a-469d-ad24-8d6450c63141.txt} +0 -0
- package/tests/server/media/{843aef93-47b4-4ae6-b2cb-bae369bb2155.txt → 1d3ef9f2-bb5d-460b-9e17-29c784548b54.txt} +0 -0
- package/tests/server/media/{bbcd7a13-af68-445d-a1cf-946c2073af70.txt → 2e8709ec-d71d-4112-b711-0f6eba9a2e61.txt} +0 -0
- package/tests/server/media/{e218d3fd-7e70-4c02-95db-e0d4ff27c611.txt → b27fa91a-4ad0-4f05-8b67-83684947a43c.txt} +0 -0
- package/tests/server/package-lock.json +3 -3
- package/tests/test.sh +1 -1
package/lib/DboBuilder.ts
CHANGED
|
@@ -119,12 +119,14 @@ export type LocalParams = {
|
|
|
119
119
|
data: AnyObject;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
function replaceNonAlphaNumeric(string: string): string {
|
|
123
|
-
return string.replace(/[\W_]+/g,
|
|
122
|
+
function replaceNonAlphaNumeric(string: string, replacement = "_"): string {
|
|
123
|
+
return string.replace(/[\W_]+/g, replacement);
|
|
124
124
|
}
|
|
125
|
-
function capitalizeFirstLetter(string: string) : string {
|
|
126
|
-
|
|
125
|
+
function capitalizeFirstLetter(string: string, nonalpha_replacement?: string) : string {
|
|
126
|
+
const str = replaceNonAlphaNumeric(string, nonalpha_replacement);
|
|
127
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
127
128
|
}
|
|
129
|
+
|
|
128
130
|
function snakify(str: string, capitalize = false) : string {
|
|
129
131
|
|
|
130
132
|
return str.split("").map((c, i)=> {
|
|
@@ -309,10 +311,11 @@ class ColSet {
|
|
|
309
311
|
const col = this.opts.columns.find(c => c.name === key);
|
|
310
312
|
if(!col) throw "Unexpected missing col name";
|
|
311
313
|
const colIsJSON = ["json", "jsonb"].includes(col.data_type);
|
|
314
|
+
const colIsUUID = ["uuid"].includes(col.data_type);
|
|
312
315
|
|
|
313
316
|
return {
|
|
314
317
|
escapedCol: asName(key),
|
|
315
|
-
escapedVal: pgp.as.format(colIsJSON? "$1:json" : "$1", [row[key]])
|
|
318
|
+
escapedVal: pgp.as.format(colIsUUID? "$1::uuid" : colIsJSON? "$1:json" : "$1", [row[key]])
|
|
316
319
|
}
|
|
317
320
|
});
|
|
318
321
|
|
|
@@ -612,9 +615,11 @@ export class ViewHandler {
|
|
|
612
615
|
if(!p.select.getColumns) throw "Not allowed";
|
|
613
616
|
|
|
614
617
|
// console.log("getColumns", this.name, this.columns.map(c => c.name))
|
|
618
|
+
|
|
615
619
|
let _lang = lang;
|
|
616
620
|
let columns = this.columns.map(c => {
|
|
617
|
-
let label = c.comment || c.name;
|
|
621
|
+
let label = c.comment || capitalizeFirstLetter(c.name, " ");
|
|
622
|
+
|
|
618
623
|
const iConf = this.dboBuilder.prostgles?.opts?.i18n?.column_labels?.[this.name]?.[c.name];
|
|
619
624
|
const fallbackLang = this.dboBuilder.prostgles?.opts?.i18n?.fallbackLang;
|
|
620
625
|
_lang = _lang || fallbackLang as string;
|
|
@@ -635,6 +640,7 @@ export class ViewHandler {
|
|
|
635
640
|
filter: Boolean(p.select && p.select.filterFields && p.select.filterFields.includes(c.name)),
|
|
636
641
|
update: Boolean(p.update && p.update.fields && p.update.fields.includes(c.name)),
|
|
637
642
|
delete: Boolean(p.delete && p.delete.filterFields && p.delete.filterFields.includes(c.name)),
|
|
643
|
+
...(this.dboBuilder?.prostgles?.tableConfigurator?.getColInfo({ table: this.name, col: c.name}) || {})
|
|
638
644
|
}
|
|
639
645
|
});
|
|
640
646
|
|
|
@@ -1898,10 +1904,9 @@ export class TableHandler extends ViewHandler {
|
|
|
1898
1904
|
let data = this.prepareFieldValues(row, forcedData, allowedFields, fixIssues);
|
|
1899
1905
|
const dataKeys = Object.keys(data);
|
|
1900
1906
|
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
}
|
|
1904
|
-
// let cs = new pgp.helpers.ColumnSet(this.columnSet.columns.filter(c => dataKeys.includes(c.name)), { table: this.name });
|
|
1907
|
+
dataKeys.map(col => {
|
|
1908
|
+
this.dboBuilder.prostgles?.tableConfigurator?.checkColVal({ table: this.name, col, value: data[col] });
|
|
1909
|
+
})
|
|
1905
1910
|
|
|
1906
1911
|
return { data, allowedCols: this.columns.filter(c => dataKeys.includes(c.name)).map(c => c.name) }
|
|
1907
1912
|
}
|
|
@@ -2188,7 +2193,8 @@ export class TableHandler extends ViewHandler {
|
|
|
2188
2193
|
const keys = Object.keys(forcedData);
|
|
2189
2194
|
if(keys.length){
|
|
2190
2195
|
try {
|
|
2191
|
-
const
|
|
2196
|
+
const colset = new pgp.helpers.ColumnSet(this.columns.filter(c => keys.includes(c.name)).map(c => ({ name: c.name, cast: c.udt_name === "uuid"? c.udt_name : undefined }))),
|
|
2197
|
+
values = pgp.helpers.values(forcedData, colset),
|
|
2192
2198
|
colNames = this.prepareSelect(keys, this.column_names);
|
|
2193
2199
|
await this.db.any("EXPLAIN INSERT INTO " + this.escapedName + " (${colNames:raw}) SELECT * FROM ( VALUES ${values:raw} ) t WHERE FALSE;", { colNames, values })
|
|
2194
2200
|
} catch(e){
|
package/lib/FileManager.ts
CHANGED
|
@@ -6,12 +6,16 @@ import * as fs from 'fs';
|
|
|
6
6
|
import * as FileType from "file-type";
|
|
7
7
|
import * as sharp from "sharp";
|
|
8
8
|
|
|
9
|
-
import { Prostgles } from './Prostgles';
|
|
9
|
+
import { DB, Prostgles } from './Prostgles';
|
|
10
10
|
import { asName, AnyObject } from 'prostgles-types';
|
|
11
11
|
import { TableHandler } from './DboBuilder';
|
|
12
12
|
|
|
13
13
|
const HOUR = 3600 * 1000;
|
|
14
14
|
|
|
15
|
+
export const asSQLIdentifier = async (name: string, db: DB): Promise<string> => {
|
|
16
|
+
return (await db.one("select format('%I', $1) as name", [name]))?.name
|
|
17
|
+
}
|
|
18
|
+
|
|
15
19
|
export type ImageOptions = {
|
|
16
20
|
keepMetadata?: boolean;
|
|
17
21
|
compression?:
|
|
@@ -300,7 +304,7 @@ export default class FileManager {
|
|
|
300
304
|
return await this.s3Client.getSignedUrlPromise("getObject", params);
|
|
301
305
|
}
|
|
302
306
|
|
|
303
|
-
private parseSQLIdentifier = async (name: string ) => this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
|
|
307
|
+
private parseSQLIdentifier = async (name: string ) => asSQLIdentifier(name, this.prostgles.db);// this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
|
|
304
308
|
|
|
305
309
|
init = async (prg: Prostgles) => {
|
|
306
310
|
this.prostgles = prg;
|
package/lib/Prostgles.ts
CHANGED
|
@@ -13,6 +13,8 @@ const version = pkgj.version;
|
|
|
13
13
|
import AuthHandler, { ClientInfo, Auth } from "./AuthHandler";
|
|
14
14
|
console.log("Add a basic auth mode where user and sessions table are created");
|
|
15
15
|
|
|
16
|
+
import TableConfigurator, { TableConfig } from "./TableConfig";
|
|
17
|
+
|
|
16
18
|
import { get } from "./utils";
|
|
17
19
|
import { DboBuilder, DbHandler, TableHandler, ViewHandler, isPlainObject, LocalParams } from "./DboBuilder";
|
|
18
20
|
import { PubSubManager, DEFAULT_SYNC_BATCH_SIZE, asValue } from "./PubSubManager";
|
|
@@ -404,6 +406,7 @@ export type ProstglesInitOptions<DBO = DbHandler> = {
|
|
|
404
406
|
onNotice?: (msg: any) => void;
|
|
405
407
|
i18n?: I18N_CONFIG<AnyObject>;
|
|
406
408
|
fileTable?: FileTableConfig;
|
|
409
|
+
tableConfig?: TableConfig;
|
|
407
410
|
}
|
|
408
411
|
|
|
409
412
|
// interface ISocketSetup {
|
|
@@ -474,6 +477,8 @@ export class Prostgles<DBO = DbHandler> {
|
|
|
474
477
|
|
|
475
478
|
fileManager?: FileManager;
|
|
476
479
|
|
|
480
|
+
tableConfigurator?: TableConfigurator;
|
|
481
|
+
|
|
477
482
|
isMedia(tableName: string){
|
|
478
483
|
return this.opts?.fileTable?.tableName === tableName;
|
|
479
484
|
}
|
|
@@ -488,7 +493,7 @@ export class Prostgles<DBO = DbHandler> {
|
|
|
488
493
|
"onReady", "dbConnection", "dbOptions", "publishMethods", "io",
|
|
489
494
|
"publish", "schema", "publishRawSQL", "wsChannelNamePrefix", "onSocketConnect",
|
|
490
495
|
"onSocketDisconnect", "sqlFilePath", "auth", "DEBUG_MODE", "watchSchema",
|
|
491
|
-
"i18n", "fileTable"
|
|
496
|
+
"i18n", "fileTable", "tableConfig"
|
|
492
497
|
];
|
|
493
498
|
const unknownParams = Object.keys(params).filter((key: string) => !(config as string[]).includes(key))
|
|
494
499
|
if(unknownParams.length){
|
|
@@ -615,6 +620,13 @@ export class Prostgles<DBO = DbHandler> {
|
|
|
615
620
|
}
|
|
616
621
|
|
|
617
622
|
try {
|
|
623
|
+
|
|
624
|
+
await this.refreshDBO();
|
|
625
|
+
if(this.opts.tableConfig){
|
|
626
|
+
this.tableConfigurator = new TableConfigurator(this as any);
|
|
627
|
+
await this.tableConfigurator.init();
|
|
628
|
+
}
|
|
629
|
+
|
|
618
630
|
/* 3. Make DBO object from all tables and views */
|
|
619
631
|
await this.refreshDBO();
|
|
620
632
|
|
package/lib/QueryBuilder.ts
CHANGED
|
@@ -472,8 +472,8 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
472
472
|
let a1 = asValue(args[0]),
|
|
473
473
|
a2 = asNameAlias(args[1], tableAlias);
|
|
474
474
|
if(funcName === "position_lower"){
|
|
475
|
-
a1 = `LOWER(${a1})`;
|
|
476
|
-
a2 = `LOWER(${a2})`;
|
|
475
|
+
a1 = `LOWER(${a1}::text)`;
|
|
476
|
+
a2 = `LOWER(${a2}::text)`;
|
|
477
477
|
}
|
|
478
478
|
return `position( ${a1} IN ${a2} )`;
|
|
479
479
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { AnyObject, asName } from "prostgles-types";
|
|
2
|
+
import { LocalParams } from "./DboBuilder";
|
|
3
|
+
import { asSQLIdentifier } from "./FileManager";
|
|
4
|
+
import { DB, DbHandler, Prostgles } from "./Prostgles";
|
|
5
|
+
|
|
6
|
+
type ColExtraInfo = {
|
|
7
|
+
min?: string | number;
|
|
8
|
+
max?: string | number;
|
|
9
|
+
hint?: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Helper utility to create lookup tables for TEXT columns
|
|
14
|
+
*/
|
|
15
|
+
export type TableConfig<LANG_IDS = { en: 1, ro: 1 }> = {
|
|
16
|
+
[table_name: string]: {
|
|
17
|
+
[column_name: string]: {
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Will add these values to .getColumns() result
|
|
21
|
+
*/
|
|
22
|
+
info?: ColExtraInfo;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Will create a lookup table that this column will reference
|
|
26
|
+
*/
|
|
27
|
+
lookupValues?: {
|
|
28
|
+
nullable?: boolean;
|
|
29
|
+
values: {
|
|
30
|
+
id: string;
|
|
31
|
+
i18n?: {
|
|
32
|
+
[lang_id in keyof LANG_IDS]: string
|
|
33
|
+
}
|
|
34
|
+
}[]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Will be run between initSQL and fileTable
|
|
42
|
+
*/
|
|
43
|
+
export default class TableConfigurator {
|
|
44
|
+
|
|
45
|
+
config?: TableConfig;
|
|
46
|
+
dbo: DbHandler;
|
|
47
|
+
db: DB;
|
|
48
|
+
sidKeyName: string;
|
|
49
|
+
prostgles: Prostgles
|
|
50
|
+
|
|
51
|
+
constructor(prostgles: Prostgles){
|
|
52
|
+
this.config = prostgles.opts.tableConfig;
|
|
53
|
+
this.dbo = prostgles.dbo;
|
|
54
|
+
this.db = prostgles.db;
|
|
55
|
+
this.prostgles = prostgles;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getColInfo = (params: {col: string, table: string}): ColExtraInfo | undefined => {
|
|
59
|
+
return this.config[params.table]?.[params.col]?.info;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
checkColVal = (params: {col: string, table: string, value: any }): void => {
|
|
63
|
+
const conf = this.getColInfo(params);
|
|
64
|
+
if(conf){
|
|
65
|
+
const { value } = params;
|
|
66
|
+
const { min, max } = conf;
|
|
67
|
+
if(min !== undefined && value !== undefined && value < min) throw `${params.col} must be less than ${min}`
|
|
68
|
+
if(max !== undefined && value !== undefined && value > max) throw `${params.col} must be greater than ${max}`
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async init(){
|
|
73
|
+
await Promise.all(Object.keys(this.config).map(async tableName => {
|
|
74
|
+
if(!this.dbo?.[tableName])throw "Table not found: " + tableName;
|
|
75
|
+
|
|
76
|
+
const tCols = this.dbo?.[tableName]?.columns;
|
|
77
|
+
const tConf = this.config[tableName];
|
|
78
|
+
|
|
79
|
+
await Promise.all(Object.keys(tConf).map(async colName => {
|
|
80
|
+
const colConf = tConf[colName];
|
|
81
|
+
const lookupConf = colConf.lookupValues;
|
|
82
|
+
const rows = lookupConf?.values;
|
|
83
|
+
if(rows?.length){
|
|
84
|
+
|
|
85
|
+
const keys = Object.keys(rows?.[0]?.i18n || {})
|
|
86
|
+
const lookup_table_name = await asSQLIdentifier(`lookup_${tableName}_${colName}`, this.db)
|
|
87
|
+
// const lookup_table_name = asName(`lookup_${tableName}_${colName}`);
|
|
88
|
+
|
|
89
|
+
await this.db.any(`CREATE TABLE IF NOT EXISTS ${lookup_table_name} (
|
|
90
|
+
id TEXT PRIMARY KEY
|
|
91
|
+
${keys.length? (", " + keys.map(k => asName(k) + " TEXT ").join(", ")) : ""}
|
|
92
|
+
)`);
|
|
93
|
+
|
|
94
|
+
if(!tCols.find(c => c.name === colName)){
|
|
95
|
+
await this.db.any(`ALTER TABLE ${asName(tableName)} ADD COLUMN ${asName(colName)} TEXT ${!lookupConf.nullable? " NOT NULL " : ""} REFERENCES ${lookup_table_name} (id)`)
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
await this.prostgles.refreshDBO();
|
|
99
|
+
|
|
100
|
+
const lcols = await this.dbo[lookup_table_name].columns;
|
|
101
|
+
const missing_lcols = keys.filter(k => !lcols.find(lc => lc.name === k));
|
|
102
|
+
|
|
103
|
+
if(missing_lcols.length){
|
|
104
|
+
await this.db.any(`ALTER TABLE ${lookup_table_name} ${missing_lcols.map(c => `ADD COLUMN ${c} TEXT `).join(", ")}`)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
await this.dbo[lookup_table_name].insert(
|
|
108
|
+
rows.map(r => ({ id: r.id, ...r.i18n })),
|
|
109
|
+
{ onConflictDoNothing: true }
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
console.log(`TableConfig: Created ${lookup_table_name}(id) for ${tableName}(${asName(colName)})`)
|
|
113
|
+
}
|
|
114
|
+
}))
|
|
115
|
+
}))
|
|
116
|
+
}
|
|
117
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prostgles-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"bluebird": "^3.7.2",
|
|
30
30
|
"file-type": "^16.5.3",
|
|
31
31
|
"pg-promise": "^10.9.5",
|
|
32
|
-
"prostgles-types": "^1.5.
|
|
32
|
+
"prostgles-types": "^1.5.103",
|
|
33
33
|
"sharp": "^0.29.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
@@ -115,6 +115,9 @@ async function client_only(db, auth, log, methods) {
|
|
|
115
115
|
/* Validated insert */
|
|
116
116
|
const expectB = await db.insert_rules.insert({ name: "a" }, { returning: "*" });
|
|
117
117
|
assert_1.strict.deepStrictEqual(expectB, { name: "b" }, "Validated insert failed");
|
|
118
|
+
/* forced UUID insert */
|
|
119
|
+
const row = await db.uuid_text.insert({}, { returning: "*" });
|
|
120
|
+
assert_1.strict.equal(row.id, 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e');
|
|
118
121
|
await testRealtime();
|
|
119
122
|
// auth.login({ username: "john", password: "secret" });
|
|
120
123
|
// await tout();
|
|
@@ -139,6 +139,10 @@ export default async function client_only(db: DBHandlerClient, auth: Auth, log:
|
|
|
139
139
|
const expectB = await db.insert_rules.insert({ name: "a" }, { returning: "*" });
|
|
140
140
|
assert.deepStrictEqual(expectB, { name: "b" }, "Validated insert failed");
|
|
141
141
|
|
|
142
|
+
/* forced UUID insert */
|
|
143
|
+
const row: any = await db.uuid_text.insert({}, {returning: "*"});
|
|
144
|
+
assert.equal(row.id, 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e')
|
|
145
|
+
|
|
142
146
|
await testRealtime();
|
|
143
147
|
|
|
144
148
|
// auth.login({ username: "john", password: "secret" });
|
|
@@ -30,6 +30,11 @@ export type I18n_languages = {
|
|
|
30
30
|
"label"?: string;
|
|
31
31
|
"label_en"?: string;
|
|
32
32
|
}
|
|
33
|
+
export type Insert_rules = {
|
|
34
|
+
"id"?: number;
|
|
35
|
+
"name"?: string;
|
|
36
|
+
"added"?: Date;
|
|
37
|
+
}
|
|
33
38
|
export type Item_children = {
|
|
34
39
|
"id"?: number;
|
|
35
40
|
"item_id"?: number;
|
|
@@ -67,6 +72,7 @@ export type Items4_pub = {
|
|
|
67
72
|
export type Items_m1 = {
|
|
68
73
|
"id"?: number;
|
|
69
74
|
"name"?: string;
|
|
75
|
+
"name_type"?: string;
|
|
70
76
|
}
|
|
71
77
|
export type Items_with_media = {
|
|
72
78
|
"id"?: number;
|
|
@@ -82,6 +88,11 @@ export type Lookup_experience_types = {
|
|
|
82
88
|
"en"?: string;
|
|
83
89
|
"ro"?: string;
|
|
84
90
|
}
|
|
91
|
+
export type Lookup_items_m1_name_type = {
|
|
92
|
+
"id"?: string;
|
|
93
|
+
"en"?: string;
|
|
94
|
+
"ro"?: string;
|
|
95
|
+
}
|
|
85
96
|
export type Lookup_settled_status = {
|
|
86
97
|
"id"?: string;
|
|
87
98
|
"en"?: string;
|
|
@@ -184,6 +195,10 @@ export type Usr = {
|
|
|
184
195
|
"is_active"?: boolean;
|
|
185
196
|
"age"?: number;
|
|
186
197
|
}
|
|
198
|
+
export type Uuid_text = {
|
|
199
|
+
"id"?: string;
|
|
200
|
+
"name"?: string;
|
|
201
|
+
}
|
|
187
202
|
export type V_items = {
|
|
188
203
|
"id"?: number;
|
|
189
204
|
"name"?: string;
|
|
@@ -207,6 +222,7 @@ export type JoinMakerTables = {
|
|
|
207
222
|
"items_with_media": JoinMaker<Items_with_media>;
|
|
208
223
|
"items_with_one_media": JoinMaker<Items_with_one_media>;
|
|
209
224
|
"lookup_experience_types": JoinMaker<Lookup_experience_types>;
|
|
225
|
+
"lookup_items_m1_name_type": JoinMaker<Lookup_items_m1_name_type>;
|
|
210
226
|
"lookup_status": JoinMaker<Lookup_status>;
|
|
211
227
|
"media": JoinMaker<Media>;
|
|
212
228
|
"prostgles_lookup_media_items_m1": JoinMaker<Prostgles_lookup_media_items_m1>;
|
|
@@ -230,6 +246,7 @@ export type DBObj = {
|
|
|
230
246
|
"*": TableHandler<D_42>
|
|
231
247
|
"ex_j_ins": TableHandler<Ex_j_ins>
|
|
232
248
|
"i18n_languages": TableHandler<I18n_languages>
|
|
249
|
+
"insert_rules": TableHandler<Insert_rules>
|
|
233
250
|
"item_children": TableHandler<Item_children>
|
|
234
251
|
"items": TableHandler<Items>
|
|
235
252
|
"items2": TableHandler<Items2>
|
|
@@ -240,6 +257,7 @@ export type DBObj = {
|
|
|
240
257
|
"items_with_media": TableHandler<Items_with_media>
|
|
241
258
|
"items_with_one_media": TableHandler<Items_with_one_media>
|
|
242
259
|
"lookup_experience_types": TableHandler<Lookup_experience_types>
|
|
260
|
+
"lookup_items_m1_name_type": TableHandler<Lookup_items_m1_name_type>
|
|
243
261
|
"lookup_settled_status": TableHandler<Lookup_settled_status>
|
|
244
262
|
"lookup_status": TableHandler<Lookup_status>
|
|
245
263
|
"media": TableHandler<Media>
|
|
@@ -260,6 +278,7 @@ export type DBObj = {
|
|
|
260
278
|
"tt1": TableHandler<Tt1>
|
|
261
279
|
"tttt": TableHandler<Tttt>
|
|
262
280
|
"usr": TableHandler<Usr>
|
|
281
|
+
"uuid_text": TableHandler<Uuid_text>
|
|
263
282
|
"v_items": ViewHandler<V_items>
|
|
264
283
|
"various": TableHandler<Various>
|
|
265
284
|
"various_nested": TableHandler<Various_nested>
|
|
@@ -286,6 +305,9 @@ export type I18N_DBO_CONFIG<LANG_IDS = { en: 1, fr: 1 }> = {
|
|
|
286
305
|
"i18n_languages": {
|
|
287
306
|
[key in "id" | "label" | "label_en"]: { [lang_id in keyof LANG_IDS]: string };
|
|
288
307
|
};
|
|
308
|
+
"insert_rules": {
|
|
309
|
+
[key in "id" | "name" | "added"]: { [lang_id in keyof LANG_IDS]: string };
|
|
310
|
+
};
|
|
289
311
|
"item_children": {
|
|
290
312
|
[key in "id" | "item_id" | "name" | "tst"]: { [lang_id in keyof LANG_IDS]: string };
|
|
291
313
|
};
|
|
@@ -305,7 +327,7 @@ export type I18N_DBO_CONFIG<LANG_IDS = { en: 1, fr: 1 }> = {
|
|
|
305
327
|
[key in "id" | "public" | "name" | "added"]: { [lang_id in keyof LANG_IDS]: string };
|
|
306
328
|
};
|
|
307
329
|
"items_m1": {
|
|
308
|
-
[key in "id" | "name"]: { [lang_id in keyof LANG_IDS]: string };
|
|
330
|
+
[key in "id" | "name" | "name_type"]: { [lang_id in keyof LANG_IDS]: string };
|
|
309
331
|
};
|
|
310
332
|
"items_with_media": {
|
|
311
333
|
[key in "id" | "name"]: { [lang_id in keyof LANG_IDS]: string };
|
|
@@ -316,6 +338,9 @@ export type I18N_DBO_CONFIG<LANG_IDS = { en: 1, fr: 1 }> = {
|
|
|
316
338
|
"lookup_experience_types": {
|
|
317
339
|
[key in "id" | "en" | "ro"]: { [lang_id in keyof LANG_IDS]: string };
|
|
318
340
|
};
|
|
341
|
+
"lookup_items_m1_name_type": {
|
|
342
|
+
[key in "id" | "en" | "ro"]: { [lang_id in keyof LANG_IDS]: string };
|
|
343
|
+
};
|
|
319
344
|
"lookup_settled_status": {
|
|
320
345
|
[key in "id" | "en" | "ro"]: { [lang_id in keyof LANG_IDS]: string };
|
|
321
346
|
};
|
|
@@ -376,6 +401,9 @@ export type I18N_DBO_CONFIG<LANG_IDS = { en: 1, fr: 1 }> = {
|
|
|
376
401
|
"usr": {
|
|
377
402
|
[key in "id" | "status" | "msg" | "added" | "is_active" | "age"]: { [lang_id in keyof LANG_IDS]: string };
|
|
378
403
|
};
|
|
404
|
+
"uuid_text": {
|
|
405
|
+
[key in "id" | "name"]: { [lang_id in keyof LANG_IDS]: string };
|
|
406
|
+
};
|
|
379
407
|
"v_items": {
|
|
380
408
|
[key in "id" | "name"]: { [lang_id in keyof LANG_IDS]: string };
|
|
381
409
|
};
|
|
@@ -76,6 +76,14 @@ const log = (msg, extra) => {
|
|
|
76
76
|
items_with_one_media: {
|
|
77
77
|
insert: "*"
|
|
78
78
|
},
|
|
79
|
+
uuid_text: {
|
|
80
|
+
insert: {
|
|
81
|
+
fields: "*",
|
|
82
|
+
forcedData: {
|
|
83
|
+
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
79
87
|
// v_various: "*",
|
|
80
88
|
};
|
|
81
89
|
},
|
|
@@ -101,6 +109,18 @@ const log = (msg, extra) => {
|
|
|
101
109
|
}
|
|
102
110
|
},
|
|
103
111
|
transactions: true,
|
|
112
|
+
tableConfig: {
|
|
113
|
+
items_m1: {
|
|
114
|
+
lookupColumns: {
|
|
115
|
+
name_type: {
|
|
116
|
+
values: [
|
|
117
|
+
{ id: "type 1", i18n: { en: "hehe", ro: "hihi" } },
|
|
118
|
+
{ id: "type 2" }
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
104
124
|
onReady: async (db, _db) => {
|
|
105
125
|
// console.log("onReady", Object.keys(db))
|
|
106
126
|
app.get('*', function (req, res) {
|
|
@@ -121,15 +141,21 @@ const log = (msg, extra) => {
|
|
|
121
141
|
// console.log(res)
|
|
122
142
|
// console.log(await db.various_nested.insert({ various: {} }, {returning: "*"}))
|
|
123
143
|
// console.log(await db.various.insert({ various_nested: {} }, {returning: "*"}))
|
|
124
|
-
let str = "This is a string",
|
|
144
|
+
// let str = "This is a string",
|
|
145
|
+
// data = Buffer.from(str, "utf-8"),
|
|
146
|
+
// mediaFile = { data, name: "sample_file.txt" }
|
|
125
147
|
// const file = await db.media.insert(mediaFile, { returning: "*" });
|
|
126
|
-
await db.items_with_one_media.delete();
|
|
127
|
-
await db.media.delete();
|
|
148
|
+
// await db.items_with_one_media.delete();
|
|
149
|
+
// await db.media.delete();
|
|
128
150
|
// const items_with_one_media = await db.items_m1.insert({ name: "items_m1", items_with_one_media: [{ name: "sample_file.txt", media: [mediaFile] }]}, { returning: "*" });
|
|
129
151
|
// console.log(await await db.items_m1.find())
|
|
130
152
|
// console.log(await await db.items_with_one_media.find())
|
|
131
153
|
// console.log(await await db.media.find());
|
|
132
154
|
// throw items_with_one_media;
|
|
155
|
+
const r = await db.uuid_text.insert({ id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' }, { returning: "*" });
|
|
156
|
+
await db.uuid_text.update({ id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' }, { id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' });
|
|
157
|
+
console.log(await db.uuid_text.find({ "id.$ilike": 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' }));
|
|
158
|
+
throw r;
|
|
133
159
|
}
|
|
134
160
|
catch (e) {
|
|
135
161
|
console.error(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,6 +82,14 @@ prostgles<DBObj>({
|
|
|
82
82
|
items_with_one_media: {
|
|
83
83
|
insert: "*"
|
|
84
84
|
},
|
|
85
|
+
uuid_text: {
|
|
86
|
+
insert: {
|
|
87
|
+
fields: "*",
|
|
88
|
+
forcedData: {
|
|
89
|
+
id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
85
93
|
// v_various: "*",
|
|
86
94
|
};
|
|
87
95
|
|
|
@@ -108,6 +116,20 @@ prostgles<DBObj>({
|
|
|
108
116
|
}
|
|
109
117
|
},
|
|
110
118
|
transactions: true,
|
|
119
|
+
tableConfig: {
|
|
120
|
+
items_m1: {
|
|
121
|
+
lookupColumns:{
|
|
122
|
+
|
|
123
|
+
name_type: {
|
|
124
|
+
values: [
|
|
125
|
+
{ id: "type 1", i18n: { en: "hehe", ro: "hihi" } },
|
|
126
|
+
{ id: "type 2" }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
111
133
|
onReady: async (db, _db: any) => {
|
|
112
134
|
|
|
113
135
|
// console.log("onReady", Object.keys(db))
|
|
@@ -135,14 +157,14 @@ prostgles<DBObj>({
|
|
|
135
157
|
// console.log(await db.various.insert({ various_nested: {} }, {returning: "*"}))
|
|
136
158
|
|
|
137
159
|
|
|
138
|
-
let str = "This is a string",
|
|
139
|
-
|
|
140
|
-
|
|
160
|
+
// let str = "This is a string",
|
|
161
|
+
// data = Buffer.from(str, "utf-8"),
|
|
162
|
+
// mediaFile = { data, name: "sample_file.txt" }
|
|
141
163
|
|
|
142
164
|
// const file = await db.media.insert(mediaFile, { returning: "*" });
|
|
143
165
|
|
|
144
|
-
await db.items_with_one_media.delete();
|
|
145
|
-
await db.media.delete();
|
|
166
|
+
// await db.items_with_one_media.delete();
|
|
167
|
+
// await db.media.delete();
|
|
146
168
|
// const items_with_one_media = await db.items_m1.insert({ name: "items_m1", items_with_one_media: [{ name: "sample_file.txt", media: [mediaFile] }]}, { returning: "*" });
|
|
147
169
|
// console.log(await await db.items_m1.find())
|
|
148
170
|
// console.log(await await db.items_with_one_media.find())
|
|
@@ -150,6 +172,13 @@ prostgles<DBObj>({
|
|
|
150
172
|
|
|
151
173
|
// throw items_with_one_media;
|
|
152
174
|
|
|
175
|
+
const r = await db.uuid_text.insert({id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' }, { returning: "*"});
|
|
176
|
+
await db.uuid_text.update({ id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'}, { id: 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e'});
|
|
177
|
+
console.log(
|
|
178
|
+
await db.uuid_text.find({ "id.$ilike": 'c81089e1-c4c1-45d7-a73d-e2d613cb7c3e' })
|
|
179
|
+
)
|
|
180
|
+
throw r;
|
|
181
|
+
|
|
153
182
|
} catch(e){
|
|
154
183
|
console.error(e)
|
|
155
184
|
}
|
|
@@ -9,6 +9,12 @@ CREATE TABLE IF NOT EXISTS various_nested (
|
|
|
9
9
|
);
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
DROP TABLE IF EXISTS uuid_text CASCADE;
|
|
13
|
+
CREATE TABLE IF NOT EXISTS uuid_text (
|
|
14
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
15
|
+
name TEXT
|
|
16
|
+
);
|
|
17
|
+
|
|
12
18
|
DROP TABLE IF EXISTS items_m1 CASCADE;
|
|
13
19
|
CREATE TABLE IF NOT EXISTS items_m1 (
|
|
14
20
|
id SERIAL PRIMARY KEY,
|
|
@@ -46,6 +46,10 @@ async function isomorphic(db) {
|
|
|
46
46
|
await db.items4_pub.delete({});
|
|
47
47
|
/* Access controlled */
|
|
48
48
|
await db.items4.delete({});
|
|
49
|
+
// await tryRun("UUID data", async () => {
|
|
50
|
+
// const r = await db.uuid_text.insert({}, { returning: "*"});
|
|
51
|
+
// throw r;
|
|
52
|
+
// })
|
|
49
53
|
// setTimeout(async () => {
|
|
50
54
|
// await db.any("DROP TABLE IF EXISTS tt; CREATE TABLE tt(id serial);");
|
|
51
55
|
// }, 500)
|
|
@@ -73,7 +77,7 @@ async function isomorphic(db) {
|
|
|
73
77
|
// console.log(JSON.stringify(res, null, 2))
|
|
74
78
|
assert_1.strict.deepStrictEqual(res, [
|
|
75
79
|
{
|
|
76
|
-
"label": "
|
|
80
|
+
"label": "Id",
|
|
77
81
|
"name": "id",
|
|
78
82
|
"data_type": "integer",
|
|
79
83
|
"udt_name": "int4",
|
|
@@ -93,7 +97,7 @@ async function isomorphic(db) {
|
|
|
93
97
|
"delete": true
|
|
94
98
|
},
|
|
95
99
|
{
|
|
96
|
-
"label": "
|
|
100
|
+
"label": "Tr1 id",
|
|
97
101
|
"name": "tr1_id",
|
|
98
102
|
"data_type": "integer",
|
|
99
103
|
"udt_name": "int4",
|
|
@@ -28,6 +28,12 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
28
28
|
/* Access controlled */
|
|
29
29
|
await db.items4.delete({ });
|
|
30
30
|
|
|
31
|
+
|
|
32
|
+
// await tryRun("UUID data", async () => {
|
|
33
|
+
// const r = await db.uuid_text.insert({}, { returning: "*"});
|
|
34
|
+
// throw r;
|
|
35
|
+
// })
|
|
36
|
+
|
|
31
37
|
// setTimeout(async () => {
|
|
32
38
|
// await db.any("DROP TABLE IF EXISTS tt; CREATE TABLE tt(id serial);");
|
|
33
39
|
|
|
@@ -64,7 +70,7 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
64
70
|
res,
|
|
65
71
|
[
|
|
66
72
|
{
|
|
67
|
-
"label": "
|
|
73
|
+
"label": "Id",
|
|
68
74
|
"name": "id",
|
|
69
75
|
"data_type": "integer",
|
|
70
76
|
"udt_name": "int4",
|
|
@@ -84,7 +90,7 @@ export default async function isomorphic(db: Partial<DbHandler> | Partial<DBHand
|
|
|
84
90
|
"delete": true
|
|
85
91
|
},
|
|
86
92
|
{
|
|
87
|
-
"label": "
|
|
93
|
+
"label": "Tr1 id",
|
|
88
94
|
"name": "tr1_id",
|
|
89
95
|
"data_type": "integer",
|
|
90
96
|
"udt_name": "int4",
|