From 6e32bbb4e0f494615aa76e85ebf156f7abd5a07d Mon Sep 17 00:00:00 2001
From: Benjamin Toby <benoti.san@gmail.com>
Date: Thu, 17 Apr 2025 10:49:34 +0100
Subject: [PATCH] Updates

---
 bun.lockb                                     | Bin 45396 -> 59934 bytes
 dist/engine/schema-to-typedef.d.ts            |   2 +
 dist/engine/schema-to-typedef.js              |  71 ++++++++++++++
 .../functions/dsql/db-schema-to-type.d.ts     |   6 ++
 .../functions/dsql/db-schema-to-type.js       |  51 ++++++++++
 .../functions/dsql/default-fields-regexp.d.ts |   7 ++
 .../functions/dsql/default-fields-regexp.js   |  13 +++
 .../dsql/generate-type-definitions.d.ts       |  11 +++
 .../dsql/generate-type-definitions.js         |  53 +++++++++++
 engine/schema-to-typedef.ts                   |  71 ++++++++++++++
 .../functions/dsql/db-schema-to-type.ts       |  76 +++++++++++++++
 .../functions/dsql/default-fields-regexp.ts   |  16 ++++
 .../dsql/generate-type-definitions.ts         |  87 ++++++++++++++++++
 package.json                                  |   6 +-
 14 files changed, 468 insertions(+), 2 deletions(-)
 create mode 100644 dist/engine/schema-to-typedef.d.ts
 create mode 100644 dist/engine/schema-to-typedef.js
 create mode 100644 dist/package-shared/functions/dsql/db-schema-to-type.d.ts
 create mode 100644 dist/package-shared/functions/dsql/db-schema-to-type.js
 create mode 100644 dist/package-shared/functions/dsql/default-fields-regexp.d.ts
 create mode 100644 dist/package-shared/functions/dsql/default-fields-regexp.js
 create mode 100644 dist/package-shared/functions/dsql/generate-type-definitions.d.ts
 create mode 100644 dist/package-shared/functions/dsql/generate-type-definitions.js
 create mode 100644 engine/schema-to-typedef.ts
 create mode 100644 package-shared/functions/dsql/db-schema-to-type.ts
 create mode 100644 package-shared/functions/dsql/default-fields-regexp.ts
 create mode 100644 package-shared/functions/dsql/generate-type-definitions.ts

diff --git a/bun.lockb b/bun.lockb
index 4e361e78c44b7a55e65f96195b1882366309da81..ab9b56b167e3fa7f1e4e513845415a61afa51506 100755
GIT binary patch
delta 15443
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
QnzPECMip~+{=@M909=rcO8@`>

delta 6257
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

diff --git a/dist/engine/schema-to-typedef.d.ts b/dist/engine/schema-to-typedef.d.ts
new file mode 100644
index 0000000..237deca
--- /dev/null
+++ b/dist/engine/schema-to-typedef.d.ts
@@ -0,0 +1,2 @@
+#! /usr/bin/env node
+export {};
diff --git a/dist/engine/schema-to-typedef.js b/dist/engine/schema-to-typedef.js
new file mode 100644
index 0000000..3f26a02
--- /dev/null
+++ b/dist/engine/schema-to-typedef.js
@@ -0,0 +1,71 @@
+#! /usr/bin/env node
+"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());
+    });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs_1 = __importDefault(require("fs"));
+const __1 = __importDefault(require(".."));
+const util_1 = require("util");
+const db_schema_to_type_1 = __importDefault(require("../package-shared/functions/dsql/db-schema-to-type"));
+const path_1 = __importDefault(require("path"));
+const args = (0, util_1.parseArgs)({
+    args: process.argv,
+    options: {
+        apiKey: {
+            type: "string",
+            default: process.env.DSQL_FULL_ACCESS_API_KEY,
+            short: "k",
+        },
+        database: {
+            type: "string",
+            default: process.env.DSQL_DB_NAME,
+            short: "d",
+        },
+        outfile: {
+            type: "string",
+            default: process.env.DSQL_DB_NAME,
+            short: "o",
+        },
+    },
+    strict: false,
+});
+(() => __awaiter(void 0, void 0, void 0, function* () {
+    try {
+        const { apiKey: key, database, outfile } = args.values;
+        if (!database || typeof database !== "string")
+            throw new Error("Database name is required");
+        if (!key || typeof key !== "string")
+            throw new Error("API key is required");
+        if (!outfile || typeof outfile !== "string")
+            throw new Error("Outfile are required");
+        const schema = yield __1.default.getSchema({
+            key,
+            database,
+            user_id: 1,
+        });
+        const dbSchema = schema.payload;
+        if (!dbSchema)
+            throw new Error("No schema found");
+        const definitions = (0, db_schema_to_type_1.default)({ dbSchema });
+        const finalOutfile = path_1.default.resolve(process.cwd(), outfile);
+        const ourfileDir = path_1.default.dirname(finalOutfile);
+        if (!fs_1.default.existsSync(ourfileDir)) {
+            fs_1.default.mkdirSync(ourfileDir, { recursive: true });
+        }
+        fs_1.default.writeFileSync(finalOutfile, (definitions === null || definitions === void 0 ? void 0 : definitions.join("\n\n")) || "", "utf-8");
+    }
+    catch (error) {
+        console.log("Error:", error.message);
+        process.exit(1);
+    }
+}))();
diff --git a/dist/package-shared/functions/dsql/db-schema-to-type.d.ts b/dist/package-shared/functions/dsql/db-schema-to-type.d.ts
new file mode 100644
index 0000000..ed0cc73
--- /dev/null
+++ b/dist/package-shared/functions/dsql/db-schema-to-type.d.ts
@@ -0,0 +1,6 @@
+import { DSQL_DatabaseSchemaType } from "../../types";
+type Params = {
+    dbSchema?: DSQL_DatabaseSchemaType;
+};
+export default function dbSchemaToType(params?: Params): string[] | undefined;
+export {};
diff --git a/dist/package-shared/functions/dsql/db-schema-to-type.js b/dist/package-shared/functions/dsql/db-schema-to-type.js
new file mode 100644
index 0000000..9e69590
--- /dev/null
+++ b/dist/package-shared/functions/dsql/db-schema-to-type.js
@@ -0,0 +1,51 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = dbSchemaToType;
+const fs_1 = __importDefault(require("fs"));
+const grab_dir_names_1 = __importDefault(require("../../utils/backend/names/grab-dir-names"));
+const lodash_1 = __importDefault(require("lodash"));
+const ejson_1 = __importDefault(require("../../utils/ejson"));
+const generate_type_definitions_1 = __importDefault(require("./generate-type-definitions"));
+const path_1 = __importDefault(require("path"));
+function dbSchemaToType(params) {
+    let datasquirelSchema;
+    const defaultTableFieldsJSONFilePath = path_1.default.resolve(__dirname, "../../data/defaultFields.json");
+    if (params === null || params === void 0 ? void 0 : params.dbSchema) {
+        datasquirelSchema = params.dbSchema;
+    }
+    else {
+        const { mainShemaJSONFilePath } = (0, grab_dir_names_1.default)();
+        const mainSchema = ejson_1.default.parse(fs_1.default.readFileSync(mainShemaJSONFilePath, "utf-8"));
+        datasquirelSchema = mainSchema.find((sch) => sch.dbFullName == "datasquirel");
+    }
+    if (!datasquirelSchema)
+        return;
+    let tableNames = `export const DsqlTables = [\n${datasquirelSchema.tables
+        .map((tbl) => `    "${tbl.tableName}",`)
+        .join("\n")}\n] as const`;
+    const defaultFields = ejson_1.default.parse(fs_1.default.readFileSync(defaultTableFieldsJSONFilePath, "utf-8"));
+    const dbTablesSchemas = datasquirelSchema.tables.map((tblSchm) => {
+        let newDefaultFields = lodash_1.default.cloneDeep(defaultFields);
+        return Object.assign(Object.assign({}, tblSchm), { fields: (params === null || params === void 0 ? void 0 : params.dbSchema)
+                ? tblSchm.fields
+                : [
+                    newDefaultFields.shift(),
+                    newDefaultFields.shift(),
+                    ...tblSchm.fields,
+                    ...newDefaultFields,
+                ] });
+    });
+    const schemas = dbTablesSchemas
+        .map((table) => (0, generate_type_definitions_1.default)({
+        paradigm: "TypeScript",
+        table,
+        typeDefName: `DSQL_DATASQUIREL_${table.tableName.toUpperCase()}`,
+        allValuesOptional: true,
+        addExport: true,
+    }))
+        .filter((schm) => typeof schm == "string");
+    return [tableNames, ...schemas];
+}
diff --git a/dist/package-shared/functions/dsql/default-fields-regexp.d.ts b/dist/package-shared/functions/dsql/default-fields-regexp.d.ts
new file mode 100644
index 0000000..9a1f5b4
--- /dev/null
+++ b/dist/package-shared/functions/dsql/default-fields-regexp.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Check for user in local storage
+ *
+ * @description Preventdefault, declare variables
+ */
+declare const defaultFieldsRegexp: RegExp;
+export default defaultFieldsRegexp;
diff --git a/dist/package-shared/functions/dsql/default-fields-regexp.js b/dist/package-shared/functions/dsql/default-fields-regexp.js
new file mode 100644
index 0000000..239e5bd
--- /dev/null
+++ b/dist/package-shared/functions/dsql/default-fields-regexp.js
@@ -0,0 +1,13 @@
+"use strict";
+// @ts-check
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * Check for user in local storage
+ *
+ * @description Preventdefault, declare variables
+ */
+const defaultFieldsRegexp = /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/;
+////////////////////////////////////////
+////////////////////////////////////////
+////////////////////////////////////////
+exports.default = defaultFieldsRegexp;
diff --git a/dist/package-shared/functions/dsql/generate-type-definitions.d.ts b/dist/package-shared/functions/dsql/generate-type-definitions.d.ts
new file mode 100644
index 0000000..5560cb9
--- /dev/null
+++ b/dist/package-shared/functions/dsql/generate-type-definitions.d.ts
@@ -0,0 +1,11 @@
+import { DSQL_TableSchemaType } from "../../types";
+type Param = {
+    paradigm: "JavaScript" | "TypeScript" | undefined;
+    table: DSQL_TableSchemaType;
+    query?: any;
+    typeDefName?: string;
+    allValuesOptional?: boolean;
+    addExport?: boolean;
+};
+export default function generateTypeDefinition({ paradigm, table, query, typeDefName, allValuesOptional, addExport, }: Param): string | null;
+export {};
diff --git a/dist/package-shared/functions/dsql/generate-type-definitions.js b/dist/package-shared/functions/dsql/generate-type-definitions.js
new file mode 100644
index 0000000..18d2438
--- /dev/null
+++ b/dist/package-shared/functions/dsql/generate-type-definitions.js
@@ -0,0 +1,53 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = generateTypeDefinition;
+const default_fields_regexp_1 = __importDefault(require("./default-fields-regexp"));
+function generateTypeDefinition({ paradigm, table, query, typeDefName, allValuesOptional, addExport, }) {
+    let typeDefinition = ``;
+    try {
+        const tdName = typeDefName ||
+            `DSQL_${query.single}_${query.single_table}`.toUpperCase();
+        const fields = table.fields;
+        function typeMap(type) {
+            if (type === null || type === void 0 ? void 0 : type.match(/int/i)) {
+                return "number";
+            }
+            if (type === null || type === void 0 ? void 0 : type.match(/text|varchar|timestamp/i)) {
+                return "string";
+            }
+            return "string";
+        }
+        const typesArrayTypeScript = [];
+        const typesArrayJavascript = [];
+        typesArrayTypeScript.push(`${addExport ? "export " : ""}type ${tdName} = {`);
+        typesArrayJavascript.push(`/**\n * @typedef {object} ${tdName}`);
+        fields.forEach((field) => {
+            var _a;
+            const nullValue = allValuesOptional
+                ? "?"
+                : field.nullValue
+                    ? "?"
+                    : ((_a = field.fieldName) === null || _a === void 0 ? void 0 : _a.match(default_fields_regexp_1.default))
+                        ? "?"
+                        : "";
+            typesArrayTypeScript.push(`    ${field.fieldName}${nullValue}: ${typeMap(field.dataType || "")};`);
+            typesArrayJavascript.push(` * @property {${typeMap(field.dataType || "")}${nullValue}} ${field.fieldName}`);
+        });
+        typesArrayTypeScript.push(`}`);
+        typesArrayJavascript.push(` */`);
+        if (paradigm === null || paradigm === void 0 ? void 0 : paradigm.match(/javascript/i)) {
+            typeDefinition = typesArrayJavascript.join("\n");
+        }
+        if (paradigm === null || paradigm === void 0 ? void 0 : paradigm.match(/typescript/i)) {
+            typeDefinition = typesArrayTypeScript.join("\n");
+        }
+    }
+    catch (error) {
+        console.log(error.message);
+        typeDefinition = null;
+    }
+    return typeDefinition;
+}
diff --git a/engine/schema-to-typedef.ts b/engine/schema-to-typedef.ts
new file mode 100644
index 0000000..ee5ef22
--- /dev/null
+++ b/engine/schema-to-typedef.ts
@@ -0,0 +1,71 @@
+#! /usr/bin/env node
+
+import inquirer from "inquirer";
+import fs from "fs";
+import datasquirel from "..";
+import { parseArgs } from "util";
+import { DSQL_DatabaseSchemaType } from "../package-shared/types";
+import dbSchemaToType from "../package-shared/functions/dsql/db-schema-to-type";
+import path from "path";
+
+const args = parseArgs({
+    args: process.argv,
+    options: {
+        apiKey: {
+            type: "string",
+            default: process.env.DSQL_FULL_ACCESS_API_KEY,
+            short: "k",
+        },
+        database: {
+            type: "string",
+            default: process.env.DSQL_DB_NAME,
+            short: "d",
+        },
+        outfile: {
+            type: "string",
+            default: process.env.DSQL_DB_NAME,
+            short: "o",
+        },
+    },
+    strict: false,
+});
+
+(async () => {
+    try {
+        const { apiKey: key, database, outfile } = args.values;
+
+        if (!database || typeof database !== "string")
+            throw new Error("Database name is required");
+        if (!key || typeof key !== "string")
+            throw new Error("API key is required");
+        if (!outfile || typeof outfile !== "string")
+            throw new Error("Outfile are required");
+
+        const schema = await datasquirel.getSchema({
+            key,
+            database,
+            user_id: 1,
+        });
+
+        const dbSchema = schema.payload as DSQL_DatabaseSchemaType | undefined;
+
+        if (!dbSchema) throw new Error("No schema found");
+
+        const definitions = dbSchemaToType({ dbSchema });
+
+        const finalOutfile = path.resolve(process.cwd(), outfile);
+        const ourfileDir = path.dirname(finalOutfile);
+        if (!fs.existsSync(ourfileDir)) {
+            fs.mkdirSync(ourfileDir, { recursive: true });
+        }
+
+        fs.writeFileSync(
+            finalOutfile,
+            definitions?.join("\n\n") || "",
+            "utf-8"
+        );
+    } catch (error: any) {
+        console.log("Error:", error.message);
+        process.exit(1);
+    }
+})();
diff --git a/package-shared/functions/dsql/db-schema-to-type.ts b/package-shared/functions/dsql/db-schema-to-type.ts
new file mode 100644
index 0000000..81ad7e8
--- /dev/null
+++ b/package-shared/functions/dsql/db-schema-to-type.ts
@@ -0,0 +1,76 @@
+import fs from "fs";
+import grabDirNames from "../../utils/backend/names/grab-dir-names";
+import {
+    DSQL_DatabaseSchemaType,
+    DSQL_FieldSchemaType,
+    DSQL_TableSchemaType,
+} from "../../types";
+import _ from "lodash";
+import EJSON from "../../utils/ejson";
+import generateTypeDefinition from "./generate-type-definitions";
+import path from "path";
+
+type Params = {
+    dbSchema?: DSQL_DatabaseSchemaType;
+};
+
+export default function dbSchemaToType(params?: Params): string[] | undefined {
+    let datasquirelSchema;
+    const defaultTableFieldsJSONFilePath = path.resolve(
+        __dirname,
+        "../../data/defaultFields.json"
+    );
+
+    if (params?.dbSchema) {
+        datasquirelSchema = params.dbSchema;
+    } else {
+        const { mainShemaJSONFilePath } = grabDirNames();
+
+        const mainSchema = EJSON.parse(
+            fs.readFileSync(mainShemaJSONFilePath, "utf-8")
+        ) as DSQL_DatabaseSchemaType[];
+
+        datasquirelSchema = mainSchema.find(
+            (sch) => sch.dbFullName == "datasquirel"
+        );
+    }
+
+    if (!datasquirelSchema) return;
+
+    let tableNames = `export const DsqlTables = [\n${datasquirelSchema.tables
+        .map((tbl) => `    "${tbl.tableName}",`)
+        .join("\n")}\n] as const`;
+
+    const defaultFields = EJSON.parse(
+        fs.readFileSync(defaultTableFieldsJSONFilePath, "utf-8")
+    ) as DSQL_FieldSchemaType[];
+
+    const dbTablesSchemas = datasquirelSchema.tables.map((tblSchm) => {
+        let newDefaultFields = _.cloneDeep(defaultFields);
+        return {
+            ...tblSchm,
+            fields: params?.dbSchema
+                ? tblSchm.fields
+                : [
+                      newDefaultFields.shift(),
+                      newDefaultFields.shift(),
+                      ...tblSchm.fields,
+                      ...newDefaultFields,
+                  ],
+        } as DSQL_TableSchemaType;
+    });
+
+    const schemas = dbTablesSchemas
+        .map((table) =>
+            generateTypeDefinition({
+                paradigm: "TypeScript",
+                table,
+                typeDefName: `DSQL_DATASQUIREL_${table.tableName.toUpperCase()}`,
+                allValuesOptional: true,
+                addExport: true,
+            })
+        )
+        .filter((schm) => typeof schm == "string");
+
+    return [tableNames, ...schemas];
+}
diff --git a/package-shared/functions/dsql/default-fields-regexp.ts b/package-shared/functions/dsql/default-fields-regexp.ts
new file mode 100644
index 0000000..aa5c987
--- /dev/null
+++ b/package-shared/functions/dsql/default-fields-regexp.ts
@@ -0,0 +1,16 @@
+// @ts-check
+
+/**
+ * Check for user in local storage
+ *
+ * @description Preventdefault, declare variables
+ */
+
+const defaultFieldsRegexp =
+    /^id$|^uuid$|^date_created$|^date_created_code$|^date_created_timestamp$|^date_updated$|^date_updated_code$|^date_updated_timestamp$/;
+
+////////////////////////////////////////
+////////////////////////////////////////
+////////////////////////////////////////
+
+export default defaultFieldsRegexp;
diff --git a/package-shared/functions/dsql/generate-type-definitions.ts b/package-shared/functions/dsql/generate-type-definitions.ts
new file mode 100644
index 0000000..7d426e9
--- /dev/null
+++ b/package-shared/functions/dsql/generate-type-definitions.ts
@@ -0,0 +1,87 @@
+import { DSQL_TableSchemaType } from "../../types";
+import defaultFieldsRegexp from "./default-fields-regexp";
+
+type Param = {
+    paradigm: "JavaScript" | "TypeScript" | undefined;
+    table: DSQL_TableSchemaType;
+    query?: any;
+    typeDefName?: string;
+    allValuesOptional?: boolean;
+    addExport?: boolean;
+};
+
+export default function generateTypeDefinition({
+    paradigm,
+    table,
+    query,
+    typeDefName,
+    allValuesOptional,
+    addExport,
+}: Param): string | null {
+    let typeDefinition: string | null = ``;
+
+    try {
+        const tdName =
+            typeDefName ||
+            `DSQL_${query.single}_${query.single_table}`.toUpperCase();
+
+        const fields = table.fields;
+
+        function typeMap(type: string) {
+            if (type?.match(/int/i)) {
+                return "number";
+            }
+            if (type?.match(/text|varchar|timestamp/i)) {
+                return "string";
+            }
+
+            return "string";
+        }
+
+        const typesArrayTypeScript = [];
+        const typesArrayJavascript = [];
+
+        typesArrayTypeScript.push(
+            `${addExport ? "export " : ""}type ${tdName} = {`
+        );
+        typesArrayJavascript.push(`/**\n * @typedef {object} ${tdName}`);
+
+        fields.forEach((field) => {
+            const nullValue = allValuesOptional
+                ? "?"
+                : field.nullValue
+                ? "?"
+                : field.fieldName?.match(defaultFieldsRegexp)
+                ? "?"
+                : "";
+
+            typesArrayTypeScript.push(
+                `    ${field.fieldName}${nullValue}: ${typeMap(
+                    field.dataType || ""
+                )};`
+            );
+
+            typesArrayJavascript.push(
+                ` * @property {${typeMap(field.dataType || "")}${nullValue}} ${
+                    field.fieldName
+                }`
+            );
+        });
+
+        typesArrayTypeScript.push(`}`);
+        typesArrayJavascript.push(` */`);
+
+        if (paradigm?.match(/javascript/i)) {
+            typeDefinition = typesArrayJavascript.join("\n");
+        }
+
+        if (paradigm?.match(/typescript/i)) {
+            typeDefinition = typesArrayTypeScript.join("\n");
+        }
+    } catch (error: any) {
+        console.log(error.message);
+        typeDefinition = null;
+    }
+
+    return typeDefinition;
+}
diff --git a/package.json b/package.json
index 0756444..4444014 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,12 @@
 {
     "name": "@moduletrace/datasquirel",
-    "version": "4.2.9",
+    "version": "4.3.0",
     "description": "Cloud-based SQL data management tool",
     "main": "dist/index.js",
     "bin": {
         "dsql-watch": "dist/engine/dsql.js",
-        "dsql-dump": "dist/engine/dump.js"
+        "dsql-dump": "dist/engine/dump.js",
+        "dsql-schema-to-typedef": "dist/engine/schema-to-typedef.js"
     },
     "scripts": {
         "dev": "tsc --watch"
@@ -41,6 +42,7 @@
         "dotenv": "^16.3.1",
         "generate-password": "^1.7.1",
         "google-auth-library": "^9.15.0",
+        "inquirer": "^12.5.2",
         "lodash": "^4.17.21",
         "mysql": "^2.18.1",
         "nodemailer": "^6.9.14",