"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 (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var path = __importStar(require("path")); // import simmer from './simmer-def-example'; var ncp = require('ncp').ncp; var fs = __importStar(require("fs")); var example_def_1 = __importDefault(require("./example-def")); var outDir = 'test'; function createDatabase(storageDef) { var tableCreationQueries = []; var tableDeletionQueries = []; for (var i in storageDef.tables) { tableCreationQueries.push(getTableCreationString(storageDef.tables[i])); tableDeletionQueries.push(getTableDeletionString(storageDef.tables[i])); } for (var i in storageDef.relations) { tableCreationQueries.push(getTableRelationsCreationString(storageDef.relations[i])); tableDeletionQueries.push(getTableRelationsDeletionString(storageDef.relations[i])); } tableCreationQueries.map(function (query) { console.log(query); }); tableDeletionQueries.map(function (query) { console.log(query); }); return { up: tableCreationQueries, down: tableDeletionQueries, }; } function getTableCreationString(tableDef) { var primaryKeyString = tableDef.name + "_id VARCHAR(36) PRIMARY KEY"; var columnString = "" + primaryKeyString; var defaultColumns = "created DATETIME NOT NULL DEFAULT NOW(), modified DATETIME NOT NULL DEFAULT NOW()"; var indexString = ""; // columns for (var i in tableDef.columns) { var column = tableDef.columns[i]; columnString = columnString + ", " + createColumnString(column); } // relations for (var i in tableDef.relations) { var relation = tableDef.relations[i]; columnString = columnString + ", " + relation.table + "_id VARCHAR(36)"; } // default created & modified columnString = columnString + ", " + defaultColumns; return "CREATE TABLE IF NOT EXISTS " + tableDef.name + " (" + columnString + (indexString !== '' ? ', ' + indexString : '') + ");"; } function getTableDeletionString(tableDef) { return "DROP TABLE IF EXISTS " + tableDef.name + ";"; } function createColumnString(column) { var typeMap = { "blob": "BLOB", "boolean": "BOOLEAN", "date": "DATE", "dateTIME": "DATETIME", "number": "INT", "string": "VARCHAR(255)", }; return column.name + " " + typeMap[column.type] + (column.nullable ? '' : ' NOT NULL') + (column.default ? ' DEFAULT ' + column.default : '') + (column.autoIncrement ? ' AUTO_INCREMENT' : '') + (column.unique ? ' UNIQUE' : ''); } function getTableRelationsCreationString(relationsDef) { var columnString = relationsDef.left + "_id VARCHAR(36) NOT NULL, " + relationsDef.right + "_id VARCHAR(36) NOT NULL"; var indexString = "INDEX " + relationsDef.left + "_id_index (" + relationsDef.left + "_id), INDEX " + relationsDef.right + "_id_index (" + relationsDef.right + "_id)"; if (relationsDef.columns && relationsDef.columns.length) { for (var i in relationsDef.columns) { var column = relationsDef.columns[i]; columnString = columnString + ", " + createColumnString(column); } } return "CREATE TABLE IF NOT EXISTS " + relationsDef.left + "_" + relationsDef.right + " (" + columnString + (indexString !== '' ? ', ' + indexString : '') + ");"; } function getTableRelationsDeletionString(relationsDef) { return "DROP TABLE IF EXISTS " + relationsDef.left + "_" + relationsDef.right + ";"; } function dateString() { var date = new Date(); return "" + date.getFullYear() + (date.getMonth() + 1) + date.getDate(); } function writeMigrationsToFile(migrations) { var migrationFileContents = "\n--up\n" + migrations.up.join('\n') + "\n--down\n" + migrations.down.join('\n') + "\n "; var migrationFilePath = path.join(__dirname, outDir, 'src', 'migrationJobs', dateString() + "-create-database.sql"); fs.writeFileSync(migrationFilePath, migrationFileContents); } ncp(path.join(__dirname, 'frame'), path.join(__dirname, outDir), function (err) { if (err) { console.log(err); } else { console.log('success copying files'); var creationMigrations = createDatabase(example_def_1.default.storage); // let creationMigrations = createDatabase(simmer.storage); writeMigrationsToFile(creationMigrations); } });