2022-03-25 13:35:21 +05:30
/ *
Copyright 2021 The Matrix . org Foundation C . I . C .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
2022-07-11 12:17:33 +05:30
import { readFileSync , mkdirSync , writeFileSync } from "fs" ;
import { resolve } from "path" ;
import { h32 } from "xxhashjs" ;
2022-04-12 20:15:14 +05:30
function createHash ( content ) {
2022-07-11 12:17:33 +05:30
const hasher = new h32 ( 0 ) ;
2022-04-12 20:15:14 +05:30
hasher . update ( content ) ;
return hasher . digest ( ) ;
}
2022-03-25 13:35:21 +05:30
/ * *
* Builds a new svg with the colors replaced and returns its location .
* @ param { string } svgLocation The location of the input svg file
* @ param { string } primaryColor Primary color for the new svg
* @ param { string } secondaryColor Secondary color for the new svg
* /
2022-07-11 12:17:33 +05:30
export function buildColorizedSVG ( svgLocation , primaryColor , secondaryColor ) {
const svgCode = readFileSync ( svgLocation , { encoding : "utf8" } ) ;
2022-03-25 13:35:21 +05:30
let coloredSVGCode = svgCode . replaceAll ( "#ff00ff" , primaryColor ) ;
coloredSVGCode = coloredSVGCode . replaceAll ( "#00ffff" , secondaryColor ) ;
2022-04-06 11:02:09 +05:30
if ( svgCode === coloredSVGCode ) {
throw new Error ( "svg-colorizer made no color replacements! The input svg should only contain colors #ff00ff (primary, case-sensitive) and #00ffff (secondary, case-sensitive)." ) ;
}
2022-04-20 22:25:48 +05:30
const fileName = svgLocation . match ( /.+[/\\](.+\.svg)/ ) [ 1 ] ;
2022-04-12 20:15:14 +05:30
const outputName = ` ${ fileName . substring ( 0 , fileName . length - 4 ) } - ${ createHash ( coloredSVGCode ) } .svg ` ;
2022-07-11 12:17:33 +05:30
const outputPath = resolve ( _ _dirname , "../../.tmp" ) ;
2022-03-25 13:35:21 +05:30
try {
2022-07-11 12:17:33 +05:30
mkdirSync ( outputPath ) ;
2022-03-25 13:35:21 +05:30
}
catch ( e ) {
if ( e . code !== "EEXIST" ) {
throw e ;
}
}
2022-04-12 19:44:29 +05:30
const outputFile = ` ${ outputPath } / ${ outputName } ` ;
2022-07-11 12:17:33 +05:30
writeFileSync ( outputFile , coloredSVGCode ) ;
2022-03-25 13:35:21 +05:30
return outputFile ;
}