prettier and eslint formatting
This commit is contained in:
parent
d4f155adc2
commit
46feb5705e
45
.eslintrc.js
Normal file
45
.eslintrc.js
Normal file
@ -0,0 +1,45 @@
|
||||
module.exports = {
|
||||
// ESLint configs are prone to particular choices, so if the first config
|
||||
// below doesn't work for you then replace
|
||||
// with one that you do prefer. The second config defines globals defined
|
||||
// in `foundry.js` for use w/ `no-shadow`.
|
||||
extends: [
|
||||
'standard',
|
||||
'@typhonjs-fvtt/eslint-config-foundry.js'
|
||||
],
|
||||
|
||||
// Defines / overrides a few more environment parameters not
|
||||
// provided in the configs above.
|
||||
overrides: [
|
||||
],
|
||||
env: {
|
||||
jquery: true,
|
||||
es2021: true,
|
||||
browser: true
|
||||
},
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module'
|
||||
},
|
||||
// Prevents overwriting any built in
|
||||
// globals particularly from
|
||||
// `@typhonjs-fvtt/eslint-config-foundry.js`,
|
||||
// but also
|
||||
// node & browser environments. `event /
|
||||
// window.event` shadowing is allowed due
|
||||
// to being a common variable name and
|
||||
// an uncommonly used browser feature.
|
||||
//
|
||||
// Note: if you are using
|
||||
// Typescript you must use
|
||||
// `@typescript-eslint/no-shadow`
|
||||
rules: {
|
||||
'no-shadow': [
|
||||
'error', {
|
||||
builtinGlobals: true,
|
||||
hoist: 'all',
|
||||
allow: ['origin', 'name', 'event']
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
import globals from "globals";
|
||||
import pluginJs from "@eslint/js";
|
||||
|
||||
|
||||
export default [
|
||||
pluginJs.configs.recommended,
|
||||
{
|
||||
rules: {
|
||||
"no-unused-vars": "error",
|
||||
"no-undef": "error",
|
||||
},
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.browser,
|
||||
ActiveEffect: false,
|
||||
canvas: false,
|
||||
ChatMessage: false,
|
||||
ColorAdjustmentsSamplerShader: false,
|
||||
CONFIG: false,
|
||||
deepClone: false,
|
||||
foundry: false,
|
||||
fromUuid: false,
|
||||
game: false,
|
||||
Hooks: false,
|
||||
randomID: false,
|
||||
socketlib: false,
|
||||
ui: false,
|
||||
VisionMode: false,
|
||||
warpgate: false,
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
1809
package-lock.json
generated
1809
package-lock.json
generated
@ -8,13 +8,467 @@
|
||||
"@eslint/js": "^9.1.1",
|
||||
"@league-of-foundry-developers/foundry-vtt-types": "^9.280.0",
|
||||
"@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0",
|
||||
"babel-loader": "^9.1.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
"eslint-plugin-n": "^16.0.2",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"globals": "^15.1.0",
|
||||
"typescript": "^5.2.2"
|
||||
"typescript": "^5.2.2",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
|
||||
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.24.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
|
||||
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/highlight": "^7.24.2",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.24.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz",
|
||||
"integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz",
|
||||
"integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.24.2",
|
||||
"@babel/generator": "^7.24.5",
|
||||
"@babel/helper-compilation-targets": "^7.23.6",
|
||||
"@babel/helper-module-transforms": "^7.24.5",
|
||||
"@babel/helpers": "^7.24.5",
|
||||
"@babel/parser": "^7.24.5",
|
||||
"@babel/template": "^7.24.0",
|
||||
"@babel/traverse": "^7.24.5",
|
||||
"@babel/types": "^7.24.5",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
"json5": "^2.2.3",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/babel"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core/node_modules/json5": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"json5": "lib/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz",
|
||||
"integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.24.5",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^2.5.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
|
||||
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.23.5",
|
||||
"@babel/helper-validator-option": "^7.23.5",
|
||||
"browserslist": "^4.22.2",
|
||||
"lru-cache": "^5.1.1",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/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,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@babel/helper-environment-visitor": {
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
|
||||
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-function-name": {
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
|
||||
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.22.15",
|
||||
"@babel/types": "^7.23.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-hoist-variables": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
|
||||
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.22.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-imports": {
|
||||
"version": "7.24.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
|
||||
"integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.24.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-transforms": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz",
|
||||
"integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-module-imports": "^7.24.3",
|
||||
"@babel/helper-simple-access": "^7.24.5",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"@babel/helper-validator-identifier": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-simple-access": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz",
|
||||
"integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-split-export-declaration": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz",
|
||||
"integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.24.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
|
||||
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
|
||||
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-option": {
|
||||
"version": "7.23.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
|
||||
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz",
|
||||
"integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.24.0",
|
||||
"@babel/traverse": "^7.24.5",
|
||||
"@babel/types": "^7.24.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
|
||||
"integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.24.5",
|
||||
"chalk": "^2.4.2",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"color-convert": "^1.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/has-flag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/highlight/node_modules/supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"has-flag": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
|
||||
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
|
||||
"integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.23.5",
|
||||
"@babel/parser": "^7.24.0",
|
||||
"@babel/types": "^7.24.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz",
|
||||
"integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.24.2",
|
||||
"@babel/generator": "^7.24.5",
|
||||
"@babel/helper-environment-visitor": "^7.22.20",
|
||||
"@babel/helper-function-name": "^7.23.0",
|
||||
"@babel/helper-hoist-variables": "^7.22.5",
|
||||
"@babel/helper-split-export-declaration": "^7.24.5",
|
||||
"@babel/parser": "^7.24.5",
|
||||
"@babel/types": "^7.24.5",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse/node_modules/globals": {
|
||||
"version": "11.12.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
|
||||
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.24.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz",
|
||||
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.24.1",
|
||||
"@babel/helper-validator-identifier": "^7.24.5",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@discoveryjs/json-ext": {
|
||||
"version": "0.5.7",
|
||||
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
|
||||
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint-community/eslint-utils": {
|
||||
@ -121,6 +575,64 @@
|
||||
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/set-array": "^1.2.1",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/set-array": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
|
||||
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/source-map": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
|
||||
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.15",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
||||
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.25",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
|
||||
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@league-of-foundry-developers/foundry-vtt-types": {
|
||||
"version": "9.280.0",
|
||||
"resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.280.0.tgz",
|
||||
@ -2312,6 +2824,32 @@
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
"version": "8.56.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
|
||||
"integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/estree": "*",
|
||||
"@types/json-schema": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/eslint-scope": {
|
||||
"version": "3.7.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
|
||||
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/eslint": "*",
|
||||
"@types/estree": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/estree": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
|
||||
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/jquery": {
|
||||
"version": "3.5.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz",
|
||||
@ -2321,6 +2859,12 @@
|
||||
"@types/sizzle": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/json-schema": {
|
||||
"version": "7.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
|
||||
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/json5": {
|
||||
"version": "0.0.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
||||
@ -2370,6 +2914,208 @@
|
||||
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/ast": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
|
||||
"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/helper-numbers": "1.11.6",
|
||||
"@webassemblyjs/helper-wasm-bytecode": "1.11.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/floating-point-hex-parser": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
|
||||
"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-api-error": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
|
||||
"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-buffer": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
|
||||
"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-numbers": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
|
||||
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/floating-point-hex-parser": "1.11.6",
|
||||
"@webassemblyjs/helper-api-error": "1.11.6",
|
||||
"@xtuc/long": "4.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
|
||||
"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-wasm-section": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
|
||||
"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@webassemblyjs/helper-buffer": "1.12.1",
|
||||
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
|
||||
"@webassemblyjs/wasm-gen": "1.12.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/ieee754": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
|
||||
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@xtuc/ieee754": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/leb128": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
|
||||
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@xtuc/long": "4.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/utf8": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
|
||||
"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/wasm-edit": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
|
||||
"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@webassemblyjs/helper-buffer": "1.12.1",
|
||||
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
|
||||
"@webassemblyjs/helper-wasm-section": "1.12.1",
|
||||
"@webassemblyjs/wasm-gen": "1.12.1",
|
||||
"@webassemblyjs/wasm-opt": "1.12.1",
|
||||
"@webassemblyjs/wasm-parser": "1.12.1",
|
||||
"@webassemblyjs/wast-printer": "1.12.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/wasm-gen": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
|
||||
"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
|
||||
"@webassemblyjs/ieee754": "1.11.6",
|
||||
"@webassemblyjs/leb128": "1.11.6",
|
||||
"@webassemblyjs/utf8": "1.11.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/wasm-opt": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
|
||||
"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@webassemblyjs/helper-buffer": "1.12.1",
|
||||
"@webassemblyjs/wasm-gen": "1.12.1",
|
||||
"@webassemblyjs/wasm-parser": "1.12.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/wasm-parser": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
|
||||
"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@webassemblyjs/helper-api-error": "1.11.6",
|
||||
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
|
||||
"@webassemblyjs/ieee754": "1.11.6",
|
||||
"@webassemblyjs/leb128": "1.11.6",
|
||||
"@webassemblyjs/utf8": "1.11.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@webassemblyjs/wast-printer": {
|
||||
"version": "1.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
|
||||
"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.12.1",
|
||||
"@xtuc/long": "4.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@webpack-cli/configtest": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
|
||||
"integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "5.x.x",
|
||||
"webpack-cli": "5.x.x"
|
||||
}
|
||||
},
|
||||
"node_modules/@webpack-cli/info": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
|
||||
"integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "5.x.x",
|
||||
"webpack-cli": "5.x.x"
|
||||
}
|
||||
},
|
||||
"node_modules/@webpack-cli/serve": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
|
||||
"integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "5.x.x",
|
||||
"webpack-cli": "5.x.x"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"webpack-dev-server": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@xtuc/ieee754": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
|
||||
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@xtuc/long": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
|
||||
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.11.3",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
|
||||
@ -2382,6 +3128,15 @@
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-import-assertions": {
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
|
||||
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
|
||||
"dev": true,
|
||||
"peerDependencies": {
|
||||
"acorn": "^8"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
@ -2407,6 +3162,54 @@
|
||||
"url": "https://github.com/sponsors/epoberezkin"
|
||||
}
|
||||
},
|
||||
"node_modules/ajv-formats": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
|
||||
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ajv": "^8.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"ajv": "^8.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"ajv": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/ajv-formats/node_modules/ajv": {
|
||||
"version": "8.13.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
|
||||
"integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.4.1"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/epoberezkin"
|
||||
}
|
||||
},
|
||||
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ajv-keywords": {
|
||||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"peerDependencies": {
|
||||
"ajv": "^6.9.1"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
@ -2566,6 +3369,76 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-loader": {
|
||||
"version": "9.1.3",
|
||||
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
|
||||
"integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"find-cache-dir": "^4.0.0",
|
||||
"schema-utils": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.15.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.12.0",
|
||||
"webpack": ">=5"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-loader/node_modules/ajv": {
|
||||
"version": "8.13.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
|
||||
"integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.4.1"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/epoberezkin"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-loader/node_modules/ajv-keywords": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
|
||||
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"ajv": "^8.8.2"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-loader/node_modules/json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/babel-loader/node_modules/schema-utils": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
|
||||
"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/json-schema": "^7.0.9",
|
||||
"ajv": "^8.9.0",
|
||||
"ajv-formats": "^2.1.1",
|
||||
"ajv-keywords": "^5.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
}
|
||||
},
|
||||
"node_modules/backo2": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
|
||||
@ -2588,6 +3461,44 @@
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/browserslist": {
|
||||
"version": "4.23.0",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
|
||||
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"caniuse-lite": "^1.0.30001587",
|
||||
"electron-to-chromium": "^1.4.668",
|
||||
"node-releases": "^2.0.14",
|
||||
"update-browserslist-db": "^1.0.13"
|
||||
},
|
||||
"bin": {
|
||||
"browserslist": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/builtin-modules": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
|
||||
@ -2652,6 +3563,26 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001617",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz",
|
||||
"integrity": "sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
@ -2668,6 +3599,29 @@
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/chrome-trace-event": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
|
||||
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/clone-deep": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
|
||||
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-plain-object": "^2.0.4",
|
||||
"kind-of": "^6.0.2",
|
||||
"shallow-clone": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
@ -2686,12 +3640,37 @@
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/colorette": {
|
||||
"version": "2.0.20",
|
||||
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
|
||||
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/common-path-prefix": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
|
||||
"integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/convert-source-map": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
|
||||
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
@ -2832,6 +3811,12 @@
|
||||
"integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.4.763",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz",
|
||||
"integrity": "sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/engine.io-client": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.3.tgz",
|
||||
@ -2858,6 +3843,31 @@
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.16.1",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
|
||||
"integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
"tapable": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/envinfo": {
|
||||
"version": "7.13.0",
|
||||
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
|
||||
"integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"envinfo": "dist/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-abstract": {
|
||||
"version": "1.23.3",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
|
||||
@ -2939,6 +3949,12 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/es-module-lexer": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz",
|
||||
"integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/es-object-atoms": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
|
||||
@ -2997,6 +4013,15 @@
|
||||
"integrity": "sha512-HHb0vydCpoclpd0ySPkRXMmBw80MRt1wM4RBJBlXkux97K7gleabZdsR0gvE1nNPM9mgOZIBTzjjXiPxf4lIqQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
|
||||
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-string-regexp": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||
@ -3428,6 +4453,15 @@
|
||||
"integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/events": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
||||
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.8.x"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
@ -3446,6 +4480,15 @@
|
||||
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fastest-levenshtein": {
|
||||
"version": "1.0.16",
|
||||
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
|
||||
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4.9.1"
|
||||
}
|
||||
},
|
||||
"node_modules/fastq": {
|
||||
"version": "1.17.1",
|
||||
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
|
||||
@ -3467,6 +4510,119 @@
|
||||
"node": "^10.12.0 || >=12.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
|
||||
"integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"common-path-prefix": "^3.0.0",
|
||||
"pkg-dir": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/find-up": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
|
||||
"integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"locate-path": "^7.1.0",
|
||||
"path-exists": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/locate-path": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
|
||||
"integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-locate": "^6.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/p-limit": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
|
||||
"integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yocto-queue": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/p-locate": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
|
||||
"integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-limit": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/path-exists": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
|
||||
"integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/pkg-dir": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
|
||||
"integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"find-up": "^6.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-cache-dir/node_modules/yocto-queue": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
|
||||
"integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12.20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/find-up": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
||||
@ -3483,6 +4639,15 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/flat": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"flat": "cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/flat-cache": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
|
||||
@ -3554,6 +4719,16 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/gensync": {
|
||||
"version": "1.0.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
||||
@ -3634,6 +4809,12 @@
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/glob-to-regexp": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
|
||||
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "15.1.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.1.0.tgz",
|
||||
@ -3673,6 +4854,12 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/graphemer": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
|
||||
@ -3812,6 +4999,25 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/import-local": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
|
||||
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"pkg-dir": "^4.2.0",
|
||||
"resolve-cwd": "^3.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"import-local-fixture": "fixtures/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/imurmurhash": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||
@ -3851,6 +5057,15 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/interpret": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
|
||||
"integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-array-buffer": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
|
||||
@ -4021,6 +5236,18 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/is-plain-object": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
|
||||
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"isobject": "^3.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/is-regex": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
|
||||
@ -4127,6 +5354,51 @@
|
||||
"integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/isobject": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
|
||||
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-worker": {
|
||||
"version": "27.5.1",
|
||||
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
|
||||
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"merge-stream": "^2.0.0",
|
||||
"supports-color": "^8.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-worker/node_modules/supports-color": {
|
||||
"version": "8.1.1",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
|
||||
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||
@ -4139,12 +5411,31 @@
|
||||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jsesc": {
|
||||
"version": "2.5.2",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
||||
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"jsesc": "bin/jsesc"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/json-buffer": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
||||
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/json-parse-even-better-errors": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
|
||||
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
@ -4178,6 +5469,15 @@
|
||||
"json-buffer": "3.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/kind-of": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/levn": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
@ -4191,6 +5491,15 @@
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/loader-runner": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
|
||||
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6.11.5"
|
||||
}
|
||||
},
|
||||
"node_modules/locate-path": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||
@ -4224,6 +5533,33 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/merge-stream": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mini-signals": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz",
|
||||
@ -4269,6 +5605,12 @@
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
@ -4419,6 +5761,15 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"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/parent-module": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
@ -4485,6 +5836,12 @@
|
||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/pixi-particles": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/pixi-particles/-/pixi-particles-4.3.1.tgz",
|
||||
@ -4646,6 +6003,70 @@
|
||||
"url": "^0.11.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
||||
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"find-up": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir/node_modules/find-up": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"locate-path": "^5.0.0",
|
||||
"path-exists": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir/node_modules/locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-locate": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir/node_modules/p-limit": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
|
||||
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-try": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-dir/node_modules/p-locate": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"p-limit": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/possible-typed-array-names": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
|
||||
@ -4708,6 +6129,27 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/randombytes": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"safe-buffer": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/rechoir": {
|
||||
"version": "0.8.0",
|
||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
|
||||
"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"resolve": "^1.20.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/regexp.prototype.flags": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
|
||||
@ -4726,6 +6168,15 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/require-from-string": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve": {
|
||||
"version": "1.22.8",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
|
||||
@ -4743,6 +6194,27 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-cwd": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
|
||||
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"resolve-from": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-cwd/node_modules/resolve-from": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
|
||||
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
@ -4837,6 +6309,26 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/safe-regex-test": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
|
||||
@ -4854,6 +6346,24 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/schema-utils": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
|
||||
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/json-schema": "^7.0.8",
|
||||
"ajv": "^6.12.5",
|
||||
"ajv-keywords": "^3.5.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
@ -4863,6 +6373,15 @@
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/serialize-javascript": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
|
||||
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"randombytes": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/set-function-length": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||
@ -4895,6 +6414,18 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/shallow-clone": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
|
||||
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"kind-of": "^6.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
@ -4973,6 +6504,16 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-support": {
|
||||
"version": "0.5.21",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"source-map": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/string.prototype.trim": {
|
||||
"version": "1.2.9",
|
||||
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
|
||||
@ -5079,6 +6620,67 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/tapable": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.31.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
|
||||
"integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.3",
|
||||
"acorn": "^8.8.2",
|
||||
"commander": "^2.20.0",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"bin": {
|
||||
"terser": "bin/terser"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/terser-webpack-plugin": {
|
||||
"version": "5.3.10",
|
||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
|
||||
"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "^0.3.20",
|
||||
"jest-worker": "^27.4.5",
|
||||
"schema-utils": "^3.1.1",
|
||||
"serialize-javascript": "^6.0.1",
|
||||
"terser": "^5.26.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "^5.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@swc/core": {
|
||||
"optional": true
|
||||
},
|
||||
"esbuild": {
|
||||
"optional": true
|
||||
},
|
||||
"uglify-js": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
@ -5091,6 +6693,16 @@
|
||||
"integrity": "sha512-aIsFTYiuESpoYkCgkoojpVtPwrSvYBxp4mMEGsj20CnUruLCWosywkbYHDII+j7KlQZZn3p+xK89f5gT3QyuGw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/tsconfig-paths": {
|
||||
"version": "3.15.0",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
|
||||
@ -5247,6 +6859,36 @@
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.0.15",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz",
|
||||
"integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"escalade": "^3.1.2",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"update-browserslist-db": "cli.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"browserslist": ">= 4.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/uri-js": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
@ -5272,6 +6914,165 @@
|
||||
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/watchpack": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
|
||||
"integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"glob-to-regexp": "^0.4.1",
|
||||
"graceful-fs": "^4.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack": {
|
||||
"version": "5.91.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz",
|
||||
"integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
"@types/estree": "^1.0.5",
|
||||
"@webassemblyjs/ast": "^1.12.1",
|
||||
"@webassemblyjs/wasm-edit": "^1.12.1",
|
||||
"@webassemblyjs/wasm-parser": "^1.12.1",
|
||||
"acorn": "^8.7.1",
|
||||
"acorn-import-assertions": "^1.9.0",
|
||||
"browserslist": "^4.21.10",
|
||||
"chrome-trace-event": "^1.0.2",
|
||||
"enhanced-resolve": "^5.16.0",
|
||||
"es-module-lexer": "^1.2.1",
|
||||
"eslint-scope": "5.1.1",
|
||||
"events": "^3.2.0",
|
||||
"glob-to-regexp": "^0.4.1",
|
||||
"graceful-fs": "^4.2.11",
|
||||
"json-parse-even-better-errors": "^2.3.1",
|
||||
"loader-runner": "^4.2.0",
|
||||
"mime-types": "^2.1.27",
|
||||
"neo-async": "^2.6.2",
|
||||
"schema-utils": "^3.2.0",
|
||||
"tapable": "^2.1.1",
|
||||
"terser-webpack-plugin": "^5.3.10",
|
||||
"watchpack": "^2.4.1",
|
||||
"webpack-sources": "^3.2.3"
|
||||
},
|
||||
"bin": {
|
||||
"webpack": "bin/webpack.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"webpack-cli": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli": {
|
||||
"version": "5.1.4",
|
||||
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
|
||||
"integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@discoveryjs/json-ext": "^0.5.0",
|
||||
"@webpack-cli/configtest": "^2.1.1",
|
||||
"@webpack-cli/info": "^2.0.2",
|
||||
"@webpack-cli/serve": "^2.0.5",
|
||||
"colorette": "^2.0.14",
|
||||
"commander": "^10.0.1",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"envinfo": "^7.7.3",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
"import-local": "^3.0.2",
|
||||
"interpret": "^3.1.1",
|
||||
"rechoir": "^0.8.0",
|
||||
"webpack-merge": "^5.7.3"
|
||||
},
|
||||
"bin": {
|
||||
"webpack-cli": "bin/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.15.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"webpack": "5.x.x"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@webpack-cli/generators": {
|
||||
"optional": true
|
||||
},
|
||||
"webpack-bundle-analyzer": {
|
||||
"optional": true
|
||||
},
|
||||
"webpack-dev-server": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-cli/node_modules/commander": {
|
||||
"version": "10.0.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
|
||||
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-merge": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
|
||||
"integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"clone-deep": "^4.0.1",
|
||||
"flat": "^5.0.2",
|
||||
"wildcard": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack-sources": {
|
||||
"version": "3.2.3",
|
||||
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
|
||||
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack/node_modules/eslint-scope": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack/node_modules/estraverse": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
@ -5322,6 +7123,12 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/wildcard": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
|
||||
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/word-wrap": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
|
||||
|
||||
@ -3,12 +3,15 @@
|
||||
"@eslint/js": "^9.1.1",
|
||||
"@league-of-foundry-developers/foundry-vtt-types": "^9.280.0",
|
||||
"@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0",
|
||||
"babel-loader": "^9.1.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-standard": "^17.1.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
"eslint-plugin-n": "^16.0.2",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"globals": "^15.1.0",
|
||||
"typescript": "^5.2.2"
|
||||
"typescript": "^5.2.2",
|
||||
"webpack": "^5.91.0",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { log, module } from './globals.js'
|
||||
import { log, moduleHelpers } from './globals.js'
|
||||
import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js'
|
||||
import { powerEffects } from './powerEffects.js'
|
||||
import { powers } from './powers.js'
|
||||
@ -12,8 +12,8 @@ export class api {
|
||||
static globals () {
|
||||
const moduleName = 'swade-mb-helpers'
|
||||
game.modules.get(moduleName).api = {
|
||||
rulesVersion: module.rulesVersion,
|
||||
fearTable: module.fearTableHelper,
|
||||
rulesVersion: moduleHelpers.rulesVersion,
|
||||
fearTable: moduleHelpers.fearTableHelper,
|
||||
powerEffects,
|
||||
powers,
|
||||
requestRollFromTokens,
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
/* globals warpgate */
|
||||
import { moduleName } from './globals.js'
|
||||
|
||||
const MAINTAIN_ICON = 'icons/magic/symbols/runes-star-blue.webp'
|
||||
@ -11,8 +12,9 @@ export class PowerEffect {
|
||||
|
||||
static async getStatus (label, name, favorite = true) {
|
||||
const effect = deepClone(
|
||||
CONFIG.statusEffects.find(se => se.label === label))
|
||||
effect.name = ('name' in effect ? effect.name : effect.label)
|
||||
CONFIG.statusEffects.find((se) => se.label === label)
|
||||
)
|
||||
effect.name = 'name' in effect ? effect.name : effect.label
|
||||
if (!('flags' in effect)) {
|
||||
effect.flags = {}
|
||||
}
|
||||
@ -42,7 +44,8 @@ export class PowerEffect {
|
||||
},
|
||||
swade: {
|
||||
loseTurnOnHold: false,
|
||||
expiration: CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.StartOfTurnAuto
|
||||
expiration:
|
||||
CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.StartOfTurnAuto
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -55,7 +58,6 @@ export class PowerEffect {
|
||||
const mutateOptions = {
|
||||
permanent: true,
|
||||
description: `${this.source.name} applying ${effectDocuments[effectDocuments.length - 1]?.name} to ${token.name}`
|
||||
|
||||
}
|
||||
for (const effectDocument of effectDocuments) {
|
||||
mutation.embedded.ActiveEffect[effectDocument.name] = effectDocument
|
||||
@ -63,54 +65,164 @@ export class PowerEffect {
|
||||
await warpgate.mutate(token.document, mutation, {}, mutateOptions)
|
||||
}
|
||||
|
||||
get name () { return 'Unknown Power' }
|
||||
get effectName () { return this.name }
|
||||
get icon () { return 'icons/magic/symbols/question-stone-yellow.webp' }
|
||||
get duration () { return 5 }
|
||||
get basePowerPoints () { return 0 }
|
||||
get usePrimaryEffect () { return true }
|
||||
get hasAdditionalRecipients () { return false }
|
||||
get isDamaging () { return false }
|
||||
get additionalRecipientCost () { return 0 }
|
||||
get isTargeted () { return false }
|
||||
get oneTarget () { return false }
|
||||
get isRaisable () { return true }
|
||||
get hasAoe () { return false }
|
||||
get name () {
|
||||
return 'Unknown Power'
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
return this.name
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/symbols/question-stone-yellow.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isDamaging () {
|
||||
return false
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return false
|
||||
}
|
||||
|
||||
get oneTarget () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isRaisable () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return false
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = []
|
||||
mods.push({ name: 'Adaptable Caster', id: 'adaptable',
|
||||
value: 1, epic: false, effect: false })
|
||||
mods.push({ name: 'Fatigue', id: 'fatigue', value: 2, epic: false, effect: false })
|
||||
mods.push({ name: 'Glow', id: 'glow', value: 1,
|
||||
epic: false, effect: true, icon: 'icons/magic/light/orb-shadow-blue.webp',
|
||||
changes: [ { key: '@Skill{Stealth}[system.die.modifier]', value: -2,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
mods.push({
|
||||
name: 'Adaptable Caster',
|
||||
id: 'adaptable',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({ name: 'Shroud', id: 'shroud', value: 1, epic: false, effect: true,
|
||||
mods.push({
|
||||
name: 'Fatigue',
|
||||
id: 'fatigue',
|
||||
value: 2,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Glow',
|
||||
id: 'glow',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: true,
|
||||
icon: 'icons/magic/light/orb-shadow-blue.webp',
|
||||
changes: [
|
||||
{
|
||||
key: '@Skill{Stealth}[system.die.modifier]',
|
||||
value: -2,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
})
|
||||
mods.push({
|
||||
name: 'Shroud',
|
||||
id: 'shroud',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: true,
|
||||
icon: 'icons/magic/perception/shadow-stealth-eyes-purple.webp',
|
||||
changes: [ { key: '@Skill{Stealth}[system.die.modifier]', value: 1,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
changes: [
|
||||
{
|
||||
key: '@Skill{Stealth}[system.die.modifier]',
|
||||
value: 1,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
})
|
||||
if (this.isDamaging) {
|
||||
mods.push({ name: 'Heavy Weapon', id: 'heavyweapon', value: 2,
|
||||
epic: false, effect: false})
|
||||
mods.push({
|
||||
name: 'Heavy Weapon',
|
||||
id: 'heavyweapon',
|
||||
value: 2,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
}
|
||||
mods.push({ name: 'Hinder', id: 'hinder', value: 1, epic: false, effect: true,
|
||||
icon: 'icons/magic/control/debuff-chains-shackle-movement-red.webp',
|
||||
changes: [ { key: 'system.stats.speed.value', value: -2,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
mods.push({
|
||||
name: 'Hinder',
|
||||
id: 'hinder',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: true,
|
||||
icon: 'icons/magic/control/debuff-chains-shackle-movement-red.webp',
|
||||
changes: [
|
||||
{
|
||||
key: 'system.stats.speed.value',
|
||||
value: -2,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
})
|
||||
mods.push({ name: 'Hurry', id: 'hurry', value: 1, epic: false, effect: true,
|
||||
mods.push({
|
||||
name: 'Hurry',
|
||||
id: 'hurry',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: true,
|
||||
icon: 'icons/skills/movement/feet-winged-sandals-tan.webp',
|
||||
changes: [ { key: 'system.stats.speed.value', value: 2,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
changes: [
|
||||
{
|
||||
key: 'system.stats.speed.value',
|
||||
value: 2,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
})
|
||||
if (this.isDamaging) {
|
||||
mods.push({ name: 'Lingering Damage', id: 'lingeringdamage', value: 2,
|
||||
epic: false, effect: false})
|
||||
mods.push({
|
||||
name: 'Lingering Damage',
|
||||
id: 'lingeringdamage',
|
||||
value: 2,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
}
|
||||
if (this.hasAoe) {
|
||||
mods.push({ name: 'Selective', id: 'selective', value: 1, epic: false, effect: false })
|
||||
mods.push({
|
||||
name: 'Selective',
|
||||
id: 'selective',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
}
|
||||
return mods
|
||||
}
|
||||
@ -118,56 +230,61 @@ export class PowerEffect {
|
||||
get menuData () {
|
||||
return {
|
||||
inputs: this.menuInputs,
|
||||
buttons: this.menuButtons,
|
||||
buttons: this.menuButtons
|
||||
}
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = [
|
||||
{ type: 'header', label: `${this.name} Effect` },
|
||||
{ type: 'info', label: `Apply ${this.name} Effect (base cost ${this.basePowerPoints} pp)` },
|
||||
{
|
||||
type: 'info',
|
||||
label: `Apply ${this.name} Effect (base cost ${this.basePowerPoints} pp)`
|
||||
}
|
||||
]
|
||||
if (this.isTargeted) {
|
||||
let label = `<strong>Targets:</strong> ${this.targets.map(t => t.name).join(',')}`
|
||||
let label = `<strong>Targets:</strong> ${this.targets.map((t) => t.name).join(',')}`
|
||||
if (this.targets.length > 1 && this.hasAdditionalRecipients) {
|
||||
label += ` (${this.targets.length - 1} additional recipients ` +
|
||||
`+${this.additionalRecipientCost} ea.)`
|
||||
label +=
|
||||
` (${this.targets.length - 1} additional recipients ` +
|
||||
`+${this.additionalRecipientCost} ea.)`
|
||||
}
|
||||
inputs.push({ type: 'info', label: label })
|
||||
inputs.push({ type: 'info', label })
|
||||
}
|
||||
for (const mod of this.modifiers) {
|
||||
inputs.push({
|
||||
type: 'checkbox',
|
||||
label: (
|
||||
label:
|
||||
`${mod.epic ? '⭐ ' : ''}${mod.name} ` +
|
||||
`(${mod.value >= 0 ? '+' : ''}${mod.value})`
|
||||
),
|
||||
})
|
||||
}
|
||||
if (this.isDamaging) {
|
||||
inputs.push({ type: 'select', label: 'Armor Piercing',
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Armor Piercing',
|
||||
options: [
|
||||
{html: 'None', value: 0, selected: true},
|
||||
{html: 'AP 2 (+1)', value: 1, selected: false},
|
||||
{html: 'AP 4 (+2)', value: 2, selected: false},
|
||||
{html: 'AP 6 (+3)', value: 3, selected: false},
|
||||
{ html: 'None', value: 0, selected: true },
|
||||
{ html: 'AP 2 (+1)', value: 1, selected: false },
|
||||
{ html: 'AP 4 (+2)', value: 2, selected: false },
|
||||
{ html: 'AP 6 (+3)', value: 3, selected: false }
|
||||
]
|
||||
})
|
||||
}
|
||||
inputs.push({type: 'select', label: 'Range',
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Range',
|
||||
options: [
|
||||
{html: 'Normal Range', value: 0, selected: true},
|
||||
{html: 'Range ×2 (+1)', value: 1, selected: false},
|
||||
{html: 'Range ×3 (+2)', value: 2, selected: false}
|
||||
{ html: 'Normal Range', value: 0, selected: true },
|
||||
{ html: 'Range ×2 (+1)', value: 1, selected: false },
|
||||
{ html: 'Range ×3 (+2)', value: 2, selected: false }
|
||||
]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
get menuButtons () {
|
||||
const data = [
|
||||
{ label: 'Apply', value: 'apply' },
|
||||
]
|
||||
const data = [{ label: 'Apply', value: 'apply' }]
|
||||
if (this.isRaisable) {
|
||||
data.push({ label: 'Apply with Raise', value: 'raise' })
|
||||
}
|
||||
@ -186,7 +303,8 @@ export class PowerEffect {
|
||||
|
||||
async powerEffect () {
|
||||
const { buttons, inputs } = await warpgate.menu(
|
||||
this.menuData, this.menuOptions
|
||||
this.menuData,
|
||||
this.menuOptions
|
||||
)
|
||||
if (buttons && buttons !== 'cancel') {
|
||||
this.data.button = buttons
|
||||
@ -229,7 +347,8 @@ export class PowerEffect {
|
||||
// set secondary effects of instant spells to expire on victim's next
|
||||
// turn
|
||||
doc.duration.rounds = 1
|
||||
doc.flags.swade.expiration = CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.EndOfTurnAuto
|
||||
doc.flags.swade.expiration =
|
||||
CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.EndOfTurnAuto
|
||||
} else {
|
||||
doc.duration.seconds = 594
|
||||
doc.flags[moduleName].maintId = maintId
|
||||
@ -242,18 +361,26 @@ export class PowerEffect {
|
||||
|
||||
getPrimaryEffectChanges () {
|
||||
const changes = [
|
||||
{ key: 'flags.swade-mb-helpers.powerAffected', value: 1,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.OVERRIDE } ]
|
||||
{
|
||||
key: 'flags.swade-mb-helpers.powerAffected',
|
||||
value: 1,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.OVERRIDE
|
||||
}
|
||||
]
|
||||
return changes
|
||||
}
|
||||
|
||||
get description () {
|
||||
return ""
|
||||
return ''
|
||||
}
|
||||
|
||||
async createPrimaryEffect (maintId) {
|
||||
const doc = this.createEffectDocument(this.icon, this.effectName,
|
||||
this.getPrimaryEffectChanges())
|
||||
const doc = this.createEffectDocument(
|
||||
this.icon,
|
||||
this.effectName,
|
||||
this.getPrimaryEffectChanges()
|
||||
)
|
||||
doc.description += this.description
|
||||
doc.flags[moduleName].maintId = maintId
|
||||
doc.duration.seconds = 594
|
||||
@ -265,23 +392,28 @@ export class PowerEffect {
|
||||
if (!this.usePrimaryEffect) {
|
||||
icon = this.icon
|
||||
}
|
||||
const doc = this.createEffectDocument(icon, `Maintaining ${this.effectName}`, [])
|
||||
const doc = this.createEffectDocument(
|
||||
icon,
|
||||
`Maintaining ${this.effectName}`,
|
||||
[]
|
||||
)
|
||||
doc.duration.rounds = this.duration
|
||||
doc.description += this.description
|
||||
doc.flags.swade.expiration = CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.EndOfTurnPrompt
|
||||
doc.flags.swade.expiration =
|
||||
CONFIG.SWADE.CONST.STATUS_EFFECT_EXPIRATION.EndOfTurnPrompt
|
||||
doc.flags.swade.loseTurnOnHold = true
|
||||
doc.flags[moduleName].maintainingId = maintId
|
||||
doc.flags[moduleName].targetIds = this.targets.map(t => t.id)
|
||||
doc.flags[moduleName].targetIds = this.targets.map((t) => t.id)
|
||||
return doc
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
async secondaryDocsForTarget(docs, target) {
|
||||
async secondaryDocsForTarget (docs, target) {
|
||||
return deepClone(docs)
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
async primaryDocForTarget(doc, target) {
|
||||
async primaryDocForTarget (doc, target) {
|
||||
const newDoc = deepClone(doc)
|
||||
newDoc.flags[moduleName].maintainingId = doc.flags[moduleName].maintId
|
||||
newDoc.flags[moduleName].targetIds = [target.id]
|
||||
@ -295,7 +427,10 @@ export class PowerEffect {
|
||||
const maintainDoc = await this.createMaintainEffect(maintId)
|
||||
if (this.isTargeted) {
|
||||
for (const target of this.targets) {
|
||||
const targetDocs = await this.secondaryDocsForTarget(secondaryDocs, target)
|
||||
const targetDocs = await this.secondaryDocsForTarget(
|
||||
secondaryDocs,
|
||||
target
|
||||
)
|
||||
if (this.duration > 0 || this.usePrimaryEffect) {
|
||||
targetDocs.push(await this.primaryDocForTarget(primaryDoc, target))
|
||||
}
|
||||
@ -368,7 +503,7 @@ export class PowerEffect {
|
||||
list.push(`AP ${this.data.armorPiercing * 2}`)
|
||||
}
|
||||
if (this.data.range > 0) {
|
||||
list.push(`Range ×${this.data.range +1}`)
|
||||
list.push(`Range ×${this.data.range + 1}`)
|
||||
}
|
||||
return list
|
||||
}
|
||||
@ -376,7 +511,7 @@ export class PowerEffect {
|
||||
get chatMessageText () {
|
||||
let text = `<p>Cast ${this.name}`
|
||||
if (this.isTargeted && this.targets.length > 0) {
|
||||
text += ` on ${this.targets.map(t => t.name).join(', ')}`
|
||||
text += ` on ${this.targets.map((t) => t.name).join(', ')}`
|
||||
}
|
||||
text += '</p>'
|
||||
const desc = this.description
|
||||
@ -385,18 +520,23 @@ export class PowerEffect {
|
||||
}
|
||||
const effects = this.chatMessageEffects
|
||||
if (effects.length > 0) {
|
||||
text += '<details><summary>Other Effects:</summary><ul><li>' +
|
||||
effects.join('</li><li>') + '</li></ul></details>'
|
||||
text +=
|
||||
'<details><summary>Other Effects:</summary><ul><li>' +
|
||||
effects.join('</li><li>') +
|
||||
'</li></ul></details>'
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
async chatMessage () {
|
||||
return ChatMessage.create({
|
||||
flavor: `Calculated cost: ${this.powerPoints} pp`,
|
||||
speaker: ChatMessage.getSpeaker(this.source.actor),
|
||||
content: this.chatMessageText,
|
||||
whisper: ChatMessage.getWhisperRecipients('GM', game.user.name),
|
||||
}, { chatBubble: false });
|
||||
return ChatMessage.create(
|
||||
{
|
||||
flavor: `Calculated cost: ${this.powerPoints} pp`,
|
||||
speaker: ChatMessage.getSpeaker(this.source.actor),
|
||||
content: this.chatMessageText,
|
||||
whisper: ChatMessage.getWhisperRecipients('GM', game.user.name)
|
||||
},
|
||||
{ chatBubble: false }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,17 @@
|
||||
/* globals coreFearDialog */
|
||||
/* globals swpfFearDialog */
|
||||
/* globals warpgate */
|
||||
export const moduleName = 'swade-mb-helpers'
|
||||
|
||||
export function log (...args) {
|
||||
console.log('SWADE MB HELPERS |', ...args)
|
||||
}
|
||||
|
||||
export class module {
|
||||
export class moduleHelpers {
|
||||
static _socket = null
|
||||
|
||||
static get socket () {
|
||||
return module._socket
|
||||
return moduleHelpers._socket
|
||||
}
|
||||
|
||||
static get rulesVersion () {
|
||||
@ -114,7 +117,7 @@ export class module {
|
||||
}
|
||||
|
||||
static get fearTableHelper () {
|
||||
switch (module.rulesVersion) {
|
||||
switch (moduleHelpers.rulesVersion) {
|
||||
case 'swade': return coreFearDialog // defined as global by the swade module
|
||||
case 'swpf': return swpfFearDialog // defined as global by the swpf module
|
||||
}
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { module } from './globals.js'
|
||||
/* global warpgate */
|
||||
import { moduleHelpers } from './globals.js'
|
||||
|
||||
export async function requestFearRollFromTokens (tokens, options = {}) {
|
||||
// tokens: list of tokens to request the roll from
|
||||
@ -59,7 +60,7 @@ export async function requestRollFromTokens (tokens, rollType, rollDesc, options
|
||||
if (additionalMods.length > 0) {
|
||||
rollOpts.additionalMods = additionalMods
|
||||
}
|
||||
promises.push(module.socket.executeAsUser(requestTokenRoll, owner.id,
|
||||
promises.push(moduleHelpers.socket.executeAsUser(requestTokenRoll, owner.id,
|
||||
token.scene.id, token.id, rollType, rollDesc, rollOpts))
|
||||
}
|
||||
const results = (await Promise.allSettled(promises)).map(r => r.value)
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
/* globals ColorAdjustmentsSamplerShader */
|
||||
/* globals socketlib */
|
||||
/* globals VisionMode */
|
||||
/* globals warpgate */
|
||||
import { api } from './api.js'
|
||||
import { requestTokenRoll } from './helpers.js'
|
||||
import { preDamageRollModifiers, preTraitRollModifiers } from './rollHelpers.js'
|
||||
import { shapeChangeOnDismiss } from './powerEffects.js'
|
||||
import { log, module } from './globals.js'
|
||||
import { log, moduleHelpers } from './globals.js'
|
||||
import { powerEffectManagementHook } from './powers.js'
|
||||
|
||||
function _checkModule (name) {
|
||||
@ -102,7 +106,7 @@ Hooks.on('ready', () => {
|
||||
})
|
||||
|
||||
Hooks.on('socketlib.ready', () => {
|
||||
const socket = socketlib.registerModule('swade-mb-helpers')
|
||||
socket.register('requestTokenRoll', requestTokenRoll)
|
||||
module._socket = socket
|
||||
const _socket = socketlib.registerModule('swade-mb-helpers')
|
||||
_socket.register('requestTokenRoll', requestTokenRoll)
|
||||
moduleHelpers._socket = _socket
|
||||
})
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { log, module } from './globals.js'
|
||||
/* globals warpgate */
|
||||
import { log, moduleHelpers } from './globals.js'
|
||||
import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js'
|
||||
|
||||
class PowerEffect {
|
||||
@ -70,12 +71,12 @@ class PowerEffect {
|
||||
|
||||
async applyResult () {
|
||||
for (const target of this.targets) {
|
||||
module.applyActiveEffects(target, this.effectDocs)
|
||||
moduleHelpers.applyActiveEffects(target, this.effectDocs)
|
||||
}
|
||||
}
|
||||
|
||||
static modEffectDoc (icon, name, key, value, durationRounds) {
|
||||
return module.createEffectDocument(icon, name, durationRounds, [
|
||||
return moduleHelpers.createEffectDocument(icon, name, durationRounds, [
|
||||
{
|
||||
key,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
||||
@ -160,7 +161,7 @@ class LingeringDamagePowerEffect extends TargetedPowerEffect {
|
||||
super.globalModifierEffects()
|
||||
this.inputIndex += 1
|
||||
if (this.inputs[7]) { // lingering damage
|
||||
const doc = module.createEffectDocument(
|
||||
const doc = moduleHelpers.createEffectDocument(
|
||||
'icons/magic/death/skull-poison-green.webp',
|
||||
`Lingering Damage (${this.name})`,
|
||||
1
|
||||
@ -192,7 +193,7 @@ class ArcaneProtectionEffect extends TargetedPowerEffect {
|
||||
const icon = 'icons/magic/defensive/shield-barrier-flaming-pentagon-blue.webp'
|
||||
const name = `${greater ? 'Greater ' : ''}Arcane Protection (${raise ? 'major, ' : ''}${amount})`
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(icon, name, this.durationRounds, []))
|
||||
moduleHelpers.createEffectDocument(icon, name, this.durationRounds, []))
|
||||
}
|
||||
}
|
||||
|
||||
@ -232,12 +233,12 @@ class BlindEffect extends TargetedPowerEffect {
|
||||
}
|
||||
]
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
icon, `minor Blindness (Vigor ${strong ? '-2 ' : ''}ends)`,
|
||||
this.durationRounds, changes))
|
||||
if (raise) {
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
icon, `major Blindness (Vigor ${strong ? '-2 ' : ''}ends)`,
|
||||
this.durationRounds, changes)
|
||||
)
|
||||
@ -253,7 +254,7 @@ class BurrowEffect extends TargetedPowerEffect {
|
||||
const raise = (this.buttons === 'raise')
|
||||
const icon = 'icons/magic/earth/projectile-stone-landslide.webp'
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
icon,
|
||||
`${raise ? 'major' : 'minor'} ${this.name}`,
|
||||
this.durationRounds,
|
||||
@ -347,14 +348,14 @@ class BoostLowerTraitEffect extends TargetedPowerEffect {
|
||||
}
|
||||
const mode = foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
const modValue = (direction === 'Boost' ? '+2' : '-2')
|
||||
const minorEffect = module.createEffectDocument(
|
||||
const minorEffect = moduleHelpers.createEffectDocument(
|
||||
icon, `minor ${namePart}`, durationRounds, [
|
||||
{ key: trait.diekey, mode, value: modValue, priority: 0 }
|
||||
])
|
||||
if (direction === 'Lower' && greater) {
|
||||
minorEffect.changes.push({ key: trait.modkey, mode, value: modValue, priority: 0 })
|
||||
}
|
||||
const majorEffect = module.createEffectDocument(
|
||||
const majorEffect = moduleHelpers.createEffectDocument(
|
||||
icon, `major ${namePart}`, durationRounds, [
|
||||
{ key: trait.diekey, mode, value: modValue, priority: 0 }
|
||||
])
|
||||
@ -392,13 +393,13 @@ class ConfusionEffect extends TargetedPowerEffect {
|
||||
async prepResult () {
|
||||
const greater = !!this.inputs[this.inputIndex]
|
||||
if (this.buttons === 'distracted' || this.buttons === 'raise') {
|
||||
this.effectDocs.push(module.getStatus('SWADE.Distr', 'Distracted'))
|
||||
this.effectDocs.push(moduleHelpers.getStatus('SWADE.Distr', 'Distracted'))
|
||||
}
|
||||
if (this.buttons === 'vulnerable' || this.buttons === 'raise') {
|
||||
this.effectDocs.push(module.getStatus('SWADE.Vuln', 'Vulnerable'))
|
||||
this.effectDocs.push(moduleHelpers.getStatus('SWADE.Vuln', 'Vulnerable'))
|
||||
}
|
||||
if (greater) {
|
||||
this.effectDocs.push(module.getStatus('SWADE.Shaken', 'Shaken'))
|
||||
this.effectDocs.push(moduleHelpers.getStatus('SWADE.Shaken', 'Shaken'))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -416,7 +417,7 @@ class DarksightEffect extends TargetedPowerEffect {
|
||||
const greater = !!this.inputs[this.inputIndex]
|
||||
const icon = 'icons/magic/perception/eye-ringed-glow-angry-small-teal.webp'
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
icon,
|
||||
`${raise ? 'major' : 'minor'} ${this.name}${greater ? ' (greater)' : ''}`,
|
||||
this.durationRounds,
|
||||
@ -433,7 +434,7 @@ class DisguiseEffect extends TargetedPowerEffect {
|
||||
const raise = this.buttons === 'raise'
|
||||
const icon = 'icons/skills/social/diplomacy-peace-alliance.webp'
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
icon,
|
||||
`${raise ? 'major' : 'minor'} ${this.name}`,
|
||||
this.durationRounds,
|
||||
@ -463,7 +464,7 @@ class DeflectionEffect extends TargetedPowerEffect {
|
||||
async prepResult () {
|
||||
const effectName = `Deflection (${this.buttons === 'raise' ? 'all' : this.buttons})`
|
||||
const icon = 'icons/magic/defensive/shield-barrier-deflect-teal.webp'
|
||||
this.effectDocs.push(module.createEffectDocument(icon, effectName, this.durationRounds))
|
||||
this.effectDocs.push(moduleHelpers.createEffectDocument(icon, effectName, this.durationRounds))
|
||||
}
|
||||
}
|
||||
|
||||
@ -494,7 +495,7 @@ class DetectConcealArcanaEffect extends TargetedPowerEffect {
|
||||
? 'icons/magic/perception/third-eye-blue-red.webp'
|
||||
: 'icons/magic/perception/silhouette-stealth-shadow.webp')
|
||||
const name = `${raise ? 'major ' : ''}${isDetect ? 'Detect' : 'Conceal'} Arcana${strong ? ' (strong)' : ''}`
|
||||
const effect = module.createEffectDocument(icon, name, this.durationRounds, [])
|
||||
const effect = moduleHelpers.createEffectDocument(icon, name, this.durationRounds, [])
|
||||
this.effectDocs.push(effect)
|
||||
}
|
||||
}
|
||||
@ -529,9 +530,9 @@ class EntangleEffect extends TargetedPowerEffect {
|
||||
const tough = !!this.inputs[this.inputIndex + 3]
|
||||
const effectSearch = (this.buttons === 'raise' ? 'SWADE.Bound' : 'SWADE.Entangled')
|
||||
const effectName = (this.buttons === 'raise' ? 'Bound' : 'Entangled')
|
||||
const effect = module.getStatus(effectSearch, effectName)
|
||||
const effect = moduleHelpers.getStatus(effectSearch, effectName)
|
||||
const extraIcon = 'icons/magic/nature/root-vine-barrier-wall-brown.webp'
|
||||
const extraEffect = module.createEffectDocument(extraIcon,
|
||||
const extraEffect = moduleHelpers.createEffectDocument(extraIcon,
|
||||
'Entangle Modifier', this.durationRounds, [])
|
||||
if (damage) {
|
||||
extraEffect.name = `${extraEffect.name} - ${damage} dmg`
|
||||
@ -585,7 +586,7 @@ class HavocEffect extends TargetedPowerEffect {
|
||||
|
||||
async prepResult () {
|
||||
this.raise = (this.buttons === 'raise')
|
||||
this.effectDocs.unshift(module.getStatus('SWADE.Distr', 'Distracted'))
|
||||
this.effectDocs.unshift(moduleHelpers.getStatus('SWADE.Distr', 'Distracted'))
|
||||
}
|
||||
|
||||
async applyResult () {
|
||||
@ -639,7 +640,7 @@ class IntangibilityEffect extends TargetedPowerEffect {
|
||||
|
||||
async prepResult () {
|
||||
const icon = 'icons/magic/control/debuff-energy-hold-levitate-blue-yellow.webp'
|
||||
const effect = module.createEffectDocument(icon, this.name, this.durationRounds, [])
|
||||
const effect = moduleHelpers.createEffectDocument(icon, this.name, this.durationRounds, [])
|
||||
this.effectDocs.push(effect)
|
||||
}
|
||||
}
|
||||
@ -664,7 +665,7 @@ class InvisibilityEffect extends TargetedPowerEffect {
|
||||
}
|
||||
|
||||
async prepResult () {
|
||||
const effect = module.getStatus('EFFECT.StatusInvisible', 'Invisible')
|
||||
const effect = moduleHelpers.getStatus('EFFECT.StatusInvisible', 'Invisible')
|
||||
effect.duration = { rounds: this.durationRounds }
|
||||
this.effectDocs.push(effect)
|
||||
}
|
||||
@ -688,7 +689,7 @@ class ProtectionEffect extends TargetedPowerEffect {
|
||||
}
|
||||
|
||||
async prepResult () {
|
||||
const effect = module.getStatus('SWADE.Protection', 'Protection')
|
||||
const effect = moduleHelpers.getStatus('SWADE.Protection', 'Protection')
|
||||
effect.duration = { rounds: this.durationRounds }
|
||||
const mode = foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
effect.changes = [
|
||||
@ -737,7 +738,7 @@ class ShapeChangeEffect extends TargetedPowerEffect {
|
||||
`${this.actorFolder}/${this.token.actor.name}`
|
||||
]
|
||||
for (const folderName of folderNames) {
|
||||
const folder = module.getActorFolderByPath(folderName)
|
||||
const folder = moduleHelpers.getActorFolderByPath(folderName)
|
||||
if (folder) {
|
||||
log(`Found actor folder ${folderName}`)
|
||||
folders.push(folder)
|
||||
@ -753,7 +754,7 @@ class ShapeChangeEffect extends TargetedPowerEffect {
|
||||
const folders = await this.prepFolders()
|
||||
const actors = {}
|
||||
for (const folder of folders) {
|
||||
const folderActors = module.getActorsInFolder(folder)
|
||||
const folderActors = moduleHelpers.getActorsInFolder(folder)
|
||||
for (const key in folderActors) {
|
||||
actors[key] = folderActors[key]
|
||||
}
|
||||
@ -826,7 +827,7 @@ class ShapeChangeEffect extends TargetedPowerEffect {
|
||||
}
|
||||
}
|
||||
this.effectDocs.push(
|
||||
module.createEffectDocument(
|
||||
moduleHelpers.createEffectDocument(
|
||||
this.icon,
|
||||
`Shape Change into ${this.protoDoc.name}`,
|
||||
this.durationRounds, effectChanges)
|
||||
@ -931,7 +932,7 @@ class SmiteEffect extends TargetedPowerEffect {
|
||||
}
|
||||
|
||||
async prepResult () {
|
||||
this.baseEffect = module.getStatus('SWADE.Smite', 'Smite')
|
||||
this.baseEffect = moduleHelpers.getStatus('SWADE.Smite', 'Smite')
|
||||
}
|
||||
|
||||
async applyResult () {
|
||||
@ -948,7 +949,7 @@ class SmiteEffect extends TargetedPowerEffect {
|
||||
]
|
||||
this.baseEffect.changes = changes
|
||||
this.baseEffect.name = effectName
|
||||
await module.applyActiveEffects(token, [this.baseEffect].concat(this.effectDocs))
|
||||
await moduleHelpers.applyActiveEffects(token, [this.baseEffect].concat(this.effectDocs))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -995,7 +996,7 @@ class SlothSpeedEffect extends TargetedPowerEffect {
|
||||
`${nameMods.length > 0 ? ' (' : ''}` +
|
||||
`${nameMods.join(', ')}${nameMods.length > 0 ? ')' : ''}`)
|
||||
const name = `${isSloth ? 'Sloth' : 'Speed'}${nameModifier}`
|
||||
const effect = module.createEffectDocument(
|
||||
const effect = moduleHelpers.createEffectDocument(
|
||||
icon, name, this.durationRounds, [
|
||||
{
|
||||
key: 'system.stats.speed.value',
|
||||
@ -1038,7 +1039,7 @@ class SummonEffect extends PowerEffect {
|
||||
`${this.actorFolder}/${this.token.actor.name}`
|
||||
]
|
||||
for (const folderName of folderNames) {
|
||||
const folder = module.getActorFolderByPath(folderName)
|
||||
const folder = moduleHelpers.getActorFolderByPath(folderName)
|
||||
if (folder) {
|
||||
log(`Found actor folder ${folderName}`)
|
||||
folders.push(folder)
|
||||
@ -1054,7 +1055,7 @@ class SummonEffect extends PowerEffect {
|
||||
const folders = await this.prepFolders()
|
||||
const actors = {}
|
||||
for (const folder of folders) {
|
||||
const folderActors = module.getActorsInFolder(folder)
|
||||
const folderActors = moduleHelpers.getActorsInFolder(folder)
|
||||
for (const key in folderActors) {
|
||||
actors[key] = folderActors[key]
|
||||
}
|
||||
@ -1199,7 +1200,7 @@ class SummonEffect extends PowerEffect {
|
||||
modKeys.push(`@Skill{${skillList[i]}}[system.die.sides]`)
|
||||
}
|
||||
}
|
||||
const effectDoc = module.createEffectDocument(
|
||||
const effectDoc = moduleHelpers.createEffectDocument(
|
||||
this.ICON, 'Increased Trait', this.durationRounds)
|
||||
effectDoc.changes = modKeys.map(key => {
|
||||
return {
|
||||
@ -1373,7 +1374,7 @@ class SummonAllyEffect extends SummonEffect {
|
||||
}
|
||||
}
|
||||
this.spawnMutation.embedded.ActiveEffect['Mirror Self'] =
|
||||
module.createEffectDocument(this.ICON, 'Mirror Self',
|
||||
moduleHelpers.createEffectDocument(this.ICON, 'Mirror Self',
|
||||
this.durationRounds, effectChanges)
|
||||
}
|
||||
}
|
||||
@ -1586,7 +1587,7 @@ class ZombieEffect extends SummonEffect {
|
||||
}
|
||||
}
|
||||
if (this.armor) {
|
||||
const effectDoc = module.createEffectDocument(
|
||||
const effectDoc = moduleHelpers.createEffectDocument(
|
||||
'icons/equipment/chest/breastplate-layered-leather-stitched.webp',
|
||||
'Rotting Armor',
|
||||
0)
|
||||
@ -1653,7 +1654,7 @@ class ZombieEffect extends SummonEffect {
|
||||
modKeys.push(`@Skill{${skillList[i]}}[system.die.sides]`)
|
||||
}
|
||||
}
|
||||
const effectDoc = module.createEffectDocument(
|
||||
const effectDoc = moduleHelpers.createEffectDocument(
|
||||
this.ICON, 'Increased Trait', this.durationRounds)
|
||||
effectDoc.changes = modKeys.map(key => {
|
||||
return {
|
||||
|
||||
1258
scripts/powers.js
1258
scripts/powers.js
@ -1,13 +1,32 @@
|
||||
/* globals warpgate */
|
||||
import { moduleName } from './globals.js'
|
||||
import { PowerEffect } from './basePowers.js'
|
||||
|
||||
class ArcaneProtectionEffect extends PowerEffect {
|
||||
get name () { return 'Arcane Protection' }
|
||||
get duration () { return 5 }
|
||||
get icon () { return 'icons/magic/defensive/shield-barrier-flaming-pentagon-blue.webp' }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 1 }
|
||||
get isTargeted () { return true }
|
||||
get name () {
|
||||
return 'Arcane Protection'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/defensive/shield-barrier-flaming-pentagon-blue.webp'
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({
|
||||
@ -19,15 +38,20 @@ class ArcaneProtectionEffect extends PowerEffect {
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get _penaltyAmount () {
|
||||
return (this.data.raise ? -4 : -2) + (this.data.mods.has('greater') ? -2 : 0)
|
||||
return (
|
||||
(this.data.raise ? -4 : -2) + (this.data.mods.has('greater') ? -2 : 0)
|
||||
)
|
||||
}
|
||||
|
||||
get description () {
|
||||
let text = super.description
|
||||
text += `<p>Hostile powers are at ${this._penaltyAmount} when
|
||||
targeting or damaging the affected character.</p>`
|
||||
return text
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
const greater = this.data.mods.has('greater')
|
||||
const raise = this.data.raise
|
||||
@ -37,41 +61,71 @@ class ArcaneProtectionEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class BanishEffect extends PowerEffect {
|
||||
get name () { return 'Banish' }
|
||||
get duration () { return 0 }
|
||||
get basePowerPoints () { return 3 }
|
||||
get usePrimaryEffect () { return false }
|
||||
get isTargeted () { return true }
|
||||
get isRaisable () { return false }
|
||||
get hasAoe () { return true }
|
||||
get name () {
|
||||
return 'Banish'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 3
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get isRaisable () {
|
||||
return false
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
inputs.push
|
||||
inputs.push({ type: 'select', label: '⭐ Area of Effect',
|
||||
options: [
|
||||
{html: 'None', value: 0, selected: true},
|
||||
{html: 'Small Blast Template (+1)', value: 1, selected: false},
|
||||
{html: 'Medium Blast Template (+2)', value: 2, selected: false},
|
||||
{html: 'Large Blast Template (+3)', value: 3, selected: false},
|
||||
]})
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: '⭐ Area of Effect',
|
||||
options: [
|
||||
{ html: 'None', value: 0, selected: true },
|
||||
{ html: 'Small Blast Template (+1)', value: 1, selected: false },
|
||||
{ html: 'Medium Blast Template (+2)', value: 2, selected: false },
|
||||
{ html: 'Large Blast Template (+3)', value: 3, selected: false }
|
||||
]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
total += this.data.aoe
|
||||
return total
|
||||
}
|
||||
|
||||
get description () {
|
||||
return super.description + `
|
||||
return (
|
||||
super.description +
|
||||
`
|
||||
<p>An opposed roll of the caster's skill vs the target's Spirit.
|
||||
<strong>Success:</strong> Shaken, <strong>each Raise:</strong> 1 Wound
|
||||
Incapacitation results in banishment to home plane.</p>
|
||||
`
|
||||
)
|
||||
}
|
||||
|
||||
get chatMessageEffects () {
|
||||
const list = super.chatMessageEffects
|
||||
switch (this.data.aoe) {
|
||||
case 0: break
|
||||
case 0:
|
||||
break
|
||||
case 1:
|
||||
list.push('SBT')
|
||||
break
|
||||
@ -84,6 +138,7 @@ class BanishEffect extends PowerEffect {
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.aoe = this.data.values.shift()
|
||||
@ -91,35 +146,102 @@ class BanishEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class BarrierEffect extends PowerEffect {
|
||||
get name () { return 'Barrier' }
|
||||
get duration () { return 5 }
|
||||
get icon () { return 'icons/environment/settlement/fence-stone-brick.webp' }
|
||||
get isTargeted () { return false }
|
||||
get isDamaging () { return true }
|
||||
get basePowerPoints () { return 2 }
|
||||
get usePrimaryEffect () { return false }
|
||||
get name () {
|
||||
return 'Barrier'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/environment/settlement/fence-stone-brick.webp'
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isDamaging () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({ name: 'Damage', id: 'damage', value: 1, epic: false, effect: false })
|
||||
mods.push({ name: 'Damage (immaterial trapping)', id: 'damage', value: 0, epic: false, effect: false })
|
||||
mods.push({ name: 'Deadly', id: 'deadly', value: 2, epic: true, effect: false })
|
||||
mods.push({ name: 'Hardened', id: 'hardened', value: 1, epic: false, effect: false })
|
||||
mods.push({ name: 'Shaped', id: 'shaped', value: 1, epic: false, effect: false })
|
||||
mods.push({ name: 'Size', id: 'size', value: 1, epic: false, effect: false })
|
||||
mods.push({
|
||||
name: 'Damage',
|
||||
id: 'damage',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Damage (immaterial trapping)',
|
||||
id: 'damage',
|
||||
value: 0,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Deadly',
|
||||
id: 'deadly',
|
||||
value: 2,
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Hardened',
|
||||
id: 'hardened',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Shaped',
|
||||
id: 'shaped',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Size',
|
||||
id: 'size',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get _length () {
|
||||
let height = 10
|
||||
if (this.data.raise) { height *= 2 }
|
||||
if (this.data.mods.has('size')) { height *= 2}
|
||||
return `${height}" (${height*2} yards)`
|
||||
if (this.data.raise) {
|
||||
height *= 2
|
||||
}
|
||||
if (this.data.mods.has('size')) {
|
||||
height *= 2
|
||||
}
|
||||
return `${height}" (${height * 2} yards)`
|
||||
}
|
||||
|
||||
get _height () {
|
||||
return `${this.data.mods.has('size') ? '2" (4' : '1" (2'} yards`
|
||||
}
|
||||
|
||||
get _hardness () {
|
||||
return (this.data.raise ? 12 : 10) + (this.data.mods.has('hardened') ? 2 : 0)
|
||||
return (
|
||||
(this.data.raise ? 12 : 10) + (this.data.mods.has('hardened') ? 2 : 0)
|
||||
)
|
||||
}
|
||||
|
||||
get description () {
|
||||
let text = super.description
|
||||
text += `<p>A barrier ${this._height} tall and ${this._length} long, of hardness ${this._hardness}. `
|
||||
@ -137,35 +259,75 @@ class BarrierEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class BeastFriendEffect extends PowerEffect {
|
||||
get name () { return 'Beast Friend' }
|
||||
get duration () { return (this.data.mods.has('duration') ? 30 : 10) * 6 * 60 }
|
||||
get icon () { return 'icons/magic/nature/wolf-paw-glow-large-green.webp' }
|
||||
get isTargeted () { return true }
|
||||
get usePrimaryEffect () { return true }
|
||||
get name () {
|
||||
return 'Beast Friend'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return (this.data.mods.has('duration') ? 30 : 10) * 6 * 60
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/nature/wolf-paw-glow-large-green.webp'
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return true
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Bestiarium', value: 2, id: 'bestiarium', epic: true, effect: false },
|
||||
{ name: 'Duration', value: 1, id: 'duration', epic: false, effect: false },
|
||||
{ name: 'Mind Rider', value: 1, id: 'mindrider', epic: false, effect: false },
|
||||
{
|
||||
name: 'Bestiarium',
|
||||
value: 2,
|
||||
id: 'bestiarium',
|
||||
epic: true,
|
||||
effect: false
|
||||
},
|
||||
{
|
||||
name: 'Duration',
|
||||
value: 1,
|
||||
id: 'duration',
|
||||
epic: false,
|
||||
effect: false
|
||||
},
|
||||
{
|
||||
name: 'Mind Rider',
|
||||
value: 1,
|
||||
id: 'mindrider',
|
||||
epic: false,
|
||||
effect: false
|
||||
}
|
||||
)
|
||||
return mods
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
const pp = Math.max(
|
||||
this.targets.
|
||||
map(t => Math.max(t.actor.system.stats.size, 1)).
|
||||
reduce((a,b) => a+b, 0),
|
||||
1)
|
||||
inputs.push({ type: 'number', label: 'Base power points', options: pp})
|
||||
this.targets
|
||||
.map((t) => Math.max(t.actor.system.stats.size, 1))
|
||||
.reduce((a, b) => a + b, 0),
|
||||
1
|
||||
)
|
||||
inputs.push({ type: 'number', label: 'Base power points', options: pp })
|
||||
return inputs
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.basePP = this.data.values.shift()
|
||||
}
|
||||
get basePowerPoints () { return this?.data?.basePP || 2 }
|
||||
|
||||
get basePowerPoints () {
|
||||
return this?.data?.basePP || 2
|
||||
}
|
||||
|
||||
get description () {
|
||||
let text = super.description
|
||||
if (this.data.raise) {
|
||||
@ -181,158 +343,289 @@ class BeastFriendEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class BlastEffect extends PowerEffect {
|
||||
get name () { return 'Blast' }
|
||||
get icon () { return 'icons/magic/fire/explosion-fireball-large-red-orange.webp' }
|
||||
get duration () { return 0 }
|
||||
get isTargeted () { return true }
|
||||
get usePrimaryEffect () { return false }
|
||||
get isDamaging () { return true }
|
||||
get basePowerPoints () { return 3 }
|
||||
get hasAoe () { return true }
|
||||
get name () {
|
||||
return 'Blast'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/fire/explosion-fireball-large-red-orange.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isDamaging () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 3
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
inputs.push
|
||||
inputs.push({ type: 'select', label: 'Area of Effect',
|
||||
options: [
|
||||
{html: 'Small Blast Template (0)', value: 's', selected: false},
|
||||
{html: 'Medium Blast Template (0)', value: 'm', selected: true},
|
||||
{html: 'Large Blast Template (+1)', value: 'l', selected: false},
|
||||
]})
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Area of Effect',
|
||||
options: [
|
||||
{ html: 'Small Blast Template (0)', value: 's', selected: false },
|
||||
{ html: 'Medium Blast Template (0)', value: 'm', selected: true },
|
||||
{ html: 'Large Blast Template (+1)', value: 'l', selected: false }
|
||||
]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Damage', value: 2, id: 'damage', epic: false, effect: false },
|
||||
{ name: 'Greater Blast', value: 4, id: 'greater', epic: true, effect: false },
|
||||
{
|
||||
name: 'Greater Blast',
|
||||
value: 4,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
}
|
||||
)
|
||||
return mods
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
total += (this.data.aoe === 'l' ? 1 : 0)
|
||||
total += this.data.aoe === 'l' ? 1 : 0
|
||||
return total
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.aoe = this.data.values.shift()
|
||||
}
|
||||
|
||||
get description () {
|
||||
const dmgDie = (
|
||||
this.data.mods.has('greater') ? 4 :
|
||||
(this.data.mods.has('damage') ? 3 : 2)) + (this.data.raise ? 1 : 0)
|
||||
const size = (
|
||||
this.data.aoe === 'l' ? 'LBT' : (this.data.aoe === 's' ? 'SBT' : 'MBT'))
|
||||
return super.description + `
|
||||
const dmgDie =
|
||||
(this.data.mods.has('greater')
|
||||
? 4
|
||||
: this.data.mods.has('damage')
|
||||
? 3
|
||||
: 2) + (this.data.raise ? 1 : 0)
|
||||
const size =
|
||||
this.data.aoe === 'l' ? 'LBT' : this.data.aoe === 's' ? 'SBT' : 'MBT'
|
||||
return (
|
||||
super.description +
|
||||
`
|
||||
<p>The blast covers a ${size} and does ${dmgDie}d6 damage</p>`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class BlindEffect extends PowerEffect {
|
||||
get name () { return 'Blind' }
|
||||
get icon () { return 'icons/skills/wounds/injury-eyes-blood-red.webp' }
|
||||
get duration () { return 0 }
|
||||
get isTargeted () { return true }
|
||||
get hasAoe () { return true }
|
||||
get basePowerPoints () { return 2 }
|
||||
get name () {
|
||||
return 'Blind'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/skills/wounds/injury-eyes-blood-red.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
getPrimaryEffectChanges () {
|
||||
const changes = [
|
||||
{ key: 'system.stats.globalMods.trait', value: -2,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
{
|
||||
key: 'system.stats.globalMods.trait',
|
||||
value: -2,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
return changes
|
||||
}
|
||||
|
||||
get description () {
|
||||
return super.description +
|
||||
return (
|
||||
super.description +
|
||||
`<p>${this.data.raise ? -4 : -2} penalty to all actions involving sight.</p>
|
||||
<p>Shake off attempts at end of turns with a Vigor
|
||||
${this.data.mods.has('strong') ? '-2 ' : ''}roll as a free action.
|
||||
Success removes 2 points of penalties. A raise removes the effect.</p>`
|
||||
)
|
||||
}
|
||||
|
||||
async createSecondaryEffects (maintId) {
|
||||
const docs = await super.createSecondaryEffects(maintId)
|
||||
if (this.data.raise) {
|
||||
const strong = this.data.mods.has('strong')
|
||||
const doc = this.createEffectDocument(
|
||||
this.icon, `Blinded (${strong ? 'Strong, ' : ''}Raise)`, [
|
||||
{ key: 'system.stats.globalMods.trait', value: -2,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD }
|
||||
])
|
||||
this.icon,
|
||||
`Blinded (${strong ? 'Strong, ' : ''}Raise)`,
|
||||
[
|
||||
{
|
||||
key: 'system.stats.globalMods.trait',
|
||||
value: -2,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
)
|
||||
doc.duration.seconds = 594
|
||||
doc.description = this.description +
|
||||
"<p>This is the raise effect which can be shaken off separately.</p>"
|
||||
doc.description =
|
||||
this.description +
|
||||
'<p>This is the raise effect which can be shaken off separately.</p>'
|
||||
doc.flags[moduleName].maintId = maintId
|
||||
docs.push(doc)
|
||||
}
|
||||
return docs
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Strong', value: 1, id: 'strong', epic: false, effect: false },
|
||||
)
|
||||
mods.push({
|
||||
name: 'Strong',
|
||||
value: 1,
|
||||
id: 'strong',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
inputs.push
|
||||
inputs.push({ type: 'select', label: 'Area of Effect',
|
||||
options: [
|
||||
{html: 'None', value: 0, selected: true},
|
||||
{html: 'Medium Blast Template (+2)', value: 2, selected: false},
|
||||
{html: 'Large Blast Template (+3)', value: 3, selected: false},
|
||||
]})
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Area of Effect',
|
||||
options: [
|
||||
{ html: 'None', value: 0, selected: true },
|
||||
{ html: 'Medium Blast Template (+2)', value: 2, selected: false },
|
||||
{ html: 'Large Blast Template (+3)', value: 3, selected: false }
|
||||
]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.aoe = this.data.values.shift()
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
total += this.data.aoe
|
||||
return total
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
const strong = this.data.mods.has('strong')
|
||||
return `Blinded${strong ? ' (Strong)' : ''}`
|
||||
}
|
||||
|
||||
get chatMessageEffects () {
|
||||
const list = super.chatMessageEffects
|
||||
switch (this.data.aoe) {
|
||||
case 2: list.push('MBT'); break
|
||||
case 3: list.push('LBT'); break
|
||||
case 2:
|
||||
list.push('MBT')
|
||||
break
|
||||
case 3:
|
||||
list.push('LBT')
|
||||
break
|
||||
}
|
||||
return list
|
||||
}
|
||||
}
|
||||
|
||||
class BoltEffect extends PowerEffect {
|
||||
get name () { return 'Bolt' }
|
||||
get icon () { return 'icons/magic/fire/explosion-fireball-large-red-orange.webp' }
|
||||
get duration () { return 0 }
|
||||
get isTargeted () { return true }
|
||||
get isDamaging () { return true }
|
||||
get basePowerPoints () { return 3 }
|
||||
get usePrimaryEffect () { return false }
|
||||
get name () {
|
||||
return 'Bolt'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/fire/explosion-fireball-large-red-orange.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get isDamaging () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 3
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Damage', value: 2, id: 'damage', epic: false, effect: false },
|
||||
{ name: 'Disintegrate', value: 1, id: 'disintigrate', epic: true, effect: false },
|
||||
{ name: 'Greater Bolt', value: 4, id: 'greater', epic: true, effect: false },
|
||||
{ name: 'Rate of Fire', value: 2, id: 'rof', epic: true, effect: false },
|
||||
{
|
||||
name: 'Disintegrate',
|
||||
value: 1,
|
||||
id: 'disintigrate',
|
||||
epic: true,
|
||||
effect: false
|
||||
},
|
||||
{
|
||||
name: 'Greater Bolt',
|
||||
value: 4,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
},
|
||||
{ name: 'Rate of Fire', value: 2, id: 'rof', epic: true, effect: false }
|
||||
)
|
||||
return mods
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
total += (this.data.aoe === 'l' ? 1 : 0)
|
||||
total += this.data.aoe === 'l' ? 1 : 0
|
||||
return total
|
||||
}
|
||||
|
||||
get description () {
|
||||
const dmgDie = (
|
||||
this.data.mods.has('greater') ? 4 :
|
||||
(this.data.mods.has('damage') ? 3 : 2)) + (this.data.raise ? 1 : 0)
|
||||
const dmgDie =
|
||||
(this.data.mods.has('greater')
|
||||
? 4
|
||||
: this.data.mods.has('damage')
|
||||
? 3
|
||||
: 2) + (this.data.raise ? 1 : 0)
|
||||
let desc = super.description + '<p>'
|
||||
if (this.data.mods.has('rof')) {
|
||||
desc += `Up to two bolts (RoF 2) do ${dmgDie}d6 damage each.`
|
||||
@ -340,7 +633,8 @@ class BoltEffect extends PowerEffect {
|
||||
desc += `The bolt does ${dmgDie}d6 damage.`
|
||||
}
|
||||
if (this.data.mods.has('disintegrate')) {
|
||||
desc += 'The bolt is <em>disintegrating</em>. If being used to break' +
|
||||
desc +=
|
||||
'The bolt is <em>disintegrating</em>. If being used to break' +
|
||||
' something, the damage dice can Ace. A creature Incapacitated by a ' +
|
||||
'disintegrating bolt must make a Vigor roll or its body turns to dust'
|
||||
}
|
||||
@ -350,53 +644,95 @@ class BoltEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class BurrowEffect extends PowerEffect {
|
||||
get name () { return 'Burrow' }
|
||||
get duration () { return 5 }
|
||||
get icon () { return 'icons/magic/earth/projectile-stone-landslide.webp' }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 1 }
|
||||
get basePowerPoints () { return 1 }
|
||||
get isTargeted () { return true }
|
||||
get name () {
|
||||
return 'Burrow'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/earth/projectile-stone-landslide.webp'
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Power',
|
||||
id: 'power',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false,
|
||||
})
|
||||
mods.push({
|
||||
name: 'Power',
|
||||
id: 'power',
|
||||
value: 1,
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
return `${this.name} ${this.data.mods.has('power') ? '[Power] ' : ''}` +
|
||||
return (
|
||||
`${this.name} ${this.data.mods.has('power') ? '[Power] ' : ''}` +
|
||||
`(${this.data.raise ? 'full' : 'half'} pace)`
|
||||
)
|
||||
}
|
||||
get description() {
|
||||
let text = super.description +
|
||||
|
||||
get description () {
|
||||
let text =
|
||||
super.description +
|
||||
`<p>Meld into the ground. Move at ${this.data.raise ? 'full' : 'half'} pace. May not run.</p>`
|
||||
if (this.data.mods.has('power')) {
|
||||
text += `<p>Can <em>burrow</em> through solid stone, concrete, etc</p>`
|
||||
text += '<p>Can <em>burrow</em> through solid stone, concrete, etc</p>'
|
||||
}
|
||||
return text
|
||||
}
|
||||
}
|
||||
|
||||
class BoostLowerTraitEffect extends PowerEffect {
|
||||
get name () { return 'Boost/Lower Trait' }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 2 }
|
||||
get name () {
|
||||
return 'Boost/Lower Trait'
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return (this?.data?.direction === 'Boost' ?
|
||||
'icons/magic/life/cross-embers-glow-yellow-purple.webp' :
|
||||
'icons/magic/movement/chevrons-down-yellow.webp'
|
||||
)
|
||||
return this?.data?.direction === 'Boost'
|
||||
? 'icons/magic/life/cross-embers-glow-yellow-purple.webp'
|
||||
: 'icons/magic/movement/chevrons-down-yellow.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return (this?.data?.direction === 'Boost' ? 5 : 0)
|
||||
return this?.data?.direction === 'Boost' ? 5 : 0
|
||||
}
|
||||
get isTargeted () { return true }
|
||||
get basePowerPoints () { return 3 }
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 3
|
||||
}
|
||||
|
||||
getPrimaryEffectChanges () {
|
||||
let modValue = '2'
|
||||
if (this.data.raise && this.data.direction === 'Boost') {
|
||||
@ -404,32 +740,48 @@ class BoostLowerTraitEffect extends PowerEffect {
|
||||
}
|
||||
modValue = (this.data.direction === 'Boost' ? '+' : '-') + modValue
|
||||
const changes = [
|
||||
{ key: this.data.trait.diekey, value: modValue,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
{
|
||||
key: this.data.trait.diekey,
|
||||
value: modValue,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
if (this.data.direction === 'Lower' && this.data.mods.has('greater')) {
|
||||
changes.push({
|
||||
key: this.data.trait.modkey, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
||||
value: -2, priority: 0})
|
||||
key: this.data.trait.modkey,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD,
|
||||
value: -2,
|
||||
priority: 0
|
||||
})
|
||||
}
|
||||
return changes
|
||||
}
|
||||
|
||||
async createSecondaryEffects (maintId) {
|
||||
const docs = await super.createSecondaryEffects(maintId)
|
||||
if (this.data.raise && this.data.direction === 'Lower') {
|
||||
const name = 'major ' + this.effectName
|
||||
const modValue = (this.data.direction === 'Boost' ? '+2': '-2')
|
||||
const modValue = this.data.direction === 'Boost' ? '+2' : '-2'
|
||||
const changes = [
|
||||
{ key: this.data.trait.diekey, value: modValue,
|
||||
priority: 0, mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD } ]
|
||||
{
|
||||
key: this.data.trait.diekey,
|
||||
value: modValue,
|
||||
priority: 0,
|
||||
mode: foundry.CONST.ACTIVE_EFFECT_MODES.ADD
|
||||
}
|
||||
]
|
||||
const doc = this.createEffectDocument(this.icon, name, changes)
|
||||
doc.duration.seconds = 594
|
||||
doc.description = this.description +
|
||||
"<p>This is the raise effect which can be shaken off separately.</p>"
|
||||
doc.description =
|
||||
this.description +
|
||||
'<p>This is the raise effect which can be shaken off separately.</p>'
|
||||
doc.flags[moduleName].maintId = maintId
|
||||
docs.push(doc)
|
||||
}
|
||||
return docs
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
let name = `${this.data.direction} ${this.data.trait.name}`
|
||||
const nameMods = []
|
||||
@ -444,9 +796,10 @@ class BoostLowerTraitEffect extends PowerEffect {
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
get description () {
|
||||
let desc = super.description
|
||||
const amount = `${this.data.raise ? 2 : 1} die type${this.data.raise ? 's' :''}`
|
||||
const amount = `${this.data.raise ? 2 : 1} die type${this.data.raise ? 's' : ''}`
|
||||
desc += `<p>${this.data.direction === 'Boost' ? 'Raise' : 'Lower'} the
|
||||
target's ${this.data.trait.name} die type ${amount}.`
|
||||
if (this.data.mods.has('greater')) {
|
||||
@ -467,15 +820,26 @@ class BoostLowerTraitEffect extends PowerEffect {
|
||||
}
|
||||
return desc
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{name: 'Greater Boost/Lower Trailt', value: 2, id: 'greater', epic: true, effect: false})
|
||||
mods.push(
|
||||
{ name: 'Strong (lower only)', value: 1, id: 'strong', epic: false, effect: false }
|
||||
)
|
||||
mods.push({
|
||||
name: 'Greater Boost/Lower Trailt',
|
||||
value: 2,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Strong (lower only)',
|
||||
value: 1,
|
||||
id: 'strong',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
let traitOptions = ['Agility', 'Smarts', 'Spirit', 'Strength', 'Vigor']
|
||||
@ -491,14 +855,14 @@ class BoostLowerTraitEffect extends PowerEffect {
|
||||
}
|
||||
}
|
||||
for (const token of this.targets) {
|
||||
const skills = token.actor.items.filter(item => item.type === 'skill')
|
||||
const skills = token.actor.items.filter((item) => item.type === 'skill')
|
||||
for (const skill of skills) {
|
||||
const name = skill.name
|
||||
traits[name] = {
|
||||
name,
|
||||
type: 'skill',
|
||||
modkey: `@Skill{${name}}[system.die.modifier]`,
|
||||
diekey: `@Skill{${name}}[system.die.sides]`,
|
||||
diekey: `@Skill{${name}}[system.die.sides]`
|
||||
}
|
||||
if (name !== 'Unskilled') {
|
||||
allSkills.add(name)
|
||||
@ -507,99 +871,172 @@ class BoostLowerTraitEffect extends PowerEffect {
|
||||
}
|
||||
traitOptions = traitOptions.concat(Array.from(allSkills).sort())
|
||||
this.data.traits = traits
|
||||
inputs.push({type: 'select', label: 'Trait', options: traitOptions})
|
||||
inputs.push({type: 'info', label: 'Boost or Lower?'})
|
||||
inputs.push({type: 'radio', label: 'Boost', options: ['isBoost', true]})
|
||||
inputs.push({type: 'radio', label: 'Lower', options: ['isBoost', false]})
|
||||
inputs.push({ type: 'select', label: 'Trait', options: traitOptions })
|
||||
inputs.push({ type: 'info', label: 'Boost or Lower?' })
|
||||
inputs.push({ type: 'radio', label: 'Boost', options: ['isBoost', true] })
|
||||
inputs.push({ type: 'radio', label: 'Lower', options: ['isBoost', false] })
|
||||
return inputs
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.trait = this.data.traits[this.data.values.shift()]
|
||||
this.data.values.shift()
|
||||
this.data.direction = this.data.values.shift() ? 'Boost' : 'Lower'
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
const total = super.powerPoints
|
||||
return total
|
||||
}
|
||||
}
|
||||
|
||||
class BurstEffect extends PowerEffect {
|
||||
get name () { return 'Blast' }
|
||||
get icon () { return 'icons/magic/sonic/projectile-shock-wave-blue.webp' }
|
||||
get duration () { return 0 }
|
||||
get isTargeted () { return true }
|
||||
get usePrimaryEffect () { return false }
|
||||
get isDamaging () { return true }
|
||||
get basePowerPoints () { return 3 }
|
||||
get hasAoe () { return true }
|
||||
get name () {
|
||||
return 'Blast'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/sonic/projectile-shock-wave-blue.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get isDamaging () {
|
||||
return true
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 3
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Damage', value: 2, id: 'damage', epic: false, effect: false },
|
||||
{ name: 'Greater Burst', value: 4, id: 'greater', epic: true, effect: false },
|
||||
{
|
||||
name: 'Greater Burst',
|
||||
value: 4,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
}
|
||||
)
|
||||
return mods
|
||||
}
|
||||
|
||||
get description () {
|
||||
const dmgDie = (
|
||||
this.data.mods.has('greater') ? 4 :
|
||||
(this.data.mods.has('damage') ? 3 : 2)) + (this.data.raise ? 1 : 0)
|
||||
return super.description + `
|
||||
const dmgDie =
|
||||
(this.data.mods.has('greater')
|
||||
? 4
|
||||
: this.data.mods.has('damage')
|
||||
? 3
|
||||
: 2) + (this.data.raise ? 1 : 0)
|
||||
return (
|
||||
super.description +
|
||||
`
|
||||
<p>The blast covers a Cone or Stream template and does ${dmgDie}d6 damage</p>`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class ConfusionEffect extends PowerEffect {
|
||||
get name () { return 'Confusion' }
|
||||
get icon () { return 'icons/magic/control/hypnosis-mesmerism-swirl.webp' }
|
||||
get duration () { return 0 }
|
||||
get isTargeted () { return true }
|
||||
get usePrimaryEffect () { return false }
|
||||
get basePowerPoints () { return 2 }
|
||||
get hasAoe () { return true }
|
||||
get name () {
|
||||
return 'Confusion'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/control/hypnosis-mesmerism-swirl.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 0
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get usePrimaryEffect () {
|
||||
return false
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
inputs.push
|
||||
inputs.push({ type: 'select', label: 'Area of Effect',
|
||||
options: [
|
||||
{html: 'Small Blast Template (0)', value: 's', selected: false},
|
||||
{html: 'Medium Blast Template (0)', value: 'm', selected: true},
|
||||
{html: 'Large Blast Template (+1)', value: 'l', selected: false},
|
||||
]})
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Area of Effect',
|
||||
options: [
|
||||
{ html: 'Small Blast Template (0)', value: 's', selected: false },
|
||||
{ html: 'Medium Blast Template (0)', value: 'm', selected: true },
|
||||
{ html: 'Large Blast Template (+1)', value: 'l', selected: false }
|
||||
]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push(
|
||||
{ name: 'Greater Confusion', value: 2, id: 'greater', epic: true, effect: false },
|
||||
)
|
||||
mods.push({
|
||||
name: 'Greater Confusion',
|
||||
value: 2,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
let total = super.powerPoints
|
||||
total += (this.data.aoe === 'l' ? 1 : 0)
|
||||
total += this.data.aoe === 'l' ? 1 : 0
|
||||
return total
|
||||
}
|
||||
|
||||
get menuButtons () {
|
||||
const data = [
|
||||
{ label: 'Apply with Distracted', value: 'distracted' },
|
||||
{ label: 'Apply with Vulnerable', value: 'vulnerable' },
|
||||
{ label: 'Apply with both (raise)', value: 'raise' },
|
||||
{ label: 'Cancel', value: 'cancel' },
|
||||
{ label: 'Cancel', value: 'cancel' }
|
||||
]
|
||||
return data
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.distracted = this.data.button === 'distracted' || this.data.button === 'raise'
|
||||
this.data.vulnerable = this.data.button === 'vulnerable' || this.data.button === 'raise'
|
||||
this.data.distracted =
|
||||
this.data.button === 'distracted' || this.data.button === 'raise'
|
||||
this.data.vulnerable =
|
||||
this.data.button === 'vulnerable' || this.data.button === 'raise'
|
||||
this.data.aoe = this.data.values.shift()
|
||||
}
|
||||
|
||||
get description () {
|
||||
const size = (
|
||||
this.data.aoe === 'l' ? 'LBT' : (this.data.aoe === 's' ? 'SBT' : 'MBT'))
|
||||
const size =
|
||||
this.data.aoe === 'l' ? 'LBT' : this.data.aoe === 's' ? 'SBT' : 'MBT'
|
||||
let effect = 'Vulnerable'
|
||||
if (this.data.raise) {
|
||||
effect = 'both Distracted and Vulnerable'
|
||||
@ -609,39 +1046,75 @@ class ConfusionEffect extends PowerEffect {
|
||||
if (this.data.mods.has('Greater')) {
|
||||
effect += ' as well as Shaken'
|
||||
}
|
||||
return super.description + `
|
||||
return (
|
||||
super.description +
|
||||
`
|
||||
<p>The targets in the ${size} are ${effect}.</p>`
|
||||
)
|
||||
}
|
||||
|
||||
async createSecondaryEffects (maintId) {
|
||||
const docs = await super.createSecondaryEffects(maintId)
|
||||
if (this.data.distracted) {
|
||||
PowerEffect.getStatus('SWADE.Distr', 'Distracted', false).then(v => docs.push(v))
|
||||
PowerEffect.getStatus('SWADE.Distr', 'Distracted', false).then((v) =>
|
||||
docs.push(v)
|
||||
)
|
||||
}
|
||||
if (this.data.distracted) {
|
||||
PowerEffect.getStatus('SWADE.Vuln', 'Vulnerable', false).then(v => docs.push(v))
|
||||
PowerEffect.getStatus('SWADE.Vuln', 'Vulnerable', false).then((v) =>
|
||||
docs.push(v)
|
||||
)
|
||||
}
|
||||
if (this.data.mods.has('greater')) {
|
||||
PowerEffect.getStatus('SWADE.Shaken', 'Shaken', false).then(v => docs.push(v))
|
||||
PowerEffect.getStatus('SWADE.Shaken', 'Shaken', false).then((v) =>
|
||||
docs.push(v)
|
||||
)
|
||||
}
|
||||
return docs
|
||||
}
|
||||
}
|
||||
|
||||
class CurseEffect extends PowerEffect {
|
||||
get name () { return 'Curse' }
|
||||
get icon () { return 'icons/magic/control/voodoo-doll-pain-damage-purple.webp' }
|
||||
get duration () { return 500*24*60*6 }
|
||||
get isTargeted () { return true }
|
||||
get oneTarget () { return true }
|
||||
get isRaisable () { return false }
|
||||
get basePowerPoints () { return 5 }
|
||||
get name () {
|
||||
return 'Curse'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/control/voodoo-doll-pain-damage-purple.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 500 * 24 * 60 * 6
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get oneTarget () {
|
||||
return true
|
||||
}
|
||||
|
||||
get isRaisable () {
|
||||
return false
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({
|
||||
name: 'Turn to Stone', value: 5, id: 'turntostone', epic: true, effect: false
|
||||
name: 'Turn to Stone',
|
||||
value: 5,
|
||||
id: 'turntostone',
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get description () {
|
||||
let desc = super.description
|
||||
desc += `<p>The victim must defend with a Spirit roll opposed by the
|
||||
@ -664,21 +1137,67 @@ class CurseEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class DamageFieldEffect extends PowerEffect {
|
||||
get name () { return 'Damage Field' }
|
||||
get icon () { return 'icons/magic/defensive/shield-barrier-blades-teal.webp' }
|
||||
get duration () { return 5 }
|
||||
get basePowerPoints () { return 4 }
|
||||
get isTargeted () { return true }
|
||||
get oneTarget () { return true }
|
||||
get isRaisable () { return false }
|
||||
get name () {
|
||||
return 'Damage Field'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/defensive/shield-barrier-blades-teal.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 4
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get oneTarget () {
|
||||
return true
|
||||
}
|
||||
|
||||
get isRaisable () {
|
||||
return false
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({ name: 'Area of Effect', value: 2, id: 'aoe', epic: false, effect: false })
|
||||
mods.push({ name: 'Damage', value: 2, id: 'damage', epic: false, effect: false })
|
||||
mods.push({ name: 'Greater Damage Field', value: 4, id: 'greater', epic: true, effect: false })
|
||||
mods.push({ name: 'Mobile', value: 2, id: 'mobile', epic: false, effect: false })
|
||||
mods.push({
|
||||
name: 'Area of Effect',
|
||||
value: 2,
|
||||
id: 'aoe',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Damage',
|
||||
value: 2,
|
||||
id: 'damage',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Greater Damage Field',
|
||||
value: 4,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Mobile',
|
||||
value: 2,
|
||||
id: 'mobile',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get description () {
|
||||
let desc = super.description
|
||||
let area = 'all adjacent creatures'
|
||||
@ -700,6 +1219,7 @@ class DamageFieldEffect extends PowerEffect {
|
||||
desc += '</p>'
|
||||
return desc
|
||||
}
|
||||
|
||||
getPrimaryEffectChanges () {
|
||||
const base = 'flags.swade.auras.damagefield'
|
||||
const priority = 0
|
||||
@ -709,26 +1229,59 @@ class DamageFieldEffect extends PowerEffect {
|
||||
{ key: `${base}.walls`, value: true, priority, mode },
|
||||
{ key: `${base}.color`, value: '#ffcc00', priority, mode },
|
||||
{ key: `${base}.alpha`, value: 0.1, priority, mode },
|
||||
{ key: `${base}.radius`, value: (this.data.mods.has('aoe') ? 1.5 : 0.5), priority, mode },
|
||||
{ key: `${base}.visibleTo`, value: [-1, 0, 1], priority, mode },
|
||||
{
|
||||
key: `${base}.radius`,
|
||||
value: this.data.mods.has('aoe') ? 1.5 : 0.5,
|
||||
priority,
|
||||
mode
|
||||
},
|
||||
{ key: `${base}.visibleTo`, value: [-1, 0, 1], priority, mode }
|
||||
]
|
||||
return changes
|
||||
}
|
||||
}
|
||||
|
||||
class DarksightEffect extends PowerEffect {
|
||||
get name () { return 'Darksight' }
|
||||
get icon () { return 'icons/magic/perception/eye-ringed-glow-angry-small-teal.webp' }
|
||||
get duration () { return 600 }
|
||||
get basePowerPoints () { return 1 }
|
||||
get isTargeted () { return true }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 1 }
|
||||
get name () {
|
||||
return 'Darksight'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/perception/eye-ringed-glow-angry-small-teal.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 600
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({name: 'Greater Darksight', value: 2, id: 'greater', epic: true, effect: false})
|
||||
mods.push({
|
||||
name: 'Greater Darksight',
|
||||
value: 2,
|
||||
id: 'greater',
|
||||
epic: true,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
|
||||
get description () {
|
||||
let desc = super.description
|
||||
desc += '<p>'
|
||||
@ -736,13 +1289,16 @@ class DarksightEffect extends PowerEffect {
|
||||
desc += `Can see in all darkness, ignoring all illumination penalties and
|
||||
4 points of penalties from invisible creatures`
|
||||
} else if (this.data.raise) {
|
||||
desc += 'Can see in Pitch Darkness and ignore up to 6 points of illumination penalties'
|
||||
desc +=
|
||||
'Can see in Pitch Darkness and ignore up to 6 points of illumination penalties'
|
||||
} else {
|
||||
desc += 'Can see in darkness and ignore 4 points of illumination penalties'
|
||||
desc +=
|
||||
'Can see in darkness and ignore 4 points of illumination penalties'
|
||||
}
|
||||
desc += '</p>'
|
||||
return desc
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
if (this.data.mods.has('greater')) {
|
||||
return 'Greater Darksight'
|
||||
@ -755,78 +1311,163 @@ class DarksightEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class DeflectionEffect extends PowerEffect {
|
||||
get name () { return 'Deflection' }
|
||||
get icon () { return 'icons/magic/defensive/shield-barrier-deflect-teal.webp' }
|
||||
get duration () { return 5 }
|
||||
get basePowerPoints () { return 2 }
|
||||
get isTargeted () { return true }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 1 }
|
||||
get name () {
|
||||
return 'Deflection'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/magic/defensive/shield-barrier-deflect-teal.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 5
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get menuButtons () {
|
||||
const data = [
|
||||
{ label: 'Melee', value: 'melee' },
|
||||
{ label: 'Ranged', value: 'vulnerable' },
|
||||
{ label: 'Raise (both)', value: 'raise' },
|
||||
{ label: 'Cancel', value: 'cancel' },
|
||||
{ label: 'Cancel', value: 'cancel' }
|
||||
]
|
||||
return data
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.affects = this.data.button === 'raise' ? 'all' : this.data.button
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
return `Deflection (${this.data.affects})`
|
||||
}
|
||||
|
||||
get description () {
|
||||
return super.description + `<p>Attackers subtract -2 from ${this.data.affects}
|
||||
return (
|
||||
super.description +
|
||||
`<p>Attackers subtract -2 from ${this.data.affects}
|
||||
attacks when targeting this creature.</p>`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class DetectConcealArcanaEffect extends PowerEffect {
|
||||
get name () { return 'Detect/Conceal Arcana' }
|
||||
get icon () { return this.data.detect ?
|
||||
'icons/magic/perception/third-eye-blue-red.webp' :
|
||||
'icons/magic/perception/silhouette-stealth-shadow.webp' }
|
||||
get duration () { return this.data.detect ? 5 : 600 }
|
||||
get basePowerPoints () { return 2 }
|
||||
get isTargeted () { return true }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return (this.data?.aoe || 0) > 0 ? 0 : 1 }
|
||||
get name () {
|
||||
return 'Detect/Conceal Arcana'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return this.data.detect
|
||||
? 'icons/magic/perception/third-eye-blue-red.webp'
|
||||
: 'icons/magic/perception/silhouette-stealth-shadow.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return this.data.detect ? 5 : 600
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return (this.data?.aoe || 0) > 0 ? 0 : 1
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
const mods = super.modifiers
|
||||
mods.push({name: 'Alignment Sense (detect)', value: 1, id: 'alignment', epic: false, effect: false})
|
||||
mods.push({name: 'Identify (detect)', value: 1, id: 'identify', epic: false, effect: false})
|
||||
mods.push({name: 'Strong (conceal)', value: 1, id: 'strong', epic: false, effect: false})
|
||||
mods.push({
|
||||
name: 'Alignment Sense (detect)',
|
||||
value: 1,
|
||||
id: 'alignment',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Identify (detect)',
|
||||
value: 1,
|
||||
id: 'identify',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
mods.push({
|
||||
name: 'Strong (conceal)',
|
||||
value: 1,
|
||||
id: 'strong',
|
||||
epic: false,
|
||||
effect: false
|
||||
})
|
||||
return mods
|
||||
}
|
||||
get hasAoe () { return true }
|
||||
|
||||
get hasAoe () {
|
||||
return true
|
||||
}
|
||||
|
||||
get menuInputs () {
|
||||
const inputs = super.menuInputs
|
||||
inputs.push({ type: 'select', label: 'Area of Effect (conceal)',
|
||||
inputs.push({
|
||||
type: 'select',
|
||||
label: 'Area of Effect (conceal)',
|
||||
options: [
|
||||
{html: 'None', value: 0, selected: true},
|
||||
{html: 'Medium Blast Template (+1)', value: 1, selected: false},
|
||||
{html: 'Large Blast Template (+2)', value: 2, selected: false},
|
||||
]})
|
||||
inputs.push({type: 'info', label: 'Detect or Conceal?'})
|
||||
inputs.push({type: 'radio', label: 'Detect', options: ['isDetect', true]})
|
||||
inputs.push({type: 'radio', label: 'Conceal', options: ['isDetect', false]})
|
||||
{ html: 'None', value: 0, selected: true },
|
||||
{ html: 'Medium Blast Template (+1)', value: 1, selected: false },
|
||||
{ html: 'Large Blast Template (+2)', value: 2, selected: false }
|
||||
]
|
||||
})
|
||||
inputs.push({ type: 'info', label: 'Detect or Conceal?' })
|
||||
inputs.push({
|
||||
type: 'radio',
|
||||
label: 'Detect',
|
||||
options: ['isDetect', true]
|
||||
})
|
||||
inputs.push({
|
||||
type: 'radio',
|
||||
label: 'Conceal',
|
||||
options: ['isDetect', false]
|
||||
})
|
||||
return inputs
|
||||
}
|
||||
|
||||
async parseValues () {
|
||||
await super.parseValues()
|
||||
this.data.aoe = this.data.values.shift()
|
||||
this.data.values.shift()
|
||||
this.data.detect = this.data.values.shift()
|
||||
}
|
||||
|
||||
get powerPoints () {
|
||||
return super.powerPoints + this.data.aoe
|
||||
}
|
||||
|
||||
get effectName () {
|
||||
return `${this.data.detect ? 'Detect' : 'Conceal'} Arcana`
|
||||
}
|
||||
|
||||
get description () {
|
||||
let desc = super.description
|
||||
if (this.data.detect) {
|
||||
@ -837,7 +1478,7 @@ class DetectConcealArcanaEffect extends PowerEffect {
|
||||
desc += `Since this was major Detect Arcana, the type of enchantments
|
||||
is also known.`
|
||||
}
|
||||
desc+= `</p><p>If cast to learn more about a creature, the caster learns
|
||||
desc += `</p><p>If cast to learn more about a creature, the caster learns
|
||||
active powers and arcane abilities.`
|
||||
if (this.data.raise) {
|
||||
desc += `As major Detect in this mode, the caster also learns any
|
||||
@ -869,53 +1510,80 @@ class DetectConcealArcanaEffect extends PowerEffect {
|
||||
}
|
||||
|
||||
class DisguiseEffect extends PowerEffect {
|
||||
get name () { return 'Disguise' }
|
||||
get icon () { return 'icons/equipment/head/mask-carved-wood-white.webp' }
|
||||
get duration () { return 100 }
|
||||
get basePowerPoints () { return 2 }
|
||||
get isTargeted () { return true }
|
||||
get hasAdditionalRecipients () { return true }
|
||||
get additionalRecipientCost () { return 1 }
|
||||
get name () {
|
||||
return 'Disguise'
|
||||
}
|
||||
|
||||
get icon () {
|
||||
return 'icons/equipment/head/mask-carved-wood-white.webp'
|
||||
}
|
||||
|
||||
get duration () {
|
||||
return 100
|
||||
}
|
||||
|
||||
get basePowerPoints () {
|
||||
return 2
|
||||
}
|
||||
|
||||
get isTargeted () {
|
||||
return true
|
||||
}
|
||||
|
||||
get hasAdditionalRecipients () {
|
||||
return true
|
||||
}
|
||||
|
||||
get additionalRecipientCost () {
|
||||
return 1
|
||||
}
|
||||
|
||||
get modifiers () {
|
||||
return [
|
||||
...super.modifiers,
|
||||
{name: 'Size', value: 1, id: 'size', epic: false, effect: false}
|
||||
{ name: 'Size', value: 1, id: 'size', epic: false, effect: false }
|
||||
]
|
||||
}
|
||||
|
||||
get description () {
|
||||
let size = this.data.mods.has('size') ? 'of the same size as' : 'within two sizes of'
|
||||
return super.description + `
|
||||
const size = this.data.mods.has('size')
|
||||
? 'of the same size as'
|
||||
: 'within two sizes of'
|
||||
return (
|
||||
super.description +
|
||||
`
|
||||
<p>Assume the appearance of another person ${size} the recipient. Anyone
|
||||
who has cause to doubt the disguise may make a Notice roll at ${this.data.raise ? -4 : -4}
|
||||
as a free action to see through the disguise.</p>`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const PowerClasses = {
|
||||
"arcane-protection": ArcaneProtectionEffect,
|
||||
'arcane-protection': ArcaneProtectionEffect,
|
||||
banish: BanishEffect,
|
||||
barrier: BarrierEffect,
|
||||
"beast-friend": BeastFriendEffect,
|
||||
'beast-friend': BeastFriendEffect,
|
||||
blast: BlastEffect,
|
||||
blind: BlindEffect,
|
||||
bolt: BoltEffect,
|
||||
"boost-lower-trait": BoostLowerTraitEffect,
|
||||
"boost-trait": BoostLowerTraitEffect,
|
||||
'boost-lower-trait': BoostLowerTraitEffect,
|
||||
'boost-trait': BoostLowerTraitEffect,
|
||||
burrow: BurrowEffect,
|
||||
burst: BurstEffect,
|
||||
confusion: ConfusionEffect,
|
||||
curse: CurseEffect,
|
||||
"damage-field": DamageFieldEffect,
|
||||
'damage-field': DamageFieldEffect,
|
||||
darksight: DarksightEffect,
|
||||
deflection: DeflectionEffect,
|
||||
"detect-conceal-arcana": DetectConcealArcanaEffect,
|
||||
"disguise" : DisguiseEffect,
|
||||
"lower-trait": BoostLowerTraitEffect,
|
||||
'detect-conceal-arcana': DetectConcealArcanaEffect,
|
||||
disguise: DisguiseEffect,
|
||||
'lower-trait': BoostLowerTraitEffect
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
export async function powerEffectManagementHook(effect, data, userId) {
|
||||
export async function powerEffectManagementHook (effect, data, userId) {
|
||||
if (game.user.id !== userId) {
|
||||
return
|
||||
}
|
||||
@ -939,9 +1607,10 @@ export async function powerEffectManagementHook(effect, data, userId) {
|
||||
continue
|
||||
}
|
||||
const effects = target.actor.effects.filter(
|
||||
e => e.getFlag(moduleName, 'maintId') === maintId)
|
||||
for (const effect of effects) {
|
||||
mutation.embedded.ActiveEffect[effect.id] = warpgate.CONST.DELETE
|
||||
(e) => e.getFlag(moduleName, 'maintId') === maintId
|
||||
)
|
||||
for (const efct of effects) {
|
||||
mutation.embedded.ActiveEffect[efct.id] = warpgate.CONST.DELETE
|
||||
}
|
||||
mutateOptions.description = `${effect.parent.name} is no longer ${effect.name} on ${target.name}`
|
||||
await warpgate.mutate(target.document, mutation, {}, mutateOptions)
|
||||
@ -966,4 +1635,3 @@ export async function powers (options = {}) {
|
||||
}
|
||||
ui.notifications.error(`No power effect found for ${name}`)
|
||||
}
|
||||
|
||||
|
||||
@ -1,15 +1,8 @@
|
||||
import { log, module } from './globals.js'
|
||||
import { log } from './globals.js'
|
||||
|
||||
export async function preTraitRollModifiers (actor, trait, roll, modifiers, options) {
|
||||
const targets = Array.from(game.user.targets)
|
||||
const token = game.canvas.tokens.controlled.length > 0 ? game.canvas.tokens.controlled[0] : null
|
||||
// log('ACTOR', actor)
|
||||
// log('TOKEN', token)
|
||||
// log('TRAIT', trait)
|
||||
// log('ROLL', roll)
|
||||
// log('MODIFIERS', modifiers)
|
||||
// log('OPTIONS', options)
|
||||
// log('TARGET', targets)
|
||||
if (targets.some(target => target.actor.system.status.isVulnerable)) {
|
||||
modifiers.push({ label: 'Target is Vulnerable', value: '+2', ignore: false })
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user