256 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as rollup from "rollup";
 | 
						|
import * as svelte from 'rollup-plugin-svelte';
 | 
						|
import * as resolve from 'rollup-plugin-node-resolve';
 | 
						|
import * as commonjs from 'rollup-plugin-commonjs';
 | 
						|
import * as typescript from "rollup-plugin-typescript2";
 | 
						|
import * as fs from "fs";
 | 
						|
import * as copy from "rollup-plugin-copy-assets";
 | 
						|
 | 
						|
import {
 | 
						|
   sass
 | 
						|
} from 'svelte-preprocess-sass';
 | 
						|
import {
 | 
						|
   terser
 | 
						|
} from 'rollup-plugin-terser';
 | 
						|
 | 
						|
const production = process.argv.indexOf("-d") < 0;
 | 
						|
console.log(`Runnung in ${production ? "production" : "development"} mode!`);
 | 
						|
 | 
						|
let plg = [];
 | 
						|
 | 
						|
if (production) {
 | 
						|
   plg.push(terser())
 | 
						|
}
 | 
						|
 | 
						|
if (!fs.existsSync("build"))
 | 
						|
   fs.mkdirSync("build");
 | 
						|
 | 
						|
 | 
						|
const pages = ["Login", "Home", "User"];
 | 
						|
 | 
						|
let configs = pages.map(page => {
 | 
						|
   if (!fs.existsSync("build/" + page.toLowerCase()))
 | 
						|
      fs.mkdirSync("build/" + page.toLowerCase());
 | 
						|
 | 
						|
   const pageHtml = generateHtml(page)
 | 
						|
 | 
						|
   fs.writeFileSync(`build/${page.toLowerCase()}/index.html`, pageHtml);
 | 
						|
 | 
						|
   return <rollup.RollupOptions>{
 | 
						|
      input: `./src/${page}/main.js`,
 | 
						|
      output: {
 | 
						|
         sourcemap: !production,
 | 
						|
         format: 'iife',
 | 
						|
         name: "app",
 | 
						|
         file: `build/${page.toLowerCase()}/bundle.js`
 | 
						|
      },
 | 
						|
 | 
						|
      watch: {
 | 
						|
         clearScreen: false
 | 
						|
      },
 | 
						|
      treeshake: production,
 | 
						|
      plugins: [
 | 
						|
         (typescript as any)({
 | 
						|
            tsconfig: "./src/tsconfig.json"
 | 
						|
         }),
 | 
						|
         svelte({
 | 
						|
            // enable run-time checks when not in production
 | 
						|
            dev: !production,
 | 
						|
            css: css => {
 | 
						|
               css.write(`build/${page.toLowerCase()}/bundle.css`);
 | 
						|
            },
 | 
						|
            preprocess: {
 | 
						|
               style: sass({
 | 
						|
                  includePaths: ['src', 'node_modules']
 | 
						|
               })
 | 
						|
            }
 | 
						|
         }),
 | 
						|
         (resolve as any)(),
 | 
						|
         (commonjs as any)(),
 | 
						|
         ...plg
 | 
						|
      ]
 | 
						|
   };
 | 
						|
})
 | 
						|
 | 
						|
import * as path from "path";
 | 
						|
 | 
						|
function generateHtml(pagename: string) {
 | 
						|
   const globalJS = fs.readFileSync("./src/global.js").toString("utf8");
 | 
						|
   const globalCSS = fs.readFileSync("./src/global.css").toString("utf8");
 | 
						|
   return `<!doctype html>
 | 
						|
   <html lang="en">
 | 
						|
   
 | 
						|
   <head>
 | 
						|
      <meta charset='utf8'>
 | 
						|
      <meta name='viewport' content='width=device-width'>
 | 
						|
   
 | 
						|
      <title>OpenAuth - ${pagename}</title>
 | 
						|
      <style>
 | 
						|
      ${globalCSS}
 | 
						|
      </style>
 | 
						|
      <script>
 | 
						|
      ${globalJS}
 | 
						|
      </script>
 | 
						|
      <link rel='stylesheet' href='bundle.css'>
 | 
						|
   </head>
 | 
						|
   
 | 
						|
   <body>
 | 
						|
      <div id="content"></div>
 | 
						|
      <script src='bundle.js'></script>
 | 
						|
      <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto" lazyload>
 | 
						|
   </body> 
 | 
						|
</html>`
 | 
						|
}
 | 
						|
 | 
						|
let start: [number, number];
 | 
						|
if (process.argv.indexOf("-w") >= 0) {
 | 
						|
   rollup.watch(configs).on("event", event => {
 | 
						|
      if (event.code === "BUNDLE_START") {
 | 
						|
         start = process.hrtime();
 | 
						|
      } else if (event.code === "BUNDLE_END") {
 | 
						|
         let diff = process.hrtime(start);
 | 
						|
         console.log(`--- Took ${diff[0] * 1000 + diff[1] / 1000000}ms`);
 | 
						|
      } else if (event.code === "ERROR") {
 | 
						|
         // console.error(event.error);
 | 
						|
         handleError(event.error, true);
 | 
						|
         // } else if (event.code === "FATAL") {
 | 
						|
         //    handleError(event.error, true);
 | 
						|
      } else {
 | 
						|
         console.log(event);
 | 
						|
      }
 | 
						|
   })
 | 
						|
} else {
 | 
						|
   start = process.hrtime();
 | 
						|
   Promise.all(configs.map(config => {
 | 
						|
      return rollup.rollup(config).then((value) => {
 | 
						|
         return value.write(Array.isArray(config.output) ? config.output[0] : config.output);
 | 
						|
      }).catch(err => {
 | 
						|
         handleError(err, true);
 | 
						|
         // console.error(err);
 | 
						|
      })
 | 
						|
   })).then(vals => {
 | 
						|
      let diff = process.hrtime(start);
 | 
						|
      console.log(`--- Took ${diff[0] * 1000 + diff[1] / 1000000}ms`);
 | 
						|
   })
 | 
						|
}
 | 
						|
 | 
						|
var absolutePath = /^(?:\/|(?:[A-Za-z]:)?[\\|/])/;
 | 
						|
function isAbsolute(path) {
 | 
						|
   return absolutePath.test(path);
 | 
						|
}
 | 
						|
 | 
						|
// function getAliasName(resolved, unresolved) {
 | 
						|
//    var alias = path.basename(unresolved || resolved);
 | 
						|
//    var ext = path.extname(resolved);
 | 
						|
//    if (alias.endsWith(ext))
 | 
						|
//       alias = alias.substr(0, alias.length - ext.length);
 | 
						|
//    return alias;
 | 
						|
// }
 | 
						|
 | 
						|
function relativeId(id) {
 | 
						|
   if (typeof process === 'undefined' || !isAbsolute(id))
 | 
						|
      return id;
 | 
						|
   return path.relative(process.cwd(), id);
 | 
						|
}
 | 
						|
 | 
						|
const tc: any = {
 | 
						|
   enabled:
 | 
						|
      process.env.FORCE_COLOR ||
 | 
						|
      process.platform === "win32" ||
 | 
						|
      (process.stdout.isTTY && process.env.TERM && process.env.TERM !== "dumb")
 | 
						|
};
 | 
						|
const Styles = (tc.Styles = {});
 | 
						|
const defineProp = Object.defineProperty;
 | 
						|
 | 
						|
const init = (style, open, close, re) => {
 | 
						|
   let i,
 | 
						|
      len = 1,
 | 
						|
      seq = [(Styles[style] = { open, close, re })];
 | 
						|
 | 
						|
   const fn = s => {
 | 
						|
      if (tc.enabled) {
 | 
						|
         for (i = 0, s += ""; i < len; i++) {
 | 
						|
            style = seq[i];
 | 
						|
            s =
 | 
						|
               (open = style.open) +
 | 
						|
               (~s.indexOf((close = style.close), 4) // skip first \x1b[
 | 
						|
                  ? s.replace(style.re, open)
 | 
						|
                  : s) +
 | 
						|
               close;
 | 
						|
         }
 | 
						|
         len = 1;
 | 
						|
      }
 | 
						|
      return s
 | 
						|
   };
 | 
						|
 | 
						|
   defineProp(tc, style, {
 | 
						|
      get: () => {
 | 
						|
         for (let k in Styles)
 | 
						|
            defineProp(fn, k, {
 | 
						|
               get: () => ((seq[len++] = Styles[k]), fn)
 | 
						|
            });
 | 
						|
         delete tc[style];
 | 
						|
         return (tc[style] = fn)
 | 
						|
      },
 | 
						|
      configurable: true
 | 
						|
   });
 | 
						|
};
 | 
						|
 | 
						|
init("reset", "\x1b[0m", "\x1b[0m", /\x1b\[0m/g);
 | 
						|
init("bold", "\x1b[1m", "\x1b[22m", /\x1b\[22m/g);
 | 
						|
init("dim", "\x1b[2m", "\x1b[22m", /\x1b\[22m/g);
 | 
						|
init("italic", "\x1b[3m", "\x1b[23m", /\x1b\[23m/g);
 | 
						|
init("underline", "\x1b[4m", "\x1b[24m", /\x1b\[24m/g);
 | 
						|
init("inverse", "\x1b[7m", "\x1b[27m", /\x1b\[27m/g);
 | 
						|
init("hidden", "\x1b[8m", "\x1b[28m", /\x1b\[28m/g);
 | 
						|
init("strikethrough", "\x1b[9m", "\x1b[29m", /\x1b\[29m/g);
 | 
						|
init("black", "\x1b[30m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("red", "\x1b[31m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("green", "\x1b[32m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("yellow", "\x1b[33m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("blue", "\x1b[34m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("magenta", "\x1b[35m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("cyan", "\x1b[36m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("white", "\x1b[37m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("gray", "\x1b[90m", "\x1b[39m", /\x1b\[39m/g);
 | 
						|
init("bgBlack", "\x1b[40m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgRed", "\x1b[41m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgGreen", "\x1b[42m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgYellow", "\x1b[43m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgBlue", "\x1b[44m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgMagenta", "\x1b[45m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgCyan", "\x1b[46m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
init("bgWhite", "\x1b[47m", "\x1b[49m", /\x1b\[49m/g);
 | 
						|
 | 
						|
const turbocolor: any = tc;
 | 
						|
 | 
						|
 | 
						|
function handleError(err, recover) {
 | 
						|
   if (recover === void 0) { recover = false; }
 | 
						|
   var description = err.message || err;
 | 
						|
   if (err.name)
 | 
						|
      description = err.name + ": " + description;
 | 
						|
   var message = (err.plugin
 | 
						|
      ? "(" + err.plugin + " plugin) " + description
 | 
						|
      : description) || err;
 | 
						|
   console.error(turbocolor.bold.red("[!] " + turbocolor.bold(message.toString())));
 | 
						|
   if (err.url) {
 | 
						|
      console.error(turbocolor.cyan(err.url));
 | 
						|
   }
 | 
						|
   if (err.loc) {
 | 
						|
      console.error(relativeId(err.loc.file || err.id) + " (" + err.loc.line + ":" + err.loc.column + ")");
 | 
						|
   }
 | 
						|
   else if (err.id) {
 | 
						|
      console.error(relativeId(err.id));
 | 
						|
   }
 | 
						|
   if (err.frame) {
 | 
						|
      console.error(turbocolor.dim(err.frame));
 | 
						|
   }
 | 
						|
   if (err.stack) {
 | 
						|
 | 
						|
      //console.error(turbocolor.dim(err.stack));
 | 
						|
   }
 | 
						|
   console.error('');
 | 
						|
   if (!recover)
 | 
						|
      process.exit(1);
 | 
						|
} |