diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +node_modules diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..b412068 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,42 @@ +name: Deploy + +on: + push: + branches: [ master ] + +jobs: + deploy-gh-pages: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16] + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'yarn' + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Build + run: yarn workspace @kenrick95/c4-browser run build-gh-pages + - name: Deploy + uses: JamesIves/github-pages-deploy-action@v4.2.5 + with: + branch: gh-pages + folder: app/dist + + deploy-fly: + + runs-on: ubuntu-latest + env: + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} + + steps: + - uses: actions/checkout@v3 + - uses: superfly/flyctl-actions/setup-flyctl@master + - run: flyctl deploy --remote-only diff --git a/.github/workflows/nodejs.yml b/.github/workflows/test.yml similarity index 68% rename from .github/workflows/nodejs.yml rename to .github/workflows/test.yml index 37b181a..31015a2 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,3 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - name: Test on: @@ -16,7 +13,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [16] steps: - uses: actions/checkout@v3 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b616d97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:16-alpine +WORKDIR /usr/src/app + +COPY .yarn .yarn/ +COPY .yarnrc.yml yarn.lock package.json ./ +COPY browser/package.json ./browser/ +COPY core/package.json ./core/ +COPY server/package.json ./server/ + + +RUN yarn install --frozen-lockfile +COPY . . +RUN yarn workspaces foreach --verbose --topological run build + +EXPOSE ${PORT} +CMD [ "yarn", "workspace", "@kenrick95/c4-server", "start"] diff --git a/Procfile b/Procfile deleted file mode 100644 index b55d494..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: yarn workspace @kenrick95/c4-server start diff --git a/browser/package.json b/browser/package.json index 1cbc1e3..5c4356e 100644 --- a/browser/package.json +++ b/browser/package.json @@ -31,11 +31,11 @@ "build": "yarn clean && parcel build src/index.html", "build-gh-pages": "yarn clean && parcel build src/index.html --public-url \"https://kenrick95.github.io/c4/dist/\"", "prettier": "prettier --write \"./**/*.?(ts|html|scss|css)\"", - "clean": "shx rm -rf dist/", + "clean": "rimraf dist/", "test": "echo 'OK'" }, "dependencies": { - "@kenrick95/c4": "4.0.0", + "@kenrick95/c4": "workspace:^", "es6-promise": "^4.2.8", "url-search-params-polyfill": "^8.1.1" }, @@ -43,7 +43,7 @@ "@types/node": "^16.9.6", "parcel-bundler": "^1.12.4", "prettier": "^2.4.1", - "shx": "^0.3.3", + "rimraf": "^3.0.2", "typescript": "^4.4.3" } } diff --git a/browser/src/board/index.ts b/browser/src/board/index.ts index 7428ef2..f2dc467 100644 --- a/browser/src/board/index.ts +++ b/browser/src/board/index.ts @@ -1,6 +1,6 @@ -import { BoardBase, BoardPiece } from '@kenrick95/c4/src/board' -import { Player } from '@kenrick95/c4/src/player' -import { onresize, animationFrame } from '@kenrick95/c4/src/utils' +import { BoardBase, BoardPiece } from '@kenrick95/c4' +import { Player } from '@kenrick95/c4' +import { onresize, animationFrame } from '@kenrick95/c4' import { drawMask, drawCircle, clearCanvas } from './utils' export class Board extends BoardBase { diff --git a/browser/src/game/game-local-2p.ts b/browser/src/game/game-local-2p.ts index 771b4e5..0120d03 100644 --- a/browser/src/game/game-local-2p.ts +++ b/browser/src/game/game-local-2p.ts @@ -1,5 +1,5 @@ -import { BoardPiece } from '@kenrick95/c4/src/board' -import { PlayerHuman } from '@kenrick95/c4/src/player' +import { BoardPiece } from '@kenrick95/c4' +import { PlayerHuman } from '@kenrick95/c4' import { GameLocal, initGameLocal } from './game-local' class GameLocal2p extends GameLocal {} diff --git a/browser/src/game/game-local-ai.ts b/browser/src/game/game-local-ai.ts index 73bf864..5520e8d 100644 --- a/browser/src/game/game-local-ai.ts +++ b/browser/src/game/game-local-ai.ts @@ -1,5 +1,5 @@ -import { BoardPiece } from '@kenrick95/c4/src/board' -import { PlayerAi } from '@kenrick95/c4/src/player' +import { BoardPiece } from '@kenrick95/c4' +import { PlayerAi } from '@kenrick95/c4' import { GameLocal, initGameLocal } from './game-local' class GameLocalAi extends GameLocal {} diff --git a/browser/src/game/game-local.ts b/browser/src/game/game-local.ts index 620d307..1113150 100644 --- a/browser/src/game/game-local.ts +++ b/browser/src/game/game-local.ts @@ -1,12 +1,8 @@ import { Board } from '../board' -import { BoardBase, BoardPiece } from '@kenrick95/c4/src/board' -import { GameBase } from '@kenrick95/c4/src/game' -import { Player, PlayerHuman, PlayerAi } from '@kenrick95/c4/src/player' -import { - showMessage, - animationFrame, - getColumnFromCoord, -} from '@kenrick95/c4/src/utils' +import { BoardBase, BoardPiece } from '@kenrick95/c4' +import { GameBase } from '@kenrick95/c4' +import { Player, PlayerHuman, PlayerAi } from '@kenrick95/c4' +import { showMessage, animationFrame, getColumnFromCoord } from '@kenrick95/c4' const statusbox = document.querySelector('.statusbox') const statusboxBodyGame = document.querySelector('.statusbox-body-game') diff --git a/browser/src/game/game-online-2p.ts b/browser/src/game/game-online-2p.ts index 98d57de..4e9fb24 100644 --- a/browser/src/game/game-online-2p.ts +++ b/browser/src/game/game-online-2p.ts @@ -1,14 +1,14 @@ import { Board } from '../board' -import { BoardBase, BoardPiece } from '@kenrick95/c4/src/board' +import { BoardBase, BoardPiece } from '@kenrick95/c4' import { GameBase, MESSAGE_TYPE, constructMessage, parseMessage, GameOnlineMessage, -} from '@kenrick95/c4/src/game' -import { Player, PlayerHuman, PlayerShadow } from '@kenrick95/c4/src/player' -import { showMessage, getColumnFromCoord } from '@kenrick95/c4/src/utils' +} from '@kenrick95/c4' +import { Player, PlayerHuman, PlayerShadow } from '@kenrick95/c4' +import { showMessage, getColumnFromCoord } from '@kenrick95/c4' enum GAME_MODE { FIRST = BoardPiece.PLAYER_1, @@ -26,7 +26,7 @@ const C4_SERVER_ENDPOINT = process.env.NODE_ENV === 'production' ? process.env.C4_SERVER_ENDPOINT ? process.env.C4_SERVER_ENDPOINT - : `wss://c4-server.herokuapp.com/` + : `wss://c4-server.fly.dev/` : `ws://${location.hostname}:8080` export class GameOnline2p extends GameBase { diff --git a/browser/tsconfig.json b/browser/tsconfig.json index 81f4e01..de332f9 100644 --- a/browser/tsconfig.json +++ b/browser/tsconfig.json @@ -12,6 +12,6 @@ "target": "es5", "lib": ["es2015", "dom", "dom.iterable"] }, - "include": ["src/", "@kenrick95/c4"], + "include": ["src/"], "exclude": ["node_modules", "**/*.spec.ts"] } diff --git a/core/package.json b/core/package.json index a7f795e..70045d0 100644 --- a/core/package.json +++ b/core/package.json @@ -21,7 +21,8 @@ "connect-four", "game" ], - "main": "./dist/lib.ts", + "main": "./dist/lib.js", + "types": "./src/lib.ts", "source": "./src/lib.ts", "files": [ "src/", @@ -29,7 +30,7 @@ ], "scripts": { "build": "yarn clean && parcel build ./src/lib.ts", - "clean": "shx rm -rf dist/", + "clean": "rimraf dist/", "prettier": "prettier --write \"./**/*.?(ts|html|scss|css)\"", "test": "jest" }, @@ -38,7 +39,7 @@ "jest": "^27.2.1", "parcel-bundler": "^1.12.4", "prettier": "^2.4.1", - "shx": "^0.3.3", + "rimraf": "^3.0.2", "ts-jest": "^27.0.5", "typescript": "^4.4.3" } diff --git a/deploy.md b/deploy.md index 9732e4c..3b1fc2b 100644 --- a/deploy.md +++ b/deploy.md @@ -1,21 +1,5 @@ # Deployment notes -## To GitHub Pages -``` -git checkout gh-pages -git merge master -yarn -yarn workspace @kenrick95/c4-browser run build-gh-pages -rm index.html -rm -rf dist/ -mv browser/dist/ dist/ -mv dist/index.html index.html -``` - -## To Heroku - -No action needed. Automatically deployed on master branch - ## To npm Publishing [@kenrick95/c4](https://www.npmjs.com/package/@kenrick95/c4) diff --git a/fly.toml b/fly.toml new file mode 100644 index 0000000..e30bdd0 --- /dev/null +++ b/fly.toml @@ -0,0 +1,42 @@ +# fly.toml file generated for c4-server on 2022-08-27T10:18:06+08:00 + +app = "c4-server" +kill_signal = "SIGINT" +kill_timeout = 5 +processes = [] + +[build] + dockerfile = "Dockerfile" + +[env] + PORT = "8080" + +[experimental] + allowed_public_ports = [] + auto_rollback = true + +[[services]] + http_checks = [] + internal_port = 8080 + processes = ["app"] + protocol = "tcp" + script_checks = [] + [services.concurrency] + hard_limit = 25 + soft_limit = 20 + type = "connections" + + [[services.ports]] + force_https = true + handlers = ["http"] + port = 80 + + [[services.ports]] + handlers = ["tls", "http"] + port = 443 + + [[services.tcp_checks]] + grace_period = "1s" + interval = "15s" + restart_limit = 0 + timeout = "2s" diff --git a/package.json b/package.json index 0ee87d1..164178c 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "url": "https://github.com/kenrick95/c4/issues" }, "engines": { - "node": "^16" + "node": "16.x", + "yarn": "3.x" }, "packageManager": "yarn@3.2.3", "homepage": "https://github.com/kenrick95/c4", @@ -39,7 +40,7 @@ "scripts": { "start": "concurrently --handle-input \"yarn:start-server\" \"yarn:start-browser\"", "start-browser": "yarn workspace @kenrick95/c4-browser start", - "start-server": "yarn workspace @kenrick95/c4-server start-dev" + "start-server": "yarn workspace @kenrick95/c4-server start-dev-watch" }, "devDependencies": { "concurrently": "^6.2.1" diff --git a/server/package.json b/server/package.json index 3f7b3ed..3fd2e1a 100644 --- a/server/package.json +++ b/server/package.json @@ -24,11 +24,14 @@ "files": [ "src/" ], + "main": "./dist/index.js", "source": "./src/index.ts", "scripts": { - "start": "ts-node src/index.ts", - "start-dev": "nodemon --watch src --ignore 'src/**/*.spec.ts' --exec yarn start", - "build": "echo 'OK'", + "start": "yarn node ./dist/index.js", + "start-dev": "ts-node src/index.ts", + "start-dev-watch": "nodemon --watch src --ignore 'src/**/*.spec.ts' --exec yarn start", + "build": "yarn clean && tsc --outDir dist/", + "clean": "rimraf dist/", "prettier": "prettier --write \"./**/*.?(ts|html|scss|css)\"", "test": "echo 'OK'" }, @@ -38,11 +41,12 @@ "@types/ws": "^7.4.7", "nodemon": "^2.0.13", "prettier": "^2.4.1", + "rimraf": "^3.0.2", "ts-node": "^10.2.1", "typescript": "^4.4.3" }, "dependencies": { - "@kenrick95/c4": "4.0.0", + "@kenrick95/c4": "workspace:^", "redux": "^4.1.1", "redux-thunk": "^2.3.0", "uuid": "^8.3.2", diff --git a/server/src/actions.ts b/server/src/actions.ts index 676230d..a636e68 100644 --- a/server/src/actions.ts +++ b/server/src/actions.ts @@ -1,11 +1,11 @@ import { v4 as uuidV4 } from 'uuid' import { PlayerId, MatchId, RenewLastSeenAction, AppThunk } from './types' import * as WebSocket from 'ws' -import { BoardBase, BoardPiece } from '@kenrick95/c4/src/board' +import { BoardBase, BoardPiece } from '@kenrick95/c4' import { MESSAGE_TYPE, constructMessage, -} from '@kenrick95/c4/src/game/game-online/shared' +} from '@kenrick95/c4' export enum ACTION_TYPE { NEW_PLAYER_CONNECTION = 'NEW_PLAYER_CONNECTION', diff --git a/server/src/game/board.ts b/server/src/game/board.ts index 9904968..b37dc5a 100644 --- a/server/src/game/board.ts +++ b/server/src/game/board.ts @@ -1,3 +1,3 @@ -import { BoardBase } from '@kenrick95/c4/src/board' +import { BoardBase } from '@kenrick95/c4' export class ServerBoard extends BoardBase {} diff --git a/server/src/game/game.ts b/server/src/game/game.ts index e27a221..427b2a6 100644 --- a/server/src/game/game.ts +++ b/server/src/game/game.ts @@ -1,8 +1,8 @@ import { ServerBoard } from './board' -import { GameBase } from '@kenrick95/c4/src/game' +import { GameBase } from '@kenrick95/c4' import { ServerPlayer } from './player' import { MatchId } from '../types' -import { BoardPiece } from '@kenrick95/c4/src/board' +import { BoardPiece } from '@kenrick95/c4' import { store } from '..' import { gameEnded } from '../actions' diff --git a/server/src/game/player.ts b/server/src/game/player.ts index 26094c5..a055f0c 100644 --- a/server/src/game/player.ts +++ b/server/src/game/player.ts @@ -1,5 +1,5 @@ -import { BoardPiece } from '@kenrick95/c4/src/board' -import { PlayerShadow } from '@kenrick95/c4/src/player' +import { BoardPiece } from '@kenrick95/c4' +import { PlayerShadow } from '@kenrick95/c4' import { PlayerId } from '../types' export class ServerPlayer extends PlayerShadow { diff --git a/server/src/index.ts b/server/src/index.ts index 406df9e..2cf35ea 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -18,7 +18,7 @@ import { MatchId, State, ActionTypes } from './types' import { MESSAGE_TYPE, parseMessage, -} from '@kenrick95/c4/src/game/game-online/shared' +} from '@kenrick95/c4' const port = parseInt(process.env.PORT || '') || 8080 const wss = new WebSocket.Server({ port: port }) diff --git a/server/src/reducer.ts b/server/src/reducer.ts index 048e196..c3a3604 100644 --- a/server/src/reducer.ts +++ b/server/src/reducer.ts @@ -1,6 +1,6 @@ import { State, ActionTypes } from './types' import { ACTION_TYPE } from './actions' -import { BoardPiece } from '@kenrick95/c4/src/board' +import { BoardPiece } from '@kenrick95/c4' import { ServerGame } from './game/game' import { ServerPlayer } from './game/player' import { ServerBoard } from './game/board' diff --git a/server/tsconfig.json b/server/tsconfig.json index 6223e3b..4fd9346 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -9,6 +9,6 @@ "target": "es2017", "strict": true }, - "include": ["@kenrick95/c4", "src/"], + "include": ["src/"], "exclude": ["node_modules", "**/*.spec.ts"] } diff --git a/yarn.lock b/yarn.lock index 9fdebac..72c10fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1574,12 +1574,12 @@ __metadata: version: 0.0.0-use.local resolution: "@kenrick95/c4-browser@workspace:browser" dependencies: - "@kenrick95/c4": 4.0.0 + "@kenrick95/c4": "workspace:^" "@types/node": ^16.9.6 es6-promise: ^4.2.8 parcel-bundler: ^1.12.4 prettier: ^2.4.1 - shx: ^0.3.3 + rimraf: ^3.0.2 typescript: ^4.4.3 url-search-params-polyfill: ^8.1.1 languageName: unknown @@ -1597,7 +1597,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kenrick95/c4-server@workspace:server" dependencies: - "@kenrick95/c4": 4.0.0 + "@kenrick95/c4": "workspace:^" "@types/node": ^16.9.6 "@types/uuid": ^8.3.1 "@types/ws": ^7.4.7 @@ -1605,6 +1605,7 @@ __metadata: prettier: ^2.4.1 redux: ^4.1.1 redux-thunk: ^2.3.0 + rimraf: ^3.0.2 ts-node: ^10.2.1 typescript: ^4.4.3 uuid: ^8.3.2 @@ -1612,7 +1613,7 @@ __metadata: languageName: unknown linkType: soft -"@kenrick95/c4@4.0.0, @kenrick95/c4@workspace:core": +"@kenrick95/c4@workspace:^, @kenrick95/c4@workspace:core": version: 0.0.0-use.local resolution: "@kenrick95/c4@workspace:core" dependencies: @@ -1620,7 +1621,7 @@ __metadata: jest: ^27.2.1 parcel-bundler: ^1.12.4 prettier: ^2.4.1 - shx: ^0.3.3 + rimraf: ^3.0.2 ts-jest: ^27.0.5 typescript: ^4.4.3 languageName: unknown @@ -5557,13 +5558,6 @@ __metadata: languageName: node linkType: hard -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 - languageName: node - linkType: hard - "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -5713,15 +5707,6 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.8.0": - version: 2.8.1 - resolution: "is-core-module@npm:2.8.1" - dependencies: - has: ^1.0.3 - checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f - languageName: node - linkType: hard - "is-data-descriptor@npm:^0.1.4": version: 0.1.4 resolution: "is-data-descriptor@npm:0.1.4" @@ -7210,7 +7195,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5": +"minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.5": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb @@ -8036,7 +8021,7 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.6": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a @@ -8887,15 +8872,6 @@ __metadata: languageName: node linkType: hard -"rechoir@npm:^0.6.2": - version: 0.6.2 - resolution: "rechoir@npm:0.6.2" - dependencies: - resolve: ^1.1.6 - checksum: fe76bf9c21875ac16e235defedd7cbd34f333c02a92546142b7911a0f7c7059d2e16f441fe6fb9ae203f459c05a31b2bcf26202896d89e390eda7514d5d2702b - languageName: node - linkType: hard - "redux-thunk@npm:^2.3.0": version: 2.3.0 resolution: "redux-thunk@npm:2.3.0" @@ -9138,19 +9114,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6": - version: 1.21.0 - resolution: "resolve@npm:1.21.0" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: d7d9092a5c04a048bea16c7e5a2eb605ac3e8363a0cc5644de1fde17d5028e8d5f4343aab1d99bd327b98e91a66ea83e242718150c64dfedcb96e5e7aad6c4f5 - languageName: node - linkType: hard - "resolve@patch:resolve@^1.1.5#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.4.0#~builtin": version: 1.20.0 resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" @@ -9161,19 +9124,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin": - version: 1.21.0 - resolution: "resolve@patch:resolve@npm%3A1.21.0#~builtin::version=1.21.0&hash=07638b" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: a0a4d1f7409e73190f31f901f8a619960bb3bd4ae38ba3a54c7ea7e1c87758d28a73256bb8d6a35996a903d1bf14f53883f0dcac6c571c063cb8162d813ad26e - languageName: node - linkType: hard - "responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" @@ -9499,31 +9449,6 @@ __metadata: languageName: node linkType: hard -"shelljs@npm:^0.8.4": - version: 0.8.5 - resolution: "shelljs@npm:0.8.5" - dependencies: - glob: ^7.0.0 - interpret: ^1.0.0 - rechoir: ^0.6.2 - bin: - shjs: bin/shjs - checksum: 7babc46f732a98f4c054ec1f048b55b9149b98aa2da32f6cf9844c434b43c6251efebd6eec120937bd0999e13811ebd45efe17410edb3ca938f82f9381302748 - languageName: node - linkType: hard - -"shx@npm:^0.3.3": - version: 0.3.3 - resolution: "shx@npm:0.3.3" - dependencies: - minimist: ^1.2.3 - shelljs: ^0.8.4 - bin: - shx: lib/cli.js - checksum: 2e408a79c680cef4d719a56563217031ef20d5c2c18fdfe28933e22d833adabd995ad6fa6be087a141832cb17010facfc0288e90a6743c0276b478759fd393e0 - languageName: node - linkType: hard - "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -10075,13 +10000,6 @@ __metadata: languageName: node linkType: hard -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - "svgo@npm:^1.0.0, svgo@npm:^1.3.2": version: 1.3.2 resolution: "svgo@npm:1.3.2"