Skip to content

Commit

Permalink
refactor(assets & icons): scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
lauthieb committed Aug 30, 2023
1 parent 2f81488 commit c82a72d
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 170 deletions.
169 changes: 36 additions & 133 deletions src/scripts/assets/convert-svg-to-ios.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand All @@ -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`;

Expand Down Expand Up @@ -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 += ` }
Expand All @@ -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`;
Expand All @@ -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 += ` }
Expand All @@ -178,40 +159,14 @@ 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`;

vitaminAssetsCoreFile += ` public static let ${camelize(
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 += ` }
Expand All @@ -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`;
Expand All @@ -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 += ` }
Expand All @@ -264,44 +193,16 @@ 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`;

vitaminAssetsCoreFile += ` public static let ${camelize(
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
Expand Down Expand Up @@ -364,3 +265,5 @@ fs.writeFileSync(
'build/assets/ios/Showcase/Application/Core/Foundations/Assets/AssetsModel+Sections.swift',
assetsModelSectionsFile
);

shell.rm('-rf', '.temp-svg-assets');
1 change: 1 addition & 0 deletions src/scripts/assets/prebuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down
83 changes: 46 additions & 37 deletions src/scripts/icons/convert-svg-to-ios.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
//
Expand Down Expand Up @@ -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]
Expand All @@ -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');
Expand Down
1 change: 1 addition & 0 deletions src/scripts/icons/prebuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit c82a72d

Please sign in to comment.