🚚 Add command-line scripts from ssn repo

This commit is contained in:
C-3PO 2018-10-19 01:10:21 +02:00
parent d37a12eac8
commit e46faff11b
Signed by: c3po
GPG key ID: 62993C4BB4D86F24
10 changed files with 160 additions and 6 deletions

7
src/failWithError.ts Normal file
View file

@ -0,0 +1,7 @@
export default function failWithError(usage: string, msg?: string) {
if (msg !== undefined) {
process.stderr.write(`Error: ${msg.trim()}\n`);
}
process.stderr.write(`Usage: ${usage} \n`);
process.exit(1);
}

20
src/getManifest.ts Normal file
View file

@ -0,0 +1,20 @@
import { getManifest, IManifest, Product, verifyProductName } from 'ssn';
import failWithError from './failWithError';
const failFunction = failWithError.bind(null, 'node dist/getManifest.js <product>');
if (process.argv.length !== 3) {
failFunction(`Expected 1 argument but ${process.argv.length - 2} arguments were supplied.`);
}
//Check that product name is valid
const product = process.argv[2];
if (!verifyProductName(product)) {
failFunction(`"${product} is not a valid product name.`);
}
//Get manifest and write output to stdout
getManifest(product as Product).then((output: IManifest) => {
process.stdout.write(JSON.stringify(output));
//process.exit(0);
});

30
src/getSolidpkg.ts Normal file
View file

@ -0,0 +1,30 @@
import { getSolidpkg, ISolidSimple, Product, verifyProductName } from 'ssn';
import failWithError from './failWithError';
const failFunction = failWithError.bind(null, 'node dist/getSolidpkg.js <product> <from> <to>');
if (process.argv.length !== 5) {
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
}
//Check that product name is valid
const product = process.argv[2];
if (!verifyProductName(product)) {
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
}
//Check that from and to are valid numbers
const from = process.argv[3];
const to = process.argv[4];
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
}
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
}
//Get solidpkg and write output to stdout
getSolidpkg(product as Product, Number(from), Number(to)).then((output: ISolidSimple) => {
process.stdout.write(JSON.stringify(output));
//process.exit(0);
});

30
src/getSolidpkgZip.ts Normal file
View file

@ -0,0 +1,30 @@
import { getSolidpkgZip, ISsnFileEntry, Product, verifyProductName } from 'ssn';
import failWithError from './failWithError';
const failFunction = failWithError.bind(null, 'node dist/getSolidpkgZip.js <product> <from> <to>');
if (process.argv.length !== 5) {
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
}
//Check that product name is valid
const product = process.argv[2];
if (!verifyProductName(product)) {
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
}
//Check that from and to are valid numbers
const from = process.argv[3];
const to = process.argv[4];
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
}
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
}
//Get solidpkg's .zip file and write output to stdout
getSolidpkgZip(product as Product, Number(from), Number(to)).then((output: ISsnFileEntry[]) => {
process.stdout.write(JSON.stringify(output));
//process.exit(0);
});

View file

@ -1 +0,0 @@
//TODO

43
src/installPatch.ts Normal file
View file

@ -0,0 +1,43 @@
import { getPatch, Product, verifyProductName } from 'ssn';
import failWithError from './failWithError';
const failFunction = failWithError.bind(null, 'node dist/installPatch.js <product> <from> <to>');
if (process.argv.length !== 5) {
failFunction(`Expected 3 arguments but ${process.argv.length - 2} arguments were supplied.`);
}
//Check that product name is valid
const product = process.argv[2];
if (!verifyProductName(product)) {
failFunction(`"${product.substring(0, 300)}" is not a valid product name.`);
}
//Check that from and to are valid numbers
const from = process.argv[3];
const to = process.argv[4];
if (!from.match(/^(-1|0|[1-9][0-9]{0,2})$/)) {
failFunction(`from value "${from.substring(0, 300)}" is not a valid integer; it must be in range [-1, 999].`);
}
if (!to.match(/^(0|[1-9][0-9]{0,2})$/)) {
failFunction(`to value "${to.substring(0, 300)}" is not a valid integer; it must be in range [0, 999].`);
}
//TODO: set directory with existing patch data
//TODO: set target directory where patch should be installed
//TODO: set temp directory where patch files should be stored.
//TODO: set location of xdelta3 executable
//TODO: set from=any so it detects current version automatically (based on .version files)
//TODO: set to=manifest/current to install whatever is the current version in manifest/on CDN
(async () => {
await getPatch({
/* tslint:disable:object-literal-sort-keys */
product: product as Product,
from: Number(from),
to: Number(to),
sourceDirectory: process.cwd(),
targetDirectory: process.cwd(),
/* tslint:enable:object-literal-sort-keys */
});
})();

16
src/tslint.json Normal file
View file

@ -0,0 +1,16 @@
{
"defaultSeverity": "error",
"extends": [
"tslint:recommended"
],
"jsRules": {},
"rules": {
"comment-format": false,
"indent": [true, "spaces", 2],
"max-line-length": false,
"no-bitwise": false,
"no-console": false,
"quotemark": [true, "single"]
},
"rulesDirectory": []
}