From 6a0eba853d0b651ad47e5e704c6da8c1320633d9 Mon Sep 17 00:00:00 2001 From: Adhidarma Hadiwinoto <me@adhisimon.org> Date: Sat, 19 Sep 2020 19:30:03 +0700 Subject: [PATCH] getDetailFromMessage support replace rules --- index.js | 10 +++-- package-lock.json | 122 +++++++++++------------------------------------------- package.json | 3 +- test/main.js | 32 ++++++++++++++ 4 files changed, 64 insertions(+), 103 deletions(-) diff --git a/index.js b/index.js index b36710b..94e0fd9 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ "use strict"; +const regexLooperReplace = require('tektrans-lib/regex-looper/replace'); const rcFromMsg = require('komodo-sdk/rc-from-msg'); const organicRc = require('./rc'); @@ -111,16 +112,17 @@ function getBalanceFromMessage(msg, rule) { return Number(result.replace(/\./g, '')); } -function getDetailFromMessage(msg, rule) { +function getDetailFromMessage(msg, rule, replacementRules) { if (!rule) { rule = { pattern: " Detail:\\s*(.+?)\\s+Sisa [Ss]aldo", match_idx: 1, } } - - let result = extractFromMessage(msg, rule); - return (result || '').trim(); + + return ( + regexLooperReplace(extractFromMessage(msg, rule), replacementRules) || '' + ).trim() || null; } function splitPostpaidDetail(str) { diff --git a/package-lock.json b/package-lock.json index bf7607f..468fcab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -138,7 +138,8 @@ "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "optional": true }, "array-flatten": { "version": "1.1.1", @@ -369,23 +370,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=", - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=", - "requires": { - "typewise-core": "^1.2" - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1839,7 +1823,8 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "optional": true }, "getpass": { "version": "0.1.7", @@ -2093,7 +2078,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "optional": true }, "is-data-descriptor": { "version": "0.1.4", @@ -2137,7 +2123,8 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "optional": true }, "is-extglob": { "version": "2.1.1", @@ -2184,6 +2171,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "optional": true, "requires": { "isobject": "^3.0.1" } @@ -2220,7 +2208,8 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "optional": true }, "isstream": { "version": "0.1.2", @@ -2299,30 +2288,29 @@ "basic-auth": "^2.0.0", "body-parser": "^1.18.2", "dot-object": "^1.7.0", - "express": "^4.16.3", + "express": "^4.17.1", "express-session": "^1.15.6", "fs-copy-file": "^2.1.2", "json-query": "^2.2.2", "lru-cache": "^4.1.1", - "macaddress": "^0.2.8", - "moment": "^2.19.1", + "macaddress": "^0.2.9", + "moment": "^2.24.0", "node-machine-id": "^1.1.10", "node-natural-sort": "^0.8.6", "numeral": "^2.0.6", - "nunjucks": "^3.0.1", + "nunjucks": "^3.2.1", "pkginfo": "^0.4.1", "redis": "^2.8.0", - "request": "^2.81.0", + "request": "^2.88.0", "sha1": "^1.1.1", "simple-git": "^1.80.1", - "sort-object": "^3.0.2", "strftime": "^0.10.0", "string-natural-compare": "^2.0.2", "uniqid": "^4.1.1", "uuid": "^3.1.0", - "winston": "^2.3.1", + "winston": "^3.3.3", "winston-circular-buffer": "^1.0.0", - "winston-daily-rotate-file": "^1.4.6" + "winston-daily-rotate-file": "^3.10.0" } }, "lcid": { @@ -3324,61 +3312,6 @@ } } }, - "sort-asc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha1-AKSelHvCXVEL/eLLuN/9qfUOsvw=" - }, - "sort-desc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha1-KAwb2vxld4h87brR7S5BwDeXZkY=" - }, - "sort-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.2.tgz", - "integrity": "sha1-2vK2k/YR990qIbgrgF5OrCMPdV4=", - "requires": { - "bytewise": "^1.1.0", - "get-value": "^2.0.2", - "is-extendable": "^0.1.1", - "sort-asc": "^0.2.0", - "sort-desc": "^0.2.0", - "union-value": "^0.2.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - }, - "union-value": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz", - "integrity": "sha1-c3UVJ4ZnkFfns3qmdug0aPwCdPA=", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - } - } - } - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3559,6 +3492,10 @@ } } }, + "tektrans-lib": { + "version": "git+https://github.com/tektrans/tektrans-lib.git#fa043c81e72e10ee1232e1273fd1297c3d50a88d", + "from": "git+https://github.com/tektrans/tektrans-lib.git" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3584,6 +3521,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -3592,6 +3530,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -3678,19 +3617,6 @@ "mime-types": "~2.1.24" } }, - "typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=", - "requires": { - "typewise-core": "^1.2.0" - } - }, - "typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=" - }, "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", diff --git a/package.json b/package.json index 974a2b8..c677f37 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "should": "^13.2.3" }, "dependencies": { - "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git" + "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git", + "tektrans-lib": "git+https://github.com/tektrans/tektrans-lib.git" } } diff --git a/test/main.js b/test/main.js index da43dff..e7927bb 100644 --- a/test/main.js +++ b/test/main.js @@ -105,6 +105,38 @@ describe('#irs', function() { irs.getDetailFromMessage('REFF#561744 CEK TAGIHAN PLN25 SUKSES IDPEL:172000147469 Detail: NAMA:MASJID-NURUL-IMAN/DAYA:900/TARIF:S2/JMLBLN:1BLN/PERIODE:201912/METERKINI:19627/METERLALU:19428/TAGIHAN:79340/ADM:2500/DENDA:0/TOTALTAGIHAN:81840 Sisa Saldo: 1.000.000 - 0 = 1.000.000 @2019/12/20 19:41:21') .should.equal('NAMA:MASJID-NURUL-IMAN/DAYA:900/TARIF:S2/JMLBLN:1BLN/PERIODE:201912/METERKINI:19627/METERLALU:19428/TAGIHAN:79340/ADM:2500/DENDA:0/TOTALTAGIHAN:81840'); }); + + it('should return correct result with custom pattern', () => { + irs.getDetailFromMessage( + 'Cek Tagihan PLN SUKSES ke 520550410074, REFID: 520550410074/MASJID.. KATEGORI:S2/900 , PERIODE:092020, JUMLAH:1, TOTAL TAGIHAN : 72.010', + { + pattern: '(REFID: .*)$', + match_idx: 1, + }, + [ + { + pattern: ' *\\.\\.+ *', + replacement: '/', + flags: 'g', + }, + { + pattern: ' *, *', + replacement: '/', + flags: 'g', + }, + { + pattern: ' *: *', + replacement: ':', + flags: 'g', + }, + { + pattern: 'TOTAL TAGIHAN*', + replacement: 'TOTALTAGIHAN', + }, + ] + ) + .should.equal('REFID:520550410074/MASJID/KATEGORI:S2/900/PERIODE:092020/JUMLAH:1/TOTALTAGIHAN:72.010', 'TAJIRA PLN POSTPAID'); + }); }); describe('#splitPostpaidDetail', () => { -- 1.9.0