Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[patch-package] Using hash key for local icons instead of increasement key to prevent conflict #36

Open
Misaka-0x447f opened this issue May 25, 2022 · 0 comments

Comments

@Misaka-0x447f
Copy link

This patch issue is submitted by patch-package.

In my project I found that if more than one commit is adding local icon to project, the key of local icon will be conflict in a large scale. So I made this patch:

diff --git a/node_modules/react-native-iconfont-cli/libs/generateComponent.js b/node_modules/react-native-iconfont-cli/libs/generateComponent.js
index ddeae3b..6f5ee3f 100644
--- a/node_modules/react-native-iconfont-cli/libs/generateComponent.js
+++ b/node_modules/react-native-iconfont-cli/libs/generateComponent.js
@@ -12,10 +12,14 @@ var getTemplate_1 = require("./getTemplate");
 var replace_1 = require("./replace");
 var whitespace_1 = require("./whitespace");
 var copyTemplate_1 = require("./copyTemplate");
+var crypto = require('crypto')
 var SVG_MAP = {
     path: 'Path',
 };
 var ATTRIBUTE_FILL_MAP = ['path'];
+
+const sha1 = (data) => crypto.createHash("sha1").update(data, "binary").digest("hex");
+
 exports.generateComponent = function (data, localSvg, config) {
     var svgComponents = new Set();
     var names = [];
@@ -80,7 +84,6 @@ exports.generateComponent = function (data, localSvg, config) {
             typeDefinitionFile = replace_1.replaceComponentName(typeDefinitionFile, componentName);
             fs_1.default.writeFileSync(path_1.default.join(saveDir, componentName + '.d.ts'), typeDefinitionFile);
         }
         console.log(colors_1.default.green('√') + " Generated icon \"" + colors_1.default.yellow(iconId) + "\"");
     });
     /**
      * 本地文件添加
@@ -97,7 +100,7 @@ exports.generateComponent = function (data, localSvg, config) {
         names.push(name);
         cases += whitespace_1.whitespace(4) + "case '" + name + "':\n";
         imports.push(componentName);
-        cases += whitespace_1.whitespace(6) + "return <" + componentName + " key=\"L" + (index + 1) + "\" {...rest} />;\n";
+        cases += whitespace_1.whitespace(6) + "return <" + componentName + " key=\"L-" + sha1(componentName) + "\" {...rest} />;\n";
         singleFile = getTemplate_1.getTemplate('LocalSingleIcon' + jsxExtension);
         singleFile = replace_1.replaceSize(singleFile, config.default_icon_size);
         singleFile = replace_1.replaceSvgComponents(singleFile, currentSvgComponents);
@@ -110,7 +113,6 @@ exports.generateComponent = function (data, localSvg, config) {
             typeDefinitionFile = replace_1.replaceComponentName(typeDefinitionFile, componentName);
             fs_1.default.writeFileSync(path_1.default.join(saveDir, componentName + '.d.ts'), typeDefinitionFile);
         }
         console.log(colors_1.default.green('√') + " Generated local icon \"" + colors_1.default.yellow(name) + "\"");
     });
     var iconFile = getTemplate_1.getTemplate('Icon' + jsxExtension);
     iconFile = replace_1.replaceSize(iconFile, config.default_icon_size);

This issue body was partially generated by patch-package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant