UNPKG

@calljmp/cli

Version:
2 lines (1 loc) 4.16 kB
"use strict";var C=Object.create;var g=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var k=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},u=(e,t,r,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of S(t))!R.call(e,i)&&i!==r&&g(e,i,{get:()=>t[i],enumerable:!(c=P(t,i))||c.enumerable});return e};var l=(e,t,r)=>(r=e!=null?C(M(e)):{},u(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),x=e=>u(g({},"__esModule",{value:!0}),e);var z={};k(z,{default:()=>L});module.exports=x(z);var p=require("commander"),d=l(require("../../config")),f=l(require("ora")),o=l(require("chalk")),w=l(require("fs/promises")),y=l(require("path")),m=l(require("../../logger")),I=l(require("../../server")),D=require("../../build"),T=l(require("./schema")),v=require("../../database"),s=require("./migration");const O=()=>new p.Command("reset").description("Reset the database").addOption(d.ConfigOptions.ProjectDirectory).action(async e=>{const t=await(0,d.default)(e),r=(0,f.default)(o.default.yellow("Resetting database...")).start();try{const c=await w.default.readdir(t.data).catch(()=>[]);for(const i of c){const n=y.default.join(t.data,i);(await w.default.stat(n)).isDirectory()&&i.includes("D1Database")&&await w.default.rm(n,{recursive:!0,force:!0})}r.succeed(o.default.green("Database reset."))}catch{r.fail(o.default.red("Failed to reset database!"))}});function A(e,t){return t.concat([e])}const F=()=>new p.Command("pull").description("Pull the database from the server").addOption(d.ConfigOptions.ProjectDirectory).option("--migrations-table [table]","Migrations table name",s.MIGRATION_TABLE).option("--table-data [table]","Table data to pull",A,[]).action(async e=>{const t=await(0,d.default)(e);(!t.accessToken||!t.projectId)&&(m.default.error(o.default.red("Project is not linked. Please run `setup` command first.")),process.exit(1));const r=new v.Database({baseUrl:t.baseUrl,accessToken:t.accessToken,projectId:t.projectId}),c=[];{const n=(0,f.default)(o.default.yellow("Retrieving database schema...")).start();try{const a=await r.retrieveSchema();c.push(...a),n.succeed(o.default.green("Database schema retrieved."))}catch(a){n.fail(o.default.red("Failed to retrieve database schema!")),m.default.error(a),process.exit(1)}}{const n=[{table:e.migrationsTable,label:"migrations"},...e.tableData.map(a=>({table:a,label:a}))];for(const a of n){const b=(0,f.default)(o.default.yellow(`Retrieving table data for ${a.label}...`)).start();try{const h=await r.query(`SELECT * FROM ${a.table}`),j=(0,s.dataToInsertStatements)(a.table,h.rows);c.push(...j),b.succeed(o.default.green(`Table data for ${a.label} retrieved.`))}catch(h){a.label==="migrations"?b.info(o.default.dim("Skipping migrations table data.")):(b.fail(o.default.red(`Failed to retrieve table data for ${a.label}!`)),m.default.error(h),process.exit(1))}}}const i=await I.create({script:await(0,D.build)({entryPoints:t.entry,debug:!0}),database:t.data});try{await i.ready;const n=(0,f.default)(o.default.yellow("Synchronizing database...")).start();try{const a=await i.getD1Database("DATABASE");await a.batch(c.map(b=>a.prepare(b))),n.succeed(o.default.green("Database synchronized."))}catch(a){n.fail(o.default.red("Failed to synchronize database!")),m.default.error(a),process.exit(1)}}finally{await i.dispose()}}),$=()=>new p.Command("migrate").description("Migrate the database").addOption(d.ConfigOptions.ProjectDirectory).option("--migrations-table [table]","Migrations table name",s.MIGRATION_TABLE).option("--remote","Migrate the database to the remote server").action(async e=>{const t=await(0,d.default)(e),r=await(0,s.collectMigrations)(t);r.length===0&&(m.default.warn(o.default.yellow(`No SQL migrations found in ./${y.default.relative(t.project,t.migrations)} directory`)),process.exit(1)),e.remote?await(0,s.migrateRemote)(t,e.migrationsTable,r):await(0,s.migrateLocal)(t,e.migrationsTable,r)}),E=()=>new p.Command("database").description("Configure the database").addCommand((0,T.default)()).addCommand($()).addCommand(O()).addCommand(F());var L=E;