@keybittech/awayto
Version:
Deploy a fully-featured application in about 10 minutes that is primed for quick development. Do business, impress a client with a quick demo, finish your poc with time to spare; all easily achievable with Awayto.
58 lines (47 loc) • 1.82 kB
JavaScript
import fs from 'fs/promises';
import path from 'path';
import { asyncForEach, ask, makeLambdaPayload } from './tool.mjs';
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';
const lamClient = new LambdaClient();
const dbUpdate = async function (props = {}) {
let install = !!Object.keys(props).length;
if (!install) {
props = {
awaytoId: await ask('Awayto Id:\n> ')
}
}
try {
const __dirname = path.dirname(await fs.realpath(new URL(import.meta.url)));
const sqlFilePath = path.join(__dirname, '../src/api/scripts');
const seedPath = path.join(__dirname, `./data/seeds/${props.awaytoId}.json`);
const files = await fs.readdir(sqlFilePath);
const awaytoConfig = JSON.parse(await fs.readFile(seedPath));
if (!awaytoConfig.scripts) awaytoConfig.scripts = {}
await asyncForEach(files, async f => {
if (f.includes('sql') && !awaytoConfig.scripts[f]) {
awaytoConfig.scripts[f] = await fs.readFile(path.join(sqlFilePath, f), { encoding: 'utf-8' });
console.log('Deploying sql script:', f);
await lamClient.send(new InvokeCommand({
FunctionName: awaytoConfig.functionName,
InvocationType: 'Event',
Payload: makeLambdaPayload({
"httpMethod": "POST",
"resource": "/{proxy+}",
"pathParameters": {
"proxy": "deploy"
},
"script": awaytoConfig.scripts[f]
})
}));
}
});
await fs.writeFile(seedPath, JSON.stringify(awaytoConfig));
} catch (error) {
console.log('Error deploying db scripts:', error);
}
if (!install) process.exit();
};
export default dbUpdate;
if (process.argv[2] == "--local") {
dbUpdate()
}