public static rewriteOrInlineUrls()

in src/css.build.ts [383:425]


		public static rewriteOrInlineUrls(originalFileFSPath: string, originalFile: string, newFile: string, contents: string, forceBase64: boolean, inlineByteLimit: number): string {
			let fs = require.nodeRequire('fs');
			let path = require.nodeRequire('path');

			return this._replaceURL(contents, (url) => {
				if (/\.(svg|png)$/.test(url)) {
					let fsPath = path.join(path.dirname(originalFileFSPath), url);
					let fileContents = fs.readFileSync(fsPath);

					if (fileContents.length < inlineByteLimit) {
						global.cssInlinedResources = global.cssInlinedResources || [];
						let normalizedFSPath = fsPath.replace(/\\/g, '/');
						if (global.cssInlinedResources.indexOf(normalizedFSPath) >= 0) {
							// console.warn('CSS INLINING IMAGE AT ' + fsPath + ' MORE THAN ONCE. CONSIDER CONSOLIDATING CSS RULES');
						}
						global.cssInlinedResources.push(normalizedFSPath);

						let MIME = /\.svg$/.test(url) ? 'image/svg+xml' : 'image/png';
						let DATA = ';base64,' + fileContents.toString('base64');

						if (!forceBase64 && /\.svg$/.test(url)) {
							// .svg => url encode as explained at https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
							let newText = fileContents.toString()
								.replace(/"/g, '\'')
								.replace(/%/g, '%25')
								.replace(/</g, '%3C')
								.replace(/>/g, '%3E')
								.replace(/&/g, '%26')
								.replace(/#/g, '%23')
								.replace(/\s+/g, ' ');
							let encodedData = ',' + newText;
							if (encodedData.length < DATA.length) {
								DATA = encodedData;
							}
						}
						return '"data:' + MIME + DATA + '"';
					}
				}

				var absoluteUrl = Utilities.joinPaths(Utilities.pathOf(originalFile), url);
				return Utilities.relativePath(newFile, absoluteUrl);
			});
		}