UNPKG

@haxtheweb/intersection-element

Version:

VanillaJS Intersection element / capabilities to mix into other elements

126 lines (116 loc) 3.64 kB
const gulp = require("gulp"); const fs = require("fs"); const path = require("path"); const replace = require("gulp-replace"); const stripCssComments = require("strip-css-comments"); const decomment = require("decomment"); const packageJson = require("./package.json"); // merge all the src files together gulp.task("merge", () => { return gulp .src("./src/" + packageJson.wcfactory.elementName + ".js") .pipe( replace( /\/\* REQUIRED FOR TOOLING DO NOT TOUCH \*\//g, (classStatement, character, jsFile) => { // pull these off the package wcfactory files area let html = fs .readFileSync(path.join("./", packageJson.wcfactory.files.html)) .toString() .trim(); html = decomment(html); let haxString = ""; if (packageJson.wcfactory.useHAX) { let HAXProps = fs.readFileSync( path.join("./", packageJson.wcfactory.files.hax) ); haxString = ` // haxProperty definition static get haxProperties() { return ${HAXProps}; }`; } let rawprops = "{}"; rawprops = fs.readFileSync( path.join("./", packageJson.wcfactory.files.properties) ); let props = `${rawprops}`, comma = props .replace(/\/\*[\s\S]*?\*\//g, "") .replace(/\/\/.*/g, "") .replace(/[\{\s\n\}]/g, ""); (props = props.replace(/\"type\": \"(\w+)\"/g, '"type": $1')), (superprops = comma === "" ? `...super.properties` : `...super.properties,`); props = props.replace(/\{([\s\n]*)/, `{$1$1${superprops}$1$1`); let cssResult = ""; if ( packageJson.wcfactory.useSass && packageJson.wcfactory.files.scss ) { // we don't support scss anymore } else if (packageJson.wcfactory.files.css) { cssResult += fs.readFileSync( path.join("./", packageJson.wcfactory.files.css) ); } cssResult = stripCssComments(cssResult).trim(); let litResult = packageJson.wcfactory.customElementClass !== "LitElement" ? `` : ` //styles function static get styles() { return [ ${ packageJson.wcfactory.sharedStyles && packageJson.wcfactory.sharedStyles.length > 0 ? `${packageJson.wcfactory.sharedStyles.join(",")},` : `` } css\` ${cssResult} \` ]; }`, styleResult = packageJson.wcfactory.customElementClass !== "LitElement" ? `<style> ${cssResult} </style>` : ``; return `${litResult} // render function render() { return html\` ${styleResult} ${html}\`; } ${haxString} // properties available to the custom element for data binding static get properties() { return ${props}; }`; } ) ) .pipe(gulp.dest("./")); }); // run polymer analyze to generate documentation gulp.task("analyze", () => { var exec = require("child_process").exec; return exec( "polymer analyze --input demo/index.html > analysis.json", function(error, stdout, stderr) { if (error !== null) { console.log("exec error: " + error); } } ); }); gulp.task("watch", () => { return gulp.watch("./src/*", gulp.series("merge", "analyze")); }); // simple developer flow gulp.task("dev", gulp.series("merge", "analyze", "watch")); gulp.task("default", gulp.series("merge", "analyze"));