diff --git a/.eslintrc.js b/.eslintrc.js index cfd93d3e7..e4fd93ec0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -31,6 +31,6 @@ module.exports = { // allow debugger during development 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'cypress/no-unnecessary-waiting': 'off', - '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-this-alias': ['error', { allowedNames: ['self'] }], }, }; diff --git a/funnel/assets/js/schedule_view.js b/funnel/assets/js/schedule_view.js index c440d59f0..67f751152 100644 --- a/funnel/assets/js/schedule_view.js +++ b/funnel/assets/js/schedule_view.js @@ -11,29 +11,29 @@ import Modal from './utils/modalhelper'; const Schedule = { renderScheduleTable() { - const schedule = this; + const self = this; const scheduleUI = Vue.component('schedule', { - template: schedule.config.scriptTemplate, + template: self.config.scriptTemplate, data() { return { - schedules: schedule.config.schedule, - rowWidth: Object.keys(schedule.config.rooms).length, + schedules: self.config.schedule, + rowWidth: Object.keys(self.config.rooms).length, rowHeight: '30', timeSlotWidth: '75', - timeZone: schedule.config.timeZone, + timeZone: self.config.timeZone, rowBorder: '1', - activeTab: Object.keys(schedule.config.rooms)[0], + activeTab: Object.keys(self.config.rooms)[0], width: $(window).width(), height: $(window).height(), modalHtml: '', headerHeight: '', pageDetails: { url: window.location.href, - title: `Schedule – ${schedule.config.projectTitle}`, - projectTitle: schedule.config.projectTitle, + title: `Schedule – ${self.config.projectTitle}`, + projectTitle: self.config.projectTitle, pageTitle: 'Schedule', - description: schedule.config.pageDescription, + description: self.config.pageDescription, }, view: 'agenda', svgIconUrl: window.Hasgeek.Config.svgIconUrl, @@ -84,14 +84,14 @@ const Schedule = { // On closing modal, update browser history $('#session-modal').on($.modal.CLOSE, () => { this.modalHtml = ''; - if (schedule.config.replaceHistoryToModalUrl) { + if (self.config.replaceHistoryToModalUrl) { Spa.updateMetaTags(this.pageDetails); if (window.history.state.openModal) { window.history.back(); } } }); - if (schedule.config.changeToModalUrl) { + if (self.config.changeToModalUrl) { $(window).on('popstate', () => { if (this.modalHtml) { $.modal.close(); @@ -103,7 +103,7 @@ const Schedule = { this.modalHtml = sessionHtml; $('#session-modal').modal('show'); this.handleModalShown(); - if (schedule.config.replaceHistoryToModalUrl) { + if (self.config.replaceHistoryToModalUrl) { window.history.pushState( { openModal: true, @@ -184,7 +184,7 @@ const Schedule = { this.getHeight(); this.pathName = window.location.pathname; const scrollPos = JSON.parse(window.sessionStorage.getItem('scrollPos')); - const activeSession = schedule.config.active_session; + const activeSession = self.config.active_session; if (activeSession) { // Open session modal const paths = window.location.href.split('/'); @@ -243,7 +243,7 @@ const Schedule = { }, }, mounted() { - if (schedule.config.rememberScrollPos) { + if (self.config.rememberScrollPos) { this.animateWindowScrollWithHeader(); } this.handleBrowserResize(); @@ -257,7 +257,7 @@ const Schedule = { faSvg, }, }); - scheduleApp.$mount(schedule.config.divElem); + scheduleApp.$mount(self.config.divElem); }, addSessionToSlots() { this.config.sessions.forEach((session) => { @@ -316,7 +316,6 @@ const Schedule = { }; }, init(config) { - const self = this; this.config = config; this.config.rooms = {}; if (!this.config.venues.length) { @@ -330,7 +329,7 @@ const Schedule = { this.config.rooms[room.scoped_name].venue_title = venue.title; }); } else { - self.addDefaultRoom(venue); + this.addDefaultRoom(venue); } }); this.config.currentDate = this.Utils.getDateString(new Date()); diff --git a/funnel/assets/js/submission.js b/funnel/assets/js/submission.js index 8ade0f9a1..0a0ca66d3 100644 --- a/funnel/assets/js/submission.js +++ b/funnel/assets/js/submission.js @@ -42,7 +42,7 @@ export const Submission = { export const LabelsWidget = { init() { - const Widget = this; + const self = this; // On load, if the radio has been selected, then check mark the listwidget label $('.listwidget input[type="radio"]').each(function loadCheckMarkToLabel() { @@ -51,12 +51,12 @@ export const LabelsWidget = { } }); - $('.listwidget .mui-form__label').click(function uncheckLabel() { + $('.listwidget .mui-form__label').on('click', function uncheckLabel() { if ($(this).hasClass('checked')) { $(this).removeClass('checked'); $(this).siblings().find('input[type="radio"]').prop('checked', false); - const attr = Widget.getLabelTxt($(this).text().trim()); - Widget.updateLabels('', attr, false); + const attr = self.getLabelTxt($(this).text().trim()); + self.updateLabels('', attr, false); } else { $(this).addClass('checked'); $(this).siblings().find('input[type="radio"]').first().click(); @@ -64,20 +64,23 @@ export const LabelsWidget = { }); // Add check mark to listwidget label - $('.listwidget input[type="radio"]').change(function addCheckMarkToLabel() { + $('.listwidget input[type="radio"]').on('change', function addCheckMarkToLabel() { const label = $(this).parent().parent().prev('.mui-form__label'); label.addClass('checked'); - const labelTxt = `${Widget.getLabelTxt(label.text())}: ${Widget.getLabelTxt( + const labelTxt = `${self.getLabelTxt(label.text())}: ${self.getLabelTxt( $(this).parent().find('label').text(), )}`; - const attr = Widget.getLabelTxt(label.text()); - Widget.updateLabels(labelTxt, attr, this.checked); + const attr = self.getLabelTxt(label.text()); + self.updateLabels(labelTxt, attr, this.checked); }); - $('.mui-checkbox input[type="checkbox"]').change(function clickLabelCheckbox() { - const labelTxt = Widget.getLabelTxt($(this).parent('label').text()); - Widget.updateLabels(labelTxt, labelTxt, this.checked); - }); + $('.mui-checkbox input[type="checkbox"]').on( + 'change', + function clickLabelCheckbox() { + const labelTxt = self.getLabelTxt($(this).parent('label').text()); + self.updateLabels(labelTxt, labelTxt, this.checked); + }, + ); // Open and close dropdown $('#label-select').on('click', () => { diff --git a/funnel/assets/js/utils/form_widgets.js b/funnel/assets/js/utils/form_widgets.js index 7c18fe64e..260d58961 100644 --- a/funnel/assets/js/utils/form_widgets.js +++ b/funnel/assets/js/utils/form_widgets.js @@ -183,12 +183,11 @@ export class MapMarker { } activate() { - const self = this; Form.preventSubmitOnEnter(this.field.locationId); // locationpicker.jquery.js $(`#${this.field.mapId}`).locationpicker({ - location: self.getDefaultLocation(), + location: this.getDefaultLocation(), radius: 0, zoom: 18, inputBinding: { @@ -197,21 +196,21 @@ export class MapMarker { locationNameInput: $(`#${this.field.locationId}`), }, enableAutocomplete: true, - onchanged() { - if ($(`#${self.field.locationId}`).val()) { - $(`#${self.field.mapId}`).removeClass('mui--hide'); + onchanged: () => { + if ($(`#${this.field.locationId}`).val()) { + $(`#${this.field.mapId}`).removeClass('mui--hide'); } }, onlocationnotfound() { // Ignore this event }, - oninitialized() { + oninitialized: () => { // Locationpicker sets latitude and longitude field value to 0, // this is to empty the fields and hide the map - if (!$(`#${self.field.locationId}`).val()) { - $(`#${self.field.latitudeId}`).val(''); - $(`#${self.field.longitudeId}`).val(''); - $(`#${self.field.mapId}`).addClass('mui--hide'); + if (!$(`#${this.field.locationId}`).val()) { + $(`#${this.field.latitudeId}`).val(''); + $(`#${this.field.longitudeId}`).val(''); + $(`#${this.field.mapId}`).addClass('mui--hide'); } }, }); @@ -219,10 +218,10 @@ export class MapMarker { // On clicking clear, empty latitude, longitude, location fields and hide map $(`#${this.field.clearId}`).on('click', (event) => { event.preventDefault(); - $(`#${self.field.latitudeId}`).val(''); - $(`#${self.field.longitudeId}`).val(''); - $(`#${self.field.locationId}`).val(''); - $(`#${self.field.mapId}`).addClass('mui--hide'); + $(`#${this.field.latitudeId}`).val(''); + $(`#${this.field.longitudeId}`).val(''); + $(`#${this.field.locationId}`).val(''); + $(`#${this.field.mapId}`).addClass('mui--hide'); }); } diff --git a/funnel/assets/js/utils/jsonform.js b/funnel/assets/js/utils/jsonform.js index 4a703d4e1..3d57c7e03 100644 --- a/funnel/assets/js/utils/jsonform.js +++ b/funnel/assets/js/utils/jsonform.js @@ -14,7 +14,6 @@ const jsonForm = Vue.component('jsonform', { return JSON.stringify(obj); }, activateForm() { - const form = this; const url = Form.getActionUrl(this.formid); const formValues = new FormData($(`#${this.formid}`)[0]); const onSuccess = (response) => { @@ -32,7 +31,7 @@ const jsonForm = Vue.component('jsonform', { dataType: 'html', formData: JSON.stringify({ csrf_token: formValues.get('csrf_token'), - form: form.getFormData(), + form: this.getFormData(), }), }); }); diff --git a/funnel/assets/js/utils/markmap.js b/funnel/assets/js/utils/markmap.js index 81a6f657c..b7b2e4c41 100644 --- a/funnel/assets/js/utils/markmap.js +++ b/funnel/assets/js/utils/markmap.js @@ -12,7 +12,7 @@ const MarkmapEmbed = { }, async init(container) { const parentElement = $(container || 'body'); - const markmapEmbed = this; + const self = this; if ( parentElement.find('.md-embed-markmap:not(.activating, .activated)').length > 0 ) { @@ -34,14 +34,11 @@ const MarkmapEmbed = { parentElement .find('.md-embed-markmap:not(.activating):not(.activated)') .each(function embedMarkmap() { - const markdownDiv = this; - $(markdownDiv).addClass('activating'); - $(markdownDiv).find('.embed-loading').addClass('loading'); - const { root } = transformer.transform( - $(markdownDiv).find('.embed-content').text(), - ); - $(markdownDiv).find('.embed-container').append(''); - const current = $(markdownDiv).find('svg')[0]; + $(this).addClass('activating'); + $(this).find('.embed-loading').addClass('loading'); + const { root } = transformer.transform($(this).find('.embed-content').text()); + $(this).find('.embed-container').append(''); + const current = $(this).find('svg')[0]; const markmap = Markmap.create( current, { @@ -52,10 +49,10 @@ const MarkmapEmbed = { }, root, ); - markmapEmbed.markmaps.push(markmap); + self.markmaps.push(markmap); $(current).data('markmap', markmap); observer.observe(current); - $(markdownDiv).addClass('activated').removeClass('activating'); + $(this).addClass('activated').removeClass('activating'); }); window.addEventListener('resize', this.resizeMarkmapContainers.bind(this)); diff --git a/funnel/assets/js/utils/ticket_widget.js b/funnel/assets/js/utils/ticket_widget.js index 1ce1a4dc2..2f86f9ff1 100644 --- a/funnel/assets/js/utils/ticket_widget.js +++ b/funnel/assets/js/utils/ticket_widget.js @@ -42,8 +42,7 @@ const Ticketing = { }, error(response) { - const ajaxLoad = this; - ajaxLoad.retries -= 1; + this.retries -= 1; let errorMsg; if (response.readyState === 4) { @@ -52,7 +51,7 @@ const Ticketing = { ); $(widgetElem).html(errorMsg); } else if (response.readyState === 0) { - if (ajaxLoad.retries < 0) { + if (this.retries < 0) { if (!navigator.onLine) { errorMsg = window.gettext('This device has no internet connection'); } else { @@ -64,8 +63,8 @@ const Ticketing = { $(widgetElem).html(errorMsg); } else { setTimeout(() => { - $.get(ajaxLoad); - }, ajaxLoad.retryInterval); + $.get(this); + }, this.retryInterval); } } }, diff --git a/funnel/assets/js/utils/typeform_embed.js b/funnel/assets/js/utils/typeform_embed.js index 2a66aeb30..e929b4911 100644 --- a/funnel/assets/js/utils/typeform_embed.js +++ b/funnel/assets/js/utils/typeform_embed.js @@ -29,8 +29,7 @@ const TypeformEmbed = { $(containerDiv) .find('a') .each(function isTypeformUrl() { - const anchorTag = this; - const txt = $(anchorTag).attr('href'); + const txt = $(this).attr('href'); let urlSplit; let typeformId; let parentDiv; @@ -40,9 +39,9 @@ const TypeformEmbed = { urlSplit = txt.split('/'); typeformId = urlSplit.pop(); typeformId = typeformId.includes('?') ? typeformId.split('?')[0] : typeformId; - parentDiv = $(anchorTag).parents(containerDiv); + parentDiv = $(this).parents(containerDiv); if (typeformId) { - self.addTypeformEmbed(typeformId, anchorTag, parentDiv, loadScript); + self.addTypeformEmbed(typeformId, this, parentDiv, loadScript); } } }); diff --git a/funnel/assets/js/utils/webshare.js b/funnel/assets/js/utils/webshare.js index 3a9b6a868..9b22e59fe 100644 --- a/funnel/assets/js/utils/webshare.js +++ b/funnel/assets/js/utils/webshare.js @@ -17,21 +17,20 @@ const WebShare = { $('body').on('click', '.hg-link-btn', function clickWebShare(event) { event.preventDefault(); - const linkElem = this; let url = - $(linkElem).data('url') || + $(this).data('url') || (document.querySelector('link[rel=canonical]') && document.querySelector('link[rel=canonical]').href) || window.location.href; const title = $(this).data('title') || document.title; const text = $(this).data('text') || ''; - if ($(linkElem).attr('data-shortlink')) { + if ($(this).attr('data-shortlink')) { mobileShare(title, url, text); } else { Utils.fetchShortUrl(url) .then((shortlink) => { url = shortlink; - $(linkElem).attr('data-shortlink', true); + $(this).attr('data-shortlink', true); }) .finally(() => { mobileShare(title, url, text); @@ -41,15 +40,14 @@ const WebShare = { } else { $('body').on('click', '.js-copy-link', function clickCopyLink(event) { event.preventDefault(); - const linkElem = this; - if ($(linkElem).attr('data-shortlink')) { - Utils.copyToClipboard($(linkElem).find('.js-copy-url')[0]); + if ($(this).attr('data-shortlink')) { + Utils.copyToClipboard($(this).find('.js-copy-url')[0]); } else { - Utils.fetchShortUrl($(linkElem).find('.js-copy-url').first().html()) + Utils.fetchShortUrl($(this).find('.js-copy-url').first().html()) .then((shortlink) => { - $(linkElem).find('.js-copy-url').text(shortlink); - $(linkElem).attr('data-shortlink', true); - Utils.copyToClipboard($(linkElem).find('.js-copy-url')[0]); + $(this).find('.js-copy-url').text(shortlink); + $(this).attr('data-shortlink', true); + Utils.copyToClipboard($(this).find('.js-copy-url')[0]); }) .catch((errMsg) => { toastr.error(errMsg); diff --git a/funnel/assets/service-worker-template.js b/funnel/assets/service-worker-template.js index 8c39fba4c..51b93aa14 100644 --- a/funnel/assets/service-worker-template.js +++ b/funnel/assets/service-worker-template.js @@ -2,11 +2,8 @@ import { precacheAndRoute } from 'workbox-precaching'; import { registerRoute, setCatchHandler } from 'workbox-routing'; import { NetworkFirst, NetworkOnly } from 'workbox-strategies'; import { skipWaiting, clientsClaim } from 'workbox-core'; -const filteredManifest = self.__WB_MANIFEST.filter((entry) => { - return !entry.url.match('prism-'); -}); -precacheAndRoute(filteredManifest); +precacheAndRoute(self.__WB_MANIFEST); skipWaiting(); clientsClaim(); diff --git a/package-lock.json b/package-lock.json index 2c1dc93b7..b57088453 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,8 +62,28 @@ "@babel/eslint-parser": "^7.24.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/preset-env": "^7.14.7", + "@types/babel__core": "^7.20.5", + "@types/codemirror": "^5.60.15", + "@types/eslint": "^8.56.10", + "@types/eslint-config-prettier": "^6.11.3", + "@types/eslint-plugin-prettier": "^3.1.3", + "@types/file-loader": "^5.0.4", "@types/hammerjs": "^2.0.45", + "@types/jquery": "^3.5.30", + "@types/jquery.cookie": "^1.4.35", + "@types/jqueryui": "^1.12.22", + "@types/leaflet": "^1.9.12", + "@types/lint-staged": "^13.3.0", + "@types/muicss": "^0.9.8", + "@types/node": "^20.14.2", "@types/prismjs": "^1.26.4", + "@types/sass-loader": "^8.0.8", + "@types/select2": "^4.0.63", + "@types/sprintf-js": "^1.1.4", + "@types/timeago": "^1.6.3", + "@types/toastr": "^2.1.43", + "@types/vcards-js": "^2.10.5", + "@types/webpack": "^5.28.5", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", "babel-loader": "^9.1.3", @@ -83,6 +103,7 @@ "prettier": "^3.3.1", "sass": "^1.77.4", "sass-loader": "^14.2.1", + "ts-node": "^10.9.2", "typescript": "^5.4.5", "vega-typings": "^1.3.0", "webpack": "^5.91.0", @@ -2300,6 +2321,30 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@cypress/request": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", @@ -3286,6 +3331,89 @@ "string.prototype.matchall": "^4.0.6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/codemirror": { + "version": "5.60.15", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.15.tgz", + "integrity": "sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/tern": "*" + } + }, "node_modules/@types/d3": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", @@ -3559,6 +3687,23 @@ "@types/json-schema": "*" } }, + "node_modules/@types/eslint-config-prettier": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@types/eslint-config-prettier/-/eslint-config-prettier-6.11.3.tgz", + "integrity": "sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint-plugin-prettier": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz", + "integrity": "sha512-Jk+lgBZM0u9ETUyqe2HvykL1j6uE7L1oEqbInWtsVHT6sP+AdwLb4ncmQBqASTS+YzYOPF6hKX0zgEhblRMjqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, "node_modules/@types/eslint-scope": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", @@ -3576,6 +3721,31 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "license": "MIT" }, + "node_modules/@types/file-loader": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/file-loader/-/file-loader-5.0.4.tgz", + "integrity": "sha512-aB4X92oi5D2nIGI8/kolnJ47btRM2MQjQS4eJgA/VnCD12x0+kP5v7b5beVQWKHLOcquwUXvv6aMt8PmMy9uug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webpack": "^4" + } + }, + "node_modules/@types/file-loader/node_modules/@types/webpack": { + "version": "4.41.38", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz", + "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/@types/geojson": { "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", @@ -3616,6 +3786,36 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jquery": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/jquery.cookie": { + "version": "1.4.35", + "resolved": "https://registry.npmjs.org/@types/jquery.cookie/-/jquery.cookie-1.4.35.tgz", + "integrity": "sha512-chaHxzUOnN3MxSt5PNDtGLa74Z7DGsYnnBhg2NihAY9awJ01q903T07DVHkDnY9J7LkCcxuZyHnsVvmLmdFsAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, + "node_modules/@types/jqueryui": { + "version": "1.12.22", + "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.12.22.tgz", + "integrity": "sha512-4r7ROoUJ5gaIWvQa2qAHyrhskJcUNM62Md8M9+4DtabEiIQ9Y0pVlW88ojyXvn4M1HNUc/47KpFJaXhrk8P/rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3630,6 +3830,23 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/leaflet": { + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz", + "integrity": "sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/lint-staged": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@types/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-WxGjVP+rA4OJlEdbZdT9MS9PFKQ7kVPhLn26gC+2tnBWBEFEj/KW+IbFfz6sxdxY5U6V7BvyF+3BzCGsAMHhNg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -3645,6 +3862,16 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "license": "MIT" }, + "node_modules/@types/muicss": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@types/muicss/-/muicss-0.9.8.tgz", + "integrity": "sha512-p2yXnOeh3iNISd3c/3a4t9tXSuwovzBbVElzPyeX3a2rxuTPtUUN0BFRyr2k5lHh8YFwQj2V2HJLdGuqiuiysA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/node": { "version": "20.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", @@ -3655,6 +3882,16 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-sass": { + "version": "4.11.7", + "resolved": "https://registry.npmjs.org/@types/node-sass/-/node-sass-4.11.7.tgz", + "integrity": "sha512-QY0sXZGPRzJ2obo66f9zB6S0Uo9PRdcoPKPbyftSoKXub90s4ut/JK3fYHOqmhYhRRVEB3P5o5rEnq2/bWBdeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/prismjs": { "version": "1.26.4", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", @@ -3662,6 +3899,24 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -3669,6 +3924,44 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/sass-loader": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@types/sass-loader/-/sass-loader-8.0.8.tgz", + "integrity": "sha512-hjP8aUyTDde2blD6clAGso/+ctC+9Rch/mDpvMe/kZrpXGZBDqf1K/48jWzXOX7hbd4jXQKQMPWdbBv4MRp0yQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/node-sass": "*", + "@types/webpack": "^4", + "sass": "^1.45.0" + } + }, + "node_modules/@types/sass-loader/node_modules/@types/webpack": { + "version": "4.41.38", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.38.tgz", + "integrity": "sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/select2": { + "version": "4.0.63", + "resolved": "https://registry.npmjs.org/@types/select2/-/select2-4.0.63.tgz", + "integrity": "sha512-/DXUfPSj3iVTGlRYRYPCFKKSogAGP/j+Z0fIMXbBiBtmmZj0WH7vnfNuckafq9C43KnqPPQW2TI/Rj/vTSGnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -3683,6 +3976,57 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sprintf-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/sprintf-js/-/sprintf-js-1.1.4.tgz", + "integrity": "sha512-aWK1reDYWxcjgcIIPmQi3u+OQDuYa9b+lr6eIsGWrekJ9vr1NSjr4Eab8oQ1iKuH1ltFHpXGyerAv1a3FMKxzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tern": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", + "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/timeago": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@types/timeago/-/timeago-1.6.3.tgz", + "integrity": "sha512-SVNyo6sNP3Q+uqs/5Emqjz0e59G+i8iNPlxVw7vftotJj70EFjIeX2L2iZ0IV1J8L/bQP7G76/68NPW3kNEW3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, + "node_modules/@types/toastr": { + "version": "2.1.43", + "resolved": "https://registry.npmjs.org/@types/toastr/-/toastr-2.1.43.tgz", + "integrity": "sha512-sLC2fr2OXeE1iyhUixpQ64wQ2tA26awmLidn4tXTLBz4yP/VhtYUKHpmiIyDtztKkHjucdiTLH8F5uRRyhNi2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jquery": "*" + } + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -3690,12 +4034,63 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "license": "MIT" }, + "node_modules/@types/vcards-js": { + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/@types/vcards-js/-/vcards-js-2.10.5.tgz", + "integrity": "sha512-QkKYoDc7HcRwiJVALv3ZSl1pzX3nkGm8OiQWZVn4QM8S4xUkcZVU6ci89eF6ychyEQc3ySLDIyAa/Mymbvg3IA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webpack": { + "version": "5.28.5", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz", + "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", @@ -4234,6 +4629,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4409,6 +4814,13 @@ ], "license": "MIT" }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5401,6 +5813,13 @@ "layout-base": "^1.0.0" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", @@ -10681,6 +11100,13 @@ "resolved": "node_modules/@jridgewell/sourcemap-codec", "link": true }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, "node_modules/markdown-it": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", @@ -13681,6 +14107,60 @@ "node": ">=6.10" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -14073,6 +14553,13 @@ "node": ">=8" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/vcards-js": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/vcards-js/-/vcards-js-2.10.0.tgz", @@ -15438,6 +15925,16 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "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 fac6bb4bf..f9d5aa3ca 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,28 @@ "@babel/eslint-parser": "^7.24.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/preset-env": "^7.14.7", + "@types/babel__core": "^7.20.5", + "@types/codemirror": "^5.60.15", + "@types/eslint": "^8.56.10", + "@types/eslint-config-prettier": "^6.11.3", + "@types/eslint-plugin-prettier": "^3.1.3", + "@types/file-loader": "^5.0.4", "@types/hammerjs": "^2.0.45", + "@types/jquery": "^3.5.30", + "@types/jquery.cookie": "^1.4.35", + "@types/jqueryui": "^1.12.22", + "@types/leaflet": "^1.9.12", + "@types/lint-staged": "^13.3.0", + "@types/muicss": "^0.9.8", + "@types/node": "^20.14.2", "@types/prismjs": "^1.26.4", + "@types/sass-loader": "^8.0.8", + "@types/select2": "^4.0.63", + "@types/sprintf-js": "^1.1.4", + "@types/timeago": "^1.6.3", + "@types/toastr": "^2.1.43", + "@types/vcards-js": "^2.10.5", + "@types/webpack": "^5.28.5", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", "babel-loader": "^9.1.3", @@ -36,6 +56,7 @@ "prettier": "^3.3.1", "sass": "^1.77.4", "sass-loader": "^14.2.1", + "ts-node": "^10.9.2", "typescript": "^5.4.5", "vega-typings": "^1.3.0", "webpack": "^5.91.0", diff --git a/tsconfig.json b/tsconfig.json index 63faee187..041005abb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,9 @@ { "compilerOptions": { "allowJs": true, + "allowSyntheticDefaultImports": true, "alwaysStrict": true, + "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "incremental": true, "module": "NodeNext", @@ -9,5 +11,11 @@ "pretty": true, "strict": true, "verbatimModuleSyntax": true + }, + "ts-node": { + "transpileOnly": true, + "compilerOptions": { + "module": "CommonJS" + } } } diff --git a/webpack.config.mjs b/webpack.config.mjs index 26ffa4039..5be702fd2 100644 --- a/webpack.config.mjs +++ b/webpack.config.mjs @@ -103,6 +103,7 @@ export default { path: path.resolve(__dirname, 'funnel/static/build'), publicPath: '/static/build/', filename: 'js/[name].[chunkhash].js', + compareBeforeEmit: true, }, module: { rules: [ @@ -160,6 +161,7 @@ export default { new InjectManifest({ swSrc: path.resolve(__dirname, 'funnel/assets/service-worker-template.js'), swDest: path.resolve(__dirname, 'funnel/static/build/js/service-worker.js'), + exclude: [/prismjs/, /\.map$/, /\.LICENSE\.txt$/], }), ], };