node-red
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// This script can be used to build custom colour-scheme css files.
|
||||
//
|
||||
// 1. Create a copy of packages/node_modules/@node-red/editor-client/src/sass/colors.scss
|
||||
// and change the values to the desired colours.
|
||||
//
|
||||
// 2. Run this script, providing the path to the custom file using the --in option
|
||||
//
|
||||
// 3. Save the output of the script to a file - either redirect its output,
|
||||
// or use the --out option.
|
||||
//
|
||||
// 4. Edit your settings file to set the theme:
|
||||
// editorTheme: {
|
||||
// page: {
|
||||
// css: '/path/to/file/generated/by/this/script'
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// 5. Restart Node-RED
|
||||
//
|
||||
|
||||
|
||||
|
||||
const os = require('os');
|
||||
const nopt = require('nopt');
|
||||
const path = require('path');
|
||||
const fs = require('fs-extra');
|
||||
const sass = require('sass');
|
||||
|
||||
const knownOpts = {
|
||||
'help': Boolean,
|
||||
'long': Boolean,
|
||||
'in': [path],
|
||||
'out': [path]
|
||||
};
|
||||
const shortHands = {
|
||||
'?':['--help']
|
||||
};
|
||||
nopt.invalidHandler = function(k,v,t) {}
|
||||
|
||||
const parsedArgs = nopt(knownOpts,shortHands,process.argv,2)
|
||||
|
||||
if (parsedArgs.help) {
|
||||
showUsageAndExit(0)
|
||||
}
|
||||
|
||||
if (!parsedArgs.in) {
|
||||
console.warn('Missing argument: in')
|
||||
showUsageAndExit(1)
|
||||
}
|
||||
|
||||
(async function() {
|
||||
const tmpDir = os.tmpdir();
|
||||
const workingDir = await fs.mkdtemp(`${tmpDir}${path.sep}`);
|
||||
|
||||
await fs.copy(path.join(__dirname, '../packages/node_modules/@node-red/editor-client/src/sass/'), workingDir);
|
||||
await fs.copyFile(parsedArgs.in, path.join(workingDir,'colors.scss'));
|
||||
|
||||
const output = sass.compile(
|
||||
path.join(workingDir, 'style-custom-theme.scss'),
|
||||
{style: parsedArgs.long === true ? 'expanded' : 'compressed'}
|
||||
);
|
||||
|
||||
const nrPkg = require('../package.json');
|
||||
const now = new Date().toISOString();
|
||||
const header = `/*\n* Theme generated with Node-RED ${nrPkg.version} on ${now}\n*/`;
|
||||
|
||||
if (parsedArgs.out) {
|
||||
await fs.writeFile(parsedArgs.out, header+'\n'+output.css);
|
||||
} else {
|
||||
console.log(header);
|
||||
console.log(output.css.toString());
|
||||
}
|
||||
|
||||
await fs.remove(workingDir);
|
||||
})()
|
||||
|
||||
function showUsageAndExit (exitCode) {
|
||||
console.log('');
|
||||
console.log('Usage: build-custom-theme [-?] [--in FILE] [--out FILE]');
|
||||
console.log('');
|
||||
console.log('Options:');
|
||||
console.log(' --in FILE Custom colors sass file');
|
||||
console.log(' --out FILE Where you write the result');
|
||||
console.log(' --long Do not compress the output');
|
||||
console.log(' -?, --help Show this help');
|
||||
console.log('');
|
||||
process.exit(exitCode);
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const path = require("path");
|
||||
const fs = require("fs-extra");
|
||||
const should = require("should");
|
||||
|
||||
const LATEST = "4";
|
||||
|
||||
function generateScript() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const packages = [
|
||||
"@node-red/util",
|
||||
"@node-red/runtime",
|
||||
"@node-red/registry",
|
||||
"@node-red/nodes",
|
||||
"@node-red/editor-client",
|
||||
"@node-red/editor-api",
|
||||
"node-red"
|
||||
];
|
||||
const rootPackage = require(path.join(__dirname,"..","package.json"));
|
||||
const version = rootPackage.version;
|
||||
|
||||
const versionParts = version.split(".");
|
||||
let updateNextToLatest = false;
|
||||
let tagArg = "";
|
||||
if (versionParts[0] !== LATEST) {
|
||||
tagArg = `--tag v${versionParts[0]}-maintenance`
|
||||
} else if (/-/.test(version)) {
|
||||
tagArg = "--tag next"
|
||||
} else {
|
||||
updateNextToLatest = true;
|
||||
}
|
||||
|
||||
const lines = [];
|
||||
|
||||
packages.forEach(name => {
|
||||
const tarName = name.replace(/@/,"").replace(/\//,"-")
|
||||
lines.push(`npm publish ${tarName}-${version}.tgz ${tagArg}\n`);
|
||||
})
|
||||
if (updateNextToLatest) {
|
||||
packages.forEach(name => {
|
||||
lines.push(`npm dist-tag add ${name}@${version} next\n`);
|
||||
})
|
||||
}
|
||||
resolve(lines.join(""))
|
||||
});
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
generateScript().then(output => {
|
||||
console.log(output);
|
||||
});
|
||||
} else {
|
||||
module.exports = generateScript;
|
||||
}
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
npm install --no-save \
|
||||
grunt-webdriver@^2.0.3 \
|
||||
wdio-chromedriver-service@^0.1.5 \
|
||||
wdio-mocha-framework@^0.6.4 \
|
||||
wdio-spec-reporter@^0.1.5 \
|
||||
webdriverio@^4.14.4 \
|
||||
chromedriver \
|
||||
wdio-browserstack-service@^0.1.19 \
|
||||
browserstack-local@^1.4.4 \
|
||||
mosca@^2.8.3
|
||||
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const path = require("path");
|
||||
const fs = require("fs-extra");
|
||||
const should = require("should");
|
||||
|
||||
const rootPackage = path.join(__dirname,"..","package.json");
|
||||
const packages = [
|
||||
"node-red",
|
||||
"@node-red/editor-api",
|
||||
"@node-red/editor-client",
|
||||
"@node-red/nodes",
|
||||
"@node-red/registry",
|
||||
"@node-red/runtime",
|
||||
"@node-red/util"
|
||||
];
|
||||
function updatePackage(packageFile, version) {
|
||||
let modulePackage = require(packageFile);
|
||||
modulePackage.version = version;
|
||||
let dependencies = Object.keys(modulePackage.dependencies||{});
|
||||
dependencies.forEach(module => {
|
||||
if (/^@node-red\//.test(module)) {
|
||||
modulePackage.dependencies[module] = version;
|
||||
}
|
||||
});
|
||||
return fs.writeJSON(packageFile,modulePackage,{spaces:4});
|
||||
}
|
||||
|
||||
const targetVersion = process.argv[2];
|
||||
|
||||
if (/^\d+\.\d+\.\d+(-.*)?/.test(targetVersion)) {
|
||||
let promises = [];
|
||||
promises.push(updatePackage(rootPackage,targetVersion));
|
||||
packages.forEach(package => {
|
||||
promises.push(updatePackage(path.join(__dirname,"../packages/node_modules",package,"package.json"),targetVersion))
|
||||
});
|
||||
Promise.all(promises).catch(e => {
|
||||
console.log(e);
|
||||
process.exit(1);
|
||||
})
|
||||
} else {
|
||||
console.log("Invalid target version");
|
||||
process.exit(1);
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const path = require("path");
|
||||
const fs = require("fs-extra");
|
||||
const should = require("should");
|
||||
|
||||
const rootPackage = require(path.join("..","package.json"));
|
||||
const packages = [
|
||||
"node-red",
|
||||
"@node-red/editor-api",
|
||||
"@node-red/editor-client",
|
||||
"@node-red/nodes",
|
||||
"@node-red/registry",
|
||||
"@node-red/runtime",
|
||||
"@node-red/util"
|
||||
];
|
||||
|
||||
const fixFlag = process.argv[2] === '--fix';
|
||||
|
||||
async function verifyDependencies(depType = 'dependencies') {
|
||||
const rootDependencies = rootPackage[depType];
|
||||
|
||||
let failures = [];
|
||||
let packageUpdates = {};
|
||||
packages.forEach(package => {
|
||||
let modulePackage = require(path.join("../packages/node_modules",package,"package.json"));
|
||||
let dependencies = Object.keys(modulePackage[depType]||{});
|
||||
dependencies.forEach(module => {
|
||||
try {
|
||||
if (!/^@node-red\//.test(module)) {
|
||||
should.exist(rootDependencies[module],`[${package}] '${module}' missing from root package.json ${depType}`);
|
||||
try {
|
||||
rootDependencies[module].should.eql(modulePackage[depType][module],`[${package}] '${module}' version mismatch. Expected '${modulePackage.dependencies[module]}' (got '${rootDependencies[module]}') in ${depType} `);
|
||||
} catch(err) {
|
||||
if (fixFlag) {
|
||||
modulePackage[depType][module] = rootDependencies[module];
|
||||
packageUpdates[package] = modulePackage;
|
||||
} else {
|
||||
failures.push(err.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(err) {
|
||||
failures.push(err.toString());
|
||||
}
|
||||
});
|
||||
})
|
||||
if (failures.length === 0 && fixFlag) {
|
||||
var promises = [];
|
||||
packages.forEach(package => {
|
||||
if (packageUpdates.hasOwnProperty(package)) {
|
||||
promises.push(fs.writeJSON(path.join(__dirname,"../packages/node_modules",package,"package.json"),packageUpdates[package],{spaces:4}));
|
||||
}
|
||||
});
|
||||
return Promise.all(promises).then(r => []).catch(e => {
|
||||
console.log(e);
|
||||
process.exit(1);
|
||||
})
|
||||
} else {
|
||||
return failures;
|
||||
}
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
let failures = []
|
||||
verifyDependencies('dependencies').then(depFailures => {
|
||||
failures = failures.concat(depFailures)
|
||||
return verifyDependencies('optionalDependencies')
|
||||
}).then(optDepFailures => {
|
||||
failures = failures.concat(optDepFailures)
|
||||
if (failures.length > 0) {
|
||||
failures.forEach(f => console.log(` - ${f}`));
|
||||
console.log("Run with --fix option to fix up versions")
|
||||
process.exit(1);
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
process.exit(1);
|
||||
});
|
||||
} else {
|
||||
module.exports = verifyDependencies;
|
||||
}
|
||||
Reference in New Issue
Block a user