|
|
// import {
|
|
|
// Binary,
|
|
|
// BSON,
|
|
|
// BSONType,
|
|
|
// Decimal128,
|
|
|
// MongoClient,
|
|
|
// ObjectId,
|
|
|
// } from "npm:mongodb";
|
|
|
|
|
|
// interface Schema {
|
|
|
// [key: string]: {
|
|
|
// type: string;
|
|
|
// required: boolean;
|
|
|
// };
|
|
|
// }
|
|
|
|
|
|
// interface MongoTypeMap {
|
|
|
// String: string;
|
|
|
// Integer: number;
|
|
|
// Double: number;
|
|
|
// Decimal128: number;
|
|
|
// Object: object;
|
|
|
// Array: any[];
|
|
|
// Binary: Uint8Array;
|
|
|
// Timestamp: Date;
|
|
|
// Date: Date;
|
|
|
// ObjectId: string;
|
|
|
// Boolean: boolean;
|
|
|
// }
|
|
|
|
|
|
// type MongoTypeKeys = keyof MongoTypeMap;
|
|
|
// function getFieldTypeFromValue(value: unknown): Record<string, unknown> {
|
|
|
// if (value instanceof ObjectId) {
|
|
|
// return ObjectId;
|
|
|
// }
|
|
|
// if (value instanceof Date) {
|
|
|
// return Date;
|
|
|
// }
|
|
|
// if (value instanceof Decimal128) {
|
|
|
// return Number;
|
|
|
// }
|
|
|
// if (value instanceof Binary) {
|
|
|
// return "Binary";
|
|
|
// }
|
|
|
// if (Array.isArray(value)) {
|
|
|
// const [firstElem] = value;
|
|
|
// const innerType = getFieldTypeFromValue(firstElem);
|
|
|
// return `${innerType}[]`;
|
|
|
// }
|
|
|
// if (typeof value === "object" && value !== null) {
|
|
|
// const keys = Object.keys(value);
|
|
|
// const innerTypes = keys.map((key) => {
|
|
|
// const innerValue = value[key];
|
|
|
// const innerType = getFieldTypeFromValue(innerValue);
|
|
|
// return `${key}: ${innerType}`;
|
|
|
// });
|
|
|
// return `{ ${innerTypes.join(", ")} }`;
|
|
|
// }
|
|
|
// return typeof value;
|
|
|
// }
|
|
|
|
|
|
// function mongoSchemaToType(schema: Record<string, string>): string {
|
|
|
// const fields: Record<string, (string[] | string)> = {};
|
|
|
|
|
|
// for (const [key, value] of Object.entries(schema)) {
|
|
|
// console.log(
|
|
|
// "🚀 ~ file: convert_types.ts:105 ~ mongoSchemaToType ~ value:",
|
|
|
// value,
|
|
|
// );
|
|
|
// if (Array.isArray(value)) {
|
|
|
// fields[key] = "Array";
|
|
|
|
|
|
// if (value.length > 0) {
|
|
|
// const subType = getFieldTypeFromValue(value[0]);
|
|
|
// if (subType === "Object") {
|
|
|
// fields[key] = [mongoSchemaToType(value[0])];
|
|
|
// } else {
|
|
|
// fields[key] = [subType];
|
|
|
// }
|
|
|
// }
|
|
|
// // } else if (typeof value === "object" && value !== null) {
|
|
|
// // fields[key] = "Object";
|
|
|
// // fields[key] = mongoSchemaToType(value);
|
|
|
// } else {
|
|
|
// const fieldType = getFieldTypeFromValue(value);
|
|
|
// fields[key] = fieldType;
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// return fields;
|
|
|
// }
|
|
|
|
|
|
// async function getSchemaFromCollection(
|
|
|
// uri: string,
|
|
|
// dbName: string,
|
|
|
// collectionName: string,
|
|
|
// sampleSize = 1000,
|
|
|
// ): Promise<Schema> {
|
|
|
// const client = new MongoClient(uri);
|
|
|
// await client.connect();
|
|
|
// const db = client.db(dbName);
|
|
|
// const collection = db.collection(collectionName);
|
|
|
// const stats = await db.command({ collStats: collectionName });
|
|
|
// console.log(
|
|
|
// "🚀 ~ file: convert_types.ts:56 ~ getSchemaFromCollection ~ stats:",
|
|
|
// stats,
|
|
|
// );
|
|
|
// // Alanların tiplerini elde et
|
|
|
// const fieldTypes: { [key: string]: string } = {};
|
|
|
// for (const key in stats["fields"]) {
|
|
|
// const fieldStats = stats["fields"][key];
|
|
|
// fieldTypes[key] = fieldStats["type"];
|
|
|
// }
|
|
|
|
|
|
// const sampleDocs = await collection.aggregate([{
|
|
|
// $sample: { size: sampleSize },
|
|
|
// }]).toArray();
|
|
|
// // console.log("🚀 ~ file: convert_types.ts:16 ~ getSchemaFromCollection ~ sampleDocs:", sampleDocs)
|
|
|
// await client.close();
|
|
|
// const schema: Record<string, BSON.Document> = {};
|
|
|
// sampleDocs.forEach((doc) => {
|
|
|
// Object.entries(doc).forEach(([key, value]) => {
|
|
|
// schema[key] = value;
|
|
|
// });
|
|
|
// });
|
|
|
// return schema;
|
|
|
// }
|
|
|
|
|
|
// // Usage example
|
|
|
// getSchemaFromCollection(
|
|
|
// "mongodb://127.0.0.1:27017",
|
|
|
// "mestgps",
|
|
|
// "takip_gps_yeni",
|
|
|
// ).then((schema) => {
|
|
|
// const data = mongoSchemaToType(schema);
|
|
|
// for (const prop in data) {
|
|
|
// console.log("ccc", data[prop], typeof data[prop]);
|
|
|
// if (typeof data[prop] === "string") {
|
|
|
// data[prop] = data[prop].replace(/^"(.*)"$/, "$1").replace(
|
|
|
// /^'(.*)'$/,
|
|
|
// "$1",
|
|
|
// );
|
|
|
// }
|
|
|
// }
|
|
|
// console.log(data);
|
|
|
|
|
|
// // const schema = {};
|
|
|
|
|
|
// // console.log(schema);
|
|
|
// // console.log(interfaceCode);
|
|
|
// });
|