76 lines
3.4 KiB
JavaScript
76 lines
3.4 KiB
JavaScript
"use strict";
|
|
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.fleshOutSkeleton = exports.getSkeleton = void 0;
|
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const os_1 = __importDefault(require("os"));
|
|
const path_1 = require("path");
|
|
const string_templates_1 = require("@budibase/string-templates");
|
|
const download = require("download");
|
|
const tar = require("tar");
|
|
const HBS_FILES = ["package.json.hbs", "schema.json.hbs", "README.md.hbs"];
|
|
function getSkeletonUrl(type) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const resp = yield (0, node_fetch_1.default)("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest");
|
|
if (resp.status >= 300) {
|
|
throw new Error("Failed to retrieve skeleton metadata");
|
|
}
|
|
const json = (yield resp.json());
|
|
for (let asset of json["assets"]) {
|
|
if (asset.name && asset.name.includes(type)) {
|
|
return asset["browser_download_url"];
|
|
}
|
|
}
|
|
throw new Error("No skeleton found in latest release.");
|
|
});
|
|
}
|
|
function getSkeleton(type, name) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const url = yield getSkeletonUrl(type);
|
|
const tarballFile = (0, path_1.join)(os_1.default.tmpdir(), "skeleton.tar.gz");
|
|
// download the full skeleton tarball
|
|
fs_1.default.writeFileSync(tarballFile, yield download(url));
|
|
fs_1.default.mkdirSync(name);
|
|
// extract it and get what we need
|
|
yield tar.extract({
|
|
file: tarballFile,
|
|
C: name,
|
|
});
|
|
// clear up
|
|
fs_1.default.rmSync(tarballFile);
|
|
});
|
|
}
|
|
exports.getSkeleton = getSkeleton;
|
|
function fleshOutSkeleton(type, name, description, version) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
for (let file of HBS_FILES) {
|
|
const oldFile = (0, path_1.join)(name, file), newFile = (0, path_1.join)(name, file.substring(0, file.length - 4));
|
|
const hbsContents = fs_1.default.readFileSync(oldFile, "utf8");
|
|
if (!hbsContents) {
|
|
continue;
|
|
}
|
|
const output = (0, string_templates_1.processStringSync)(hbsContents, {
|
|
name,
|
|
description,
|
|
version,
|
|
});
|
|
// write the updated file and remove the HBS file
|
|
fs_1.default.writeFileSync(newFile, output);
|
|
fs_1.default.rmSync(oldFile);
|
|
}
|
|
});
|
|
}
|
|
exports.fleshOutSkeleton = fleshOutSkeleton;
|