UNPKG

@sasjs/adapter

Version:

JavaScript adapter for SAS

1,153 lines (1,086 loc) 6.38 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["SASjs"] = factory(); else root["SASjs"] = factory(); })(self, () => { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 3062: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var Buffer = __webpack_require__(8764)["Buffer"]; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CsvFormatterStream = void 0; const stream_1 = __webpack_require__(2830); const formatter_1 = __webpack_require__(9947); class CsvFormatterStream extends stream_1.Transform { constructor(formatterOptions) { super({ writableObjectMode: formatterOptions.objectMode }); this.hasWrittenBOM = false; this.formatterOptions = formatterOptions; this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); // if writeBOM is false then set to true // if writeBOM is true then set to false by default so it is written out this.hasWrittenBOM = !formatterOptions.writeBOM; } transform(transformFunction) { this.rowFormatter.rowTransform = transformFunction; return this; } _transform(row, encoding, cb) { let cbCalled = false; try { if (!this.hasWrittenBOM) { this.push(this.formatterOptions.BOM); this.hasWrittenBOM = true; } this.rowFormatter.format(row, (err, rows) => { if (err) { cbCalled = true; return cb(err); } if (rows) { rows.forEach((r) => { this.push(Buffer.from(r, 'utf8')); }); } cbCalled = true; return cb(); }); } catch (e) { if (cbCalled) { throw e; } cb(e); } } _flush(cb) { this.rowFormatter.finish((err, rows) => { if (err) { return cb(err); } if (rows) { rows.forEach((r) => { this.push(Buffer.from(r, 'utf8')); }); } return cb(); }); } } exports.CsvFormatterStream = CsvFormatterStream; //# sourceMappingURL=CsvFormatterStream.js.map /***/ }), /***/ 6763: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FormatterOptions = void 0; class FormatterOptions { constructor(opts = {}) { var _a; this.objectMode = true; this.delimiter = ','; this.rowDelimiter = '\n'; this.quote = '"'; this.escape = this.quote; this.quoteColumns = false; this.quoteHeaders = this.quoteColumns; this.headers = null; this.includeEndRowDelimiter = false; this.writeBOM = false; this.BOM = '\ufeff'; this.alwaysWriteHeaders = false; Object.assign(this, opts || {}); if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') { this.quoteHeaders = this.quoteColumns; } if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) { this.quote = '"'; } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) { this.quote = ''; } if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') { this.escape = this.quote; } this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true); this.headers = Array.isArray(this.headers) ? this.headers : null; this.escapedQuote = `${this.escape}${this.quote}`; } } exports.FormatterOptions = FormatterOptions; //# sourceMappingURL=FormatterOptions.js.map /***/ }), /***/ 5186: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FieldFormatter = void 0; const lodash_isboolean_1 = __importDefault(__webpack_require__(8094)); const lodash_isnil_1 = __importDefault(__webpack_require__(9722)); const lodash_escaperegexp_1 = __importDefault(__webpack_require__(1658)); class FieldFormatter { constructor(formatterOptions) { this._headers = null; this.formatterOptions = formatterOptions; if (formatterOptions.headers !== null) { this.headers = formatterOptions.headers; } this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g'); const escapePattern = `[${formatterOptions.delimiter}${lodash_escaperegexp_1.default(formatterOptions.rowDelimiter)}|\r|\n]`; this.ESCAPE_REGEXP = new RegExp(escapePattern); } set headers(headers) { this._headers = headers; } shouldQuote(fieldIndex, isHeader) { const quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns; if (lodash_isboolean_1.default(quoteConfig)) { return quoteConfig; } if (Array.isArray(quoteConfig)) { return quoteConfig[fieldIndex]; } if (this._headers !== null) { return quoteConfig[this._headers[fieldIndex]]; } return false; } format(field, fieldIndex, isHeader) { const preparedField = `${lodash_isnil_1.default(field) ? '' : field}`.replace(/\0/g, ''); const { formatterOptions } = this; if (formatterOptions.quote !== '') { const shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1; if (shouldEscape) { return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote)); } } const hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1; if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) { return this.quoteField(preparedField); } return preparedField; } quoteField(field) { const { quote } = this.formatterOptions; return `${quote}${field}${quote}`; } } exports.FieldFormatter = FieldFormatter; //# sourceMappingURL=FieldFormatter.js.map /***/ }), /***/ 7181: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.RowFormatter = void 0; const lodash_isfunction_1 = __importDefault(__webpack_require__(8423)); const lodash_isequal_1 = __importDefault(__webpack_require__(2307)); const FieldFormatter_1 = __webpack_require__(5186); const types_1 = __webpack_require__(4692); class RowFormatter { constructor(formatterOptions) { this.rowCount = 0; this.formatterOptions = formatterOptions; this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions); this.headers = formatterOptions.headers; this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders; this.hasWrittenHeaders = false; if (this.headers !== null) { this.fieldFormatter.headers = this.headers; } if (formatterOptions.transform) { this.rowTransform = formatterOptions.transform; } } static isRowHashArray(row) { if (Array.isArray(row)) { return Array.isArray(row[0]) && row[0].length === 2; } return false; } static isRowArray(row) { return Array.isArray(row) && !this.isRowHashArray(row); } // get headers from a row item static gatherHeaders(row) { if (RowFormatter.isRowHashArray(row)) { // lets assume a multi-dimesional array with item 0 being the header return row.map((it) => it[0]); } if (Array.isArray(row)) { return row; } return Object.keys(row); } // eslint-disable-next-line @typescript-eslint/no-shadow static createTransform(transformFunction) { if (types_1.isSyncTransform(transformFunction)) { return (row, cb) => { let transformedRow = null; try { transformedRow = transformFunction(row); } catch (e) { return cb(e); } return cb(null, transformedRow); }; } return (row, cb) => { transformFunction(row, cb); }; } set rowTransform(transformFunction) { if (!lodash_isfunction_1.default(transformFunction)) { throw new TypeError('The transform should be a function'); } this._rowTransform = RowFormatter.createTransform(transformFunction); } format(row, cb) { this.callTransformer(row, (err, transformedRow) => { if (err) { return cb(err); } if (!row) { return cb(null); } const rows = []; if (transformedRow) { const { shouldFormatColumns, headers } = this.checkHeaders(transformedRow); if (this.shouldWriteHeaders && headers && !this.hasWrittenHeaders) { rows.push(this.formatColumns(headers, true)); this.hasWrittenHeaders = true; } if (shouldFormatColumns) { const columns = this.gatherColumns(transformedRow); rows.push(this.formatColumns(columns, false)); } } return cb(null, rows); }); } finish(cb) { const rows = []; // check if we should write headers and we didnt get any rows if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) { if (!this.headers) { return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.')); } rows.push(this.formatColumns(this.headers, true)); } if (this.formatterOptions.includeEndRowDelimiter) { rows.push(this.formatterOptions.rowDelimiter); } return cb(null, rows); } // check if we need to write header return true if we should also write a row // could be false if headers is true and the header row(first item) is passed in checkHeaders(row) { if (this.headers) { // either the headers were provided by the user or we have already gathered them. return { shouldFormatColumns: true, headers: this.headers }; } const headers = RowFormatter.gatherHeaders(row); this.headers = headers; this.fieldFormatter.headers = headers; if (!this.shouldWriteHeaders) { // if we are not supposed to write the headers then // always format the columns return { shouldFormatColumns: true, headers: null }; } // if the row is equal to headers dont format return { shouldFormatColumns: !lodash_isequal_1.default(headers, row), headers }; } // todo change this method to unknown[] gatherColumns(row) { if (this.headers === null) { throw new Error('Headers is currently null'); } if (!Array.isArray(row)) { return this.headers.map((header) => row[header]); } if (RowFormatter.isRowHashArray(row)) { return this.headers.map((header, i) => { const col = row[i]; if (col) { return col[1]; } return ''; }); } // if its a one dimensional array and headers were not provided // then just return the row if (RowFormatter.isRowArray(row) && !this.shouldWriteHeaders) { return row; } return this.headers.map((header, i) => row[i]); } callTransformer(row, cb) { if (!this._rowTransform) { return cb(null, row); } return this._rowTransform(row, cb); } formatColumns(columns, isHeadersRow) { const formattedCols = columns .map((field, i) => this.fieldFormatter.format(field, i, isHeadersRow)) .join(this.formatterOptions.delimiter); const { rowCount } = this; this.rowCount += 1; if (rowCount) { return [this.formatterOptions.rowDelimiter, formattedCols].join(''); } return formattedCols; } } exports.RowFormatter = RowFormatter; //# sourceMappingURL=RowFormatter.js.map /***/ }), /***/ 9947: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FieldFormatter = exports.RowFormatter = void 0; var RowFormatter_1 = __webpack_require__(7181); Object.defineProperty(exports, "RowFormatter", ({ enumerable: true, get: function () { return RowFormatter_1.RowFormatter; } })); var FieldFormatter_1 = __webpack_require__(5186); Object.defineProperty(exports, "FieldFormatter", ({ enumerable: true, get: function () { return FieldFormatter_1.FieldFormatter; } })); //# sourceMappingURL=index.js.map /***/ }), /***/ 7201: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; /* provided dependency */ var Buffer = __webpack_require__(8764)["Buffer"]; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = exports.FormatterOptions = exports.CsvFormatterStream = void 0; const util_1 = __webpack_require__(9539); const stream_1 = __webpack_require__(2830); const fs = __importStar(__webpack_require__(8646)); const FormatterOptions_1 = __webpack_require__(6763); const CsvFormatterStream_1 = __webpack_require__(3062); __exportStar(__webpack_require__(4692), exports); var CsvFormatterStream_2 = __webpack_require__(3062); Object.defineProperty(exports, "CsvFormatterStream", ({ enumerable: true, get: function () { return CsvFormatterStream_2.CsvFormatterStream; } })); var FormatterOptions_2 = __webpack_require__(6763); Object.defineProperty(exports, "FormatterOptions", ({ enumerable: true, get: function () { return FormatterOptions_2.FormatterOptions; } })); exports.format = (options) => new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options)); exports.write = (rows, options) => { const csvStream = exports.format(options); const promiseWrite = util_1.promisify((row, cb) => { csvStream.write(row, undefined, cb); }); rows.reduce((prev, row) => prev.then(() => promiseWrite(row)), Promise.resolve()) .then(() => csvStream.end()) .catch((err) => { csvStream.emit('error', err); }); return csvStream; }; exports.writeToStream = (ws, rows, options) => exports.write(rows, options).pipe(ws); exports.writeToBuffer = (rows, opts = {}) => { const buffers = []; const ws = new stream_1.Writable({ write(data, enc, writeCb) { buffers.push(data); writeCb(); }, }); return new Promise((res, rej) => { ws.on('error', rej).on('finish', () => res(Buffer.concat(buffers))); exports.write(rows, opts).pipe(ws); }); }; exports.writeToString = (rows, options) => exports.writeToBuffer(rows, options).then((buffer) => buffer.toString()); exports.writeToPath = (path, rows, options) => { const stream = fs.createWriteStream(path, { encoding: 'utf8' }); return exports.write(rows, options).pipe(stream); }; //# sourceMappingURL=index.js.map /***/ }), /***/ 4692: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* eslint-disable @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isSyncTransform = void 0; exports.isSyncTransform = (transform) => transform.length === 1; //# sourceMappingURL=types.js.map /***/ }), /***/ 2656: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.decodeToken = exports.hasTokenExpired = exports.isRefreshTokenExpiring = exports.isAccessTokenExpiring = void 0; const jwt_decode_1 = __importDefault(__webpack_require__(6245)); /** * Checks if the Access Token is expired or is expiring in 1 hour. A default Access Token * lasts 12 hours. If the Access Token expires, the Refresh Token is used to fetch a new * Access Token. In the case that the Refresh Token is expired, 1 hour is enough to let * most jobs finish. * @param {string} token- token string that will be evaluated * @param {number} timeToLiveSeconds - the amount of time that the token has before it expires, defaults to 3600 * @returns {boolean} a value indicating whether the token is about to expire */ function isAccessTokenExpiring(token, timeToLiveSeconds = 3600) { if (!token) { return true; } return isTokenExpiring(token, timeToLiveSeconds); } exports.isAccessTokenExpiring = isAccessTokenExpiring; /** * Checks if the Refresh Token is expired or expiring in 30 secs. A default Refresh Token * lasts 30 days. Once the Refresh Token expires, the user must re-authenticate (provide * credentials in a browser to obtain an authorisation code). 30 seconds is enough time * to make a request for a final Access Token. * @param {string} token- token string that will be evaluated * @param {number} timeToLiveSeconds - the amount of time that the token has before it expires, defaults to 30 * @returns {boolean} a value indicating whether the token is about to expire */ function isRefreshTokenExpiring(token, timeToLiveSeconds = 30) { if (!token) { return true; } return isTokenExpiring(token, timeToLiveSeconds); } exports.isRefreshTokenExpiring = isRefreshTokenExpiring; /** * Checks if the given token has expired. * @param {string} token- token string that will be evaluated * @returns {boolean} a value indicating whether the token has expired */ function hasTokenExpired(token) { if (!token) { return true; } return isTokenExpiring(token, 0); } exports.hasTokenExpired = hasTokenExpired; function isTokenExpiring(token, timeToLiveSeconds) { const payload = (0, jwt_decode_1.default)(token); const timeToLive = payload.exp - new Date().valueOf() / 1000; return timeToLive <= timeToLiveSeconds; } function decodeToken(token) { let payload; try { payload = (0, jwt_decode_1.default)(token); } catch (err) { throw new Error('Invalid token supplied.'); } return payload; } exports.decodeToken = decodeToken; //# sourceMappingURL=auth.js.map /***/ }), /***/ 6799: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__webpack_require__(2656), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 3259: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.prefixMessage = void 0; const prefixMessage = (err, messagePrefix) => { if (typeof err === 'object') { if (err.hasOwnProperty('message')) { err.message = messagePrefix + err.message; } else { if (err.hasOwnProperty('body')) { if (typeof err.body === 'object') { err.message = err.body.message ? messagePrefix + err.body.message : messagePrefix; } if (typeof err.body === 'string') { let body; try { body = JSON.parse(err.body); } catch (error) { err.message = messagePrefix; return err; } body.message = body.message ? messagePrefix + body.message : messagePrefix; err.body = body; return err; } } else return Object.assign(Object.assign({}, err), { message: messagePrefix }); } } if (typeof err === 'string') err = messagePrefix + err; return err; }; exports.prefixMessage = prefixMessage; //# sourceMappingURL=errorModifier.js.map /***/ }), /***/ 9778: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__webpack_require__(3259), exports); __exportStar(__webpack_require__(1064), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 1064: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ServerTypeError = void 0; const types_1 = __webpack_require__(3900); class ServerTypeError extends Error { constructor(validOptions = []) { validOptions = [...new Set(validOptions)]; let options = validOptions.length ? validOptions.join(', ').trim() : [types_1.ServerType.SasViya, types_1.ServerType.Sas9, types_1.ServerType.Sasjs] .join(', ') .trim(); options = options.replace(/,\s([^,]*)$/, ' and $1'); super(`Invalid server type: valid option${validOptions.length !== 1 ? 's' : ''} ${validOptions.length !== 1 ? 'are' : 'is'} ${options}`); this.name = 'ServerTypeError'; Object.setPrototypeOf(this, ServerTypeError.prototype); } } exports.ServerTypeError = ServerTypeError; //# sourceMappingURL=serverTypeError.js.map /***/ }), /***/ 3906: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.updateCsv = exports.createCsv = exports.readCsv = void 0; const file_1 = __webpack_require__(1559); const format_1 = __webpack_require__(7201); /** * reads a CSV file and returns parsed data * @param csvFilePath * @returns string[][] */ const readCsv = (csvFilePath) => __awaiter(void 0, void 0, void 0, function* () { const csvContent = yield (0, file_1.readFile)(csvFilePath); return csvContent .split('\n') .filter((row) => row.length) .map((data) => data.split(',')); }); exports.readCsv = readCsv; /** * creates a csv file at given path with provided data * @param csvFilePath location where to create file * @param csvData data which needs to be populated in file * @param headers an array of column names */ const createCsv = (csvFilePath, csvData, headers) => __awaiter(void 0, void 0, void 0, function* () { const output = yield (0, format_1.writeToString)(csvData, { headers }); yield (0, file_1.createFile)(csvFilePath, output); }); exports.createCsv = createCsv; /** * append new csv record if file exists else creates a new file * @param csvFilePath location where to create file * @param newRecord new record which needs to be appended * @param columns an array of header for file, i.e column names * @param prependId name of id column */ const updateCsv = (csvFilePath, newRecord, columns, prependId) => __awaiter(void 0, void 0, void 0, function* () { const csvData = yield validateInput(csvFilePath, newRecord, columns, prependId); if (prependId) { const newId = csvData.length === 0 ? 1 : csvData.length; const idIndexInColumns = columns.findIndex((col) => col === prependId); if (idIndexInColumns > -1) { newRecord.splice(idIndexInColumns, 0, newId); } else { columns.splice(0, 0, prependId); newRecord.splice(0, 0, newId); } } csvData.push(newRecord); yield (0, exports.createCsv)(csvFilePath, csvData, columns); }); exports.updateCsv = updateCsv; const validateInput = (csvFilePath, newRecord, columnsProvided, prependId) => __awaiter(void 0, void 0, void 0, function* () { if (newRecord.length !== columnsProvided.length) { if (newRecord.length > columnsProvided.length) { throw new Error('a record can not have more fields than provided columns'); } // provided columns can/cannot have 'id' if (!(prependId && newRecord.length + 1 === columnsProvided.length)) { throw new Error('a record can not have less fields than provided columns'); } } else if (prependId && columnsProvided.includes(prependId)) { throw new Error('a record can not have more fields than provided columns'); } const csvData = yield (0, exports.readCsv)(csvFilePath).catch((_) => []); const columnsInFile = csvData[0]; if (columnsInFile) { if (columnsProvided.length > columnsInFile.length) { throw new Error('number of provided columns are greater than number of existing columns'); } if (columnsProvided.length < columnsInFile.length) { // provided columns can/cannot have 'id' if (!(prependId && columnsProvided.length + 1 === columnsInFile.length)) throw new Error('number of provided columns are less than number of existing columns'); const idIndexInColumns = columnsInFile.findIndex((col) => col === prependId); const columnsWithId = [...columnsProvided]; if (idIndexInColumns > -1) { columnsWithId.splice(idIndexInColumns, 0, prependId); if (JSON.stringify(columnsProvided) !== JSON.stringify(columnsWithId)) { throw new Error('provided columns does not match existing columns'); } } else { throw new Error('provided columns does not match existing columns'); } } else { if (JSON.stringify(columnsProvided) !== JSON.stringify(columnsInFile)) { throw new Error('provided columns does not match existing columns'); } if (prependId && !columnsProvided.includes(prependId)) { throw new Error('can not add new id to existing data'); } } } return csvData; }); //# sourceMappingURL=csvFile.js.map /***/ }), /***/ 1559: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getLineEnding = exports.isTestFile = exports.testFileRegExp = exports.createReadStream = exports.createWriteStream = exports.getRealPath = exports.base64EncodeFile = exports.base64EncodeImageFile = exports.pathSepEscaped = exports.copy = exports.moveFile = exports.getRelativePath = exports.unifyFilePath = exports.deleteFolder = exports.deleteFile = exports.createFile = exports.createFolder = exports.listFilesAndSubFoldersInFolder = exports.listSubFoldersInFolder = exports.listSasFilesInFolder = exports.listIniFilesInFolder = exports.listFilesInFolder = exports.readFileBinary = exports.readFile = exports.isFolder = exports.folderExists = exports.fileExists = void 0; const fs_extra_1 = __importDefault(__webpack_require__(5674)); const path_1 = __importDefault(__webpack_require__(2520)); const utils_1 = __webpack_require__(6266); const file = __importStar(__webpack_require__(2975)); const types_1 = __webpack_require__(3900); function fileExists(filePath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .access(filePath, fs_extra_1.default.constants.F_OK) .then(() => true) .catch(() => false); }); } exports.fileExists = fileExists; function folderExists(folderPath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .access(folderPath, fs_extra_1.default.constants.F_OK) .then(() => true) .catch(() => false); }); } exports.folderExists = folderExists; function isFolder(inputPath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .lstat(inputPath) .then((stat) => stat.isDirectory()) .catch(() => false); }); } exports.isFolder = isFolder; function readFile(fileName, encoding = 'utf8') { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises.readFile(fileName, encoding); }); } exports.readFile = readFile; function readFileBinary(fileName) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises.readFile(fileName); }); } exports.readFileBinary = readFileBinary; function listFilesInFolder(folderName) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .readdir(folderName, { withFileTypes: true }) .then((list) => list.filter((f) => !f.isDirectory()).map((f) => f.name)); }); } exports.listFilesInFolder = listFilesInFolder; function listIniFilesInFolder(folderName) { return __awaiter(this, void 0, void 0, function* () { return (yield listFilesInFolder(folderName)).filter((name) => name.endsWith('.ini')); }); } exports.listIniFilesInFolder = listIniFilesInFolder; /** * This function returns a list of all SAS files in a folder * * @param folderName a string that contains the folder path * @param recurse (optional) a boolean that identifies the searching of sas files in nested folders recursively * @param ignoredFolders (optional) a string array that contains the folders to be ignored in recursive search * @returns a string array containing sas files paths relatived to folderName */ function listSasFilesInFolder(folderName, recurse = false, ignoredFolders = []) { return __awaiter(this, void 0, void 0, function* () { const filesAndFolders = yield listFilesAndSubFoldersInFolder(folderName, recurse, ignoredFolders); const sasFiles = filesAndFolders.filter((f) => f.endsWith('.sas')); return sasFiles; }); } exports.listSasFilesInFolder = listSasFilesInFolder; function listSubFoldersInFolder(folderName) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .readdir(folderName, { withFileTypes: true }) .then((list) => list.filter((f) => f.isDirectory()).map((f) => f.name)); }); } exports.listSubFoldersInFolder = listSubFoldersInFolder; function listFilesAndSubFoldersInFolder(folderName, recurse = true, ignoredFolders = []) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises .readdir(folderName, { withFileTypes: true }) .then((list) => __awaiter(this, void 0, void 0, function* () { if (recurse) { const subFolders = list.filter((f) => f.isDirectory()); if (subFolders.length) { let subFoldersFilesAndFolders = []; yield (0, utils_1.asyncForEach)(list.filter((f) => f.isDirectory()), (f) => __awaiter(this, void 0, void 0, function* () { const subFolder = f.name; if (!ignoredFolders.includes(subFolder)) { const subPath = path_1.default.join(folderName, subFolder); subFoldersFilesAndFolders = [ ...subFoldersFilesAndFolders, ...(yield listFilesAndSubFoldersInFolder(subPath, recurse, ignoredFolders)).map((f) => path_1.default.join(subFolder, f)) ]; } })); return [ ...list.filter((f) => !f.isDirectory()).map((f) => f.name), ...subFoldersFilesAndFolders ]; } } return list.map((f) => f.name); })); }); } exports.listFilesAndSubFoldersInFolder = listFilesAndSubFoldersInFolder; function createFolder(folderName) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises.mkdir(folderName, { recursive: true }); }); } exports.createFolder = createFolder; function createFile(fileName, content, encoding) { return __awaiter(this, void 0, void 0, function* () { fileName = unifyFilePath(fileName); if (fileName.split(path_1.default.sep).length > 1) { let folderPathParts = fileName.split(path_1.default.sep); folderPathParts.pop(); const folderPath = folderPathParts.join(path_1.default.sep); if (!(yield folderExists(folderPath))) { yield createFolder(folderPath); } } return fs_extra_1.default.promises.writeFile(fileName, content, encoding); }); } exports.createFile = createFile; function deleteFile(filePath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.remove(filePath); }); } exports.deleteFile = deleteFile; function deleteFolder(folderPath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.rm(folderPath, { recursive: true, force: true }); }); } exports.deleteFolder = deleteFolder; function unifyFilePath(filePath, separator = path_1.default.sep, separatorToReplace = '/') { const separators = { unix: '/', win: '\\' }; let osSeparator = Object.keys(separators).find((key) => separators[key] === separator); if (osSeparator) { const notValidSeparator = separators[Object.keys(separators).find((key) => key !== osSeparator)]; osSeparator = separators[osSeparator]; return filePath.split(notValidSeparator).join(osSeparator); } return filePath.split(separatorToReplace).join(separator); } exports.unifyFilePath = unifyFilePath; function getRelativePath(from, to) { const fromFolders = from.split(path_1.default.sep); const toFolders = to.split(path_1.default.sep); let commonPathParts = []; let relativePathParts = []; fromFolders.forEach((fromFolder, i) => { if (toFolders[i] !== undefined && fromFolders[i] === toFolders[i]) { commonPathParts.push(fromFolder); } else { if (fromFolder) relativePathParts.push(fromFolder); } }); const commonPath = commonPathParts.join(path_1.default.sep); const leadingPathSepRegExp = new RegExp(`^${path_1.default.sep.replace(/\\/g, '\\\\')}`); const trailingPathSepRegExp = new RegExp(`${path_1.default.sep.replace(/\\/g, '\\\\')}$`); const relativePath = (relativePathParts.length ? `..${path_1.default.sep}`.repeat(relativePathParts.length) : `.${path_1.default.sep}`) + to .replace(commonPath, '') .replace(leadingPathSepRegExp, '') .replace(trailingPathSepRegExp, ''); return relativePath; } exports.getRelativePath = getRelativePath; function moveFile(oldFilePath, newFilePath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises.rename(oldFilePath, newFilePath); }); } exports.moveFile = moveFile; function copy(source, destination) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.copy(source, destination); }); } exports.copy = copy; exports.pathSepEscaped = path_1.default.sep.replace(/\\/g, '\\\\'); function base64EncodeImageFile(filePath) { return __awaiter(this, void 0, void 0, function* () { return readFileBinary(filePath).then((data) => { let extname = path_1.default.extname(filePath).substr(1) || 'png'; if (extname === 'svg') { extname = 'svg+xml'; } return 'data:image/' + extname + ';base64,' + data.toString('base64'); }); }); } exports.base64EncodeImageFile = base64EncodeImageFile; function base64EncodeFile(filePath) { return __awaiter(this, void 0, void 0, function* () { return fs_extra_1.default.promises.readFile(filePath, { encoding: 'base64' }); }); } exports.base64EncodeFile = base64EncodeFile; function getRealPath(file) { return fs_extra_1.default.realpathSync(file); } exports.getRealPath = getRealPath; function createWriteStream(filePath) { return __awaiter(this, void 0, void 0, function* () { const isFilePresent = yield file.fileExists(filePath); if (isFilePresent) { return fs_extra_1.default.createWriteStream(filePath, { flags: 'a' }); } yield file.createFile(filePath, ''); return fs_extra_1.default.createWriteStream(filePath, { flags: 'a' }); }); } exports.createWriteStream = createWriteStream; const createReadStream = (filePath) => __awaiter(void 0, void 0, void 0, function* () { return fs_extra_1.default.createReadStream(filePath); }); exports.createReadStream = createReadStream; exports.testFileRegExp = /\.test\.(\d+\.)?sas$/i; const isTestFile = (fileName) => exports.testFileRegExp.test(fileName); exports.isTestFile = isTestFile; /** * Returns end of line sequence * @param content to get end of line sequence. * @returns CRLF(\r\n) or LF(\n) end of line sequence */ const getLineEnding = (content) => new RegExp(types_1.LineEndings.CRLF).test(content) ? types_1.LineEndings.CRLF : types_1.LineEndings.LF; exports.getLineEnding = getLineEnding; //# sourceMappingURL=file.js.map /***/ }), /***/ 5626: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getAbsolutePath = void 0; const path_1 = __importDefault(__webpack_require__(2520)); const os_1 = __importDefault(__webpack_require__(7435)); const getAbsolutePath = (providedPath, relativePath) => path_1.default.isAbsolute(providedPath) || /^~/.exec(providedPath) ? path_1.default.normalize(providedPath.replace(/^~/, os_1.default.homedir())) : path_1.default.join(relativePath, providedPath); exports.getAbsolutePath = getAbsolutePath; //# sourceMappingURL=getAbsolutePath.js.map /***/ }), /***/ 2975: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.readCsv = exports.createCsv = exports.updateCsv = exports.getLineEnding = exports.testFileRegExp = exports.isTestFile = exports.getRealPath = exports.base64EncodeFile = exports.base64EncodeImageFile = exports.copy = exports.pathSepEscaped = exports.moveFile = exports.unifyFilePath = exports.getRelativePath = exports.deleteFolder = exports.deleteFile = exports.createWriteStream = exports.createReadStream = exports.createFolder = exports.createFile = exports.listFilesAndSubFoldersInFolder = exports.listSubFoldersInFolder = exports.listSasFilesInFolder = exports.listIniFilesInFolder = exports.listFilesInFolder = exports.readFileBinary = exports.readFile = exports.isFolder = exports.folderExists = exports.fileExists = void 0; var file_1 = __webpack_require__(1559); Object.defineProperty(exports, "fileExists", ({ enumerable: true, get: function () { return file_1.fileExists; } })); Object.defineProperty(exports, "folderExists", ({ enumerable: true, get: function () { return file_1.folderExists; } })); Object.defineProperty(exports, "isFolder", ({ enumerable: true, get: function () { return file_1.isFolder; } })); Object.defineProperty(exports, "readFile", ({ enumerable: true, get: function () { return file_1.readFile; } })); Object.defineProperty(exports, "readFileBinary", ({ enumerable: true, get: function () { return file_1.readFileBinary; } })); Object.defineProperty(exports, "listFilesInFolder", ({ enumerable: true, get: function () { return file_1.listFilesInFolder; } })); Object.defineProperty(exports, "listIniFilesInFolder", ({ enumerable: true, get: function () { return file_1.listIniFilesInFolder; } })); Object.defineProperty(exports, "listSasFilesInFolder", ({ enumerable: true, get: function () { return file_1.listSasFilesInFolder; } })); Object.defineProperty(exports, "listSubFoldersInFolder", ({ enumerable: true, get: function () { return file_1.listSubFoldersInFolder; } })); Object.defineProperty(exports, "listFilesAndSubFoldersInFolder", ({ enumerable: true, get: function () { return file_1.listFilesAndSubFoldersInFolder; } })); Object.defineProperty(exports, "createFile", ({ enumerable: true, get: function () { return file_1.createFile; } })); Object.defineProperty(exports, "createFolder", ({ enumerable: true, get: function () { return file_1.createFolder; } })); Object.defineProperty(exports, "createReadStream", ({ enumerable: true, get: function () { return file_1.createReadStream; } })); Object.defineProperty(exports, "createWriteStream", ({ enumerable: true, get: function () { return file_1.createWriteStream; } })); Object.defineProperty(exports, "deleteFile", ({ enumerable: true, get: function () { return file_1.deleteFile; } })); Object.defineProperty(exports, "deleteFolder", ({ enumerable: true, get: function () { return file_1.deleteFolder; } })); Object.defineProperty(exports, "getRelativePath", ({ enumerable: true, get: function () { return file_1.getRelativePath; } })); Object.defineProperty(exports, "unifyFilePath", ({ enumerable: true, get: function () { return file_1.unifyFilePath; } })); Object.defineProperty(exports, "moveFile", ({ enumerable: true, get: function () { return file_1.moveFile; } })); Object.defineProperty(exports, "pathSepEscaped", ({ enumerable: true, get: function () { return file_1.pathSepEscaped; } })); Object.defineProperty(exports, "copy", ({ enumerable: true, get: function () { return file_1.copy; } })); Object.defineProperty(exports, "base64EncodeImageFile", ({ enumerable: true, get: function () { return file_1.base64EncodeImageFile; } })); Object.defineProperty(exports, "base64EncodeFile", ({ enumerable: true, get: function () { return file_1.base64EncodeFile; } })); Object.defineProperty(exports, "getRealPath", ({ enumerable: true, get: function () { return file_1.getRealPath; } })); Object.defineProperty(exports, "isTestFile", ({ enumerable: true, get: function () { return file_1.isTestFile; } })); Object.defineProperty(exports, "testFileRegExp", ({ enumerable: true, get: function () { return file_1.testFileRegExp; } })); Object.defineProperty(exports, "getLineEnding", ({ enumerable: true, get: function () { return file_1.getLineEnding; } })); var csvFile_1 = __webpack_require__(3906); Object.defineProperty(exports, "updateCsv", ({ enumerable: true, get: function () { return csvFile_1.updateCsv; } })); Object.defineProperty(exports, "createCsv", ({ enumerable: true, get: function () { return csvFile_1.createCsv; } })); Object.defineProperty(exports, "readCsv", ({ enumerable: true, get: function () { return csvFile_1.readCsv; } })); __exportStar(__webpack_require__(5626), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 2777: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.newLine = exports.capitalizeFirstChar = exports.sanitizeSpecialChars = exports.padWithNumber = void 0; var number_1 = __webpack_require__(5306); Object.defineProperty(exports, "padWithNumber", ({ enumerable: true, get: function () { return number_1.padWithNumber; } })); var string_1 = __webpack_require__(9275); Object.defineProperty(exports, "sanitizeSpecialChars", ({ enumerable: true, get: function () { return string_1.sanitizeSpecialChars; }