Compare commits

...

8 Commits

Author SHA1 Message Date
Karsa
1173134099 Adds helping-hand icon (#966) 2023-02-28 18:08:19 +01:00
Lucide Bot
894993478f 📦 Bump lucide package versions to 0.116.0 2023-02-28 16:32:39 +00:00
Karsa
36f84a74f6 adds construction icon (#959)
Co-authored-by: Karsa <karsa@karsa.org>
2023-02-28 17:25:08 +01:00
Karsa
1479a9dbd8 Fixes pre-commit git hook to ensure the optimisation of staged icons (#958)
* testing

* Fixes pre-commit hook

* Removing checkIcons from pre commit hook because it might result in false positives and negatives on an unclean local repository

* Added checkIcons Github action

---------

Co-authored-by: Karsa <karsa@karsa.org>
2023-02-28 17:24:17 +01:00
gubser
2485f6117a Added filter-x icon (#954)
* Added filter-off icon

* Renamed filter-off to filter-x

* Update icons/filter-x.svg

---------

Co-authored-by: Elio Gubser <3030498-gubser@users.noreply.gitlab.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-02-22 22:29:14 +01:00
Eric Fennis
0bbaaa8abd Fix site build (#955)
* Fix prebuild

* remove env file
2023-02-21 17:33:29 +01:00
Patchethium
a82af02687 Add split-square icon (#952)
* add split-square

* add horizontal icon

* rename vertical icon

* split path
2023-02-21 08:14:27 +01:00
Lucide Bot
a5be1b4101 📦 Bump lucide package versions to 0.115.0 2023-02-16 11:51:55 +00:00
36 changed files with 419 additions and 45 deletions

View File

@@ -1,4 +0,0 @@
#!/bin/sh
pnpm run checkIcons
exit $?

41
.github/actions/check-icons.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: "Check icons"
description: "Cross-checks icon and category references in JSON descriptors"
inputs:
name:
description: “Name of the package”
required: true
runs:
using: "composite"
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "::set-output name=pnpm_cache_dir::$(pnpm store path)"
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
key: ${{ runner.os }}-lucide-preact-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-lucide-preact-pnpm-store-
- name: Install dependencies
run: pnpm install --filter .
- name: Check icons and categories
run: pnpm checkIcons

5
.husky/pre-commit Executable file
View File

@@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm lint-staged
pnpm checkIcons

View File

@@ -20,7 +20,7 @@
"type": "string"
},
"icon": {
"$ref": "#/$defs/types/icon-reference"
"type": "string"
},
"weight": {
"type": "integer"

12
icons/construction.json Normal file
View File

@@ -0,0 +1,12 @@
{
"$schema": "../icon.schema.json",
"tags": [
"roadwork",
"maintenance",
"blockade",
"barricade"
],
"categories": [
"development"
]
}

20
icons/construction.svg Normal file
View File

@@ -0,0 +1,20 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M21 6H3C2.44772 6 2 6.44772 2 7V13C2 13.5523 2.44772 14 3 14H21C21.5523 14 22 13.5523 22 13V7C22 6.44772 21.5523 6 21 6Z"/>
<path d="M17 14V21" />
<path d="M7 14V21" />
<path d="M17 3V6" />
<path d="M7 3V6" />
<path d="M2.5 6.5L10 14" />
<path d="M8 6L16 14" />
<path d="M14 6L21.5 13.5" />
</svg>

After

Width:  |  Height:  |  Size: 524 B

10
icons/filter-x.json Normal file
View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"funnel",
"hopper"
],
"categories": [
"layout"
]
}

15
icons/filter-x.svg Normal file
View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m13.013 3h-11.013l8 9.46v6.54l4 2v-8.54l0.89973-1.0554" />
<path d="m22 3-5 5" />
<path d="m17 3 5 5" />
</svg>

After

Width:  |  Height:  |  Size: 328 B

14
icons/helping-hand.json Normal file
View File

@@ -0,0 +1,14 @@
{
"$schema": "../icon.schema.json",
"tags": [
"agreement",
"help",
"proposal",
"charity",
"begging",
"terms"
],
"categories": [
"emoji"
]
}

14
icons/helping-hand.svg Normal file
View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m3 15 5.12-5.12A3 3 0 0 1 10.24 9H13a2 2 0 1 1 0 4h-2.5m4-.68 4.17-4.89a1.88 1.88 0 0 1 2.92 2.36l-4.2 5.94A3 3 0 0 1 14.96 17H9.83a2 2 0 0 0-1.42.59L7 19" />
<path d="m2 14 6 6" />
</svg>

After

Width:  |  Height:  |  Size: 403 B

View File

@@ -10,6 +10,6 @@
stroke-linejoin="round"
>
<path d="M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z" />
<path d="M12 13v9" />
<path d="M12 2v4" />
<path d="M12 13v8" />
<path d="M12 3v3" />
</svg>

Before

Width:  |  Height:  |  Size: 323 B

After

Width:  |  Height:  |  Size: 323 B

View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"split",
"divide"
],
"categories": [
"layout"
]
}

View File

@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
>
<path d="M 8,19 H 5 C 4,19 3,18 3,17 V 7 C 3,6 4,5 5,5 h 3" />
<path d="m 16,5 h 3 c 1,0 2,1 2,2 v 10 c 0,1 -1,2 -2,2 h -3" />
<line x1="12" y1="4" x2="12" y2="20" />
</svg>

After

Width:  |  Height:  |  Size: 359 B

View File

@@ -0,0 +1,10 @@
{
"$schema": "../icon.schema.json",
"tags": [
"split",
"divide"
],
"categories": [
"layout"
]
}

View File

@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M 5,8 V 5 C 5,4 6,3 7,3 h 10 c 1,0 2,1 2,2 v 3" />
<path d="m 19,16 v 3 c 0,1 -1,2 -2,2 H 7 C 6,21 5,20 5,19 v -3" />
<line x1="4" y1="12" x2="20" y2="12" />
</svg>

After

Width:  |  Height:  |  Size: 381 B

View File

@@ -24,7 +24,8 @@
"categories2icons": "node scripts/migrateCategoriesToIcons.mjs --presets @babel/env",
"generate:changelog": "node ./scripts/generateChangelog.mjs",
"postinstall": "husky install",
"lint": "eslint --ext .ts,.js,.mjs ./{packages/lucide,scripts}"
"lint": "eslint --ext .ts,.js,.mjs ./{packages/lucide,scripts}",
"prepare": "husky install"
},
"devDependencies": {
"eslint": "^8.26.0",
@@ -40,11 +41,6 @@
"svgo": "^3.0.0",
"svgson": "^5.2.1"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"icons/*.svg": "node ./scripts/optimizeStagedSvgs.mjs"
},

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-angular",
"description": "A Lucide icon library package for Angular applications",
"version": "0.114.0",
"version": "0.116.0",
"author": "SMAH1",
"license": "ISC",
"homepage": "https://lucide.dev",

View File

@@ -1,6 +1,6 @@
name: lucide_icons
description: A Lucide icon library package for Flutter applications. Fork of Feather Icons, open for anyone to contribute icons.
version: 0.114.0
version: 0.116.0
homepage: https://lucide.dev
repository: https://github.com/lucide-icons/lucide

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-preact",
"description": "A Lucide icon library package for Preact applications",
"version": "0.114.0",
"version": "0.116.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-react-native",
"description": "A Lucide icon library package for React Native applications",
"version": "0.114.0",
"version": "0.116.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-react",
"description": "A Lucide icon library package for React applications",
"version": "0.114.0",
"version": "0.116.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide-svelte",
"description": "A Lucide icon library package for Svelte applications",
"version": "0.114.0",
"version": "0.116.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-vue-next",
"version": "0.114.0",
"version": "0.116.0",
"author": "Eric Fennis",
"description": "A Lucide icon library package for Vue 3 applications",
"license": "ISC",

View File

@@ -1,6 +1,6 @@
{
"name": "lucide-vue",
"version": "0.114.0",
"version": "0.116.0",
"author": "Eric Fennis",
"description": "A Lucide icon library package for Vue 2 applications",
"license": "ISC",

View File

@@ -1,7 +1,7 @@
{
"name": "lucide",
"description": "A Lucide icon library package for web and javascript applications.",
"version": "0.114.0",
"version": "0.116.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",

187
pnpm-lock.yaml generated
View File

@@ -375,6 +375,7 @@ importers:
'@next/eslint-plugin-next': ^12.2.5
'@next/mdx': ^11.0.0
'@svgr/webpack': ^6.3.1
'@swc/core': ^1.3.35
'@testing-library/dom': ^7.31.2
'@testing-library/jest-dom': ^5.16.5
'@testing-library/react': ^11.2.7
@@ -400,6 +401,7 @@ importers:
lucide-react: ^0.94.0
next: '12'
next-mdx-remote: ^3.0.2
node-fetch: '2'
prettier: ^2.3.2
prism-react-renderer: ^1.2.1
react: 17.0.2
@@ -437,6 +439,7 @@ importers:
svgson: 5.2.1
devDependencies:
'@next/eslint-plugin-next': 12.2.5
'@swc/core': 1.3.35
'@testing-library/dom': 7.31.2
'@testing-library/jest-dom': 5.16.5
'@testing-library/react': 11.2.7_sfoxds7t5ydpegc3knd667wn6m
@@ -452,9 +455,10 @@ importers:
eslint: 8.22.0
eslint-config-prettier: 8.5.0_eslint@8.22.0
jest: 26.6.3_ts-node@10.9.1
node-fetch: 2.6.7
prettier: 2.7.1
react-test-renderer: 17.0.2_react@17.0.2
ts-node: 10.9.1_gqqbkana4qauswgj6o2wzoub7a
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
tslib: 2.4.0
typescript: 4.8.4
@@ -9112,6 +9116,113 @@ packages:
- supports-color
dev: false
/@swc/core-darwin-arm64/1.3.35:
resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-darwin-x64/1.3.35:
resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf/1.3.35:
resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-gnu/1.3.35:
resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-musl/1.3.35:
resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-gnu/1.3.35:
resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-musl/1.3.35:
resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-arm64-msvc/1.3.35:
resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-ia32-msvc/1.3.35:
resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-x64-msvc/1.3.35:
resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core/1.3.35:
resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==}
engines: {node: '>=10'}
requiresBuild: true
optionalDependencies:
'@swc/core-darwin-arm64': 1.3.35
'@swc/core-darwin-x64': 1.3.35
'@swc/core-linux-arm-gnueabihf': 1.3.35
'@swc/core-linux-arm64-gnu': 1.3.35
'@swc/core-linux-arm64-musl': 1.3.35
'@swc/core-linux-x64-gnu': 1.3.35
'@swc/core-linux-x64-musl': 1.3.35
'@swc/core-win32-arm64-msvc': 1.3.35
'@swc/core-win32-ia32-msvc': 1.3.35
'@swc/core-win32-x64-msvc': 1.3.35
dev: true
/@swc/helpers/0.4.3:
resolution: {integrity: sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==}
dependencies:
@@ -10700,7 +10811,7 @@ packages:
loader-utils: 2.0.2
make-dir: 3.1.0
schema-utils: 2.7.1
webpack: 5.74.0
webpack: 5.74.0_@swc+core@1.3.35
dev: true
/babel-loader/8.2.5_xc6oct4hcywdrbo4ned6ytbybm:
@@ -16148,7 +16259,7 @@ packages:
jest-validate: 26.6.2
micromatch: 4.0.5
pretty-format: 26.6.2
ts-node: 10.9.1_gqqbkana4qauswgj6o2wzoub7a
ts-node: 10.9.1_iuagarv54md6u2z4nbxsm6bl6u
transitivePeerDependencies:
- bufferutil
- canvas
@@ -22222,6 +22333,31 @@ packages:
supports-hyperlinks: 2.2.0
dev: true
/terser-webpack-plugin/5.3.5_oogp7xv4rppobi5ktio24rc7mq:
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
peerDependencies:
'@swc/core': '*'
esbuild: '*'
uglify-js: '*'
webpack: ^5.1.0
peerDependenciesMeta:
'@swc/core':
optional: true
esbuild:
optional: true
uglify-js:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.15
'@swc/core': 1.3.35
jest-worker: 27.5.1
schema-utils: 3.1.1
serialize-javascript: 6.0.0
terser: 5.16.1
webpack: 5.74.0_@swc+core@1.3.35
dev: true
/terser-webpack-plugin/5.3.5_webpack@5.74.0:
resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==}
engines: {node: '>= 10.13.0'}
@@ -22483,7 +22619,7 @@ packages:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.3
'@types/node': 18.11.4
acorn: 8.8.0
acorn: 8.8.1
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
@@ -22494,7 +22630,7 @@ packages:
yn: 3.1.1
dev: true
/ts-node/10.9.1_gqqbkana4qauswgj6o2wzoub7a:
/ts-node/10.9.1_iuagarv54md6u2z4nbxsm6bl6u:
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@@ -22509,6 +22645,7 @@ packages:
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@swc/core': 1.3.35
'@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
@@ -23650,6 +23787,46 @@ packages:
- uglify-js
dev: true
/webpack/5.74.0_@swc+core@1.3.35:
resolution: {integrity: sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
webpack-cli: '*'
peerDependenciesMeta:
webpack-cli:
optional: true
dependencies:
'@types/eslint-scope': 3.7.4
'@types/estree': 0.0.51
'@webassemblyjs/ast': 1.11.1
'@webassemblyjs/wasm-edit': 1.11.1
'@webassemblyjs/wasm-parser': 1.11.1
acorn: 8.8.1
acorn-import-assertions: 1.8.0_acorn@8.8.1
browserslist: 4.21.4
chrome-trace-event: 1.0.3
enhanced-resolve: 5.10.0
es-module-lexer: 0.9.3
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
graceful-fs: 4.2.10
json-parse-even-better-errors: 2.3.1
loader-runner: 4.3.0
mime-types: 2.1.35
neo-async: 2.6.2
schema-utils: 3.1.1
tapable: 2.2.1
terser-webpack-plugin: 5.3.5_oogp7xv4rppobi5ktio24rc7mq
watchpack: 2.4.0
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
- esbuild
- uglify-js
dev: true
/websocket-driver/0.7.4:
resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
engines: {node: '>=0.8.0'}

View File

@@ -7,7 +7,7 @@ const icons = readAllMetadata(ICONS_DIR);
const CATEGORIES_DIR = path.resolve(currentDir, '../categories');
const categories = readAllMetadata(CATEGORIES_DIR);
console.log(`Read all icons`);
console.log('Reading all icons')
const svgFiles = readSvgDirectory(ICONS_DIR);
const iconNames = svgFiles.map(icon => icon.split('.')[0]);
@@ -47,5 +47,6 @@ Object.keys(categories).forEach(categoryName => {
});
if (error) {
throw new Error('At least one error in icon JSONs prevents from committing changes.');
console.error('At least one error in icon JSONs prevents from committing changes.');
process.exit(1);
}

View File

@@ -1,10 +1,11 @@
import fs from 'fs';
import processSvg from './render/processSvg.mjs';
const svgFiles = process.argv.slice(4);
const svgFiles = process.argv.slice(2);
svgFiles.forEach(async (svgFile) => {
console.log('Optimizing staged SVG file:', svgFile)
const content = fs.readFileSync(svgFile);
const svg = await processSvg(content);
const svg = await processSvg(content, svgFile);
fs.writeFileSync(svgFile, svg, 'utf-8');
});

View File

@@ -11,5 +11,5 @@ const svgFiles = readSvgDirectory(ICONS_DIR);
svgFiles.forEach((svgFile) => {
const content = fs.readFileSync(path.join(ICONS_DIR, svgFile));
processSvg(content).then((svg) => writeSvgFile(svgFile, ICONS_DIR, svg));
processSvg(content, svgFile).then((svg) => writeSvgFile(svgFile, ICONS_DIR, svg));
});

View File

@@ -1,6 +1,6 @@
import { optimize } from 'svgo';
import {optimize} from 'svgo';
import prettier from 'prettier';
import { parseSync, stringify } from 'svgson';
import {parseSync, stringify} from 'svgson';
import DEFAULT_ATTRS from './default-attrs.json' assert { type: 'json' };
/**
@@ -8,8 +8,9 @@ import DEFAULT_ATTRS from './default-attrs.json' assert { type: 'json' };
* @param {string} svg - An SVG string.
* @returns {Promise<string>} An optimized svg
*/
async function optimizeSvg(svg) {
async function optimizeSvg(svg, path) {
const result = optimize(svg, {
path,
plugins: [
{
name: 'preset-default',
@@ -17,12 +18,15 @@ async function optimizeSvg(svg) {
overrides: {
convertShapeToPath: false,
mergePaths: false,
removeAttrs: {
attrs: '(fill|stroke.*)',
},
},
},
},
{
name: 'removeAttrs',
params: {
attrs: '(fill|stroke.*)',
}
}
],
});
@@ -47,12 +51,12 @@ function setAttrs(svg) {
* @param {string} svg An SVG string.
* @returns {Promise<string>} An optimized svg
*/
function processSvg(svg) {
function processSvg(svg, path) {
return (
optimizeSvg(svg)
optimizeSvg(svg, path)
.then(setAttrs)
.then((optimizedSvg) =>
prettier.format(optimizedSvg, { parser: 'babel' }),
prettier.format(optimizedSvg, {parser: 'babel'}),
)
// remove semicolon inserted by prettier
// because prettier thinks it's formatting JSX not HTML

2
site/.gitignore vendored
View File

@@ -1,2 +1,4 @@
.idea
public/docs/images
.vercel
.env

View File

@@ -6,7 +6,7 @@
"scripts": {
"dev": "next dev",
"copy-assets": "mkdir -p ./public/docs/images && cp -rf ../docs/images ./public/docs",
"prebuild": "ts-node scripts/preBuild.tsx",
"prebuild": "ts-node --swc scripts/preBuild.ts",
"build": "pnpm copy-assets && pnpm prebuild && next build",
"export": "next export -o build",
"deploy": "pnpm build && pnpm export",
@@ -42,6 +42,7 @@
},
"devDependencies": {
"@next/eslint-plugin-next": "^12.2.5",
"@swc/core": "^1.3.35",
"@testing-library/dom": "^7.31.2",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^11.2.7",
@@ -57,6 +58,7 @@
"eslint": "^8.22.0",
"eslint-config-prettier": "^8.5.0",
"jest": "^26.5.2",
"node-fetch": "2",
"prettier": "^2.3.2",
"react-test-renderer": "17.0.2",
"ts-node": "~10.9.1",

View File

@@ -2,6 +2,7 @@ import crypto from 'crypto';
import fs from 'fs';
import path from 'path';
import { Contributor } from '../types';
import fetch, { Headers } from 'node-fetch'
const IGNORE_COMMIT_MESSAGES = ['fork', 'optimize'];

View File

@@ -2,11 +2,20 @@ import path from 'path';
import fs from 'fs';
const cacheDir = path.join(process.cwd(), '.next/cache');
const nextDir = path.join(process.cwd(), '.next');
const cachePath = (cacheKey: string) => path.join(cacheDir, `${cacheKey}.json`);
type AtomicCacheable = object|string|number|boolean|null;
type Cacheable = AtomicCacheable|AtomicCacheable[];
if (!fs.existsSync(nextDir)) {
fs.mkdirSync(nextDir)
}
if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir)
}
function read<T extends Cacheable>(cacheKey: string): T {
if (fs.existsSync(cachePath(cacheKey))) {
const iconCache = fs.readFileSync(cachePath(cacheKey), "utf8")
@@ -17,8 +26,10 @@ function read<T extends Cacheable>(cacheKey: string): T {
}
function write<T extends Cacheable>(cacheKey: string, content: T): void {
if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir)
if (!fs.existsSync(path.join(cacheDir, cacheKey))) {
fs.mkdirSync(path.join(cacheDir, cacheKey))
}
fs.writeFileSync(cachePath(cacheKey), JSON.stringify(content), 'utf-8')

View File

@@ -1,10 +1,13 @@
{
"ts-node": {
"esm": true,
"compilerOptions": {
"module": "commonjs"
"baseUrl": ".",
"module": "nodenext",
}
},
"compilerOptions": {
"baseUrl": ".",
"target": "ESNext",
"lib": [
"dom",