diff --git a/dist/client/index.d.ts b/dist/client/index.d.ts index 0a8bcb7..3ef3666 100644 --- a/dist/client/index.d.ts +++ b/dist/client/index.d.ts @@ -40,7 +40,7 @@ declare const datasquirelClient: { } | { [s: string]: any; }[] | undefined; - stringify: (value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number) => string | undefined; + stringify: (value: any, replacer?: ((this: any, key: string, value: any) => any) | null, space?: string | number) => string | undefined; }; numberfy: typeof numberfy; slugify: typeof slugify; diff --git a/dist/index.d.ts b/dist/index.d.ts index bb8777f..7e12053 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -25,6 +25,7 @@ import sqlDeleteGenerator from "./package-shared/functions/dsql/sql/sql-delete-g import trimSql from "./package-shared/utils/trim-sql"; import parseCookies from "./package-shared/utils/backend/parseCookies"; import httpRequest from "./package-shared/functions/backend/httpRequest"; +import connDbHandler from "./package-shared/utils/db/conn-db-handler"; /** * Main Export */ @@ -83,7 +84,7 @@ declare const datasquirel: { } | { [s: string]: any; }[] | undefined; - stringify: (value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number) => string | undefined; + stringify: (value: any, replacer?: ((this: any, key: string, value: any) => any) | null, space?: string | number) => string | undefined; }; numberfy: typeof import("./package-shared/utils/numberfy").default; slugify: typeof import("./package-shared/utils/slugify").default; @@ -103,6 +104,7 @@ declare const datasquirel: { }; parseCookies: typeof parseCookies; httpRequest: typeof httpRequest; + connDbHandler: typeof connDbHandler; }; }; export default datasquirel; diff --git a/dist/index.js b/dist/index.js index ec754fe..1cc3cd9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -32,6 +32,7 @@ const sql_delete_generator_1 = __importDefault(require("./package-shared/functio const trim_sql_1 = __importDefault(require("./package-shared/utils/trim-sql")); const parseCookies_1 = __importDefault(require("./package-shared/utils/backend/parseCookies")); const httpRequest_1 = __importDefault(require("./package-shared/functions/backend/httpRequest")); +const conn_db_handler_1 = __importDefault(require("./package-shared/utils/db/conn-db-handler")); //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// @@ -92,6 +93,7 @@ const datasquirel = { }, parseCookies: parseCookies_1.default, httpRequest: httpRequest_1.default, + connDbHandler: conn_db_handler_1.default, }, }; exports.default = datasquirel; diff --git a/dist/package-shared/functions/api/social-login/githubLogin.js b/dist/package-shared/functions/api/social-login/githubLogin.js index e027a51..ef5a828 100644 --- a/dist/package-shared/functions/api/social-login/githubLogin.js +++ b/dist/package-shared/functions/api/social-login/githubLogin.js @@ -55,7 +55,7 @@ function githubLogin(_a) { } } catch ( /** @type {any} */error) { - console.log("ERROR in githubLogin.js backend function =>", error.message); + console.log("ERROR in githubLogin.ts backend function =>", error.message); } return gitHubUser; }); diff --git a/dist/package-shared/functions/api/social-login/handleSocialDb.js b/dist/package-shared/functions/api/social-login/handleSocialDb.js index d04a1cc..5b33a95 100644 --- a/dist/package-shared/functions/api/social-login/handleSocialDb.js +++ b/dist/package-shared/functions/api/social-login/handleSocialDb.js @@ -182,16 +182,16 @@ function handleSocialDb(_a) { }); } else { - console.log("Social User Failed to insert in 'handleSocialDb.js' backend function =>", newUser); + console.log("Social User Failed to insert in 'handleSocialDb.ts' backend function =>", newUser); return { success: false, payload: null, - msg: "Social User Failed to insert in 'handleSocialDb.js' backend function", + msg: "Social User Failed to insert in 'handleSocialDb.ts' backend function", }; } } catch (error) { - console.log("ERROR in 'handleSocialDb.js' backend function =>", error.message); + console.log("ERROR in 'handleSocialDb.ts' backend function =>", error.message); return { success: false, payload: null, diff --git a/dist/package-shared/functions/api/users/social/api-google-login.js b/dist/package-shared/functions/api/users/social/api-google-login.js index b0b6879..c61987c 100644 --- a/dist/package-shared/functions/api/users/social/api-google-login.js +++ b/dist/package-shared/functions/api/users/social/api-google-login.js @@ -88,7 +88,7 @@ function apiGoogleLogin(_a) { return Object.assign({}, loggedInGoogleUser); } catch ( /** @type {any} */error) { - console.log(`apo-google-login.js ERROR: ${error.message}`); + console.log(`api-google-login.ts ERROR: ${error.message}`); return { success: false, payload: undefined, diff --git a/dist/package-shared/functions/backend/addUsersTableToDb.js b/dist/package-shared/functions/backend/addUsersTableToDb.js index c28e7b0..170c9f6 100644 --- a/dist/package-shared/functions/backend/addUsersTableToDb.js +++ b/dist/package-shared/functions/backend/addUsersTableToDb.js @@ -71,7 +71,7 @@ function addUsersTableToDb(_a) { return `Done!`; } catch ( /** @type {any} */error) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + console.log(`addUsersTableToDb.ts ERROR: ${error.message}`); (0, serverError_1.default)({ component: "addUsersTableToDb", message: error.message, diff --git a/dist/package-shared/functions/backend/db/sanitizeSql.d.ts b/dist/package-shared/functions/backend/db/sanitizeSql.d.ts index 07d1ab3..910380c 100644 --- a/dist/package-shared/functions/backend/db/sanitizeSql.d.ts +++ b/dist/package-shared/functions/backend/db/sanitizeSql.d.ts @@ -4,5 +4,5 @@ * @description this function takes in a text(or number) and returns a sanitized * text, usually without spaces */ -declare function sanitizeSql(text: any, spaces: boolean, regex?: RegExp | null): any; +declare function sanitizeSql(text: any, spaces?: boolean, regex?: RegExp | null): any; export default sanitizeSql; diff --git a/dist/package-shared/functions/backend/grabNewUsersTableSchema.js b/dist/package-shared/functions/backend/grabNewUsersTableSchema.js index 0eb955a..2eaa1e1 100644 --- a/dist/package-shared/functions/backend/grabNewUsersTableSchema.js +++ b/dist/package-shared/functions/backend/grabNewUsersTableSchema.js @@ -32,7 +32,7 @@ function grabNewUsersTableSchema(params) { return userPreset; } catch ( /** @type {any} */error) { - console.log(`grabNewUsersTableSchema.js ERROR: ${error.message}`); + console.log(`grabNewUsersTableSchema.ts ERROR: ${error.message}`); (0, serverError_1.default)({ component: "grabNewUsersTableSchema", message: error.message, diff --git a/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js index 46ac8fc..718f5cc 100644 --- a/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js +++ b/dist/package-shared/functions/backend/grabSchemaFieldsFromData.js @@ -56,9 +56,9 @@ function grabSchemaFieldsFromData({ data, fields, excludeData, excludeFields, }) return finalFields; } catch ( /** @type {any} */error) { - console.log(`grabSchemaFieldsFromData.js ERROR: ${error.message}`); + console.log(`grabSchemaFieldsFromData.ts ERROR: ${error.message}`); (0, serverError_1.default)({ - component: "grabSchemaFieldsFromData.js", + component: "grabSchemaFieldsFromData.ts", message: error.message, }); return []; diff --git a/dist/package-shared/functions/backend/updateUsersTableSchema.js b/dist/package-shared/functions/backend/updateUsersTableSchema.js index 3490d3f..d3700b5 100644 --- a/dist/package-shared/functions/backend/updateUsersTableSchema.js +++ b/dist/package-shared/functions/backend/updateUsersTableSchema.js @@ -52,7 +52,7 @@ function updateUsersTableSchema(_a) { return `Done!`; } catch (error) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + console.log(`addUsersTableToDb.ts ERROR: ${error.message}`); (0, serverError_1.default)({ component: "addUsersTableToDb", message: error.message, diff --git a/dist/package-shared/functions/dsql/encrypt.js b/dist/package-shared/functions/dsql/encrypt.js index ac1f6f7..27a8e99 100644 --- a/dist/package-shared/functions/dsql/encrypt.js +++ b/dist/package-shared/functions/dsql/encrypt.js @@ -41,4 +41,3 @@ function encrypt({ data, encryptionKey, encryptionSalt, }) { return data; } } -module.exports = encrypt; diff --git a/dist/package-shared/shell/createDbFromSchema.js b/dist/package-shared/shell/createDbFromSchema.js index 2afe3b5..2163b29 100644 --- a/dist/package-shared/shell/createDbFromSchema.js +++ b/dist/package-shared/shell/createDbFromSchema.js @@ -15,20 +15,26 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createDbFromSchema; const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); -require("dotenv").config({ path: "./../.env" }); const noDatabaseDbHandler_1 = __importDefault(require("./utils/noDatabaseDbHandler")); const varDatabaseDbHandler_1 = __importDefault(require("./utils/varDatabaseDbHandler")); const createTable_1 = __importDefault(require("./utils/createTable")); const updateTable_1 = __importDefault(require("./utils/updateTable")); const dbHandler_1 = __importDefault(require("./utils/dbHandler")); const ejson_1 = __importDefault(require("../utils/ejson")); -const execFlag = process.argv.find((arg) => arg === "--exec"); +const util_1 = require("util"); /** * # Create database from Schema Function */ function createDbFromSchema(_a) { return __awaiter(this, arguments, void 0, function* ({ userId, targetDatabase, dbSchemaData, }) { var _b, _c; + console.log("///////////////////////////////"); + console.log("///////////////////////////////"); + console.log("Rebuilding Database ..."); + console.log("process.env.DSQL_DB_HOST", process.env.DSQL_DB_HOST); + console.log("process.env.DSQL_DB_USERNAME", process.env.DSQL_DB_USERNAME); + console.log("process.env.DSQL_DB_PASSWORD", process.env.DSQL_DB_PASSWORD); + console.log("process.env.DSQL_DB_NAME", process.env.DSQL_DB_NAME); const schemaPath = userId ? path_1.default.join(String(process.env.DSQL_USER_DB_SCHEMA_PATH), `/user-${userId}/main.json`) : path_1.default.resolve(__dirname, "../../jsonData/dbSchemas/main.json"); @@ -46,8 +52,10 @@ function createDbFromSchema(_a) { if (targetDatabase && dbFullName != targetDatabase) { continue; } + console.log("Checking Database ..."); /** @type {any} */ const dbCheck = yield (0, noDatabaseDbHandler_1.default)(`SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'`); + console.log("DB Checked Success!"); if (dbCheck && ((_b = dbCheck[0]) === null || _b === void 0 ? void 0 : _b.dbFullName)) { // Database Exists } @@ -238,8 +246,19 @@ function createDbFromSchema(_a) { } } } + console.log("Database Successfully Rebuilt!"); + console.log("///////////////////////////////"); + console.log("///////////////////////////////"); }); } -if (execFlag) { +const { values } = (0, util_1.parseArgs)({ + args: process.argv, + options: { + exec: { type: "boolean" }, + }, + strict: true, + allowPositionals: true, +}); +if (values.exec) { createDbFromSchema({}); } diff --git a/dist/package-shared/shell/lessWatch.js b/dist/package-shared/shell/lessWatch.js index 8f89a70..bfcd42a 100644 --- a/dist/package-shared/shell/lessWatch.js +++ b/dist/package-shared/shell/lessWatch.js @@ -22,7 +22,7 @@ for (let i = 0; i < sourceFiles.length; i++) { const srcFolder = sourceFiles[i]; const dstFile = dstFiles[i]; fs_1.default.watch(srcFolder, { recursive: true }, (evtType, prev) => { - if ((prev === null || prev === void 0 ? void 0 : prev.match(/\(/)) || (prev === null || prev === void 0 ? void 0 : prev.match(/\.js$/i))) { + if ((prev === null || prev === void 0 ? void 0 : prev.match(/\(/)) || (prev === null || prev === void 0 ? void 0 : prev.match(/\.(j|t)s$/i))) { return; } let finalSrcPath = `${srcFolder}/main.less`; diff --git a/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts b/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts index ca7283a..975eb54 100644 --- a/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts +++ b/dist/package-shared/shell/utils/noDatabaseDbHandler.d.ts @@ -1,4 +1 @@ -/** - * # Create database from Schema Function - */ export default function noDatabaseDbHandler(queryString: string): Promise; diff --git a/dist/package-shared/shell/utils/noDatabaseDbHandler.js b/dist/package-shared/shell/utils/noDatabaseDbHandler.js index 1b53895..db6131a 100644 --- a/dist/package-shared/shell/utils/noDatabaseDbHandler.js +++ b/dist/package-shared/shell/utils/noDatabaseDbHandler.js @@ -14,37 +14,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = noDatabaseDbHandler; const dbHandler_1 = __importDefault(require("./dbHandler")); -/** - * # Create database from Schema Function - */ function noDatabaseDbHandler(queryString) { return __awaiter(this, void 0, void 0, function* () { - /** - * Declare variables - * - * @description Declare "results" variable - */ let results; - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ try { - /** ********************* Run Query */ results = yield (0, dbHandler_1.default)({ query: queryString }); - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// } catch (error) { console.log("ERROR in noDatabaseDbHandler =>", error.message); } - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ if (results) { return results; } diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 46636bd..523b9dd 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -117,6 +117,7 @@ export interface DSQL_MYSQL_user_databases_Type { db_image: string; db_description: string; active_clone: number; + active_data: 0 | 1; active_clone_parent_db: string; remote_connected?: number; remote_db_full_name?: string; @@ -323,7 +324,7 @@ export interface MetricsType { export interface DashboardContextType { user?: UserType; databases?: DSQL_MYSQL_user_databases_Type[]; - setTargetDatabase?: React.Dispatch>; + setTargetDatabase?: React.Dispatch>; targetDatabase?: DSQL_MYSQL_user_databases_Type; metrics?: MetricsType; } @@ -375,7 +376,7 @@ export interface AddEntryContextType { richTextEditors: React.MutableRefObject; jsonTextEditors: React.MutableRefObject; query: any; - duplicateEntry?: any; + duplicateEntry: any; confirmedDelegetedUser: any; } export interface UserDatabasesContextType { @@ -435,13 +436,13 @@ export interface SingleDatabaseContextType { confirmedDelegetedUser: any; } export interface ApiKeysContextType { - user: UserType; - apiKeys: any[]; - setApiKeys: React.Dispatch>; - targetApiKey: any | null; - setTargetApiKey: React.Dispatch>; - newApiKey: any | null; - setNewApiKey: React.Dispatch>; + user?: UserType; + apiKeys?: any[]; + setApiKeys?: React.Dispatch>; + targetApiKey?: any | null; + setTargetApiKey?: React.Dispatch>; + newApiKey?: any | null; + setNewApiKey?: React.Dispatch>; } export interface LoginFormContextType { user?: UserType | null; @@ -469,27 +470,27 @@ export interface DocsAsidePageObject { level?: number; } export interface AllUserUsersContextType { - user: UserType; - users: MYSQL_delegated_users_table_def[]; - targetUser: MYSQL_user_users_table_def | null; - setTargetUser: React.Dispatch>; - databases: DSQL_MYSQL_user_databases_Type[]; - pendingInvitations: MYSQL_invitations_table_def[]; - pendingInvitationsReceived: any[]; - adminUsers: any[]; - invitedAccounts: any[]; + user?: UserType; + users?: MYSQL_delegated_users_table_def[]; + targetUser?: MYSQL_user_users_table_def | undefined; + setTargetUser?: React.Dispatch>; + databases?: DSQL_MYSQL_user_databases_Type[]; + pendingInvitations?: MYSQL_invitations_table_def[]; + pendingInvitationsReceived?: any[]; + adminUsers?: any[]; + invitedAccounts?: any[]; } export interface AddSocialLoginContextType { - user: UserType; - database: DSQL_MYSQL_user_databases_Type; - query: any; - socialLogins: SocialLoginObjectType[]; + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + query?: any; + socialLogins?: SocialLoginObjectType[]; } export interface DelegatedDbContextType { user: UserType; users: MYSQL_user_users_table_def[]; - targetUser: MYSQL_user_users_table_def | null; - setTargetUser: React.Dispatch>; + targetUser: MYSQL_user_users_table_def | undefined; + setTargetUser: React.Dispatch>; database: DSQL_MYSQL_user_databases_Type; } export interface AddUserUserContextType { @@ -502,8 +503,8 @@ export interface AddUserUserContextType { export interface UserUsersContextType { user: UserType; users: MYSQL_user_users_table_def[]; - targetUser: MYSQL_user_users_table_def; - setTargetUser: React.Dispatch>; + targetUser?: MYSQL_user_users_table_def; + setTargetUser: React.Dispatch>; database: DSQL_MYSQL_user_databases_Type; table: DSQL_TableSchemaType; dbSchemaData: DSQL_DatabaseSchemaType[]; @@ -604,14 +605,14 @@ export interface UserSchemaContextType { dbSchemaData: DSQL_DatabaseSchemaType[]; } export interface ConnectContextType { - user: UserType; - query: any; - mariadbUserCred: MariaDBUserCredType; - mariadbUsers: MYSQL_mariadb_users_table_def[]; - targetMariadbUser: MYSQL_mariadb_users_table_def | null; - setTargetMariadbUser: React.Dispatch>; - refresh: number; - setRefresh: React.Dispatch>; + user?: UserType; + query?: any; + mariadbUserCred?: MariaDBUserCredType; + mariadbUsers?: MYSQL_mariadb_users_table_def[]; + targetMariadbUser?: MYSQL_mariadb_users_table_def | null; + setTargetMariadbUser?: React.Dispatch>; + refresh?: number; + setRefresh?: React.Dispatch>; } export interface MYSQL_mariadb_users_table_def { id?: number; @@ -632,7 +633,7 @@ export interface DbContextType { user?: UserType; databases?: DSQL_MYSQL_user_databases_Type[]; targetDatabase?: DSQL_MYSQL_user_databases_Type; - setTargetDatabase?: React.Dispatch>; + setTargetDatabase?: React.Dispatch>; } export interface MariaDBUserCredType { mariadb_user?: string; @@ -640,26 +641,26 @@ export interface MariaDBUserCredType { mariadb_pass?: string; } export interface AddTableContextType { - user: UserType; - dbSchemaData: DSQL_DatabaseSchemaType[]; - database: DSQL_MYSQL_user_databases_Type; - tables: DSQL_TableSchemaType[]; - tableFields: DSQL_FieldSchemaType[]; - setTableFields: React.Dispatch>; - targetField: DSQL_FieldSchemaType | null; - setTargetField: React.Dispatch>; - pageRefresh: number | null; - setPageRefresh: React.Dispatch>; - refreshFieldsListRef: React.MutableRefObject>>; - query: any; + user?: UserType; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + database?: DSQL_MYSQL_user_databases_Type; + tables?: DSQL_TableSchemaType[]; + tableFields?: DSQL_FieldSchemaType[]; + setTableFields?: React.Dispatch>; + targetField?: DSQL_FieldSchemaType | null; + setTargetField?: React.Dispatch>; + pageRefresh?: number | null; + setPageRefresh?: React.Dispatch>; + refreshFieldsListRef?: React.MutableRefObject> | undefined>; + query?: any; } export interface DbSchemaContextType { - user: UserType; - database: DSQL_MYSQL_user_databases_Type; - dbImage: string; - setDbImage: React.Dispatch>; - dbSchemaData: DSQL_DatabaseSchemaType[]; - tables: any[]; + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string; + setDbImage?: React.Dispatch>; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + tables?: any[]; } export interface DbShellContextType { user?: UserType; diff --git a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js index 74dc354..07ce192 100644 --- a/dist/package-shared/utils/backend/global-db/DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DB_HANDLER.js @@ -14,7 +14,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DB_HANDLER; const serverless_mysql_1 = __importDefault(require("serverless-mysql")); -const grabDbSSL_1 = __importDefault(require("../grabDbSSL")); const MASTER = (0, serverless_mysql_1.default)({ config: { host: process.env.DSQL_DB_HOST, @@ -25,7 +24,7 @@ const MASTER = (0, serverless_mysql_1.default)({ ? Number(process.env.DSQL_DB_PORT) : undefined, charset: "utf8mb4", - ssl: (0, grabDbSSL_1.default)(), + // ssl: grabDbSSL(), }, }); /** diff --git a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js index 2cd4fa3..3500ff9 100644 --- a/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js +++ b/dist/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.js @@ -100,4 +100,3 @@ function DSQL_USER_DB_HANDLER({ paradigm, database, queryString, queryValues, }) }; } } -module.exports = DSQL_USER_DB_HANDLER; diff --git a/dist/package-shared/utils/db/conn-db-handler.d.ts b/dist/package-shared/utils/db/conn-db-handler.d.ts new file mode 100644 index 0000000..d97332f --- /dev/null +++ b/dist/package-shared/utils/db/conn-db-handler.d.ts @@ -0,0 +1,25 @@ +import { ServerlessMysql } from "serverless-mysql"; +type QueryObject = { + query: string; + values?: (string | number | undefined)[]; +}; +type Return = ReturnType | null; +/** + * # Run Query From MySQL Connection + * @description Run a query from a pre-existing MySQL/Mariadb Connection + * setup with `serverless-mysql` npm module + */ +export default function connDbHandler( +/** + * ServerlessMySQL Connection Object + */ +conn: ServerlessMysql, +/** + * String Or `QueryObject` Array + */ +query: QueryObject["query"] | QueryObject[], +/** + * Array of Values to Sanitize and Inject + */ +values?: QueryObject["values"]): Promise>; +export {}; diff --git a/dist/package-shared/utils/db/conn-db-handler.js b/dist/package-shared/utils/db/conn-db-handler.js new file mode 100644 index 0000000..0b91f14 --- /dev/null +++ b/dist/package-shared/utils/db/conn-db-handler.js @@ -0,0 +1,57 @@ +"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.default = connDbHandler; +/** + * # Run Query From MySQL Connection + * @description Run a query from a pre-existing MySQL/Mariadb Connection + * setup with `serverless-mysql` npm module + */ +function connDbHandler( +/** + * ServerlessMySQL Connection Object + */ +conn, +/** + * String Or `QueryObject` Array + */ +query, +/** + * Array of Values to Sanitize and Inject + */ +values) { + return __awaiter(this, void 0, void 0, function* () { + try { + if (typeof query == "string") { + const res = yield conn.query(query, values); + return JSON.parse(JSON.stringify(res)); + } + else if (typeof query == "object") { + const resArray = []; + for (let i = 0; i < query.length; i++) { + const queryObj = query[i]; + const queryObjRes = yield conn.query(queryObj.query, queryObj.values); + resArray.push(JSON.parse(JSON.stringify(queryObjRes))); + } + return resArray; + } + else { + return null; + } + } + catch (error) { + return null; + } + finally { + conn.end(); + } + }); +} diff --git a/dist/package-shared/utils/ejson.d.ts b/dist/package-shared/utils/ejson.d.ts index a29694f..4966a4a 100644 --- a/dist/package-shared/utils/ejson.d.ts +++ b/dist/package-shared/utils/ejson.d.ts @@ -9,7 +9,7 @@ declare function parse(string: string | null | number, reviver?: (this: any, key /** * # EJSON stringify object */ -declare function stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string | undefined; +declare function stringify(value: any, replacer?: ((this: any, key: string, value: any) => any) | null, space?: string | number): string | undefined; declare const EJSON: { parse: typeof parse; stringify: typeof stringify; diff --git a/dist/package-shared/utils/ejson.js b/dist/package-shared/utils/ejson.js index 5ac22bd..8d6a00c 100644 --- a/dist/package-shared/utils/ejson.js +++ b/dist/package-shared/utils/ejson.js @@ -22,7 +22,7 @@ function parse(string, reviver) { */ function stringify(value, replacer, space) { try { - return JSON.stringify(value, replacer, space); + return JSON.stringify(value, replacer || undefined, space); } catch (error) { return undefined; diff --git a/dist/package-shared/utils/endConnection.d.ts b/dist/package-shared/utils/endConnection.d.ts index cb0ff5c..422a24e 100644 --- a/dist/package-shared/utils/endConnection.d.ts +++ b/dist/package-shared/utils/endConnection.d.ts @@ -1 +1,6 @@ -export {}; +import mysql from "mysql"; +/** + * # End MYSQL Connection + */ +declare function endConnection(connection: mysql.Connection): void; +export default endConnection; diff --git a/dist/package-shared/utils/endConnection.js b/dist/package-shared/utils/endConnection.js index 94afe23..84aadd0 100644 --- a/dist/package-shared/utils/endConnection.js +++ b/dist/package-shared/utils/endConnection.js @@ -10,4 +10,4 @@ function endConnection(connection) { }); } } -module.exports = endConnection; +exports.default = endConnection; diff --git a/index.ts b/index.ts index 1a5e1ca..f41cfd0 100644 --- a/index.ts +++ b/index.ts @@ -33,6 +33,7 @@ import sqlDeleteGenerator from "./package-shared/functions/dsql/sql/sql-delete-g import trimSql from "./package-shared/utils/trim-sql"; import parseCookies from "./package-shared/utils/backend/parseCookies"; import httpRequest from "./package-shared/functions/backend/httpRequest"; +import connDbHandler from "./package-shared/utils/db/conn-db-handler"; //////////////////////////////////////// //////////////////////////////////////// @@ -98,6 +99,7 @@ const datasquirel = { }, parseCookies, httpRequest, + connDbHandler, }, }; diff --git a/package-shared/functions/api/social-login/githubLogin.ts b/package-shared/functions/api/social-login/githubLogin.ts index 6996803..ff6c366 100755 --- a/package-shared/functions/api/social-login/githubLogin.ts +++ b/package-shared/functions/api/social-login/githubLogin.ts @@ -93,7 +93,7 @@ export default async function githubLogin({ } } catch (/** @type {any} */ error: any) { console.log( - "ERROR in githubLogin.js backend function =>", + "ERROR in githubLogin.ts backend function =>", error.message ); } diff --git a/package-shared/functions/api/social-login/handleSocialDb.ts b/package-shared/functions/api/social-login/handleSocialDb.ts index c264dc4..0121703 100755 --- a/package-shared/functions/api/social-login/handleSocialDb.ts +++ b/package-shared/functions/api/social-login/handleSocialDb.ts @@ -221,19 +221,19 @@ export default async function handleSocialDb({ }); } else { console.log( - "Social User Failed to insert in 'handleSocialDb.js' backend function =>", + "Social User Failed to insert in 'handleSocialDb.ts' backend function =>", newUser ); return { success: false, payload: null, - msg: "Social User Failed to insert in 'handleSocialDb.js' backend function", + msg: "Social User Failed to insert in 'handleSocialDb.ts' backend function", }; } } catch (error: any) { console.log( - "ERROR in 'handleSocialDb.js' backend function =>", + "ERROR in 'handleSocialDb.ts' backend function =>", error.message ); diff --git a/package-shared/functions/api/users/social/api-google-login.ts b/package-shared/functions/api/users/social/api-google-login.ts index 2626620..8c49a99 100644 --- a/package-shared/functions/api/users/social/api-google-login.ts +++ b/package-shared/functions/api/users/social/api-google-login.ts @@ -96,7 +96,7 @@ export default async function apiGoogleLogin({ return { ...loggedInGoogleUser }; } catch (/** @type {any} */ error: any) { - console.log(`apo-google-login.js ERROR: ${error.message}`); + console.log(`api-google-login.ts ERROR: ${error.message}`); return { success: false, diff --git a/package-shared/functions/backend/addUsersTableToDb.ts b/package-shared/functions/backend/addUsersTableToDb.ts index 3671742..4be165b 100755 --- a/package-shared/functions/backend/addUsersTableToDb.ts +++ b/package-shared/functions/backend/addUsersTableToDb.ts @@ -85,7 +85,7 @@ export default async function addUsersTableToDb({ return `Done!`; } catch (/** @type {any} */ error: any) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + console.log(`addUsersTableToDb.ts ERROR: ${error.message}`); serverError({ component: "addUsersTableToDb", diff --git a/package-shared/functions/backend/db/sanitizeSql.ts b/package-shared/functions/backend/db/sanitizeSql.ts index 1e50003..c07eed0 100644 --- a/package-shared/functions/backend/db/sanitizeSql.ts +++ b/package-shared/functions/backend/db/sanitizeSql.ts @@ -6,7 +6,7 @@ import _ from "lodash"; * @description this function takes in a text(or number) and returns a sanitized * text, usually without spaces */ -function sanitizeSql(text: any, spaces: boolean, regex?: RegExp | null): any { +function sanitizeSql(text: any, spaces?: boolean, regex?: RegExp | null): any { if (!text) return ""; if (typeof text == "number" || typeof text == "boolean") return text; if (typeof text == "string" && !text?.toString()?.match(/./)) return ""; @@ -55,7 +55,7 @@ function sanitizeSql(text: any, spaces: boolean, regex?: RegExp | null): any { * * @returns {object} */ -function sanitizeObjects(object: any, spaces: boolean): object { +function sanitizeObjects(object: any, spaces?: boolean): object { /** @type {any} */ let objectUpdated: any = { ...object }; const keys = Object.keys(objectUpdated); @@ -92,7 +92,7 @@ function sanitizeObjects(object: any, spaces: boolean): object { */ function sanitizeArrays( array: any[], - spaces: boolean + spaces?: boolean ): string[] | number[] | object[] { let arrayUpdated = _.cloneDeep(array); diff --git a/package-shared/functions/backend/grabNewUsersTableSchema.ts b/package-shared/functions/backend/grabNewUsersTableSchema.ts index 89d8ddd..7cf9468 100755 --- a/package-shared/functions/backend/grabNewUsersTableSchema.ts +++ b/package-shared/functions/backend/grabNewUsersTableSchema.ts @@ -36,7 +36,7 @@ export default function grabNewUsersTableSchema(params: { return userPreset; } catch (/** @type {any} */ error: any) { - console.log(`grabNewUsersTableSchema.js ERROR: ${error.message}`); + console.log(`grabNewUsersTableSchema.ts ERROR: ${error.message}`); serverError({ component: "grabNewUsersTableSchema", diff --git a/package-shared/functions/backend/grabSchemaFieldsFromData.ts b/package-shared/functions/backend/grabSchemaFieldsFromData.ts index d364f34..6cb8820 100755 --- a/package-shared/functions/backend/grabSchemaFieldsFromData.ts +++ b/package-shared/functions/backend/grabSchemaFieldsFromData.ts @@ -75,10 +75,10 @@ export default function grabSchemaFieldsFromData({ return finalFields; } catch (/** @type {any} */ error: any) { - console.log(`grabSchemaFieldsFromData.js ERROR: ${error.message}`); + console.log(`grabSchemaFieldsFromData.ts ERROR: ${error.message}`); serverError({ - component: "grabSchemaFieldsFromData.js", + component: "grabSchemaFieldsFromData.ts", message: error.message, }); diff --git a/package-shared/functions/backend/handleNodemailer.ts b/package-shared/functions/backend/handleNodemailer.ts index edeb68d..47fea33 100755 --- a/package-shared/functions/backend/handleNodemailer.ts +++ b/package-shared/functions/backend/handleNodemailer.ts @@ -1,5 +1,5 @@ import fs from "fs"; -import nodemailer, { SendMailOptions } from "nodemailer"; +import nodemailer from "nodemailer"; let transporter = nodemailer.createTransport({ host: process.env.DSQL_MAIL_HOST, @@ -68,7 +68,7 @@ export default async function handleNodemailer({ //////////////////////////////////////// try { - let mailObject: SendMailOptions = {}; + let mailObject: any = {}; mailObject["from"] = `"${senderName || "Datasquirel"}" <${sender}>`; mailObject["sender"] = sender; diff --git a/package-shared/functions/backend/updateUsersTableSchema.ts b/package-shared/functions/backend/updateUsersTableSchema.ts index be12b58..78d0f35 100755 --- a/package-shared/functions/backend/updateUsersTableSchema.ts +++ b/package-shared/functions/backend/updateUsersTableSchema.ts @@ -65,7 +65,7 @@ export default async function updateUsersTableSchema({ return `Done!`; } catch (error: any) { - console.log(`addUsersTableToDb.js ERROR: ${error.message}`); + console.log(`addUsersTableToDb.ts ERROR: ${error.message}`); serverError({ component: "addUsersTableToDb", diff --git a/package-shared/functions/dsql/encrypt.ts b/package-shared/functions/dsql/encrypt.ts index 7e0f95f..ce61fcb 100644 --- a/package-shared/functions/dsql/encrypt.ts +++ b/package-shared/functions/dsql/encrypt.ts @@ -56,5 +56,3 @@ export default function encrypt({ return data; } } - -module.exports = encrypt; diff --git a/package-shared/shell/createDbFromSchema.ts b/package-shared/shell/createDbFromSchema.ts index 22d0070..b8c2314 100755 --- a/package-shared/shell/createDbFromSchema.ts +++ b/package-shared/shell/createDbFromSchema.ts @@ -1,8 +1,6 @@ import path from "path"; import fs from "fs"; -require("dotenv").config({ path: "./../.env" }); - import noDatabaseDbHandler from "./utils/noDatabaseDbHandler"; import varDatabaseDbHandler from "./utils/varDatabaseDbHandler"; import createTable from "./utils/createTable"; @@ -10,8 +8,7 @@ import updateTable from "./utils/updateTable"; import dbHandler from "./utils/dbHandler"; import EJSON from "../utils/ejson"; import { DSQL_DatabaseSchemaType } from "../types"; - -const execFlag = process.argv.find((arg) => arg === "--exec"); +import { parseArgs } from "util"; type Param = { userId?: number | string | null; @@ -27,6 +24,14 @@ export default async function createDbFromSchema({ targetDatabase, dbSchemaData, }: Param) { + console.log("///////////////////////////////"); + console.log("///////////////////////////////"); + console.log("Rebuilding Database ..."); + console.log("process.env.DSQL_DB_HOST", process.env.DSQL_DB_HOST); + console.log("process.env.DSQL_DB_USERNAME", process.env.DSQL_DB_USERNAME); + console.log("process.env.DSQL_DB_PASSWORD", process.env.DSQL_DB_PASSWORD); + console.log("process.env.DSQL_DB_NAME", process.env.DSQL_DB_NAME); + const schemaPath = userId ? path.join( String(process.env.DSQL_USER_DB_SCHEMA_PATH), @@ -58,11 +63,15 @@ export default async function createDbFromSchema({ continue; } + console.log("Checking Database ..."); + /** @type {any} */ const dbCheck: any = await noDatabaseDbHandler( `SELECT SCHEMA_NAME AS dbFullName FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '${dbFullName}'` ); + console.log("DB Checked Success!"); + if (dbCheck && dbCheck[0]?.dbFullName) { // Database Exists } else { @@ -297,8 +306,21 @@ export default async function createDbFromSchema({ } } } + + console.log("Database Successfully Rebuilt!"); + console.log("///////////////////////////////"); + console.log("///////////////////////////////"); } -if (execFlag) { +const { values } = parseArgs({ + args: process.argv, + options: { + exec: { type: "boolean" }, + }, + strict: true, + allowPositionals: true, +}); + +if (values.exec) { createDbFromSchema({}); } diff --git a/package-shared/shell/lessWatch.ts b/package-shared/shell/lessWatch.ts index 62f4ea1..dbc4ab6 100755 --- a/package-shared/shell/lessWatch.ts +++ b/package-shared/shell/lessWatch.ts @@ -26,7 +26,7 @@ for (let i = 0; i < sourceFiles.length; i++) { const dstFile = dstFiles[i]; fs.watch(srcFolder, { recursive: true }, (evtType, prev) => { - if (prev?.match(/\(/) || prev?.match(/\.js$/i)) { + if (prev?.match(/\(/) || prev?.match(/\.(j|t)s$/i)) { return; } diff --git a/package-shared/shell/utils/noDatabaseDbHandler.ts b/package-shared/shell/utils/noDatabaseDbHandler.ts index 872ddeb..d7d971f 100755 --- a/package-shared/shell/utils/noDatabaseDbHandler.ts +++ b/package-shared/shell/utils/noDatabaseDbHandler.ts @@ -1,39 +1,16 @@ import dbHandler from "./dbHandler"; -/** - * # Create database from Schema Function - */ export default async function noDatabaseDbHandler( queryString: string ): Promise { - /** - * Declare variables - * - * @description Declare "results" variable - */ let results; - /** - * Fetch from db - * - * @description Fetch data from db if no cache - */ try { - /** ********************* Run Query */ results = await dbHandler({ query: queryString }); - - //////////////////////////////////////// - //////////////////////////////////////// - //////////////////////////////////////// } catch (error: any) { console.log("ERROR in noDatabaseDbHandler =>", error.message); } - /** - * Return results - * - * @description Return results add to cache if "req" param is passed - */ if (results) { return results; } else { diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index b6b1eab..b9763c5 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -131,6 +131,7 @@ export interface DSQL_MYSQL_user_databases_Type { db_image: string; db_description: string; active_clone: number; + active_data: 0 | 1; active_clone_parent_db: string; remote_connected?: number; remote_db_full_name?: string; @@ -365,7 +366,7 @@ export interface DashboardContextType { user?: UserType; databases?: DSQL_MYSQL_user_databases_Type[]; setTargetDatabase?: React.Dispatch< - React.SetStateAction + React.SetStateAction >; targetDatabase?: DSQL_MYSQL_user_databases_Type; metrics?: MetricsType; @@ -428,7 +429,7 @@ export interface AddEntryContextType { richTextEditors: React.MutableRefObject; jsonTextEditors: React.MutableRefObject; query: any; - duplicateEntry?: any; + duplicateEntry: any; confirmedDelegetedUser: any; } @@ -505,13 +506,13 @@ export interface SingleDatabaseContextType { } export interface ApiKeysContextType { - user: UserType; - apiKeys: any[]; - setApiKeys: React.Dispatch>; - targetApiKey: any | null; - setTargetApiKey: React.Dispatch>; - newApiKey: any | null; - setNewApiKey: React.Dispatch>; + user?: UserType; + apiKeys?: any[]; + setApiKeys?: React.Dispatch>; + targetApiKey?: any | null; + setTargetApiKey?: React.Dispatch>; + newApiKey?: any | null; + setNewApiKey?: React.Dispatch>; } export interface LoginFormContextType { @@ -544,32 +545,32 @@ export interface DocsAsidePageObject { } export interface AllUserUsersContextType { - user: UserType; - users: MYSQL_delegated_users_table_def[]; - targetUser: MYSQL_user_users_table_def | null; - setTargetUser: React.Dispatch< - React.SetStateAction + user?: UserType; + users?: MYSQL_delegated_users_table_def[]; + targetUser?: MYSQL_user_users_table_def | undefined; + setTargetUser?: React.Dispatch< + React.SetStateAction >; - databases: DSQL_MYSQL_user_databases_Type[]; - pendingInvitations: MYSQL_invitations_table_def[]; - pendingInvitationsReceived: any[]; - adminUsers: any[]; - invitedAccounts: any[]; + databases?: DSQL_MYSQL_user_databases_Type[]; + pendingInvitations?: MYSQL_invitations_table_def[]; + pendingInvitationsReceived?: any[]; + adminUsers?: any[]; + invitedAccounts?: any[]; } export interface AddSocialLoginContextType { - user: UserType; - database: DSQL_MYSQL_user_databases_Type; - query: any; - socialLogins: SocialLoginObjectType[]; + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + query?: any; + socialLogins?: SocialLoginObjectType[]; } export interface DelegatedDbContextType { user: UserType; users: MYSQL_user_users_table_def[]; - targetUser: MYSQL_user_users_table_def | null; + targetUser: MYSQL_user_users_table_def | undefined; setTargetUser: React.Dispatch< - React.SetStateAction + React.SetStateAction >; database: DSQL_MYSQL_user_databases_Type; } @@ -585,9 +586,9 @@ export interface AddUserUserContextType { export interface UserUsersContextType { user: UserType; users: MYSQL_user_users_table_def[]; - targetUser: MYSQL_user_users_table_def; + targetUser?: MYSQL_user_users_table_def; setTargetUser: React.Dispatch< - React.SetStateAction + React.SetStateAction >; database: DSQL_MYSQL_user_databases_Type; table: DSQL_TableSchemaType; @@ -717,16 +718,16 @@ export interface UserSchemaContextType { } export interface ConnectContextType { - user: UserType; - query: any; - mariadbUserCred: MariaDBUserCredType; - mariadbUsers: MYSQL_mariadb_users_table_def[]; - targetMariadbUser: MYSQL_mariadb_users_table_def | null; - setTargetMariadbUser: React.Dispatch< + user?: UserType; + query?: any; + mariadbUserCred?: MariaDBUserCredType; + mariadbUsers?: MYSQL_mariadb_users_table_def[]; + targetMariadbUser?: MYSQL_mariadb_users_table_def | null; + setTargetMariadbUser?: React.Dispatch< React.SetStateAction >; - refresh: number; - setRefresh: React.Dispatch>; + refresh?: number; + setRefresh?: React.Dispatch>; } export interface MYSQL_mariadb_users_table_def { @@ -750,7 +751,7 @@ export interface DbContextType { databases?: DSQL_MYSQL_user_databases_Type[]; targetDatabase?: DSQL_MYSQL_user_databases_Type; setTargetDatabase?: React.Dispatch< - React.SetStateAction + React.SetStateAction >; } @@ -761,33 +762,33 @@ export interface MariaDBUserCredType { } export interface AddTableContextType { - user: UserType; - dbSchemaData: DSQL_DatabaseSchemaType[]; - database: DSQL_MYSQL_user_databases_Type; - tables: DSQL_TableSchemaType[]; - tableFields: DSQL_FieldSchemaType[]; - setTableFields: React.Dispatch< + user?: UserType; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + database?: DSQL_MYSQL_user_databases_Type; + tables?: DSQL_TableSchemaType[]; + tableFields?: DSQL_FieldSchemaType[]; + setTableFields?: React.Dispatch< React.SetStateAction >; - targetField: DSQL_FieldSchemaType | null; - setTargetField: React.Dispatch< + targetField?: DSQL_FieldSchemaType | null; + setTargetField?: React.Dispatch< React.SetStateAction >; - pageRefresh: number | null; - setPageRefresh: React.Dispatch>; - refreshFieldsListRef: React.MutableRefObject< - React.Dispatch> + pageRefresh?: number | null; + setPageRefresh?: React.Dispatch>; + refreshFieldsListRef?: React.MutableRefObject< + React.Dispatch> | undefined >; - query: any; + query?: any; } export interface DbSchemaContextType { - user: UserType; - database: DSQL_MYSQL_user_databases_Type; - dbImage: string; - setDbImage: React.Dispatch>; - dbSchemaData: DSQL_DatabaseSchemaType[]; - tables: any[]; + user?: UserType; + database?: DSQL_MYSQL_user_databases_Type; + dbImage?: string; + setDbImage?: React.Dispatch>; + dbSchemaData?: DSQL_DatabaseSchemaType[]; + tables?: any[]; } export interface DbShellContextType { diff --git a/package-shared/utils/backend/global-db/DB_HANDLER.ts b/package-shared/utils/backend/global-db/DB_HANDLER.ts index e13e922..92380f8 100644 --- a/package-shared/utils/backend/global-db/DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DB_HANDLER.ts @@ -11,7 +11,7 @@ const MASTER = mysql({ ? Number(process.env.DSQL_DB_PORT) : undefined, charset: "utf8mb4", - ssl: grabDbSSL(), + // ssl: grabDbSSL(), }, }); diff --git a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts index 0957fe4..c4fbcbd 100644 --- a/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts +++ b/package-shared/utils/backend/global-db/DSQL_USER_DB_HANDLER.ts @@ -120,5 +120,3 @@ export default function DSQL_USER_DB_HANDLER({ }; } } - -module.exports = DSQL_USER_DB_HANDLER; diff --git a/package-shared/utils/db/conn-db-handler.ts b/package-shared/utils/db/conn-db-handler.ts new file mode 100644 index 0000000..dead5ba --- /dev/null +++ b/package-shared/utils/db/conn-db-handler.ts @@ -0,0 +1,52 @@ +import { ServerlessMysql } from "serverless-mysql"; + +type QueryObject = { + query: string; + values?: (string | number | undefined)[]; +}; + +type Return = ReturnType | null; + +/** + * # Run Query From MySQL Connection + * @description Run a query from a pre-existing MySQL/Mariadb Connection + * setup with `serverless-mysql` npm module + */ +export default async function connDbHandler( + /** + * ServerlessMySQL Connection Object + */ + conn: ServerlessMysql, + /** + * String Or `QueryObject` Array + */ + query: QueryObject["query"] | QueryObject[], + /** + * Array of Values to Sanitize and Inject + */ + values?: QueryObject["values"] +): Promise> { + try { + if (typeof query == "string") { + const res = await conn.query(query, values); + return JSON.parse(JSON.stringify(res)); + } else if (typeof query == "object") { + const resArray = []; + for (let i = 0; i < query.length; i++) { + const queryObj = query[i]; + const queryObjRes = await conn.query( + queryObj.query, + queryObj.values + ); + resArray.push(JSON.parse(JSON.stringify(queryObjRes))); + } + return resArray as any; + } else { + return null; + } + } catch (error) { + return null; + } finally { + conn.end(); + } +} diff --git a/package-shared/utils/ejson.ts b/package-shared/utils/ejson.ts index 0a0b92e..b4f0528 100644 --- a/package-shared/utils/ejson.ts +++ b/package-shared/utils/ejson.ts @@ -20,11 +20,11 @@ function parse( */ function stringify( value: any, - replacer?: (this: any, key: string, value: any) => any, + replacer?: ((this: any, key: string, value: any) => any) | null, space?: string | number ): string | undefined { try { - return JSON.stringify(value, replacer, space); + return JSON.stringify(value, replacer || undefined, space); } catch (error) { return undefined; } diff --git a/package-shared/utils/endConnection.ts b/package-shared/utils/endConnection.ts index e188c7c..62ad051 100644 --- a/package-shared/utils/endConnection.ts +++ b/package-shared/utils/endConnection.ts @@ -11,4 +11,4 @@ function endConnection(connection: mysql.Connection) { } } -module.exports = endConnection; +export default endConnection; diff --git a/package.json b/package.json index a45e56e..193259e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.4.0", + "version": "3.4.1", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {