@iobroker/create-adapter
Version:
Command line utility to create customized ioBroker adapters
121 lines • 4.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ansi_colors_1 = require("ansi-colors");
const packageVersions_1 = require("./packageVersions");
const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
async function checkMinSelections(category, min, answers) {
if (answers.length >= min)
return true;
return `Please enter at least ${min} ${category}`;
}
exports.checkMinSelections = checkMinSelections;
function isAdapterNameValid(name) {
if (!isNotEmpty(name)) {
return "Please enter a valid name!";
}
const forbiddenChars = /[^a-z0-9\-_]/g;
if (forbiddenChars.test(name)) {
return `The name may only consist of lowercase letters, numbers, "-" and "_"!`;
}
if (!/^[a-z]/.test(name)) {
return `The name must start with a letter!`;
}
if (!/[a-z0-9]$/.test(name)) {
return `The name must end with a letter or number!`;
}
return true;
}
async function checkAdapterExistence(name) {
try {
await packageVersions_1.fetchPackageVersion(`iobroker.${name}`);
return `The adapter ioBroker.${name} already exists!`;
}
catch (e) {
return true;
}
}
async function checkAdapterName(name, options) {
const validCheck = isAdapterNameValid(name);
if (typeof validCheck === "string")
return validCheck;
if (!options || !options.skipAdapterExistenceCheck) {
const existenceCheck = await checkAdapterExistence(name);
if (typeof existenceCheck === "string")
return existenceCheck;
}
return true;
}
exports.checkAdapterName = checkAdapterName;
function checkTitle(title) {
if (!isNotEmpty(title)) {
return "Please enter a title!";
}
if (/iobroker|adapter/i.test(title)) {
return `The title must not contain the words "ioBroker" or "adapter"!`;
}
return true;
}
exports.checkTitle = checkTitle;
function isNotEmpty(answer) {
return answer != undefined && answer.length > 0 && answer.trim().length > 0;
}
async function checkAuthorName(name) {
if (!isNotEmpty(name)) {
return "Please enter a valid name!";
}
return true;
}
exports.checkAuthorName = checkAuthorName;
async function checkEmail(email) {
if (!emailRegex.test(email)) {
return "Please enter a valid email address!";
}
return true;
}
exports.checkEmail = checkEmail;
async function checkTypeScriptTools(tools) {
if (tools.indexOf("Prettier") > -1 && tools.indexOf("ESLint") === -1) {
return "ESLint must be selected to use Prettier!";
}
return true;
}
exports.checkTypeScriptTools = checkTypeScriptTools;
function transformAdapterName(name) {
const startsWithIoBroker = /^ioBroker\./i;
if (startsWithIoBroker.test(name)) {
name = name.replace(startsWithIoBroker, "");
console.log(ansi_colors_1.yellow(`You don't have to prefix the name with "ioBroker."`));
}
return name;
}
exports.transformAdapterName = transformAdapterName;
function transformDescription(description) {
description = description.trim();
if (description.length === 0)
return undefined;
return description;
}
exports.transformDescription = transformDescription;
function transformKeywords(keywords) {
const keywordsArray = keywords
.trim()
.split(",")
.map(k => k.trim())
.filter(k => !!k);
if (keywordsArray.length === 0)
return undefined;
return keywordsArray;
}
exports.transformKeywords = transformKeywords;
function transformContributors(contributors) {
const contributorsArray = contributors
.trim()
.split(",")
.map(c => c.trim())
.filter(c => !!c);
if (contributorsArray.length === 0)
return undefined;
return contributorsArray;
}
exports.transformContributors = transformContributors;
//# sourceMappingURL=actionsAndTransformers.js.map