#!/usr/bin/env node
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = require("chalk");
const path = require("path");
const minimist2 = require("minimist2");
const file_system_1 = require("../lib/file-system");
const web_1 = require("../lib/web");
const helpers_1 = require("../lib/helpers");
const palette_1 = require("../lib/palette");
const command_1 = require("../lib/command");
/**
* @summary Global.Command Object
* @description Creates all Console switches and commands
* @type {Command[]}
* @member
*/
const commands = [
new command_1.Command('-i, --input [PATH] ', '[REQUIRED] The source file or url to search for color values '),
new command_1.Command('-o, --output [DIRECTORY]', 'The output file(s) directory '),
new command_1.Command('-n, --name ', 'The output file(s) name (no extension) '),
new command_1.Command('--css ', 'Create a Css rendering of the color palette '),
new command_1.Command('--gpl ', 'Create a Gimp Palette rendering of the color palette'),
new command_1.Command('--less ', 'Create a Less rendering of the color palette '),
new command_1.Command('--scss ', 'Create a Sass rendering of the color palette ')
];
/**
* @summary Log Helper
* @description Reference to the console.log method
* @type {Console}
* @member
*/
const log = console.log;
/**
* @summary Application Exit Helper
* @description Reference to the process.exit field
* @type {any}
* @member
*/
const exit = process.exit;
/**
* @summary Console Helper
* @description Displays 'Information' level messages to the console
* @type {any}
* @member
*/
const info = chalk_1.default.hex('#8CF069');
/**
* @summary Console Helper
* @description Displays bold 'Information' level messages to the console
* @type {any}
* @member
*/
const infoBold = chalk_1.default.bold.green;
/**
* @summary Console Helper
* @description Displays message sent to the printHelp method
* @type {any}
* @member
*/
const helpMessage = chalk_1.default.bold.hex('#69A0F0');
/**
* @summary Console Helper
* @description Displays 'Warning' level messages to the console
* @type {any}
* @member
*/
const warning = chalk_1.default.bold.hex('#F0EB69');
/**
* @summary Command Line Arguments Helper
* @description Returns the command line argument array starting on the third element
* @type {any}
* @member
*/
const args = minimist2(process.argv.slice(2));
/**
* @summary Color Format
* @description An array containing all colors found in the source file or URL
* @type {Array<string>}
* @member
*/
let hexColors = [];
/**
* @summary Command Line Argument
* @description Request for the help menu
* @type {string}
* @member
*/
const helpMe = args.h ? args.h : args.help;
/**
* @summary Command Line Argument
* @description The source file path or URL location
* @type {string}
* @member
*/
const inputPath = args.i ? args.i : args.input;
/**
* @summary Command Line Argument
* @description The directory to save all output files
* @type {string}
* @member
*/
let outputPath = args.o ? args.o : args.output;
/**
* @summary Command Line Argument
* @description Is CSS a requested output file type
* @type {boolean}
* @member
*/
const isCss = args.css;
/**
* @summary Command Line Argument
* @description Is Gimp Palette File a requested output file type
* @type {boolean}
* @member
*/
const isGimp = args.gimp;
/**
* @summary Command Line Argument
* @description Is LESS a requested output file type
* @type {boolean}
* @member
*/
const isLess = args.less;
/**
* @summary Command Line Argument
* @description Is SASS a requested output file type
* @type {boolean}
* @member
*/
const isSass = args.sass;
/**
* @summary Command Line Argument
* @description The color format to create (Hex, Gimp, RGB, HSL)
* @type {string}
* @member
*/
const colorFormat = args.rgb
? 'rgb'
: args.hsl
? 'hsl'
: 'hex';
/**
* @summary Command Line Argument
* @description The file name to assign all output files
* @type {string}
* @member
*/
let name = args.n ? args.n : args.name;
//- Enter the matrix
main();
/**
* @public
* @function
* @summary Main
* @description Entry function for Color Seek
* @memberof Global
*/
function main() {
try {
//- Cry for HELP?
if (helpMe) {
printHelp();
return;
}
//- Check if input source is valid
if (inputPath) {
if (inputPath.length) {
//- Check if the file name needs to be set
if (!name) {
name = path.basename(inputPath, path.extname(inputPath));
}
//- Determine if input is a file or a URL
if (inputPath.toLowerCase().startsWith('http')) {
new web_1.Web.Http().getUrlData(inputPath, htmlTextHandler);
}
else {
new file_system_1.FileSystem.FileAccess(inputPath, outputPath, name).readFile(htmlTextHandler);
}
}
else {
helpers_1.Helpers.outputError(new Error('Missing input file'));
}
}
else {
printHelp('Input Path is Required');
}
}
catch (e) {
helpers_1.Helpers.outputError(e);
}
}
/**
* @public
* @function
* @summary Html Text Handler Callback
* @description Handles the html data sent from Web.Html.getUrlData() to be
* written to disk
* @memberof Global
* @callback htmlTextHandler
* @param {string} data - The file or URL text
*/
function htmlTextHandler(data) {
const fs = new file_system_1.FileSystem.FileAccess(inputPath, outputPath, name);
if (!outputPath) {
outputPath = '.';
}
//- Create color palette and generate HTML
hexColors = new palette_1.Palette.PaletteBuilder(inputPath, outputPath, name).buildHtmlOutput(data);
//- Determine which output files to generate
if (isCss) {
fs.writeCss(outputPath, name, hexColors, colorFormat, 'css');
}
if (isGimp) {
fs.writeCss(outputPath, name, hexColors, 'gpl', 'gpl');
}
if (isLess) {
fs.writeCss(outputPath, name, hexColors, colorFormat, 'less');
}
if (isSass) {
fs.writeCss(outputPath, name, hexColors, colorFormat, 'scss');
}
}
/*
* @public
* @function
* @summary Print Help
* @description Print the CLI command list for Color Seek
* @memberof Global
*/
function printHelp(message = '') {
if (message.length) {
log(helpMessage('-----------------------------------------------------'));
log(helpMessage(`SYSTEM MESSAGE: ${message}`));
log(helpMessage('-----------------------------------------------------'));
}
log(info('\nUsage: colorseek [OPTIONS]\n'));
commands.forEach((c) => log(infoBold(' ' + c.Argument + '\t' + c.Description)));
log(warning('\nIf no output type is specified then only a [DIRECTORY]/[NAME].html file will be created.'));
log(warning('Multiple versions of the color palette can be created by specifying multiple output types (ex: --css --sass).'));
exit();
}
//# sourceMappingURL=color-seek.js.map