From 9ccbca2678324cf3fe4a846f35589dd9debb98a7 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 21 Nov 2024 13:37:36 -0800 Subject: [PATCH 01/16] IO-3020 IO-3036 Initial removal of ProManager --- .circleci/config.yml | 70 - _reference/JSON/BodyshopFeatures.json | 5 +- bodyshop_translations.babel | 107 +- client/.env.development.promanager | 14 - client/.env.production.promanager | 15 - client/.env.test.promanager | 15 - client/index.html | 209 +- client/package.json | 4 - client/public/pm/pm-apple-touch-icon.png | Bin 5558 -> 0 bytes client/public/pm/pm-favicon.ico | Bin 5238 -> 0 bytes client/public/pm/pm-icon-192-maskable.png | Bin 6105 -> 0 bytes client/public/pm/pm-icon-192.png | Bin 9466 -> 0 bytes client/public/pm/pm-icon-512-maskable.png | Bin 18465 -> 0 bytes client/public/pm/pm-icon-512.png | Bin 29139 -> 0 bytes client/src/App/App.jsx | 9 +- client/src/App/themeProvider.js | 6 +- .../bill-form/bill-form.lines.component.jsx | 4 - .../conflict/conflict.component.jsx | 3 +- .../error-boundary.component.jsx | 3 +- .../feature-wrapper.component.jsx | 3 +- .../components/header/header.component.jsx | 56 +- .../job-bills-total.component.jsx | 1 - .../job-lines-part-price-change.component.jsx | 33 +- .../job-employee-assignments.component.jsx | 3 +- .../job-totals.table.labor.component.jsx | 15 +- .../job-totals.table.totals.component.jsx | 2 - .../jobs-admin-delete-intake.component.jsx | 1 - .../jobs-available-table.container.jsx | 14 +- .../jobs-close-auto-allocate.component.jsx | 1 - .../jobs-convert-button.component.jsx | 3 +- .../jobs-detail-header-actions.component.jsx | 90 +- .../jobs-detail-rates.component.jsx | 3 +- .../jobs-detail-rates.parts.component.jsx | 4 +- .../settings/defaultKanbanSettings.js | 18 +- .../production-list-columns.data.jsx | 3 +- .../schedule-calendar-header.component.jsx | 94 +- .../scheduler-calendar-wrapper.component.jsx | 103 +- .../schedule-job-modal.component.jsx | 64 +- .../shop-info/shop-info.component.jsx | 62 +- ...p-info.responsibilitycenters.component.jsx | 3 +- ....responsibilitycenters.taxes.component.jsx | 4 +- .../shop-info.scheduling.component.jsx | 264 +- .../sign-in-form/sign-in-form.component.jsx | 14 +- .../tech-login/tech-login.component.jsx | 3 +- .../update-alert/update-alert.component.jsx | 9 +- .../user-request-reset-pw.component.jsx | 6 +- .../user-validate-pw-reset.component.jsx | 6 +- client/src/index.jsx | 3 +- .../accounting-payables.container.jsx | 3 +- .../accounting-payments.container.jsx | 3 +- .../accounting-receivables.container.jsx | 3 +- .../src/pages/bills/bills.page.container.jsx | 3 +- .../contract-create.page.container.jsx | 7 +- .../contract-detail.page.container.jsx | 6 +- .../contracts/contracts.page.container.jsx | 3 +- .../courtesy-car-create.page.container.jsx | 9 +- .../courtesy-car-detail.page.container.jsx | 9 +- .../courtesy-cars.page.container.jsx | 3 +- client/src/pages/csi/csi.container.page.jsx | 6 +- .../pages/dashboard/dashboard.container.jsx | 3 +- .../src/pages/disclaimer/disclaimer.page.jsx | 5 +- .../dms-payables/dms-payables.container.jsx | 3 +- client/src/pages/dms/dms.container.jsx | 3 +- .../export-logs.page.container.jsx | 3 +- client/src/pages/inventory/inventory.page.jsx | 3 +- .../src/pages/jobs-admin/jobs-admin.page.jsx | 3 +- .../src/pages/jobs-all/jobs-all.container.jsx | 3 +- .../jobs-available.page.container.jsx | 7 +- .../jobs-checklist-view.page.jsx | 3 +- .../pages/jobs-close/jobs-close.container.jsx | 3 +- .../jobs-create/jobs-create.container.jsx | 6 +- .../jobs-delivery.page.container.jsx | 3 +- .../jobs-detail.page.component.jsx | 10 +- .../jobs-detail.page.container.jsx | 11 +- .../jobs-intake.page.container.jsx | 3 +- .../src/pages/jobs-ready/jobs-ready.page.jsx | 3 +- client/src/pages/jobs/jobs.page.jsx | 3 +- .../manage-root.page.container.jsx | 3 +- .../pages/manage/manage.page.component.jsx | 9 +- .../owners-detail.page.container.jsx | 3 +- .../pages/owners/owners.page.container.jsx | 3 +- .../parts-queue.page.container.jsx | 3 +- .../payments-all.container.page.jsx | 3 +- .../phonebook/phonebook.page.container.jsx | 3 +- .../production-board.container.jsx | 3 +- .../production-list.container.jsx | 3 +- .../pages/profile/profile.container.page.jsx | 2 +- .../schedule/schedule.page.container.jsx | 3 +- .../scoreboard/scoreboard.page.container.jsx | 3 +- .../shop-csi/shop-csi.container.page.jsx | 3 +- .../shop-vendor.page.container.jsx | 3 +- client/src/pages/shop/shop.page.component.jsx | 3 +- .../src/pages/tasks/allTasksPageContainer.jsx | 3 +- .../src/pages/tasks/myTasksPageContainer.jsx | 3 +- .../tech-job-clock.component.jsx | 3 +- .../tech-lookup/tech-lookup.container.jsx | 3 +- .../tech-shift-clock.component.jsx | 3 +- client/src/pages/tech/tech.page.component.jsx | 6 +- .../temporary-docs.container.jsx | 3 +- .../time-tickets/time-tickets.container.jsx | 3 +- .../tt-approvals.page.container.jsx | 3 +- .../vehicles-detail.page.container.jsx | 3 +- .../vehicles/vehicles.page.container.jsx | 3 +- client/src/redux/email/email.reducer.js | 3 +- client/src/redux/user/user.sagas.js | 43 +- client/src/translations/en_us/common.json | 9 +- client/src/translations/es/common.json | 9 +- client/src/translations/fr/common.json | 9 +- client/src/utils/CleanAxios.js | 10 - client/src/utils/RegisterSw.js | 6 +- client/src/utils/RenderTemplate.js | 4 +- client/src/utils/TemplateConstants.js | 6 +- client/src/utils/instanceRenderMgr.js | 5 + client/vite.config.js | 8 +- package-lock.json | 2385 ++++++++++++++++- package.json | 4 + server.js | 4 - server/accounting/qb-receivables-lines.js | 5 +- server/cdk/cdk-calculate-allocations.js | 3 +- server/email/generateTemplate.js | 3 +- server/email/sendemail.js | 29 +- server/email/tasksEmails.js | 28 +- server/firebase/firebase-handler.js | 192 +- server/utils/instanceMgr.js | 6 +- 124 files changed, 3199 insertions(+), 1140 deletions(-) delete mode 100644 client/.env.development.promanager delete mode 100644 client/.env.production.promanager delete mode 100644 client/.env.test.promanager delete mode 100644 client/public/pm/pm-apple-touch-icon.png delete mode 100644 client/public/pm/pm-favicon.ico delete mode 100644 client/public/pm/pm-icon-192-maskable.png delete mode 100644 client/public/pm/pm-icon-192.png delete mode 100644 client/public/pm/pm-icon-512-maskable.png delete mode 100644 client/public/pm/pm-icon-512.png diff --git a/.circleci/config.yml b/.circleci/config.yml index 23341d15d..d321bbed0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -179,37 +179,6 @@ jobs: job_type: deployment pipeline_number: << pipeline.number >> - promanager-app-build: - docker: - - image: cimg/node:18.18.2 - - working_directory: ~/repo/client - - steps: - - checkout: - path: ~/repo - - run: - name: Install Dependencies - command: npm i - - - run: npm run build:production:promanager - - - aws-cli/setup: - aws_access_key_id: AWS_ACCESS_KEY_ID - aws_secret_access_key: AWS_SECRET_ACCESS_KEY - region: AWS_REGION - - - aws-s3/sync: - from: dist - to: "s3://promanager-production/" - arguments: "--exclude '*.map'" - - jira/notify: - environment: Production (ProManager) - Front End - environment_type: production - pipeline_id: << pipeline.id >> - job_type: deployment - pipeline_number: << pipeline.number >> - test-rome-hasura-migrate: docker: - image: cimg/node:18.18.2 @@ -268,37 +237,6 @@ jobs: job_type: deployment pipeline_number: << pipeline.number >> - test-promanager-app-build: - docker: - - image: cimg/node:18.18.2 - - working_directory: ~/repo/client - - steps: - - checkout: - path: ~/repo - - run: - name: Install Dependencies - command: npm i - - - run: npm run build:test:promanager - - - aws-cli/setup: - aws_access_key_id: AWS_ACCESS_KEY_ID - aws_secret_access_key: AWS_SECRET_ACCESS_KEY - region: AWS_REGION - - - aws-s3/sync: - from: dist - to: "s3://promanager-testing/" - arguments: "--exclude '*.map'" - - jira/notify: - environment: Test (ProManager) - Front End - environment_type: testing - pipeline_id: << pipeline.id >> - job_type: deployment - pipeline_number: << pipeline.number >> - test-hasura-migrate: docker: - image: cimg/node:18.18.2 @@ -458,14 +396,6 @@ workflows: filters: branches: only: test-AIO - - test-promanager-app-build: - filters: - branches: - only: test-AIO - - promanager-app-build: - filters: - branches: - only: master-AIO - test-rome-hasura-migrate: secret: ${HASURA_ROME_TEST_SECRET} filters: diff --git a/_reference/JSON/BodyshopFeatures.json b/_reference/JSON/BodyshopFeatures.json index cb67a2940..ce9033828 100644 --- a/_reference/JSON/BodyshopFeatures.json +++ b/_reference/JSON/BodyshopFeatures.json @@ -10,5 +10,8 @@ "courtesycars": "date", "media": "date", "visualboard": "date", - "scoreboard": "date" + "scoreboard": "date", + "checklist": "date", + "smartscheduling" :"date", + "roguard": "date" } diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 236f677e0..009d49e56 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -1,4 +1,4 @@ - + - - - - + + + + - - <% if (env.VITE_APP_INSTANCE === 'IMEX') { %> - - ImEX Online - - <% } %> <% if (env.VITE_APP_INSTANCE === 'ROME') { %> - - Rome Online - + <% if (env.VITE_APP_INSTANCE === 'IMEX') { %> + + ImEX Online + + <% } %> <% if (env.VITE_APP_INSTANCE === 'ROME') { %> + + Rome Online + - <% } %> <% if (env.VITE_APP_INSTANCE === 'PROMANAGER') { %> - ProManager - + <% } %> + - - - -
- - + !(function () { + for (var o = 0; o < e.length; o++) { + var r = e[o]; + n[r] = t(r); + } + })(), + (function () { + var e = document.createElement("script"); + (e.async = !0), (e.src = "https://sdk.noticeable.io/l.js"); + var n = document.head; + n.insertBefore(e, n.firstChild); + })(); + } + })(); + + + + +
+ + + diff --git a/client/package.json b/client/package.json index 38d148706..e362eade1 100644 --- a/client/package.json +++ b/client/package.json @@ -90,16 +90,12 @@ "build": "dotenvx run --env-file=.env.development.imex -- vite build", "start:imex": "dotenvx run --env-file=.env.development.imex -- vite", "start:rome": "dotenvx run --env-file=.env.development.rome -- vite", - "start:promanager": "dotenvx run --env-file=.env.development.promanager -- vite", "preview:imex": "dotenvx run --env-file=.env.development.imex -- vite preview", "preview:rome": "dotenvx run --env-file=.env.development.rome -- vite preview", - "preview:promanager": "dotenvx run --env-file=.env.development.promanager -- vite preview", "build:test:imex": "env-cmd -f .env.test.imex npm run build", "build:test:rome": "env-cmd -f .env.test.rome npm run build", - "build:test:promanager": "env-cmd -f .env.test.promanager npm run build", "build:production:imex": "env-cmd -f .env.production.imex npm run build", "build:production:rome": "env-cmd -f .env.production.rome npm run build", - "build:production:promanager": "env-cmd -f .env.production.promanager npm run build", "test": "cypress open", "eject": "react-scripts eject", "madge": "madge --image ./madge-graph.svg --extensions js,jsx,ts,tsx --circular .", diff --git a/client/public/pm/pm-apple-touch-icon.png b/client/public/pm/pm-apple-touch-icon.png deleted file mode 100644 index 87d00f76f8b0abc9dbc1b2e70bf8f587804efa2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5558 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 Hw}|*ZDsY!z diff --git a/client/public/pm/pm-favicon.ico b/client/public/pm/pm-favicon.ico deleted file mode 100644 index f0c442ef97fe1e2dc54328eea998418c112f1d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5238 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 AuK)l5 diff --git a/client/public/pm/pm-icon-512-maskable.png b/client/public/pm/pm-icon-512-maskable.png deleted file mode 100644 index d507e778bd3adb88190078e8f492e50ac5b89922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18465 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 UcVkrXK)|28jEZ!*q>11E1%?$?aR2}S diff --git a/client/public/pm/pm-icon-512.png b/client/public/pm/pm-icon-512.png deleted file mode 100644 index bef51903227340583a0ed98d2c41bbcb250fb187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29139 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 diff --git a/client/src/App/App.jsx b/client/src/App/App.jsx index c2bfc0a7d..8099b09bb 100644 --- a/client/src/App/App.jsx +++ b/client/src/App/App.jsx @@ -96,8 +96,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline LogRocket.init( InstanceRenderMgr({ imex: "gvfvfw/bodyshopapp", - rome: "rome-online/rome-online", - promanager: "" // TODO: AIO Add in log rocket for promanager instances. + rome: "rome-online/rome-online" }) ); } @@ -134,8 +133,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline } @@ -144,8 +142,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline currentUser={currentUser} workspaceCode={InstanceRenderMgr({ imex: null, - rome: "9BkbEseqNqxw8jUH", - promanager: "aoJoEifvezYI0Z0P" + rome: "9BkbEseqNqxw8jUH" })} /> diff --git a/client/src/App/themeProvider.js b/client/src/App/themeProvider.js index 18bcaaa1c..5aaaef4cf 100644 --- a/client/src/App/themeProvider.js +++ b/client/src/App/themeProvider.js @@ -26,13 +26,11 @@ const defaultTheme = { token: { colorPrimary: InstanceRenderMgr({ imex: "#1890ff", - rome: "#326ade", - promanager: "#1d69a6" + rome: "#326ade" }), colorInfo: InstanceRenderMgr({ imex: "#1890ff", - rome: "#326ade", - promanager: "#1d69a6" + rome: "#326ade" }) } }; diff --git a/client/src/components/bill-form/bill-form.lines.component.jsx b/client/src/components/bill-form/bill-form.lines.component.jsx index b9576670c..ae0840cc1 100644 --- a/client/src/components/bill-form/bill-form.lines.component.jsx +++ b/client/src/components/bill-form/bill-form.lines.component.jsx @@ -228,7 +228,6 @@ export function BillEnterModalLinesComponent({ }} ) - //Do not need to set for promanager as it will default to Rome. }) }, { @@ -462,7 +461,6 @@ export function BillEnterModalLinesComponent({ ...InstanceRenderManager({ rome: [], - promanager: [], imex: [ { title: t("billlines.fields.federal_tax_applicable"), @@ -476,7 +474,6 @@ export function BillEnterModalLinesComponent({ initialValue: InstanceRenderManager({ imex: true, rome: false, - promanager: false }), name: [field.name, "applicable_taxes", "federal"] }; @@ -503,7 +500,6 @@ export function BillEnterModalLinesComponent({ ...InstanceRenderManager({ rome: [], - promanager: [], imex: [ { title: t("billlines.fields.local_tax_applicable"), diff --git a/client/src/components/conflict/conflict.component.jsx b/client/src/components/conflict/conflict.component.jsx index 659e64080..a14209f8b 100644 --- a/client/src/components/conflict/conflict.component.jsx +++ b/client/src/components/conflict/conflict.component.jsx @@ -16,8 +16,7 @@ export default function ConflictComponent() { {t("general.labels.instanceconflictext", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} diff --git a/client/src/components/error-boundary/error-boundary.component.jsx b/client/src/components/error-boundary/error-boundary.component.jsx index d4683aab3..027a3caae 100644 --- a/client/src/components/error-boundary/error-boundary.component.jsx +++ b/client/src/components/error-boundary/error-boundary.component.jsx @@ -108,8 +108,7 @@ class ErrorBoundary extends React.Component { subTitle={t("general.messages.exception", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} extra={ diff --git a/client/src/components/feature-wrapper/feature-wrapper.component.jsx b/client/src/components/feature-wrapper/feature-wrapper.component.jsx index 4b71318b7..8f2336369 100644 --- a/client/src/components/feature-wrapper/feature-wrapper.component.jsx +++ b/client/src/components/feature-wrapper/feature-wrapper.component.jsx @@ -22,8 +22,7 @@ function FeatureWrapper({ bodyshop, featureName, noauth, children, ...restProps message={t("general.messages.nofeatureaccess", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} type="warning" diff --git a/client/src/components/header/header.component.jsx b/client/src/components/header/header.component.jsx index 341e19ba0..6457de46d 100644 --- a/client/src/components/header/header.component.jsx +++ b/client/src/components/header/header.component.jsx @@ -130,9 +130,8 @@ function Header({ if ( InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "bills", bodyshop }) + imex: HasFeatureAccess({ featureName: "bills", bodyshop }), + rome: "USE_IMEX" }) ) { accountingChildren.push( @@ -172,9 +171,8 @@ function Header({ } if ( InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "payments", bodyshop }) + imex: HasFeatureAccess({ featureName: "payments", bodyshop }), + rome: "USE_IMEX" }) ) { accountingChildren.push( @@ -219,9 +217,8 @@ function Header({ if ( InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "timetickets", bodyshop }) + imex: HasFeatureAccess({ featureName: "timetickets", bodyshop }), + rome: "USE_IMEX" }) ) { accountingChildren.push( @@ -304,9 +301,8 @@ function Header({ if ( InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "export", bodyshop }) + imex: HasFeatureAccess({ featureName: "export", bodyshop }), + rome: "USE_IMEX" }) ) { accountingChildren.push({ @@ -386,9 +382,8 @@ function Header({ label: {t("menus.header.productionlist")} }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "visualboard", bodyshop }) + imex: HasFeatureAccess({ featureName: "visualboard", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -401,9 +396,8 @@ function Header({ : []), ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "scoreboard", bodyshop }) + imex: HasFeatureAccess({ featureName: "scoreboard", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -440,9 +434,8 @@ function Header({ ] }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: false // HasFeatureAccess({ featureName: 'courtesycars', bodyshop }), + imex: HasFeatureAccess({ featureName: "courtesycars", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -492,9 +485,8 @@ function Header({ label: {t("menus.header.phonebook")} }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "media", bodyshop }) + imex: HasFeatureAccess({ featureName: "media", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -571,9 +563,8 @@ function Header({ label: {t("menus.header.shop_vendors")} }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "csi", bodyshop }) + imex: HasFeatureAccess({ featureName: "csi", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -607,8 +598,7 @@ function Header({ window.open( InstanceRenderManager({ imex: "https://help.imex.online/", - rome: "https://rometech.com//", - promanager: "https://web-est.com" + rome: "https://rometech.com//" }), "_blank" @@ -617,8 +607,7 @@ function Header({ }, ...(InstanceRenderManager({ imex: true, - rome: false, - promanager: false + rome: false }) ? [ { @@ -633,9 +622,8 @@ function Header({ : []), ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "timetickets", bodyshop }) + imex: HasFeatureAccess({ featureName: "timetickets", bodyshop }), + rome: "USE_IMEX" }) ? [ { diff --git a/client/src/components/job-bills-total/job-bills-total.component.jsx b/client/src/components/job-bills-total/job-bills-total.component.jsx index d38e9781e..ed123fa9c 100644 --- a/client/src/components/job-bills-total/job-bills-total.component.jsx +++ b/client/src/components/job-bills-total/job-bills-total.component.jsx @@ -98,7 +98,6 @@ export default function JobBillsTotalComponent({ InstanceRenderManager({ imex: Dinero(), rome: Dinero(totals.additional.additionalCosts), - promanager: "USE_ROME" }) ); // Additional costs were captured for Rome, but not imex. diff --git a/client/src/components/job-detail-lines/job-lines-part-price-change.component.jsx b/client/src/components/job-detail-lines/job-lines-part-price-change.component.jsx index a7548542c..34b82ade8 100644 --- a/client/src/components/job-detail-lines/job-lines-part-price-change.component.jsx +++ b/client/src/components/job-detail-lines/job-lines-part-price-change.component.jsx @@ -60,24 +60,21 @@ export function JobLinesPartPriceChange({ job, line, refetch, technician }) { } }; - const popcontent = !technician && InstanceRenderManager({ - imex: null, - rome: ( -
- - - - -
- ), - promanager: null - }); + const popcontent = + !technician && + InstanceRenderManager({ + imex: null, + rome: ( +
+ + + + +
+ ) + }); return ( diff --git a/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx b/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx index bfa226edb..85e037e86 100644 --- a/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx +++ b/client/src/components/job-employee-assignments/job-employee-assignments.component.jsx @@ -158,8 +158,7 @@ export function JobEmployeeAssignments({ label={t( InstanceRenderManager({ imex: "jobs.fields.employee_csr", - rome: "jobs.fields.employee_csr_writer", - promanager: "USE_ROME" + rome: "jobs.fields.employee_csr_writer" }) )} > diff --git a/client/src/components/job-totals-table/job-totals.table.labor.component.jsx b/client/src/components/job-totals-table/job-totals.table.labor.component.jsx index 5725bf6ef..e643f3e7f 100644 --- a/client/src/components/job-totals-table/job-totals.table.labor.component.jsx +++ b/client/src/components/job-totals-table/job-totals.table.labor.component.jsx @@ -96,8 +96,7 @@ export default function JobTotalsTableLabor({ job }) { sortOrder: state.sortedInfo.columnKey === "total" && state.sortedInfo.order, render: (text, record) => Dinero(record.total).toFormat() } - ], - promanager: "USE_ROME" + ] }) ]; @@ -131,8 +130,7 @@ export default function JobTotalsTableLabor({ job }) { - ), - promanager: "USE_ROME" + ) })} {Dinero(job.job_totals.rates.rates_subtotal).toFormat()} @@ -185,8 +183,7 @@ export default function JobTotalsTableLabor({ job }) { {Dinero(job.job_totals.rates.mapa.total).toFormat()} - ), - promanager: "USE_ROME" + ) })} @@ -236,8 +233,7 @@ export default function JobTotalsTableLabor({ job }) { {Dinero(job.job_totals.rates.mash.total).toFormat()} - ), - promanager: "USE_ROME" + ) })} @@ -253,8 +249,7 @@ export default function JobTotalsTableLabor({ job }) { - ), - promanager: "USE_ROME" + ) })} {Dinero(job.job_totals.rates.subtotal).toFormat()} diff --git a/client/src/components/job-totals-table/job-totals.table.totals.component.jsx b/client/src/components/job-totals-table/job-totals.table.totals.component.jsx index 301fec91f..891867fbb 100644 --- a/client/src/components/job-totals-table/job-totals.table.totals.component.jsx +++ b/client/src/components/job-totals-table/job-totals.table.totals.component.jsx @@ -50,7 +50,6 @@ export function JobTotalsTableTotals({ bodyshop, job }) { total: job.job_totals.totals.federal_tax } ], - promanager: "USE_ROME", rome: job.job_totals.totals.us_sales_tax_breakdown ? [ { @@ -149,7 +148,6 @@ export function JobTotalsTableTotals({ bodyshop, job }) { } ], rome: [], - promanager: "USE_ROME" }), { key: t("jobs.fields.other_amount_payable"), diff --git a/client/src/components/jobs-admin-delete-intake/jobs-admin-delete-intake.component.jsx b/client/src/components/jobs-admin-delete-intake/jobs-admin-delete-intake.component.jsx index 70e1b9ad3..3277375a8 100644 --- a/client/src/components/jobs-admin-delete-intake/jobs-admin-delete-intake.component.jsx +++ b/client/src/components/jobs-admin-delete-intake/jobs-admin-delete-intake.component.jsx @@ -51,7 +51,6 @@ export default function JobAdminDeleteIntake({ job }) { const InstanceRender = InstanceRenderManager({ imex: true, rome: "USE_IMEX", - promanager: false }); return InstanceRender ? ( diff --git a/client/src/components/jobs-available-table/jobs-available-table.container.jsx b/client/src/components/jobs-available-table/jobs-available-table.container.jsx index d9964d090..27f76ad82 100644 --- a/client/src/components/jobs-available-table/jobs-available-table.container.jsx +++ b/client/src/components/jobs-available-table/jobs-available-table.container.jsx @@ -110,8 +110,7 @@ export function JobsAvailableContainer({ bodyshop, currentUser, insertAuditTrail InstanceRenderManager({ executeFunction: true, rome: ResolveCCCLineIssues, - args: [estData.est_data, bodyshop], - promanager: ResolveCCCLineIssues + args: [estData.est_data, bodyshop] }); // } else { @@ -121,7 +120,7 @@ export function JobsAvailableContainer({ bodyshop, currentUser, insertAuditTrail executeFunction: true, imex: CheckTaxRates, rome: CheckTaxRatesUSA, - promanager: CheckTaxRatesUSA, + args: [estData.est_data, bodyshop] }); @@ -236,7 +235,7 @@ export function JobsAvailableContainer({ bodyshop, currentUser, insertAuditTrail await InstanceRenderManager({ executeFunction: true, rome: ResolveCCCLineIssues, - promanager: ResolveCCCLineIssues, + args: [supp, bodyshop] }); @@ -244,7 +243,7 @@ export function JobsAvailableContainer({ bodyshop, currentUser, insertAuditTrail executeFunction: true, imex: CheckTaxRates, rome: CheckTaxRatesUSA, - promanager: CheckTaxRatesUSA, + args: [supp, bodyshop] }); @@ -585,14 +584,13 @@ function ResolveCCCLineIssues(estData, bodyshop) { // line.notes += ` | ET/UT Update (prev = ${line.mod_lbr_ty})`; line.mod_lbr_ty = "LAR"; } - }, - promanager: "USE_ROME" + } }); }); //Group by line no // For everything but the first one, strip out the price number in - + //TODO: How do we merge these 2 functions together and have it function properly for Rome? InstanceRenderManager({ executeFunction: true, args: [], diff --git a/client/src/components/jobs-close-auto-allocate/jobs-close-auto-allocate.component.jsx b/client/src/components/jobs-close-auto-allocate/jobs-close-auto-allocate.component.jsx index f90e75d32..16477501c 100644 --- a/client/src/components/jobs-close-auto-allocate/jobs-close-auto-allocate.component.jsx +++ b/client/src/components/jobs-close-auto-allocate/jobs-close-auto-allocate.component.jsx @@ -33,7 +33,6 @@ export function JobsCloseAutoAllocate({ bodyshop, joblines, form, disabled }) { InstanceRenderManager({ imex: !jl.part_type && !jl.mod_lbr_ty, rome: !ret.profitcenter_part, - promanager: "USE_ROME" }) ) { const lineDesc = jl.line_desc ? jl.line_desc.toLowerCase() : ""; diff --git a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx index 833594604..941de644b 100644 --- a/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx +++ b/client/src/components/jobs-convert-button/jobs-convert-button.component.jsx @@ -151,8 +151,7 @@ export function JobsConvertButton({ bodyshop, job, refetch, jobRO, insertAuditTr label={t( InstanceRenderManager({ imex: "jobs.fields.employee_csr", - rome: "jobs.fields.employee_csr_writer", - promanager: "USE_ROME" + rome: "jobs.fields.employee_csr_writer" }) )} rules={[ diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx index c9c3b8fb7..3aca43488 100644 --- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx +++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx @@ -670,48 +670,50 @@ export function JobsDetailHeaderActions({ }, ...InstanceRenderManager({ imex: [ - { - key: "intake", - id: "job-actions-intake", - disabled: !!job.intakechecklist || !jobInPreProduction || !job.converted || jobRO, - label: - !!job.intakechecklist || !jobInPreProduction || !job.converted || jobRO ? ( - t("jobs.actions.intake") - ) : ( - {t("jobs.actions.intake")} - ) - }, - { - key: "deliver", - id: "job-actions-deliver", - disabled: !jobInProduction || jobRO, - label: !jobInProduction ? ( - t("jobs.actions.deliver") - ) : ( - {t("jobs.actions.deliver")} - ) - }, - { - key: "checklist", - id: "job-actions-checklist", - disabled: !job.converted, - label: {t("jobs.actions.viewchecklist")} - } + ...(HasFeatureAccess({ featureName: "checklist", bodyshop }) + ? [ + { + key: "intake", + id: "job-actions-intake", + disabled: !!job.intakechecklist || !jobInPreProduction || !job.converted || jobRO, + label: + !!job.intakechecklist || !jobInPreProduction || !job.converted || jobRO ? ( + t("jobs.actions.intake") + ) : ( + {t("jobs.actions.intake")} + ) + }, + { + key: "deliver", + id: "job-actions-deliver", + disabled: !jobInProduction || jobRO, + label: !jobInProduction ? ( + t("jobs.actions.deliver") + ) : ( + {t("jobs.actions.deliver")} + ) + }, + { + key: "checklist", + id: "job-actions-checklist", + disabled: !job.converted, + label: {t("jobs.actions.viewchecklist")} + } + ] + : [ + { + key: "toggleproduction", + id: "job-actions-toggleproduction", + disabled: !job.converted || jobRO, + label: + } + ]) ], - rome: "USE_IMEX", - promanager: [ - { - key: "toggleproduction", - id: "job-actions-toggleproduction", - disabled: !job.converted || jobRO, - label: - } - ] + rome: "USE_IMEX" }), ...(InstanceRenderManager({ - imex: true, - rome: "USE_IMEX", - promanager: HasFeatureAccess({ featureName: "timetickets", bodyshop }) + imex: HasFeatureAccess({ featureName: "timetickets", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -881,9 +883,8 @@ export function JobsDetailHeaderActions({ ] }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "bills", bodyshop }) + imex: HasFeatureAccess({ featureName: "bills", bodyshop }), + rome: "USE_IMEX" }) ? [ { @@ -964,9 +965,8 @@ export function JobsDetailHeaderActions({ if ( InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "export", bodyshop }) + imex: HasFeatureAccess({ featureName: "export", bodyshop }), + rome: "USE_IMEX" }) ) { menuItems.push({ diff --git a/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx b/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx index f056f603d..98a76f7b5 100644 --- a/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx +++ b/client/src/components/jobs-detail-rates/jobs-detail-rates.component.jsx @@ -194,8 +194,7 @@ export function JobsDetailRates({ jobRO, form, job, bodyshop }) { - ), - promanager: "USE_ROME" + ) })} ); diff --git a/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx b/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx index 825958cfb..d4d39c6a2 100644 --- a/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx +++ b/client/src/components/jobs-detail-rates/jobs-detail-rates.parts.component.jsx @@ -989,7 +989,7 @@ export function JobsDetailRatesParts({ jobRO, expanded, required = true, form }) - {InstanceRenderManager({ imex: true, rome: false, promanager: "USE_ROME" }) ? ( + {InstanceRenderManager({ imex: true, rome: false }) ? ( <> @@ -1002,7 +1002,7 @@ export function JobsDetailRatesParts({ jobRO, expanded, required = true, form }) - {InstanceRenderManager({ imex: true, rome: false, promanager: "USE_ROME" }) ? ( + {InstanceRenderManager({ imex: true, rome: false }) ? ( diff --git a/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js b/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js index c9a8c59c6..ff48e00ba 100644 --- a/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js +++ b/client/src/components/production-board-kanban/settings/defaultKanbanSettings.js @@ -12,8 +12,7 @@ const statisticsItems = [ name: "totalHrsOnBoard", label: InstanceRenderManager({ imex: "total_hours_in_view", - rome: "total_hours_on_board", - promanager: "total_hours_on_board" + rome: "total_hours_on_board" }) }, { @@ -21,8 +20,7 @@ const statisticsItems = [ name: "totalAmountOnBoard", label: InstanceRenderManager({ imex: "total_amount_in_view", - rome: "total_amount_on_board", - promanager: "total_amount_on_board" + rome: "total_amount_on_board" }) }, { @@ -30,8 +28,7 @@ const statisticsItems = [ name: "totalLABOnBoard", label: InstanceRenderManager({ imex: "total_lab_in_view", - rome: "total_lab_on_board", - promanager: "total_lab_on_board" + rome: "total_lab_on_board" }) }, { @@ -39,8 +36,7 @@ const statisticsItems = [ name: "totalLAROnBoard", label: InstanceRenderManager({ imex: "total_lar_in_view", - rome: "total_lar_on_board", - promanager: "total_lar_on_board" + rome: "total_lar_on_board" }) }, { @@ -48,8 +44,7 @@ const statisticsItems = [ name: "jobsOnBoard", label: InstanceRenderManager({ imex: "total_jobs_in_view", - rome: "total_jobs_on_board", - promanager: "total_jobs_on_board" + rome: "total_jobs_on_board" }) }, { @@ -57,8 +52,7 @@ const statisticsItems = [ name: "tasksOnBoard", label: InstanceRenderManager({ imex: "tasks_in_view", - rome: "tasks_on_board", - promanager: "tasks_on_board" + rome: "tasks_on_board" }) }, { id: 11, name: "tasksInProduction", label: "tasks_in_production" } diff --git a/client/src/components/production-list-columns/production-list-columns.data.jsx b/client/src/components/production-list-columns/production-list-columns.data.jsx index 950d956af..d120e6ce2 100644 --- a/client/src/components/production-list-columns/production-list-columns.data.jsx +++ b/client/src/components/production-list-columns/production-list-columns.data.jsx @@ -466,8 +466,7 @@ const r = ({ technician, state, activeStatuses, data, bodyshop, refetch, treatme title: i18n.t( InstanceRenderManager({ imex: "jobs.fields.employee_csr", - rome: "jobs.fields.employee_csr_writer", - promanager: "USE_ROME" + rome: "jobs.fields.employee_csr_writer" }) ), dataIndex: "employee_csr", diff --git a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx index 9a83f7cae..c77cd9ce6 100644 --- a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx @@ -17,6 +17,7 @@ import OwnerNameDisplay from "../owner-name-display/owner-name-display.component import ScheduleBlockDay from "../schedule-block-day/schedule-block-day.component"; import ScheduleCalendarHeaderGraph from "./schedule-calendar-header-graph.component"; import InstanceRenderMgr from "../../utils/instanceRenderMgr"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -60,8 +61,7 @@ export function ScheduleCalendarHeaderComponent({ loadData.allJobsOut.map((j) => ( - {j.ro_number} ( - {j.status}) + {j.ro_number} ({j.status}) @@ -69,23 +69,18 @@ export function ScheduleCalendarHeaderComponent({ {`(${j.labhrs?.aggregate?.sum?.mod_lb_hrs?.toFixed(1) || 0}/${ j.larhrs?.aggregate?.sum?.mod_lb_hrs?.toFixed(1) || 0 - }/${( - j.labhrs.aggregate?.sum?.mod_lb_hrs + - j.larhrs.aggregate?.sum?.mod_lb_hrs - ).toFixed(1)} ${t("general.labels.hours")})`} + }/${(j.labhrs.aggregate?.sum?.mod_lb_hrs + j.larhrs.aggregate?.sum?.mod_lb_hrs).toFixed( + 1 + )} ${t("general.labels.hours")})`} - - {j.scheduled_completion} - + {j.scheduled_completion} )) ) : ( - - {t("appointments.labels.nocompletingjobs")} - + {t("appointments.labels.nocompletingjobs")} )} @@ -109,10 +104,9 @@ export function ScheduleCalendarHeaderComponent({ {`(${j.labhrs?.aggregate?.sum.mod_lb_hrs?.toFixed(1) || 0}/${ j.larhrs?.aggregate?.sum?.mod_lb_hrs?.toFixed(1) || 0 - }/${( - j.labhrs?.aggregate?.sum?.mod_lb_hrs + - j.larhrs?.aggregate?.sum?.mod_lb_hrs - ).toFixed(1)} ${t("general.labels.hours")})`} + }/${(j.labhrs?.aggregate?.sum?.mod_lb_hrs + j.larhrs?.aggregate?.sum?.mod_lb_hrs).toFixed( + 1 + )} ${t("general.labels.hours")})`} {j.scheduled_in} @@ -121,9 +115,7 @@ export function ScheduleCalendarHeaderComponent({ )) ) : ( - - {t("appointments.labels.noarrivingjobs")} - + {t("appointments.labels.noarrivingjobs")} )} @@ -133,33 +125,30 @@ export function ScheduleCalendarHeaderComponent({ const LoadComponent = loadData ? (
- - - - {(loadData.allHoursInBody || 0) && - loadData.allHoursInBody.toFixed(1)} - / - {(loadData.allHoursInRefinish || 0) && - loadData.allHoursInRefinish.toFixed(1)} - /{(loadData.allHoursIn || 0) && loadData.allHoursIn.toFixed(1)} - - - - {(loadData.allHoursOut || 0) && loadData.allHoursOut.toFixed(1)} - - - - + + + + {(loadData.allHoursInBody || 0) && loadData.allHoursInBody.toFixed(1)}/ + {(loadData.allHoursInRefinish || 0) && loadData.allHoursInRefinish.toFixed(1)}/ + {(loadData.allHoursIn || 0) && loadData.allHoursIn.toFixed(1)} + + + + {(loadData.allHoursOut || 0) && loadData.allHoursOut.toFixed(1)} + + + +
    {Object.keys(ATSToday).map((key, idx) => ( @@ -208,9 +197,16 @@ export function ScheduleCalendarHeaderComponent({
    {label} {InstanceRenderMgr({ - imex: calculating ? : LoadComponent, - rome: "USE_IMEX", - promanager: <> + imex: HasFeatureAccess({ featureName: "smartscheduling", bodyshop }) ? ( + calculating ? ( + + ) : ( + LoadComponent + ) + ) : ( + <> + ), + rome: "USE_IMEX" })}
    diff --git a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx index 4d6f8fe78..50cbdd8de 100644 --- a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx @@ -15,6 +15,7 @@ import { Alert, Collapse, Space } from "antd"; import { Trans, useTranslation } from "react-i18next"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import local from "./localizer"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -54,58 +55,58 @@ export function ScheduleCalendarWrapperComponent({ return ( <> - {InstanceRenderManager({ - imex: - problemJobs && problemJobs.length > 2 ? ( - - {t("appointments.labels.severalerrorsfound")}} - > - - {problemJobs.map((problem) => ( - ]} - values={{ - ro_number: problem.ro_number, - code: problem.code - }} - /> - } - /> - ))} - - - - ) : ( - - {problemJobs.map((problem) => ( - ]} - values={{ - ro_number: problem.ro_number, - code: problem.code - }} - /> - } - /> - ))} - - ), + {HasFeatureAccess({ featureName: "smartscheduling", bodyshop }) && + InstanceRenderManager({ + imex: + problemJobs && problemJobs.length > 2 ? ( + + {t("appointments.labels.severalerrorsfound")}} + > + + {problemJobs.map((problem) => ( + ]} + values={{ + ro_number: problem.ro_number, + code: problem.code + }} + /> + } + /> + ))} + + + + ) : ( + + {problemJobs.map((problem) => ( + ]} + values={{ + ro_number: problem.ro_number, + code: problem.code + }} + /> + } + /> + ))} + + ), - rome: "USE_IMEX", - promanager: - })} + rome: "USE_IMEX" + })} - {InstanceRenderManager({ - imex: ( - <> - {t("appointments.labels.smartscheduling")} - - + {smartOptions.map((d, idx) => ( + - {smartOptions.map((d, idx) => ( - - ))} - - - ), - rome: "USE_IMEX", - promanager: <> - })} - + ))} + + + )} + , diff --git a/client/src/components/shop-info/shop-info.component.jsx b/client/src/components/shop-info/shop-info.component.jsx index fe09d2220..4903348ca 100644 --- a/client/src/components/shop-info/shop-info.component.jsx +++ b/client/src/components/shop-info/shop-info.component.jsx @@ -21,6 +21,7 @@ import queryString from "query-string"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import ShopInfoRoGuard from "./shop-info.roguard.component"; import ShopInfoIntellipay from "./shop-intellipay-config.component"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -87,18 +88,16 @@ export function ShopInfoComponent({ bodyshop, form, saveLoading }) { children: , id: "tab-shop-responsibilitycenters" }, - ...InstanceRenderManager({ - imex: [ - { - key: "checklists", - label: t("bodyshop.labels.checklists"), - children: , - id: "tab-shop-checklists" - } - ], - rome: "USE_IMEX", - promanager: [] - }), + ...(HasFeatureAccess({ featureName: "checklists", bodyshop }) + ? [ + { + key: "checklists", + label: t("bodyshop.labels.checklists"), + children: , + id: "tab-shop-checklists" + } + ] + : []), { key: "laborrates", label: t("bodyshop.labels.laborrates"), @@ -125,29 +124,22 @@ export function ShopInfoComponent({ bodyshop, form, saveLoading }) { } ] : []), - ...InstanceRenderManager({ - imex: [ - { - key: "roguard", - label: t("bodyshop.labels.roguard.title"), - children: , - id: "tab-shop-roguard" - } - ], - rome: "USE_IMEX", - promanager: [] - }), - ...InstanceRenderManager({ - imex: [], - rome: [ - { - key: "intellipay", - label: InstanceRenderManager({ rome: t("bodyshop.labels.romepay"), imex: t("bodyshop.labels.imexpay") }), - children: - } - ], - promanager: [] - }) + ...(HasFeatureAccess({ featureName: "roguard", bodyshop }) + ? [ + { + key: "roguard", + label: t("bodyshop.labels.roguard.title"), + children: , + id: "tab-shop-roguard" + } + ] + : []), + + { + key: "intellipay", + label: InstanceRenderManager({ rome: t("bodyshop.labels.romepay"), imex: t("bodyshop.labels.imexpay") }), + children: + } ]; return ( - ), - promanager: "USE_ROME" + ) })} {/**/} diff --git a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx index b587deb5a..de3832311 100644 --- a/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx +++ b/client/src/components/shop-info/shop-info.responsibilitycenters.taxes.component.jsx @@ -2034,7 +2034,7 @@ export function ShopInfoResponsibilityCenters({ bodyshop, form }) { - {InstanceRenderManager({ imex: true, rome: false, promanager: "USE_ROME" }) ? ( + {InstanceRenderManager({ imex: true, rome: false }) ? ( <> - {InstanceRenderManager({ imex: true, rome: false, promanager: "USE_ROME" }) ? ( + {InstanceRenderManager({ imex: true, rome: false }) ? ( diff --git a/client/src/components/shop-info/shop-info.scheduling.component.jsx b/client/src/components/shop-info/shop-info.scheduling.component.jsx index b441db818..36fd0e6d1 100644 --- a/client/src/components/shop-info/shop-info.scheduling.component.jsx +++ b/client/src/components/shop-info/shop-info.scheduling.component.jsx @@ -2,13 +2,23 @@ import { DeleteFilled } from "@ant-design/icons"; import { Button, Divider, Form, Input, InputNumber, Select, Space, Switch, TimePicker } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import ColorpickerFormItemComponent from "../form-items-formatted/colorpicker-form-item.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import { ColorPicker } from "./shop-info.rostatus.component"; -import InstanceRenderManager from "../../utils/instanceRenderMgr"; -export default function ShopInfoSchedulingComponent({ form }) { +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { selectBodyshop } from "../../redux/user/user.selectors"; +const mapStateToProps = createStructuredSelector({ + bodyshop: selectBodyshop +}); +const mapDispatchToProps = (dispatch) => ({ + //setUserLanguage: language => dispatch(setUserLanguage(language)) +}); + +export function ShopInfoSchedulingComponent({ form, bodyshop }) { const { t } = useTranslation(); return ( @@ -167,138 +177,136 @@ export default function ShopInfoSchedulingComponent({ form }) { }} - {InstanceRenderManager({ - imex: ( - - - {(fields, { add, remove, move }) => { - return ( -
    - {fields.map((field, index) => ( - - - - - - - - + {HasFeatureAccess({ featureName: "smartscheduling", bodyshop }) && ( + + + {(fields, { add, remove, move }) => { + return ( +
    + {fields.map((field, index) => ( + + + + + + + + + + + + + + + + + + + + + + {t("bodyshop.fields.ssbuckets.color")} + + + } + key={`${index}color`} + name={[field.name, "color"]} > - + - - - - - - - - - - - - {t("bodyshop.fields.ssbuckets.color")} - - - } - key={`${index}color`} - name={[field.name, "color"]} - > - - - - { - remove(field.name); - }} - /> - - + + { + remove(field.name); + }} + /> + - - - ))} - - + + -
    - ); - }} -
    -
    - ), - rome: "USE_IMEX", - promanager: null - })} + ))} + + + +
    + ); + }} +
    +
    + )}
); } + +export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoSchedulingComponent); diff --git a/client/src/components/sign-in-form/sign-in-form.component.jsx b/client/src/components/sign-in-form/sign-in-form.component.jsx index 0319cff6a..d39128af4 100644 --- a/client/src/components/sign-in-form/sign-in-form.component.jsx +++ b/client/src/components/sign-in-form/sign-in-form.component.jsx @@ -8,10 +8,9 @@ import { Link, useLocation, useNavigate } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import RomeLogo from "../../assets/RomeOnlineBlue.png"; import ImEXOnlineLogo from "../../assets/logo192.png"; -import ProManagerLogo from "../../assets/promanager/ProManagerLogo.gif"; -import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { emailSignInStart, sendPasswordReset } from "../../redux/user/user.actions"; import { selectCurrentUser, selectLoginLoading, selectSignInError } from "../../redux/user/user.selectors"; +import InstanceRenderManager from "../../utils/instanceRenderMgr"; import AlertComponent from "../alert/alert.component"; import "./sign-in-form.styles.scss"; @@ -49,21 +48,18 @@ export function SignInComponent({ emailSignInStart, currentUser, signInError, se {InstanceRenderManager({ {InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: null + rome: t("titles.romeonline") })}
diff --git a/client/src/components/tech-login/tech-login.component.jsx b/client/src/components/tech-login/tech-login.component.jsx index 4ebcc34e4..da3ad7b32 100644 --- a/client/src/components/tech-login/tech-login.component.jsx +++ b/client/src/components/tech-login/tech-login.component.jsx @@ -37,8 +37,7 @@ export function TechLogin({ technician, loginError, loginLoading, techLoginStart document.title = t("titles.techconsole", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); }, [t]); diff --git a/client/src/components/update-alert/update-alert.component.jsx b/client/src/components/update-alert/update-alert.component.jsx index 32f80ea79..1f525a479 100644 --- a/client/src/components/update-alert/update-alert.component.jsx +++ b/client/src/components/update-alert/update-alert.component.jsx @@ -76,8 +76,7 @@ export function UpdateAlert({ updateAvailable }) { time: (timeLeft / 1000).toFixed(0), app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }), placement: "bottomRight" @@ -95,8 +94,7 @@ export function UpdateAlert({ updateAvailable }) { message={t("general.messages.newversiontitle", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} showIcon @@ -107,8 +105,7 @@ export function UpdateAlert({ updateAvailable }) { {t("general.messages.newversionmessage", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} diff --git a/client/src/components/user-request-pw-reset/user-request-reset-pw.component.jsx b/client/src/components/user-request-pw-reset/user-request-reset-pw.component.jsx index ce888ed64..38abe4936 100644 --- a/client/src/components/user-request-pw-reset/user-request-reset-pw.component.jsx +++ b/client/src/components/user-request-pw-reset/user-request-reset-pw.component.jsx @@ -55,15 +55,13 @@ export function UserRequestResetPw({ passwordReset, sendPasswordReset, sendPassw width="100" alt={InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") })} /> {InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") })} diff --git a/client/src/components/user-validate-pw-reset/user-validate-pw-reset.component.jsx b/client/src/components/user-validate-pw-reset/user-validate-pw-reset.component.jsx index 4ea899d01..9512a5668 100644 --- a/client/src/components/user-validate-pw-reset/user-validate-pw-reset.component.jsx +++ b/client/src/components/user-validate-pw-reset/user-validate-pw-reset.component.jsx @@ -75,16 +75,14 @@ export function UserValidatePwReset({ passwordReset, validatePasswordReset, oobC width={100} alt={InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") })} /> {InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") })} diff --git a/client/src/index.jsx b/client/src/index.jsx index a5a4149cb..9f864272f 100644 --- a/client/src/index.jsx +++ b/client/src/index.jsx @@ -31,8 +31,7 @@ if (import.meta.env.PROD) { Sentry.init({ dsn: InstanceRenderManager({ imex: "https://fd7e89369b6b4bdc9c6c4c9f22fa4ee4@o492140.ingest.sentry.io/5651027", - rome: "https://a6acc91c073e414196014b8484627a61@o492140.ingest.sentry.io/4504561071161344", - promanager: "" //TODO:AIO Add in the sentry tracker for proman. + rome: "https://a6acc91c073e414196014b8484627a61@o492140.ingest.sentry.io/4504561071161344" //TODO:AIO Add in the sentry tracker for proman. }), ignoreErrors: [ diff --git a/client/src/pages/accounting-payables/accounting-payables.container.jsx b/client/src/pages/accounting-payables/accounting-payables.container.jsx index 1055b21af..0a9e53ba8 100644 --- a/client/src/pages/accounting-payables/accounting-payables.container.jsx +++ b/client/src/pages/accounting-payables/accounting-payables.container.jsx @@ -31,8 +31,7 @@ export function AccountingPayablesContainer({ bodyshop, setBreadcrumbs, setSelec document.title = t("titles.accounting-payables", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("payables"); diff --git a/client/src/pages/accounting-payments/accounting-payments.container.jsx b/client/src/pages/accounting-payments/accounting-payments.container.jsx index 77c6157fa..b89c05a09 100644 --- a/client/src/pages/accounting-payments/accounting-payments.container.jsx +++ b/client/src/pages/accounting-payments/accounting-payments.container.jsx @@ -31,8 +31,7 @@ export function AccountingPaymentsContainer({ bodyshop, setBreadcrumbs, setSelec document.title = t("titles.accounting-payments", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("payments"); diff --git a/client/src/pages/accounting-receivables/accounting-receivables.container.jsx b/client/src/pages/accounting-receivables/accounting-receivables.container.jsx index e1485a3a9..67f70837c 100644 --- a/client/src/pages/accounting-receivables/accounting-receivables.container.jsx +++ b/client/src/pages/accounting-receivables/accounting-receivables.container.jsx @@ -31,8 +31,7 @@ export function AccountingReceivablesContainer({ bodyshop, setBreadcrumbs, setSe document.title = t("titles.accounting-receivables", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("receivables"); diff --git a/client/src/pages/bills/bills.page.container.jsx b/client/src/pages/bills/bills.page.container.jsx index bf2dde4d5..fe4a6d26c 100644 --- a/client/src/pages/bills/bills.page.container.jsx +++ b/client/src/pages/bills/bills.page.container.jsx @@ -28,8 +28,7 @@ export function BillsPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.bills-list", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("bills"); diff --git a/client/src/pages/contract-create/contract-create.page.container.jsx b/client/src/pages/contract-create/contract-create.page.container.jsx index 7487780ab..57b06a7aa 100644 --- a/client/src/pages/contract-create/contract-create.page.container.jsx +++ b/client/src/pages/contract-create/contract-create.page.container.jsx @@ -5,14 +5,14 @@ import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { useLocation, useNavigate } from "react-router-dom"; import { createStructuredSelector } from "reselect"; +import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component"; import { INSERT_NEW_CONTRACT } from "../../graphql/cccontracts.queries"; import { UPDATE_JOB } from "../../graphql/jobs.queries"; import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import ContractCreatePageComponent from "./contract-create.page.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; +import ContractCreatePageComponent from "./contract-create.page.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -102,8 +102,7 @@ export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs, setSelec document.title = t("titles.contracts-create", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("newcontract"); diff --git a/client/src/pages/contract-detail/contract-detail.page.container.jsx b/client/src/pages/contract-detail/contract-detail.page.container.jsx index 4b6bd8d84..d4234f76d 100644 --- a/client/src/pages/contract-detail/contract-detail.page.container.jsx +++ b/client/src/pages/contract-detail/contract-detail.page.container.jsx @@ -41,14 +41,12 @@ export function ContractDetailPageContainer({ setBreadcrumbs, addRecentItem, set document.title = loading ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : error ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : t("titles.contracts-detail", { id: (data && data.cccontracts_by_pk && data.cccontracts_by_pk.agreementnumber) || "" diff --git a/client/src/pages/contracts/contracts.page.container.jsx b/client/src/pages/contracts/contracts.page.container.jsx index 4653f654d..9865220d1 100644 --- a/client/src/pages/contracts/contracts.page.container.jsx +++ b/client/src/pages/contracts/contracts.page.container.jsx @@ -41,8 +41,7 @@ export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.contracts", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("contracts"); diff --git a/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx b/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx index 105d001c2..9d85dc62a 100644 --- a/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx +++ b/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx @@ -55,8 +55,7 @@ export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs, setSelect document.title = t("titles.courtesycars-create", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setBreadcrumbs([ @@ -72,11 +71,7 @@ export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs, setSelect
- +
diff --git a/client/src/pages/courtesy-car-detail/courtesy-car-detail.page.container.jsx b/client/src/pages/courtesy-car-detail/courtesy-car-detail.page.container.jsx index 8fc7efe6b..5fd1dc4b0 100644 --- a/client/src/pages/courtesy-car-detail/courtesy-car-detail.page.container.jsx +++ b/client/src/pages/courtesy-car-detail/courtesy-car-detail.page.container.jsx @@ -54,20 +54,17 @@ export function CourtesyCarDetailPageContainer({ setBreadcrumbs, addRecentItem, document.title = loading ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : error ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : t("titles.courtesycars-detail", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), id: (data && data.courtesycars_by_pk && data.courtesycars_by_pk.fleet_number) || "" }); diff --git a/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx b/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx index 607242570..953bf952e 100644 --- a/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx +++ b/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx @@ -25,8 +25,7 @@ export function CourtesyCarsPageContainer({ setBreadcrumbs, setSelectedHeader }) document.title = t("titles.courtesycars", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("courtesycarsall"); diff --git a/client/src/pages/csi/csi.container.page.jsx b/client/src/pages/csi/csi.container.page.jsx index 7e4857d1b..e3240ad38 100644 --- a/client/src/pages/csi/csi.container.page.jsx +++ b/client/src/pages/csi/csi.container.page.jsx @@ -70,15 +70,13 @@ export function CsiContainerPage({ currentUser }) { title={t("csi.labels.nologgedinuser", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} subTitle={t("csi.labels.nologgedinuser_sub", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} /> diff --git a/client/src/pages/dashboard/dashboard.container.jsx b/client/src/pages/dashboard/dashboard.container.jsx index 6094d678d..b608019ad 100644 --- a/client/src/pages/dashboard/dashboard.container.jsx +++ b/client/src/pages/dashboard/dashboard.container.jsx @@ -19,8 +19,7 @@ export function ExportsLogPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.dashboard", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("dashboard"); diff --git a/client/src/pages/disclaimer/disclaimer.page.jsx b/client/src/pages/disclaimer/disclaimer.page.jsx index c6315e3d4..14593ac4d 100644 --- a/client/src/pages/disclaimer/disclaimer.page.jsx +++ b/client/src/pages/disclaimer/disclaimer.page.jsx @@ -9,9 +9,8 @@ export default function AboutPage() {
{`${InstanceRenderMgr({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") - })}Rome Online V.${import.meta.env.MODE}-${import.meta.env.VITE_APP_GIT_SHA}`} + rome: t("titles.romeonline") + })} V.${import.meta.env.MODE}-${import.meta.env.VITE_APP_GIT_SHA}`} Third Party Notices Application diff --git a/client/src/pages/dms-payables/dms-payables.container.jsx b/client/src/pages/dms-payables/dms-payables.container.jsx index 4fa92b9fb..21fd0f19e 100644 --- a/client/src/pages/dms-payables/dms-payables.container.jsx +++ b/client/src/pages/dms-payables/dms-payables.container.jsx @@ -46,8 +46,7 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.dms", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("dms"); diff --git a/client/src/pages/dms/dms.container.jsx b/client/src/pages/dms/dms.container.jsx index 3a8ac77b0..3b9fe6e42 100644 --- a/client/src/pages/dms/dms.container.jsx +++ b/client/src/pages/dms/dms.container.jsx @@ -65,8 +65,7 @@ export function DmsContainer({ bodyshop, setBreadcrumbs, setSelectedHeader, inse document.title = t("titles.dms", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("dms"); diff --git a/client/src/pages/export-logs/export-logs.page.container.jsx b/client/src/pages/export-logs/export-logs.page.container.jsx index 885577b95..0d0845c99 100644 --- a/client/src/pages/export-logs/export-logs.page.container.jsx +++ b/client/src/pages/export-logs/export-logs.page.container.jsx @@ -19,8 +19,7 @@ export function ExportsLogPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.export-logs", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("export-logs"); diff --git a/client/src/pages/inventory/inventory.page.jsx b/client/src/pages/inventory/inventory.page.jsx index a6a1f128c..2b74e608d 100644 --- a/client/src/pages/inventory/inventory.page.jsx +++ b/client/src/pages/inventory/inventory.page.jsx @@ -19,8 +19,7 @@ export function InventoryPage({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.inventory", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("inventory"); diff --git a/client/src/pages/jobs-admin/jobs-admin.page.jsx b/client/src/pages/jobs-admin/jobs-admin.page.jsx index 03d726efd..c7c78ec95 100644 --- a/client/src/pages/jobs-admin/jobs-admin.page.jsx +++ b/client/src/pages/jobs-admin/jobs-admin.page.jsx @@ -52,8 +52,7 @@ export function JobsCloseContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.jobs-admin", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), ro_number: data ? data.jobs_by_pk && data.jobs_by_pk.ro_number : null }); diff --git a/client/src/pages/jobs-all/jobs-all.container.jsx b/client/src/pages/jobs-all/jobs-all.container.jsx index 88adc7921..d6c75544b 100644 --- a/client/src/pages/jobs-all/jobs-all.container.jsx +++ b/client/src/pages/jobs-all/jobs-all.container.jsx @@ -47,8 +47,7 @@ export function AllJobs({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.jobs-all", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("alljobs"); diff --git a/client/src/pages/jobs-available/jobs-available.page.container.jsx b/client/src/pages/jobs-available/jobs-available.page.container.jsx index bb17df1bf..9cbd509de 100644 --- a/client/src/pages/jobs-available/jobs-available.page.container.jsx +++ b/client/src/pages/jobs-available/jobs-available.page.container.jsx @@ -29,8 +29,7 @@ export function JobsAvailablePageContainer({ partnerVersion, setBreadcrumbs, set document.title = t("titles.jobsavailable", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("availablejobs"); @@ -55,8 +54,7 @@ export function JobsAvailablePageContainer({ partnerVersion, setBreadcrumbs, set @@ -66,7 +64,6 @@ export function JobsAvailablePageContainer({ partnerVersion, setBreadcrumbs, set app: InstanceRenderManager({ imex: "$t(titles.imexonline)", rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" }) })} /> diff --git a/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx b/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx index f25bace38..c9eda5480 100644 --- a/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx +++ b/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx @@ -37,8 +37,7 @@ export function JobsChecklistViewContainer({ bodyshop, setBreadcrumbs, setSelect document.title = t("titles.jobs-checklist", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("activejobs"); diff --git a/client/src/pages/jobs-close/jobs-close.container.jsx b/client/src/pages/jobs-close/jobs-close.container.jsx index ad47ae676..e237fab9f 100644 --- a/client/src/pages/jobs-close/jobs-close.container.jsx +++ b/client/src/pages/jobs-close/jobs-close.container.jsx @@ -39,8 +39,7 @@ export function JobsCloseContainer({ setBreadcrumbs, setSelectedHeader, setJobRe document.title = t("titles.jobs-close", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), number: data ? data.jobs_by_pk && data.jobs_by_pk.ro_number : null }); diff --git a/client/src/pages/jobs-create/jobs-create.container.jsx b/client/src/pages/jobs-create/jobs-create.container.jsx index 2347f8f9a..9602a2f94 100644 --- a/client/src/pages/jobs-create/jobs-create.container.jsx +++ b/client/src/pages/jobs-create/jobs-create.container.jsx @@ -56,8 +56,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.jobs-create", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("newjob"); @@ -280,8 +279,7 @@ function JobsCreateContainer({ bodyshop, setBreadcrumbs, setSelectedHeader }) { tax_sub_rt: bodyshop.md_responsibility_centers.tax_sub_rt, tax_lbr_rt: bodyshop.md_responsibility_centers.tax_lbr_rt, tax_levies_rt: bodyshop.md_responsibility_centers.tax_levies_rt - }, - promanager: "USE_ROME" + } }) }} > diff --git a/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx b/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx index 1535936e9..44f82fd21 100644 --- a/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx +++ b/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx @@ -35,8 +35,7 @@ export function JobsDeliverContainer({ bodyshop, setBreadcrumbs, setSelectedHead document.title = t("titles.jobs-deliver", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("activejobs"); diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx index a82da973c..3592b46ad 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -390,9 +390,8 @@ export function JobsDetailPage({ ) }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "timetickets", bodyshop }) + rome: "USE_IMEX", + imex: HasFeatureAccess({ featureName: "timetickets", bodyshop }) }) ? [ { @@ -420,9 +419,8 @@ export function JobsDetailPage({ children: }, ...(InstanceRenderManager({ - imex: true, - rome: true, - promanager: HasFeatureAccess({ featureName: "media", bodyshop }) + rome: "USE_IMEX", + imex: HasFeatureAccess({ featureName: "media", bodyshop }) }) ? [ { diff --git a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx index 5ac3cfc74..814e0208a 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.container.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.container.jsx @@ -18,9 +18,9 @@ import { } from "../../redux/application/application.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { CreateRecentItem } from "../../utils/create-recent-item"; +import InstanceRenderManager from "../../utils/instanceRenderMgr"; import IsJobReadOnly from "../../utils/jobReadOnly"; import JobsDetailPage from "./jobs-detail.page.component"; -import InstanceRenderManager from "../../utils/instanceRenderMgr"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -49,20 +49,17 @@ function JobsDetailPageContainer({ setBreadcrumbs, addRecentItem, setSelectedHea document.title = loading ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : error ? InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }) : t("titles.jobsdetail", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), ro_number: (data.jobs_by_pk && data.jobs_by_pk.ro_number) || t("general.labels.na") }); diff --git a/client/src/pages/jobs-intake/jobs-intake.page.container.jsx b/client/src/pages/jobs-intake/jobs-intake.page.container.jsx index a0a5bae84..507a23cf7 100644 --- a/client/src/pages/jobs-intake/jobs-intake.page.container.jsx +++ b/client/src/pages/jobs-intake/jobs-intake.page.container.jsx @@ -37,8 +37,7 @@ export function JobsIntakeContainer({ bodyshop, setBreadcrumbs, setSelectedHeade document.title = t("titles.jobs-intake", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("activejobs"); diff --git a/client/src/pages/jobs-ready/jobs-ready.page.jsx b/client/src/pages/jobs-ready/jobs-ready.page.jsx index d1b1a58f9..ad8d1950c 100644 --- a/client/src/pages/jobs-ready/jobs-ready.page.jsx +++ b/client/src/pages/jobs-ready/jobs-ready.page.jsx @@ -19,8 +19,7 @@ export function JobsReadyPage({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.readyjobs", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("readyjobs"); diff --git a/client/src/pages/jobs/jobs.page.jsx b/client/src/pages/jobs/jobs.page.jsx index f330bb2f0..08dbb2985 100644 --- a/client/src/pages/jobs/jobs.page.jsx +++ b/client/src/pages/jobs/jobs.page.jsx @@ -19,8 +19,7 @@ export function JobsPage({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.jobs", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("activejobs"); diff --git a/client/src/pages/manage-root/manage-root.page.container.jsx b/client/src/pages/manage-root/manage-root.page.container.jsx index 1763dcb6b..c8b795618 100644 --- a/client/src/pages/manage-root/manage-root.page.container.jsx +++ b/client/src/pages/manage-root/manage-root.page.container.jsx @@ -21,8 +21,7 @@ export function ManageRootPageContainer({ setBreadcrumbs, bodyshop }) { document.title = t("titles.manageroot", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setBreadcrumbs([]); diff --git a/client/src/pages/manage/manage.page.component.jsx b/client/src/pages/manage/manage.page.component.jsx index 6dfd8af6e..c08f86556 100644 --- a/client/src/pages/manage/manage.page.component.jsx +++ b/client/src/pages/manage/manage.page.component.jsx @@ -193,8 +193,7 @@ export function Manage({ conflict, bodyshop, alerts, setAlerts }) { useEffect(() => { document.title = InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }); }, [t]); @@ -205,8 +204,7 @@ export function Manage({ conflict, bodyshop, alerts, setAlerts }) { message={t("general.labels.loadingapp", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} /> @@ -674,8 +672,7 @@ export function Manage({ conflict, bodyshop, alerts, setAlerts }) {
{`${InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") })} - ${import.meta.env.VITE_APP_GIT_SHA_DATE}`}
diff --git a/client/src/pages/owners-detail/owners-detail.page.container.jsx b/client/src/pages/owners-detail/owners-detail.page.container.jsx index 95904c01a..f10792fba 100644 --- a/client/src/pages/owners-detail/owners-detail.page.container.jsx +++ b/client/src/pages/owners-detail/owners-detail.page.container.jsx @@ -34,8 +34,7 @@ export function OwnersDetailContainer({ setBreadcrumbs, addRecentItem, setSelect document.title = t("titles.owners-detail", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), name: data ? OwnerNameDisplayFunction(data.owners_by_pk) : "" }); diff --git a/client/src/pages/owners/owners.page.container.jsx b/client/src/pages/owners/owners.page.container.jsx index 0729e2d84..ab380db42 100644 --- a/client/src/pages/owners/owners.page.container.jsx +++ b/client/src/pages/owners/owners.page.container.jsx @@ -17,8 +17,7 @@ export function OwnersPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.owners", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("owners"); diff --git a/client/src/pages/parts-queue/parts-queue.page.container.jsx b/client/src/pages/parts-queue/parts-queue.page.container.jsx index 91572e276..a4ed6d442 100644 --- a/client/src/pages/parts-queue/parts-queue.page.container.jsx +++ b/client/src/pages/parts-queue/parts-queue.page.container.jsx @@ -19,8 +19,7 @@ export function PartsQueuePageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.parts-queue", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("parts-queue"); diff --git a/client/src/pages/payments-all/payments-all.container.page.jsx b/client/src/pages/payments-all/payments-all.container.page.jsx index 9e63b8dfd..2aa77422e 100644 --- a/client/src/pages/payments-all/payments-all.container.page.jsx +++ b/client/src/pages/payments-all/payments-all.container.page.jsx @@ -49,8 +49,7 @@ export function AllJobs({ bodyshop, setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.payments-all", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("allpayments"); diff --git a/client/src/pages/phonebook/phonebook.page.container.jsx b/client/src/pages/phonebook/phonebook.page.container.jsx index fe407cec3..b71e06bf4 100644 --- a/client/src/pages/phonebook/phonebook.page.container.jsx +++ b/client/src/pages/phonebook/phonebook.page.container.jsx @@ -22,8 +22,7 @@ export function PhonebookContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.phonebook", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("phonebook"); diff --git a/client/src/pages/production-board/production-board.container.jsx b/client/src/pages/production-board/production-board.container.jsx index f646d16c1..711f9fdc0 100644 --- a/client/src/pages/production-board/production-board.container.jsx +++ b/client/src/pages/production-board/production-board.container.jsx @@ -25,8 +25,7 @@ export function ProductionBoardContainer({ setBreadcrumbs, bodyshop, setSelected document.title = t("titles.productionboard", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("productionboard"); diff --git a/client/src/pages/production-list/production-list.container.jsx b/client/src/pages/production-list/production-list.container.jsx index 9c7cc4892..f87364e7d 100644 --- a/client/src/pages/production-list/production-list.container.jsx +++ b/client/src/pages/production-list/production-list.container.jsx @@ -22,8 +22,7 @@ export function ProductionListContainer({ document.title = t("titles.productionlist", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("productionlist"); diff --git a/client/src/pages/profile/profile.container.page.jsx b/client/src/pages/profile/profile.container.page.jsx index 3ab67ec65..05f4172ba 100644 --- a/client/src/pages/profile/profile.container.page.jsx +++ b/client/src/pages/profile/profile.container.page.jsx @@ -19,7 +19,7 @@ export function ProfileContainerPage({ setBreadcrumbs, setSelectedHeader }) { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + }) }); }, [t, setBreadcrumbs, setSelectedHeader]); diff --git a/client/src/pages/schedule/schedule.page.container.jsx b/client/src/pages/schedule/schedule.page.container.jsx index 9ee7ff34c..cfb6fafdb 100644 --- a/client/src/pages/schedule/schedule.page.container.jsx +++ b/client/src/pages/schedule/schedule.page.container.jsx @@ -18,8 +18,7 @@ export function SchedulePageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.schedule", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("schedule"); diff --git a/client/src/pages/scoreboard/scoreboard.page.container.jsx b/client/src/pages/scoreboard/scoreboard.page.container.jsx index 693a1b977..3072b7bb4 100644 --- a/client/src/pages/scoreboard/scoreboard.page.container.jsx +++ b/client/src/pages/scoreboard/scoreboard.page.container.jsx @@ -50,8 +50,7 @@ export function ScoreboardContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.scoreboard", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("scoreboard"); diff --git a/client/src/pages/shop-csi/shop-csi.container.page.jsx b/client/src/pages/shop-csi/shop-csi.container.page.jsx index 4adcaf6cd..67f9e2ef2 100644 --- a/client/src/pages/shop-csi/shop-csi.container.page.jsx +++ b/client/src/pages/shop-csi/shop-csi.container.page.jsx @@ -34,8 +34,7 @@ export function ShopCsiContainer({ bodyshop, setBreadcrumbs, setSelectedHeader } document.title = t("titles.shop-csi", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("shop-csi"); diff --git a/client/src/pages/shop-vendor/shop-vendor.page.container.jsx b/client/src/pages/shop-vendor/shop-vendor.page.container.jsx index 5f41d3438..20c4da53c 100644 --- a/client/src/pages/shop-vendor/shop-vendor.page.container.jsx +++ b/client/src/pages/shop-vendor/shop-vendor.page.container.jsx @@ -23,8 +23,7 @@ export function ShopVendorPageContainer({ bodyshop, setBreadcrumbs, setSelectedH document.title = t("titles.shop_vendors", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("shop-vendors"); diff --git a/client/src/pages/shop/shop.page.component.jsx b/client/src/pages/shop/shop.page.component.jsx index 328d07247..b4b354b1d 100644 --- a/client/src/pages/shop/shop.page.component.jsx +++ b/client/src/pages/shop/shop.page.component.jsx @@ -34,8 +34,7 @@ export function ShopPage({ bodyshop, setSelectedHeader, setBreadcrumbs }) { document.title = t("titles.shop", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("shop"); diff --git a/client/src/pages/tasks/allTasksPageContainer.jsx b/client/src/pages/tasks/allTasksPageContainer.jsx index e85dc5b46..107143786 100644 --- a/client/src/pages/tasks/allTasksPageContainer.jsx +++ b/client/src/pages/tasks/allTasksPageContainer.jsx @@ -26,8 +26,7 @@ export function AllTasksPageContainer({ setBreadcrumbs, setSelectedHeader, setTa document.title = t("titles.all_tasks", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("all_tasks"); diff --git a/client/src/pages/tasks/myTasksPageContainer.jsx b/client/src/pages/tasks/myTasksPageContainer.jsx index 52b4b0fbf..4477e3878 100644 --- a/client/src/pages/tasks/myTasksPageContainer.jsx +++ b/client/src/pages/tasks/myTasksPageContainer.jsx @@ -21,8 +21,7 @@ export function MyTasksPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.my_tasks", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("my_tasks"); diff --git a/client/src/pages/tech-job-clock/tech-job-clock.component.jsx b/client/src/pages/tech-job-clock/tech-job-clock.component.jsx index f9c120be3..98b4e9bf2 100644 --- a/client/src/pages/tech-job-clock/tech-job-clock.component.jsx +++ b/client/src/pages/tech-job-clock/tech-job-clock.component.jsx @@ -13,8 +13,7 @@ export default function TechClockComponent() { document.title = t("titles.techjobclock", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); }, [t]); diff --git a/client/src/pages/tech-lookup/tech-lookup.container.jsx b/client/src/pages/tech-lookup/tech-lookup.container.jsx index a209777ba..74cbd1300 100644 --- a/client/src/pages/tech-lookup/tech-lookup.container.jsx +++ b/client/src/pages/tech-lookup/tech-lookup.container.jsx @@ -12,8 +12,7 @@ export default function TechLookupContainer() { document.title = t("titles.techjoblookup", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); }, [t]); diff --git a/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx b/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx index bdc9f8b32..85237280e 100644 --- a/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx +++ b/client/src/pages/tech-shift-clock/tech-shift-clock.component.jsx @@ -10,8 +10,7 @@ export default function TechShiftClock() { document.title = t("titles.techshiftclock", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); }, [t]); diff --git a/client/src/pages/tech/tech.page.component.jsx b/client/src/pages/tech/tech.page.component.jsx index 2be9f0a2a..f8be46b4a 100644 --- a/client/src/pages/tech/tech.page.component.jsx +++ b/client/src/pages/tech/tech.page.component.jsx @@ -50,8 +50,7 @@ export function TechPage({ technician }) { useEffect(() => { document.title = InstanceRenderManager({ imex: t("titles.imexonline"), - rome: t("titles.romeonline"), - promanager: t("titles.promanager") + rome: t("titles.romeonline") }); }, [t]); @@ -77,8 +76,7 @@ export function TechPage({ technician }) { message={t("general.labels.loadingapp", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) })} /> diff --git a/client/src/pages/temporary-docs/temporary-docs.container.jsx b/client/src/pages/temporary-docs/temporary-docs.container.jsx index bb8785838..2960a9bba 100644 --- a/client/src/pages/temporary-docs/temporary-docs.container.jsx +++ b/client/src/pages/temporary-docs/temporary-docs.container.jsx @@ -25,8 +25,7 @@ export function TempDocumentsContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.temporarydocs", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("temporarydocs"); diff --git a/client/src/pages/time-tickets/time-tickets.container.jsx b/client/src/pages/time-tickets/time-tickets.container.jsx index 766bd62e0..a14c150c1 100644 --- a/client/src/pages/time-tickets/time-tickets.container.jsx +++ b/client/src/pages/time-tickets/time-tickets.container.jsx @@ -58,8 +58,7 @@ export function TimeTicketsContainer({ bodyshop, setBreadcrumbs, setSelectedHead document.title = t("titles.timetickets", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("timetickets"); diff --git a/client/src/pages/tt-approvals/tt-approvals.page.container.jsx b/client/src/pages/tt-approvals/tt-approvals.page.container.jsx index 6f30c0727..d96734eac 100644 --- a/client/src/pages/tt-approvals/tt-approvals.page.container.jsx +++ b/client/src/pages/tt-approvals/tt-approvals.page.container.jsx @@ -25,8 +25,7 @@ export function TtApprovalsPage({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.ttapprovals", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("ttapprovals"); diff --git a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx index ac3be0137..1f2917f4f 100644 --- a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx +++ b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx @@ -32,8 +32,7 @@ export function VehicleDetailContainer({ setBreadcrumbs, addRecentItem, setSelec document.title = t("titles.vehicledetail", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }), vehicle: data && data.vehicles_by_pk diff --git a/client/src/pages/vehicles/vehicles.page.container.jsx b/client/src/pages/vehicles/vehicles.page.container.jsx index 96a0af2b7..539c09dbb 100644 --- a/client/src/pages/vehicles/vehicles.page.container.jsx +++ b/client/src/pages/vehicles/vehicles.page.container.jsx @@ -18,8 +18,7 @@ export function VehiclesPageContainer({ setBreadcrumbs, setSelectedHeader }) { document.title = t("titles.vehicles", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }); setSelectedHeader("vehicles"); diff --git a/client/src/redux/email/email.reducer.js b/client/src/redux/email/email.reducer.js index 86582d98d..bd9485d97 100644 --- a/client/src/redux/email/email.reducer.js +++ b/client/src/redux/email/email.reducer.js @@ -8,8 +8,7 @@ const INITIAL_STATE = { name: "ShopName", address: InstanceRenderManager({ imex: "noreply@iemx.online", - rome: "noreply@romeonline.io", - promanager: "noreply@promanager.web-est.com" + rome: "noreply@romeonline.io" }) }, to: null, diff --git a/client/src/redux/user/user.sagas.js b/client/src/redux/user/user.sagas.js index 423b40283..8cd70c480 100644 --- a/client/src/redux/user/user.sagas.js +++ b/client/src/redux/user/user.sagas.js @@ -15,7 +15,6 @@ import { getToken } from "firebase/messaging"; import i18next from "i18next"; import LogRocket from "logrocket"; import { all, call, delay, put, select, takeLatest } from "redux-saga/effects"; -import { Userpilot } from "userpilot"; import { factory } from "../../App/App.container"; import { analytics, @@ -245,12 +244,6 @@ export function* signInSuccessSaga({ payload }) { rome: () => { window.$zoho.salesiq.visitor.name(payload.displayName || payload.email); window.$zoho.salesiq.visitor.email(payload.email); - }, - promanager: () => { - Userpilot.identify(payload.email, { - email: payload.email - }); - console.log("*** Userpilot identified."); } }); } catch (error) { @@ -281,8 +274,7 @@ export function* sendPasswordResetEmailSaga({ payload }) { yield sendPasswordResetEmail(auth, payload, { url: InstanceRenderManager({ imex: "https://imex.online/passwordreset", - rome: "https://romeonline.io/passwordreset", - promanager: "https:promanager.web-est.com/passwordreset" + rome: "https://romeonline.io/passwordreset" }) }); @@ -330,41 +322,10 @@ export function* SetAuthLevelFromShopDetails({ payload }) { const user = yield select((state) => state.user.currentUser); if (payload.features.singleDeviceOnly) { - if ( - !( - user.email.includes("@imex.") || - user.email.includes("@rome.") || - user.email.includes("@rometech.") || - user.email.includes("@promanager.") - ) - ) + if (!(user.email.includes("@imex.") || user.email.includes("@rome.") || user.email.includes("@rometech."))) yield put(setInstanceId(user.uid)); } - //For Rome, check to make sure it's not a PM shop. - try { - InstanceRenderManager({ - executeFunction: true, - args: [], - rome: () => { - if ( - payload.imexshopid.toLowerCase().startsWith("pm_") && - !( - user.email.includes("@imex.") || - user.email.includes("@rome.") || - user.email.includes("@rometech.") || - user.email.includes("@promanager.") - ) - ) { - throw new Error("You are not authorized to use this application."); - } - }, - promanager: () => {} - }); - } catch (error) { - yield put(setInstanceConflict()); - } - try { InstanceRenderManager({ executeFunction: true, diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index b743b209a..f3e4d30bf 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -1257,7 +1257,7 @@ "sunday": "Sunday", "text": "Text", "thursday": "Thursday", - "time": "Select Time", + "time": "Select Time", "total": "Total", "totals": "Totals", "tuesday": "Tuesday", @@ -1342,8 +1342,8 @@ }, "job_lifecycle": { "columns": { - "average_human_readable": "Average Human Readable", - "average_value": "Average Value", + "average_human_readable": "Average Human Readable", + "average_value": "Average Value", "duration": "Duration", "end": "End", "human_readable": "Human Readable", @@ -1877,7 +1877,7 @@ "tax_str_rt": "Storage Tax Rate", "tax_sub_rt": "Sublet Tax Rate", "tax_tow_rt": "Towing Tax Rate", - "tlos_ind": "Total Loss Indicator", + "tlos_ind": "Total Loss Indicator", "towin": "Tow In", "towing_payable": "Towing Payable", "unitnumber": "Unit #", @@ -3432,7 +3432,6 @@ "productionboard": "Production Board - Visual | {{app}}", "productionlist": "Production Board - List | {{app}}", "profile": "My Profile | {{app}}", - "promanager": "ProManager", "readyjobs": "Ready Jobs | {{app}}", "resetpassword": "Reset Password", "resetpasswordvalidate": "Enter New Password", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 4a5a39a9f..8c5cd5f38 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -1257,7 +1257,7 @@ "sunday": "", "text": "", "thursday": "", - "time": "", + "time": "", "total": "", "totals": "", "tuesday": "", @@ -1342,8 +1342,8 @@ }, "job_lifecycle": { "columns": { - "average_human_readable": "", - "average_value": "", + "average_human_readable": "", + "average_value": "", "duration": "", "end": "", "human_readable": "", @@ -1877,7 +1877,7 @@ "tax_str_rt": "", "tax_sub_rt": "", "tax_tow_rt": "", - "tlos_ind": "", + "tlos_ind": "", "towin": "", "towing_payable": "Remolque a pagar", "unitnumber": "Unidad #", @@ -3432,7 +3432,6 @@ "productionboard": "", "productionlist": "", "profile": "Mi perfil | {{app}}", - "promanager": "", "readyjobs": "", "resetpassword": "", "resetpasswordvalidate": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index df418a823..67e3f9369 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -1257,7 +1257,7 @@ "sunday": "", "text": "", "thursday": "", - "time": "", + "time": "", "total": "", "totals": "", "tuesday": "", @@ -1342,8 +1342,8 @@ }, "job_lifecycle": { "columns": { - "average_human_readable": "", - "average_value": "", + "average_human_readable": "", + "average_value": "", "duration": "", "end": "", "human_readable": "", @@ -1877,7 +1877,7 @@ "tax_str_rt": "", "tax_sub_rt": "", "tax_tow_rt": "", - "tlos_ind": "", + "tlos_ind": "", "towin": "", "towing_payable": "Remorquage à payer", "unitnumber": "Unité #", @@ -3432,7 +3432,6 @@ "productionboard": "", "productionlist": "", "profile": "Mon profil | {{app}}", - "promanager": "", "readyjobs": "", "resetpassword": "", "resetpasswordvalidate": "", diff --git a/client/src/utils/CleanAxios.js b/client/src/utils/CleanAxios.js index cfdb2134e..cf4737482 100644 --- a/client/src/utils/CleanAxios.js +++ b/client/src/utils/CleanAxios.js @@ -1,6 +1,5 @@ import axios from "axios"; import { auth } from "../firebase/firebase.utils"; -import InstanceRenderManager from "./instanceRenderMgr"; axios.defaults.baseURL = import.meta.env.DEV ? "/api/" @@ -13,15 +12,6 @@ export const axiosAuthInterceptorId = axios.interceptors.request.use( if (token) { config.headers.Authorization = `Bearer ${token}`; } - InstanceRenderManager({ - executeFunction: true, - args: [], - promanager: () => { - if (!config.url.startsWith("http://localhost:1337")) { - config.headers["Convenient-Company"] = "promanager"; - } - } - }); } return config; diff --git a/client/src/utils/RegisterSw.js b/client/src/utils/RegisterSw.js index 3f0c5712c..ad701bcc4 100644 --- a/client/src/utils/RegisterSw.js +++ b/client/src/utils/RegisterSw.js @@ -49,15 +49,13 @@ const onServiceWorkerUpdate = (registration) => { message: i18n.t("general.messages.newversiontitle", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }), description: i18n.t("general.messages.newversionmessage", { app: InstanceRenderManager({ imex: "$t(titles.imexonline)", - rome: "$t(titles.romeonline)", - promanager: "$t(titles.promanager)" + rome: "$t(titles.romeonline)" }) }), duration: 0, diff --git a/client/src/utils/RenderTemplate.js b/client/src/utils/RenderTemplate.js index 1deb8e76d..fd6eb6e44 100644 --- a/client/src/utils/RenderTemplate.js +++ b/client/src/utils/RenderTemplate.js @@ -72,8 +72,8 @@ export default async function RenderTemplate( ...contextData, ...templateObject.variables, ...templateObject.context, - headerpath: `/${InstanceRenderManager({ imex: bodyshop.imexshopid, rome: bodyshop.imexshopid, promanager: "GENERIC" })}/header.html`, - footerpath: `/${InstanceRenderManager({ imex: bodyshop.imexshopid, rome: bodyshop.imexshopid, promanager: "GENERIC" })}/footer.html`, + headerpath: `/${InstanceRenderManager({ imex: bodyshop.imexshopid, rome: bodyshop.imexshopid })}/header.html`, + footerpath: `/${InstanceRenderManager({ imex: bodyshop.imexshopid, rome: bodyshop.imexshopid })}/footer.html`, bodyshop: bodyshop, filters: templateObject?.filters, sorters: templateObject?.sorters, diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index 9f80986d2..fcf10422d 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -5,13 +5,11 @@ import InstanceRenderManager from "./instanceRenderMgr"; export const EmailSettings = { fromNameDefault: InstanceRenderManager({ imex: "ImEX Online", - rome: "Rome Online", - promanager: "ProManager" + rome: "Rome Online" }), fromAddress: InstanceRenderManager({ imex: "noreply@imex.online", - rome: "noreply@romeonline.io", - promanager: "noreply@promanager.web-est.com" + rome: "noreply@romeonline.io" }) }; diff --git a/client/src/utils/instanceRenderMgr.js b/client/src/utils/instanceRenderMgr.js index cb436dd0d..4ee0f204e 100644 --- a/client/src/utils/instanceRenderMgr.js +++ b/client/src/utils/instanceRenderMgr.js @@ -12,6 +12,11 @@ export default function InstanceRenderManager({ executeFunction, rome, promanager, imex, debug, instance, args }) { let propToReturn = null; + //TODO: Remove after debugging. + if (promanager) { + console.trace("ProManager Prop was used"); + } + switch (instance || import.meta.env.VITE_APP_INSTANCE) { case "IMEX": propToReturn = imex; diff --git a/client/vite.config.js b/client/vite.config.js index 03f56c538..edc9d5683 100644 --- a/client/vite.config.js +++ b/client/vite.config.js @@ -57,13 +57,13 @@ export default defineConfig({ instance: process.env.VITE_APP_INSTANCE, imex: "ImEX Online", rome: "Rome Online", - promanager: "ProManager" + }), name: InstanceRenderManager({ instance: process.env.VITE_APP_INSTANCE, imex: "ImEX Online", rome: "Rome Online", - promanager: "ProManager" + }), description: "The ultimate bodyshop management system.", icons: [ @@ -72,7 +72,6 @@ export default defineConfig({ instance: process.env.VITE_APP_INSTANCE, imex: "favicon.png", rome: "ro-favicon.png", - promanager: "/pm/pm-favicon.ico" }), sizes: "64x64 32x32 24x24 16x16", type: "image/x-icon" @@ -82,7 +81,6 @@ export default defineConfig({ instance: process.env.VITE_APP_INSTANCE, imex: "logo192.png", rome: "logo192.png", - promanager: "/pm/pm-icon-192.png" }), type: "image/png", sizes: "192x192" @@ -92,7 +90,6 @@ export default defineConfig({ instance: process.env.VITE_APP_INSTANCE, imex: "logo512.png", rome: "ro-favicon.png", - promanager: "/pm/pm-icon-512.png" }), type: "image/png", sizes: "512x512" @@ -102,7 +99,6 @@ export default defineConfig({ instance: process.env.VITE_APP_INSTANCE, imex: "#1890ff", rome: "#fff", - promanager: "#1d69a6" }), background_color: "#fff", gcm_sender_id: "103953800507" diff --git a/package-lock.json b/package-lock.json index d95191db5..648b3eae6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,8 +63,12 @@ "xmlbuilder2": "^3.1.1" }, "devDependencies": { + "@eslint/js": "^9.15.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "concurrently": "^8.2.2", + "eslint": "^9.15.0", + "eslint-plugin-react": "^7.37.2", + "globals": "^15.12.0", "prettier": "^3.3.3", "source-map-explorer": "^2.5.2" }, @@ -2703,6 +2707,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", @@ -2735,6 +2749,241 @@ "kuler": "^2.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "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", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@eslint/plugin-kit/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/@eslint/plugin-kit/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", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/@fastify/busboy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.0.0.tgz", @@ -2939,6 +3188,72 @@ "node": ">=6" } }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@ioredis/commands": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", @@ -4191,6 +4506,13 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -4218,6 +4540,13 @@ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jsonwebtoken": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", @@ -4364,9 +4693,10 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4374,6 +4704,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", @@ -4393,6 +4733,23 @@ "node": ">= 6.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4438,11 +4795,155 @@ "node": ">=10" } }, + "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" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -4506,6 +5007,22 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws4": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", @@ -4775,6 +5292,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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", + "engines": { + "node": ">=6" + } + }, "node_modules/canvas": { "version": "2.11.2", "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", @@ -5236,9 +5763,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5308,6 +5836,60 @@ "node": ">= 6" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -5395,6 +5977,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/degenerator": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.4.tgz", @@ -5495,6 +6095,19 @@ "node": ">=16" } }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -5688,6 +6301,67 @@ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -5709,6 +6383,89 @@ "node": ">= 0.4" } }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5761,6 +6518,273 @@ "node": ">=4.0" } }, + "node_modules/eslint": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.5", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.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.2", + "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/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "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/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "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/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/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", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/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/eslint/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", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -5773,6 +6797,42 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "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/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5919,7 +6979,14 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "optional": true + "devOptional": true + }, + "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" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -5970,6 +7037,19 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "license": "MIT" }, + "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/file-uri-to-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", @@ -6028,6 +7108,23 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "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/firebase-admin": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-12.6.0.tgz", @@ -6052,11 +7149,32 @@ "@google-cloud/storage": "^7.7.0" } }, + "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/flat-util": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/flat-util/-/flat-util-1.1.9.tgz", "integrity": "sha512-BOTMw/6rbbxVjv5JQvwgGMc2/6wWGd2VeyTvnzvvE49VRjS0tTxLbry/QVP1yPw8SaAOBYsnixmzruXoqjdUHA==" }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -6081,6 +7199,16 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", @@ -6221,12 +7349,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "optional": true }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -6353,6 +7510,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-uri": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", @@ -6391,6 +7566,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/glob/node_modules/minimatch": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", @@ -6406,12 +7594,33 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/google-auth-library": { @@ -6532,6 +7741,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6576,6 +7795,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -6711,6 +7946,43 @@ ], "license": "BSD-3-Clause" }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6742,6 +8014,21 @@ "node": ">=8" } }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/intuit-oauth": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/intuit-oauth/-/intuit-oauth-4.1.2.tgz", @@ -6796,11 +8083,135 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -6816,6 +8227,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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", @@ -6824,6 +8258,123 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6835,6 +8386,97 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -6857,6 +8499,23 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jackspeak": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", @@ -6992,6 +8651,27 @@ "bignumber.js": "^9.0.0" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "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/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "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/json11": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/json11/-/json11-1.1.2.tgz", @@ -7048,6 +8728,22 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -7085,6 +8781,16 @@ "safe-buffer": "^5.0.1" } }, + "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/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -7116,6 +8822,22 @@ "pick-util": "^1.1.5" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -7198,6 +8920,13 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "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/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -7226,6 +8955,19 @@ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", "optional": true }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7471,6 +9213,13 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -7624,9 +9373,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7635,6 +9384,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -7706,7 +9536,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "optional": true, + "devOptional": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7717,6 +9547,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pac-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", @@ -7754,6 +9600,19 @@ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -7786,6 +9645,16 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -7802,6 +9671,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/path-scurry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -7848,6 +9724,16 @@ "@jonkemp/package-utils": "^1.0.8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -7905,6 +9791,18 @@ "node": ">= 4" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proto3-json-serializer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", @@ -7994,6 +9892,16 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" }, + "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/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -8071,6 +9979,13 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -8127,12 +10042,53 @@ "node": ">=4" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/remote-content": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remote-content/-/remote-content-3.0.1.tgz", @@ -8157,6 +10113,34 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -8217,11 +10201,55 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -8362,6 +10390,22 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -8877,6 +10921,96 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8908,6 +11042,19 @@ "node": ">=4" } }, + "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", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", @@ -9004,6 +11151,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -9262,6 +11422,83 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -9287,6 +11524,22 @@ "node": ">= 4.0.0" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici-types": { "version": "6.18.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", @@ -9309,6 +11562,16 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -9429,6 +11692,96 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -9700,7 +12053,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "optional": true, + "devOptional": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index f51af45b5..39ee7592b 100644 --- a/package.json +++ b/package.json @@ -73,8 +73,12 @@ "xmlbuilder2": "^3.1.1" }, "devDependencies": { + "@eslint/js": "^9.15.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "concurrently": "^8.2.2", + "eslint": "^9.15.0", + "eslint-plugin-react": "^7.37.2", + "globals": "^15.12.0", "prettier": "^3.3.3", "source-map-explorer": "^2.5.2" } diff --git a/server.js b/server.js index f98ec67da..cd4a8064f 100644 --- a/server.js +++ b/server.js @@ -48,10 +48,6 @@ const SOCKETIO_CORS_ORIGIN = [ "https://www.beta.test.imex.online", "https://beta.imex.online", "https://www.beta.imex.online", - "https://www.test.promanager.web-est.com", - "https://test.promanager.web-est.com", - "https://www.promanager.web-est.com", - "https://promanager.web-est.com", "https://old.imex.online", "https://www.old.imex.online", "https://wsadmin.imex.online", diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js index 043dc8e89..df653e07f 100644 --- a/server/accounting/qb-receivables-lines.js +++ b/server/accounting/qb-receivables-lines.js @@ -4,8 +4,7 @@ const Dinero = require("dinero.js"); const InstanceManager = require("../utils/instanceMgr").default; const { DiscountNotAlreadyCounted } = InstanceManager({ imex: require("../job/job-totals"), - rome: require("../job/job-totals-USA"), - promanager: "USE_ROME" + rome: require("../job/job-totals-USA") }); const logger = require("../utils/logger"); @@ -554,7 +553,7 @@ exports.default = function ({ bodyshop, jobs_by_pk, qbo = false, items, taxCodes const state_tax = Dinero(job_totals.totals.state_tax); const local_tax = Dinero(job_totals.totals.local_tax); - const RulesetToUse = InstanceManager({ imex: "CANADA", rome: "US", promanager: "US" }); + const RulesetToUse = InstanceManager({ imex: "CANADA", rome: "US" }); if (RulesetToUse === "CANADA") { if (federal_tax.getAmount() > 0) { diff --git a/server/cdk/cdk-calculate-allocations.js b/server/cdk/cdk-calculate-allocations.js index f78c48b91..6f66d4c6f 100644 --- a/server/cdk/cdk-calculate-allocations.js +++ b/server/cdk/cdk-calculate-allocations.js @@ -12,8 +12,7 @@ const _ = require("lodash"); const InstanceManager = require("../utils/instanceMgr").default; const { DiscountNotAlreadyCounted } = InstanceManager({ imex: require("../job/job-totals"), - rome: require("../job/job-totals-USA"), - promanager: "USE_ROME" + rome: require("../job/job-totals-USA") }); exports.defaultRoute = async function (req, res) { diff --git a/server/email/generateTemplate.js b/server/email/generateTemplate.js index 7168d435e..9d2815851 100644 --- a/server/email/generateTemplate.js +++ b/server/email/generateTemplate.js @@ -14,8 +14,7 @@ const { header, end, start } = require("./html"); const defaultFooter = () => { return RenderInstanceManager({ imex: "ImEX Online Collision Repair Management System", - rome: "Rome Technologies", - promanager: "ProManager" + rome: "Rome Technologies" }); }; diff --git a/server/email/sendemail.js b/server/email/sendemail.js index 9d103ef81..48fa94968 100644 --- a/server/email/sendemail.js +++ b/server/email/sendemail.js @@ -53,8 +53,7 @@ const sendServerEmail = async ({ subject, text }) => { { from: InstanceManager({ imex: `ImEX Online API - ${process.env.NODE_ENV} `, - rome: `Rome Online API - ${process.env.NODE_ENV} `, - promanager: `ProManager API - ${process.env.NODE_ENV} ` + rome: `Rome Online API - ${process.env.NODE_ENV} ` }), to: ["patrick@imexsystems.ca", "support@thinkimex.com"], subject: subject, @@ -78,27 +77,13 @@ const sendServerEmail = async ({ subject, text }) => { } }; -const sendProManagerWelcomeEmail = async ({ to, subject, html }) => { - try { - await mailer.sendMail({ - from: `ProManager `, - to, - subject, - html - }); - } catch (error) { - logger.log("server-email-failure", "error", null, null, { error }); - } -}; - const sendTaskEmail = async ({ to, subject, type = "text", html, text, attachments }) => { try { mailer.sendMail( { from: InstanceManager({ imex: `ImEX Online `, - rome: `Rome Online `, - promanager: `ProManager ` + rome: `Rome Online ` }), to: to, subject: subject, @@ -247,8 +232,7 @@ const emailBounce = async (req, res) => { replyTo === InstanceManager({ imex: "noreply@imex.online", - rome: "noreply@romeonline.io", - promanager: "noreply@promanager.web-est.com" + rome: "noreply@romeonline.io" }) ) { res.sendStatus(200); @@ -270,13 +254,11 @@ const emailBounce = async (req, res) => { //bcc: "patrick@snapt.ca", subject: `${InstanceMgr({ imex: "ImEX Online", - rome: "Rome Online", - promanager: "ProManager" + rome: "Rome Online" })} Bounced Email - RE: ${subject}`, text: `${InstanceMgr({ imex: "ImEX Online", - rome: "Rome Online", - promanager: "ProManager" + rome: "Rome Online" })} has tried to deliver an email with the subject: ${subject} to the intended recipients but encountered an error. ${body.bounce?.bouncedRecipients.map( @@ -305,6 +287,5 @@ module.exports = { sendEmail, sendServerEmail, sendTaskEmail, - sendProManagerWelcomeEmail, emailBounce }; diff --git a/server/email/tasksEmails.js b/server/email/tasksEmails.js index c05185b6b..6d787811a 100644 --- a/server/email/tasksEmails.js +++ b/server/email/tasksEmails.js @@ -87,14 +87,7 @@ const formatPriority = (priority) => { const getEndpoints = (bodyshop) => InstanceManager({ imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online", - rome: - bodyshop?.convenient_company === "promanager" - ? process.env?.NODE_ENV === "test" - ? "https//test.promanager.web-est.com" - : "https://promanager.web-est.com" - : process.env?.NODE_ENV === "test" - ? "https//test.romeonline.io" - : "https://romeonline.io" + rome: process.env?.NODE_ENV === "test" ? "https//test.romeonline.io" : "https://romeonline.io" }); const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, job, taskId, dateLine, createdBy) => { @@ -120,10 +113,7 @@ const generateTemplateArgs = (title, priority, description, dueDate, bodyshop, j const sendMail = (type, to, subject, html, taskIds, successCallback, requestInstance) => { const fromEmails = InstanceManager({ imex: "ImEX Online ", - rome: - requestInstance === "promanager" - ? "ProManager " - : "Rome Online " + rome: "Rome Online " }); mailer.sendMail( @@ -239,10 +229,7 @@ const tasksRemindEmail = async (req, res) => { recipientCounts.forEach((recipient) => { const fromEmails = InstanceManager({ imex: "ImEX Online ", - rome: - tasksRequest?.tasks[0].bodyshop.convenient_company === "promanager" - ? "ProManager " - : "Rome Online " + rome: "Rome Online " }); const emailData = { @@ -279,14 +266,7 @@ const tasksRemindEmail = async (req, res) => { else { const endPoints = InstanceManager({ imex: process.env?.NODE_ENV === "test" ? "https://test.imex.online" : "https://imex.online", - rome: - tasksRequest?.tasks[0].bodyshop.convenient_company === "promanager" - ? process.env?.NODE_ENV === "test" - ? "https//test.promanager.web-est.com" - : "https://promanager.web-est.com" - : process.env?.NODE_ENV === "test" - ? "https//test.romeonline.io" - : "https://romeonline.io" + rome: process.env?.NODE_ENV === "test" ? "https//test.romeonline.io" : "https://romeonline.io" }); const allTasks = groupedTasks[recipient.email]; diff --git a/server/firebase/firebase-handler.js b/server/firebase/firebase-handler.js index e24c86174..60b864413 100644 --- a/server/firebase/firebase-handler.js +++ b/server/firebase/firebase-handler.js @@ -57,108 +57,108 @@ const createUser = async (req, res) => { } }; -const sendPromanagerWelcomeEmail = (req, res) => { - const { authid, email } = req.body; +// const sendPromanagerWelcomeEmail = (req, res) => { +// const { authid, email } = req.body; - // Fetch user from Firebase - admin - .auth() - .getUser(authid) - .then((userRecord) => { - if (!userRecord) { - return Promise.reject({ status: 404, message: "User not found in Firebase." }); - } +// // Fetch user from Firebase +// admin +// .auth() +// .getUser(authid) +// .then((userRecord) => { +// if (!userRecord) { +// return Promise.reject({ status: 404, message: "User not found in Firebase." }); +// } - // Fetch user data from the database using GraphQL - return client.request( - ` - query GET_USER_BY_EMAIL($email: String!) { - users(where: { email: { _eq: $email } }) { - email - validemail - associations { - id - shopid - bodyshop { - id - convenient_company - } - } - } - }`, - { email: email.toLowerCase() } - ); - }) - .then((dbUserResult) => { - const dbUser = dbUserResult?.users?.[0]; - if (!dbUser) { - return Promise.reject({ status: 404, message: "User not found in database." }); - } +// // Fetch user data from the database using GraphQL +// return client.request( +// ` +// query GET_USER_BY_EMAIL($email: String!) { +// users(where: { email: { _eq: $email } }) { +// email +// validemail +// associations { +// id +// shopid +// bodyshop { +// id +// convenient_company +// } +// } +// } +// }`, +// { email: email.toLowerCase() } +// ); +// }) +// .then((dbUserResult) => { +// const dbUser = dbUserResult?.users?.[0]; +// if (!dbUser) { +// return Promise.reject({ status: 404, message: "User not found in database." }); +// } - // Validate email before proceeding - if (!dbUser.validemail) { - logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, { - message: "User email is not valid, skipping email.", - email - }); - return res.status(200).json({ message: "User email is not valid, email not sent." }); - } +// // Validate email before proceeding +// if (!dbUser.validemail) { +// logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, { +// message: "User email is not valid, skipping email.", +// email +// }); +// return res.status(200).json({ message: "User email is not valid, email not sent." }); +// } - // Check if the user's company is ProManager - const convenientCompany = dbUser.associations?.[0]?.bodyshop?.convenient_company; - if (convenientCompany !== "promanager") { - logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, { - message: 'convenient_company is not "promanager", skipping email.', - convenientCompany - }); - return res.status(200).json({ message: `convenient_company is not "promanager", email not sent.` }); - } +// // Check if the user's company is ProManager +// const convenientCompany = dbUser.associations?.[0]?.bodyshop?.convenient_company; +// if (convenientCompany !== "promanager") { +// logger.log("admin-send-welcome-email-skip", "debug", req.user.email, null, { +// message: 'convenient_company is not "promanager", skipping email.', +// convenientCompany +// }); +// return res.status(200).json({ message: `convenient_company is not "promanager", email not sent.` }); +// } - // Generate password reset link - return admin - .auth() - .generatePasswordResetLink(dbUser.email) - .then((resetLink) => ({ dbUser, resetLink })); - }) - .then(({ dbUser, resetLink }) => { - // Send welcome email (replace with your actual email-sending service) - return sendProManagerWelcomeEmail({ - to: dbUser.email, - subject: "Welcome to the ProManager platform.", - html: generateEmailTemplate({ - header: "", - subHeader: "", - body: ` -

Welcome to the ProManager platform. Please click the link below to reset your password:

-

Reset your password

-

User Details:

-
    -
  • Email: ${dbUser.email}
  • -
- ` - }) - }); - }) - .then(() => { - // Log success and return response - logger.log("admin-send-welcome-email", "debug", req.user.email, null, { - request: req.body, - ioadmin: true, - emailSentTo: email - }); - res.status(200).json({ message: "Welcome email sent successfully." }); - }) - .catch((error) => { - logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error }); +// // Generate password reset link +// return admin +// .auth() +// .generatePasswordResetLink(dbUser.email) +// .then((resetLink) => ({ dbUser, resetLink })); +// }) +// .then(({ dbUser, resetLink }) => { +// // Send welcome email (replace with your actual email-sending service) +// return sendProManagerWelcomeEmail({ +// to: dbUser.email, +// subject: "Welcome to the ProManager platform.", +// html: generateEmailTemplate({ +// header: "", +// subHeader: "", +// body: ` +//

Welcome to the ProManager platform. Please click the link below to reset your password:

+//

Reset your password

+//

User Details:

+//
    +//
  • Email: ${dbUser.email}
  • +//
+// ` +// }) +// }); +// }) +// .then(() => { +// // Log success and return response +// logger.log("admin-send-welcome-email", "debug", req.user.email, null, { +// request: req.body, +// ioadmin: true, +// emailSentTo: email +// }); +// res.status(200).json({ message: "Welcome email sent successfully." }); +// }) +// .catch((error) => { +// logger.log("admin-send-welcome-email-error", "ERROR", req.user.email, null, { error }); - if (!res.headersSent) { - res.status(error.status || 500).json({ - message: error.message || "Error sending welcome email.", - error - }); - } - }); -}; +// if (!res.headersSent) { +// res.status(error.status || 500).json({ +// message: error.message || "Error sending welcome email.", +// error +// }); +// } +// }); +// }; const updateUser = (req, res) => { logger.log("admin-update-user", "debug", req.user.email, null, { diff --git a/server/utils/instanceMgr.js b/server/utils/instanceMgr.js index 6a01e6904..fceb2c786 100644 --- a/server/utils/instanceMgr.js +++ b/server/utils/instanceMgr.js @@ -10,7 +10,11 @@ function InstanceManager({ args, instance, debug, executeFunction, rome, promanager, imex }) { let propToReturn = null; - + + //TODO: Remove after debugging. + if (promanager) { + console.trace("ProManager Prop was used"); + } switch (instance || process.env.INSTANCE) { case "IMEX": propToReturn = imex; From eacadc01bd15f05affa838de9d8d47247800445f Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Fri, 22 Nov 2024 08:26:46 -0800 Subject: [PATCH 02/16] IO-3020 IO-3036 Resolve Linting Issues and implement ES9 --- .vscode/settings.json | 3 +- client/eslint.config.js | 12 ++ client/package-lock.json | 217 +++++++++++++++++----------- client/package.json | 12 +- eslint.config.mjs | 10 ++ server/firebase/firebase-handler.js | 7 +- server/job/job-costing.js | 5 +- 7 files changed, 167 insertions(+), 99 deletions(-) create mode 100644 client/eslint.config.js create mode 100644 eslint.config.mjs diff --git a/.vscode/settings.json b/.vscode/settings.json index 74b58f715..b8f4d4e1c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -38,5 +38,6 @@ "smartscheduling", "timetickets", "touchtime" - ] + ], + "eslint.workingDirectories": ["./", "./client"] } diff --git a/client/eslint.config.js b/client/eslint.config.js new file mode 100644 index 000000000..b1f7dd1c2 --- /dev/null +++ b/client/eslint.config.js @@ -0,0 +1,12 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import pluginReact from "eslint-plugin-react"; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { files: ["**/*.{js,mjs,cjs,jsx}"] }, + { languageOptions: { globals: globals.browser } }, + pluginJs.configs.recommended, + pluginReact.configs.flat.recommended, // This is not a plugin object, but a shareable config object + pluginReact.configs.flat["jsx-runtime"] // Add this if you are using React 17+ +]; diff --git a/client/package-lock.json b/client/package-lock.json index 93b492582..43093f1d5 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -90,6 +90,7 @@ "@dotenvx/dotenvx": "^1.14.1", "@emotion/babel-plugin": "^11.12.0", "@emotion/react": "^11.13.3", + "@eslint/js": "^9.15.0", "@sentry/webpack-plugin": "^2.22.4", "@testing-library/cypress": "^10.0.2", "browserslist": "^4.23.3", @@ -97,9 +98,11 @@ "chalk": "^5.3.0", "cross-env": "^7.0.3", "cypress": "^13.14.2", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-react-app": "^7.0.1", "eslint-plugin-cypress": "^2.15.1", + "eslint-plugin-react": "^7.37.2", + "globals": "^15.12.0", "memfs": "^4.12.0", "os-browserify": "^0.3.0", "react-error-overlay": "6.0.11", @@ -1524,6 +1527,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.24.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", @@ -2536,6 +2549,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", @@ -3429,12 +3451,13 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fingerprintjs/fingerprintjs": { @@ -4033,12 +4056,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -4051,6 +4076,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4061,6 +4087,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4085,7 +4112,9 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@icons/material": { "version": "0.2.4", @@ -6547,29 +6576,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -8859,10 +8880,11 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8871,12 +8893,13 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -9006,16 +9029,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "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.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -9357,35 +9382,36 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { @@ -9504,6 +9530,16 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -10426,11 +10462,16 @@ "integrity": "sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA==" }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -11033,6 +11074,7 @@ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -11226,6 +11268,7 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -11298,6 +11341,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11421,6 +11465,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11523,6 +11568,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11547,6 +11593,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -11602,16 +11649,20 @@ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jake": { @@ -13270,23 +13321,6 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -15218,6 +15252,7 @@ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -16206,6 +16241,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -17865,13 +17911,14 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", "is-finalizationregistry": "^1.0.2", @@ -17880,8 +17927,8 @@ "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -17894,13 +17941,15 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", diff --git a/client/package.json b/client/package.json index e362eade1..fa4a2b126 100644 --- a/client/package.json +++ b/client/package.json @@ -102,13 +102,6 @@ "eulaize": "node src/utils/eulaize.js", "sentry:sourcemaps:imex": "sentry-cli sourcemaps inject --org imex --project imexonline ./build && sentry-cli sourcemaps upload --org imex --project imexonline ./build" }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest", - "plugin:cypress/recommended" - ] - }, "browserslist": { "production": [ ">0.2%", @@ -133,6 +126,7 @@ "@dotenvx/dotenvx": "^1.14.1", "@emotion/babel-plugin": "^11.12.0", "@emotion/react": "^11.13.3", + "@eslint/js": "^9.15.0", "@sentry/webpack-plugin": "^2.22.4", "@testing-library/cypress": "^10.0.2", "browserslist": "^4.23.3", @@ -140,9 +134,11 @@ "chalk": "^5.3.0", "cross-env": "^7.0.3", "cypress": "^13.14.2", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-react-app": "^7.0.1", "eslint-plugin-cypress": "^2.15.1", + "eslint-plugin-react": "^7.37.2", + "globals": "^15.12.0", "memfs": "^4.12.0", "os-browserify": "^0.3.0", "react-error-overlay": "6.0.11", diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..bdafeda31 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,10 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; + + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, + {languageOptions: { globals: globals.node }}, + pluginJs.configs.recommended, +]; diff --git a/server/firebase/firebase-handler.js b/server/firebase/firebase-handler.js index 60b864413..998bc68f8 100644 --- a/server/firebase/firebase-handler.js +++ b/server/firebase/firebase-handler.js @@ -5,10 +5,10 @@ require("dotenv").config({ const admin = require("firebase-admin"); const logger = require("../utils/logger"); -const { sendProManagerWelcomeEmail } = require("../email/sendemail"); +//const { sendProManagerWelcomeEmail } = require("../email/sendemail"); const client = require("../graphql-client/graphql-client").client; const serviceAccount = require(process.env.FIREBASE_ADMINSDK_JSON); -const generateEmailTemplate = require("../email/generateTemplate"); +//const generateEmailTemplate = require("../email/generateTemplate"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), @@ -299,6 +299,7 @@ const unsubscribe = async (req, res) => { res.json(result); } catch (error) { + logger.log("admin-unsubscribe-error", "ERROR", req.user.email, null, { error: error.message }); res.sendStatus(500); } }; @@ -308,7 +309,7 @@ module.exports = { createUser, updateUser, getUser, - sendPromanagerWelcomeEmail, + //sendPromanagerWelcomeEmail, sendNotification, subscribe, unsubscribe diff --git a/server/job/job-costing.js b/server/job/job-costing.js index 668a35673..961178c77 100644 --- a/server/job/job-costing.js +++ b/server/job/job-costing.js @@ -5,8 +5,7 @@ const logger = require("../utils/logger"); const InstanceManager = require("../utils/instanceMgr").default; const { DiscountNotAlreadyCounted } = InstanceManager({ imex: require("../job/job-totals"), - rome: require("../job/job-totals-USA"), - promanager: "USE_ROME" + rome: require("../job/job-totals-USA") }); // Dinero.defaultCurrency = "USD"; @@ -406,7 +405,7 @@ function GenerateCostingData(job) { ) { const discountRate = Math.abs(job.parts_tax_rates[val.part_type.toUpperCase()].prt_discp) > 1 - ? parts_tajob.parts_tax_rates_rates[val.part_type.toUpperCase()].prt_discp + ? job.parts_tax_rates_rates[val.part_type.toUpperCase()].prt_discp : job.parts_tax_rates[val.part_type.toUpperCase()].prt_discp * 100; const disc = partsAmount.percentage(discountRate).multiply(-1); partsAmount = partsAmount.add(disc); From 4433f0f57f9699c8c7c5acc3a8376069fe9fb17d Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 25 Nov 2024 12:29:09 -0800 Subject: [PATCH 03/16] IO-3020 IO-3036 Remove additional TODOs. --- client/index.html | 1 - .../jobs-available-table.container.jsx | 59 +++++++++---------- .../loading-spinner.component.jsx | 1 - .../shop-info/shop-info.rbac.component.jsx | 1 - client/src/index.jsx | 2 +- .../jobs-detail.page.component.jsx | 2 +- client/src/redux/store.js | 1 - server/job/job-totals-USA.js | 5 +- server/job/job.js | 6 +- server/routes/adminRoutes.js | 3 +- server/sms/receive.js | 3 +- server/utils/instanceMgr.js | 8 ++- 12 files changed, 43 insertions(+), 49 deletions(-) diff --git a/client/index.html b/client/index.html index d5010d03c..902f09472 100644 --- a/client/index.html +++ b/client/index.html @@ -14,7 +14,6 @@ -