diff --git a/.eslintignore b/.eslintignore index 6237c12..b8b8f97 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,2 @@ -/dist/ +dist/ /dist-web/ diff --git a/.gitignore b/.gitignore index 82d480e..6676611 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,7 @@ bower_components Thumbs.db # Ignore build artifacts -/dist/ +dist/ /dist-web/ # Coverage reports generated by test suites diff --git a/.prettierignore b/.prettierignore index 206a263..478ea69 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ /coverage/ -/dist/ +dist/ /dist-web/ diff --git a/package-lock.json b/package-lock.json index e7c7f66..b651afe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,15 @@ { - "name": "@webtoon/psd", - "version": "0.1.2", + "name": "psd-public", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "@webtoon/psd", - "version": "0.1.2", - "license": "MIT", + "workspaces": [ + "packages/*/" + ], "devDependencies": { - "@types/jest": "^28.1.1", "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", - "ag-psd": "^14.3.12", - "chart.js": "^3.8.0", - "css-loader": "^6.7.1", "env-cmd": "^10.1.0", "eslint": "^8.17.0", "eslint-config-prettier": "^8.5.0", @@ -22,23 +17,10 @@ "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", "gh-pages": "^4.0.0", - "html-loader": "^3.1.0", - "html-webpack-plugin": "^5.5.0", "husky": "^8.0.1", - "jest": "^28.1.1", - "mini-css-extract-plugin": "^2.6.0", "prettier": "^2.6.2", "prettier-plugin-packagejson": "^2.2.18", - "release-it": "^15.0.0", - "rimraf": "^3.0.2", - "style-loader": "^3.3.1", - "ts-jest": "^28.0.4", - "ts-loader": "^9.3.0", - "tsc-watch": "^5.0.3", - "typescript": "^4.7.3", - "webpack": "^5.73.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.9.2" + "rimraf": "^3.0.2" } }, "node_modules/@ampproject/remapping": { @@ -105,6 +87,18 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -766,6 +760,15 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -1447,8 +1450,7 @@ "node_modules/@types/base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw==", - "dev": true + "integrity": "sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw==" }, "node_modules/@types/body-parser": { "version": "1.19.2", @@ -2131,6 +2133,22 @@ } } }, + "node_modules/@webtoon/psd": { + "resolved": "packages/psd", + "link": true + }, + "node_modules/@webtoon/psd-benchmark": { + "resolved": "packages/benchmark", + "link": true + }, + "node_modules/@webtoon/psd-example-browser": { + "resolved": "packages/example-browser", + "link": true + }, + "node_modules/@webtoon/psd-example-node": { + "resolved": "packages/example-node", + "link": true + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -2199,7 +2217,6 @@ "version": "14.3.12", "resolved": "https://registry.npmjs.org/ag-psd/-/ag-psd-14.3.12.tgz", "integrity": "sha512-pAz+aRTg7KTVJPliNIqYSSjB/J8KtNbs/y9qTYZ7EGpNmu6i6Wi6cqjK+Bjx/o8qkYp8720EZkR5a+WnWJGRtQ==", - "dev": true, "dependencies": { "@types/base64-js": "^1.3.0", "base64-js": "^1.5.1" @@ -2479,6 +2496,12 @@ "node": ">=4" } }, + "node_modules/ast-types/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -2604,7 +2627,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -2952,6 +2974,12 @@ "tslib": "^2.0.3" } }, + "node_modules/camel-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -3011,8 +3039,7 @@ "node_modules/chart.js": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.8.0.tgz", - "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==", - "dev": true + "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==" }, "node_modules/chokidar": { "version": "3.5.3", @@ -3560,6 +3587,21 @@ "node": ">= 6" } }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3896,6 +3938,12 @@ "tslib": "^2.0.3" } }, + "node_modules/dot-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -3908,18 +3956,21 @@ "node": ">=8" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4390,15 +4441,6 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-module-utils/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -4430,18 +4472,6 @@ "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-compat/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-compat/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -4457,12 +4487,6 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-compat/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-plugin-header": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", @@ -4693,21 +4717,6 @@ "node": ">= 0.6" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -5108,6 +5117,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/filewatcher": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", + "integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==", + "dev": true, + "dependencies": { + "debounce": "^1.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5272,12 +5290,6 @@ "node": ">= 0.6" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -5685,6 +5697,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -7553,6 +7571,15 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-snapshot": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.1.tgz", @@ -7841,15 +7868,15 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, "bin": { "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" } }, "node_modules/jsonfile": { @@ -8008,6 +8035,12 @@ "tslib": "^2.0.3" } }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -8021,12 +8054,15 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/macos-release": { @@ -8080,12 +8116,6 @@ "tmpl": "1.0.5" } }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8348,12 +8378,34 @@ "tslib": "^2.0.3" } }, - "node_modules/node-cleanup": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", - "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==", + "node_modules/no-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, + "node_modules/node-dev": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/node-dev/-/node-dev-7.4.3.tgz", + "integrity": "sha512-o8aYipN28xY+WEunMHHiNc3hpPSkGG8ulHyYBapNbkg4dQxohmhx6jiRbiFhTF6zy+5IwljUGv1EcuxsaWI4Bw==", + "dev": true, + "dependencies": { + "dateformat": "^3.0.3", + "dynamic-dedupe": "^0.3.0", + "filewatcher": "~3.0.0", + "get-package-type": "^0.1.0", + "minimist": "^1.2.6", + "node-notifier": "^8.0.1", + "resolve": "^1.22.0", + "semver": "^7.3.7" + }, + "bin": { + "node-dev": "bin/node-dev" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -8389,6 +8441,20 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, "node_modules/node-releases": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", @@ -8758,12 +8824,12 @@ } }, "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/pac-proxy-agent": { @@ -9000,6 +9066,12 @@ "tslib": "^2.0.3" } }, + "node_modules/param-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9079,6 +9151,12 @@ "tslib": "^2.0.3" } }, + "node_modules/pascal-case/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9127,15 +9205,6 @@ "node": ">=8" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9257,6 +9326,15 @@ "node": ">=8" } }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", @@ -9526,27 +9604,27 @@ "node": ">= 8" } }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/proxy-agent/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10210,6 +10288,12 @@ "tslib": "^2.1.0" } }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -10329,24 +10413,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -10550,8 +10616,14 @@ "node": ">=4" } }, - "node_modules/side-channel": { - "version": "1.0.4", + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, @@ -10734,18 +10806,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -10791,15 +10851,6 @@ "node": ">= 0.8" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1" - } - }, "node_modules/strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -10838,15 +10889,6 @@ } ] }, - "node_modules/string-argv": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz", - "integrity": "sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -10915,12 +10957,12 @@ } }, "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/strip-final-newline": { @@ -11256,7 +11298,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/trim-repeated": { @@ -11319,6 +11361,18 @@ } } }, + "node_modules/ts-jest/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -11347,28 +11401,6 @@ "webpack": "^5.0.0" } }, - "node_modules/tsc-watch": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-5.0.3.tgz", - "integrity": "sha512-Hz2UawwELMSLOf0xHvAFc7anLeMw62cMVXr1flYmhRuOhOyOljwmb1l/O60ZwRyy1k7N1iC1mrn1QYM2zITfuw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "node-cleanup": "^2.1.2", - "ps-tree": "^1.2.0", - "string-argv": "^0.1.1", - "strip-ansi": "^6.0.0" - }, - "bin": { - "tsc-watch": "index.js" - }, - "engines": { - "node": ">=8.17.0" - }, - "peerDependencies": { - "typescript": "*" - } - }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -11381,31 +11413,10 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tsutils": { @@ -11423,12 +11434,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12166,6 +12171,15 @@ "node": "*" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -12176,9 +12190,9 @@ } }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/yaml": { @@ -12228,6 +12242,69 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "packages/benchmark": { + "name": "@webtoon/psd-benchmark", + "dependencies": { + "@webtoon/psd": "*", + "ag-psd": "^14.3.12", + "chart.js": "^3.8.0" + }, + "devDependencies": { + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } + }, + "packages/example-browser": { + "name": "@webtoon/psd-example-browser", + "dependencies": { + "@webtoon/psd": "*" + }, + "devDependencies": { + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } + }, + "packages/example-node": { + "name": "@webtoon/psd-example-node", + "dependencies": { + "@webtoon/psd": "*" + }, + "devDependencies": { + "node-dev": "^7.4.3" + } + }, + "packages/psd": { + "name": "@webtoon/psd", + "version": "0.1.2", + "license": "MIT", + "devDependencies": { + "@types/jest": "^28.1.1", + "jest": "^28.1.1", + "release-it": "^15.0.0", + "ts-jest": "^28.0.4", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } } }, "dependencies": { @@ -12279,6 +12356,12 @@ "semver": "^6.3.0" }, "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -12788,6 +12871,12 @@ "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -13361,8 +13450,7 @@ "@types/base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw==", - "dev": true + "integrity": "sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw==" }, "@types/body-parser": { "version": "1.19.2", @@ -13943,6 +14031,61 @@ "dev": true, "requires": {} }, + "@webtoon/psd": { + "version": "file:packages/psd", + "requires": { + "@types/jest": "^28.1.1", + "jest": "^28.1.1", + "release-it": "^15.0.0", + "ts-jest": "^28.0.4", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } + }, + "@webtoon/psd-benchmark": { + "version": "file:packages/benchmark", + "requires": { + "@webtoon/psd": "*", + "ag-psd": "^14.3.12", + "chart.js": "^3.8.0", + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } + }, + "@webtoon/psd-example-browser": { + "version": "file:packages/example-browser", + "requires": { + "@webtoon/psd": "*", + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } + }, + "@webtoon/psd-example-node": { + "version": "file:packages/example-node", + "requires": { + "@webtoon/psd": "*", + "node-dev": "^7.4.3" + } + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -13995,7 +14138,6 @@ "version": "14.3.12", "resolved": "https://registry.npmjs.org/ag-psd/-/ag-psd-14.3.12.tgz", "integrity": "sha512-pAz+aRTg7KTVJPliNIqYSSjB/J8KtNbs/y9qTYZ7EGpNmu6i6Wi6cqjK+Bjx/o8qkYp8720EZkR5a+WnWJGRtQ==", - "dev": true, "requires": { "@types/base64-js": "^1.3.0", "base64-js": "^1.5.1" @@ -14201,6 +14343,14 @@ "dev": true, "requires": { "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "async": { @@ -14306,8 +14456,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "batch": { "version": "0.6.1", @@ -14560,6 +14709,14 @@ "requires": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "camelcase": { @@ -14599,8 +14756,7 @@ "chart.js": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.8.0.tgz", - "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==", - "dev": true + "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==" }, "chokidar": { "version": "3.5.3", @@ -15015,6 +15171,18 @@ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", "dev": true }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -15258,6 +15426,14 @@ "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "dot-prop": { @@ -15269,18 +15445,21 @@ "is-obj": "^2.0.0" } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==", "dev": true }, + "dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -15669,12 +15848,6 @@ "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -15699,15 +15872,6 @@ "semver": "7.3.5" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -15716,12 +15880,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -15881,21 +16039,6 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -16212,6 +16355,15 @@ "trim-repeated": "^1.0.0" } }, + "filewatcher": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/filewatcher/-/filewatcher-3.0.1.tgz", + "integrity": "sha512-Fro8py2B8EJupSP37Kyd4kjKZLr+5ksFq7Vbw8A392Z15Unq8016SPUDvO/AsDj5V6bbPk98PTAinpc5YhPbJw==", + "dev": true, + "requires": { + "debounce": "^1.0.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -16331,12 +16483,6 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -16650,6 +16796,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -17994,6 +18146,14 @@ "jest-util": "^28.1.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } } }, "jest-snapshot": { @@ -18227,10 +18387,13 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } }, "jsonfile": { "version": "4.0.0", @@ -18352,6 +18515,14 @@ "dev": true, "requires": { "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "lowercase-keys": { @@ -18361,12 +18532,12 @@ "dev": true }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "macos-release": { @@ -18407,12 +18578,6 @@ "tmpl": "1.0.5" } }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -18602,13 +18767,31 @@ "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, - "node-cleanup": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", - "integrity": "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==", - "dev": true + "node-dev": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/node-dev/-/node-dev-7.4.3.tgz", + "integrity": "sha512-o8aYipN28xY+WEunMHHiNc3hpPSkGG8ulHyYBapNbkg4dQxohmhx6jiRbiFhTF6zy+5IwljUGv1EcuxsaWI4Bw==", + "dev": true, + "requires": { + "dateformat": "^3.0.3", + "dynamic-dedupe": "^0.3.0", + "filewatcher": "~3.0.0", + "get-package-type": "^0.1.0", + "minimist": "^1.2.6", + "node-notifier": "^8.0.1", + "resolve": "^1.22.0", + "semver": "^7.3.7" + } }, "node-fetch": { "version": "2.6.7", @@ -18631,6 +18814,20 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, "node-releases": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", @@ -18882,9 +19079,9 @@ } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "pac-proxy-agent": { @@ -19075,6 +19272,14 @@ "requires": { "dot-case": "^3.0.4", "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "parent-module": { @@ -19142,6 +19347,14 @@ "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "path-exists": { @@ -19180,15 +19393,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "requires": { - "through": "~2.3" - } - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -19273,6 +19477,12 @@ "requires": { "p-limit": "^2.2.0" } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true } } }, @@ -19463,6 +19673,23 @@ "pac-proxy-agent": "^5.0.0", "proxy-from-env": "^1.0.0", "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "proxy-from-env": { @@ -19471,15 +19698,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "requires": { - "event-stream": "=3.3.4" - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -19940,6 +20158,14 @@ "dev": true, "requires": { "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, "safe-buffer": { @@ -20017,23 +20243,6 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "semver-diff": { @@ -20229,6 +20438,12 @@ "rechoir": "^0.6.2" } }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -20383,15 +20598,6 @@ "wbuf": "^1.7.3" } }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "requires": { - "through": "2" - } - }, "split-on-first": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", @@ -20427,15 +20633,6 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", @@ -20459,12 +20656,6 @@ } } }, - "string-argv": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz", - "integrity": "sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==", - "dev": true - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -20518,9 +20709,9 @@ } }, "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-final-newline": { @@ -20756,7 +20947,7 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "trim-repeated": { @@ -20792,6 +20983,12 @@ "yargs-parser": "^20.x" }, "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -20812,19 +21009,6 @@ "semver": "^7.3.4" } }, - "tsc-watch": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-5.0.3.tgz", - "integrity": "sha512-Hz2UawwELMSLOf0xHvAFc7anLeMw62cMVXr1flYmhRuOhOyOljwmb1l/O60ZwRyy1k7N1iC1mrn1QYM2zITfuw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "node-cleanup": "^2.1.2", - "ps-tree": "^1.2.0", - "string-argv": "^0.1.1", - "strip-ansi": "^6.0.0" - } - }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -20835,29 +21019,12 @@ "json5": "^1.0.1", "minimist": "^1.2.6", "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tsutils": { @@ -20867,14 +21034,6 @@ "dev": true, "requires": { "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } } }, "type-check": { @@ -21410,6 +21569,12 @@ "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -21417,9 +21582,9 @@ "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { diff --git a/package.json b/package.json index 6fec314..91bd854 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,19 @@ { - "name": "@webtoon/psd", - "version": "0.1.2", - "description": "lightweight psd file parser with no dependency written in typescript", - "homepage": "https://webtoon.github.io/psd", - "license": "MIT", - "author": "W FE Tech ", - "contributors": [ - "Lee Dong Hyun ", - "Kang Ye Hyoung " - ], - "type": "module", - "main": "./dist/main.js", - "types": "./dist/src/index.d.ts", - "files": [ - "dist" + "private": true, + "workspaces": [ + "packages/*/" ], "scripts": { - "build": "webpack --mode=production", - "build:benchmark": "webpack -c examples/benchmark/webpack.config.js --mode=production", - "build:browser": "webpack -c examples/browser/webpack.config.js --mode=production", - "clear": "rimraf dist/ dist-web/", - "deploy": "npm run build:browser && npm run build:benchmark && gh-pages -d dist-web/", + "build": "npm -w @webtoon/psd run build", + "clear": "rimraf packages/psd/dist/ dist-web/", + "deploy": "npm -w @webtoon/psd-example-browser -w @webtoon/psd-benchmark run build && gh-pages -d dist-web/", "fix": "eslint --fix . && prettier --write .", "lint": "eslint . && prettier --check .", "prepare": "husky install", - "prepublishOnly": "npm run build", - "release": "env-cmd release-it", - "start:benchmark": "webpack serve -c examples/benchmark/webpack.config.js --mode=development", - "start:browser": "webpack serve -c examples/browser/webpack.config.js --mode=development", - "start:node": "npm run clear && tsc-watch -p ./tsconfig.json --onSuccess \"node --experimental-specifier-resolution=node --trace-uncaught ./examples/node/script.js\"", - "test": "jest" + "release": "env-cmd npm -w @webtoon/psd run release", + "start:benchmark": "npm -w @webtoon/psd run watch & sleep 1 && npm -w @webtoon/psd-benchmark start", + "start:browser": "npm -w @webtoon/psd run watch & sleep 1 && npm -w @webtoon/psd-example-browser start", + "start:node": "npm -w @webtoon/psd run watch & sleep 1 && npm -w @webtoon/psd-example-node start" }, "browserslist": [ "chrome >= 38", @@ -39,12 +23,8 @@ "node >= 12" ], "devDependencies": { - "@types/jest": "^28.1.1", "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", - "ag-psd": "^14.3.12", - "chart.js": "^3.8.0", - "css-loader": "^6.7.1", "env-cmd": "^10.1.0", "eslint": "^8.17.0", "eslint-config-prettier": "^8.5.0", @@ -52,25 +32,9 @@ "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", "gh-pages": "^4.0.0", - "html-loader": "^3.1.0", - "html-webpack-plugin": "^5.5.0", "husky": "^8.0.1", - "jest": "^28.1.1", - "mini-css-extract-plugin": "^2.6.0", "prettier": "^2.6.2", "prettier-plugin-packagejson": "^2.2.18", - "release-it": "^15.0.0", - "rimraf": "^3.0.2", - "style-loader": "^3.3.1", - "ts-jest": "^28.0.4", - "ts-loader": "^9.3.0", - "tsc-watch": "^5.0.3", - "typescript": "^4.7.3", - "webpack": "^5.73.0", - "webpack-cli": "^4.9.2", - "webpack-dev-server": "^4.9.2" - }, - "publishConfig": { - "access": "public" + "rimraf": "^3.0.2" } } diff --git a/packages/benchmark/package.json b/packages/benchmark/package.json new file mode 100644 index 0000000..5f2ba52 --- /dev/null +++ b/packages/benchmark/package.json @@ -0,0 +1,26 @@ +{ + "name": "@webtoon/psd-benchmark", + "private": true, + "type": "module", + "scripts": { + "build": "webpack --mode=production", + "start": "webpack serve --mode=development" + }, + "dependencies": { + "@webtoon/psd": "*", + "ag-psd": "^14.3.12", + "chart.js": "^3.8.0" + }, + "devDependencies": { + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } +} diff --git a/examples/node/example.psd b/packages/benchmark/public/example.psd similarity index 100% rename from examples/node/example.psd rename to packages/benchmark/public/example.psd diff --git a/examples/benchmark/public/favicon.ico b/packages/benchmark/public/favicon.ico similarity index 100% rename from examples/benchmark/public/favicon.ico rename to packages/benchmark/public/favicon.ico diff --git a/examples/benchmark/public/index.html b/packages/benchmark/public/index.html similarity index 100% rename from examples/benchmark/public/index.html rename to packages/benchmark/public/index.html diff --git a/examples/benchmark/src/bench.ts b/packages/benchmark/src/bench.ts similarity index 99% rename from examples/benchmark/src/bench.ts rename to packages/benchmark/src/bench.ts index 8c9228c..8beaa30 100644 --- a/examples/benchmark/src/bench.ts +++ b/packages/benchmark/src/bench.ts @@ -2,8 +2,8 @@ // Copyright 2021-present NAVER WEBTOON // MIT License +import Psd from "@webtoon/psd"; import * as AgPsd from "ag-psd"; -import Psd from "../../../src"; import {BenchmarkMeasurements} from "./model"; // Use the require() function provided by the browser bundle of PSD.js diff --git a/examples/benchmark/src/main.ts b/packages/benchmark/src/main.ts similarity index 100% rename from examples/benchmark/src/main.ts rename to packages/benchmark/src/main.ts diff --git a/examples/benchmark/src/model.ts b/packages/benchmark/src/model.ts similarity index 99% rename from examples/benchmark/src/model.ts rename to packages/benchmark/src/model.ts index 2283fa3..bfbbd56 100644 --- a/examples/benchmark/src/model.ts +++ b/packages/benchmark/src/model.ts @@ -271,7 +271,7 @@ export const initialAppState = new AppState({ error: null, // Webpack will resolve this as a resource asset // eslint-disable-next-line compat/compat - defaultPsdFileUrl: new URL("../../node/example.psd", import.meta.url), + defaultPsdFileUrl: new URL("../public/example.psd", import.meta.url), defaultPsdFileData: null, }); diff --git a/examples/benchmark/src/psd-js.d.ts b/packages/benchmark/src/psd-js.d.ts similarity index 100% rename from examples/benchmark/src/psd-js.d.ts rename to packages/benchmark/src/psd-js.d.ts diff --git a/examples/benchmark/src/spinner.css b/packages/benchmark/src/spinner.css similarity index 100% rename from examples/benchmark/src/spinner.css rename to packages/benchmark/src/spinner.css diff --git a/examples/benchmark/src/style.css b/packages/benchmark/src/style.css similarity index 100% rename from examples/benchmark/src/style.css rename to packages/benchmark/src/style.css diff --git a/examples/benchmark/src/views/chart.ts b/packages/benchmark/src/views/chart.ts similarity index 100% rename from examples/benchmark/src/views/chart.ts rename to packages/benchmark/src/views/chart.ts diff --git a/examples/benchmark/src/views/common.ts b/packages/benchmark/src/views/common.ts similarity index 100% rename from examples/benchmark/src/views/common.ts rename to packages/benchmark/src/views/common.ts diff --git a/examples/benchmark/src/views/control-panel.ts b/packages/benchmark/src/views/control-panel.ts similarity index 100% rename from examples/benchmark/src/views/control-panel.ts rename to packages/benchmark/src/views/control-panel.ts diff --git a/examples/benchmark/src/views/error-panel.ts b/packages/benchmark/src/views/error-panel.ts similarity index 100% rename from examples/benchmark/src/views/error-panel.ts rename to packages/benchmark/src/views/error-panel.ts diff --git a/examples/benchmark/src/views/index.ts b/packages/benchmark/src/views/index.ts similarity index 100% rename from examples/benchmark/src/views/index.ts rename to packages/benchmark/src/views/index.ts diff --git a/examples/benchmark/src/views/progress-panel.ts b/packages/benchmark/src/views/progress-panel.ts similarity index 100% rename from examples/benchmark/src/views/progress-panel.ts rename to packages/benchmark/src/views/progress-panel.ts diff --git a/examples/benchmark/src/views/result-panel.ts b/packages/benchmark/src/views/result-panel.ts similarity index 100% rename from examples/benchmark/src/views/result-panel.ts rename to packages/benchmark/src/views/result-panel.ts diff --git a/packages/benchmark/tsconfig.json b/packages/benchmark/tsconfig.json new file mode 100644 index 0000000..efdc934 --- /dev/null +++ b/packages/benchmark/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src/"] +} diff --git a/examples/benchmark/webpack.config.js b/packages/benchmark/webpack.config.js similarity index 100% rename from examples/benchmark/webpack.config.js rename to packages/benchmark/webpack.config.js diff --git a/packages/example-browser/package.json b/packages/example-browser/package.json new file mode 100644 index 0000000..7d286c2 --- /dev/null +++ b/packages/example-browser/package.json @@ -0,0 +1,24 @@ +{ + "name": "@webtoon/psd-example-browser", + "private": true, + "type": "module", + "scripts": { + "build": "webpack --mode=production", + "start": "webpack serve --mode=development" + }, + "dependencies": { + "@webtoon/psd": "*" + }, + "devDependencies": { + "css-loader": "^6.7.1", + "html-loader": "^3.1.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + } +} diff --git a/examples/browser/src/main.ts b/packages/example-browser/src/main.ts similarity index 100% rename from examples/browser/src/main.ts rename to packages/example-browser/src/main.ts diff --git a/examples/browser/src/messaging.ts b/packages/example-browser/src/messaging.ts similarity index 100% rename from examples/browser/src/messaging.ts rename to packages/example-browser/src/messaging.ts diff --git a/examples/browser/src/style.css b/packages/example-browser/src/style.css similarity index 100% rename from examples/browser/src/style.css rename to packages/example-browser/src/style.css diff --git a/examples/browser/src/worker.ts b/packages/example-browser/src/worker.ts similarity index 97% rename from examples/browser/src/worker.ts rename to packages/example-browser/src/worker.ts index eea188a..600990a 100644 --- a/examples/browser/src/worker.ts +++ b/packages/example-browser/src/worker.ts @@ -2,7 +2,7 @@ // Copyright 2021-present NAVER WEBTOON // MIT License -import Psd from "./../../../src"; +import Psd from "@webtoon/psd"; import {createMessage, validateMessage} from "./messaging"; self.addEventListener("message", ({data}) => { diff --git a/examples/browser/statics/chrome.svg b/packages/example-browser/statics/chrome.svg similarity index 100% rename from examples/browser/statics/chrome.svg rename to packages/example-browser/statics/chrome.svg diff --git a/examples/browser/statics/favicon.ico b/packages/example-browser/statics/favicon.ico similarity index 100% rename from examples/browser/statics/favicon.ico rename to packages/example-browser/statics/favicon.ico diff --git a/examples/browser/statics/firefox.svg b/packages/example-browser/statics/firefox.svg similarity index 100% rename from examples/browser/statics/firefox.svg rename to packages/example-browser/statics/firefox.svg diff --git a/examples/browser/statics/index.html b/packages/example-browser/statics/index.html similarity index 100% rename from examples/browser/statics/index.html rename to packages/example-browser/statics/index.html diff --git a/examples/browser/statics/internetexplorer.svg b/packages/example-browser/statics/internetexplorer.svg similarity index 100% rename from examples/browser/statics/internetexplorer.svg rename to packages/example-browser/statics/internetexplorer.svg diff --git a/examples/browser/statics/safari.svg b/packages/example-browser/statics/safari.svg similarity index 100% rename from examples/browser/statics/safari.svg rename to packages/example-browser/statics/safari.svg diff --git a/examples/browser/statics/webtoon.svg b/packages/example-browser/statics/webtoon.svg similarity index 100% rename from examples/browser/statics/webtoon.svg rename to packages/example-browser/statics/webtoon.svg diff --git a/packages/example-browser/tsconfig.json b/packages/example-browser/tsconfig.json new file mode 100644 index 0000000..efdc934 --- /dev/null +++ b/packages/example-browser/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src/"] +} diff --git a/examples/browser/webpack.config.js b/packages/example-browser/webpack.config.js similarity index 100% rename from examples/browser/webpack.config.js rename to packages/example-browser/webpack.config.js diff --git a/examples/node/example.psb b/packages/example-node/example.psb similarity index 100% rename from examples/node/example.psb rename to packages/example-node/example.psb diff --git a/tests/integration/fixtures/example/example.psd b/packages/example-node/example.psd similarity index 100% rename from tests/integration/fixtures/example/example.psd rename to packages/example-node/example.psd diff --git a/packages/example-node/package.json b/packages/example-node/package.json new file mode 100644 index 0000000..090c6c9 --- /dev/null +++ b/packages/example-node/package.json @@ -0,0 +1,14 @@ +{ + "name": "@webtoon/psd-example-node", + "private": true, + "type": "module", + "scripts": { + "start": "node-dev --respawn --debounce 1000 --trace-uncaught -- ./script.js" + }, + "dependencies": { + "@webtoon/psd": "*" + }, + "devDependencies": { + "node-dev": "^7.4.3" + } +} diff --git a/examples/node/script.js b/packages/example-node/script.js similarity index 92% rename from examples/node/script.js rename to packages/example-node/script.js index d3f3ed1..5561ae2 100644 --- a/examples/node/script.js +++ b/packages/example-node/script.js @@ -2,11 +2,11 @@ // Copyright 2021-present NAVER WEBTOON // MIT License -import * as path from "path"; import * as fs from "fs"; +import * as path from "path"; import {fileURLToPath} from "url"; -import * as Psd from "../.."; +import * as Psd from "@webtoon/psd"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/.npmignore b/packages/psd/.npmignore similarity index 65% rename from .npmignore rename to packages/psd/.npmignore index f27bcde..c57cb99 100644 --- a/.npmignore +++ b/packages/psd/.npmignore @@ -1,4 +1,2 @@ -.idea .npmignore webpack.config.js -example/ diff --git a/.release-it.json b/packages/psd/.release-it.json similarity index 100% rename from .release-it.json rename to packages/psd/.release-it.json diff --git a/packages/psd/LICENSE b/packages/psd/LICENSE new file mode 100644 index 0000000..0167968 --- /dev/null +++ b/packages/psd/LICENSE @@ -0,0 +1,19 @@ +Copyright 2021-present NAVER WEBTOON + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/packages/psd/README.md b/packages/psd/README.md new file mode 100644 index 0000000..1ea6e8f --- /dev/null +++ b/packages/psd/README.md @@ -0,0 +1,39 @@ +# @webtoon/psd + +[![Package on NPM](https://img.shields.io/npm/v/@webtoon/psd)](https://www.npmjs.com/package/@webtoon/psd) [![Minified size](https://img.shields.io/bundlephobia/min/@webtoon/psd)](https://bundlephobia.com/package/@webtoon/psd) + +> A lightweight Adobe Photoshop .psd/.psb file parser in typescript with zero-dependency for web browsers and NodeJS + +`@webtoon/psd` is a fast, lightweight parser for Adobe Photoshop PSD/PSB files. It uses standard (ES2015+) features and can be used both in web browsers and in Node.js. It pulls in zero dependencies, making it smaller than other PSD parsers. + +Check out: + +- [GitHub repo](https://github.com/webtoon/psd/) for documentation. +- [Live demo](https://webtoon.github.io/psd/) +- [Benchmark page](https://webtoon.github.io/psd/benchmark/) + +## License + +`@webtoon/psd` is released under the [MIT license](https://github.com/webtoon/psd/blob/main/LICENSE). + +``` +Copyright 2021-present NAVER WEBTOON + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +``` diff --git a/jest.config.js b/packages/psd/jest.config.js similarity index 100% rename from jest.config.js rename to packages/psd/jest.config.js diff --git a/packages/psd/package.json b/packages/psd/package.json new file mode 100644 index 0000000..41d6b4a --- /dev/null +++ b/packages/psd/package.json @@ -0,0 +1,39 @@ +{ + "name": "@webtoon/psd", + "version": "0.1.2", + "description": "lightweight psd file parser with no dependency written in typescript", + "homepage": "https://webtoon.github.io/psd", + "license": "MIT", + "author": "W FE Tech ", + "contributors": [ + "Lee Dong Hyun ", + "Kang Ye Hyoung " + ], + "type": "module", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "webpack --mode=production", + "prepublishOnly": "npm run build", + "release": "release-it", + "test": "jest", + "watch": "webpack watch --mode=production" + }, + "devDependencies": { + "@types/jest": "^28.1.1", + "jest": "^28.1.1", + "release-it": "^15.0.0", + "ts-jest": "^28.0.4", + "ts-loader": "^9.3.0", + "typescript": "^4.7.3", + "webpack": "^5.73.0", + "webpack-cli": "^4.9.2", + "webpack-dev-server": "^4.9.2" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/src/classes/Group.ts b/packages/psd/src/classes/Group.ts similarity index 100% rename from src/classes/Group.ts rename to packages/psd/src/classes/Group.ts diff --git a/src/classes/Layer.ts b/packages/psd/src/classes/Layer.ts similarity index 100% rename from src/classes/Layer.ts rename to packages/psd/src/classes/Layer.ts diff --git a/src/classes/Node.ts b/packages/psd/src/classes/Node.ts similarity index 100% rename from src/classes/Node.ts rename to packages/psd/src/classes/Node.ts diff --git a/src/classes/Psd.ts b/packages/psd/src/classes/Psd.ts similarity index 100% rename from src/classes/Psd.ts rename to packages/psd/src/classes/Psd.ts diff --git a/src/classes/Slice.ts b/packages/psd/src/classes/Slice.ts similarity index 100% rename from src/classes/Slice.ts rename to packages/psd/src/classes/Slice.ts diff --git a/src/classes/Synthesizable.ts b/packages/psd/src/classes/Synthesizable.ts similarity index 93% rename from src/classes/Synthesizable.ts rename to packages/psd/src/classes/Synthesizable.ts index 9538da1..3d801a4 100644 --- a/src/classes/Synthesizable.ts +++ b/packages/psd/src/classes/Synthesizable.ts @@ -3,7 +3,7 @@ // MIT License import {ImageData} from "../interfaces"; -import {generateRgba, applyOpacity} from "../methods"; +import {applyOpacity, generateRgba} from "../methods"; export abstract class Synthesizable { public abstract get width(): number; diff --git a/src/classes/index.ts b/packages/psd/src/classes/index.ts similarity index 100% rename from src/classes/index.ts rename to packages/psd/src/classes/index.ts diff --git a/src/index.ts b/packages/psd/src/index.ts similarity index 100% rename from src/index.ts rename to packages/psd/src/index.ts diff --git a/src/interfaces/AdditionalLayerInfo/AliBlockBase.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/AliBlockBase.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/AliBlockBase.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/AliBlockBase.ts diff --git a/src/interfaces/AdditionalLayerInfo/AliKey.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/AliKey.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/AliKey.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/AliKey.ts diff --git a/src/interfaces/AdditionalLayerInfo/SectionDividerSettingAliBlock.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/SectionDividerSettingAliBlock.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/SectionDividerSettingAliBlock.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/SectionDividerSettingAliBlock.ts diff --git a/src/interfaces/AdditionalLayerInfo/TypeToolObjectSettingAliBlock.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/TypeToolObjectSettingAliBlock.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/TypeToolObjectSettingAliBlock.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/TypeToolObjectSettingAliBlock.ts diff --git a/src/interfaces/AdditionalLayerInfo/UnicodeLayerNameAliBlock.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/UnicodeLayerNameAliBlock.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/UnicodeLayerNameAliBlock.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/UnicodeLayerNameAliBlock.ts diff --git a/src/interfaces/AdditionalLayerInfo/index.ts b/packages/psd/src/interfaces/AdditionalLayerInfo/index.ts similarity index 100% rename from src/interfaces/AdditionalLayerInfo/index.ts rename to packages/psd/src/interfaces/AdditionalLayerInfo/index.ts diff --git a/src/interfaces/BlendMode.ts b/packages/psd/src/interfaces/BlendMode.ts similarity index 100% rename from src/interfaces/BlendMode.ts rename to packages/psd/src/interfaces/BlendMode.ts diff --git a/src/interfaces/ChannelBytes.ts b/packages/psd/src/interfaces/ChannelBytes.ts similarity index 100% rename from src/interfaces/ChannelBytes.ts rename to packages/psd/src/interfaces/ChannelBytes.ts diff --git a/src/interfaces/ChannelCompression.ts b/packages/psd/src/interfaces/ChannelCompression.ts similarity index 100% rename from src/interfaces/ChannelCompression.ts rename to packages/psd/src/interfaces/ChannelCompression.ts diff --git a/src/interfaces/ChannelKind.ts b/packages/psd/src/interfaces/ChannelKind.ts similarity index 100% rename from src/interfaces/ChannelKind.ts rename to packages/psd/src/interfaces/ChannelKind.ts diff --git a/src/interfaces/Clipping.ts b/packages/psd/src/interfaces/Clipping.ts similarity index 100% rename from src/interfaces/Clipping.ts rename to packages/psd/src/interfaces/Clipping.ts diff --git a/src/interfaces/ColorMode.ts b/packages/psd/src/interfaces/ColorMode.ts similarity index 100% rename from src/interfaces/ColorMode.ts rename to packages/psd/src/interfaces/ColorMode.ts diff --git a/src/interfaces/Depth.ts b/packages/psd/src/interfaces/Depth.ts similarity index 100% rename from src/interfaces/Depth.ts rename to packages/psd/src/interfaces/Depth.ts diff --git a/src/interfaces/Descriptor.ts b/packages/psd/src/interfaces/Descriptor.ts similarity index 100% rename from src/interfaces/Descriptor.ts rename to packages/psd/src/interfaces/Descriptor.ts diff --git a/src/interfaces/FileVersionSpec.ts b/packages/psd/src/interfaces/FileVersionSpec.ts similarity index 100% rename from src/interfaces/FileVersionSpec.ts rename to packages/psd/src/interfaces/FileVersionSpec.ts diff --git a/src/interfaces/GroupDivider.ts b/packages/psd/src/interfaces/GroupDivider.ts similarity index 100% rename from src/interfaces/GroupDivider.ts rename to packages/psd/src/interfaces/GroupDivider.ts diff --git a/src/interfaces/ImageData.ts b/packages/psd/src/interfaces/ImageData.ts similarity index 100% rename from src/interfaces/ImageData.ts rename to packages/psd/src/interfaces/ImageData.ts diff --git a/src/interfaces/ParsingResult.ts b/packages/psd/src/interfaces/ParsingResult.ts similarity index 100% rename from src/interfaces/ParsingResult.ts rename to packages/psd/src/interfaces/ParsingResult.ts diff --git a/src/interfaces/Reference.ts b/packages/psd/src/interfaces/Reference.ts similarity index 100% rename from src/interfaces/Reference.ts rename to packages/psd/src/interfaces/Reference.ts diff --git a/src/interfaces/index.ts b/packages/psd/src/interfaces/index.ts similarity index 100% rename from src/interfaces/index.ts rename to packages/psd/src/interfaces/index.ts diff --git a/src/interfaces/resources/GridAndGuidesResourceBlock.ts b/packages/psd/src/interfaces/resources/GridAndGuidesResourceBlock.ts similarity index 100% rename from src/interfaces/resources/GridAndGuidesResourceBlock.ts rename to packages/psd/src/interfaces/resources/GridAndGuidesResourceBlock.ts diff --git a/src/interfaces/resources/ImageResourceBlockBase.ts b/packages/psd/src/interfaces/resources/ImageResourceBlockBase.ts similarity index 100% rename from src/interfaces/resources/ImageResourceBlockBase.ts rename to packages/psd/src/interfaces/resources/ImageResourceBlockBase.ts diff --git a/src/interfaces/resources/ResourceType.ts b/packages/psd/src/interfaces/resources/ResourceType.ts similarity index 100% rename from src/interfaces/resources/ResourceType.ts rename to packages/psd/src/interfaces/resources/ResourceType.ts diff --git a/src/interfaces/resources/SlicesResourceBlock.ts b/packages/psd/src/interfaces/resources/SlicesResourceBlock.ts similarity index 100% rename from src/interfaces/resources/SlicesResourceBlock.ts rename to packages/psd/src/interfaces/resources/SlicesResourceBlock.ts diff --git a/src/interfaces/resources/UnknownResourceBlock.ts b/packages/psd/src/interfaces/resources/UnknownResourceBlock.ts similarity index 100% rename from src/interfaces/resources/UnknownResourceBlock.ts rename to packages/psd/src/interfaces/resources/UnknownResourceBlock.ts diff --git a/src/interfaces/resources/index.ts b/packages/psd/src/interfaces/resources/index.ts similarity index 100% rename from src/interfaces/resources/index.ts rename to packages/psd/src/interfaces/resources/index.ts diff --git a/src/methods/applyOpacity.ts b/packages/psd/src/methods/applyOpacity.ts similarity index 100% rename from src/methods/applyOpacity.ts rename to packages/psd/src/methods/applyOpacity.ts diff --git a/src/methods/generateRgba.ts b/packages/psd/src/methods/generateRgba.ts similarity index 100% rename from src/methods/generateRgba.ts rename to packages/psd/src/methods/generateRgba.ts diff --git a/src/methods/index.ts b/packages/psd/src/methods/index.ts similarity index 100% rename from src/methods/index.ts rename to packages/psd/src/methods/index.ts diff --git a/src/methods/parse.ts b/packages/psd/src/methods/parse.ts similarity index 100% rename from src/methods/parse.ts rename to packages/psd/src/methods/parse.ts diff --git a/src/methods/readDescriptor.ts b/packages/psd/src/methods/readDescriptor.ts similarity index 100% rename from src/methods/readDescriptor.ts rename to packages/psd/src/methods/readDescriptor.ts diff --git a/src/sections/ColorModeData/index.ts b/packages/psd/src/sections/ColorModeData/index.ts similarity index 100% rename from src/sections/ColorModeData/index.ts rename to packages/psd/src/sections/ColorModeData/index.ts diff --git a/src/sections/FileHeader/index.ts b/packages/psd/src/sections/FileHeader/index.ts similarity index 100% rename from src/sections/FileHeader/index.ts rename to packages/psd/src/sections/FileHeader/index.ts diff --git a/src/sections/ImageData/index.ts b/packages/psd/src/sections/ImageData/index.ts similarity index 100% rename from src/sections/ImageData/index.ts rename to packages/psd/src/sections/ImageData/index.ts diff --git a/src/sections/ImageData/readRawData.ts b/packages/psd/src/sections/ImageData/readRawData.ts similarity index 100% rename from src/sections/ImageData/readRawData.ts rename to packages/psd/src/sections/ImageData/readRawData.ts diff --git a/src/sections/ImageData/readRleCompressedData.ts b/packages/psd/src/sections/ImageData/readRleCompressedData.ts similarity index 100% rename from src/sections/ImageData/readRleCompressedData.ts rename to packages/psd/src/sections/ImageData/readRleCompressedData.ts diff --git a/src/sections/ImageResource/index.ts b/packages/psd/src/sections/ImageResource/index.ts similarity index 100% rename from src/sections/ImageResource/index.ts rename to packages/psd/src/sections/ImageResource/index.ts diff --git a/src/sections/ImageResource/readGridAndGuides.ts b/packages/psd/src/sections/ImageResource/readGridAndGuides.ts similarity index 100% rename from src/sections/ImageResource/readGridAndGuides.ts rename to packages/psd/src/sections/ImageResource/readGridAndGuides.ts diff --git a/src/sections/ImageResource/readSlices.ts b/packages/psd/src/sections/ImageResource/readSlices.ts similarity index 100% rename from src/sections/ImageResource/readSlices.ts rename to packages/psd/src/sections/ImageResource/readSlices.ts diff --git a/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/AliBlockBody.ts b/packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/AliBlockBody.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/AdditionalLayerInfo/AliBlockBody.ts rename to packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/AliBlockBody.ts diff --git a/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/index.ts b/packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/index.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/AdditionalLayerInfo/index.ts rename to packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/index.ts diff --git a/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readSectionDividerSettingAliBlock.ts b/packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readSectionDividerSettingAliBlock.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readSectionDividerSettingAliBlock.ts rename to packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readSectionDividerSettingAliBlock.ts diff --git a/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readTypeToolObjectSettingAliBlock.ts b/packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readTypeToolObjectSettingAliBlock.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readTypeToolObjectSettingAliBlock.ts rename to packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readTypeToolObjectSettingAliBlock.ts diff --git a/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readUnicodeLayerNameAliBlock.ts b/packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readUnicodeLayerNameAliBlock.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readUnicodeLayerNameAliBlock.ts rename to packages/psd/src/sections/LayerAndMaskInformation/AdditionalLayerInfo/readUnicodeLayerNameAliBlock.ts diff --git a/src/sections/LayerAndMaskInformation/classes.ts b/packages/psd/src/sections/LayerAndMaskInformation/classes.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/classes.ts rename to packages/psd/src/sections/LayerAndMaskInformation/classes.ts diff --git a/src/sections/LayerAndMaskInformation/index.ts b/packages/psd/src/sections/LayerAndMaskInformation/index.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/index.ts rename to packages/psd/src/sections/LayerAndMaskInformation/index.ts diff --git a/src/sections/LayerAndMaskInformation/interfaces.ts b/packages/psd/src/sections/LayerAndMaskInformation/interfaces.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/interfaces.ts rename to packages/psd/src/sections/LayerAndMaskInformation/interfaces.ts diff --git a/src/sections/LayerAndMaskInformation/readEffectsLayer.ts b/packages/psd/src/sections/LayerAndMaskInformation/readEffectsLayer.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/readEffectsLayer.ts rename to packages/psd/src/sections/LayerAndMaskInformation/readEffectsLayer.ts diff --git a/src/sections/LayerAndMaskInformation/readLayerRecordsAndChannels.ts b/packages/psd/src/sections/LayerAndMaskInformation/readLayerRecordsAndChannels.ts similarity index 100% rename from src/sections/LayerAndMaskInformation/readLayerRecordsAndChannels.ts rename to packages/psd/src/sections/LayerAndMaskInformation/readLayerRecordsAndChannels.ts diff --git a/src/sections/index.ts b/packages/psd/src/sections/index.ts similarity index 100% rename from src/sections/index.ts rename to packages/psd/src/sections/index.ts diff --git a/src/utils/array.ts b/packages/psd/src/utils/array.ts similarity index 100% rename from src/utils/array.ts rename to packages/psd/src/utils/array.ts diff --git a/src/utils/bytes.ts b/packages/psd/src/utils/bytes.ts similarity index 100% rename from src/utils/bytes.ts rename to packages/psd/src/utils/bytes.ts diff --git a/src/utils/error.ts b/packages/psd/src/utils/error.ts similarity index 100% rename from src/utils/error.ts rename to packages/psd/src/utils/error.ts diff --git a/src/utils/index.ts b/packages/psd/src/utils/index.ts similarity index 100% rename from src/utils/index.ts rename to packages/psd/src/utils/index.ts diff --git a/src/utils/number.ts b/packages/psd/src/utils/number.ts similarity index 100% rename from src/utils/number.ts rename to packages/psd/src/utils/number.ts diff --git a/tests/integration/errors.test.ts b/packages/psd/tests/integration/errors.test.ts similarity index 100% rename from tests/integration/errors.test.ts rename to packages/psd/tests/integration/errors.test.ts diff --git a/tests/integration/example.test.ts b/packages/psd/tests/integration/example.test.ts similarity index 100% rename from tests/integration/example.test.ts rename to packages/psd/tests/integration/example.test.ts diff --git a/tests/integration/fixtures/errors/README.md b/packages/psd/tests/integration/fixtures/errors/README.md similarity index 100% rename from tests/integration/fixtures/errors/README.md rename to packages/psd/tests/integration/fixtures/errors/README.md diff --git a/tests/integration/fixtures/errors/file-channel-count-too-large.psd b/packages/psd/tests/integration/fixtures/errors/file-channel-count-too-large.psd similarity index 100% rename from tests/integration/fixtures/errors/file-channel-count-too-large.psd rename to packages/psd/tests/integration/fixtures/errors/file-channel-count-too-large.psd diff --git a/tests/integration/fixtures/errors/file-color-mode-invalid.psd b/packages/psd/tests/integration/fixtures/errors/file-color-mode-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/file-color-mode-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/file-color-mode-invalid.psd diff --git a/tests/integration/fixtures/errors/file-empty.psd b/packages/psd/tests/integration/fixtures/errors/file-empty.psd similarity index 100% rename from tests/integration/fixtures/errors/file-empty.psd rename to packages/psd/tests/integration/fixtures/errors/file-empty.psd diff --git a/tests/integration/fixtures/errors/file-image-depth-0.psd b/packages/psd/tests/integration/fixtures/errors/file-image-depth-0.psd similarity index 100% rename from tests/integration/fixtures/errors/file-image-depth-0.psd rename to packages/psd/tests/integration/fixtures/errors/file-image-depth-0.psd diff --git a/tests/integration/fixtures/errors/file-image-depth-17.psd b/packages/psd/tests/integration/fixtures/errors/file-image-depth-17.psd similarity index 100% rename from tests/integration/fixtures/errors/file-image-depth-17.psd rename to packages/psd/tests/integration/fixtures/errors/file-image-depth-17.psd diff --git a/tests/integration/fixtures/errors/file-image-depth-64.psd b/packages/psd/tests/integration/fixtures/errors/file-image-depth-64.psd similarity index 100% rename from tests/integration/fixtures/errors/file-image-depth-64.psd rename to packages/psd/tests/integration/fixtures/errors/file-image-depth-64.psd diff --git a/tests/integration/fixtures/errors/file-image-height-300001.psb b/packages/psd/tests/integration/fixtures/errors/file-image-height-300001.psb similarity index 100% rename from tests/integration/fixtures/errors/file-image-height-300001.psb rename to packages/psd/tests/integration/fixtures/errors/file-image-height-300001.psb diff --git a/tests/integration/fixtures/errors/file-image-height-30001.psd b/packages/psd/tests/integration/fixtures/errors/file-image-height-30001.psd similarity index 100% rename from tests/integration/fixtures/errors/file-image-height-30001.psd rename to packages/psd/tests/integration/fixtures/errors/file-image-height-30001.psd diff --git a/tests/integration/fixtures/errors/file-image-width-300001.psb b/packages/psd/tests/integration/fixtures/errors/file-image-width-300001.psb similarity index 100% rename from tests/integration/fixtures/errors/file-image-width-300001.psb rename to packages/psd/tests/integration/fixtures/errors/file-image-width-300001.psb diff --git a/tests/integration/fixtures/errors/file-image-width-30001.psd b/packages/psd/tests/integration/fixtures/errors/file-image-width-30001.psd similarity index 100% rename from tests/integration/fixtures/errors/file-image-width-30001.psd rename to packages/psd/tests/integration/fixtures/errors/file-image-width-30001.psd diff --git a/tests/integration/fixtures/errors/file-reserved-nonzero.psd b/packages/psd/tests/integration/fixtures/errors/file-reserved-nonzero.psd similarity index 100% rename from tests/integration/fixtures/errors/file-reserved-nonzero.psd rename to packages/psd/tests/integration/fixtures/errors/file-reserved-nonzero.psd diff --git a/tests/integration/fixtures/errors/file-signature-invalid.psd b/packages/psd/tests/integration/fixtures/errors/file-signature-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/file-signature-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/file-signature-invalid.psd diff --git a/tests/integration/fixtures/errors/file-version-invalid.psd b/packages/psd/tests/integration/fixtures/errors/file-version-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/file-version-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/file-version-invalid.psd diff --git a/tests/integration/fixtures/errors/image-compression-invalid.psd b/packages/psd/tests/integration/fixtures/errors/image-compression-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/image-compression-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/image-compression-invalid.psd diff --git a/tests/integration/fixtures/errors/image-depth-16.psd b/packages/psd/tests/integration/fixtures/errors/image-depth-16.psd similarity index 100% rename from tests/integration/fixtures/errors/image-depth-16.psd rename to packages/psd/tests/integration/fixtures/errors/image-depth-16.psd diff --git a/tests/integration/fixtures/errors/image-depth-32.psd b/packages/psd/tests/integration/fixtures/errors/image-depth-32.psd similarity index 100% rename from tests/integration/fixtures/errors/image-depth-32.psd rename to packages/psd/tests/integration/fixtures/errors/image-depth-32.psd diff --git a/tests/integration/fixtures/errors/layer-blend-mode-key-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-blend-mode-key-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-blend-mode-key-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-blend-mode-key-invalid.psd diff --git a/tests/integration/fixtures/errors/layer-blend-mode-signature-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-blend-mode-signature-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-blend-mode-signature-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-blend-mode-signature-invalid.psd diff --git a/tests/integration/fixtures/errors/layer-channel-compression-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-channel-compression-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-channel-compression-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-channel-compression-invalid.psd diff --git a/tests/integration/fixtures/errors/layer-channel-kind-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-channel-kind-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-channel-kind-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-channel-kind-invalid.psd diff --git a/tests/integration/fixtures/errors/layer-clipping-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-clipping-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-clipping-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-clipping-invalid.psd diff --git a/tests/integration/fixtures/errors/layer-section-divider-invalid.psd b/packages/psd/tests/integration/fixtures/errors/layer-section-divider-invalid.psd similarity index 100% rename from tests/integration/fixtures/errors/layer-section-divider-invalid.psd rename to packages/psd/tests/integration/fixtures/errors/layer-section-divider-invalid.psd diff --git a/tests/integration/fixtures/errors/original-uncompressed.psd b/packages/psd/tests/integration/fixtures/errors/original-uncompressed.psd similarity index 100% rename from tests/integration/fixtures/errors/original-uncompressed.psd rename to packages/psd/tests/integration/fixtures/errors/original-uncompressed.psd diff --git a/tests/integration/fixtures/errors/original-with-group.psd b/packages/psd/tests/integration/fixtures/errors/original-with-group.psd similarity index 100% rename from tests/integration/fixtures/errors/original-with-group.psd rename to packages/psd/tests/integration/fixtures/errors/original-with-group.psd diff --git a/tests/integration/fixtures/errors/original.psb b/packages/psd/tests/integration/fixtures/errors/original.psb similarity index 100% rename from tests/integration/fixtures/errors/original.psb rename to packages/psd/tests/integration/fixtures/errors/original.psb diff --git a/tests/integration/fixtures/errors/original.psd b/packages/psd/tests/integration/fixtures/errors/original.psd similarity index 100% rename from tests/integration/fixtures/errors/original.psd rename to packages/psd/tests/integration/fixtures/errors/original.psd diff --git a/tests/integration/fixtures/example/example.psb b/packages/psd/tests/integration/fixtures/example/example.psb similarity index 100% rename from tests/integration/fixtures/example/example.psb rename to packages/psd/tests/integration/fixtures/example/example.psb diff --git a/packages/psd/tests/integration/fixtures/example/example.psd b/packages/psd/tests/integration/fixtures/example/example.psd new file mode 100644 index 0000000..077b539 Binary files /dev/null and b/packages/psd/tests/integration/fixtures/example/example.psd differ diff --git a/tests/integration/fixtures/example/imageData b/packages/psd/tests/integration/fixtures/example/imageData similarity index 100% rename from tests/integration/fixtures/example/imageData rename to packages/psd/tests/integration/fixtures/example/imageData diff --git a/tests/integration/fixtures/example/layer0 b/packages/psd/tests/integration/fixtures/example/layer0 similarity index 100% rename from tests/integration/fixtures/example/layer0 rename to packages/psd/tests/integration/fixtures/example/layer0 diff --git a/tests/integration/fixtures/example/layer1 b/packages/psd/tests/integration/fixtures/example/layer1 similarity index 100% rename from tests/integration/fixtures/example/layer1 rename to packages/psd/tests/integration/fixtures/example/layer1 diff --git a/tests/integration/fixtures/example/layer10 b/packages/psd/tests/integration/fixtures/example/layer10 similarity index 100% rename from tests/integration/fixtures/example/layer10 rename to packages/psd/tests/integration/fixtures/example/layer10 diff --git a/tests/integration/fixtures/example/layer11 b/packages/psd/tests/integration/fixtures/example/layer11 similarity index 100% rename from tests/integration/fixtures/example/layer11 rename to packages/psd/tests/integration/fixtures/example/layer11 diff --git a/tests/integration/fixtures/example/layer12 b/packages/psd/tests/integration/fixtures/example/layer12 similarity index 100% rename from tests/integration/fixtures/example/layer12 rename to packages/psd/tests/integration/fixtures/example/layer12 diff --git a/tests/integration/fixtures/example/layer13 b/packages/psd/tests/integration/fixtures/example/layer13 similarity index 100% rename from tests/integration/fixtures/example/layer13 rename to packages/psd/tests/integration/fixtures/example/layer13 diff --git a/tests/integration/fixtures/example/layer2 b/packages/psd/tests/integration/fixtures/example/layer2 similarity index 100% rename from tests/integration/fixtures/example/layer2 rename to packages/psd/tests/integration/fixtures/example/layer2 diff --git a/tests/integration/fixtures/example/layer3 b/packages/psd/tests/integration/fixtures/example/layer3 similarity index 100% rename from tests/integration/fixtures/example/layer3 rename to packages/psd/tests/integration/fixtures/example/layer3 diff --git a/tests/integration/fixtures/example/layer4 b/packages/psd/tests/integration/fixtures/example/layer4 similarity index 100% rename from tests/integration/fixtures/example/layer4 rename to packages/psd/tests/integration/fixtures/example/layer4 diff --git a/tests/integration/fixtures/example/layer5 b/packages/psd/tests/integration/fixtures/example/layer5 similarity index 100% rename from tests/integration/fixtures/example/layer5 rename to packages/psd/tests/integration/fixtures/example/layer5 diff --git a/tests/integration/fixtures/example/layer6 b/packages/psd/tests/integration/fixtures/example/layer6 similarity index 100% rename from tests/integration/fixtures/example/layer6 rename to packages/psd/tests/integration/fixtures/example/layer6 diff --git a/tests/integration/fixtures/example/layer7 b/packages/psd/tests/integration/fixtures/example/layer7 similarity index 100% rename from tests/integration/fixtures/example/layer7 rename to packages/psd/tests/integration/fixtures/example/layer7 diff --git a/tests/integration/fixtures/example/layer8 b/packages/psd/tests/integration/fixtures/example/layer8 similarity index 100% rename from tests/integration/fixtures/example/layer8 rename to packages/psd/tests/integration/fixtures/example/layer8 diff --git a/tests/integration/fixtures/example/layer9 b/packages/psd/tests/integration/fixtures/example/layer9 similarity index 100% rename from tests/integration/fixtures/example/layer9 rename to packages/psd/tests/integration/fixtures/example/layer9 diff --git a/tests/tsconfig.json b/packages/psd/tests/tsconfig.json similarity index 84% rename from tests/tsconfig.json rename to packages/psd/tests/tsconfig.json index ab58640..ed93d5a 100644 --- a/tests/tsconfig.json +++ b/packages/psd/tests/tsconfig.json @@ -3,5 +3,6 @@ "compilerOptions": { // 테스트 코드에서 import할 API "types": ["node", "jest"] - } + }, + "include": ["./"] } diff --git a/tests/unit/bytes.test.ts b/packages/psd/tests/unit/bytes.test.ts similarity index 100% rename from tests/unit/bytes.test.ts rename to packages/psd/tests/unit/bytes.test.ts diff --git a/packages/psd/tsconfig.json b/packages/psd/tsconfig.json new file mode 100644 index 0000000..a7b369e --- /dev/null +++ b/packages/psd/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "outDir": "./dist" + }, + "include": ["src/"] +} diff --git a/webpack.config.js b/packages/psd/webpack.config.js similarity index 95% rename from webpack.config.js rename to packages/psd/webpack.config.js index a9055e9..ba4c6fc 100644 --- a/webpack.config.js +++ b/packages/psd/webpack.config.js @@ -20,7 +20,7 @@ export default /** @type {import("webpack").Configuration} */ ({ }, output: { clean: true, - filename: "[name].js", + filename: "index.js", path: path.resolve(__dirname, "dist"), library: { type: "module", diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..89f9e04 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,14 @@ +// Base tsconfig used by individual packages +{ + "compilerOptions": { + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "lib": ["DOM", "ES2018"], + "module": "ES2020", + "moduleResolution": "node", + "skipLibCheck": true, + "strict": true, + "target": "ES2018", + "types": [] + } +} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b6ae150..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "ES2018", - "module": "ES2020", - "lib": ["DOM", "ES2018"], - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ - "declaration": true, - "declarationMap": true, - // "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./" /* Concatenate and emit output to single file. */, - "outDir": "./dist", - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */, - - /* Strict Type-Checking Options */ - "strict": true, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ - - /* Module Resolution Options */ - "moduleResolution": "node", - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": [], - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true - }, - "include": ["src/index.ts", "./examples/"], - "exclude": ["node_modules", "dist", "__tests__"] -}