spotlibs-components 0.1.23 → 0.1.24
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/utils/index.mjs +5 -1
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/utils/exception.d.ts +54 -9
- package/src/utils/exception.js +13 -0
- package/src/utils/index.js +2 -0
package/dist/utils/index.mjs
CHANGED
|
@@ -331,6 +331,7 @@ var getTipeBankKorporasi = (data) => {
|
|
|
331
331
|
};
|
|
332
332
|
|
|
333
333
|
// src/utils/exception.js
|
|
334
|
+
var SUCCESS_CODE = "00";
|
|
334
335
|
var HEADER_EXCEPTION = "X0";
|
|
335
336
|
var ACCESS_EXCEPTION = "X1";
|
|
336
337
|
var SESSION_EXCEPTION = "X2";
|
|
@@ -362,6 +363,9 @@ var ApiException = class extends Error {
|
|
|
362
363
|
this.responseDesc = desc;
|
|
363
364
|
}
|
|
364
365
|
};
|
|
366
|
+
function isSuccessCode(responseCode) {
|
|
367
|
+
return responseCode === SUCCESS_CODE;
|
|
368
|
+
}
|
|
365
369
|
function isExceptionCode(responseCode) {
|
|
366
370
|
return Object.keys(EXCEPTION_MESSAGES).includes(responseCode);
|
|
367
371
|
}
|
|
@@ -497,6 +501,6 @@ function navigateToCI({ url, baseUrl, icon = "", title = "" }) {
|
|
|
497
501
|
);
|
|
498
502
|
}
|
|
499
503
|
|
|
500
|
-
export { ACCESS_EXCEPTION, ApiException, CLIENT_ALLOWED_ORIGINS, CLIENT_PUBLIC_API_ROUTES, COOKIE_MAX_SIZE, EXCEPTION_MESSAGES, HEADER_EXCEPTION, INVALIDRULE_EXCEPTION, NOTFOUND_EXCEPTION, NOT_AUTHORIZE_RESPONSE_CODE, PARAMETER_EXCEPTION, PUBLIC_PATHS, RUNTIME_EXCEPTION, SESSION_EXCEPTION, THIRDPARTY_EXCEPTION, UNSUPPORTED_EXCEPTION, WAITING_EXCEPTION, callAsset, checkRoleUser, dashedAccount, dashedNPWP, dateFirstSlashToYearFirstDash, ddmmyyToSlashDate, disableFormBuilder, disableFormElements, formatAccountNumber, formatCurrency, formatCurrency2 as formatCurrencyLegacy, formatDateToDDMMYYYY, formatDateToDDSlashMMSlashYYYY, formatDigit, formatNPWP, formatNominal, formatNominal2 as formatNominalLegacy, formatResponseDesc, formatResponseDesc2 as formatResponseDescLegacy, formatRupiah, generateVcifId, getExceptionMessage, getLocalStorageItem, getTipeBankKorporasi, isExceptionCode, maskString, matchWiths, navigateToCI, sevenDigitToDateFirstDash, sevenDigitToDateFirstSlash, sevenDigitToYearFirstDash, snakeToCamelWithSpace, stringToBoolean, stringToBoolean2 as stringToBooleanLegacy, titleCase, titleCase2 as titleCaseLegacy, toDateFirstSlash, toDateTimeHourMinute, toYearFirstDash, toggleUsingDummyWbenchEndpoint, yearFirstDashToDateFirstDash, yearFirstDashToDateFirstSlash };
|
|
504
|
+
export { ACCESS_EXCEPTION, ApiException, CLIENT_ALLOWED_ORIGINS, CLIENT_PUBLIC_API_ROUTES, COOKIE_MAX_SIZE, EXCEPTION_MESSAGES, HEADER_EXCEPTION, INVALIDRULE_EXCEPTION, NOTFOUND_EXCEPTION, NOT_AUTHORIZE_RESPONSE_CODE, PARAMETER_EXCEPTION, PUBLIC_PATHS, RUNTIME_EXCEPTION, SESSION_EXCEPTION, SUCCESS_CODE, THIRDPARTY_EXCEPTION, UNSUPPORTED_EXCEPTION, WAITING_EXCEPTION, callAsset, checkRoleUser, dashedAccount, dashedNPWP, dateFirstSlashToYearFirstDash, ddmmyyToSlashDate, disableFormBuilder, disableFormElements, formatAccountNumber, formatCurrency, formatCurrency2 as formatCurrencyLegacy, formatDateToDDMMYYYY, formatDateToDDSlashMMSlashYYYY, formatDigit, formatNPWP, formatNominal, formatNominal2 as formatNominalLegacy, formatResponseDesc, formatResponseDesc2 as formatResponseDescLegacy, formatRupiah, generateVcifId, getExceptionMessage, getLocalStorageItem, getTipeBankKorporasi, isExceptionCode, isSuccessCode, maskString, matchWiths, navigateToCI, sevenDigitToDateFirstDash, sevenDigitToDateFirstSlash, sevenDigitToYearFirstDash, snakeToCamelWithSpace, stringToBoolean, stringToBoolean2 as stringToBooleanLegacy, titleCase, titleCase2 as titleCaseLegacy, toDateFirstSlash, toDateTimeHourMinute, toYearFirstDash, toggleUsingDummyWbenchEndpoint, yearFirstDashToDateFirstDash, yearFirstDashToDateFirstSlash };
|
|
501
505
|
//# sourceMappingURL=index.mjs.map
|
|
502
506
|
//# sourceMappingURL=index.mjs.map
|
package/dist/utils/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/formatters/account.js","../../src/utils/formatters/currency.js","../../src/utils/formatters/date.js","../../src/utils/formatters/string.js","../../src/utils/asset.js","../../src/utils/booleanUtils.js","../../src/utils/constants.js","../../src/utils/disableFormElements.js","../../src/utils/generateTimestamp.js","../../src/utils/localStorage.js","../../src/utils/tipeBank.js","../../src/utils/exception.js","../../src/utils/formatString.js","../../src/utils/navigateToCI.js"],"names":["formatCurrency","formatResponseDesc","formatNominal","titleCase","stringToBoolean"],"mappings":";;;;AAoBO,SAAS,oBAAoB,KAAA,EAAO;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,EAAA,MAAM,gBAAgB,KAAA,CACnB,QAAA,EAAS,CACT,OAAA,CAAQ,WAAW,EAAE,CAAA;AAExB,EAAA,IAAI,aAAA,CAAc,SAAS,EAAA,EAAI;AAC7B,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,qCAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,uBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,gBAAA,EAAkB,OAAO,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,aAAA;AACT;AAaO,SAAS,WAAW,KAAA,EAAO;AAChC,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,EAAA,MAAM,gBAAgB,KAAA,CACnB,QAAA,EAAS,CACT,OAAA,CAAQ,OAAO,EAAE,CAAA;AAEpB,EAAA,IAAI,aAAA,CAAc,SAAS,EAAA,EAAI;AAC7B,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,4CAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,EAAA,EAAI;AACpC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,qCAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,uBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,MACnB,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,aAAA;AACT;;;ACzEO,IAAM,cAAA,GAAiB,CAC5B,KAAA,EACA;AAAA,EACE,MAAA,GAAS,OAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,iBAAA,GAAoB,CAAA;AAAA,EACpB,iBAAA,GAAoB;AACtB,CAAA,GAAI,EAAC,KACF;AACH,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,EAAA;AAClD,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AAEnC,EAAA,MAAM,cAAA,GAAiB,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,IACnD,KAAA,EAAO,UAAA;AAAA,IACP,QAAA;AAAA,IACA,qBAAA,EAAuB,iBAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA;AAEb,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACzC;AAWO,IAAM,YAAA,GAAe,CAAC,KAAA,KAAU;AACrC,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AAiBO,IAAM,aAAA,GAAgB,CAC3B,KAAA,EACA;AAAA,EACE,MAAA,GAAS,OAAA;AAAA,EACT,iBAAA,GAAoB,CAAA;AAAA,EACpB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB;AACrB,CAAA,GAAI,EAAC,KACF;AACH,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,IAAI,OAAO,EAAA;AAElE,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,WAAA,GAAc,KAAA;AAAA,EAChB,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AAEpC,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,WAAA,GAAc,MAAA,CAAO,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,IACjE,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,OAAO,KAAK,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG,OAAO,OAAO,KAAK,CAAA;AAE3C,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,cAAA,CAAe,MAAA,EAAQ;AAAA,IACnD,qBAAA,EAAuB,iBAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA;AAED,EAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,IAAA,EAAM,gBAAgB,CAAA;AACjD;AAWO,IAAM,WAAA,GAAc,CAAC,KAAA,KAAU;AACpC,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,OAAO,IAAI,KAAK,YAAA,CAAa,OAAA,EAAS,EAAE,qBAAA,EAAuB,CAAA,EAAG,CAAA,CAAE,MAAA;AAAA,IAClE,GAAA,IAAO;AAAA,GACT;AACF;;;ACtGO,IAAM,eAAA,GAAkB,CAAC,KAAA,KAAU;AACxC,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AAWO,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAAU;AACzC,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;AAUO,IAAM,8BAAA,GAAiC,CAAC,IAAA,KAAS;AACtD,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;AAUO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAAS;AAC5C,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAAA,CAAA;AAC9B;AAUO,IAAM,4BAAA,GAA+B,CAAC,KAAA,KAAU;AACrD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAC1C,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;AAUO,IAAM,6BAAA,GAAgC,CAAC,KAAA,KAAU;AACtD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA,GAAI,KAAA;AAC3B,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAUO,IAAM,6BAAA,GAAgC,CAAC,KAAA,KAAU;AACtD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,CAAC,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAC1C,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAClE;AAYO,IAAM,0BAAA,GAA6B,CAAC,KAAA,KAAU;AACnD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACvC,EAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACnD,EAAA,MAAM,aAAa,QAAA,CAAS,iBAAA,EAAmB,EAAE,CAAA,IAAK,KAAK,IAAA,GAAO,IAAA;AAClE,EAAA,MAAM,OAAO,UAAA,GAAa,iBAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;AAUO,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAAU;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACnC,EAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC/C,EAAA,MAAM,aAAa,QAAA,CAAS,iBAAA,EAAmB,EAAE,CAAA,IAAK,KAAK,IAAA,GAAO,IAAA;AAClE,EAAA,MAAM,OAAO,UAAA,GAAa,iBAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AAUO,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAAU;AAClD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACnC,EAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC/C,EAAA,MAAM,aAAa,QAAA,CAAS,iBAAA,EAAmB,EAAE,CAAA,IAAK,KAAK,IAAA,GAAO,IAAA;AAClE,EAAA,MAAM,OAAO,UAAA,GAAa,iBAAA;AAC1B,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;AAUO,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAAU;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,KAAK,CAAA;AAC3B,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,KAAK,WAAA,EAAY;AAC9B,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACzD,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AACpD;AAWO,IAAM,iBAAA,GAAoB,CAAC,KAAA,KAAU;AAC1C,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,EAAA;AACzC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACvC,EAAA,MAAM,IAAA,GACJ,SAAS,UAAA,EAAY,EAAE,KAAK,EAAA,GAAK,IAAA,GAAO,aAAa,IAAA,GAAO,UAAA;AAC9D,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAA,CAAA;AAChC;;;ACxMO,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAAS;AAC1C,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,OAAO,IAAA,CACJ,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,EAAQ,EAAA,KAAO,GAAA,GAAM,EAAA,CAAG,WAAA,EAAa,CAAA,CACxD,OAAA,CAAQ,aAAa,SAAS,CAAA;AACnC;AAWO,IAAM,SAAA,GAAY,CAAC,GAAA,KAAQ;AAChC,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,EAAA,OAAO,GAAA,CACJ,aAAY,CACZ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,GAAG,CAAA;AACb;AAWO,SAAS,sBAAsB,QAAA,EAAU;AAC9C,EAAA,IAAI,CAAC,UAAU,OAAO,EAAA;AACtB,EAAA,OAAO,QAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,aAAa,CAAC,MAAA,EAAQ,WAAW,CAAA,CAAA,EAAI,MAAA,CAAO,aAAa,CAAA,CAAE,EACnE,OAAA,CAAQ,UAAA,EAAY,CAAC,CAAA,EAAG,MAAA,KAAW,MAAA,CAAO,WAAA,EAAa,CAAA;AAC5D;AAYO,IAAM,eAAA,GAAkB,CAAC,GAAA,KAAQ;AACtC,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,OAAA,EAAS;AACrC,IAAA,OAAO,GAAA,KAAQ,MAAA;AAAA,EACjB;AACA,EAAA,OAAO,MAAA;AACT;AAYO,SAAS,UAAA,CAAW,SAAA,EAAW,MAAA,GAAS,EAAC,EAAG;AACjD,EAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AACvB,EAAA,OAAO,OAAO,IAAA,CAAK,CAAC,MAAM,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA;AACjD;AAYO,IAAM,UAAA,GAAa,CAAC,KAAA,EAAO,IAAA,KAAS;AACzC,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA;AAC9B,EAAA,IAAI,GAAA,GAAM,QAAQ,MAAA,GAAS,CAAA;AAE3B,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,GAAA,GAAM,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAA,CAAQ,MAAA,CAAO,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA,EAAG,GAAG,GAAA,CAAI,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,CAAE,KAAA,CAAM,EAAE,CAAC,CAAA;AAC5E,EAAA,OAAO,OAAA,CAAQ,KAAK,EAAE,CAAA;AACxB;;;ACjHO,IAAM,SAAA,GAAY,CAAC,GAAA,GAAM,EAAA,KAAO;AAAvC,EAAA,IAAA,EAAA;AACE,EAAA,MAAM,QAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GACd,EAAA,GAAA,CAAA,CACC,EAAA,GAAA,MAAA,CAAO,aAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,WAAA,KACrB,OAAA,CAAQ,GAAA,CAAI,qBAAA,IACZ,EAAA;AAER,EAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,GAAG,CAAA,CAAA;AAC1B;;;ACTO,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAO,QAAA,KAAa;AAChD,EAAA,IAAI,MAAA,GAAS,KAAA;AAEb,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,IAAA,IAAG,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAE;AAC7C,MAAA,KAAA,IAAQ,QAAQ,KAAA,EAAM;AACpB,QAAA,IAAG,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAE;AACzB,UAAA,MAAA,GAAS,IAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,8BAAA,GAAiC,CAAC,MAAA,KAAW;AACxD,EAAA,OAAO,MAAA,KAAW,IAAA;AACpB;;;AClBO,IAAM,2BAAA,GAA8B,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI;AAErD,IAAM,YAAA,GAAe,CAAC,gBAAgB;AAEtC,IAAM,eAAA,GAAkB;AAExB,IAAM,wBAAA,GAA2B;AAAA,EACtC,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;AAGO,IAAM,sBAAA,GAAyB;AAAA,EACpC,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;;;ACnBO,IAAM,mBAAA,GAAsB,CAAC,QAAA,KAAa;AAC/C,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,gBAAA,CAAiB,QAAQ,CAAA;AAEvD,EAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,OAAA,KAAY;AAChC,IAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AACnB,IAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AAAA,EACrB,CAAC,CAAA;AACH;AAEO,IAAM,kBAAA,GAAqB,CAAC,MAAA,EAAQ,UAAA,KAAe;AACxD,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC3B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,OAAO,iCACF,KAAA,CAAA,EADE;AAAA,MAEL,UAAA,EAAY,UAAA,GAAa,IAAA,GAAO,KAAA,CAAM;AAAA,KACxC,CAAA;AAAA,EACF,CAAC,CAAA;AACH;;;AClBO,SAAS,cAAA,GAAiB;AAC/B,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,OAAO,OAAO,SAAS,CAAA,CAAA;AACzB;;;ACHO,SAAS,oBAAoB,GAAA,EAAK;AACvC,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AACtC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACPO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAAS;AAA9C,EAAA,IAAA,EAAA,EAAA,EAAA;AACI,EAAA,MAAM,QAAA,GAAW,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,iBAAA,KAAsB,OAAA,CAAA;AAC/D,EAAA,MAAM,SAAA,GAAY,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,KAAK,iBAAA,KAAsB,OAAA,CAAA;AAClE,EAAA,IAAI,QAAA,GAAW,EAAA;AAGf,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,QAAA,GAAA,CAAW,EAAA,GAAA,SAAA,CAAU,CAAC,CAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,SAAA;AAAA,EAC7B,CAAA,MAAO;AACH,IAAA,QAAA,GAAA,CAAA,CAAW,kCAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,SAAA,KAAc,GAAA,CAAA,KAAtC,mBAA4C,SAAA,KAAa,GAAA;AAAA,EACxE;AAEA,EAAA,OAAO,QAAA;AACX;;;ACLO,IAAM,gBAAA,GAAmB;AACzB,IAAM,gBAAA,GAAmB;AACzB,IAAM,iBAAA,GAAoB;AAC1B,IAAM,mBAAA,GAAsB;AAC5B,IAAM,kBAAA,GAAqB;AAC3B,IAAM,qBAAA,GAAwB;AAC9B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,iBAAA,GAAoB;AAC1B,IAAM,qBAAA,GAAwB;AAC9B,IAAM,iBAAA,GAAoB;AAI1B,IAAM,kBAAA,GAAqB;AAAA,EAChC,CAAC,gBAAgB,GAAG,wBAAA;AAAA,EACpB,CAAC,gBAAgB,GAAG,eAAA;AAAA,EACpB,CAAC,iBAAiB,GAAG,iBAAA;AAAA,EACrB,CAAC,mBAAmB,GAAG,mBAAA;AAAA,EACvB,CAAC,kBAAkB,GAAG,gBAAA;AAAA,EACtB,CAAC,qBAAqB,GAAG,wBAAA;AAAA,EACzB,CAAC,oBAAoB,GAAG,6BAAA;AAAA,EACxB,CAAC,iBAAiB,GAAG,kCAAA;AAAA,EACrB,CAAC,qBAAqB,GAAG,uBAAA;AAAA,EACzB,CAAC,iBAAiB,GAAG;AACvB;AAgBO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,WAAA,CAAY,cAAc,YAAA,EAAc;AACtC,IAAA,MAAM,IAAA,GACJ,YAAA,IACA,kBAAA,CAAmB,YAAY,CAAA,IAC/B,8BAAA;AACF,IAAA,KAAA,CAAM,CAAA,CAAA,EAAI,YAAY,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAAA,EACtB;AACF;AAYO,SAAS,gBAAgB,YAAA,EAAc;AAC5C,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA,CAAE,SAAS,YAAY,CAAA;AAC9D;AAYO,SAAS,oBAAoB,YAAA,EAAc;AAChD,EAAA,OAAO,kBAAA,CAAmB,YAAY,CAAA,IAAK,8BAAA;AAC7C;;;ACnFO,IAAMA,eAAAA,GAAiB,CAC5B,KAAA,EACA,OAAA,GAAU,OAAA,EACV,OAAO,KAAA,EACP,OAAA,GAAU,CAAA,EACV,OAAA,GAAU,CAAA,KACP;AACH,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,EAAA;AAClD,EAAA,IAAI,cAAA,GAAiB,IAAI,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS;AAAA,IAClD,KAAA,EAAO,UAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,qBAAA,EAAuB,OAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAEf,EAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACzC;AAEO,IAAMC,mBAAAA,GAAqB,CAAC,IAAA,KAAS;AAC1C,EAAA,OAAO,IAAA,CACJ,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,EAAQ,EAAA,KAAO,GAAA,GAAM,EAAA,CAAG,WAAA,EAAa,CAAA,CACxD,OAAA,CAAQ,aAAa,SAAS,CAAA;AACnC;AAEO,SAAS,cAAc,KAAA,EAAO;AAEnC,EAAA,MAAM,gBAAgB,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA;AAAA,IAC3B,+CAAA;AAAA,IACA;AAAA,GAAA;AAGF,EAAA,IAAA,CAAI,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,UAAS,EAAA,EAAI;AAC9B,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,sCAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,EAAA,EAAI;AACrC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,+BAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,CAAA,EAAG;AACpC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,wBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,CAAA,EAAG;AACpC,IAAA,MAAM,WAAA,GAAc,aAAA,CAAc,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA;AACpE,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,OAAO,aAAA,IAAA,IAAA,GAAA,aAAA,GAAiB,EAAA;AAAA,EAC1B;AACF;AAKO,IAAMC,cAAAA,GAAgB,CAC3B,KAAA,EACA,MAAA,GAAS,OAAA,EACT,UAAU,CAAA,EACV,OAAA,GAAU,CAAA,EACV,cAAA,GAAiB,GAAA,KACd;AACH,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,IAAI,OAAO,EAAA;AAElE,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,WAAA,GAAc,KAAA;AAAA,EAChB,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,WAAA,GAAc,MAAA,CAAO,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,IACjE,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,OAAO,KAAK,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG,OAAO,KAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,cAAA,CAAe,MAAA,EAAQ;AAAA,IACnD,qBAAA,EAAuB,OAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA;AAED,EAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,IAAA,EAAM,cAAc,CAAA;AAC/C;AAEO,IAAMC,UAAAA,GAAY,CAAC,GAAA,KAAQ;AAChC,EAAA,OAAO,GAAA,CACJ,aAAY,CACZ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,GAAG,CAAA;AACb;AAEO,IAAMC,gBAAAA,GAAkB,CAAC,GAAA,KAAQ;AACtC,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,OAAA,EAAS;AACrC,IAAA,OAAO,GAAA,KAAQ,MAAA;AAAA,EACjB,CAAA,MAAO;AACL,IAAA;AAAA,EACF;AACF;AAEO,SAAS,WAAW,KAAA,EAAO;AAEhC,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,EAAA,CAAA;AAG/C,EAAA,IAAA,CAAI,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,UAAS,EAAA,EAAI;AAC9B,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,4CAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,EAAA,EAAI;AACrC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,qCAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,CAAA,EAAG;AACpC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,8BAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,CAAA,EAAG;AACpC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,uBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAA,IAAA,CAAW,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,IAAS,CAAA,EAAG;AACpC,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA;AAAA,MAChC,gBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,WAAA,IAAA,IAAA,GAAA,WAAA,GAAe,EAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,OAAO,aAAA,IAAA,IAAA,GAAA,aAAA,GAAiB,EAAA;AAAA,EAC1B;AACF;;;AC3GO,SAAS,YAAA,CAAa,EAAE,GAAA,EAAK,OAAA,EAAS,OAAO,EAAA,EAAI,KAAA,GAAQ,IAAG,EAAG;AACpE,EAAA,IAAI,CAAC,WAAW,OAAO,GAAA,KAAQ,YAAY,CAAC,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/D,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,GAAA,EAAK,OAAO,EAAE,QAAA,EAAS;AAE/C,EAAA,MAAM,OAAA,GAAU,WAAW,IAAA,CAAK,CAAA,GAAA,EAAM,OAAO,CAAA,GAAA,EAAM,IAAI,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,CAAG,CAAA;AAErE,EAAA,MAAA,CAAO,MAAA,CAAO,WAAA;AAAA,IACZ;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,GACF;AACF","file":"index.mjs","sourcesContent":["/**\r\n * Account & ID Number Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (dashedAccount, dashedNPWP)\r\n * - formatters.js (formatAccountNumber)\r\n * - stringUtils.js (rekeningFormatter, npwpFormatter)\r\n */\r\n\r\n/**\r\n * Format nomor rekening dengan dash separator.\r\n * Mendukung berbagai panjang nomor rekening (progressive formatting).\r\n * @param {string} value - Nomor rekening (bisa mengandung karakter non-numerik)\r\n * @returns {string} Nomor rekening terformat (e.g., \"0012-01-123456-01-1\")\r\n *\r\n * @example\r\n * formatAccountNumber(\"001201123456011\") // \"0012-01-123456-01-1\"\r\n * formatAccountNumber(\"00120112345601\") // \"0012-01-123456-01\"\r\n * formatAccountNumber(\"0012011\") // \"0012-01-1\"\r\n */\r\nexport function formatAccountNumber(value) {\r\n if (!value) return \"\";\r\n\r\n // Remove non-numeric characters\r\n const filteredValue = value\r\n .toString()\r\n .replace(/[^0-9]/g, \"\");\r\n\r\n if (filteredValue.length > 14) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{2})(\\d{1})/,\r\n \"$1-$2-$3-$4-$5\"\r\n );\r\n } else if (filteredValue.length > 12) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{1})/,\r\n \"$1-$2-$3-$4\"\r\n );\r\n } else if (filteredValue.length > 6) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{1})/,\r\n \"$1-$2-$3\"\r\n );\r\n } else if (filteredValue.length > 4) {\r\n return filteredValue.replace(/(\\d{4})(\\d{1})/, \"$1-$2\");\r\n }\r\n\r\n return filteredValue;\r\n}\r\n\r\n/**\r\n * Format nomor NPWP dengan dot dan dash separator.\r\n * Mendukung format NPWP 15 digit dan 16 digit (format baru).\r\n * @param {string} value - Nomor NPWP\r\n * @returns {string} NPWP terformat (e.g., \"01.234.567.8-901.234\")\r\n *\r\n * @example\r\n * formatNPWP(\"0123456789012345\") // \"01.234.567.8-901.2345\"\r\n * formatNPWP(\"012345678901234\") // \"01.234.567.8-901.234\"\r\n * formatNPWP(\"012345678\") // \"01.234.567.8\"\r\n */\r\nexport function formatNPWP(value) {\r\n if (!value) return \"\";\r\n\r\n // Remove non-numeric characters\r\n const filteredValue = value\r\n .toString()\r\n .replace(/\\D/g, \"\");\r\n\r\n if (filteredValue.length > 15) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})(\\d{4})/,\r\n \"$1.$2.$3.$4-$5.$6\"\r\n );\r\n } else if (filteredValue.length > 12) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})/,\r\n \"$1.$2.$3.$4-$5\"\r\n );\r\n } else if (filteredValue.length > 9) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3.$4\"\r\n );\r\n } else if (filteredValue.length > 6) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3\"\r\n );\r\n } else if (filteredValue.length > 2) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})/,\r\n \"$1.$2\"\r\n );\r\n }\r\n\r\n return filteredValue;\r\n}\r\n","/**\r\n * Currency Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (formatCurrency, formatNominal)\r\n * - formatCurrency.js (formatCurrencyRupiah)\r\n * - stringUtils.js (toCurrency, digitFormatter)\r\n */\r\n\r\n/**\r\n * Format angka ke format mata uang dengan locale dan currency yang bisa dikustomisasi.\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @param {object} options - Opsi formatting\r\n * @param {string} options.locale - Locale (default: \"id-ID\")\r\n * @param {string} options.currency - Kode mata uang (default: \"IDR\")\r\n * @param {number} options.minFractionDigits - Minimum digit desimal (default: 0)\r\n * @param {number} options.maxFractionDigits - Maximum digit desimal (default: 0)\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatCurrency(500000) // \"Rp500.000\"\r\n * formatCurrency(500000, { minFractionDigits: 2 }) // \"Rp500.000,00\"\r\n * formatCurrency(1000, { currency: \"USD\", locale: \"en-US\" }) // \"$1,000\"\r\n */\r\nexport const formatCurrency = (\r\n value,\r\n {\r\n locale = \"id-ID\",\r\n currency = \"IDR\",\r\n minFractionDigits = 0,\r\n maxFractionDigits = 0,\r\n } = {}\r\n) => {\r\n if (value === undefined || value === null) return \"\";\r\n const num = Number(value);\r\n if (isNaN(num)) return String(value);\r\n\r\n const formattedValue = new Intl.NumberFormat(locale, {\r\n style: \"currency\",\r\n currency,\r\n minimumFractionDigits: minFractionDigits,\r\n maximumFractionDigits: maxFractionDigits,\r\n }).format(num);\r\n\r\n return formattedValue.replace(/\\s/g, \"\");\r\n};\r\n\r\n/**\r\n * Format angka ke format Rupiah (shorthand untuk formatCurrency dengan default IDR).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @returns {string} Nilai terformat dalam Rupiah\r\n *\r\n * @example\r\n * formatRupiah(500000) // \"Rp500.000\"\r\n * formatRupiah(1500000) // \"Rp1.500.000\"\r\n */\r\nexport const formatRupiah = (value) => {\r\n return formatCurrency(value);\r\n};\r\n\r\n/**\r\n * Format angka ke format nominal (tanpa simbol mata uang).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @param {object} options - Opsi formatting\r\n * @param {string} options.locale - Locale (default: \"id-ID\")\r\n * @param {number} options.minFractionDigits - Minimum digit desimal (default: 0)\r\n * @param {number} options.maxFractionDigits - Maximum digit desimal (default: 0)\r\n * @param {string} options.decimalSeparator - Separator desimal (default: \",\")\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatNominal(500000) // \"500.000\"\r\n * formatNominal(500000.95, { minFractionDigits: 2, maxFractionDigits: 2 }) // \"500.000,95\"\r\n * formatNominal(\"1.500.000,50\") // \"1.500.000,50\" (handles string input with Indonesian format)\r\n */\r\nexport const formatNominal = (\r\n value,\r\n {\r\n locale = \"id-ID\",\r\n minFractionDigits = 0,\r\n maxFractionDigits = 0,\r\n decimalSeparator = \",\",\r\n } = {}\r\n) => {\r\n if (value === undefined || value === null || value === \"\") return \"\";\r\n\r\n let numberValue;\r\n if (typeof value === \"number\") {\r\n numberValue = value;\r\n } else if (typeof value === \"string\") {\r\n // Handle Indonesian format string (1.500.000,50)\r\n if (value.includes(\",\")) {\r\n numberValue = Number(value.replace(/\\./g, \"\").replace(\",\", \".\"));\r\n } else {\r\n numberValue = Number(value);\r\n }\r\n } else {\r\n return String(value);\r\n }\r\n\r\n if (isNaN(numberValue)) return String(value);\r\n\r\n const formatted = numberValue.toLocaleString(locale, {\r\n minimumFractionDigits: minFractionDigits,\r\n maximumFractionDigits: maxFractionDigits,\r\n });\r\n\r\n return formatted.replace(/,/g, decimalSeparator);\r\n};\r\n\r\n/**\r\n * Format angka ke format digit (tanpa simbol mata uang, tanpa desimal).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatDigit(500000) // \"500.000\"\r\n * formatDigit(1500000) // \"1.500.000\"\r\n */\r\nexport const formatDigit = (value) => {\r\n const num = Number(value);\r\n return new Intl.NumberFormat(\"id-ID\", { minimumFractionDigits: 0 }).format(\r\n num || 0\r\n );\r\n};\r\n","/**\r\n * Date Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - stringUtils.js (semua date formatter functions)\r\n *\r\n * Konvensi penamaan:\r\n * - \"Dash\" = separator \"-\" (e.g., 2024-07-19)\r\n * - \"Slash\" = separator \"/\" (e.g., 19/07/2024)\r\n * - \"YearFirst\" = format YYYY-MM-DD\r\n * - \"DateFirst\" = format DD-MM-YYYY atau DD/MM/YYYY\r\n */\r\n\r\n/**\r\n * Konversi Date object ke format YYYY-MM-DD.\r\n * @param {Date|string} value - Date object atau date string\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * toYearFirstDash(new Date(2024, 6, 19)) // \"2024-07-19\"\r\n * toYearFirstDash(\"2024-07-19T00:00:00\") // \"2024-07-19\"\r\n */\r\nexport const toYearFirstDash = (value) => {\r\n const date = new Date(value);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${year}-${month}-${day}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DD/MM/YYYY.\r\n * @param {Date|string} value - Date object atau date string\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * toDateFirstSlash(new Date(2024, 1, 1)) // \"01/02/2024\"\r\n * toDateFirstSlash(\"2024-02-01\") // \"01/02/2024\"\r\n */\r\nexport const toDateFirstSlash = (value) => {\r\n const date = new Date(value);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DD/MM/YYYY (alias).\r\n * @param {Date} date - Date object\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * formatDateToDDSlashMMSlashYYYY(new Date(2025, 2, 31)) // \"31/03/2025\"\r\n */\r\nexport const formatDateToDDSlashMMSlashYYYY = (date) => {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DDMMYYYY (tanpa separator).\r\n * @param {Date} date - Date object\r\n * @returns {string} Format \"DDMMYYYY\"\r\n *\r\n * @example\r\n * formatDateToDDMMYYYY(new Date(2025, 2, 31)) // \"31032025\"\r\n */\r\nexport const formatDateToDDMMYYYY = (date) => {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n return `${day}${month}${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format YYYY-MM-DD ke DD-MM-YYYY.\r\n * @param {string} value - Date string format \"YYYY-MM-DD\"\r\n * @returns {string} Format \"DD-MM-YYYY\"\r\n *\r\n * @example\r\n * yearFirstDashToDateFirstDash(\"2024-07-26\") // \"26-07-2024\"\r\n */\r\nexport const yearFirstDashToDateFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const [year, month, day] = value.split(\"-\");\r\n return `${day}-${month}-${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format YYYY-MM-DD ke DD/MM/YYYY.\r\n * @param {string} value - Date string format \"YYYY-MM-DD\"\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * yearFirstDashToDateFirstSlash(\"2024-07-19\") // \"19/07/2024\"\r\n */\r\nexport const yearFirstDashToDateFirstSlash = (value) => {\r\n if (!value) return \"\";\r\n const parts = value.split(\"-\");\r\n if (parts.length === 3) {\r\n const [year, month, day] = parts;\r\n return `${day}/${month}/${year}`;\r\n }\r\n return value;\r\n};\r\n\r\n/**\r\n * Konversi format DD/MM/YYYY ke YYYY-MM-DD.\r\n * @param {string} value - Date string format \"DD/MM/YYYY\"\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * dateFirstSlashToYearFirstDash(\"19/07/2024\") // \"2024-07-19\"\r\n */\r\nexport const dateFirstSlashToYearFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const [day, month, year] = value.split(\"/\");\r\n return `${year}-${month.padStart(2, \"0\")}-${day.padStart(2, \"0\")}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit (e.g., \"0041125\") ke DD/MM/YYYY.\r\n * Format: [prefix 1 digit][DD][MM][YY atau YYYY]\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * sevenDigitToDateFirstSlash(\"0190724\") // \"19/07/2024\"\r\n * sevenDigitToDateFirstSlash(\"0041125\") // \"04/11/2025\"\r\n */\r\nexport const sevenDigitToDateFirstSlash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.substring(0, 2);\r\n const month = actualDate.substring(2, 4);\r\n const yearLastTwoDigits = actualDate.substring(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit ke YYYY-MM-DD.\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * sevenDigitToYearFirstDash(\"0190724\") // \"2024-07-19\"\r\n */\r\nexport const sevenDigitToYearFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.slice(0, 2);\r\n const month = actualDate.slice(2, 4);\r\n const yearLastTwoDigits = actualDate.slice(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${year}-${month}-${day}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit ke DD-MM-YYYY.\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"DD-MM-YYYY\"\r\n *\r\n * @example\r\n * sevenDigitToDateFirstDash(\"0041125\") // \"04-11-2025\"\r\n */\r\nexport const sevenDigitToDateFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.slice(0, 2);\r\n const month = actualDate.slice(2, 4);\r\n const yearLastTwoDigits = actualDate.slice(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${day}-${month}-${year}`;\r\n};\r\n\r\n/**\r\n * Konversi datetime string ke format DD-MM-YYYY HH:mm.\r\n * @param {string} value - DateTime string (e.g., \"2025-01-13 16:39:39\")\r\n * @returns {string} Format \"DD-MM-YYYY HH:mm\"\r\n *\r\n * @example\r\n * toDateTimeHourMinute(\"2025-01-13 16:39:39\") // \"13-01-2025 16:39\"\r\n */\r\nexport const toDateTimeHourMinute = (value) => {\r\n if (!value) return \"\";\r\n const date = new Date(value);\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n const hours = String(date.getHours()).padStart(2, \"0\");\r\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\r\n return `${day}-${month}-${year} ${hours}:${minutes}`;\r\n};\r\n\r\n/**\r\n * Konversi format DDMMYY (6 digit) ke DD/MM/YYYY.\r\n * @param {string} value - 6-digit date string (DDMMYY)\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * ddmmyyToSlashDate(\"190724\") // \"19/07/2024\"\r\n * ddmmyyToSlashDate(\"010170\") // \"01/01/1970\"\r\n */\r\nexport const ddmmyyToSlashDate = (value) => {\r\n if (!value || value.length !== 6) return \"\";\r\n const day = value.substring(0, 2);\r\n const month = value.substring(2, 4);\r\n const yearSuffix = value.substring(4, 6);\r\n const year =\r\n parseInt(yearSuffix, 10) >= 70 ? \"19\" + yearSuffix : \"20\" + yearSuffix;\r\n return `${day}/${month}/${year}`;\r\n};\r\n","/**\r\n * String Formatting & Transformation Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (formatResponseDesc, titleCase, stringToBoolean)\r\n * - convertSnakeToCamelWithSpace.js (snakeToCamelWithSpace)\r\n * - stringUtils.js (matchWiths, needToHide)\r\n */\r\n\r\n/**\r\n * Format response description: replace underscores with spaces dan capitalize.\r\n * @param {string} desc - Description string dari API response\r\n * @returns {string} Formatted description\r\n *\r\n * @example\r\n * formatResponseDesc(\"invalid_request_data\") // \"Invalid Request Data\"\r\n * formatResponseDesc(\"brispot_error\") // \"BRISPOT Error\"\r\n */\r\nexport const formatResponseDesc = (desc) => {\r\n if (!desc) return \"\";\r\n return desc\r\n .replace(/_(\\w)/g, (_match, p1) => \" \" + p1.toUpperCase())\r\n .replace(/brispot/gi, \"BRISPOT\");\r\n};\r\n\r\n/**\r\n * Konversi string ke Title Case.\r\n * @param {string} str - Input string\r\n * @returns {string} Title cased string\r\n *\r\n * @example\r\n * titleCase(\"hello world\") // \"Hello World\"\r\n * titleCase(\"JOHN DOE\") // \"John Doe\"\r\n */\r\nexport const titleCase = (str) => {\r\n if (!str) return \"\";\r\n return str\r\n .toLowerCase()\r\n .split(\" \")\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n};\r\n\r\n/**\r\n * Konversi snake_case ke Title Case With Spaces.\r\n * @param {string} snakeStr - Snake case string\r\n * @returns {string} Title case with spaces\r\n *\r\n * @example\r\n * snakeToCamelWithSpace(\"hello_world\") // \"Hello World\"\r\n * snakeToCamelWithSpace(\"user_full_name\") // \"User Full Name\"\r\n */\r\nexport function snakeToCamelWithSpace(snakeStr) {\r\n if (!snakeStr) return \"\";\r\n return snakeStr\r\n .toLowerCase()\r\n .replace(/_([a-z])/g, (_match, letter) => ` ${letter.toUpperCase()}`)\r\n .replace(/^([a-z])/, (_, letter) => letter.toUpperCase());\r\n}\r\n\r\n/**\r\n * Konversi string \"true\"/\"false\" ke boolean.\r\n * @param {string} str - String \"true\" atau \"false\"\r\n * @returns {boolean|undefined} Boolean value atau undefined jika bukan \"true\"/\"false\"\r\n *\r\n * @example\r\n * stringToBoolean(\"true\") // true\r\n * stringToBoolean(\"false\") // false\r\n * stringToBoolean(\"other\") // undefined\r\n */\r\nexport const stringToBoolean = (str) => {\r\n if (str === \"true\" || str === \"false\") {\r\n return str === \"true\";\r\n }\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Cek apakah target string mengandung salah satu dari values.\r\n * @param {string} targetStr - String yang akan dicek\r\n * @param {string[]} values - Array of substrings to match\r\n * @returns {boolean} True jika salah satu value ditemukan\r\n *\r\n * @example\r\n * matchWiths(\"hello world\", [\"hello\", \"foo\"]) // true\r\n * matchWiths(\"hello world\", [\"foo\", \"bar\"]) // false\r\n */\r\nexport function matchWiths(targetStr, values = []) {\r\n if (!targetStr) return false;\r\n return values.some((v) => targetStr.includes(v));\r\n}\r\n\r\n/**\r\n * Mask/hide sebagian karakter dari string (untuk privasi).\r\n * @param {string} value - String yang akan di-mask\r\n * @param {string} type - Tipe masking: \"email\" atau default\r\n * @returns {string} Masked string\r\n *\r\n * @example\r\n * maskString(\"johndoe@email.com\", \"email\") // \"joh****@email.com\"\r\n * maskString(\"081234567890\") // \"081*****890\"\r\n */\r\nexport const maskString = (value, type) => {\r\n if (!value) return \"\";\r\n const tempArr = value.split(\"\");\r\n let len = tempArr.length - 3;\r\n\r\n if (type === \"email\") {\r\n len = tempArr.indexOf(\"@\");\r\n }\r\n\r\n tempArr.splice(3 - tempArr.length, len - 3, ...\"*\".repeat(len - 3).split(\"\"));\r\n return tempArr.join(\"\");\r\n};\r\n","export const callAsset = (uri = \"\") => {\r\n const basePath =\r\n typeof window === \"undefined\"\r\n ? \"\"\r\n : (window.__NEXT_DATA__?.assetPrefix ||\r\n process.env.NEXT_PUBLIC_BASE_PATH ||\r\n \"\");\r\n\r\n return `${basePath}${uri}`;\r\n};","export const checkRoleUser = (roles, listRole) => {\r\n let result = false\r\n\r\n if (Array.isArray(roles) && Array.isArray(listRole)) {\r\n if(roles.length !== 0 && listRole.length !== 0){\r\n for(let data of roles){\r\n if(listRole.includes(data)){\r\n result = true\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const toggleUsingDummyWbenchEndpoint = (status) => {\r\n return status === true \r\n}","export const NOT_AUTHORIZE_RESPONSE_CODE = [\"X0\", \"X1\", \"X2\"];\r\n\r\nexport const PUBLIC_PATHS = [\"/auth/v1/login\"];\r\n\r\nexport const COOKIE_MAX_SIZE = 2000;\r\n\r\nexport const CLIENT_PUBLIC_API_ROUTES = [\r\n \"/api/auth/login\",\r\n \"/api/auth/requestOtp\",\r\n \"/api/auth/logout\",\r\n];\r\n\r\n// * Adjust these origins based on your local development setup if needed.\r\nexport const CLIENT_ALLOWED_ORIGINS = [\r\n \"http://localhost:3000\",\r\n \"http://localhost:3001\",\r\n \"http://127.0.0.1:3000\",\r\n \"http://127.0.0.1:3001\",\r\n /\\.bri\\.co\\.id$/,\r\n];\r\n","export const disableFormElements = (selector) => {\r\n const formElements = document.querySelectorAll(selector);\r\n \r\n formElements.forEach((element) => {\r\n element.disabled = true; \r\n element.readOnly = true; \r\n });\r\n};\r\n\r\nexport const disableFormBuilder = (fields, roleAccess) => {\r\n return fields.map((field) => {\r\n if (!field) return null;\r\n\r\n return {\r\n ...field,\r\n isDisabled: roleAccess ? true : field.isDisabled,\r\n };\r\n });\r\n};\r\n","export function generateVcifId() {\r\n const timestamp = Date.now(); \r\n return `VCIF${timestamp}`;\r\n}\r\n","export function getLocalStorageItem(key) {\r\n const value = localStorage.getItem(key);\r\n try {\r\n return JSON.parse(value);\r\n } catch (err) {\r\n return value;\r\n }\r\n}\r\n","export const getTipeBankKorporasi = (data) => {\r\n const adaInduk = data?.some(item => item.status_perusahaan === \"Induk\");\r\n const dataInduk = data?.filter(item => item.status_perusahaan === \"Induk\");\r\n let tipeBank = '';\r\n\r\n // Menampilkan hasil\r\n if (adaInduk) {\r\n tipeBank = dataInduk[0]?.tipe_bank\r\n } else {\r\n tipeBank = data?.find(item => item.tipe_bank === \"B\")?.tipe_bank || \"A\";\r\n }\r\n\r\n return tipeBank\r\n}","/**\r\n * Exception Utilities\r\n *\r\n * Standardized exception codes dan ApiException class untuk handling error dari backend API.\r\n */\r\n\r\n// ─── Exception Codes ─────────────────────────────────────────────────────────\r\n\r\nexport const HEADER_EXCEPTION = \"X0\";\r\nexport const ACCESS_EXCEPTION = \"X1\";\r\nexport const SESSION_EXCEPTION = \"X2\";\r\nexport const PARAMETER_EXCEPTION = \"01\";\r\nexport const NOTFOUND_EXCEPTION = \"02\";\r\nexport const INVALIDRULE_EXCEPTION = \"03\";\r\nexport const THIRDPARTY_EXCEPTION = \"04\";\r\nexport const WAITING_EXCEPTION = \"05\";\r\nexport const UNSUPPORTED_EXCEPTION = \"06\";\r\nexport const RUNTIME_EXCEPTION = \"99\";\r\n\r\n// ─── Exception Messages ──────────────────────────────────────────────────────\r\n\r\nexport const EXCEPTION_MESSAGES = {\r\n [HEADER_EXCEPTION]: \"Invalid request header\",\r\n [ACCESS_EXCEPTION]: \"Access denied\",\r\n [SESSION_EXCEPTION]: \"Session expired\",\r\n [PARAMETER_EXCEPTION]: \"Invalid parameter\",\r\n [NOTFOUND_EXCEPTION]: \"Data not found\",\r\n [INVALIDRULE_EXCEPTION]: \"Validation rule failed\",\r\n [THIRDPARTY_EXCEPTION]: \"Third-party service failure\",\r\n [WAITING_EXCEPTION]: \"Process in progress, please wait\",\r\n [UNSUPPORTED_EXCEPTION]: \"Unsupported operation\",\r\n [RUNTIME_EXCEPTION]: \"Internal system error\",\r\n};\r\n\r\n// ─── ApiException Class ──────────────────────────────────────────────────────\r\n\r\n/**\r\n * Custom exception class untuk API errors.\r\n * Menyimpan responseCode dan responseDesc dari backend.\r\n *\r\n * @example\r\n * throw new ApiException(\"02\", \"Prakarsa tidak ditemukan\");\r\n *\r\n * @example\r\n * // Tanpa custom message — pakai default dari EXCEPTION_MESSAGES\r\n * throw new ApiException(\"X1\");\r\n * // Error: [X1] Access denied\r\n */\r\nexport class ApiException extends Error {\r\n constructor(responseCode, responseDesc) {\r\n const desc =\r\n responseDesc ||\r\n EXCEPTION_MESSAGES[responseCode] ||\r\n \"An unexpected error occurred\";\r\n super(`[${responseCode}] ${desc}`);\r\n this.name = \"ApiException\";\r\n this.responseCode = responseCode;\r\n this.responseDesc = desc;\r\n }\r\n}\r\n\r\n/**\r\n * Cek apakah responseCode termasuk exception.\r\n * @param {string} responseCode - Response code dari API\r\n * @returns {boolean} True jika code ada di daftar exception\r\n *\r\n * @example\r\n * isExceptionCode(\"00\") // false (success)\r\n * isExceptionCode(\"X0\") // true (header exception)\r\n * isExceptionCode(\"02\") // true (not found)\r\n */\r\nexport function isExceptionCode(responseCode) {\r\n return Object.keys(EXCEPTION_MESSAGES).includes(responseCode);\r\n}\r\n\r\n/**\r\n * Get human-readable message dari exception code.\r\n * @param {string} responseCode - Response code dari API\r\n * @returns {string} Exception message\r\n *\r\n * @example\r\n * getExceptionMessage(\"X1\") // \"Access denied\"\r\n * getExceptionMessage(\"99\") // \"Internal system error\"\r\n * getExceptionMessage(\"unknown\") // \"An unexpected error occurred\"\r\n */\r\nexport function getExceptionMessage(responseCode) {\r\n return EXCEPTION_MESSAGES[responseCode] || \"An unexpected error occurred\";\r\n}\r\n","/* Formatting 500000 to Rp500.000,00\r\n implementasi di src/pages/prakarsa/prakarsa-korporasi/informasi-nasabah/pengecekan-kredit/dialog-lihat-sicd.jsx \r\n country dan curr disesuaikan dengan negara dan mata uang\r\n minFrac dan maxFrac disesuaikan dengan jumlah angka di belakang koma */\r\nexport const formatCurrency = (\r\n value,\r\n country = \"id-ID\",\r\n curr = \"IDR\",\r\n minFrac = 0,\r\n maxFrac = 0\r\n) => {\r\n if (value === undefined || value === null) return \"\";\r\n let formattedValue = new Intl.NumberFormat(country, {\r\n style: \"currency\",\r\n currency: curr,\r\n minimumFractionDigits: minFrac,\r\n maximumFractionDigits: maxFrac,\r\n }).format(value);\r\n\r\n return formattedValue.replace(/\\s/g, \"\");\r\n};\r\n\r\nexport const formatResponseDesc = (desc) => {\r\n return desc\r\n .replace(/_(\\w)/g, (_match, p1) => \" \" + p1.toUpperCase())\r\n .replace(/brispot/gi, \"BRISPOT\");\r\n};\r\n\r\nexport function dashedAccount(value) {\r\n // Remove numeric characters from the input\r\n const filteredValue = value?.replace(\r\n /[A-Za-z\\s!@#$%^&*_+{}()=`\"[\\]:;<>,?~\\\\|\\\\/-]/g,\r\n \"\"\r\n );\r\n // Replace the matched pattern with the matched group + a dash\r\n if (filteredValue?.length > 14) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{2})(\\d{1})/g,\r\n \"$1-$2-$3-$4-$5\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 12) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{1})/g,\r\n \"$1-$2-$3-$4\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 6) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{1})/g,\r\n \"$1-$2-$3\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 4) {\r\n const dashedValue = filteredValue.replace(/(\\d{4})(\\d{1})/g, \"$1-$2\");\r\n return dashedValue ?? \"\";\r\n } else {\r\n return filteredValue ?? \"\";\r\n }\r\n}\r\n\r\n/* Formatting 500000.95 to 500.000,95 \r\n implementasi di src/pages/prakarsa/prakarsa-bg/index.jsx \r\n minFrac dan maxFrac disesuaikan dengan jumlah angka di belakang koma */\r\nexport const formatNominal = (\r\n value,\r\n locale = \"id-ID\",\r\n minFrac = 0,\r\n maxFrac = 0,\r\n commaSeparator = \",\"\r\n) => {\r\n if (value === undefined || value === null || value === \"\") return \"\";\r\n\r\n let numberValue;\r\n if (typeof value === \"number\") {\r\n numberValue = value;\r\n } else if (typeof value === \"string\") {\r\n if (value.includes(\",\")) {\r\n numberValue = Number(value.replace(/\\./g, \"\").replace(\",\", \".\"));\r\n } else {\r\n numberValue = Number(value);\r\n }\r\n } else {\r\n return value;\r\n }\r\n \r\n if (isNaN(numberValue)) return value;\r\n \r\n const formatted = numberValue.toLocaleString(locale, {\r\n minimumFractionDigits: minFrac,\r\n maximumFractionDigits: maxFrac,\r\n });\r\n\r\n return formatted.replace(/,/g, commaSeparator);\r\n};\r\n\r\nexport const titleCase = (str) => {\r\n return str\r\n .toLowerCase()\r\n .split(\" \")\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n};\r\n\r\nexport const stringToBoolean = (str) => {\r\n if (str === \"true\" || str === \"false\") {\r\n return str === \"true\";\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\nexport function dashedNPWP(value) {\r\n // Hapus karakter non-numerik dari input\r\n const filteredValue = value?.replace(/[^\\d]/g, \"\");\r\n\r\n // Terapkan format sesuai panjang angka\r\n if (filteredValue?.length > 15) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})(\\d{4})/,\r\n \"$1.$2.$3.$4-$5.$6\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 12) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})/,\r\n \"$1.$2.$3.$4-$5\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 9) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3.$4\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 6) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 2) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})/,\r\n \"$1.$2\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else {\r\n return filteredValue ?? \"\";\r\n }\r\n}\r\n","/**\r\n * Navigate to CI (CodeIgniter) Page\r\n *\r\n * Utility untuk navigasi dari microfrontend ke halaman CI (legacy webapp)\r\n * melalui postMessage ke parent window (iframe communication).\r\n *\r\n * Microfrontend di-embed di dalam iframe oleh brispot_web (CI).\r\n * Untuk navigasi ke halaman CI lain, kita kirim pesan ke parent window\r\n * yang akan handle routing di sisi CI.\r\n *\r\n * @example\r\n * import { navigateToCI } from 'spotlibs-components/utils/navigateToCI';\r\n *\r\n * // Navigate ke halaman prakarsa detail\r\n * navigateToCI({\r\n * url: '/prakarsa/detail/123',\r\n * baseUrl: 'https://brispot.bri.co.id',\r\n * icon: 'icon-prakarsa',\r\n * title: 'Detail Prakarsa',\r\n * });\r\n *\r\n * @example\r\n * // Navigate tanpa icon dan title\r\n * navigateToCI({\r\n * url: '/home/dashboard',\r\n * baseUrl: process.env.NEXT_PUBLIC_CI_BASE_URL,\r\n * });\r\n */\r\n\r\n/**\r\n * @typedef {Object} NavigateToCIParams\r\n * @property {string} url - Path tujuan (harus diawali \"/\"). Contoh: \"/prakarsa/detail/123\"\r\n * @property {string} baseUrl - Base URL CI app. Contoh: \"https://brispot.bri.co.id\"\r\n * @property {string} [icon] - Icon identifier untuk sidebar/tab CI (opsional)\r\n * @property {string} [title] - Title untuk sidebar/tab CI (opsional)\r\n */\r\n\r\n/**\r\n * Kirim pesan ke parent window (CI) untuk navigasi ke halaman tertentu.\r\n *\r\n * @param {NavigateToCIParams} params\r\n * @returns {void}\r\n */\r\nexport function navigateToCI({ url, baseUrl, icon = \"\", title = \"\" }) {\r\n if (!baseUrl || typeof url !== \"string\" || !url.startsWith(\"/\")) {\r\n return;\r\n }\r\n\r\n const fullUrl = new URL(url, baseUrl).toString();\r\n\r\n const encoded = globalThis.btoa(`ni|${fullUrl} , ${icon} , ${title}|`);\r\n\r\n window.parent.postMessage(\r\n {\r\n type: \"NAVIGATE_CI\",\r\n hash: encoded,\r\n },\r\n baseUrl\r\n );\r\n}\r\n\r\nexport default navigateToCI;\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/formatters/account.js","../../src/utils/formatters/currency.js","../../src/utils/formatters/date.js","../../src/utils/formatters/string.js","../../src/utils/asset.js","../../src/utils/booleanUtils.js","../../src/utils/constants.js","../../src/utils/disableFormElements.js","../../src/utils/generateTimestamp.js","../../src/utils/localStorage.js","../../src/utils/tipeBank.js","../../src/utils/exception.js","../../src/utils/formatString.js","../../src/utils/navigateToCI.js"],"names":["formatCurrency","formatResponseDesc","formatNominal","titleCase","stringToBoolean"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * Account & ID Number Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (dashedAccount, dashedNPWP)\r\n * - formatters.js (formatAccountNumber)\r\n * - stringUtils.js (rekeningFormatter, npwpFormatter)\r\n */\r\n\r\n/**\r\n * Format nomor rekening dengan dash separator.\r\n * Mendukung berbagai panjang nomor rekening (progressive formatting).\r\n * @param {string} value - Nomor rekening (bisa mengandung karakter non-numerik)\r\n * @returns {string} Nomor rekening terformat (e.g., \"0012-01-123456-01-1\")\r\n *\r\n * @example\r\n * formatAccountNumber(\"001201123456011\") // \"0012-01-123456-01-1\"\r\n * formatAccountNumber(\"00120112345601\") // \"0012-01-123456-01\"\r\n * formatAccountNumber(\"0012011\") // \"0012-01-1\"\r\n */\r\nexport function formatAccountNumber(value) {\r\n if (!value) return \"\";\r\n\r\n // Remove non-numeric characters\r\n const filteredValue = value\r\n .toString()\r\n .replace(/[^0-9]/g, \"\");\r\n\r\n if (filteredValue.length > 14) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{2})(\\d{1})/,\r\n \"$1-$2-$3-$4-$5\"\r\n );\r\n } else if (filteredValue.length > 12) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{1})/,\r\n \"$1-$2-$3-$4\"\r\n );\r\n } else if (filteredValue.length > 6) {\r\n return filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{1})/,\r\n \"$1-$2-$3\"\r\n );\r\n } else if (filteredValue.length > 4) {\r\n return filteredValue.replace(/(\\d{4})(\\d{1})/, \"$1-$2\");\r\n }\r\n\r\n return filteredValue;\r\n}\r\n\r\n/**\r\n * Format nomor NPWP dengan dot dan dash separator.\r\n * Mendukung format NPWP 15 digit dan 16 digit (format baru).\r\n * @param {string} value - Nomor NPWP\r\n * @returns {string} NPWP terformat (e.g., \"01.234.567.8-901.234\")\r\n *\r\n * @example\r\n * formatNPWP(\"0123456789012345\") // \"01.234.567.8-901.2345\"\r\n * formatNPWP(\"012345678901234\") // \"01.234.567.8-901.234\"\r\n * formatNPWP(\"012345678\") // \"01.234.567.8\"\r\n */\r\nexport function formatNPWP(value) {\r\n if (!value) return \"\";\r\n\r\n // Remove non-numeric characters\r\n const filteredValue = value\r\n .toString()\r\n .replace(/\\D/g, \"\");\r\n\r\n if (filteredValue.length > 15) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})(\\d{4})/,\r\n \"$1.$2.$3.$4-$5.$6\"\r\n );\r\n } else if (filteredValue.length > 12) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})/,\r\n \"$1.$2.$3.$4-$5\"\r\n );\r\n } else if (filteredValue.length > 9) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3.$4\"\r\n );\r\n } else if (filteredValue.length > 6) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3\"\r\n );\r\n } else if (filteredValue.length > 2) {\r\n return filteredValue.replace(\r\n /(\\d{2})(\\d{3})/,\r\n \"$1.$2\"\r\n );\r\n }\r\n\r\n return filteredValue;\r\n}\r\n","/**\r\n * Currency Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (formatCurrency, formatNominal)\r\n * - formatCurrency.js (formatCurrencyRupiah)\r\n * - stringUtils.js (toCurrency, digitFormatter)\r\n */\r\n\r\n/**\r\n * Format angka ke format mata uang dengan locale dan currency yang bisa dikustomisasi.\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @param {object} options - Opsi formatting\r\n * @param {string} options.locale - Locale (default: \"id-ID\")\r\n * @param {string} options.currency - Kode mata uang (default: \"IDR\")\r\n * @param {number} options.minFractionDigits - Minimum digit desimal (default: 0)\r\n * @param {number} options.maxFractionDigits - Maximum digit desimal (default: 0)\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatCurrency(500000) // \"Rp500.000\"\r\n * formatCurrency(500000, { minFractionDigits: 2 }) // \"Rp500.000,00\"\r\n * formatCurrency(1000, { currency: \"USD\", locale: \"en-US\" }) // \"$1,000\"\r\n */\r\nexport const formatCurrency = (\r\n value,\r\n {\r\n locale = \"id-ID\",\r\n currency = \"IDR\",\r\n minFractionDigits = 0,\r\n maxFractionDigits = 0,\r\n } = {}\r\n) => {\r\n if (value === undefined || value === null) return \"\";\r\n const num = Number(value);\r\n if (isNaN(num)) return String(value);\r\n\r\n const formattedValue = new Intl.NumberFormat(locale, {\r\n style: \"currency\",\r\n currency,\r\n minimumFractionDigits: minFractionDigits,\r\n maximumFractionDigits: maxFractionDigits,\r\n }).format(num);\r\n\r\n return formattedValue.replace(/\\s/g, \"\");\r\n};\r\n\r\n/**\r\n * Format angka ke format Rupiah (shorthand untuk formatCurrency dengan default IDR).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @returns {string} Nilai terformat dalam Rupiah\r\n *\r\n * @example\r\n * formatRupiah(500000) // \"Rp500.000\"\r\n * formatRupiah(1500000) // \"Rp1.500.000\"\r\n */\r\nexport const formatRupiah = (value) => {\r\n return formatCurrency(value);\r\n};\r\n\r\n/**\r\n * Format angka ke format nominal (tanpa simbol mata uang).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @param {object} options - Opsi formatting\r\n * @param {string} options.locale - Locale (default: \"id-ID\")\r\n * @param {number} options.minFractionDigits - Minimum digit desimal (default: 0)\r\n * @param {number} options.maxFractionDigits - Maximum digit desimal (default: 0)\r\n * @param {string} options.decimalSeparator - Separator desimal (default: \",\")\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatNominal(500000) // \"500.000\"\r\n * formatNominal(500000.95, { minFractionDigits: 2, maxFractionDigits: 2 }) // \"500.000,95\"\r\n * formatNominal(\"1.500.000,50\") // \"1.500.000,50\" (handles string input with Indonesian format)\r\n */\r\nexport const formatNominal = (\r\n value,\r\n {\r\n locale = \"id-ID\",\r\n minFractionDigits = 0,\r\n maxFractionDigits = 0,\r\n decimalSeparator = \",\",\r\n } = {}\r\n) => {\r\n if (value === undefined || value === null || value === \"\") return \"\";\r\n\r\n let numberValue;\r\n if (typeof value === \"number\") {\r\n numberValue = value;\r\n } else if (typeof value === \"string\") {\r\n // Handle Indonesian format string (1.500.000,50)\r\n if (value.includes(\",\")) {\r\n numberValue = Number(value.replace(/\\./g, \"\").replace(\",\", \".\"));\r\n } else {\r\n numberValue = Number(value);\r\n }\r\n } else {\r\n return String(value);\r\n }\r\n\r\n if (isNaN(numberValue)) return String(value);\r\n\r\n const formatted = numberValue.toLocaleString(locale, {\r\n minimumFractionDigits: minFractionDigits,\r\n maximumFractionDigits: maxFractionDigits,\r\n });\r\n\r\n return formatted.replace(/,/g, decimalSeparator);\r\n};\r\n\r\n/**\r\n * Format angka ke format digit (tanpa simbol mata uang, tanpa desimal).\r\n * @param {number|string} value - Nilai yang akan diformat\r\n * @returns {string} Nilai terformat\r\n *\r\n * @example\r\n * formatDigit(500000) // \"500.000\"\r\n * formatDigit(1500000) // \"1.500.000\"\r\n */\r\nexport const formatDigit = (value) => {\r\n const num = Number(value);\r\n return new Intl.NumberFormat(\"id-ID\", { minimumFractionDigits: 0 }).format(\r\n num || 0\r\n );\r\n};\r\n","/**\r\n * Date Formatting Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - stringUtils.js (semua date formatter functions)\r\n *\r\n * Konvensi penamaan:\r\n * - \"Dash\" = separator \"-\" (e.g., 2024-07-19)\r\n * - \"Slash\" = separator \"/\" (e.g., 19/07/2024)\r\n * - \"YearFirst\" = format YYYY-MM-DD\r\n * - \"DateFirst\" = format DD-MM-YYYY atau DD/MM/YYYY\r\n */\r\n\r\n/**\r\n * Konversi Date object ke format YYYY-MM-DD.\r\n * @param {Date|string} value - Date object atau date string\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * toYearFirstDash(new Date(2024, 6, 19)) // \"2024-07-19\"\r\n * toYearFirstDash(\"2024-07-19T00:00:00\") // \"2024-07-19\"\r\n */\r\nexport const toYearFirstDash = (value) => {\r\n const date = new Date(value);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${year}-${month}-${day}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DD/MM/YYYY.\r\n * @param {Date|string} value - Date object atau date string\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * toDateFirstSlash(new Date(2024, 1, 1)) // \"01/02/2024\"\r\n * toDateFirstSlash(\"2024-02-01\") // \"01/02/2024\"\r\n */\r\nexport const toDateFirstSlash = (value) => {\r\n const date = new Date(value);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DD/MM/YYYY (alias).\r\n * @param {Date} date - Date object\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * formatDateToDDSlashMMSlashYYYY(new Date(2025, 2, 31)) // \"31/03/2025\"\r\n */\r\nexport const formatDateToDDSlashMMSlashYYYY = (date) => {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi Date object ke format DDMMYYYY (tanpa separator).\r\n * @param {Date} date - Date object\r\n * @returns {string} Format \"DDMMYYYY\"\r\n *\r\n * @example\r\n * formatDateToDDMMYYYY(new Date(2025, 2, 31)) // \"31032025\"\r\n */\r\nexport const formatDateToDDMMYYYY = (date) => {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n return `${day}${month}${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format YYYY-MM-DD ke DD-MM-YYYY.\r\n * @param {string} value - Date string format \"YYYY-MM-DD\"\r\n * @returns {string} Format \"DD-MM-YYYY\"\r\n *\r\n * @example\r\n * yearFirstDashToDateFirstDash(\"2024-07-26\") // \"26-07-2024\"\r\n */\r\nexport const yearFirstDashToDateFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const [year, month, day] = value.split(\"-\");\r\n return `${day}-${month}-${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format YYYY-MM-DD ke DD/MM/YYYY.\r\n * @param {string} value - Date string format \"YYYY-MM-DD\"\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * yearFirstDashToDateFirstSlash(\"2024-07-19\") // \"19/07/2024\"\r\n */\r\nexport const yearFirstDashToDateFirstSlash = (value) => {\r\n if (!value) return \"\";\r\n const parts = value.split(\"-\");\r\n if (parts.length === 3) {\r\n const [year, month, day] = parts;\r\n return `${day}/${month}/${year}`;\r\n }\r\n return value;\r\n};\r\n\r\n/**\r\n * Konversi format DD/MM/YYYY ke YYYY-MM-DD.\r\n * @param {string} value - Date string format \"DD/MM/YYYY\"\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * dateFirstSlashToYearFirstDash(\"19/07/2024\") // \"2024-07-19\"\r\n */\r\nexport const dateFirstSlashToYearFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const [day, month, year] = value.split(\"/\");\r\n return `${year}-${month.padStart(2, \"0\")}-${day.padStart(2, \"0\")}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit (e.g., \"0041125\") ke DD/MM/YYYY.\r\n * Format: [prefix 1 digit][DD][MM][YY atau YYYY]\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * sevenDigitToDateFirstSlash(\"0190724\") // \"19/07/2024\"\r\n * sevenDigitToDateFirstSlash(\"0041125\") // \"04/11/2025\"\r\n */\r\nexport const sevenDigitToDateFirstSlash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.substring(0, 2);\r\n const month = actualDate.substring(2, 4);\r\n const yearLastTwoDigits = actualDate.substring(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit ke YYYY-MM-DD.\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"YYYY-MM-DD\"\r\n *\r\n * @example\r\n * sevenDigitToYearFirstDash(\"0190724\") // \"2024-07-19\"\r\n */\r\nexport const sevenDigitToYearFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.slice(0, 2);\r\n const month = actualDate.slice(2, 4);\r\n const yearLastTwoDigits = actualDate.slice(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${year}-${month}-${day}`;\r\n};\r\n\r\n/**\r\n * Konversi format 7 digit ke DD-MM-YYYY.\r\n * @param {string} value - 7-digit date string\r\n * @returns {string} Format \"DD-MM-YYYY\"\r\n *\r\n * @example\r\n * sevenDigitToDateFirstDash(\"0041125\") // \"04-11-2025\"\r\n */\r\nexport const sevenDigitToDateFirstDash = (value) => {\r\n if (!value) return \"\";\r\n const actualDate = value.substring(1);\r\n const day = actualDate.slice(0, 2);\r\n const month = actualDate.slice(2, 4);\r\n const yearLastTwoDigits = actualDate.slice(4, 8);\r\n const yearPrefix = parseInt(yearLastTwoDigits, 10) >= 70 ? \"19\" : \"20\";\r\n const year = yearPrefix + yearLastTwoDigits;\r\n return `${day}-${month}-${year}`;\r\n};\r\n\r\n/**\r\n * Konversi datetime string ke format DD-MM-YYYY HH:mm.\r\n * @param {string} value - DateTime string (e.g., \"2025-01-13 16:39:39\")\r\n * @returns {string} Format \"DD-MM-YYYY HH:mm\"\r\n *\r\n * @example\r\n * toDateTimeHourMinute(\"2025-01-13 16:39:39\") // \"13-01-2025 16:39\"\r\n */\r\nexport const toDateTimeHourMinute = (value) => {\r\n if (!value) return \"\";\r\n const date = new Date(value);\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = date.getFullYear();\r\n const hours = String(date.getHours()).padStart(2, \"0\");\r\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\r\n return `${day}-${month}-${year} ${hours}:${minutes}`;\r\n};\r\n\r\n/**\r\n * Konversi format DDMMYY (6 digit) ke DD/MM/YYYY.\r\n * @param {string} value - 6-digit date string (DDMMYY)\r\n * @returns {string} Format \"DD/MM/YYYY\"\r\n *\r\n * @example\r\n * ddmmyyToSlashDate(\"190724\") // \"19/07/2024\"\r\n * ddmmyyToSlashDate(\"010170\") // \"01/01/1970\"\r\n */\r\nexport const ddmmyyToSlashDate = (value) => {\r\n if (!value || value.length !== 6) return \"\";\r\n const day = value.substring(0, 2);\r\n const month = value.substring(2, 4);\r\n const yearSuffix = value.substring(4, 6);\r\n const year =\r\n parseInt(yearSuffix, 10) >= 70 ? \"19\" + yearSuffix : \"20\" + yearSuffix;\r\n return `${day}/${month}/${year}`;\r\n};\r\n","/**\r\n * String Formatting & Transformation Utilities\r\n *\r\n * Konsolidasi dari:\r\n * - formatString.js (formatResponseDesc, titleCase, stringToBoolean)\r\n * - convertSnakeToCamelWithSpace.js (snakeToCamelWithSpace)\r\n * - stringUtils.js (matchWiths, needToHide)\r\n */\r\n\r\n/**\r\n * Format response description: replace underscores with spaces dan capitalize.\r\n * @param {string} desc - Description string dari API response\r\n * @returns {string} Formatted description\r\n *\r\n * @example\r\n * formatResponseDesc(\"invalid_request_data\") // \"Invalid Request Data\"\r\n * formatResponseDesc(\"brispot_error\") // \"BRISPOT Error\"\r\n */\r\nexport const formatResponseDesc = (desc) => {\r\n if (!desc) return \"\";\r\n return desc\r\n .replace(/_(\\w)/g, (_match, p1) => \" \" + p1.toUpperCase())\r\n .replace(/brispot/gi, \"BRISPOT\");\r\n};\r\n\r\n/**\r\n * Konversi string ke Title Case.\r\n * @param {string} str - Input string\r\n * @returns {string} Title cased string\r\n *\r\n * @example\r\n * titleCase(\"hello world\") // \"Hello World\"\r\n * titleCase(\"JOHN DOE\") // \"John Doe\"\r\n */\r\nexport const titleCase = (str) => {\r\n if (!str) return \"\";\r\n return str\r\n .toLowerCase()\r\n .split(\" \")\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n};\r\n\r\n/**\r\n * Konversi snake_case ke Title Case With Spaces.\r\n * @param {string} snakeStr - Snake case string\r\n * @returns {string} Title case with spaces\r\n *\r\n * @example\r\n * snakeToCamelWithSpace(\"hello_world\") // \"Hello World\"\r\n * snakeToCamelWithSpace(\"user_full_name\") // \"User Full Name\"\r\n */\r\nexport function snakeToCamelWithSpace(snakeStr) {\r\n if (!snakeStr) return \"\";\r\n return snakeStr\r\n .toLowerCase()\r\n .replace(/_([a-z])/g, (_match, letter) => ` ${letter.toUpperCase()}`)\r\n .replace(/^([a-z])/, (_, letter) => letter.toUpperCase());\r\n}\r\n\r\n/**\r\n * Konversi string \"true\"/\"false\" ke boolean.\r\n * @param {string} str - String \"true\" atau \"false\"\r\n * @returns {boolean|undefined} Boolean value atau undefined jika bukan \"true\"/\"false\"\r\n *\r\n * @example\r\n * stringToBoolean(\"true\") // true\r\n * stringToBoolean(\"false\") // false\r\n * stringToBoolean(\"other\") // undefined\r\n */\r\nexport const stringToBoolean = (str) => {\r\n if (str === \"true\" || str === \"false\") {\r\n return str === \"true\";\r\n }\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Cek apakah target string mengandung salah satu dari values.\r\n * @param {string} targetStr - String yang akan dicek\r\n * @param {string[]} values - Array of substrings to match\r\n * @returns {boolean} True jika salah satu value ditemukan\r\n *\r\n * @example\r\n * matchWiths(\"hello world\", [\"hello\", \"foo\"]) // true\r\n * matchWiths(\"hello world\", [\"foo\", \"bar\"]) // false\r\n */\r\nexport function matchWiths(targetStr, values = []) {\r\n if (!targetStr) return false;\r\n return values.some((v) => targetStr.includes(v));\r\n}\r\n\r\n/**\r\n * Mask/hide sebagian karakter dari string (untuk privasi).\r\n * @param {string} value - String yang akan di-mask\r\n * @param {string} type - Tipe masking: \"email\" atau default\r\n * @returns {string} Masked string\r\n *\r\n * @example\r\n * maskString(\"johndoe@email.com\", \"email\") // \"joh****@email.com\"\r\n * maskString(\"081234567890\") // \"081*****890\"\r\n */\r\nexport const maskString = (value, type) => {\r\n if (!value) return \"\";\r\n const tempArr = value.split(\"\");\r\n let len = tempArr.length - 3;\r\n\r\n if (type === \"email\") {\r\n len = tempArr.indexOf(\"@\");\r\n }\r\n\r\n tempArr.splice(3 - tempArr.length, len - 3, ...\"*\".repeat(len - 3).split(\"\"));\r\n return tempArr.join(\"\");\r\n};\r\n","export const callAsset = (uri = \"\") => {\r\n const basePath =\r\n typeof window === \"undefined\"\r\n ? \"\"\r\n : (window.__NEXT_DATA__?.assetPrefix ||\r\n process.env.NEXT_PUBLIC_BASE_PATH ||\r\n \"\");\r\n\r\n return `${basePath}${uri}`;\r\n};","export const checkRoleUser = (roles, listRole) => {\r\n let result = false\r\n\r\n if (Array.isArray(roles) && Array.isArray(listRole)) {\r\n if(roles.length !== 0 && listRole.length !== 0){\r\n for(let data of roles){\r\n if(listRole.includes(data)){\r\n result = true\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nexport const toggleUsingDummyWbenchEndpoint = (status) => {\r\n return status === true \r\n}","export const NOT_AUTHORIZE_RESPONSE_CODE = [\"X0\", \"X1\", \"X2\"];\r\n\r\nexport const PUBLIC_PATHS = [\"/auth/v1/login\"];\r\n\r\nexport const COOKIE_MAX_SIZE = 2000;\r\n\r\nexport const CLIENT_PUBLIC_API_ROUTES = [\r\n \"/api/auth/login\",\r\n \"/api/auth/requestOtp\",\r\n \"/api/auth/logout\",\r\n];\r\n\r\n// * Adjust these origins based on your local development setup if needed.\r\nexport const CLIENT_ALLOWED_ORIGINS = [\r\n \"http://localhost:3000\",\r\n \"http://localhost:3001\",\r\n \"http://127.0.0.1:3000\",\r\n \"http://127.0.0.1:3001\",\r\n /\\.bri\\.co\\.id$/,\r\n];\r\n","export const disableFormElements = (selector) => {\r\n const formElements = document.querySelectorAll(selector);\r\n \r\n formElements.forEach((element) => {\r\n element.disabled = true; \r\n element.readOnly = true; \r\n });\r\n};\r\n\r\nexport const disableFormBuilder = (fields, roleAccess) => {\r\n return fields.map((field) => {\r\n if (!field) return null;\r\n\r\n return {\r\n ...field,\r\n isDisabled: roleAccess ? true : field.isDisabled,\r\n };\r\n });\r\n};\r\n","export function generateVcifId() {\r\n const timestamp = Date.now(); \r\n return `VCIF${timestamp}`;\r\n}\r\n","export function getLocalStorageItem(key) {\r\n const value = localStorage.getItem(key);\r\n try {\r\n return JSON.parse(value);\r\n } catch (err) {\r\n return value;\r\n }\r\n}\r\n","export const getTipeBankKorporasi = (data) => {\r\n const adaInduk = data?.some(item => item.status_perusahaan === \"Induk\");\r\n const dataInduk = data?.filter(item => item.status_perusahaan === \"Induk\");\r\n let tipeBank = '';\r\n\r\n // Menampilkan hasil\r\n if (adaInduk) {\r\n tipeBank = dataInduk[0]?.tipe_bank\r\n } else {\r\n tipeBank = data?.find(item => item.tipe_bank === \"B\")?.tipe_bank || \"A\";\r\n }\r\n\r\n return tipeBank\r\n}","/**\r\n * Exception Utilities\r\n *\r\n * Standardized exception codes dan ApiException class untuk handling error dari backend API.\r\n */\r\n\r\n// ─── Response Codes ───────────────────────────────────────────────────────────\r\n\r\nexport const SUCCESS_CODE = \"00\";\r\n\r\n// ─── Exception Codes ─────────────────────────────────────────────────────────\r\n\r\nexport const HEADER_EXCEPTION = \"X0\";\r\nexport const ACCESS_EXCEPTION = \"X1\";\r\nexport const SESSION_EXCEPTION = \"X2\";\r\nexport const PARAMETER_EXCEPTION = \"01\";\r\nexport const NOTFOUND_EXCEPTION = \"02\";\r\nexport const INVALIDRULE_EXCEPTION = \"03\";\r\nexport const THIRDPARTY_EXCEPTION = \"04\";\r\nexport const WAITING_EXCEPTION = \"05\";\r\nexport const UNSUPPORTED_EXCEPTION = \"06\";\r\nexport const RUNTIME_EXCEPTION = \"99\";\r\n\r\n// ─── Exception Messages ──────────────────────────────────────────────────────\r\n\r\nexport const EXCEPTION_MESSAGES = {\r\n [HEADER_EXCEPTION]: \"Invalid request header\",\r\n [ACCESS_EXCEPTION]: \"Access denied\",\r\n [SESSION_EXCEPTION]: \"Session expired\",\r\n [PARAMETER_EXCEPTION]: \"Invalid parameter\",\r\n [NOTFOUND_EXCEPTION]: \"Data not found\",\r\n [INVALIDRULE_EXCEPTION]: \"Validation rule failed\",\r\n [THIRDPARTY_EXCEPTION]: \"Third-party service failure\",\r\n [WAITING_EXCEPTION]: \"Process in progress, please wait\",\r\n [UNSUPPORTED_EXCEPTION]: \"Unsupported operation\",\r\n [RUNTIME_EXCEPTION]: \"Internal system error\",\r\n};\r\n\r\n// ─── ApiException Class ──────────────────────────────────────────────────────\r\n\r\n/**\r\n * Custom exception class untuk API errors.\r\n * Menyimpan responseCode dan responseDesc dari backend.\r\n *\r\n * @example\r\n * throw new ApiException(\"02\", \"Prakarsa tidak ditemukan\");\r\n *\r\n * @example\r\n * // Tanpa custom message — pakai default dari EXCEPTION_MESSAGES\r\n * throw new ApiException(\"X1\");\r\n * // Error: [X1] Access denied\r\n */\r\nexport class ApiException extends Error {\r\n constructor(responseCode, responseDesc) {\r\n const desc =\r\n responseDesc ||\r\n EXCEPTION_MESSAGES[responseCode] ||\r\n \"An unexpected error occurred\";\r\n super(`[${responseCode}] ${desc}`);\r\n this.name = \"ApiException\";\r\n this.responseCode = responseCode;\r\n this.responseDesc = desc;\r\n }\r\n}\r\n\r\n/**\r\n * Cek apakah responseCode adalah success (00).\r\n * @param {string} responseCode\r\n * @returns {boolean}\r\n */\r\nexport function isSuccessCode(responseCode) {\r\n return responseCode === SUCCESS_CODE;\r\n}\r\n\r\n/**\r\n * Cek apakah responseCode termasuk exception.\r\n * @param {string} responseCode - Response code dari API\r\n * @returns {boolean} True jika code ada di daftar exception\r\n *\r\n * @example\r\n * isExceptionCode(\"00\") // false (success)\r\n * isExceptionCode(\"X0\") // true (header exception)\r\n * isExceptionCode(\"02\") // true (not found)\r\n */\r\nexport function isExceptionCode(responseCode) {\r\n return Object.keys(EXCEPTION_MESSAGES).includes(responseCode);\r\n}\r\n\r\n/**\r\n * Get human-readable message dari exception code.\r\n * @param {string} responseCode - Response code dari API\r\n * @returns {string} Exception message\r\n *\r\n * @example\r\n * getExceptionMessage(\"X1\") // \"Access denied\"\r\n * getExceptionMessage(\"99\") // \"Internal system error\"\r\n * getExceptionMessage(\"unknown\") // \"An unexpected error occurred\"\r\n */\r\nexport function getExceptionMessage(responseCode) {\r\n return EXCEPTION_MESSAGES[responseCode] || \"An unexpected error occurred\";\r\n}\r\n","/* Formatting 500000 to Rp500.000,00\r\n implementasi di src/pages/prakarsa/prakarsa-korporasi/informasi-nasabah/pengecekan-kredit/dialog-lihat-sicd.jsx \r\n country dan curr disesuaikan dengan negara dan mata uang\r\n minFrac dan maxFrac disesuaikan dengan jumlah angka di belakang koma */\r\nexport const formatCurrency = (\r\n value,\r\n country = \"id-ID\",\r\n curr = \"IDR\",\r\n minFrac = 0,\r\n maxFrac = 0\r\n) => {\r\n if (value === undefined || value === null) return \"\";\r\n let formattedValue = new Intl.NumberFormat(country, {\r\n style: \"currency\",\r\n currency: curr,\r\n minimumFractionDigits: minFrac,\r\n maximumFractionDigits: maxFrac,\r\n }).format(value);\r\n\r\n return formattedValue.replace(/\\s/g, \"\");\r\n};\r\n\r\nexport const formatResponseDesc = (desc) => {\r\n return desc\r\n .replace(/_(\\w)/g, (_match, p1) => \" \" + p1.toUpperCase())\r\n .replace(/brispot/gi, \"BRISPOT\");\r\n};\r\n\r\nexport function dashedAccount(value) {\r\n // Remove numeric characters from the input\r\n const filteredValue = value?.replace(\r\n /[A-Za-z\\s!@#$%^&*_+{}()=`\"[\\]:;<>,?~\\\\|\\\\/-]/g,\r\n \"\"\r\n );\r\n // Replace the matched pattern with the matched group + a dash\r\n if (filteredValue?.length > 14) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{2})(\\d{1})/g,\r\n \"$1-$2-$3-$4-$5\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 12) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{6})(\\d{1})/g,\r\n \"$1-$2-$3-$4\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 6) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{4})(\\d{2})(\\d{1})/g,\r\n \"$1-$2-$3\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 4) {\r\n const dashedValue = filteredValue.replace(/(\\d{4})(\\d{1})/g, \"$1-$2\");\r\n return dashedValue ?? \"\";\r\n } else {\r\n return filteredValue ?? \"\";\r\n }\r\n}\r\n\r\n/* Formatting 500000.95 to 500.000,95 \r\n implementasi di src/pages/prakarsa/prakarsa-bg/index.jsx \r\n minFrac dan maxFrac disesuaikan dengan jumlah angka di belakang koma */\r\nexport const formatNominal = (\r\n value,\r\n locale = \"id-ID\",\r\n minFrac = 0,\r\n maxFrac = 0,\r\n commaSeparator = \",\"\r\n) => {\r\n if (value === undefined || value === null || value === \"\") return \"\";\r\n\r\n let numberValue;\r\n if (typeof value === \"number\") {\r\n numberValue = value;\r\n } else if (typeof value === \"string\") {\r\n if (value.includes(\",\")) {\r\n numberValue = Number(value.replace(/\\./g, \"\").replace(\",\", \".\"));\r\n } else {\r\n numberValue = Number(value);\r\n }\r\n } else {\r\n return value;\r\n }\r\n \r\n if (isNaN(numberValue)) return value;\r\n \r\n const formatted = numberValue.toLocaleString(locale, {\r\n minimumFractionDigits: minFrac,\r\n maximumFractionDigits: maxFrac,\r\n });\r\n\r\n return formatted.replace(/,/g, commaSeparator);\r\n};\r\n\r\nexport const titleCase = (str) => {\r\n return str\r\n .toLowerCase()\r\n .split(\" \")\r\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\r\n .join(\" \");\r\n};\r\n\r\nexport const stringToBoolean = (str) => {\r\n if (str === \"true\" || str === \"false\") {\r\n return str === \"true\";\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\nexport function dashedNPWP(value) {\r\n // Hapus karakter non-numerik dari input\r\n const filteredValue = value?.replace(/[^\\d]/g, \"\");\r\n\r\n // Terapkan format sesuai panjang angka\r\n if (filteredValue?.length > 15) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})(\\d{4})/,\r\n \"$1.$2.$3.$4-$5.$6\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 12) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})(\\d{3})/,\r\n \"$1.$2.$3.$4-$5\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 9) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3.$4\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 6) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})(\\d{1})/,\r\n \"$1.$2.$3\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else if (filteredValue?.length > 2) {\r\n const dashedValue = filteredValue.replace(\r\n /(\\d{2})(\\d{3})/,\r\n \"$1.$2\"\r\n );\r\n return dashedValue ?? \"\";\r\n } else {\r\n return filteredValue ?? \"\";\r\n }\r\n}\r\n","/**\r\n * Navigate to CI (CodeIgniter) Page\r\n *\r\n * Utility untuk navigasi dari microfrontend ke halaman CI (legacy webapp)\r\n * melalui postMessage ke parent window (iframe communication).\r\n *\r\n * Microfrontend di-embed di dalam iframe oleh brispot_web (CI).\r\n * Untuk navigasi ke halaman CI lain, kita kirim pesan ke parent window\r\n * yang akan handle routing di sisi CI.\r\n *\r\n * @example\r\n * import { navigateToCI } from 'spotlibs-components/utils/navigateToCI';\r\n *\r\n * // Navigate ke halaman prakarsa detail\r\n * navigateToCI({\r\n * url: '/prakarsa/detail/123',\r\n * baseUrl: 'https://brispot.bri.co.id',\r\n * icon: 'icon-prakarsa',\r\n * title: 'Detail Prakarsa',\r\n * });\r\n *\r\n * @example\r\n * // Navigate tanpa icon dan title\r\n * navigateToCI({\r\n * url: '/home/dashboard',\r\n * baseUrl: process.env.NEXT_PUBLIC_CI_BASE_URL,\r\n * });\r\n */\r\n\r\n/**\r\n * @typedef {Object} NavigateToCIParams\r\n * @property {string} url - Path tujuan (harus diawali \"/\"). Contoh: \"/prakarsa/detail/123\"\r\n * @property {string} baseUrl - Base URL CI app. Contoh: \"https://brispot.bri.co.id\"\r\n * @property {string} [icon] - Icon identifier untuk sidebar/tab CI (opsional)\r\n * @property {string} [title] - Title untuk sidebar/tab CI (opsional)\r\n */\r\n\r\n/**\r\n * Kirim pesan ke parent window (CI) untuk navigasi ke halaman tertentu.\r\n *\r\n * @param {NavigateToCIParams} params\r\n * @returns {void}\r\n */\r\nexport function navigateToCI({ url, baseUrl, icon = \"\", title = \"\" }) {\r\n if (!baseUrl || typeof url !== \"string\" || !url.startsWith(\"/\")) {\r\n return;\r\n }\r\n\r\n const fullUrl = new URL(url, baseUrl).toString();\r\n\r\n const encoded = globalThis.btoa(`ni|${fullUrl} , ${icon} , ${title}|`);\r\n\r\n window.parent.postMessage(\r\n {\r\n type: \"NAVIGATE_CI\",\r\n hash: encoded,\r\n },\r\n baseUrl\r\n );\r\n}\r\n\r\nexport default navigateToCI;\r\n"]}
|
package/package.json
CHANGED
package/src/utils/exception.d.ts
CHANGED
|
@@ -1,19 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export declare const
|
|
1
|
+
// ─── Response Codes ──────────────────────────────────────────────────────────
|
|
2
|
+
|
|
3
|
+
/** Success response code "00" */
|
|
4
|
+
export declare const SUCCESS_CODE: "00";
|
|
5
|
+
|
|
6
|
+
// ─── Exception Codes ─────────────────────────────────────────────────────────
|
|
7
|
+
|
|
8
|
+
/** Header invalid — force re-login */
|
|
9
|
+
export declare const HEADER_EXCEPTION: "X0";
|
|
10
|
+
/** Access denied — unauthorized */
|
|
11
|
+
export declare const ACCESS_EXCEPTION: "X1";
|
|
12
|
+
/** Session expired — force re-login */
|
|
13
|
+
export declare const SESSION_EXCEPTION: "X2";
|
|
14
|
+
/** Invalid parameter */
|
|
15
|
+
export declare const PARAMETER_EXCEPTION: "01";
|
|
16
|
+
/** Data not found */
|
|
17
|
+
export declare const NOTFOUND_EXCEPTION: "02";
|
|
18
|
+
/** Validation rule failed */
|
|
19
|
+
export declare const INVALIDRULE_EXCEPTION: "03";
|
|
20
|
+
/** Third-party service failure */
|
|
21
|
+
export declare const THIRDPARTY_EXCEPTION: "04";
|
|
22
|
+
/** Process in progress */
|
|
23
|
+
export declare const WAITING_EXCEPTION: "05";
|
|
24
|
+
/** Unsupported operation */
|
|
25
|
+
export declare const UNSUPPORTED_EXCEPTION: "06";
|
|
26
|
+
/** Internal system error */
|
|
27
|
+
export declare const RUNTIME_EXCEPTION: "99";
|
|
28
|
+
|
|
29
|
+
// ─── Exception Messages Map ─────────────────────────────────────────────────
|
|
30
|
+
|
|
10
31
|
export declare const EXCEPTION_MESSAGES: Record<string, string>;
|
|
11
32
|
|
|
33
|
+
// ─── ApiException Class ──────────────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Custom exception class untuk API errors.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* throw new ApiException("02", "Prakarsa tidak ditemukan");
|
|
40
|
+
* throw new ApiException("X1"); // uses default message
|
|
41
|
+
*/
|
|
12
42
|
export declare class ApiException extends Error {
|
|
43
|
+
name: "ApiException";
|
|
13
44
|
responseCode: string;
|
|
14
45
|
responseDesc: string;
|
|
15
46
|
constructor(responseCode: string, responseDesc?: string);
|
|
16
47
|
}
|
|
17
48
|
|
|
49
|
+
// ─── Helper Functions ────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Check if responseCode is success (00).
|
|
53
|
+
*/
|
|
54
|
+
export declare function isSuccessCode(responseCode: string): boolean;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Check if responseCode is an exception code.
|
|
58
|
+
*/
|
|
18
59
|
export declare function isExceptionCode(responseCode: string): boolean;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Get human-readable message from exception code.
|
|
63
|
+
*/
|
|
19
64
|
export declare function getExceptionMessage(responseCode: string): string;
|
package/src/utils/exception.js
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Standardized exception codes dan ApiException class untuk handling error dari backend API.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
// ─── Response Codes ───────────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
export const SUCCESS_CODE = "00";
|
|
10
|
+
|
|
7
11
|
// ─── Exception Codes ─────────────────────────────────────────────────────────
|
|
8
12
|
|
|
9
13
|
export const HEADER_EXCEPTION = "X0";
|
|
@@ -59,6 +63,15 @@ export class ApiException extends Error {
|
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Cek apakah responseCode adalah success (00).
|
|
68
|
+
* @param {string} responseCode
|
|
69
|
+
* @returns {boolean}
|
|
70
|
+
*/
|
|
71
|
+
export function isSuccessCode(responseCode) {
|
|
72
|
+
return responseCode === SUCCESS_CODE;
|
|
73
|
+
}
|
|
74
|
+
|
|
62
75
|
/**
|
|
63
76
|
* Cek apakah responseCode termasuk exception.
|
|
64
77
|
* @param {string} responseCode - Response code dari API
|
package/src/utils/index.js
CHANGED
|
@@ -65,6 +65,7 @@ export { getTipeBankKorporasi } from "./tipeBank";
|
|
|
65
65
|
|
|
66
66
|
// Exception
|
|
67
67
|
export {
|
|
68
|
+
SUCCESS_CODE,
|
|
68
69
|
HEADER_EXCEPTION,
|
|
69
70
|
ACCESS_EXCEPTION,
|
|
70
71
|
SESSION_EXCEPTION,
|
|
@@ -77,6 +78,7 @@ export {
|
|
|
77
78
|
RUNTIME_EXCEPTION,
|
|
78
79
|
EXCEPTION_MESSAGES,
|
|
79
80
|
ApiException,
|
|
81
|
+
isSuccessCode,
|
|
80
82
|
isExceptionCode,
|
|
81
83
|
getExceptionMessage,
|
|
82
84
|
} from "./exception";
|