@digione/node-custom-api 0.2.0-alpha2 → 0.2.0-alpha4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digione/node-custom-api",
3
- "version": "0.2.0-alpha2",
3
+ "version": "0.2.0-alpha4",
4
4
  "description": "Typescript node digione-api",
5
5
  "author": "Monchai Jirayupong <monchai.j@seven.co.th>",
6
6
  "license": "MIT",
package/utils/helper.d.ts CHANGED
@@ -27,7 +27,12 @@ export declare const getValueFunctionFile: (key: any) => (value: any, { result,
27
27
  json?: {};
28
28
  fileUtil?: any;
29
29
  }) => Promise<void>;
30
- export declare const getValueFunctionLang: (key: any) => (value?: {}, { result, transform, spread, spread_all, raw, lang_code }?: {
30
+ export declare const getValueFunctionArray: (key: any) => (value: any, { result }: {
31
+ result?: {};
32
+ }) => void;
33
+ export declare const getValueFunctionLang: (key: any, { field_type }?: {
34
+ field_type?: string;
35
+ }) => (value?: {}, { result, transform, spread, spread_all, raw, lang_code }?: {
31
36
  result?: {};
32
37
  transform?: boolean;
33
38
  spread?: boolean;
package/utils/helper.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertCurrency = exports.xorMerge = exports.xorDecode = exports.xorEncode = exports.getInstanceNumber = exports.getDomain = exports.getParent = exports.replaceColon = exports.stripEmoji = exports.stripHtml = exports.slugifyField = exports.slugify = exports.convertToBigEndian = exports.expandTree = exports.buildTree = exports.treeToArray = exports.randomRef = exports.multiExecArray = exports.isBase64 = exports.isNumber = exports.removeAt = exports.removeSpace = exports.formatMobileNumber = exports.getMobileNumber = exports.removeHyphen = exports.signToken = exports.getTokenDataFromTokenBySecret = exports.getUUID32 = exports.getUUID = exports.sleep = exports.getValueByLang = exports.getValueFunctionLang = exports.getValueFunctionFile = exports.getDateTime = exports.getTimestampMysql = exports.getDateMysql = exports.getSlug = exports.getENVIndex = exports.getENV = exports.Joi_date = exports.getDaysBetweenDates = exports.getDateFromString = exports.getDateRangeFormat = void 0;
3
+ exports.convertCurrency = exports.xorMerge = exports.xorDecode = exports.xorEncode = exports.getInstanceNumber = exports.getDomain = exports.getParent = exports.replaceColon = exports.stripEmoji = exports.stripHtml = exports.slugifyField = exports.slugify = exports.convertToBigEndian = exports.expandTree = exports.buildTree = exports.treeToArray = exports.randomRef = exports.multiExecArray = exports.isBase64 = exports.isNumber = exports.removeAt = exports.removeSpace = exports.formatMobileNumber = exports.getMobileNumber = exports.removeHyphen = exports.signToken = exports.getTokenDataFromTokenBySecret = exports.getUUID32 = exports.getUUID = exports.sleep = exports.getValueByLang = exports.getValueFunctionLang = exports.getValueFunctionArray = exports.getValueFunctionFile = exports.getDateTime = exports.getTimestampMysql = exports.getDateMysql = exports.getSlug = exports.getENVIndex = exports.getENV = exports.Joi_date = exports.getDaysBetweenDates = exports.getDateFromString = exports.getDateRangeFormat = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const crypto = require("crypto");
6
6
  const dotenv = require("dotenv");
@@ -101,7 +101,22 @@ const getValueFunctionFile = (key) => {
101
101
  });
102
102
  };
103
103
  exports.getValueFunctionFile = getValueFunctionFile;
104
- const getValueFunctionLang = (key) => {
104
+ const getValueFunctionArray = (key) => {
105
+ return (value, { result = {} }) => {
106
+ if (value[key]) {
107
+ try {
108
+ result[key] = JSON.parse(value[key]);
109
+ }
110
+ catch (err) { }
111
+ ;
112
+ }
113
+ if (!(result[key] instanceof Array)) {
114
+ result[key] = [];
115
+ }
116
+ };
117
+ };
118
+ exports.getValueFunctionArray = getValueFunctionArray;
119
+ const getValueFunctionLang = (key, { field_type = "" } = {}) => {
105
120
  return (value = {}, { result = {}, transform = true, spread = false, spread_all = false, raw = false, lang_code = "" } = {}) => {
106
121
  if (raw || typeof value[key] == "undefined")
107
122
  return;
@@ -125,6 +140,9 @@ const getValueFunctionLang = (key) => {
125
140
  return;
126
141
  }
127
142
  result[key] = bol ? (obj[lang_code] || obj['en']) : value[key];
143
+ if (field_type == "stream") {
144
+ (0, exports.getValueFunctionArray)(key)({ [key]: result[key] }, { result });
145
+ }
128
146
  };
129
147
  };
130
148
  exports.getValueFunctionLang = getValueFunctionLang;
package/utils/stream.js CHANGED
@@ -255,7 +255,7 @@ class StreamUtil {
255
255
  delete attributes[field['field_slug']];
256
256
  }
257
257
  if (fetch) {
258
- if (field['is_lang'] == "yes") {
258
+ if (field['is_lang'] == "yes" && field['field_type'] != "stream") {
259
259
  label && fetchLabel.push(field);
260
260
  fetchFn.push((0, helper_2.getValueFunctionLang)(field['field_slug']));
261
261
  }
@@ -286,6 +286,15 @@ class StreamUtil {
286
286
  }
287
287
  }
288
288
  break;
289
+ case "stream":
290
+ if (include[field['field_slug']] || include_all) {
291
+ label && fetchLabel.push(field);
292
+ fetchFn.push((field['is_lang'] == "yes") ? (0, helper_2.getValueFunctionLang)(field['field_slug'], { field_type: field['field_type'] }) : (0, helper_2.getValueFunctionArray)(field['field_slug']));
293
+ }
294
+ else {
295
+ delete attributes[field['field_slug']];
296
+ }
297
+ break;
289
298
  }
290
299
  }
291
300
  }
@@ -404,6 +413,15 @@ class StreamUtil {
404
413
  else if (typeof default_value[item['field_slug']] !== 'undefined') {
405
414
  item['field_value'] = default_value[item['field_slug']];
406
415
  }
416
+ if (item['field_type'] == "stream" && item['field_value']) {
417
+ try {
418
+ item['field_value'] = JSON.parse(item['field_value']);
419
+ }
420
+ catch (err) { }
421
+ if (!(item['field_value'] instanceof Array)) {
422
+ item['field_value'] = [];
423
+ }
424
+ }
407
425
  if (item['instructions']) {
408
426
  (0, helper_2.getValueFunctionLang)('instructions')(item, { result: item, lang_code });
409
427
  }
@@ -469,7 +487,9 @@ class StreamUtil {
469
487
  return Object.assign({ field_slug: i['lang_code'], field_name: `${convert_option ? (0, i18n_1.__)({ phrase: item['field_name'], locale: lang_code }) : item['field_name']} (${i['lang_code']})`, field_type: item['field_type'], field_name_raw: item['field_name'] ? item['field_name'] : "", is_required: item['is_required'] }, include);
470
488
  });
471
489
  fields.push(Object.assign(Object.assign({}, item), { field_data }));
472
- continue;
490
+ if (item['field_type'] != "stream") {
491
+ continue;
492
+ }
473
493
  }
474
494
  if (convert_option) {
475
495
  let obj_value = {};
@@ -661,6 +681,14 @@ class StreamUtil {
661
681
  field_data['range']['field_value'] = default_value[field_data['range']['field_target']];
662
682
  }
663
683
  }
684
+ else if (item['field_type'] == "stream") {
685
+ if (field_data['choose_stream']) {
686
+ let stream = yield stream_1.StreamModel.schema(this.ref, "_").findOne({ where: { id: field_data['choose_stream'] }, raw: true, attributes: ['stream_slug', 'stream_namespace'] });
687
+ if (stream) {
688
+ item['stream'] = yield this.findField(stream['stream_slug'], stream['stream_namespace'], { field_only: true, convert_option: true });
689
+ }
690
+ }
691
+ }
664
692
  }
665
693
  fields.push(Object.assign(Object.assign({}, item), { field_data }));
666
694
  }
@@ -813,7 +841,7 @@ class StreamUtil {
813
841
  stream = stream || {};
814
842
  let id_stream = stream['id'], stream_prefix = stream['stream_prefix'];
815
843
  if (fields && fields.length) {
816
- fields = fields.filter(({ is_lang, field_type, field_data }) => field_type && (is_lang == "yes" || (field_type == "multiple" && field_data['self_table'] != "yes") || field_type == "image" || field_type == "file" || field_data['field_type'] == "encrypt"));
844
+ fields = fields.filter(({ is_lang, field_type, field_data }) => field_type && (is_lang == "yes" || (field_type == "multiple" && field_data['self_table'] != "yes") || field_type == "image" || field_type == "file" || field_data['field_type'] == "encrypt" || field_type == "stream"));
817
845
  }
818
846
  if (!Object.keys(raw_input).length) {
819
847
  raw_input = input;
@@ -893,6 +921,9 @@ class StreamUtil {
893
921
  else if (field_type == "multiple") {
894
922
  fields_post.push(fields[index]);
895
923
  }
924
+ else if (field_type == "stream" && input[field_slug]) {
925
+ data[field_slug] = JSON.stringify(input[field_slug]);
926
+ }
896
927
  })));
897
928
  }
898
929
  if (id) {
@@ -956,8 +987,8 @@ class StreamUtil {
956
987
  }
957
988
  let folder = yield fileUtil.createFolder(index, { parent_id: where_folder['parent_id'] });
958
989
  let where_file = { folder_id: folder['id'], is_hidden: "yes" };
959
- where_file = fileUtil.beforeFindFile(where_file, { tags, group });
960
- let query = yield file_1.FileModel.schema(ref, "_").findAll({ where: where_file, attributes: ['id', 'name'], raw: true });
990
+ let option_file = fileUtil.beforeFindFile(where_file, { tags, group, verify: true });
991
+ let query = yield file_1.FileModel.schema(ref, "_").findAll({ where: option_file.where, attributes: ['id', 'name'], raw: true });
961
992
  id_files = query.reduce((total, item) => Object.assign(total, { [item['name']]: item['id'] }), {});
962
993
  let input_files = [];
963
994
  yield Promise.all(fields.map(({ field_type, field_slug, field_data }) => tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -1666,6 +1697,12 @@ class StreamUtil {
1666
1697
  yield (0, db_1.addColumn)(`${this.ref}_${table}`, field_slug, Object.assign({ type: sequelize.STRING(20) }, opt));
1667
1698
  }
1668
1699
  break;
1700
+ case "stream":
1701
+ if (field_data['self_table'] == "yes") {
1702
+ opt['defaultValue'] = undefined;
1703
+ yield (0, db_1.addColumn)(`${this.ref}_${table}`, field_slug, Object.assign({ type: sequelize.TEXT('long') }, opt));
1704
+ }
1705
+ break;
1669
1706
  }
1670
1707
  }
1671
1708
  }
@@ -1826,6 +1863,9 @@ class StreamUtil {
1826
1863
  }
1827
1864
  field_data = _.pick(field_data, ['range']);
1828
1865
  break;
1866
+ case "stream":
1867
+ field_data = _.pick(field_data, ['choose_stream', 'self_table']);
1868
+ break;
1829
1869
  default:
1830
1870
  field_data = {};
1831
1871
  break;
@@ -1836,7 +1876,8 @@ class StreamUtil {
1836
1876
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1837
1877
  let field_lang = [];
1838
1878
  let file = req ? ((req.file ? [req.file] : [].concat(req.files || [])).reduce((total, item) => Object.assign(total, { [item['fieldname']]: item }), {})) : {};
1839
- streams.forEach(({ field_type, field_slug, is_required, is_lang, field_data, data }) => {
1879
+ for (let val of streams) {
1880
+ let { field_type, field_slug, is_required, is_lang, field_data, data } = val;
1840
1881
  let field;
1841
1882
  field_data = field_data || {};
1842
1883
  is_required = (is_required == "yes" && (isNew || (!input[field_slug] && typeof input[field_slug] != "undefined")));
@@ -1969,6 +2010,18 @@ class StreamUtil {
1969
2010
  }
1970
2011
  field = field.regex(/^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$/).messages({ 'string.pattern.base': `${field_slug} invalid format` });
1971
2012
  break;
2013
+ case "stream":
2014
+ if (field_data['choose_stream']) {
2015
+ let stream = yield stream_1.StreamModel.schema(this.ref, "_").findOne({ where: { id: field_data['choose_stream'] }, raw: true, attributes: ['stream_slug', 'stream_namespace'] });
2016
+ if (stream) {
2017
+ let streams = yield this.findField(stream['stream_slug'], stream['stream_namespace'], { field_only: true, convert_option: true });
2018
+ let validator = yield this.getValidator(streams, { isNew: true, required: is_required, lang, stripUnknown: true });
2019
+ field = Joi.array().items(validator);
2020
+ }
2021
+ }
2022
+ field = field || Joi.array();
2023
+ field = is_required ? field.required().min(1) : field.allow(null);
2024
+ break;
1972
2025
  }
1973
2026
  field = field || Joi.any();
1974
2027
  if (is_required)
@@ -1976,12 +2029,12 @@ class StreamUtil {
1976
2029
  if (is_lang == "yes") {
1977
2030
  if (!lang.length) {
1978
2031
  field_lang.push({ field_slug, field });
1979
- return;
2032
+ continue;
1980
2033
  }
1981
2034
  field = Joi.object().keys(lang.reduce((total, i) => Object.assign(total, { [i['lang_code']]: field }), {}));
1982
2035
  }
1983
2036
  schema[field_slug] = field;
1984
- });
2037
+ }
1985
2038
  if (field_lang.length) {
1986
2039
  lang = yield this.languageUtil.getLangsLive();
1987
2040
  for (let item of field_lang) {