limgen
Version:
Infrastructure as Code generator
87 lines (86 loc) • 3.85 kB
JavaScript
;
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 });
exports.collectInput = exports.inputs = void 0;
const files_1 = require("../../files");
const docker_1 = require("../../docker");
const promises_1 = __importDefault(require("fs/promises"));
const inputs = (cmdArgs, projectInput) => __awaiter(void 0, void 0, void 0, function* () {
return [];
});
exports.inputs = inputs;
const collectInput = (cmdArgs, projectInput, frameworkArgs) => __awaiter(void 0, void 0, void 0, function* () {
return {};
});
exports.collectInput = collectInput;
function tanstackStartFramework(opts) {
return __awaiter(this, void 0, void 0, function* () {
yield Promise.all([
ensureDockerfile(opts),
ensureAppConfig(),
updateDockerignore()
]);
});
}
exports.default = tanstackStartFramework;
const updateDockerignore = () => __awaiter(void 0, void 0, void 0, function* () {
if (!(yield (0, files_1.fileExists)('.dockerignore'))) {
yield promises_1.default.writeFile('.dockerignore', '');
}
const contents = yield promises_1.default.readFile('.dockerignore', 'utf-8');
const depsToCheck = [
'node_modules',
'*.log',
'.vinxi',
'.git',
'.DS_Store',
'.output',
'/data',
];
const outputToAppend = depsToCheck.filter(dep => !contents.includes(dep)).join('\n');
if (outputToAppend.length === 0) {
return;
}
yield promises_1.default.appendFile('.dockerignore', `\n${outputToAppend}`);
});
const ensureDockerfile = (opts) => __awaiter(void 0, void 0, void 0, function* () {
if (yield (0, docker_1.dockerfileExists)()) {
return;
}
try {
yield promises_1.default.copyFile(`${__dirname}/Dockerfile`, 'Dockerfile');
}
catch (error) {
console.error('Unable to render Dockerfile', error);
throw error;
}
});
const ensureAppConfig = () => __awaiter(void 0, void 0, void 0, function* () {
const appConfigFile = 'app.config.ts';
let appConfig = yield promises_1.default.readFile(appConfigFile, 'utf-8');
const serverMatch = appConfig.match(/server: *{/);
if (!serverMatch) {
appConfig = appConfig.replace(/export default defineConfig\({/, `export default defineConfig({\n server: { preset: 'node-server' },\n`);
}
else {
const presetMatch = appConfig.match(/preset: *'(.+)'/);
if (presetMatch && (presetMatch === null || presetMatch === void 0 ? void 0 : presetMatch[1]) !== 'node-server') {
throw new Error(`Limgen support for Tanstack start is limited to the node-server preset. Current value is ${presetMatch[1]}`);
}
else if (!presetMatch) {
console.warn('Unable to find server preset in app.config.ts. You may need to update it manually.\n See https://tanstack.com/router/latest/docs/framework/react/start/hosting/#nodejs for more info');
}
}
yield promises_1.default.writeFile(appConfigFile, appConfig);
});