From c82a72d9ee730d3bf0cd832a7bcba93e380be345 Mon Sep 17 00:00:00 2001 From: Laurent Thiebault Date: Wed, 30 Aug 2023 22:06:40 +0200 Subject: [PATCH] refactor(assets & icons): scripts --- src/scripts/assets/convert-svg-to-ios.js | 169 +++++------------------ src/scripts/assets/prebuild.js | 1 + src/scripts/icons/convert-svg-to-ios.js | 83 ++++++----- src/scripts/icons/prebuild.js | 1 + 4 files changed, 84 insertions(+), 170 deletions(-) diff --git a/src/scripts/assets/convert-svg-to-ios.js b/src/scripts/assets/convert-svg-to-ios.js index 70f549fd5..22810d506 100644 --- a/src/scripts/assets/convert-svg-to-ios.js +++ b/src/scripts/assets/convert-svg-to-ios.js @@ -2,7 +2,6 @@ const fs = require('fs'); const shell = require('shelljs'); const PDFDocument = require('pdfkit'); const SVGtoPDF = require('svg-to-pdfkit'); -const capitalize = require('../../utils/capitalize'); const camelize = require('../../utils/camelize'); const mainContentsJson = { @@ -27,6 +26,35 @@ const assetContentsJson = (fileName) => ({ }, }); +const createPDF = (directoryName, fileName, file, svg) => { + fs.readFile(`.temp-svg-assets/all/${file}`, (err, data1) => { + if (err) throw err; + fs.readFile(`build/assets/svg/all/${file}`, (err, data2) => { + if (err) throw err; + // if (!data1.equals(data2)) { FIXME: add the condition when 16x16 are ok on vitamin-ios + + shell.mkdir( + `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` + ); + fs.writeFileSync( + `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, + JSON.stringify(assetContentsJson(fileName), null, 2) + ); + + const doc = new PDFDocument({ size: [16, 16] }), + stream = fs.createWriteStream( + `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` + ); + + SVGtoPDF(doc, svg, 0, 0); + + doc.pipe(stream); + doc.end(); + // } + }); + }); +}; + let vitaminAssetsComments = `// swiftlint:disable all // Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen`; @@ -104,28 +132,7 @@ shell.ls('build/assets/svg/flags').forEach((file) => { .toUpperCase() .replaceAll('-', '')}")\n`; - fs.readFile(`.temp-svg-assets/all/${file}`, (err, _) => { - if (err && err.code && err.code === 'ENOENT') { - shell.mkdir( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, - JSON.stringify(assetContentsJson(fileName), null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); + createPDF(directoryName, fileName, file, data.toString()); }); vitaminAssetsCoreFile += ` } @@ -134,7 +141,6 @@ vitaminAssetsCoreFile += ` } shell.ls('build/assets/svg/logos').forEach((file) => { const data = fs.readFileSync(`build/assets/svg/logos/${file}`); - const directoryName = `logo/${ file.split('.svg')[0].split('decathlon-')[1] }.imageset`; @@ -144,32 +150,7 @@ shell.ls('build/assets/svg/logos').forEach((file) => { fileName.split('.pdf')[0].replaceAll('-', ' ') )} = VitaminAsset(name: "${fileName.split('.pdf')[0]}")\n`; - fs.readFile(`.temp-svg-assets/all/${file}`, (err, data1) => { - if (err) throw err; - fs.readFile(`build/assets/svg/all/${file}`, (err, data2) => { - if (err) throw err; - if (!data1.equals(data2)) { - shell.mkdir( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, - JSON.stringify(assetContentsJson(fileName), null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); - }); + createPDF(directoryName, fileName, file, data.toString()); }); vitaminAssetsCoreFile += ` } @@ -178,7 +159,6 @@ vitaminAssetsCoreFile += ` } shell.ls('build/assets/svg/payments').forEach((file) => { const data = fs.readFileSync(`build/assets/svg/payments/${file}`); - const directoryName = `payment/${file.split('.svg')[0]}.imageset`; const fileName = `${file.split('.svg')[0]}.pdf`; @@ -186,32 +166,7 @@ shell.ls('build/assets/svg/payments').forEach((file) => { fileName.split('.pdf')[0].replaceAll('-', ' ') )} = VitaminAsset(name: "${fileName.split('.pdf')[0]}")\n`; - fs.readFile(`.temp-svg-assets/all/${file}`, (err, data1) => { - if (err) throw err; - fs.readFile(`build/assets/svg/all/${file}`, (err, data2) => { - if (err) throw err; - if (!data1.equals(data2)) { - shell.mkdir( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, - JSON.stringify(assetContentsJson(fileName), null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); - }); + createPDF(directoryName, fileName, file, data.toString()); }); vitaminAssetsCoreFile += ` } @@ -220,7 +175,6 @@ vitaminAssetsCoreFile += ` } shell.ls('build/assets/svg/placeholders').forEach((file) => { const data = fs.readFileSync(`build/assets/svg/placeholders/${file}`); - const directoryName = `placeholder/${ file.split('.svg')[0].split('-placeholder')[0] }.imageset`; @@ -230,32 +184,7 @@ shell.ls('build/assets/svg/placeholders').forEach((file) => { fileName.split('.pdf')[0].replaceAll('-', ' ') )} = VitaminAsset(name: "${fileName.split('.pdf')[0]}")\n`; - fs.readFile(`.temp-svg-assets/all/${file}`, (err, data1) => { - if (err) throw err; - fs.readFile(`build/assets/svg/all/${file}`, (err, data2) => { - if (err) throw err; - if (!data1.equals(data2)) { - shell.mkdir( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, - JSON.stringify(assetContentsJson(fileName), null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); - }); + createPDF(directoryName, fileName, file, data.toString()); }); vitaminAssetsCoreFile += ` } @@ -264,7 +193,6 @@ vitaminAssetsCoreFile += ` } shell.ls('build/assets/svg/shipping').forEach((file) => { const data = fs.readFileSync(`build/assets/svg/shipping/${file}`); - const directoryName = `shipping/${file.split('.svg')[0]}.imageset`; const fileName = `${file.split('.svg')[0]}.pdf`; @@ -272,36 +200,9 @@ shell.ls('build/assets/svg/shipping').forEach((file) => { fileName.split('.pdf')[0].replaceAll('-', ' ') )} = VitaminAsset(name: "${fileName.split('.pdf')[0]}")\n`; - fs.readFile(`.temp-svg-assets/all/${file}`, (err, data1) => { - if (err) throw err; - fs.readFile(`build/assets/svg/all/${file}`, (err, data2) => { - if (err) throw err; - if (!data1.equals(data2)) { - shell.mkdir( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/Contents.json`, - JSON.stringify(assetContentsJson(fileName), null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/assets/ios/Sources/VitaminCore/Foundations/Assets/VitaminAssets.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); - }); + createPDF(directoryName, fileName, file, data.toString()); }); -shell.rm('-rf', '.temp-svg-assets'); - assetsModelSectionsFile += ` AssetsModel.Section(name: "Flags", items: [\n`; shell.ls('build/assets/svg/flags').forEach((file, index) => { assetsModelSectionsFile += ` VitaminAssets.Flag.${file @@ -364,3 +265,5 @@ fs.writeFileSync( 'build/assets/ios/Showcase/Application/Core/Foundations/Assets/AssetsModel+Sections.swift', assetsModelSectionsFile ); + +shell.rm('-rf', '.temp-svg-assets'); diff --git a/src/scripts/assets/prebuild.js b/src/scripts/assets/prebuild.js index 28697cd4f..06d9d2098 100644 --- a/src/scripts/assets/prebuild.js +++ b/src/scripts/assets/prebuild.js @@ -11,6 +11,7 @@ shell.rm('-rf', 'build/assets/ts'); shell.rm('-rf', 'build/assets/sprite'); shell.rm('-rf', 'build/assets/drawable'); shell.rm('-rf', 'build/assets/compose'); +shell.rm('-rf', 'build/assets/ios'); // Assets: Create SVG directories shell.mkdir('-p', 'build/assets/svg/flags'); diff --git a/src/scripts/icons/convert-svg-to-ios.js b/src/scripts/icons/convert-svg-to-ios.js index 65d0b6d2d..a7b831c54 100644 --- a/src/scripts/icons/convert-svg-to-ios.js +++ b/src/scripts/icons/convert-svg-to-ios.js @@ -12,6 +12,51 @@ const mainContentsJson = { }, }; +const iconContentsJson = (fileName) => ({ + images: [ + { + filename: fileName, + idiom: 'universal', + }, + ], + info: { + author: 'xcode', + version: 1, + }, + properties: { + 'preserves-vector-representation': true, + }, +}); + +const createPDF = (directoryName, fileName, file, svg) => { + fs.readFile(`.temp-svg-icons/all/${file}`, (err, data1) => { + if (err) throw err; + fs.readFile(`build/icons/svg/all/${file}`, (err, data2) => { + if (err) throw err; + // if (!data1.equals(data2)) { FIXME: add the condition when 16x16 are ok on vitamin-ios + + shell.mkdir( + `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}` + ); + fs.writeFileSync( + `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}/Contents.json`, + JSON.stringify(iconContentsJson(fileName), null, 2) + ); + + const doc = new PDFDocument({ size: [16, 16] }), + stream = fs.createWriteStream( + `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}/${fileName}` + ); + + SVGtoPDF(doc, svg, 0, 0); + + doc.pipe(stream); + doc.end(); + // } + }); + }); +}; + let vitamixComments = `// Vitamin iOS // Apache License 2.0 // @@ -72,21 +117,6 @@ shell.ls('build/icons/svg/all').forEach((file) => { '' )}.imageset`; const fileName = `${file.split('.svg')[0]}.pdf`; - const iconContentsJson = { - images: [ - { - filename: fileName, - idiom: 'universal', - }, - ], - info: { - author: 'xcode', - version: 1, - }, - properties: { - 'preserves-vector-representation': true, - }, - }; vitamixCoreFile += ` public static let ${camelize( file.split('.svg')[0] @@ -106,28 +136,7 @@ shell.ls('build/icons/svg/all').forEach((file) => { file.split('.svg')[0] ).replaceAll('-', '')}.image\n`; - fs.readFile(`.temp-svg-icons/all/${file}`, (err, _) => { - if (err && err.code && err.code === 'ENOENT') { - shell.mkdir( - `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}` - ); - fs.writeFileSync( - `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}/Contents.json`, - JSON.stringify(iconContentsJson, null, 2) - ); - - const doc = new PDFDocument({ size: [64, 64] }), - stream = fs.createWriteStream( - `build/icons/ios/Sources/VitaminCore/Foundations/Icons/Vitamix.xcassets/${directoryName}/${fileName}` - ), - svg = data.toString(); - - SVGtoPDF(doc, svg, 0, 0); - - doc.pipe(stream); - doc.end(); - } - }); + createPDF(directoryName, fileName, file, data.toString()); }); shell.rm('-rf', '.temp-svg-icons'); diff --git a/src/scripts/icons/prebuild.js b/src/scripts/icons/prebuild.js index 9f234740c..e83e0c185 100644 --- a/src/scripts/icons/prebuild.js +++ b/src/scripts/icons/prebuild.js @@ -12,6 +12,7 @@ shell.rm('-rf', 'build/icons/ts'); shell.rm('-rf', 'build/icons/sprite'); shell.rm('-rf', 'build/icons/drawable'); shell.rm('-rf', 'build/icons/compose'); +shell.rm('-rf', 'build/icons/ios'); shell.rm('-rf', 'build/icons/vitamix'); // Icons: Create SVG directories