diff --git a/package.json b/package.json index c529d64a9..4213ffe87 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "devDependencies": { - "@babel/preset-env": "^7.23.3", + "@babel/preset-env": "^7.23.5", "@babel/preset-typescript": "^7.23.3", - "@babylonjs/core": "^6.29.1", - "@babylonjs/gui": "^6.29.1", - "@babylonjs/havok": "^1.2.1", - "@babylonjs/loaders": "^6.29.1", + "@babylonjs/core": "^6.32.0", + "@babylonjs/gui": "^6.32.0", + "@babylonjs/havok": "^1.3.0", + "@babylonjs/loaders": "^6.32.0", "@jest/types": "^29.6.3", - "@types/jest": "^29.5.8", + "@types/jest": "^29.5.10", "@types/seedrandom": "^3.0.8", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", @@ -15,7 +15,7 @@ "babel": "^6.23.0", "babel-jest": "^29.7.0", "css-loader": "^6.8.1", - "eslint": "^8.53.0", + "eslint": "^8.54.0", "eslint-plugin-import": "^2.29.0", "extended-random": "^1.2.2", "fast-simplex-noise": "^4.0.0", @@ -27,7 +27,7 @@ "jest": "^29.7.0", "jest-transform-stub": "^2.0.0", "mini-css-extract-plugin": "^2.7.6", - "ml-matrix": "^6.10.8", + "ml-matrix": "^6.11.0", "prettier": "^2.8.8", "raw-loader": "^4.0.2", "sass": "^1.69.5", @@ -36,8 +36,9 @@ "style-loader": "^3.3.3", "terrain-generation": "^1.7.12", "ts-jest": "^29.1.1", - "ts-loader": "^9.5.0", + "ts-loader": "^9.5.1", "ts-node": "^10.9.1", + "ts-shader-loader": "^2.0.2", "typedoc": "^0.24.8", "typescript": "^5.1.6", "typescript-plugin-css-modules": "^5.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03d0eafeb..8dd7f4346 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,38 +6,38 @@ settings: devDependencies: '@babel/preset-env': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.3) + specifier: ^7.23.5 + version: 7.23.5(@babel/core@7.23.5) '@babel/preset-typescript': specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.3) + version: 7.23.3(@babel/core@7.23.5) '@babylonjs/core': - specifier: ^6.29.1 - version: 6.29.1 + specifier: ^6.32.0 + version: 6.32.0 '@babylonjs/gui': - specifier: ^6.29.1 - version: 6.29.1(@babylonjs/core@6.29.1) + specifier: ^6.32.0 + version: 6.32.0(@babylonjs/core@6.32.0) '@babylonjs/havok': - specifier: ^1.2.1 - version: 1.2.1 + specifier: ^1.3.0 + version: 1.3.0 '@babylonjs/loaders': - specifier: ^6.29.1 - version: 6.29.1(@babylonjs/core@6.29.1)(babylonjs-gltf2interface@6.30.0) + specifier: ^6.32.0 + version: 6.32.0(@babylonjs/core@6.32.0)(babylonjs-gltf2interface@6.32.0) '@jest/types': specifier: ^29.6.3 version: 29.6.3 '@types/jest': - specifier: ^29.5.8 - version: 29.5.8 + specifier: ^29.5.10 + version: 29.5.10 '@types/seedrandom': specifier: ^3.0.8 version: 3.0.8 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@5.1.6) + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.1.6) '@typescript-eslint/parser': specifier: ^5.62.0 - version: 5.62.0(eslint@8.53.0)(typescript@5.1.6) + version: 5.62.0(eslint@8.54.0)(typescript@5.1.6) '@webpack-cli/generators': specifier: ^3.0.7 version: 3.0.7(prettier@2.8.8)(webpack-cli@5.1.4)(webpack@5.89.0) @@ -46,16 +46,16 @@ devDependencies: version: 6.23.0 babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.23.3) + version: 29.7.0(@babel/core@7.23.5) css-loader: specifier: ^6.8.1 version: 6.8.1(webpack@5.89.0) eslint: - specifier: ^8.53.0 - version: 8.53.0 + specifier: ^8.54.0 + version: 8.54.0 eslint-plugin-import: specifier: ^2.29.0 - version: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0) + version: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) extended-random: specifier: ^1.2.2 version: 1.2.2 @@ -79,7 +79,7 @@ devDependencies: version: 14.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) jest-transform-stub: specifier: ^2.0.0 version: 2.0.0 @@ -87,8 +87,8 @@ devDependencies: specifier: ^2.7.6 version: 2.7.6(webpack@5.89.0) ml-matrix: - specifier: ^6.10.8 - version: 6.10.8 + specifier: ^6.11.0 + version: 6.11.0 prettier: specifier: ^2.8.8 version: 2.8.8 @@ -112,13 +112,16 @@ devDependencies: version: 1.7.12 ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.23.3)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.1.6) + version: 29.1.1(@babel/core@7.23.5)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.1.6) ts-loader: - specifier: ^9.5.0 - version: 9.5.0(typescript@5.1.6)(webpack@5.89.0) + specifier: ^9.5.1 + version: 9.5.1(typescript@5.1.6)(webpack@5.89.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.9.2)(typescript@5.1.6) + version: 10.9.1(@types/node@20.10.1)(typescript@5.1.6) + ts-shader-loader: + specifier: ^2.0.2 + version: 2.0.2 typedoc: specifier: ^0.24.8 version: 0.24.8(typescript@5.1.6) @@ -157,33 +160,33 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.20 + '@babel/highlight': 7.23.4 chalk: 2.4.2 dev: true - /@babel/compat-data@7.23.3: - resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.3: - resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -193,11 +196,11 @@ packages: - supports-color dev: true - /@babel/generator@7.23.3: - resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 @@ -207,63 +210,63 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.3 - '@babel/helper-validator-option': 7.22.15 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.3): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.3): + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 @@ -283,37 +286,37 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -325,7 +328,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -333,25 +336,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.3): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.3): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -361,25 +364,25 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true @@ -388,8 +391,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true @@ -399,22 +402,22 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -422,921 +425,921 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.3: - resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.3): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.3): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.3): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.3): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.3): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.3): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.3): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.3): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.3): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.3): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.3): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.3): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.3): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.3): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.3): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.3): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==} + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-classes@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==} + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.3): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-numeric-separator@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.3 - '@babel/core': 7.23.3 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==} + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-chaining@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw==} + /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.3): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.3(@babel/core@7.23.3): - resolution: {integrity: sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==} + /@babel/preset-env@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.3 - '@babel/core': 7.23.3 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.3) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-async-generator-functions': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-block-scoping': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-class-static-block': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-dynamic-import': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-export-namespace-from': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-json-strings': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-logical-assignment-operators': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.3) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-numeric-separator': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-object-rest-spread': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-optional-catch-binding': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-private-property-in-object': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.3) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.3) - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.3) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) - core-js-compat: 3.33.2 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.3): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.3): + /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-transform-typescript': 7.23.3(@babel/core@7.23.3) + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 @@ -1346,64 +1349,64 @@ packages: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 dev: true - /@babel/traverse@7.23.3: - resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.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.22.6 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.3: - resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true - /@babylonjs/core@6.29.1: - resolution: {integrity: sha512-12BbyRVLfG6aJRwZn8bJF1zU0eljpTOvLBpFksjvhnn8+sFUi5ONMUPbczb9o4UwlJYDIZYa7ggCElP4iWKicw==} + /@babylonjs/core@6.32.0: + resolution: {integrity: sha512-2SK6jjMhsPse+aWAgzuNfjVCFEr9ysfVpkgjClW9dKT0WUwS/c7PYmYh8Mcp/A+L7HNIndkLJE2UAlF6PP01fg==} dev: true - /@babylonjs/gui@6.29.1(@babylonjs/core@6.29.1): - resolution: {integrity: sha512-mWdmIkjHAPmcW774rPOhjbX7AN+KoUXbCkGBIzj1erbthQTGLJzclCwqImi9lFTvcbT/HrjSZSl4F+wfCn1L6w==} + /@babylonjs/gui@6.32.0(@babylonjs/core@6.32.0): + resolution: {integrity: sha512-N6UVbvEMHT5wrcA81Xqk3e3kuo+wnjIUOWSH6AqUduGYNvVCkmbxlJHOP9D5tuQBICvbWUINDPaSQdoPZRegmQ==} peerDependencies: '@babylonjs/core': ^6.0.0 dependencies: - '@babylonjs/core': 6.29.1 + '@babylonjs/core': 6.32.0 dev: true - /@babylonjs/havok@1.2.1: - resolution: {integrity: sha512-oWMGjy7h163xoYw+xh2vM0vOBQuymulqpWUDth14/cKwqF6G5Rj09hzT7ocFR6mMMPWx5N95yBwH4sSzp8+dSQ==} + /@babylonjs/havok@1.3.0: + resolution: {integrity: sha512-mnSe/0A+JJ1vVjDOd1MkysLOW6WB96n3+ALiGTTXzhDLRfMEjG7P8+qC9SL+TSWj2HgaiDzpwsMDZjqLBDIdWw==} dependencies: '@types/emscripten': 1.39.10 dev: true - /@babylonjs/loaders@6.29.1(@babylonjs/core@6.29.1)(babylonjs-gltf2interface@6.30.0): - resolution: {integrity: sha512-xepOpUfiydWOumsi+p9vGEK17n7AHTzFeHo2GvLe0pIoEYTMH3wQ5V4pOoB47Vb6kAkS2UX646PAET+HkOry1A==} + /@babylonjs/loaders@6.32.0(@babylonjs/core@6.32.0)(babylonjs-gltf2interface@6.32.0): + resolution: {integrity: sha512-xxV/ftyji1qgzZgkwUEJFo2d3SYzKukMYWUKVMLJk64yf6kg65PtStyTNZp/ijAR7mitTaPD0UvzhDay4SQ4wA==} peerDependencies: '@babylonjs/core': ^6.0.0 babylonjs-gltf2interface: ^6.0.0 dependencies: - '@babylonjs/core': 6.29.1 - babylonjs-gltf2interface: 6.30.0 + '@babylonjs/core': 6.32.0 + babylonjs-gltf2interface: 6.32.0 dev: true /@bcoe/v8-coverage@0.2.3: @@ -1429,13 +1432,13 @@ packages: engines: {node: '>=10.0.0'} dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.53.0 + eslint: 8.54.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1452,7 +1455,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.23.0 - ignore: 5.2.4 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1461,8 +1464,8 @@ packages: - supports-color dev: true - /@eslint/js@8.53.0: - resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} + /@eslint/js@8.54.0: + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1527,7 +1530,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1548,14 +1551,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.9.0)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1583,7 +1586,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 jest-mock: 29.7.0 dev: true @@ -1610,7 +1613,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.9.0 + '@types/node': 20.10.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1643,7 +1646,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1660,7 +1663,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.3 + v8-to-istanbul: 9.2.0 transitivePeerDependencies: - supports-color dev: true @@ -1705,7 +1708,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 babel-plugin-istanbul: 6.1.1 @@ -1731,8 +1734,8 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.9.0 - '@types/yargs': 17.0.31 + '@types/node': 20.10.1 + '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2219,11 +2222,11 @@ packages: minimatch: 9.0.3 dev: true - /@types/babel__core@7.20.4: - resolution: {integrity: sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==} + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 @@ -2232,46 +2235,46 @@ packages: /@types/babel__generator@7.6.7: resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 dev: true /@types/babel__traverse@7.20.4: resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@babel/types': 7.23.3 + '@babel/types': 7.23.5 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true - /@types/connect-history-api-fallback@1.5.3: - resolution: {integrity: sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==} + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.17.41 - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/emscripten@1.39.10: @@ -2281,12 +2284,12 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.44.7 + '@types/eslint': 8.44.8 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.44.7: - resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==} + /@types/eslint@8.44.8: + resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2303,7 +2306,7 @@ packages: /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -2321,7 +2324,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/html-minifier-terser@6.1.0: @@ -2335,7 +2338,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2354,8 +2357,8 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.8: - resolution: {integrity: sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==} + /@types/jest@29.5.10: + resolution: {integrity: sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 @@ -2381,24 +2384,18 @@ packages: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true - /@types/node-forge@1.3.9: - resolution: {integrity: sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==} + /@types/node-forge@1.3.10: + resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/node@15.14.9: resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} dev: true - /@types/node@20.9.0: - resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.9.2: - resolution: {integrity: sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==} + /@types/node@20.10.1: + resolution: {integrity: sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==} dependencies: undici-types: 5.26.5 dev: true @@ -2435,15 +2432,15 @@ packages: resolution: {integrity: sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ==} dev: true - /@types/semver@7.5.5: - resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==} + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/serve-index@1.9.4: @@ -2457,43 +2454,43 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true - /@types/vinyl@2.0.10: - resolution: {integrity: sha512-DqN5BjCrmjAtZ1apqzcq2vk2PSW0m1nFfjIafBFkAyddmHxuw3ZAK3omLiSdpuu81+8h07i6U4DtaE38Xsf2xQ==} + /@types/vinyl@2.0.11: + resolution: {integrity: sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==} dependencies: '@types/expect': 1.20.4 '@types/node': 15.14.9 dev: true - /@types/ws@8.5.9: - resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 dev: true /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@types/yargs@17.0.31: - resolution: {integrity: sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==} + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0)(typescript@5.1.6): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.1.6): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2505,14 +2502,14 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.53.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.1.6) debug: 4.3.4 - eslint: 8.53.0 + eslint: 8.54.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare-lite: 1.4.0 semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) @@ -2521,7 +2518,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.53.0)(typescript@5.1.6): + /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@5.1.6): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2535,7 +2532,7 @@ packages: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) debug: 4.3.4 - eslint: 8.53.0 + eslint: 8.54.0 typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -2549,7 +2546,7 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.53.0)(typescript@5.1.6): + /@typescript-eslint/type-utils@5.62.0(eslint@8.54.0)(typescript@5.1.6): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2560,9 +2557,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - '@typescript-eslint/utils': 5.62.0(eslint@8.53.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.1.6) debug: 4.3.4 - eslint: 8.53.0 + eslint: 8.54.0 tsutils: 3.21.0(typescript@5.1.6) typescript: 5.1.6 transitivePeerDependencies: @@ -2595,19 +2592,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.53.0)(typescript@5.1.6): + /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.1.6): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.5 + '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - eslint: 8.53.0 + eslint: 8.54.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -3115,17 +3112,17 @@ packages: engines: {node: '>= 0.4'} dev: true - /babel-jest@29.7.0(@babel/core@7.23.3): + /babel-jest@29.7.0(@babel/core@7.23.5): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.4 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.3) + babel-preset-jest: 29.6.3(@babel/core@7.23.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3151,76 +3148,76 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.3 - '@types/babel__core': 7.20.4 + '@babel/types': 7.23.5 + '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.3): + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.23.3 - '@babel/core': 7.23.3 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.3): + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) - core-js-compat: 3.33.2 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + core-js-compat: 3.33.3 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.3): + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.3): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.3): + '@babel/core': 7.23.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.5): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) dev: true /babel@6.23.0: @@ -3229,8 +3226,8 @@ packages: hasBin: true dev: true - /babylonjs-gltf2interface@6.30.0: - resolution: {integrity: sha512-RTiXXBCA2owqX5bS2cbnSRewnunt+mU9ebbXni5KmX+Wzo4nt9vruouRgReni3LPVbRDQ9nMbqduN+RXcJEEfA==} + /babylonjs-gltf2interface@6.32.0: + resolution: {integrity: sha512-iIrabQ28fTpnxBrj1XM6qFSKTsrMiewo6qZ7qin9n6oDivX5cOnLI+dKGPbCwLa3bdixkOQNxnix2JjACJMI7A==} dev: true /balanced-match@1.0.2: @@ -3348,8 +3345,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001561 - electron-to-chromium: 1.4.581 + caniuse-lite: 1.0.30001565 + electron-to-chromium: 1.4.597 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true @@ -3505,8 +3502,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001561: - resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} + /caniuse-lite@1.0.30001565: + resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} dev: true /chalk@2.4.2: @@ -3569,8 +3566,8 @@ packages: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true - /clean-css@5.3.2: - resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 @@ -3588,8 +3585,8 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} dev: true @@ -3794,8 +3791,8 @@ packages: is-what: 3.14.1 dev: true - /core-js-compat@3.33.2: - resolution: {integrity: sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==} + /core-js-compat@3.33.3: + resolution: {integrity: sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==} dependencies: browserslist: 4.22.1 dev: true @@ -3809,7 +3806,7 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /create-jest@29.7.0(@types/node@20.9.2)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.10.1)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3818,7 +3815,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -4133,8 +4130,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.581: - resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==} + /electron-to-chromium@1.4.597: + resolution: {integrity: sha512-0XOQNqHhg2YgRVRUrS4M4vWjFCFIP2ETXcXe/0KIQBjXE9Cpy+tgzzYfuq6HGai3hWq0YywtG+5XK8fyG08EjA==} dev: true /emittery@0.13.1: @@ -4326,7 +4323,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4347,15 +4344,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.53.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) debug: 3.2.7 - eslint: 8.53.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.53.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -4365,16 +4362,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.53.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.53.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.53.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4411,15 +4408,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.53.0: - resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} + /eslint@8.54.0: + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.53.0 + '@eslint/js': 8.54.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -4441,7 +4438,7 @@ packages: glob-parent: 6.0.2 globals: 13.23.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4984,7 +4981,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.2.4 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -5230,7 +5227,7 @@ packages: hasBin: true dependencies: camel-case: 4.1.2 - clean-css: 5.3.2 + clean-css: 5.3.3 commander: 8.3.0 he: 1.2.0 param-case: 3.0.4 @@ -5244,7 +5241,7 @@ packages: hasBin: true dependencies: camel-case: 4.1.2 - clean-css: 5.3.2 + clean-css: 5.3.3 commander: 10.0.1 entities: 4.5.0 param-case: 3.0.4 @@ -5438,15 +5435,15 @@ packages: minimatch: 3.1.2 dev: true - /ignore-walk@6.0.3: - resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} + /ignore-walk@6.0.4: + resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: minimatch: 9.0.3 dev: true - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -5811,8 +5808,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.3 - '@babel/parser': 7.23.3 + '@babel/core': 7.23.5 + '@babel/parser': 7.23.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5824,8 +5821,8 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.3 - '@babel/parser': 7.23.3 + '@babel/core': 7.23.5 + '@babel/parser': 7.23.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.5.4 @@ -5898,7 +5895,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5919,7 +5916,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.9.2)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.10.1)(ts-node@10.9.1): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5933,10 +5930,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5947,7 +5944,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.9.0)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.10.1)(ts-node@10.9.1): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5959,11 +5956,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 - babel-jest: 29.7.0(@babel/core@7.23.3) + '@types/node': 20.10.1 + babel-jest: 29.7.0(@babel/core@7.23.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -5982,48 +5979,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.9.2)(typescript@5.1.6) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-config@29.7.0(@types/node@20.9.2)(ts-node@10.9.1): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - dependencies: - '@babel/core': 7.23.3 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.9.2 - babel-jest: 29.7.0(@babel/core@7.23.3) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.9.2)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@20.10.1)(typescript@5.1.6) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6064,7 +6020,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6080,7 +6036,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.9.0 + '@types/node': 20.10.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6115,7 +6071,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -6131,7 +6087,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 jest-util: 29.7.0 dev: true @@ -6186,7 +6142,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6217,7 +6173,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6240,15 +6196,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.3 - '@babel/generator': 7.23.3 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3) - '@babel/types': 7.23.3 + '@babel/core': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.3) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6273,7 +6229,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6298,7 +6254,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.9.0 + '@types/node': 20.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6310,7 +6266,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -6319,13 +6275,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.9.0 + '@types/node': 20.10.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.9.2)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.10.1)(ts-node@10.9.1): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6338,7 +6294,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6384,8 +6340,8 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + /json-parse-even-better-errors@3.0.1: + resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true @@ -6533,6 +6489,11 @@ packages: json5: 2.2.3 dev: true + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -6581,11 +6542,9 @@ packages: tslib: 2.6.2 dev: true - /lru-cache@10.0.2: - resolution: {integrity: sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} - dependencies: - semver: 7.5.4 dev: true /lru-cache@5.1.1: @@ -6754,7 +6713,7 @@ packages: engines: {node: '>=12'} dependencies: '@types/node': 15.14.9 - '@types/vinyl': 2.0.10 + '@types/vinyl': 2.0.11 vinyl: 2.2.1 vinyl-file: 3.0.0 dev: true @@ -6995,8 +6954,8 @@ packages: ml-array-min: 1.2.3 dev: true - /ml-matrix@6.10.8: - resolution: {integrity: sha512-AOWniClvQMbGx2V0mqzOScINLe+PjAjpjTN3zYRG7gV5Zp29fu9b2E0PfTdnupN03USOQMvkjT9/8yB4hEEahg==} + /ml-matrix@6.11.0: + resolution: {integrity: sha512-7jr9NmFRkaUxbKslfRu3aZOjJd2LkSitCGv+QH9PF0eJoEG7jIpjXra1Vw8/kgao8+kHCSsJONG6vfWmXQ+/Eg==} dependencies: is-any-array: 2.0.1 ml-array-rescale: 1.3.7 @@ -7266,7 +7225,7 @@ packages: resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - ignore-walk: 6.0.3 + ignore-walk: 6.0.4 dev: true /npm-pick-manifest@6.1.1: @@ -7469,7 +7428,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -7644,7 +7603,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7696,7 +7655,7 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.2 + lru-cache: 10.1.0 minipass: 7.0.4 dev: true @@ -7765,7 +7724,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.31 - ts-node: 10.9.1(@types/node@20.9.2)(typescript@5.1.6) + ts-node: 10.9.1(@types/node@20.10.1)(typescript@5.1.6) yaml: 1.10.2 dev: true @@ -8017,7 +7976,7 @@ packages: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - json-parse-even-better-errors: 3.0.0 + json-parse-even-better-errors: 3.0.1 npm-normalize-package-bin: 3.0.1 dev: true @@ -8026,7 +7985,7 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: glob: 10.3.10 - json-parse-even-better-errors: 3.0.0 + json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 dev: true @@ -8140,7 +8099,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.23.5 dev: true /regexp.prototype.flags@1.5.1: @@ -8404,7 +8363,7 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} dependencies: - '@types/node-forge': 1.3.9 + '@types/node-forge': 1.3.10 node-forge: 1.3.1 dev: true @@ -9066,7 +9025,7 @@ packages: resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} dev: true - /ts-jest@29.1.1(@babel/core@7.23.3)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.1.6): + /ts-jest@29.1.1(@babel/core@7.23.5)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.1.6): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -9087,12 +9046,12 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.3 + '@babel/core': 7.23.5 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.23.3) + babel-jest: 29.7.0(@babel/core@7.23.5) bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.9.2)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.10.1)(ts-node@10.9.1) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -9102,8 +9061,8 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-loader@9.5.0(typescript@5.1.6)(webpack@5.89.0): - resolution: {integrity: sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==} + /ts-loader@9.5.1(typescript@5.1.6)(webpack@5.89.0): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' @@ -9118,7 +9077,7 @@ packages: webpack: 5.89.0(webpack-cli@5.1.4) dev: true - /ts-node@10.9.1(@types/node@20.9.2)(typescript@5.1.6): + /ts-node@10.9.1(@types/node@20.10.1)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -9137,7 +9096,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.9.2 + '@types/node': 20.10.1 acorn: 8.11.2 acorn-walk: 8.3.0 arg: 4.1.3 @@ -9149,6 +9108,12 @@ packages: yn: 3.1.1 dev: true + /ts-shader-loader@2.0.2: + resolution: {integrity: sha512-PMdxdDQoS9D3O+UZ4y8Ul4AwXjTdvBiZHOLRnjkUbgNJyA1p0c4U2YXggqIGw7apCyoBP80QJz2Y+YcZMFHoVg==} + dependencies: + loader-utils: 3.2.1 + dev: true + /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: @@ -9461,8 +9426,8 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.1.3: - resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.20 @@ -9623,12 +9588,12 @@ packages: optional: true dependencies: '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.3 + '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.21 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.5 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.9 + '@types/ws': 8.5.10 ansi-html-community: 0.0.8 bonjour-service: 1.1.1 chokidar: 3.5.3 diff --git a/src/shaders/atmosphericScatteringFragment.glsl b/src/shaders/atmosphericScatteringFragment.glsl index ec985ca00..09abb470a 100644 --- a/src/shaders/atmosphericScatteringFragment.glsl +++ b/src/shaders/atmosphericScatteringFragment.glsl @@ -1,5 +1,7 @@ precision highp float; +/* disable_uniformity_analysis */ + #define PI 3.1415926535897932 #define POINTS_FROM_CAMERA 12// number sample points along camera ray #define OPTICAL_DEPTH_POINTS 12// number sample points along light ray @@ -13,28 +15,29 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform sampler2D atmosphereLUT; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/stars.glsl"; + +#include "./utils/camera.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; -#pragma glslify: atmosphere = require(./utils/atmosphere.glsl) +#include "./utils/atmosphere.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; // based on https://www.youtube.com/watch?v=DxfEbulyFcY by Sebastian Lague vec2 densityAtPoint(vec3 samplePoint) { - float heightAboveSurface = length(samplePoint - object.position) - object.radius; - float height01 = heightAboveSurface / (atmosphere.radius - object.radius);// normalized height between 0 and 1 + float heightAboveSurface = length(samplePoint - object_position) - object_radius; + float height01 = heightAboveSurface / (atmosphere_radius - object_radius);// normalized height between 0 and 1 vec2 localDensity = vec2( - atmosphere.densityModifier * exp(-height01 * atmosphere.falloff), - atmosphere.densityModifier * exp(-height01 * atmosphere.falloff * 0.5) + atmosphere_densityModifier * exp(-height01 * atmosphere_falloff), + atmosphere_densityModifier * exp(-height01 * atmosphere_falloff * 0.5) ); localDensity *= (1.0 - height01); @@ -63,14 +66,14 @@ vec3 calculateLight(vec3 rayOrigin, vec3 starPosition, vec3 rayDir, float rayLen vec3 samplePoint = rayOrigin;// first sampling point coming from camera ray - vec3 wavelength = vec3(atmosphere.redWaveLength, atmosphere.greenWaveLength, atmosphere.blueWaveLength);// the wavelength that will be scattered (rgb so we get everything) + vec3 wavelength = vec3(atmosphere_redWaveLength, atmosphere_greenWaveLength, atmosphere_blueWaveLength);// the wavelength that will be scattered (rgb so we get everything) // Scattering Coeffs - vec3 rayleighCoeffs = pow(1063.0 / wavelength.xyz, vec3(4.0)) * atmosphere.rayleighStrength;// the scattering is inversely proportional to the fourth power of the wave length - rayleighCoeffs /= object.radius; + vec3 rayleighCoeffs = pow(1063.0 / wavelength.xyz, vec3(4.0)) * atmosphere_rayleighStrength;// the scattering is inversely proportional to the fourth power of the wave length + rayleighCoeffs /= object_radius; - vec3 mieCoeffs = vec3(2.5e-2) * atmosphere.mieStrength; - mieCoeffs /= object.radius; + vec3 mieCoeffs = vec3(2.5e-2) * atmosphere_mieStrength; + mieCoeffs /= object_radius; float stepSize = rayLength / float(POINTS_FROM_CAMERA - 1);// the ray length between sample points @@ -79,17 +82,17 @@ vec3 calculateLight(vec3 rayOrigin, vec3 starPosition, vec3 rayDir, float rayLen vec3 inScatteredRayleigh = vec3(0.0); vec3 inScatteredMie = vec3(0.0); - vec3 starDir = normalize(starPosition - object.position); + vec3 starDir = normalize(starPosition - object_position); for (int i = 0; i < POINTS_FROM_CAMERA; i++, samplePoint += rayDir * stepSize) { float _, t1; - rayIntersectSphere(samplePoint, starDir, object.position, atmosphere.radius, _, t1); + rayIntersectSphere(samplePoint, starDir, object_position, atmosphere_radius, _, t1); float sunRayLengthInAtm = t1; - /*float height = length(samplePoint - object.position); - float heightAboveSurface = height - object.radius; - float height01 = heightAboveSurface / (atmosphere.radius - object.radius);// normalized height between 0 and 1 - vec3 planetNormal = normalize(samplePoint - object.position); + /*float height = length(samplePoint - object_position); + float heightAboveSurface = height - object_radius; + float height01 = heightAboveSurface / (atmosphere_radius - object_radius);// normalized height between 0 and 1 + vec3 planetNormal = normalize(samplePoint - object_position); float costheta = -dot(starDir, planetNormal) * 0.99; float lutx = (costheta + 1.0) / 2.0; vec2 sunRayOpticalDepth = 1e5 * ((1.0 / (texture2D(atmosphereLUT, vec2(lutx, height01)).rg)) - 1.0);*/ @@ -116,7 +119,7 @@ vec3 calculateLight(vec3 rayOrigin, vec3 starPosition, vec3 rayDir, float rayLen float costheta = dot(rayDir, starDir); float costheta2 = pow(costheta, 2.0); - float g = atmosphere.mieHaloRadius;//0.7 + float g = atmosphere_mieHaloRadius;//0.7 float g2 = g * g; float phaseMie = ((3.0 * (1.0 - g2)) / (2.0 * (2.0 + g2))) * ((1.0 + costheta2) / pow(1.0 + g2 - 2.0 * g * costheta, 1.5)); @@ -128,12 +131,12 @@ vec3 calculateLight(vec3 rayOrigin, vec3 starPosition, vec3 rayDir, float rayLen inScatteredRayleigh *= phaseRayleigh;// apply rayleigh pahse inScatteredMie *= phaseMie; - return (inScatteredRayleigh + inScatteredMie) * atmosphere.sunIntensity; + return (inScatteredRayleigh + inScatteredMie) * atmosphere_sunIntensity; } vec4 scatter(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDistance) { float impactPoint, escapePoint; - if (!(rayIntersectSphere(rayOrigin, rayDir, object.position, atmosphere.radius, impactPoint, escapePoint))) { + if (!(rayIntersectSphere(rayOrigin, rayDir, object_position, atmosphere_radius, impactPoint, escapePoint))) { return originalColor;// if not intersecting with atmosphere, return original color } @@ -146,7 +149,7 @@ vec4 scatter(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDista vec3 light = vec3(0.0); for (int i = 0; i < nbStars; i++) { - light = max(light, calculateLight(firstPointInAtmosphere, stars[i].position, rayDir, distanceThroughAtmosphere, originalColor.rgb));// calculate scattering + light = max(light, calculateLight(firstPointInAtmosphere, star_positions[i], rayDir, distanceThroughAtmosphere, originalColor.rgb));// calculate scattering } float lightAlpha = max(light.r, max(light.g, light.b)); @@ -159,20 +162,20 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); // Cohabitation avec le shader d'océan (un jour je merge) float waterImpact, waterEscape; - if (rayIntersectSphere(camera.position, rayDir, object.position, object.radius, waterImpact, waterEscape)) { + if (rayIntersectSphere(camera_position, rayDir, object_position, object_radius, waterImpact, waterEscape)) { maximumDistance = min(maximumDistance, waterImpact); } - vec4 finalColor = scatter(screenColor, camera.position, rayDir, maximumDistance);// the color to be displayed on the screen + vec4 finalColor = scatter(screenColor, camera_position, rayDir, maximumDistance);// the color to be displayed on the screen gl_FragColor = finalColor;// displaying the final color } diff --git a/src/shaders/blackhole.glsl b/src/shaders/blackhole.glsl index ef19d0b4a..292d4e8cf 100644 --- a/src/shaders/blackhole.glsl +++ b/src/shaders/blackhole.glsl @@ -1,5 +1,7 @@ precision highp float; +/* disable_uniformity_analysis */ + // based on https://www.shadertoy.com/view/tsBXW3 #define DISK_STEPS 12.0//disk texture layers @@ -8,7 +10,7 @@ varying vec2 vUV; uniform float time; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; uniform float accretionDiskRadius; uniform float rotationPeriod; @@ -24,17 +26,17 @@ uniform sampler2D starfieldTexture; uniform mat4 starfieldRotation; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: uvFromWorld = require(./utils/uvFromWorld.glsl, projection=camera.projection, view=camera.view) +#include "./utils/uvFromWorld.glsl"; -#pragma glslify: rotateAround = require(./utils/rotateAround.glsl) +#include "./utils/rotateAround.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; vec3 projectOnPlane(vec3 vector, vec3 planeNormal) { return vector - dot(vector, planeNormal) * planeNormal; @@ -66,10 +68,10 @@ vec4 raymarchDisk(vec3 rayDir, vec3 initialPosition) { vec3 samplePoint = initialPosition; float distanceToCenter = length(samplePoint);// distance to the center of the disk - float relativeDistance = distanceToCenter / object.radius; - float relativeDiskRadius = accretionDiskRadius / object.radius; + float relativeDistance = distanceToCenter / object_radius; + float relativeDiskRadius = accretionDiskRadius / object_radius; - vec3 diskNormal = object.rotationAxis; + vec3 diskNormal = object_rotationAxis; vec3 projectedRayDir = projectOnPlane(rayDir, diskNormal); vec3 projectedInitialPosition = projectOnPlane(initialPosition, diskNormal); @@ -104,7 +106,7 @@ vec4 raymarchDisk(vec3 rayDir, vec3 initialPosition) { float intensity = 1.0 - (i / DISK_STEPS); distanceToCenter = length(samplePoint); - relativeDistance = distanceToCenter / object.radius; + relativeDistance = distanceToCenter / object_radius; float diskMask = 1.0; diskMask *= clamp(relativeDistance - 1.2, 0.0, 1.0);// The 1.2 is only for aesthetics @@ -134,8 +136,8 @@ vec4 raymarchDisk(vec3 rayDir, vec3 initialPosition) { * The bending is tweaked to reach 0 when far enough so that we can skip some calculations */ vec3 bendRay(vec3 rayDir, vec3 blackholeDir, float distanceToCenter2, float maxBendDistance, float stepSize) { - float bendForce = object.radius / distanceToCenter2; //bending force - bendForce -= object.radius / (maxBendDistance * maxBendDistance); // bend force is 0 at maxBendDistance + float bendForce = object_radius / distanceToCenter2; //bending force + bendForce -= object_radius / (maxBendDistance * maxBendDistance); // bend force is 0 at maxBendDistance bendForce = stepSize * max(0.0, bendForce); // multiply by step size, and clamp negative values return normalize(rayDir + bendForce * blackholeDir); //bend ray towards BH } @@ -143,18 +145,18 @@ vec3 bendRay(vec3 rayDir, vec3 blackholeDir, float distanceToCenter2, float maxB void main() { vec4 screenColor = texture2D(textureSampler, vUV);// the current screen color - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - float maxBendDistance = max(accretionDiskRadius * 3.0, object.radius * 15.0); + float maxBendDistance = max(accretionDiskRadius * 3.0, object_radius * 15.0); float t0, t1; - if(!rayIntersectSphere(camera.position, rayDir, object.position, maxBendDistance, t0, t1)) { + if(!rayIntersectSphere(camera_position, rayDir, object_position, maxBendDistance, t0, t1)) { // the light ray will not be affected by the black hole, we can skip the calculations gl_FragColor = screenColor; return; @@ -162,7 +164,7 @@ void main() { vec4 colOut = vec4(0.0); - vec3 positionBHS = camera.position - object.position;// position of the camera in blackhole space + vec3 positionBHS = camera_position - object_position;// position of the camera in blackhole space bool suckedInBH = false; bool escapedBH = false; @@ -189,28 +191,28 @@ void main() { vec3 blackholeDir = -positionBHS / distanceToCenter;//direction to BH float distanceToCenter2 = distanceToCenter * distanceToCenter; - projectedPosition = projectOnPlane(positionBHS, object.rotationAxis); + projectedPosition = projectOnPlane(positionBHS, object_rotationAxis); projectedDistance = length(projectedPosition - positionBHS); - projectedRayDir = projectOnPlane(rayDir, object.rotationAxis); + projectedRayDir = projectOnPlane(rayDir, object_rotationAxis); rayDirProjectedDistance = length(projectedRayDir - rayDir); float stepSize = 0.92 * projectedDistance / rayDirProjectedDistance;//conservative distance to disk (y==0) float farLimit = distanceToCenter * 0.5;//limit step size far from to BH - float closeLimit = distanceToCenter * 0.1 + 0.05 * distanceToCenter2 / object.radius;//limit step size close to BH + float closeLimit = distanceToCenter * 0.1 + 0.05 * distanceToCenter2 / object_radius;//limit step size close to BH stepSize = min(stepSize, min(farLimit, closeLimit)); rayDir = bendRay(rayDir, blackholeDir, distanceToCenter2, maxBendDistance, stepSize); positionBHS += stepSize * rayDir; //TODO: improve glow - //glow += vec4(1.2,1.1,1, 1.0) * (0.2 * (object.radius / distanceToCenter2) * stepSize * clamp(distanceToCenter / object.radius - 1.2, 0.0, 1.0)); //adds fairly cheap glow + //glow += vec4(1.2,1.1,1, 1.0) * (0.2 * (object_radius / distanceToCenter2) * stepSize * clamp(distanceToCenter / object_radius - 1.2, 0.0, 1.0)); //adds fairly cheap glow } - if (distanceToCenter < object.radius) { + if (distanceToCenter < object_radius) { suckedInBH = true; break; - } else if (distanceToCenter > object.radius * 5000.0) { + } else if (distanceToCenter > object_radius * 5000.0) { escapedBH = true; break; } else if (projectedDistance <= accretionDiskHeight) { @@ -225,10 +227,10 @@ void main() { } // getting the screen coordinate of the end of the bended ray - vec2 uv = uvFromWorld(positionBHS); + vec2 uv = uvFromWorld(positionBHS, camera_projection, camera_view); // check if there is an object occlusion - vec3 pixelWorldPositionEndRay = worldFromUV(uv);// the pixel position in world space (near plane) - vec3 rayDirToEndRay = normalize(pixelWorldPositionEndRay - camera.position);// normalized direction of the ray + vec3 pixelWorldPositionEndRay = worldFromUV(uv, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) + vec3 rayDirToEndRay = normalize(pixelWorldPositionEndRay - camera_position);// normalized direction of the ray float epsilon = 0.01; float depthEndRay1 = texture2D(depthSampler, uv + vec2(epsilon, 0.0)).r;// the depth corresponding to the pixel in the depth map @@ -237,12 +239,12 @@ void main() { float depthEndRay4 = texture2D(depthSampler, uv + vec2(0.0 -epsilon)).r;// the depth corresponding to the pixel in the depth map float depthEndRay = min(min(depthEndRay1, depthEndRay2), min(depthEndRay3, depthEndRay4)); // closest physical point from the camera in the direction of the pixel (occlusion) - vec3 closestPointEndRay = (pixelWorldPositionEndRay - camera.position) * remap(depthEndRay, 0.0, 1.0, camera.near, camera.far); + vec3 closestPointEndRay = (pixelWorldPositionEndRay - camera_position) * remap(depthEndRay, 0.0, 1.0, camera_near, camera_far); float maximumDistanceEndRay = length(closestPointEndRay);// the maxium ray length due to occlusion - float BHDistance = length(camera.position - object.position); + float BHDistance = length(camera_position - object_position); vec4 bg = vec4(0.0); - if(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && maximumDistanceEndRay > BHDistance - object.radius) { + if(uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0 && maximumDistanceEndRay > BHDistance - object_radius) { bg = texture2D(textureSampler, uv); } else { rayDir = vec3(starfieldRotation * vec4(rayDir, 1.0)); diff --git a/src/shaders/colorCorrection.glsl b/src/shaders/colorCorrection.glsl index 325248ddb..b27628540 100644 --- a/src/shaders/colorCorrection.glsl +++ b/src/shaders/colorCorrection.glsl @@ -10,8 +10,6 @@ uniform sampler2D textureSampler; varying vec2 vUV; -#pragma glslify: lerp = require(./utils/vec3Lerp.glsl) - void main() { vec3 color = texture2D(textureSampler, vUV).rgb; float alpha = texture2D(textureSampler, vUV).a; @@ -23,7 +21,7 @@ void main() { color = clamp(color, 0.0, 1.0); vec3 grayscale = vec3(0.299, 0.587, 0.114) * color; - color = lerp(color, grayscale, saturation); + color = mix(grayscale, color, saturation); color = clamp(color, 0.0, 1.0); color = pow(color, vec3(gamma)); diff --git a/src/shaders/flatCloudsFragment.glsl b/src/shaders/flatCloudsFragment.glsl index 5ce88a8b7..c1563b8cf 100644 --- a/src/shaders/flatCloudsFragment.glsl +++ b/src/shaders/flatCloudsFragment.glsl @@ -1,5 +1,7 @@ precision lowp float; +/* disable_uniformity_analysis */ + varying vec2 vUV;// screen coordinates // uniforms @@ -9,55 +11,50 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform sampler2D lut; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) - -#pragma glslify: camera = require(./utils/camera.glsl) - -#pragma glslify: object = require(./utils/object.glsl) - -struct Clouds { - float layerRadius;// atmosphere radius (calculate from planet center) - float frequency;// cloud frequency - float detailFrequency;// cloud detail frequency - float coverage;// cloud power - float sharpness; +#include "./utils/stars.glsl"; - vec3 color; +#include "./utils/camera.glsl"; - float worleySpeed;// worley noise speed - float detailSpeed;// detail noise speed +#include "./utils/object.glsl"; - float specularPower; - float smoothness; -}; -uniform Clouds clouds; +uniform float clouds_layerRadius; +uniform float clouds_frequency; +uniform float clouds_detailFrequency; +uniform float clouds_coverage; +uniform float clouds_sharpness; +uniform vec3 clouds_color; +uniform float clouds_worleySpeed; +uniform float clouds_detailSpeed; +uniform float clouds_specularPower; +uniform float clouds_smoothness; uniform float time; -#pragma glslify: saturate = require(./utils/saturate.glsl) +#include "./utils/saturate.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; -#pragma glslify: smoothSharpener = require(./utils/smoothSharpener.glsl) +#include "./utils/smoothSharpener.glsl"; -#pragma glslify: rotateAround = require(./utils/rotateAround.glsl) +#include "./utils/rotateAround.glsl"; -#pragma glslify: computeSpecularHighlight = require(./utils/computeSpecularHighlight.glsl) +#include "./utils/computeSpecularHighlight.glsl"; -#pragma glslify: removeAxialTilt = require(./utils/removeAxialTilt.glsl) +#include "./utils/removeAxialTilt.glsl"; -#pragma glslify: toUV = require(./utils/toUV.glsl) +#include "./utils/toUV.glsl"; +#define inline float cloudDensityAtPoint(vec3 samplePoint) { vec3 rotationAxisPlanetSpace = vec3(0.0, 1.0, 0.0); - vec3 samplePointRotatedWorley = rotateAround(samplePoint, rotationAxisPlanetSpace, time * clouds.worleySpeed); - vec3 samplePointRotatedDetail = rotateAround(samplePoint, rotationAxisPlanetSpace, time * clouds.detailSpeed); + vec3 samplePointRotatedWorley = rotateAround(samplePoint, rotationAxisPlanetSpace, time * clouds_worleySpeed); + vec3 samplePointRotatedDetail = rotateAround(samplePoint, rotationAxisPlanetSpace, time * clouds_detailSpeed); float density = 1.0 - texture2D(lut, toUV(samplePointRotatedWorley)).r; @@ -67,33 +64,34 @@ float cloudDensityAtPoint(vec3 samplePoint) { density = saturate(density * cloudThickness); - density = smoothstep(clouds.coverage, 1.0, density); + density = smoothstep(clouds_coverage, 1.0, density); - density = smoothSharpener(density, clouds.sharpness); + density = smoothSharpener(density, clouds_sharpness); return density; } +#define inline float computeCloudCoverage(vec3 rayOrigin, vec3 rayDir, float maximumDistance, out vec3 cloudNormal) { float impactPoint, escapePoint; - if (!(rayIntersectSphere(rayOrigin, rayDir, object.position, clouds.layerRadius, impactPoint, escapePoint))) { + if (!(rayIntersectSphere(rayOrigin, rayDir, object_position, clouds_layerRadius, impactPoint, escapePoint))) { return 0.0;// if not intersecting with atmosphere, return original color } // if ray intersect ocean, update maximum distance (the ocean is not it the depth buffer) float waterImpact, waterEscape; - if (rayIntersectSphere(rayOrigin, rayDir, object.position, object.radius, waterImpact, waterEscape)) { + if (rayIntersectSphere(rayOrigin, rayDir, object_position, object_radius, waterImpact, waterEscape)) { maximumDistance = min(maximumDistance, waterImpact); } if (impactPoint > maximumDistance || escapePoint < 0.0) return 0.0; - vec3 planetSpacePoint1 = normalize(rayOrigin + impactPoint * rayDir - object.position); - vec3 planetSpacePoint2 = normalize(rayOrigin + escapePoint * rayDir - object.position); + vec3 planetSpacePoint1 = normalize(rayOrigin + impactPoint * rayDir - object_position); + vec3 planetSpacePoint2 = normalize(rayOrigin + escapePoint * rayDir - object_position); - vec3 samplePoint1 = removeAxialTilt(planetSpacePoint1, object.rotationAxis); - vec3 samplePoint2 = removeAxialTilt(planetSpacePoint2, object.rotationAxis); + vec3 samplePoint1 = removeAxialTilt(planetSpacePoint1, object_rotationAxis); + vec3 samplePoint2 = removeAxialTilt(planetSpacePoint2, object_rotationAxis); float cloudDensity = 0.0; float cloudDensity1 = 0.0; @@ -117,17 +115,18 @@ float computeCloudCoverage(vec3 rayOrigin, vec3 rayDir, float maximumDistance, o return cloudDensity; } +#define inline float cloudShadows(vec3 closestPoint) { float lightAmount = 1.0; for (int i = 0; i < nbStars; i++) { - vec3 sunDir = normalize(stars[i].position - closestPoint); + vec3 sunDir = normalize(star_positions[i] - closestPoint); float t0, t1; - if (!rayIntersectSphere(closestPoint, sunDir, object.position, clouds.layerRadius, t0, t1)) continue; + if (!rayIntersectSphere(closestPoint, sunDir, object_position, clouds_layerRadius, t0, t1)) continue; - vec3 samplePoint = normalize(closestPoint + t1 * sunDir - object.position); + vec3 samplePoint = normalize(closestPoint + t1 * sunDir - object_position); if (dot(samplePoint, sunDir) < 0.0) continue; - samplePoint = removeAxialTilt(samplePoint, object.rotationAxis); + samplePoint = removeAxialTilt(samplePoint, object_rotationAxis); float density = cloudDensityAtPoint(samplePoint); lightAmount -= density; } @@ -140,37 +139,37 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // closest physical point from the camera in the direction of the pixel (occlusion) - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray - vec3 closestPoint = camera.position + rayDir * maximumDistance; + vec3 closestPoint = camera_position + rayDir * maximumDistance; vec4 finalColor = screenColor; - if (length(closestPoint - object.position) < clouds.layerRadius) finalColor.rgb *= cloudShadows(closestPoint); + if (length(closestPoint - object_position) < clouds_layerRadius) finalColor.rgb *= cloudShadows(closestPoint); vec3 cloudNormal; - float cloudDensity = computeCloudCoverage(camera.position, rayDir, maximumDistance, cloudNormal); + float cloudDensity = computeCloudCoverage(camera_position, rayDir, maximumDistance, cloudNormal); if (cloudDensity > 0.0) { float ndl = 0.0;// dimming factor due to light inclination relative to vertex normal in world space float specularHighlight = 0.0; for (int i = 0; i < nbStars; i++) { - vec3 sunDir = normalize(stars[i].position - object.position); + vec3 sunDir = normalize(star_positions[i] - object_position); ndl += max(dot(cloudNormal, sunDir), -0.3) + 0.3; - if (length(camera.position - object.position) > clouds.layerRadius) { + if (length(camera_position - object_position) > clouds_layerRadius) { // if above cloud coverage then specular highlight - specularHighlight += computeSpecularHighlight(sunDir, rayDir, cloudNormal, clouds.smoothness, clouds.specularPower); + specularHighlight += computeSpecularHighlight(sunDir, rayDir, cloudNormal, clouds_smoothness, clouds_specularPower); } } ndl = saturate(ndl); - vec3 ambiant = mix(finalColor.rgb, ndl * clouds.color, cloudDensity); + vec3 ambiant = mix(finalColor.rgb, ndl * clouds_color, cloudDensity); finalColor.rgb = ambiant + specularHighlight * cloudDensity; } diff --git a/src/shaders/gasPlanetMaterial/fragment.glsl b/src/shaders/gasPlanetMaterial/fragment.glsl index 40dd12bd7..293ee0ac6 100644 --- a/src/shaders/gasPlanetMaterial/fragment.glsl +++ b/src/shaders/gasPlanetMaterial/fragment.glsl @@ -2,11 +2,8 @@ precision highp float; #define MAX_STARS 5 uniform int nbStars;// number of stars -struct Star { - vec3 position; - vec3 color; -}; -uniform Star stars[MAX_STARS]; +uniform vec3 star_positions[MAX_STARS]; +uniform vec3 star_colors[MAX_STARS]; varying vec3 vPositionW; varying vec3 vNormalW; @@ -25,13 +22,11 @@ uniform float time; uniform float seed; -#pragma glslify: fractalSimplex4 = require(../utils/simplex4.glsl) +#include "../utils/simplex4.glsl"; -#pragma glslify: lerp = require(../utils/vec3Lerp.glsl) +#include "../utils/saturate.glsl"; -#pragma glslify: saturate = require(../utils/saturate.glsl) - -#pragma glslify: smoothSharpener = require(../utils/smoothSharpener.glsl) +#include "../utils/smoothSharpener.glsl"; void main() { vec3 viewRayW = normalize(playerPosition - vPositionW);// view direction in world space @@ -41,8 +36,8 @@ void main() { vec3 ndl = vec3(0.0); float specComp = 0.0; for (int i = 0; i < nbStars; i++) { - vec3 starLightRayW = normalize(stars[i].position - vPositionW);// light ray direction in world space - ndl += max(0.0, dot(normalW, starLightRayW)) * stars[i].color;// diffuse lighting + vec3 starLightRayW = normalize(star_positions[i] - vPositionW);// light ray direction in world space + ndl += max(0.0, dot(normalW, starLightRayW)) * star_colors[i];// diffuse lighting vec3 angleW = normalize(viewRayW + starLightRayW); specComp += max(0.0, dot(normalW, angleW)); @@ -69,9 +64,9 @@ void main() { float colorDecision2 = fractalSimplex4(vec4(latitude - warping, seedImpact, -seedImpact, seedImpact), 3, 2.0, 2.0); - color = lerp(color1, color2, smoothstep(0.4, 0.6, colorDecision1)); + color = mix(color2, color1, smoothstep(0.4, 0.6, colorDecision1)); - color = lerp(color, color3, smoothSharpener(colorDecision2, colorSharpness)); + color = mix(color3, color, smoothSharpener(colorDecision2, colorSharpness)); } specComp /= 2.0; diff --git a/src/shaders/lensflare.glsl b/src/shaders/lensflare.glsl index 26b5c3ba1..40fbc7bcf 100644 --- a/src/shaders/lensflare.glsl +++ b/src/shaders/lensflare.glsl @@ -10,13 +10,13 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform float visibility; uniform vec3 clipPosition; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView); +#include "./utils/worldFromUV.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; uniform vec3 flareColor; uniform float aspectRatio; @@ -112,10 +112,10 @@ void main() { return; } - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) - vec3 rayDir = normalize(pixelWorldPosition - camera.position); + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) + vec3 rayDir = normalize(pixelWorldPosition - camera_position); - vec3 objectDirection = normalize(object.position - camera.position); + vec3 objectDirection = normalize(object_position - camera_position); vec2 objectScreenPos = clipPosition.xy; objectScreenPos.y = 1.0 - objectScreenPos.y; diff --git a/src/shaders/mandelbulb.glsl b/src/shaders/mandelbulb.glsl index 45bc52695..ad51b1e62 100644 --- a/src/shaders/mandelbulb.glsl +++ b/src/shaders/mandelbulb.glsl @@ -10,22 +10,22 @@ uniform float power; uniform vec3 accentColor; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) +#include "./utils/stars.glsl"; uniform sampler2D textureSampler; uniform sampler2D depthSampler; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; -#pragma glslify: saturate = require(./utils/saturate.glsl) +#include "./utils/saturate.glsl"; #define MARCHINGITERATIONS 64 @@ -121,23 +121,23 @@ vec3 estimate_normal(const vec3 p, const float delta) void main() { vec4 screenColor = texture2D(textureSampler, vUV);// the current screen color - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); float impactPoint, escapePoint; - if (!(rayIntersectSphere(camera.position, rayDir, object.position, object.radius, impactPoint, escapePoint))) { + if (!(rayIntersectSphere(camera_position, rayDir, object_position, object_radius, impactPoint, escapePoint))) { gl_FragColor = screenColor;// if not intersecting with atmosphere, return original color return; } // scale down so that everything happens in a sphere of radius 2 - float inverseScaling = 1.0 / (0.5 * object.radius); + float inverseScaling = 1.0 / (0.5 * object_radius); - vec3 origin = camera.position + impactPoint * rayDir - object.position;// the ray origin in world space + vec3 origin = camera_position + impactPoint * rayDir - object_position;// the ray origin in world space origin *= inverseScaling; float steps; @@ -166,7 +166,7 @@ void main() { vec3 normal = estimate_normal(intersectionPoint, EPSILON * 2.0); float ndl = 0.0; for (int i = 0; i < nbStars; i++) { - vec3 starDir = normalize(stars[i].position - object.position); + vec3 starDir = normalize(star_positions[i] - object_position); ndl += max(0.0, dot(normal, starDir)); } diff --git a/src/shaders/matterjet.glsl b/src/shaders/matterjet.glsl index 8f88c2e0d..4d12c60f2 100644 --- a/src/shaders/matterjet.glsl +++ b/src/shaders/matterjet.glsl @@ -7,17 +7,15 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform float time; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl" -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: lerp = require(./utils/vec3Lerp.glsl) - -#pragma glslify: removeAxialTilt = require(./utils/removeAxialTilt.glsl) +#include "./utils/removeAxialTilt.glsl"; // from https://www.shadertoy.com/view/MtcXWr bool rayIntersectCone(vec3 rayOrigin, vec3 rayDir, vec3 tipPosition, vec3 orientation, float coneAngle, out float t1, out float t2) { @@ -99,12 +97,12 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray vec4 finalColor = screenColor; @@ -113,18 +111,18 @@ void main() { float t1, t2; - if (rayIntersectCone(camera.position, rayDir, object.position, object.rotationAxis, 0.9, t1, t2)) { + if (rayIntersectCone(camera_position, rayDir, object_position, object_rotationAxis, 0.9, t1, t2)) { if (t2 > 0.0 && t2 < maximumDistance) { - vec3 jetPointPosition2 = camera.position + t2 * rayDir - object.position; + vec3 jetPointPosition2 = camera_position + t2 * rayDir - object_position; - float density2 = spiralDensity(jetPointPosition2, object.rotationAxis, jetHeight); + float density2 = spiralDensity(jetPointPosition2, object_rotationAxis, jetHeight); finalColor.rgb = mix(finalColor.rgb, jetColor, density2); } if (t1 > 0.0 && t1 < maximumDistance) { - vec3 jetPointPosition1 = camera.position + t1 * rayDir - object.position; + vec3 jetPointPosition1 = camera_position + t1 * rayDir - object_position; - float density1 = spiralDensity(jetPointPosition1, object.rotationAxis, jetHeight); + float density1 = spiralDensity(jetPointPosition1, object_rotationAxis, jetHeight); finalColor.rgb = mix(finalColor.rgb, jetColor, density1); } diff --git a/src/shaders/oceanFragment.glsl b/src/shaders/oceanFragment.glsl index ad9d0772b..e738f118d 100644 --- a/src/shaders/oceanFragment.glsl +++ b/src/shaders/oceanFragment.glsl @@ -1,5 +1,7 @@ precision lowp float; +/* disable_uniformity_analysis */ + varying vec2 vUV;// screen coordinates uniform sampler2D textureSampler;// the original screen texture @@ -7,41 +9,39 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform sampler2D normalMap1; uniform sampler2D normalMap2; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) +#include "./utils/stars.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; uniform vec4 planetInverseRotationQuaternion; -struct Ocean { - float radius; - float smoothness; - float specularPower; - float alphaModifier; - float depthModifier; - float waveBlendingSharpness; -}; -uniform Ocean ocean; +uniform float ocean_radius; +uniform float ocean_smoothness; +uniform float ocean_specularPower; +uniform float ocean_alphaModifier; +uniform float ocean_depthModifier; +uniform float ocean_waveBlendingSharpness; uniform float time; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; -#pragma glslify: triplanarNormal = require(./utils/triplanarNormal.glsl) +#include "./utils/triplanarNormal.glsl"; -#pragma glslify: saturate = require(./utils/saturate.glsl) +#include "./utils/saturate.glsl"; -#pragma glslify: applyQuaternion = require(./utils/applyQuaternion.glsl) +#include "./utils/applyQuaternion.glsl"; -#pragma glslify: computeSpecularHighlight = require(./utils/computeSpecularHighlight.glsl) +#include "./utils/computeSpecularHighlight.glsl"; +#define inline vec4 oceanColor(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDistance) { float impactPoint, escapePoint; @@ -49,9 +49,9 @@ vec4 oceanColor(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDi float waveOmega = 1.0/7.0; - float actualRadius = ocean.radius + waveAmplitude * sin(time * waveOmega); + float actualRadius = ocean_radius + waveAmplitude * sin(time * waveOmega); - if (!(rayIntersectSphere(rayOrigin, rayDir, object.position, actualRadius, impactPoint, escapePoint))) { + if (!(rayIntersectSphere(rayOrigin, rayDir, object_position, actualRadius, impactPoint, escapePoint))) { return originalColor;// if not intersecting with atmosphere, return original color } @@ -62,7 +62,7 @@ vec4 oceanColor(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDi if (distanceThroughOcean <= 0.0) return originalColor; - vec3 samplePoint = rayOrigin + impactPoint * rayDir - object.position; + vec3 samplePoint = rayOrigin + impactPoint * rayDir - object_position; vec3 samplePointPlanetSpace = applyQuaternion(planetInverseRotationQuaternion, samplePoint); @@ -70,23 +70,23 @@ vec4 oceanColor(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDi vec3 planetNormal = normalize(samplePoint); - vec3 normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, time, -time) * 100.0, planetNormal, normalMap2, 0.00015, ocean.waveBlendingSharpness, 1.0); - normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, time, -time) * 100.0, normalWave, normalMap1, 0.0001, ocean.waveBlendingSharpness, 1.0); + vec3 normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, time, -time) * 100.0, planetNormal, normalMap2, 0.00015, ocean_waveBlendingSharpness, 1.0); + normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, time, -time) * 100.0, normalWave, normalMap1, 0.0001, ocean_waveBlendingSharpness, 1.0); - normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, -time, -time) * 300.0, normalWave, normalMap1, 0.000025, ocean.waveBlendingSharpness, 0.5); - normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, -time, time) * 300.0, normalWave, normalMap2, 0.00002, ocean.waveBlendingSharpness, 0.5); + normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, -time, -time) * 300.0, normalWave, normalMap1, 0.000025, ocean_waveBlendingSharpness, 0.5); + normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, -time, time) * 300.0, normalWave, normalMap2, 0.00002, ocean_waveBlendingSharpness, 0.5); - normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, -time, -time) * 500.0, normalWave, normalMap2, 0.000010, ocean.waveBlendingSharpness, 0.5); - normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, -time, time) * 500.0, normalWave, normalMap1, 0.000005, ocean.waveBlendingSharpness, 0.5); + normalWave = triplanarNormal(samplePointPlanetSpace + vec3(time, -time, -time) * 500.0, normalWave, normalMap2, 0.000010, ocean_waveBlendingSharpness, 0.5); + normalWave = triplanarNormal(samplePointPlanetSpace + vec3(-time, -time, time) * 500.0, normalWave, normalMap1, 0.000005, ocean_waveBlendingSharpness, 0.5); - float opticalDepth01 = 1.0 - exp(-distanceThroughOcean * ocean.depthModifier); - float alpha = exp(-distanceThroughOcean * ocean.alphaModifier); + float opticalDepth01 = 1.0 - exp(-distanceThroughOcean * ocean_depthModifier); + float alpha = exp(-distanceThroughOcean * ocean_alphaModifier); //vec3 oceanColor = lerp(vec3(10.0, 100.0, 249.0)/255.0, vec3(15.0,94.0,156.0)/255.0, opticalDepth01); vec3 deepColor = vec3(0.0, 22.0, 82.0)/255.0; vec3 shallowColor = vec3(32.0, 193.0, 180.0)/255.0; - vec3 oceanColor = mix(shallowColor, deepColor, opticalDepth01) * stars[0].color; + vec3 oceanColor = mix(shallowColor, deepColor, opticalDepth01) * star_colors[0]; vec3 ambiant = mix(oceanColor, originalColor.rgb, alpha); @@ -97,14 +97,14 @@ vec4 oceanColor(vec4 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDi vec3 finalColor = vec3(0.0); for (int i = 0; i < nbStars; i++) { - vec3 sunDir = normalize(stars[i].position - samplePoint); + vec3 sunDir = normalize(star_positions[i] - samplePoint); float ndl = max(dot(planetNormal, sunDir), 0.0); finalColor += ambiant * ndl; - if (length(rayOrigin - object.position) > ocean.radius) { + if (length(rayOrigin - object_position) > ocean_radius) { // if above ocean surface then specular highlight - finalColor += computeSpecularHighlight(sunDir, rayDir, normalWave, ocean.smoothness, ocean.specularPower) * stars[i].color; + finalColor += computeSpecularHighlight(sunDir, rayDir, normalWave, ocean_smoothness, ocean_specularPower) * star_colors[i]; } } @@ -116,14 +116,14 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray - vec4 finalColor = oceanColor(screenColor, camera.position, rayDir, maximumDistance); + vec4 finalColor = oceanColor(screenColor, camera_position, rayDir, maximumDistance); gl_FragColor = finalColor;// displaying the final color } \ No newline at end of file diff --git a/src/shaders/rings/rings.glsl b/src/shaders/rings/rings.glsl index ae6bdc993..66f7233b8 100644 --- a/src/shaders/rings/rings.glsl +++ b/src/shaders/rings/rings.glsl @@ -1,10 +1,5 @@ -struct Rings { - float start;// ring start - float end;// ring end - float frequency;// ring frequency - float opacity;// ring opacity - vec3 color;// ring color -}; -uniform Rings rings; - -#pragma glslify: export(rings) \ No newline at end of file +uniform float rings_start; +uniform float rings_end; +uniform float rings_frequency; +uniform float rings_opacity; +uniform vec3 rings_color; \ No newline at end of file diff --git a/src/shaders/rings/ringsDensity.glsl b/src/shaders/rings/ringsDensity.glsl index 42a914e49..bd4697e4f 100644 --- a/src/shaders/rings/ringsDensity.glsl +++ b/src/shaders/rings/ringsDensity.glsl @@ -1,19 +1,18 @@ -#pragma glslify: completeNoise = require(../utils/noise1D.glsl) +#include "../utils/noise1D.glsl"; -#pragma glslify: remap = require(../utils/remap.glsl) +#include "../utils/remap.glsl"; +#define inline float ringDensityAtPoint(vec3 samplePoint) { - vec3 samplePointPlanetSpace = samplePoint - object.position; - + vec3 samplePointPlanetSpace = samplePoint - object_position; float distanceToPlanet = length(samplePointPlanetSpace); - float normalizedDistance = distanceToPlanet / object.radius; - - // out if not intersecting with rings and interpolation area - if (normalizedDistance < rings.start || normalizedDistance > rings.end) return 0.0; + float normalizedDistance = distanceToPlanet / object_radius; - float uvX = remap(normalizedDistance, rings.start, rings.end, 0.0, 1.0); - return texture2D(ringsLUT, vec2(uvX, 0.0)).x; -} + float uvX = remap(normalizedDistance, rings_start, rings_end, 0.0, 1.0); + float lutDensity = texture2D(ringsLUT, vec2(uvX, 0.0)).x; -#pragma glslify: export(ringDensityAtPoint) \ No newline at end of file + // out if not intersecting with rings and interpolation area + if (normalizedDistance < rings_start || normalizedDistance > rings_end) return 0.0; + return lutDensity; +} \ No newline at end of file diff --git a/src/shaders/ringsFragment.glsl b/src/shaders/ringsFragment.glsl index 7003bad81..a50633da3 100644 --- a/src/shaders/ringsFragment.glsl +++ b/src/shaders/ringsFragment.glsl @@ -1,5 +1,7 @@ precision lowp float; +/* disable_uniformity_analysis */ + varying vec2 vUV;// screen coordinates uniform sampler2D textureSampler;// the original screen texture @@ -8,57 +10,56 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform sampler2D ringsLUT; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/stars.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/camera.glsl"; -#pragma glslify: rings = require(./rings/rings.glsl) +#include "./utils/object.glsl"; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./rings/rings.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; -#pragma glslify: rayIntersectsPlane = require(./utils/rayIntersectsPlane.glsl) +#include "./utils/rayIntersectsPlane.glsl"; -#pragma glslify: ringDensityAtPoint = require(./rings/ringsDensity.glsl, object=object, rings=rings, ringsLUT=ringsLUT) +#include "./rings/ringsDensity.glsl"; void main() { vec4 screenColor = texture2D(textureSampler, vUV);// the current screen color float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray vec4 finalColor = screenColor; float impactPoint; - if (rayIntersectsPlane(camera.position, rayDir, object.position, object.rotationAxis, 0.001, impactPoint)) { + if (rayIntersectsPlane(camera_position, rayDir, object_position, object_rotationAxis, 0.001, impactPoint)) { // if the ray intersect the ring plane if (impactPoint >= 0.0 && impactPoint < maximumDistance) { // if the ray intersects the ring before any other object float t0, t1; - if (!rayIntersectSphere(camera.position, rayDir, object.position, object.radius, t0, t1) || t0 > impactPoint) { + if (!rayIntersectSphere(camera_position, rayDir, object_position, object_radius, t0, t1) || t0 > impactPoint) { // if the ray is impacting a solid object after the ring plane - vec3 samplePoint = camera.position + impactPoint * rayDir; - float ringDensity = ringDensityAtPoint(samplePoint) * rings.opacity; + vec3 samplePoint = camera_position + impactPoint * rayDir; + float ringDensity = ringDensityAtPoint(samplePoint) * rings_opacity; - vec3 ringShadeColor = rings.color; + vec3 ringShadeColor = rings_color; // hypothèse des rayons parallèles int nbLightSources = nbStars; for (int i = 0; i < nbStars; i++) { - vec3 rayToSun = normalize(stars[i].position - object.position); + vec3 rayToSun = normalize(star_positions[i] - object_position); float t2, t3; - if (rayIntersectSphere(samplePoint, rayToSun, object.position, object.radius, t2, t3)) { + if (rayIntersectSphere(samplePoint, rayToSun, object_position, object_radius, t2, t3)) { nbLightSources -= 1; } } @@ -69,7 +70,5 @@ void main() { } } - //finalColor.rgb = vec3(texture2D(ringsLUT, vUV).r); - gl_FragColor = finalColor;// displaying the final color } \ No newline at end of file diff --git a/src/shaders/shadowFragment.glsl b/src/shaders/shadowFragment.glsl index 09fdfc4c4..e5b8d04ed 100644 --- a/src/shaders/shadowFragment.glsl +++ b/src/shaders/shadowFragment.glsl @@ -1,5 +1,7 @@ precision lowp float; +/* disable_uniformity_analysis */ + varying vec2 vUV;// screen coordinates uniform sampler2D textureSampler;// the original screen texture @@ -8,44 +10,39 @@ uniform sampler2D depthSampler;// the depth map of the camera uniform sampler2D ringsLUT; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) - -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/stars.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/camera.glsl"; -struct ShadowUniforms { - bool hasRings; - bool hasClouds; - bool hasOcean; -}; -uniform ShadowUniforms shadowUniforms; +#include "./utils/object.glsl"; -#pragma glslify: rings = require(./rings/rings.glsl) +uniform bool shadowUniforms_hasRings; +uniform bool shadowUniforms_hasClouds; +uniform bool shadowUniforms_hasOcean; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./rings/rings.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: lineIntersectSphere = require(./utils/lineIntersectSphere.glsl) +#include "./utils/lineIntersectSphere.glsl"; -#pragma glslify: rayIntersectsPlane = require(./utils/rayIntersectsPlane.glsl) +#include "./utils/rayIntersectsPlane.glsl"; -#pragma glslify: ringDensityAtPoint = require(./rings/ringsDensity.glsl, object=object, rings=rings, ringsLUT=ringsLUT) +#include "./rings/ringsDensity.glsl"; float sphereOccultation(vec3 rayDir, float maximumDistance) { - if(length(camera.position + rayDir * maximumDistance - stars[0].position) <= stars[0].radius + 1.0) { + if(length(camera_position + rayDir * maximumDistance - star_positions[0]) <= star_radiuses[0] + 1.0) { // The point is on the surface of the star return 1.0; } - vec3 towardLight = normalize(stars[0].position - (camera.position + rayDir * maximumDistance)); + vec3 towardLight = normalize(star_positions[0] - (camera_position + rayDir * maximumDistance)); float t0, t1; - if (lineIntersectSphere(camera.position + rayDir * maximumDistance, towardLight, object.position, object.radius, t0, t1)) { - if (t0 > object.radius) { + if (lineIntersectSphere(camera_position + rayDir * maximumDistance, towardLight, object_position, object_radius, t0, t1)) { + if (t0 > object_radius) { // there is occultation - vec3 closestPointToPlanetCenter = camera.position + rayDir * maximumDistance + towardLight * (t0 + t1) * 0.5; - float closestDistanceToPlanetCenter = length(closestPointToPlanetCenter - object.position); - float r01 = remap(closestDistanceToPlanetCenter, 0.0, object.radius, 0.0, 1.0); + vec3 closestPointToPlanetCenter = camera_position + rayDir * maximumDistance + towardLight * (t0 + t1) * 0.5; + float closestDistanceToPlanetCenter = length(closestPointToPlanetCenter - object_position); + float r01 = remap(closestDistanceToPlanetCenter, 0.0, object_radius, 0.0, 1.0); return 0.2 + 0.8 * smoothstep(0.85, 1.0, r01); } } @@ -53,17 +50,17 @@ float sphereOccultation(vec3 rayDir, float maximumDistance) { } float ringOccultation(vec3 rayDir, float maximumDistance) { - if (!shadowUniforms.hasRings) { + if (!shadowUniforms_hasRings) { return 1.0; } float accDensity = 0.0; for (int i = 0; i < nbStars; i++) { - vec3 towardLight = normalize(stars[i].position - (camera.position + rayDir * maximumDistance)); + vec3 towardLight = normalize(star_positions[i] - (camera_position + rayDir * maximumDistance)); float t2; - if (rayIntersectsPlane(camera.position + rayDir * maximumDistance, towardLight, object.position, object.rotationAxis, 0.001, t2)) { - vec3 shadowSamplePoint = camera.position + rayDir * maximumDistance + t2 * towardLight; - accDensity += ringDensityAtPoint(shadowSamplePoint) * rings.opacity; + if (rayIntersectsPlane(camera_position + rayDir * maximumDistance, towardLight, object_position, object_rotationAxis, 0.001, t2)) { + vec3 shadowSamplePoint = camera_position + rayDir * maximumDistance + t2 * towardLight; + accDensity += ringDensityAtPoint(shadowSamplePoint) * rings_opacity; } } return pow(1.0 - accDensity, 4.0) * 0.5 + 0.5; @@ -74,16 +71,16 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // closest physical point from the camera in the direction of the pixel (occlusion) - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray vec4 finalColor = screenColor; - if (maximumDistance < camera.far) { + if (maximumDistance < camera_far) { // There is a solid object in front of the camera // maybe it is in this planet's shadow float sphereShadow = sphereOccultation(rayDir, maximumDistance); @@ -94,7 +91,5 @@ void main() { finalColor.rgb *= min(sphereShadow, ringShadow); } - //finalColor.rgb = vec3(texture2D(ringsLUT, vUV).r); - gl_FragColor = finalColor;// displaying the final color } \ No newline at end of file diff --git a/src/shaders/sierpinski.glsl b/src/shaders/sierpinski.glsl index dcf0bd563..2ed0a41e0 100644 --- a/src/shaders/sierpinski.glsl +++ b/src/shaders/sierpinski.glsl @@ -11,7 +11,7 @@ uniform float power; uniform vec3 accentColor; uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) +#include "./utils/stars.glsl"; uniform sampler2D textureSampler; uniform sampler2D depthSampler; @@ -25,11 +25,11 @@ uniform mat4 inverseProjection; uniform float cameraNear; uniform float cameraFar; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=inverseProjection, inverseView=inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; #define MARCHINGITERATIONS 100 @@ -116,12 +116,12 @@ vec3 estimate_normal(const vec3 p, const float delta) void main() { vec4 screenColor = texture2D(textureSampler, vUV);// the current screen color - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) vec3 rayDir = normalize(pixelWorldPosition - cameraPosition);// normalized direction of the ray float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); float impactPoint, escapePoint; if (!(rayIntersectSphere(cameraPosition, rayDir, planetPosition, planetRadius, impactPoint, escapePoint))) { @@ -155,7 +155,7 @@ void main() { float ndl = 0.0; for(int i = 0; i < nbStars; i++) { - vec3 starDir = normalize(stars[i].position - planetPosition); + vec3 starDir = normalize(star_positions[i] - planetPosition); ndl += max(0.0, dot(normal, starDir)); } diff --git a/src/shaders/starMaterial/fragment.glsl b/src/shaders/starMaterial/fragment.glsl index c787ce1a4..eaf83be2b 100644 --- a/src/shaders/starMaterial/fragment.glsl +++ b/src/shaders/starMaterial/fragment.glsl @@ -8,9 +8,9 @@ uniform float time; uniform float seed; -#pragma glslify: rotateAround = require(../utils/rotateAround.glsl) +#include "../utils/rotateAround.glsl"; -#pragma glslify: fractalSimplex4 = require(../utils/simplex4.glsl) +#include "../utils/simplex4.glsl"; void main() { float plasmaSpeed = 0.005; diff --git a/src/shaders/starMaterial/vertex.glsl b/src/shaders/starMaterial/vertex.glsl index af99ec783..37179acd0 100644 --- a/src/shaders/starMaterial/vertex.glsl +++ b/src/shaders/starMaterial/vertex.glsl @@ -12,7 +12,7 @@ varying vec3 vUnitSamplePoint; uniform vec4 starInverseRotationQuaternion; uniform vec3 starPosition; -#pragma glslify: applyQuaternion = require(../utils/applyQuaternion.glsl) +#include "../utils/applyQuaternion.glsl"; void main() { diff --git a/src/shaders/starfieldFragment.glsl b/src/shaders/starfieldFragment.glsl index ce25d7fdb..d8310bb3f 100644 --- a/src/shaders/starfieldFragment.glsl +++ b/src/shaders/starfieldFragment.glsl @@ -1,4 +1,4 @@ -precision lowp float; +precision highp float; varying vec2 vUV;// screen coordinates @@ -9,34 +9,40 @@ uniform sampler2D starfieldTexture;// the starfield texture uniform mat4 starfieldRotation; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; uniform float visibility;// visibility of the starfield -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; void main() { vec4 screenColor = texture2D(textureSampler, vUV);// the current screen color float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray rayDir = vec3(starfieldRotation * vec4(rayDir, 1.0)); vec4 finalColor = screenColor; + vec2 starfieldUV = vec2(0.0); + if (screenColor == vec4(0.0)) { // get the starfield color // get spherical coordinates uv for the starfield texture - vec2 starfieldUV = vec2( - sign(rayDir.z) * acos(rayDir.x / length(vec2(rayDir.x, rayDir.z))) / 6.28318530718, - acos(rayDir.y) / 3.14159265359 + starfieldUV = vec2( + sign(rayDir.z) * acos(rayDir.x / length(vec2(rayDir.x, rayDir.z))) / 6.28318530718, + acos(rayDir.y) / 3.14159265359 ); - vec4 starfieldColor = texture2D(starfieldTexture, starfieldUV); - starfieldColor.rgb = pow(starfieldColor.rgb, vec3(2.2)); // deeper blacks + } + + vec4 starfieldColor = texture2D(starfieldTexture, starfieldUV); + starfieldColor.rgb = pow(starfieldColor.rgb, vec3(2.2)); // deeper blacks + + if (screenColor == vec4(0.0)) { finalColor = vec4(starfieldColor.rgb * visibility, starfieldColor.a); } diff --git a/src/shaders/telluricPlanetMaterial/fragment.glsl b/src/shaders/telluricPlanetMaterial/fragment.glsl index 5089bc3a5..5273a7909 100644 --- a/src/shaders/telluricPlanetMaterial/fragment.glsl +++ b/src/shaders/telluricPlanetMaterial/fragment.glsl @@ -21,11 +21,8 @@ uniform vec3 planetPosition; #define MAX_STARS 5 uniform int nbStars;// number of stars -struct Star { - vec3 position; - vec3 color; -}; -uniform Star stars[MAX_STARS]; +uniform vec3 star_positions[MAX_STARS]; +uniform vec3 star_colors[MAX_STARS]; uniform int colorMode; @@ -63,31 +60,25 @@ uniform float maxTemperature; uniform float waterAmount; -#pragma glslify: perlin3 = require(../utils/perlin3.glsl) +#include "../utils/perlin3.glsl"; -#pragma glslify: remap = require(../utils/remap.glsl) +#include "../utils/remap.glsl"; -#pragma glslify: lerp = require(../utils/vec3Lerp.glsl) - -float lerp(float value1, float value2, float x) { - return x * value1 + (1.0 - x) * value2; -} - -#pragma glslify: triplanarNormal = require(../utils/triplanarNormal.glsl) +#include "../utils/triplanarNormal.glsl"; //https://www.desmos.com/calculator/8etk6vdfzi -#pragma glslify: smoothSharpener = require(../utils/smoothSharpener.glsl) +#include "../utils/smoothSharpener.glsl"; -#pragma glslify: rayIntersectSphere = require(../utils/rayIntersectSphere.glsl) +#include "../utils/rayIntersectSphere.glsl"; vec3 saturate(vec3 color) { return clamp(color, 0.0, 1.0); } -#pragma glslify: waterBoilingPointCelsius = require(./utils/waterBoilingPointCelsius.glsl) +#include "./utils/waterBoilingPointCelsius.glsl"; -#pragma glslify: computeTemperature01 = require(./utils/computeTemperature01.glsl) +#include "./utils/computeTemperature01.glsl"; void main() { vec3 viewRayW = normalize(playerPosition - vPositionW);// view direction in world space @@ -97,7 +88,7 @@ void main() { // diffuse lighting extinction float ndl1 = 0.0; for (int i = 0; i < nbStars; i++) { - vec3 starLightRayW = normalize(stars[i].position - vPositionW);// light ray direction in world space + vec3 starLightRayW = normalize(star_positions[i] - vPositionW);// light ray direction in world space ndl1 += max(dot(sphereNormalW, starLightRayW), 0.0); } ndl1 = clamp(ndl1, 0.0, 1.0); @@ -134,7 +125,7 @@ void main() { float temperature01 = computeTemperature01(elevation01, absLatitude01, ndl1, dayDuration); - float temperature = lerp(maxTemperature, minTemperature, temperature01); + float temperature = mix(minTemperature, maxTemperature, temperature01); // moisture float moisture01 = 0.0;// 0.0 = sec, 1.0 = humid : sec par défaut @@ -246,12 +237,12 @@ void main() { vec3 ndl2 = vec3(0.0);// dimming factor due to light inclination relative to vertex normal in world space vec3 specComp = vec3(0.0); for (int i = 0; i < nbStars; i++) { - vec3 starLightRayW = normalize(stars[i].position - vPositionW); - vec3 ndl2part = max(0.0, dot(normalW, starLightRayW)) * stars[i].color; + vec3 starLightRayW = normalize(star_positions[i] - vPositionW); + vec3 ndl2part = max(0.0, dot(normalW, starLightRayW)) * star_colors[i]; ndl2 += ndl2part; vec3 angleW = normalize(viewRayW + starLightRayW); - specComp += max(0.0, dot(normalW, angleW)) * stars[i].color; + specComp += max(0.0, dot(normalW, angleW)) * star_colors[i]; } ndl2 = saturate(ndl2); specComp = saturate(specComp); @@ -269,8 +260,8 @@ void main() { vec3 screenColor = color.rgb * (ndl2 + specComp*ndl1); - if (colorMode == 1) screenColor = lerp(vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0), moisture01); - if (colorMode == 2) screenColor = lerp(vec3(1.0, 0.0, 0.0), vec3(0.1, 0.2, 1.0), temperature01); + if (colorMode == 1) screenColor = mix(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), moisture01); + if (colorMode == 2) screenColor = mix(vec3(0.1, 0.2, 1.0), vec3(1.0, 0.0, 0.0), temperature01); if (colorMode == 3) screenColor = normal * 0.5 + 0.5; if (colorMode == 4) screenColor = vec3(elevation01); if (colorMode == 5) screenColor = vec3(1.0 - dot(normal, normalize(vSamplePoint))); diff --git a/src/shaders/telluricPlanetMaterial/utils/computeTemperature01.glsl b/src/shaders/telluricPlanetMaterial/utils/computeTemperature01.glsl index cdf328c76..6700492e6 100644 --- a/src/shaders/telluricPlanetMaterial/utils/computeTemperature01.glsl +++ b/src/shaders/telluricPlanetMaterial/utils/computeTemperature01.glsl @@ -23,6 +23,4 @@ float computeTemperature01(float elevation01, float absLatitude01, float ndl, fl temperature01 = clamp(temperature01, 0.0, 1.0); return temperature01; -} - -#pragma glslify: export(computeTemperature01) +} \ No newline at end of file diff --git a/src/shaders/telluricPlanetMaterial/utils/waterBoilingPointCelsius.glsl b/src/shaders/telluricPlanetMaterial/utils/waterBoilingPointCelsius.glsl index 04fa16cb4..409e74862 100644 --- a/src/shaders/telluricPlanetMaterial/utils/waterBoilingPointCelsius.glsl +++ b/src/shaders/telluricPlanetMaterial/utils/waterBoilingPointCelsius.glsl @@ -9,6 +9,4 @@ float waterBoilingPointCelsius(float pressure) { float R = 8.314; if(P2 > 0.0) return (1.0 / ((1.0 / T1) + log(P1 / P2) * (R / DH))) - 273.15; return -273.15; -} - -#pragma glslify: export(waterBoilingPointCelsius) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/textures/atmosphereLUT.glsl b/src/shaders/textures/atmosphereLUT.glsl index 2dc51ed5e..1d881e280 100644 --- a/src/shaders/textures/atmosphereLUT.glsl +++ b/src/shaders/textures/atmosphereLUT.glsl @@ -6,9 +6,9 @@ precision highp float; varying vec2 vUV; -#pragma glslify: rotateAround = require('../utils/rotateAround.glsl'); +#include "../utils/rotateAround.glsl"; -#pragma glslify: rayIntersectSphere = require('../utils/rayIntersectSphere.glsl'); +#include "../utils/rayIntersectSphere.glsl"; const float EARTH_RADIUS = 1000e3; diff --git a/src/shaders/textures/flatCloudLUT.glsl b/src/shaders/textures/flatCloudLUT.glsl index 05e8d0df4..d2bdfc317 100644 --- a/src/shaders/textures/flatCloudLUT.glsl +++ b/src/shaders/textures/flatCloudLUT.glsl @@ -5,11 +5,11 @@ varying vec2 vUV; uniform float worleyFrequency; uniform float detailFrequency; -#pragma glslify: toSphere = require(../utils/toSphere.glsl) +#include "../utils/toSphere.glsl"; -#pragma glslify: completeWorley = require(../utils/worley.glsl) +#include "../utils/worley.glsl"; -#pragma glslify: completeNoise = require(../utils/noise.glsl) +#include "../utils/noise.glsl"; void main() { vec3 sphere = toSphere(vUV); diff --git a/src/shaders/textures/ringsLUT.glsl b/src/shaders/textures/ringsLUT.glsl index b6a468389..8b4146191 100644 --- a/src/shaders/textures/ringsLUT.glsl +++ b/src/shaders/textures/ringsLUT.glsl @@ -7,9 +7,9 @@ uniform float frequency; uniform float ringStart; uniform float ringEnd; -#pragma glslify: completeNoise = require(../utils/noise1D.glsl) +#include "../utils/noise1D.glsl"; -#pragma glslify: remap = require(../utils/remap.glsl) +#include "../utils/remap.glsl"; void main() { float normalizedDistance = remap(vUV.x, 0.0, 1.0, ringStart, ringEnd); diff --git a/src/shaders/utils/applyQuaternion.glsl b/src/shaders/utils/applyQuaternion.glsl index 9aa281a20..7efb2d599 100644 --- a/src/shaders/utils/applyQuaternion.glsl +++ b/src/shaders/utils/applyQuaternion.glsl @@ -17,6 +17,4 @@ vec3 applyQuaternion(vec4 quaternion, vec3 vector) { float nZ = iz * qw + iw * -qz + ix * -qy - iy * -qx; return vec3(nX, nY, nZ); -} - -#pragma glslify: export(applyQuaternion) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/atmosphere.glsl b/src/shaders/utils/atmosphere.glsl index 0f1498dd7..e6f1875a0 100644 --- a/src/shaders/utils/atmosphere.glsl +++ b/src/shaders/utils/atmosphere.glsl @@ -1,15 +1,10 @@ -struct Atmosphere { - float radius;// atmosphere radius (calculate from planet center) - float falloff;// controls exponential opacity falloff - float sunIntensity;// controls atmosphere overall brightness - float rayleighStrength;// controls color dispersion - float mieStrength;// controls mie scattering - float densityModifier;// density of the atmosphere - float redWaveLength;// the wave length for the red part of the scattering - float greenWaveLength;// same with green - float blueWaveLength;// same with blue - float mieHaloRadius;// mie halo radius -}; -uniform Atmosphere atmosphere; - -#pragma glslify: export(atmosphere) \ No newline at end of file +uniform float atmosphere_radius; +uniform float atmosphere_falloff; +uniform float atmosphere_sunIntensity; +uniform float atmosphere_rayleighStrength; +uniform float atmosphere_mieStrength; +uniform float atmosphere_densityModifier; +uniform float atmosphere_redWaveLength; +uniform float atmosphere_greenWaveLength; +uniform float atmosphere_blueWaveLength; +uniform float atmosphere_mieHaloRadius; \ No newline at end of file diff --git a/src/shaders/utils/camera.glsl b/src/shaders/utils/camera.glsl index 591062c01..8acb1c84f 100644 --- a/src/shaders/utils/camera.glsl +++ b/src/shaders/utils/camera.glsl @@ -1,12 +1,7 @@ -struct Camera { - vec3 position; - mat4 projection; - mat4 view; - mat4 inverseProjection; - mat4 inverseView; - float near; - float far; -}; -uniform Camera camera; - -#pragma glslify: export(camera) \ No newline at end of file +uniform vec3 camera_position; +uniform mat4 camera_projection; +uniform mat4 camera_view; +uniform mat4 camera_inverseProjection; +uniform mat4 camera_inverseView; +uniform float camera_near; +uniform float camera_far; \ No newline at end of file diff --git a/src/shaders/utils/computeSpecularHighlight.glsl b/src/shaders/utils/computeSpecularHighlight.glsl index 51cf704a5..a1cea93a1 100644 --- a/src/shaders/utils/computeSpecularHighlight.glsl +++ b/src/shaders/utils/computeSpecularHighlight.glsl @@ -1,8 +1,6 @@ -float computeSpecularHighLight(vec3 sunDir, vec3 rayDir, vec3 normal, float smoothness, float specularPower) { +float computeSpecularHighlight(vec3 sunDir, vec3 rayDir, vec3 normal, float smoothness, float specularPower) { float specularAngle = acos(dot(normalize(sunDir - rayDir), normal)); float specularExponent = specularAngle / (1.0 - smoothness); return exp(-specularExponent * specularExponent) * specularPower; -} - -#pragma glslify: export(computeSpecularHighLight) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/fastAcos.glsl b/src/shaders/utils/fastAcos.glsl index 52e63e73b..2814ce823 100644 --- a/src/shaders/utils/fastAcos.glsl +++ b/src/shaders/utils/fastAcos.glsl @@ -13,6 +13,4 @@ float fastAcos(float x) { ret = ret * sqrt(1.0-x); ret = ret - 2.0 * negate * ret; return negate * 3.14159265358979 + ret; -} - -#pragma glslify: export(fastAcos) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/fractalNoise1D.glsl b/src/shaders/utils/fractalNoise1D.glsl index cc3dcce34..f900b6127 100644 --- a/src/shaders/utils/fractalNoise1D.glsl +++ b/src/shaders/utils/fractalNoise1D.glsl @@ -32,6 +32,4 @@ float completeNoise(float pos, int octaves, float decay, float persistence) { frequency /= decay; } return total / maxValue; -} - -#pragma glslify: export(completeNoise) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/fractalNoise2D.glsl b/src/shaders/utils/fractalNoise2D.glsl index e92b39889..76313dc17 100644 --- a/src/shaders/utils/fractalNoise2D.glsl +++ b/src/shaders/utils/fractalNoise2D.glsl @@ -22,6 +22,4 @@ float completeNoise(vec2 p, int nbOctaves, float decay, float lacunarity) { value += noise(samplePoint) / pow(decay, float(i)); } return value / totalAmplitude; -} - -#pragma glslify: export(completeNoise) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/lineIntersectSphere.glsl b/src/shaders/utils/lineIntersectSphere.glsl index 0ce9c931f..90fef264c 100644 --- a/src/shaders/utils/lineIntersectSphere.glsl +++ b/src/shaders/utils/lineIntersectSphere.glsl @@ -20,6 +20,4 @@ bool lineIntersectSphere(vec3 rayOrigin, vec3 rayDir, vec3 spherePosition, float t1 = max(r0, r1); return true; -} - -#pragma glslify: export(lineIntersectSphere) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/noise.glsl b/src/shaders/utils/noise.glsl index 3b50a23fb..b79843fa5 100644 --- a/src/shaders/utils/noise.glsl +++ b/src/shaders/utils/noise.glsl @@ -38,6 +38,4 @@ float completeNoise(vec3 p, int nbOctaves, float decay, float lacunarity) { value += amp * noise(samplePoint); } return value / totalAmplitude; -} - -#pragma glslify: export(completeNoise) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/noise1D.glsl b/src/shaders/utils/noise1D.glsl index b81ab5d47..79cefad2c 100644 --- a/src/shaders/utils/noise1D.glsl +++ b/src/shaders/utils/noise1D.glsl @@ -37,6 +37,4 @@ float completeNoise(float r, int nbOctaves, float decay, float lacunarity) { value += amp * noise(r * samplePointMultiplier); } return value / totalAmplitude; -} - -#pragma glslify: export(completeNoise) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/object.glsl b/src/shaders/utils/object.glsl index f5b6c7525..d950c2aa1 100644 --- a/src/shaders/utils/object.glsl +++ b/src/shaders/utils/object.glsl @@ -1,8 +1,3 @@ -struct Object { - vec3 position; - float radius; - vec3 rotationAxis; -}; -uniform Object object; - -#pragma glslify: export(object) \ No newline at end of file +uniform vec3 object_position; +uniform float object_radius; +uniform vec3 object_rotationAxis; \ No newline at end of file diff --git a/src/shaders/utils/perlin3.glsl b/src/shaders/utils/perlin3.glsl index 68f741091..483a34975 100644 --- a/src/shaders/utils/perlin3.glsl +++ b/src/shaders/utils/perlin3.glsl @@ -71,6 +71,4 @@ float perlin3(vec3 P){ vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); return 2.2 * n_xyz; -} - -#pragma glslify: export(perlin3) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/rayIntersectCube.glsl b/src/shaders/utils/rayIntersectCube.glsl index 9608a4653..2ab11d424 100644 --- a/src/shaders/utils/rayIntersectCube.glsl +++ b/src/shaders/utils/rayIntersectCube.glsl @@ -53,6 +53,4 @@ bool rayIntersectCube(vec3 rayOrigin, vec3 rayDir, out float tmax, out float tmi tmax = tzmax; return true; -} - -#pragma glslify: export(rayIntersectCube) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/rayIntersectSphere.glsl b/src/shaders/utils/rayIntersectSphere.glsl index 21c96b89a..e93701034 100644 --- a/src/shaders/utils/rayIntersectSphere.glsl +++ b/src/shaders/utils/rayIntersectSphere.glsl @@ -20,6 +20,4 @@ bool rayIntersectSphere(vec3 rayOrigin, vec3 rayDir, vec3 spherePosition, float //return true; return t1 > 0.0; -} - -#pragma glslify: export(rayIntersectSphere) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/rayIntersectsPlane.glsl b/src/shaders/utils/rayIntersectsPlane.glsl index ea5f7206e..6c8782f98 100644 --- a/src/shaders/utils/rayIntersectsPlane.glsl +++ b/src/shaders/utils/rayIntersectsPlane.glsl @@ -3,6 +3,4 @@ bool rayIntersectsPlane(vec3 rayOrigin, vec3 rayDir, vec3 planePosition, vec3 pl if (abs(denom) <= tolerance) return false;// ray is parallel to the plane t = dot(planeNormal, planePosition - rayOrigin) / denom; return t >= 0.0; -} - -#pragma glslify: export(rayIntersectsPlane) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/remap.glsl b/src/shaders/utils/remap.glsl index 559d88c42..64b66501a 100644 --- a/src/shaders/utils/remap.glsl +++ b/src/shaders/utils/remap.glsl @@ -1,6 +1,4 @@ // remap a value comprised between low1 and high1 to a value between low2 and high2 float remap(float value, float low1, float high1, float low2, float high2) { return low2 + (value - low1) * (high2 - low2) / (high1 - low1); -} - -#pragma glslify: export(remap) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/removeAxialTilt.glsl b/src/shaders/utils/removeAxialTilt.glsl index 365bde74d..cc667ba70 100644 --- a/src/shaders/utils/removeAxialTilt.glsl +++ b/src/shaders/utils/removeAxialTilt.glsl @@ -1,9 +1,5 @@ -#pragma glslify: rotateAround = require(./rotateAround.glsl) - vec3 removeAxialTilt(vec3 tiltedVector, vec3 tiltedAxis) { vec3 targetAxis = vec3(0.0, 1.0, 0.0); vec3 rotationRemovalAxis = cross(tiltedAxis, targetAxis); return rotateAround(tiltedVector, rotationRemovalAxis, acos(dot(tiltedAxis, targetAxis))); -} - -#pragma glslify: export(removeAxialTilt) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/rotateAround.glsl b/src/shaders/utils/rotateAround.glsl index b9027c941..2c3302566 100644 --- a/src/shaders/utils/rotateAround.glsl +++ b/src/shaders/utils/rotateAround.glsl @@ -2,6 +2,4 @@ vec3 rotateAround(vec3 vector, vec3 axis, float theta) { // Please note that unit vector are required, i did not divided by the norms return cos(theta) * vector + cross(axis, vector) * sin(theta) + axis * dot(axis, vector) * (1.0 - cos(theta)); -} - -#pragma glslify: export(rotateAround) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/saturate.glsl b/src/shaders/utils/saturate.glsl index 5381a4c80..d56e8e2c8 100644 --- a/src/shaders/utils/saturate.glsl +++ b/src/shaders/utils/saturate.glsl @@ -2,6 +2,4 @@ float saturate(float value) { if(value < 0.0) return 0.0; if(value > 1.0) return 1.0; return value; -} - -#pragma glslify: export(saturate) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/simplex4.glsl b/src/shaders/utils/simplex4.glsl index 1a0b4c339..0c3682323 100644 --- a/src/shaders/utils/simplex4.glsl +++ b/src/shaders/utils/simplex4.glsl @@ -141,6 +141,4 @@ float fractalSimplex4(vec4 p, int nbOctaves, float decay, float lacunarity) { value += simplex401(samplePoint) / pow(decay, float(i)); } return value / totalAmplitude; -} - -#pragma glslify: export(fractalSimplex4) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/smoothSharpener.glsl b/src/shaders/utils/smoothSharpener.glsl index 8f480f2a7..fe2c25ba6 100644 --- a/src/shaders/utils/smoothSharpener.glsl +++ b/src/shaders/utils/smoothSharpener.glsl @@ -1,6 +1,4 @@ float smoothSharpener(float x, float s) { float offset = 0.5 - (1.0 / s); return smoothstep(offset, 1.0 - offset, x); -} - -#pragma glslify: export(smoothSharpener) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/stars.glsl b/src/shaders/utils/stars.glsl index f30593127..2e659082a 100644 --- a/src/shaders/utils/stars.glsl +++ b/src/shaders/utils/stars.glsl @@ -1,9 +1,5 @@ #define MAX_STARS 5 -struct Star { - vec3 position; - float radius; - vec3 color; -}; -uniform Star stars[MAX_STARS]; -#pragma glslify: export(stars) \ No newline at end of file +uniform vec3 star_positions[MAX_STARS]; +uniform float star_radiuses[MAX_STARS]; +uniform vec3 star_colors[MAX_STARS]; \ No newline at end of file diff --git a/src/shaders/utils/theMessage.glsl b/src/shaders/utils/theMessage.glsl index 5c170eee5..7d430d26a 100644 --- a/src/shaders/utils/theMessage.glsl +++ b/src/shaders/utils/theMessage.glsl @@ -164,6 +164,4 @@ float theMessage(float x) { +0.032*cos(43.0*0.035*x) +0.051*cos(44.0*0.035*x);//+0.114*sin(44.0*0.035*x)-0.104*cos(45.0*0.035*x)-0.049*sin(45.0*0.035*x)+0.018*cos(46.0*0.035*x)+0.027*sin(46.0*0.035*x)-0.057*cos(47.0*0.035*x)+0.002*sin(47.0*0.035*x)-0.017*cos(48.0*0.035*x)+0.004*sin(48.0*0.035*x)-0.067*cos(49.0*0.035*x)+0.082*sin(49.0*0.035*x)-0.061*cos(50.0*0.035*x)-0.014*sin(50.0*0.035*x)-0.035*cos(51.0*0.035*x)+0.015*sin(51.0*0.035*x)-0.037*cos(52.0*0.035*x)+0.030*sin(52.0*0.035*x)+0.036*cos(53.0*0.035*x)+0.027*sin(53.0*0.035*x)-0.049*cos(54.0*0.035*x)+0.092*sin(54.0*0.035*x)-0.013*cos(55.0*0.035*x)+0.030*sin(55.0*0.035*x)-0.059*cos(56.0*0.035*x)+0.023*sin(56.0*0.035*x)-0.015*cos(57.0*0.035*x)-0.006*sin(57.0*0.035*x)+0.018*cos(58.0*0.035*x)-0.020*sin(58.0*0.035*x)+0.017*cos(59.0*0.035*x)+0.002*sin(59.0*0.035*x)-0.025*cos(60.0*0.035*x)-0.017*sin(60.0*0.035*x)+0.003*cos(61.0*0.035*x)+0.005*sin(61.0*0.035*x)-0.010*cos(62.0*0.035*x)-0.045*sin(62.0*0.035*x)+0.009*cos(63.0*0.035*x)-0.019*sin(63.0*0.035*x)-0.002*cos(64.0*0.035*x)+0.002*sin(64.0*0.035*x)-0.034*cos(65.0*0.035*x)+0.040*sin(65.0*0.035*x)+0.010*cos(66.0*0.035*x)-0.003*sin(66.0*0.035*x)+0.004*cos(67.0*0.035*x)+0.028*sin(67.0*0.035*x)-0.023*cos(68.0*0.035*x)-0.006*sin(68.0*0.035*x)-0.003*cos(69.0*0.035*x)+0.001*sin(69.0*0.035*x)-0.009*cos(70.0*0.035*x)-0.031*sin(70.0*0.035*x)-0.007*cos(71.0*0.035*x)+0.016*sin(71.0*0.035*x)+0.021*cos(72.0*0.035*x)+0.009*sin(72.0*0.035*x)-0.005*cos(73.0*0.035*x)+0.001*sin(73.0*0.035*x)-0.010*cos(74.0*0.035*x)+0.027*sin(74.0*0.035*x)-0.016*cos(75.0*0.035*x)+0.006*sin(75.0*0.035*x)-0.020*cos(76.0*0.035*x)+0.005*sin(76.0*0.035*x)-0.012*cos(77.0*0.035*x)+0.007*sin(77.0*0.035*x)-0.009*cos(78.0*0.035*x)+0.011*sin(78.0*0.035*x)-0.016*cos(79.0*0.035*x)+0.003*sin(79.0*0.035*x)-0.008*cos(80.0*0.035*x)+0.018*sin(80.0*0.035*x)-0.005*cos(81.0*0.035*x)-0.011*sin(81.0*0.035*x)+0.006*cos(82.0*0.035*x)+0.010*sin(82.0*0.035*x)+0.003*cos(83.0*0.035*x)+0.005*sin(83.0*0.035*x)+0.005*cos(84.0*0.035*x)+0.007*sin(84.0*0.035*x)-0.005*cos(85.0*0.035*x)+0.008*sin(85.0*0.035*x)-0.001*cos(86.0*0.035*x)-0.002*sin(86.0*0.035*x)+0.001*cos(87.0*0.035*x)+0.001*sin(87.0*0.035*x)-0.001*cos(88.0*0.035*x)+0.001*sin(88.0*0.035*x)+0.001*cos(89.0*0.035*x)+0.003*sin(89.0*0.035*x)+0.001*cos(90.0*0.035*x)+0.004*sin(90.0*0.035*x)-0.001*cos(91.0*0.035*x)+0.006*sin(91.0*0.035*x)+0.001*cos(92.0*0.035*x)+0.006*sin(92.0*0.035*x)-0.001*cos(93.0*0.035*x)+0.008*sin(93.0*0.035*x)-0.004*cos(94.0*0.035*x)+0.000*sin(94.0*0.035*x)+0.004*cos(95.0*0.035*x)+0.001*sin(95.0*0.035*x)+0.003*cos(96.0*0.035*x)+0.002*sin(96.0*0.035*x)+0.004*cos(97.0*0.035*x)-0.001*sin(97.0*0.035*x)-0.004*cos(98.0*0.035*x)+0.013*sin(98.0*0.035*x)-0.005*cos(99.0*0.035*x)-0.006*sin(99.0*0.035*x)-0.010*cos(100.0*0.035*x)+0.004*sin(100.0*0.035*x)-0.005*cos(101.0*0.035*x)-0.001*sin(101.0*0.035*x)-0.007*cos(102.0*0.035*x)+0.002*sin(102.0*0.035*x)-0.011*cos(103.0*0.035*x)+0.003*sin(103.0*0.035*x)-0.008*cos(104.0*0.035*x)+0.002*sin(104.0*0.035*x)-0.005*cos(105.0*0.035*x)-0.008*sin(105.0*0.035*x)-0.002*cos(106.0*0.035*x)+0.005*sin(106.0*0.035*x)+0.010*cos(107.0*0.035*x)+0.001*sin(107.0*0.035*x)-0.003*cos(108.0*0.035*x)-0.002*sin(108.0*0.035*x)-0.004*cos(109.0*0.035*x)+0.017*sin(109.0*0.035*x)-0.001*cos(110.0*0.035*x)+0.004*sin(110.0*0.035*x)-0.009*cos(111.0*0.035*x)+0.007*sin(111.0*0.035*x)+0.002*cos(112.0*0.035*x)-0.005*sin(112.0*0.035*x)+0.004*cos(113.0*0.035*x)+0.005*sin(113.0*0.035*x)-0.011*cos(114.0*0.035*x)-0.009*sin(114.0*0.035*x)-0.001*cos(115.0*0.035*x)+0.004*sin(115.0*0.035*x)+0.003*cos(116.0*0.035*x)+0.010*sin(116.0*0.035*x)-0.003*cos(117.0*0.035*x)+0.017*sin(117.0*0.035*x)+0.001*cos(118.0*0.035*x)+0.003*sin(118.0*0.035*x)-0.006*cos(119.0*0.035*x)+0.008*sin(119.0*0.035*x)+0.004*cos(120.0*0.035*x)+0.003*sin(120.0*0.035*x)+0.004*cos(121.0*0.035*x)+0.008*sin(121.0*0.035*x)-0.003*cos(122.0*0.035*x)+0.005*sin(122.0*0.035*x)-0.012*cos(123.0*0.035*x)-0.001*sin(123.0*0.035*x)-0.003*cos(124.0*0.035*x)-0.002*sin(124.0*0.035*x)-0.009*cos(125.0*0.035*x)-0.014*sin(125.0*0.035*x)+0.006*cos(126.0*0.035*x)-0.001*sin(126.0*0.035*x)-0.006*cos(127.0*0.035*x)-0.002*sin(127.0*0.035*x)-0.006*cos(128.0*0.035*x)+0.001*sin(128.0*0.035*x)-0.009*cos(129.0*0.035*x)+0.006*sin(129.0*0.035*x)-0.010*cos(130.0*0.035*x)-0.008*sin(130.0*0.035*x)-0.002*cos(131.0*0.035*x)+0.003*sin(131.0*0.035*x)-0.007*cos(132.0*0.035*x)+0.003*sin(132.0*0.035*x)+0.002*cos(133.0*0.035*x)+0.000*sin(133.0*0.035*x)-0.012*cos(134.0*0.035*x)+0.009*sin(134.0*0.035*x)+0.005*cos(135.0*0.035*x)-0.009*sin(135.0*0.035*x)+0.003*cos(136.0*0.035*x)+0.003*sin(136.0*0.035*x)+0.008*cos(137.0*0.035*x)-0.002*sin(137.0*0.035*x)+0.012*cos(138.0*0.035*x)+0.005*sin(138.0*0.035*x)-0.000*cos(139.0*0.035*x)+0.004*sin(139.0*0.035*x)+0.004*cos(140.0*0.035*x)-0.004*sin(140.0*0.035*x)+0.004*cos(141.0*0.035*x)-0.000*sin(141.0*0.035*x)-0.000*cos(142.0*0.035*x)-0.006*sin(142.0*0.035*x)+0.005*cos(143.0*0.035*x)+0.005*sin(143.0*0.035*x)-0.003*cos(144.0*0.035*x)-0.005*sin(144.0*0.035*x)-0.002*cos(145.0*0.035*x)-0.000*sin(145.0*0.035*x)+0.001*cos(146.0*0.035*x)-0.001*sin(146.0*0.035*x)+0.003*cos(147.0*0.035*x)+0.001*sin(147.0*0.035*x)+0.000*cos(148.0*0.035*x)+0.004*sin(148.0*0.035*x)+0.003*cos(149.0*0.035*x)+0.004*sin(149.0*0.035*x)-0.005*cos(150.0*0.035*x)+0.003*sin(150.0*0.035*x)+0.001*cos(151.0*0.035*x)+0.005*sin(151.0*0.035*x)-0.000*cos(152.0*0.035*x)-0.000*sin(152.0*0.035*x)-0.006*cos(153.0*0.035*x)-0.002*sin(153.0*0.035*x)-0.000*cos(154.0*0.035*x)+0.004*sin(154.0*0.035*x)+0.003*cos(155.0*0.035*x)+0.004*sin(155.0*0.035*x)-0.001*cos(156.0*0.035*x)+0.005*sin(156.0*0.035*x)+0.001*cos(157.0*0.035*x)-0.000*sin(157.0*0.035*x)+0.002*cos(158.0*0.035*x)+0.003*sin(158.0*0.035*x)-0.003*cos(159.0*0.035*x)+0.001*sin(159.0*0.035*x)-0.003*cos(160.0*0.035*x)+0.002*sin(160.0*0.035*x)+0.000*cos(161.0*0.035*x)+0.003*sin(161.0*0.035*x)+0.001*cos(162.0*0.035*x)+0.003*sin(162.0*0.035*x)-0.001*cos(163.0*0.035*x)+0.002*sin(163.0*0.035*x)+0.000*cos(164.0*0.035*x)+0.003*sin(164.0*0.035*x)-0.000*cos(165.0*0.035*x)+0.002*sin(165.0*0.035*x)+0.000*cos(166.0*0.035*x)+0.002*sin(166.0*0.035*x)+0.000*cos(167.0*0.035*x)+0.002*sin(167.0*0.035*x)-0.000*cos(168.0*0.035*x)+0.002*sin(168.0*0.035*x)+0.000*cos(169.0*0.035*x)+0.002*sin(169.0*0.035*x)+0.000*cos(170.0*0.035*x)+0.002*sin(170.0*0.035*x)-0.000*cos(171.0*0.035*x)+0.002*sin(171.0*0.035*x)+0.000*cos(172.0*0.035*x)+0.002*sin(172.0*0.035*x)-0.000*cos(173.0*0.035*x)+0.002*sin(173.0*0.035*x)+0.000*cos(174.0*0.035*x)+0.002*sin(174.0*0.035*x)+0.000*cos(175.0*0.035*x)+0.002*sin(175.0*0.035*x)+0.000*cos(176.0*0.035*x)+0.002*sin(176.0*0.035*x)+0.000*cos(177.0*0.035*x)+0.002*sin(177.0*0.035*x)+0.000*cos(178.0*0.035*x)+0.002*sin(178.0*0.035*x)-0.000*cos(179.0*0.035*x)+0.002*sin(179.0*0.035*x)+0.000*cos(180.0*0.035*x)+0.002*sin(180.0*0.035*x)+0.000*cos(181.0*0.035*x)+0.002*sin(181.0*0.035*x)+0.000*cos(182.0*0.035*x)+0.002*sin(182.0*0.035*x)+0.000*cos(183.0*0.035*x)+0.002*sin(183.0*0.035*x)+0.000*cos(184.0*0.035*x)+0.002*sin(184.0*0.035*x)-0.000*cos(185.0*0.035*x)+0.002*sin(185.0*0.035*x)+0.000*cos(186.0*0.035*x)+0.002*sin(186.0*0.035*x)-0.000*cos(187.0*0.035*x)+0.002*sin(187.0*0.035*x)+0.000*cos(188.0*0.035*x)+0.002*sin(188.0*0.035*x)+0.000*cos(189.0*0.035*x)+0.002*sin(189.0*0.035*x)-0.000*cos(190.0*0.035*x)+0.002*sin(190.0*0.035*x)+0.000*cos(191.0*0.035*x)+0.002*sin(191.0*0.035*x)+0.000*cos(192.0*0.035*x)+0.002*sin(192.0*0.035*x)-0.000*cos(193.0*0.035*x)+0.002*sin(193.0*0.035*x)+0.000*cos(194.0*0.035*x)+0.001*sin(194.0*0.035*x)-0.001*cos(195.0*0.035*x)+0.002*sin(195.0*0.035*x)+0.001*cos(196.0*0.035*x)+0.001*sin(196.0*0.035*x)+0.000*cos(197.0*0.035*x)+0.001*sin(197.0*0.035*x)-0.002*cos(198.0*0.035*x)+0.002*sin(198.0*0.035*x)-0.002*cos(199.0*0.035*x)+0.002*sin(199.0*0.035*x)+0.001*cos(200.0*0.035*x)+0.001*sin(200.0*0.035*x); */ -} - -#pragma glslify: export(theMessage) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/toSphere.glsl b/src/shaders/utils/toSphere.glsl index da5356fed..b6babe6e3 100644 --- a/src/shaders/utils/toSphere.glsl +++ b/src/shaders/utils/toSphere.glsl @@ -11,6 +11,4 @@ vec3 toSphere(in vec2 uv) cos(phi), sin(theta) * sin(phi) ); -} - -#pragma glslify: export(toSphere) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/toUV.glsl b/src/shaders/utils/toUV.glsl index 926295559..e28576cb4 100644 --- a/src/shaders/utils/toUV.glsl +++ b/src/shaders/utils/toUV.glsl @@ -10,6 +10,4 @@ vec2 toUV(in vec3 n) uv.y = acos(n.y) / PI; return uv; -} - -#pragma glslify: export(toUV) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/triplanarNormal.glsl b/src/shaders/utils/triplanarNormal.glsl index ce6f23a3d..b971b18ed 100644 --- a/src/shaders/utils/triplanarNormal.glsl +++ b/src/shaders/utils/triplanarNormal.glsl @@ -31,6 +31,4 @@ vec3 triplanarNormal(vec3 position, vec3 surfaceNormal, sampler2D normalMap, flo tNormalZ.xyz * blendWeight.z + surfaceNormal ); -} - -#pragma glslify: export(triplanarNormal) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/uvFromWorld.glsl b/src/shaders/utils/uvFromWorld.glsl index d16891378..e5680434c 100644 --- a/src/shaders/utils/uvFromWorld.glsl +++ b/src/shaders/utils/uvFromWorld.glsl @@ -1,9 +1,6 @@ -vec2 uvFromWorld(vec3 pos) { +vec2 uvFromWorld(vec3 pos, mat4 projection, mat4 view) { vec4 uvRaw = projection * view * vec4(pos, 1.0); vec2 uv = uvRaw.xy / uvRaw.w; - uv += vec2(1.0); - uv /= 2.0; + uv = (uv + 1.0) / 2.0; return uv; -} - -#pragma glslify: export(uvFromWorld) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/vec3Lerp.glsl b/src/shaders/utils/vec3Lerp.glsl index ceace323b..d54cf1385 100644 --- a/src/shaders/utils/vec3Lerp.glsl +++ b/src/shaders/utils/vec3Lerp.glsl @@ -1,5 +1,3 @@ vec3 lerp(vec3 v1, vec3 v2, float s) { return s * v1 + (1.0 - s) * v2; -} - -#pragma glslify: export(lerp) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/utils/worldFromUV.glsl b/src/shaders/utils/worldFromUV.glsl index 7088f6840..65970f462 100644 --- a/src/shaders/utils/worldFromUV.glsl +++ b/src/shaders/utils/worldFromUV.glsl @@ -2,11 +2,9 @@ // This is an evolution from the code found here // https://forum.babylonjs.com/t/pixel-position-in-world-space-from-fragment-postprocess-shader-issue/30232 // This is a revised version that works with the reverse depth buffer -vec3 worldFromUV(vec2 pos) { - vec4 ndc = vec4(-pos.xy * 2.0 + 1.0, -1.0, -1.0); // get ndc position (z = -1 because the depth buffer is reversed) +vec3 worldFromUV(vec2 pos, mat4 inverseProjection, mat4 inverseView) { + vec4 ndc = vec4(pos.xy * 2.0 - 1.0, 1.0, 1.0); // get ndc position (z = 1 because the depth buffer is reversed) vec4 posVS = inverseProjection * ndc; // unproject the ndc coordinates : we are now in view space if i understand correctly - vec4 posWS = inverseView * vec4((posVS.xyz / posVS.w), 1.0); // then we use inverse view to get to world space, division by w to get actual coordinates - return posWS.xyz; // the coordinates in world space -} - -#pragma glslify: export(worldFromUV) \ No newline at end of file + vec4 posWS = inverseView * vec4(posVS.xyz, 1.0); // then we use inverse view to get to world space, division by w to get actual coordinates + return posWS.xyz / posWS.w; // the coordinates in world space +} \ No newline at end of file diff --git a/src/shaders/utils/worley.glsl b/src/shaders/utils/worley.glsl index 1ee2bce5c..305805a16 100644 --- a/src/shaders/utils/worley.glsl +++ b/src/shaders/utils/worley.glsl @@ -64,6 +64,4 @@ float completeWorley(vec3 p, int nbOctaves, float decay, float lacunarity) { value += worley(samplePoint) / pow(decay, float(i)); } return value / totalAmplitude; -} - -#pragma glslify: export(completeWorley) \ No newline at end of file +} \ No newline at end of file diff --git a/src/shaders/volumetricCloudsFragment.glsl b/src/shaders/volumetricCloudsFragment.glsl index d73a42103..01ae43461 100644 --- a/src/shaders/volumetricCloudsFragment.glsl +++ b/src/shaders/volumetricCloudsFragment.glsl @@ -11,31 +11,31 @@ uniform sampler2D textureSampler;// the original screen texture uniform sampler2D depthSampler;// the depth map of the camera uniform int nbStars;// number of stars -#pragma glslify: stars = require(./utils/stars.glsl) +#include "./utils/stars.glsl"; -#pragma glslify: camera = require(./utils/camera.glsl) +#include "./utils/camera.glsl"; -#pragma glslify: object = require(./utils/object.glsl) +#include "./utils/object.glsl"; uniform float cloudLayerMaxHeight;// atmosphere radius (calculate from planet center) uniform float cloudLayerMinHeight; -#pragma glslify: remap = require(./utils/remap.glsl) +#include "./utils/remap.glsl"; -#pragma glslify: saturate = require(./utils/saturate.glsl) +#include "./utils/saturate.glsl"; -#pragma glslify: completeNoise = require(./utils/noise.glsl) +#include "./utils/noise.glsl"; -#pragma glslify: smoothSharpener = require(./utils/smoothSharpener.glsl) +#include "./utils/smoothSharpener.glsl"; -#pragma glslify: completeWorley = require(./utils/worley.glsl) +#include "./utils/worley.glsl"; -#pragma glslify: worldFromUV = require(./utils/worldFromUV.glsl, inverseProjection=camera.inverseProjection, inverseView=camera.inverseView) +#include "./utils/worldFromUV.glsl"; -#pragma glslify: rayIntersectSphere = require(./utils/rayIntersectSphere.glsl) +#include "./utils/rayIntersectSphere.glsl"; float densityAtPoint(vec3 densitySamplePoint) { - vec3 samplePoint = densitySamplePoint - object.position; + vec3 samplePoint = densitySamplePoint - object_position; vec3 unitSamplePoint = normalize(samplePoint); float height = length(samplePoint); float height01 = (height - cloudLayerMinHeight) / (cloudLayerMaxHeight - cloudLayerMinHeight); @@ -63,9 +63,9 @@ const float lightAbsorptionTowardSun = 0.94; const float lightAbsorptionThroughClouds = 0.85; float lightMarch(vec3 position) { - vec3 sunDir = normalize(stars[i].position - position); + vec3 sunDir = normalize(star_positions[i] - position); float t0, t1; - rayIntersectSphere(position, sunDir, object.position, cloudLayerMaxHeight, t0, t1); + rayIntersectSphere(position, sunDir, object_position, cloudLayerMaxHeight, t0, t1); float stepSize = t0 / float(OPTICAL_DEPTH_POINTS - 1); float totalDensity = 0.0; @@ -80,7 +80,7 @@ float lightMarch(vec3 position) { vec3 clouds(vec3 rayOrigin, vec3 rayDir, float distance, vec3 originalColor, vec3 geometryImpact) { vec3 samplePoint = rayOrigin;// first sampling point coming from camera ray - vec3 samplePointPlanetSpace = rayOrigin - object.position; + vec3 samplePointPlanetSpace = rayOrigin - object_position; float stepSize = distance / float(POINTS_FROM_CAMERA - 1);// the ray length between sample points @@ -89,7 +89,7 @@ vec3 clouds(vec3 rayOrigin, vec3 rayDir, float distance, vec3 originalColor, vec float transmittance = 1.0; vec3 lightEnergy = vec3(0.0); - float costheta = dot(rayDir, normalize(stars[0].position - object.position)); + float costheta = dot(rayDir, normalize(star_positions[0] - object_position)); float phaseCloud = HenyeyGreenstein(0.3, costheta); for (int i = 0; i < POINTS_FROM_CAMERA; i++) { @@ -107,7 +107,7 @@ vec3 clouds(vec3 rayOrigin, vec3 rayDir, float distance, vec3 originalColor, vec /*vec3 sunDir = normalize(stars[0].position - geometryImpact); float t0, t1; - rayIntersectSphere(geometryImpact, sunDir, object.position, cloudLayerMaxHeight, t0, t1); + rayIntersectSphere(geometryImpact, sunDir, object_position, cloudLayerMaxHeight, t0, t1); stepSize = t1 / float(OPTICAL_DEPTH_POINTS - 1); samplePoint = geometryImpact; @@ -126,10 +126,10 @@ vec3 clouds(vec3 rayOrigin, vec3 rayDir, float distance, vec3 originalColor, vec } vec3 scatter(vec3 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDistance) { - float height = length(rayOrigin - object.position); + float height = length(rayOrigin - object_position); float impactPoint, escapePoint; - if (!(rayIntersectSphere(rayOrigin, rayDir, object.position, cloudLayerMaxHeight, impactPoint, escapePoint))) { + if (!(rayIntersectSphere(rayOrigin, rayDir, object_position, cloudLayerMaxHeight, impactPoint, escapePoint))) { return originalColor;// if not intersecting with atmosphere, return original color } @@ -137,7 +137,7 @@ vec3 scatter(vec3 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDista escapePoint = min(maximumDistance, escapePoint);// occlusion with other scene objects float impactPoint2, escapePoint2; - if (rayIntersectSphere(rayOrigin, rayDir, object.position, cloudLayerMinHeight, impactPoint2, escapePoint2)) { + if (rayIntersectSphere(rayOrigin, rayDir, object_position, cloudLayerMinHeight, impactPoint2, escapePoint2)) { escapePoint = min(maximumDistance, impactPoint2); } @@ -149,7 +149,7 @@ vec3 scatter(vec3 originalColor, vec3 rayOrigin, vec3 rayDir, float maximumDista vec3 firstPointInCloudLayer = rayOrigin + rayDir * impactPoint;// the first atmosphere point to be hit by the ray - vec3 firstPointPlanetSpace = firstPointInCloudLayer - object.position; + vec3 firstPointPlanetSpace = firstPointInCloudLayer - object_position; return clouds(firstPointInCloudLayer, rayDir, distanceThroughClouds, originalColor, rayOrigin + rayDir * maximumDistance); } @@ -159,14 +159,14 @@ void main() { float depth = texture2D(depthSampler, vUV).r;// the depth corresponding to the pixel in the depth map - vec3 pixelWorldPosition = worldFromUV(vUV);// the pixel position in world space (near plane) + vec3 pixelWorldPosition = worldFromUV(vUV, camera_inverseProjection, camera_inverseView);// the pixel position in world space (near plane) // actual depth of the scene - float maximumDistance = length(pixelWorldPosition - camera.position) * remap(depth, 0.0, 1.0, camera.near, camera.far); + float maximumDistance = length(pixelWorldPosition - camera_position) * remap(depth, 0.0, 1.0, camera_near, camera_far); - vec3 rayDir = normalize(pixelWorldPosition - camera.position);// normalized direction of the ray + vec3 rayDir = normalize(pixelWorldPosition - camera_position);// normalized direction of the ray - vec3 finalColor = scatter(screenColor, camera.position, rayDir, maximumDistance);// the color to be displayed on the screen + vec3 finalColor = scatter(screenColor, camera_position, rayDir, maximumDistance);// the color to be displayed on the screen gl_FragColor = vec4(finalColor, 1.0);// displaying the final color } \ No newline at end of file diff --git a/src/ts/cosmosJourneyer.ts b/src/ts/cosmosJourneyer.ts index f01a3641a..3c2757325 100644 --- a/src/ts/cosmosJourneyer.ts +++ b/src/ts/cosmosJourneyer.ts @@ -114,15 +114,6 @@ export class CosmosJourneyer { // Starmap is the active scene by default this.activeScene = this.starMap.scene; - - // When everything is ready, hide the loading screen and start the render loop - this.starSystemView.scene.executeWhenReady(() => { - this.getEngine().loadingScreen.hideLoadingUI(); - this.getEngine().runRenderLoop(() => { - if (this.isPaused()) return; - this.getActiveScene().render(); - }); - }); } public pause(): void { @@ -144,6 +135,12 @@ export class CosmosJourneyer { */ public init(): void { this.getStarSystemView().init(); + + this.getEngine().loadingScreen.hideLoadingUI(); + this.getEngine().runRenderLoop(() => { + if (this.isPaused()) return; + this.getActiveScene().render(); + }); } /** diff --git a/src/ts/planemos/gasPlanet/gasPlanetMaterial.ts b/src/ts/planemos/gasPlanet/gasPlanetMaterial.ts index 2805376ae..6219c2a2f 100644 --- a/src/ts/planemos/gasPlanet/gasPlanetMaterial.ts +++ b/src/ts/planemos/gasPlanet/gasPlanetMaterial.ts @@ -13,10 +13,7 @@ import { Color3 } from "@babylonjs/core/Maths/math.color"; import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { TransformNode } from "@babylonjs/core/Meshes"; import { Star } from "../../stellarObjects/star/star"; - -const shaderName = "gasPlanetMaterial"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = surfaceMaterialFragment; -Effect.ShadersStore[`${shaderName}VertexShader`] = surfaceMaterialVertex; +import { flattenVector3Array } from "../../utils/algebra"; export class GasPlanetMaterial extends ShaderMaterial { readonly planet: TransformNode; @@ -24,9 +21,17 @@ export class GasPlanetMaterial extends ShaderMaterial { private clock = 0; constructor(planetName: string, planet: TransformNode, model: GasPlanetModel, scene: Scene) { + const shaderName = "gasPlanetMaterial"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = surfaceMaterialFragment; + } + if(Effect.ShadersStore[`${shaderName}VertexShader`] === undefined) { + Effect.ShadersStore[`${shaderName}VertexShader`] = surfaceMaterialVertex; + } + super(`${planetName}GasSurfaceColor`, scene, shaderName, { attributes: ["position", "normal"], - uniforms: ["world", "worldViewProjection", "normalMatrix", "seed", "stars", "nbStars", "color1", "color2", "color3", "colorSharpness", "time", "playerPosition"] + uniforms: ["world", "worldViewProjection", "normalMatrix", "seed", "star_positions", "star_colors", "nbStars", "color1", "color2", "color3", "colorSharpness", "time", "playerPosition"] }); this.planet = planet; @@ -67,11 +72,8 @@ export class GasPlanetMaterial extends ShaderMaterial { this.setVector3("playerPosition", player.getActiveCamera().getAbsolutePosition()); - for (let i = 0; i < stellarObjects.length; i++) { - const star = stellarObjects[i]; - this.setVector3(`stars[${i}].position`, star.getTransform().getAbsolutePosition()); - this.setVector3(`stars[${i}].color`, star instanceof Star ? star.model.surfaceColor : Vector3.One()); - } + this.setArray3("star_positions", flattenVector3Array(stellarObjects.map(star => star.getTransform().getAbsolutePosition()))); + this.setArray3("star_colors", flattenVector3Array(stellarObjects.map(star => star instanceof Star ? star.model.surfaceColor : Vector3.One()))) this.setInt("nbStars", stellarObjects.length); this.setFloat("time", this.clock % 100000); diff --git a/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts b/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts index 59f8653ca..d0bf7c9c3 100644 --- a/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts +++ b/src/ts/planemos/telluricPlanemo/telluricPlanemoMaterial.ts @@ -14,10 +14,7 @@ import { TransformNode } from "@babylonjs/core/Meshes"; import { getInverseRotationMatrix } from "../../uberCore/transforms/basicTransform"; import { StellarObject } from "../../stellarObjects/stellarObject"; import { Star } from "../../stellarObjects/star/star"; - -const shaderName = "surfaceMaterial"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = surfaceMaterialFragment; -Effect.ShadersStore[`${shaderName}VertexShader`] = surfaceMaterialVertex; +import { flattenVector3Array } from "../../utils/algebra"; /** * The material for telluric planemos. @@ -44,6 +41,14 @@ export class TelluricPlanemoMaterial extends ShaderMaterial { * @param scene */ constructor(planetName: string, planet: TransformNode, model: TelluricPlanemoModel, scene: UberScene) { + const shaderName = "surfaceMaterial"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = surfaceMaterialFragment; + } + if(Effect.ShadersStore[`${shaderName}VertexShader`] === undefined) { + Effect.ShadersStore[`${shaderName}VertexShader`] = surfaceMaterialVertex; + } + super(`${planetName}SurfaceColor`, scene, shaderName, { attributes: ["position", "normal"], uniforms: [ @@ -69,7 +74,8 @@ export class TelluricPlanemoMaterial extends ShaderMaterial { "planetPosition", "planetRadius", - "stars", + "star_positions", + "star_colors", "nbStars", "planetInverseRotationMatrix", @@ -176,11 +182,8 @@ export class TelluricPlanemoMaterial extends ShaderMaterial { this.setVector3("playerPosition", activeControllerPosition); - for (let i = 0; i < stellarObjects.length; i++) { - const star = stellarObjects[i]; - this.setVector3(`stars[${i}].position`, star.getTransform().getAbsolutePosition()); - this.setVector3(`stars[${i}].color`, star instanceof Star ? star.model.surfaceColor : Vector3.One()); - } + this.setArray3("star_positions", flattenVector3Array(stellarObjects.map(star => star.getTransform().getAbsolutePosition()))); + this.setArray3("star_colors", flattenVector3Array(stellarObjects.map(star => star instanceof Star ? star.model.surfaceColor : Vector3.One()))) this.setInt("nbStars", stellarObjects.length); this.setVector3("planetPosition", this.planemoTransform.getAbsolutePosition()); diff --git a/src/ts/postProcesses/atmosphericScatteringPostProcess.ts b/src/ts/postProcesses/atmosphericScatteringPostProcess.ts index 9ac37f67e..497440fc0 100644 --- a/src/ts/postProcesses/atmosphericScatteringPostProcess.ts +++ b/src/ts/postProcesses/atmosphericScatteringPostProcess.ts @@ -12,9 +12,6 @@ import { ObjectPostProcess } from "./objectPostProcess"; import { UniformEnumType, ShaderSamplers, ShaderUniforms, SamplerEnumType } from "../uberCore/postProcesses/types"; import { StellarObject } from "../stellarObjects/stellarObject"; -const shaderName = "atmosphericScattering"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = atmosphericScatteringFragment; - export interface AtmosphereUniforms { atmosphereRadius: number; falloffFactor: number; @@ -33,6 +30,12 @@ export class AtmosphericScatteringPostProcess extends UberPostProcess implements readonly object: TelluricPlanemo | GasPlanet; constructor(name: string, planet: TelluricPlanemo | GasPlanet, atmosphereHeight: number, scene: UberScene, stellarObjects: StellarObject[]) { + + const shaderName = "atmosphericScattering"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = atmosphericScatteringFragment; + } + const atmosphereUniforms: AtmosphereUniforms = { atmosphereRadius: planet.getBoundingRadius() + atmosphereHeight, falloffFactor: 10, @@ -51,70 +54,70 @@ export class AtmosphericScatteringPostProcess extends UberPostProcess implements ...getStellarObjectsUniforms(stellarObjects), ...getActiveCameraUniforms(scene), { - name: "atmosphere.radius", + name: "atmosphere_radius", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.atmosphereRadius; } }, { - name: "atmosphere.falloff", + name: "atmosphere_falloff", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.falloffFactor; } }, { - name: "atmosphere.sunIntensity", + name: "atmosphere_sunIntensity", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.intensity; } }, { - name: "atmosphere.rayleighStrength", + name: "atmosphere_rayleighStrength", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.rayleighStrength; } }, { - name: "atmosphere.mieStrength", + name: "atmosphere_mieStrength", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.mieStrength; } }, { - name: "atmosphere.densityModifier", + name: "atmosphere_densityModifier", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.densityModifier; } }, { - name: "atmosphere.redWaveLength", + name: "atmosphere_redWaveLength", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.redWaveLength; } }, { - name: "atmosphere.greenWaveLength", + name: "atmosphere_greenWaveLength", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.greenWaveLength; } }, { - name: "atmosphere.blueWaveLength", + name: "atmosphere_blueWaveLength", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.blueWaveLength; } }, { - name: "atmosphere.mieHaloRadius", + name: "atmosphere_mieHaloRadius", type: UniformEnumType.Float, get: () => { return atmosphereUniforms.mieHaloRadius; diff --git a/src/ts/postProcesses/blackHolePostProcess.ts b/src/ts/postProcesses/blackHolePostProcess.ts index 2431af8b3..fb48e1e99 100644 --- a/src/ts/postProcesses/blackHolePostProcess.ts +++ b/src/ts/postProcesses/blackHolePostProcess.ts @@ -10,9 +10,6 @@ import { UniformEnumType, ShaderSamplers, ShaderUniforms, SamplerEnumType } from import { Matrix, Quaternion } from "@babylonjs/core/Maths/math"; import { BlackHole } from "../stellarObjects/blackHole/blackHole"; -const shaderName = "blackhole"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = blackHoleFragment; - export type BlackHoleSettings = { accretionDiskRadius: number; rotationPeriod: number; @@ -23,6 +20,12 @@ export class BlackHolePostProcess extends UberPostProcess implements ObjectPostP readonly object: BlackHole; constructor(blackHole: BlackHole, scene: UberScene, starfieldRotation: Quaternion) { + + const shaderName = "blackhole"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = blackHoleFragment; + } + const settings: BlackHoleSettings = { accretionDiskRadius: blackHole.model.physicalProperties.accretionDiskRadius, rotationPeriod: 1.5 diff --git a/src/ts/postProcesses/flatCloudsPostProcess.ts b/src/ts/postProcesses/flatCloudsPostProcess.ts index 4f0cba863..67fbf5b8d 100644 --- a/src/ts/postProcesses/flatCloudsPostProcess.ts +++ b/src/ts/postProcesses/flatCloudsPostProcess.ts @@ -15,9 +15,6 @@ import { ProceduralTexture } from "@babylonjs/core/Materials/Textures/Procedural import { Scene } from "@babylonjs/core/scene"; import flatCloudLUT from "../../shaders/textures/flatCloudLUT.glsl"; -const shaderName = "flatClouds"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = flatCloudsFragment; - export interface CloudUniforms { layerRadius: number; smoothness: number; @@ -38,6 +35,12 @@ export class FlatCloudsPostProcess extends UberPostProcess implements ObjectPost readonly lut: ProceduralTexture; constructor(name: string, planet: TelluricPlanemo, cloudLayerHeight: number, scene: UberScene, stellarObjects: StellarObject[]) { + + const shaderName = "flatClouds"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = flatCloudsFragment; + } + const cloudUniforms: CloudUniforms = { layerRadius: planet.getBoundingRadius() + cloudLayerHeight, specularPower: 2, @@ -58,70 +61,70 @@ export class FlatCloudsPostProcess extends UberPostProcess implements ObjectPost ...getStellarObjectsUniforms(stellarObjects), ...getActiveCameraUniforms(scene), { - name: "clouds.layerRadius", + name: "clouds_layerRadius", type: UniformEnumType.Float, get: () => { return cloudUniforms.layerRadius; } }, { - name: "clouds.frequency", + name: "clouds_frequency", type: UniformEnumType.Float, get: () => { return cloudUniforms.frequency; } }, { - name: "clouds.detailFrequency", + name: "clouds_detailFrequency", type: UniformEnumType.Float, get: () => { return cloudUniforms.detailFrequency; } }, { - name: "clouds.coverage", + name: "clouds_coverage", type: UniformEnumType.Float, get: () => { return cloudUniforms.coverage; } }, { - name: "clouds.sharpness", + name: "clouds_sharpness", type: UniformEnumType.Float, get: () => { return cloudUniforms.sharpness; } }, { - name: "clouds.color", + name: "clouds_color", type: UniformEnumType.Color3, get: () => { return cloudUniforms.color; } }, { - name: "clouds.worleySpeed", + name: "clouds_worleySpeed", type: UniformEnumType.Float, get: () => { return cloudUniforms.worleySpeed; } }, { - name: "clouds.detailSpeed", + name: "clouds_detailSpeed", type: UniformEnumType.Float, get: () => { return cloudUniforms.detailSpeed; } }, { - name: "clouds.smoothness", + name: "clouds_smoothness", type: UniformEnumType.Float, get: () => { return cloudUniforms.smoothness; } }, { - name: "clouds.specularPower", + name: "clouds_specularPower", type: UniformEnumType.Float, get: () => { return cloudUniforms.specularPower; @@ -157,11 +160,18 @@ export class FlatCloudsPostProcess extends UberPostProcess implements ObjectPost } static CreateLUT(worleyFrequency: number, detailFrequency: number, scene: Scene): ProceduralTexture { - const lut = new ProceduralTexture("flatCloudLUT", 2048, { fragmentSource: flatCloudLUT }, scene, undefined, false, false); + if(Effect.ShadersStore[`flatCloudsLUTFragmentShader`] === undefined) { + Effect.ShadersStore[`flatCloudsLUTFragmentShader`] = flatCloudLUT; + } + + const lut = new ProceduralTexture("flatCloudLUT", 2048, "flatCloudsLUT", scene, undefined, false, false); lut.setFloat("worleyFrequency", worleyFrequency); lut.setFloat("detailFrequency", detailFrequency); lut.refreshRate = 0; + // This is necessary to make sure the texture is not empty at runtime (see: https://forum.babylonjs.com/t/webgl-warning-when-binding-procedural-texture-to-postprocess/46047) + scene.render(); + return lut; } } diff --git a/src/ts/postProcesses/lensFlarePostProcess.ts b/src/ts/postProcesses/lensFlarePostProcess.ts index f510e3ef2..4bfdea8cb 100644 --- a/src/ts/postProcesses/lensFlarePostProcess.ts +++ b/src/ts/postProcesses/lensFlarePostProcess.ts @@ -13,9 +13,6 @@ import { PhysicsRaycastResult } from "@babylonjs/core/Physics/physicsRaycastResu import { PhysicsEngineV2 } from "@babylonjs/core/Physics/v2"; import { Matrix } from "@babylonjs/core/Maths/math"; -const shaderName = "lensflare"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = lensFlareFragment; - export type LensFlareSettings = { visibility: number; behindCamera: boolean; @@ -27,6 +24,12 @@ export class LensFlarePostProcess extends UberPostProcess implements ObjectPostP readonly object: StellarObject; constructor(object: StellarObject, scene: UberScene) { + + const shaderName = "lensflare"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = lensFlareFragment; + } + const settings: LensFlareSettings = { visibility: 1, behindCamera: false, diff --git a/src/ts/postProcesses/mandelbulbPostProcess.ts b/src/ts/postProcesses/mandelbulbPostProcess.ts index 49db37d96..57338ca4b 100644 --- a/src/ts/postProcesses/mandelbulbPostProcess.ts +++ b/src/ts/postProcesses/mandelbulbPostProcess.ts @@ -8,9 +8,6 @@ import { StellarObject } from "../stellarObjects/stellarObject"; import { UniformEnumType, ShaderSamplers, ShaderUniforms } from "../uberCore/postProcesses/types"; import { Mandelbulb } from "../mandelbulb/mandelbulb"; -const shaderName = "mandelbulb"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = mandelbulbFragment; - export interface MandelbulbSettings { rotationPeriod: number; } @@ -20,6 +17,12 @@ export class MandelbulbPostProcess extends UberPostProcess implements ObjectPost readonly object: Mandelbulb; constructor(mandelbulb: Mandelbulb, scene: UberScene, stellarObjects: StellarObject[]) { + + const shaderName = "mandelbulb"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = mandelbulbFragment; + } + const settings: MandelbulbSettings = { rotationPeriod: 1.5 }; diff --git a/src/ts/postProcesses/matterJetPostProcess.ts b/src/ts/postProcesses/matterJetPostProcess.ts index f9407e58f..6acf28ff7 100644 --- a/src/ts/postProcesses/matterJetPostProcess.ts +++ b/src/ts/postProcesses/matterJetPostProcess.ts @@ -8,9 +8,6 @@ import { ObjectPostProcess } from "./objectPostProcess"; import { UniformEnumType, ShaderSamplers, ShaderUniforms } from "../uberCore/postProcesses/types"; import { BaseObject } from "../bodies/common"; -const shaderName = "matterjet"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = matterJetFragment; - export interface MatterJetSettings { // the rotation period in seconds of the matter jet rotationPeriod: number; @@ -24,6 +21,12 @@ export class MatterJetPostProcess extends UberPostProcess implements ObjectPostP object: BaseObject; constructor(name: string, stellarObject: StellarObject, scene: UberScene) { + + const shaderName = "matterjet"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = matterJetFragment; + } + const settings: MatterJetSettings = { rotationPeriod: 1.5 }; diff --git a/src/ts/postProcesses/oceanPostProcess.ts b/src/ts/postProcesses/oceanPostProcess.ts index 03e7f7f7d..c320764bf 100644 --- a/src/ts/postProcesses/oceanPostProcess.ts +++ b/src/ts/postProcesses/oceanPostProcess.ts @@ -11,9 +11,6 @@ import { getInverseRotationQuaternion } from "../uberCore/transforms/basicTransf import { UniformEnumType, ShaderSamplers, ShaderUniforms, SamplerEnumType } from "../uberCore/postProcesses/types"; import { StellarObject } from "../stellarObjects/stellarObject"; -const shaderName = "ocean"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = oceanFragment; - export type OceanUniforms = { oceanRadius: number; smoothness: number; @@ -28,6 +25,12 @@ export class OceanPostProcess extends UberPostProcess implements ObjectPostProce readonly object: TelluricPlanemo; constructor(name: string, planet: TelluricPlanemo, scene: UberScene, stars: StellarObject[]) { + + const shaderName = "ocean"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = oceanFragment; + } + const oceanUniforms: OceanUniforms = { oceanRadius: planet.getBoundingRadius(), depthModifier: 0.001, @@ -42,42 +45,42 @@ export class OceanPostProcess extends UberPostProcess implements ObjectPostProce ...getStellarObjectsUniforms(stars), ...getActiveCameraUniforms(scene), { - name: "ocean.radius", + name: "ocean_radius", type: UniformEnumType.Float, get: () => { return oceanUniforms.oceanRadius; } }, { - name: "ocean.smoothness", + name: "ocean_smoothness", type: UniformEnumType.Float, get: () => { return oceanUniforms.smoothness; } }, { - name: "ocean.specularPower", + name: "ocean_specularPower", type: UniformEnumType.Float, get: () => { return oceanUniforms.specularPower; } }, { - name: "ocean.alphaModifier", + name: "ocean_alphaModifier", type: UniformEnumType.Float, get: () => { return oceanUniforms.alphaModifier; } }, { - name: "ocean.depthModifier", + name: "ocean_depthModifier", type: UniformEnumType.Float, get: () => { return oceanUniforms.depthModifier; } }, { - name: "ocean.waveBlendingSharpness", + name: "ocean_waveBlendingSharpness", type: UniformEnumType.Float, get: () => { return oceanUniforms.waveBlendingSharpness; diff --git a/src/ts/postProcesses/postProcessManager.ts b/src/ts/postProcesses/postProcessManager.ts index 42ad41cfd..47fde5f93 100644 --- a/src/ts/postProcesses/postProcessManager.ts +++ b/src/ts/postProcesses/postProcessManager.ts @@ -343,7 +343,7 @@ export class PostProcessManager { return this.currentBody; } - private init() { + init() { const [otherVolumetricLightsRenderEffect, bodyVolumetricLightsRenderEffect] = makeSplitRenderEffects( "VolumetricLights", this.getCurrentBody(), diff --git a/src/ts/postProcesses/rings/ringsPostProcess.ts b/src/ts/postProcesses/rings/ringsPostProcess.ts index 99d96ffbf..5c8ed73d9 100644 --- a/src/ts/postProcesses/rings/ringsPostProcess.ts +++ b/src/ts/postProcesses/rings/ringsPostProcess.ts @@ -12,15 +12,18 @@ import { Scene } from "@babylonjs/core/scene"; import { ProceduralTexture } from "@babylonjs/core/Materials/Textures/Procedurals/proceduralTexture"; import ringsLUT from "../../../shaders/textures/ringsLUT.glsl"; -const shaderName = "rings"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = ringsFragment; - export class RingsPostProcess extends UberPostProcess implements ObjectPostProcess { readonly ringsUniforms: RingsUniforms; readonly object: AbstractBody; readonly lut: ProceduralTexture; constructor(body: AbstractBody, scene: UberScene, stellarObjects: StellarObject[]) { + + const shaderName = "rings"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = ringsFragment; + } + const ringsUniforms = body.model.ringsUniforms; if (ringsUniforms === null) throw new Error( @@ -41,8 +44,7 @@ export class RingsPostProcess extends UberPostProcess implements ObjectPostProce name: "ringsLUT", type: SamplerEnumType.Texture, get: () => { - //console.log(scene.isReady()); - return this.lut; + return lut; } } ]; @@ -55,13 +57,17 @@ export class RingsPostProcess extends UberPostProcess implements ObjectPostProce } static CreateLUT(seed: number, ringStart: number, ringEnd: number, frequency: number, scene: Scene): ProceduralTexture { + if(Effect.ShadersStore[`ringsLUTFragmentShader`] === undefined) { + Effect.ShadersStore[`ringsLUTFragmentShader`] = ringsLUT; + } + const lut = new ProceduralTexture( "ringsLUT", { width: 4096, height: 1 }, - { fragmentSource: ringsLUT }, + "ringsLUT", scene, undefined, false, @@ -73,9 +79,8 @@ export class RingsPostProcess extends UberPostProcess implements ObjectPostProce lut.setFloat("ringEnd", ringEnd); lut.refreshRate = 0; - lut.onBeforeGenerationObservable.add(() => { - console.log("ringsLUT"); - }); + // This is necessary to make sure the texture is not empty at runtime (see: https://forum.babylonjs.com/t/webgl-warning-when-binding-procedural-texture-to-postprocess/46047) + scene.render(); return lut; } diff --git a/src/ts/postProcesses/rings/ringsUniform.ts b/src/ts/postProcesses/rings/ringsUniform.ts index 819833861..08251e883 100644 --- a/src/ts/postProcesses/rings/ringsUniform.ts +++ b/src/ts/postProcesses/rings/ringsUniform.ts @@ -21,35 +21,35 @@ export class RingsUniforms { getShaderUniforms(): ShaderUniforms { return [ { - name: "rings.start", + name: "rings_start", type: UniformEnumType.Float, get: () => { return this.ringStart; } }, { - name: "rings.end", + name: "rings_end", type: UniformEnumType.Float, get: () => { return this.ringEnd; } }, { - name: "rings.frequency", + name: "rings_frequency", type: UniformEnumType.Float, get: () => { return this.ringFrequency; } }, { - name: "rings.opacity", + name: "rings_opacity", type: UniformEnumType.Float, get: () => { return this.ringOpacity; } }, { - name: "rings.color", + name: "rings_color", type: UniformEnumType.Color3, get: () => { return this.ringColor; diff --git a/src/ts/postProcesses/shadowPostProcess.ts b/src/ts/postProcesses/shadowPostProcess.ts index 64d96d169..6a3eae057 100644 --- a/src/ts/postProcesses/shadowPostProcess.ts +++ b/src/ts/postProcesses/shadowPostProcess.ts @@ -11,9 +11,6 @@ import { PostProcessType } from "./postProcessTypes"; import { RingsUniforms } from "./rings/ringsUniform"; import { RingsPostProcess } from "./rings/ringsPostProcess"; -const shaderName = "shadow"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = shadowFragment; - export type ShadowUniforms = { hasRings: boolean; hasClouds: boolean; @@ -25,6 +22,12 @@ export class ShadowPostProcess extends UberPostProcess implements ObjectPostProc readonly shadowUniforms: ShadowUniforms; constructor(body: AbstractBody, scene: UberScene, stellarObjects: StellarObject[]) { + + const shaderName = "shadow"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = shadowFragment; + } + const shadowUniforms: ShadowUniforms = { hasRings: body.model.ringsUniforms !== null, hasClouds: body.postProcesses.includes(PostProcessType.CLOUDS), @@ -35,21 +38,21 @@ export class ShadowPostProcess extends UberPostProcess implements ObjectPostProc ...getStellarObjectsUniforms(stellarObjects), ...getActiveCameraUniforms(scene), { - name: "shadowUniforms.hasRings", + name: "shadowUniforms_hasRings", type: UniformEnumType.Bool, get: () => { return shadowUniforms.hasRings; } }, { - name: "shadowUniforms.hasClouds", + name: "shadowUniforms_hasClouds", type: UniformEnumType.Bool, get: () => { return shadowUniforms.hasClouds; } }, { - name: "shadowUniforms.hasOcean", + name: "shadowUniforms_hasOcean", type: UniformEnumType.Bool, get: () => { return shadowUniforms.hasOcean; diff --git a/src/ts/postProcesses/starfieldPostProcess.ts b/src/ts/postProcesses/starfieldPostProcess.ts index a3ef25217..1722dc788 100644 --- a/src/ts/postProcesses/starfieldPostProcess.ts +++ b/src/ts/postProcesses/starfieldPostProcess.ts @@ -16,11 +16,14 @@ import { SamplerEnumType, ShaderSamplers, ShaderUniforms, UniformEnumType } from import { Matrix, Quaternion } from "@babylonjs/core/Maths/math"; import { BlackHole } from "../stellarObjects/blackHole/blackHole"; -const shaderName = "starfield"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = starfieldFragment; - export class StarfieldPostProcess extends UberPostProcess { constructor(scene: UberScene, stellarObjects: StellarObject[], bodies: AbstractBody[], starfieldRotation: Quaternion) { + + const shaderName = "starfield"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = starfieldFragment; + } + const uniforms: ShaderUniforms = [ ...getActiveCameraUniforms(scene), ...getStellarObjectsUniforms(stellarObjects), diff --git a/src/ts/postProcesses/uniforms.ts b/src/ts/postProcesses/uniforms.ts index c057c2ebf..2f79717e1 100644 --- a/src/ts/postProcesses/uniforms.ts +++ b/src/ts/postProcesses/uniforms.ts @@ -1,5 +1,5 @@ import { UberScene } from "../uberCore/uberScene"; -import { UniformEnumType, ShaderSamplers, ShaderUniforms, SamplerEnumType } from "../uberCore/postProcesses/types"; +import { SamplerEnumType, ShaderSamplers, ShaderUniforms, UniformEnumType } from "../uberCore/postProcesses/types"; import { StellarObject } from "../stellarObjects/stellarObject"; import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { BaseObject } from "../bodies/common"; @@ -8,37 +8,37 @@ import { Star } from "../stellarObjects/star/star"; export function getActiveCameraUniforms(scene: UberScene): ShaderUniforms { return [ { - name: "camera.position", + name: "camera_position", type: UniformEnumType.Vector3, get: () => scene.getActiveUberCamera().getAbsolutePosition() }, { - name: "camera.projection", + name: "camera_projection", type: UniformEnumType.Matrix, get: () => scene.getActiveUberCamera().getProjectionMatrix() }, { - name: "camera.inverseProjection", + name: "camera_inverseProjection", type: UniformEnumType.Matrix, get: () => scene.getActiveUberCamera().getInverseProjectionMatrix() }, { - name: "camera.view", + name: "camera_view", type: UniformEnumType.Matrix, get: () => scene.getActiveUberCamera().getViewMatrix() }, { - name: "camera.inverseView", + name: "camera_inverseView", type: UniformEnumType.Matrix, get: () => scene.getActiveUberCamera().getInverseViewMatrix() }, { - name: "camera.near", + name: "camera_near", type: UniformEnumType.Float, get: () => scene.getActiveUberCamera().minZ }, { - name: "camera.far", + name: "camera_far", type: UniformEnumType.Float, get: () => scene.getActiveUberCamera().maxZ } @@ -47,25 +47,21 @@ export function getActiveCameraUniforms(scene: UberScene): ShaderUniforms { export function getStellarObjectsUniforms(stars: StellarObject[]): ShaderUniforms { return [ - ...stars.flatMap((star, index) => { - return [ - { - name: `stars[${index}].position`, - type: UniformEnumType.Vector3, - get: () => star.getTransform().getAbsolutePosition() - }, - { - name: `stars[${index}].radius`, - type: UniformEnumType.Float, - get: () => star.getRadius() - }, - { - name: `stars[${index}].color`, - type: UniformEnumType.Vector3, - get: () => (star instanceof Star ? star.model.surfaceColor : Vector3.One()) - } - ]; - }), + { + name: "star_positions", + type: UniformEnumType.Vector3Array, + get: () => stars.map(star => star.getTransform().getAbsolutePosition()) + }, + { + name: "star_radiuses", + type: UniformEnumType.FloatArray, + get: () => stars.map(star => star.getRadius()) + }, + { + name: "star_colors", + type: UniformEnumType.Vector3Array, + get: () => stars.map(star =>star instanceof Star ? star.model.surfaceColor : Vector3.One()) + }, { name: "nbStars", type: UniformEnumType.Int, @@ -77,17 +73,17 @@ export function getStellarObjectsUniforms(stars: StellarObject[]): ShaderUniform export function getObjectUniforms(object: BaseObject): ShaderUniforms { return [ { - name: "object.position", + name: "object_position", type: UniformEnumType.Vector3, get: () => object.getTransform().getAbsolutePosition() }, { - name: "object.radius", + name: "object_radius", type: UniformEnumType.Float, get: () => object.getBoundingRadius() }, { - name: "object.rotationAxis", + name: "object_rotationAxis", type: UniformEnumType.Vector3, get: () => object.getTransform().up } diff --git a/src/ts/postProcesses/volumetricCloudsPostProcess.ts b/src/ts/postProcesses/volumetricCloudsPostProcess.ts index cbffb6328..2597a8013 100644 --- a/src/ts/postProcesses/volumetricCloudsPostProcess.ts +++ b/src/ts/postProcesses/volumetricCloudsPostProcess.ts @@ -10,9 +10,6 @@ import { Color3 } from "@babylonjs/core/Maths/math.color"; import { UniformEnumType, ShaderSamplers, ShaderUniforms } from "../uberCore/postProcesses/types"; import { StellarObject } from "../stellarObjects/stellarObject"; -const shaderName = "volumetricClouds"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = volumetricCloudsFragment; - export type CloudsPostProcess = FlatCloudsPostProcess | VolumetricCloudsPostProcess; export class VolumetricCloudsPostProcess extends UberPostProcess implements ObjectPostProcess { @@ -20,6 +17,12 @@ export class VolumetricCloudsPostProcess extends UberPostProcess implements Obje readonly object: TelluricPlanemo; constructor(name: string, planet: TelluricPlanemo, cloudLayerHeight: number, scene: UberScene, stars: StellarObject[]) { + + const shaderName = "volumetricClouds"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = volumetricCloudsFragment; + } + const cloudUniforms: CloudUniforms = { layerRadius: planet.getBoundingRadius() + cloudLayerHeight, specularPower: 2, diff --git a/src/ts/starSystem/StarSystemView.ts b/src/ts/starSystem/StarSystemView.ts index 82a5e548b..675c4562d 100644 --- a/src/ts/starSystem/StarSystemView.ts +++ b/src/ts/starSystem/StarSystemView.ts @@ -102,6 +102,7 @@ export class StarSystemView { window.addEventListener("resize", () => { this.bodyEditor.resize(); + this.scene.getEngine().resize(true); }); this.bodyEditor.resize(); @@ -145,6 +146,8 @@ export class StarSystemView { const activeController = this.scene.getActiveController(); positionNearObject(activeController, firstBody, this.getStarSystem(), firstBody instanceof BlackHole ? 7 : 5); if (activeController instanceof ShipController) activeController.enableWarpDrive(); + + this.getStarSystem().initPostProcesses(); } hideUI() { diff --git a/src/ts/starSystem/starSystemController.ts b/src/ts/starSystem/starSystemController.ts index 407503d9e..554b9c887 100644 --- a/src/ts/starSystem/starSystemController.ts +++ b/src/ts/starSystem/starSystemController.ts @@ -259,8 +259,6 @@ export class StarSystemController { * Inits the post processes and moves the system forward in time to the current time (it is additive) */ public init(nbWarmUpUpdates: number, chunkForge: ChunkForge): void { - this.initPostProcesses(); - for (const object of this.orbitalObjects) { const displacement = new Vector3(object.model.orbit.radius, 0, 0); const quaternion = getTransformationQuaternion(Vector3.Up(), object.model.orbit.normalToPlane); @@ -277,9 +275,8 @@ export class StarSystemController { /** * Inits the post processes of all the bodies in the system - * @private */ - private initPostProcesses() { + public initPostProcesses() { this.postProcessManager.addStarField(this.stellarObjects, this.celestialBodies, this.universeRotation); for (const object of this.orbitalObjects) { for (const postProcess of object.postProcesses) { @@ -327,6 +324,7 @@ export class StarSystemController { } } this.postProcessManager.setBody(this.getNearestCelestialBody(this.scene.getActiveUberCamera().position)); + this.postProcessManager.init(); } /** diff --git a/src/ts/stellarObjects/star/starMaterial.ts b/src/ts/stellarObjects/star/starMaterial.ts index 3a3bc07e4..651235939 100644 --- a/src/ts/stellarObjects/star/starMaterial.ts +++ b/src/ts/stellarObjects/star/starMaterial.ts @@ -7,16 +7,20 @@ import { TransformNode } from "@babylonjs/core/Meshes/transformNode"; import { StarModel } from "./starModel"; import { getInverseRotationQuaternion } from "../../uberCore/transforms/basicTransform"; -const shaderName = "starMaterial"; -Effect.ShadersStore[`${shaderName}FragmentShader`] = starMaterialFragment; -Effect.ShadersStore[`${shaderName}VertexShader`] = starMaterialVertex; - export class StarMaterial extends ShaderMaterial { star: TransformNode; starModel: StarModel; starSeed: number; constructor(star: TransformNode, model: StarModel, scene: Scene) { + const shaderName = "starMaterial"; + if(Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { + Effect.ShadersStore[`${shaderName}FragmentShader`] = starMaterialFragment; + } + if(Effect.ShadersStore[`${shaderName}VertexShader`] === undefined) { + Effect.ShadersStore[`${shaderName}VertexShader`] = starMaterialVertex; + } + super("starColor", scene, shaderName, { attributes: ["position"], uniforms: ["world", "worldViewProjection", "seed", "starColor", "starPosition", "starInverseRotationQuaternion", "time"] diff --git a/src/ts/uberCore/postProcesses/types.ts b/src/ts/uberCore/postProcesses/types.ts index bc32fdf6e..fed636748 100644 --- a/src/ts/uberCore/postProcesses/types.ts +++ b/src/ts/uberCore/postProcesses/types.ts @@ -42,7 +42,11 @@ export enum UniformEnumType { /** * An array of Vector4. Shader code: vec4[] */ - Vector4Array + Vector4Array, + /** + * An array of floats. Shader code: float[] + */ + FloatArray } export enum SamplerEnumType { @@ -50,7 +54,7 @@ export enum SamplerEnumType { Texture } -export type UniformType = number | boolean | Vector3 | Color3 | Matrix | Quaternion | Texture | Vector3[] | Vector4[]; +export type UniformType = number | boolean | Vector3 | Color3 | Matrix | Quaternion | Texture | Vector3[] | Vector4[] | number[]; export type SamplerType = Texture | undefined; diff --git a/src/ts/uberCore/postProcesses/uberPostProcess.ts b/src/ts/uberCore/postProcesses/uberPostProcess.ts index 9f525d287..9687e4bb8 100644 --- a/src/ts/uberCore/postProcesses/uberPostProcess.ts +++ b/src/ts/uberCore/postProcesses/uberPostProcess.ts @@ -57,10 +57,13 @@ export abstract class UberPostProcess extends PostProcess implements UpdatablePo effect.setMatrix(uniform.name, uniform.get() as Matrix); break; case UniformEnumType.Vector3Array: - effect.setArray3(uniform.name, flattenVector3Array(uniform.get() as Vector3[])); + effect.setFloatArray3(uniform.name, flattenVector3Array(uniform.get() as Vector3[])); break; case UniformEnumType.Vector4Array: - effect.setArray4(uniform.name, flattenVector4Array(uniform.get() as Vector4[])); + effect.setFloatArray4(uniform.name, flattenVector4Array(uniform.get() as Vector4[])); + break; + case UniformEnumType.FloatArray: + effect.setFloatArray(uniform.name, uniform.get() as number[]); break; case UniformEnumType.Auto: // BabylonJS already handles this diff --git a/src/ts/utils/havok.ts b/src/ts/utils/havok.ts index 832278b59..0f265bfc0 100644 --- a/src/ts/utils/havok.ts +++ b/src/ts/utils/havok.ts @@ -23,7 +23,7 @@ export function setEnabledBody(body: PhysicsBody, enabled: boolean, havokPlugin: export function setMaxLinVel(havokPlugin: HavokPlugin, maxLinVel: number, maxAngVel: number) { const heap = havokPlugin._hknp.HEAP8.buffer; const world1 = new Int32Array(heap, Number(havokPlugin.world), 100); - const world2 = new Int32Array(heap, world1[9], 500); + const world2 = new Int32Array(heap, world1[8], 500); const mplib = new Int32Array(heap, world2[428], 100); const tsbuf = new Float32Array(heap, mplib[8], 300); diff --git a/webpack.config.js b/webpack.config.js index fc03af3a3..07e744354 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -101,7 +101,7 @@ const config = { { test: /\.(glsl|vs|fs|vert|frag|fx)$/, exclude: /node_modules/, - use: ["raw-loader", "glslify-loader"] + use: ["ts-shader-loader"] }