ayiin 2.0.30 → 2.0.32
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/index.cjs +5 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +8 -18
- package/dist/methods/crypt.cjs +5 -17
- package/dist/methods/crypt.cjs.map +1 -1
- package/dist/methods/crypt.js +40 -44
- package/dist/methods/index.cjs +9 -21
- package/dist/methods/index.cjs.map +1 -1
- package/dist/methods/index.js +12 -22
- package/dist/methods/response.cjs +2 -10
- package/dist/methods/response.cjs.map +1 -1
- package/dist/methods/response.js +15 -23
- package/dist/methods/tools.cjs +2 -10
- package/dist/methods/tools.cjs.map +1 -1
- package/dist/methods/tools.js +108 -98
- package/package.json +12 -2
- package/dist/index.js.map +0 -1
- package/dist/methods/crypt.js.map +0 -1
- package/dist/methods/index.js.map +0 -1
- package/dist/methods/response.js.map +0 -1
- package/dist/methods/tools.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function() {
|
|
9
|
-
return _default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
const _index = /*#__PURE__*/ _interop_require_default(require("./methods/index"));
|
|
13
|
-
function _interop_require_default(obj) {
|
|
14
|
-
return obj && obj.__esModule ? obj : {
|
|
15
|
-
default: obj
|
|
16
|
-
};
|
|
17
|
-
}
|
|
3
|
+
var methods_index = require('./methods/index.cjs');
|
|
4
|
+
|
|
18
5
|
class Ayiin {
|
|
19
6
|
}
|
|
20
7
|
// copy instance properties
|
|
21
|
-
Object.assign(Ayiin.prototype, new
|
|
22
|
-
|
|
8
|
+
Object.assign(Ayiin.prototype, new methods_index());
|
|
9
|
+
|
|
10
|
+
module.exports = Ayiin;
|
|
23
11
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import Methods from \"./methods/index\";\n\nclass Ayiin {}\n\n// copy instance properties\nObject.assign(Ayiin.prototype, new Methods());\n\ninterface Ayiin extends Methods {}\n\nexport default Ayiin;\n"],"names":["Ayiin","Object","assign","prototype","Methods"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import Methods from \"./methods/index\";\n\nclass Ayiin {}\n\n// copy instance properties\nObject.assign(Ayiin.prototype, new Methods());\n\ninterface Ayiin extends Methods {}\n\nexport default Ayiin;\n"],"names":["Ayiin","Object","assign","prototype","Methods"],"mappings":";;;;AAEA,MAAMA,KAAAA,CAAAA;AAAO;AAEb;AACAC,MAAAA,CAAOC,MAAM,CAACF,KAAAA,CAAMG,SAAS,EAAE,IAAIC,aAAAA,EAAAA,CAAAA;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return _default;
|
|
8
|
-
}
|
|
9
|
-
});
|
|
10
|
-
const _index = /*#__PURE__*/ _interop_require_default(require("./methods/index"));
|
|
11
|
-
function _interop_require_default(obj) {
|
|
12
|
-
return obj && obj.__esModule ? obj : {
|
|
13
|
-
default: obj
|
|
14
|
-
};
|
|
15
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const index_1 = __importDefault(require("./methods/index"));
|
|
16
7
|
class Ayiin {
|
|
17
8
|
}
|
|
18
9
|
// copy instance properties
|
|
19
|
-
Object.assign(Ayiin.prototype, new
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
|
10
|
+
Object.assign(Ayiin.prototype, new index_1.default());
|
|
11
|
+
exports.default = Ayiin;
|
package/dist/methods/crypt.cjs
CHANGED
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function() {
|
|
9
|
-
return _default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
|
13
|
-
function _interop_require_default(obj) {
|
|
14
|
-
return obj && obj.__esModule ? obj : {
|
|
15
|
-
default: obj
|
|
16
|
-
};
|
|
17
|
-
}
|
|
3
|
+
var crypto = require('crypto');
|
|
4
|
+
|
|
18
5
|
class Crypt {
|
|
19
6
|
/**
|
|
20
7
|
* Performs Base encryption and decryption.
|
|
@@ -67,9 +54,10 @@ class Crypt {
|
|
|
67
54
|
};
|
|
68
55
|
md5 = (data, encoding)=>{
|
|
69
56
|
if (!encoding) encoding = "hex";
|
|
70
|
-
let hasho =
|
|
57
|
+
let hasho = crypto.createHash("md5").update(data).digest(encoding);
|
|
71
58
|
return hasho;
|
|
72
59
|
};
|
|
73
60
|
}
|
|
74
|
-
|
|
61
|
+
|
|
62
|
+
module.exports = Crypt;
|
|
75
63
|
//# sourceMappingURL=crypt.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypt.cjs","sources":["../../src/methods/crypt.ts"],"sourcesContent":["import crypto from \"crypto\";\n\nclass Crypt {\n /**\n * Performs Base encryption and decryption.\n * @param {string | Buffer} input - The input data to be encrypted or decrypted.\n * @param {string} key - The encryption/decryption key.\n * @returns {Buffer} - The encrypted or decrypted data as a Buffer.\n */\n private baseCrypt = (input: any, key: string) => {\n const inputBuffer = Buffer.from(input, \"ascii\");\n const keyBuffer = Buffer.from(key, \"ascii\");\n const resultBuffer = Buffer.alloc(inputBuffer.length);\n\n for (let i = 0; i < inputBuffer.length; i++) {\n resultBuffer[i] = inputBuffer[i]! ^ keyBuffer[i % keyBuffer.length]!;\n }\n\n return resultBuffer;\n };\n\n /**\n * Encrypts a plaintext message using the given key.\n * @param {string} text - The plaintext message to be encrypted.\n * @param {string} key - The encryption key.\n * @returns {string} - The encrypted data in Hex format.\n */\n encrypt = (\n text: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = this.baseCrypt(text, key);\n return encryptedBuffer.toString(bufferEncoding);\n };\n\n /**\n * Decrypts an encrypted message using the given key.\n * @param {string} encrypted - The encrypted data in Hex format.\n * @param {string} key - The decryption key.\n * @returns {string} - The decrypted plaintext message.\n */\n decrypt = (\n encrypted: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = Buffer.from(encrypted, bufferEncoding);\n const decryptedBuffer = this.baseCrypt(encryptedBuffer, key);\n return decryptedBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts a Hex string to its corresponding ASCII representation.\n * @param {string} hexString - The Hex string to be converted.\n * @returns {string} - The ASCII representation of the Hex string.\n */\n hexToAscii = (hexString: string) => {\n const hexBuffer = Buffer.from(hexString, \"hex\");\n return hexBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts an ASCII string to its corresponding Hex representation.\n * @param {string} asciiString - The ASCII string to be converted.\n * @returns {string} - The Hex representation of the ASCII string.\n */\n asciiToHex = (asciiString: string) => {\n const asciiBuffer = Buffer.from(asciiString, \"ascii\");\n return asciiBuffer.toString(\"hex\");\n };\n\n md5 = (data: string, encoding: BufferEncoding) => {\n if (!encoding) encoding = \"hex\";\n let hasho = crypto.createHash(\"md5\").update(data).digest(encoding);\n return hasho;\n };\n}\n\nexport default Crypt;\n"],"names":["Crypt","baseCrypt","input","key","inputBuffer","Buffer","from","keyBuffer","resultBuffer","alloc","length","i","encrypt","text","bufferEncoding","encryptedBuffer","toString","decrypt","encrypted","decryptedBuffer","hexToAscii","hexString","hexBuffer","asciiToHex","asciiString","asciiBuffer","md5","data","encoding","hasho","crypto","createHash","update","digest"],"mappings":"
|
|
1
|
+
{"version":3,"file":"crypt.cjs","sources":["../../src/methods/crypt.ts"],"sourcesContent":["import crypto from \"crypto\";\n\nclass Crypt {\n /**\n * Performs Base encryption and decryption.\n * @param {string | Buffer} input - The input data to be encrypted or decrypted.\n * @param {string} key - The encryption/decryption key.\n * @returns {Buffer} - The encrypted or decrypted data as a Buffer.\n */\n private baseCrypt = (input: any, key: string) => {\n const inputBuffer = Buffer.from(input, \"ascii\");\n const keyBuffer = Buffer.from(key, \"ascii\");\n const resultBuffer = Buffer.alloc(inputBuffer.length);\n\n for (let i = 0; i < inputBuffer.length; i++) {\n resultBuffer[i] = inputBuffer[i]! ^ keyBuffer[i % keyBuffer.length]!;\n }\n\n return resultBuffer;\n };\n\n /**\n * Encrypts a plaintext message using the given key.\n * @param {string} text - The plaintext message to be encrypted.\n * @param {string} key - The encryption key.\n * @returns {string} - The encrypted data in Hex format.\n */\n encrypt = (\n text: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = this.baseCrypt(text, key);\n return encryptedBuffer.toString(bufferEncoding);\n };\n\n /**\n * Decrypts an encrypted message using the given key.\n * @param {string} encrypted - The encrypted data in Hex format.\n * @param {string} key - The decryption key.\n * @returns {string} - The decrypted plaintext message.\n */\n decrypt = (\n encrypted: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = Buffer.from(encrypted, bufferEncoding);\n const decryptedBuffer = this.baseCrypt(encryptedBuffer, key);\n return decryptedBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts a Hex string to its corresponding ASCII representation.\n * @param {string} hexString - The Hex string to be converted.\n * @returns {string} - The ASCII representation of the Hex string.\n */\n hexToAscii = (hexString: string) => {\n const hexBuffer = Buffer.from(hexString, \"hex\");\n return hexBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts an ASCII string to its corresponding Hex representation.\n * @param {string} asciiString - The ASCII string to be converted.\n * @returns {string} - The Hex representation of the ASCII string.\n */\n asciiToHex = (asciiString: string) => {\n const asciiBuffer = Buffer.from(asciiString, \"ascii\");\n return asciiBuffer.toString(\"hex\");\n };\n\n md5 = (data: string, encoding: BufferEncoding) => {\n if (!encoding) encoding = \"hex\";\n let hasho = crypto.createHash(\"md5\").update(data).digest(encoding);\n return hasho;\n };\n}\n\nexport default Crypt;\n"],"names":["Crypt","baseCrypt","input","key","inputBuffer","Buffer","from","keyBuffer","resultBuffer","alloc","length","i","encrypt","text","bufferEncoding","encryptedBuffer","toString","decrypt","encrypted","decryptedBuffer","hexToAscii","hexString","hexBuffer","asciiToHex","asciiString","asciiBuffer","md5","data","encoding","hasho","crypto","createHash","update","digest"],"mappings":";;;;AAEA,MAAMA,KAAAA,CAAAA;AACJ;;;;;MAMQC,SAAAA,GAAY,CAACC,KAAAA,EAAYC,GAAAA,GAAAA;AAC/B,QAAA,MAAMC,WAAAA,GAAcC,MAAAA,CAAOC,IAAI,CAACJ,KAAAA,EAAO,OAAA,CAAA;AACvC,QAAA,MAAMK,SAAAA,GAAYF,MAAAA,CAAOC,IAAI,CAACH,GAAAA,EAAK,OAAA,CAAA;AACnC,QAAA,MAAMK,YAAAA,GAAeH,MAAAA,CAAOI,KAAK,CAACL,YAAYM,MAAM,CAAA;AAEpD,QAAA,IAAK,IAAIC,CAAAA,GAAI,CAAA,EAAGA,IAAIP,WAAAA,CAAYM,MAAM,EAAEC,CAAAA,EAAAA,CAAK;AAC3CH,YAAAA,YAAY,CAACG,CAAAA,CAAE,GAAGP,WAAW,CAACO,CAAAA,CAAE,GAAIJ,SAAS,CAACI,CAAAA,GAAIJ,SAAAA,CAAUG,MAAM,CAAC;AACrE,QAAA;QAEA,OAAOF,YAAAA;IACT,CAAA;AAEA;;;;;AAKC,MACDI,OAAAA,GAAU,CACRC,IAAAA,EACAV,GAAAA,EACAW,iBAAiC,QAAQ,GAAA;AAEzC,QAAA,MAAMC,eAAAA,GAAkB,IAAI,CAACd,SAAS,CAACY,IAAAA,EAAMV,GAAAA,CAAAA;QAC7C,OAAOY,eAAAA,CAAgBC,QAAQ,CAACF,cAAAA,CAAAA;IAClC,CAAA;AAEA;;;;;AAKC,MACDG,OAAAA,GAAU,CACRC,SAAAA,EACAf,GAAAA,EACAW,iBAAiC,QAAQ,GAAA;AAEzC,QAAA,MAAMC,eAAAA,GAAkBV,MAAAA,CAAOC,IAAI,CAACY,SAAAA,EAAWJ,cAAAA,CAAAA;AAC/C,QAAA,MAAMK,eAAAA,GAAkB,IAAI,CAAClB,SAAS,CAACc,eAAAA,EAAiBZ,GAAAA,CAAAA;QACxD,OAAOgB,eAAAA,CAAgBH,QAAQ,CAAC,OAAA,CAAA;IAClC,CAAA;AAEA;;;;AAIC,MACDI,aAAa,CAACC,SAAAA,GAAAA;AACZ,QAAA,MAAMC,SAAAA,GAAYjB,MAAAA,CAAOC,IAAI,CAACe,SAAAA,EAAW,KAAA,CAAA;QACzC,OAAOC,SAAAA,CAAUN,QAAQ,CAAC,OAAA,CAAA;IAC5B,CAAA;AAEA;;;;AAIC,MACDO,aAAa,CAACC,WAAAA,GAAAA;AACZ,QAAA,MAAMC,WAAAA,GAAcpB,MAAAA,CAAOC,IAAI,CAACkB,WAAAA,EAAa,OAAA,CAAA;QAC7C,OAAOC,WAAAA,CAAYT,QAAQ,CAAC,KAAA,CAAA;IAC9B,CAAA;AAEAU,IAAAA,GAAAA,GAAM,CAACC,IAAAA,EAAcC,QAAAA,GAAAA;QACnB,IAAI,CAACA,UAAUA,QAAAA,GAAW,KAAA;QAC1B,IAAIC,KAAAA,GAAQC,OAAOC,UAAU,CAAC,OAAOC,MAAM,CAACL,IAAAA,CAAAA,CAAMM,MAAM,CAACL,QAAAA,CAAAA;QACzD,OAAOC,KAAAA;IACT,CAAA;AACF;;"}
|
package/dist/methods/crypt.js
CHANGED
|
@@ -1,73 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return _default;
|
|
8
|
-
}
|
|
9
|
-
});
|
|
10
|
-
const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
|
11
|
-
function _interop_require_default(obj) {
|
|
12
|
-
return obj && obj.__esModule ? obj : {
|
|
13
|
-
default: obj
|
|
14
|
-
};
|
|
15
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
16
7
|
class Crypt {
|
|
17
8
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
* Performs Base encryption and decryption.
|
|
10
|
+
* @param {string | Buffer} input - The input data to be encrypted or decrypted.
|
|
11
|
+
* @param {string} key - The encryption/decryption key.
|
|
12
|
+
* @returns {Buffer} - The encrypted or decrypted data as a Buffer.
|
|
13
|
+
*/
|
|
14
|
+
baseCrypt = (input, key) => {
|
|
23
15
|
const inputBuffer = Buffer.from(input, "ascii");
|
|
24
16
|
const keyBuffer = Buffer.from(key, "ascii");
|
|
25
17
|
const resultBuffer = Buffer.alloc(inputBuffer.length);
|
|
26
|
-
for(let i = 0; i < inputBuffer.length; i++){
|
|
18
|
+
for (let i = 0; i < inputBuffer.length; i++) {
|
|
27
19
|
resultBuffer[i] = inputBuffer[i] ^ keyBuffer[i % keyBuffer.length];
|
|
28
20
|
}
|
|
29
21
|
return resultBuffer;
|
|
30
22
|
};
|
|
31
23
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
* Encrypts a plaintext message using the given key.
|
|
25
|
+
* @param {string} text - The plaintext message to be encrypted.
|
|
26
|
+
* @param {string} key - The encryption key.
|
|
27
|
+
* @returns {string} - The encrypted data in Hex format.
|
|
28
|
+
*/
|
|
29
|
+
encrypt = (text, key, bufferEncoding = "base64") => {
|
|
37
30
|
const encryptedBuffer = this.baseCrypt(text, key);
|
|
38
31
|
return encryptedBuffer.toString(bufferEncoding);
|
|
39
32
|
};
|
|
40
33
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
34
|
+
* Decrypts an encrypted message using the given key.
|
|
35
|
+
* @param {string} encrypted - The encrypted data in Hex format.
|
|
36
|
+
* @param {string} key - The decryption key.
|
|
37
|
+
* @returns {string} - The decrypted plaintext message.
|
|
38
|
+
*/
|
|
39
|
+
decrypt = (encrypted, key, bufferEncoding = "base64") => {
|
|
46
40
|
const encryptedBuffer = Buffer.from(encrypted, bufferEncoding);
|
|
47
41
|
const decryptedBuffer = this.baseCrypt(encryptedBuffer, key);
|
|
48
42
|
return decryptedBuffer.toString("ascii");
|
|
49
43
|
};
|
|
50
44
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
* Converts a Hex string to its corresponding ASCII representation.
|
|
46
|
+
* @param {string} hexString - The Hex string to be converted.
|
|
47
|
+
* @returns {string} - The ASCII representation of the Hex string.
|
|
48
|
+
*/
|
|
49
|
+
hexToAscii = (hexString) => {
|
|
55
50
|
const hexBuffer = Buffer.from(hexString, "hex");
|
|
56
51
|
return hexBuffer.toString("ascii");
|
|
57
52
|
};
|
|
58
53
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
54
|
+
* Converts an ASCII string to its corresponding Hex representation.
|
|
55
|
+
* @param {string} asciiString - The ASCII string to be converted.
|
|
56
|
+
* @returns {string} - The Hex representation of the ASCII string.
|
|
57
|
+
*/
|
|
58
|
+
asciiToHex = (asciiString) => {
|
|
63
59
|
const asciiBuffer = Buffer.from(asciiString, "ascii");
|
|
64
60
|
return asciiBuffer.toString("hex");
|
|
65
61
|
};
|
|
66
|
-
md5 = (data, encoding)=>{
|
|
67
|
-
if (!encoding)
|
|
68
|
-
|
|
62
|
+
md5 = (data, encoding) => {
|
|
63
|
+
if (!encoding)
|
|
64
|
+
encoding = "hex";
|
|
65
|
+
let hasho = crypto_1.default.createHash("md5").update(data).digest(encoding);
|
|
69
66
|
return hasho;
|
|
70
67
|
};
|
|
71
68
|
}
|
|
72
|
-
|
|
73
|
-
//# sourceMappingURL=crypt.js.map
|
|
69
|
+
exports.default = Crypt;
|
package/dist/methods/index.cjs
CHANGED
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function() {
|
|
9
|
-
return _default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
const _crypt = /*#__PURE__*/ _interop_require_default(require("./crypt"));
|
|
13
|
-
const _tools = /*#__PURE__*/ _interop_require_default(require("./tools"));
|
|
14
|
-
const _response = /*#__PURE__*/ _interop_require_default(require("./response"));
|
|
15
|
-
function _interop_require_default(obj) {
|
|
16
|
-
return obj && obj.__esModule ? obj : {
|
|
17
|
-
default: obj
|
|
18
|
-
};
|
|
19
|
-
}
|
|
3
|
+
var methods_crypt = require('./crypt.cjs');
|
|
4
|
+
var methods_tools = require('./tools.cjs');
|
|
5
|
+
var methods_response = require('./response.cjs');
|
|
6
|
+
|
|
20
7
|
class Methods {
|
|
21
8
|
}
|
|
22
9
|
// copy instance properties
|
|
23
|
-
Object.assign(Methods.prototype, new
|
|
24
|
-
Object.assign(Methods.prototype, new
|
|
25
|
-
Object.assign(Methods.prototype, new
|
|
26
|
-
|
|
10
|
+
Object.assign(Methods.prototype, new methods_tools());
|
|
11
|
+
Object.assign(Methods.prototype, new methods_crypt());
|
|
12
|
+
Object.assign(Methods.prototype, new methods_response());
|
|
13
|
+
|
|
14
|
+
module.exports = Methods;
|
|
27
15
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/methods/index.ts"],"sourcesContent":["import Crypt from \"./crypt\";\nimport Tools from \"./tools\";\nimport ResponseApi from \"./response\";\n\nclass Methods {}\n\n// copy instance properties\nObject.assign(Methods.prototype, new Tools());\nObject.assign(Methods.prototype, new Crypt());\nObject.assign(Methods.prototype, new ResponseApi());\n\ninterface Methods extends Crypt, Tools, ResponseApi {}\n\nexport default Methods;\n"],"names":["Methods","Object","assign","prototype","Tools","Crypt","ResponseApi"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/methods/index.ts"],"sourcesContent":["import Crypt from \"./crypt\";\nimport Tools from \"./tools\";\nimport ResponseApi from \"./response\";\n\nclass Methods {}\n\n// copy instance properties\nObject.assign(Methods.prototype, new Tools());\nObject.assign(Methods.prototype, new Crypt());\nObject.assign(Methods.prototype, new ResponseApi());\n\ninterface Methods extends Crypt, Tools, ResponseApi {}\n\nexport default Methods;\n"],"names":["Methods","Object","assign","prototype","Tools","Crypt","ResponseApi"],"mappings":";;;;;;AAIA,MAAMA,OAAAA,CAAAA;AAAS;AAEf;AACAC,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIC,aAAAA,EAAAA,CAAAA;AACrCH,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIE,aAAAA,EAAAA,CAAAA;AACrCJ,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIG,gBAAAA,EAAAA,CAAAA;;"}
|
package/dist/methods/index.js
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
const _crypt = /*#__PURE__*/ _interop_require_default(require("./crypt"));
|
|
11
|
-
const _tools = /*#__PURE__*/ _interop_require_default(require("./tools"));
|
|
12
|
-
const _response = /*#__PURE__*/ _interop_require_default(require("./response"));
|
|
13
|
-
function _interop_require_default(obj) {
|
|
14
|
-
return obj && obj.__esModule ? obj : {
|
|
15
|
-
default: obj
|
|
16
|
-
};
|
|
17
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const crypt_1 = __importDefault(require("./crypt"));
|
|
7
|
+
const tools_1 = __importDefault(require("./tools"));
|
|
8
|
+
const response_1 = __importDefault(require("./response"));
|
|
18
9
|
class Methods {
|
|
19
10
|
}
|
|
20
11
|
// copy instance properties
|
|
21
|
-
Object.assign(Methods.prototype, new
|
|
22
|
-
Object.assign(Methods.prototype, new
|
|
23
|
-
Object.assign(Methods.prototype, new
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
12
|
+
Object.assign(Methods.prototype, new tools_1.default());
|
|
13
|
+
Object.assign(Methods.prototype, new crypt_1.default());
|
|
14
|
+
Object.assign(Methods.prototype, new response_1.default());
|
|
15
|
+
exports.default = Methods;
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function() {
|
|
9
|
-
return _default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
3
|
class ResponseApi {
|
|
13
4
|
success = ({ caption, data, code })=>{
|
|
14
5
|
code = code ? Number(String(code) + "7400") : 2007400;
|
|
@@ -60,5 +51,6 @@ class ResponseApi {
|
|
|
60
51
|
};
|
|
61
52
|
};
|
|
62
53
|
}
|
|
63
|
-
|
|
54
|
+
|
|
55
|
+
module.exports = ResponseApi;
|
|
64
56
|
//# sourceMappingURL=response.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.cjs","sources":["../../src/methods/response.ts"],"sourcesContent":["class ResponseApi {\n success = ({\n caption,\n data,\n code,\n }: {\n caption: string;\n data: any;\n code?: number | string;\n }) => {\n code = code ? Number(String(code) + \"7400\") : 2007400;\n return {\n responseCode: code,\n responseSuccess: true,\n responseMessage: `[Success] - ${caption}`,\n responseData: data,\n };\n };\n\n badRequest = ({\n caption,\n title,\n data,\n }: {\n caption: string;\n title?: string;\n data?: any;\n }) => {\n return {\n responseCode: 4007400,\n responseSuccess: false,\n responseMessage: `[${title ? title : \"Bad Request\"}] - ${caption}`,\n responseData: data,\n };\n };\n\n invalidFields = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4007401,\n responseSuccess: false,\n responseMessage: `[Invalid Fields] - ${caption}`,\n responseData: data,\n };\n };\n\n notFound = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4047400,\n responseSuccess: false,\n responseMessage: `[Not Found] - ${caption}`,\n responseData: data,\n };\n };\n\n unauthorized = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4017400,\n responseSuccess: false,\n responseMessage: `[Unauthorized] - ${caption}`,\n responseData: data,\n };\n };\n\n internalServer = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 5007400,\n responseSuccess: false,\n responseMessage: `[Internal Server Error] - ${caption}`,\n responseData: data,\n };\n };\n}\n\nexport default ResponseApi;\n"],"names":["ResponseApi","success","caption","data","code","Number","String","responseCode","responseSuccess","responseMessage","responseData","badRequest","title","invalidFields","notFound","unauthorized","internalServer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"response.cjs","sources":["../../src/methods/response.ts"],"sourcesContent":["class ResponseApi {\n success = ({\n caption,\n data,\n code,\n }: {\n caption: string;\n data: any;\n code?: number | string;\n }) => {\n code = code ? Number(String(code) + \"7400\") : 2007400;\n return {\n responseCode: code,\n responseSuccess: true,\n responseMessage: `[Success] - ${caption}`,\n responseData: data,\n };\n };\n\n badRequest = ({\n caption,\n title,\n data,\n }: {\n caption: string;\n title?: string;\n data?: any;\n }) => {\n return {\n responseCode: 4007400,\n responseSuccess: false,\n responseMessage: `[${title ? title : \"Bad Request\"}] - ${caption}`,\n responseData: data,\n };\n };\n\n invalidFields = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4007401,\n responseSuccess: false,\n responseMessage: `[Invalid Fields] - ${caption}`,\n responseData: data,\n };\n };\n\n notFound = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4047400,\n responseSuccess: false,\n responseMessage: `[Not Found] - ${caption}`,\n responseData: data,\n };\n };\n\n unauthorized = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4017400,\n responseSuccess: false,\n responseMessage: `[Unauthorized] - ${caption}`,\n responseData: data,\n };\n };\n\n internalServer = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 5007400,\n responseSuccess: false,\n responseMessage: `[Internal Server Error] - ${caption}`,\n responseData: data,\n };\n };\n}\n\nexport default ResponseApi;\n"],"names":["ResponseApi","success","caption","data","code","Number","String","responseCode","responseSuccess","responseMessage","responseData","badRequest","title","invalidFields","notFound","unauthorized","internalServer"],"mappings":";;AAAA,MAAMA,WAAAA,CAAAA;AACJC,IAAAA,OAAAA,GAAU,CAAC,EACTC,OAAO,EACPC,IAAI,EACJC,IAAI,EAKL,GAAA;AACCA,QAAAA,IAAAA,GAAOA,IAAAA,GAAOC,MAAAA,CAAOC,MAAAA,CAAOF,IAAAA,CAAAA,GAAQ,MAAA,CAAA,GAAU,OAAA;QAC9C,OAAO;YACLG,YAAAA,EAAcH,IAAAA;YACdI,eAAAA,EAAiB,IAAA;YACjBC,eAAAA,EAAiB,CAAC,YAAY,EAAEP,OAAAA,CAAAA,CAAS;YACzCQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAQ,IAAAA,UAAAA,GAAa,CAAC,EACZT,OAAO,EACPU,KAAK,EACLT,IAAI,EAKL,GAAA;QACC,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,CAAC,EAAEG,KAAAA,GAAQA,QAAQ,aAAA,CAAc,IAAI,EAAEV,OAAAA,CAAAA,CAAS;YAClEQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAU,IAAAA,aAAAA,GAAgB,CAAC,EAAEX,OAAO,EAAEC,IAAI,EAAmC,GAAA;QACjE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,mBAAmB,EAAEP,OAAAA,CAAAA,CAAS;YAChDQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAW,IAAAA,QAAAA,GAAW,CAAC,EAAEZ,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAC5D,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,cAAc,EAAEP,OAAAA,CAAAA,CAAS;YAC3CQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAY,IAAAA,YAAAA,GAAe,CAAC,EAAEb,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAChE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,iBAAiB,EAAEP,OAAAA,CAAAA,CAAS;YAC9CQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAa,IAAAA,cAAAA,GAAiB,CAAC,EAAEd,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAClE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,0BAA0B,EAAEP,OAAAA,CAAAA,CAAS;YACvDQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AACF;;"}
|
package/dist/methods/response.js
CHANGED
|
@@ -1,62 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
});
|
|
4
|
-
Object.defineProperty(exports, "default", {
|
|
5
|
-
enumerable: true,
|
|
6
|
-
get: function() {
|
|
7
|
-
return _default;
|
|
8
|
-
}
|
|
9
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
3
|
class ResponseApi {
|
|
11
|
-
success = ({ caption, data, code })=>{
|
|
4
|
+
success = ({ caption, data, code, }) => {
|
|
12
5
|
code = code ? Number(String(code) + "7400") : 2007400;
|
|
13
6
|
return {
|
|
14
7
|
responseCode: code,
|
|
15
8
|
responseSuccess: true,
|
|
16
9
|
responseMessage: `[Success] - ${caption}`,
|
|
17
|
-
responseData: data
|
|
10
|
+
responseData: data,
|
|
18
11
|
};
|
|
19
12
|
};
|
|
20
|
-
badRequest = ({ caption, title, data })=>{
|
|
13
|
+
badRequest = ({ caption, title, data, }) => {
|
|
21
14
|
return {
|
|
22
15
|
responseCode: 4007400,
|
|
23
16
|
responseSuccess: false,
|
|
24
17
|
responseMessage: `[${title ? title : "Bad Request"}] - ${caption}`,
|
|
25
|
-
responseData: data
|
|
18
|
+
responseData: data,
|
|
26
19
|
};
|
|
27
20
|
};
|
|
28
|
-
invalidFields = ({ caption, data })=>{
|
|
21
|
+
invalidFields = ({ caption, data }) => {
|
|
29
22
|
return {
|
|
30
23
|
responseCode: 4007401,
|
|
31
24
|
responseSuccess: false,
|
|
32
25
|
responseMessage: `[Invalid Fields] - ${caption}`,
|
|
33
|
-
responseData: data
|
|
26
|
+
responseData: data,
|
|
34
27
|
};
|
|
35
28
|
};
|
|
36
|
-
notFound = ({ caption, data })=>{
|
|
29
|
+
notFound = ({ caption, data }) => {
|
|
37
30
|
return {
|
|
38
31
|
responseCode: 4047400,
|
|
39
32
|
responseSuccess: false,
|
|
40
33
|
responseMessage: `[Not Found] - ${caption}`,
|
|
41
|
-
responseData: data
|
|
34
|
+
responseData: data,
|
|
42
35
|
};
|
|
43
36
|
};
|
|
44
|
-
unauthorized = ({ caption, data })=>{
|
|
37
|
+
unauthorized = ({ caption, data }) => {
|
|
45
38
|
return {
|
|
46
39
|
responseCode: 4017400,
|
|
47
40
|
responseSuccess: false,
|
|
48
41
|
responseMessage: `[Unauthorized] - ${caption}`,
|
|
49
|
-
responseData: data
|
|
42
|
+
responseData: data,
|
|
50
43
|
};
|
|
51
44
|
};
|
|
52
|
-
internalServer = ({ caption, data })=>{
|
|
45
|
+
internalServer = ({ caption, data }) => {
|
|
53
46
|
return {
|
|
54
47
|
responseCode: 5007400,
|
|
55
48
|
responseSuccess: false,
|
|
56
49
|
responseMessage: `[Internal Server Error] - ${caption}`,
|
|
57
|
-
responseData: data
|
|
50
|
+
responseData: data,
|
|
58
51
|
};
|
|
59
52
|
};
|
|
60
53
|
}
|
|
61
|
-
|
|
62
|
-
//# sourceMappingURL=response.js.map
|
|
54
|
+
exports.default = ResponseApi;
|
package/dist/methods/tools.cjs
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "default", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function() {
|
|
9
|
-
return _default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
3
|
class Tools {
|
|
13
4
|
/**
|
|
14
5
|
* Format money ke string sesuai locale
|
|
@@ -166,5 +157,6 @@ class Tools {
|
|
|
166
157
|
throw error;
|
|
167
158
|
};
|
|
168
159
|
}
|
|
169
|
-
|
|
160
|
+
|
|
161
|
+
module.exports = Tools;
|
|
170
162
|
//# sourceMappingURL=tools.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.cjs","sources":["../../src/methods/tools.ts"],"sourcesContent":["class Tools {\n /**\n * Format money ke string sesuai locale\n * @memberof Tools\n * @param {number | string} amount - jumlah uang\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @param {Intl.NumberFormatOptions} options - default currency IDR\n * @returns {string} string\n */\n formatMoney = (\n amount: number | string,\n locales: Intl.LocalesArgument = \"id-ID\",\n options: Intl.NumberFormatOptions = {\n style: \"currency\",\n currency: \"IDR\",\n minimumFractionDigits: 0,\n },\n ) => {\n return new Intl.NumberFormat(locales, options).format(Number(amount));\n };\n\n /**\n * Generate unique ID dengan pilihan tipe\n * @param {\"number\"|\"string\"|\"mixed\"} type - tipe ID (angka, string, atau campuran)\n * @param {number} length - panjang ID (default 8)\n * @returns {string} ID unik acak\n */\n uniqueId = ({\n type = \"mixed\",\n length = 8,\n prefix,\n }: {\n type?: \"number\" | \"string\" | \"mixed\";\n length?: number | string;\n prefix?: string;\n }): string => {\n let chars: string;\n\n switch (type) {\n case \"number\":\n chars = \"0123456789\";\n break;\n case \"string\":\n chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n break;\n default:\n chars =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n }\n\n let id = \"\";\n for (let i = 0; i < Number(length); i++) {\n id += chars[Math.floor(Math.random() * chars.length)];\n }\n\n return prefix ? prefix + id : id;\n };\n\n /**\n * Generate UUID v4 sederhana\n * @returns {string}\n */\n randomUuid = (): string => {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * Pick a random from array\n * @param {T[]} array\n * @memberof Tools\n * @returns {T} item acak dari array\n */\n randomItem = <T>(array: T[]): T | undefined => {\n return array[Math.floor(Math.random() * array.length)];\n };\n\n /**\n * Ambil beberapa item acak unik dari array\n * @param {T[]} array\n * @param {number} count - jumlah item\n * @returns {T[]} array item acak unik dari array\n */\n randomMany = <T>(array: T[], count: number | string): T[] => {\n const copy = [...array];\n for (let i = copy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [copy[i]!, copy[j]!] = [copy[j]!, copy[i]!];\n }\n return copy.slice(0, Number(count));\n };\n\n /**\n * Validasi apakah string adalah email\n * @param {string} str\n * @returns {boolean} true jika string adalah email, false jika bukan\n */\n isEmail = (str: string): boolean => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(str);\n\n /**\n * Validasi apakah string adalah URL\n * @param {string} str\n * @returns {boolean} true jika string adalah URL, false jika bukan\n */\n isUrl = (str: string): boolean => {\n try {\n new URL(str);\n return true;\n } catch {\n return false;\n }\n };\n\n /**\n * Format tanggal ke string sesuai locale\n * @param {Date} date\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @returns {string} string\n */\n formatDate = (date: Date, locales: Intl.LocalesArgument = \"id-ID\"): string =>\n new Intl.DateTimeFormat(locales, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n\n /**\n * Hitung waktu relatif (misalnya \"5 menit lalu\")\n * @param {Date} date\n * @returns {string} string\n */\n timeAgo = (date: Date): string => {\n const diff = Date.now() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n if (seconds < 60) return `${seconds} detik lalu`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes} menit lalu`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} jam lalu`;\n const days = Math.floor(hours / 24);\n return `${days} hari lalu`;\n };\n\n /**\n * Convert string menjadi camelCase\n * @param {string} input - string yang akan diubah\n * @returns {string} camelCase string\n */\n toCamelCase = (input: string): string => {\n return input\n .toLowerCase()\n .replace(/[-_\\s]+(.)?/g, (_, chr) => (chr ? chr.toUpperCase() : \"\"));\n };\n\n /**\n * Capitalize string (huruf pertama jadi kapital)\n * @param {string} input - string yang akan diubah\n * @returns {string} string dengan huruf pertama kapital\n */\n capitalize = (input: string): string => {\n if (!input) return \"\";\n return input.charAt(0).toUpperCase() + input.slice(1);\n };\n\n slugify = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^\\w-]+/g, \"\");\n };\n\n deepClone = <T>(obj: T): T => {\n return JSON.parse(JSON.stringify(obj));\n };\n\n isEmptyObject = (obj: object): boolean => {\n return Object.keys(obj).length === 0;\n };\n\n sleep = (ms: number): Promise<void> => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n retry = async <T>(fn: () => Promise<T>, retries = 3): Promise<T> => {\n let error;\n for (let i = 0; i < retries; i++) {\n try {\n return await fn();\n } catch (err) {\n error = err;\n }\n }\n throw error;\n };\n}\n\nexport default Tools;\n"],"names":["Tools","formatMoney","amount","locales","options","style","currency","minimumFractionDigits","Intl","NumberFormat","format","Number","uniqueId","type","length","prefix","chars","id","i","Math","floor","random","randomUuid","replace","c","r","v","toString","randomItem","array","randomMany","count","copy","j","slice","isEmail","str","test","isUrl","URL","formatDate","date","DateTimeFormat","year","month","day","hour","minute","timeAgo","diff","Date","now","getTime","seconds","minutes","hours","days","toCamelCase","input","toLowerCase","_","chr","toUpperCase","capitalize","charAt","slugify","deepClone","obj","JSON","parse","stringify","isEmptyObject","Object","keys","sleep","ms","Promise","resolve","setTimeout","retry","fn","retries","error","err"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.cjs","sources":["../../src/methods/tools.ts"],"sourcesContent":["class Tools {\n /**\n * Format money ke string sesuai locale\n * @memberof Tools\n * @param {number | string} amount - jumlah uang\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @param {Intl.NumberFormatOptions} options - default currency IDR\n * @returns {string} string\n */\n formatMoney = (\n amount: number | string,\n locales: Intl.LocalesArgument = \"id-ID\",\n options: Intl.NumberFormatOptions = {\n style: \"currency\",\n currency: \"IDR\",\n minimumFractionDigits: 0,\n },\n ) => {\n return new Intl.NumberFormat(locales, options).format(Number(amount));\n };\n\n /**\n * Generate unique ID dengan pilihan tipe\n * @param {\"number\"|\"string\"|\"mixed\"} type - tipe ID (angka, string, atau campuran)\n * @param {number} length - panjang ID (default 8)\n * @returns {string} ID unik acak\n */\n uniqueId = ({\n type = \"mixed\",\n length = 8,\n prefix,\n }: {\n type?: \"number\" | \"string\" | \"mixed\";\n length?: number | string;\n prefix?: string;\n }): string => {\n let chars: string;\n\n switch (type) {\n case \"number\":\n chars = \"0123456789\";\n break;\n case \"string\":\n chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n break;\n default:\n chars =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n }\n\n let id = \"\";\n for (let i = 0; i < Number(length); i++) {\n id += chars[Math.floor(Math.random() * chars.length)];\n }\n\n return prefix ? prefix + id : id;\n };\n\n /**\n * Generate UUID v4 sederhana\n * @returns {string}\n */\n randomUuid = (): string => {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * Pick a random from array\n * @param {T[]} array\n * @memberof Tools\n * @returns {T} item acak dari array\n */\n randomItem = <T>(array: T[]): T | undefined => {\n return array[Math.floor(Math.random() * array.length)];\n };\n\n /**\n * Ambil beberapa item acak unik dari array\n * @param {T[]} array\n * @param {number} count - jumlah item\n * @returns {T[]} array item acak unik dari array\n */\n randomMany = <T>(array: T[], count: number | string): T[] => {\n const copy = [...array];\n for (let i = copy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [copy[i]!, copy[j]!] = [copy[j]!, copy[i]!];\n }\n return copy.slice(0, Number(count));\n };\n\n /**\n * Validasi apakah string adalah email\n * @param {string} str\n * @returns {boolean} true jika string adalah email, false jika bukan\n */\n isEmail = (str: string): boolean => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(str);\n\n /**\n * Validasi apakah string adalah URL\n * @param {string} str\n * @returns {boolean} true jika string adalah URL, false jika bukan\n */\n isUrl = (str: string): boolean => {\n try {\n new URL(str);\n return true;\n } catch {\n return false;\n }\n };\n\n /**\n * Format tanggal ke string sesuai locale\n * @param {Date} date\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @returns {string} string\n */\n formatDate = (date: Date, locales: Intl.LocalesArgument = \"id-ID\"): string =>\n new Intl.DateTimeFormat(locales, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n\n /**\n * Hitung waktu relatif (misalnya \"5 menit lalu\")\n * @param {Date} date\n * @returns {string} string\n */\n timeAgo = (date: Date): string => {\n const diff = Date.now() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n if (seconds < 60) return `${seconds} detik lalu`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes} menit lalu`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} jam lalu`;\n const days = Math.floor(hours / 24);\n return `${days} hari lalu`;\n };\n\n /**\n * Convert string menjadi camelCase\n * @param {string} input - string yang akan diubah\n * @returns {string} camelCase string\n */\n toCamelCase = (input: string): string => {\n return input\n .toLowerCase()\n .replace(/[-_\\s]+(.)?/g, (_, chr) => (chr ? chr.toUpperCase() : \"\"));\n };\n\n /**\n * Capitalize string (huruf pertama jadi kapital)\n * @param {string} input - string yang akan diubah\n * @returns {string} string dengan huruf pertama kapital\n */\n capitalize = (input: string): string => {\n if (!input) return \"\";\n return input.charAt(0).toUpperCase() + input.slice(1);\n };\n\n slugify = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^\\w-]+/g, \"\");\n };\n\n deepClone = <T>(obj: T): T => {\n return JSON.parse(JSON.stringify(obj));\n };\n\n isEmptyObject = (obj: object): boolean => {\n return Object.keys(obj).length === 0;\n };\n\n sleep = (ms: number): Promise<void> => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n retry = async <T>(fn: () => Promise<T>, retries = 3): Promise<T> => {\n let error;\n for (let i = 0; i < retries; i++) {\n try {\n return await fn();\n } catch (err) {\n error = err;\n }\n }\n throw error;\n };\n}\n\nexport default Tools;\n"],"names":["Tools","formatMoney","amount","locales","options","style","currency","minimumFractionDigits","Intl","NumberFormat","format","Number","uniqueId","type","length","prefix","chars","id","i","Math","floor","random","randomUuid","replace","c","r","v","toString","randomItem","array","randomMany","count","copy","j","slice","isEmail","str","test","isUrl","URL","formatDate","date","DateTimeFormat","year","month","day","hour","minute","timeAgo","diff","Date","now","getTime","seconds","minutes","hours","days","toCamelCase","input","toLowerCase","_","chr","toUpperCase","capitalize","charAt","slugify","deepClone","obj","JSON","parse","stringify","isEmptyObject","Object","keys","sleep","ms","Promise","resolve","setTimeout","retry","fn","retries","error","err"],"mappings":"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"}
|
package/dist/methods/tools.js
CHANGED
|
@@ -1,35 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
});
|
|
4
|
-
Object.defineProperty(exports, "default", {
|
|
5
|
-
enumerable: true,
|
|
6
|
-
get: function() {
|
|
7
|
-
return _default;
|
|
8
|
-
}
|
|
9
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
3
|
class Tools {
|
|
11
4
|
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
* Format money ke string sesuai locale
|
|
6
|
+
* @memberof Tools
|
|
7
|
+
* @param {number | string} amount - jumlah uang
|
|
8
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
9
|
+
* @param {Intl.NumberFormatOptions} options - default currency IDR
|
|
10
|
+
* @returns {string} string
|
|
11
|
+
*/
|
|
12
|
+
formatMoney = (amount, locales = "id-ID", options = {
|
|
19
13
|
style: "currency",
|
|
20
14
|
currency: "IDR",
|
|
21
|
-
minimumFractionDigits: 0
|
|
22
|
-
})=>{
|
|
15
|
+
minimumFractionDigits: 0,
|
|
16
|
+
}) => {
|
|
23
17
|
return new Intl.NumberFormat(locales, options).format(Number(amount));
|
|
24
18
|
};
|
|
25
19
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
* Generate unique ID dengan pilihan tipe
|
|
21
|
+
* @param {"number"|"string"|"mixed"} type - tipe ID (angka, string, atau campuran)
|
|
22
|
+
* @param {number} length - panjang ID (default 8)
|
|
23
|
+
* @returns {string} ID unik acak
|
|
24
|
+
*/
|
|
25
|
+
uniqueId = ({ type = "mixed", length = 8, prefix, }) => {
|
|
31
26
|
let chars;
|
|
32
|
-
switch(type){
|
|
27
|
+
switch (type) {
|
|
33
28
|
case "number":
|
|
34
29
|
chars = "0123456789";
|
|
35
30
|
break;
|
|
@@ -37,132 +32,147 @@ class Tools {
|
|
|
37
32
|
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
38
33
|
break;
|
|
39
34
|
default:
|
|
40
|
-
chars =
|
|
35
|
+
chars =
|
|
36
|
+
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
41
37
|
}
|
|
42
38
|
let id = "";
|
|
43
|
-
for(let i = 0; i < Number(length); i++){
|
|
39
|
+
for (let i = 0; i < Number(length); i++) {
|
|
44
40
|
id += chars[Math.floor(Math.random() * chars.length)];
|
|
45
41
|
}
|
|
46
42
|
return prefix ? prefix + id : id;
|
|
47
43
|
};
|
|
48
44
|
/**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
45
|
+
* Generate UUID v4 sederhana
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
randomUuid = () => {
|
|
49
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
50
|
+
const r = (Math.random() * 16) | 0;
|
|
51
|
+
const v = c === "x" ? r : (r & 0x3) | 0x8;
|
|
55
52
|
return v.toString(16);
|
|
56
53
|
});
|
|
57
54
|
};
|
|
58
55
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
* Pick a random from array
|
|
57
|
+
* @param {T[]} array
|
|
58
|
+
* @memberof Tools
|
|
59
|
+
* @returns {T} item acak dari array
|
|
60
|
+
*/
|
|
61
|
+
randomItem = (array) => {
|
|
64
62
|
return array[Math.floor(Math.random() * array.length)];
|
|
65
63
|
};
|
|
66
64
|
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
for(let i = copy.length - 1; i > 0; i--){
|
|
65
|
+
* Ambil beberapa item acak unik dari array
|
|
66
|
+
* @param {T[]} array
|
|
67
|
+
* @param {number} count - jumlah item
|
|
68
|
+
* @returns {T[]} array item acak unik dari array
|
|
69
|
+
*/
|
|
70
|
+
randomMany = (array, count) => {
|
|
71
|
+
const copy = [...array];
|
|
72
|
+
for (let i = copy.length - 1; i > 0; i--) {
|
|
76
73
|
const j = Math.floor(Math.random() * (i + 1));
|
|
77
|
-
[copy[i], copy[j]] = [
|
|
78
|
-
copy[j],
|
|
79
|
-
copy[i]
|
|
80
|
-
];
|
|
74
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
81
75
|
}
|
|
82
76
|
return copy.slice(0, Number(count));
|
|
83
77
|
};
|
|
84
78
|
/**
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
* Validasi apakah string adalah email
|
|
80
|
+
* @param {string} str
|
|
81
|
+
* @returns {boolean} true jika string adalah email, false jika bukan
|
|
82
|
+
*/
|
|
83
|
+
isEmail = (str) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str);
|
|
89
84
|
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
85
|
+
* Validasi apakah string adalah URL
|
|
86
|
+
* @param {string} str
|
|
87
|
+
* @returns {boolean} true jika string adalah URL, false jika bukan
|
|
88
|
+
*/
|
|
89
|
+
isUrl = (str) => {
|
|
94
90
|
try {
|
|
95
91
|
new URL(str);
|
|
96
92
|
return true;
|
|
97
|
-
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
98
95
|
return false;
|
|
99
96
|
}
|
|
100
97
|
};
|
|
101
98
|
/**
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
99
|
+
* Format tanggal ke string sesuai locale
|
|
100
|
+
* @param {Date} date
|
|
101
|
+
* @param {Intl.LocalesArgument} locales - default "id-ID"
|
|
102
|
+
* @returns {string} string
|
|
103
|
+
*/
|
|
104
|
+
formatDate = (date, locales = "id-ID") => new Intl.DateTimeFormat(locales, {
|
|
105
|
+
year: "numeric",
|
|
106
|
+
month: "long",
|
|
107
|
+
day: "numeric",
|
|
108
|
+
hour: "2-digit",
|
|
109
|
+
minute: "2-digit",
|
|
110
|
+
}).format(date);
|
|
113
111
|
/**
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
* Hitung waktu relatif (misalnya "5 menit lalu")
|
|
113
|
+
* @param {Date} date
|
|
114
|
+
* @returns {string} string
|
|
115
|
+
*/
|
|
116
|
+
timeAgo = (date) => {
|
|
118
117
|
const diff = Date.now() - date.getTime();
|
|
119
118
|
const seconds = Math.floor(diff / 1000);
|
|
120
|
-
if (seconds < 60)
|
|
119
|
+
if (seconds < 60)
|
|
120
|
+
return `${seconds} detik lalu`;
|
|
121
121
|
const minutes = Math.floor(seconds / 60);
|
|
122
|
-
if (minutes < 60)
|
|
122
|
+
if (minutes < 60)
|
|
123
|
+
return `${minutes} menit lalu`;
|
|
123
124
|
const hours = Math.floor(minutes / 60);
|
|
124
|
-
if (hours < 24)
|
|
125
|
+
if (hours < 24)
|
|
126
|
+
return `${hours} jam lalu`;
|
|
125
127
|
const days = Math.floor(hours / 24);
|
|
126
128
|
return `${days} hari lalu`;
|
|
127
129
|
};
|
|
128
130
|
/**
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
* Convert string menjadi camelCase
|
|
132
|
+
* @param {string} input - string yang akan diubah
|
|
133
|
+
* @returns {string} camelCase string
|
|
134
|
+
*/
|
|
135
|
+
toCamelCase = (input) => {
|
|
136
|
+
return input
|
|
137
|
+
.toLowerCase()
|
|
138
|
+
.replace(/[-_\s]+(.)?/g, (_, chr) => (chr ? chr.toUpperCase() : ""));
|
|
134
139
|
};
|
|
135
140
|
/**
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
* Capitalize string (huruf pertama jadi kapital)
|
|
142
|
+
* @param {string} input - string yang akan diubah
|
|
143
|
+
* @returns {string} string dengan huruf pertama kapital
|
|
144
|
+
*/
|
|
145
|
+
capitalize = (input) => {
|
|
146
|
+
if (!input)
|
|
147
|
+
return "";
|
|
141
148
|
return input.charAt(0).toUpperCase() + input.slice(1);
|
|
142
149
|
};
|
|
143
|
-
slugify = (str)=>{
|
|
144
|
-
return str
|
|
150
|
+
slugify = (str) => {
|
|
151
|
+
return str
|
|
152
|
+
.toLowerCase()
|
|
153
|
+
.replace(/\s+/g, "-")
|
|
154
|
+
.replace(/[^\w-]+/g, "");
|
|
145
155
|
};
|
|
146
|
-
deepClone = (obj)=>{
|
|
156
|
+
deepClone = (obj) => {
|
|
147
157
|
return JSON.parse(JSON.stringify(obj));
|
|
148
158
|
};
|
|
149
|
-
isEmptyObject = (obj)=>{
|
|
159
|
+
isEmptyObject = (obj) => {
|
|
150
160
|
return Object.keys(obj).length === 0;
|
|
151
161
|
};
|
|
152
|
-
sleep = (ms)=>{
|
|
153
|
-
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
162
|
+
sleep = (ms) => {
|
|
163
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
154
164
|
};
|
|
155
|
-
retry = async (fn, retries = 3)=>{
|
|
165
|
+
retry = async (fn, retries = 3) => {
|
|
156
166
|
let error;
|
|
157
|
-
for(let i = 0; i < retries; i++){
|
|
167
|
+
for (let i = 0; i < retries; i++) {
|
|
158
168
|
try {
|
|
159
169
|
return await fn();
|
|
160
|
-
}
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
161
172
|
error = err;
|
|
162
173
|
}
|
|
163
174
|
}
|
|
164
175
|
throw error;
|
|
165
176
|
};
|
|
166
177
|
}
|
|
167
|
-
|
|
168
|
-
//# sourceMappingURL=tools.js.map
|
|
178
|
+
exports.default = Tools;
|
package/package.json
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ayiin",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.32",
|
|
4
4
|
"description": "Library Pribadi Yang Gak Ada Isinya",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"require": "./dist/index.cjs",
|
|
8
|
+
"import": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist/**/*"
|
|
14
|
+
],
|
|
5
15
|
"scripts": {
|
|
6
16
|
"build:cjs": "rollup -c rollup.config.mjs",
|
|
7
|
-
"build:types": "tsc
|
|
17
|
+
"build:types": "tsc",
|
|
8
18
|
"build": "bun run build:cjs && bun run build:types"
|
|
9
19
|
},
|
|
10
20
|
"repository": {
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import Methods from \"./methods/index\";\n\nclass Ayiin {}\n\n// copy instance properties\nObject.assign(Ayiin.prototype, new Methods());\n\ninterface Ayiin extends Methods {}\n\nexport default Ayiin;\n"],"names":["Ayiin","Object","assign","prototype","Methods"],"mappings":";;;AASA,MAAA,CAAA,cAAA,CAAA,OAAA,EAAA,SAAA,EAAA;;;AAAA,QAAA,OAAA,QAAA;;;AAToB,MAAA,MAAA,iBAAA,wBAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,CAAA;;;;;;AAEpB,MAAMA,KAAAA,CAAAA;AAAO;AAEb;AACAC,MAAAA,CAAOC,MAAM,CAACF,KAAAA,CAAMG,SAAS,EAAE,IAAIC,MAAAA,CAAAA,OAAO,EAAA,CAAA;MAI1C,QAAA,GAAeJ,KAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypt.js","sources":["../../src/methods/crypt.ts"],"sourcesContent":["import crypto from \"crypto\";\n\nclass Crypt {\n /**\n * Performs Base encryption and decryption.\n * @param {string | Buffer} input - The input data to be encrypted or decrypted.\n * @param {string} key - The encryption/decryption key.\n * @returns {Buffer} - The encrypted or decrypted data as a Buffer.\n */\n private baseCrypt = (input: any, key: string) => {\n const inputBuffer = Buffer.from(input, \"ascii\");\n const keyBuffer = Buffer.from(key, \"ascii\");\n const resultBuffer = Buffer.alloc(inputBuffer.length);\n\n for (let i = 0; i < inputBuffer.length; i++) {\n resultBuffer[i] = inputBuffer[i]! ^ keyBuffer[i % keyBuffer.length]!;\n }\n\n return resultBuffer;\n };\n\n /**\n * Encrypts a plaintext message using the given key.\n * @param {string} text - The plaintext message to be encrypted.\n * @param {string} key - The encryption key.\n * @returns {string} - The encrypted data in Hex format.\n */\n encrypt = (\n text: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = this.baseCrypt(text, key);\n return encryptedBuffer.toString(bufferEncoding);\n };\n\n /**\n * Decrypts an encrypted message using the given key.\n * @param {string} encrypted - The encrypted data in Hex format.\n * @param {string} key - The decryption key.\n * @returns {string} - The decrypted plaintext message.\n */\n decrypt = (\n encrypted: string,\n key: string,\n bufferEncoding: BufferEncoding = \"base64\",\n ) => {\n const encryptedBuffer = Buffer.from(encrypted, bufferEncoding);\n const decryptedBuffer = this.baseCrypt(encryptedBuffer, key);\n return decryptedBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts a Hex string to its corresponding ASCII representation.\n * @param {string} hexString - The Hex string to be converted.\n * @returns {string} - The ASCII representation of the Hex string.\n */\n hexToAscii = (hexString: string) => {\n const hexBuffer = Buffer.from(hexString, \"hex\");\n return hexBuffer.toString(\"ascii\");\n };\n\n /**\n * Converts an ASCII string to its corresponding Hex representation.\n * @param {string} asciiString - The ASCII string to be converted.\n * @returns {string} - The Hex representation of the ASCII string.\n */\n asciiToHex = (asciiString: string) => {\n const asciiBuffer = Buffer.from(asciiString, \"ascii\");\n return asciiBuffer.toString(\"hex\");\n };\n\n md5 = (data: string, encoding: BufferEncoding) => {\n if (!encoding) encoding = \"hex\";\n let hasho = crypto.createHash(\"md5\").update(data).digest(encoding);\n return hasho;\n };\n}\n\nexport default Crypt;\n"],"names":["Crypt","baseCrypt","input","key","inputBuffer","Buffer","from","keyBuffer","resultBuffer","alloc","length","i","encrypt","text","bufferEncoding","encryptedBuffer","toString","decrypt","encrypted","decryptedBuffer","hexToAscii","hexString","hexBuffer","asciiToHex","asciiString","asciiBuffer","md5","data","encoding","hasho","crypto","createHash","update","digest"],"mappings":";;;AA+EA,MAAA,CAAA,cAAA,CAAA,OAAA,EAAA,SAAA,EAAA;;;AAAA,QAAA,OAAA,QAAA;;;AA/EmB,MAAA,OAAA,iBAAA,wBAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAAA;;;;;;AAEnB,MAAMA,KAAAA,CAAAA;AACJ;;;;;MAMQC,SAAAA,GAAY,CAACC,KAAAA,EAAYC,GAAAA,GAAAA;AAC/B,QAAA,MAAMC,WAAAA,GAAcC,MAAAA,CAAOC,IAAI,CAACJ,KAAAA,EAAO,OAAA,CAAA;AACvC,QAAA,MAAMK,SAAAA,GAAYF,MAAAA,CAAOC,IAAI,CAACH,GAAAA,EAAK,OAAA,CAAA;AACnC,QAAA,MAAMK,YAAAA,GAAeH,MAAAA,CAAOI,KAAK,CAACL,YAAYM,MAAM,CAAA;AAEpD,QAAA,IAAK,IAAIC,CAAAA,GAAI,CAAA,EAAGA,IAAIP,WAAAA,CAAYM,MAAM,EAAEC,CAAAA,EAAAA,CAAK;AAC3CH,YAAAA,YAAY,CAACG,CAAAA,CAAE,GAAGP,WAAW,CAACO,CAAAA,CAAE,GAAIJ,SAAS,CAACI,CAAAA,GAAIJ,SAAAA,CAAUG,MAAM,CAAC;AACrE,QAAA;QAEA,OAAOF,YAAAA;IACT,CAAA;AAEA;;;;;AAKC,MACDI,OAAAA,GAAU,CACRC,IAAAA,EACAV,GAAAA,EACAW,iBAAiC,QAAQ,GAAA;AAEzC,QAAA,MAAMC,eAAAA,GAAkB,IAAI,CAACd,SAAS,CAACY,IAAAA,EAAMV,GAAAA,CAAAA;QAC7C,OAAOY,eAAAA,CAAgBC,QAAQ,CAACF,cAAAA,CAAAA;IAClC,CAAA;AAEA;;;;;AAKC,MACDG,OAAAA,GAAU,CACRC,SAAAA,EACAf,GAAAA,EACAW,iBAAiC,QAAQ,GAAA;AAEzC,QAAA,MAAMC,eAAAA,GAAkBV,MAAAA,CAAOC,IAAI,CAACY,SAAAA,EAAWJ,cAAAA,CAAAA;AAC/C,QAAA,MAAMK,eAAAA,GAAkB,IAAI,CAAClB,SAAS,CAACc,eAAAA,EAAiBZ,GAAAA,CAAAA;QACxD,OAAOgB,eAAAA,CAAgBH,QAAQ,CAAC,OAAA,CAAA;IAClC,CAAA;AAEA;;;;AAIC,MACDI,aAAa,CAACC,SAAAA,GAAAA;AACZ,QAAA,MAAMC,SAAAA,GAAYjB,MAAAA,CAAOC,IAAI,CAACe,SAAAA,EAAW,KAAA,CAAA;QACzC,OAAOC,SAAAA,CAAUN,QAAQ,CAAC,OAAA,CAAA;IAC5B,CAAA;AAEA;;;;AAIC,MACDO,aAAa,CAACC,WAAAA,GAAAA;AACZ,QAAA,MAAMC,WAAAA,GAAcpB,MAAAA,CAAOC,IAAI,CAACkB,WAAAA,EAAa,OAAA,CAAA;QAC7C,OAAOC,WAAAA,CAAYT,QAAQ,CAAC,KAAA,CAAA;IAC9B,CAAA;AAEAU,IAAAA,GAAAA,GAAM,CAACC,IAAAA,EAAcC,QAAAA,GAAAA;QACnB,IAAI,CAACA,UAAUA,QAAAA,GAAW,KAAA;QAC1B,IAAIC,KAAAA,GAAQC,OAAAA,CAAAA,OAAM,CAACC,UAAU,CAAC,OAAOC,MAAM,CAACL,IAAAA,CAAAA,CAAMM,MAAM,CAACL,QAAAA,CAAAA;QACzD,OAAOC,KAAAA;IACT,CAAA;AACF;MAEA,QAAA,GAAe7B,KAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/methods/index.ts"],"sourcesContent":["import Crypt from \"./crypt\";\nimport Tools from \"./tools\";\nimport ResponseApi from \"./response\";\n\nclass Methods {}\n\n// copy instance properties\nObject.assign(Methods.prototype, new Tools());\nObject.assign(Methods.prototype, new Crypt());\nObject.assign(Methods.prototype, new ResponseApi());\n\ninterface Methods extends Crypt, Tools, ResponseApi {}\n\nexport default Methods;\n"],"names":["Methods","Object","assign","prototype","Tools","Crypt","ResponseApi"],"mappings":";;;AAaA,MAAA,CAAA,cAAA,CAAA,OAAA,EAAA,SAAA,EAAA;;;AAAA,QAAA,OAAA,QAAA;;;AAbkB,MAAA,MAAA,iBAAA,wBAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA;AACA,MAAA,MAAA,iBAAA,wBAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA;AACM,MAAA,SAAA,iBAAA,wBAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA;;;;;;AAExB,MAAMA,OAAAA,CAAAA;AAAS;AAEf;AACAC,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIC,MAAAA,CAAAA,OAAK,EAAA,CAAA;AAC1CH,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIE,MAAAA,CAAAA,OAAK,EAAA,CAAA;AAC1CJ,MAAAA,CAAOC,MAAM,CAACF,OAAAA,CAAQG,SAAS,EAAE,IAAIG,SAAAA,CAAAA,OAAW,EAAA,CAAA;MAIhD,QAAA,GAAeN,OAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sources":["../../src/methods/response.ts"],"sourcesContent":["class ResponseApi {\n success = ({\n caption,\n data,\n code,\n }: {\n caption: string;\n data: any;\n code?: number | string;\n }) => {\n code = code ? Number(String(code) + \"7400\") : 2007400;\n return {\n responseCode: code,\n responseSuccess: true,\n responseMessage: `[Success] - ${caption}`,\n responseData: data,\n };\n };\n\n badRequest = ({\n caption,\n title,\n data,\n }: {\n caption: string;\n title?: string;\n data?: any;\n }) => {\n return {\n responseCode: 4007400,\n responseSuccess: false,\n responseMessage: `[${title ? title : \"Bad Request\"}] - ${caption}`,\n responseData: data,\n };\n };\n\n invalidFields = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4007401,\n responseSuccess: false,\n responseMessage: `[Invalid Fields] - ${caption}`,\n responseData: data,\n };\n };\n\n notFound = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4047400,\n responseSuccess: false,\n responseMessage: `[Not Found] - ${caption}`,\n responseData: data,\n };\n };\n\n unauthorized = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 4017400,\n responseSuccess: false,\n responseMessage: `[Unauthorized] - ${caption}`,\n responseData: data,\n };\n };\n\n internalServer = ({ caption, data }: { caption: string; data?: any }) => {\n return {\n responseCode: 5007400,\n responseSuccess: false,\n responseMessage: `[Internal Server Error] - ${caption}`,\n responseData: data,\n };\n };\n}\n\nexport default ResponseApi;\n"],"names":["ResponseApi","success","caption","data","code","Number","String","responseCode","responseSuccess","responseMessage","responseData","badRequest","title","invalidFields","notFound","unauthorized","internalServer"],"mappings":";;;AAyEA,MAAA,CAAA,cAAA,CAAA,OAAA,EAAA,SAAA,EAAA;;;AAAA,QAAA,OAAA,QAAA;;;AAzEA,MAAMA,WAAAA,CAAAA;AACJC,IAAAA,OAAAA,GAAU,CAAC,EACTC,OAAO,EACPC,IAAI,EACJC,IAAI,EAKL,GAAA;AACCA,QAAAA,IAAAA,GAAOA,IAAAA,GAAOC,MAAAA,CAAOC,MAAAA,CAAOF,IAAAA,CAAAA,GAAQ,MAAA,CAAA,GAAU,OAAA;QAC9C,OAAO;YACLG,YAAAA,EAAcH,IAAAA;YACdI,eAAAA,EAAiB,IAAA;YACjBC,eAAAA,EAAiB,CAAC,YAAY,EAAEP,OAAAA,CAAAA,CAAS;YACzCQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAQ,IAAAA,UAAAA,GAAa,CAAC,EACZT,OAAO,EACPU,KAAK,EACLT,IAAI,EAKL,GAAA;QACC,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,CAAC,EAAEG,KAAAA,GAAQA,QAAQ,aAAA,CAAc,IAAI,EAAEV,OAAAA,CAAAA,CAAS;YAClEQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAU,IAAAA,aAAAA,GAAgB,CAAC,EAAEX,OAAO,EAAEC,IAAI,EAAmC,GAAA;QACjE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,mBAAmB,EAAEP,OAAAA,CAAAA,CAAS;YAChDQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAW,IAAAA,QAAAA,GAAW,CAAC,EAAEZ,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAC5D,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,cAAc,EAAEP,OAAAA,CAAAA,CAAS;YAC3CQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAY,IAAAA,YAAAA,GAAe,CAAC,EAAEb,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAChE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,iBAAiB,EAAEP,OAAAA,CAAAA,CAAS;YAC9CQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AAEAa,IAAAA,cAAAA,GAAiB,CAAC,EAAEd,OAAO,EAAEC,IAAI,EAAmC,GAAA;QAClE,OAAO;YACLI,YAAAA,EAAc,OAAA;YACdC,eAAAA,EAAiB,KAAA;YACjBC,eAAAA,EAAiB,CAAC,0BAA0B,EAAEP,OAAAA,CAAAA,CAAS;YACvDQ,YAAAA,EAAcP;AAChB,SAAA;IACF,CAAA;AACF;MAEA,QAAA,GAAeH,WAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sources":["../../src/methods/tools.ts"],"sourcesContent":["class Tools {\n /**\n * Format money ke string sesuai locale\n * @memberof Tools\n * @param {number | string} amount - jumlah uang\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @param {Intl.NumberFormatOptions} options - default currency IDR\n * @returns {string} string\n */\n formatMoney = (\n amount: number | string,\n locales: Intl.LocalesArgument = \"id-ID\",\n options: Intl.NumberFormatOptions = {\n style: \"currency\",\n currency: \"IDR\",\n minimumFractionDigits: 0,\n },\n ) => {\n return new Intl.NumberFormat(locales, options).format(Number(amount));\n };\n\n /**\n * Generate unique ID dengan pilihan tipe\n * @param {\"number\"|\"string\"|\"mixed\"} type - tipe ID (angka, string, atau campuran)\n * @param {number} length - panjang ID (default 8)\n * @returns {string} ID unik acak\n */\n uniqueId = ({\n type = \"mixed\",\n length = 8,\n prefix,\n }: {\n type?: \"number\" | \"string\" | \"mixed\";\n length?: number | string;\n prefix?: string;\n }): string => {\n let chars: string;\n\n switch (type) {\n case \"number\":\n chars = \"0123456789\";\n break;\n case \"string\":\n chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n break;\n default:\n chars =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n }\n\n let id = \"\";\n for (let i = 0; i < Number(length); i++) {\n id += chars[Math.floor(Math.random() * chars.length)];\n }\n\n return prefix ? prefix + id : id;\n };\n\n /**\n * Generate UUID v4 sederhana\n * @returns {string}\n */\n randomUuid = (): string => {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * Pick a random from array\n * @param {T[]} array\n * @memberof Tools\n * @returns {T} item acak dari array\n */\n randomItem = <T>(array: T[]): T | undefined => {\n return array[Math.floor(Math.random() * array.length)];\n };\n\n /**\n * Ambil beberapa item acak unik dari array\n * @param {T[]} array\n * @param {number} count - jumlah item\n * @returns {T[]} array item acak unik dari array\n */\n randomMany = <T>(array: T[], count: number | string): T[] => {\n const copy = [...array];\n for (let i = copy.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [copy[i]!, copy[j]!] = [copy[j]!, copy[i]!];\n }\n return copy.slice(0, Number(count));\n };\n\n /**\n * Validasi apakah string adalah email\n * @param {string} str\n * @returns {boolean} true jika string adalah email, false jika bukan\n */\n isEmail = (str: string): boolean => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(str);\n\n /**\n * Validasi apakah string adalah URL\n * @param {string} str\n * @returns {boolean} true jika string adalah URL, false jika bukan\n */\n isUrl = (str: string): boolean => {\n try {\n new URL(str);\n return true;\n } catch {\n return false;\n }\n };\n\n /**\n * Format tanggal ke string sesuai locale\n * @param {Date} date\n * @param {Intl.LocalesArgument} locales - default \"id-ID\"\n * @returns {string} string\n */\n formatDate = (date: Date, locales: Intl.LocalesArgument = \"id-ID\"): string =>\n new Intl.DateTimeFormat(locales, {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(date);\n\n /**\n * Hitung waktu relatif (misalnya \"5 menit lalu\")\n * @param {Date} date\n * @returns {string} string\n */\n timeAgo = (date: Date): string => {\n const diff = Date.now() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n if (seconds < 60) return `${seconds} detik lalu`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes} menit lalu`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} jam lalu`;\n const days = Math.floor(hours / 24);\n return `${days} hari lalu`;\n };\n\n /**\n * Convert string menjadi camelCase\n * @param {string} input - string yang akan diubah\n * @returns {string} camelCase string\n */\n toCamelCase = (input: string): string => {\n return input\n .toLowerCase()\n .replace(/[-_\\s]+(.)?/g, (_, chr) => (chr ? chr.toUpperCase() : \"\"));\n };\n\n /**\n * Capitalize string (huruf pertama jadi kapital)\n * @param {string} input - string yang akan diubah\n * @returns {string} string dengan huruf pertama kapital\n */\n capitalize = (input: string): string => {\n if (!input) return \"\";\n return input.charAt(0).toUpperCase() + input.slice(1);\n };\n\n slugify = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^\\w-]+/g, \"\");\n };\n\n deepClone = <T>(obj: T): T => {\n return JSON.parse(JSON.stringify(obj));\n };\n\n isEmptyObject = (obj: object): boolean => {\n return Object.keys(obj).length === 0;\n };\n\n sleep = (ms: number): Promise<void> => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n retry = async <T>(fn: () => Promise<T>, retries = 3): Promise<T> => {\n let error;\n for (let i = 0; i < retries; i++) {\n try {\n return await fn();\n } catch (err) {\n error = err;\n }\n }\n throw error;\n };\n}\n\nexport default Tools;\n"],"names":["Tools","formatMoney","amount","locales","options","style","currency","minimumFractionDigits","Intl","NumberFormat","format","Number","uniqueId","type","length","prefix","chars","id","i","Math","floor","random","randomUuid","replace","c","r","v","toString","randomItem","array","randomMany","count","copy","j","slice","isEmail","str","test","isUrl","URL","formatDate","date","DateTimeFormat","year","month","day","hour","minute","timeAgo","diff","Date","now","getTime","seconds","minutes","hours","days","toCamelCase","input","toLowerCase","_","chr","toUpperCase","capitalize","charAt","slugify","deepClone","obj","JSON","parse","stringify","isEmptyObject","Object","keys","sleep","ms","Promise","resolve","setTimeout","retry","fn","retries","error","err"],"mappings":"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"}
|