+
+ {/* Protocol tabs */}
+
+
{
+ setProtocol('https');
+ setIsCopied(false);
+ }}
+ style={{
+ flex: 1,
+ textAlign: 'center',
+ padding: '6px 0',
+ cursor: 'pointer',
+ fontWeight: protocol === 'https' ? 'bold' : 'normal',
+ borderBottom:
+ protocol === 'https' ? '2px solid #2f81f7' : '2px solid transparent',
+ }}
+ >
+ HTTPS
+
+
{
+ setProtocol('ssh');
+ setIsCopied(false);
+ }}
+ style={{
+ flex: 1,
+ textAlign: 'center',
+ padding: '6px 0',
+ cursor: 'pointer',
+ fontWeight: protocol === 'ssh' ? 'bold' : 'normal',
+ borderBottom: protocol === 'ssh' ? '2px solid #2f81f7' : '2px solid transparent',
+ }}
+ >
+ SSH
+
+
+
+ {/* Clone command box */}
+
-
- {cloneURL}
-
-
- {!isCopied && (
- {
- navigator.clipboard.writeText(`git clone ${cloneURL}`);
- setIsCopied(true);
- }}
- >
-
-
- )}
- {isCopied && (
-
-
-
- )}
-
+ git clone {selectedUrl}
+
+
+ {!isCopied ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
Use Git and run this command in your IDE or Terminal đ
diff --git a/src/ui/components/SSHKeysManager/SSHKeysManager.jsx b/src/ui/components/SSHKeysManager/SSHKeysManager.jsx
new file mode 100644
index 000000000..cd8d9594c
--- /dev/null
+++ b/src/ui/components/SSHKeysManager/SSHKeysManager.jsx
@@ -0,0 +1,195 @@
+import React, { useState, useEffect, useCallback } from 'react';
+import {
+ Typography,
+ Button,
+ IconButton,
+ Grid,
+ Paper,
+ Modal,
+ TextField,
+ Snackbar,
+} from '@material-ui/core';
+import Alert from '@material-ui/lab/Alert';
+import { makeStyles } from '@material-ui/core/styles';
+import DeleteIcon from '@material-ui/icons/Delete';
+import VpnKeyIcon from '@material-ui/icons/VpnKey';
+import dayjs from 'dayjs';
+
+import { getSSHKeys, deleteSSHKey, addSSHKey } from '../../services/ssh';
+
+const useStyles = makeStyles((theme) => ({
+ root: { padding: theme.spacing(3), width: '100%' },
+ button: {
+ marginBottom: theme.spacing(2),
+ backgroundColor: '#4caf50',
+ color: 'white',
+ '&:hover': { backgroundColor: '#388e3c' },
+ },
+ keyContainer: { padding: theme.spacing(2), marginBottom: theme.spacing(2) },
+ deleteButton: { color: '#ff4444' },
+ modal: { display: 'flex', alignItems: 'center', justifyContent: 'center' },
+ modalContent: {
+ backgroundColor: 'white',
+ padding: theme.spacing(4),
+ borderRadius: 8,
+ width: 400,
+ },
+ formField: { marginBottom: theme.spacing(2) },
+}));
+
+export default function SSHKeysManager({ username }) {
+ const classes = useStyles();
+
+ const [keys, setKeys] = useState([]);
+ const [isModalOpen, setIsModalOpen] = useState(false);
+ const [newKeyValue, setNewKeyValue] = useState('');
+ const [newKeyName, setNewKeyName] = useState('');
+
+ const [banner, setBanner] = useState(null); // { type, text }
+
+ /* ------------------------------------------- */
+ const loadKeys = useCallback(async () => {
+ if (!username) return;
+ try {
+ const data = await getSSHKeys(username);
+ setKeys(data);
+ } catch (err) {
+ console.error(err);
+ setBanner({ type: 'error', text: 'Failed to load SSH keys' });
+ }
+ }, [username]);
+
+ useEffect(() => void loadKeys(), [loadKeys]);
+
+ /* -----------------------------------------------------------
+ * Delete by fingerprint
+ * --------------------------------------------------------- */
+ const handleDelete = async (index) => {
+ const { fingerprint } = keys[index];
+ try {
+ await deleteSSHKey(username, fingerprint);
+ await loadKeys();
+ setBanner({ type: 'success', text: 'SSH key removed' });
+ } catch (err) {
+ console.error(err);
+ setBanner({
+ type: 'error',
+ text: err.response?.data?.error || 'Failed to remove SSH key',
+ });
+ }
+ };
+
+ /* -----------------------------------------------------------
+ * Add new public key, then refresh list
+ * --------------------------------------------------------- */
+ const handleAddKey = async () => {
+ const publicKey = newKeyValue.trim();
+ const name = newKeyName.trim();
+ if (!publicKey || !name) return;
+
+ try {
+ await addSSHKey(username, { publicKey, name });
+ await loadKeys();
+ setBanner({ type: 'success', text: 'SSH key added' });
+ setNewKeyValue('');
+ setNewKeyName('');
+ setIsModalOpen(false);
+ } catch (err) {
+ console.error(err);
+ setBanner({
+ type: 'error',
+ text: err.response?.data?.error || 'Failed to add SSH key',
+ });
+ }
+ };
+
+ return (
+
+
setBanner(null)}
+ anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
+ >
+ {banner && (
+ setBanner(null)} severity={banner.type} variant='filled'>
+ {banner.text}
+
+ )}
+
+
+
+ SSH Keys
+
+
+ These are the SSH keys linked to your account.
+
+
+
+
+ {keys.map((key, idx) => (
+
+
+
+
+
+
+ {key.name}
+
+
+
+
+ {key.fingerprint}
+
+
+ Added on {dayjs(key.addedAt).format('YYYY-MM-DD HH:mm')}
+
+
+ handleDelete(idx)}
+ style={{ float: 'right' }}
+ >
+
+
+
+ ))}
+
+
setIsModalOpen(false)} className={classes.modal}>
+
+
+ Add a new SSH key
+
+
+ setNewKeyName(e.target.value)}
+ placeholder='e.g. MacBook Pro'
+ />
+
+ setNewKeyValue(e.target.value)}
+ placeholder='ssh-ed25519 AAAAC3Nz... user@example'
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/ui/services/config.js b/src/ui/services/config.js
index 5536e4a35..e25fc2d40 100644
--- a/src/ui/services/config.js
+++ b/src/ui/services/config.js
@@ -32,9 +32,17 @@ const getUIRouteAuth = async (setData) => {
});
};
-export {
- getAttestationConfig,
- getURLShortener,
- getEmailContact,
- getUIRouteAuth,
+const getSSHConfig = async (setData) => {
+ const url = new URL(`${baseUrl}/config/ssh`);
+ await axios(url.toString(), { withCredentials: true })
+ .then((response) => {
+ const { enabled = true, port = 22 } = response.data ?? {};
+ setData({ enabled, port });
+ })
+ .catch((err) => {
+ console.error('Failed to load SSH config:', err);
+ setData({ enabled: true, port: 22 });
+ });
};
+
+export { getAttestationConfig, getURLShortener, getEmailContact, getUIRouteAuth, getSSHConfig };
diff --git a/src/ui/services/git-push.js b/src/ui/services/git-push.js
index df8f6f354..da654aaad 100644
--- a/src/ui/services/git-push.js
+++ b/src/ui/services/git-push.js
@@ -9,21 +9,6 @@ const config = {
withCredentials: true,
};
-const getUser = async (setIsLoading, setData, setAuth, setIsError) => {
- const url = new URL(`${location.origin}/api/auth/success`);
- await axios(url.toString(), config)
- .then((response) => {
- const data = response.data;
- setData(data);
- setIsLoading(false);
- })
- .catch((error) => {
- if (error.response && error.response.status === 401) setAuth(false);
- else setIsError(true);
- setIsLoading(false);
- });
-};
-
const getPush = async (id, setIsLoading, setData, setAuth, setIsError) => {
const url = `${baseUrl}/push/${id}`;
await axios(url, config)
@@ -45,6 +30,7 @@ const getPushes = async (
setData,
setAuth,
setIsError,
+ setErrorMessage,
query = {
blocked: true,
canceled: false,
@@ -60,15 +46,16 @@ const getPushes = async (
.then((response) => {
const data = response.data;
setData(data);
- setIsLoading(false);
})
.catch((error) => {
- setIsLoading(false);
+ setIsError(true);
if (error.response && error.response.status === 401) {
setAuth(false);
+ setErrorMessage('Failed to authorize user. If JWT auth is enabled, please check your configuration or disable it.');
} else {
- setIsError(true);
+ setErrorMessage(`Error fetching pushes: ${error.response.data.message}`);
}
+ }).finally(() => {
setIsLoading(false);
});
};
@@ -126,4 +113,4 @@ const cancelPush = async (id, setAuth, setIsError) => {
});
};
-export { getPush, getPushes, authorisePush, rejectPush, cancelPush, getUser };
+export { getPush, getPushes, authorisePush, rejectPush, cancelPush };
diff --git a/src/ui/services/repo.js b/src/ui/services/repo.js
index 2ac0bc98d..27d898c75 100644
--- a/src/ui/services/repo.js
+++ b/src/ui/services/repo.js
@@ -33,7 +33,14 @@ class DupUserValidationError extends Error {
}
}
-const getRepos = async (setIsLoading, setData, setAuth, setIsError, query = {}) => {
+const getRepos = async (
+ setIsLoading,
+ setData,
+ setAuth,
+ setIsError,
+ setErrorMessage,
+ query = {},
+) => {
const url = new URL(`${baseUrl}/repo`);
url.search = new URLSearchParams(query);
setIsLoading(true);
@@ -41,15 +48,16 @@ const getRepos = async (setIsLoading, setData, setAuth, setIsError, query = {})
.then((response) => {
const data = response.data;
setData(data);
- setIsLoading(false);
})
.catch((error) => {
- setIsLoading(false);
+ setIsError(true);
if (error.response && error.response.status === 401) {
setAuth(false);
+ setErrorMessage('Failed to authorize user. If JWT auth is enabled, please check your configuration or disable it.');
} else {
- setIsError(true);
+ setErrorMessage(`Error fetching repositories: ${error.response.data.message}`);
}
+ }).finally(() => {
setIsLoading(false);
});
};
@@ -61,15 +69,14 @@ const getRepo = async (setIsLoading, setData, setAuth, setIsError, id) => {
.then((response) => {
const data = response.data;
setData(data);
- setIsLoading(false);
})
.catch((error) => {
- setIsLoading(false);
if (error.response && error.response.status === 401) {
setAuth(false);
} else {
setIsError(true);
}
+ }).finally(() => {
setIsLoading(false);
});
};
diff --git a/src/ui/services/ssh.js b/src/ui/services/ssh.js
new file mode 100644
index 000000000..59e17b347
--- /dev/null
+++ b/src/ui/services/ssh.js
@@ -0,0 +1,23 @@
+import axios from 'axios';
+
+const BASE_URL = import.meta.env.VITE_API_URI
+ ? `${import.meta.env.VITE_API_URI}/api/v1/user`
+ : `${location.origin}/api/v1/user`;
+
+const AXIOS_CFG = { withCredentials: true };
+
+export async function getSSHKeys(username) {
+ const { data } = await axios.get(`${BASE_URL}/${username}/ssh-keys`, AXIOS_CFG);
+ return data.publicKeys || [];
+}
+
+export async function deleteSSHKey(username, fingerprint) {
+ await axios.delete(`${BASE_URL}/${username}/ssh-keys/fingerprint`, {
+ ...AXIOS_CFG,
+ data: { fingerprint },
+ });
+}
+
+export async function addSSHKey(username, key) {
+ await axios.post(`${BASE_URL}/${username}/ssh-keys`, key, AXIOS_CFG);
+}
diff --git a/src/ui/services/user.js b/src/ui/services/user.js
index cab1dc3ea..bdccdfc45 100644
--- a/src/ui/services/user.js
+++ b/src/ui/services/user.js
@@ -44,7 +44,14 @@ const getUser = async (setIsLoading, setData, setAuth, setIsError, id = null) =>
});
};
-const getUsers = async (setIsLoading, setData, setAuth, setIsError, query = {}) => {
+const getUsers = async (
+ setIsLoading,
+ setData,
+ setAuth,
+ setIsError,
+ setErrorMessage,
+ query = {},
+) => {
const url = new URL(`${baseUrl}/api/v1/user`);
url.search = new URLSearchParams(query);
setIsLoading(true);
@@ -52,15 +59,16 @@ const getUsers = async (setIsLoading, setData, setAuth, setIsError, query = {})
.then((response) => {
const data = response.data;
setData(data);
- setIsLoading(false);
})
.catch((error) => {
- setIsLoading(false);
+ setIsError(true);
if (error.response && error.response.status === 401) {
setAuth(false);
+ setErrorMessage('Failed to authorize user. If JWT auth is enabled, please check your configuration or disable it.');
} else {
- setIsError(true);
+ setErrorMessage(`Error fetching users: ${error.response.data.message}`);
}
+ }).finally(() => {
setIsLoading(false);
});
};
diff --git a/src/ui/views/OpenPushRequests/components/PushesTable.jsx b/src/ui/views/OpenPushRequests/components/PushesTable.jsx
index 2a3a7f33a..fad06e27e 100644
--- a/src/ui/views/OpenPushRequests/components/PushesTable.jsx
+++ b/src/ui/views/OpenPushRequests/components/PushesTable.jsx
@@ -23,6 +23,7 @@ export default function PushesTable(props) {
const [filteredData, setFilteredData] = useState([]);
const [isLoading, setIsLoading] = useState(false);
const [isError, setIsError] = useState(false);
+ const [errorMessage, setErrorMessage] = useState('');
const navigate = useNavigate();
const [, setAuth] = useState(true);
const [currentPage, setCurrentPage] = useState(1);
@@ -35,7 +36,7 @@ export default function PushesTable(props) {
for (const k in props) {
if (k) query[k] = props[k];
}
- getPushes(setIsLoading, setData, setAuth, setIsError, query);
+ getPushes(setIsLoading, setData, setAuth, setIsError, setErrorMessage, query);
}, [props]);
useEffect(() => {
@@ -69,7 +70,7 @@ export default function PushesTable(props) {
const paginate = (pageNumber) => setCurrentPage(pageNumber);
if (isLoading) return Loading...
;
- if (isError) return Something went wrong ...
;
+ if (isError) return {errorMessage}
;
return (
diff --git a/src/ui/views/RepoList/Components/Repositories.jsx b/src/ui/views/RepoList/Components/Repositories.jsx
index 228190903..3b64944f2 100644
--- a/src/ui/views/RepoList/Components/Repositories.jsx
+++ b/src/ui/views/RepoList/Components/Repositories.jsx
@@ -24,6 +24,7 @@ export default function Repositories(props) {
const [, setAuth] = useState(true);
const [isLoading, setIsLoading] = useState(false);
const [isError, setIsError] = useState(false);
+ const [errorMessage, setErrorMessage] = useState('');
const [currentPage, setCurrentPage] = useState(1);
const itemsPerPage = 5;
const navigate = useNavigate();
@@ -44,6 +45,7 @@ export default function Repositories(props) {
},
setAuth,
setIsError,
+ setErrorMessage,
query,
);
}, [props]);
@@ -99,7 +101,7 @@ export default function Repositories(props) {
const paginatedData = filteredData.slice(startIdx, startIdx + itemsPerPage);
if (isLoading) return
Loading...
;
- if (isError) return
Something went wrong ...
;
+ if (isError) return
{errorMessage}
;
const addrepoButton = user.admin ? (
diff --git a/src/ui/views/User/User.jsx b/src/ui/views/User/User.jsx
index 44fa64e1c..7d571ebc7 100644
--- a/src/ui/views/User/User.jsx
+++ b/src/ui/views/User/User.jsx
@@ -13,6 +13,7 @@ import { LogoGithubIcon } from '@primer/octicons-react';
import CloseRounded from '@material-ui/icons/CloseRounded';
import { Check, Save } from '@material-ui/icons';
import { TextField } from '@material-ui/core';
+import SSHKeysManager from '../../components/SSHKeysManager/SSHKeysManager';
const useStyles = makeStyles((theme) => ({
root: {
@@ -161,6 +162,10 @@ export default function Dashboard() {
+
+
+
+
) : null}
diff --git a/src/ui/views/UserList/Components/UserList.jsx b/src/ui/views/UserList/Components/UserList.jsx
index 36aef89e6..a3fdc9de4 100644
--- a/src/ui/views/UserList/Components/UserList.jsx
+++ b/src/ui/views/UserList/Components/UserList.jsx
@@ -25,6 +25,7 @@ export default function UserList(props) {
const [, setAuth] = useState(true);
const [isLoading, setIsLoading] = useState(false);
const [isError, setIsError] = useState(false);
+ const [errorMessage, setErrorMessage] = useState('');
const navigate = useNavigate();
const [currentPage, setCurrentPage] = useState(1);
const itemsPerPage = 5;
@@ -39,11 +40,11 @@ export default function UserList(props) {
if (!k) continue;
query[k] = props[k];
}
- getUsers(setIsLoading, setData, setAuth, setIsError, query);
+ getUsers(setIsLoading, setData, setAuth, setIsError, setErrorMessage, query);
}, [props]);
if (isLoading) return
Loading...
;
- if (isError) return
Something went wrong...
;
+ if (isError) return
{errorMessage}
;
const filteredUsers = data.filter(
(user) =>
diff --git a/test/ConfigLoader.test.js b/test/ConfigLoader.test.js
index df91c49d5..ac408a2ed 100644
--- a/test/ConfigLoader.test.js
+++ b/test/ConfigLoader.test.js
@@ -437,7 +437,7 @@ describe('ConfigLoader', () => {
it('should throw error if repository is a valid URL but not a git repository', async function () {
const source = {
type: 'git',
- repository: 'https://github.com/test-org/test-repo.git',
+ repository: 'https://github.com/finos/made-up-test-repo.git',
path: 'proxy.config.json',
branch: 'main',
enabled: true,
diff --git a/test/plugin/plugin.test.js b/test/plugin/plugin.test.js
index cee46699e..1180ba9bb 100644
--- a/test/plugin/plugin.test.js
+++ b/test/plugin/plugin.test.js
@@ -23,7 +23,7 @@ describe('loading plugins from packages', function () {
spawnSync('npm', ['install'], { cwd: testPackagePath, timeout: 5000 });
});
- it.skip('should load plugins that are the default export (module.exports = pluginObj)', async function () {
+ it('should load plugins that are the default export (module.exports = pluginObj)', async function () {
const loader = new PluginLoader([join(testPackagePath, 'default-export.js')]);
await loader.load();
expect(loader.pushPlugins.length).to.equal(1);
@@ -31,7 +31,7 @@ describe('loading plugins from packages', function () {
expect(loader.pushPlugins[0]).to.be.an.instanceOf(PushActionPlugin);
}).timeout(10000);
- it.skip('should load multiple plugins from a module that match the plugin class (module.exports = { pluginFoo, pluginBar })', async function () {
+ it('should load multiple plugins from a module that match the plugin class (module.exports = { pluginFoo, pluginBar })', async function () {
const loader = new PluginLoader([join(testPackagePath, 'multiple-export.js')]);
await loader.load();
expect(loader.pushPlugins.length).to.equal(1);
@@ -45,7 +45,7 @@ describe('loading plugins from packages', function () {
expect(loader.pullPlugins[0]).to.be.instanceOf(PullActionPlugin);
}).timeout(10000);
- it.skip('should load plugins that are subclassed from plugin classes', async function () {
+ it('should load plugins that are subclassed from plugin classes', async function () {
const loader = new PluginLoader([join(testPackagePath, 'subclass.js')]);
await loader.load();
expect(loader.pushPlugins.length).to.equal(1);
diff --git a/test/teeAndValidation.test.js b/test/teeAndValidation.test.js
new file mode 100644
index 000000000..66394dc06
--- /dev/null
+++ b/test/teeAndValidation.test.js
@@ -0,0 +1,85 @@
+const { expect } = require('chai');
+const sinon = require('sinon');
+const { PassThrough } = require('stream');
+const proxyquire = require('proxyquire').noCallThru();
+
+const fakeRawBody = sinon.stub().resolves(Buffer.from('payload'));
+
+const fakeChain = {
+ executeChain: sinon.stub(),
+};
+
+const { teeAndValidate, isPackPost, handleMessage } = proxyquire('../src/proxy/routes', {
+ 'raw-body': fakeRawBody,
+ '../chain': fakeChain,
+});
+
+describe('teeAndValidate middleware', () => {
+ let req;
+ let res;
+ let next;
+
+ beforeEach(() => {
+ req = new PassThrough();
+ req.method = 'POST';
+ req.url = '/proj/foo.git/git-upload-pack';
+
+ res = {
+ set: sinon.stub().returnsThis(),
+ status: sinon.stub().returnsThis(),
+ send: sinon.stub(),
+ end: sinon.stub(),
+ };
+ next = sinon.spy();
+
+ fakeRawBody.resetHistory();
+ fakeChain.executeChain.resetHistory();
+ });
+
+ it('skips non-pack posts', async () => {
+ req.method = 'GET';
+ await teeAndValidate(req, res, next);
+ expect(next.calledOnce).to.be.true;
+ expect(fakeRawBody.called).to.be.false;
+ });
+
+ it('when the chain blocks it sends a packet and does NOT call next()', async () => {
+ fakeChain.executeChain.resolves({ blocked: true, blockedMessage: 'denied!' });
+
+ req.write('abcd');
+ req.end();
+
+ await teeAndValidate(req, res, next);
+
+ expect(fakeRawBody.calledOnce).to.be.true;
+ expect(fakeChain.executeChain.calledOnce).to.be.true;
+ expect(next.called).to.be.false;
+
+ expect(res.set.called).to.be.true;
+ expect(res.status.calledWith(200)).to.be.true;
+ expect(res.send.calledWith(handleMessage('denied!'))).to.be.true;
+ });
+
+ it('when the chain allow it calls next() and overrides req.pipe', async () => {
+ fakeChain.executeChain.resolves({ blocked: false, error: false });
+
+ req.write('abcd');
+ req.end();
+
+ await teeAndValidate(req, res, next);
+
+ expect(fakeRawBody.calledOnce).to.be.true;
+ expect(fakeChain.executeChain.calledOnce).to.be.true;
+ expect(next.calledOnce).to.be.true;
+ expect(typeof req.pipe).to.equal('function');
+ });
+});
+
+describe('isPackPost()', () => {
+ it('returns true for git-upload-pack POST', () => {
+ expect(isPackPost({ method: 'POST', url: '/a/b.git/git-upload-pack' })).to.be.true;
+ });
+ it('returns false for other URLs', () => {
+ expect(isPackPost({ method: 'POST', url: '/info/refs' })).to.be.false;
+ });
+});
diff --git a/test/testActiveDirectoryAuth.test.js b/test/testActiveDirectoryAuth.test.js
new file mode 100644
index 000000000..4d50dbb45
--- /dev/null
+++ b/test/testActiveDirectoryAuth.test.js
@@ -0,0 +1,150 @@
+const chai = require('chai');
+const sinon = require('sinon');
+const proxyquire = require('proxyquire');
+const expect = chai.expect;
+
+describe('ActiveDirectory auth method', () => {
+ let ldapStub;
+ let dbStub;
+ let passportStub;
+ let strategyCallback;
+
+ const newConfig = JSON.stringify({
+ authentication: [
+ {
+ type: 'ActiveDirectory',
+ enabled: true,
+ adminGroup: 'test-admin-group',
+ userGroup: 'test-user-group',
+ domain: 'test.com',
+ adConfig: {
+ url: 'ldap://test-url',
+ baseDN: 'dc=test,dc=com',
+ searchBase: 'ou=users,dc=test,dc=com',
+ },
+ },
+ ],
+ });
+
+ beforeEach(() => {
+ ldapStub = {
+ isUserInAdGroup: sinon.stub(),
+ };
+
+ dbStub = {
+ updateUser: sinon.stub(),
+ };
+
+ passportStub = {
+ use: sinon.stub(),
+ serializeUser: sinon.stub(),
+ deserializeUser: sinon.stub(),
+ };
+
+ const fsStub = {
+ existsSync: sinon.stub().returns(true),
+ readFileSync: sinon.stub().returns(newConfig),
+ };
+
+ const config = proxyquire('../src/config', {
+ fs: fsStub,
+ });
+
+ const { configure } = proxyquire('../src/service/passport/activeDirectory', {
+ './ldaphelper': ldapStub,
+ '../../db': dbStub,
+ '../../config': config,
+ 'passport-activedirectory': function (options, callback) {
+ strategyCallback = callback;
+ return {
+ name: 'ActiveDirectory',
+ authenticate: () => {},
+ };
+ },
+ });
+
+ configure(passportStub);
+ });
+
+ it('should authenticate a valid user and mark them as admin', async () => {
+ const mockReq = {};
+ const mockProfile = {
+ _json: {
+ sAMAccountName: 'test-user',
+ mail: 'test@test.com',
+ userPrincipalName: 'test@test.com',
+ title: 'Test User',
+ },
+ displayName: 'Test User',
+ };
+
+ ldapStub.isUserInAdGroup
+ .onCall(0).resolves(true)
+ .onCall(1).resolves(true);
+
+ const done = sinon.spy();
+
+ await strategyCallback(mockReq, mockProfile, {}, done);
+
+ expect(done.calledOnce).to.be.true;
+ const [err, user] = done.firstCall.args;
+ expect(err).to.be.null;
+ expect(user).to.have.property('username', 'test-user');
+ expect(user).to.have.property('email', 'test@test.com');
+ expect(user).to.have.property('displayName', 'Test User');
+ expect(user).to.have.property('admin', true);
+ expect(user).to.have.property('title', 'Test User');
+
+ expect(dbStub.updateUser.calledOnce).to.be.true;
+ });
+
+ it('should fail if user is not in user group', async () => {
+ const mockReq = {};
+ const mockProfile = {
+ _json: {
+ sAMAccountName: 'bad-user',
+ mail: 'bad@test.com',
+ userPrincipalName: 'bad@test.com',
+ title: 'Bad User'
+ },
+ displayName: 'Bad User'
+ };
+
+ ldapStub.isUserInAdGroup.onCall(0).resolves(false);
+
+ const done = sinon.spy();
+
+ await strategyCallback(mockReq, mockProfile, {}, done);
+
+ expect(done.calledOnce).to.be.true;
+ const [err, user] = done.firstCall.args;
+ expect(err).to.include('not a member');
+ expect(user).to.be.null;
+
+ expect(dbStub.updateUser.notCalled).to.be.true;
+ });
+
+ it('should handle LDAP errors gracefully', async () => {
+ const mockReq = {};
+ const mockProfile = {
+ _json: {
+ sAMAccountName: 'error-user',
+ mail: 'err@test.com',
+ userPrincipalName: 'err@test.com',
+ title: 'Whoops'
+ },
+ displayName: 'Error User'
+ };
+
+ ldapStub.isUserInAdGroup.rejects(new Error('LDAP error'));
+
+ const done = sinon.spy();
+
+ await strategyCallback(mockReq, mockProfile, {}, done);
+
+ expect(done.calledOnce).to.be.true;
+ const [err, user] = done.firstCall.args;
+ expect(err).to.contain('LDAP error');
+ expect(user).to.be.null;
+ });
+});
diff --git a/test/testConfig.test.js b/test/testConfig.test.js
index 5c2314231..e6ea0f75b 100644
--- a/test/testConfig.test.js
+++ b/test/testConfig.test.js
@@ -37,8 +37,11 @@ describe('default configuration', function () {
describe('user configuration', function () {
let tempDir;
let tempUserFile;
+ let oldEnv;
beforeEach(function () {
+ delete require.cache[require.resolve('../src/config/env')];
+ oldEnv = { ...process.env };
tempDir = fs.mkdtempSync('gitproxy-test');
tempUserFile = path.join(tempDir, 'test-settings.json');
require('../src/config/file').configFile = tempUserFile;
@@ -258,9 +261,34 @@ describe('user configuration', function () {
expect(config.getAPIs()).to.be.eql(user.api);
});
+ it('should override default settings for cookieSecret if env var is used', function () {
+ fs.writeFileSync(tempUserFile, '{}');
+ process.env.GIT_PROXY_COOKIE_SECRET = 'test-cookie-secret'
+
+ const config = require('../src/config');
+ expect(config.getCookieSecret()).to.equal('test-cookie-secret');
+ });
+
+ it('should override default settings for mongo connection string if env var is used', function () {
+ const user = {
+ sink: [
+ {
+ type: 'mongo',
+ enabled: true,
+ }
+ ]
+ };
+ fs.writeFileSync(tempUserFile, JSON.stringify(user));
+ process.env.GIT_PROXY_MONGO_CONNECTION_STRING = 'mongodb://example.com:27017/test';
+
+ const config = require('../src/config');
+ expect(config.getDatabase().connectionString).to.equal('mongodb://example.com:27017/test');
+ });
+
afterEach(function () {
fs.rmSync(tempUserFile);
fs.rmdirSync(tempDir);
+ process.env = oldEnv;
delete require.cache[require.resolve('../src/config')];
});
});
diff --git a/test/testJwtAuthHandler.test.js b/test/testJwtAuthHandler.test.js
new file mode 100644
index 000000000..af2bb1bb2
--- /dev/null
+++ b/test/testJwtAuthHandler.test.js
@@ -0,0 +1,193 @@
+const { expect } = require('chai');
+const sinon = require('sinon');
+const axios = require('axios');
+const jwt = require('jsonwebtoken');
+const { jwkToBuffer } = require('jwk-to-pem');
+
+const { assignRoles, getJwks, validateJwt } = require('../src/service/passport/jwtUtils');
+const jwtAuthHandler = require('../src/service/passport/jwtAuthHandler');
+
+describe('getJwks', () => {
+ it('should fetch JWKS keys from authority', async () => {
+ const jwksResponse = { keys: [{ kid: 'test-key', kty: 'RSA', n: 'abc', e: 'AQAB' }] };
+
+ const getStub = sinon.stub(axios, 'get');
+ getStub.onFirstCall().resolves({ data: { jwks_uri: 'https://mock.com/jwks' } });
+ getStub.onSecondCall().resolves({ data: jwksResponse });
+
+ const keys = await getJwks('https://mock.com');
+ expect(keys).to.deep.equal(jwksResponse.keys);
+
+ getStub.restore();
+ });
+
+ it('should throw error if fetch fails', async () => {
+ const stub = sinon.stub(axios, 'get').rejects(new Error('Network fail'));
+ try {
+ await getJwks('https://fail.com');
+ } catch (err) {
+ expect(err.message).to.equal('Failed to fetch JWKS');
+ }
+ stub.restore();
+ });
+});
+
+describe('validateJwt', () => {
+ let decodeStub;
+ let verifyStub;
+ let pemStub;
+ let getJwksStub;
+
+ beforeEach(() => {
+ const jwksResponse = { keys: [{ kid: 'test-key', kty: 'RSA', n: 'abc', e: 'AQAB' }] };
+ const getStub = sinon.stub(axios, 'get');
+ getStub.onFirstCall().resolves({ data: { jwks_uri: 'https://mock.com/jwks' } });
+ getStub.onSecondCall().resolves({ data: jwksResponse });
+
+ getJwksStub = sinon.stub().resolves(jwksResponse.keys);
+ decodeStub = sinon.stub(jwt, 'decode');
+ verifyStub = sinon.stub(jwt, 'verify');
+ pemStub = sinon.stub(jwkToBuffer);
+
+ pemStub.returns('fake-public-key');
+ getJwksStub.returns(jwksResponse.keys);
+ });
+
+ afterEach(() => sinon.restore());
+
+ it('should validate a correct JWT', async () => {
+ const mockJwk = { kid: '123', kty: 'RSA', n: 'abc', e: 'AQAB' };
+ const mockPem = 'fake-public-key';
+
+ decodeStub.returns({ header: { kid: '123' } });
+ getJwksStub.resolves([mockJwk]);
+ pemStub.returns(mockPem);
+ verifyStub.returns({ azp: 'client-id', sub: 'user123' });
+
+ const { verifiedPayload } = await validateJwt('fake.token.here', 'https://issuer.com', 'client-id', 'client-id', getJwksStub);
+ expect(verifiedPayload.sub).to.equal('user123');
+ });
+
+ it('should return error if JWT invalid', async () => {
+ decodeStub.returns(null); // Simulate broken token
+
+ const { error } = await validateJwt('bad.token', 'https://issuer.com', 'client-id', 'client-id', getJwksStub);
+ expect(error).to.include('Invalid JWT');
+ });
+});
+
+describe('assignRoles', () => {
+ it('should assign admin role based on claim', () => {
+ const user = { username: 'admin-user' };
+ const payload = { admin: 'admin' };
+ const mapping = { admin: { 'admin': 'admin' } };
+
+ assignRoles(mapping, payload, user);
+ expect(user.admin).to.be.true;
+ });
+
+ it('should assign multiple roles based on claims', () => {
+ const user = { username: 'multi-role-user' };
+ const payload = { 'custom-claim-admin': 'custom-value', 'editor': 'editor' };
+ const mapping = { admin: { 'custom-claim-admin': 'custom-value' }, editor: { 'editor': 'editor' } };
+
+ assignRoles(mapping, payload, user);
+ expect(user.admin).to.be.true;
+ expect(user.editor).to.be.true;
+ });
+
+ it('should not assign role if claim mismatch', () => {
+ const user = { username: 'basic-user' };
+ const payload = { admin: 'nope' };
+ const mapping = { admin: { admin: 'admin' } };
+
+ assignRoles(mapping, payload, user);
+ expect(user.admin).to.be.undefined;
+ });
+
+ it('should not assign role if no mapping provided', () => {
+ const user = { username: 'no-role-user' };
+ const payload = { admin: 'admin' };
+
+ assignRoles(null, payload, user);
+ expect(user.admin).to.be.undefined;
+ });
+});
+
+describe('jwtAuthHandler', () => {
+ let req;
+ let res;
+ let next;
+ let jwtConfig;
+ let validVerifyResponse;
+
+ beforeEach(() => {
+ req = { header: sinon.stub(), isAuthenticated: sinon.stub(), user: {} };
+ res = { status: sinon.stub().returnsThis(), send: sinon.stub() };
+ next = sinon.stub();
+
+ jwtConfig = {
+ clientID: 'client-id',
+ authorityURL: 'https://accounts.google.com',
+ expectedAudience: 'expected-audience',
+ roleMapping: { 'admin': { 'admin': 'admin' } }
+ };
+
+ validVerifyResponse = {
+ header: { kid: '123' },
+ azp: 'client-id',
+ sub: 'user123',
+ admin: 'admin'
+ };
+ });
+
+ afterEach(() => {
+ sinon.restore();
+ });
+
+ it('should call next if user is authenticated', async () => {
+ req.isAuthenticated.returns(true);
+ await jwtAuthHandler()(req, res, next);
+ expect(next.calledOnce).to.be.true;
+ });
+
+ it('should return 401 if no token provided', async () => {
+ req.header.returns(null);
+ await jwtAuthHandler(jwtConfig)(req, res, next);
+
+ expect(res.status.calledWith(401)).to.be.true;
+ expect(res.send.calledWith('No token provided\n')).to.be.true;
+ });
+
+ it('should return 500 if authorityURL not configured', async () => {
+ req.header.returns('Bearer fake-token');
+ jwtConfig.authorityURL = null;
+ sinon.stub(jwt, 'verify').returns(validVerifyResponse);
+
+ await jwtAuthHandler(jwtConfig)(req, res, next);
+
+ expect(res.status.calledWith(500)).to.be.true;
+ expect(res.send.calledWith('OIDC authority URL is not configured\n')).to.be.true;
+ });
+
+ it('should return 500 if clientID not configured', async () => {
+ req.header.returns('Bearer fake-token');
+ jwtConfig.clientID = null;
+ sinon.stub(jwt, 'verify').returns(validVerifyResponse);
+
+ await jwtAuthHandler(jwtConfig)(req, res, next);
+
+ expect(res.status.calledWith(500)).to.be.true;
+ expect(res.send.calledWith('OIDC client ID is not configured\n')).to.be.true;
+ });
+
+ it('should return 401 if JWT validation fails', async () => {
+ req.header.returns('Bearer fake-token');
+ sinon.stub(jwt, 'verify').throws(new Error('Invalid token'));
+
+ await jwtAuthHandler(jwtConfig)(req, res, next);
+
+ expect(res.status.calledWith(401)).to.be.true;
+ expect(res.send.calledWithMatch(/JWT validation failed:/)).to.be.true;
+ });
+});
diff --git a/test/testLogin.test.js b/test/testLogin.test.js
index 107bb7256..dea0cfc75 100644
--- a/test/testLogin.test.js
+++ b/test/testLogin.test.js
@@ -52,6 +52,27 @@ describe('auth', async () => {
res.should.have.status(200);
});
+ it('should be able to set the git account', async function () {
+ console.log(`cookie: ${cookie}`);
+ const res = await chai.request(app).post('/api/auth/gitAccount')
+ .set('Cookie', `${cookie}`)
+ .send({
+ username: 'admin',
+ gitAccount: 'new-account',
+ });
+ res.should.have.status(200);
+ });
+
+ it('should throw an error if the username is not provided when setting the git account', async function () {
+ const res = await chai.request(app).post('/api/auth/gitAccount')
+ .set('Cookie', `${cookie}`)
+ .send({
+ gitAccount: 'new-account',
+ });
+ console.log(`res: ${JSON.stringify(res)}`);
+ res.should.have.status(400);
+ });
+
it('should now be able to logout', async function () {
const res = await chai.request(app).post('/api/auth/logout').set('Cookie', `${cookie}`);
res.should.have.status(200);
@@ -78,6 +99,27 @@ describe('auth', async () => {
});
res.should.have.status(401);
});
+
+ it('should fail to set the git account if the user is not logged in', async function () {
+ const res = await chai.request(app).post('/api/auth/gitAccount').send({
+ username: 'admin',
+ gitAccount: 'new-account',
+ });
+ res.should.have.status(401);
+ });
+
+ it('should fail to get the current user metadata if not logged in', async function () {
+ const res = await chai.request(app).get('/api/auth/me');
+ res.should.have.status(401);
+ });
+
+ it('should fail to login with invalid credentials', async function () {
+ const res = await chai.request(app).post('/api/auth/login').send({
+ username: 'admin',
+ password: 'invalid',
+ });
+ res.should.have.status(401);
+ });
});
after(async function () {
diff --git a/test/testProxyRoute.js b/test/testProxyRoute.js
deleted file mode 100644
index 001a2d386..000000000
--- a/test/testProxyRoute.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const handleMessage = require('../src/proxy/routes').handleMessage;
-const chai = require('chai');
-
-const expect = chai.expect;
-
-// Use this test as a template
-describe('proxy error messages', async () => {
- it('should handle short messages', async function () {
- const res = await handleMessage('one');
- expect(res).to.contain('one');
- });
-
- it('should handle emoji messages', async function () {
- const res = await handleMessage('â push failed: too many errors');
- expect(res).to.contain('â');
- });
-});
diff --git a/test/testProxyRoute.test.js b/test/testProxyRoute.test.js
new file mode 100644
index 000000000..1a9a97d2b
--- /dev/null
+++ b/test/testProxyRoute.test.js
@@ -0,0 +1,204 @@
+const { handleMessage, validGitRequest, stripGitHubFromGitPath } = require('../src/proxy/routes');
+const chai = require('chai');
+const chaiHttp = require('chai-http');
+const sinon = require('sinon');
+const express = require('express');
+const proxyRouter = require('../src/proxy/routes').router;
+const chain = require('../src/proxy/chain');
+
+chai.use(chaiHttp);
+chai.should();
+const expect = chai.expect;
+
+describe('proxy route filter middleware', () => {
+ let app;
+
+ beforeEach(() => {
+ app = express();
+ app.use('/', proxyRouter);
+ });
+
+ afterEach(() => {
+ sinon.restore();
+ });
+
+ it('should reject invalid git requests with 400', async () => {
+ const res = await chai
+ .request(app)
+ .get('/owner/repo.git/invalid/path')
+ .set('user-agent', 'git/2.42.0')
+ .set('accept', 'application/x-git-upload-pack-request');
+
+ expect(res).to.have.status(400);
+ expect(res.text).to.equal('Invalid request received');
+ });
+
+ it('should handle blocked requests and return custom packet message', async () => {
+ sinon.stub(chain, 'executeChain').resolves({
+ blocked: true,
+ blockedMessage: 'You shall not push!',
+ error: true,
+ });
+
+ const res = await chai
+ .request(app)
+ .post('/owner/repo.git/git-upload-pack')
+ .set('user-agent', 'git/2.42.0')
+ .set('accept', 'application/x-git-upload-pack-request')
+ .send(Buffer.from('0000'))
+ .buffer();
+
+ expect(res.status).to.equal(200);
+ expect(res.text).to.contain('You shall not push!');
+ expect(res.headers['content-type']).to.include('application/x-git-receive-pack-result');
+ expect(res.headers['x-frame-options']).to.equal('DENY');
+ });
+
+ describe('when request is valid and not blocked', () => {
+ it('should return error if repo is not found', async () => {
+ sinon.stub(chain, 'executeChain').resolves({
+ blocked: false,
+ blockedMessage: '',
+ error: false,
+ });
+
+ const res = await chai
+ .request(app)
+ .get('/owner/repo.git/info/refs?service=git-upload-pack')
+ .set('user-agent', 'git/2.42.0')
+ .set('accept', 'application/x-git-upload-pack-request')
+ .buffer();
+
+ expect(res.status).to.equal(401);
+ expect(res.text).to.equal('Repository not found.');
+ });
+
+ it('should pass through if repo is found', async () => {
+ sinon.stub(chain, 'executeChain').resolves({
+ blocked: false,
+ blockedMessage: '',
+ error: false,
+ });
+
+ const res = await chai
+ .request(app)
+ .get('/finos/git-proxy.git/info/refs?service=git-upload-pack')
+ .set('user-agent', 'git/2.42.0')
+ .set('accept', 'application/x-git-upload-pack-request')
+ .buffer();
+
+ expect(res.status).to.equal(200);
+ expect(res.text).to.contain('git-upload-pack');
+ });
+ });
+});
+
+describe('proxy route helpers', () => {
+ describe('handleMessage', async () => {
+ it('should handle short messages', async function () {
+ const res = await handleMessage('one');
+ expect(res).to.contain('one');
+ });
+
+ it('should handle emoji messages', async function () {
+ const res = await handleMessage('â push failed: too many errors');
+ expect(res).to.contain('â');
+ });
+ });
+
+ describe('validGitRequest', () => {
+ it('should return true for /info/refs?service=git-upload-pack with valid user-agent', () => {
+ const res = validGitRequest('/info/refs?service=git-upload-pack', {
+ 'user-agent': 'git/2.30.1',
+ });
+ expect(res).to.be.true;
+ });
+
+ it('should return true for /info/refs?service=git-receive-pack with valid user-agent', () => {
+ const res = validGitRequest('/info/refs?service=git-receive-pack', {
+ 'user-agent': 'git/1.9.1',
+ });
+ expect(res).to.be.true;
+ });
+
+ it('should return false for /info/refs?service=git-upload-pack with missing user-agent', () => {
+ const res = validGitRequest('/info/refs?service=git-upload-pack', {});
+ expect(res).to.be.false;
+ });
+
+ it('should return false for /info/refs?service=git-upload-pack with non-git user-agent', () => {
+ const res = validGitRequest('/info/refs?service=git-upload-pack', {
+ 'user-agent': 'curl/7.79.1',
+ });
+ expect(res).to.be.false;
+ });
+
+ it('should return true for /git-upload-pack with valid user-agent and accept', () => {
+ const res = validGitRequest('/git-upload-pack', {
+ 'user-agent': 'git/2.40.0',
+ accept: 'application/x-git-upload-pack-request',
+ });
+ expect(res).to.be.true;
+ });
+
+ it('should return false for /git-upload-pack with missing accept header', () => {
+ const res = validGitRequest('/git-upload-pack', {
+ 'user-agent': 'git/2.40.0',
+ });
+ expect(res).to.be.false;
+ });
+
+ it('should return false for /git-upload-pack with wrong accept header', () => {
+ const res = validGitRequest('/git-upload-pack', {
+ 'user-agent': 'git/2.40.0',
+ accept: 'application/json',
+ });
+ expect(res).to.be.false;
+ });
+
+ it('should return false for unknown paths', () => {
+ const res = validGitRequest('/not-a-valid-git-path', {
+ 'user-agent': 'git/2.40.0',
+ accept: 'application/x-git-upload-pack-request',
+ });
+ expect(res).to.be.false;
+ });
+ });
+
+ describe('stripGitHubFromGitPath', () => {
+ it('should strip owner and repo from a valid GitHub-style path with 4 parts', () => {
+ const res = stripGitHubFromGitPath('/foo/bar.git/info/refs');
+ expect(res).to.equal('/info/refs');
+ });
+
+ it('should strip owner and repo from a valid GitHub-style path with 5 parts', () => {
+ const res = stripGitHubFromGitPath('/foo/bar.git/git-upload-pack');
+ expect(res).to.equal('/git-upload-pack');
+ });
+
+ it('should return undefined for malformed path with too few segments', () => {
+ const res = stripGitHubFromGitPath('/foo/bar.git');
+ expect(res).to.be.undefined;
+ });
+
+ it('should return undefined for malformed path with too many segments', () => {
+ const res = stripGitHubFromGitPath('/foo/bar.git/extra/path/stuff');
+ expect(res).to.be.undefined;
+ });
+
+ it('should handle repo names that include dots correctly', () => {
+ const res = stripGitHubFromGitPath('/foo/some.repo.git/info/refs');
+ expect(res).to.equal('/info/refs');
+ });
+
+ it('should not break if the path is just a slash', () => {
+ const res = stripGitHubFromGitPath('/');
+ expect(res).to.be.undefined;
+ });
+
+ it('should not break if the path is empty', () => {
+ const res = stripGitHubFromGitPath('');
+ expect(res).to.be.undefined;
+ });
+ });
+});
diff --git a/test/testRouteFilter.js b/test/testRouteFilter.test.js
similarity index 100%
rename from test/testRouteFilter.js
rename to test/testRouteFilter.test.js
diff --git a/test/testUserCreation.test.js b/test/testUserCreation.test.js
deleted file mode 100644
index 631be0069..000000000
--- a/test/testUserCreation.test.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// Import the dependencies for testing
-const chai = require('chai');
-const bcrypt = require('bcryptjs');
-const chaiHttp = require('chai-http');
-const db = require('../src/db');
-const service = require('../src/service');
-
-chai.use(chaiHttp);
-chai.should();
-const expect = chai.expect;
-const should = chai.should();
-
-describe('user creation', async () => {
- let app;
- let cookie;
-
- const setCookie = function (res) {
- res.headers['set-cookie'].forEach((x) => {
- if (x.startsWith('connect')) {
- const value = x.split(';')[0];
- cookie = value;
- }
- });
- };
-
- before(async function () {
- app = await service.start();
- await db.deleteUser('login-test-user');
- });
-
- it('should be able to login', async function () {
- const res = await chai.request(app).post('/api/auth/login').send({
- username: 'admin',
- password: 'admin',
- });
-
- expect(res).to.have.cookie('connect.sid');
- res.should.have.status(200);
- setCookie(res);
- });
-
- it('should be able to create a new user', async function () {
- const res = await chai.request(app).post('/api/auth/profile').set('Cookie', `${cookie}`).send({
- username: 'login-test-user',
- email: 'paul.timothy.groves@gmail.com',
- gitAccount: 'test123',
- admin: true,
- });
- res.should.have.status(200);
- }).skip();
-
- it('logout', async function () {
- const res = await chai.request(app).post('/api/auth/logout').set('Cookie', `${cookie}`);
- res.should.have.status(200);
- });
-
- it('login as new user', async function () {
- // we don't know the users temporary password - so force update a password
- const user = await db.findUser('login-test-user');
-
- await bcrypt.hash('test1234', 10, async function (err, hash) {
- user.password = hash;
-
- await db.updateUser(user);
-
- const res = await chai.request(app).post('/api/auth/login').send({
- username: 'login-test-user',
- password: 'test1234',
- });
-
- expect(res).to.have.cookie('connect.sid');
- res.should.have.status(200);
- setCookie(res);
- });
- });
-
- it('should access the profile', async function () {
- const res = await chai.request(app).get('/api/auth/profile').set('Cookie', `${cookie}`);
- res.should.have.status(200);
-
- res.body.username.should.equal('login-test-user');
- should.not.exist(res.body.password);
- });
-
- after(async function () {
- await service.httpServer.close();
- });
-});
diff --git a/website/docs/configuration/authentication.mdx b/website/docs/configuration/authentication.mdx
new file mode 100644
index 000000000..626c4f746
--- /dev/null
+++ b/website/docs/configuration/authentication.mdx
@@ -0,0 +1,136 @@
+---
+title: Authentication
+description: How to customize authentication methods for UI login and API
+---
+
+GitProxy allows setting up various auth methods for both UI users, and the backend API.
+
+### Where to Configure Auth Methods
+
+Auth methods can be configured in [proxy.config.json](https://github.com/finos/git-proxy/blob/main/proxy.config.json). The `authentication` array allows setting UI authentication, for user login and management purposes. The `apiAuthentication` array allows setting up an _optional_ authentication layer for extra API security.
+
+### Default Configuration
+
+By default, GitProxy has a **local** UI authentication method enabled. Although not particularly secure, this allows logging in with simple user/password combinations for signup and login.
+
+### Supported Methods
+
+#### UI Auth
+
+Currently, GitProxy supports three differemt methods for user creation and login:
+- Local
+- ActiveDirectory
+- OIDC
+
+Each of these has its own specific config entry with necessary parameters for setting up the method.
+
+#### API Auth
+
+GitProxy also supports protecting API endpoints with extra auth layers. Currently, the only available method is JWT - but this can be easily extended to use your own methods such as GitHub login and more.
+
+### Sample Configuration - UI
+
+#### Active Directory
+
+A default, empty setup for OIDC is already present in [proxy.config.json](https://github.com/finos/git-proxy/blob/main/proxy.config.json):
+
+```json
+{
+ "type": "ActiveDirectory",
+ "enabled": false,
+ "adminGroup": "",
+ "userGroup": "",
+ "domain": "",
+ "adConfig": {
+ "url": "",
+ "baseDN": "",
+ "searchBase": ""
+ }
+},
+```
+
+#### OIDC
+
+A default, empty setup for OIDC is already present in [proxy.config.json](https://github.com/finos/git-proxy/blob/main/proxy.config.json). You can fill this in with your required parameters. Here's an example using Google as a login provider:
+
+```json
+"authentication": [
+ {
+ "type": "openidconnect",
+ "enabled": true,
+ "oidcConfig": {
+ "issuer": "https://accounts.google.com",
+ "clientID": "
",
+ "clientSecret": "",
+ "callbackURL": "http://localhost:8080/api/auth/oidc/callback",
+ "scope": "email profile"
+ }
+ }
+],
+```
+
+Notice that the `callbackURL` (`/api/auth/oidc/callback`) must be set both in your provider and this config file for the flow to work.
+
+### Sample Configuration - API
+
+#### JWT
+
+JWT auth is ideal for using the GitProxy API along with CI tools and automation. It allows verifying credentials and admin permissions to use GitProxy securely in scripts, CI/CD pipelines and more.
+
+You will need an existing OIDC setup to release valid JWT tokens.
+
+**Warning: GitProxy does not provide/release JWT tokens for API validation.** Your service (configured through `jwtConfig`) will have to do this on its own. For example, it could be an app that allows users to log in through Google, and releases a JWT `access_token` with a one hour expiry date.
+
+If the `jwt` auth method is enabled in the config, you'll notice that UI requests are no longer working. This is expected since the endpoints require a valid JWT to proceed. Once the `Bearer: ` authorization header is added, you should be able to access the endpoints as usual.
+
+##### JWT Role Mapping
+
+JWT auth also allows authenticating to specific in-app roles by using JWT `claims`. In the following sample config, Google JWT tokens that contain the following `claim` (`name: "John Doe"`) will be assigned the in-app admin role:
+
+```json
+"apiAuthentication": [
+ {
+ "type": "jwt",
+ "enabled": true,
+ "jwtConfig": {
+ "clientID": "",
+ "authorityURL": "https://accounts.google.com",
+ "expectedAudience": "",
+ "roleMapping": {
+ "admin": {
+ "name": "John Doe"
+ }
+ }
+ }
+ }
+],
+```
+
+In other words, your JWT token provider can define an arbitrary `claim` that can be mapped to any app role you want, such as `admin`, or a custom role such as `ci-only`. This allows for granular access control for automation solutions using GitProxy.
+
+Note that if the `expectedAudience` is missing, it will be set to the client ID.
+
+### Adding your own methods
+
+You can add new UI auth methods by extending the [passport.js configuration file](https://github.com/finos/git-proxy/blob/main/src/service/passport/local.js) with your desired method. You'll have to define a module and then add it to the `authStrategies` map:
+
+```js
+const local = require('./local');
+const activeDirectory = require('./activeDirectory');
+const oidc = require('./oidc');
+
+const authStrategies = {
+ local: local,
+ activedirectory: activeDirectory,
+ openidconnect: oidc,
+};
+```
+
+Check out the files in [src/service/passport](https://github.com/finos/git-proxy/blob/main/src/service/passport) for examples on how to define the specific `configure()` functions for each method:
+- [Local](https://github.com/finos/git-proxy/blob/main/src/service/passport/local.js)
+- [ActiveDirectory](https://github.com/finos/git-proxy/blob/main/src/service/passport/activeDirectory.js)
+- [OIDC](https://github.com/finos/git-proxy/blob/main/src/service/passport/oidc.js)
+
+### Questions?
+
+If you have any questions, feel free to [open a discussion](https://github.com/finos/git-proxy/discussions).
\ No newline at end of file
diff --git a/website/docs/configuration/reference.mdx b/website/docs/configuration/reference.mdx
index 3b8402305..8a5fae462 100644
--- a/website/docs/configuration/reference.mdx
+++ b/website/docs/configuration/reference.mdx
@@ -71,6 +71,81 @@ description: JSON schema reference documentation for GitProxy
**Description:** Third party APIs
+
+
+ 4.1. [Optional] Property GitProxy configuration file > api > ls
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+**Description:** Configuration used in conjunction with ActiveDirectory auth, which relates to a REST API used to check user group membership, as opposed to direct querying via LDAP.
If this configuration is set direct querying of group membership via LDAP will be disabled.
+
+
+
+ 4.1.1. [Optional] Property GitProxy configuration file > api > ls > userInADGroup
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | No |
+
+**Description:** URL template for a GET request that confirms a user's membership of a specific group. Should respond with a non-empty 200 status if the user is a member of the group, an empty response or non-200 status indicates that the user is not a group member. If set, this URL will be queried and direct queries via LDAP will be disabled. The template should contain the following string placeholders, which will be replaced to produce the final URL:- "<domain>": AD domain,
- "<name>": The group name to check membership of.
- "<id>": The username to check group membership for.
+
+**Example:**
+
+```json
+"https://somedomain.com/some/path/checkUserGroups?domain=&name=&id="
+```
+
+
+
+
+
+
+
+
+
+ 4.2. [Optional] Property GitProxy configuration file > api > github
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+
+
+ 4.2.1. [Optional] Property GitProxy configuration file > api > github > baseUrl
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | No |
+| **Format** | `uri` |
+
+**Example:**
+
+```json
+"https://api.github.com"
+```
+
+
+
+
+
+
+
@@ -482,22 +557,216 @@ description: JSON schema reference documentation for GitProxy
**Description:** List of authentication sources. The first source in the configuration with enabled=true will be used.
-| Each item of this array must be | Description |
-| --------------------------------------- | ----------- |
-| [authentication](#authentication_items) | - |
+| Each item of this array must be | Description |
+| --------------------------------------- | ------------------------------------------ |
+| [authentication](#authentication_items) | Configuration for an authentication source |
### 16.1. GitProxy configuration file > authentication > authentication
| | |
| ------------------------- | ---------------------------- |
-| **Type** | `object` |
+| **Type** | `combining` |
| **Required** | No |
| **Additional properties** | Any type allowed |
| **Defined in** | #/definitions/authentication |
+**Description:** Configuration for an authentication source
+
+
+
+| One of(Option) |
+| -------------------------------------------------------------- |
+| [Local Auth Config](#authentication_items_oneOf_i0) |
+| [Active Directory Auth Config](#authentication_items_oneOf_i1) |
+| [Open ID Connect Auth Config](#authentication_items_oneOf_i2) |
+| [JWT Auth Config](#authentication_items_oneOf_i3) |
+
+
+
+#### 16.1.1. Property `GitProxy configuration file > authentication > authentication items > oneOf > Local Auth Config`
+
+**Title:** Local Auth Config
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+**Description:** Configuration for the use of the local database as the authentication source.
+
+
+
+ 16.1.1.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Local Auth Config > type
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `const` |
+| **Required** | Yes |
+
+Specific value: `"local"`
+
+
+
+
+
+
+ 16.1.1.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Local Auth Config > enabled
+
+
+
+| | |
+| ------------ | --------- |
+| **Type** | `boolean` |
+| **Required** | Yes |
+
+
+
+
+
+
+
+#### 16.1.2. Property `GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config`
+
+**Title:** Active Directory Auth Config
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+**Description:** Configuration for Active Directory authentication.
+
+
+
+ 16.1.2.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > type
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `const` |
+| **Required** | Yes |
+
+Specific value: `"ActiveDirectory"`
+
+
+
+
+
+
+ 16.1.2.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > enabled
+
+
+
+| | |
+| ------------ | --------- |
+| **Type** | `boolean` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.2.3. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adminGroup
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** Group that indicates that a user is an admin
+
+
+
+
+
+
+ 16.1.2.4. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > userGroup
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** Group that indicates that a user should be able to login to the Git Proxy UI and can work as a reviewer
+
+
+
+
+
+
+ 16.1.2.5. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > domain
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** Active Directory domain
+
+
+
+
+
+
+ 16.1.2.6. [Optional] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adConfig
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+**Description:** Additional Active Directory configuration supporting LDAP connection which can be used to confirm group membership. For the full set of available options see the activedirectory 2 NPM module docs at https://www.npmjs.com/package/activedirectory2#activedirectoryoptions
Please note that if the Third Party APIs config `api.ls.userInADGroup` is set then the REST API it represents is used in preference to direct querying of group memebership via LDAP.
+
+
+
+ 16.1.2.6.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adConfig > url
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** Active Directory server to connect to, e.g. `ldap://ad.example.com`.
+
+
+
+
+
+
+ 16.1.2.6.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adConfig > baseDN
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** The root DN from which all searches will be performed, e.g. `dc=example,dc=com`.
+
+
+
+
- 16.1.1. [Required] Property GitProxy configuration file > authentication > authentication items > type
+ 16.1.2.6.3. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adConfig > username
@@ -506,12 +775,64 @@ description: JSON schema reference documentation for GitProxy
| **Type** | `string` |
| **Required** | Yes |
+**Description:** An account name capable of performing the operations desired.
+
- 16.1.2. [Required] Property GitProxy configuration file > authentication > authentication items > enabled
+ 16.1.2.6.4. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Active Directory Auth Config > adConfig > password
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+**Description:** Password for the given `username`.
+
+
+
+
+
+
+
+
+
+
+#### 16.1.3. Property `GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config`
+
+**Title:** Open ID Connect Auth Config
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+**Description:** Configuration for Open ID Connect authentication.
+
+
+
+ 16.1.3.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > type
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `const` |
+| **Required** | Yes |
+
+Specific value: `"openidconnect"`
+
+
+
+
+
+
+ 16.1.3.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > enabled
@@ -525,19 +846,185 @@ description: JSON schema reference documentation for GitProxy
- 16.1.3. [Optional] Property GitProxy configuration file > authentication > authentication items > options
+ 16.1.3.3. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | Yes |
+| **Additional properties** | Any type allowed |
+
+**Description:** Additional OIDC configuration.
+
+
+
+ 16.1.3.3.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig > issuer
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.3.3.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig > clientID
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.3.3.3. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig > clientSecret
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.3.3.4. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig > callbackURL
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.3.3.5. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > Open ID Connect Auth Config > oidcConfig > scope
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+
+
+
+
+#### 16.1.4. Property `GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config`
+
+**Title:** JWT Auth Config
+
| | |
| ------------------------- | ---------------- |
| **Type** | `object` |
| **Required** | No |
| **Additional properties** | Any type allowed |
+**Description:** Configuration for JWT authentication.
+
+
+
+ 16.1.4.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config > type
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `const` |
+| **Required** | Yes |
+
+Specific value: `"jwt"`
+
+
+
+ 16.1.4.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config > enabled
+
+
+
+| | |
+| ------------ | --------- |
+| **Type** | `boolean` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.4.3. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config > jwtConfig
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | Yes |
+| **Additional properties** | Any type allowed |
+
+**Description:** Additional JWT configuration.
+
+
+
+ 16.1.4.3.1. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config > jwtConfig > clientID
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+ 16.1.4.3.2. [Required] Property GitProxy configuration file > authentication > authentication items > oneOf > JWT Auth Config > jwtConfig > authorityURL
+
+
+
+| | |
+| ------------ | -------- |
+| **Type** | `string` |
+| **Required** | Yes |
+
+
+
+
+
+
+
+
+
+
+
@@ -591,7 +1078,38 @@ description: JSON schema reference documentation for GitProxy
- 18. [Optional] Property GitProxy configuration file > tls
+ 18. [Optional] Property GitProxy configuration file > apiAuthentication
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `array` |
+| **Required** | No |
+
+**Description:** List of authentication sources for API endpoints. May be empty, in which case all endpoints are public.
+
+| Each item of this array must be | Description |
+| ------------------------------------------ | ------------------------------------------ |
+| [authentication](#apiAuthentication_items) | Configuration for an authentication source |
+
+### 18.1. GitProxy configuration file > apiAuthentication > authentication
+
+| | |
+| ------------------------- | --------------------------------------------- |
+| **Type** | `combining` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+| **Same definition as** | [authentication_items](#authentication_items) |
+
+**Description:** Configuration for an authentication source
+
+
+
+
+
+
+ 19. [Optional] Property GitProxy configuration file > tls
@@ -605,7 +1123,7 @@ description: JSON schema reference documentation for GitProxy
- 18.1. [Required] Property GitProxy configuration file > tls > enabled
+ 19.1. [Required] Property GitProxy configuration file > tls > enabled
@@ -619,7 +1137,7 @@ description: JSON schema reference documentation for GitProxy
- 18.2. [Required] Property GitProxy configuration file > tls > key
+ 19.2. [Required] Property GitProxy configuration file > tls > key
@@ -633,7 +1151,7 @@ description: JSON schema reference documentation for GitProxy
- 18.3. [Required] Property GitProxy configuration file > tls > cert
+ 19.3. [Required] Property GitProxy configuration file > tls > cert
@@ -650,21 +1168,36 @@ description: JSON schema reference documentation for GitProxy
- 19. [Optional] Property GitProxy configuration file > configurationSources
+ 20. [Optional] Property GitProxy configuration file > configurationSources
+
+
+
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+
+
+
+
+
+
+ 21. [Optional] Property GitProxy configuration file > uiRouteAuth
-| | |
-| ------------------------- | ------------------------------------------------------- |
-| **Type** | `object` |
-| **Required** | No |
-| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") |
+| | |
+| ------------------------- | ---------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
-**Description:** Configuration for dynamic loading from external sources
+**Description:** UI routes that require authentication (logged in or admin)
- 19.1. [Optional] Property configurationSources > enabled
+ 21.1. [Optional] Property GitProxy configuration file > uiRouteAuth > enabled
@@ -673,30 +1206,50 @@ description: JSON schema reference documentation for GitProxy
| **Type** | `boolean` |
| **Required** | No |
-**Description:** Enable/disable dynamic configuration loading
-
- 19.2. [Optional] Property configurationSources > reloadIntervalSeconds
+ 21.2. [Optional] Property GitProxy configuration file > uiRouteAuth > rules
+
+
+
+| | |
+| ------------ | ------- |
+| **Type** | `array` |
+| **Required** | No |
+
+| Each item of this array must be | Description |
+| ----------------------------------------- | ----------- |
+| [routeAuthRule](#uiRouteAuth_rules_items) | - |
+
+#### 21.2.1. GitProxy configuration file > uiRouteAuth > rules > routeAuthRule
+
+| | |
+| ------------------------- | --------------------------- |
+| **Type** | `object` |
+| **Required** | No |
+| **Additional properties** | Any type allowed |
+| **Defined in** | #/definitions/routeAuthRule |
+
+
+
+ 21.2.1.1. [Optional] Property GitProxy configuration file > uiRouteAuth > rules > rules items > pattern
| | |
| ------------ | -------- |
-| **Type** | `number` |
+| **Type** | `string` |
| **Required** | No |
-**Description:** How often to check for configuration updates (in seconds)
-
- 19.3. [Optional] Property configurationSources > merge
+ 21.2.1.2. [Optional] Property GitProxy configuration file > uiRouteAuth > rules > rules items > adminOnly
@@ -705,41 +1258,19 @@ description: JSON schema reference documentation for GitProxy
| **Type** | `boolean` |
| **Required** | No |
-**Description:** When true, merges configurations from all enabled sources. When false, uses the last successful configuration load
-
- 19.4. [Optional] Property configurationSources > sources
+ 21.2.1.3. [Optional] Property GitProxy configuration file > uiRouteAuth > rules > rules items > loginRequired
-| | |
-| ------------ | ------- |
-| **Type** | `array` |
-| **Required** | No |
-
-**Description:** Array of configuration sources to load from
-
-Each item in the array must be an object with the following properties:
-
-- `type`: (Required) Type of configuration source (`"file"`, `"http"`, or `"git"`)
-- `enabled`: (Required) Whether this source is enabled
-- `path`: (Required for `file` type) Path to the configuration file
-- `url`: (Required for `http` type) URL of the configuration endpoint
-- `repository`: (Required for `git` type) Git repository URL
-- `branch`: (Optional for `git` type) Branch to use
-- `path`: (Required for `git` type) Path to configuration file in repository
-- `headers`: (Optional for `http` type) HTTP headers to include
-- `auth`: (Optional) Authentication configuration
- - For `http` type:
- - `type`: `"bearer"`
- - `token`: Bearer token value
- - For `git` type:
- - `type`: `"ssh"`
- - `privateKeyPath`: Path to SSH private key
+| | |
+| ------------ | --------- |
+| **Type** | `boolean` |
+| **Required** | No |
@@ -747,6 +1278,8 @@ Each item in the array must be an object with the following properties:
----
+
+
-Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-05-01 at 18:17:32 +0100
+----------------------------------------------------------------------------------------------------------------------------
+Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2025-06-04 at 23:10:45 +0100
diff --git a/website/docs/development/contributing.mdx b/website/docs/development/contributing.mdx
index d1a22c78c..4b56f7467 100644
--- a/website/docs/development/contributing.mdx
+++ b/website/docs/development/contributing.mdx
@@ -41,3 +41,11 @@ When updating the configuration schema, you must also re-generate the reference
## About FINOS contributions
+
+## Community Meetings
+Join our [fortnightly Zoom meeting](https://zoom-lfx.platform.linuxfoundation.org/meeting/95849833904?password=99413314-d03a-4b1c-b682-1ede2c399595) on Monday, 4PM BST (odd week numbers).
+đ [Convert to your local time](https://www.timeanddate.com/worldclock)
+[Click here](https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=MTRvbzM0NG01dWNvNGc4OGJjNWphM2ZtaTZfMjAyNTA2MDJUMTUwMDAwWiBzYW0uaG9sbWVzQGNvbnRyb2wtcGxhbmUuaW8&tmsrc=sam.holmes%40control-plane.io&scp=ALL) for the recurring Google Calendar meeting invite.
+Alternatively, send an e-mail to [help@finos.org](https://zoom-lfx.platform.linuxfoundation.org/meeting/95849833904?password=99413314-d03a-4b1c-b682-1ede2c399595#:~:text=Need-,an,-invite%3F) to get a calendar invitation.
+
+Previous recordings available at: https://openprofile.dev
\ No newline at end of file
diff --git a/website/package.json b/website/package.json
index 9456a83c4..0f0e70f88 100644
--- a/website/package.json
+++ b/website/package.json
@@ -10,13 +10,13 @@
"publish-gh-pages": "docusaurus deploy"
},
"dependencies": {
- "@docusaurus/core": "^3.7.0",
- "@docusaurus/preset-classic": "^3.7.0",
- "@docusaurus/plugin-google-gtag": "^3.7.0",
- "axios": "^1.9.0",
+ "@docusaurus/core": "^3.8.1",
+ "@docusaurus/preset-classic": "^3.8.1",
+ "@docusaurus/plugin-google-gtag": "^3.8.1",
+ "axios": "^1.10.0",
"classnames": "^2.5.1",
"clsx": "^2.1.1",
- "eslint": "^9.27.0",
+ "eslint": "^9.30.1",
"eslint-plugin-react": "^7.37.5",
"react": "^19.1.0",
"react-dom": "^19.1.0",
diff --git a/website/yarn.lock b/website/yarn.lock
index ce259a41f..7ec035c31 100644
--- a/website/yarn.lock
+++ b/website/yarn.lock
@@ -158,7 +158,7 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.8.3":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465"
integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==
@@ -2021,43 +2021,43 @@
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
-"@csstools/cascade-layer-name-parser@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz#64d128529397aa1e1c986f685713363b262b81b1"
- integrity sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==
+"@csstools/cascade-layer-name-parser@^2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72"
+ integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==
-"@csstools/color-helpers@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.1.tgz#829f1c76f5800b79c51c709e2f36821b728e0e10"
- integrity sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==
+"@csstools/color-helpers@^5.0.2":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8"
+ integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==
-"@csstools/css-calc@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.1.tgz#a7dbc66627f5cf458d42aed14bda0d3860562383"
- integrity sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==
+"@csstools/css-calc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65"
+ integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==
-"@csstools/css-color-parser@^3.0.7":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz#442d61d58e54ad258d52c309a787fceb33906484"
- integrity sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==
+"@csstools/css-color-parser@^3.0.10":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz#79fc68864dd43c3b6782d2b3828bc0fa9d085c10"
+ integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==
dependencies:
- "@csstools/color-helpers" "^5.0.1"
- "@csstools/css-calc" "^2.1.1"
+ "@csstools/color-helpers" "^5.0.2"
+ "@csstools/css-calc" "^2.1.4"
-"@csstools/css-parser-algorithms@^3.0.4":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz#74426e93bd1c4dcab3e441f5cc7ba4fb35d94356"
- integrity sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==
+"@csstools/css-parser-algorithms@^3.0.5":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076"
+ integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==
-"@csstools/css-tokenizer@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz#a5502c8539265fecbd873c1e395a890339f119c2"
- integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==
+"@csstools/css-tokenizer@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3"
+ integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==
-"@csstools/media-query-list-parser@^4.0.2":
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz#e80e17eba1693fceafb8d6f2cfc68c0e7a9ab78a"
- integrity sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==
+"@csstools/media-query-list-parser@^4.0.3":
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1"
+ integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==
"@csstools/postcss-cascade-layers@^5.0.1":
version "5.0.1"
@@ -2067,46 +2067,57 @@
"@csstools/selector-specificity" "^5.0.0"
postcss-selector-parser "^7.0.0"
-"@csstools/postcss-color-function@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz#d31d2044d8a4f8b3154ac54ac77014879eae9f56"
- integrity sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==
+"@csstools/postcss-color-function@^4.0.10":
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz#11ad43a66ef2cc794ab826a07df8b5fa9fb47a3a"
+ integrity sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-color-mix-function@^3.0.7":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz#39735bbc84dc173061e4c2842ec656bb9bc6ed2e"
- integrity sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==
+"@csstools/postcss-color-mix-function@^3.0.10":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz#8c9d0ccfae5c45a9870dd84807ea2995c7a3a514"
+ integrity sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-content-alt-text@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz#76f4687fb15ed45bc1139bb71e5775779762897a"
- integrity sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==
+"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz#0b29cb9b4630d7ed68549db265662d41554a17ed"
+ integrity sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==
dependencies:
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-exponential-functions@^2.0.6":
+"@csstools/postcss-content-alt-text@^2.0.6":
version "2.0.6"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz#dcee86d22102576b13d8bea059125fbcf98e83cc"
- integrity sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz#548862226eac54bab0ee5f1bf3a9981393ab204b"
+ integrity sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==
+ dependencies:
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+ "@csstools/utilities" "^2.0.0"
+
+"@csstools/postcss-exponential-functions@^2.0.9":
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69"
+ integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==
dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
"@csstools/postcss-font-format-keywords@^4.0.0":
version "4.0.0"
@@ -2116,67 +2127,67 @@
"@csstools/utilities" "^2.0.0"
postcss-value-parser "^4.2.0"
-"@csstools/postcss-gamut-mapping@^2.0.7":
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz#8aaa4b6ffb6e2187379a83d253607f988533be25"
- integrity sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==
- dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
-
-"@csstools/postcss-gradients-interpolation-method@^5.0.7":
- version "5.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz#57e19d25e98aa028b98e22ef392ea24c3e61c568"
- integrity sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==
- dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+"@csstools/postcss-gamut-mapping@^2.0.10":
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz#f518d941231d721dbecf5b41e3c441885ff2f28b"
+ integrity sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==
+ dependencies:
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-gradients-interpolation-method@^5.0.10":
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz#3146da352c31142a721fdba062ac3a6d11dbbec3"
+ integrity sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==
+ dependencies:
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-hwb-function@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz#d09528098c4b99c49c76de686a4ae35585acc691"
- integrity sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==
+"@csstools/postcss-hwb-function@^4.0.10":
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz#f93f3c457e6440ac37ef9b908feb5d901b417d50"
+ integrity sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-ic-unit@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz#b60ec06500717c337447c39ae7fe7952eeb9d48f"
- integrity sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==
+"@csstools/postcss-ic-unit@^4.0.2":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz#7561e09db65fac8304ceeab9dd3e5c6e43414587"
+ integrity sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==
dependencies:
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
postcss-value-parser "^4.2.0"
-"@csstools/postcss-initial@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz#a86f5fc59ab9f16f1422dade4c58bd941af5df22"
- integrity sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==
+"@csstools/postcss-initial@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a"
+ integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==
-"@csstools/postcss-is-pseudo-class@^5.0.1":
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz#12041448fedf01090dd4626022c28b7f7623f58e"
- integrity sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==
+"@csstools/postcss-is-pseudo-class@^5.0.3":
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74"
+ integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==
dependencies:
"@csstools/selector-specificity" "^5.0.0"
postcss-selector-parser "^7.0.0"
-"@csstools/postcss-light-dark-function@^2.0.7":
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz#807c170cd28eebb0c00e64dfc6ab0bf418f19209"
- integrity sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==
+"@csstools/postcss-light-dark-function@^2.0.9":
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz#9fb080188907539734a9d5311d2a1cb82531ef38"
+ integrity sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==
dependencies:
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
"@csstools/postcss-logical-float-and-clear@^3.0.0":
@@ -2201,32 +2212,32 @@
dependencies:
postcss-value-parser "^4.2.0"
-"@csstools/postcss-logical-viewport-units@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz#f6cc63520ca2a6eb76b9cd946070c38dda66d733"
- integrity sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==
+"@csstools/postcss-logical-viewport-units@^3.0.4":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc"
+ integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==
dependencies:
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/css-tokenizer" "^3.0.4"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-media-minmax@^2.0.6":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz#427921c0f08033203810af16dfed0baedc538eab"
- integrity sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==
+"@csstools/postcss-media-minmax@^2.0.9":
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987"
+ integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==
dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/media-query-list-parser" "^4.0.2"
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/media-query-list-parser" "^4.0.3"
-"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.4":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz#d71102172c74baf3f892fac88cf1ea46a961600d"
- integrity sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==
+"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11"
+ integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==
dependencies:
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/media-query-list-parser" "^4.0.2"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/media-query-list-parser" "^4.0.3"
"@csstools/postcss-nested-calc@^4.0.0":
version "4.0.0"
@@ -2243,42 +2254,42 @@
dependencies:
postcss-value-parser "^4.2.0"
-"@csstools/postcss-oklab-function@^4.0.7":
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz#33b3322dfb27b0b5eb83a7ad36e67f08bc4e66cd"
- integrity sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==
+"@csstools/postcss-oklab-function@^4.0.10":
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz#d4c23c51dd0be45e6dedde22432d7d0003710780"
+ integrity sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-"@csstools/postcss-progressive-custom-properties@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz#ecdb85bcdb1852d73970a214a376684a91f82bdc"
- integrity sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==
+"@csstools/postcss-progressive-custom-properties@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz#70c8d41b577f4023633b7e3791604e0b7f3775bc"
+ integrity sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==
dependencies:
postcss-value-parser "^4.2.0"
-"@csstools/postcss-random-function@^1.0.2":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz#699702820f19bb6b9632966ff44d8957db6889d2"
- integrity sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==
- dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
-
-"@csstools/postcss-relative-color-syntax@^3.0.7":
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz#862f8c6a2bbbab1a46aff8265b6a095fd267a3a6"
- integrity sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==
- dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+"@csstools/postcss-random-function@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e"
+ integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==
+ dependencies:
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+
+"@csstools/postcss-relative-color-syntax@^3.0.10":
+ version "3.0.10"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz#daa840583969461e1e06b12e9c591e52a790ec86"
+ integrity sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==
+ dependencies:
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
"@csstools/postcss-scope-pseudo-class@^4.0.1":
@@ -2288,50 +2299,50 @@
dependencies:
postcss-selector-parser "^7.0.0"
-"@csstools/postcss-sign-functions@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz#eb8e4a5ac637982aeb9264cb99f85817612ad3e8"
- integrity sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==
+"@csstools/postcss-sign-functions@^1.1.4":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12"
+ integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==
dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
-"@csstools/postcss-stepped-value-functions@^4.0.6":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz#ee88c6122daf58a1b8641f462e8e33427c60b1f1"
- integrity sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==
+"@csstools/postcss-stepped-value-functions@^4.0.9":
+ version "4.0.9"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9"
+ integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==
dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
-"@csstools/postcss-text-decoration-shorthand@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz#251fab0939d50c6fd73bb2b830b2574188efa087"
- integrity sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==
+"@csstools/postcss-text-decoration-shorthand@^4.0.2":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz#a3bcf80492e6dda36477538ab8e8943908c9f80a"
+ integrity sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==
dependencies:
- "@csstools/color-helpers" "^5.0.1"
+ "@csstools/color-helpers" "^5.0.2"
postcss-value-parser "^4.2.0"
-"@csstools/postcss-trigonometric-functions@^4.0.6":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz#fc5c5f4c9bd0fd796b58b9a14d5d663be76d19fa"
- integrity sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==
+"@csstools/postcss-trigonometric-functions@^4.0.9":
+ version "4.0.9"
+ resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2"
+ integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==
dependencies:
- "@csstools/css-calc" "^2.1.1"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/css-calc" "^2.1.4"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
"@csstools/postcss-unset-value@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba"
integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==
-"@csstools/selector-resolve-nested@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a"
- integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==
+"@csstools/selector-resolve-nested@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7"
+ integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==
"@csstools/selector-specificity@^5.0.0":
version "5.0.0"
@@ -2348,25 +2359,25 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
-"@docsearch/css@3.8.3":
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.8.3.tgz#12f377cf8c14b687042273f920efdfdb794e9fcf"
- integrity sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==
+"@docsearch/css@3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.9.0.tgz#3bc29c96bf024350d73b0cfb7c2a7b71bf251cd5"
+ integrity sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==
-"@docsearch/react@^3.8.1":
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.8.3.tgz#72f6bcbbda6cd07f23398af641e483c27d16e00a"
- integrity sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==
+"@docsearch/react@^3.9.0":
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.9.0.tgz#d0842b700c3ee26696786f3c8ae9f10c1a3f0db3"
+ integrity sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==
dependencies:
"@algolia/autocomplete-core" "1.17.9"
"@algolia/autocomplete-preset-algolia" "1.17.9"
- "@docsearch/css" "3.8.3"
+ "@docsearch/css" "3.9.0"
algoliasearch "^5.14.2"
-"@docusaurus/babel@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.7.0.tgz#770dd5da525a9d6a2fee7d3212ec62040327f776"
- integrity sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==
+"@docusaurus/babel@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.8.1.tgz#db329ac047184214e08e2dbc809832c696c18506"
+ integrity sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==
dependencies:
"@babel/core" "^7.25.9"
"@babel/generator" "^7.25.9"
@@ -2378,55 +2389,54 @@
"@babel/runtime" "^7.25.9"
"@babel/runtime-corejs3" "^7.25.9"
"@babel/traverse" "^7.25.9"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/utils" "3.7.0"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
babel-plugin-dynamic-import-node "^2.3.3"
fs-extra "^11.1.1"
tslib "^2.6.0"
-"@docusaurus/bundler@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.7.0.tgz#d8e7867b3b2c43a1e320ed429f8dfe873c38506d"
- integrity sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==
+"@docusaurus/bundler@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.8.1.tgz#e2b11d615f09a6e470774bb36441b8d06736b94c"
+ integrity sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==
dependencies:
"@babel/core" "^7.25.9"
- "@docusaurus/babel" "3.7.0"
- "@docusaurus/cssnano-preset" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
+ "@docusaurus/babel" "3.8.1"
+ "@docusaurus/cssnano-preset" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
babel-loader "^9.2.1"
- clean-css "^5.3.2"
+ clean-css "^5.3.3"
copy-webpack-plugin "^11.0.0"
- css-loader "^6.8.1"
+ css-loader "^6.11.0"
css-minimizer-webpack-plugin "^5.0.1"
cssnano "^6.1.2"
file-loader "^6.2.0"
html-minifier-terser "^7.2.0"
- mini-css-extract-plugin "^2.9.1"
+ mini-css-extract-plugin "^2.9.2"
null-loader "^4.0.1"
- postcss "^8.4.26"
- postcss-loader "^7.3.3"
- postcss-preset-env "^10.1.0"
- react-dev-utils "^12.0.1"
+ postcss "^8.5.4"
+ postcss-loader "^7.3.4"
+ postcss-preset-env "^10.2.1"
terser-webpack-plugin "^5.3.9"
tslib "^2.6.0"
url-loader "^4.1.1"
webpack "^5.95.0"
webpackbar "^6.0.1"
-"@docusaurus/core@3.7.0", "@docusaurus/core@^3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.7.0.tgz#e871586d099093723dfe6de81c1ce610aeb20292"
- integrity sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==
- dependencies:
- "@docusaurus/babel" "3.7.0"
- "@docusaurus/bundler" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/core@3.8.1", "@docusaurus/core@^3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.8.1.tgz#c22e47c16a22cb7d245306c64bc54083838ff3db"
+ integrity sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==
+ dependencies:
+ "@docusaurus/babel" "3.8.1"
+ "@docusaurus/bundler" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
boxen "^6.2.1"
chalk "^4.1.2"
chokidar "^3.5.3"
@@ -2434,19 +2444,19 @@
combine-promises "^1.1.0"
commander "^5.1.0"
core-js "^3.31.1"
- del "^6.1.1"
detect-port "^1.5.1"
escape-html "^1.0.3"
eta "^2.2.0"
eval "^0.1.8"
+ execa "5.1.1"
fs-extra "^11.1.1"
html-tags "^3.3.1"
html-webpack-plugin "^5.6.0"
leven "^3.1.0"
lodash "^4.17.21"
+ open "^8.4.0"
p-map "^4.0.0"
prompts "^2.4.2"
- react-dev-utils "^12.0.1"
react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
react-loadable "npm:@docusaurus/react-loadable@6.0.0"
react-loadable-ssr-addon-v5-slorber "^1.0.1"
@@ -2455,7 +2465,7 @@
react-router-dom "^5.3.4"
semver "^7.5.4"
serve-handler "^6.1.6"
- shelljs "^0.8.5"
+ tinypool "^1.0.2"
tslib "^2.6.0"
update-notifier "^6.0.2"
webpack "^5.95.0"
@@ -2463,39 +2473,39 @@
webpack-dev-server "^4.15.2"
webpack-merge "^6.0.1"
-"@docusaurus/cssnano-preset@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz#8fe8f2c3acbd32384b69e14983b9a63c98cae34e"
- integrity sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==
+"@docusaurus/cssnano-preset@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz#bd55026251a6ab8e2194839a2042458ef9880c44"
+ integrity sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==
dependencies:
cssnano-preset-advanced "^6.1.2"
- postcss "^8.4.38"
+ postcss "^8.5.4"
postcss-sort-media-queries "^5.2.0"
tslib "^2.6.0"
-"@docusaurus/logger@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.7.0.tgz#07ecc2f460c4d2382df4991f9ce4e348e90af04c"
- integrity sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==
+"@docusaurus/logger@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.8.1.tgz#45321b2e2e14695d0dbd8b4104ea7b0fbaa98700"
+ integrity sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==
dependencies:
chalk "^4.1.2"
tslib "^2.6.0"
-"@docusaurus/mdx-loader@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz#5890c6e7a5b68cb1d066264ac5290cdcd59d4ecc"
- integrity sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==
+"@docusaurus/mdx-loader@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz#74309b3614bbcef1d55fb13e6cc339b7fb000b5f"
+ integrity sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==
dependencies:
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
"@mdx-js/mdx" "^3.0.0"
"@slorber/remark-comment" "^1.0.0"
escape-html "^1.0.3"
estree-util-value-to-estree "^3.0.1"
file-loader "^6.2.0"
fs-extra "^11.1.1"
- image-size "^1.0.2"
+ image-size "^2.0.2"
mdast-util-mdx "^3.0.0"
mdast-util-to-string "^4.0.0"
rehype-raw "^7.0.0"
@@ -2511,197 +2521,210 @@
vfile "^6.0.1"
webpack "^5.88.1"
-"@docusaurus/module-type-aliases@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz#15c0745b829c6966c5b3b2c2527c72b54830b0e5"
- integrity sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==
+"@docusaurus/module-type-aliases@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz#454de577bd7f50b5eae16db0f76b49ca5e4e281a"
+ integrity sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==
dependencies:
- "@docusaurus/types" "3.7.0"
+ "@docusaurus/types" "3.8.1"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
"@types/react-router-dom" "*"
- react-helmet-async "npm:@slorber/react-helmet-async@*"
+ react-helmet-async "npm:@slorber/react-helmet-async@1.3.0"
react-loadable "npm:@docusaurus/react-loadable@6.0.0"
-"@docusaurus/plugin-content-blog@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz#7bd69de87a1f3adb652e1473ef5b7ccc9468f47e"
- integrity sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==
- dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/theme-common" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/plugin-content-blog@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz#88d842b562b04cf59df900d9f6984b086f821525"
+ integrity sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/theme-common" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
cheerio "1.0.0-rc.12"
feed "^4.2.2"
fs-extra "^11.1.1"
lodash "^4.17.21"
- reading-time "^1.5.0"
+ schema-dts "^1.1.2"
srcset "^4.0.0"
tslib "^2.6.0"
unist-util-visit "^5.0.0"
utility-types "^3.10.0"
webpack "^5.88.1"
-"@docusaurus/plugin-content-docs@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz#297a549e926ee2b1147b5242af6f21532c7b107c"
- integrity sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==
- dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/module-type-aliases" "3.7.0"
- "@docusaurus/theme-common" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/plugin-content-docs@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz#40686a206abb6373bee5638de100a2c312f112a4"
+ integrity sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/module-type-aliases" "3.8.1"
+ "@docusaurus/theme-common" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
"@types/react-router-config" "^5.0.7"
combine-promises "^1.1.0"
fs-extra "^11.1.1"
js-yaml "^4.1.0"
lodash "^4.17.21"
+ schema-dts "^1.1.2"
tslib "^2.6.0"
utility-types "^3.10.0"
webpack "^5.88.1"
-"@docusaurus/plugin-content-pages@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz#c4a8f7237872236aacb77665822c474c0a00e91a"
- integrity sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==
+"@docusaurus/plugin-content-pages@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz#41b684dbd15390b7bb6a627f78bf81b6324511ac"
+ integrity sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
fs-extra "^11.1.1"
tslib "^2.6.0"
webpack "^5.88.1"
-"@docusaurus/plugin-debug@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz#a4fd45132e40cffe96bb51f48e89982a1cb8e194"
- integrity sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==
+"@docusaurus/plugin-css-cascade-layers@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz#cb414b4a82aa60fc64ef2a435ad0105e142a6c71"
+ integrity sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
+ tslib "^2.6.0"
+
+"@docusaurus/plugin-debug@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz#45b107e46b627caaae66995f53197ace78af3491"
+ integrity sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
fs-extra "^11.1.1"
- react-json-view-lite "^1.2.0"
+ react-json-view-lite "^2.3.0"
tslib "^2.6.0"
-"@docusaurus/plugin-google-analytics@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz#d20f665e810fb2295d1c1bbfe13398c5ff42eb24"
- integrity sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==
+"@docusaurus/plugin-google-analytics@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz#64a302e62fe5cb6e007367c964feeef7b056764a"
+ integrity sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
tslib "^2.6.0"
-"@docusaurus/plugin-google-gtag@3.7.0", "@docusaurus/plugin-google-gtag@^3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz#a48638dfd132858060458b875a440b6cbda6bf8f"
- integrity sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==
+"@docusaurus/plugin-google-gtag@3.8.1", "@docusaurus/plugin-google-gtag@^3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz#8c76f8a1d96448f2f0f7b10e6bde451c40672b95"
+ integrity sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
"@types/gtag.js" "^0.0.12"
tslib "^2.6.0"
-"@docusaurus/plugin-google-tag-manager@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz#0a4390f4b0e760d073bdb1905436bfa7bd71356b"
- integrity sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==
+"@docusaurus/plugin-google-tag-manager@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz#88241ffd06369f4a4d5fb982ff3ac2777561ae37"
+ integrity sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
tslib "^2.6.0"
-"@docusaurus/plugin-sitemap@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz#2c1bf9de26aeda455df6f77748e5887ace39b2d7"
- integrity sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==
- dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/plugin-sitemap@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz#3aebd39186dc30e53023f1aab44625bc0bdac892"
+ integrity sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
fs-extra "^11.1.1"
sitemap "^7.1.1"
tslib "^2.6.0"
-"@docusaurus/plugin-svgr@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz#018e89efd615d5fde77b891a8c2aadf203013f5d"
- integrity sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==
+"@docusaurus/plugin-svgr@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz#6f340be8eae418a2cce540d8ece096ffd9c9b6ab"
+ integrity sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==
dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
"@svgr/core" "8.1.0"
"@svgr/webpack" "^8.1.0"
tslib "^2.6.0"
webpack "^5.88.1"
-"@docusaurus/preset-classic@^3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz#f6656a04ae6a4877523dbd04f7c491632e4003b9"
- integrity sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==
- dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/plugin-content-blog" "3.7.0"
- "@docusaurus/plugin-content-docs" "3.7.0"
- "@docusaurus/plugin-content-pages" "3.7.0"
- "@docusaurus/plugin-debug" "3.7.0"
- "@docusaurus/plugin-google-analytics" "3.7.0"
- "@docusaurus/plugin-google-gtag" "3.7.0"
- "@docusaurus/plugin-google-tag-manager" "3.7.0"
- "@docusaurus/plugin-sitemap" "3.7.0"
- "@docusaurus/plugin-svgr" "3.7.0"
- "@docusaurus/theme-classic" "3.7.0"
- "@docusaurus/theme-common" "3.7.0"
- "@docusaurus/theme-search-algolia" "3.7.0"
- "@docusaurus/types" "3.7.0"
-
-"@docusaurus/theme-classic@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz#b483bd8e2923b6994b5f47238884b9f8984222c5"
- integrity sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==
- dependencies:
- "@docusaurus/core" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/module-type-aliases" "3.7.0"
- "@docusaurus/plugin-content-blog" "3.7.0"
- "@docusaurus/plugin-content-docs" "3.7.0"
- "@docusaurus/plugin-content-pages" "3.7.0"
- "@docusaurus/theme-common" "3.7.0"
- "@docusaurus/theme-translations" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/preset-classic@^3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz#bb79fd12f3211363720c569a526c7e24d3aa966b"
+ integrity sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/plugin-content-blog" "3.8.1"
+ "@docusaurus/plugin-content-docs" "3.8.1"
+ "@docusaurus/plugin-content-pages" "3.8.1"
+ "@docusaurus/plugin-css-cascade-layers" "3.8.1"
+ "@docusaurus/plugin-debug" "3.8.1"
+ "@docusaurus/plugin-google-analytics" "3.8.1"
+ "@docusaurus/plugin-google-gtag" "3.8.1"
+ "@docusaurus/plugin-google-tag-manager" "3.8.1"
+ "@docusaurus/plugin-sitemap" "3.8.1"
+ "@docusaurus/plugin-svgr" "3.8.1"
+ "@docusaurus/theme-classic" "3.8.1"
+ "@docusaurus/theme-common" "3.8.1"
+ "@docusaurus/theme-search-algolia" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+
+"@docusaurus/theme-classic@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz#1e45c66d89ded359225fcd29bf3258d9205765c1"
+ integrity sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==
+ dependencies:
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/module-type-aliases" "3.8.1"
+ "@docusaurus/plugin-content-blog" "3.8.1"
+ "@docusaurus/plugin-content-docs" "3.8.1"
+ "@docusaurus/plugin-content-pages" "3.8.1"
+ "@docusaurus/theme-common" "3.8.1"
+ "@docusaurus/theme-translations" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
"@mdx-js/react" "^3.0.0"
clsx "^2.0.0"
copy-text-to-clipboard "^3.2.0"
infima "0.2.0-alpha.45"
lodash "^4.17.21"
nprogress "^0.2.0"
- postcss "^8.4.26"
+ postcss "^8.5.4"
prism-react-renderer "^2.3.0"
prismjs "^1.29.0"
react-router-dom "^5.3.4"
@@ -2709,15 +2732,15 @@
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-common@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.7.0.tgz#18bf5c6b149a701f4bd865715ee8b595aa40b354"
- integrity sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==
+"@docusaurus/theme-common@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.8.1.tgz#17c23316fbe3ee3f7e707c7298cb59a0fff38b4b"
+ integrity sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==
dependencies:
- "@docusaurus/mdx-loader" "3.7.0"
- "@docusaurus/module-type-aliases" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
+ "@docusaurus/mdx-loader" "3.8.1"
+ "@docusaurus/module-type-aliases" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
@@ -2727,19 +2750,19 @@
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-search-algolia@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz#2108ddf0b300b82de7c2b9ff9fcf62121b66ea37"
- integrity sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==
- dependencies:
- "@docsearch/react" "^3.8.1"
- "@docusaurus/core" "3.7.0"
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/plugin-content-docs" "3.7.0"
- "@docusaurus/theme-common" "3.7.0"
- "@docusaurus/theme-translations" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-validation" "3.7.0"
+"@docusaurus/theme-search-algolia@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz#3aa3d99c35cc2d4b709fcddd4df875a9b536e29b"
+ integrity sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==
+ dependencies:
+ "@docsearch/react" "^3.9.0"
+ "@docusaurus/core" "3.8.1"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/plugin-content-docs" "3.8.1"
+ "@docusaurus/theme-common" "3.8.1"
+ "@docusaurus/theme-translations" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-validation" "3.8.1"
algoliasearch "^5.17.1"
algoliasearch-helper "^3.22.6"
clsx "^2.0.0"
@@ -2749,18 +2772,18 @@
tslib "^2.6.0"
utility-types "^3.10.0"
-"@docusaurus/theme-translations@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz#0891aedc7c7040afcb3a1b34051d3a69096d0d25"
- integrity sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==
+"@docusaurus/theme-translations@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz#4b1d76973eb53861e167c7723485e059ba4ffd0a"
+ integrity sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==
dependencies:
fs-extra "^11.1.1"
tslib "^2.6.0"
-"@docusaurus/types@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.7.0.tgz#3f5a68a60f80ecdcb085666da1d68f019afda943"
- integrity sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==
+"@docusaurus/types@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.8.1.tgz#83ab66c345464e003b576a49f78897482061fc26"
+ integrity sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==
dependencies:
"@mdx-js/mdx" "^3.0.0"
"@types/history" "^4.7.11"
@@ -2772,37 +2795,38 @@
webpack "^5.95.0"
webpack-merge "^5.9.0"
-"@docusaurus/utils-common@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.7.0.tgz#1bef52837d321db5dd2361fc07f3416193b5d029"
- integrity sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==
+"@docusaurus/utils-common@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.8.1.tgz#c369b8c3041afb7dcd595d4172beb1cc1015c85f"
+ integrity sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==
dependencies:
- "@docusaurus/types" "3.7.0"
+ "@docusaurus/types" "3.8.1"
tslib "^2.6.0"
-"@docusaurus/utils-validation@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz#dc0786fb633ae5cef8e93337bf21c2a826c7ecbd"
- integrity sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==
+"@docusaurus/utils-validation@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz#0499c0d151a4098a0963237057993282cfbd538e"
+ integrity sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==
dependencies:
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/utils" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/utils" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
fs-extra "^11.2.0"
joi "^17.9.2"
js-yaml "^4.1.0"
lodash "^4.17.21"
tslib "^2.6.0"
-"@docusaurus/utils@3.7.0":
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.7.0.tgz#dfdebd63524c52b498f36b2907a3b2261930b9bb"
- integrity sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==
+"@docusaurus/utils@3.8.1":
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.8.1.tgz#2ac1e734106e2f73dbd0f6a8824d525f9064e9f0"
+ integrity sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==
dependencies:
- "@docusaurus/logger" "3.7.0"
- "@docusaurus/types" "3.7.0"
- "@docusaurus/utils-common" "3.7.0"
+ "@docusaurus/logger" "3.8.1"
+ "@docusaurus/types" "3.8.1"
+ "@docusaurus/utils-common" "3.8.1"
escape-string-regexp "^4.0.0"
+ execa "5.1.1"
file-loader "^6.2.0"
fs-extra "^11.1.1"
github-slugger "^1.5.0"
@@ -2812,9 +2836,9 @@
js-yaml "^4.1.0"
lodash "^4.17.21"
micromatch "^4.0.5"
+ p-queue "^6.6.2"
prompts "^2.4.2"
resolve-pathname "^3.0.0"
- shelljs "^0.8.5"
tslib "^2.6.0"
url-loader "^4.1.1"
utility-types "^3.10.0"
@@ -2832,19 +2856,19 @@
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
-"@eslint/config-array@^0.20.0":
- version "0.20.0"
- resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.0.tgz#7a1232e82376712d3340012a2f561a2764d1988f"
- integrity sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==
+"@eslint/config-array@^0.21.0":
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636"
+ integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==
dependencies:
"@eslint/object-schema" "^2.1.6"
debug "^4.3.1"
minimatch "^3.1.2"
-"@eslint/config-helpers@^0.2.1":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.1.tgz#26042c028d1beee5ce2235a7929b91c52651646d"
- integrity sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==
+"@eslint/config-helpers@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286"
+ integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==
"@eslint/core@^0.14.0":
version "0.14.0"
@@ -2868,10 +2892,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@9.27.0":
- version "9.27.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.27.0.tgz#181a23460877c484f6dd03890f4e3fa2fdeb8ff0"
- integrity sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==
+"@eslint/js@9.30.1":
+ version "9.30.1"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.30.1.tgz#ebe9dd52a38345784c486300175a28c6013c088d"
+ integrity sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==
"@eslint/object-schema@^2.1.6":
version "2.1.6"
@@ -3387,7 +3411,7 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
+"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -3433,11 +3457,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
-"@types/parse-json@^4.0.0":
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
- integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
-
"@types/prismjs@^1.26.0":
version "1.26.4"
resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.4.tgz#1a9e1074619ce1d7322669e5b46fbe823925103a"
@@ -3861,7 +3880,12 @@ acorn@^8.14.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
-address@^1.0.1, address@^1.1.2:
+acorn@^8.15.0:
+ version "8.15.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
+
+address@^1.0.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
@@ -3881,7 +3905,7 @@ ajv-formats@^2.1.1:
dependencies:
ajv "^8.0.0"
-ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
@@ -3893,7 +3917,7 @@ ajv-keywords@^5.1.0:
dependencies:
fast-deep-equal "^3.1.3"
-ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5:
+ajv@^6.12.4, ajv@^6.12.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -4108,11 +4132,6 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-at-least-node@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
- integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-
autoprefixer@^10.4.19:
version "10.4.20"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b"
@@ -4125,6 +4144,18 @@ autoprefixer@^10.4.19:
picocolors "^1.0.1"
postcss-value-parser "^4.2.0"
+autoprefixer@^10.4.21:
+ version "10.4.21"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d"
+ integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==
+ dependencies:
+ browserslist "^4.24.4"
+ caniuse-lite "^1.0.30001702"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.1.1"
+ postcss-value-parser "^4.2.0"
+
available-typed-arrays@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
@@ -4132,10 +4163,10 @@ available-typed-arrays@^1.0.7:
dependencies:
possible-typed-array-names "^1.0.0"
-axios@^1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901"
- integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==
+axios@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.10.0.tgz#af320aee8632eaf2a400b6a1979fa75856f38d54"
+ integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.0"
@@ -4279,7 +4310,7 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3:
+browserslist@^4.0.0, browserslist@^4.21.10, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3:
version "4.23.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800"
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
@@ -4299,6 +4330,16 @@ browserslist@^4.24.0, browserslist@^4.24.3:
node-releases "^2.0.19"
update-browserslist-db "^1.1.1"
+browserslist@^4.24.4, browserslist@^4.25.0:
+ version "4.25.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c"
+ integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==
+ dependencies:
+ caniuse-lite "^1.0.30001718"
+ electron-to-chromium "^1.5.160"
+ node-releases "^2.0.19"
+ update-browserslist-db "^1.1.3"
+
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -4417,6 +4458,11 @@ caniuse-lite@^1.0.30001688:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz#040bbbb54463c4b4b3377c716b34a322d16e6fc7"
integrity sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==
+caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001718:
+ version "1.0.30001723"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz#c4f3174f02089720736e1887eab345e09bb10944"
+ integrity sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==
+
ccount@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
@@ -4431,7 +4477,7 @@ chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -4494,7 +4540,7 @@ cheerio@1.0.0-rc.12:
parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0"
-chokidar@^3.4.2, chokidar@^3.5.3:
+chokidar@^3.5.3:
version "3.6.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
@@ -4524,7 +4570,7 @@ classnames@^2.2.5, classnames@^2.5.1:
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b"
integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==
-clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2:
+clean-css@^5.2.2, clean-css@^5.3.3, clean-css@~5.3.2:
version "5.3.3"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd"
integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==
@@ -4782,17 +4828,6 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-cosmiconfig@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
- integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
- dependencies:
- "@types/parse-json" "^4.0.0"
- import-fresh "^3.1.0"
- parse-json "^5.0.0"
- path-type "^4.0.0"
- yaml "^1.7.2"
-
cosmiconfig@^8.1.3, cosmiconfig@^8.3.5:
version "8.3.6"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
@@ -4849,7 +4884,7 @@ css-has-pseudo@^7.0.2:
postcss-selector-parser "^7.0.0"
postcss-value-parser "^4.2.0"
-css-loader@^6.8.1:
+css-loader@^6.11.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba"
integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==
@@ -4923,10 +4958,10 @@ css-what@^6.0.1, css-what@^6.1.0:
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
-cssdb@^8.2.3:
- version "8.2.3"
- resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.2.3.tgz#7e6980bb5a785a9b4eb2a21bd38d50624b56cb46"
- integrity sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==
+cssdb@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.3.0.tgz#940becad497b8509ad822a28fb0cfe54c969ccfe"
+ integrity sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==
cssesc@^3.0.0:
version "3.0.0"
@@ -5039,7 +5074,7 @@ debounce@^1.2.1:
resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
-debug@2.6.9, debug@^2.6.0, debug@^2.6.6:
+debug@2.6.9, debug@^2.6.6:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -5084,7 +5119,7 @@ deep-is@^0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-deepmerge@^4.0.0, deepmerge@^4.2.2, deepmerge@^4.3.1:
+deepmerge@^4.0.0, deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
@@ -5124,20 +5159,6 @@ define-properties@^1.1.3, define-properties@^1.2.1:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
-del@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a"
- integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==
- dependencies:
- globby "^11.0.1"
- graceful-fs "^4.2.4"
- is-glob "^4.0.1"
- is-path-cwd "^2.2.0"
- is-path-inside "^3.0.2"
- p-map "^4.0.0"
- rimraf "^3.0.2"
- slash "^3.0.0"
-
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -5168,14 +5189,6 @@ detect-node@^2.0.4:
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-detect-port-alt@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
- integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
- dependencies:
- address "^1.0.1"
- debug "^2.6.0"
-
detect-port@^1.5.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67"
@@ -5313,6 +5326,11 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+electron-to-chromium@^1.5.160:
+ version "1.5.169"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.169.tgz#6afdfd8e701b7ab744e2bb0cfdec3cefc1072cbe"
+ integrity sha512-q7SQx6mkLy0GTJK9K9OiWeaBMV4XQtBSdf6MJUzDB/H/5tFXfIiX38Lci1Kl6SsgiEhz1SQI1ejEOU5asWEhwQ==
+
electron-to-chromium@^1.5.4:
version "1.5.7"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz#425d2a7f76ecfa564fdca1040d11fb1979851f3c"
@@ -5585,10 +5603,10 @@ eslint-scope@5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-scope@^8.3.0:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d"
- integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==
+eslint-scope@^8.4.0:
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82"
+ integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
@@ -5603,18 +5621,23 @@ eslint-visitor-keys@^4.2.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
-eslint@^9.27.0:
- version "9.27.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.27.0.tgz#a587d3cd5b844b68df7898944323a702afe38979"
- integrity sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==
+eslint-visitor-keys@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
+ integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
+
+eslint@^9.30.1:
+ version "9.30.1"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.30.1.tgz#d4107b39964412acd9b5c0744f1c6df514fa1211"
+ integrity sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.12.1"
- "@eslint/config-array" "^0.20.0"
- "@eslint/config-helpers" "^0.2.1"
+ "@eslint/config-array" "^0.21.0"
+ "@eslint/config-helpers" "^0.3.0"
"@eslint/core" "^0.14.0"
"@eslint/eslintrc" "^3.3.1"
- "@eslint/js" "9.27.0"
+ "@eslint/js" "9.30.1"
"@eslint/plugin-kit" "^0.3.1"
"@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1"
@@ -5626,9 +5649,9 @@ eslint@^9.27.0:
cross-spawn "^7.0.6"
debug "^4.3.2"
escape-string-regexp "^4.0.0"
- eslint-scope "^8.3.0"
- eslint-visitor-keys "^4.2.0"
- espree "^10.3.0"
+ eslint-scope "^8.4.0"
+ eslint-visitor-keys "^4.2.1"
+ espree "^10.4.0"
esquery "^1.5.0"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
@@ -5644,7 +5667,7 @@ eslint@^9.27.0:
natural-compare "^1.4.0"
optionator "^0.9.3"
-espree@^10.0.1, espree@^10.3.0:
+espree@^10.0.1:
version "10.3.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a"
integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
@@ -5653,6 +5676,15 @@ espree@^10.0.1, espree@^10.3.0:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.2.0"
+espree@^10.4.0:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837"
+ integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==
+ dependencies:
+ acorn "^8.15.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^4.2.1"
+
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -5758,7 +5790,7 @@ eval@^0.1.8:
"@types/node" "*"
require-like ">= 0.1.1"
-eventemitter3@^4.0.0:
+eventemitter3@^4.0.0, eventemitter3@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
@@ -5768,7 +5800,7 @@ events@^3.2.0:
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@^5.0.0:
+execa@5.1.1, execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -5913,11 +5945,6 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
-filesize@^8.0.6:
- version "8.0.7"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
- integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
-
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
@@ -5946,13 +5973,6 @@ find-cache-dir@^4.0.0:
common-path-prefix "^3.0.0"
pkg-dir "^7.0.0"
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
find-up@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
@@ -6004,25 +6024,6 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
-fork-ts-checker-webpack-plugin@^6.5.0:
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3"
- integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==
- dependencies:
- "@babel/code-frame" "^7.8.3"
- "@types/json-schema" "^7.0.5"
- chalk "^4.1.0"
- chokidar "^3.4.2"
- cosmiconfig "^6.0.0"
- deepmerge "^4.2.2"
- fs-extra "^9.0.0"
- glob "^7.1.6"
- memfs "^3.1.2"
- minimatch "^3.0.4"
- schema-utils "2.7.0"
- semver "^7.3.2"
- tapable "^1.0.0"
-
form-data-encoder@^2.1.2:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5"
@@ -6066,16 +6067,6 @@ fs-extra@^11.1.1, fs-extra@^11.2.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fs-extra@^9.0.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
- integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
- dependencies:
- at-least-node "^1.0.0"
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
fs-monkey@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2"
@@ -6201,7 +6192,7 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@^7.0.0, glob@^7.1.3, glob@^7.1.6:
+glob@^7.1.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -6220,22 +6211,6 @@ global-dirs@^3.0.0:
dependencies:
ini "2.0.0"
-global-modules@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
- integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
- dependencies:
- global-prefix "^3.0.0"
-
-global-prefix@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
- integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
- dependencies:
- ini "^1.3.5"
- kind-of "^6.0.2"
- which "^1.3.1"
-
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -6254,7 +6229,7 @@ globalthis@^1.0.4:
define-properties "^1.2.1"
gopd "^1.0.1"
-globby@^11.0.1, globby@^11.0.4, globby@^11.1.0:
+globby@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
@@ -6695,19 +6670,12 @@ ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
-image-size@^1.0.2:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac"
- integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==
- dependencies:
- queue "6.0.2"
-
-immer@^9.0.7:
- version "9.0.21"
- resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176"
- integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==
+image-size@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc"
+ integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==
-import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
+import-fresh@^3.2.1, import-fresh@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -6758,7 +6726,7 @@ ini@2.0.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
-ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ini@^1.3.4, ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
@@ -6782,11 +6750,6 @@ internal-slot@^1.1.0:
hasown "^2.0.2"
side-channel "^1.1.0"
-interpret@^1.0.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
- integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
-
invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
@@ -6994,11 +6957,6 @@ is-obj@^2.0.0:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
-is-path-cwd@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
- integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
-
is-path-inside@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
@@ -7043,11 +7001,6 @@ is-regexp@^1.0.0:
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==
-is-root@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
- integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==
-
is-set@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
@@ -7380,19 +7333,6 @@ loader-utils@^2.0.0:
emojis-list "^3.0.0"
json5 "^2.1.2"
-loader-utils@^3.2.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5"
- integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
locate-path@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
@@ -7717,7 +7657,7 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
-memfs@^3.1.2, memfs@^3.4.3:
+memfs@^3.4.3:
version "3.6.0"
resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6"
integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==
@@ -8222,7 +8162,7 @@ mimic-response@^4.0.0:
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f"
integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==
-mini-css-extract-plugin@^2.9.1:
+mini-css-extract-plugin@^2.9.2:
version "2.9.2"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b"
integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==
@@ -8235,7 +8175,7 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@3.1.2, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -8275,6 +8215,11 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
+nanoid@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
nanoid@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
@@ -8508,12 +8453,10 @@ p-cancelable@^3.0.0:
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050"
integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==
-p-limit@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
p-limit@^3.0.2:
version "3.1.0"
@@ -8529,13 +8472,6 @@ p-limit@^4.0.0:
dependencies:
yocto-queue "^1.0.0"
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
p-locate@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
@@ -8557,6 +8493,14 @@ p-map@^4.0.0:
dependencies:
aggregate-error "^3.0.0"
+p-queue@^6.6.2:
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+ integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+ dependencies:
+ eventemitter3 "^4.0.4"
+ p-timeout "^3.2.0"
+
p-retry@^4.5.0:
version "4.6.2"
resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
@@ -8565,10 +8509,12 @@ p-retry@^4.5.0:
"@types/retry" "0.12.0"
retry "^0.13.1"
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+p-timeout@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+ integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+ dependencies:
+ p-finally "^1.0.0"
package-json@^8.1.0:
version "8.1.1"
@@ -8609,7 +8555,7 @@ parse-entities@^4.0.0:
is-decimal "^2.0.0"
is-hexadecimal "^2.0.0"
-parse-json@^5.0.0, parse-json@^5.2.0:
+parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
@@ -8652,11 +8598,6 @@ pascal-case@^3.1.2:
no-case "^3.0.4"
tslib "^2.0.3"
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
-
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -8740,13 +8681,6 @@ pkg-dir@^7.0.0:
dependencies:
find-up "^6.3.0"
-pkg-up@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
- integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
- dependencies:
- find-up "^3.0.0"
-
possible-typed-array-names@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
@@ -8774,15 +8708,15 @@ postcss-clamp@^4.1.0:
dependencies:
postcss-value-parser "^4.2.0"
-postcss-color-functional-notation@^7.0.7:
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz#c5362df010926f902ce4e7fb3da2a46cff175d1b"
- integrity sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==
+postcss-color-functional-notation@^7.0.10:
+ version "7.0.10"
+ resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz#f1e9c3e4371889dcdfeabfa8515464fd8338cedc"
+ integrity sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
postcss-color-hex-alpha@^10.0.0:
@@ -8819,35 +8753,35 @@ postcss-convert-values@^6.1.0:
browserslist "^4.23.0"
postcss-value-parser "^4.2.0"
-postcss-custom-media@^11.0.5:
- version "11.0.5"
- resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz#2fcd88a9b1d4da41c67dac6f2def903063a3377d"
- integrity sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==
- dependencies:
- "@csstools/cascade-layer-name-parser" "^2.0.4"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/media-query-list-parser" "^4.0.2"
-
-postcss-custom-properties@^14.0.4:
- version "14.0.4"
- resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz#de9c663285a98833a946d7003a34369d3ce373a9"
- integrity sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==
- dependencies:
- "@csstools/cascade-layer-name-parser" "^2.0.4"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+postcss-custom-media@^11.0.6:
+ version "11.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967"
+ integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==
+ dependencies:
+ "@csstools/cascade-layer-name-parser" "^2.0.5"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/media-query-list-parser" "^4.0.3"
+
+postcss-custom-properties@^14.0.6:
+ version "14.0.6"
+ resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e"
+ integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==
+ dependencies:
+ "@csstools/cascade-layer-name-parser" "^2.0.5"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
"@csstools/utilities" "^2.0.0"
postcss-value-parser "^4.2.0"
-postcss-custom-selectors@^8.0.4:
- version "8.0.4"
- resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz#95ef8268fdbbbd84f34cf84a4517c9d99d419c5a"
- integrity sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==
+postcss-custom-selectors@^8.0.5:
+ version "8.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8"
+ integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==
dependencies:
- "@csstools/cascade-layer-name-parser" "^2.0.4"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
+ "@csstools/cascade-layer-name-parser" "^2.0.5"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
postcss-selector-parser "^7.0.0"
postcss-dir-pseudo-class@^9.0.1:
@@ -8884,12 +8818,12 @@ postcss-discard-unused@^6.0.5:
dependencies:
postcss-selector-parser "^6.0.16"
-postcss-double-position-gradients@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz#eddd424ec754bb543d057d4d2180b1848095d4d2"
- integrity sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==
+postcss-double-position-gradients@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz#185f8eab2db9cf4e34be69b5706c905895bb52ae"
+ integrity sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==
dependencies:
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
postcss-value-parser "^4.2.0"
@@ -8925,18 +8859,18 @@ postcss-image-set-function@^7.0.0:
"@csstools/utilities" "^2.0.0"
postcss-value-parser "^4.2.0"
-postcss-lab-function@^7.0.7:
- version "7.0.7"
- resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz#9c87c21ce5132c55824190b75d7d7adede9c2fac"
- integrity sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==
+postcss-lab-function@^7.0.10:
+ version "7.0.10"
+ resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz#0537bd7245b935fc133298c8896bcbd160540cae"
+ integrity sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==
dependencies:
- "@csstools/css-color-parser" "^3.0.7"
- "@csstools/css-parser-algorithms" "^3.0.4"
- "@csstools/css-tokenizer" "^3.0.3"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
+ "@csstools/css-color-parser" "^3.0.10"
+ "@csstools/css-parser-algorithms" "^3.0.5"
+ "@csstools/css-tokenizer" "^3.0.4"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
"@csstools/utilities" "^2.0.0"
-postcss-loader@^7.3.3:
+postcss-loader@^7.3.4:
version "7.3.4"
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209"
integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==
@@ -8945,10 +8879,10 @@ postcss-loader@^7.3.3:
jiti "^1.20.0"
semver "^7.5.4"
-postcss-logical@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.0.0.tgz#0db0b90c2dc53b485a8074a4b7a906297544f58d"
- integrity sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==
+postcss-logical@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228"
+ integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==
dependencies:
postcss-value-parser "^4.2.0"
@@ -9038,12 +8972,12 @@ postcss-modules-values@^4.0.0:
dependencies:
icss-utils "^5.0.0"
-postcss-nesting@^13.0.1:
- version "13.0.1"
- resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e"
- integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==
+postcss-nesting@^13.0.2:
+ version "13.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e"
+ integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==
dependencies:
- "@csstools/selector-resolve-nested" "^3.0.0"
+ "@csstools/selector-resolve-nested" "^3.1.0"
"@csstools/selector-specificity" "^5.0.0"
postcss-selector-parser "^7.0.0"
@@ -9141,67 +9075,68 @@ postcss-place@^10.0.0:
dependencies:
postcss-value-parser "^4.2.0"
-postcss-preset-env@^10.1.0:
- version "10.1.3"
- resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz#7d07adef2237a643162e751b00eb1e339aa3b82e"
- integrity sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==
+postcss-preset-env@^10.2.1:
+ version "10.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz#3a84bde7205b48f1304a656b25841bd3f40fb3cb"
+ integrity sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==
dependencies:
"@csstools/postcss-cascade-layers" "^5.0.1"
- "@csstools/postcss-color-function" "^4.0.7"
- "@csstools/postcss-color-mix-function" "^3.0.7"
- "@csstools/postcss-content-alt-text" "^2.0.4"
- "@csstools/postcss-exponential-functions" "^2.0.6"
+ "@csstools/postcss-color-function" "^4.0.10"
+ "@csstools/postcss-color-mix-function" "^3.0.10"
+ "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.0"
+ "@csstools/postcss-content-alt-text" "^2.0.6"
+ "@csstools/postcss-exponential-functions" "^2.0.9"
"@csstools/postcss-font-format-keywords" "^4.0.0"
- "@csstools/postcss-gamut-mapping" "^2.0.7"
- "@csstools/postcss-gradients-interpolation-method" "^5.0.7"
- "@csstools/postcss-hwb-function" "^4.0.7"
- "@csstools/postcss-ic-unit" "^4.0.0"
- "@csstools/postcss-initial" "^2.0.0"
- "@csstools/postcss-is-pseudo-class" "^5.0.1"
- "@csstools/postcss-light-dark-function" "^2.0.7"
+ "@csstools/postcss-gamut-mapping" "^2.0.10"
+ "@csstools/postcss-gradients-interpolation-method" "^5.0.10"
+ "@csstools/postcss-hwb-function" "^4.0.10"
+ "@csstools/postcss-ic-unit" "^4.0.2"
+ "@csstools/postcss-initial" "^2.0.1"
+ "@csstools/postcss-is-pseudo-class" "^5.0.3"
+ "@csstools/postcss-light-dark-function" "^2.0.9"
"@csstools/postcss-logical-float-and-clear" "^3.0.0"
"@csstools/postcss-logical-overflow" "^2.0.0"
"@csstools/postcss-logical-overscroll-behavior" "^2.0.0"
"@csstools/postcss-logical-resize" "^3.0.0"
- "@csstools/postcss-logical-viewport-units" "^3.0.3"
- "@csstools/postcss-media-minmax" "^2.0.6"
- "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.4"
+ "@csstools/postcss-logical-viewport-units" "^3.0.4"
+ "@csstools/postcss-media-minmax" "^2.0.9"
+ "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5"
"@csstools/postcss-nested-calc" "^4.0.0"
"@csstools/postcss-normalize-display-values" "^4.0.0"
- "@csstools/postcss-oklab-function" "^4.0.7"
- "@csstools/postcss-progressive-custom-properties" "^4.0.0"
- "@csstools/postcss-random-function" "^1.0.2"
- "@csstools/postcss-relative-color-syntax" "^3.0.7"
+ "@csstools/postcss-oklab-function" "^4.0.10"
+ "@csstools/postcss-progressive-custom-properties" "^4.1.0"
+ "@csstools/postcss-random-function" "^2.0.1"
+ "@csstools/postcss-relative-color-syntax" "^3.0.10"
"@csstools/postcss-scope-pseudo-class" "^4.0.1"
- "@csstools/postcss-sign-functions" "^1.1.1"
- "@csstools/postcss-stepped-value-functions" "^4.0.6"
- "@csstools/postcss-text-decoration-shorthand" "^4.0.1"
- "@csstools/postcss-trigonometric-functions" "^4.0.6"
+ "@csstools/postcss-sign-functions" "^1.1.4"
+ "@csstools/postcss-stepped-value-functions" "^4.0.9"
+ "@csstools/postcss-text-decoration-shorthand" "^4.0.2"
+ "@csstools/postcss-trigonometric-functions" "^4.0.9"
"@csstools/postcss-unset-value" "^4.0.0"
- autoprefixer "^10.4.19"
- browserslist "^4.23.1"
+ autoprefixer "^10.4.21"
+ browserslist "^4.25.0"
css-blank-pseudo "^7.0.1"
css-has-pseudo "^7.0.2"
css-prefers-color-scheme "^10.0.0"
- cssdb "^8.2.3"
+ cssdb "^8.3.0"
postcss-attribute-case-insensitive "^7.0.1"
postcss-clamp "^4.1.0"
- postcss-color-functional-notation "^7.0.7"
+ postcss-color-functional-notation "^7.0.10"
postcss-color-hex-alpha "^10.0.0"
postcss-color-rebeccapurple "^10.0.0"
- postcss-custom-media "^11.0.5"
- postcss-custom-properties "^14.0.4"
- postcss-custom-selectors "^8.0.4"
+ postcss-custom-media "^11.0.6"
+ postcss-custom-properties "^14.0.6"
+ postcss-custom-selectors "^8.0.5"
postcss-dir-pseudo-class "^9.0.1"
- postcss-double-position-gradients "^6.0.0"
+ postcss-double-position-gradients "^6.0.2"
postcss-focus-visible "^10.0.1"
postcss-focus-within "^9.0.1"
postcss-font-variant "^5.0.0"
postcss-gap-properties "^6.0.0"
postcss-image-set-function "^7.0.0"
- postcss-lab-function "^7.0.7"
- postcss-logical "^8.0.0"
- postcss-nesting "^13.0.1"
+ postcss-lab-function "^7.0.10"
+ postcss-logical "^8.1.0"
+ postcss-nesting "^13.0.2"
postcss-opacity-percentage "^3.0.0"
postcss-overflow-shorthand "^6.0.0"
postcss-page-break "^3.0.4"
@@ -9299,7 +9234,7 @@ postcss-zindex@^6.0.2:
resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1"
integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==
-postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38:
+postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33:
version "8.4.41"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681"
integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==
@@ -9308,6 +9243,15 @@ postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4
picocolors "^1.0.1"
source-map-js "^1.2.0"
+postcss@^8.5.4:
+ version "8.5.6"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
+ integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
+ dependencies:
+ nanoid "^3.3.11"
+ picocolors "^1.1.1"
+ source-map-js "^1.2.1"
+
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -9408,13 +9352,6 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-queue@6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
- integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
- dependencies:
- inherits "~2.0.3"
-
quick-lru@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
@@ -9457,36 +9394,6 @@ rc@1.2.8:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-dev-utils@^12.0.1:
- version "12.0.1"
- resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
- integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==
- dependencies:
- "@babel/code-frame" "^7.16.0"
- address "^1.1.2"
- browserslist "^4.18.1"
- chalk "^4.1.2"
- cross-spawn "^7.0.3"
- detect-port-alt "^1.1.6"
- escape-string-regexp "^4.0.0"
- filesize "^8.0.6"
- find-up "^5.0.0"
- fork-ts-checker-webpack-plugin "^6.5.0"
- global-modules "^2.0.0"
- globby "^11.0.4"
- gzip-size "^6.0.0"
- immer "^9.0.7"
- is-root "^2.1.0"
- loader-utils "^3.2.0"
- open "^8.4.0"
- pkg-up "^3.1.0"
- prompts "^2.4.2"
- react-error-overlay "^6.0.11"
- recursive-readdir "^2.2.2"
- shell-quote "^1.7.3"
- strip-ansi "^6.0.1"
- text-table "^0.2.0"
-
react-dom@^19.1.0:
version "19.1.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623"
@@ -9494,17 +9401,12 @@ react-dom@^19.1.0:
dependencies:
scheduler "^0.26.0"
-react-error-overlay@^6.0.11:
- version "6.0.11"
- resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
- integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
-
react-fast-compare@^3.0.1, react-fast-compare@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
-"react-helmet-async@npm:@slorber/react-helmet-async@*", "react-helmet-async@npm:@slorber/react-helmet-async@1.3.0":
+"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff"
integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==
@@ -9525,10 +9427,10 @@ react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-json-view-lite@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-1.4.0.tgz#0ff493245f4550abe5e1f1836f170fa70bb95914"
- integrity sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==
+react-json-view-lite@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz#0d06696a06aaf4a74e890302b76cf8cddcc45d60"
+ integrity sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==
react-loadable-ssr-addon-v5-slorber@^1.0.1:
version "1.0.1"
@@ -9668,25 +9570,6 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-reading-time@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb"
- integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
- dependencies:
- resolve "^1.1.6"
-
-recursive-readdir@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372"
- integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==
- dependencies:
- minimatch "^3.0.5"
-
reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
version "1.0.10"
resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9"
@@ -9947,7 +9830,7 @@ resolve-pathname@^3.0.0:
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
-resolve@^1.1.6, resolve@^1.14.2:
+resolve@^1.14.2:
version "1.22.8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -10059,14 +9942,10 @@ scheduler@^0.26.0:
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
-schema-utils@2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7"
- integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==
- dependencies:
- "@types/json-schema" "^7.0.4"
- ajv "^6.12.2"
- ajv-keywords "^3.4.1"
+schema-dts@^1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324"
+ integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==
schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0:
version "3.3.0"
@@ -10125,7 +10004,7 @@ semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
+semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
version "7.6.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
@@ -10257,20 +10136,11 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@^1.7.3, shell-quote@^1.8.1:
+shell-quote@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
-shelljs@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
- integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
side-channel-list@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
@@ -10394,6 +10264,11 @@ source-map-js@^1.0.1, source-map-js@^1.2.0:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+source-map-js@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
+ integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
+
source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
@@ -10678,11 +10553,6 @@ svgo@^3.0.2, svgo@^3.2.0:
csso "^5.0.5"
picocolors "^1.0.0"
-tapable@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
- integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-
tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
@@ -10709,11 +10579,6 @@ terser@^5.10.0, terser@^5.15.1, terser@^5.26.0:
commander "^2.20.0"
source-map-support "~0.5.20"
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
@@ -10729,6 +10594,11 @@ tiny-warning@^1.0.0:
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+tinypool@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591"
+ integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -10990,6 +10860,14 @@ update-browserslist-db@^1.1.1:
escalade "^3.2.0"
picocolors "^1.1.1"
+update-browserslist-db@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
+ dependencies:
+ escalade "^3.2.0"
+ picocolors "^1.1.1"
+
update-notifier@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60"
@@ -11333,13 +11211,6 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.18:
gopd "^1.2.0"
has-tostringtag "^1.0.2"
-which@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -11424,11 +11295,6 @@ yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-yaml@^1.7.2:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
- integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"