diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..79fe8026
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,8 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+insert_final_newline = true
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index fbb854fc..00000000
--- a/.eslintrc
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "extends": "google",
- "parserOptions": {
- "ecmaVersion": 6,
- "sourceType": "module",
- "ecmaFeatures": {
- "impliedStrict": true
- }
- },
- "env": {
- "browser": true,
- "es6": true,
- "commonjs": true,
- "jquery": true
- },
- "rules": {
- "no-new": 0
- }
-}
\ No newline at end of file
diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml
new file mode 100644
index 00000000..24411d3f
--- /dev/null
+++ b/.github/workflows/eslint.yml
@@ -0,0 +1,33 @@
+name: Lint
+
+on:
+ # Replace pull_request with pull_request_target if you
+ # plan to use this action with forks, see the Limitations section
+ pull_request:
+ branches:
+ - develop
+
+# Down scope as necessary via https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
+permissions:
+ checks: write
+ contents: read
+
+jobs:
+ run-eslint:
+ name: Run eslint
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v7
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v7
+ with:
+ node-version: 25
+
+ - name: Install Node.js dependencies
+ run: npm ci
+
+ - name: Run eslint
+ run: npm run lint
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 00000000..c5166c2a
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ ...require('gts/.prettierrc.json'),
+};
diff --git a/README.md b/README.md
index fc01d576..1c306bad 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@ python -m gunicorn
You must create `config.py` in the top-level directory with the appropriate credentials for the application to run. See `config.env.py` for an example.
### Add OIDC Config
-Reach out to an RTP to get OIDC credentials that will allow you to develop locally behind OIDC auth
+Check the [SSO wiki page](https://wiki.csh.rit.edu/wiki/SSO#Where_can_I_get_credentials?) for development credentials.
```py
# OIDC Config
OIDC_ISSUER = "https://sso.csh.rit.edu/auth/realms/csh"
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000..7dc990f1
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,50 @@
+const globals = require('globals');
+let customConfig = [];
+let hasIgnoresFile = false;
+try {
+ require.resolve('./eslint.ignores.js');
+ hasIgnoresFile = true;
+} catch {
+ // eslint.ignores.js doesn't exist
+}
+
+if (hasIgnoresFile) {
+ const ignores = require('./eslint.ignores.js');
+ customConfig = [{ignores}];
+}
+
+module.exports = [
+ ...customConfig,
+ {
+ files: ['frontend/javascript/**/*.js'],
+ languageOptions: {
+ sourceType: 'module',
+ globals: {
+ ...globals.browser,
+ ...globals.jquery,
+ },
+ },
+ },
+ {
+ files: ['frontend/javascript/modules/index.js'],
+ languageOptions: {
+ sourceType: 'commonjs',
+ globals: {...globals.browser},
+ },
+ },
+ {
+ files: ['webpack.config.js'],
+ languageOptions: {
+ sourceType: 'commonjs',
+ globals: {...globals.node},
+ },
+ },
+ {
+ files: ['frontend/javascript/app.js'],
+ languageOptions: {
+ sourceType: 'module',
+ globals: {...globals.node, ...globals.browser},
+ },
+ },
+ ...require('gts'),
+];
diff --git a/eslint.ignores.js b/eslint.ignores.js
new file mode 100644
index 00000000..ff5733c8
--- /dev/null
+++ b/eslint.ignores.js
@@ -0,0 +1 @@
+module.exports = ['build/'];
diff --git a/frontend/javascript/app.js b/frontend/javascript/app.js
index 54a50d12..e3850d46 100644
--- a/frontend/javascript/app.js
+++ b/frontend/javascript/app.js
@@ -1,28 +1,26 @@
// Install Sentry to send errors to Sentry
import * as Sentry from '@sentry/browser';
-if (process.env.SENTRY_ENV !== "local-development") {
- Sentry.init(
- {
- dsn: 'https://151ecfab1a8242009012d45a19064cfd@sentry.io/133175'
- }
- );
+if (process.env.SENTRY_ENV !== 'local-development') {
+ Sentry.init({
+ dsn: 'https://151ecfab1a8242009012d45a19064cfd@sentry.io/133175',
+ });
- // Capture unhandled exceptions in promises
- window.addEventListener('unhandledrejection', err => {
- Sentry.captureException(err.reason);
- });
+ // Capture unhandled exceptions in promises
+ window.addEventListener('unhandledrejection', err => {
+ Sentry.captureException(err.reason);
+ });
}
// Load the rest of the modules
-import "jquery";
-import "bootstrap";
-import "./modules";
+import 'jquery';
+import 'bootstrap';
+import './modules';
// Load fonts
-import "bootstrap-icons/font/fonts/bootstrap-icons.woff"
-import "bootstrap-icons/font/fonts/bootstrap-icons.woff2"
+import 'bootstrap-icons/font/fonts/bootstrap-icons.woff';
+import 'bootstrap-icons/font/fonts/bootstrap-icons.woff2';
// Load styles
-import "../stylesheets/app.scss"
-import "../stylesheets/presentations.scss"
+import '../stylesheets/app.scss';
+import '../stylesheets/presentations.scss';
diff --git a/frontend/javascript/exceptions/adhocException.js b/frontend/javascript/exceptions/adhocException.js
index 2aa52b06..0bd50a0d 100644
--- a/frontend/javascript/exceptions/adhocException.js
+++ b/frontend/javascript/exceptions/adhocException.js
@@ -1,8 +1,12 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class AdHocException extends Enumify {
- NO_FOLLOW_ATTRIBUTE = AdHocException("Unable to find follow query selector for adhoc module");
- NO_PARENT_ATTRIBUTE = AdHocException("Unable to find parent element id for adhoc module");
+ NO_FOLLOW_ATTRIBUTE = AdHocException(
+ 'Unable to find follow query selector for adhoc module',
+ );
+ NO_PARENT_ATTRIBUTE = AdHocException(
+ 'Unable to find parent element id for adhoc module',
+ );
_ = AdHocException.closeEnum();
constructor(message) {
diff --git a/frontend/javascript/exceptions/attendanceException.js b/frontend/javascript/exceptions/attendanceException.js
index 0a4fa4f3..185d798d 100644
--- a/frontend/javascript/exceptions/attendanceException.js
+++ b/frontend/javascript/exceptions/attendanceException.js
@@ -1,7 +1,9 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class AttendanceException extends Enumify {
- NO_SRC_ATTRIBUTE = AttendanceException("Unable to find data source for attendance module");
+ NO_SRC_ATTRIBUTE = AttendanceException(
+ 'Unable to find data source for attendance module',
+ );
_ = AttendanceException.closeEnum();
constructor(message) {
diff --git a/frontend/javascript/exceptions/cmAttendanceException.js b/frontend/javascript/exceptions/cmAttendanceException.js
index 5992ca5e..3c7cf380 100644
--- a/frontend/javascript/exceptions/cmAttendanceException.js
+++ b/frontend/javascript/exceptions/cmAttendanceException.js
@@ -1,7 +1,9 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class CmAttendanceException extends Enumify {
- SUBMIT_BEFORE_RENDER = CmAttendanceException("Cannot submit updated attendance before the modal renders.");
+ SUBMIT_BEFORE_RENDER = CmAttendanceException(
+ 'Cannot submit updated attendance before the modal renders.',
+ );
_ = CmAttendanceException.closeEnum();
constructor(message) {
@@ -9,4 +11,3 @@ export default class CmAttendanceException extends Enumify {
this.message = message;
}
}
-
diff --git a/frontend/javascript/exceptions/exception.js b/frontend/javascript/exceptions/exception.js
index 9369f8d1..a12527f7 100644
--- a/frontend/javascript/exceptions/exception.js
+++ b/frontend/javascript/exceptions/exception.js
@@ -1,29 +1,29 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class ConditionalException extends Error {
constructor(exception, additionalMessage) {
- let message = "";
+ let message = '';
if (exception instanceof Enumify) {
try {
message += exception.message;
- } catch (e) {
+ } catch {
message += exception.name;
}
} else {
try {
message += exception;
- } catch (e) {
- message += "An unknown error has occured";
+ } catch {
+ message += 'An unknown error has occured';
}
}
if (additionalMessage) {
- message += ": " + additionalMessage;
+ message += ': ' + additionalMessage;
}
super(message);
- this.name = "ConditionalException";
+ this.name = 'ConditionalException';
this.message = message;
}
}
diff --git a/frontend/javascript/exceptions/fetchException.js b/frontend/javascript/exceptions/fetchException.js
index 84d24dcc..37d93705 100644
--- a/frontend/javascript/exceptions/fetchException.js
+++ b/frontend/javascript/exceptions/fetchException.js
@@ -1,7 +1,7 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class FetchException extends Enumify {
- REQUEST_FAILED = new FetchException("Unable to retrieve data from server");
+ REQUEST_FAILED = new FetchException('Unable to retrieve data from server');
_ = FetchException.closeEnum();
constructor(message) {
diff --git a/frontend/javascript/exceptions/hmSearchException.js b/frontend/javascript/exceptions/hmSearchException.js
index 0b2c01d5..6577646c 100644
--- a/frontend/javascript/exceptions/hmSearchException.js
+++ b/frontend/javascript/exceptions/hmSearchException.js
@@ -1,12 +1,16 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class HmSearchException extends Enumify {
- TARGET_REQUIRED = HmSearchException("A target selector is required to use HouseMeetingSearch");
- NOT_A_TABLE = HmSearchException("The HouseMeetingSearch module requires the target to be a table");
+ TARGET_REQUIRED = HmSearchException(
+ 'A target selector is required to use HouseMeetingSearch',
+ );
+ NOT_A_TABLE = HmSearchException(
+ 'The HouseMeetingSearch module requires the target to be a table',
+ );
_ = HmSearchException.closeEnum();
constructor(message) {
- super()
+ super();
this.message = message;
}
}
diff --git a/frontend/javascript/exceptions/housingException.js b/frontend/javascript/exceptions/housingException.js
index 37b5dc8f..ae42d501 100644
--- a/frontend/javascript/exceptions/housingException.js
+++ b/frontend/javascript/exceptions/housingException.js
@@ -1,7 +1,9 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class HousingException extends Enumify {
- SUBMIT_BEFORE_RENDER = HousingException("Cannot submit updated roster before the modal renders.");
+ SUBMIT_BEFORE_RENDER = HousingException(
+ 'Cannot submit updated roster before the modal renders.',
+ );
_ = HousingException.closeEnum();
constructor(message) {
diff --git a/frontend/javascript/exceptions/masonryException.js b/frontend/javascript/exceptions/masonryException.js
index d56271d9..aa47f04a 100644
--- a/frontend/javascript/exceptions/masonryException.js
+++ b/frontend/javascript/exceptions/masonryException.js
@@ -1,7 +1,9 @@
-import { Enumify } from 'enumify';
+import {Enumify} from 'enumify';
export default class MasonryException extends Enumify {
- CANT_FIND_SHARED_SELECTOR = new MasonryException("Unable to find shared selector for Masonry grid items");
+ CANT_FIND_SHARED_SELECTOR = new MasonryException(
+ 'Unable to find shared selector for Masonry grid items',
+ );
_ = MasonryException.closeEnum();
constructor(message) {
diff --git a/frontend/javascript/models/frequencyMap.js b/frontend/javascript/models/frequencyMap.js
index dd494010..24362d0f 100644
--- a/frontend/javascript/models/frequencyMap.js
+++ b/frontend/javascript/models/frequencyMap.js
@@ -32,7 +32,7 @@ export default class FrequencyMap {
let highestFreq = 0;
let highestKey = null;
- for (let [key, freq] of this.entries()) {
+ for (const [key, freq] of this.entries()) {
if (freq > highestFreq) {
highestKey = key;
highestFreq = freq;
diff --git a/frontend/javascript/modules/acceptDuesDatepicker.js b/frontend/javascript/modules/acceptDuesDatepicker.js
index 305cefe3..2a48bdf3 100644
--- a/frontend/javascript/modules/acceptDuesDatepicker.js
+++ b/frontend/javascript/modules/acceptDuesDatepicker.js
@@ -1,10 +1,9 @@
-/* global $ */
-import "bootstrap-material-datetimepicker";
-import "whatwg-fetch";
-import FetchUtil from "../utils/fetchUtil";
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import sweetAlert from "bootstrap-sweetalert/dev/sweetalert.es6.js";
+import 'bootstrap-material-datetimepicker';
+import 'whatwg-fetch';
+import FetchUtil from '../utils/fetchUtil';
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import sweetAlert from 'bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class DatePicker {
constructor(input) {
@@ -17,41 +16,50 @@ export default class DatePicker {
render() {
$(this.input).bootstrapMaterialDatePicker({
weekStart: 0,
- time: false
+ time: false,
});
- document.getElementsByClassName('dtp-btn-ok')[0].addEventListener('click',
- () => {
- this._updateSetting();
- });
+ document
+ .getElementsByClassName('dtp-btn-ok')[0]
+ .addEventListener('click', () => {
+ this._updateSetting();
+ });
}
_updateSetting() {
- console.log("Update dues until: " + this.input.value);
- let payload = {};
+ console.log('Update dues until: ' + this.input.value);
+ const payload = {};
payload[this.setting] = this.input.value;
fetch(this.endpoint, {
method: 'PUT',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
credentials: 'same-origin',
- body: JSON.stringify(payload)
+ body: JSON.stringify(payload),
})
.then(FetchUtil.checkStatus)
.then(FetchUtil.parseJSON)
.then(response => {
- if (!response.hasOwnProperty('success') || !response.success) {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
+ if (!Object.hasOwn(response, 'success') || !response.success) {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, response);
}
})
.catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, error);
});
}
diff --git a/frontend/javascript/modules/addUser.js b/frontend/javascript/modules/addUser.js
index 3cacfa28..641fd7d3 100644
--- a/frontend/javascript/modules/addUser.js
+++ b/frontend/javascript/modules/addUser.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class AddUser {
constructor(form) {
@@ -8,21 +8,22 @@ export default class AddUser {
}
render() {
- this.form.querySelector('input[type=submit]')
+ this.form
+ .querySelector('input[type=submit]')
.addEventListener('click', e => this._submitForm(e));
}
_submitForm(e) {
e.preventDefault();
- let payload = {
+ const payload = {
name: this.form.querySelector('input[name=name]').value,
onfloor: this.form.querySelector('input[name=onfloor]').checked,
- roomNumber: this.form.querySelector('input[name=room]').value
+ roomNumber: this.form.querySelector('input[name=room]').value,
};
FetchUtil.post(this.endpoint, payload, {
- successText: "User has been created."
+ successText: 'User has been created.',
});
}
}
diff --git a/frontend/javascript/modules/adhoc.js b/frontend/javascript/modules/adhoc.js
index f0e53a1d..16c715e5 100644
--- a/frontend/javascript/modules/adhoc.js
+++ b/frontend/javascript/modules/adhoc.js
@@ -1,11 +1,10 @@
-/* global fetch */
-import "whatwg-fetch";
-import "@selectize/selectize";
-import FetchUtil from "../utils/fetchUtil";
-import Exception from "../exceptions/exception";
-import AttendanceException from "../exceptions/attendanceException";
-import AdHocException from "../exceptions/adhocException";
-import FetchException from "../exceptions/fetchException";
+import 'whatwg-fetch';
+import '@selectize/selectize';
+import FetchUtil from '../utils/fetchUtil';
+import Exception from '../exceptions/exception';
+import AttendanceException from '../exceptions/attendanceException';
+import AdHocException from '../exceptions/adhocException';
+import FetchException from '../exceptions/fetchException';
export default class AdHoc {
constructor(element) {
@@ -16,26 +15,26 @@ export default class AdHoc {
this.list = element.list;
if (!this.followSelector) {
- throw new Exception(AdHocException.NO_FOLLOW_ATTRIBUTE);
+ throw new Exception(AdHocException.NO_FOLLOW_ATTRIBUTE);
} else if (!this.parentId) {
- throw new Exception(AdHocException.NO_PARENT_ATTRIBUTE);
+ throw new Exception(AdHocException.NO_PARENT_ATTRIBUTE);
}
if (this.dataSrc) {
fetch('/attendance/' + this.dataSrc, {
method: 'GET',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
- credentials: 'same-origin'
+ credentials: 'same-origin',
})
.then(FetchUtil.checkResponse)
.then(FetchUtil.parseJSON)
.then(response => {
response.adhocs.forEach(item => {
const option = document.createElement('option');
- option.value = item
+ option.value = item;
element.list.appendChild(option);
});
this.render();
@@ -52,15 +51,15 @@ export default class AdHoc {
const parentElem = document.getElementById(this.parentId);
document.querySelectorAll(this.followSelector).forEach(input => {
- if (input.value === "Ad-Hoc") {
- parentElem.style.display = "block";
+ if (input.value === 'Ad-Hoc') {
+ parentElem.style.display = 'block';
}
- input.addEventListener("change", event => {
- if (event.target.value === "Ad-Hoc") {
- parentElem.style.display = "block";
+ input.addEventListener('change', event => {
+ if (event.target.value === 'Ad-Hoc') {
+ parentElem.style.display = 'block';
} else {
- parentElem.style.display = "none";
+ parentElem.style.display = 'none';
}
});
});
diff --git a/frontend/javascript/modules/attendanceForm.js b/frontend/javascript/modules/attendanceForm.js
index b8ebb3d2..1baa447f 100644
--- a/frontend/javascript/modules/attendanceForm.js
+++ b/frontend/javascript/modules/attendanceForm.js
@@ -1,5 +1,5 @@
-import FetchUtil from "../utils/fetchUtil";
-import MemberUtil from "../utils/memberUtil";
+import FetchUtil from '../utils/fetchUtil';
+import MemberUtil from '../utils/memberUtil';
export default class AttendanceForm {
constructor(form) {
@@ -7,15 +7,15 @@ export default class AttendanceForm {
this.fields = {
timestamp: this.form.elements.date,
- attendees: this.form.elements.attendees
+ attendees: this.form.elements.attendees,
};
this.endpoint = '';
- if (this.form.dataset.type === "committee") {
+ if (this.form.dataset.type === 'committee') {
this.endpoint = '/attendance/submit/cm';
this.fields.committee = this.form.elements.committee;
- } else if (this.form.dataset.type === "seminar") {
+ } else if (this.form.dataset.type === 'seminar') {
this.endpoint = '/attendance/submit/ts';
this.fields.name = this.form.elements.name;
this.fields.host = this.form.elements.host;
@@ -27,35 +27,39 @@ export default class AttendanceForm {
render() {
// Prevent the form from submitting if the user hits the enter key
['keyup', 'keypress'].forEach(keyevent =>
- this.form.addEventListener(keyevent, event => {
- let keyCode = event.keyCode || event.which;
- if (keyCode === 13) {
- event.preventDefault();
- return false;
- }
- }, true));
+ this.form.addEventListener(
+ keyevent,
+ event => {
+ const keyCode = event.keyCode || event.which;
+ if (keyCode === 13) {
+ event.preventDefault();
+ return false;
+ }
+ },
+ true,
+ ),
+ );
// Form submit handler
- this.form.querySelectorAll("input[type=submit]").forEach(submitBtn => {
- submitBtn.addEventListener("click", e => {
+ this.form.querySelectorAll('input[type=submit]').forEach(submitBtn => {
+ submitBtn.addEventListener('click', e => {
e.preventDefault();
- let payload = {};
-
+ const payload = {};
- if (this.fields.committee.value === "Ad-Hoc") {
+ if (this.fields.committee.value === 'Ad-Hoc') {
this.fields.adhoc = this.form.elements.adhoc;
}
Object.keys(this.fields).forEach(field => {
- if (field === "attendees") {
- let membersSplit = MemberUtil.splitFreshmenUpperclassmen(
- this.fields[field].value.split(',')
+ if (field === 'attendees') {
+ const membersSplit = MemberUtil.splitFreshmenUpperclassmen(
+ this.fields[field].value.split(','),
);
payload.freshmen = membersSplit.freshmen;
payload.members = membersSplit.upperclassmen;
- } else if (field === "host") {
- let hostSplit = MemberUtil.splitFreshmenUpperclassmen(
- this.fields[field].value.split(',')
+ } else if (field === 'host') {
+ const hostSplit = MemberUtil.splitFreshmenUpperclassmen(
+ this.fields[field].value.split(','),
);
payload.freshman_host = hostSplit.freshmen;
payload.member_host = hostSplit.upperclassmen;
@@ -65,7 +69,7 @@ export default class AttendanceForm {
});
FetchUtil.post(this.endpoint, payload, {
- successText: "Attendance has been submitted."
+ successText: 'Attendance has been submitted.',
});
});
});
diff --git a/frontend/javascript/modules/becomeActive.js b/frontend/javascript/modules/becomeActive.js
index 4de6d1f0..5d60b851 100644
--- a/frontend/javascript/modules/becomeActive.js
+++ b/frontend/javascript/modules/becomeActive.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class becomeActive {
constructor(link) {
@@ -14,13 +14,18 @@ export default class becomeActive {
_delete(e) {
e.preventDefault();
- FetchUtil.postWithWarning(this.endpoint, {}, {
- warningText: "Becoming an active member means that you will be charged" +
- " dues, which are detailed in the CSH Constitution.",
- successText: "You are now an active member."
- }, () => {
- document.getElementById('becomeActive').remove();
- });
+ FetchUtil.postWithWarning(
+ this.endpoint,
+ {},
+ {
+ warningText:
+ 'Becoming an active member means that you will be charged' +
+ ' dues, which are detailed in the CSH Constitution.',
+ successText: 'You are now an active member.',
+ },
+ () => {
+ document.getElementById('becomeActive').remove();
+ },
+ );
}
}
-
diff --git a/frontend/javascript/modules/cmReview.js b/frontend/javascript/modules/cmReview.js
index dff4d285..7377f530 100644
--- a/frontend/javascript/modules/cmReview.js
+++ b/frontend/javascript/modules/cmReview.js
@@ -1,10 +1,9 @@
-/* global fetch */
import 'whatwg-fetch';
-import Exception from "../exceptions/exception";
-import CmAttendanceException from "../exceptions/cmAttendanceException";
-import FetchUtil from "../utils/fetchUtil";
-import MemberUtil from "../utils/memberUtil";
-import MemberSelect from "./memberSelect";
+import Exception from '../exceptions/exception';
+import CmAttendanceException from '../exceptions/cmAttendanceException';
+import FetchUtil from '../utils/fetchUtil';
+import MemberUtil from '../utils/memberUtil';
+import MemberSelect from './memberSelect';
export default class ReviewMeeting {
constructor(link) {
@@ -17,7 +16,7 @@ export default class ReviewMeeting {
this.endpoints = {
meetingDetails: '/attendance/' + this.meeting + '/',
- alterAttendance: '/attendance/alter/' + this.meeting + '/'
+ alterAttendance: '/attendance/alter/' + this.meeting + '/',
};
this.render();
@@ -30,73 +29,75 @@ export default class ReviewMeeting {
fetch(this.endpoints.meetingDetails + this.cid, {
method: 'GET',
headers: {
- Accept: 'application/json'
+ Accept: 'application/json',
},
- credentials: 'same-origin'
+ credentials: 'same-origin',
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(data => {
- this.data = data;
- this._renderModal();
- });
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(data => {
+ this.data = data;
+ this._renderModal();
+ });
});
}
_renderModal() {
// Clone template modal
this.modal = this.modalTpl.cloneNode(true);
- this.modal.setAttribute('id',
- this.modal.getAttribute('id') + '-' + this.cid);
+ this.modal.setAttribute(
+ 'id',
+ this.modal.getAttribute('id') + '-' + this.cid,
+ );
// Submit button
- this.modal.querySelector('input[type="submit"]').addEventListener('click',
- e => {
+ this.modal
+ .querySelector('input[type="submit"]')
+ .addEventListener('click', e => {
e.preventDefault();
this._submitForm();
});
// Delete Button
- this.modal.querySelector('button.delete-btn').addEventListener('click', e =>
- this._deleteMeeting()
- );
+ this.modal
+ .querySelector('button.delete-btn')
+ .addEventListener('click', () => this._deleteMeeting());
- if (this.meeting == "ts") {
+ if (this.meeting === 'ts') {
// Host
const hostInput = this.modal.querySelector('input[name="host"]');
- let hostStr = "";
+ let hostStr = '';
this.data.host.forEach(h => {
- hostStr += h.value + ",";
+ hostStr += h.value + ',';
});
hostInput.value = hostStr;
-
- hostInput.dataset.src = "cm_members";
- new MemberSelect(hostInput); // eslint-disable-line no-new
- } else { // Hide host section if not technical seminar
- this.modal.querySelector(".host-edit-row").style.display = "none";
+ hostInput.dataset.src = 'cm_members';
+ new MemberSelect(hostInput);
+ } else {
+ // Hide host section if not technical seminar
+ this.modal.querySelector('.host-edit-row').style.display = 'none';
}
-
// Attendees
const attendeesInput = this.modal.querySelector('input[name="attendees"]');
- let attendeesStr = "";
+ let attendeesStr = '';
this.data.attendees.forEach(attendee => {
- attendeesStr += attendee.value + ",";
+ attendeesStr += attendee.value + ',';
});
attendeesInput.value = attendeesStr;
// Initialize selector control
- attendeesInput.dataset.src = "cm_members";
- new MemberSelect(attendeesInput); // eslint-disable-line no-new
+ attendeesInput.dataset.src = 'cm_members';
+ new MemberSelect(attendeesInput);
// Add to DOM and show, then remove on hide
document.getElementsByTagName('body')[0].appendChild(this.modal);
$(this.modal)
- .on('hidden.bs.modal', e => {
- document.getElementsByTagName('body')[0].removeChild(e.target);
- })
- .modal('show');
+ .on('hidden.bs.modal', e => {
+ document.getElementsByTagName('body')[0].removeChild(e.target);
+ })
+ .modal('show');
}
_submitForm() {
@@ -106,12 +107,12 @@ export default class ReviewMeeting {
});
// Save details
- let payload = {};
- let membersSplit = MemberUtil.splitFreshmenUpperclassmen(
- this.modal.querySelector('input[name="attendees"]').value.split(',')
+ const payload = {};
+ const membersSplit = MemberUtil.splitFreshmenUpperclassmen(
+ this.modal.querySelector('input[name="attendees"]').value.split(','),
);
- let hostSplit = MemberUtil.splitFreshmenUpperclassmen(
- this.modal.querySelector('input[name="host"]').value.split(",")
+ const hostSplit = MemberUtil.splitFreshmenUpperclassmen(
+ this.modal.querySelector('input[name="host"]').value.split(','),
);
payload.freshmen = membersSplit.freshmen;
payload.members = membersSplit.upperclassmen;
@@ -121,17 +122,22 @@ export default class ReviewMeeting {
fetch(this.endpoints.meetingDetails + this.cid + '/approve', {
method: 'POST',
headers: {
- Accept: 'application/json'
+ Accept: 'application/json',
},
- credentials: 'same-origin'
+ credentials: 'same-origin',
});
- FetchUtil.post(this.endpoints.alterAttendance + this.cid, payload, {
- successText: 'Attendance has been updated.'
- }, () => {
- $(this.modal).modal('hide');
- window.location.reload();
- });
+ FetchUtil.post(
+ this.endpoints.alterAttendance + this.cid,
+ payload,
+ {
+ successText: 'Attendance has been updated.',
+ },
+ () => {
+ $(this.modal).modal('hide');
+ window.location.reload();
+ },
+ );
} else {
throw new Exception(CmAttendanceException.SUBMIT_BEFORE_RENDER);
}
@@ -144,17 +150,20 @@ export default class ReviewMeeting {
});
// Delete details
- FetchUtil.fetchWithWarning(this.endpoints.meetingDetails + this.cid, {
- method: 'DELETE',
- warningText: "Attendance will be permanently deleted.",
- successText: "Attendance has been deleted."
- }, () => {
- $(this.modal).modal('hide');
- window.location.reload();
- });
+ FetchUtil.fetchWithWarning(
+ this.endpoints.meetingDetails + this.cid,
+ {
+ method: 'DELETE',
+ warningText: 'Attendance will be permanently deleted.',
+ successText: 'Attendance has been deleted.',
+ },
+ () => {
+ $(this.modal).modal('hide');
+ window.location.reload();
+ },
+ );
} else {
throw new Exception(CmAttendanceException.SUBMIT_BEFORE_RENDER);
}
}
-
}
diff --git a/frontend/javascript/modules/conditionalActions.js b/frontend/javascript/modules/conditionalActions.js
index d71a8338..2d372fc3 100644
--- a/frontend/javascript/modules/conditionalActions.js
+++ b/frontend/javascript/modules/conditionalActions.js
@@ -18,26 +18,30 @@ export default class ConditionalActions {
_handleAction(e) {
const action = e.target.dataset.action;
- if (action === "delete") {
- FetchUtil.fetchWithWarning(this.deleteEndpoint, {
- method: 'DELETE',
- warningText: "Are you sure you want to delete this conditional?",
- successText: "The conditional has been deleted."
- }, () => {
- $(e.target.closest("tr")).hide();
- });
+ if (action === 'delete') {
+ FetchUtil.fetchWithWarning(
+ this.deleteEndpoint,
+ {
+ method: 'DELETE',
+ warningText: 'Are you sure you want to delete this conditional?',
+ successText: 'The conditional has been deleted.',
+ },
+ () => {
+ $(e.target.closest('tr')).hide();
+ },
+ );
} else {
- const actionExt = (action === "pass") ? "Passed" : "Failed";
- let payload = {
+ const actionExt = action === 'pass' ? 'Passed' : 'Failed';
+ const payload = {
id: this.id,
- status: actionExt
+ status: actionExt,
};
FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "Are you sure you want to " + action +
- " this conditional?",
- successText: "The conditional has been marked as " +
- actionExt.toLowerCase() + "."
+ warningText:
+ 'Are you sure you want to ' + action + ' this conditional?',
+ successText:
+ 'The conditional has been marked as ' + actionExt.toLowerCase() + '.',
});
}
}
diff --git a/frontend/javascript/modules/conditionalForm.js b/frontend/javascript/modules/conditionalForm.js
index 8cd4ad89..1dab6451 100644
--- a/frontend/javascript/modules/conditionalForm.js
+++ b/frontend/javascript/modules/conditionalForm.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
import reveal from 'reveal.js';
export default class ConditionalForm {
@@ -9,39 +9,44 @@ export default class ConditionalForm {
}
render() {
- this.form.querySelector('input[type=submit]')
- .addEventListener('click', e => this._submitForm(e));
+ this.form
+ .querySelector('input[type=submit]')
+ .addEventListener('click', e => this._submitForm(e));
}
_submitForm(e) {
e.preventDefault();
- let uid = this.form.uid.value;
+ const uid = this.form.uid.value;
let evaluation = null;
- if (location.pathname.split('/')[1] === "slideshow") {
+ if (location.pathname.split('/')[1] === 'slideshow') {
evaluation = location.pathname.split('/')[2];
}
- let payload = {
+ const payload = {
uid: uid,
description: this.form.querySelector('input[name=description]').value,
dueDate: this.form.querySelector('input[name=due_date]').value,
- evaluation: evaluation
+ evaluation: evaluation,
};
- FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "Are you sure you want to create this conditional?",
- successText: "The conditional has been created."
- }, () => {
- $(this.form.closest('.modal')).modal('hide');
- if (location.pathname.split('/')[1] === "slideshow") {
- $('#createConditional').on('hidden.bs.modal', function() {
- var condBtn = $('div[data-uid="' + uid + '"] button')
- .first();
- $(condBtn).text("Conditionaled").off("click").addClass("disabled");
- $(condBtn).next().hide();
- });
- reveal.right();
- } else {
- location.reload();
- }
- });
+ FetchUtil.postWithWarning(
+ this.endpoint,
+ payload,
+ {
+ warningText: 'Are you sure you want to create this conditional?',
+ successText: 'The conditional has been created.',
+ },
+ () => {
+ $(this.form.closest('.modal')).modal('hide');
+ if (location.pathname.split('/')[1] === 'slideshow') {
+ $('#createConditional').on('hidden.bs.modal', () => {
+ const condBtn = $('div[data-uid="' + uid + '"] button').first();
+ $(condBtn).text('Conditionaled').off('click').addClass('disabled');
+ $(condBtn).next().hide();
+ });
+ reveal.right();
+ } else {
+ location.reload();
+ }
+ },
+ );
}
}
diff --git a/frontend/javascript/modules/coopDelete.js b/frontend/javascript/modules/coopDelete.js
index cb944da0..6a84b7a1 100644
--- a/frontend/javascript/modules/coopDelete.js
+++ b/frontend/javascript/modules/coopDelete.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class coopDelete {
constructor(link) {
@@ -15,13 +15,18 @@ export default class coopDelete {
_delete(e) {
e.preventDefault();
- FetchUtil.fetchWithWarning(this.endpoint, {
- method: 'DELETE',
- warningText: "This co-op entry will be deleted and the user will no" +
- " longer be excluded from attendance and vote counts.",
- successText: "Co-op has been deleted."
- }, () => {
- document.getElementById('coop-' + this.uid).remove();
- });
+ FetchUtil.fetchWithWarning(
+ this.endpoint,
+ {
+ method: 'DELETE',
+ warningText:
+ 'This co-op entry will be deleted and the user will no' +
+ ' longer be excluded from attendance and vote counts.',
+ successText: 'Co-op has been deleted.',
+ },
+ () => {
+ document.getElementById('coop-' + this.uid).remove();
+ },
+ );
}
}
diff --git a/frontend/javascript/modules/coopSubmitForm.js b/frontend/javascript/modules/coopSubmitForm.js
index 493a1b02..b27125de 100644
--- a/frontend/javascript/modules/coopSubmitForm.js
+++ b/frontend/javascript/modules/coopSubmitForm.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class coopSubmitForm {
constructor(form) {
@@ -8,21 +8,23 @@ export default class coopSubmitForm {
}
render() {
- this.form.querySelector('input[type=submit]')
+ this.form
+ .querySelector('input[type=submit]')
.addEventListener('click', e => this._submitForm(e));
}
_submitForm(e) {
e.preventDefault();
- let payload = {
- semester: this.form.querySelector('input[name=semester]:checked').value
+ const payload = {
+ semester: this.form.querySelector('input[name=semester]:checked').value,
};
FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "You will not be able to edit your " +
- "submission once it is submitted!",
- successText: "Your co-op has been submitted."
+ warningText:
+ 'You will not be able to edit your ' +
+ 'submission once it is submitted!',
+ successText: 'Your co-op has been submitted.',
});
}
}
diff --git a/frontend/javascript/modules/datepicker.js b/frontend/javascript/modules/datepicker.js
index 268e0996..a5763392 100644
--- a/frontend/javascript/modules/datepicker.js
+++ b/frontend/javascript/modules/datepicker.js
@@ -1,5 +1,4 @@
-/* global $ */
-import "bootstrap-material-datetimepicker";
+import 'bootstrap-material-datetimepicker';
export default class DatePicker {
constructor(input) {
@@ -11,7 +10,7 @@ export default class DatePicker {
render() {
$(this.input).bootstrapMaterialDatePicker({
weekStart: 0,
- time: false
+ time: false,
});
}
}
diff --git a/frontend/javascript/modules/dropzone.js b/frontend/javascript/modules/dropzone.js
index 2b04a87e..b7528a39 100644
--- a/frontend/javascript/modules/dropzone.js
+++ b/frontend/javascript/modules/dropzone.js
@@ -1,4 +1,4 @@
-import Dropzone from "dropzone";
+import Dropzone from 'dropzone';
Dropzone.autoDiscover = false;
export default class DropzoneUpload {
@@ -8,11 +8,11 @@ export default class DropzoneUpload {
}
render() {
- const dz = new Dropzone(this.element); // eslint-disable-line new-cap
- dz.on("complete", () => window.location.reload());
+ const dz = new Dropzone(this.element);
+ dz.on('complete', () => window.location.reload());
}
}
Dropzone.options.uploadUser = {
- acceptedFiles: ".csv"
+ acceptedFiles: '.csv',
};
diff --git a/frontend/javascript/modules/editUser.js b/frontend/javascript/modules/editUser.js
index 6d119a1b..9c146d9d 100644
--- a/frontend/javascript/modules/editUser.js
+++ b/frontend/javascript/modules/editUser.js
@@ -1,11 +1,10 @@
-/* global fetch */
-import "whatwg-fetch";
-import FetchUtil from "../utils/fetchUtil";
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import sweetAlert from "../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js"; // eslint-disable-line max-len
-import _ from "lodash";
-import DatePicker from "./datepicker";
+import 'whatwg-fetch';
+import FetchUtil from '../utils/fetchUtil';
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js';
+import _ from 'lodash';
+import DatePicker from './datepicker';
export default class EditUser {
constructor(link) {
@@ -17,44 +16,43 @@ export default class EditUser {
this.endpoints = {
userDetails: '/manage/user/',
alterHmAttendance: '/attendance/alter/hm/',
- userUpgrade: '/manage/upgrade_user'
+ userUpgrade: '/manage/upgrade_user',
};
this.render();
}
render() {
- this.link.addEventListener("click", e => {
+ this.link.addEventListener('click', e => {
e.preventDefault();
fetch(this.endpoints.userDetails + this.uid, {
method: 'GET',
headers: {
- Accept: 'application/json'
+ Accept: 'application/json',
},
- credentials: "same-origin"
+ credentials: 'same-origin',
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(data => {
- this.data = data;
-
- if (this.type === "financial") {
- this._renderFinancialModal();
- } else if (this.type === "freshman") {
- this._renderFreshmanModal();
- } else {
- this._renderModal();
- }
- });
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(data => {
+ this.data = data;
+
+ if (this.type === 'financial') {
+ this._renderFinancialModal();
+ } else if (this.type === 'freshman') {
+ this._renderFreshmanModal();
+ } else {
+ this._renderModal();
+ }
+ });
});
}
_renderModal() {
// Clone template modal
- let modal = this.modal.cloneNode(true);
- modal.setAttribute("id",
- this.modal.getAttribute("id") + "-" + this.uid);
+ const modal = this.modal.cloneNode(true);
+ modal.setAttribute('id', this.modal.getAttribute('id') + '-' + this.uid);
// Member Name
modal.querySelector('input[name=name]').value = this.data.name;
@@ -65,76 +63,80 @@ export default class EditUser {
// On-floor Status
modal.querySelector('input[name=onfloor]').checked =
- this.data.onfloor_status;
+ this.data.onfloor_status;
// Dues
- modal.querySelector('input[name=dues]').checked =
- this.data.active_member;
+ modal.querySelector('input[name=dues]').checked = this.data.active_member;
// Housing Points
modal.querySelector('input[name=points]').value = this.data.housing_points;
// Missed House Meetings
if (this.data.missed_hm.length > 0) {
- modal.querySelector('.modal-body')
- .removeChild(modal.querySelector('.no-missed-hm-alert'));
+ modal
+ .querySelector('.modal-body')
+ .removeChild(modal.querySelector('.no-missed-hm-alert'));
- let missedHmTpl = modal.querySelector('.missed-hm-tpl');
- modal.querySelector(".modal-body").removeChild(missedHmTpl);
+ const missedHmTpl = modal.querySelector('.missed-hm-tpl');
+ modal.querySelector('.modal-body').removeChild(missedHmTpl);
this.data.missed_hm.forEach(hm => {
- let node = missedHmTpl.cloneNode(true);
+ const node = missedHmTpl.cloneNode(true);
- node.setAttribute("id", "missedHm-" + this.uid + "-" + hm.id);
+ node.setAttribute('id', 'missedHm-' + this.uid + '-' + hm.id);
node.dataset.id = hm.id;
- node.querySelector(".hm-date").textContent = hm.date;
+ node.querySelector('.hm-date').textContent = hm.date;
- if (hm.status === "Excused") {
- node.querySelector("input[name=hm-excused]").checked = true;
+ if (hm.status === 'Excused') {
+ node.querySelector('input[name=hm-excused]').checked = true;
}
- node.querySelector("input[name=reason]").value = hm.excuse;
+ node.querySelector('input[name=reason]').value = hm.excuse;
- node.querySelector("input[name=hm-excused]").addEventListener(
- 'click', e => e.target.classList.add('status-changed')
- );
+ node
+ .querySelector('input[name=hm-excused]')
+ .addEventListener('click', e =>
+ e.target.classList.add('status-changed'),
+ );
- node.querySelector("input[name=reason]").addEventListener(
- 'input', e => e.target.classList.add('excuse-changed')
- );
+ node
+ .querySelector('input[name=reason]')
+ .addEventListener('input', e =>
+ e.target.classList.add('excuse-changed'),
+ );
- node.querySelector("button").addEventListener("click", e => {
+ node.querySelector('button').addEventListener('click', e => {
e.preventDefault();
this._markMissedHmAsPresent(hm.id);
});
- modal.querySelector(".modal-body").appendChild(node);
+ modal.querySelector('.modal-body').appendChild(node);
});
} else {
- modal.querySelector('.modal-body')
- .removeChild(modal.querySelector('.missed-hm-tpl'));
+ modal
+ .querySelector('.modal-body')
+ .removeChild(modal.querySelector('.missed-hm-tpl'));
}
// Save button
- modal.querySelector('button.save-btn').addEventListener('click', e => {
- this._submitForm("#" + this.modal.getAttribute("id") + "-" + this.uid);
+ modal.querySelector('button.save-btn').addEventListener('click', () => {
+ this._submitForm('#' + this.modal.getAttribute('id') + '-' + this.uid);
});
// Add to DOM and show, then remove on hide
- document.getElementsByTagName("body")[0].appendChild(modal);
- $("#" + this.modal.getAttribute("id") + "-" + this.uid)
- .on('hidden.bs.modal', e => {
- document.getElementsByTagName("body")[0].removeChild(e.target);
- })
- .modal('show');
+ document.getElementsByTagName('body')[0].appendChild(modal);
+ $('#' + this.modal.getAttribute('id') + '-' + this.uid)
+ .on('hidden.bs.modal', e => {
+ document.getElementsByTagName('body')[0].removeChild(e.target);
+ })
+ .modal('show');
}
_renderFinancialModal() {
// Clone template modal
- let modal = this.modal.cloneNode(true);
- modal.setAttribute("id",
- this.modal.getAttribute("id") + "-" + this.uid);
+ const modal = this.modal.cloneNode(true);
+ modal.setAttribute('id', this.modal.getAttribute('id') + '-' + this.uid);
// Member Name
modal.querySelector('input[name=name]').value = this.data.name;
@@ -144,37 +146,39 @@ export default class EditUser {
modal.querySelector('input[name=dues]').checked = this.data.active_member;
// Save button
- modal.querySelector('button.save-btn').addEventListener('click', e => {
- this._submitForm("#" + this.modal.getAttribute("id") + "-" + this.uid);
+ modal.querySelector('button.save-btn').addEventListener('click', () => {
+ this._submitForm('#' + this.modal.getAttribute('id') + '-' + this.uid);
});
// Add to DOM and show, then remove on hide
- document.getElementsByTagName("body")[0].appendChild(modal);
- $("#" + this.modal.getAttribute("id") + "-" + this.uid)
- .on('hidden.bs.modal', e => {
- document.getElementsByTagName("body")[0].removeChild(e.target);
- })
- .modal('show');
+ document.getElementsByTagName('body')[0].appendChild(modal);
+ $('#' + this.modal.getAttribute('id') + '-' + this.uid)
+ .on('hidden.bs.modal', e => {
+ document.getElementsByTagName('body')[0].removeChild(e.target);
+ })
+ .modal('show');
}
_markMissedHmAsPresent(id) {
FetchUtil.fetchWithWarning(
- this.endpoints.alterHmAttendance + this.uid + "/" + id, {
- method: 'GET',
- warningText: "You will not be able to re-mark this user as absent " +
- "once they have been marked as present.",
- successText: "User has been marked as present."
- }, () => {
- $("#missedHm-" + this.uid + "-" + id).fadeOut();
- }
+ this.endpoints.alterHmAttendance + this.uid + '/' + id,
+ {
+ method: 'GET',
+ warningText:
+ 'You will not be able to re-mark this user as absent ' +
+ 'once they have been marked as present.',
+ successText: 'User has been marked as present.',
+ },
+ () => {
+ $('#missedHm-' + this.uid + '-' + id).fadeOut();
+ },
);
}
_renderFreshmanModal() {
// Clone template modal
- let modal = this.modal.cloneNode(true);
- modal.setAttribute("id",
- this.modal.getAttribute("id") + "-" + this.uid);
+ const modal = this.modal.cloneNode(true);
+ modal.setAttribute('id', this.modal.getAttribute('id') + '-' + this.uid);
// Freshman Name
modal.querySelector('input[name=name]').value = this.data.name;
@@ -184,199 +188,236 @@ export default class EditUser {
// On-floor Status
modal.querySelector('input[name=onfloor]').checked =
- this.data.onfloor_status;
+ this.data.onfloor_status;
// Evaluation Date
- modal.querySelector('input[name=evalDate]').value =
- this.data.eval_date;
+ modal.querySelector('input[name=evalDate]').value = this.data.eval_date;
new DatePicker(modal.querySelector('input[name=evalDate]'));
// Freshmen Signatures Missed
- modal.querySelector('input[name=sigMissed]').value =
- this.data.sig_missed;
+ modal.querySelector('input[name=sigMissed]').value = this.data.sig_missed;
// Missed House Meetings
if (this.data.missed_hm.length > 0) {
- modal.querySelector('.modal-body')
- .removeChild(modal.querySelector('.no-missed-hm-alert'));
+ modal
+ .querySelector('.modal-body')
+ .removeChild(modal.querySelector('.no-missed-hm-alert'));
- let missedHmTpl = modal.querySelector('.missed-hm-tpl');
- modal.querySelector(".modal-body").removeChild(missedHmTpl);
+ const missedHmTpl = modal.querySelector('.missed-hm-tpl');
+ modal.querySelector('.modal-body').removeChild(missedHmTpl);
this.data.missed_hm.forEach(hm => {
- let node = missedHmTpl.cloneNode(true);
+ const node = missedHmTpl.cloneNode(true);
- node.setAttribute("id", "missedHm-" + this.uid + "-" + hm.id);
+ node.setAttribute('id', 'missedHm-' + this.uid + '-' + hm.id);
node.dataset.id = hm.id;
- node.querySelector(".hm-date").textContent = hm.date;
+ node.querySelector('.hm-date').textContent = hm.date;
- if (hm.status === "Excused") {
- node.querySelector("input[name=hm-excused]").checked = true;
+ if (hm.status === 'Excused') {
+ node.querySelector('input[name=hm-excused]').checked = true;
}
- node.querySelector("input[name=reason]").value = hm.excuse;
+ node.querySelector('input[name=reason]').value = hm.excuse;
- node.querySelector("input[name=hm-excused]").addEventListener(
- 'click', e => e.target.classList.add('status-changed')
- );
+ node
+ .querySelector('input[name=hm-excused]')
+ .addEventListener('click', e =>
+ e.target.classList.add('status-changed'),
+ );
- node.querySelector("input[name=reason]").addEventListener(
- 'input', e => e.target.classList.add('excuse-changed')
- );
+ node
+ .querySelector('input[name=reason]')
+ .addEventListener('input', e =>
+ e.target.classList.add('excuse-changed'),
+ );
- node.querySelector("button").addEventListener("click", e => {
+ node.querySelector('button').addEventListener('click', e => {
e.preventDefault();
this._markMissedHmAsPresent(hm.id);
});
- modal.querySelector(".modal-body").appendChild(node);
+ modal.querySelector('.modal-body').appendChild(node);
});
} else {
- modal.querySelector('.modal-body')
- .removeChild(modal.querySelector('.missed-hm-tpl'));
+ modal
+ .querySelector('.modal-body')
+ .removeChild(modal.querySelector('.missed-hm-tpl'));
}
// Save button
- modal.querySelector('button.save-btn').addEventListener('click', e =>
- this._submitForm()
- );
+ modal
+ .querySelector('button.save-btn')
+ .addEventListener('click', () => this._submitForm());
// Delete button
- modal.querySelector('button.delete-btn').addEventListener('click', e =>
- this._deleteFreshman()
- );
+ modal
+ .querySelector('button.delete-btn')
+ .addEventListener('click', () => this._deleteFreshman());
// Upgrade button
- modal.querySelector('button.upgrade-btn').addEventListener('click', e =>
- this._upgradeFreshman()
- );
+ modal
+ .querySelector('button.upgrade-btn')
+ .addEventListener('click', () => this._upgradeFreshman());
// Add to DOM and show, then remove on hide
- document.getElementsByTagName("body")[0].appendChild(modal);
- $("#" + this.modal.getAttribute("id") + "-" + this.uid)
- .on('hidden.bs.modal', e => {
- document.getElementsByTagName("body")[0].removeChild(e.target);
- })
- .modal('show');
+ document.getElementsByTagName('body')[0].appendChild(modal);
+ $('#' + this.modal.getAttribute('id') + '-' + this.uid)
+ .on('hidden.bs.modal', e => {
+ document.getElementsByTagName('body')[0].removeChild(e.target);
+ })
+ .modal('show');
}
_submitForm() {
- let modal = document.querySelector("#" + this.modal.getAttribute("id") +
- "-" + this.uid);
+ const modal = document.querySelector(
+ '#' + this.modal.getAttribute('id') + '-' + this.uid,
+ );
modal.querySelectorAll('button').forEach(btn => {
btn.disabled = true;
});
- if (this.type === "financial") {
+ if (this.type === 'financial') {
// Save user details
- let payload = {
- activeMember: modal.querySelector('input[name=dues]').checked
+ const payload = {
+ activeMember: modal.querySelector('input[name=dues]').checked,
};
- FetchUtil.post(this.endpoints.userDetails + this.uid, payload, {
- successText: "User details have been updated."
- }, () => {
- $(modal).modal('hide');
- });
+ FetchUtil.post(
+ this.endpoints.userDetails + this.uid,
+ payload,
+ {
+ successText: 'User details have been updated.',
+ },
+ () => {
+ $(modal).modal('hide');
+ },
+ );
} else {
// Save missed house meetings
- let missedHms = modal.querySelectorAll('.hm-wrapper');
+ const missedHms = modal.querySelectorAll('.hm-wrapper');
missedHms.forEach(hm => {
- let payload = {
+ const payload = {
id: hm.dataset.id,
- status: hm.querySelector("input[name=hm-excused]").checked ?
- 'Excused' : 'Absent',
- excuse: hm.querySelector(".hm-reason").value
+ status: hm.querySelector('input[name=hm-excused]').checked
+ ? 'Excused'
+ : 'Absent',
+ excuse: hm.querySelector('.hm-reason').value,
};
- fetch(this.endpoints.alterHmAttendance + this.uid +
- "/" + hm.dataset.id, {
- method: 'POST',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- credentials: "same-origin",
- body: JSON.stringify(payload)
- })
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (!response.hasOwnProperty('success') ||
- !response.success) {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
- }
- })
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ fetch(
+ this.endpoints.alterHmAttendance + this.uid + '/' + hm.dataset.id,
+ {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ credentials: 'same-origin',
+ body: JSON.stringify(payload),
+ },
+ )
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (!Object.hasOwn(response, 'success') || !response.success) {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
});
// Save user details
- let payload = {
+ const payload = {
roomNumber: null,
- onfloorStatus: modal.querySelector('input[name=onfloor]').checked
+ onfloorStatus: modal.querySelector('input[name=onfloor]').checked,
};
- if (this.type === "member") {
+ if (this.type === 'member') {
payload.activeMember = modal.querySelector('input[name=dues]').checked;
payload.housingPoints = modal.querySelector('input[name=points]').value;
- } else if (this.type === "freshman") {
+ } else if (this.type === 'freshman') {
payload.name = modal.querySelector('input[name=name]').value;
payload.evalDate = modal.querySelector('input[name=evalDate]').value;
payload.sigMissed = modal.querySelector('input[name=sigMissed]').value;
}
- let roomNumber = modal.querySelector('input[name=room]').value;
- if (roomNumber !== "N/A" && !_.isNil(roomNumber)) {
+ const roomNumber = modal.querySelector('input[name=room]').value;
+ if (roomNumber !== 'N/A' && !_.isNil(roomNumber)) {
payload.roomNumber = roomNumber;
}
- FetchUtil.post(this.endpoints.userDetails + this.uid, payload, {
- successText: "User details have been updated."
- }, () => {
- $(modal).modal('hide');
- });
+ FetchUtil.post(
+ this.endpoints.userDetails + this.uid,
+ payload,
+ {
+ successText: 'User details have been updated.',
+ },
+ () => {
+ $(modal).modal('hide');
+ },
+ );
}
}
_deleteFreshman() {
- let modal = document.querySelector("#" + this.modal.getAttribute("id") +
- "-" + this.uid);
-
- FetchUtil.fetchWithWarning(this.endpoints.userDetails + this.uid, {
- method: 'DELETE',
- warningText: "This account's data will be permanently deleted.",
- successText: "Freshman account has been deleted."
- }, () => {
- $(modal).modal('hide');
- window.location.reload();
- });
+ const modal = document.querySelector(
+ '#' + this.modal.getAttribute('id') + '-' + this.uid,
+ );
+
+ FetchUtil.fetchWithWarning(
+ this.endpoints.userDetails + this.uid,
+ {
+ method: 'DELETE',
+ warningText: "This account's data will be permanently deleted.",
+ successText: 'Freshman account has been deleted.',
+ },
+ () => {
+ $(modal).modal('hide');
+ window.location.reload();
+ },
+ );
}
_upgradeFreshman() {
- let modal = document.querySelector("#" + this.modal.getAttribute("id") +
- "-" + this.uid);
+ const modal = document.querySelector(
+ '#' + this.modal.getAttribute('id') + '-' + this.uid,
+ );
- let payload = {
+ const payload = {
fid: this.uid,
uid: modal.querySelector('input[name=upgradeUid]').value,
- sigsMissed: modal.querySelector('input[name=upgradeSigsMissed]').value
+ sigsMissed: modal.querySelector('input[name=upgradeSigsMissed]').value,
};
- FetchUtil.postWithWarning(this.endpoints.userUpgrade, payload, {
- warningText: "This will irreversibly migrate all of this " +
- "freshman's data to the specified member account.",
- successText: "Account has been upgraded."
- }, () => {
- $(modal).modal('hide');
- window.location.reload();
- });
+ FetchUtil.postWithWarning(
+ this.endpoints.userUpgrade,
+ payload,
+ {
+ warningText:
+ 'This will irreversibly migrate all of this ' +
+ "freshman's data to the specified member account.",
+ successText: 'Account has been upgraded.',
+ },
+ () => {
+ $(modal).modal('hide');
+ window.location.reload();
+ },
+ );
}
}
diff --git a/frontend/javascript/modules/errorReport.js b/frontend/javascript/modules/errorReport.js
index 6852df3d..ad22845c 100644
--- a/frontend/javascript/modules/errorReport.js
+++ b/frontend/javascript/modules/errorReport.js
@@ -13,7 +13,7 @@ export default class ErrorReport {
_invokeSentryModal() {
Sentry.showReportDialog({
- eventId: this.eventId
+ eventId: this.eventId,
});
}
}
diff --git a/frontend/javascript/modules/evalToggle.js b/frontend/javascript/modules/evalToggle.js
index dc80c04a..c13dbcd8 100644
--- a/frontend/javascript/modules/evalToggle.js
+++ b/frontend/javascript/modules/evalToggle.js
@@ -13,11 +13,11 @@ export default class EvalToggle {
_toggleTable() {
if (this.toggle.checked) {
- $("#eval-blocks").hide();
- $("#eval-table").show();
+ $('#eval-blocks').hide();
+ $('#eval-table').show();
} else {
- $("#eval-table").hide();
- $("#eval-blocks").show();
+ $('#eval-table').hide();
+ $('#eval-blocks').show();
}
}
}
diff --git a/frontend/javascript/modules/hmForm.js b/frontend/javascript/modules/hmForm.js
index 63432890..dfd787b2 100644
--- a/frontend/javascript/modules/hmForm.js
+++ b/frontend/javascript/modules/hmForm.js
@@ -1,5 +1,5 @@
-import _ from "lodash";
-import FetchUtil from "../utils/fetchUtil";
+import _ from 'lodash';
+import FetchUtil from '../utils/fetchUtil';
export default class HouseMeetingForm {
constructor(form) {
@@ -7,7 +7,7 @@ export default class HouseMeetingForm {
this.endpoint = '/attendance/submit/hm';
this.fields = {
- timestamp: this.form.elements.date
+ timestamp: this.form.elements.date,
};
this.render();
@@ -16,40 +16,45 @@ export default class HouseMeetingForm {
render() {
// Prevent the form from submitting if the user hits the enter key
['keyup', 'keypress'].forEach(keyevent =>
- this.form.addEventListener(keyevent, event => {
- let keyCode = event.keyCode || event.which;
- if (keyCode === 13) {
- event.preventDefault();
- return false;
- }
- }, true));
+ this.form.addEventListener(
+ keyevent,
+ event => {
+ const keyCode = event.keyCode || event.which;
+ if (keyCode === 13) {
+ event.preventDefault();
+ return false;
+ }
+ },
+ true,
+ ),
+ );
// Form submit handler
- this.form.querySelectorAll("input[type=submit]").forEach(submitBtn => {
- submitBtn.addEventListener("click", e => {
+ this.form.querySelectorAll('input[type=submit]').forEach(submitBtn => {
+ submitBtn.addEventListener('click', e => {
e.preventDefault();
- let payload = {};
+ const payload = {};
Object.keys(this.fields).forEach(field => {
payload[field] = this.fields[field].value;
});
- let freshmen = [];
- let upperclassmen = [];
+ const freshmen = [];
+ const upperclassmen = [];
- this.form.querySelectorAll("input[type=checkbox]").forEach(checkbox => {
+ this.form.querySelectorAll('input[type=checkbox]').forEach(checkbox => {
const uid = checkbox.name;
- const status = checkbox.checked ? "Attended" : "Absent";
+ const status = checkbox.checked ? 'Attended' : 'Absent';
if (_.isNaN(_.toNumber(uid))) {
upperclassmen.push({
uid: uid,
- status: status
+ status: status,
});
} else {
freshmen.push({
id: uid,
- status: status
+ status: status,
});
}
});
@@ -58,9 +63,10 @@ export default class HouseMeetingForm {
payload.members = upperclassmen;
FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "You will not be able to unmark a member as present " +
- "once attendance has been recorded.",
- successText: "Attendance has been submitted."
+ warningText:
+ 'You will not be able to unmark a member as present ' +
+ 'once attendance has been recorded.',
+ successText: 'Attendance has been submitted.',
});
});
});
diff --git a/frontend/javascript/modules/hmSearch.js b/frontend/javascript/modules/hmSearch.js
index 6ec645ed..e3084d23 100644
--- a/frontend/javascript/modules/hmSearch.js
+++ b/frontend/javascript/modules/hmSearch.js
@@ -1,6 +1,5 @@
-/* global $ */
-import Exception from "../exceptions/exception";
-import HmSearchException from "../exceptions/hmSearchException";
+import Exception from '../exceptions/exception';
+import HmSearchException from '../exceptions/hmSearchException';
export default class HouseMeetingSearch {
constructor(input) {
@@ -11,7 +10,7 @@ export default class HouseMeetingSearch {
throw new Exception(HmSearchException.TARGET_REQUIRED);
}
- if (this.target.tagName !== "TABLE") {
+ if (this.target.tagName !== 'TABLE') {
throw new Exception(HmSearchException.NOT_A_TABLE);
}
@@ -22,29 +21,29 @@ export default class HouseMeetingSearch {
} else {
// No, wait until it initializes before rendering
// Must use jQuery to listen to events fired by DataTables
- $(this.target).on("init.dt", () => this.render());
+ $(this.target).on('init.dt', () => this.render());
}
}
render() {
// Remove the event listner so this module doesn't try to render again
- $(this.target).off("init.dt");
+ $(this.target).off('init.dt');
// Add custom filtering function
$.fn.dataTable.ext.search.push(HouseMeetingSearch._alreadySelectedFilter);
// Retrieve the target's DataTable API object
- this.api = $(this.target).DataTable({ // eslint-disable-line new-cap
- retrieve: true
+ this.api = $(this.target).DataTable({
+ retrieve: true,
});
// Bind to the input
- this.input.addEventListener("keydown", event => this._handleKey(event));
+ this.input.addEventListener('keydown', event => this._handleKey(event));
}
_handleKey(event) {
// Did the user press enter?
- let keyCode = event.keyCode || event.which;
+ const keyCode = event.keyCode || event.which;
if (keyCode === 13) {
// Yes, prevent form submission
event.preventDefault();
@@ -55,7 +54,7 @@ export default class HouseMeetingSearch {
this.api.search('').draw();
// Clear and refocus input
- this.input.value = "";
+ this.input.value = '';
this.input.focus();
} else {
// No, search and redraw the table
@@ -65,8 +64,10 @@ export default class HouseMeetingSearch {
_handleKeyAction() {
// Check the first visible table row's checkbox
- this.api.table().body().firstElementChild
- .querySelector("input[type=checkbox]").checked = true;
+ this.api
+ .table()
+ .body()
+ .firstElementChild.querySelector('input[type=checkbox]').checked = true;
}
/*
@@ -74,10 +75,13 @@ export default class HouseMeetingSearch {
*/
static _alreadySelectedFilter(settings, data, dataIndex) {
// Only apply the filter if we're currently searching
- if (typeof settings.oPreviousSearch.sSearch !== "undefined" &&
- settings.oPreviousSearch.sSearch !== "") {
- return !settings.aoData[dataIndex].anCells[1]
- .querySelector("input[type=checkbox]").checked;
+ if (
+ typeof settings.oPreviousSearch.sSearch !== 'undefined' &&
+ settings.oPreviousSearch.sSearch !== ''
+ ) {
+ return !settings.aoData[dataIndex].anCells[1].querySelector(
+ 'input[type=checkbox]',
+ ).checked;
}
return true;
diff --git a/frontend/javascript/modules/housingEdit.js b/frontend/javascript/modules/housingEdit.js
index cc8b5dbe..2d766136 100644
--- a/frontend/javascript/modules/housingEdit.js
+++ b/frontend/javascript/modules/housingEdit.js
@@ -1,9 +1,8 @@
-/* global fetch */
import 'whatwg-fetch';
-import Exception from "../exceptions/exception";
-import HousingException from "../exceptions/housingException";
-import FetchUtil from "../utils/fetchUtil";
-import MemberSelect from "./memberSelect";
+import Exception from '../exceptions/exception';
+import HousingException from '../exceptions/housingException';
+import FetchUtil from '../utils/fetchUtil';
+import MemberSelect from './memberSelect';
export default class EditHousing {
constructor(link) {
@@ -16,7 +15,7 @@ export default class EditHousing {
this.endpoints = {
roomDetails: '/housing/room/',
alterRoom: '/housing/update/',
- memberDetails: '/member/'
+ memberDetails: '/member/',
};
this.render();
@@ -26,7 +25,7 @@ export default class EditHousing {
this.link.addEventListener('click', e => {
e.preventDefault();
- if (this.rmnumber === "") {
+ if (this.rmnumber === '') {
this.data = {};
this.data.occupants = [];
this._renderModal();
@@ -34,16 +33,16 @@ export default class EditHousing {
fetch(this.endpoints.roomDetails + this.rmnumber, {
method: 'GET',
headers: {
- Accept: 'application/json'
+ Accept: 'application/json',
},
- credentials: 'same-origin'
+ credentials: 'same-origin',
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(data => {
- this.data = data;
- this._renderModal();
- });
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(data => {
+ this.data = data;
+ this._renderModal();
+ });
}
});
}
@@ -51,12 +50,15 @@ export default class EditHousing {
_renderModal() {
// Clone template modal
this.modal = this.modalTpl.cloneNode(true);
- this.modal.setAttribute('id',
- this.modal.getAttribute('id') + '-' + this.rmnumber);
+ this.modal.setAttribute(
+ 'id',
+ this.modal.getAttribute('id') + '-' + this.rmnumber,
+ );
// Submit button
- this.modal.querySelector('input[type="submit"]').addEventListener('click',
- e => {
+ this.modal
+ .querySelector('input[type="submit"]')
+ .addEventListener('click', e => {
e.preventDefault();
this._submitForm();
});
@@ -67,23 +69,23 @@ export default class EditHousing {
// Occupants
const occupantsInput = this.modal.querySelector('input[name="occupants"]');
- let occupantsStr = "";
+ let occupantsStr = '';
this.data.occupants.forEach(occupant => {
- occupantsStr += occupant + ",";
+ occupantsStr += occupant + ',';
});
occupantsInput.value = occupantsStr;
// Initialize selector control
- occupantsInput.dataset.src = "cm_members";
- new MemberSelect(occupantsInput); // eslint-disable-line no-new
+ occupantsInput.dataset.src = 'cm_members';
+ new MemberSelect(occupantsInput);
// Add to DOM and show, then remove on hide
document.getElementsByTagName('body')[0].appendChild(this.modal);
$(this.modal)
- .on('hidden.bs.modal', e => {
- document.getElementsByTagName('body')[0].removeChild(e.target);
- })
- .modal('show');
+ .on('hidden.bs.modal', e => {
+ document.getElementsByTagName('body')[0].removeChild(e.target);
+ })
+ .modal('show');
}
_submitForm() {
@@ -93,86 +95,93 @@ export default class EditHousing {
});
// Save details
- let payload = {};
- payload.occupants = this.modal.querySelector('input[name="occupants"]').value.split(','); // eslint-disable-line max-len
- let room = this.modal.querySelector('input[name="rmnumber"]').value;
+ const payload = {};
+ payload.occupants = this.modal
+ .querySelector('input[name="occupants"]')
+ .value.split(',');
+ const room = this.modal.querySelector('input[name="rmnumber"]').value;
- FetchUtil.post(this.endpoints.alterRoom + room, payload, {
- successText: 'Occupants have been updated.'
- }, () => {
- // Hide the modal.
- $(this.modal).modal('hide');
+ FetchUtil.post(
+ this.endpoints.alterRoom + room,
+ payload,
+ {
+ successText: 'Occupants have been updated.',
+ },
+ () => {
+ // Hide the modal.
+ $(this.modal).modal('hide');
- // Update the DOM to reflect the new occupants.
- var occupantList = document.getElementById(room);
- if (occupantList) {
- // The room already exists in the list, update it.
- occupantList.innerHTML = '';
- payload.occupants.forEach(occupant => {
- fetch(this.endpoints.memberDetails + occupant, {
- method: 'GET',
- headers: {
- Accept: 'application/json'
- },
- credentials: 'same-origin'
- })
+ // Update the DOM to reflect the new occupants.
+ const occupantList = document.getElementById(room);
+ if (occupantList) {
+ // The room already exists in the list, update it.
+ occupantList.innerHTML = '';
+ payload.occupants.forEach(occupant => {
+ fetch(this.endpoints.memberDetails + occupant, {
+ method: 'GET',
+ headers: {
+ Accept: 'application/json',
+ },
+ credentials: 'same-origin',
+ })
.then(FetchUtil.checkStatus)
.then(FetchUtil.parseJSON)
.then(data => {
- var newName = document.createElement("li");
+ const newName = document.createElement('li');
newName.appendChild(document.createTextNode(data.name));
- newName.setAttribute("class", "room-name");
+ newName.setAttribute('class', 'room-name');
occupantList.appendChild(newName);
});
- });
- } else {
- // The room is new and needs to be created.
- var roomTable = document.getElementById("housing-table");
- var newRoom = document.createElement("tr");
- var newRoomNbrCol = document.createElement("td");
- var newRoomNbr = document.createElement("h3");
- newRoomNbr.appendChild(document.createTextNode(room));
- newRoomNbr.setAttribute("class", "room-number");
- newRoomNbrCol.appendChild(newRoomNbr);
- newRoomNbrCol.setAttribute("class", "new-table-col");
- newRoom.appendChild(newRoomNbrCol);
- // Add new occupants to room.
- var newOccupantCol = document.createElement("td");
- var newOccupantList = document.createElement("ul");
- newOccupantList.setAttribute("id", room);
- newOccupantList.setAttribute("class", "occupant-list");
- payload.occupants.forEach(occupant => {
- fetch(this.endpoints.memberDetails + occupant, {
- method: 'GET',
- headers: {
- Accept: 'application/json'
- },
- credentials: 'same-origin'
- })
+ });
+ } else {
+ // The room is new and needs to be created.
+ const roomTable = document.getElementById('housing-table');
+ const newRoom = document.createElement('tr');
+ const newRoomNbrCol = document.createElement('td');
+ const newRoomNbr = document.createElement('h3');
+ newRoomNbr.appendChild(document.createTextNode(room));
+ newRoomNbr.setAttribute('class', 'room-number');
+ newRoomNbrCol.appendChild(newRoomNbr);
+ newRoomNbrCol.setAttribute('class', 'new-table-col');
+ newRoom.appendChild(newRoomNbrCol);
+ // Add new occupants to room.
+ const newOccupantCol = document.createElement('td');
+ const newOccupantList = document.createElement('ul');
+ newOccupantList.setAttribute('id', room);
+ newOccupantList.setAttribute('class', 'occupant-list');
+ payload.occupants.forEach(occupant => {
+ fetch(this.endpoints.memberDetails + occupant, {
+ method: 'GET',
+ headers: {
+ Accept: 'application/json',
+ },
+ credentials: 'same-origin',
+ })
.then(FetchUtil.checkStatus)
.then(FetchUtil.parseJSON)
.then(data => {
- var newName = document.createElement("li");
+ const newName = document.createElement('li');
newName.appendChild(document.createTextNode(data.name));
- newName.setAttribute("class", "room-name");
+ newName.setAttribute('class', 'room-name');
newOccupantList.appendChild(newName);
});
- });
- newOccupantCol.appendChild(newOccupantList);
- newOccupantCol.setAttribute("class", "new-table-col");
- newRoom.appendChild(newOccupantCol);
- // Add edit button for new room.
- var newEditCol = document.createElement("td");
- var editBtn = document.getElementById("rm-edit-btn");
- var newEditBtn = editBtn.cloneNode(true);
- newEditBtn.setAttribute("data-rmnumber", room);
- new EditHousing(newEditBtn); // eslint-disable-no-new
- newEditCol.appendChild(newEditBtn);
- newEditCol.setAttribute("class", "new-table-col");
- newRoom.appendChild(newEditCol);
- roomTable.appendChild(newRoom);
- }
- });
+ });
+ newOccupantCol.appendChild(newOccupantList);
+ newOccupantCol.setAttribute('class', 'new-table-col');
+ newRoom.appendChild(newOccupantCol);
+ // Add edit button for new room.
+ const newEditCol = document.createElement('td');
+ const editBtn = document.getElementById('rm-edit-btn');
+ const newEditBtn = editBtn.cloneNode(true);
+ newEditBtn.setAttribute('data-rmnumber', room);
+ new EditHousing(newEditBtn); // eslint-disable-no-new
+ newEditCol.appendChild(newEditBtn);
+ newEditCol.setAttribute('class', 'new-table-col');
+ newRoom.appendChild(newEditCol);
+ roomTable.appendChild(newRoom);
+ }
+ },
+ );
} else {
throw new Exception(HousingException.SUBMIT_BEFORE_RENDER);
}
diff --git a/frontend/javascript/modules/housingQueue.js b/frontend/javascript/modules/housingQueue.js
index f63d7cc6..fe941377 100644
--- a/frontend/javascript/modules/housingQueue.js
+++ b/frontend/javascript/modules/housingQueue.js
@@ -1,9 +1,8 @@
-/* global fetch */
import 'whatwg-fetch';
import Exception from '../exceptions/exception';
import FetchException from '../exceptions/fetchException';
import FetchUtil from '../utils/fetchUtil';
-import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js'; // eslint-disable-line max-len
+import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class HousingQueue {
constructor(queuePanel) {
@@ -28,8 +27,8 @@ export default class HousingQueue {
$(this.queueTable).off('init.dt');
// Retrieve the queue table's DataTables API object
- this.queueTableApi = $(this.queueTable).DataTable({ // eslint-disable-line new-cap
- retrieve: true
+ this.queueTableApi = $(this.queueTable).DataTable({
+ retrieve: true,
});
// Add custom filtering function
@@ -43,12 +42,16 @@ export default class HousingQueue {
const filterButton = this.queuePanel.querySelector('#queueFilterToggle');
filterButton.addEventListener('click', () => {
if (this.queueTable.dataset.show === 'all') {
- filterButton.innerHTML =
- filterButton.innerHTML.replace('Show Current Queue', 'Show All');
+ filterButton.innerHTML = filterButton.innerHTML.replace(
+ 'Show Current Queue',
+ 'Show All',
+ );
this.queueTable.dataset.show = 'current';
} else {
- filterButton.innerHTML =
- filterButton.innerHTML.replace('Show All', 'Show Current Queue');
+ filterButton.innerHTML = filterButton.innerHTML.replace(
+ 'Show All',
+ 'Show Current Queue',
+ );
this.queueTable.dataset.show = 'all';
}
@@ -57,49 +60,57 @@ export default class HousingQueue {
}
bindCheckboxes() {
- this.queuePanel.querySelectorAll('.col-in-queue > input[type="checkbox"]')
- .forEach(toggle => {
- toggle.addEventListener('click', () => {
- const row = toggle.parentNode.parentNode;
- this.updateInQueue(toggle.dataset.uid, toggle.checked, row);
- });
+ this.queuePanel
+ .querySelectorAll('.col-in-queue > input[type="checkbox"]')
+ .forEach(toggle => {
+ toggle.addEventListener('click', () => {
+ const row = toggle.parentNode.parentNode;
+ this.updateInQueue(toggle.dataset.uid, toggle.checked, row);
});
+ });
}
updateInQueue(uid, inQueue, row) {
- let payload = {
+ const payload = {
uid: uid,
- inQueue: inQueue
+ inQueue: inQueue,
};
fetch(this.endpoint, {
method: 'PUT',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
credentials: 'same-origin',
- body: JSON.stringify(payload)
+ body: JSON.stringify(payload),
})
.then(FetchUtil.checkStatus)
.then(FetchUtil.parseJSON)
.then(response => {
- if (response.hasOwnProperty('success') &&
- response.success === true) {
+ if (Object.hasOwn(response, 'success') && response.success === true) {
if (inQueue) {
row.classList.remove('disabled');
} else {
row.classList.add('disabled');
}
} else {
- sweetAlert('Uh oh...', 'We\'re having trouble updating ' +
- 'the queue right now. Please try again later.', 'error');
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble updating " +
+ 'the queue right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, response);
}
})
.catch(error => {
- sweetAlert('Uh oh...', 'We\'re having trouble updating ' +
- 'the queue right now. Please try again later.', 'error');
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble updating " +
+ 'the queue right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, error);
});
}
@@ -110,8 +121,9 @@ export default class HousingQueue {
static _inQueueFilter(settings, data, dataIndex) {
// Check to see if we should apply the filter
if (settings.nTable.dataset.show === 'current') {
- return settings.aoData[dataIndex].anCells[2]
- .querySelector('input[type=checkbox]').checked;
+ return settings.aoData[dataIndex].anCells[2].querySelector(
+ 'input[type=checkbox]',
+ ).checked;
}
return true;
diff --git a/frontend/javascript/modules/index.js b/frontend/javascript/modules/index.js
index f520603e..2f364bf6 100644
--- a/frontend/javascript/modules/index.js
+++ b/frontend/javascript/modules/index.js
@@ -8,7 +8,7 @@ for (let i = 0; i < moduleElements.length; i++) {
const el = moduleElements[i];
const name = el.getAttribute('data-module');
const Module = require(`./${name}`).default;
- new Module(el); // eslint-disable-line no-new
+ new Module(el);
}
/*
diff --git a/frontend/javascript/modules/introEvalsForm.js b/frontend/javascript/modules/introEvalsForm.js
index 7701b2a5..599654c0 100644
--- a/frontend/javascript/modules/introEvalsForm.js
+++ b/frontend/javascript/modules/introEvalsForm.js
@@ -1,4 +1,4 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class IntroEvalsForm {
constructor(form) {
@@ -8,22 +8,22 @@ export default class IntroEvalsForm {
}
render() {
- this.form.querySelector('input[type=submit]')
+ this.form
+ .querySelector('input[type=submit]')
.addEventListener('click', e => this._submitForm(e));
}
_submitForm(e) {
e.preventDefault();
- let payload = {
- socialEvents:
- this.form.querySelector('textarea[name=social_events]').value,
- comments:
- this.form.querySelector('textarea[name=comments]').value
+ const payload = {
+ socialEvents: this.form.querySelector('textarea[name=social_events]')
+ .value,
+ comments: this.form.querySelector('textarea[name=comments]').value,
};
FetchUtil.post(this.endpoint, payload, {
- successText: "Your social events and comments have been updated."
+ successText: 'Your social events and comments have been updated.',
});
}
}
diff --git a/frontend/javascript/modules/ipSearch.js b/frontend/javascript/modules/ipSearch.js
index 36103b90..70eade81 100644
--- a/frontend/javascript/modules/ipSearch.js
+++ b/frontend/javascript/modules/ipSearch.js
@@ -1,14 +1,19 @@
-import HouseMeetingSearch from "./hmSearch";
+import HouseMeetingSearch from './hmSearch';
export default class IntroductoryProjectSearch extends HouseMeetingSearch {
constructor(input) {
super(input);
HouseMeetingSearch._alreadySelectedFilter = (settings, data, dataIndex) => {
// Only apply the filter if we're currently searching
- if (typeof settings.oPreviousSearch.sSearch !== "undefined" &&
- settings.oPreviousSearch.sSearch !== "") {
- return !(settings.aoData[dataIndex].anCells[1]
- .querySelector('.dropdown-toggle').dataset.selected === "Passed");
+ if (
+ typeof settings.oPreviousSearch.sSearch !== 'undefined' &&
+ settings.oPreviousSearch.sSearch !== ''
+ ) {
+ return !(
+ settings.aoData[dataIndex].anCells[1].querySelector(
+ '.dropdown-toggle',
+ ).dataset.selected === 'Passed'
+ );
}
return true;
@@ -17,18 +22,20 @@ export default class IntroductoryProjectSearch extends HouseMeetingSearch {
_handleKeyAction() {
// Set the status of the first visible table row's selector to Passed
- let toggle = this.api.table().body().firstElementChild
- .querySelector(".dropdown-toggle");
+ const toggle = this.api
+ .table()
+ .body()
+ .firstElementChild.querySelector('.dropdown-toggle');
- ["btn-success", "btn-danger", "btn-warning"]
- .forEach(classToRemove =>
- toggle.classList.remove(classToRemove));
+ ['btn-success', 'btn-danger', 'btn-warning'].forEach(classToRemove =>
+ toggle.classList.remove(classToRemove),
+ );
const caret = document.createElement('span');
caret.classList.add('caret');
- toggle.text = "Passed ";
+ toggle.text = 'Passed ';
toggle.appendChild(caret);
- toggle.classList.add("btn-success");
- toggle.dataset.selected = "Passed";
+ toggle.classList.add('btn-success');
+ toggle.dataset.selected = 'Passed';
}
}
diff --git a/frontend/javascript/modules/majorProjectForm.js b/frontend/javascript/modules/majorProjectForm.js
index 36250529..ae9c4230 100644
--- a/frontend/javascript/modules/majorProjectForm.js
+++ b/frontend/javascript/modules/majorProjectForm.js
@@ -1,95 +1,115 @@
-import FetchUtil from "../utils/fetchUtil";
+import FetchUtil from '../utils/fetchUtil';
export default class MajorProjectForm {
-
-
- constructor(form) {
- this.form = form;
- this.endpoint = '/major_project/submit';
- this.tags_written = false;
- this.tag_keys = ["Enter", "Comma", "Tab"];
- this.render();
+ constructor(form) {
+ this.form = form;
+ this.endpoint = '/major_project/submit';
+ this.tags_written = false;
+ this.tag_keys = ['Enter', 'Comma', 'Tab'];
+ this.render();
+ }
+
+ render() {
+ this.form
+ .querySelector('input[type=submit]')
+ .addEventListener('click', e => this._submitForm(e));
+ this.form
+ .querySelector('input[id=skill-input]')
+ .addEventListener('focusout', e => this.onWriteSkill(e));
+ this.form
+ .querySelector('input[id=skill-input]')
+ .addEventListener('keypress', e => this.onKeyPress(e));
+ }
+
+ onKeyPress(e) {
+ if (this.tag_keys.includes(e.code)) {
+ e.preventDefault();
+ this.onWriteSkill(e);
}
+ return false;
+ }
- render() {
- this.form.querySelector('input[type=submit]')
- .addEventListener('click', e => this._submitForm(e));
- this.form.querySelector('input[id=skill-input]')
- .addEventListener('focusout', e => this.onWriteSkill(e));
- this.form.querySelector('input[id=skill-input]')
- .addEventListener('keypress', e => this.onKeyPress(e));
- }
+ onWriteSkill() {
+ const input = document.getElementById('skill-input');
+ if (!this.tags_written) {
+ this.tags_written = true;
- onKeyPress(e) {
- if (this.tag_keys.includes(e.code)) {
- e.preventDefault();
- this.onWriteSkill(e);
- }
- return false;
+ const firstTag = document.getElementsByClassName('skill-tag').item(0);
+ if (firstTag) firstTag.remove();
}
- onWriteSkill(e) {
- let input = document.getElementById("skill-input")
- if (!this.tags_written) {
- this.tags_written = true
-
- const firstTag = document.getElementsByClassName("skill-tag").item(0);
- if (firstTag) firstTag.remove();
- }
-
- let txt = input.value.replaceAll(/[^a-zA-Z0-9\+\-\.\# ]/g, ''); // allowed characters list
- if (txt) input.insertAdjacentHTML("beforebegin", '' + txt + '');
- let skills = this.form.getElementsByClassName("skill-tag")
- skills.item(skills.length - 1).addEventListener('click', e => this.onRemoveTag(e));
- input.value = "";
+ const txt = input.value.replaceAll(/[^a-zA-Z0-9+\-.# ]/g, ''); // allowed characters list
+ if (txt)
+ input.insertAdjacentHTML(
+ 'beforebegin',
+ '' + txt + '',
+ );
+ const skills = this.form.getElementsByClassName('skill-tag');
+ skills
+ .item(skills.length - 1)
+ .addEventListener('click', e => this.onRemoveTag(e));
+ input.value = '';
+ }
+
+ onRemoveTag(e) {
+ e.target.remove();
+ }
+
+ _submitForm(e) {
+ e.preventDefault();
+
+ const skills = [];
+
+ for (const tag of this.form.getElementsByClassName('skill-tag')) {
+ skills.push(tag.textContent);
}
- onRemoveTag(e) {
- e.target.remove();
+ let projectName = this.form.querySelector('input[name=name]').value;
+ let projectTldr = this.form.querySelector('input[name=tldr]').value;
+ let projectTimeSpent = this.form.querySelector(
+ 'textarea[name=time-commitment]',
+ ).value;
+ let projectDescription = this.form.querySelector(
+ 'textarea[name=description]',
+ ).value;
+ const projectLinks = this.form.querySelector('textarea[name=links]').value;
+
+ // For each field, if it is not empty, trim it.
+ if (projectName !== '') projectName = projectName.trim();
+ if (projectTldr !== '') projectTldr = projectTldr.trim();
+ if (projectTimeSpent !== '') projectTimeSpent = projectTimeSpent.trim();
+ if (projectDescription !== '')
+ projectDescription = projectDescription.trim();
+
+ if (
+ !projectName ||
+ !projectTldr ||
+ !projectTimeSpent ||
+ !projectDescription ||
+ skills.length === 0
+ ) {
+ alert(
+ 'Error: At least one required field is empty. \n\nProject Name, TLDR, Time Commitment, Description, and at least one skill are required.',
+ );
+ return;
}
- _submitForm(e) {
- e.preventDefault();
-
- let skills = [];
-
- for (const tag of this.form.getElementsByClassName('skill-tag')) {
- skills.push(tag.textContent);
- }
-
- let projectName = this.form.querySelector('input[name=name]').value;
- let projectTldr = this.form.querySelector('input[name=tldr]').value;
- let projectTimeSpent = this.form.querySelector('textarea[name=time-commitment]').value;
- let projectDescription = this.form.querySelector('textarea[name=description]').value;
- let projectLinks = this.form.querySelector('textarea[name=links]').value;
-
- // For each field, if it is not empty, trim it.
- if (projectName !== "") projectName = projectName.trim();
- if (projectTldr !== "") projectTldr = projectTldr.trim();
- if (projectTimeSpent !== "") projectTimeSpent = projectTimeSpent.trim();
- if (projectDescription !== "") projectDescription = projectDescription.trim();
-
- if (!projectName || !projectTldr || !projectTimeSpent || !projectDescription || skills.length === 0) {
- alert("Error: At least one required field is empty. \n\nProject Name, TLDR, Time Commitment, Description, and at least one skill are required.");
- return;
- }
-
- let payload = {
- projectName: projectName,
- projectTldr: projectTldr,
- projectTimeSpent: projectTimeSpent,
- projectSkills: skills,
- projectDescription: projectDescription,
- projectLinks: projectLinks
- };
-
-
- console.log(payload)
-
- FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "You will not be able to edit your " +
- "project once it has been submitted.",
- successText: "Your project has been submitted."
- });
- }
-}
\ No newline at end of file
+ const payload = {
+ projectName: projectName,
+ projectTldr: projectTldr,
+ projectTimeSpent: projectTimeSpent,
+ projectSkills: skills,
+ projectDescription: projectDescription,
+ projectLinks: projectLinks,
+ };
+
+ console.log(payload);
+
+ FetchUtil.postWithWarning(this.endpoint, payload, {
+ warningText:
+ 'You will not be able to edit your ' +
+ 'project once it has been submitted.',
+ successText: 'Your project has been submitted.',
+ });
+ }
+}
diff --git a/frontend/javascript/modules/majorProjectStatus.js b/frontend/javascript/modules/majorProjectStatus.js
index 7ca87ad3..bfebf152 100644
--- a/frontend/javascript/modules/majorProjectStatus.js
+++ b/frontend/javascript/modules/majorProjectStatus.js
@@ -1,9 +1,8 @@
-/* global fetch */
-import "whatwg-fetch";
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import FetchUtil from "../utils/fetchUtil";
-import sweetAlert from "../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js"; // eslint-disable-line max-len
+import 'whatwg-fetch';
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import FetchUtil from '../utils/fetchUtil';
+import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class MajorProjectStatus {
constructor(control) {
@@ -15,7 +14,7 @@ export default class MajorProjectStatus {
}
render() {
- if (this.control.tagName.toLowerCase() === "div") {
+ if (this.control.tagName.toLowerCase() === 'div') {
// Evals director dropdown
const options = this.control.querySelectorAll('[data-option]');
options.forEach(option => {
@@ -26,75 +25,87 @@ export default class MajorProjectStatus {
});
} else {
// Member self-delete button
- this.control.addEventListener('click',
- () => this._changeStatus('Delete'));
+ this.control.addEventListener('click', () =>
+ this._changeStatus('Delete'),
+ );
}
}
_changeStatus(option) {
- if (option === "Delete") {
- FetchUtil.fetchWithWarning(this.deleteEndpoint, {
- method: 'DELETE',
- warningText: 'This action cannot be undone.',
- successText: 'Major project deleted.'
- }, () => {
- let dashboardContainer = this.control.closest(".mp-container");
- if (dashboardContainer) {
- // Dashboard button
- $(dashboardContainer).hide();
- } else {
- // Major projects page button
- $(this.control.closest(".card")).fadeOut();
- }
- });
+ if (option === 'Delete') {
+ FetchUtil.fetchWithWarning(
+ this.deleteEndpoint,
+ {
+ method: 'DELETE',
+ warningText: 'This action cannot be undone.',
+ successText: 'Major project deleted.',
+ },
+ () => {
+ const dashboardContainer = this.control.closest('.mp-container');
+ if (dashboardContainer) {
+ // Dashboard button
+ $(dashboardContainer).hide();
+ } else {
+ // Major projects page button
+ $(this.control.closest('.card')).fadeOut();
+ }
+ },
+ );
} else {
- let payload = {
+ const payload = {
id: this.id,
- status: option
+ status: option,
};
fetch(this.endpoint, {
method: 'POST',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
- credentials: "same-origin",
- body: JSON.stringify(payload)
+ credentials: 'same-origin',
+ body: JSON.stringify(payload),
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (response.hasOwnProperty('success') &&
- response.success === true) {
- let toggle = this.control.querySelector('.dropdown-toggle');
- ["btn-success", "btn-danger", "btn-warning"]
- .forEach(classToRemove =>
- toggle.classList.remove(classToRemove));
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (Object.hasOwn(response, 'success') && response.success === true) {
+ const toggle = this.control.querySelector('.dropdown-toggle');
+ ['btn-success', 'btn-danger', 'btn-warning'].forEach(
+ classToRemove => toggle.classList.remove(classToRemove),
+ );
- const caret = document.createElement('span');
- caret.classList.add('caret');
- toggle.text = option + " ";
- toggle.appendChild(caret);
+ const caret = document.createElement('span');
+ caret.classList.add('caret');
+ toggle.text = option + ' ';
+ toggle.appendChild(caret);
- if (option === "Passed") {
- toggle.classList.add("btn-success");
- } else if (option === "Failed") {
- toggle.classList.add("btn-danger");
- } else {
- toggle.classList.add("btn-warning");
- }
+ if (option === 'Passed') {
+ toggle.classList.add('btn-success');
+ } else if (option === 'Failed') {
+ toggle.classList.add('btn-danger');
} else {
- sweetAlert("Uh oh...", "We're having trouble updating " +
- "this project right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
+ toggle.classList.add('btn-warning');
}
- })
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble updating " +
- "this project right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ } else {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble updating " +
+ 'this project right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble updating " +
+ 'this project right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
}
}
}
diff --git a/frontend/javascript/modules/masonry.js b/frontend/javascript/modules/masonry.js
index a4ded294..0e23be54 100644
--- a/frontend/javascript/modules/masonry.js
+++ b/frontend/javascript/modules/masonry.js
@@ -1,7 +1,7 @@
-import SimpleMasonry from "simple-masonry";
-import FreqencyMap from "../models/frequencyMap";
-import Exception from "../exceptions/exception";
-import MasonryException from "../exceptions/masonryException";
+import SimpleMasonry from 'simple-masonry';
+import FreqencyMap from '../models/frequencyMap';
+import Exception from '../exceptions/exception';
+import MasonryException from '../exceptions/masonryException';
export default class Masonry {
constructor(grid) {
@@ -9,7 +9,7 @@ export default class Masonry {
this.masonry = new SimpleMasonry({
masonryBox: this.grid,
- masonryColumn: this._findSharedSelector(this.grid)
+ masonryColumn: this._findSharedSelector(this.grid),
});
this.render();
@@ -20,7 +20,7 @@ export default class Masonry {
}
_findSharedSelector(parent) {
- let selectors = new FreqencyMap();
+ const selectors = new FreqencyMap();
let sharedSelector = null;
try {
@@ -30,12 +30,12 @@ export default class Masonry {
}
if (child.id) {
- selectors.increment("#" + child.id);
+ selectors.increment('#' + child.id);
}
if (child.className) {
child.className.split(/\s+/).forEach(className => {
- selectors.increment("." + className);
+ selectors.increment('.' + className);
});
}
});
@@ -44,7 +44,7 @@ export default class Masonry {
} catch (e) {
throw new Exception(
MasonryException.CANT_FIND_SHARED_SELECTOR,
- e.message
+ e.message,
);
}
diff --git a/frontend/javascript/modules/memberSelect.js b/frontend/javascript/modules/memberSelect.js
index 048fe2b4..f602544c 100644
--- a/frontend/javascript/modules/memberSelect.js
+++ b/frontend/javascript/modules/memberSelect.js
@@ -1,10 +1,9 @@
-/* global fetch */
-import "whatwg-fetch";
-import "@selectize/selectize";
-import FetchUtil from "../utils/fetchUtil";
-import Exception from "../exceptions/exception";
-import AttendanceException from "../exceptions/attendanceException";
-import FetchException from "../exceptions/fetchException";
+import 'whatwg-fetch';
+import '@selectize/selectize';
+import FetchUtil from '../utils/fetchUtil';
+import Exception from '../exceptions/exception';
+import AttendanceException from '../exceptions/attendanceException';
+import FetchException from '../exceptions/fetchException';
export default class MemberSelect {
constructor(element) {
@@ -15,10 +14,10 @@ export default class MemberSelect {
fetch('/attendance/' + this.dataSrc, {
method: 'GET',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
- credentials: 'same-origin'
+ credentials: 'same-origin',
})
.then(FetchUtil.checkResponse)
.then(FetchUtil.parseJSON)
@@ -44,7 +43,7 @@ export default class MemberSelect {
labelField: 'display',
searchField: 'display',
selectOnTab: true,
- options: this.members
+ options: this.members,
});
}
}
diff --git a/frontend/javascript/modules/newYear.js b/frontend/javascript/modules/newYear.js
index 3928449e..72424504 100644
--- a/frontend/javascript/modules/newYear.js
+++ b/frontend/javascript/modules/newYear.js
@@ -1,7 +1,7 @@
import FetchUtil from '../utils/fetchUtil';
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import sweetAlert from "../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js"; // eslint-disable-line max-len
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class NewYear {
constructor(link) {
@@ -12,7 +12,7 @@ export default class NewYear {
this.endpoints = {
housing: '/housing',
active: '/manage/active',
- current: '/manage/current/'
+ current: '/manage/current/',
};
this.render();
@@ -21,61 +21,84 @@ export default class NewYear {
this.link.addEventListener('click', e => {
e.preventDefault();
- if (this.step === "welcome") {
+ if (this.step === 'welcome') {
$('#new-welcome').fadeOut(() => {
- $("#new-clear").fadeIn();
+ $('#new-clear').fadeIn();
});
- } else if (this.step === "clear") {
- FetchUtil.fetchWithWarning(this.endpoints.active, {
- method: 'DELETE',
- warningText: "This will clear active members and room assignments!",
- successText: "Data successfully cleared."}, () => {
+ } else if (this.step === 'clear') {
+ FetchUtil.fetchWithWarning(
+ this.endpoints.active,
+ {
+ method: 'DELETE',
+ warningText: 'This will clear active members and room assignments!',
+ successText: 'Data successfully cleared.',
+ },
+ () => {
fetch(this.endpoints.housing, {
method: 'DELETE',
- credentials: "same-origin"
- })
- .then($('#new-clear').fadeOut(() => {
- $("#new-current").fadeIn();
+ credentials: 'same-origin',
})
- ).catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting that " +
- "action right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
- });
+ .then(
+ $('#new-clear').fadeOut(() => {
+ $('#new-current').fadeIn();
+ }),
+ )
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting that " +
+ 'action right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
+ },
+ );
} else if (this.uid) {
- if ($('#rem-' + this.uid).is(":visible")) {
+ if ($('#rem-' + this.uid).is(':visible')) {
fetch(this.endpoints.current + this.uid, {
method: 'DELETE',
- credentials: "same-origin"
- }).then(() => {
- $('#rem-' + this.uid).hide();
- $('#add-' + this.uid).show();
- var userRow = $('#row-' + this.uid)[0];
- userRow.style.setProperty("text-decoration", "line-through");
- }).catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting that " +
- "action right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ credentials: 'same-origin',
+ })
+ .then(() => {
+ $('#rem-' + this.uid).hide();
+ $('#add-' + this.uid).show();
+ const userRow = $('#row-' + this.uid)[0];
+ userRow.style.setProperty('text-decoration', 'line-through');
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting that " +
+ 'action right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
} else {
fetch(this.endpoints.current + this.uid, {
method: 'POST',
- credentials: "same-origin"
- }).then(() => {
- $('#add-' + this.uid).hide();
- $('#rem-' + this.uid).show();
- var lineRow = $('#row-' + this.uid)[0];
- lineRow.style.setProperty("text-decoration", "none");
- }).catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting that " +
- "action right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ credentials: 'same-origin',
+ })
+ .then(() => {
+ $('#add-' + this.uid).hide();
+ $('#rem-' + this.uid).show();
+ const lineRow = $('#row-' + this.uid)[0];
+ lineRow.style.setProperty('text-decoration', 'none');
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting that " +
+ 'action right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
}
- } else if (this.step === "current") {
- $('#new-current').fadeOut(function() {
- $("#new-housing").fadeIn();
+ } else if (this.step === 'current') {
+ $('#new-current').fadeOut(() => {
+ $('#new-housing').fadeIn();
});
}
});
diff --git a/frontend/javascript/modules/presentation.js b/frontend/javascript/modules/presentation.js
index 7bac5e36..c95fed07 100644
--- a/frontend/javascript/modules/presentation.js
+++ b/frontend/javascript/modules/presentation.js
@@ -3,7 +3,7 @@ import reveal from 'reveal.js';
export default class Presentation {
constructor(element) {
this.element = element;
- if (location.pathname.split('/')[2] === "intro") {
+ if (location.pathname.split('/')[2] === 'intro') {
this.endpoint = '/slideshow/intro/review';
} else {
this.endpoint = '/slideshow/spring/review';
@@ -17,55 +17,67 @@ export default class Presentation {
const nameHeight = name.height();
const nameLineheight = parseFloat(name.css('line-height'));
const nameRows = nameHeight / nameLineheight; // get # lines of name elem
- if (nameRows > 1) { // if name wraps to two lines
+ if (nameRows > 1) {
+ // if name wraps to two lines
name.css('font-size', '1.5em');
}
$('.reveal button.pass').click(e => {
- let uid = e.target.parentElement.dataset.uid; // Ex: ID of 'pass-ram' => 'ram'
- let cn = e.target.parentElement.dataset.cn;
+ const uid = e.target.parentElement.dataset.uid; // Ex: ID of 'pass-ram' => 'ram'
+ const cn = e.target.parentElement.dataset.cn;
e.preventDefault();
- let payload = {
+ const payload = {
uid: uid,
- status: "Passed"
+ status: 'Passed',
};
- FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "Are you sure you want to pass " + cn + "?",
- successText: cn + " has been marked as passed."
- }, () => {
- $(e.target).text("Passed").off("click").addClass("disabled");
- $(e.target).next().hide();
- reveal.right();
- });
+ FetchUtil.postWithWarning(
+ this.endpoint,
+ payload,
+ {
+ warningText: 'Are you sure you want to pass ' + cn + '?',
+ successText: cn + ' has been marked as passed.',
+ },
+ () => {
+ $(e.target).text('Passed').off('click').addClass('disabled');
+ $(e.target).next().hide();
+ reveal.right();
+ },
+ );
});
$('.reveal button.fail').click(e => {
- let uid = e.target.parentElement.dataset.uid; // Ex: ID of 'pass-ram' => 'ram'
- let cn = e.target.parentElement.dataset.cn;
- $(e.target).prev()
+ const uid = e.target.parentElement.dataset.uid; // Ex: ID of 'pass-ram' => 'ram'
+ const cn = e.target.parentElement.dataset.cn;
+ $(e.target)
+ .prev()
.removeClass('pass')
.addClass('conditional')
.text('Conditional')
- .attr("id", "conditional-" + uid)
+ .attr('id', 'conditional-' + uid)
.off('click')
- .click(e => {
+ .click(() => {
$('#createConditional').modal();
$('#createConditional input[type="text"]').val('');
$('#createConditional input[name="uid"]').val(uid);
});
$(e.target).click(e => {
e.preventDefault();
- let payload = {
+ const payload = {
uid: uid,
- status: "Failed"
+ status: 'Failed',
};
- FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "Are you sure you want to fail " + cn + "?",
- successText: cn + " has been marked as failed."
- }, () => {
- $(e.target).text("Failed").off("click").addClass("disabled");
- $(e.target).prev().hide();
- reveal.right();
- });
+ FetchUtil.postWithWarning(
+ this.endpoint,
+ payload,
+ {
+ warningText: 'Are you sure you want to fail ' + cn + '?',
+ successText: cn + ' has been marked as failed.',
+ },
+ () => {
+ $(e.target).text('Failed').off('click').addClass('disabled');
+ $(e.target).prev().hide();
+ reveal.right();
+ },
+ );
});
});
}
diff --git a/frontend/javascript/modules/siteSettings.js b/frontend/javascript/modules/siteSettings.js
index 15a515e0..70138ffe 100644
--- a/frontend/javascript/modules/siteSettings.js
+++ b/frontend/javascript/modules/siteSettings.js
@@ -1,9 +1,8 @@
-/* global fetch */
-import "whatwg-fetch";
-import FetchUtil from "../utils/fetchUtil";
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import sweetAlert from "../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js"; // eslint-disable-line max-len
+import 'whatwg-fetch';
+import FetchUtil from '../utils/fetchUtil';
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import sweetAlert from '../../../node_modules/bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class SiteSettings {
constructor(toggle) {
@@ -22,31 +21,39 @@ export default class SiteSettings {
}
_updateSetting() {
- let payload = {};
+ const payload = {};
payload[this.setting] = this.toggle.checked;
fetch(this.endpoint, {
method: 'PUT',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
- credentials: "same-origin",
- body: JSON.stringify(payload)
+ credentials: 'same-origin',
+ body: JSON.stringify(payload),
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (!response.hasOwnProperty('success') || !response.success) {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
- }
- })
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (!Object.hasOwn(response, 'success') || !response.success) {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
}
}
diff --git a/frontend/javascript/modules/table.js b/frontend/javascript/modules/table.js
index 7cdae7f4..ae084b66 100644
--- a/frontend/javascript/modules/table.js
+++ b/frontend/javascript/modules/table.js
@@ -1,8 +1,7 @@
-/* global $ */
-import DataTable from "datatables.net-bs";
+import DataTable from 'datatables.net-bs';
export default class Table {
constructor(table) {
- this.table = new DataTable(table)
+ this.table = new DataTable(table);
}
}
diff --git a/frontend/javascript/utils/fetchUtil.js b/frontend/javascript/utils/fetchUtil.js
index 354a60d1..3e9f1d60 100644
--- a/frontend/javascript/utils/fetchUtil.js
+++ b/frontend/javascript/utils/fetchUtil.js
@@ -1,17 +1,20 @@
-/* global fetch */
-import "whatwg-fetch";
-import Exception from "../exceptions/exception";
-import FetchException from "../exceptions/fetchException";
-import sweetAlert from "bootstrap-sweetalert/dev/sweetalert.es6.js";
+import 'whatwg-fetch';
+import Exception from '../exceptions/exception';
+import FetchException from '../exceptions/fetchException';
+import sweetAlert from 'bootstrap-sweetalert/dev/sweetalert.es6.js';
export default class FetchUtil {
static checkStatus(response) {
if (response.status < 200 || response.status > 300) {
- sweetAlert("Uh oh...", "We're having trouble submitting this form" +
- "right now. Please try again later.", "error");
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this form" +
+ 'right now. Please try again later.',
+ 'error',
+ );
throw new Exception(
FetchException.REQUEST_FAILED,
- "received response code " + response.status
+ 'received response code ' + response.status,
);
}
@@ -26,171 +29,225 @@ export default class FetchUtil {
fetch(endpoint, {
method: 'POST',
headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
},
- credentials: "same-origin",
- body: JSON.stringify(payload)
+ credentials: 'same-origin',
+ body: JSON.stringify(payload),
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (response.hasOwnProperty('success') && response.success === true) {
- sweetAlert({
- title: "Success!",
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (Object.hasOwn(response, 'success') && response.success === true) {
+ sweetAlert(
+ {
+ title: 'Success!',
text: settings.successText,
- type: "success",
- confirmButtonText: "OK"
- }, () => {
- if (typeof callback === "function") {
+ type: 'success',
+ confirmButtonText: 'OK',
+ },
+ () => {
+ if (typeof callback === 'function') {
callback();
} else {
window.location.reload();
}
- });
- } else {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
- }
- })
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this form " +
- "right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ },
+ );
+ } else {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this form " +
+ 'right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
}
static postWithWarning(endpoint, payload, settings, callback) {
- sweetAlert({
- title: "Are you sure?",
- text: settings.warningText,
- type: "warning",
- showCancelButton: true,
- closeOnConfirm: false,
- showLoaderOnConfirm: true
- }, () => {
- fetch(endpoint, {
- method: 'POST',
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- },
- credentials: "same-origin",
- body: JSON.stringify(payload)
- })
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (response.hasOwnProperty('success') && response.success === true) {
- sweetAlert({
- title: "Success!",
- text: settings.successText,
- type: "success",
- confirmButtonText: "OK"
- }, () => {
- if (typeof callback === "function") {
- callback();
- } else {
- window.location.reload();
- }
- });
- } else {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
- }
+ sweetAlert(
+ {
+ title: 'Are you sure?',
+ text: settings.warningText,
+ type: 'warning',
+ showCancelButton: true,
+ closeOnConfirm: false,
+ showLoaderOnConfirm: true,
+ },
+ () => {
+ fetch(endpoint, {
+ method: 'POST',
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/json',
+ },
+ credentials: 'same-origin',
+ body: JSON.stringify(payload),
})
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this form " +
- "right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
- });
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (
+ Object.hasOwn(response, 'success') &&
+ response.success === true
+ ) {
+ sweetAlert(
+ {
+ title: 'Success!',
+ text: settings.successText,
+ type: 'success',
+ confirmButtonText: 'OK',
+ },
+ () => {
+ if (typeof callback === 'function') {
+ callback();
+ } else {
+ window.location.reload();
+ }
+ },
+ );
+ } else {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this form " +
+ 'right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
+ },
+ );
}
static fetch(endpoint, settings, callback) {
fetch(endpoint, {
method: settings.method,
headers: {
- Accept: 'application/json'
+ Accept: 'application/json',
},
- credentials: "same-origin"
+ credentials: 'same-origin',
})
- .then(FetchUtil.checkStatus)
- .then(FetchUtil.parseJSON)
- .then(response => {
- if (response.hasOwnProperty('success') &&
- response.success === true) {
- sweetAlert({
- title: "Success!",
+ .then(FetchUtil.checkStatus)
+ .then(FetchUtil.parseJSON)
+ .then(response => {
+ if (Object.hasOwn(response, 'success') && response.success === true) {
+ sweetAlert(
+ {
+ title: 'Success!',
text: settings.successText,
- type: "success",
- confirmButtonText: "OK"
- }, () => {
- if (typeof callback === "function") {
+ type: 'success',
+ confirmButtonText: 'OK',
+ },
+ () => {
+ if (typeof callback === 'function') {
callback();
} else {
window.location.reload();
}
- });
- } else {
- sweetAlert("Uh oh...", "We're having trouble submitting " +
- "this form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, response);
- }
- })
- .catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
- throw new Exception(FetchException.REQUEST_FAILED, error);
- });
+ },
+ );
+ } else {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting " +
+ 'this form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, response);
+ }
+ })
+ .catch(error => {
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
+ throw new Exception(FetchException.REQUEST_FAILED, error);
+ });
}
static fetchWithWarning(endpoint, settings, callback) {
- sweetAlert({
- title: "Are you sure?",
- text: settings.warningText,
- type: "warning",
- showCancelButton: true,
- closeOnConfirm: false,
- showLoaderOnConfirm: true
- }, () => {
- fetch(endpoint, {
- method: settings.method,
- headers: {
- Accept: 'application/json'
- },
- credentials: "same-origin"
- })
+ sweetAlert(
+ {
+ title: 'Are you sure?',
+ text: settings.warningText,
+ type: 'warning',
+ showCancelButton: true,
+ closeOnConfirm: false,
+ showLoaderOnConfirm: true,
+ },
+ () => {
+ fetch(endpoint, {
+ method: settings.method,
+ headers: {
+ Accept: 'application/json',
+ },
+ credentials: 'same-origin',
+ })
.then(FetchUtil.checkStatus)
.then(FetchUtil.parseJSON)
.then(response => {
- if (response.hasOwnProperty('success') &&
- response.success === true) {
- sweetAlert({
- title: "Success!",
- text: settings.successText,
- type: "success",
- confirmButtonText: "OK"
- }, () => {
- if (typeof callback === "function") {
- callback();
- } else {
- window.location.reload();
- }
- });
+ if (
+ Object.hasOwn(response, 'success') &&
+ response.success === true
+ ) {
+ sweetAlert(
+ {
+ title: 'Success!',
+ text: settings.successText,
+ type: 'success',
+ confirmButtonText: 'OK',
+ },
+ () => {
+ if (typeof callback === 'function') {
+ callback();
+ } else {
+ window.location.reload();
+ }
+ },
+ );
} else {
- sweetAlert("Uh oh...", "We're having trouble submitting " +
- "this form right now. Please try again later.", "error");
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting " +
+ 'this form right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, response);
}
})
.catch(error => {
- sweetAlert("Uh oh...", "We're having trouble submitting this " +
- "form right now. Please try again later.", "error");
+ sweetAlert(
+ 'Uh oh...',
+ "We're having trouble submitting this " +
+ 'form right now. Please try again later.',
+ 'error',
+ );
throw new Exception(FetchException.REQUEST_FAILED, error);
});
- });
+ },
+ );
}
}
diff --git a/frontend/javascript/utils/memberUtil.js b/frontend/javascript/utils/memberUtil.js
index 57ab41c5..57f563f6 100644
--- a/frontend/javascript/utils/memberUtil.js
+++ b/frontend/javascript/utils/memberUtil.js
@@ -1,10 +1,10 @@
-import _ from "lodash";
+import _ from 'lodash';
export default class MemberUtil {
static splitFreshmenUpperclassmen(memberIds) {
- let result = {
+ const result = {
freshmen: [],
- upperclassmen: []
+ upperclassmen: [],
};
memberIds.forEach(memberId => {
diff --git a/package-lock.json b/package-lock.json
index 9428be90..88c1d20e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,8 +33,9 @@
"copy-webpack-plugin": "^14.0.0",
"css-loader": "^7.1.4",
"dotenv": "^18.0.5",
- "eslint-config-google": "^0.14.0",
+ "eslint": "^10.12.0",
"expose-loader": "^5.0.1",
+ "gts": "^7.0.0",
"imports-loader": "^5.0.0",
"sass": "^1.93.3",
"sass-loader": "^16.0.7",
@@ -85,6 +86,7 @@
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -117,19 +119,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@babel/core/node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -1648,6 +1637,30 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@cacheable/memory": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz",
+ "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/utils": "^2.5.0",
+ "@keyv/bigmap": "^1.3.1",
+ "hookified": "^1.15.1",
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@cacheable/utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz",
+ "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.5.1",
+ "keyv": "^5.6.0"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz",
@@ -1659,12 +1672,11 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
- "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
@@ -1684,7 +1696,6 @@
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -1698,71 +1709,66 @@
"integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "version": "0.23.5",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz",
+ "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
- "@eslint/object-schema": "^2.1.7",
+ "@eslint/object-schema": "^3.0.5",
"debug": "^4.3.1",
- "minimatch": "^3.1.2"
+ "minimatch": "^10.2.4"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
- "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz",
+ "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
- "@eslint/core": "^0.17.0"
+ "@eslint/core": "^1.2.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/core": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
- "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz",
+ "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
- "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz",
+ "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "ajv": "^6.12.4",
+ "ajv": "^6.14.0",
"debug": "^4.3.2",
"espree": "^10.0.1",
"globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
+ "js-yaml": "^4.3.2",
+ "minimatch": "^3.1.5",
"strip-json-comments": "^3.1.1"
},
"engines": {
@@ -1772,13 +1778,74 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@eslint/js": {
- "version": "9.39.1",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz",
- "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==",
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -1787,29 +1854,27 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
- "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz",
+ "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
- "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz",
+ "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
- "@eslint/core": "^0.17.0",
+ "@eslint/core": "^1.2.1",
"levn": "^0.4.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
}
},
"node_modules/@humanfs/core": {
@@ -1818,7 +1883,6 @@
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=18.18.0"
}
@@ -1829,7 +1893,6 @@
"integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@humanfs/core": "^0.19.1",
"@humanwhocodes/retry": "^0.4.0"
@@ -1844,7 +1907,6 @@
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=12.22"
},
@@ -1859,7 +1921,6 @@
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=18.18"
},
@@ -1929,6 +1990,30 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@keyv/bigmap": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+ "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hashery": "^1.4.0",
+ "hookified": "^1.15.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "keyv": "^5.6.0"
+ }
+ },
+ "node_modules/@keyv/serialize": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+ "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@parcel/watcher": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
@@ -2307,6 +2392,19 @@
"node": ">=8.0"
}
},
+ "node_modules/@pkgr/core": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz",
+ "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
"node_modules/@selectize/selectize": {
"version": "0.15.2",
"resolved": "https://registry.npmjs.org/@selectize/selectize/-/selectize-0.15.2.tgz",
@@ -2403,6 +2501,7 @@
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@@ -2419,6 +2518,13 @@
"@types/estree": "*"
}
},
+ "node_modules/@types/esrecurse": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
+ "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
@@ -2433,119 +2539,364 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/node": {
- "version": "25.3.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
- "integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
+ "node_modules/@types/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.18.0"
- }
+ "license": "MIT"
},
- "node_modules/@webassemblyjs/ast": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
- "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "node_modules/@types/node": {
+ "version": "22.20.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.5.tgz",
+ "integrity": "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@webassemblyjs/helper-numbers": "1.13.2",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ "undici-types": "~6.21.0"
}
},
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
- "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
- "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
- "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
"dev": true,
"license": "MIT"
},
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
- "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.71.0.tgz",
+ "integrity": "sha512-pqcS9c1HxZTHt7End4nXqd0s5lJrrFzrgCkKFJrsbUnaL6M3+6oBFZaslg6Gjsl3argl2DDRFROnXARaZ2e4Nw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.13.2",
- "@webassemblyjs/helper-api-error": "1.13.2",
- "@xtuc/long": "4.2.2"
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/type-utils": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
+ "ignore": "^7.0.5",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.71.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
- "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz",
+ "integrity": "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
},
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
- "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.71.0.tgz",
+ "integrity": "sha512-CG4nPk1f2zc8yw4pALqHsFYH2hdo+h1T9daSp21+Hnxi9LOE3GT9hAfTKJCBXVNM2GmYs1eMEP615wPoeOgk3A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/wasm-gen": "1.14.1"
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
- "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.71.0.tgz",
+ "integrity": "sha512-aABjw5rjBacYONVPaPiWOCjJu0vEF4a25iQuodlmQYL1trtLZ0X/y+2Vzl3BKI1odM4LnwLE1oUDXYp1wzx1TQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@xtuc/ieee754": "^1.2.0"
+ "@typescript-eslint/tsconfig-utils": "^8.71.0",
+ "@typescript-eslint/types": "^8.71.0",
+ "debug": "^4.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
}
},
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
- "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.71.0.tgz",
+ "integrity": "sha512-gWF0BhUcnjZxSpLE8ngS/59n2SB0J3YqRxvX1+2aoRJk9hNtHSLOV+TcarFiOr5ipXm3yc1QrI4c9YZc8zyCxw==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
"dependencies": {
- "@xtuc/long": "4.2.2"
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
- "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
- "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.71.0.tgz",
+ "integrity": "sha512-Z1UlWHADEK2Mlb9NpWfDeSjqoZ5EyrOv4R3eQpbkzqn/EwaIdOpXXupEA1+0ZIOSJSZZDBHG0BrQyN8zUG6Pwg==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "@webassemblyjs/ast": "1.14.1",
- "@webassemblyjs/helper-buffer": "1.14.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
- "@webassemblyjs/helper-wasm-section": "1.14.1",
- "@webassemblyjs/wasm-gen": "1.14.1",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.71.0.tgz",
+ "integrity": "sha512-i8uO1qbdxeKgRnS5sCRt6On3/nfo2d2DwQe3Yvjx543zLy7r8ySqRuPPiIIXAhS03U0v5NfAFx+rUgxFzKKwNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.71.0.tgz",
+ "integrity": "sha512-cJ4OoxPGWvFnBTnSZyaU+qJzGTqPTGJY+gDchj6cRyLRdmIdt4rcsE4twj+zPfrNiWuVi38wijHzShL++Z9atQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.71.0.tgz",
+ "integrity": "sha512-PEEF4G5sLLWAS5BpPrUvms4ySZkiBQQZM4z+3ReI46axK5Vqr/vXBQatJQIZZOYdGyPUAKTtsrWzpqKuU+3DEw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.71.0",
+ "@typescript-eslint/tsconfig-utils": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/visitor-keys": "8.71.0",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.71.0.tgz",
+ "integrity": "sha512-pKR/tEMVrXZG23UFKUn5BQf3zfmfk7KQceI2cGzywZ5nxM5Eu3hEJU1utjWzydtzBbcJAQhHN8iPCxobHpPcZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.71.0",
+ "@typescript-eslint/types": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.71.0.tgz",
+ "integrity": "sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.71.0",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-opt": "1.14.1",
"@webassemblyjs/wasm-parser": "1.14.1",
"@webassemblyjs/wast-printer": "1.14.1"
@@ -2671,6 +3022,7 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2684,18 +3036,16 @@
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -2747,16 +3097,66 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
"license": "MIT",
- "peer": true
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
- "license": "Python-2.0",
- "peer": true
+ "license": "Python-2.0"
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/babel-loader": {
"version": "10.0.0",
@@ -2845,11 +3245,14 @@
}
},
"node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
"dev": true,
- "peer": true
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
},
"node_modules/baseline-browser-mapping": {
"version": "2.10.0",
@@ -2940,14 +3343,16 @@
}
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
+ "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"dev": true,
- "peer": true,
+ "license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
}
},
"node_modules/browserslist": {
@@ -2970,6 +3375,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -2991,17 +3397,58 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cacheable": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz",
+ "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cacheable/memory": "^2.2.0",
+ "@cacheable/utils": "^2.5.0",
+ "hookified": "^1.15.0",
+ "keyv": "^5.6.0",
+ "qified": "^0.10.1"
+ }
+ },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=6"
}
},
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
@@ -3023,6 +3470,43 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/chrome-trace-event": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
@@ -3033,6 +3517,29 @@
"node": ">=6.0"
}
},
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -3054,7 +3561,6 @@
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -3067,8 +3573,7 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.20",
@@ -3087,9 +3592,9 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true,
- "peer": true
+ "license": "MIT"
},
"node_modules/copy-webpack-plugin": {
"version": "14.0.0",
@@ -3249,13 +3754,49 @@
}
}
},
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decamelize-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decamelize-keys/node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/detect-libc": {
"version": "1.0.3",
@@ -3300,6 +3841,13 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/enhanced-resolve": {
"version": "5.20.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz",
@@ -3333,6 +3881,16 @@
"node": ">=4"
}
},
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"node_modules/es-module-lexer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
@@ -3350,46 +3908,55 @@
"node": ">=6"
}
},
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/eslint": {
- "version": "9.39.1",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz",
- "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
+ "version": "10.12.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.12.0.tgz",
+ "integrity": "sha512-npHjrHb2o4ehH3mE+YuxABR+0gyb0aVWCIolgJDArwCiHEIsonBm3ZKjel5b0U5+a+MbEvIyRCGCzD3eKKK2NA==",
"dev": true,
"license": "MIT",
"peer": true,
+ "workspaces": [
+ "packages/*"
+ ],
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
- "@eslint/config-helpers": "^0.4.2",
- "@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.1",
- "@eslint/plugin-kit": "^0.4.1",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@eslint/config-array": "^0.23.5",
+ "@eslint/config-helpers": "^0.7.0",
+ "@eslint/core": "^1.2.1",
+ "@eslint/plugin-kit": "^0.7.3",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
+ "ajv": "^6.14.0",
"cross-spawn": "^7.0.6",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
+ "eslint-scope": "^9.1.2",
+ "eslint-visitor-keys": "^5.0.1",
+ "espree": "^11.2.0",
+ "esquery": "^1.7.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
+ "file-entry-cache": "11.1.5 || >11.1.6 <12",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
+ "minimatch": "^10.2.5",
"natural-compare": "^1.4.0",
"optionator": "^0.9.3"
},
@@ -3397,7 +3964,7 @@
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://eslint.org/donate"
@@ -3411,80 +3978,157 @@
}
}
},
- "node_modules/eslint-config-google": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
- "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
+ "node_modules/eslint-compat-utils": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
"dev": true,
- "license": "Apache-2.0",
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.4"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=12"
},
"peerDependencies": {
- "eslint": ">=5.16.0"
+ "eslint": ">=6.0.0"
}
},
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "node_modules/eslint-config-prettier": {
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
- "license": "BSD-2-Clause",
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-es-x": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/ota-meshi",
+ "https://opencollective.com/eslint"
+ ],
+ "license": "MIT",
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.11.0",
+ "eslint-compat-utils": "^0.5.1"
},
"engines": {
- "node": ">=8.0.0"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "node_modules/eslint-plugin-n": {
+ "version": "17.24.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz",
+ "integrity": "sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==",
"dev": true,
- "license": "Apache-2.0",
- "peer": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.5.0",
+ "enhanced-resolve": "^5.17.1",
+ "eslint-plugin-es-x": "^7.8.0",
+ "get-tsconfig": "^4.8.1",
+ "globals": "^15.11.0",
+ "globrex": "^0.1.2",
+ "ignore": "^5.3.2",
+ "semver": "^7.6.3",
+ "ts-declaration-location": "^1.0.6"
+ },
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.23.0"
}
},
- "node_modules/eslint/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/eslint-plugin-n/node_modules/globals": {
+ "version": "15.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
+ "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "5.5.6",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz",
+ "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "prettier-linter-helpers": "^1.0.1",
+ "synckit": "^0.11.13"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
}
},
- "node_modules/eslint/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
- "license": "MIT",
- "peer": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/escape-string-regexp": {
@@ -3493,7 +4137,6 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=10"
},
@@ -3502,18 +4145,19 @@
}
},
"node_modules/eslint/node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
+ "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
+ "@types/esrecurse": "^4.3.1",
+ "@types/estree": "^1.0.8",
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -3525,7 +4169,6 @@
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -3536,7 +4179,6 @@
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -3548,46 +4190,30 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"license": "BSD-3-Clause",
- "peer": true,
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -3601,7 +4227,6 @@
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -3655,6 +4280,30 @@
"node": ">=0.8.x"
}
},
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
"node_modules/expose-loader": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.1.tgz",
@@ -3672,6 +4321,21 @@
"webpack": "^5.0.0"
}
},
+ "node_modules/external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3679,21 +4343,26 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/fast-uri": {
"version": "3.1.0",
@@ -3722,18 +4391,30 @@
"node": ">= 4.9.1"
}
},
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
- "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "flat-cache": "^4.0.0"
+ "escape-string-regexp": "^1.0.5"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "11.1.5",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz",
+ "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^6.1.23"
}
},
"node_modules/find-up": {
@@ -3803,27 +4484,23 @@
}
},
"node_modules/flat-cache": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
- "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "version": "6.1.23",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz",
+ "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
+ "cacheable": "^2.5.0",
+ "flatted": "^3.4.2",
+ "hookified": "^1.15.0"
}
},
"node_modules/flatted": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
- "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
"dev": true,
- "license": "ISC",
- "peer": true
+ "license": "ISC"
},
"node_modules/function-bind": {
"version": "1.1.2",
@@ -3845,6 +4522,32 @@
"node": ">=6.9.0"
}
},
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.14.3",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz",
+ "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -3871,7 +4574,6 @@
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -3879,6 +4581,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -3886,6 +4595,332 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/gts": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/gts/-/gts-7.0.0.tgz",
+ "integrity": "sha512-5Sb73zpklh7GyYRd14QUwa6+4n99b7JqECc+bS2fRYlSK40SXu7Po3//q4jBAP/CQwR+VbUPiOLxJf5zpp4Ajw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/js": "^9.37.0",
+ "@typescript-eslint/eslint-plugin": "^8.46.1",
+ "@typescript-eslint/parser": "^8.46.1",
+ "chalk": "^4.1.2",
+ "eslint": "^9.37.0",
+ "eslint-config-prettier": "^10.1.8",
+ "eslint-plugin-n": "^17.23.1",
+ "eslint-plugin-prettier": "^5.5.4",
+ "execa": "^5.0.0",
+ "inquirer": "^7.3.3",
+ "json5": "^2.1.3",
+ "meow": "^9.0.0",
+ "ncp": "^2.0.0",
+ "prettier": "^3.6.2",
+ "typescript-eslint": "^8.46.1",
+ "write-file-atomic": "^6.0.0"
+ },
+ "bin": {
+ "gts": "build/src/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "typescript": ">=5"
+ }
+ },
+ "node_modules/gts/node_modules/@eslint/config-array": {
+ "version": "0.21.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.5"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/gts/node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/gts/node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/gts/node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/gts/node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/gts/node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gts/node_modules/brace-expansion": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz",
+ "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/gts/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gts/node_modules/eslint": {
+ "version": "9.39.5",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.2",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.6",
+ "@eslint/js": "9.39.5",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.14.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.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",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.5",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gts/node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/gts/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/gts/node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/gts/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/gts/node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/gts/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gts/node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/gts/node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/gts/node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hard-rejection": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
+ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3896,6 +4931,19 @@
"node": ">=8"
}
},
+ "node_modules/hashery": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+ "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.15.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -3909,6 +4957,49 @@
"node": ">= 0.4"
}
},
+ "node_modules/hookified": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+ "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/icss-utils": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
@@ -3928,7 +5019,6 @@
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">= 4"
}
@@ -3939,7 +5029,6 @@
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -3998,11 +5087,45 @@
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.8.19"
}
},
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/interpret": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
@@ -4013,6 +5136,13 @@
"node": ">=10.13.0"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/is-core-module": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
@@ -4039,6 +5169,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -4052,6 +5192,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -4065,6 +5215,19 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4101,7 +5264,8 @@
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/jquery-ui": {
"version": "1.14.1",
@@ -4114,12 +5278,21 @@
}
},
"node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
"license": "MIT",
- "peer": true,
"dependencies": {
"argparse": "^2.0.1"
},
@@ -4145,8 +5318,7 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
@@ -4167,18 +5339,30 @@
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
"license": "MIT",
- "peer": true
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
"node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+ "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "json-buffer": "3.0.1"
+ "@keyv/serialize": "^1.1.1"
}
},
"node_modules/kind-of": {
@@ -4197,7 +5381,6 @@
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -4206,6 +5389,13 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/loader-runner": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
@@ -4254,8 +5444,80 @@
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lru-cache/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/map-obj": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
+ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "dev": true,
"license": "MIT",
- "peer": true
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
+ "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize": "^1.2.0",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/merge-stream": {
"version": "2.0.0",
@@ -4285,18 +5547,55 @@
"node": ">= 0.6"
}
},
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/min-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
+ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/minimatch": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
- "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "version": "10.2.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
"dev": true,
- "license": "ISC",
- "peer": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^5.0.8"
},
"engines": {
- "node": "*"
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist-options": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
+ "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
"node_modules/moment": {
@@ -4314,6 +5613,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/nanoid": {
"version": "3.3.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
@@ -4338,8 +5644,17 @@
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ncp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==",
+ "dev": true,
"license": "MIT",
- "peer": true
+ "bin": {
+ "ncp": "bin/ncp"
+ }
},
"node_modules/neo-async": {
"version": "2.6.2",
@@ -4363,6 +5678,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/normalize-package-data": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
+ "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^4.0.1",
+ "is-core-module": "^2.5.0",
+ "semver": "^7.3.4",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -4373,13 +5704,41 @@
"node": ">=0.10.0"
}
},
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
@@ -4392,6 +5751,16 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -4440,7 +5809,6 @@
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"callsites": "^3.0.0"
},
@@ -4448,6 +5816,25 @@
"node": ">=6"
}
},
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4528,6 +5915,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -4611,36 +5999,178 @@
"util-deprecate": "^1.0.2"
},
"engines": {
- "node": ">=4"
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.9.9",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz",
+ "integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz",
+ "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qified": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz",
+ "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/qified/node_modules/hookified": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz",
+ "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true,
- "license": "MIT"
+ "license": "ISC"
},
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8.0"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
- "license": "MIT",
- "peer": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/rechoir": {
@@ -4656,6 +6186,20 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/regenerate": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -4774,11 +6318,34 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=4"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/reveal.js": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-5.2.1.tgz",
@@ -4788,6 +6355,36 @@
"node": ">=18.0.0"
}
},
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/sass": {
"version": "1.93.3",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz",
@@ -4913,6 +6510,7 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -4986,6 +6584,13 @@
"node": ">=8"
}
},
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/simple-masonry": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/simple-masonry/-/simple-masonry-1.0.5.tgz",
@@ -5022,6 +6627,70 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.24",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.24.tgz",
+ "integrity": "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz",
@@ -5032,13 +6701,35 @@
"node": ">=10"
}
},
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=8"
},
@@ -5092,6 +6783,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/synckit": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz",
+ "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@pkgr/core": "^0.3.6"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
+ }
+ },
"node_modules/tapable": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
@@ -5159,6 +6866,13 @@
}
}
},
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -5200,6 +6914,79 @@
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-declaration-location": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz",
+ "integrity": "sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/rebeccastevens"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/ts-declaration-location"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "picomatch": "^4.0.2"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.0.0"
+ }
+ },
+ "node_modules/ts-declaration-location/node_modules/picomatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -5207,13 +6994,19 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -5221,10 +7014,62 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.71.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.71.0.tgz",
+ "integrity": "sha512-fBdHYiqQ14RW6mOMXD14Svn82ZsCYAoQSzGRzyEjR59S5A2Krh/l7fGTOQ7iCr8gGy/mHVXtEF7s5fgjEdV0Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.71.0",
+ "@typescript-eslint/parser": "8.71.0",
+ "@typescript-eslint/typescript-estree": "8.71.0",
+ "@typescript-eslint/utils": "8.71.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.1.0"
+ }
+ },
"node_modules/undici-types": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
- "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
@@ -5309,7 +7154,6 @@
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"punycode": "^2.1.0"
}
@@ -5321,6 +7165,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
"node_modules/watchpack": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
@@ -5341,6 +7196,7 @@
"integrity": "sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -5390,6 +7246,7 @@
"integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.6.1",
"@webpack-cli/configtest": "^3.0.1",
@@ -5510,11 +7367,37 @@
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/write-file-atomic": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz",
+ "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/write-file-atomic/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -5522,6 +7405,16 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index 4c0264bd..5051f053 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,9 @@
},
"scripts": {
"webpack": "webpack-cli",
- "build": "npm run webpack && npm run scss && cp -r node_modules/bootstrap-icons/font/fonts conditional/static/css/fonts"
+ "build": "npm run webpack && npm run scss && cp -r node_modules/bootstrap-icons/font/fonts conditional/static/css/fonts",
+ "lint": "eslint",
+ "fix": "eslint --fix"
},
"dependencies": {
"@selectize/selectize": "^0.15.2",
@@ -45,8 +47,9 @@
"copy-webpack-plugin": "^14.0.0",
"css-loader": "^7.1.4",
"dotenv": "^18.0.5",
- "eslint-config-google": "^0.14.0",
+ "eslint": "^10.12.0",
"expose-loader": "^5.0.1",
+ "gts": "^7.0.0",
"imports-loader": "^5.0.0",
"sass": "^1.93.3",
"sass-loader": "^16.0.7",
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..d1646f01
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "extends": "./node_modules/gts/tsconfig-google.json",
+ "compilerOptions": {
+ "rootDir": ".",
+ "outDir": "build"
+ },
+ "include": [
+ "src/**/*.ts",
+ "test/**/*.ts"
+ ]
+}
diff --git a/webpack.config.js b/webpack.config.js
index b2e0b6db..ea134e95 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,24 +1,24 @@
const webpack = require('webpack');
-const CopyPlugin = require('copy-webpack-plugin')
+const CopyPlugin = require('copy-webpack-plugin');
const path = require('path');
const sass = require('sass');
const dotenv = require('dotenv');
-var jsSrc = path.resolve('./frontend');
-var jsDest = path.resolve('./conditional/static');
-var publicPath = 'static/js';
+const jsSrc = path.resolve('./frontend');
+const jsDest = path.resolve('./conditional/static');
+const publicPath = 'static/js';
dotenv.config();
-var babelQuery = {
- "presets": ["@babel/preset-env"],
- "plugins": []
-}
+const babelQuery = {
+ presets: ['@babel/preset-env'],
+ plugins: [],
+};
-var webpackConfig = {
+const webpackConfig = {
context: jsSrc,
- entry: ["./javascript/app.js"],
- devtool: "source-map",
+ entry: ['./javascript/app.js'],
+ devtool: 'source-map',
output: {
path: path.normalize(jsDest),
filename: 'js/app.js',
@@ -28,15 +28,15 @@ var webpackConfig = {
plugins: [
new webpack.DefinePlugin({
'process.env': {
- 'NODE_ENV': JSON.stringify('production'),
- 'SENTRY_ENV': JSON.stringify(process.env.CONDITIONAL_SENTRY_ENV ?? "local-development")
- }
+ NODE_ENV: JSON.stringify('production'),
+ SENTRY_ENV: JSON.stringify(
+ process.env.CONDITIONAL_SENTRY_ENV ?? 'local-development',
+ ),
+ },
}),
new CopyPlugin({
- patterns: [
- { from: "images", to: "images" },
- ],
- })
+ patterns: [{from: 'images', to: 'images'}],
+ }),
],
mode: 'production',
module: {
@@ -45,13 +45,13 @@ var webpackConfig = {
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
- options: babelQuery
+ options: babelQuery,
},
{
- test: require.resolve("jquery"),
+ test: require.resolve('jquery'),
loader: 'expose-loader',
options: {
- exposes: ["$", "jQuery"],
+ exposes: ['$', 'jQuery'],
},
},
{
@@ -70,45 +70,43 @@ var webpackConfig = {
{
test: /bootstrap-sweetalert.*$/,
loader: 'babel-loader',
- options: babelQuery
+ options: babelQuery,
},
{
test: /\.s[ac]ss$/i,
- loader: "sass-loader",
- type: "asset/resource",
+ loader: 'sass-loader',
+ type: 'asset/resource',
generator: {
- filename: "css/[name].css",
+ filename: 'css/[name].css',
},
options: {
sassOptions: {
loadPaths: [
- "./node_modules/csh-material-bootstrap/dist",
- "./node_modules/csh-material-bootstrap/dist/css",
- "./node_modules/datatables.net-bs/css",
- "./node_modules/bootstrap-material-datetimepicker/css",
- "./node_modules/load-awesome/css",
- "./node_modules/reveal.js/css",
- "./node_modules",
- ".",
- ],
- importers: [
- new sass.NodePackageImporter()
+ './node_modules/csh-material-bootstrap/dist',
+ './node_modules/csh-material-bootstrap/dist/css',
+ './node_modules/datatables.net-bs/css',
+ './node_modules/bootstrap-material-datetimepicker/css',
+ './node_modules/load-awesome/css',
+ './node_modules/reveal.js/css',
+ './node_modules',
+ '.',
],
- }
- }
+ importers: [new sass.NodePackageImporter()],
+ },
+ },
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
- type: "asset/resource",
+ type: 'asset/resource',
generator: {
- filename: "fonts/[name][ext]",
+ filename: 'fonts/[name][ext]',
},
- }
- ]
+ },
+ ],
},
optimization: {
emitOnErrors: true,
- }
+ },
};
module.exports = webpackConfig;