UNPKG

ngm-cli

Version:

Simple way to manage angular submodules in one repository

142 lines 10.6 kB
/* eslint-disable */ // https://github.com/filipesilva/angular-quickstart-lib/blob/master/inline-resources.js 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require('fs'); const path = require('path'); const glob = require('glob'); const sass = require('node-sass'); const tildeImporter = require('node-sass-tilde-importer'); /** * Simple Promiseify function that takes a Node API and return a version that supports promises. * We use promises instead of synchronized functions to make the process less I/O bound and * faster. It also simplifies the code. */ function promiseify(fn) { return function () { const args = [].slice.call(arguments, 0); return new Promise((resolve, reject) => { fn.apply(this, args.concat([function (err, value) { if (err) { reject(err); } else { resolve(value); } }])); }); }; } const readFile = promiseify(fs.readFile); const writeFile = promiseify(fs.writeFile); /** * Inline resources in a tsc/ngc compilation. * @param projectPath {string} Path to the project. */ function inlineResources(projectPath) { // Match only TypeScript files in projectPath. const files = glob.sync('**/*.ts', { cwd: projectPath }); // For each file, inline the templates and styles under it and write the new file. return Promise.all(files.map(filePath => { const fullFilePath = path.join(projectPath, filePath); return readFile(fullFilePath, 'utf-8') .then(content => inlineResourcesFromString(content, url => { // Resolve the template url. return path.join(path.dirname(fullFilePath), url); })) .then(content => writeFile(fullFilePath, content)) .catch(err => { console.error('An error occured: ', err); }); })); } exports.inlineResources = inlineResources; /** * Inline resources from a string content. * @param content {string} The source file's content. * @param urlResolver {Function} A resolver that takes a URL and return a path. * @returns {string} The content with resources inlined. */ function inlineResourcesFromString(content, urlResolver) { // Curry through the inlining functions. return [ inlineTemplate, inlineStyle, removeModuleId ].reduce((content, fn) => fn(content, urlResolver), content); } exports.inlineResourcesFromString = inlineResourcesFromString; /** * Inline the templates for a source file. Simply search for instances of `templateUrl: ...` and * replace with `template: ...` (with the content of the file included). * @param content {string} The source file's content. * @param urlResolver {Function} A resolver that takes a URL and return a path. * @return {string} The content with all templates inlined. */ function inlineTemplate(content, urlResolver) { return content.replace(/templateUrl:\s*'([^']+?\.html)'/g, function (m, templateUrl) { const templateFile = urlResolver(templateUrl); const templateContent = fs.readFileSync(templateFile, 'utf-8'); const shortenedTemplate = templateContent .replace(/([\n\r]\s*)+/gm, ' ') .replace(/"/g, '\\"'); return `template: "${shortenedTemplate}"`; }); } /** * Inline the styles for a source file. Simply search for instances of `styleUrls: [...]` and * replace with `styles: [...]` (with the content of the file included). * @param urlResolver {Function} A resolver that takes a URL and return a path. * @param content {string} The source file's content. * @return {string} The content with all styles inlined. */ function inlineStyle(content, urlResolver) { return content.replace(/styleUrls\s*:\s*(\[[\s\S]*?\])/gm, function (m, styleUrls) { const urls = eval(styleUrls); return 'styles: [' + urls.map(styleUrl => { const styleFile = urlResolver(styleUrl); const originContent = fs.readFileSync(styleFile, 'utf-8'); const styleContent = styleFile.endsWith('.scss') ? buildSass(originContent, styleFile) : originContent; const shortenedStyle = styleContent .replace(/([\n\r]\s*)+/gm, ' ') .replace(/\\/g, '\\\\') .replace(/"/g, '\\"'); return `"${shortenedStyle}"`; }) .join(',\n') + ']'; }); } /** * build sass content to css * @param content {string} the css content * @param sourceFile {string} the scss file sourceFile * @return {string} the generated css, empty string if error occured */ function buildSass(content, sourceFile) { try { const result = sass.renderSync({ data: content, file: sourceFile, importer: tildeImporter }); return result.css.toString(); } catch (e) { console.error('\x1b[41m'); console.error('at ' + sourceFile + ':' + e.line + ":" + e.column); console.error(e.formatted); console.error('\x1b[0m'); return ""; } } /** * Remove every mention of `moduleId: module.id`. * @param content {string} The source file's content. * @returns {string} The content with all moduleId: mentions removed. */ function removeModuleId(content) { return content.replace(/\s*moduleId:\s*module\.id\s*,?\s*/gm, ''); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXJlc291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL2lubGluZS1yZXNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLHdGQUF3RjtBQUN4RixZQUFZLENBQUM7O0FBRWIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRTFEOzs7O0dBSUc7QUFDSCxvQkFBb0IsRUFBRTtJQUNwQixNQUFNLENBQUM7UUFDTCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxLQUFLO29CQUM5QyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxN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