116 lines
9.3 KiB
JavaScript
116 lines
9.3 KiB
JavaScript
|
|
"use strict";
|
||
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
|
};
|
||
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
|
exports.createMigration = exports.createZPM = void 0;
|
||
|
|
const fs_1 = require("fs");
|
||
|
|
const path_1 = __importDefault(require("path"));
|
||
|
|
const os_1 = __importDefault(require("os"));
|
||
|
|
const skeleton = {
|
||
|
|
"name": "PackageName",
|
||
|
|
"version": "0.1.0",
|
||
|
|
"vendor": "Center for Digital Resilience",
|
||
|
|
"license": "AGPL-v3+",
|
||
|
|
"url": "https://gitlab.com/digiresilience/link/zammad-addon-package-name",
|
||
|
|
"buildhost": "",
|
||
|
|
"builddate": "",
|
||
|
|
"change_log": [
|
||
|
|
{
|
||
|
|
"version": "0.0.1",
|
||
|
|
"date": "2020-02-11",
|
||
|
|
"log": "Some changes"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"description": [
|
||
|
|
{
|
||
|
|
"language": "en",
|
||
|
|
"text": "Change me"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"files": []
|
||
|
|
};
|
||
|
|
const packageFile = async (actualPath) => {
|
||
|
|
console.log(`Packaging: ${actualPath}`);
|
||
|
|
const packagePath = actualPath.slice(6);
|
||
|
|
const data = await fs_1.promises.readFile(actualPath, "utf-8");
|
||
|
|
const content = Buffer.from(data, "utf-8").toString("base64");
|
||
|
|
const fileStats = await fs_1.promises.stat(actualPath);
|
||
|
|
const permission = parseInt((fileStats.mode & 0o777).toString(8).slice(-3), 10);
|
||
|
|
return {
|
||
|
|
location: packagePath,
|
||
|
|
permission,
|
||
|
|
encode: "base64",
|
||
|
|
content,
|
||
|
|
};
|
||
|
|
};
|
||
|
|
const packageFiles = async () => {
|
||
|
|
const packagedFiles = [];
|
||
|
|
const ignoredPatterns = [/\.gitkeep/];
|
||
|
|
const processDir = async (dir) => {
|
||
|
|
const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
|
||
|
|
for (const entry of entries) {
|
||
|
|
const entryPath = path_1.default.join(dir, entry.name);
|
||
|
|
if (entry.isDirectory()) {
|
||
|
|
await processDir(entryPath);
|
||
|
|
}
|
||
|
|
else if (entry.isFile()) {
|
||
|
|
if (!ignoredPatterns.some((pattern) => pattern.test(entry.name))) {
|
||
|
|
packagedFiles.push(await packageFile(entryPath));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
await processDir("./src/");
|
||
|
|
return packagedFiles;
|
||
|
|
};
|
||
|
|
const underscore = (str) => {
|
||
|
|
return str
|
||
|
|
.replace(/([a-z\d])([A-Z])/g, "$1_$2")
|
||
|
|
.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1_$2")
|
||
|
|
.toLowerCase();
|
||
|
|
};
|
||
|
|
const camelize = (str) => {
|
||
|
|
const camelizedStr = str.replace(/_([a-z])/g, (g) => g[1].toUpperCase());
|
||
|
|
return camelizedStr.charAt(0).toUpperCase() + camelizedStr.slice(1);
|
||
|
|
};
|
||
|
|
const createZPM = async () => {
|
||
|
|
const files = await packageFiles();
|
||
|
|
skeleton.files = files;
|
||
|
|
skeleton.builddate = new Date().toISOString();
|
||
|
|
skeleton.buildhost = os_1.default.hostname();
|
||
|
|
const name = skeleton.name.toLowerCase();
|
||
|
|
const version = skeleton.version;
|
||
|
|
const pkg = JSON.stringify(skeleton, null, 2);
|
||
|
|
await fs_1.promises.writeFile(`dist/${name}-v${version}.zpm`, pkg, 'utf-8');
|
||
|
|
};
|
||
|
|
exports.createZPM = createZPM;
|
||
|
|
const createMigration = async () => {
|
||
|
|
const name = skeleton["name"].toLowerCase();
|
||
|
|
const rawName = await new Promise((resolve) => {
|
||
|
|
process.stdin.setEncoding("utf-8");
|
||
|
|
process.stdout.write("Enter migration name: ");
|
||
|
|
process.stdin.once("data", (data) => {
|
||
|
|
resolve(data.trim());
|
||
|
|
});
|
||
|
|
});
|
||
|
|
const migrationBaseName = `${name}_${underscore(rawName)}`;
|
||
|
|
const migrationName = camelize(migrationBaseName);
|
||
|
|
const migrationTemplate = `class MIGRATION_NAME < ActiveRecord::Migration[5.2]
|
||
|
|
def self.up
|
||
|
|
# add your code here
|
||
|
|
end
|
||
|
|
|
||
|
|
def self.down
|
||
|
|
# add your code here
|
||
|
|
end
|
||
|
|
end`;
|
||
|
|
const contents = migrationTemplate.replace("MIGRATION_NAME", migrationName);
|
||
|
|
const time = new Date().toISOString().replace(/[-:.]/g, "").slice(0, 14);
|
||
|
|
const migrationFileName = `${time}_${migrationBaseName}.rb`;
|
||
|
|
const addonDir = path_1.default.join("src", "db", "addon", skeleton["name"]);
|
||
|
|
await fs_1.promises.mkdir(addonDir, { recursive: true });
|
||
|
|
await fs_1.promises.writeFile(path_1.default.join(addonDir, migrationFileName), contents);
|
||
|
|
};
|
||
|
|
exports.createMigration = createMigration;
|
||
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBb0M7QUFDcEMsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUVwQixNQUFNLFFBQVEsR0FBd0I7SUFDcEMsTUFBTSxFQUFFLGFBQWE7SUFDckIsU0FBUyxFQUFFLE9BQU87SUFDbEIsUUFBUSxFQUFFLCtCQUErQjtJQUN6QyxTQUFTLEVBQUUsVUFBVTtJQUNyQixLQUFLLEVBQUUsa0VBQWtFO0lBQ3pFLFdBQVcsRUFBRSxFQUFFO0lBQ2YsV0FBVyxFQUFFLEVBQUU7SUFDZixZQUFZLEVBQUU7UUFDWjtZQUNFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEtBQUssRUFBRSxjQUFjO1NBQ3RCO0tBQ0Y7SUFDRCxhQUFhLEVBQUU7UUFDYjtZQUNFLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxXQUFXO1NBQ3BCO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsVUFBa0IsRUFBZ0IsRUFBRTtJQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlELE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUs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
|