@oino-ts/db 0.0.12 → 0.0.13
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/cjs/OINODbApi.js +8 -0
- package/dist/cjs/OINODbDataField.js +5 -2
- package/dist/cjs/OINODbFactory.js +8 -0
- package/dist/esm/OINODbApi.js +8 -0
- package/dist/esm/OINODbDataField.js +5 -2
- package/dist/esm/OINODbFactory.js +8 -0
- package/dist/types/index.d.ts +6 -0
- package/package.json +2 -2
- package/src/OINODbApi.ts +9 -0
- package/src/OINODbDataField.ts +5 -3
- package/src/OINODbFactory.ts +8 -0
- package/src/index.ts +7 -1
package/dist/cjs/OINODbApi.js
CHANGED
|
@@ -68,8 +68,14 @@ class OINODbHtmlTemplate extends index_js_1.OINOHtmlTemplate {
|
|
|
68
68
|
let html = "";
|
|
69
69
|
const dataset = modelset.dataset;
|
|
70
70
|
const datamodel = modelset.datamodel;
|
|
71
|
+
const api = modelset.datamodel.api;
|
|
72
|
+
const modified_index = datamodel.findFieldIndexByName(api.params.cacheModifiedField || "");
|
|
73
|
+
let last_modified = this.modified;
|
|
71
74
|
while (!dataset.isEof()) {
|
|
72
75
|
const row = dataset.getRow();
|
|
76
|
+
if (modified_index >= 0) {
|
|
77
|
+
last_modified = Math.max(last_modified, new Date(row[modified_index]).getTime());
|
|
78
|
+
}
|
|
73
79
|
let row_id_seed = datamodel.getRowPrimarykeyValues(row).join(' ');
|
|
74
80
|
let primary_key_values = [];
|
|
75
81
|
let html_row = this.template.replaceAll('###' + index_js_1.OINODbConfig.OINODB_ID_FIELD + '###', '###createHtmlFromData_temporary_oinoid###');
|
|
@@ -82,6 +88,7 @@ class OINODbHtmlTemplate extends index_js_1.OINOHtmlTemplate {
|
|
|
82
88
|
}
|
|
83
89
|
primary_key_values.push(value || "");
|
|
84
90
|
}
|
|
91
|
+
// OINOLog.debug("renderFromDbData replace field value", {field:f.name, value:value })
|
|
85
92
|
html_row = html_row.replaceAll('###' + f.name + '###', index_js_1.OINOStr.encode(value, index_js_1.OINOContentType.html));
|
|
86
93
|
}
|
|
87
94
|
html_row = html_row.replaceAll('###createHtmlFromData_temporary_oinoid###', index_js_1.OINOStr.encode(index_js_1.OINODbConfig.printOINOId(primary_key_values), index_js_1.OINOContentType.html));
|
|
@@ -89,6 +96,7 @@ class OINODbHtmlTemplate extends index_js_1.OINOHtmlTemplate {
|
|
|
89
96
|
dataset.next();
|
|
90
97
|
}
|
|
91
98
|
const result = new index_js_1.OINOHttpResult(html);
|
|
99
|
+
result.lastModified = last_modified;
|
|
92
100
|
return result;
|
|
93
101
|
}
|
|
94
102
|
}
|
|
@@ -235,8 +235,11 @@ class OINONumberDataField extends OINODbDataField {
|
|
|
235
235
|
*
|
|
236
236
|
*/
|
|
237
237
|
deserializeCell(value) {
|
|
238
|
-
if (
|
|
239
|
-
return
|
|
238
|
+
if (value === undefined) {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
else if ((value == "") || (value == null)) {
|
|
242
|
+
return null;
|
|
240
243
|
}
|
|
241
244
|
else {
|
|
242
245
|
return Number.parseFloat(value);
|
|
@@ -101,6 +101,14 @@ class OINODbFactory {
|
|
|
101
101
|
if (result.responseType === undefined) {
|
|
102
102
|
result.responseType = index_js_1.OINOContentType.json;
|
|
103
103
|
}
|
|
104
|
+
const last_modified = request.headers.get("if-modified-since");
|
|
105
|
+
if (last_modified) {
|
|
106
|
+
result.lastModified = new Date(last_modified).getTime();
|
|
107
|
+
}
|
|
108
|
+
const etags = request.headers.get("if-none-match")?.split(',').map(e => e.trim());
|
|
109
|
+
if (etags) {
|
|
110
|
+
result.etags = etags;
|
|
111
|
+
}
|
|
104
112
|
// OINOLog.debug("createParamsFromRequest", {params:result})
|
|
105
113
|
return result;
|
|
106
114
|
}
|
package/dist/esm/OINODbApi.js
CHANGED
|
@@ -64,8 +64,14 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
64
64
|
let html = "";
|
|
65
65
|
const dataset = modelset.dataset;
|
|
66
66
|
const datamodel = modelset.datamodel;
|
|
67
|
+
const api = modelset.datamodel.api;
|
|
68
|
+
const modified_index = datamodel.findFieldIndexByName(api.params.cacheModifiedField || "");
|
|
69
|
+
let last_modified = this.modified;
|
|
67
70
|
while (!dataset.isEof()) {
|
|
68
71
|
const row = dataset.getRow();
|
|
72
|
+
if (modified_index >= 0) {
|
|
73
|
+
last_modified = Math.max(last_modified, new Date(row[modified_index]).getTime());
|
|
74
|
+
}
|
|
69
75
|
let row_id_seed = datamodel.getRowPrimarykeyValues(row).join(' ');
|
|
70
76
|
let primary_key_values = [];
|
|
71
77
|
let html_row = this.template.replaceAll('###' + OINODbConfig.OINODB_ID_FIELD + '###', '###createHtmlFromData_temporary_oinoid###');
|
|
@@ -78,6 +84,7 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
78
84
|
}
|
|
79
85
|
primary_key_values.push(value || "");
|
|
80
86
|
}
|
|
87
|
+
// OINOLog.debug("renderFromDbData replace field value", {field:f.name, value:value })
|
|
81
88
|
html_row = html_row.replaceAll('###' + f.name + '###', OINOStr.encode(value, OINOContentType.html));
|
|
82
89
|
}
|
|
83
90
|
html_row = html_row.replaceAll('###createHtmlFromData_temporary_oinoid###', OINOStr.encode(OINODbConfig.printOINOId(primary_key_values), OINOContentType.html));
|
|
@@ -85,6 +92,7 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
85
92
|
dataset.next();
|
|
86
93
|
}
|
|
87
94
|
const result = new OINOHttpResult(html);
|
|
95
|
+
result.lastModified = last_modified;
|
|
88
96
|
return result;
|
|
89
97
|
}
|
|
90
98
|
}
|
|
@@ -229,8 +229,11 @@ export class OINONumberDataField extends OINODbDataField {
|
|
|
229
229
|
*
|
|
230
230
|
*/
|
|
231
231
|
deserializeCell(value) {
|
|
232
|
-
if (
|
|
233
|
-
return
|
|
232
|
+
if (value === undefined) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
else if ((value == "") || (value == null)) {
|
|
236
|
+
return null;
|
|
234
237
|
}
|
|
235
238
|
else {
|
|
236
239
|
return Number.parseFloat(value);
|
|
@@ -98,6 +98,14 @@ export class OINODbFactory {
|
|
|
98
98
|
if (result.responseType === undefined) {
|
|
99
99
|
result.responseType = OINOContentType.json;
|
|
100
100
|
}
|
|
101
|
+
const last_modified = request.headers.get("if-modified-since");
|
|
102
|
+
if (last_modified) {
|
|
103
|
+
result.lastModified = new Date(last_modified).getTime();
|
|
104
|
+
}
|
|
105
|
+
const etags = request.headers.get("if-none-match")?.split(',').map(e => e.trim());
|
|
106
|
+
if (etags) {
|
|
107
|
+
result.etags = etags;
|
|
108
|
+
}
|
|
101
109
|
// OINOLog.debug("createParamsFromRequest", {params:result})
|
|
102
110
|
return result;
|
|
103
111
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export type OINODbApiParams = {
|
|
|
36
36
|
hashidLength?: number;
|
|
37
37
|
/** Make hashids static per row/table */
|
|
38
38
|
hashidRandomIds?: boolean;
|
|
39
|
+
/** Name of field that has the modified field */
|
|
40
|
+
cacheModifiedField?: string;
|
|
39
41
|
};
|
|
40
42
|
/**
|
|
41
43
|
* Database class (constructor) type
|
|
@@ -88,6 +90,10 @@ export type OINODbApiRequestParams = {
|
|
|
88
90
|
responseType?: OINOContentType;
|
|
89
91
|
/** Multipart boundary token */
|
|
90
92
|
multipartBoundary?: string;
|
|
93
|
+
/** Request last-modified value */
|
|
94
|
+
lastModified?: number;
|
|
95
|
+
/** Request etag values */
|
|
96
|
+
etags?: string[];
|
|
91
97
|
/** SQL parameters */
|
|
92
98
|
sqlParams?: OINODbSqlParams;
|
|
93
99
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oino-ts/db",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "OINO TS library package for publishing an SQL database tables as a REST API.",
|
|
5
5
|
"author": "Matias Kiviniemi (pragmatta)",
|
|
6
6
|
"license": "MPL-2.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@types/node": "^20.14.10",
|
|
23
|
-
"@oino-ts/types": "0.0.
|
|
23
|
+
"@oino-ts/types": "0.0.13"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/bun": "latest",
|
package/src/OINODbApi.ts
CHANGED
|
@@ -71,8 +71,15 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
71
71
|
let html:string = ""
|
|
72
72
|
const dataset:OINODbDataSet|undefined = modelset.dataset
|
|
73
73
|
const datamodel:OINODbDataModel = modelset.datamodel
|
|
74
|
+
const api:OINODbApi = modelset.datamodel.api
|
|
75
|
+
const modified_index = datamodel.findFieldIndexByName(api.params.cacheModifiedField || "")
|
|
76
|
+
let last_modified:number = this.modified
|
|
77
|
+
|
|
74
78
|
while (!dataset.isEof()) {
|
|
75
79
|
const row:OINODataRow = dataset.getRow()
|
|
80
|
+
if (modified_index >= 0) {
|
|
81
|
+
last_modified = Math.max(last_modified, new Date(row[modified_index] as Date).getTime())
|
|
82
|
+
}
|
|
76
83
|
let row_id_seed:string = datamodel.getRowPrimarykeyValues(row).join(' ')
|
|
77
84
|
let primary_key_values:string[] = []
|
|
78
85
|
let html_row:string = this.template.replaceAll('###' + OINODbConfig.OINODB_ID_FIELD + '###', '###createHtmlFromData_temporary_oinoid###')
|
|
@@ -85,6 +92,7 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
85
92
|
}
|
|
86
93
|
primary_key_values.push(value || "")
|
|
87
94
|
}
|
|
95
|
+
// OINOLog.debug("renderFromDbData replace field value", {field:f.name, value:value })
|
|
88
96
|
html_row = html_row.replaceAll('###' + f.name + '###', OINOStr.encode(value, OINOContentType.html))
|
|
89
97
|
}
|
|
90
98
|
html_row = html_row.replaceAll('###createHtmlFromData_temporary_oinoid###', OINOStr.encode(OINODbConfig.printOINOId(primary_key_values), OINOContentType.html))
|
|
@@ -92,6 +100,7 @@ export class OINODbHtmlTemplate extends OINOHtmlTemplate {
|
|
|
92
100
|
dataset.next()
|
|
93
101
|
}
|
|
94
102
|
const result:OINOHttpResult = new OINOHttpResult(html)
|
|
103
|
+
result.lastModified = last_modified
|
|
95
104
|
return result
|
|
96
105
|
}
|
|
97
106
|
|
package/src/OINODbDataField.ts
CHANGED
|
@@ -248,10 +248,12 @@ export class OINONumberDataField extends OINODbDataField {
|
|
|
248
248
|
*
|
|
249
249
|
*/
|
|
250
250
|
deserializeCell(value: string|null|undefined): OINODataCell {
|
|
251
|
-
if (
|
|
252
|
-
return
|
|
251
|
+
if (value === undefined) {
|
|
252
|
+
return undefined
|
|
253
|
+
} else if ((value == "") || (value == null)) {
|
|
254
|
+
return null
|
|
253
255
|
} else {
|
|
254
|
-
return Number.parseFloat(value)
|
|
256
|
+
return Number.parseFloat(value)
|
|
255
257
|
}
|
|
256
258
|
}
|
|
257
259
|
}
|
package/src/OINODbFactory.ts
CHANGED
|
@@ -106,6 +106,14 @@ export class OINODbFactory {
|
|
|
106
106
|
if (result.responseType === undefined) {
|
|
107
107
|
result.responseType = OINOContentType.json
|
|
108
108
|
}
|
|
109
|
+
const last_modified = request.headers.get("if-modified-since")
|
|
110
|
+
if (last_modified) {
|
|
111
|
+
result.lastModified = new Date(last_modified).getTime()
|
|
112
|
+
}
|
|
113
|
+
const etags = request.headers.get("if-none-match")?.split(',').map(e => e.trim())
|
|
114
|
+
if (etags) {
|
|
115
|
+
result.etags = etags
|
|
116
|
+
}
|
|
109
117
|
|
|
110
118
|
// OINOLog.debug("createParamsFromRequest", {params:result})
|
|
111
119
|
return result
|
package/src/index.ts
CHANGED
|
@@ -39,7 +39,9 @@ export type OINODbApiParams = {
|
|
|
39
39
|
/** Set (minimum) length (12-32 chars) of the hashids */
|
|
40
40
|
hashidLength?:number,
|
|
41
41
|
/** Make hashids static per row/table */
|
|
42
|
-
hashidRandomIds?: boolean
|
|
42
|
+
hashidRandomIds?: boolean,
|
|
43
|
+
/** Name of field that has the modified field */
|
|
44
|
+
cacheModifiedField?:string
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
/**
|
|
@@ -98,6 +100,10 @@ export type OINODbApiRequestParams = {
|
|
|
98
100
|
responseType?:OINOContentType
|
|
99
101
|
/** Multipart boundary token */
|
|
100
102
|
multipartBoundary?:string
|
|
103
|
+
/** Request last-modified value */
|
|
104
|
+
lastModified?:number
|
|
105
|
+
/** Request etag values */
|
|
106
|
+
etags?:string[]
|
|
101
107
|
/** SQL parameters */
|
|
102
108
|
sqlParams?:OINODbSqlParams
|
|
103
109
|
}
|