@oino-ts/common 1.0.0 → 1.0.2

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.
@@ -233,13 +233,22 @@ class OINOApiHtmlTemplate extends OINOHtmlTemplate_js_1.OINOHtmlTemplate {
233
233
  last_modified = Math.max(last_modified, new Date(row[modified_index]).getTime());
234
234
  }
235
235
  let row_id_seed = datamodel.getRowPrimarykeyValues(row).join(' ');
236
- let primary_key_values = [];
236
+ let encoded_primary_key_values = [];
237
237
  this.clearVariables();
238
238
  this.setVariableFromValue(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, "");
239
239
  for (let i = 0; i < datamodel.fields.length; i++) {
240
240
  const f = datamodel.fields[i];
241
241
  let value;
242
- if ((f instanceof OINODataField_js_1.OINODatetimeDataField) && (this._locale != null)) {
242
+ if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
243
+ value = f.serializeCell(row[i]);
244
+ if (value && (f instanceof OINODataField_js_1.OINONumberDataField) && (datamodel.api.hashid)) {
245
+ value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed);
246
+ }
247
+ if (f.fieldParams.isPrimaryKey) {
248
+ encoded_primary_key_values.push(value || "");
249
+ }
250
+ }
251
+ else if ((f instanceof OINODataField_js_1.OINODatetimeDataField) && (this._locale != null)) {
243
252
  value = f.serializeCellWithLocale(row[i], this._locale);
244
253
  }
245
254
  else if ((f instanceof OINODataField_js_1.OINONumberDataField) && (this._numberDecimals >= 0) && (typeof row[i] === "number")) {
@@ -249,18 +258,10 @@ class OINOApiHtmlTemplate extends OINOHtmlTemplate_js_1.OINOHtmlTemplate {
249
258
  else {
250
259
  value = f.serializeCell(row[i]);
251
260
  }
252
- if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
253
- if (value && (f instanceof OINODataField_js_1.OINONumberDataField) && (datamodel.api.hashid)) {
254
- value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed);
255
- }
256
- if (f.fieldParams.isPrimaryKey) {
257
- primary_key_values.push(value || "");
258
- }
259
- }
260
261
  this.setVariableFromValue(f.name, value || "");
261
262
  }
262
263
  this.setVariableFromProperties(overrideValues);
263
- this.setVariableFromValue(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values));
264
+ this.setVariableFromValue(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values));
264
265
  html += this._renderHtml() + "\r\n";
265
266
  await dataset.next();
266
267
  }
@@ -292,7 +293,7 @@ class OINOApi {
292
293
  this.datasource = datasource;
293
294
  this.params = params;
294
295
  if (this.params.hashidKey) {
295
- this.hashid = new hashid_1.OINOHashid(this.params.hashidKey, this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds);
296
+ this.hashid = new hashid_1.OINOHashid(this.params.hashidKey, this.params.hashidDomain || this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds);
296
297
  }
297
298
  else {
298
299
  this.hashid = null;
@@ -79,10 +79,10 @@ class OINODataField {
79
79
  return this.datasource.printCellAsValue(cellVal, this.nativeType);
80
80
  }
81
81
  /**
82
- * Print name of column as SQL.
82
+ * Print name of the field in datasource specific format.
83
83
  *
84
84
  */
85
- printColumnName() {
85
+ printFieldName() {
86
86
  return this.datasource.printColumnName(this.name);
87
87
  }
88
88
  }
@@ -40,14 +40,14 @@ class OINOModelSet {
40
40
  this.queryParams = queryParams;
41
41
  this.errors = this.dataset.messages;
42
42
  }
43
- _encodeAndHashFieldValue(field, value, contentType, primaryKeyValues, rowIdSeed) {
43
+ _encodeAndHashFieldValue(field, value, contentType, primaryKeyValuesEncoded, rowIdSeed) {
44
44
  let result;
45
45
  if (field.fieldParams.isPrimaryKey || field.fieldParams.isForeignKey) {
46
46
  if (value && (field instanceof OINODataField_js_1.OINONumberDataField) && (this.datamodel.api.hashid) && ((this.queryParams?.aggregate === undefined) || (this.queryParams.aggregate.isAggregated(field.name) == false))) {
47
47
  value = this.datamodel.api.hashid.encode(value, rowIdSeed);
48
48
  }
49
49
  if (field.fieldParams.isPrimaryKey) {
50
- primaryKeyValues.push(value || "");
50
+ primaryKeyValuesEncoded.push(value || "");
51
51
  }
52
52
  }
53
53
  result = OINOStr_js_1.OINOStr.encode(value, contentType);
@@ -58,7 +58,7 @@ class OINOModelSet {
58
58
  const model = this.datamodel;
59
59
  const fields = model.fields;
60
60
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
61
- let primary_key_values = [];
61
+ let encoded_primary_key_values = [];
62
62
  let json_row = "";
63
63
  for (let i = 0; i < fields.length; i++) {
64
64
  const f = fields[i];
@@ -75,14 +75,14 @@ class OINOModelSet {
75
75
  else {
76
76
  let is_hashed = (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) && (f instanceof OINODataField_js_1.OINONumberDataField) && (this.datamodel.api.hashid != null);
77
77
  let is_value = (f instanceof OINODataField_js_1.OINOBooleanDataField) || ((f instanceof OINODataField_js_1.OINONumberDataField) && !is_hashed);
78
- value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.json, primary_key_values, f.name + " " + row_id_seed);
78
+ value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.json, encoded_primary_key_values, f.name + " " + row_id_seed);
79
79
  if (is_value) {
80
80
  value = value.substring(1, value.length - 1);
81
81
  }
82
82
  json_row += "," + OINOStr_js_1.OINOStr.encode(f.name, OINOConstants_js_1.OINOContentType.json) + ":" + value;
83
83
  }
84
84
  }
85
- json_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConstants_js_1.OINOContentType.json) + ":" + OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values), OINOConstants_js_1.OINOContentType.json) + json_row;
85
+ json_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConstants_js_1.OINOContentType.json) + ":" + OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values), OINOConstants_js_1.OINOContentType.json) + json_row;
86
86
  return "{" + json_row + "}";
87
87
  }
88
88
  async _writeStringJson() {
@@ -114,7 +114,7 @@ class OINOModelSet {
114
114
  const model = this.datamodel;
115
115
  const fields = model.fields;
116
116
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
117
- let primary_key_values = [];
117
+ let encoded_primary_key_values = [];
118
118
  let csv_row = "";
119
119
  for (let i = 0; i < fields.length; i++) {
120
120
  const f = fields[i];
@@ -126,11 +126,11 @@ class OINOModelSet {
126
126
  csv_row += "," + OINOStr_js_1.OINOStr.encode(value, OINOConstants_js_1.OINOContentType.csv); // either null or undefined
127
127
  }
128
128
  else {
129
- value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.csv, primary_key_values, f.name + " " + row_id_seed);
129
+ value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.csv, encoded_primary_key_values, f.name + " " + row_id_seed);
130
130
  csv_row += "," + value;
131
131
  }
132
132
  }
133
- csv_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values), OINOConstants_js_1.OINOContentType.csv) + csv_row;
133
+ csv_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values), OINOConstants_js_1.OINOContentType.csv) + csv_row;
134
134
  return csv_row;
135
135
  }
136
136
  async _writeStringCsv() {
@@ -161,7 +161,7 @@ class OINOModelSet {
161
161
  const model = this.datamodel;
162
162
  const fields = model.fields;
163
163
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
164
- let primary_key_values = [];
164
+ let encoded_primary_key_values = [];
165
165
  let result = "";
166
166
  for (let i = 0; i < fields.length; i++) {
167
167
  const f = fields[i];
@@ -178,7 +178,7 @@ class OINOModelSet {
178
178
  formdata_block = this._writeRowFormdataParameterBlock(fields[i].name, null, multipart_boundary);
179
179
  }
180
180
  else {
181
- value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.formdata, primary_key_values, f.name + " " + row_id_seed);
181
+ value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.formdata, encoded_primary_key_values, f.name + " " + row_id_seed);
182
182
  if (is_file) {
183
183
  formdata_block = this._writeRowFormdataFileBlock(f.name, value, multipart_boundary);
184
184
  }
@@ -188,7 +188,7 @@ class OINOModelSet {
188
188
  }
189
189
  result += formdata_block;
190
190
  }
191
- result = this._writeRowFormdataParameterBlock(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values), multipart_boundary) + result;
191
+ result = this._writeRowFormdataParameterBlock(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values), multipart_boundary) + result;
192
192
  return result;
193
193
  }
194
194
  _writeStringFormdata() {
@@ -200,7 +200,7 @@ class OINOModelSet {
200
200
  const model = this.datamodel;
201
201
  const fields = model.fields;
202
202
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
203
- let primary_key_values = [];
203
+ let encoded_primary_key_values = [];
204
204
  let urlencode_row = "";
205
205
  for (let i = 0; i < fields.length; i++) {
206
206
  const f = fields[i];
@@ -212,14 +212,14 @@ class OINOModelSet {
212
212
  // console.log("OINOModelSet._writeRowUrlencode undefined field value:" + fields[i].name)
213
213
  }
214
214
  else {
215
- value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.urlencode, primary_key_values, f.name + " " + row_id_seed);
215
+ value = this._encodeAndHashFieldValue(f, value, OINOConstants_js_1.OINOContentType.urlencode, encoded_primary_key_values, f.name + " " + row_id_seed);
216
216
  if (urlencode_row != "") {
217
217
  urlencode_row += "&";
218
218
  }
219
219
  urlencode_row += OINOStr_js_1.OINOStr.encode(f.name, OINOConstants_js_1.OINOContentType.urlencode) + "=" + value;
220
220
  }
221
221
  }
222
- urlencode_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConstants_js_1.OINOContentType.urlencode) + "=" + OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values), OINOConstants_js_1.OINOContentType.urlencode) + "&" + urlencode_row;
222
+ urlencode_row = OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.OINO_ID_FIELD, OINOConstants_js_1.OINOContentType.urlencode) + "=" + OINOStr_js_1.OINOStr.encode(OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values), OINOConstants_js_1.OINOContentType.urlencode) + "&" + urlencode_row;
223
223
  return urlencode_row;
224
224
  }
225
225
  async _writeStringUrlencode() {
@@ -241,12 +241,12 @@ class OINOModelSet {
241
241
  const model = this.datamodel;
242
242
  const fields = model.fields;
243
243
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
244
- let primary_key_values = [];
244
+ let encoded_primary_key_values = [];
245
245
  let result = {};
246
246
  for (let i = 0; i < fields.length; i++) {
247
247
  const f = fields[i];
248
248
  if (f.fieldParams.isPrimaryKey) {
249
- primary_key_values.push(f.serializeCell(row[i]) || "");
249
+ encoded_primary_key_values.push(f.serializeCell(row[i]) || "");
250
250
  }
251
251
  if ((this.queryParams?.select?.isSelected(f.name) === false) && (f.fieldParams.isPrimaryKey == false)) {
252
252
  continue;
@@ -262,7 +262,7 @@ class OINOModelSet {
262
262
  result[f.name] = value;
263
263
  }
264
264
  }
265
- result[OINOConfig_js_1.OINOConfig.OINO_ID_FIELD] = OINOConfig_js_1.OINOConfig.printOINOId(primary_key_values);
265
+ result[OINOConfig_js_1.OINOConfig.OINO_ID_FIELD] = OINOConfig_js_1.OINOConfig.printOINOId(encoded_primary_key_values);
266
266
  return result;
267
267
  }
268
268
  /**
@@ -228,13 +228,22 @@ export class OINOApiHtmlTemplate extends OINOHtmlTemplate {
228
228
  last_modified = Math.max(last_modified, new Date(row[modified_index]).getTime());
229
229
  }
230
230
  let row_id_seed = datamodel.getRowPrimarykeyValues(row).join(' ');
231
- let primary_key_values = [];
231
+ let encoded_primary_key_values = [];
232
232
  this.clearVariables();
233
233
  this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, "");
234
234
  for (let i = 0; i < datamodel.fields.length; i++) {
235
235
  const f = datamodel.fields[i];
236
236
  let value;
237
- if ((f instanceof OINODatetimeDataField) && (this._locale != null)) {
237
+ if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
238
+ value = f.serializeCell(row[i]);
239
+ if (value && (f instanceof OINONumberDataField) && (datamodel.api.hashid)) {
240
+ value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed);
241
+ }
242
+ if (f.fieldParams.isPrimaryKey) {
243
+ encoded_primary_key_values.push(value || "");
244
+ }
245
+ }
246
+ else if ((f instanceof OINODatetimeDataField) && (this._locale != null)) {
238
247
  value = f.serializeCellWithLocale(row[i], this._locale);
239
248
  }
240
249
  else if ((f instanceof OINONumberDataField) && (this._numberDecimals >= 0) && (typeof row[i] === "number")) {
@@ -244,18 +253,10 @@ export class OINOApiHtmlTemplate extends OINOHtmlTemplate {
244
253
  else {
245
254
  value = f.serializeCell(row[i]);
246
255
  }
247
- if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
248
- if (value && (f instanceof OINONumberDataField) && (datamodel.api.hashid)) {
249
- value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed);
250
- }
251
- if (f.fieldParams.isPrimaryKey) {
252
- primary_key_values.push(value || "");
253
- }
254
- }
255
256
  this.setVariableFromValue(f.name, value || "");
256
257
  }
257
258
  this.setVariableFromProperties(overrideValues);
258
- this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(primary_key_values));
259
+ this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(encoded_primary_key_values));
259
260
  html += this._renderHtml() + "\r\n";
260
261
  await dataset.next();
261
262
  }
@@ -286,7 +287,7 @@ export class OINOApi {
286
287
  this.datasource = datasource;
287
288
  this.params = params;
288
289
  if (this.params.hashidKey) {
289
- this.hashid = new OINOHashid(this.params.hashidKey, this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds);
290
+ this.hashid = new OINOHashid(this.params.hashidKey, this.params.hashidDomain || this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds);
290
291
  }
291
292
  else {
292
293
  this.hashid = null;
@@ -76,10 +76,10 @@ export class OINODataField {
76
76
  return this.datasource.printCellAsValue(cellVal, this.nativeType);
77
77
  }
78
78
  /**
79
- * Print name of column as SQL.
79
+ * Print name of the field in datasource specific format.
80
80
  *
81
81
  */
82
- printColumnName() {
82
+ printFieldName() {
83
83
  return this.datasource.printColumnName(this.name);
84
84
  }
85
85
  }
@@ -37,14 +37,14 @@ export class OINOModelSet {
37
37
  this.queryParams = queryParams;
38
38
  this.errors = this.dataset.messages;
39
39
  }
40
- _encodeAndHashFieldValue(field, value, contentType, primaryKeyValues, rowIdSeed) {
40
+ _encodeAndHashFieldValue(field, value, contentType, primaryKeyValuesEncoded, rowIdSeed) {
41
41
  let result;
42
42
  if (field.fieldParams.isPrimaryKey || field.fieldParams.isForeignKey) {
43
43
  if (value && (field instanceof OINONumberDataField) && (this.datamodel.api.hashid) && ((this.queryParams?.aggregate === undefined) || (this.queryParams.aggregate.isAggregated(field.name) == false))) {
44
44
  value = this.datamodel.api.hashid.encode(value, rowIdSeed);
45
45
  }
46
46
  if (field.fieldParams.isPrimaryKey) {
47
- primaryKeyValues.push(value || "");
47
+ primaryKeyValuesEncoded.push(value || "");
48
48
  }
49
49
  }
50
50
  result = OINOStr.encode(value, contentType);
@@ -55,7 +55,7 @@ export class OINOModelSet {
55
55
  const model = this.datamodel;
56
56
  const fields = model.fields;
57
57
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
58
- let primary_key_values = [];
58
+ let encoded_primary_key_values = [];
59
59
  let json_row = "";
60
60
  for (let i = 0; i < fields.length; i++) {
61
61
  const f = fields[i];
@@ -72,14 +72,14 @@ export class OINOModelSet {
72
72
  else {
73
73
  let is_hashed = (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) && (f instanceof OINONumberDataField) && (this.datamodel.api.hashid != null);
74
74
  let is_value = (f instanceof OINOBooleanDataField) || ((f instanceof OINONumberDataField) && !is_hashed);
75
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.json, primary_key_values, f.name + " " + row_id_seed);
75
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.json, encoded_primary_key_values, f.name + " " + row_id_seed);
76
76
  if (is_value) {
77
77
  value = value.substring(1, value.length - 1);
78
78
  }
79
79
  json_row += "," + OINOStr.encode(f.name, OINOContentType.json) + ":" + value;
80
80
  }
81
81
  }
82
- json_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.json) + ":" + OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.json) + json_row;
82
+ json_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.json) + ":" + OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.json) + json_row;
83
83
  return "{" + json_row + "}";
84
84
  }
85
85
  async _writeStringJson() {
@@ -111,7 +111,7 @@ export class OINOModelSet {
111
111
  const model = this.datamodel;
112
112
  const fields = model.fields;
113
113
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
114
- let primary_key_values = [];
114
+ let encoded_primary_key_values = [];
115
115
  let csv_row = "";
116
116
  for (let i = 0; i < fields.length; i++) {
117
117
  const f = fields[i];
@@ -123,11 +123,11 @@ export class OINOModelSet {
123
123
  csv_row += "," + OINOStr.encode(value, OINOContentType.csv); // either null or undefined
124
124
  }
125
125
  else {
126
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.csv, primary_key_values, f.name + " " + row_id_seed);
126
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.csv, encoded_primary_key_values, f.name + " " + row_id_seed);
127
127
  csv_row += "," + value;
128
128
  }
129
129
  }
130
- csv_row = OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.csv) + csv_row;
130
+ csv_row = OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.csv) + csv_row;
131
131
  return csv_row;
132
132
  }
133
133
  async _writeStringCsv() {
@@ -158,7 +158,7 @@ export class OINOModelSet {
158
158
  const model = this.datamodel;
159
159
  const fields = model.fields;
160
160
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
161
- let primary_key_values = [];
161
+ let encoded_primary_key_values = [];
162
162
  let result = "";
163
163
  for (let i = 0; i < fields.length; i++) {
164
164
  const f = fields[i];
@@ -175,7 +175,7 @@ export class OINOModelSet {
175
175
  formdata_block = this._writeRowFormdataParameterBlock(fields[i].name, null, multipart_boundary);
176
176
  }
177
177
  else {
178
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.formdata, primary_key_values, f.name + " " + row_id_seed);
178
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.formdata, encoded_primary_key_values, f.name + " " + row_id_seed);
179
179
  if (is_file) {
180
180
  formdata_block = this._writeRowFormdataFileBlock(f.name, value, multipart_boundary);
181
181
  }
@@ -185,7 +185,7 @@ export class OINOModelSet {
185
185
  }
186
186
  result += formdata_block;
187
187
  }
188
- result = this._writeRowFormdataParameterBlock(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(primary_key_values), multipart_boundary) + result;
188
+ result = this._writeRowFormdataParameterBlock(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(encoded_primary_key_values), multipart_boundary) + result;
189
189
  return result;
190
190
  }
191
191
  _writeStringFormdata() {
@@ -197,7 +197,7 @@ export class OINOModelSet {
197
197
  const model = this.datamodel;
198
198
  const fields = model.fields;
199
199
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
200
- let primary_key_values = [];
200
+ let encoded_primary_key_values = [];
201
201
  let urlencode_row = "";
202
202
  for (let i = 0; i < fields.length; i++) {
203
203
  const f = fields[i];
@@ -209,14 +209,14 @@ export class OINOModelSet {
209
209
  // console.log("OINOModelSet._writeRowUrlencode undefined field value:" + fields[i].name)
210
210
  }
211
211
  else {
212
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.urlencode, primary_key_values, f.name + " " + row_id_seed);
212
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.urlencode, encoded_primary_key_values, f.name + " " + row_id_seed);
213
213
  if (urlencode_row != "") {
214
214
  urlencode_row += "&";
215
215
  }
216
216
  urlencode_row += OINOStr.encode(f.name, OINOContentType.urlencode) + "=" + value;
217
217
  }
218
218
  }
219
- urlencode_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.urlencode) + "=" + OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.urlencode) + "&" + urlencode_row;
219
+ urlencode_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.urlencode) + "=" + OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.urlencode) + "&" + urlencode_row;
220
220
  return urlencode_row;
221
221
  }
222
222
  async _writeStringUrlencode() {
@@ -238,12 +238,12 @@ export class OINOModelSet {
238
238
  const model = this.datamodel;
239
239
  const fields = model.fields;
240
240
  let row_id_seed = model.getRowPrimarykeyValues(row).join(' ');
241
- let primary_key_values = [];
241
+ let encoded_primary_key_values = [];
242
242
  let result = {};
243
243
  for (let i = 0; i < fields.length; i++) {
244
244
  const f = fields[i];
245
245
  if (f.fieldParams.isPrimaryKey) {
246
- primary_key_values.push(f.serializeCell(row[i]) || "");
246
+ encoded_primary_key_values.push(f.serializeCell(row[i]) || "");
247
247
  }
248
248
  if ((this.queryParams?.select?.isSelected(f.name) === false) && (f.fieldParams.isPrimaryKey == false)) {
249
249
  continue;
@@ -259,7 +259,7 @@ export class OINOModelSet {
259
259
  result[f.name] = value;
260
260
  }
261
261
  }
262
- result[OINOConfig.OINO_ID_FIELD] = OINOConfig.printOINOId(primary_key_values);
262
+ result[OINOConfig.OINO_ID_FIELD] = OINOConfig.printOINOId(encoded_primary_key_values);
263
263
  return result;
264
264
  }
265
265
  /**
@@ -38,6 +38,8 @@ export type OINOApiParams = {
38
38
  hashidLength?: number;
39
39
  /** Make hashids static per row/table */
40
40
  hashidStaticIds?: boolean;
41
+ /** Defaults to api name but should be set to a domain unique value among those apis that need hashids to be compatible (e.g. hashid of a foreign key works in the main api) */
42
+ hashidDomain?: string;
41
43
  /** Name of field that has the modified field */
42
44
  cacheModifiedField?: string;
43
45
  /** Return inserted id values */
@@ -51,10 +51,10 @@ export declare class OINODataField {
51
51
  */
52
52
  printCellAsValue(cellVal: OINODataCell): string;
53
53
  /**
54
- * Print name of column as SQL.
54
+ * Print name of the field in datasource specific format.
55
55
  *
56
56
  */
57
- printColumnName(): string;
57
+ printFieldName(): string;
58
58
  }
59
59
  /**
60
60
  * Specialised class for a string column.
@@ -25,28 +25,21 @@ export declare abstract class OINODataSource {
25
25
  */
26
26
  abstract disconnect(): Promise<void>;
27
27
  /**
28
- * Print a table name using database specific SQL escaping.
28
+ * Print a column name with correct datasource specific formatting.
29
29
  *
30
- * @param sqlTable name of the table
30
+ * @param column name of the column
31
31
  *
32
32
  */
33
- abstract printTableName(sqlTable: string): string;
34
- /**
35
- * Print a column name with correct SQL escaping.
36
- *
37
- * @param sqlColumn name of the column
38
- *
39
- */
40
- abstract printColumnName(sqlColumn: string): string;
33
+ abstract printColumnName(column: string): string;
41
34
  /**
42
35
  * Print a single data value from serialization using the context of the native data
43
36
  * type with the correct SQL escaping.
44
37
  *
45
38
  * @param cellValue data from sql results
46
- * @param sqlType native type name for table column
39
+ * @param nativeType native type name for table column
47
40
  *
48
41
  */
49
- abstract printCellAsValue(cellValue: OINODataCell, sqlType: string): string;
42
+ abstract printCellAsValue(cellValue: OINODataCell, nativeType: string): string;
50
43
  /**
51
44
  * Print a single string value as valid sql literal
52
45
  *
@@ -59,10 +52,10 @@ export declare abstract class OINODataSource {
59
52
  * type.
60
53
  *
61
54
  * @param sqlValue data from serialization
62
- * @param sqlType native type name for table column
55
+ * @param nativeType native type name for table column
63
56
  *
64
57
  */
65
- abstract parseValueAsCell(sqlValue: OINODataCell, sqlType: string): OINODataCell;
58
+ abstract parseValueAsCell(sqlValue: OINODataCell, nativeType: string): OINODataCell;
66
59
  /**
67
60
  * Initialize a data model by getting the SQL schema and populating OINODataFields of
68
61
  * the model.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oino-ts/common",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "OINO TS package for common classes.",
5
5
  "author": "Matias Kiviniemi (pragmatta)",
6
6
  "license": "MPL-2.0",
@@ -19,7 +19,7 @@
19
19
  "dependencies": {
20
20
  },
21
21
  "devDependencies": {
22
- "@oino-ts/types": "1.0.0",
22
+ "@oino-ts/types": "1.0.2",
23
23
  "@types/node": "^22.0.0",
24
24
  "typescript": "~5.9.0"
25
25
  },
package/src/OINOApi.ts CHANGED
@@ -41,6 +41,8 @@ export type OINOApiParams = {
41
41
  hashidLength?:number,
42
42
  /** Make hashids static per row/table */
43
43
  hashidStaticIds?: boolean,
44
+ /** Defaults to api name but should be set to a domain unique value among those apis that need hashids to be compatible (e.g. hashid of a foreign key works in the main api) */
45
+ hashidDomain?: string,
44
46
  /** Name of field that has the modified field */
45
47
  cacheModifiedField?:string,
46
48
  /** Return inserted id values */
@@ -282,13 +284,21 @@ export class OINOApiHtmlTemplate extends OINOHtmlTemplate {
282
284
  last_modified = Math.max(last_modified, new Date(row[modified_index] as Date).getTime())
283
285
  }
284
286
  let row_id_seed:string = datamodel.getRowPrimarykeyValues(row).join(' ')
285
- let primary_key_values:string[] = []
287
+ let encoded_primary_key_values:string[] = []
286
288
  this.clearVariables()
287
289
  this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, "")
288
290
  for (let i=0; i<datamodel.fields.length; i++) {
289
291
  const f:OINODataField = datamodel.fields[i]
290
292
  let value:string|null|undefined
291
- if ((f instanceof OINODatetimeDataField) && (this._locale != null)) {
293
+ if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
294
+ value = f.serializeCell(row[i])
295
+ if (value && (f instanceof OINONumberDataField) && (datamodel.api.hashid)) {
296
+ value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed)
297
+ }
298
+ if (f.fieldParams.isPrimaryKey) {
299
+ encoded_primary_key_values.push(value || "")
300
+ }
301
+ } else if ((f instanceof OINODatetimeDataField) && (this._locale != null)) {
292
302
  value = f.serializeCellWithLocale(row[i], this._locale)
293
303
 
294
304
  } else if ((f instanceof OINONumberDataField) && (this._numberDecimals >= 0) && (typeof row[i] === "number")) {
@@ -298,18 +308,10 @@ export class OINOApiHtmlTemplate extends OINOHtmlTemplate {
298
308
  } else {
299
309
  value = f.serializeCell(row[i])
300
310
  }
301
- if (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) {
302
- if (value && (f instanceof OINONumberDataField) && (datamodel.api.hashid)) {
303
- value = datamodel.api.hashid.encode(value, f.name + " " + row_id_seed)
304
- }
305
- if (f.fieldParams.isPrimaryKey) {
306
- primary_key_values.push(value || "")
307
- }
308
- }
309
311
  this.setVariableFromValue(f.name, value || "")
310
312
  }
311
313
  this.setVariableFromProperties(overrideValues)
312
- this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(primary_key_values))
314
+ this.setVariableFromValue(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(encoded_primary_key_values))
313
315
  html += this._renderHtml() + "\r\n"
314
316
  await dataset.next()
315
317
  }
@@ -350,7 +352,7 @@ export abstract class OINOApi {
350
352
  this.params = params
351
353
 
352
354
  if (this.params.hashidKey) {
353
- this.hashid = new OINOHashid(this.params.hashidKey, this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds)
355
+ this.hashid = new OINOHashid(this.params.hashidKey, this.params.hashidDomain || this.params.apiName, this.params.hashidLength, this.params.hashidStaticIds)
354
356
  } else {
355
357
  this.hashid = null
356
358
  }
@@ -89,10 +89,10 @@ export class OINODataField {
89
89
  }
90
90
 
91
91
  /**
92
- * Print name of column as SQL.
92
+ * Print name of the field in datasource specific format.
93
93
  *
94
94
  */
95
- printColumnName():string {
95
+ printFieldName():string {
96
96
  return this.datasource.printColumnName(this.name)
97
97
  }
98
98
  }
@@ -31,30 +31,22 @@ export abstract class OINODataSource {
31
31
  abstract disconnect(): Promise<void>
32
32
 
33
33
  /**
34
- * Print a table name using database specific SQL escaping.
34
+ * Print a column name with correct datasource specific formatting.
35
35
  *
36
- * @param sqlTable name of the table
36
+ * @param column name of the column
37
37
  *
38
38
  */
39
- abstract printTableName(sqlTable:string): string
40
-
41
- /**
42
- * Print a column name with correct SQL escaping.
43
- *
44
- * @param sqlColumn name of the column
45
- *
46
- */
47
- abstract printColumnName(sqlColumn:string): string
39
+ abstract printColumnName(column:string): string
48
40
 
49
41
  /**
50
42
  * Print a single data value from serialization using the context of the native data
51
43
  * type with the correct SQL escaping.
52
44
  *
53
45
  * @param cellValue data from sql results
54
- * @param sqlType native type name for table column
46
+ * @param nativeType native type name for table column
55
47
  *
56
48
  */
57
- abstract printCellAsValue(cellValue:OINODataCell, sqlType: string): string
49
+ abstract printCellAsValue(cellValue:OINODataCell, nativeType: string): string
58
50
 
59
51
  /**
60
52
  * Print a single string value as valid sql literal
@@ -69,10 +61,10 @@ export abstract class OINODataSource {
69
61
  * type.
70
62
  *
71
63
  * @param sqlValue data from serialization
72
- * @param sqlType native type name for table column
64
+ * @param nativeType native type name for table column
73
65
  *
74
66
  */
75
- abstract parseValueAsCell(sqlValue:OINODataCell, sqlType: string): OINODataCell
67
+ abstract parseValueAsCell(sqlValue:OINODataCell, nativeType: string): OINODataCell
76
68
 
77
69
  /**
78
70
  * Initialize a data model by getting the SQL schema and populating OINODataFields of
@@ -48,14 +48,14 @@ export class OINOModelSet {
48
48
  this.errors = this.dataset.messages
49
49
  }
50
50
 
51
- private _encodeAndHashFieldValue(field:OINODataField, value:string|null, contentType:OINOContentType, primaryKeyValues:string[], rowIdSeed:string):string {
51
+ private _encodeAndHashFieldValue(field:OINODataField, value:string|null, contentType:OINOContentType, primaryKeyValuesEncoded:string[], rowIdSeed:string):string {
52
52
  let result:string
53
53
  if (field.fieldParams.isPrimaryKey || field.fieldParams.isForeignKey) {
54
54
  if (value && (field instanceof OINONumberDataField) && (this.datamodel.api.hashid) && ((this.queryParams?.aggregate === undefined) || (this.queryParams.aggregate.isAggregated(field.name) == false))) {
55
55
  value = this.datamodel.api.hashid.encode(value, rowIdSeed)
56
56
  }
57
57
  if (field.fieldParams.isPrimaryKey) {
58
- primaryKeyValues.push(value || "")
58
+ primaryKeyValuesEncoded.push(value || "")
59
59
  }
60
60
  }
61
61
  result = OINOStr.encode(value, contentType)
@@ -67,7 +67,7 @@ export class OINOModelSet {
67
67
  const model:OINODataModel = this.datamodel
68
68
  const fields:OINODataField[] = model.fields
69
69
  let row_id_seed:string = model.getRowPrimarykeyValues(row).join(' ')
70
- let primary_key_values:string[] = []
70
+ let encoded_primary_key_values:string[] = []
71
71
  let json_row:string = ""
72
72
  for (let i=0; i<fields.length; i++) {
73
73
  const f = fields[i]
@@ -85,14 +85,14 @@ export class OINOModelSet {
85
85
 
86
86
  let is_hashed:boolean = (f.fieldParams.isPrimaryKey || f.fieldParams.isForeignKey) && (f instanceof OINONumberDataField) && (this.datamodel.api.hashid != null)
87
87
  let is_value = (f instanceof OINOBooleanDataField) || ((f instanceof OINONumberDataField) && !is_hashed)
88
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.json, primary_key_values, f.name + " " + row_id_seed)
88
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.json, encoded_primary_key_values, f.name + " " + row_id_seed)
89
89
  if (is_value) {
90
90
  value = value.substring(1, value.length-1)
91
91
  }
92
92
  json_row += "," + OINOStr.encode(f.name, OINOContentType.json) + ":" + value
93
93
  }
94
94
  }
95
- json_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.json) + ":" + OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.json) + json_row
95
+ json_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.json) + ":" + OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.json) + json_row
96
96
  return "{" + json_row + "}"
97
97
  }
98
98
 
@@ -127,7 +127,7 @@ export class OINOModelSet {
127
127
  const model:OINODataModel = this.datamodel
128
128
  const fields:OINODataField[] = model.fields
129
129
  let row_id_seed:string = model.getRowPrimarykeyValues(row).join(' ')
130
- let primary_key_values:string[] = []
130
+ let encoded_primary_key_values:string[] = []
131
131
  let csv_row:string = ""
132
132
  for (let i=0; i<fields.length; i++) {
133
133
  const f = fields[i]
@@ -139,11 +139,11 @@ export class OINOModelSet {
139
139
  csv_row += "," + OINOStr.encode(value, OINOContentType.csv) // either null or undefined
140
140
 
141
141
  } else {
142
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.csv, primary_key_values, f.name + " " + row_id_seed)
142
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.csv, encoded_primary_key_values, f.name + " " + row_id_seed)
143
143
  csv_row += "," + value
144
144
  }
145
145
  }
146
- csv_row = OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.csv) + csv_row
146
+ csv_row = OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.csv) + csv_row
147
147
  return csv_row
148
148
  }
149
149
 
@@ -177,7 +177,7 @@ export class OINOModelSet {
177
177
  const model:OINODataModel = this.datamodel
178
178
  const fields:OINODataField[] = model.fields
179
179
  let row_id_seed:string = model.getRowPrimarykeyValues(row).join(' ')
180
- let primary_key_values:string[] = []
180
+ let encoded_primary_key_values:string[] = []
181
181
  let result:string = ""
182
182
  for (let i=0; i<fields.length; i++) {
183
183
  const f = fields[i]
@@ -195,7 +195,7 @@ export class OINOModelSet {
195
195
  formdata_block = this._writeRowFormdataParameterBlock(fields[i].name, null, multipart_boundary)
196
196
 
197
197
  } else {
198
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.formdata, primary_key_values, f.name + " " + row_id_seed)
198
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.formdata, encoded_primary_key_values, f.name + " " + row_id_seed)
199
199
  if (is_file) {
200
200
  formdata_block = this._writeRowFormdataFileBlock(f.name, value, multipart_boundary)
201
201
  } else {
@@ -205,7 +205,7 @@ export class OINOModelSet {
205
205
 
206
206
  result += formdata_block
207
207
  }
208
- result = this._writeRowFormdataParameterBlock(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(primary_key_values), multipart_boundary) + result
208
+ result = this._writeRowFormdataParameterBlock(OINOConfig.OINO_ID_FIELD, OINOConfig.printOINOId(encoded_primary_key_values), multipart_boundary) + result
209
209
  return result
210
210
  }
211
211
 
@@ -220,7 +220,7 @@ export class OINOModelSet {
220
220
  const model:OINODataModel = this.datamodel
221
221
  const fields:OINODataField[] = model.fields
222
222
  let row_id_seed:string = model.getRowPrimarykeyValues(row).join(' ')
223
- let primary_key_values:string[] = []
223
+ let encoded_primary_key_values:string[] = []
224
224
  let urlencode_row:string = ""
225
225
  for (let i=0; i<fields.length; i++) {
226
226
  const f = fields[i]
@@ -231,14 +231,14 @@ export class OINOModelSet {
231
231
  if ((value === undefined)) { // || (value === null)) {
232
232
  // console.log("OINOModelSet._writeRowUrlencode undefined field value:" + fields[i].name)
233
233
  } else {
234
- value = this._encodeAndHashFieldValue(f, value, OINOContentType.urlencode, primary_key_values, f.name + " " + row_id_seed)
234
+ value = this._encodeAndHashFieldValue(f, value, OINOContentType.urlencode, encoded_primary_key_values, f.name + " " + row_id_seed)
235
235
  if (urlencode_row != "") {
236
236
  urlencode_row += "&"
237
237
  }
238
238
  urlencode_row += OINOStr.encode(f.name, OINOContentType.urlencode) + "=" + value
239
239
  }
240
240
  }
241
- urlencode_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.urlencode) + "=" + OINOStr.encode(OINOConfig.printOINOId(primary_key_values), OINOContentType.urlencode) + "&" + urlencode_row
241
+ urlencode_row = OINOStr.encode(OINOConfig.OINO_ID_FIELD, OINOContentType.urlencode) + "=" + OINOStr.encode(OINOConfig.printOINOId(encoded_primary_key_values), OINOContentType.urlencode) + "&" + urlencode_row
242
242
  return urlencode_row
243
243
  }
244
244
 
@@ -262,12 +262,12 @@ export class OINOModelSet {
262
262
  const model:OINODataModel = this.datamodel
263
263
  const fields:OINODataField[] = model.fields
264
264
  let row_id_seed:string = model.getRowPrimarykeyValues(row).join(' ')
265
- let primary_key_values:string[] = []
265
+ let encoded_primary_key_values:string[] = []
266
266
  let result:any = {}
267
267
  for (let i=0; i<fields.length; i++) {
268
268
  const f = fields[i]
269
269
  if (f.fieldParams.isPrimaryKey) {
270
- primary_key_values.push(f.serializeCell(row[i]) || "")
270
+ encoded_primary_key_values.push(f.serializeCell(row[i]) || "")
271
271
  }
272
272
  if ((this.queryParams?.select?.isSelected(f.name) === false) && (f.fieldParams.isPrimaryKey == false)) {
273
273
  continue
@@ -283,7 +283,7 @@ export class OINOModelSet {
283
283
  result[f.name] = value
284
284
  }
285
285
  }
286
- result[OINOConfig.OINO_ID_FIELD] = OINOConfig.printOINOId(primary_key_values)
286
+ result[OINOConfig.OINO_ID_FIELD] = OINOConfig.printOINOId(encoded_primary_key_values)
287
287
  return result
288
288
  }
289
289