@ellipticltd/aml-utils 0.16.25 → 0.16.27
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/.circleci/config.yml +87 -0
- package/.claude/settings.local.json +7 -0
- package/.eslintrc +45 -0
- package/.huskyrc +5 -0
- package/.mocharc.json +3 -0
- package/.nvmrc +1 -0
- package/.nycrc.json +11 -0
- package/.releaserc.json +18 -0
- package/.snyk +12 -0
- package/README.md +43 -11
- package/codecov.yml +29 -0
- package/commitlint.config.js +1 -0
- package/dist/errors/errors.js +42 -0
- package/dist/errors/errors.spec.d.ts +1 -0
- package/dist/errors/errors.spec.js +23 -0
- package/dist/file-parser/__tests/file-parser.spec.d.ts +1 -0
- package/dist/file-parser/__tests/file-parser.spec.js +109 -0
- package/dist/file-parser/__tests/parse-row.spec.d.ts +1 -0
- package/dist/file-parser/__tests/parse-row.spec.js +29 -0
- package/dist/file-parser/__tests/sanitize-rows.spec.d.ts +1 -0
- package/dist/file-parser/__tests/sanitize-rows.spec.js +78 -0
- package/{lib → dist}/file-parser/errors.js +1 -1
- package/{lib → dist}/file-parser/file-parser.d.ts +4 -2
- package/dist/file-parser/file-parser.js +55 -0
- package/{lib → dist}/file-parser/parse-row.js +1 -2
- package/{lib/file-parser/sanitizeRows.d.ts → dist/file-parser/sanitzeRows.d.ts} +1 -3
- package/dist/file-parser/sanitzeRows.js +18 -0
- package/dist/formatting/formatting.js +17 -0
- package/dist/formatting/formatting.spec.d.ts +1 -0
- package/dist/formatting/formatting.spec.js +37 -0
- package/{lib → dist}/index.d.ts +1 -1
- package/dist/index.js +22 -0
- package/dist/middleware/middleware.js +22 -0
- package/dist/orm-helpers/ormHelpers.js +17 -0
- package/dist/orm-helpers/ormHelpers.spec.d.ts +1 -0
- package/dist/orm-helpers/ormHelpers.spec.js +38 -0
- package/{lib → dist}/structured-file-parser/errors.js +0 -1
- package/{lib → dist}/structured-file-parser/parse-row.js +1 -2
- package/{lib → dist}/structured-file-parser/sanitize-rows.js +4 -3
- package/{lib → dist}/structured-file-parser/structured-file-parser.d.ts +2 -2
- package/dist/structured-file-parser/structured-file-parser.js +98 -0
- package/{lib → dist}/types/types.d.ts +6 -0
- package/dist/types/types.js +203 -0
- package/{lib → dist}/validations/validations.d.ts +110 -157
- package/dist/validations/validations.js +470 -0
- package/dist/validations/validations.spec.d.ts +1 -0
- package/dist/validations/validations.spec.js +463 -0
- package/lib/errors/errors.js +30 -19
- package/lib/errors/errors.spec.js +37 -0
- package/lib/file-parser/__tests/file-parser.spec.js +107 -0
- package/lib/file-parser/__tests/parse-row.spec.js +35 -0
- package/lib/file-parser/__tests/sanitize-rows.spec.js +88 -0
- package/lib/file-parser/errors.ts +7 -0
- package/lib/file-parser/file-parser.ts +84 -0
- package/lib/file-parser/parse-row.ts +52 -0
- package/lib/file-parser/sanitzeRows.ts +32 -0
- package/lib/formatting/formatting.js +12 -11
- package/lib/formatting/formatting.spec.js +45 -0
- package/lib/index.ts +19 -0
- package/lib/middleware/middleware.js +17 -14
- package/lib/orm-helpers/ormHelpers.js +13 -12
- package/lib/orm-helpers/ormHelpers.spec.js +41 -0
- package/lib/structured-file-parser/errors.ts +25 -0
- package/lib/structured-file-parser/parse-row.ts +52 -0
- package/lib/structured-file-parser/sanitize-rows.ts +24 -0
- package/lib/structured-file-parser/structured-file-parser.ts +155 -0
- package/lib/types/types.js +203 -191
- package/lib/validations/validations.js +461 -661
- package/lib/validations/validations.spec.js +603 -0
- package/package.json +61 -8
- package/tsconfig.json +26 -0
- package/lib/errors/errors.js.map +0 -1
- package/lib/file-parser/errors.js.map +0 -1
- package/lib/file-parser/file-parser.js +0 -59
- package/lib/file-parser/file-parser.js.map +0 -1
- package/lib/file-parser/parse-row.js.map +0 -1
- package/lib/file-parser/sanitizeRows.js +0 -15
- package/lib/file-parser/sanitizeRows.js.map +0 -1
- package/lib/formatting/formatting.js.map +0 -1
- package/lib/index.js +0 -21
- package/lib/index.js.map +0 -1
- package/lib/middleware/middleware.js.map +0 -1
- package/lib/orm-helpers/ormHelpers.js.map +0 -1
- package/lib/structured-file-parser/errors.js.map +0 -1
- package/lib/structured-file-parser/parse-row.js.map +0 -1
- package/lib/structured-file-parser/sanitize-rows.js.map +0 -1
- package/lib/structured-file-parser/structured-file-parser.js +0 -95
- package/lib/structured-file-parser/structured-file-parser.js.map +0 -1
- package/lib/types/types.js.map +0 -1
- package/lib/validations/validations.js.map +0 -1
- /package/{lib → dist}/errors/errors.d.ts +0 -0
- /package/{lib → dist}/file-parser/errors.d.ts +0 -0
- /package/{lib → dist}/file-parser/parse-row.d.ts +0 -0
- /package/{lib → dist}/formatting/formatting.d.ts +0 -0
- /package/{lib → dist}/middleware/middleware.d.ts +0 -0
- /package/{lib → dist}/orm-helpers/ormHelpers.d.ts +0 -0
- /package/{lib → dist}/structured-file-parser/errors.d.ts +0 -0
- /package/{lib → dist}/structured-file-parser/parse-row.d.ts +0 -0
- /package/{lib → dist}/structured-file-parser/sanitize-rows.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,16 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ellipticltd/aml-utils",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.27",
|
|
4
|
+
"description": "Utilities, helpers, validations, type-checking, etc",
|
|
5
|
+
"engines": {
|
|
6
|
+
"node": "18.19.0",
|
|
7
|
+
"npm": "10.0.0"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+ssh://git@bitbucket.org/elliptic/aml-utils.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://bitbucket.org/elliptic/aml-utils#readme",
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"build:dev": "tsc --watch",
|
|
18
|
+
"test:unit": "ts-mocha --reporter spec \"lib/**/*.spec.js\" --watch-extensions js,ts",
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"lint": "./node_modules/.bin/eslint --color 'lib/**/*.{js,ts}' 'test/**/*.js' ",
|
|
21
|
+
"test": "nyc npm run test:unit && nyc report --reporter=html",
|
|
22
|
+
"coverage": "nyc npm run test:unit && nyc report --reporter=lcov --reporter=text-lcov | codecov --pipe",
|
|
23
|
+
"prepare": "npm run snyk-protect",
|
|
24
|
+
"snyk-protect": "snyk-protect"
|
|
25
|
+
},
|
|
26
|
+
"author": "Adam Joyce <adam@ellipitc.co>",
|
|
27
|
+
"license": "MIT",
|
|
4
28
|
"dependencies": {
|
|
5
|
-
"@
|
|
29
|
+
"@snyk/protect": "latest",
|
|
30
|
+
"bitcore-lib": "^8.22.2",
|
|
6
31
|
"create-error": "0.3.1",
|
|
7
|
-
"
|
|
32
|
+
"eip55": "^2.1.1",
|
|
33
|
+
"lodash": "^4.17.20",
|
|
8
34
|
"multicoin-address-validator": "^0.5.2",
|
|
35
|
+
"stellar-sdk": "4.0.2",
|
|
9
36
|
"type-check": "0.3.2",
|
|
10
|
-
"validator": "10.10.0"
|
|
11
|
-
|
|
12
|
-
|
|
37
|
+
"validator": "10.10.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@commitlint/cli": "^11.0.0",
|
|
41
|
+
"@commitlint/config-angular": "^11.0.0",
|
|
42
|
+
"@commitlint/config-conventional": "^11.0.0",
|
|
43
|
+
"@semantic-release/git": "^9.0.0",
|
|
44
|
+
"@types/chai": "^4.2.14",
|
|
45
|
+
"@types/lodash": "^4.14.164",
|
|
46
|
+
"@types/mocha": "^8.0.3",
|
|
47
|
+
"@typescript-eslint/parser": "^4.6.1",
|
|
48
|
+
"chai": "^4.2.0",
|
|
49
|
+
"codecov": "^3.6.1",
|
|
50
|
+
"eslint": "^7.2.0",
|
|
51
|
+
"eslint-config-airbnb-base": "^14.2.0",
|
|
52
|
+
"eslint-import-resolver-typescript": "^2.3.0",
|
|
53
|
+
"eslint-plugin-chai-friendly": "^0.4.1",
|
|
54
|
+
"eslint-plugin-coffeescript": "^1.0.0",
|
|
55
|
+
"eslint-plugin-import": "^2.18.2",
|
|
56
|
+
"eslint-plugin-jsx-a11y": "^6.4.1",
|
|
57
|
+
"husky": "^4.3.0",
|
|
58
|
+
"mocha": "^8.2.1",
|
|
59
|
+
"mocha-lcov-reporter": "^1.3.0",
|
|
60
|
+
"nyc": "^14.1.1",
|
|
61
|
+
"semantic-release": "^17.2.2",
|
|
62
|
+
"sinon": "^9.2.1",
|
|
63
|
+
"sinon-chai": "^3.5.0",
|
|
64
|
+
"ts-mocha": "^8.0.0",
|
|
65
|
+
"ts-node": "^9.0.0",
|
|
66
|
+
"typescript": "^4.0.5"
|
|
13
67
|
},
|
|
14
|
-
"
|
|
15
|
-
"type": "commonjs"
|
|
68
|
+
"snyk": true
|
|
16
69
|
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es2018",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"lib": ["es2018"],
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"rootDir": "./lib",
|
|
9
|
+
"downlevelIteration": true,
|
|
10
|
+
"strict": true,
|
|
11
|
+
"strictNullChecks": true,
|
|
12
|
+
"strictFunctionTypes": true,
|
|
13
|
+
"strictPropertyInitialization": true,
|
|
14
|
+
"noImplicitThis": true,
|
|
15
|
+
"alwaysStrict": true,
|
|
16
|
+
"allowJs": true,
|
|
17
|
+
"noUnusedLocals": true,
|
|
18
|
+
"noImplicitReturns": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true,
|
|
20
|
+
"moduleResolution": "node",
|
|
21
|
+
"baseUrl": "./",
|
|
22
|
+
"types": ["node", "mocha", "chai"],
|
|
23
|
+
"esModuleInterop": true
|
|
24
|
+
},
|
|
25
|
+
"include": ["lib"]
|
|
26
|
+
}
|
package/lib/errors/errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/errors/errors.js"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEpC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAEtD,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC;IAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;CACtB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE;IACvD,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE;IAC7D,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE;IACzD,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE;IACrD,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE;IAC1D,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE;IACtD,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,EAAE,uBAAuB,EAAE;IACrE,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,oBAAoB,EAAE;IAC/D,MAAM,EAAE,GAAG;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG;IACf,YAAY;IACZ,WAAW;IACX,SAAS;IACT,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,aAAa;CACd,CAAC","sourcesContent":["const create = require('create-error');\n\nconst AppError = create('AppError');\n\nconst RequestError = create(AppError, 'RequestError');\n\nRequestError.toJSON = () => ({\n message: this.message,\n});\n\nconst Forbidden = create(RequestError, 'ForbiddenError', {\n status: 403,\n});\n\nconst Unauthorized = create(RequestError, 'UnauthorizedError', {\n status: 401,\n});\n\nconst BadRequest = create(RequestError, 'BadRequestError', {\n status: 400,\n});\n\nconst NotFound = create(RequestError, 'NotFoundError', {\n status: 404,\n});\n\nconst ConflictError = create(RequestError, 'ConflictError', {\n status: 409,\n});\n\nconst ServerError = create(RequestError, 'ServerError', {\n status: 500,\n});\n\nconst InvalidArguments = create(RequestError, 'InvalidArgumentsError', {\n status: 500,\n});\n\nconst ServerTimeout = create(RequestError, 'ServerTimeoutError', {\n status: 503,\n});\n\nmodule.exports = {\n RequestError,\n ServerError,\n Forbidden,\n Unauthorized,\n BadRequest,\n NotFound,\n ConflictError,\n InvalidArguments,\n ServerTimeout,\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/file-parser/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AALD,4CAKC","sourcesContent":["export class TooManyRowsError extends Error {\n constructor() {\n super('More than configured number of rows imported');\n this.name = 'TooManyRowsError';\n }\n}\n"]}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const parse_row_1 = tslib_1.__importDefault(require("./parse-row"));
|
|
5
|
-
const errors_1 = require("./errors");
|
|
6
|
-
const sanitizeRows_1 = tslib_1.__importDefault(require("./sanitizeRows"));
|
|
7
|
-
function chunk(array, size) {
|
|
8
|
-
if (!array.length) {
|
|
9
|
-
return [];
|
|
10
|
-
}
|
|
11
|
-
const head = array.slice(0, size);
|
|
12
|
-
const tail = array.slice(size);
|
|
13
|
-
return [head, ...chunk(tail, size)];
|
|
14
|
-
}
|
|
15
|
-
function processChunk(parsedRows, dependencies) {
|
|
16
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
17
|
-
const { processRow } = dependencies;
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
setTimeout(() => {
|
|
20
|
-
try {
|
|
21
|
-
const processedRows = parsedRows.map(processRow);
|
|
22
|
-
resolve(processedRows);
|
|
23
|
-
}
|
|
24
|
-
catch (ex) {
|
|
25
|
-
if (ex instanceof Error) {
|
|
26
|
-
reject(ex);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}, 0);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function parseFile(fileContent, maxRows, dependencies) {
|
|
34
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const { processRow } = dependencies;
|
|
36
|
-
if (fileContent === 'invalidFileType') {
|
|
37
|
-
throw Error('Invalid file type');
|
|
38
|
-
}
|
|
39
|
-
const rows = fileContent.split('\n');
|
|
40
|
-
const parsedRows = rows.map(parse_row_1.default);
|
|
41
|
-
const sanitizedRows = (0, sanitizeRows_1.default)(parsedRows, processRow);
|
|
42
|
-
if (sanitizedRows.length > maxRows) {
|
|
43
|
-
throw new errors_1.TooManyRowsError();
|
|
44
|
-
}
|
|
45
|
-
if (sanitizedRows.length === 0) {
|
|
46
|
-
throw new Error('No rows');
|
|
47
|
-
}
|
|
48
|
-
const parsedRowChunks = chunk(sanitizedRows, 30);
|
|
49
|
-
let results = [];
|
|
50
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
51
|
-
for (const currentRowChunk of parsedRowChunks) {
|
|
52
|
-
const chunkResult = yield processChunk(currentRowChunk, dependencies);
|
|
53
|
-
results = results.concat(chunkResult);
|
|
54
|
-
}
|
|
55
|
-
return results;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
exports.default = parseFile;
|
|
59
|
-
//# sourceMappingURL=file-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-parser.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/file-parser/file-parser.ts"],"names":[],"mappings":";;;AAAA,oEAAmC;AACnC,qCAA4C;AAC5C,0EAA+D;AAM/D,SAAS,KAAK,CAAI,KAAU,EAAE,IAAY;IACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAe,YAAY,CAA4B,UAAsB,EAAE,YAA6B;;QAC1G,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAA6B,EAAE,MAA8B,EAAQ,EAAE;YACzF,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI;oBACF,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACjD,OAAO,CAAC,aAAa,CAAC,CAAC;iBACxB;gBAAC,OAAO,EAAE,EAAE;oBACX,IAAI,EAAE,YAAY,KAAK,EAAE;wBACvB,MAAM,CAAC,EAAE,CAAC,CAAC;qBACZ;iBACF;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAED,SAAe,SAAS,CAA4B,WAAmB,EAAE,OAAe,EAAE,YAA6B;;QACrH,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;QAEpC,IAAI,WAAW,KAAK,iBAAiB,EAAE;YACrC,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;SAClC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAQ,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,IAAA,sBAAY,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAE3D,IAAI,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE;YAClC,MAAM,IAAI,yBAAgB,EAAE,CAAC;SAC9B;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;SAC5B;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,GAAQ,EAAE,CAAC;QACtB,gDAAgD;QAChD,KAAK,MAAM,eAAe,IAAI,eAAe,EAAE;YAC7C,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YACtE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACvC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CAAA;AAED,kBAAe,SAAS,CAAC","sourcesContent":["import parseRow from './parse-row';\nimport { TooManyRowsError } from './errors';\nimport sanitizeRows, { ProcessingEntry } from './sanitizeRows';\n\ntype Dependencies<T extends ProcessingEntry> = {\n processRow: (cells: string[]) => T;\n};\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n if (!array.length) {\n return [];\n }\n const head = array.slice(0, size);\n const tail = array.slice(size);\n\n return [head, ...chunk(tail, size)];\n}\n\nasync function processChunk<T extends ProcessingEntry>(parsedRows: string[][], dependencies: Dependencies<T>): Promise<T[]> {\n const { processRow } = dependencies;\n return new Promise((resolve: (value: T[]) => void, reject: (error: Error) => void): void => {\n setTimeout(() => {\n try {\n const processedRows = parsedRows.map(processRow);\n resolve(processedRows);\n } catch (ex) {\n if (ex instanceof Error) {\n reject(ex);\n }\n }\n }, 0);\n });\n}\n\nasync function parseFile<T extends ProcessingEntry>(fileContent: string, maxRows: number, dependencies: Dependencies<T>): Promise<T[]> {\n const { processRow } = dependencies;\n\n if (fileContent === 'invalidFileType') {\n throw Error('Invalid file type');\n }\n\n const rows = fileContent.split('\\n');\n const parsedRows = rows.map(parseRow);\n\n const sanitizedRows = sanitizeRows(parsedRows, processRow);\n\n if (sanitizedRows.length > maxRows) {\n throw new TooManyRowsError();\n }\n\n if (sanitizedRows.length === 0) {\n throw new Error('No rows');\n }\n\n const parsedRowChunks = chunk(sanitizedRows, 30);\n let results: T[] = [];\n // eslint-disable-next-line no-restricted-syntax\n for (const currentRowChunk of parsedRowChunks) {\n const chunkResult = await processChunk(currentRowChunk, dependencies);\n results = results.concat(chunkResult);\n }\n\n return results;\n}\n\nexport default parseFile;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-row.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/file-parser/parse-row.ts"],"names":[],"mappings":";;AAAA,kCAAiC;AAEjC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAY,EAAE;IACzC,MAAM,aAAa,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACnE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACpE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAAC,IAAuB,EAAqB,EAAE;QAC9E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACrE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAY,EAAE;QAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;SACf;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,SAAI,EAAC,aAAa,EAAE,cAAc,EAAE,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAEnH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC","sourcesContent":["import { pipe } from 'lodash/fp';\n\nconst parseRow = (row: string): string[] => {\n const trySplitByTab = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match('\\t')) {\n return line.split('\\t');\n }\n return line;\n };\n\n const trySplitByComa = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(',')) {\n return line.split(',');\n }\n return line;\n };\n\n const trySplitByMultipleSpaces = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(/ {3,}/)) {\n return line.split(/ {3,}/);\n }\n return line;\n };\n\n const trySplitBySpace = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(' ')) {\n return line.split(' ');\n }\n return line;\n };\n\n const trySplitByNothing = (line: string | string[]): string[] => {\n if (typeof line === 'string') {\n return [line];\n }\n return line;\n };\n\n const splitRow = pipe(trySplitByTab, trySplitByComa, trySplitByMultipleSpaces, trySplitBySpace, trySplitByNothing);\n\n const cells = splitRow(row);\n\n return cells.map((c: string) => c.trim());\n};\n\nexport default parseRow;\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const sensicalRowCheck = (cells) => cells.some((cell) => !!cell);
|
|
4
|
-
function sanitizeRows(parsedRows, processRow) {
|
|
5
|
-
const firstSensicalRowIndex = parsedRows.findIndex(sensicalRowCheck);
|
|
6
|
-
const lastSensicalRowIndex = [...parsedRows].reverse().findIndex(sensicalRowCheck);
|
|
7
|
-
const sanitizedRows = parsedRows.splice(firstSensicalRowIndex, parsedRows.length - firstSensicalRowIndex - lastSensicalRowIndex);
|
|
8
|
-
const firstRow = processRow(sanitizedRows[0]);
|
|
9
|
-
if (firstRow.isValid) {
|
|
10
|
-
return sanitizedRows;
|
|
11
|
-
}
|
|
12
|
-
return sanitizedRows.splice(1);
|
|
13
|
-
}
|
|
14
|
-
exports.default = sanitizeRows;
|
|
15
|
-
//# sourceMappingURL=sanitizeRows.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeRows.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/file-parser/sanitizeRows.ts"],"names":[],"mappings":";;AAIA,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5F,SAAS,YAAY,CAA4B,UAAsB,EAAE,UAAgC;IACvG,MAAM,qBAAqB,GAAG,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,oBAAoB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEnF,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE,UAAU,CAAC,MAAM,GAAG,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;IAEjI,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,QAAQ,CAAC,OAAO,EAAE;QACpB,OAAO,aAAa,CAAC;KACtB;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,kBAAe,YAAY,CAAC","sourcesContent":["export type ProcessingEntry = {\n isValid: boolean;\n};\n\nconst sensicalRowCheck = (cells: string[]): boolean => cells.some((cell: string) => !!cell);\n\nfunction sanitizeRows<T extends ProcessingEntry>(parsedRows: string[][], processRow: (row: string[]) => T): string[][] {\n const firstSensicalRowIndex = parsedRows.findIndex(sensicalRowCheck);\n\n const lastSensicalRowIndex = [...parsedRows].reverse().findIndex(sensicalRowCheck);\n\n const sanitizedRows = parsedRows.splice(firstSensicalRowIndex, parsedRows.length - firstSensicalRowIndex - lastSensicalRowIndex);\n\n const firstRow = processRow(sanitizedRows[0]);\n\n if (firstRow.isValid) {\n return sanitizedRows;\n }\n return sanitizedRows.splice(1);\n}\n\nexport default sanitizeRows;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/formatting/formatting.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACjC,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAClD,cAAc,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC1D;SAAM;QACL,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC;KAC1B;IACD,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,MAAM,cAAc,EAAE,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,CAAC,OAAO,GAAG;IACf,YAAY;IACZ,iBAAiB;CAClB,CAAC","sourcesContent":["const _ = require('lodash');\n\nconst rethrowError = (fnName, e) => {\n let formattedError;\n if (_.isPlainObject(e.error) || _.isArray(e.error)) {\n formattedError = `\\n${JSON.stringify(e.error, null, 2)}`;\n } else {\n formattedError = e.error;\n }\n return `${fnName} - ${e.name}: ${e.statusCode} - ${formattedError}`;\n};\n\nconst sqlEscapeWildcard = (str) => str.replace(/_|%|\\\\/g, (x) => `\\\\${x}`);\n\nmodule.exports = {\n rethrowError,\n sqlEscapeWildcard,\n};\n"]}
|
package/lib/index.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ormHelpers = exports.middleware = exports.structuredFileParser = exports.fileParser = exports.formatting = exports.errors = exports.validations = exports.types = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const types_1 = tslib_1.__importDefault(require("./types/types"));
|
|
6
|
-
exports.types = types_1.default;
|
|
7
|
-
const validations_1 = tslib_1.__importDefault(require("./validations/validations"));
|
|
8
|
-
exports.validations = validations_1.default;
|
|
9
|
-
const errors_1 = tslib_1.__importDefault(require("./errors/errors"));
|
|
10
|
-
exports.errors = errors_1.default;
|
|
11
|
-
const formatting_1 = tslib_1.__importDefault(require("./formatting/formatting"));
|
|
12
|
-
exports.formatting = formatting_1.default;
|
|
13
|
-
const middleware_1 = tslib_1.__importDefault(require("./middleware/middleware"));
|
|
14
|
-
exports.middleware = middleware_1.default;
|
|
15
|
-
const ormHelpers_1 = tslib_1.__importDefault(require("./orm-helpers/ormHelpers"));
|
|
16
|
-
exports.ormHelpers = ormHelpers_1.default;
|
|
17
|
-
const file_parser_1 = tslib_1.__importDefault(require("./file-parser/file-parser"));
|
|
18
|
-
exports.fileParser = file_parser_1.default;
|
|
19
|
-
const structured_file_parser_1 = tslib_1.__importDefault(require("./structured-file-parser/structured-file-parser"));
|
|
20
|
-
exports.structuredFileParser = structured_file_parser_1.default;
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/aml-utils/lib/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAkC;AASzB,gBATF,eAAK,CASE;AARd,oFAAoD;AAQpC,sBART,qBAAW,CAQS;AAP3B,qEAAqC;AAOR,iBAPtB,gBAAM,CAOsB;AANnC,iFAAiD;AAMZ,qBAN9B,oBAAU,CAM8B;AAL/C,iFAAiD;AAKkC,qBAL5E,oBAAU,CAK4E;AAJ7F,kFAAkD;AAI6C,qBAJxF,oBAAU,CAIwF;AAHzG,oFAAmD;AAGF,qBAH1C,qBAAU,CAG0C;AAF3D,qHAAmF;AAEtB,+BAFtD,gCAAoB,CAEsD","sourcesContent":["import types from './types/types';\nimport validations from './validations/validations';\nimport errors from './errors/errors';\nimport formatting from './formatting/formatting';\nimport middleware from './middleware/middleware';\nimport ormHelpers from './orm-helpers/ormHelpers';\nimport fileParser from './file-parser/file-parser';\nimport structuredFileParser from './structured-file-parser/structured-file-parser';\n\nexport { types, validations, errors, formatting, fileParser, structuredFileParser, middleware, ormHelpers };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/middleware/middleware.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACxD,IAAI,KAAK,CAAC;IACV,IAAI;QACF,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,EAAE,CAAC;KACf;IAAC,OAAO,MAAM,EAAE;QACf,KAAK,GAAG,MAAM,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAEtC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAExC,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AAE9C,MAAM,CAAC,OAAO,GAAG;IACf,UAAU;IACV,UAAU;IACV,WAAW;IACX,aAAa;CACd,CAAC","sourcesContent":["const T = require('../types/types');\n\nconst ensureType = (type) => (req, res, next, id, name) => {\n let error;\n try {\n T.ensureType(type, id, `Invalid ${name}`);\n return next();\n } catch (error1) {\n error = error1;\n return next(error);\n }\n};\n\nconst ensureUUID = ensureType('UUID');\n\nconst ensureHex32 = ensureType('Hex32');\n\nconst ensureInteger = ensureType('IntString');\n\nmodule.exports = {\n ensureType,\n ensureUUID,\n ensureHex32,\n ensureInteger,\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ormHelpers.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/orm-helpers/ormHelpers.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CACpC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;IAC/B,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,OAAO,KAAK,CAAC;KACd;IACD,OAAO;QACL,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,OAAO,GAAG;IACf,aAAa;CACd,CAAC","sourcesContent":["const _ = require('lodash');\n\nconst includeNested = (orm, models) =>\n _.map(_.toPairs(models), (arg) => {\n const [modelName, inclusion] = arg;\n const include = includeNested(orm, inclusion);\n const model = orm[modelName];\n if (_.isEmpty(include)) {\n return model;\n }\n return {\n model,\n include,\n };\n });\n\nmodule.exports = {\n includeNested,\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/structured-file-parser/errors.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,MAAa,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AALD,4CAKC;AACD,MAAa,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AALD,4CAKC;AACD,MAAa,WAAY,SAAQ,KAAK;IACpC;QACE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AACD,MAAa,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC","sourcesContent":["/* eslint-disable max-classes-per-file */\nexport class InvalidFileError extends Error {\n constructor() {\n super('Invalid file type');\n this.name = 'InvalidFileError';\n }\n}\nexport class TooManyRowsError extends Error {\n constructor() {\n super('More than configured number of rows imported');\n this.name = 'TooManyRowsError';\n }\n}\nexport class NoRowsError extends Error {\n constructor() {\n super('No rows');\n this.name = 'NoRowsError';\n }\n}\nexport class InvalidHeadersError extends Error {\n constructor() {\n super('Invalid or incomplete headers list');\n this.name = 'InvalidHeadersError';\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-row.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/structured-file-parser/parse-row.ts"],"names":[],"mappings":";;AAAA,kCAAiC;AAEjC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAY,EAAE;IACzC,MAAM,aAAa,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACnE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACpE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAAC,IAAuB,EAAqB,EAAE;QAC9E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAqB,EAAE;QACrE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,IAAuB,EAAY,EAAE;QAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;SACf;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,SAAI,EAAC,aAAa,EAAE,cAAc,EAAE,wBAAwB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAEnH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,kBAAe,QAAQ,CAAC","sourcesContent":["import { pipe } from 'lodash/fp';\n\nconst parseRow = (row: string): string[] => {\n const trySplitByTab = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match('\\t')) {\n return line.split('\\t');\n }\n return line;\n };\n\n const trySplitByComa = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(',')) {\n return line.split(',');\n }\n return line;\n };\n\n const trySplitByMultipleSpaces = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(/ {3,}/)) {\n return line.split(/ {3,}/);\n }\n return line;\n };\n\n const trySplitBySpace = (line: string | string[]): string | string[] => {\n if (typeof line === 'string' && line.match(' ')) {\n return line.split(' ');\n }\n return line;\n };\n\n const trySplitByNothing = (line: string | string[]): string[] => {\n if (typeof line === 'string') {\n return [line];\n }\n return line;\n };\n\n const splitRow = pipe(trySplitByTab, trySplitByComa, trySplitByMultipleSpaces, trySplitBySpace, trySplitByNothing);\n\n const cells = splitRow(row);\n\n return cells.map((c: string) => c.trim());\n};\n\nexport default parseRow;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize-rows.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/structured-file-parser/sanitize-rows.ts"],"names":[],"mappings":";;AAAA,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5F,SAAS,YAAY,CAAC,UAAsB;IAC1C,MAAM,qBAAqB,GAAG,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,oBAAoB,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEnF,IAAI,qBAAqB,GAAG,CAAC,EAAE;QAC7B,OAAO,EAAE,CAAC;KACX;IAED,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,UAAU,CAAC,MAAM,GAAG,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;IAEtI,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,kBAAe,YAAY,CAAC","sourcesContent":["const sensicalRowCheck = (cells: string[]): boolean => cells.some((cell: string) => !!cell);\n\nfunction sanitizeRows(parsedRows: string[][]): string[][] {\n const firstSensicalRowIndex = parsedRows.findIndex(sensicalRowCheck);\n\n const lastSensicalRowIndex = [...parsedRows].reverse().findIndex(sensicalRowCheck);\n\n if (firstSensicalRowIndex < 0) {\n return [];\n }\n\n const sanitizedRows = [...parsedRows].splice(firstSensicalRowIndex, parsedRows.length - firstSensicalRowIndex - lastSensicalRowIndex);\n\n return sanitizedRows;\n}\n\nexport default sanitizeRows;\n"]}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isHeaderRowValid = exports.hasHeaderRow = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
/* eslint-disable no-restricted-syntax */
|
|
6
|
-
const parse_row_1 = tslib_1.__importDefault(require("./parse-row"));
|
|
7
|
-
const errors_1 = require("./errors");
|
|
8
|
-
const sanitize_rows_1 = tslib_1.__importDefault(require("./sanitize-rows"));
|
|
9
|
-
function chunk(array, size) {
|
|
10
|
-
if (!array.length) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
const head = array.slice(0, size);
|
|
14
|
-
const tail = array.slice(size);
|
|
15
|
-
return [head, ...chunk(tail, size)];
|
|
16
|
-
}
|
|
17
|
-
function processChunk(parsedRows, dependencies) {
|
|
18
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
19
|
-
const { processRow, headers } = dependencies;
|
|
20
|
-
return new Promise((resolve, reject) => {
|
|
21
|
-
setTimeout(() => {
|
|
22
|
-
try {
|
|
23
|
-
const processedRows = parsedRows.map((row) => processRow(row, headers));
|
|
24
|
-
resolve(processedRows);
|
|
25
|
-
}
|
|
26
|
-
catch (ex) {
|
|
27
|
-
reject(ex);
|
|
28
|
-
}
|
|
29
|
-
}, 0);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
// a row is said to contain headers if two valid header names are present
|
|
34
|
-
const hasHeaderRow = (rows, requiredHeaderNames) => {
|
|
35
|
-
const firstRow = rows[0];
|
|
36
|
-
if (!firstRow) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
const foundIndex = firstRow.findIndex((value) => requiredHeaderNames.includes(value.toLowerCase()));
|
|
40
|
-
if (foundIndex < 0) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
const containsSecondHeader = firstRow
|
|
44
|
-
.filter((_val, i) => i !== foundIndex)
|
|
45
|
-
.some((value) => requiredHeaderNames.includes(value.toLowerCase()));
|
|
46
|
-
return containsSecondHeader;
|
|
47
|
-
};
|
|
48
|
-
exports.hasHeaderRow = hasHeaderRow;
|
|
49
|
-
const isHeaderRowValid = (rows, requiredHeaderNames) => {
|
|
50
|
-
const firstRow = rows[0];
|
|
51
|
-
if (!firstRow) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
return (requiredHeaderNames.every((header) => firstRow.map((value) => value.toLowerCase()).includes(header)) &&
|
|
55
|
-
requiredHeaderNames.length === firstRow.length);
|
|
56
|
-
};
|
|
57
|
-
exports.isHeaderRowValid = isHeaderRowValid;
|
|
58
|
-
function parseFile(fileContent, maxRows, requiredHeaderNames, dependencies) {
|
|
59
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
60
|
-
if (fileContent === 'invalidFileType') {
|
|
61
|
-
throw new errors_1.InvalidFileError();
|
|
62
|
-
}
|
|
63
|
-
const rows = fileContent.split('\n');
|
|
64
|
-
const parsedRows = rows.map(parse_row_1.default);
|
|
65
|
-
const sanitizedRows = (0, sanitize_rows_1.default)(parsedRows);
|
|
66
|
-
if (sanitizedRows.length > maxRows) {
|
|
67
|
-
throw new errors_1.TooManyRowsError();
|
|
68
|
-
}
|
|
69
|
-
if (sanitizedRows.length === 0) {
|
|
70
|
-
throw new errors_1.NoRowsError();
|
|
71
|
-
}
|
|
72
|
-
const containsHeaders = (0, exports.hasHeaderRow)(sanitizedRows, requiredHeaderNames);
|
|
73
|
-
if (containsHeaders && !(0, exports.isHeaderRowValid)(sanitizedRows, requiredHeaderNames)) {
|
|
74
|
-
throw new errors_1.InvalidHeadersError();
|
|
75
|
-
}
|
|
76
|
-
const firstSanitizedRow = sanitizedRows[0];
|
|
77
|
-
if (!firstSanitizedRow) {
|
|
78
|
-
throw new errors_1.NoRowsError();
|
|
79
|
-
}
|
|
80
|
-
const headers = containsHeaders ? firstSanitizedRow.map((value) => value.toLowerCase()) : requiredHeaderNames;
|
|
81
|
-
const dataRows = containsHeaders ? sanitizedRows.splice(1) : sanitizedRows;
|
|
82
|
-
if (dataRows.length === 0) {
|
|
83
|
-
throw new errors_1.NoRowsError();
|
|
84
|
-
}
|
|
85
|
-
const parsedRowChunks = chunk(dataRows, 30);
|
|
86
|
-
let results = [];
|
|
87
|
-
for (const currentRowChunk of parsedRowChunks) {
|
|
88
|
-
const chunkResult = yield processChunk(currentRowChunk, Object.assign(Object.assign({}, dependencies), { headers }));
|
|
89
|
-
results = results.concat(chunkResult);
|
|
90
|
-
}
|
|
91
|
-
return results;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
exports.default = parseFile;
|
|
95
|
-
//# sourceMappingURL=structured-file-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"structured-file-parser.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/structured-file-parser/structured-file-parser.ts"],"names":[],"mappings":";;;;AAAA,yCAAyC;AACzC,oEAAmC;AACnC,qCAAgG;AAChG,4EAA2C;AAe3C,SAAS,KAAK,CAAI,KAAU,EAAE,IAAY;IACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAe,YAAY,CACzB,UAAsB,EACtB,YAAwC;;QAExC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAyC,EAAE,MAA8B,EAAQ,EAAE;YACrG,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI;oBACF,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;oBACxE,OAAO,CAAC,aAAa,CAAC,CAAC;iBACxB;gBAAC,OAAO,EAAE,EAAE;oBACX,MAAM,CAAC,EAAE,CAAC,CAAC;iBACZ;YACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;CAAA;AAED,yEAAyE;AAClE,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAE,mBAA6B,EAAW,EAAE;IACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACpG,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,oBAAoB,GAAG,QAAQ;SAClC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC;SACrC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAbW,QAAA,YAAY,gBAavB;AAEK,MAAM,gBAAgB,GAAG,CAAC,IAAgB,EAAE,mBAA6B,EAAW,EAAE;IAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,KAAK,CAAC;KACd;IACD,OAAO,CACL,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpG,mBAAmB,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAC/C,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B;AAEF,SAAe,SAAS,CACtB,WAAmB,EACnB,OAAe,EACf,mBAA6B,EAC7B,YAA6B;;QAE7B,IAAI,WAAW,KAAK,iBAAiB,EAAE;YACrC,MAAM,IAAI,yBAAgB,EAAE,CAAC;SAC9B;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAQ,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE;YAClC,MAAM,IAAI,yBAAgB,EAAE,CAAC;SAC9B;QAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,MAAM,IAAI,oBAAW,EAAE,CAAC;SACzB;QAED,MAAM,eAAe,GAAG,IAAA,oBAAY,EAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACzE,IAAI,eAAe,IAAI,CAAC,IAAA,wBAAgB,EAAC,aAAa,EAAE,mBAAmB,CAAC,EAAE;YAC5E,MAAM,IAAI,4BAAmB,EAAE,CAAC;SACjC;QAED,MAAM,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,IAAI,oBAAW,EAAE,CAAC;SACzB;QAED,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAE9G,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAE3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,oBAAW,EAAE,CAAC;SACzB;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAQ,EAAE,CAAC;QACtB,KAAK,MAAM,eAAe,IAAI,eAAe,EAAE;YAC7C,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,eAAe,kCACjD,YAAY,KACf,OAAO,IACP,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACvC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CAAA;AAED,kBAAe,SAAS,CAAC","sourcesContent":["/* eslint-disable no-restricted-syntax */\nimport parseRow from './parse-row';\nimport { InvalidFileError, TooManyRowsError, NoRowsError, InvalidHeadersError } from './errors';\nimport sanitizeRows from './sanitize-rows';\n\nexport type ProcessingEntry = {\n isValid: boolean;\n};\n\ntype Dependencies<T extends ProcessingEntry> = {\n processRow: (cells: string[], headers: string[]) => T;\n};\n\ntype CompleteDependencies<T extends ProcessingEntry, U extends string[]> = {\n processRow: (cells: string[], headers: U) => T;\n headers: U;\n};\n\nfunction chunk<T>(array: T[], size: number): T[][] {\n if (!array.length) {\n return [];\n }\n const head = array.slice(0, size);\n const tail = array.slice(size);\n\n return [head, ...chunk(tail, size)];\n}\n\nasync function processChunk<T extends ProcessingEntry, U extends string[]>(\n parsedRows: string[][],\n dependencies: CompleteDependencies<T, U>\n): Promise<T[]> {\n const { processRow, headers } = dependencies;\n return new Promise((resolve: (value: T[] | undefined) => void, reject: (error: Error) => void): void => {\n setTimeout(() => {\n try {\n const processedRows = parsedRows.map((row) => processRow(row, headers));\n resolve(processedRows);\n } catch (ex) {\n reject(ex);\n }\n }, 0);\n });\n}\n\n// a row is said to contain headers if two valid header names are present\nexport const hasHeaderRow = (rows: string[][], requiredHeaderNames: string[]): boolean => {\n const firstRow = rows[0];\n if (!firstRow) {\n return false;\n }\n const foundIndex = firstRow.findIndex((value) => requiredHeaderNames.includes(value.toLowerCase()));\n if (foundIndex < 0) {\n return false;\n }\n const containsSecondHeader = firstRow\n .filter((_val, i) => i !== foundIndex)\n .some((value) => requiredHeaderNames.includes(value.toLowerCase()));\n return containsSecondHeader;\n};\n\nexport const isHeaderRowValid = (rows: string[][], requiredHeaderNames: string[]): boolean => {\n const firstRow = rows[0];\n if (!firstRow) {\n return false;\n }\n return (\n requiredHeaderNames.every((header) => firstRow.map((value) => value.toLowerCase()).includes(header)) &&\n requiredHeaderNames.length === firstRow.length\n );\n};\n\nasync function parseFile<T extends ProcessingEntry>(\n fileContent: string,\n maxRows: number,\n requiredHeaderNames: string[],\n dependencies: Dependencies<T>\n): Promise<T[]> {\n if (fileContent === 'invalidFileType') {\n throw new InvalidFileError();\n }\n\n const rows = fileContent.split('\\n');\n const parsedRows = rows.map(parseRow);\n\n const sanitizedRows = sanitizeRows(parsedRows);\n\n if (sanitizedRows.length > maxRows) {\n throw new TooManyRowsError();\n }\n\n if (sanitizedRows.length === 0) {\n throw new NoRowsError();\n }\n\n const containsHeaders = hasHeaderRow(sanitizedRows, requiredHeaderNames);\n if (containsHeaders && !isHeaderRowValid(sanitizedRows, requiredHeaderNames)) {\n throw new InvalidHeadersError();\n }\n\n const firstSanitizedRow = sanitizedRows[0];\n\n if (!firstSanitizedRow) {\n throw new NoRowsError();\n }\n\n const headers = containsHeaders ? firstSanitizedRow.map((value) => value.toLowerCase()) : requiredHeaderNames;\n\n const dataRows = containsHeaders ? sanitizedRows.splice(1) : sanitizedRows;\n\n if (dataRows.length === 0) {\n throw new NoRowsError();\n }\n\n const parsedRowChunks = chunk(dataRows, 30);\n let results: T[] = [];\n for (const currentRowChunk of parsedRowChunks) {\n const chunkResult = await processChunk(currentRowChunk, {\n ...dependencies,\n headers,\n });\n results = results.concat(chunkResult);\n }\n\n return results;\n}\n\nexport default parseFile;\n"]}
|
package/lib/types/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/types/types.js"],"names":[],"mappings":"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","sourcesContent":["const TC = require('type-check');\n\nconst _ = require('lodash');\n\nconst E = require('../errors/errors');\n\nconst V = require('../validations/validations');\n\nconst customTypes = {\n Integer: {\n typeOf: 'Number',\n validate(x) {\n return x % 1 === 0;\n },\n },\n IntString: {\n typeOf: 'String',\n validate: V.isInt,\n },\n BoolString: {\n typeOf: 'String',\n validate: V.isBoolean,\n },\n Hex32: {\n typeOf: 'String',\n validate(x) {\n return V.isHexadecimal(x) && x.length === 32;\n },\n },\n Email: {\n typeOf: 'String',\n validate: V.isEmail,\n },\n UUID: {\n typeOf: 'String',\n validate: V.isUUID,\n },\n UUIDv4: {\n typeOf: 'String',\n validate(x) {\n return V.isUUID(x, 4);\n },\n },\n JSON: {\n typeOf: 'String',\n validate: V.isJSON,\n },\n Url: {\n typeOf: 'String',\n validate: V.isURL,\n },\n DateString: {\n typeOf: 'String',\n validate: V.isDate,\n },\n NonEmptyArray: {\n typeOf: 'Array',\n validate: V.nonEmpty,\n },\n NonNullString: {\n typeOf: 'String',\n validate: V.nonEmpty,\n },\n CustomerReference: {\n typeOf: 'String',\n validate: V.isCustomerReference,\n },\n CustomerLabelName: {\n typeOf: 'String',\n validate: V.isCustomerLabelName,\n },\n BitcoinAddress: {\n typeOf: 'String',\n validate: V.bitcoin.isAddress,\n },\n EthereumAddress: {\n typeOf: 'String',\n validate: V.ethereum.isAddress,\n },\n EthereumTx: {\n typeOf: 'String',\n validate: V.ethereum.isTxHash,\n },\n EthereumBlockHash: {\n typeOf: 'String',\n validate: V.ethereum.isBlockHash,\n },\n EthereumWeiAmount: {\n typeOf: 'String',\n validate: V.ethereum.isValidWeiAmount,\n },\n EthereumAddressCode: {\n typeOf: 'String',\n validate: V.ethereum.isAddressCode,\n },\n MineId: {\n typeOf: 'String',\n validate(x) {\n return x === 'mine';\n },\n },\n BitcoinTxHash: {\n typeOf: 'String',\n validate: V.bitcoin.isTxHash,\n },\n BitcoinAddressArray: {\n typeOf: 'Array',\n validate(as) {\n return _.every(as, V.bitcoin.isAddress);\n },\n },\n BitcoinTxHashArray: {\n typeOf: 'Array',\n validate(as) {\n return _.every(as, V.bitcoin.isTxHash);\n },\n },\n BitcoinTxHex: {\n typeOf: 'String',\n validate: V.bitcoin.isTxHex,\n },\n BitcoinScriptHex: {\n typeOf: 'String',\n validate: V.bitcoin.isScriptHex,\n },\n BitcoinHDPath: {\n typeOf: 'String',\n validate: V.bitcoin.isHDPath,\n },\n BitcoinPublicKey: {\n typeOf: 'String',\n validate: V.bitcoin.isPublicKey,\n },\n BitcoinXpub: {\n typeOf: 'String',\n validate: V.bitcoin.isHDPublicKey,\n },\n BitcoinTxSignature: {\n typeOf: 'String',\n validate: V.bitcoin.isTxSignature,\n },\n BitcoinBlockHeight: {\n typeOf: 'Number',\n validate: V.bitcoin.isBlockHeight,\n },\n};\n\n// add support for nullable properties\nconst withNullable = Object.keys(customTypes).reduce((acc, type) => {\n acc[type] = customTypes[type];\n const { typeOf, validate } = customTypes[type];\n\n // for every type, add Nullable+type. A nullable string can also be empty\n acc[`Nullable${type}`] = { ...customTypes[type], validate: (x) => x == null || (typeOf === 'String' && x === '') || validate(x) };\n\n return acc;\n}, {});\n\nmodule.exports = {\n parseType(str) {\n return TC.parseType(str);\n },\n parsedTypeCheck(type, obj) {\n return TC.parsedTypeCheck(type, obj, this.opts);\n },\n typeCheck(type, obj) {\n return TC.typeCheck(type, obj, this.opts);\n },\n opts: {\n customTypes: withNullable,\n },\n ensureType(type, obj, msg) {\n return V.ensure(this.typeCheck(type, obj), msg);\n },\n checkArg(obj, prop, type, msg) {\n let message;\n if (msg == null) {\n message = `Invalid ${prop}`;\n } else {\n message = msg;\n }\n this.ensureType(type, obj[prop], message);\n return obj[prop];\n },\n checkArgs(input, types) {\n const inputKeys = {};\n const [typ] = types;\n const fields = typ.of;\n let numInputKeys = 0;\n let numKeys;\n\n Object.keys(input).forEach((k) => {\n inputKeys[k] = true;\n numInputKeys += 1;\n });\n\n numKeys = 0;\n\n Object.keys(fields).forEach((key) => {\n const objTypes = fields[key];\n V.ensure(this.parsedTypeCheck(objTypes, input[key]), `Invalid ${key}`);\n if (inputKeys[key]) {\n numKeys += 1;\n }\n });\n\n if (!(typ.subset || numInputKeys === numKeys)) {\n throw new E.BadRequest('invalid extra arguments are present');\n }\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../../../libs/aml-utils/lib/validations/validations.js"],"names":[],"mappings":"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","sourcesContent":["/* eslint no-underscore-dangle: 0 */\nconst V = require('validator');\nconst _ = require('lodash');\n\n// Importing directly from dist to make sure we import the browser-friendly version of the library\nconst addressValidator = require('multicoin-address-validator/dist/wallet-address-validator');\nconst web3 = require('web3-utils');\nconst stellarBase = require('@stellar/stellar-base');\nconst E = require('../errors/errors');\n\nconst validations = {\n _validate(Err, pred, x, msg) {\n if (pred(x)) {\n return x;\n }\n throw new Err(msg);\n },\n _validateArg(pred, x, msg) {\n return this._validate(E.InvalidArguments, pred, x, msg);\n },\n _tryCheck(fn, arg) {\n try {\n fn(arg);\n return true;\n } catch (error) {\n return false;\n }\n },\n\n exists(x) {\n return x != null;\n },\n nonEmpty(x) {\n return (x != null ? x.length : undefined) > 0;\n },\n isNonEmptyString(x) {\n return _.isString(x) && (x != null ? x.length : undefined) > 0;\n },\n isSafeString(str) {\n // eslint-disable-next-line no-useless-escape, prefer-regex-literals\n return RegExp(/^(\\p{L}|[0-9]|-|=|!|\\.|:|\\s|@|\\+|_|,|\\$|£|&)+$/, 'u').test(str);\n },\n isAssetSafeString(str) {\n // eslint-disable-next-line no-useless-escape, prefer-regex-literals\n return RegExp(/^(\\p{L}|[0-9]|-|=|!|\\.|:|\\s|@|\\+|_|,|\\$|£|&|\\/)+$/, 'u').test(str);\n },\n ensureShortEnough(limit, x) {\n const l = x != null ? x.length : undefined;\n if (l <= limit) {\n return true;\n }\n throw new E.BadRequest(`Max query size exceeded: ${l} / ${limit}`);\n },\n ensure(crit, msg) {\n if (crit) {\n return true;\n }\n throw new E.BadRequest(msg);\n },\n argExists(x, msg) {\n return this._validateArg(this.exists, x, msg);\n },\n\n check: {\n matches(required, given, msg) {\n const newGiven = _.uniq(given);\n const crit = _.intersection(newGiven, required).length === given.length;\n if (crit) {\n return true;\n }\n throw new E.BadRequest(msg);\n },\n wasFound(type) {\n return (item) => {\n if (item == null) {\n throw new E.NotFound(`Unknown ${type}`);\n } else {\n return item;\n }\n };\n },\n wasCreated(msg) {\n return (arr) => {\n if (!arr[1]) {\n throw new E.BadRequest(msg);\n } else {\n return arr;\n }\n };\n },\n isTrue(crit, msg) {\n if (crit) {\n return true;\n }\n throw new E.BadRequest(msg);\n },\n isFalse(crit, msg) {\n if (!crit) {\n return true;\n }\n throw new E.BadRequest(msg);\n },\n },\n\n isCustomerReference(x) {\n return _.isString(x) && (x != null ? x.length : undefined) > 0 && (x != null ? x.length : undefined) <= 100;\n },\n isCustomerLabelName(x) {\n return _.isString(x) && (x != null ? x.length : undefined) > 0 && (x != null ? x.length : undefined) <= 50;\n },\n binanceChain: {\n isAddress(str) {\n return /^(bnb)([a-z0-9]{39})$/.test(str);\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n bitcoin: {\n isAddress(str, asset) {\n if (asset === 'lightning') {\n return validations.isNonEmptyString(str);\n }\n return typeof str === 'string' && addressValidator.validate(str.trim(), 'btc', 'prod');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n bitcoinCash: {\n isAddress(str) {\n return /^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$|^(bitcoincash:)?[q|p][a-z0-9]{41}$|^(BITCOINCASH:)?[Q|P][A-Z0-9]{41}$/.test(str);\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n ethereum: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isBlockHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n isAddressCode(str) {\n return web3.isHexStrict(str);\n },\n isValidWeiAmount(str) {\n try {\n web3.fromWei(str);\n return true;\n } catch (e) {\n return false;\n }\n },\n },\n horizen: {\n isAddress(str) {\n return addressValidator.validate(str, 'zen');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n litecoin: {\n isAddress(str) {\n return /^[3LM][a-km-zA-HJ-NP-Z1-9]{24,33}$|^ltc1[ac-hj-np-z02-9]{6,86}$|^LTC1[AC-HJ-NP-Z02-9]{6,86}$|^ltcmweb[a-zA-Z0-9]{114}$/.test(\n str\n );\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n ripple: {\n isAddress(str) {\n return addressValidator.validate(str, 'xrp');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n stellar: {\n isAddress(str) {\n return stellarBase.StrKey.isValidEd25519PublicKey(str);\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n zcash: {\n isAddress(str) {\n return addressValidator.validate(str, 'zec');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n zilliqa: {\n isAddress(str) {\n // https://pub.dev/documentation/laksadart/latest/laksadart/isBech32.html\n return !!str.match(/^zil1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{38}$/);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n algorand: {\n isAddress(str) {\n return addressValidator.validate(str, 'algo');\n },\n isTxHash(str) {\n return str.length === 52;\n },\n },\n tezos: {\n isAddress(str) {\n return str[0] !== 'o' && addressValidator.validate(str, 'xtz');\n },\n isTxHash(str) {\n return str.length === 51;\n },\n },\n polkadot: {\n isAddress(str) {\n return addressValidator.validate(str, 'dot');\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n cardano: {\n isAddress(str) {\n return addressValidator.validate(str, 'ada');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n cryptocom: {\n isAddress(str) {\n return addressValidator.validate(str, 'cro');\n },\n isTxHash(str) {\n if (!V.isHexadecimal(str)) {\n return false;\n }\n return str.length === 64;\n },\n },\n near: {\n isAddress(str) {\n // https://nomicon.io/DataStructures/Account\n return /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/.test(str);\n },\n isTxHash(str) {\n return str.length === 44 || str.length === 43;\n },\n },\n doge: {\n isAddress(str) {\n return /^[a-zA-Z\\d]{34}$/.test(str);\n },\n isTxHash(str) {\n return str.length === 64;\n },\n },\n cosmos: {\n isAddress(str) {\n return /^cosmos{1}[a-zA-Z\\d]{39}$/.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n solana: {\n isAddress(str) {\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(str);\n },\n isTxHash(str) {\n return /^[1-9A-HJ-NP-Za-km-z]{77,88}$/.test(str);\n },\n },\n binanceSmartChain: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n polygon: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n filecoin: {\n isAddress(str) {\n return /^(f0|f1|f2|f3)/.test(str);\n },\n isTxHash(str) {\n return str.length === 62 && /^bafy2bza/.test(str);\n },\n },\n optimism: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n avalanche: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n arbitrum: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n tron: {\n isAddress(str) {\n return addressValidator.validate(str, 'tron');\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n fantom: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n celo: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n ethereumClassic: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n mobilecoin: {\n isAddress(str) {\n return str.length === 24 && /^[A-Za-z0-9+/]+={0,2}$/.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n sui: {\n isAddress(str) {\n return str.length === 66 && /^[A-Za-z0-9+/]+$/.test(str);\n },\n isTxHash(str) {\n return str.length === 44;\n },\n },\n flare: {\n isAddress(str) {\n return str.length === 42 && /^[A-Za-z0-9+/]+$/.test(str);\n },\n isTxHash(str) {\n return str.length === 66;\n },\n },\n ton: {\n isAddress(str) {\n return /^[A-Za-z0-9+/]{64}$/.test(str);\n },\n isTxHash(str) {\n return /^[A-Za-z0-9+/]{64}$/.test(str);\n },\n },\n gnosis: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n dydx: {\n isAddress(str) {\n return /^[a-z]+1[a-zA-Z0-9]{38}$/.test(str) || str === 'dydx_chain';\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n hederaHashgraph: {\n isAddress(str) {\n return /^\\d+\\.\\d+\\.\\d+$/.test(str);\n },\n isTxHash(str) {\n return /^[xa-f0-9+/]{98}$/.test(str);\n },\n },\n aptos: {\n isAddress(str) {\n return str.length <= 66 && web3.isHex(str);\n },\n isTxHash(str) {\n return web3.isHex(str);\n },\n },\n zksync: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n haqq: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n base: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n corechain: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n worldchain: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n injective: {\n isAddress(str) {\n return /^[a-z0-9]+$/i.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n linea: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n xdc: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n internetcomputer: {\n isAddress(str) {\n return web3.isHex(str);\n },\n isTxHash(str) {\n return web3.isHex(str);\n },\n },\n unichain: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n sei: {\n isAddress(str) {\n return /^[a-z0-9]+$/i.test(str);\n },\n isTxHash(str) {\n return (str.length === 64 && web3.isHex(str)) || (str.length === 66 && web3.isHexStrict(str));\n },\n },\n bittensor: {\n isAddress(str) {\n return addressValidator.validate(str, 'dot');\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n codex: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n mantra: {\n isAddress(str) {\n return /^[a-z0-9]+$/i.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n nillion: {\n isAddress(str) {\n return /^[a-z0-9]+$/i.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n canton: {\n isAddress(str) {\n return str.length > 1;\n },\n isTxHash(str) {\n return web3.isHex(str) && str.length === 68;\n },\n },\n starknet: {\n isAddress(str) {\n return web3.isHex(str);\n },\n isTxHash(str) {\n return web3.isHex(str);\n },\n },\n noble: {\n isAddress(str) {\n return /^[a-z0-9]+$/i.test(str);\n },\n isTxHash(str) {\n return str.length === 64 && web3.isHex(str);\n },\n },\n assethub: {\n isAddress(str) {\n return addressValidator.validate(str, 'dot');\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n plasma: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n ink: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n xlayer: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n monad: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n hyperevm: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n tempo: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n morph: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n etherlink: {\n isAddress(str) {\n return web3.isAddress(str);\n },\n isTxHash(str) {\n return str.length === 66 && web3.isHexStrict(str);\n },\n },\n};\n\nObject.keys(V).forEach((k) => {\n const v = V[k];\n // don't trigger validation with null values (prevents swagger 500 error)\n validations[k] = (x) => (x === null ? false : v(x));\n});\n\nmodule.exports = validations;\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|