diff --git a/.eslintignore b/.eslintignore
index c50c1e227f..fdc2532e08 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,6 +1 @@
-build/*.js
-config/*.js
-config/env/*.js
-server/index.template.html
-test/unit/karma.conf.js
src/lib/**/*.js
diff --git a/.eslintrc.js b/.eslintrc.cjs
similarity index 79%
rename from .eslintrc.js
rename to .eslintrc.cjs
index 04da38b10d..4af00f7b84 100644
--- a/.eslintrc.js
+++ b/.eslintrc.cjs
@@ -4,11 +4,14 @@ const fs = require('fs');
const isProd = process.env.NODE_ENV === 'production';
+// resolve path
+const resolve = dir => path.resolve(__dirname, dir);
+
let schema;
// Use build/schema.graphql as the schema definition. That file only exists after running node build/fetch-schema.js
try {
- schema = fs.readFileSync(path.join(__dirname, 'build/schema.graphql')).toString();
+ schema = fs.readFileSync(resolve('build/schema.graphql')).toString();
} catch (e) {
console.warn(e);
schema = 'type Query { hello: String }';
@@ -21,12 +24,15 @@ const graphqlOptions = {
module.exports = {
root: true,
+ reportUnusedDisableDirectives: true,
parserOptions: {
- parser: '@babel/eslint-parser',
- sourceType: 'module'
+ ecmaVersion: 2022,
+ sourceType: 'module',
},
env: {
+ node: true,
browser: true,
+ es2022: true,
},
extends: ['plugin:vue/strongly-recommended', 'airbnb-base', 'plugin:storybook/recommended'],
// required to lint *.vue files
@@ -38,12 +44,15 @@ module.exports = {
// check if imports actually resolve
settings: {
'import/resolver': {
- webpack: {
- config: './build/webpack.base.conf.js'
- },
node: {
extensions: ['.js', '.mjs']
- }
+ },
+ alias: {
+ map: [
+ ['#src', resolve('src')],
+ ],
+ extensions: ['.js', '.mjs', '.vue'],
+ },
}
},
// add your custom rules here
@@ -64,6 +73,8 @@ module.exports = {
'import/no-extraneous-dependencies': ['error', {
optionalDependencies: ['test/unit/index.js']
}],
+ // allow files with only one named export
+ 'import/prefer-default-export': 'off',
// allow debugger during development
'no-debugger': isProd ? 'error' : 'off',
// allow console during development
@@ -93,13 +104,17 @@ module.exports = {
'graphql/required-fields': ['error', { ...graphqlOptions, requiredFields: ['id', 'key'] }],
// require component names that match the file name
- "vue/require-name-property": "error",
- "vue/match-component-file-name": [
- "error",
+ 'vue/require-name-property': 'error',
+ 'vue/match-component-file-name': [
+ 'error',
{
- extensions: ["vue"],
+ extensions: ['vue'],
shouldMatchCase: true,
},
],
+
+ // require v-for keys on template root
+ 'vue/no-v-for-template-key': 'off',
+ 'vue/no-v-for-template-key-on-child': 'error',
}
};
diff --git a/.gitignore b/.gitignore
index c05a491218..e27077dd23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,8 @@
.DS_Store
node_modules/
+
+# Temporary files
dist/
-npm-debug.log*
coverage/
test/e2e/screenshots
test/e2e/results
@@ -10,6 +11,11 @@ build/schema.graphql
.nyc_output/
.lighthouseci/
lhci/
+vite.config.js.*
+
+# Logs
+npm-debug.log*
+*storybook.log
# Editor directories and files
.idea
diff --git a/.nvmrc b/.nvmrc
index 7fd023741b..9de2256827 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-v16.15.0
+lts/iron
diff --git a/.storybook/main.js b/.storybook/main.js
index c812937de8..2b8fd156ba 100644
--- a/.storybook/main.js
+++ b/.storybook/main.js
@@ -1,39 +1,18 @@
-const path = require('path');
-
-module.exports = {
- stories: [
- './stories/**/*.stories.@(js|mdx)'
- ],
- addons: [
- '@storybook/addon-essentials',
- '@storybook/addon-links',
- '@storybook/addon-a11y',
- '@storybook/addon-postcss',
- '@storybook/addon-storysource'
- ],
- webpackFinal: async (config) => {
- config.module.rules.push({
- test: /\,css&/,
- exclude: [/\.module\.css$/, /@storybook/],
- use: [
- "style-loader",
- {
- loader: "css-loader",
- options: { importLoaders: 1, sourceMap: false },
- },
- {
- loader: 'postcss-loader',
- options: {
- ident: 'postcss',
- plugins: [
- require('tailwindcss'),
- require('autoprefixer')
- ]
- }
- }
- ],
- include: path.resolve(__dirname, '../'),
- })
- return config
- }
-}
+/** @type { import('@storybook/vue3-vite').StorybookConfig } */
+const config = {
+ stories: ["./stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
+ addons: [
+ "@storybook/addon-links",
+ "@storybook/addon-essentials",
+ "@chromatic-com/storybook",
+ "@storybook/addon-interactions",
+ ],
+ framework: {
+ name: "@storybook/vue3-vite",
+ options: {},
+ },
+ docs: {
+ autodocs: "tag",
+ },
+};
+export default config;
diff --git a/.storybook/manager.js b/.storybook/manager.js
index 9d95268ff6..1aecaed23c 100644
--- a/.storybook/manager.js
+++ b/.storybook/manager.js
@@ -1,4 +1,4 @@
-import { addons } from '@storybook/addons';
+import { addons } from '@storybook/manager-api';
import { create } from '@storybook/theming/create';
const theme = create({
diff --git a/.storybook/mixins/kv-auth0-story-mixin.js b/.storybook/mixins/kv-auth0-story-mixin.js
index e45bf32f98..3de450b2b6 100644
--- a/.storybook/mixins/kv-auth0-story-mixin.js
+++ b/.storybook/mixins/kv-auth0-story-mixin.js
@@ -1,4 +1,4 @@
-import { MockKvAuth0 } from '@/util/KvAuth0';
+import { MockKvAuth0 } from '#src/util/KvAuth0';
export default {
provide: {
diff --git a/.storybook/preview.js b/.storybook/preview.js
index eb676bef30..d26b073b79 100644
--- a/.storybook/preview.js
+++ b/.storybook/preview.js
@@ -1,13 +1,9 @@
-import { addParameters } from '@storybook/vue';
import { MINIMAL_VIEWPORTS} from '@storybook/addon-viewport';
-import Vue from 'vue';
-import Meta from 'vue-meta';
+// import Vue from 'vue';
+// import Meta from 'vue-meta'; // vue-meta has been replaced with unhead (@unhead/vue)
import VueRouter from 'vue-router'
-import KvThemeProvider from '~/@kiva/kv-components/vue/KvThemeProvider';
-import { defaultTheme } from '@kiva/kv-tokens/configs/kivaColors';
-
-//load all the svg icon sprites
-import '@/assets/iconLoader';
+import KvThemeProvider from '@kiva/kv-components/vue/KvThemeProvider.vue';
+import { defaultTheme } from '@kiva/kv-tokens/configs/kivaColors.cjs';
// same styles that are in App.vue
import '../src/assets/scss/app.scss';
@@ -20,21 +16,21 @@ import './tailwind.css';
import './storybookStyles.scss';
// import config file for storybook environment
-import config from '../config/local';
+// import config from '../config/local';
// initialize vue-meta
-Vue.use(Meta);
+// Vue.use(Meta);
// Mock the analytics Vue plugin
-Vue.use({ install: Vue => {
- Vue.directive('kv-track-event', () => {});
- Vue.prototype.$kvTrackEvent = () => {};
-}});
+// Vue.use({ install: Vue => {
+// Vue.directive('kv-track-event', () => {});
+// Vue.prototype.$kvTrackEvent = () => {};
+// }});
-Vue.use(VueRouter)
+// Vue.use(VueRouter)
// provide global application config
-Vue.prototype.$appConfig = config.app;
+// Vue.prototype.$appConfig = config.app;
// add custom viewports
const customViewports = {
@@ -62,10 +58,10 @@ const customViewports = {
};
-addParameters({
+export const parameters = {
options: {
storySort: (a, b) => { // sort the categories alphabetically.
- return a[1].kind === b[1].kind ? 0 : a[1].id.localeCompare(b[1].id, undefined, { numeric: true });
+ return a.id === b.id ? 0 : a.id.localeCompare(b.id, undefined, { numeric: true });
},
showRoots: true,
enableShortcuts: false,
@@ -96,7 +92,7 @@ addParameters({
...customViewports,
},
},
-});
+};
// Wrap all stories with the kv-theme-provider component
export const decorators = [(story) => ({
diff --git a/.storybook/stories/15years.stories.js b/.storybook/stories/15years.stories.js
index 5e265c48a3..26a12656bd 100644
--- a/.storybook/stories/15years.stories.js
+++ b/.storybook/stories/15years.stories.js
@@ -1,17 +1,17 @@
import Vue from 'vue';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins);
-import AppealBanner15 from '@/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBanner15';
-import FifteenYears from '@/pages/15Years/15Years';
-import FifteenYearsHeader from '@/components/15Years/15YearsHeader';
-import FifteenYearsHowKivaWorks from '@/components/15Years/15YearsHowKivaWorks';
-import FifteenYearsIndividuals from '@/components/15Years/15YearsIndividuals';
-import FifteenYearsPartners from '@/components/15Years/15YearsPartners';
-import FifteenYearsStyles from '@/components/15Years/15YearsStyles';
-import FifteenYearsTimeline from '@/components/15Years/15YearsTimeline';
+import AppealBanner15 from '#src/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBanner15';
+import FifteenYears from '#src/pages/15Years/15Years';
+import FifteenYearsHeader from '#src/components/15Years/15YearsHeader';
+import FifteenYearsHowKivaWorks from '#src/components/15Years/15YearsHowKivaWorks';
+import FifteenYearsIndividuals from '#src/components/15Years/15YearsIndividuals';
+import FifteenYearsPartners from '#src/components/15Years/15YearsPartners';
+import FifteenYearsStyles from '#src/components/15Years/15YearsStyles';
+import FifteenYearsTimeline from '#src/components/15Years/15YearsTimeline';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin';
diff --git a/.storybook/stories/AppealBannerCircular.stories.js b/.storybook/stories/AppealBannerCircular.stories.js
index 51fcf8ad64..0c1bff0b9b 100644
--- a/.storybook/stories/AppealBannerCircular.stories.js
+++ b/.storybook/stories/AppealBannerCircular.stories.js
@@ -1,8 +1,8 @@
import Vue from 'vue'
-import AppealBannerCircular from '@/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBannerCircular.vue';
+import AppealBannerCircular from '#src/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBannerCircular.vue';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
export default {
diff --git a/.storybook/stories/BorrowerProfile.stories.js b/.storybook/stories/BorrowerProfile.stories.js
index 6e03af1657..869da42260 100644
--- a/.storybook/stories/BorrowerProfile.stories.js
+++ b/.storybook/stories/BorrowerProfile.stories.js
@@ -1,11 +1,11 @@
import Vue from 'vue'
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
-import BorrowerProfile from '@/pages/BorrowerProfile/BorrowerProfile'
-import FundedBorrowerProfile from '@/components/BorrowerProfile/FundedBorrowerProfile'
+import BorrowerProfile from '#src/pages/BorrowerProfile/BorrowerProfile'
+import FundedBorrowerProfile from '#src/components/BorrowerProfile/FundedBorrowerProfile'
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/ChallengeCallout.stories.js b/.storybook/stories/ChallengeCallout.stories.js
index 7d6e8a4614..43adc5367b 100644
--- a/.storybook/stories/ChallengeCallout.stories.js
+++ b/.storybook/stories/ChallengeCallout.stories.js
@@ -1,4 +1,4 @@
-import ChallengeCallout from '@/components/Lend/LoanSearch/ChallengeCallout';
+import ChallengeCallout from '#src/components/Lend/LoanSearch/ChallengeCallout';
import apolloStoryMixin from "../mixins/apollo-story-mixin";
export default {
diff --git a/.storybook/stories/ChallengeHeader.stories.js b/.storybook/stories/ChallengeHeader.stories.js
index 1ad3a0ef86..e3c1493296 100644
--- a/.storybook/stories/ChallengeHeader.stories.js
+++ b/.storybook/stories/ChallengeHeader.stories.js
@@ -1,4 +1,4 @@
-import ChallengeHeader from '@/components/Thanks/ChallengeHeader';
+import ChallengeHeader from '#src/components/Thanks/ChallengeHeader';
import apolloStoryMixin from "../mixins/apollo-story-mixin";
export default {
diff --git a/.storybook/stories/CheckoutReceipt.stories.js b/.storybook/stories/CheckoutReceipt.stories.js
index 24b9a1f594..685f4fd4ad 100644
--- a/.storybook/stories/CheckoutReceipt.stories.js
+++ b/.storybook/stories/CheckoutReceipt.stories.js
@@ -1,4 +1,4 @@
-import CheckoutReceipt from '@/components/Checkout/CheckoutReceipt';
+import CheckoutReceipt from '#src/components/Checkout/CheckoutReceipt';
import mockedReceiptData from '../mock-data/receipt-data-mock';
// https://api-vm.kiva.org/graphqlgraphql?user_id=1003394&app_id=org.kiva.www&query=query%20checkoutReceipt%20%7B%20%0A%09shop%20%7B%0A%09%09receipt(checkoutId%3A%2038663432)%20%7B%0A%09%09%09credits%20%7B%0A%09%09%09%09values%20%7B%0A%09%09%09%09%09creditType%0A%09%09%09%09%09amount%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09totals%20%7B%0A%20%20%20%20%20%20%20%20bonusAppliedTotal%0A%09%09%09%09itemTotal%0A%09%09%09%09donationTotal%0A%09%09%09%09kivaCardTotal%0A%09%09%09%09depositTotals%20%7B%0A%09%09%09%09%09depositTotal%0A%09%09%09%09%09kivaCreditAdded%0A%09%09%09%09%09kivaCreditUsed%0A%09%09%09%09%7D%0A%20%20%20%20%20%20%20%20freeTrialAppliedTotal%0A%09%09%09%09kivaCreditAppliedTotal%0A%20%20%20%20%20%20%20%20redemptionCodeAppliedTotal%0A%20%20%20%20%20%20%20%20universalCodeAppliedTotal%0A%09%09%09%7D%0A%09%09%09hasFreeCredits%0A%09%09%09items%20%7B%0A%09%09%09%09totalCount%0A%09%09%09%09values%20%7B%0A%09%09%09%09%09id%0A%09%09%09%09%09price%0A%09%09%09%09%09basketItemType%0A%09%09%09%09%09...%20on%20KivaCard%20%7B%0A%09%09%09%09%09%09individualPrice%0A%09%09%09%09%09%09basketItemType%0A%09%09%09%09%09%09kivaCardObject%20%7B%0A%09%09%09%09%09%09%09deliveryType%0A%09%09%09%09%09%09%09mailingInfo%20%7B%0A%09%09%09%09%09%09%09%09firstName%0A%09%09%09%09%09%09%09%09lastName%0A%09%09%09%09%09%09%09%09address%0A%09%09%09%09%09%09%09%09address2%0A%09%09%09%09%09%09%09%09city%0A%09%09%09%09%09%09%09%09state%0A%09%09%09%09%09%09%09%09zip%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09recipient%20%7B%0A%09%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09%09email%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09...%20on%20LoanReservation%20%7B%0A%09%09%09%09%09%09loan%20%7B%0A%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09id%0A%09%09%09%09%09%09%09image%20%7B%0A%09%09%09%09%09%09%09%09url%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09use%0A%09%09%09%09%09%09%09geocode%20%7B%0A%09%09%09%09%09%09%09%09city%0A%09%09%09%09%09%09%09%09country%20%7B%0A%09%09%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09my%20%7B%0A%09%09userAccount%20%7B%0A%09%09%09firstName%0A%09%09%09lastName%0A%09%09%09email%0A%09%09%7D%0A%09%7D%0A%7D%0A&operationName=checkoutReceipt
diff --git a/.storybook/stories/CorporateCampaign.stories.js b/.storybook/stories/CorporateCampaign.stories.js
index 1876b650ff..73e9f58193 100644
--- a/.storybook/stories/CorporateCampaign.stories.js
+++ b/.storybook/stories/CorporateCampaign.stories.js
@@ -1,13 +1,13 @@
import Vue from 'vue';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins);
import apolloStoryMixin from '../mixins/apollo-story-mixin';
-import CorporateCampaignLanding from '@/pages/LandingPages/CorporateCampaign/CCLandingPage';
-import CampaignHero from '@/components/CorporateCampaign/CampaignHero';
-import CampaignStatus from '@/components/CorporateCampaign/CampaignStatus';
+import CorporateCampaignLanding from '#src/pages/LandingPages/CorporateCampaign/CCLandingPage';
+import CampaignHero from '#src/components/CorporateCampaign/CampaignHero';
+import CampaignStatus from '#src/components/CorporateCampaign/CampaignStatus';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
export default {
diff --git a/.storybook/stories/DepositIncentiveBanner.stories.js b/.storybook/stories/DepositIncentiveBanner.stories.js
index fea7dbe95a..5df10d2ea7 100644
--- a/.storybook/stories/DepositIncentiveBanner.stories.js
+++ b/.storybook/stories/DepositIncentiveBanner.stories.js
@@ -1,9 +1,9 @@
import Vue from 'vue'
-import DepositIncentiveBanner from '@/components/WwwFrame/PromotionalBanner/Banners/DepositIncentiveBanner.vue';
+import DepositIncentiveBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/DepositIncentiveBanner.vue';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins);
export default {
diff --git a/.storybook/stories/DepositIncentiveUpsell.stories.js b/.storybook/stories/DepositIncentiveUpsell.stories.js
index 77d6af3fe6..f4c4b04c93 100644
--- a/.storybook/stories/DepositIncentiveUpsell.stories.js
+++ b/.storybook/stories/DepositIncentiveUpsell.stories.js
@@ -1,4 +1,4 @@
-import DepositIncentiveUpsell from '@/components/Checkout/DepositIncentiveUpsell.vue';
+import DepositIncentiveUpsell from '#src/components/Checkout/DepositIncentiveUpsell.vue';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import { mockLoansArray } from '../utils';
diff --git a/.storybook/stories/DonationBanner.stories.js b/.storybook/stories/DonationBanner.stories.js
index 5a454bedde..9d20950ee0 100644
--- a/.storybook/stories/DonationBanner.stories.js
+++ b/.storybook/stories/DonationBanner.stories.js
@@ -1,8 +1,8 @@
import Vue from "vue";
-import DonationBanner from "@/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBanner.vue";
+import DonationBanner from "#src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBanner.vue";
// import plugins
-import kivaPlugins from "@/plugins";
+import kivaPlugins from "#src/plugins";
Vue.use(kivaPlugins);
export default {
diff --git a/.storybook/stories/DonationNudgeLightbox.stories.js b/.storybook/stories/DonationNudgeLightbox.stories.js
index 27d428339e..af05d895a1 100644
--- a/.storybook/stories/DonationNudgeLightbox.stories.js
+++ b/.storybook/stories/DonationNudgeLightbox.stories.js
@@ -1,4 +1,4 @@
-import DonationNudgeLightbox from '@/components/Checkout/DonationNudge/DonationNudgeLightbox.vue';
+import DonationNudgeLightbox from '#src/components/Checkout/DonationNudge/DonationNudgeLightbox.vue';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
diff --git a/.storybook/stories/DynamicHeroClassic.stories.js b/.storybook/stories/DynamicHeroClassic.stories.js
index 71b4b432e0..ece12d1dda 100644
--- a/.storybook/stories/DynamicHeroClassic.stories.js
+++ b/.storybook/stories/DynamicHeroClassic.stories.js
@@ -1,4 +1,4 @@
-import DynamicHeroClassic from '@/components/Contentful/DynamicHeroClassic';
+import DynamicHeroClassic from '#src/components/Contentful/DynamicHeroClassic';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
export default {
diff --git a/.storybook/stories/EcoChallengeLightbox.stories.js b/.storybook/stories/EcoChallengeLightbox.stories.js
index 5bd33e4454..fc240f1c39 100644
--- a/.storybook/stories/EcoChallengeLightbox.stories.js
+++ b/.storybook/stories/EcoChallengeLightbox.stories.js
@@ -1,4 +1,4 @@
-import EcoChallengeLightbox from '@/components/Lightboxes/EcoChallengeLightbox.vue';
+import EcoChallengeLightbox from '#src/components/Lightboxes/EcoChallengeLightbox.vue';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
diff --git a/.storybook/stories/GenericPromoBanner.stories.js b/.storybook/stories/GenericPromoBanner.stories.js
index 6b0e8f3984..34a93a88c4 100644
--- a/.storybook/stories/GenericPromoBanner.stories.js
+++ b/.storybook/stories/GenericPromoBanner.stories.js
@@ -1,8 +1,8 @@
import Vue from 'vue'
-import GenericPromoBanner from '@/components/WwwFrame/PromotionalBanner/Banners/GenericPromoBanner';
+import GenericPromoBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/GenericPromoBanner';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
const decodeHTML = function(html) {
var txt = document.createElement('textarea');
diff --git a/.storybook/stories/GetStarted.stories.js b/.storybook/stories/GetStarted.stories.js
index f7016aa0c9..27257bb3b4 100644
--- a/.storybook/stories/GetStarted.stories.js
+++ b/.storybook/stories/GetStarted.stories.js
@@ -1,12 +1,12 @@
import Vue from 'vue'
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
-import GetStartedCauses from '@/pages/GetStarted/GetStartedCauses';
-import GetStartedPlaces from '@/pages/GetStarted/GetStartedPlaces';
-import GetStartedResults from '@/pages/GetStarted/GetStartedResults';
+import GetStartedCauses from '#src/pages/GetStarted/GetStartedCauses';
+import GetStartedPlaces from '#src/pages/GetStarted/GetStartedPlaces';
+import GetStartedResults from '#src/pages/GetStarted/GetStartedResults';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/GridLoanCard.stories.js b/.storybook/stories/GridLoanCard.stories.js
index 7151ec8946..2c9c67290e 100644
--- a/.storybook/stories/GridLoanCard.stories.js
+++ b/.storybook/stories/GridLoanCard.stories.js
@@ -1,9 +1,9 @@
import Vue from 'vue'
import apolloStoryMixin from '../mixins/apollo-story-mixin';
-import GridLoanCard from '@/components/LoanCards/GridLoanCard';
+import GridLoanCard from '#src/components/LoanCards/GridLoanCard';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
export default {
diff --git a/.storybook/stories/IwdActivityAvatar.stories.js b/.storybook/stories/IwdActivityAvatar.stories.js
index 83082d5f43..f65604bde8 100644
--- a/.storybook/stories/IwdActivityAvatar.stories.js
+++ b/.storybook/stories/IwdActivityAvatar.stories.js
@@ -1,4 +1,4 @@
-import ActivityAvatar from '@/components/Iwd/ActivityAvatar';
+import ActivityAvatar from '#src/components/Iwd/ActivityAvatar';
export default {
title: 'IWD/ActivityAvatar',
diff --git a/.storybook/stories/IwdActivityCard.stories.js b/.storybook/stories/IwdActivityCard.stories.js
index 284eda60bc..e2e97838be 100644
--- a/.storybook/stories/IwdActivityCard.stories.js
+++ b/.storybook/stories/IwdActivityCard.stories.js
@@ -1,4 +1,4 @@
-import ActivityCard from '@/components/Iwd/ActivityCard';
+import ActivityCard from '#src/components/Iwd/ActivityCard';
export default {
title: 'IWD/ActivityCard',
diff --git a/.storybook/stories/IwdActivityFeed.stories.js b/.storybook/stories/IwdActivityFeed.stories.js
index aa27080159..b32ee05c93 100644
--- a/.storybook/stories/IwdActivityFeed.stories.js
+++ b/.storybook/stories/IwdActivityFeed.stories.js
@@ -1,4 +1,4 @@
-import ActivityFeed from '@/components/Iwd/ActivityFeed';
+import ActivityFeed from '#src/components/Iwd/ActivityFeed';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
const queryResult = {
diff --git a/.storybook/stories/KivaClassicBasicLoanCard.stories.js b/.storybook/stories/KivaClassicBasicLoanCard.stories.js
index 3364d6498e..cb82cf60de 100644
--- a/.storybook/stories/KivaClassicBasicLoanCard.stories.js
+++ b/.storybook/stories/KivaClassicBasicLoanCard.stories.js
@@ -1,4 +1,4 @@
-import KivaClassicBasicLoanCard from '@/components/LoanCards/KivaClassicBasicLoanCard';
+import KivaClassicBasicLoanCard from '#src/components/LoanCards/KivaClassicBasicLoanCard';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js b/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js
index d6f22db295..6eadca4e2a 100644
--- a/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js
+++ b/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js
@@ -1,8 +1,8 @@
-import KivaClassicSingleCategoryCarousel from '@/components/LoanCollections/KivaClassicSingleCategoryCarousel.vue';
+import KivaClassicSingleCategoryCarousel from '#src/components/LoanCollections/KivaClassicSingleCategoryCarousel.vue';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
-import KvGrid from '~/@kiva/kv-components/vue/KvGrid';
-import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer';
+import KvGrid from '@kiva/kv-components/vue/KvGrid';
+import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer';
const queryResult = {
"data": {
diff --git a/.storybook/stories/KivaMultiCategoryGrid.stories.js b/.storybook/stories/KivaMultiCategoryGrid.stories.js
index 9d919a3edc..29a60eb255 100644
--- a/.storybook/stories/KivaMultiCategoryGrid.stories.js
+++ b/.storybook/stories/KivaMultiCategoryGrid.stories.js
@@ -1,8 +1,8 @@
-import KivaLoanCardCategory from '@/components/LoanCollections/HomeExp/KivaLoanCardCategory';
+import KivaLoanCardCategory from '#src/components/LoanCollections/HomeExp/KivaLoanCardCategory';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
-import LoanCategorySelectorHomeExp from '@/components/LoanCollections/HomeExp/LoanCategorySelectorHomeExp';
-import KvGrid from '~/@kiva/kv-components/vue/KvGrid';
+import LoanCategorySelectorHomeExp from '#src/components/LoanCollections/HomeExp/LoanCategorySelectorHomeExp';
+import KvGrid from '@kiva/kv-components/vue/KvGrid';
export default {
title: 'New Home Page/Kiva Multi Category Grid',
diff --git a/.storybook/stories/KvAccordionItem.stories.js b/.storybook/stories/KvAccordionItem.stories.js
index 5fcf96cda0..3a28f4b96f 100644
--- a/.storybook/stories/KvAccordionItem.stories.js
+++ b/.storybook/stories/KvAccordionItem.stories.js
@@ -1,4 +1,4 @@
-import KvAccordionItem from '@/components/Kv/KvAccordionItem';
+import KvAccordionItem from '#src/components/Kv/KvAccordionItem';
export default {
title: 'Kv/KvAccordionItem',
diff --git a/.storybook/stories/KvActivityRow.stories.js b/.storybook/stories/KvActivityRow.stories.js
index a3d72b1f18..2a0fd7cee3 100644
--- a/.storybook/stories/KvActivityRow.stories.js
+++ b/.storybook/stories/KvActivityRow.stories.js
@@ -1,4 +1,4 @@
-import KvActivityRow from '@/components/Kv/KvActivityRow.vue';
+import KvActivityRow from '#src/components/Kv/KvActivityRow.vue';
export default {
title: 'Kv/KvActivityRow',
@@ -22,4 +22,4 @@ const story = (args) => {
return template;
};
-export const Default = story({ activity });
\ No newline at end of file
+export const Default = story({ activity });
diff --git a/.storybook/stories/KvAlert.stories.js b/.storybook/stories/KvAlert.stories.js
index 88c629e020..29c43137fc 100644
--- a/.storybook/stories/KvAlert.stories.js
+++ b/.storybook/stories/KvAlert.stories.js
@@ -1,4 +1,4 @@
-import KvAlert from '@/components/Kv/KvAlert';
+import KvAlert from '#src/components/Kv/KvAlert';
export default {
title: 'Kv/KvAlert',
diff --git a/.storybook/stories/KvBaseInput.stories.js b/.storybook/stories/KvBaseInput.stories.js
index 5e5e4f1bbc..9deff9c6cd 100644
--- a/.storybook/stories/KvBaseInput.stories.js
+++ b/.storybook/stories/KvBaseInput.stories.js
@@ -1,4 +1,4 @@
-import KvBaseInput from '@/components/Kv/KvBaseInput';
+import KvBaseInput from '#src/components/Kv/KvBaseInput';
const commonData = {
vuelidateObject: {
diff --git a/.storybook/stories/KvButton.stories.js b/.storybook/stories/KvButton.stories.js
index 755525a5be..0102de4f7f 100644
--- a/.storybook/stories/KvButton.stories.js
+++ b/.storybook/stories/KvButton.stories.js
@@ -1,4 +1,4 @@
-import KvButton from '@/components/Kv/KvButton';
+import KvButton from '#src/components/Kv/KvButton';
export default {
title: 'KV/KvButton',
diff --git a/.storybook/stories/KvCarousel.stories.js b/.storybook/stories/KvCarousel.stories.js
index 92106003e1..5d8ef0f984 100644
--- a/.storybook/stories/KvCarousel.stories.js
+++ b/.storybook/stories/KvCarousel.stories.js
@@ -1,8 +1,8 @@
-import KvCarousel from '@/components/Kv/KvCarousel';
-import KvCarouselSlide from '@/components/Kv/KvCarouselSlide';
-import KvCauseSelector from '@/components/Kv/KvCauseSelector';
-import KvLoadingSpinner from '@/components/Kv/KvLoadingSpinner';
-import KvResponsiveImage from '@/components/Kv/KvResponsiveImage';
+import KvCarousel from '#src/components/Kv/KvCarousel';
+import KvCarouselSlide from '#src/components/Kv/KvCarouselSlide';
+import KvCauseSelector from '#src/components/Kv/KvCauseSelector';
+import KvLoadingSpinner from '#src/components/Kv/KvLoadingSpinner';
+import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage';
import causeList from '../mock-data/cause-selector-data-mock';
@@ -316,7 +316,7 @@ export const loanCardExample = () => ({
}
});
-const slidesImageRequire = require.context('@/assets/images/possibilities-banners/kivan-slider', true);
+const slidesImageRequire = require.context('#src/assets/images/possibilities-banners/kivan-slider', true);
export const KivanSlider = () => ({
components: {
KvCarousel,
@@ -386,7 +386,7 @@ export const KivanSlider = () => ({
`,
});
-const imageRequire = require.context('@/assets/images/hero-slideshow/', true);
+const imageRequire = require.context('#src/assets/images/hero-slideshow/', true);
export const ImagesOnlyLazyLoadLikeHomepage = () => ({
components: {
KvCarousel,
diff --git a/.storybook/stories/KvCauseSelector.stories.js b/.storybook/stories/KvCauseSelector.stories.js
index 7201174d7d..e86abc3776 100644
--- a/.storybook/stories/KvCauseSelector.stories.js
+++ b/.storybook/stories/KvCauseSelector.stories.js
@@ -1,4 +1,4 @@
-import KvCauseSelector from '@/components/Kv/KvCauseSelector';
+import KvCauseSelector from '#src/components/Kv/KvCauseSelector';
import causeList from '../mock-data/cause-selector-data-mock';
diff --git a/.storybook/stories/KvCheckbox.stories.js b/.storybook/stories/KvCheckbox.stories.js
index 25f2f5f7da..9765087800 100644
--- a/.storybook/stories/KvCheckbox.stories.js
+++ b/.storybook/stories/KvCheckbox.stories.js
@@ -1,4 +1,4 @@
-import KvCheckbox from '@/components/Kv/KvCheckbox';
+import KvCheckbox from '#src/components/Kv/KvCheckbox';
export default {
title: 'Kv/Form Elements/KvCheckbox',
diff --git a/.storybook/stories/KvCheckboxList.stories.js b/.storybook/stories/KvCheckboxList.stories.js
index db616138d6..45cbc1f5d6 100644
--- a/.storybook/stories/KvCheckboxList.stories.js
+++ b/.storybook/stories/KvCheckboxList.stories.js
@@ -1,4 +1,4 @@
-import KvCheckboxList from '@/components/Kv/KvCheckboxList';
+import KvCheckboxList from '#src/components/Kv/KvCheckboxList';
export default {
title: 'Kv/Form Elements/KvCheckboxList',
diff --git a/.storybook/stories/KvChip.stories.js b/.storybook/stories/KvChip.stories.js
index 8ff0121bcc..44d27806a1 100644
--- a/.storybook/stories/KvChip.stories.js
+++ b/.storybook/stories/KvChip.stories.js
@@ -1,4 +1,4 @@
-import KvChip from '@/components/Kv/KvChip';
+import KvChip from '#src/components/Kv/KvChip';
export default {
title: 'Kv/KvChip',
diff --git a/.storybook/stories/KvContentfulImg.stories.js b/.storybook/stories/KvContentfulImg.stories.js
index eaad98444c..fec3080dab 100644
--- a/.storybook/stories/KvContentfulImg.stories.js
+++ b/.storybook/stories/KvContentfulImg.stories.js
@@ -1,4 +1,4 @@
-import KvContentfulImg from '@/components/Kv/KvContentfulImg';
+import KvContentfulImg from '#src/components/Kv/KvContentfulImg';
export default {
title: 'Kv/KvContentfulImg',
diff --git a/.storybook/stories/KvCurrencyInput.stories.js b/.storybook/stories/KvCurrencyInput.stories.js
index 6af2d70fcd..c7cd13efc6 100644
--- a/.storybook/stories/KvCurrencyInput.stories.js
+++ b/.storybook/stories/KvCurrencyInput.stories.js
@@ -1,4 +1,4 @@
-import KvCurrencyInput from '@/components/Kv/KvCurrencyInput';
+import KvCurrencyInput from '#src/components/Kv/KvCurrencyInput';
import { validationMixin } from 'vuelidate';
import { required, minValue, maxValue } from 'vuelidate/lib/validators';
diff --git a/.storybook/stories/KvExpandableQuestion.stories.js b/.storybook/stories/KvExpandableQuestion.stories.js
index d64cea3b24..8f2aa349c3 100644
--- a/.storybook/stories/KvExpandableQuestion.stories.js
+++ b/.storybook/stories/KvExpandableQuestion.stories.js
@@ -1,8 +1,8 @@
import Vue from 'vue'
-import KvExpandableQuestion from '@/components/Kv/KvExpandableQuestion';
+import KvExpandableQuestion from '#src/components/Kv/KvExpandableQuestion';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
export default {
@@ -24,7 +24,7 @@ export const Default = (args, { argTypes }) => ({
diff --git a/.storybook/stories/KvFlag.stories.js b/.storybook/stories/KvFlag.stories.js
index 80de3b291d..75e6bdfaf9 100644
--- a/.storybook/stories/KvFlag.stories.js
+++ b/.storybook/stories/KvFlag.stories.js
@@ -1,4 +1,4 @@
-import KvFlag from '@/components/Kv/KvFlag';
+import KvFlag from '#src/components/Kv/KvFlag';
import { getCountryList } from 'flag-icon-css';
diff --git a/.storybook/stories/KvFormKitchenSink.stories.js b/.storybook/stories/KvFormKitchenSink.stories.js
index 7c5c661ec7..088876ac2f 100644
--- a/.storybook/stories/KvFormKitchenSink.stories.js
+++ b/.storybook/stories/KvFormKitchenSink.stories.js
@@ -1,13 +1,13 @@
-import KvBaseInput from '@/components/Kv/KvBaseInput';
-import KvCheckbox from '@/components/Kv/KvCheckbox';
-import KvCurrencyInput from '@/components/Kv/KvCurrencyInput';
-import KvSelect from '@/components/Kv/KvSelect';
-import KvPhoneInput from '@/components/Kv/KvPhoneInput';
-import KvPillToggle from '@/components/Kv/KvPillToggle';
-import KvRadio from '@/components/Kv/KvRadio';
-import KvRangeSlider from '@/components/Kv/KvRangeSlider';
-import KvToggle from '@/components/Kv/KvToggle';
-import KvVerificationCodeInput from '@/components/Kv/KvVerificationCodeInput';
+import KvBaseInput from '#src/components/Kv/KvBaseInput';
+import KvCheckbox from '#src/components/Kv/KvCheckbox';
+import KvCurrencyInput from '#src/components/Kv/KvCurrencyInput';
+import KvSelect from '#src/components/Kv/KvSelect';
+import KvPhoneInput from '#src/components/Kv/KvPhoneInput';
+import KvPillToggle from '#src/components/Kv/KvPillToggle';
+import KvRadio from '#src/components/Kv/KvRadio';
+import KvRangeSlider from '#src/components/Kv/KvRangeSlider';
+import KvToggle from '#src/components/Kv/KvToggle';
+import KvVerificationCodeInput from '#src/components/Kv/KvVerificationCodeInput';
export default {
title: 'Kv/Form Elements',
diff --git a/.storybook/stories/KvFrequentlyAskedQuestions.stories.js b/.storybook/stories/KvFrequentlyAskedQuestions.stories.js
index 7e3b8c696e..6f6e7339f2 100644
--- a/.storybook/stories/KvFrequentlyAskedQuestions.stories.js
+++ b/.storybook/stories/KvFrequentlyAskedQuestions.stories.js
@@ -1,6 +1,6 @@
-import SectionWithBackgroundClassic from '@/components/Contentful/SectionWithBackgroundClassic';
-import KvFrequentlyAskedQuestions from '@/components/Kv/KvFrequentlyAskedQuestions';
-import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer';
+import SectionWithBackgroundClassic from '#src/components/Contentful/SectionWithBackgroundClassic';
+import KvFrequentlyAskedQuestions from '#src/components/Kv/KvFrequentlyAskedQuestions';
+import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer';
export default {
title: 'Kv/KvFrequentlyAskedQuestions',
diff --git a/.storybook/stories/KvHero.stories.js b/.storybook/stories/KvHero.stories.js
index 3e5019596a..2ce1e3d469 100644
--- a/.storybook/stories/KvHero.stories.js
+++ b/.storybook/stories/KvHero.stories.js
@@ -1,8 +1,8 @@
-import KvHero from '@/components/Kv/KvHero';
-import KvButton from '@/components/Kv/KvButton';
-import KvResponsiveImage from '@/components/Kv/KvResponsiveImage';
+import KvHero from '#src/components/Kv/KvHero';
+import KvButton from '#src/components/Kv/KvButton';
+import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage';
-const imagesRequire = require.context('@/assets/images/mg-hero-slideshow', true);
+const imagesRequire = require.context('#src/assets/images/mg-hero-slideshow', true);
const sampleResponsiveImageSet = [
['small', imagesRequire('./mg-hppromo-1-sm-std.jpg')],
['small retina', imagesRequire('./mg-hppromo-1-sm-retina.jpg')],
diff --git a/.storybook/stories/KvIcon.stories.js b/.storybook/stories/KvIcon.stories.js
index e656f5ee65..af286f78d6 100644
--- a/.storybook/stories/KvIcon.stories.js
+++ b/.storybook/stories/KvIcon.stories.js
@@ -1,4 +1,4 @@
-import KvIcon from '@/components/Kv/KvIcon';
+import KvIcon from '#src/components/Kv/KvIcon';
function getFilenames(r) {
return r.keys().map((filename) => {
@@ -31,7 +31,7 @@ export const inlined = () => ({
},
data() {
return {
- iconNames: getFilenames(require.context('@/assets/icons/inline/', true, /\.svg$/))
+ iconNames: getFilenames(require.context('#src/assets/icons/inline/', true, /\.svg$/))
}
},
template: `
@@ -65,7 +65,7 @@ export const fromSprite = () => ({
},
data() {
return {
- iconNames: getFilenames(require.context('@/assets/icons/sprite/', true, /\.svg$/))
+ iconNames: getFilenames(require.context('#src/assets/icons/sprite/', true, /\.svg$/))
}
},
template: `
diff --git a/.storybook/stories/KvIconButton.stories.js b/.storybook/stories/KvIconButton.stories.js
index 6c2106bf86..19639b5095 100644
--- a/.storybook/stories/KvIconButton.stories.js
+++ b/.storybook/stories/KvIconButton.stories.js
@@ -1,5 +1,5 @@
-import KvIcon from '@/components/Kv/KvIcon';
-import KvIconButton from '@/components/Kv/KvIconButton';
+import KvIcon from '#src/components/Kv/KvIcon';
+import KvIconButton from '#src/components/Kv/KvIconButton';
export default {
title: 'KV/KvIconButton',
diff --git a/.storybook/stories/KvLightbox.stories.js b/.storybook/stories/KvLightbox.stories.js
index edbf6a4de4..89bbbe2234 100644
--- a/.storybook/stories/KvLightbox.stories.js
+++ b/.storybook/stories/KvLightbox.stories.js
@@ -1,5 +1,5 @@
-import KvLightbox from '@/components/Kv/KvLightbox';
-import KvButton from '@/components/Kv/KvButton';
+import KvLightbox from '#src/components/Kv/KvLightbox';
+import KvButton from '#src/components/Kv/KvButton';
const loremIpsum = `
diff --git a/.storybook/stories/KvLoadingParagraph.stories.js b/.storybook/stories/KvLoadingParagraph.stories.js
index 6a9f209b98..9cdfeae37b 100644
--- a/.storybook/stories/KvLoadingParagraph.stories.js
+++ b/.storybook/stories/KvLoadingParagraph.stories.js
@@ -1,4 +1,4 @@
-import KvLoadingParagraph from '@/components/Kv/KvLoadingParagraph';
+import KvLoadingParagraph from '#src/components/Kv/KvLoadingParagraph';
export default {
title: 'Kv/KvLoadingParagraph',
diff --git a/.storybook/stories/KvLoadingSpinner.stories.js b/.storybook/stories/KvLoadingSpinner.stories.js
index 1c08d9b8b1..e978890f82 100644
--- a/.storybook/stories/KvLoadingSpinner.stories.js
+++ b/.storybook/stories/KvLoadingSpinner.stories.js
@@ -1,4 +1,4 @@
-import KvLoadingSpinner from '@/components/Kv/KvLoadingSpinner';
+import KvLoadingSpinner from '#src/components/Kv/KvLoadingSpinner';
export default {
title: 'Kv/KvLoadingSpinner',
diff --git a/.storybook/stories/KvLoanActivities.stories.js b/.storybook/stories/KvLoanActivities.stories.js
index b0c24d1bd2..ead44531cc 100644
--- a/.storybook/stories/KvLoanActivities.stories.js
+++ b/.storybook/stories/KvLoanActivities.stories.js
@@ -1,4 +1,4 @@
-import KvLoanActivities from '@/components/Kv/KvLoanActivities.vue';
+import KvLoanActivities from '#src/components/Kv/KvLoanActivities.vue';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
import activities from '../mock-data/activity-feed-data-mock';
diff --git a/.storybook/stories/KvLoanCards.stories.js b/.storybook/stories/KvLoanCards.stories.js
index ad9b216c57..df5802ae30 100644
--- a/.storybook/stories/KvLoanCards.stories.js
+++ b/.storybook/stories/KvLoanCards.stories.js
@@ -1,4 +1,4 @@
-import NewHomePageLoanCard from '@/components/LoanCards/NewHomePageLoanCard';
+import NewHomePageLoanCard from '#src/components/LoanCards/NewHomePageLoanCard';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/KvMap.stories.js b/.storybook/stories/KvMap.stories.js
index 6d5f81cb04..d47aff6c43 100644
--- a/.storybook/stories/KvMap.stories.js
+++ b/.storybook/stories/KvMap.stories.js
@@ -1,4 +1,4 @@
-import KvMap from '@/components/Kv/KvMap';
+import KvMap from '#src/components/Kv/KvMap';
export default {
title: 'Kv/KvMap',
diff --git a/.storybook/stories/KvPagination.stories.js b/.storybook/stories/KvPagination.stories.js
index de13f15560..fafdc0775d 100644
--- a/.storybook/stories/KvPagination.stories.js
+++ b/.storybook/stories/KvPagination.stories.js
@@ -1,4 +1,4 @@
-import KvPagination from '@/components/Kv/KvPagination';
+import KvPagination from '#src/components/Kv/KvPagination';
export default {
title: 'Kv/KvPagination',
diff --git a/.storybook/stories/KvPhoneInput.stories.js b/.storybook/stories/KvPhoneInput.stories.js
index 194d02238a..ca8f496a60 100644
--- a/.storybook/stories/KvPhoneInput.stories.js
+++ b/.storybook/stories/KvPhoneInput.stories.js
@@ -1,4 +1,4 @@
-import KvPhoneInput from '@/components/Kv/KvPhoneInput';
+import KvPhoneInput from '#src/components/Kv/KvPhoneInput';
export default {
title: 'Kv/Form Elements/KvPhoneInput',
diff --git a/.storybook/stories/KvPillToggle.stories.js b/.storybook/stories/KvPillToggle.stories.js
index 86d69d89e4..c7d7a6e64d 100644
--- a/.storybook/stories/KvPillToggle.stories.js
+++ b/.storybook/stories/KvPillToggle.stories.js
@@ -1,4 +1,4 @@
-import KvPillToggle from '@/components/Kv/KvPillToggle';
+import KvPillToggle from '#src/components/Kv/KvPillToggle';
export default {
title: 'Kv/Form Elements/KvPillToggle',
diff --git a/.storybook/stories/KvProgressBar.stories.js b/.storybook/stories/KvProgressBar.stories.js
index b1cd8e0b2a..e1b8c726c1 100644
--- a/.storybook/stories/KvProgressBar.stories.js
+++ b/.storybook/stories/KvProgressBar.stories.js
@@ -1,4 +1,4 @@
-import KvProgressBar from '@/components/Kv/KvProgressBar';
+import KvProgressBar from '#src/components/Kv/KvProgressBar';
export default {
title: 'Kv/KvProgressBar',
diff --git a/.storybook/stories/KvProgressCampaign.stories.js b/.storybook/stories/KvProgressCampaign.stories.js
index 3166c8a50d..51863ecca6 100644
--- a/.storybook/stories/KvProgressCampaign.stories.js
+++ b/.storybook/stories/KvProgressCampaign.stories.js
@@ -1,4 +1,4 @@
-import KvProgressCampaign from '@/components/Kv/KvProgressCampaign';
+import KvProgressCampaign from '#src/components/Kv/KvProgressCampaign';
export default {
title: 'Kv/KvProgressCampaign',
diff --git a/.storybook/stories/KvProgressCircle.stories.js b/.storybook/stories/KvProgressCircle.stories.js
index 4987bf81b5..29a808fba1 100644
--- a/.storybook/stories/KvProgressCircle.stories.js
+++ b/.storybook/stories/KvProgressCircle.stories.js
@@ -1,4 +1,4 @@
-import KvProgressCircle from '@/components/Kv/KvProgressCircle';
+import KvProgressCircle from '#src/components/Kv/KvProgressCircle';
export default {
title: 'Kv/KvProgressCircle',
diff --git a/.storybook/stories/KvRadio.stories.js b/.storybook/stories/KvRadio.stories.js
index fad03a6087..0ad7e18e82 100644
--- a/.storybook/stories/KvRadio.stories.js
+++ b/.storybook/stories/KvRadio.stories.js
@@ -1,4 +1,4 @@
-import KvRadio from '@/components/Kv/KvRadio';
+import KvRadio from '#src/components/Kv/KvRadio';
export default {
title: 'Kv/Form Elements/KvRadio',
diff --git a/.storybook/stories/KvRangeMinMaxSlider.stories.js b/.storybook/stories/KvRangeMinMaxSlider.stories.js
index 85773b2023..f9f4500201 100644
--- a/.storybook/stories/KvRangeMinMaxSlider.stories.js
+++ b/.storybook/stories/KvRangeMinMaxSlider.stories.js
@@ -1,4 +1,4 @@
-import KvRangeMinMaxSlider from '@/components/Kv/KvRangeMinMaxSlider';
+import KvRangeMinMaxSlider from '#src/components/Kv/KvRangeMinMaxSlider';
export default {
title: 'Kv/Form Elements/KvRangeMinMaxSlider',
diff --git a/.storybook/stories/KvRangeSlider.stories.js b/.storybook/stories/KvRangeSlider.stories.js
index 56ef69d49e..595c0a2070 100644
--- a/.storybook/stories/KvRangeSlider.stories.js
+++ b/.storybook/stories/KvRangeSlider.stories.js
@@ -1,4 +1,4 @@
-import KvRangeSlider from '@/components/Kv/KvRangeSlider';
+import KvRangeSlider from '#src/components/Kv/KvRangeSlider';
export default {
title: 'Kv/Form Elements/KvRangeSlider',
diff --git a/.storybook/stories/KvResponsiveImage.stories.js b/.storybook/stories/KvResponsiveImage.stories.js
index 0270ec8bbb..ac69d21b6a 100644
--- a/.storybook/stories/KvResponsiveImage.stories.js
+++ b/.storybook/stories/KvResponsiveImage.stories.js
@@ -1,4 +1,4 @@
-import KvResponsiveImage from '@/components/Kv/KvResponsiveImage';
+import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage';
export default {
title: 'Kv/KvResponsiveImage',
diff --git a/.storybook/stories/KvResultsPerPage.stories.js b/.storybook/stories/KvResultsPerPage.stories.js
index c644b0d944..8da9738966 100644
--- a/.storybook/stories/KvResultsPerPage.stories.js
+++ b/.storybook/stories/KvResultsPerPage.stories.js
@@ -1,4 +1,4 @@
-import KvResultsPerPage from '@/components/Kv/KvResultsPerPage';
+import KvResultsPerPage from '#src/components/Kv/KvResultsPerPage';
export default {
title: 'Kv/KvResultsPerPage',
diff --git a/.storybook/stories/KvSectionModalLoader.stories.js b/.storybook/stories/KvSectionModalLoader.stories.js
index 33916b7adf..6ec0bb38fd 100644
--- a/.storybook/stories/KvSectionModalLoader.stories.js
+++ b/.storybook/stories/KvSectionModalLoader.stories.js
@@ -1,4 +1,4 @@
-import KvSectionModalLoader from '@/components/Kv/KvSectionModalLoader';
+import KvSectionModalLoader from '#src/components/Kv/KvSectionModalLoader';
export default {
title: 'Kv/KvSectionModalLoader',
diff --git a/.storybook/stories/KvSelect.stories.js b/.storybook/stories/KvSelect.stories.js
index f8f4a40494..847c445500 100644
--- a/.storybook/stories/KvSelect.stories.js
+++ b/.storybook/stories/KvSelect.stories.js
@@ -1,4 +1,4 @@
-import KvSelect from '@/components/Kv/KvSelect';
+import KvSelect from '#src/components/Kv/KvSelect';
export default {
title: 'Kv/Form Elements/KvSelect',
diff --git a/.storybook/stories/KvSelectBox.stories.js b/.storybook/stories/KvSelectBox.stories.js
index 0207764359..1d53c5acf4 100644
--- a/.storybook/stories/KvSelectBox.stories.js
+++ b/.storybook/stories/KvSelectBox.stories.js
@@ -1,4 +1,4 @@
-import KvSelectBox from '@/components/Kv/KvSelectBox';
+import KvSelectBox from '#src/components/Kv/KvSelectBox';
export default {
title: 'Kv/Form Elements/KvSelectBox',
diff --git a/.storybook/stories/KvSettingsCard.stories.js b/.storybook/stories/KvSettingsCard.stories.js
index 77e74c9863..38ee57bb7a 100644
--- a/.storybook/stories/KvSettingsCard.stories.js
+++ b/.storybook/stories/KvSettingsCard.stories.js
@@ -1,4 +1,4 @@
-import KvSettingsCard from '@/components/Kv/KvSettingsCard';
+import KvSettingsCard from '#src/components/Kv/KvSettingsCard';
export default {
title: 'Kv/KvSettingsCard',
diff --git a/.storybook/stories/KvSocialShareButton.stories.js b/.storybook/stories/KvSocialShareButton.stories.js
index fa2b402d7d..892958a9be 100644
--- a/.storybook/stories/KvSocialShareButton.stories.js
+++ b/.storybook/stories/KvSocialShareButton.stories.js
@@ -1,4 +1,4 @@
-import KvSocialShareButton from '@/components/Kv/KvSocialShareButton';
+import KvSocialShareButton from '#src/components/Kv/KvSocialShareButton';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
export default {
diff --git a/.storybook/stories/KvToggle.stories.js b/.storybook/stories/KvToggle.stories.js
index 894feac7a8..39545a8bf8 100644
--- a/.storybook/stories/KvToggle.stories.js
+++ b/.storybook/stories/KvToggle.stories.js
@@ -1,4 +1,4 @@
-import KvToggle from '@/components/Kv/KvToggle';
+import KvToggle from '#src/components/Kv/KvToggle';
export default {
title: 'Kv/Form Elements/KvToggle',
diff --git a/.storybook/stories/KvTooltip.stories.js b/.storybook/stories/KvTooltip.stories.js
index f1007dafb5..d1c3ab6e2e 100644
--- a/.storybook/stories/KvTooltip.stories.js
+++ b/.storybook/stories/KvTooltip.stories.js
@@ -1,5 +1,5 @@
-import KvTooltip from '@/components/Kv/KvTooltip';
-import KvIcon from '@/components/Kv/KvIcon';
+import KvTooltip from '#src/components/Kv/KvTooltip';
+import KvIcon from '#src/components/Kv/KvIcon';
export default {
title: 'Kv/KvTooltip',
diff --git a/.storybook/stories/KvVerificationCodeInput.stories.js b/.storybook/stories/KvVerificationCodeInput.stories.js
index 310feb9b74..a1587a3f2b 100644
--- a/.storybook/stories/KvVerificationCodeInput.stories.js
+++ b/.storybook/stories/KvVerificationCodeInput.stories.js
@@ -1,4 +1,4 @@
-import KvVerificationCodeInput from '@/components/Kv/KvVerificationCodeInput';
+import KvVerificationCodeInput from '#src/components/Kv/KvVerificationCodeInput';
export default {
title: 'Kv/Form Elements/KvVerificationCodeInput',
diff --git a/.storybook/stories/ListLoanCard.stories.js b/.storybook/stories/ListLoanCard.stories.js
index b27e703e73..6057512251 100644
--- a/.storybook/stories/ListLoanCard.stories.js
+++ b/.storybook/stories/ListLoanCard.stories.js
@@ -1,5 +1,5 @@
import apolloStoryMixin from '../mixins/apollo-story-mixin';
-import ListLoanCard from '@/components/LoanCards/ListLoanCard';
+import ListLoanCard from '#src/components/LoanCards/ListLoanCard';
import { mockLoansArray } from '../utils';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/LoanSearchChallengeHeader.stories.js b/.storybook/stories/LoanSearchChallengeHeader.stories.js
index e861fa5d86..cc05032a0b 100644
--- a/.storybook/stories/LoanSearchChallengeHeader.stories.js
+++ b/.storybook/stories/LoanSearchChallengeHeader.stories.js
@@ -1,4 +1,4 @@
-import ChallengeHeader from '@/components/Lend/LoanSearch/ChallengeHeader';
+import ChallengeHeader from '#src/components/Lend/LoanSearch/ChallengeHeader';
export default {
title: 'Loan Search/Challenge Header',
@@ -12,7 +12,7 @@ const story = (args = {}) => {
template: `
`,
-
+
});
template.args = args;
return template;
diff --git a/.storybook/stories/LoanSearchCheckboxListFilter.stories.js b/.storybook/stories/LoanSearchCheckboxListFilter.stories.js
index 1663beeedc..3dbe3c9c7f 100644
--- a/.storybook/stories/LoanSearchCheckboxListFilter.stories.js
+++ b/.storybook/stories/LoanSearchCheckboxListFilter.stories.js
@@ -1,4 +1,4 @@
-import LoanSearchCheckboxListFilter from '@/components/Lend/LoanSearch/LoanSearchCheckboxListFilter';
+import LoanSearchCheckboxListFilter from '#src/components/Lend/LoanSearch/LoanSearchCheckboxListFilter';
export default {
title: 'Loan Search/Loan Search Checkbox List Filter',
diff --git a/.storybook/stories/LoanSearchFilterChips.stories.js b/.storybook/stories/LoanSearchFilterChips.stories.js
index 6687fea46c..54c045b3bc 100644
--- a/.storybook/stories/LoanSearchFilterChips.stories.js
+++ b/.storybook/stories/LoanSearchFilterChips.stories.js
@@ -1,4 +1,4 @@
-import LoanSearchFilterChips from '@/components/Lend/LoanSearch/LoanSearchFilterChips';
+import LoanSearchFilterChips from '#src/components/Lend/LoanSearch/LoanSearchFilterChips';
import { mockState, mockAllFacets } from '../../test/unit/fixtures/mockLoanSearchData';
export default {
diff --git a/.storybook/stories/LoanSearchLocationFilter.stories.js b/.storybook/stories/LoanSearchLocationFilter.stories.js
index 4b242f2ec5..a393a7b4b1 100644
--- a/.storybook/stories/LoanSearchLocationFilter.stories.js
+++ b/.storybook/stories/LoanSearchLocationFilter.stories.js
@@ -1,4 +1,4 @@
-import LoanSearchLocationFilter from '@/components/Lend/LoanSearch/LoanSearchLocationFilter';
+import LoanSearchLocationFilter from '#src/components/Lend/LoanSearch/LoanSearchLocationFilter';
export default {
title: 'Loan Search/Loan Search Location Filter',
diff --git a/.storybook/stories/LoanSearchRadioGroupFilter.stories.js b/.storybook/stories/LoanSearchRadioGroupFilter.stories.js
index b638879f88..db49eef96b 100644
--- a/.storybook/stories/LoanSearchRadioGroupFilter.stories.js
+++ b/.storybook/stories/LoanSearchRadioGroupFilter.stories.js
@@ -1,4 +1,4 @@
-import LoanSearchRadioGroupFilter from '@/components/Lend/LoanSearch/LoanSearchRadioGroupFilter';
+import LoanSearchRadioGroupFilter from '#src/components/Lend/LoanSearch/LoanSearchRadioGroupFilter';
export default {
title: 'Loan Search/Loan Search Radio Group Filter',
diff --git a/.storybook/stories/LoanSearchSortBy.stories.js b/.storybook/stories/LoanSearchSortBy.stories.js
index 8aeead0871..73a4914c55 100644
--- a/.storybook/stories/LoanSearchSortBy.stories.js
+++ b/.storybook/stories/LoanSearchSortBy.stories.js
@@ -1,5 +1,5 @@
-import LoanSearchSortBy from '@/components/Lend/LoanSearch/LoanSearchSortBy';
-import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import LoanSearchSortBy from '#src/components/Lend/LoanSearch/LoanSearchSortBy';
+import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
export default {
title: 'Loan Search/Loan Search Sort Order',
diff --git a/.storybook/stories/LoanSpotlight.stories.js b/.storybook/stories/LoanSpotlight.stories.js
index ab44bcb449..0cbe1b51b2 100644
--- a/.storybook/stories/LoanSpotlight.stories.js
+++ b/.storybook/stories/LoanSpotlight.stories.js
@@ -1,8 +1,8 @@
-import LoanSpotlight from '@/components/Categories/LoanSpotlight';
+import LoanSpotlight from '#src/components/Categories/LoanSpotlight';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
-import KvGrid from '~/@kiva/kv-components/vue/KvGrid';
-import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer';
+import KvGrid from '@kiva/kv-components/vue/KvGrid';
+import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer';
const loanHorizontal = {
id: 2389631,
diff --git a/.storybook/stories/MainCategoryTile.stories.js b/.storybook/stories/MainCategoryTile.stories.js
index cf56a4b695..79e75876d8 100644
--- a/.storybook/stories/MainCategoryTile.stories.js
+++ b/.storybook/stories/MainCategoryTile.stories.js
@@ -1,6 +1,6 @@
-import MainCategoryTile from '@/components/Categories/MainCategoryTile';
-import KvGrid from '~/@kiva/kv-components/vue/KvGrid';
-import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer';
+import MainCategoryTile from '#src/components/Categories/MainCategoryTile';
+import KvGrid from '@kiva/kv-components/vue/KvGrid';
+import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer';
export default {
title: 'Components/Main Category Tile',
diff --git a/.storybook/stories/MonthlyGoodSelector.stories.js b/.storybook/stories/MonthlyGoodSelector.stories.js
index 13ef123438..36ad8cf5d6 100644
--- a/.storybook/stories/MonthlyGoodSelector.stories.js
+++ b/.storybook/stories/MonthlyGoodSelector.stories.js
@@ -1,6 +1,6 @@
-import MonthlyGoodSelectorDesktop from '@/components/MonthlyGood/MonthlyGoodSelectorDesktop';
-import MonthlyGoodSelectorMobile from '@/components/MonthlyGood/MonthlyGoodSelectorMobile';
-import loanGroupCategoriesMixin from '@/plugins/loan-group-categories';
+import MonthlyGoodSelectorDesktop from '#src/components/MonthlyGood/MonthlyGoodSelectorDesktop';
+import MonthlyGoodSelectorMobile from '#src/components/MonthlyGood/MonthlyGoodSelectorMobile';
+import loanGroupCategoriesMixin from '#src/plugins/loan-group-categories';
const lendingCategories = loanGroupCategoriesMixin.data().lendingCategories;
diff --git a/.storybook/stories/MonthlyGoodUpdateForm.stories.js b/.storybook/stories/MonthlyGoodUpdateForm.stories.js
index ffb2e91b60..d4094bec18 100644
--- a/.storybook/stories/MonthlyGoodUpdateForm.stories.js
+++ b/.storybook/stories/MonthlyGoodUpdateForm.stories.js
@@ -1,4 +1,4 @@
-import MonthlyGoodUpdateForm from '@/components/Forms/MonthlyGoodUpdateForm';
+import MonthlyGoodUpdateForm from '#src/components/Forms/MonthlyGoodUpdateForm';
export default {
title: 'Forms/MonthlyGoodUpdateForm',
diff --git a/.storybook/stories/MultiAmountSelector.stories.js b/.storybook/stories/MultiAmountSelector.stories.js
index 8faf1e1cc5..88c92c2141 100644
--- a/.storybook/stories/MultiAmountSelector.stories.js
+++ b/.storybook/stories/MultiAmountSelector.stories.js
@@ -1,4 +1,4 @@
-import MultiAmountSelector from '@/components/Forms/MultiAmountSelector';
+import MultiAmountSelector from '#src/components/Forms/MultiAmountSelector';
export default {
title: 'Forms/MultiAmountSelector',
diff --git a/.storybook/stories/PortfolioKivaCreditStats.stories.js b/.storybook/stories/PortfolioKivaCreditStats.stories.js
index 5273e2ce26..fc5e320398 100644
--- a/.storybook/stories/PortfolioKivaCreditStats.stories.js
+++ b/.storybook/stories/PortfolioKivaCreditStats.stories.js
@@ -1,6 +1,6 @@
-import KvGrid from '~/@kiva/kv-components/vue/KvGrid';
-import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer';
-import KivaCreditStats from '@/pages/Portfolio/ImpactDashboard/KivaCreditStats';
+import KvGrid from '@kiva/kv-components/vue/KvGrid';
+import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer';
+import KivaCreditStats from '#src/pages/Portfolio/ImpactDashboard/KivaCreditStats';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/PromoCreditBanner.stories.js b/.storybook/stories/PromoCreditBanner.stories.js
index ae2eace784..ca04a57167 100644
--- a/.storybook/stories/PromoCreditBanner.stories.js
+++ b/.storybook/stories/PromoCreditBanner.stories.js
@@ -1,8 +1,8 @@
import Vue from 'vue'
-import PromoCreditBanner from '@/components/WwwFrame/PromotionalBanner/Banners/PromoCreditBanner.vue';
+import PromoCreditBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/PromoCreditBanner.vue';
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins);
export default {
diff --git a/.storybook/stories/PromoGridLoanCard.stories.js b/.storybook/stories/PromoGridLoanCard.stories.js
index 9022797dc9..0e7c4c4508 100644
--- a/.storybook/stories/PromoGridLoanCard.stories.js
+++ b/.storybook/stories/PromoGridLoanCard.stories.js
@@ -1,4 +1,4 @@
-import PromoGridLoanCard from '@/components/LoanCards/PromoGridLoanCard';
+import PromoGridLoanCard from '#src/components/LoanCards/PromoGridLoanCard';
const promoCategories = {
Women: { url: '/monthlygood?category=women', label: 'women' },
diff --git a/.storybook/stories/RecommendedLoanCard.stories.js b/.storybook/stories/RecommendedLoanCard.stories.js
index 9271ac8097..d105691482 100644
--- a/.storybook/stories/RecommendedLoanCard.stories.js
+++ b/.storybook/stories/RecommendedLoanCard.stories.js
@@ -1,4 +1,4 @@
-import RecommendedLoanCard from '@/components/LoanCards/RecommendedLoanCard';
+import RecommendedLoanCard from '#src/components/LoanCards/RecommendedLoanCard';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
diff --git a/.storybook/stories/SecuritySettings.stories.js b/.storybook/stories/SecuritySettings.stories.js
index 2f697415a1..23aa252035 100644
--- a/.storybook/stories/SecuritySettings.stories.js
+++ b/.storybook/stories/SecuritySettings.stories.js
@@ -1,15 +1,15 @@
import Vue from 'vue'
// import plugins
-import kivaPlugins from '@/plugins';
+import kivaPlugins from '#src/plugins';
Vue.use(kivaPlugins)
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin';
-import SecuritySettingsPage from '@/pages/Settings/SecuritySettings';
-import TwoStepVerificationPage from '@/pages/Settings/TwoStepVerificationPage';
+import SecuritySettingsPage from '#src/pages/Settings/SecuritySettings';
+import TwoStepVerificationPage from '#src/pages/Settings/TwoStepVerificationPage';
export default {
title: 'Page/Security Settings',
diff --git a/.storybook/stories/ShareChallenge.stories.js b/.storybook/stories/ShareChallenge.stories.js
index 5a660052f8..d45be47aa7 100644
--- a/.storybook/stories/ShareChallenge.stories.js
+++ b/.storybook/stories/ShareChallenge.stories.js
@@ -1,4 +1,4 @@
-import ShareChallenge from '@/components/Thanks/ShareChallenge';
+import ShareChallenge from '#src/components/Thanks/ShareChallenge';
import apolloStoryMixin from "../mixins/apollo-story-mixin";
export default {
diff --git a/.storybook/stories/SocialShare.stories.js b/.storybook/stories/SocialShare.stories.js
index 56e9a002f9..948627a01d 100644
--- a/.storybook/stories/SocialShare.stories.js
+++ b/.storybook/stories/SocialShare.stories.js
@@ -1,4 +1,4 @@
-import SocialShareV2 from '@/components/Checkout/SocialShareV2';
+import SocialShareV2 from '#src/components/Checkout/SocialShareV2';
import mockedReceiptData from '../mock-data/receipt-data-mock';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
diff --git a/.storybook/stories/SupportedByLenders.stories.js b/.storybook/stories/SupportedByLenders.stories.js
index 3177a9bdae..ce42e60f86 100644
--- a/.storybook/stories/SupportedByLenders.stories.js
+++ b/.storybook/stories/SupportedByLenders.stories.js
@@ -1,6 +1,6 @@
-import SupportedByLenders from '@/components/BorrowerProfile/SupportedByLenders';
+import SupportedByLenders from '#src/components/BorrowerProfile/SupportedByLenders';
import activities from '../mock-data/activity-feed-data-mock';
-import KvUserAvatar from '~/@kiva/kv-components/vue/KvUserAvatar';
+import KvUserAvatar from '@kiva/kv-components/vue/KvUserAvatar';
export default {
title: 'Components/SupportedByLenders',
diff --git a/.storybook/stories/SwashieFace.stories.js b/.storybook/stories/SwashieFace.stories.js
index 5def801f0b..e0342b0ca1 100644
--- a/.storybook/stories/SwashieFace.stories.js
+++ b/.storybook/stories/SwashieFace.stories.js
@@ -1,5 +1,5 @@
-import SwashieFace from '@/components/15Years/SwashieFace';
-import KvProgressCircle from '@/components/Kv/KvProgressCircle'
+import SwashieFace from '#src/components/15Years/SwashieFace';
+import KvProgressCircle from '#src/components/Kv/KvProgressCircle'
export default {
title: 'components/SwashieFace',
diff --git a/.storybook/stories/SystemPage.stories.js b/.storybook/stories/SystemPage.stories.js
index 3f690db098..81e1be6bc9 100644
--- a/.storybook/stories/SystemPage.stories.js
+++ b/.storybook/stories/SystemPage.stories.js
@@ -1,4 +1,4 @@
-import SystemPage from '@/components/SystemFrame/SystemPage';
+import SystemPage from '#src/components/SystemFrame/SystemPage';
export default {
title: 'SystemFrame/SystemPage',
diff --git a/.storybook/stories/ThanksPage.stories.js b/.storybook/stories/ThanksPage.stories.js
index ead9b3b6a5..009db0a1c5 100644
--- a/.storybook/stories/ThanksPage.stories.js
+++ b/.storybook/stories/ThanksPage.stories.js
@@ -1,4 +1,4 @@
-import ThanksPage from '@/pages/Thanks/ThanksPage';
+import ThanksPage from '#src/pages/Thanks/ThanksPage';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin';
diff --git a/.storybook/stories/TheFooter.stories.js b/.storybook/stories/TheFooter.stories.js
index 988ae1e1b4..9d3c7b8102 100644
--- a/.storybook/stories/TheFooter.stories.js
+++ b/.storybook/stories/TheFooter.stories.js
@@ -4,10 +4,10 @@ import {
wrdFooterTheme,
fifteenYearFooterTheme,
blueFooter
-} from '@/util/siteThemes';
+} from '#src/util/siteThemes';
import apolloStoryMixin from '../mixins/apollo-story-mixin';
import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin';
-import TheFooter from '@/components/WwwFrame/TheFooter';
+import TheFooter from '#src/components/WwwFrame/TheFooter';
export default {
title: 'WwwFrame/TheFooter',
diff --git a/.storybook/stories/TheFooterCorporate.stories.js b/.storybook/stories/TheFooterCorporate.stories.js
index f3e660f883..23eb0ccf09 100644
--- a/.storybook/stories/TheFooterCorporate.stories.js
+++ b/.storybook/stories/TheFooterCorporate.stories.js
@@ -4,15 +4,15 @@ import {
wrdFooterTheme,
fifteenYearFooterTheme,
blueFooter
-} from '@/util/siteThemes';
-import TheFooterCorporate from '@/components/WwwFrame/TheFooterCorporate';
+} from '#src/util/siteThemes';
+import TheFooterCorporate from '#src/components/WwwFrame/TheFooterCorporate';
export default {
title: 'WwwFrame/TheFooterCorporate',
component: TheFooterCorporate,
args: {
theme: null,
- corporateLogoUrl: require('@/assets/images/logos/visa.svg'),
+ corporateLogoUrl: require('#src/assets/images/logos/visa.svg'),
},
argTypes: {
theme: {
diff --git a/.storybook/stories/TheHeader.stories.js b/.storybook/stories/TheHeader.stories.js
index 49facb5a41..7182b48319 100644
--- a/.storybook/stories/TheHeader.stories.js
+++ b/.storybook/stories/TheHeader.stories.js
@@ -3,10 +3,10 @@ import apolloStoryMixin from "../mixins/apollo-story-mixin";
import cookieStoreStoryMixin from "../mixins/cookie-store-story-mixin";
import kvAuth0StoryMixin from "../mixins/kv-auth0-story-mixin";
-import TheHeader from "@/components/WwwFrame/TheHeader";
+import TheHeader from "#src/components/WwwFrame/TheHeader";
// import plugins
-import kivaPlugins from "@/plugins";
+import kivaPlugins from "#src/plugins";
Vue.use(kivaPlugins);
const loggedIn = {
@@ -95,7 +95,7 @@ export default {
hideSearchInHeader: false,
minimal: false,
corporate: false,
- corporateLogoUrl: require("@/assets/images/logos/visa.svg"),
+ corporateLogoUrl: require("#src/assets/images/logos/visa.svg"),
},
};
diff --git a/.storybook/stories/TwelveDaysCalendar.stories.js b/.storybook/stories/TwelveDaysCalendar.stories.js
index a1023fc1f0..b3c2883d60 100644
--- a/.storybook/stories/TwelveDaysCalendar.stories.js
+++ b/.storybook/stories/TwelveDaysCalendar.stories.js
@@ -1,4 +1,4 @@
-import TwelveDaysCalendar from '@/pages/Possibility/TwelveDaysCalendar';
+import TwelveDaysCalendar from '#src/pages/Possibility/TwelveDaysCalendar';
export default {
title: 'Page/12Days',
diff --git a/.storybook/stories/WwwPage.stories.js b/.storybook/stories/WwwPage.stories.js
index 5be62aaef4..de71ad21b9 100644
--- a/.storybook/stories/WwwPage.stories.js
+++ b/.storybook/stories/WwwPage.stories.js
@@ -13,9 +13,9 @@ import {
fifteenYearFooterTheme,
blueHeader,
blueFooter
-} from '@/util/siteThemes';
+} from '#src/util/siteThemes';
-import WwwPage from '@/components/WwwFrame/WwwPage';
+import WwwPage from '#src/components/WwwFrame/WwwPage';
export default {
title: 'WwwFrame/WwwPage',
diff --git a/.storybook/stories/WwwPageCorporate.stories.js b/.storybook/stories/WwwPageCorporate.stories.js
index fb3b5f42a1..f80daf4e7c 100644
--- a/.storybook/stories/WwwPageCorporate.stories.js
+++ b/.storybook/stories/WwwPageCorporate.stories.js
@@ -8,15 +8,15 @@ import {
wrdFooterTheme,
fifteenYearFooterTheme,
blueFooter
-} from '@/util/siteThemes';
-import WwwPageCorporate from '@/components/WwwFrame/WwwPageCorporate';
+} from '#src/util/siteThemes';
+import WwwPageCorporate from '#src/components/WwwFrame/WwwPageCorporate';
export default {
title: 'WwwFrame/WwwPageCorporate',
component: WwwPageCorporate,
args: {
footerTheme: null,
- corporateLogoUrl: require('@/assets/images/logos/visa.svg')
+ corporateLogoUrl: require('#src/assets/images/logos/visa.svg')
},
argTypes: {
footerTheme: {
diff --git a/.storybook/stories/WwwPageMinimal.stories.js b/.storybook/stories/WwwPageMinimal.stories.js
index a948cfa713..aa1f6aa648 100644
--- a/.storybook/stories/WwwPageMinimal.stories.js
+++ b/.storybook/stories/WwwPageMinimal.stories.js
@@ -12,9 +12,9 @@ import {
fifteenYearFooterTheme,
blueHeader,
blueFooter
-} from '@/util/siteThemes';
+} from '#src/util/siteThemes';
-import WwwPageMinimal from '@/components/WwwFrame/WwwPageMinimal';
+import WwwPageMinimal from '#src/components/WwwFrame/WwwPageMinimal';
export default {
title: 'WwwFrame/WwwPageMinimal',
diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js
deleted file mode 100644
index df0d76d143..0000000000
--- a/.storybook/webpack.config.js
+++ /dev/null
@@ -1,54 +0,0 @@
-const kvWebpackConfig = require('../build/webpack.base.conf');
-var SvgStorePlugin = require('webpack-svgstore-plugin');
-
-module.exports = async ({ config, mode }) => {
-
- const newConfig = {
- ...config,
- devtool: false,
- optimization: {
- minimize: false,
- minimizer: [],
- },
- resolve: {
- ...config.resolve,
- alias: {
- ...config.resolve.alias,
- ...kvWebpackConfig.resolve.alias
- }
- },
- module: {
- ...config.module,
- rules: [
- {
- test: /\.stories\.jsx?$/,
- loaders: [require.resolve('@storybook/source-loader')],
- enforce: 'pre',
- },
- {
- test: /\.vue$/,
- loader: 'vue-docgen-loader', // necessary for storybook prop tables
- enforce: 'post',
- },
- ...kvWebpackConfig.module.rules,
- ]
- },
- plugins: [
- ...config.plugins,
- // minify and combine svg icons
- new SvgStorePlugin({
- svg: {
- 'xmlns': 'http://www.w3.org/2000/svg',
- 'xmlns:xlink': 'http://www.w3.org/1999/xlink',
- 'style': 'display:none;',
- },
- svgoOptions: {
- floatPrecision: 3,
- },
- prefix: 'icon-',
- }),
- ]
- };
-
- return newConfig;
-};
diff --git a/.stylelintrc b/.stylelintrc
index 2bc3f11328..3012f4ded0 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -1,27 +1,35 @@
{
- "plugins": [ "stylelint-scss" ],
- "extends": "stylelint-config-standard",
- "rules": {
- "color-hex-case": null,
- "indentation": "tab",
- "at-rule-no-unknown": null,
- "scss/at-rule-no-unknown": [
- true,
- {
- "ignoreAtRules": [
- "tailwind",
- "apply",
- "variants",
- "responsive",
- "screen"
- ]
- }
+ "extends": [
+ "stylelint-config-standard-scss",
+ "stylelint-config-standard-vue/scss"
],
- "at-rule-empty-line-before": null,
- "no-empty-source": null,
- "unit-allowed-list": ["em", "rem", "%", "px", "deg", "vh", "vw", "ms", "s", "fr"],
- "selector-pseudo-element-no-unknown": [true, {
- "ignorePseudoElements": ["v-deep"]
- }]
- }
+ "rules": {
+ "at-rule-no-unknown": null,
+ "scss/at-rule-no-unknown": [
+ true,
+ {
+ "ignoreAtRules": [
+ "tailwind",
+ "apply",
+ "variants",
+ "responsive",
+ "screen"
+ ]
+ }
+ ],
+ "at-rule-empty-line-before": null,
+ "no-empty-source": null,
+ "unit-allowed-list": ["em", "rem", "%", "px", "deg", "vh", "vw", "ms", "s", "fr"],
+ "keyframes-name-pattern": null,
+ "scss/dollar-variable-pattern": null,
+ "selector-class-pattern": null,
+ "selector-id-pattern": null,
+ "selector-attribute-quotes": "never",
+ "scss/at-mixin-argumentless-call-parentheses": "always",
+ "number-max-precision": null,
+ "scss/comment-no-empty": null,
+ "scss/at-extend-no-missing-placeholder": null,
+ "scss/operator-no-newline-after": null,
+ "scss/operator-no-unspaced": null
+ }
}
diff --git a/babel.config.js b/babel.config.cjs
similarity index 100%
rename from babel.config.js
rename to babel.config.cjs
diff --git a/server/.eslintrc.js b/build/.eslintrc.cjs
similarity index 52%
rename from server/.eslintrc.js
rename to build/.eslintrc.cjs
index ce922cdd53..40b2f6f113 100644
--- a/server/.eslintrc.js
+++ b/build/.eslintrc.cjs
@@ -1,5 +1,6 @@
module.exports = {
rules: {
'no-console': 'off',
+ 'import/extensions': [2, 'ignorePackages'],
}
-}
+};
diff --git a/build/assets-path.js b/build/assets-path.js
index e3bec88295..108fa145a9 100644
--- a/build/assets-path.js
+++ b/build/assets-path.js
@@ -1,6 +1,6 @@
-var path = require('path');
-var config = require('../config');
+import path from 'path';
+import { build } from '../config/index.js';
-module.exports = function (_path) {
- return path.posix.join(config.build.assetsSubDirectory, _path)
-};
+export default function assetsPath(_path) {
+ return path.posix.join(build.assetsSubDirectory, _path);
+}
diff --git a/build/build.js b/build/build.js
deleted file mode 100644
index e3d6b16ac1..0000000000
--- a/build/build.js
+++ /dev/null
@@ -1,33 +0,0 @@
-require('./check-versions')()
-
-process.env.NODE_ENV = 'production'
-
-var ora = require('ora')
-var rm = require('rimraf')
-// var path = require('path')
-var chalk = require('chalk')
-var webpack = require('webpack')
-var config = require('../config')
-var webpackClientConfig = require('./webpack.client.prod.conf')
-var webpackServerConfig = require('./webpack.server.conf')
-
-var spinner = ora('building for production...')
-spinner.start()
-
-//path.join(config.build.assetsRoot, config.build.assetsSubDirectory)
-rm(config.build.assetsRoot, err => {
- if (err) throw err
- webpack([webpackClientConfig, webpackServerConfig], function (err, stats) {
- spinner.stop()
- if (err) throw err
- process.stdout.write(stats.toString({
- colors: true,
- modules: false,
- children: false,
- chunks: false,
- chunkModules: false
- }) + '\n\n')
-
- console.log(chalk.cyan(' Build complete.\n'))
- })
-})
diff --git a/build/build.report.js b/build/build.report.js
deleted file mode 100644
index 0325fde640..0000000000
--- a/build/build.report.js
+++ /dev/null
@@ -1,27 +0,0 @@
-require('./check-versions')()
-
-process.env.NODE_ENV = 'production'
-
-var ora = require('ora')
-var rm = require('rimraf')
-var chalk = require('chalk')
-var webpack = require('webpack')
-var config = require('../config')
-var webpackClientConfig = require('./webpack.client.report.conf')
-
-var spinner = ora('building for production...')
-spinner.start()
-
-rm(config.build.assetsRoot, err => {
- if (err) throw err
- // NOTE this only runs on the client config
- webpack([webpackClientConfig], function (err, stats) {
- spinner.stop()
- if (err) throw err
- process.stdout.write(stats.toString({
- colors: true
- }) + '\n\n')
-
- console.log(chalk.cyan(' Build complete.\n'))
- })
-})
diff --git a/build/check-versions.js b/build/check-versions.js
deleted file mode 100644
index 49a3119bc1..0000000000
--- a/build/check-versions.js
+++ /dev/null
@@ -1,48 +0,0 @@
-var chalk = require('chalk')
-var semver = require('semver')
-var packageConfig = require('../package.json')
-var shell = require('shelljs')
-function exec (cmd) {
- return require('child_process').execSync(cmd).toString().trim()
-}
-
-var versionRequirements = [
- {
- name: 'node',
- currentVersion: semver.clean(process.version),
- versionRequirement: packageConfig.engines.node
- },
-]
-
-if (shell.which('npm')) {
- versionRequirements.push({
- name: 'npm',
- currentVersion: exec('npm --version'),
- versionRequirement: packageConfig.engines.npm
- })
-}
-
-module.exports = function () {
- var warnings = []
- for (var i = 0; i < versionRequirements.length; i++) {
- var mod = versionRequirements[i]
- if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
- warnings.push(mod.name + ': ' +
- chalk.red(mod.currentVersion) + ' should be ' +
- chalk.green(mod.versionRequirement)
- )
- }
- }
-
- if (warnings.length) {
- console.log('')
- console.log(chalk.yellow('To use this template, you must update following to modules:'))
- console.log()
- for (var i = 0; i < warnings.length; i++) {
- var warning = warnings[i]
- console.log(' ' + warning)
- }
- console.log()
- process.exit(1)
- }
-}
diff --git a/build/fetch-schema.js b/build/fetch-schema.js
index 6ff348d9ff..fb8a8ea97f 100644
--- a/build/fetch-schema.js
+++ b/build/fetch-schema.js
@@ -1,9 +1,16 @@
-const { join } = require('path');
-const { readFile, writeFile } = require('fs');
-const { extendSchema, parse, printSchema } = require('graphql');
-const getRemoteGqlSchema = require('../server/util/getRemoteGqlSchema');
-const argv = require('minimist')(process.argv.slice(2));
-const config = require('../config/selectConfig')(argv.config);
+import { join, dirname } from 'path';
+import { fileURLToPath } from 'url';
+import { readFile, writeFile } from 'fs';
+import { extendSchema, parse, printSchema } from 'graphql';
+import minimist from 'minimist';
+import getRemoteGqlSchema from '../server/util/getRemoteGqlSchema.js';
+import selectConfig from '../config/selectConfig.js';
+
+const argv = minimist(process.argv.slice(2));
+const config = await selectConfig(argv.config);
+
+// eslint-disable-next-line no-underscore-dangle
+const __dirname = dirname(fileURLToPath(import.meta.url));
// Return an AST made from local schema
function getLocalAST(schemaPath) {
diff --git a/build/no-op.js b/build/no-op.js
index 37d7332f73..2d1ec23827 100644
--- a/build/no-op.js
+++ b/build/no-op.js
@@ -1 +1 @@
-module.exports = function () {}
+export default () => {};
diff --git a/build/promise.js b/build/promise.js
index 11cfee0700..4b598d2709 100644
--- a/build/promise.js
+++ b/build/promise.js
@@ -1,2 +1 @@
-// Export native Promise
-module.exports = typeof window !== 'undefined' && window.Promise || Promise;
+export default (typeof window !== 'undefined' && window.Promise) ?? Promise;
diff --git a/build/template-string-loader.js b/build/template-string-loader.js
index e489de1d8f..00ab646734 100644
--- a/build/template-string-loader.js
+++ b/build/template-string-loader.js
@@ -3,11 +3,13 @@
* Based on https://github.com/bradbenvenuti/template-string-loader
* TODO: switch to using html-loader once v1 is released
*/
-var htmlMinifier = require('html-minifier');
+import * as htmlMinifier from 'html-minifier';
-module.exports = function(content) {
- this.cacheable && this.cacheable();
- content = htmlMinifier.minify(content, {
+export default function templateStringLoader(content) {
+ if (typeof this.cacheable === 'function') {
+ this.cacheable();
+ }
+ const minifiedContent = htmlMinifier.minify(content, {
removeComments: true,
removeCommentsFromCDATA: true,
removeCDATASectionsFromCDATA: true,
@@ -18,5 +20,5 @@ module.exports = function(content) {
removeScriptTypeAttributes: true,
removeStyleTypeAttributes: true,
});
- return 'module.exports = function (context) { with(context) { return `' + content + '`; } };';
+ return `module.exports = function (context) { with(context) { return \`${minifiedContent}\`; } };`;
}
diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js
deleted file mode 100644
index 340bdd39df..0000000000
--- a/build/webpack.base.conf.js
+++ /dev/null
@@ -1,335 +0,0 @@
-const path = require('path');
-const assetsPath = require('./assets-path');
-const config = require('../config');
-const VueLoaderPlugin = require('vue-loader').VueLoaderPlugin;
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const FilterWarningsPlugin = require('webpack-filter-warnings-plugin');
-const webpack = require('webpack');
-const GitRevisionPlugin = require('git-revision-webpack-plugin');
-const HardSourceWebpackPlugin = require('hard-source-webpack-plugin-fixed-hashbug');
-const gitRevisionPlugin = new GitRevisionPlugin({
- branch: true,
- lightweightTags: true,
-});
-
-const isProd = process.env.NODE_ENV === 'production';
-const isNode = typeof document === 'undefined';
-
-function resolve (dir) {
- return path.join(__dirname, '..', dir);
-}
-
-// When webpack encounters an .SVG in one of these directories, it will inline it as a vue component using vue-svg-loader
-const inlineSvgDirs = [
- resolve('src/assets/icons/inline/'),
- resolve('src/assets/inline-svgs/'),
- resolve('node_modules/flag-icon-css/flags/4x3/'),
- resolve('node_modules/flag-icon-css/flags/1x1/')
-];
-
-module.exports = {
- mode: 'none',
- output: {
- path: config.build.assetsRoot,
- // This Pushes JS Files to the /js sub-folder inside /static
- filename: assetsPath('js/[name].[hash].js'),
- chunkFilename: assetsPath('js/[name].[chunkhash].js'),
- publicPath: '/',
- },
- resolve: {
- extensions: ['.mjs', '.js', '.vue', '.json'],
- alias: {
- '~': resolve('node_modules'),
- '@': resolve('src'),
- 'foundation': 'foundation-sites/js',
- // alias promise module to handle timesync calling require('promise')
- 'promise': resolve('build/promise.js'),
- // required for src/components/Contentful/DynamicRichText.vue
- 'vue$': 'vue/dist/vue.esm.js'
- }
- },
- module: {
- rules: [
- {
- test: /\.vue$/,
- loader: 'vue-loader',
- options: {
- transformAssetUrls: {
- video: 'src',
- source: 'src',
- img: 'src',
- image: 'xlink:href'
- }
- }
- },
- {
- test: /(manifest\.webmanifest|manifest\.json|browserconfig\.xml)$/,
- use: [
- {
- loader: "file-loader",
- options: {
- name: assetsPath('manifest/[name].[hash:7].[ext]'),
- }
- },
- {
- loader: "app-manifest-loader",
- }
- ],
- },
- {
- test: /\.css$/,
- exclude: [resolve('src/assets/scss/tailwind')],
- use: [
- { loader: 'thread-loader' },
- { loader: 'vue-style-loader' }, // Inject styles as
diff --git a/src/api/Auth0Link.js b/src/api/Auth0Link.js
index a72594bddd..28764de555 100644
--- a/src/api/Auth0Link.js
+++ b/src/api/Auth0Link.js
@@ -1,4 +1,4 @@
-import { setContext } from '@apollo/client/link/context';
+import { setContext } from '@apollo/client/link/context/index';
// Add the user info to the context and add the access token to the authorization header
function getAuthContext(context, user, token) {
diff --git a/src/api/BasketLink.js b/src/api/BasketLink.js
index e2966d0efc..c015331582 100644
--- a/src/api/BasketLink.js
+++ b/src/api/BasketLink.js
@@ -1,6 +1,6 @@
import _get from 'lodash/get';
import _set from 'lodash/set';
-import { ApolloLink } from '@apollo/client/core';
+import { ApolloLink } from '@apollo/client/core/index';
export default ({ cookieStore }) => {
return new ApolloLink((operation, forward) => {
diff --git a/src/api/ContentfulPreviewLink.js b/src/api/ContentfulPreviewLink.js
index 329023bc71..1ad3c218cd 100644
--- a/src/api/ContentfulPreviewLink.js
+++ b/src/api/ContentfulPreviewLink.js
@@ -1,4 +1,4 @@
-import { ApolloLink } from '@apollo/client/core';
+import { ApolloLink } from '@apollo/client/core/index';
export default ({ cookieStore }) => {
return new ApolloLink((operation, forward) => {
diff --git a/src/api/ExperimentIdLink.js b/src/api/ExperimentIdLink.js
index 7589472827..1e78e0ed24 100644
--- a/src/api/ExperimentIdLink.js
+++ b/src/api/ExperimentIdLink.js
@@ -1,6 +1,6 @@
-import { setContext } from '@apollo/client/link/context';
-import experimentVersionFragment from '@/graphql/fragments/experimentVersion.graphql';
-// import { UIAB_COOKIE_NAME } from '@/util/experiment/experimentUtils';
+import { setContext } from '@apollo/client/link/context/index';
+import experimentVersionFragment from '#src/graphql/fragments/experimentVersion.graphql';
+// import { UIAB_COOKIE_NAME } from '#src/util/experiment/experimentUtils';
// Experiment assignments that will be passed in the X-Experiment Header
const targetIds = [
diff --git a/src/api/HttpLink.js b/src/api/HttpLink.js
index 897b2b47ce..202a2d6a37 100644
--- a/src/api/HttpLink.js
+++ b/src/api/HttpLink.js
@@ -1,5 +1,5 @@
-import { BatchHttpLink } from '@apollo/client/link/batch-http';
-import { HttpLink } from '@apollo/client/link/http';
+import { BatchHttpLink } from '@apollo/client/link/batch-http/index';
+import { HttpLink } from '@apollo/client/link/http/index';
export default ({
uri = '',
diff --git a/src/api/NetworkErrorLoggingLink.js b/src/api/NetworkErrorLoggingLink.js
index 73889d1a6b..3b421b1f24 100644
--- a/src/api/NetworkErrorLoggingLink.js
+++ b/src/api/NetworkErrorLoggingLink.js
@@ -1,5 +1,5 @@
-import { onError } from '@apollo/client/link/error';
-import logFormatter from '@/util/logFormatter';
+import { onError } from '@apollo/client/link/error/index';
+import logFormatter from '#src/util/logFormatter';
export default () => {
return onError(({
diff --git a/src/api/NetworkErrorRetryLink.js b/src/api/NetworkErrorRetryLink.js
index 18b8c4f69f..afe656fdf3 100644
--- a/src/api/NetworkErrorRetryLink.js
+++ b/src/api/NetworkErrorRetryLink.js
@@ -1,4 +1,4 @@
-import { RetryLink } from '@apollo/client/link/retry';
+import { RetryLink } from '@apollo/client/link/retry/index';
export default ({
activateRetry = false,
diff --git a/src/api/SnowplowSessionLink.js b/src/api/SnowplowSessionLink.js
index 6ca4367399..d7d525ac21 100644
--- a/src/api/SnowplowSessionLink.js
+++ b/src/api/SnowplowSessionLink.js
@@ -1,4 +1,4 @@
-import { setContext } from '@apollo/client/link/context';
+import { setContext } from '@apollo/client/link/context/index';
import _set from 'lodash/set';
function getSPCookieSession(cookieStore) {
diff --git a/src/api/apollo.js b/src/api/apollo.js
index 7c723742ef..ffbaba6d33 100644
--- a/src/api/apollo.js
+++ b/src/api/apollo.js
@@ -1,4 +1,4 @@
-import { ApolloLink, ApolloClient, InMemoryCache } from '@apollo/client/core';
+import { ApolloLink, ApolloClient, InMemoryCache } from '@apollo/client/core/index';
import Auth0LinkCreator from './Auth0Link';
import BasketLinkCreator from './BasketLink';
import ContentfulPreviewLink from './ContentfulPreviewLink';
diff --git a/src/api/localResolvers/activeLoan.js b/src/api/localResolvers/activeLoan.js
index 342761987d..d0810da863 100644
--- a/src/api/localResolvers/activeLoan.js
+++ b/src/api/localResolvers/activeLoan.js
@@ -1,4 +1,4 @@
-import query from '@/graphql/query/activeLoanClient.graphql';
+import query from '#src/graphql/query/activeLoanClient.graphql';
/*
* Active loan resolvers
diff --git a/src/api/localResolvers/addToBasketInterstitial.js b/src/api/localResolvers/addToBasketInterstitial.js
index 78e3cfaaa5..91c1546fc6 100644
--- a/src/api/localResolvers/addToBasketInterstitial.js
+++ b/src/api/localResolvers/addToBasketInterstitial.js
@@ -1,4 +1,4 @@
-import query from '@/graphql/query/basketAddInterstitialClient.graphql';
+import query from '#src/graphql/query/basketAddInterstitialClient.graphql';
/*
* Add to Basket Interstitial resolvers
*/
diff --git a/src/api/localResolvers/autolending.js b/src/api/localResolvers/autolending.js
index 283fc6e36e..c0195fd89a 100644
--- a/src/api/localResolvers/autolending.js
+++ b/src/api/localResolvers/autolending.js
@@ -1,20 +1,19 @@
-/* eslint-disable no-underscore-dangle */
import _get from 'lodash/get';
import _mergeWith from 'lodash/mergeWith';
-import logFormatter from '@/util/logFormatter';
-import bothProfilesQuery from '@/graphql/query/autolending/bothProfiles.graphql';
-import loanCountQuery from '@/graphql/query/loanCount.graphql';
-import serverProfileQuery from '@/graphql/query/autolending/profileFromServer.graphql';
-import updateServerProfile from '@/graphql/mutation/autolending/updateServerProfile.graphql';
+import logFormatter from '#src/util/logFormatter';
+import bothProfilesQuery from '#src/graphql/query/autolending/bothProfiles.graphql';
+import loanCountQuery from '#src/graphql/query/loanCount.graphql';
+import serverProfileQuery from '#src/graphql/query/autolending/profileFromServer.graphql';
+import updateServerProfile from '#src/graphql/mutation/autolending/updateServerProfile.graphql';
import AutolendProfile, {
getCacheableProfile,
getInputProfile,
profilesAreEqual,
-} from '@/api/fixtures/AutolendProfile';
+} from '#src/api/fixtures/AutolendProfile';
import LoanSearchCriteria, {
criteriaAreEqual,
getSearchableCriteria,
-} from '@/api/fixtures/LoanSearchCriteria';
+} from '#src/api/fixtures/LoanSearchCriteria';
// Helper function for writing autolending data to the cache
function writeAutolendingData(cache, { currentProfile, savedProfile, ...fields }) {
diff --git a/src/api/localResolvers/experiment.js b/src/api/localResolvers/experiment.js
index 4930e91594..b625d04151 100644
--- a/src/api/localResolvers/experiment.js
+++ b/src/api/localResolvers/experiment.js
@@ -7,9 +7,9 @@ import {
getLoginId,
getCookieAssignments,
setCookieAssignments,
-} from '@/util/experiment/experimentUtils';
-import Experiment from '@/api/fixtures/Experiment';
-import logFormatter from '@/util/logFormatter';
+} from '#src/util/experiment/experimentUtils';
+import Experiment from '#src/api/fixtures/Experiment';
+import logFormatter from '#src/util/logFormatter';
/**
* Local resolvers for experiment assignment
diff --git a/src/api/localResolvers/loan.js b/src/api/localResolvers/loan.js
index 096d8b1c9d..c7a033875e 100644
--- a/src/api/localResolvers/loan.js
+++ b/src/api/localResolvers/loan.js
@@ -6,8 +6,8 @@ import {
differenceInMilliseconds,
} from 'date-fns';
import numeral from 'numeral';
-import logFormatter from '@/util/logFormatter';
-import getLoanUse from '@/util/loanUse';
+import logFormatter from '#src/util/logFormatter';
+import getLoanUse from '#src/util/loanUse';
// Return true if the given loan object is missing the given field.
// Logs an error to the console if the field is missing.
diff --git a/src/api/localResolvers/loanSearch.js b/src/api/localResolvers/loanSearch.js
index 374710528e..6258cee3d2 100644
--- a/src/api/localResolvers/loanSearch.js
+++ b/src/api/localResolvers/loanSearch.js
@@ -1,4 +1,4 @@
-import loanSearchStateQuery from '@/graphql/query/loanSearchState.graphql';
+import loanSearchStateQuery from '#src/graphql/query/loanSearchState.graphql';
// eslint-disable-next-line no-underscore-dangle
const __typename = 'LoanSearchState';
diff --git a/src/api/localResolvers/my.js b/src/api/localResolvers/my.js
index 04b8edc5d6..a61cae4c9e 100644
--- a/src/api/localResolvers/my.js
+++ b/src/api/localResolvers/my.js
@@ -1,4 +1,4 @@
-import hasEverLoggedInQuery from '@/graphql/query/shared/hasEverLoggedIn.graphql';
+import hasEverLoggedInQuery from '#src/graphql/query/shared/hasEverLoggedIn.graphql';
export default ({ cookieStore, kvAuth0 }) => {
return {
diff --git a/src/api/localResolvers/tipMessage.js b/src/api/localResolvers/tipMessage.js
index dd5327e471..9c12601f7f 100644
--- a/src/api/localResolvers/tipMessage.js
+++ b/src/api/localResolvers/tipMessage.js
@@ -1,4 +1,4 @@
-import tipMessageDataQuery from '@/graphql/query/tipMessage/tipMessageData.graphql';
+import tipMessageDataQuery from '#src/graphql/query/tipMessage/tipMessageData.graphql';
/*
* TipMessage resolvers
diff --git a/src/api/localResolvers/usingTouch.js b/src/api/localResolvers/usingTouch.js
index 9c87e56e23..67c65ff477 100644
--- a/src/api/localResolvers/usingTouch.js
+++ b/src/api/localResolvers/usingTouch.js
@@ -1,4 +1,4 @@
-import query from '@/graphql/query/shared/usingTouchClient.graphql';
+import query from '#src/graphql/query/shared/usingTouchClient.graphql';
/*
* UsingTouch resolvers
*/
diff --git a/src/api/localResolvers/verificationLightbox.js b/src/api/localResolvers/verificationLightbox.js
index bd955b6217..df12a76144 100644
--- a/src/api/localResolvers/verificationLightbox.js
+++ b/src/api/localResolvers/verificationLightbox.js
@@ -1,4 +1,4 @@
-import { gql } from '@apollo/client';
+import { gql } from '@apollo/client/index';
/*
* VerificationLightbox resolvers
diff --git a/src/api/localState.js b/src/api/localState.js
index 063a6f3cb4..f833f4ffcc 100644
--- a/src/api/localState.js
+++ b/src/api/localState.js
@@ -1,20 +1,20 @@
import _merge from 'lodash/merge';
// require each local state resolver
-const requireLocalResolver = require.context('./localResolvers', true, /\.js$/);
+const requireLocalResolver = import.meta.glob('./localResolvers/*.js', { eager: true });
const initState = options => {
// init each resolver with the given options and merge all the results together
- return requireLocalResolver.keys().reduce((result, key) => {
- const module = requireLocalResolver(key).default;
+ return Object.keys(requireLocalResolver).reduce((result, key) => {
+ const module = requireLocalResolver[key].default;
return _merge(result, module(options));
}, {});
};
const setLocalState = (options, cache) => {
// Call defaults function for each local resolver
- return requireLocalResolver.keys().forEach(value => {
- const module = requireLocalResolver(value).default;
+ return Object.keys(requireLocalResolver).forEach(key => {
+ const module = requireLocalResolver[key].default;
const { defaults } = module(options);
if (defaults) {
defaults(cache);
diff --git a/src/assets/iconLoader.js b/src/assets/iconLoader.js
deleted file mode 100644
index 16a43a226b..0000000000
--- a/src/assets/iconLoader.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import svgXhr from 'webpack-svgstore-plugin/src/helpers/svgxhr';
-
-// inject svg icons as a sprite sheet
-// eslint-disable-next-line no-underscore-dangle
-const __svgsprite__ = { path: './icons/sprite/*.svg', name: './static/icons.[hash].svg' };
-svgXhr(__svgsprite__);
diff --git a/src/assets/scss/_math.scss b/src/assets/scss/_math.scss
index f244f20849..8c95d845b0 100644
--- a/src/assets/scss/_math.scss
+++ b/src/assets/scss/_math.scss
@@ -2,6 +2,7 @@
Numerical methods for Power, Factorial, Pi, Sine, Cosine and Tangent
from "TRIGONOMETRY IN SASS" by Daniel Perez Alvarez (https://unindented.org/articles/trigonometry-in-sass/)
*/
+@use 'sass:math';
@function pow($number, $exp) {
$value: 1;
@@ -9,8 +10,7 @@
@for $i from 1 through $exp {
$value: $value * $number;
}
- }
- @else if $exp < 0 {
+ } @else if $exp < 0 {
@for $i from 1 through -$exp {
$value: $value / $number;
}
@@ -33,8 +33,9 @@
}
@function rad($angle) {
- $unit: unit($angle);
+ $unit: math.unit($angle);
$unitless: $angle / ($angle * 0 + 1);
+
// If the angle has 'deg' as unit, convert to radians.
@if $unit == deg {
$unitless: $unitless / 180 * pi();
@@ -45,6 +46,7 @@
@function sin($angle) {
$sin: 0;
$angle: rad($angle);
+
// Iterate a bunch of times.
@for $i from 0 through 10 {
$sin: $sin + pow(-1, $i) * pow($angle, (2 * $i + 1)) / fact(2 * $i + 1);
@@ -55,6 +57,7 @@
@function cos($angle) {
$cos: 0;
$angle: rad($angle);
+
// Iterate a bunch of times.
@for $i from 0 through 10 {
$cos: $cos + pow(-1, $i) * pow($angle, 2 * $i) / fact(2 * $i);
diff --git a/src/assets/scss/_settings.scss b/src/assets/scss/_settings.scss
index 919797d405..489f70e544 100644
--- a/src/assets/scss/_settings.scss
+++ b/src/assets/scss/_settings.scss
@@ -61,7 +61,9 @@
// 56. Xy Grid
// 57. Navbar
-@import 'node_modules/foundation-sites/scss/util/util.scss';
+@use 'sass:color';
+@use 'sass:math';
+@import 'node_modules/foundation-sites/scss/util/util';
// 1. Global
// ---------
@@ -134,14 +136,13 @@ $kiva-glyph-grey-primary: $magnemite;
$kiva-glyph-primary-black: $umbreon;
// social media icon colors
-$facebook-hover-color: #3b5998;
-$pinterest-hover-color: #bd081c;
-$twitter-hover-color: #55acee;
-$yelp-hover-color: #bd081c;
-$youtube-hover-color: #cd201f;
-$linkedin-hover-color: #0077b5;
-$instagram-hover-color: #0a0b09;
-
+$facebook-hover-color: #3b5998;
+$pinterest-hover-color: #bd081c;
+$twitter-hover-color: #55acee;
+$yelp-hover-color: #bd081c;
+$youtube-hover-color: #cd201f;
+$linkedin-hover-color: #0077b5;
+$instagram-hover-color: #0a0b09;
$foundation-palette: (
primary: $blue,
secondary: $white,
@@ -149,9 +150,9 @@ $foundation-palette: (
warning: $vivid-yellow,
alert: $red,
);
-@include add-foundation-colors;
-$print-hrefs: true;
+@include add-foundation-colors ();
+$print-hrefs: true;
$body-background: $white;
$body-font-color: $kiva-text-dark;
$body-font-family: 'PostGrotesk', 'Arial', 'Helvetica', sans-serif;
@@ -211,30 +212,30 @@ $header-lineheight: 1.4;
$header-margin-bottom: 0.5rem;
$header-styles: (
small: (
- 'h1': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)),
- 'h2': ('font-size': rem-calc(22), 'line-height': rem-calc(30) / rem-calc(22)),
+ 'h1': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))),
+ 'h2': ('font-size': rem-calc(22), 'line-height': math.div(rem-calc(30), rem-calc(22))),
'h3': ('font-size': rem-calc(18)),
'h4': ('font-size': rem-calc(16)),
),
medium: (
- 'h1': ('font-size': rem-calc(30), 'line-height': rem-calc(38) / rem-calc(30)),
- 'h2': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)),
+ 'h1': ('font-size': rem-calc(30), 'line-height': math.div(rem-calc(38), rem-calc(30))),
+ 'h2': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))),
'h3': ('font-size': rem-calc(18)),
'h4': ('font-size': rem-calc(16)),
),
large: (
- 'h1': ('font-size': rem-calc(36), 'line-height': rem-calc(44) / rem-calc(36)),
- 'h2': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)),
+ 'h1': ('font-size': rem-calc(36), 'line-height': math.div(rem-calc(44), rem-calc(36))),
+ 'h2': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))),
'h3': ('font-size': rem-calc(18)),
'h4': ('font-size': rem-calc(16)),
),
);
-$header-text-rendering: optimizeLegibility;
+$header-text-rendering: optimizelegibility;
$small-font-size: 80%;
$header-small-font-color: $medium-gray;
$paragraph-lineheight: 1.75; // 1.75rem;
$paragraph-margin-bottom: 1rem;
-$paragraph-text-rendering: optimizeLegibility;
+$paragraph-text-rendering: optimizelegibility;
$anchor-color: $kiva-textlink;
$anchor-color-hover: $kiva-textlink-hover;
$anchor-text-decoration: none;
@@ -259,24 +260,18 @@ $normal-text-font-size: 1rem; // because the global "100% isn't useful for all
$small-text-font-size: 0.875rem;
$small-text-line-height: 1.357rem;
-
$medium-text-font-size: 1.25rem;
$medium-text-line-height: 1.35;
-
$featured-text-font-size: 1.5rem;
$featured-text-line-height: 2.25rem;
-
$large-text-font-size: 2.25rem;
$large-text-line-height: 1.222222;
-
$big-text-font-size: rem-calc(28);
$big-text-line-height: rem-calc(36);
-
$impact-text-font-size: rem-calc(32);
$impact-text-line-height: rem-calc(40);
$impact-text-font-size-medium: rem-calc(44);
$impact-text-line-height-medium: rem-calc(50);
-
$huge-headline-font-size: rem-calc(52);
$huge-headline-line-height: rem-calc(58);
$huge-headline-font-size-medium: rem-calc(64);
@@ -445,6 +440,7 @@ $breadcrumbs-item-uppercase: true;
$breadcrumbs-item-separator: true;
$breadcrumbs-item-separator-item: '\002F';
$breadcrumbs-item-separator-item-rtl: '\005C';
+
// The following values are from the 6.5.1 release of foundation-sites we may want a different divider...
// $breadcrumbs-item-separator-item: '/';
// $breadcrumbs-item-separator-item-rtl: '\\';
@@ -699,7 +695,7 @@ $input-background-focus: $white;
$input-background-disabled: $light-gray;
$input-border: 1px solid $light-gray;
$input-border-focus: 1px solid $gray;
-$input-padding: $form-spacing / 2;
+$input-padding: math.div($form-spacing, 2);
$input-shadow: inset 0 1px 2px rgba($black, 0.1);
$input-shadow-focus: 0 0 5px $medium-gray;
$input-cursor-disabled: not-allowed;
@@ -927,8 +923,8 @@ $prototype-separator-margin-top: $global-margin;
// --------------------
$prototype-shadow-breakpoints: $global-prototype-breakpoints;
-$prototype-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16),
- 0 2px 10px 0 rgba(0, 0, 0, 0.12);
+$prototype-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 16%),
+ 0 2px 10px 0 rgb(0 0 0 / 12%);
// 41. Prototype Sizing
// --------------------
@@ -1036,15 +1032,15 @@ $table-color-scale: 5%;
$table-border: 1px solid smart-scale($table-background, $table-color-scale);
$table-padding: rem-calc(8 10 10);
$table-hover-scale: 2%;
-$table-row-hover: darken($table-background, $table-hover-scale);
-$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);
+$table-row-hover: color.adjust($table-background, $lightness: -$table-hover-scale);
+$table-row-stripe-hover: color.adjust($table-background, $lightness: -($table-color-scale + $table-hover-scale));
$table-is-striped: true;
$table-striped-background: smart-scale($table-background, $table-color-scale);
$table-stripe: even;
-$table-head-background: smart-scale($table-background, $table-color-scale / 2);
-$table-head-row-hover: darken($table-head-background, $table-hover-scale);
+$table-head-background: smart-scale($table-background, math.div($table-color-scale, 2));
+$table-head-row-hover: color.adjust($table-head-background, $lightness: -$table-hover-scale);
$table-foot-background: smart-scale($table-background, $table-color-scale);
-$table-foot-row-hover: darken($table-foot-background, $table-hover-scale);
+$table-foot-row-hover: color.adjust($table-foot-background, $lightness: -$table-hover-scale);
$table-head-font-color: $body-font-color;
$table-foot-font-color: $body-font-color;
$show-header-for-stacked: false;
@@ -1131,4 +1127,4 @@ $xy-block-grid-max: 8;
// 57. Xy Grid
// -----------
-$navbar-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.15);
+$navbar-shadow: 0 0 0.5rem 0 rgb(0 0 0 / 15%);
diff --git a/src/assets/scss/app.scss b/src/assets/scss/app.scss
index 625a684a13..97b7ecca57 100644
--- a/src/assets/scss/app.scss
+++ b/src/assets/scss/app.scss
@@ -1,13 +1,14 @@
// import all the variables
@import 'settings';
-@import 'foundation';
+@import 'node_modules/foundation-sites/scss/foundation';
// import global foundation components
-@include foundation-flex-classes;
-@include foundation-flex-grid;
-@include foundation-visibility-classes;
+@include foundation-flex-classes ();
+@include foundation-flex-grid ();
+@include foundation-visibility-classes ();
// import global styles
+/* stylelint-disable no-invalid-position-at-import-rule */
@import 'global/fonts';
@import 'global/page-layout';
@import 'global/line-breaks';
diff --git a/src/assets/scss/components/15-years/15-years.scss b/src/assets/scss/components/15-years/15-years.scss
index ffaba4048a..1241760bfd 100644
--- a/src/assets/scss/components/15-years/15-years.scss
+++ b/src/assets/scss/components/15-years/15-years.scss
@@ -84,10 +84,12 @@ $offwhite: #F8F8F8;
text-decoration: underline;
color: $twilight;
+
// white-space: nowrap;
&:hover {
text-decoration: none;
+
// background-color: $twilight;
// color: $offwhite;
cursor: pointer;
diff --git a/src/assets/scss/components/loan-cards/hover-loan-card.scss b/src/assets/scss/components/loan-cards/hover-loan-card.scss
index e5d03abef6..29115213e3 100644
--- a/src/assets/scss/components/loan-cards/hover-loan-card.scss
+++ b/src/assets/scss/components/loan-cards/hover-loan-card.scss
@@ -1,4 +1,4 @@
-@import 'settings';
+@import '#src/assets/scss/settings';
// Reference
$small-default-hover-image-width: rem-calc(480);
diff --git a/src/assets/scss/global/drop-in.scss b/src/assets/scss/global/drop-in.scss
index 4f6fce102c..cb1f92f3a6 100644
--- a/src/assets/scss/global/drop-in.scss
+++ b/src/assets/scss/global/drop-in.scss
@@ -1,4 +1,4 @@
-@import 'settings';
+@import '#src/assets/scss/settings';
// Global styles related to the braintree drop-in payment wrappers.
diff --git a/src/assets/scss/global/fonts.scss b/src/assets/scss/global/fonts.scss
index 2d43aeac92..a02d442760 100644
--- a/src/assets/scss/global/fonts.scss
+++ b/src/assets/scss/global/fonts.scss
@@ -1,31 +1,31 @@
@font-face {
- font-family: "PostGrotesk";
+ font-family: PostGrotesk;
font-weight: 400;
font-style: normal;
font-display: swap;
- src: url("~@/assets/fonts/PostGrotesk-Medium.woff2") format('woff2');
+ src: url("#src/assets/fonts/PostGrotesk-Medium.woff2") format('woff2');
}
@font-face {
- font-family: "PostGrotesk";
+ font-family: PostGrotesk;
font-weight: 400;
font-style: italic;
font-display: swap;
- src: url("~@/assets/fonts/PostGrotesk-MediumItalic.woff2") format('woff2');
+ src: url("#src/assets/fonts/PostGrotesk-MediumItalic.woff2") format('woff2');
}
@font-face {
- font-family: "PostGrotesk";
+ font-family: PostGrotesk;
font-weight: 300;
font-style: normal;
font-display: swap;
- src: url("~@/assets/fonts/PostGrotesk-Book.woff2") format('woff2');
+ src: url("#src/assets/fonts/PostGrotesk-Book.woff2") format('woff2');
}
@font-face {
- font-family: "PostGrotesk";
+ font-family: PostGrotesk;
font-weight: 300;
font-style: italic;
font-display: swap;
- src: url("~@/assets/fonts/PostGrotesk-BookItalic.woff2") format('woff2');
+ src: url("#src/assets/fonts/PostGrotesk-BookItalic.woff2") format('woff2');
}
diff --git a/src/assets/scss/global/forms.scss b/src/assets/scss/global/forms.scss
index f39ef66dcc..3fa69e16e9 100644
--- a/src/assets/scss/global/forms.scss
+++ b/src/assets/scss/global/forms.scss
@@ -1,4 +1,4 @@
-@import "settings";
+@import "#src/assets/scss/settings";
// Form validation
label.error {
diff --git a/src/assets/scss/global/line-breaks.scss b/src/assets/scss/global/line-breaks.scss
index 46a144257c..c16493407d 100644
--- a/src/assets/scss/global/line-breaks.scss
+++ b/src/assets/scss/global/line-breaks.scss
@@ -1,4 +1,4 @@
-@import 'settings';
+@import '#src/assets/scss/settings';
// screen-width-specific line breaks
br.so,
diff --git a/src/assets/scss/global/print.scss b/src/assets/scss/global/print.scss
index 5f16503881..19671565ae 100644
--- a/src/assets/scss/global/print.scss
+++ b/src/assets/scss/global/print.scss
@@ -1,7 +1,6 @@
@media print {
* {
// Remove all css transitions
- -webkit-transition: none !important;
transition: none !important;
}
diff --git a/src/client-entry.js b/src/client-entry.js
old mode 100755
new mode 100644
index 2a76d211c1..bac9aa8c75
--- a/src/client-entry.js
+++ b/src/client-entry.js
@@ -1,183 +1,188 @@
-/* eslint-disable no-underscore-dangle, vue/multi-word-component-names */
-import '@babel/polyfill';
-import { getUserLocale } from 'get-user-locale';
-import _dropWhile from 'lodash/dropWhile';
-import _get from 'lodash/get';
-import Bowser from 'bowser';
-import CookieStore from '@/util/cookieStore';
-import KvAuth0, { MockKvAuth0 } from '@/util/KvAuth0';
-import userIdQuery from '@/graphql/query/userId.graphql';
-import usingTouchMutation from '@/graphql/mutation/updateUsingTouch.graphql';
-import showTipMessage from '@/graphql/mutation/tipMessage/showTipMessage.graphql';
-
-import { preFetchAll } from '@/util/apolloPreFetch';
-import { authenticationGuard } from '@/util/authenticationGuard';
-import { contentfulPreviewCookie } from '@/util/contentfulPreviewCookie';
-import collectWebVitals from '@/util/webVitals';
-
-import createApp from '@/main';
-import '@/assets/iconLoader';
-
-import { fetch } from 'whatwg-fetch';
+/* global UI_TAG */
+/* eslint-disable no-underscore-dangle, vue/require-name-property */
+import '#src/assets/scss/tailwind/tailwind.css';
+import '#src/assets/scss/app.scss';
const config = window.__KV_CONFIG__ || {};
// Set webpack public asset path based on configuration
-__webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line
-
-// Create cookie store instance
-const cookieStore = new CookieStore();
-
-// Create auth instance
-let kvAuth0;
-if (config.auth0.enable) {
- kvAuth0 = new KvAuth0({
- audience: config.auth0.apiAudience,
- checkFakeAuth: config.auth0.checkFakeAuth,
- clientID: config.auth0.browserClientID,
- cookieStore,
- domain: config.auth0.domain,
- mfaAudience: config.auth0.mfaAudience,
- redirectUri: config.auth0.browserCallbackUri,
- scope: config.auth0.scope,
- });
-} else {
- kvAuth0 = MockKvAuth0;
+// __webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line
+
+async function getCookieStore() {
+ const { default: CookieStore } = await import('#src/util/cookieStore');
+ return new CookieStore();
}
-// Get device information
-const { userAgent } = window.navigator;
-const device = userAgent ? Bowser.getParser(userAgent).parse().parsedResult : null;
-
-// Create the App instance
-const {
- app,
- router,
- apolloClient,
-} = createApp({
- name: '',
- appConfig: config,
- apollo: {
- uri: config.graphqlUri,
- types: config.graphqlPossibleTypes,
- },
- cookieStore,
- device,
- kvAuth0,
- locale: getUserLocale(),
- fetch,
- url: window?.location?.href,
-});
-
-// Show a tip message when there is an unhandled auth0 error
-kvAuth0.onError(({ eventId, user }) => {
- let message = 'We\'re sorry, something went wrong.';
- if (user) {
- message = `${message} Please log out and try again.`;
- } else {
- message = `${message} Please clear your cookies and try again.`;
+async function getKvAuth0(cookieStore) {
+ const { default: KvAuth0, MockKvAuth0 } = await import('#src/util/KvAuth0');
+ if (config.auth0.enable) {
+ return new KvAuth0({
+ audience: config.auth0.apiAudience,
+ checkFakeAuth: config.auth0.checkFakeAuth,
+ clientID: config.auth0.browserClientID,
+ cookieStore,
+ domain: config.auth0.domain,
+ mfaAudience: config.auth0.mfaAudience,
+ redirectUri: config.auth0.browserCallbackUri,
+ scope: config.auth0.scope,
+ });
}
- if (eventId) {
- message = `${message} (event id: ${eventId})`;
+ return MockKvAuth0;
+}
+
+async function getDevice() {
+ const { userAgent } = window.navigator;
+ if (!userAgent) {
+ return null;
}
- apolloClient.mutate({
- mutation: showTipMessage,
- variables: {
- message,
- type: 'error',
- persist: true,
- },
- });
-});
+ const { default: Bowser } = await import('bowser');
+ return Bowser.getParser(userAgent).parse().parsedResult;
+}
-// Apply Server state to Client Store
-if (window.__APOLLO_STATE__) {
- apolloClient.cache.restore(window.__APOLLO_STATE__);
+async function getLocale() {
+ const { getUserLocale } = await import('get-user-locale');
+ return getUserLocale();
}
-// Extract user id from apollo cache
-let userId = null;
-try {
- const data = apolloClient.readQuery({
- query: userIdQuery,
- variables: {
- basketId: cookieStore.get('kvbskt'),
- },
+async function getFetch() {
+ const { fetch } = await import('whatwg-fetch');
+ return fetch;
+}
+
+async function getUserId(apolloClient) {
+ const { default: userIdQuery } = await import('#src/graphql/query/userId.graphql');
+ const result = await apolloClient.query({ query: userIdQuery });
+ return result?.data?.my?.userAccount?.id ?? null;
+}
+
+async function setupAuthErrorHandling(kvAuth0, apolloClient) {
+ const { default: showTipMessage } = await import('#src/graphql/mutation/tipMessage/showTipMessage.graphql');
+ // Show a tip message when there is an unhandled auth0 error
+ kvAuth0.onError(({ eventId, user }) => {
+ let message = 'We\'re sorry, something went wrong.';
+ if (user) {
+ message = `${message} Please log out and try again.`;
+ } else {
+ message = `${message} Please clear your cookies and try again.`;
+ }
+ if (eventId) {
+ message = `${message} (event id: ${eventId})`;
+ }
+ apolloClient.mutate({
+ mutation: showTipMessage,
+ variables: {
+ message,
+ type: 'error',
+ persist: true,
+ },
+ });
});
- userId = _get(data, 'my.userAccount.id');
-} catch (e) {
- // do nothing (leave user id as null)
}
-// setup global analytics configuration + data
-app.$setKvAnalyticsData(userId).then(() => {
- let latestUserId = userId;
- // Use Apollo cached userid or check for user id from Auth0
- latestUserId = userId || (kvAuth0?.user?.['https://www.kiva.org/kiva_id'] ?? '');
- // Check for cookie next
- if (latestUserId === '') {
- const kvls = cookieStore.get('kvls');
- latestUserId = kvls === 'o' || kvls === 'deleted' ? null : kvls;
- }
- // Update Snowplow user id
- if (typeof snowplow !== 'undefined' && latestUserId && latestUserId !== '') {
- window.snowplow('setUserId', latestUserId);
- }
- // fire server rendered pageview
+async function setupTouchDetection(apolloClient) {
+ const { default: usingTouchMutation } = await import('#src/graphql/mutation/updateUsingTouch.graphql');
+ // Setup adding touch info to the state
+ window.addEventListener('touchstart', function onFirstTouch() {
+ apolloClient.mutate({
+ mutation: usingTouchMutation,
+ variables: { usingTouch: true }
+ });
+ window.removeEventListener('touchstart', onFirstTouch);
+ });
+}
+
+async function setupAnalytics(app, apolloClient) {
+ const userId = await getUserId(apolloClient);
+ await app.$setKvAnalyticsData(userId);
app.$fireServerPageView();
app.$fireQueuedEvents();
+ const { default: collectWebVitals } = await import('#src/util/webVitals');
collectWebVitals(app.$kvTrackEvent);
-});
+}
-// Setup adding touch info to the state
-window.addEventListener('touchstart', function onFirstTouch() {
- apolloClient.mutate({
- mutation: usingTouchMutation,
- variables: { usingTouch: true }
+async function setupSentry(app, router) {
+ const Sentry = await import('@sentry/vue');
+ Sentry.init({
+ app,
+ trackComponents: true,
+ dsn: config.sentryURI,
+ integrations: [
+ new Sentry.BrowserTracing({
+ routingInstrumentation: Sentry.vueRouterInstrumentation(router),
+ tracingOrigins: [config.host],
+ }),
+ ],
+ release: UI_TAG,
+ // Set tracesSampleRate to 1.0 to capture 100%
+ // of transactions for performance monitoring.
+ // We recommend adjusting this value in production
+ tracesSampleRate: config?.sentryTraceSampleRate,
+ beforeSend(event) {
+ // make sentry colleted event easy to compare to
+ const eventAsString = JSON.stringify(event);
+ // match specific 3rd party events for exclusion
+ // Skip sending failed to fetch error caused by unhandled promise rejection in google ads
+ // Sentry Event Link: https://kiva.sentry.io/issues/4413252219/events/726c65f507684f43b748e913d4793518/
+ // This url is unreachable: https://pagead2.googlesyndication.com/pagead/buyside_topics/set/
+ if (eventAsString.indexOf('Failed to fetch') !== -1
+ && eventAsString.indexOf('pagead') !== -1) {
+ return false;
+ }
+ // Skip sending failed loads of pX
+ if (eventAsString.indexOf("Cannot set property 'PX1065' of undefined") !== -1) {
+ return false;
+ }
+ // Skip sending errors from CefSharp
+ // https://forum.sentry.io/t/unhandledrejection-non-error-promise-rejection-captured-with-value/14062/20
+ if (eventAsString.indexOf('Object Not Found Matching Id') !== -1) {
+ return false;
+ }
+ // return event otherwise
+ return event;
+ },
});
- window.removeEventListener('touchstart', onFirstTouch);
-});
+}
-// Wait until router has resolved all async before hooks and async components
-router.onReady(() => {
+function setupClientRouting({
+ app, apolloClient, cookieStore, kvAuth0, router
+}) {
// Add router hook for handling asyncData.
// Doing it after initial route is resolved so that we don't double-fetch
// the data that we already have. Using router.beforeResolve() so that all
// async components are resolved.
- router.beforeResolve((to, from, next) => {
+ router.beforeResolve(async (to, from, next) => {
+ const [{ contentfulPreviewCookie }, { authenticationGuard }, { preFetchAll }] = await Promise.all([
+ import('#src/util/contentfulPreviewCookie'),
+ import('#src/util/authenticationGuard'),
+ import('#src/util/apolloPreFetch'),
+ ]);
+
// get newly activated components
- const matched = router.getMatchedComponents(to);
- const prevMatched = router.getMatchedComponents(from);
- const areRoutesTheSame = JSON.stringify(to?.matched?.[0]?.path) === JSON.stringify(from?.matched?.[0]?.path);
- const areParamsTheSame = JSON.stringify(to?.params) === JSON.stringify(from?.params);
- let activated;
- /** if route is the same but params are different, do not drop matched components this prevents buggy
- * navigation when client side navigating from route to same route with different params
- */
- if (areRoutesTheSame && !areParamsTheSame) {
- activated = matched;
- } else {
- activated = _dropWhile(matched, (c, i) => prevMatched[i] === c);
- }
+ console.log('to', to);
+ console.log('from', from);
+ // const matched = router.getMatchedComponents(to);
+ // const prevMatched = router.getMatchedComponents(from);
+ const { matched } = to;
+ const prevMatched = from.matched;
+ const activated = matched.filter((c, i) => prevMatched[i] !== c);
contentfulPreviewCookie({ route: to, cookieStore });
authenticationGuard({ route: to, apolloClient, kvAuth0 })
.then(() => {
- // Pre-fetch graphql queries from activated components
+ // Pre-fetch graphql queries from activated components
return preFetchAll(activated, apolloClient, {
cookieStore,
kvAuth0,
route: to,
- device
});
}).then(next).catch(next);
});
router.beforeEach((to, from, next) => {
- app.$Progress.start(6500);
+ app.config.globalProperties.$Progress.start(6500);
// if no routes match our path, force a page refresh to that path
- const matched = router.getMatchedComponents(to);
+ const { matched } = to;
if (!matched.length) {
window.location = to.fullPath;
} else {
@@ -187,7 +192,7 @@ router.onReady(() => {
router.afterEach((to, from) => {
// finish loading
- app.$Progress.finish();
+ app.config.globalProperties.$Progress.finish();
if (!to?.params?.noAnalytics) {
// fire pageview
@@ -195,8 +200,66 @@ router.onReady(() => {
}
});
- router.onError(() => app.$Progress.fail());
+ router.onError(() => app.config.globalProperties.$Progress.fail());
+}
+
+async function initApp() {
+ const [{ default: createApp }, cookieStore, device, locale, fetch] = await Promise.all([
+ import('#src/main'),
+ getCookieStore(),
+ getDevice(),
+ getLocale(),
+ getFetch(),
+ ]);
+ const kvAuth0 = await getKvAuth0(cookieStore);
+
+ // Create the App instance
+ const {
+ app,
+ router,
+ apolloClient,
+ } = createApp({
+ appConfig: config,
+ apollo: {
+ uri: config.graphqlUri,
+ types: config.graphqlPossibleTypes,
+ },
+ cookieStore,
+ device,
+ kvAuth0,
+ locale,
+ fetch,
+ });
+
+ // Apply Server state to Client Store
+ if (window.__APOLLO_STATE__) {
+ apolloClient.cache.restore(window.__APOLLO_STATE__);
+ }
+
+ setupAuthErrorHandling(kvAuth0, apolloClient);
+ setupTouchDetection(apolloClient);
+
+ if (config.enableSentry) {
+ setupSentry(app, router);
+ }
+
+ if (config.enableAnalytics) {
+ setupAnalytics(app, apolloClient);
+ }
+
+ // Wait until router has resolved all async before hooks and async components
+ await router.isReady();
+ setupClientRouting({
+ app, apolloClient, cookieStore, kvAuth0, router
+ });
// Mount app in DOM
- app.$mount('#app');
-});
+ app.mount('#app');
+}
+
+// Start application once browser is idle
+if ('requestIdleCallback' in window) {
+ requestIdleCallback(initApp, { timeout: 2000 });
+} else {
+ setTimeout(initApp, 500);
+}
diff --git a/src/components/15Years/15YearsButton.vue b/src/components/15Years/15YearsButton.vue
index b97828f78c..b9052da05e 100644
--- a/src/components/15Years/15YearsButton.vue
+++ b/src/components/15Years/15YearsButton.vue
@@ -56,8 +56,8 @@ export default {
diff --git a/src/components/BorrowerProfile/SupporterDetails.vue b/src/components/BorrowerProfile/SupporterDetails.vue
index ccc12ea08d..440eecf6d8 100644
--- a/src/components/BorrowerProfile/SupporterDetails.vue
+++ b/src/components/BorrowerProfile/SupporterDetails.vue
@@ -65,7 +65,7 @@
>
@@ -103,7 +103,7 @@
diff --git a/src/components/Checkout/BasketItem.vue b/src/components/Checkout/BasketItem.vue
index da3c6e0a83..2768032660 100644
--- a/src/components/Checkout/BasketItem.vue
+++ b/src/components/Checkout/BasketItem.vue
@@ -116,15 +116,15 @@
diff --git a/src/components/Checkout/DonationItem.vue b/src/components/Checkout/DonationItem.vue
index d17b23817b..8f6b1c8ff9 100644
--- a/src/components/Checkout/DonationItem.vue
+++ b/src/components/Checkout/DonationItem.vue
@@ -7,7 +7,7 @@
@@ -77,7 +77,7 @@
@@ -219,16 +219,14 @@
diff --git a/src/components/Checkout/InContext/InContextCheckout.vue b/src/components/Checkout/InContext/InContextCheckout.vue
index 86c247032b..14ef8c5943 100644
--- a/src/components/Checkout/InContext/InContextCheckout.vue
+++ b/src/components/Checkout/InContext/InContextCheckout.vue
@@ -19,10 +19,10 @@
name="piggy-bank"
/>
- {{ promoName }} has given you ${{ promoFund.promoPrice | numeral }} in credit.
+ {{ promoName }} has given you {{ $filters.numeral(promoFund.promoPrice, '$0,0[.]00') }} in credit.
- You have been given ${{ promoFund.promoPrice | numeral }} in credit.
+ You have been given {{ $filters.numeral(promoFund.promoPrice, '$0,0[.]00') }} in credit.
We've suggested a borrower to lend your remaining ${{ lcaLoanPrice }} credit to.
@@ -152,18 +152,18 @@
diff --git a/src/components/Contentful/DynamicRichText.vue b/src/components/Contentful/DynamicRichText.vue
index 139f2b09ae..92c0e68446 100644
--- a/src/components/Contentful/DynamicRichText.vue
+++ b/src/components/Contentful/DynamicRichText.vue
@@ -1,4 +1,5 @@
@@ -88,6 +88,7 @@ export default {
.story-card {
// Remove background set in StoryCard
background: none;
+
// Remove extra padding between bottom of story card and the carousel controls
padding-bottom: 0;
@@ -99,7 +100,7 @@ export default {
}
// When a slide is not active, hide every element that isn't an image in the DynamicRichText blocks in the slide
- [role="group"][aria-current="false"] {
+ [role=group][aria-current=false] {
.story-card .dynamic-rich-text {
& > * {
opacity: 0;
diff --git a/src/components/Contentful/TestimonialCards.vue b/src/components/Contentful/TestimonialCards.vue
index ae25ff05ec..941f15930b 100644
--- a/src/components/Contentful/TestimonialCards.vue
+++ b/src/components/Contentful/TestimonialCards.vue
@@ -61,11 +61,11 @@
diff --git a/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue b/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue
index 7305d3fb0a..9b6aa4e22a 100644
--- a/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue
+++ b/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue
@@ -14,8 +14,8 @@
diff --git a/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue b/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue
index 08bcd509de..4fea4b5371 100644
--- a/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue
+++ b/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue
@@ -18,7 +18,7 @@
diff --git a/src/components/CorporateCampaign/LoanSearch/SortOrder.vue b/src/components/CorporateCampaign/LoanSearch/SortOrder.vue
index b9b6856997..e1610ce729 100644
--- a/src/components/CorporateCampaign/LoanSearch/SortOrder.vue
+++ b/src/components/CorporateCampaign/LoanSearch/SortOrder.vue
@@ -20,7 +20,7 @@
diff --git a/src/components/Forms/GuestAccountCreation.vue b/src/components/Forms/GuestAccountCreation.vue
index 4dcedbebd0..46757d3784 100644
--- a/src/components/Forms/GuestAccountCreation.vue
+++ b/src/components/Forms/GuestAccountCreation.vue
@@ -40,12 +40,12 @@
diff --git a/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue b/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue
index 4168e06b94..4aa443ca42 100644
--- a/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue
+++ b/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue
@@ -25,10 +25,10 @@
diff --git a/src/components/Kv/KvMap.vue b/src/components/Kv/KvMap.vue
index bc19a014bc..be92c0c053 100644
--- a/src/components/Kv/KvMap.vue
+++ b/src/components/Kv/KvMap.vue
@@ -10,12 +10,12 @@
diff --git a/src/components/Kv/KvRadio.vue b/src/components/Kv/KvRadio.vue
index f83f64e905..8ef13f9ffc 100644
--- a/src/components/Kv/KvRadio.vue
+++ b/src/components/Kv/KvRadio.vue
@@ -22,7 +22,7 @@
diff --git a/src/components/Lend/LoanSearch/ChallengeHeader.vue b/src/components/Lend/LoanSearch/ChallengeHeader.vue
index 2cf5e7f9f0..c8d9b12bb9 100644
--- a/src/components/Lend/LoanSearch/ChallengeHeader.vue
+++ b/src/components/Lend/LoanSearch/ChallengeHeader.vue
@@ -70,11 +70,11 @@
diff --git a/src/components/LoanCards/RecommendedLoanCard.vue b/src/components/LoanCards/RecommendedLoanCard.vue
index 61afe59728..91147a03f6 100644
--- a/src/components/LoanCards/RecommendedLoanCard.vue
+++ b/src/components/LoanCards/RecommendedLoanCard.vue
@@ -34,7 +34,7 @@
{{ timeLeftMessage }}
- {{ amountLeftWithoutReservation | numeral('$0,0') }} to go
+ {{ $filters.numeral(amountLeftWithoutReservation, '$0,0') }} to go
@@ -89,16 +89,16 @@
diff --git a/src/components/LoanFinding/QuickFiltersSection.vue b/src/components/LoanFinding/QuickFiltersSection.vue
index eef508da97..6699deaf8a 100644
--- a/src/components/LoanFinding/QuickFiltersSection.vue
+++ b/src/components/LoanFinding/QuickFiltersSection.vue
@@ -70,13 +70,13 @@
diff --git a/src/components/LoansByCategory/ViewToggle.vue b/src/components/LoansByCategory/ViewToggle.vue
index 047c64dbf8..0dbb50d8af 100644
--- a/src/components/LoansByCategory/ViewToggle.vue
+++ b/src/components/LoansByCategory/ViewToggle.vue
@@ -30,9 +30,9 @@
diff --git a/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue b/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue
index 42db000966..f4d4d4ef05 100644
--- a/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue
+++ b/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue
@@ -15,7 +15,7 @@
diff --git a/src/pages/Autolending/AutolendingWho.vue b/src/pages/Autolending/AutolendingWho.vue
index 3ad0763815..9452614752 100644
--- a/src/pages/Autolending/AutolendingWho.vue
+++ b/src/pages/Autolending/AutolendingWho.vue
@@ -128,12 +128,12 @@
diff --git a/src/pages/Checkout/PostPurchase.vue b/src/pages/Checkout/PostPurchase.vue
index 93720a7b1f..b91d856b5d 100644
--- a/src/pages/Checkout/PostPurchase.vue
+++ b/src/pages/Checkout/PostPurchase.vue
@@ -1,8 +1,8 @@
diff --git a/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue b/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue
deleted file mode 100644
index 8509039cf8..0000000000
--- a/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/AlgoliaPaginationStats.vue b/src/pages/Lend/AlgoliaPaginationStats.vue
deleted file mode 100644
index 587834c868..0000000000
--- a/src/pages/Lend/AlgoliaPaginationStats.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/AlgoliaPaginationWrapper.vue b/src/pages/Lend/AlgoliaPaginationWrapper.vue
deleted file mode 100644
index 123f1dc271..0000000000
--- a/src/pages/Lend/AlgoliaPaginationWrapper.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/AlgoliaSearchBox.vue b/src/pages/Lend/AlgoliaSearchBox.vue
deleted file mode 100644
index b444c7179a..0000000000
--- a/src/pages/Lend/AlgoliaSearchBox.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue b/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue
deleted file mode 100644
index 023c825dc9..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-
- {{ stateData.index }}
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue b/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue
deleted file mode 100644
index 6b37a2fd4d..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-
- Showing {{ stateDataHits.length }} Results
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue b/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue
deleted file mode 100644
index dc4e499328..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue b/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue
deleted file mode 100644
index ea6e190ac2..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue b/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue
deleted file mode 100644
index 9f3c9664c5..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
-
- {{ title }}
-
-
-
- ({{ rangeLabel }})
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue b/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue
deleted file mode 100644
index 6badb0bd3e..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue b/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue
deleted file mode 100644
index daa6fb481c..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue
+++ /dev/null
@@ -1,412 +0,0 @@
-
-
-
-
-
-
-
-
-
- Show {{ nbHits }} loan{{ nbHits > 1 ? 's' : '' }}
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue b/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue
deleted file mode 100644
index 8a5c192cd6..0000000000
--- a/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue
+++ /dev/null
@@ -1,279 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue
deleted file mode 100644
index bf2ffb3689..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
- -
-
- {{ item.label }} ({{ item.count }})
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue
deleted file mode 100644
index 2916634277..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
- {{ name }}
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue
deleted file mode 100644
index ecf61de386..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue
deleted file mode 100644
index 6724a867ad..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
- -
-
- {{ item.label }} ({{ item.count }})
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue
deleted file mode 100644
index c7babe16cf..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
- -
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue
deleted file mode 100644
index 7453e7e534..0000000000
--- a/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
- -
-
- {{ item.label }} ({{ item.count }})
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue b/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue
deleted file mode 100644
index 27bf87e856..0000000000
--- a/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue b/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue
deleted file mode 100644
index b64bea1008..0000000000
--- a/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue b/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue
deleted file mode 100644
index 103a05f32d..0000000000
--- a/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue b/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue
deleted file mode 100644
index 96990c54ea..0000000000
--- a/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue
deleted file mode 100644
index cd6abf6854..0000000000
--- a/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue
deleted file mode 100644
index 37c438dab0..0000000000
--- a/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
- Find a loan in a new country
-
-
-
-
diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue
deleted file mode 100644
index 18f59b9d63..0000000000
--- a/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ item.label }} ({{ item.count }})
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/Filter/LendFilterPage.vue b/src/pages/Lend/Filter/LendFilterPage.vue
deleted file mode 100644
index 1ff65ab139..0000000000
--- a/src/pages/Lend/Filter/LendFilterPage.vue
+++ /dev/null
@@ -1,446 +0,0 @@
-
-
-
-
Beta
-
- Welcome to Kiva's new filter page! Take it for a spin below, or
- at any time.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/LendHeader.vue b/src/pages/Lend/LendHeader.vue
deleted file mode 100644
index a37c0dde8c..0000000000
--- a/src/pages/Lend/LendHeader.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/pages/Lend/LendPage.vue b/src/pages/Lend/LendPage.vue
index 0da1103038..0c2583025a 100644
--- a/src/pages/Lend/LendPage.vue
+++ b/src/pages/Lend/LendPage.vue
@@ -43,11 +43,11 @@ import _map from 'lodash/map';
import _mapValues from 'lodash/mapValues';
import _merge from 'lodash/merge';
import numeral from 'numeral';
-import loanCardQuery from '@/graphql/query/loanCardData.graphql';
-import WwwPage from '@/components/WwwFrame/WwwPage';
-import LoanCardController from '@/components/LoanCards/LoanCardController';
-import KvPagination from '@/components/Kv/KvPagination';
-import KvLoadingOverlay from '@/components/Kv/KvLoadingOverlay';
+import loanCardQuery from '#src/graphql/query/loanCardData.graphql';
+import WwwPage from '#src/components/WwwFrame/WwwPage';
+import LoanCardController from '#src/components/LoanCards/LoanCardController';
+import KvPagination from '#src/components/Kv/KvPagination';
+import KvLoadingOverlay from '#src/components/Kv/KvLoadingOverlay';
const loansPerPage = 12;
diff --git a/src/pages/Lend/LoanChannelCategoryControl.vue b/src/pages/Lend/LoanChannelCategoryControl.vue
index 539d658bd2..a1ad9fdb6d 100644
--- a/src/pages/Lend/LoanChannelCategoryControl.vue
+++ b/src/pages/Lend/LoanChannelCategoryControl.vue
@@ -12,7 +12,7 @@
class="tw-text-action tw-flex tw-items-center tw-float-right"
@click.native="trackAdvancedFilters"
>
-
+
Advanced filters
@@ -164,29 +164,29 @@ import _isEqual from 'lodash/isEqual';
import _map from 'lodash/map';
import _filter from 'lodash/filter';
import numeral from 'numeral';
-import logReadQueryError from '@/util/logReadQueryError';
-import loanChannelPageQuery from '@/graphql/query/loanChannelPage.graphql';
-import loanChannelQueryMapMixin from '@/plugins/loan-channel-query-map';
-import KvPagination from '@/components/Kv/KvPagination';
-import PromoGridLoanCardExp from '@/components/LoanCards/PromoGridLoanCardExp';
-import KvLoadingOverlay from '@/components/Kv/KvLoadingOverlay';
-import updateLoanReservation from '@/graphql/mutation/updateLoanReservation.graphql';
+import logReadQueryError from '#src/util/logReadQueryError';
+import loanChannelPageQuery from '#src/graphql/query/loanChannelPage.graphql';
+import loanChannelQueryMapMixin from '#src/plugins/loan-channel-query-map';
+import KvPagination from '#src/components/Kv/KvPagination';
+import PromoGridLoanCardExp from '#src/components/LoanCards/PromoGridLoanCardExp';
+import KvLoadingOverlay from '#src/components/Kv/KvLoadingOverlay';
+import updateLoanReservation from '#src/graphql/mutation/updateLoanReservation.graphql';
import {
preFetchChannel,
getCachedChannel,
watchChannelQuery,
getLoanChannel,
getFLSSQueryMap,
-} from '@/util/loanChannelUtils';
-import { runFacetsQueries, fetchLoanFacets } from '@/util/loanSearch/dataUtils';
-import { transformIsoCodes } from '@/util/loanSearch/filters/regions';
-import { FLSS_ORIGIN_CATEGORY } from '@/util/flssUtils';
-import QuickFilters from '@/components/LoansByCategory/QuickFilters/QuickFilters';
-import HelpmeChooseWrapper from '@/components/LoansByCategory/HelpmeChoose/HelpmeChooseWrapper';
-import KvClassicLoanCardContainer from '@/components/LoanCards/KvClassicLoanCardContainer';
-import EmptyState from '@/components/LoanFinding/EmptyState';
-import experimentAssignmentQuery from '@/graphql/query/experimentAssignment.graphql';
-import { trackExperimentVersion } from '@/util/experiment/experimentUtils';
+} from '#src/util/loanChannelUtils';
+import { runFacetsQueries, fetchLoanFacets } from '#src/util/loanSearch/dataUtils';
+import { transformIsoCodes } from '#src/util/loanSearch/filters/regions';
+import { FLSS_ORIGIN_CATEGORY } from '#src/util/flssUtils';
+import QuickFilters from '#src/components/LoansByCategory/QuickFilters/QuickFilters';
+import HelpmeChooseWrapper from '#src/components/LoansByCategory/HelpmeChoose/HelpmeChooseWrapper';
+import KvClassicLoanCardContainer from '#src/components/LoanCards/KvClassicLoanCardContainer';
+import EmptyState from '#src/components/LoanFinding/EmptyState';
+import experimentAssignmentQuery from '#src/graphql/query/experimentAssignment.graphql';
+import { trackExperimentVersion } from '#src/util/experiment/experimentUtils';
const defaultLoansPerPage = 12;
@@ -230,7 +230,7 @@ function getPageOffset(query, limit) {
export default {
name: 'LoanChannelCategoryControl',
- metaInfo() {
+ head() {
return {
title: this.metaTitle,
link: [
@@ -846,7 +846,7 @@ export default {
diff --git a/src/pages/Lend/LoanSearchPage.vue b/src/pages/Lend/LoanSearchPage.vue
index 96bc497091..6cccdd57cc 100644
--- a/src/pages/Lend/LoanSearchPage.vue
+++ b/src/pages/Lend/LoanSearchPage.vue
@@ -64,25 +64,25 @@
diff --git a/src/pages/LendingTeams/TeamListing.vue b/src/pages/LendingTeams/TeamListing.vue
index a59f270b7c..5bb9a7bd22 100644
--- a/src/pages/LendingTeams/TeamListing.vue
+++ b/src/pages/LendingTeams/TeamListing.vue
@@ -247,14 +247,14 @@
import { format } from 'date-fns';
import numeral from 'numeral';
import _mapValues from 'lodash/mapValues';
-import teamNoImage from '@/assets/images/team_s135.png';
-import { gql } from '@apollo/client';
-import KvPagination from '~/@kiva/kv-components/vue/KvPagination';
-import KvSelect from '~/@kiva/kv-components/vue/KvSelect';
+import teamNoImage from '#src/assets/images/team_s135.png';
+import { gql } from '@apollo/client/index';
+import KvPagination from '@kiva/kv-components/vue/KvPagination';
+import KvSelect from '@kiva/kv-components/vue/KvSelect';
+import KvButton from '@kiva/kv-components/vue/KvButton';
+import KvLoadingPlaceholder from '@kiva/kv-components/vue/KvLoadingPlaceholder';
import { fetchTeams, teamCategories, teamCategoryFriendlyName } from '../../util/teamsUtil';
import TeamSearchBar from './TeamSearchBar';
-import KvButton from '~/@kiva/kv-components/vue/KvButton';
-import KvLoadingPlaceholder from '~/@kiva/kv-components/vue/KvLoadingPlaceholder';
const teamsPerPage = 10;
@@ -432,8 +432,15 @@ export default {
teamSort, teamCategory, teamOption, queryString, offset
}) {
this.loading = true;
- await fetchTeams(this.apollo, teamSort, teamCategory, teamOption,
- queryString, offset, this.limit).then(teams => {
+ await fetchTeams(
+ this.apollo,
+ teamSort,
+ teamCategory,
+ teamOption,
+ queryString,
+ offset,
+ this.limit
+ ).then(teams => {
this.teams = teams.values;
this.totalCount = teams.totalCount;
if (this.teams.length === 0 && this.totalCount > 0) {
diff --git a/src/pages/LendingTeams/TeamSearchBar.vue b/src/pages/LendingTeams/TeamSearchBar.vue
index c6424d2943..43930da088 100644
--- a/src/pages/LendingTeams/TeamSearchBar.vue
+++ b/src/pages/LendingTeams/TeamSearchBar.vue
@@ -23,8 +23,8 @@
diff --git a/src/pages/LoginAndRegister/GuestAccountClaim.vue b/src/pages/LoginAndRegister/GuestAccountClaim.vue
index 73c17c511c..8707712d14 100644
--- a/src/pages/LoginAndRegister/GuestAccountClaim.vue
+++ b/src/pages/LoginAndRegister/GuestAccountClaim.vue
@@ -46,13 +46,13 @@
diff --git a/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue b/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue
index b2c0d03dd3..8190371475 100644
--- a/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue
+++ b/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue
@@ -7,7 +7,7 @@
>
- Heads up! You have {{ balance | numeral('$0') }} available to lend.
+ Heads up! You have {{ $filters.numeral(balance, '$0') }} available to lend.
@@ -73,7 +73,7 @@
@click="isDayInputShown = true"
v-if="!isDayInputShown"
>
- {{ dayOfMonth | numeral('Oo') }}
+ {{ $filters.numeral(dayOfMonth, 'Oo') }}
@@ -191,7 +191,7 @@
- {{ totalCombinedDeposit | numeral('$0,0.00') }}
+ {{ $filters.numeral(totalCombinedDeposit, '$0,0.00') }}
@@ -298,31 +298,31 @@
diff --git a/src/pages/UiSiteMap/UiSiteMapPage.vue b/src/pages/UiSiteMap/UiSiteMapPage.vue
index e40280ef10..a21e94d491 100644
--- a/src/pages/UiSiteMap/UiSiteMapPage.vue
+++ b/src/pages/UiSiteMap/UiSiteMapPage.vue
@@ -10,8 +10,8 @@
`;
}
// add primary head script
@@ -63,14 +68,6 @@ function addRenderedHtml(context, config) {
// append regular externals
renderedExternalsOptIn += renderedExternals;
}
-
- // check for 3rd party script opt-out
- const hasOptOut = context?.cookies?.kvgdpr?.indexOf('opted_out=true') > -1;
-
- // add rendered strings to request render context
- context.renderedConfig = renderedConfig;
- context.renderedNoscript = renderedNoscript;
- context.renderedExternals = hasOptOut ? renderedExternals : renderedExternalsOptIn;
}
// This exported function will be called by `bundleRenderer`.
@@ -78,143 +75,162 @@ function addRenderedHtml(context, config) {
// state of our application before actually rendering it.
// Since data fetching is async, this function is expected to
// return a Promise that resolves to the app instance.
-export default context => {
- return new Promise((resolve, reject) => {
- const s = isDev && Date.now();
- const {
- url,
- config,
- cookies,
- user,
- locale,
- device,
- } = context;
- const { accessToken, ...profile } = user;
-
- // Create cookie store with cookies passed from express middleware
- const cookieStore = new CookieStore(cookies);
-
- // Create random visitor id if none is set
- if (!cookieStore.get('uiv')) {
- // Set visitor id cookie expiration for 2 years from now
- const expires = new Date();
- expires.setFullYear(expires.getFullYear() + 2);
- // Store visitor id as 'uiv' cookie
- cookieStore.set('uiv', uuidv4(), {
- expires,
- sameSite: true,
- secure: true,
- path: '/',
- });
- }
+export default async context => {
+ const s = isDev && Date.now();
+ const {
+ url,
+ config,
+ cookies,
+ user,
+ locale,
+ device,
+ template,
+ } = context;
+ const { accessToken, ...profile } = user;
+
+ // Create cookie store with cookies passed from express middleware
+ const cookieStore = new CookieStore(cookies);
+
+ // Create random visitor id if none is set
+ if (!cookieStore.get('uiv')) {
+ // Set visitor id cookie expiration for 2 years from now
+ const expires = new Date();
+ expires.setFullYear(expires.getFullYear() + 2);
+ // Store visitor id as 'uiv' cookie
+ cookieStore.set('uiv', uuidv4(), {
+ expires,
+ sameSite: true,
+ secure: true,
+ path: '/',
+ });
+ }
- let kvAuth0;
- if (config.auth0.enable) {
- kvAuth0 = new KvAuth0({
- accessToken,
- checkFakeAuth: config.auth0.checkFakeAuth,
- cookieStore,
- domain: config.auth0.domain,
- user: profile,
- });
- } else {
- kvAuth0 = MockKvAuth0;
- }
+ let kvAuth0;
+ if (config.auth0.enable) {
+ kvAuth0 = new KvAuth0({
+ accessToken,
+ checkFakeAuth: config.auth0.checkFakeAuth,
+ cookieStore,
+ domain: config.auth0.domain,
+ user: profile,
+ });
+ } else {
+ kvAuth0 = MockKvAuth0;
+ }
- __webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line
-
- const {
- app,
- router,
- apolloClient,
- } = createApp({
- name: '',
- appConfig: config,
- apollo: {
- uri: config.graphqlUri,
- types: config.graphqlPossibleTypes
- },
+ // __webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line
+
+ const {
+ app,
+ head,
+ router,
+ apolloClient,
+ } = createApp({
+ name: '',
+ appConfig: config,
+ apollo: {
+ uri: config.graphqlUri,
+ types: config.graphqlPossibleTypes
+ },
+ cookieStore,
+ device,
+ kvAuth0,
+ locale,
+ fetch,
+ url,
+ isServer: true,
+ });
+
+ // redirect to the resolved url if it does not match the requested url
+ const { fullPath } = router.resolve(url);
+ if (fullPath !== url) {
+ // redirects defined in routes.js use a permanent (301) redirect
+ throw { url: fullPath, code: 301 };
+ }
+
+ // render content for template
+ renderExtraHtml(config);
+
+ // set router's location, ignoring any errors about redirection
+ router.push(url).catch(() => {});
+
+ // wait until router has resolved possible async hooks
+ await router.isReady();
+
+ // get the components matched by the route
+ const matchedComponents = router.currentRoute.value.matched;
+
+ // no matched routes
+ if (!matchedComponents.length) {
+ // TODO: Check for + redirect to kiva php app external route
+ throw { code: 404 };
+ }
+ contentfulPreviewCookie({ route: router.currentRoute, cookieStore });
+
+ try {
+ // Use route meta property to determine if route needs authentication
+ // authenticationGuard will reject promise with a redirect to login if
+ // required authentication query fails
+ await authenticationGuard({ route: router.currentRoute, apolloClient, kvAuth0 });
+
+ // Pre-fetch graphql queries from the components (and all of their child components)
+ // matched by the route
+ // preFetchAll dispatches the queries with Apollo and returns a Promise,
+ // which is resolved when the action is complete and apollo cache has been updated.
+ await preFetchAll(matchedComponents, apolloClient, {
cookieStore,
- device,
kvAuth0,
- locale,
- fetch,
- url,
+ route: router.currentRoute,
+ device
});
- // redirect to the resolved url if it does not match the requested url
- const { fullPath } = router.resolve(url).route;
- if (fullPath !== url) {
- // redirects defined in routes.js use a permanent (301) redirect
- return reject({ url: fullPath, code: 301 });
+ let sp; // Vue serverPrefetch timing start
+ if (isDev) {
+ logFormatter(`data pre-fetch: ${Date.now() - s}ms`);
+ sp = new Date();
}
- // render content for template
- addRenderedHtml(context, config);
-
- // set router's location, ignoring any errors about redirection
- router.push(url).catch(() => {});
-
- // wait until router has resolved possible async hooks
- return router.onReady(() => {
- // get the components matched by the route
- const matchedComponents = router.getMatchedComponents();
-
- // no matched routes
- if (!matchedComponents.length) {
- // TODO: Check for + redirect to kiva php app external route
- return reject({ code: 404 });
- }
- contentfulPreviewCookie({ route: router.currentRoute, cookieStore });
- // Use route meta property to determine if route needs authentication
- // authenticationGuard will reject promise with a redirect to login if
- // required authentication query fails
- return authenticationGuard({ route: router.currentRoute, apolloClient, kvAuth0 }).then(() => {
- // Pre-fetch graphql queries from the components (and all of their child components)
- // matched by the route
- // preFetchAll dispatches the queries with Apollo and returns a Promise,
- // which is resolved when the action is complete and apollo cache has been updated.
- return preFetchAll(matchedComponents, apolloClient, {
- cookieStore,
- kvAuth0,
- route: router.currentRoute,
- device
- });
- }).then(() => {
- let sp; // Vue serverPrefetch timing start
- if (isDev) {
- logFormatter(`data pre-fetch: ${Date.now() - s}ms`);
- sp = new Date();
- }
-
- // This `rendered` hook is called when the app has finished rendering
- context.rendered = () => {
- if (isDev) logFormatter(`vue serverPrefetch: ${Date.now() - sp}ms`);
- // After all preFetch hooks are resolved, our store is now
- // filled with the state needed to render the app.
- // Expose the state on the render context, and let the request handler
- // inline the state in the HTML response. This allows the client-side
- // store to pick-up the server-side state without having to duplicate
- // the initial data fetching on the client.
- context.templateConfig = config;
- context.meta = app.$meta();
- context.renderedState = renderGlobals({
- __APOLLO_STATE__: apolloClient.cache.extract(),
- pageData: buildUserDataGlobal(router, cookieStore, apolloClient)
- });
- context.setCookies = cookieStore.getSetCookies();
- };
- resolve(app);
- }).catch(error => {
- if (error instanceof Error) {
- reject(error);
- } else {
- context.setCookies = cookieStore.getSetCookies();
- reject({
- url: router.resolve(error).href,
- });
- }
- });
- }, reject);
- });
+ // render the app
+ const appHtml = await renderToString(app, context);
+
+ if (isDev) logFormatter(`vue serverPrefetch: ${Date.now() - sp}ms`);
+
+ // After all preFetch hooks are resolved, our store is now
+ // filled with the state needed to render the app.
+ // Expose the state on the render context, and let the request handler
+ // inline the state in the HTML response. This allows the client-side
+ // store to pick-up the server-side state without having to duplicate
+ // the initial data fetching on the client.
+ const payload = await renderSSRHead(head);
+ const appState = renderGlobals({
+ __APOLLO_STATE__: apolloClient.cache.extract(),
+ pageData: buildUserDataGlobal(router, cookieStore, apolloClient)
+ });
+
+ // check for 3rd party script opt-out
+ const hasOptOut = cookies?.kvgdpr?.indexOf('opted_out=true') > -1;
+
+ const templateData = {
+ ...payload,
+ appHtml,
+ appState,
+ appConfig: renderedConfig,
+ externals: hasOptOut ? renderedExternals : renderedExternalsOptIn,
+ googleTagmanagerId: config.googleTagmanagerId,
+ };
+
+ return {
+ html: fillTemplate(template, templateData),
+ setCookies: cookieStore.getSetCookies(),
+ };
+ } catch (error) {
+ if (error instanceof Error) {
+ throw error;
+ } else {
+ context.setCookies = cookieStore.getSetCookies();
+ throw {
+ url: router.resolve(error).href,
+ };
+ }
+ }
};
diff --git a/src/util/KvAuth0.js b/src/util/KvAuth0.js
index 7c010d9875..84618ab441 100644
--- a/src/util/KvAuth0.js
+++ b/src/util/KvAuth0.js
@@ -1,4 +1,4 @@
-import sub from 'date-fns/sub';
+import { sub } from 'date-fns';
import * as Sentry from '@sentry/vue'; // could be async import
import syncDate from './syncDate';
import logFormatter from './logFormatter';
diff --git a/src/util/achievementUtils.js b/src/util/achievementUtils.js
index e7552a5740..faeabdefa1 100644
--- a/src/util/achievementUtils.js
+++ b/src/util/achievementUtils.js
@@ -1,4 +1,4 @@
-import achievementMilestonesQuery from '@/graphql/query/achievementMilestones.graphql';
+import achievementMilestonesQuery from '#src/graphql/query/achievementMilestones.graphql';
/**
* achievementsQuery query
diff --git a/src/util/algoliaUtils.js b/src/util/algoliaUtils.js
deleted file mode 100644
index 2ff99e3b4f..0000000000
--- a/src/util/algoliaUtils.js
+++ /dev/null
@@ -1,217 +0,0 @@
-import _filter from 'lodash/filter';
-import _find from 'lodash/find';
-
-// temporary store for utm query params
-let utmParams = [];
-
-// dev_fundraising_loans is the base index, all others are replicas
-// INFO: This list powers the sort order component
-export const fundraisingIndices = [
- { value: 'dev_fundraising_amount_asc', label: 'Amount: low to high' },
- { value: 'dev_fundraising_amount_desc', label: 'Amount: high to low' },
- { value: 'dev_fundraising_amount_remaining', label: 'Amount left' },
- { value: 'dev_fundraising_expiring_soon', label: 'Ending soon' },
- { value: 'dev_fundraising_loan_length', label: 'Loan length' },
- { value: 'dev_fundraising_loans', label: 'Most Recent' },
- { value: 'dev_fundraising_popularity', label: 'Trending Now' },
-];
-
-// Re-Map algolia index keys to legacy Kiva sort keys
-export const sortIndexKeys = [
- { value: 'amount_desc', label: 'loanAmountDesc' },
- { value: 'amount_asc', label: 'loanAmount' },
- { value: 'loan_length', label: 'repaymentTerm' },
- { value: 'amount_remaining', label: 'amountLeft' },
- { value: 'expiring_soon', label: 'expiringSoon' },
- { value: 'loans', label: 'newest' },
- { value: 'popularity', label: 'popularity' },
-];
-
-// provide Updated index definitions based on environment config
-export function getDefaultSortIndices(algoliaGroup) {
- return fundraisingIndices.map(index => {
- return {
- value: algoliaGroup !== 'dev' ? index.value.replace('dev', algoliaGroup) : index.value,
- label: index.label
- };
- });
-}
-
-// Rebuild sort index name as set in Algolia
-export function setSortByEnv(selectedRouteSort) {
- let envName;
- if (typeof window !== 'undefined') {
- const { host } = window.location;
- if (host.includes('dev') || host.includes('localhost')) {
- envName = 'dev';
- } else if (host.includes('qa')) {
- envName = 'qa';
- } else if (host.includes('stage')) {
- envName = 'stage';
- } else {
- envName = 'prod';
- }
- }
- return `${envName}_fundraising_${selectedRouteSort[0].value}`;
-}
-
-// extract custom, simple name for sortBy value in url
-export function createSimpleSortByFromState(uiStateSortBy) {
- const defaultSort = 'popularity';
- const selectedSort = _filter(sortIndexKeys, item => {
- if (uiStateSortBy !== undefined) {
- return uiStateSortBy.indexOf(item.value) !== -1;
- }
- return item.value === defaultSort;
- });
- return selectedSort[0].label;
-}
-
-// map simple sortBy string to algolia index name
-export function rebuildSortByIndexFromRoute(routeStateSortBy) {
- const defaultSort = 'popularity';
- const selectedRouteSort = _filter(sortIndexKeys, item => {
- if (routeStateSortBy !== undefined) {
- return routeStateSortBy === item.label;
- }
- return item.label === defaultSort;
- });
- return setSortByEnv(selectedRouteSort);
-}
-
-// Build object of external query params. ie utm params
-export function extractExternalParams(search) {
- const searchParams = search.replace('?', '').split('&');
- // extract utms
- const utmParamsFromSearch = searchParams.filter(param => param.indexOf('utm_') !== -1);
- const utmArray = utmParamsFromSearch.map(utmString => {
- const utm = utmString.split('=');
- return utm;
- });
- return Object.fromEntries(utmArray);
-}
-
-// Build Algolia specific map of current search state to url query parameters
-export function stateToRoute(uiState) {
- // extract and assign utm params if present
- if (window.location.search.indexOf('utm') !== -1 && !utmParams.length) {
- utmParams = extractExternalParams(window.location.search);
- }
-
- return {
- query: uiState.query,
- gender:
- uiState.menu
- && uiState.menu.gender,
- sector:
- (uiState.refinementList
- && uiState.refinementList['sector.name']
- && uiState.refinementList['sector.name'].join('~'))
- || (uiState.menu
- && uiState.menu['sector.name']),
- attributes:
- uiState.refinementList
- && uiState.refinementList['loanThemeFilters.name']
- && uiState.refinementList['loanThemeFilters.name'].join('~'),
- tags:
- uiState.refinementList
- && uiState.refinementList['tags.name']
- && uiState.refinementList['tags.name'].join('~'),
- location:
- (uiState.hierarchicalMenu
- && uiState.hierarchicalMenu['locationFacets.lvl0']
- && uiState.hierarchicalMenu['locationFacets.lvl0'].join('~'))
- || (uiState.menu
- && uiState.menu['locationFacets.lvl0']),
- countries:
- uiState.refinementList
- && uiState.refinementList['locationFacets.lvl1']
- && uiState.refinementList['locationFacets.lvl1'].join('~'),
- repayment:
- uiState.range
- && uiState.range.lenderRepaymentTerm,
- delinquency:
- uiState.range
- && uiState.range['partner.delinquencyRate'],
- default:
- uiState.range
- && uiState.range['partner.defaultRate'],
- risk:
- uiState.range
- && uiState.range['partner.riskRating'],
- sortBy: createSimpleSortByFromState(uiState.sortBy),
- page: uiState.page,
- // patch in utmParams if present
- ...utmParams
- };
-}
-
-// Build Algolia specific map from url query parameters into a search object
-export function routeToState(routeState) {
- // extract and assign utm params if present
- if (window.location.search.indexOf('utm') !== -1 && !utmParams.length) {
- utmParams = extractExternalParams(window.location.search);
- }
-
- return {
- query: routeState.query,
- menu: {
- gender: routeState.gender,
- 'sector.name': routeState.sector,
- 'locationFacets.lvl0': routeState.location,
- },
- refinementList: {
- 'sector.name':
- routeState.sector
- && routeState.sector.split('~'),
- 'loanThemeFilters.name':
- routeState.attributes
- && routeState.attributes.split('~'),
- 'tags.name':
- routeState.tags
- && routeState.tags.split('~'),
- 'locationFacets.lvl1':
- routeState.countries
- && routeState.countries.split('~'),
- },
- hierarchicalMenu: {
- 'locationFacets.lvl0':
- routeState.location
- && routeState.location.split('~'),
- },
- range: {
- lenderRepaymentTerm:
- routeState.repayment,
- 'partner.delinquencyRate':
- routeState.delinquency,
- 'partner.defaultRate':
- routeState.default,
- 'partner.riskRating':
- routeState.risk,
- },
- sortBy: rebuildSortByIndexFromRoute(routeState.sortBy),
- page: routeState.page,
- // patch in utmParams if present
- ...utmParams
- };
-}
-
-// Merge All facet values with filtered facet values (only keys with items in current search)
-export default function mergeRefinmentListItems(allItems, filteredItems) {
- // new array to hold our merged items
- const patchedItems = [];
- allItems.forEach(originalItem => {
- // check filtered result items for matches
- const matchedItem = _find(filteredItems, item => {
- return item.value === originalItem.value;
- });
- if (matchedItem !== undefined) {
- // push matched/active item data
- patchedItems.push(matchedItem);
- } else {
- // push stub item data
- patchedItems.push(originalItem);
- }
- });
- return patchedItems;
-}
diff --git a/src/util/apolloPreFetch.js b/src/util/apolloPreFetch.js
index 42d5b6b748..b03664c254 100644
--- a/src/util/apolloPreFetch.js
+++ b/src/util/apolloPreFetch.js
@@ -9,7 +9,7 @@ const wellKnownErrorCodes = [
'api.authenticationRequired'
];
-export function handleApolloErrors(handlers = {}, errors, args) {
+export function handleApolloErrors(handlers = {}, errors = [], args = {}) {
// Get the error code for each error from either error.code or error.extensions.code
const formattedErrors = _map(errors, error => {
const extensions = error.extensions || {};
diff --git a/src/util/authenticationGuard.js b/src/util/authenticationGuard.js
index c545f83a11..af4b0c174e 100644
--- a/src/util/authenticationGuard.js
+++ b/src/util/authenticationGuard.js
@@ -1,6 +1,6 @@
import _get from 'lodash/get';
import * as Sentry from '@sentry/vue';
-import authenticationQuery from '@/graphql/query/authenticationQuery.graphql';
+import authenticationQuery from '#src/graphql/query/authenticationQuery.graphql';
const isServer = typeof window === 'undefined';
@@ -66,7 +66,7 @@ const processErrors = (error, route) => {
// The two possible meta properties are activeLoginRequired, and authenticationRequired
// activeLoginRequired takes priority over authenticationRequired since it implies authenticationRequired
// and recentLoginRequired takes priority over activeLoginRequired since it implies activeLoginRequired
-// eslint-disable-next-line import/prefer-default-export
+
export function authenticationGuard({ route, apolloClient, kvAuth0 }) {
// Skip authentication checks if Auth0 usage is not enabled
if (!kvAuth0.enabled) {
@@ -80,7 +80,7 @@ export function authenticationGuard({ route, apolloClient, kvAuth0 }) {
// Route requires some sort of authentication
if (activeRequired || authRequired || mfaRequired || recentRequired) {
- return apolloClient.query({
+ apolloClient.query({
query: authenticationQuery,
fetchPolicy: 'network-only',
}).then(({ data }) => {
@@ -103,8 +103,9 @@ export function authenticationGuard({ route, apolloClient, kvAuth0 }) {
}).catch(e => {
reject(processErrors(e, route));
});
+ } else {
+ // Route does not require any authentication
+ resolve();
}
- // Route does not require any authentication
- resolve();
});
}
diff --git a/src/util/basketUtils.js b/src/util/basketUtils.js
index f73c79bf21..4b177693fb 100644
--- a/src/util/basketUtils.js
+++ b/src/util/basketUtils.js
@@ -1,11 +1,11 @@
import * as Sentry from '@sentry/vue';
-import { gql } from '@apollo/client';
+import { gql } from '@apollo/client/index';
import numeral from 'numeral';
-import logFormatter from '@/util/logFormatter';
-import basketCountQuery from '@/graphql/query/basketCount.graphql';
-import basketItemsQuery from '@/graphql/query/basketItems.graphql';
-import basketLoansInfoQuery from '@/graphql/query/basketLoansInfo.graphql';
-import updateDonation from '@/graphql/mutation/updateDonation.graphql';
+import logFormatter from '#src/util/logFormatter';
+import basketCountQuery from '#src/graphql/query/basketCount.graphql';
+import basketItemsQuery from '#src/graphql/query/basketItems.graphql';
+import basketLoansInfoQuery from '#src/graphql/query/basketLoansInfo.graphql';
+import updateDonation from '#src/graphql/mutation/updateDonation.graphql';
export const INVALID_BASKET_ERROR = 'invalidBasket';
diff --git a/src/util/bookmarkUtil.js b/src/util/bookmarkUtil.js
index 4ce89a295a..bafd0cd937 100644
--- a/src/util/bookmarkUtil.js
+++ b/src/util/bookmarkUtil.js
@@ -1,4 +1,4 @@
-import loanBookmarkMutation from '@/graphql/mutation/updateLoanFavorite.graphql';
+import loanBookmarkMutation from '#src/graphql/mutation/updateLoanFavorite.graphql';
/**
* bookmarkLoan mutation
diff --git a/src/util/campaignUtils.js b/src/util/campaignUtils.js
index 6044c04545..148bc56e54 100644
--- a/src/util/campaignUtils.js
+++ b/src/util/campaignUtils.js
@@ -1,5 +1,5 @@
-import { gql } from '@apollo/client';
-import promoCampaign from '@/graphql/query/promoCampaign.graphql';
+import { gql } from '@apollo/client/index';
+import promoCampaign from '#src/graphql/query/promoCampaign.graphql';
/**
* addCreditByType mutation
@@ -115,7 +115,7 @@ export function validateQueryParams(query, apollo) {
* @param {Object} apollo Apollo Client instance
* @returns {Promise}
*/
-export function getPromoFromBasket(promoFundId = null, apollo) {
+export function getPromoFromBasket(promoFundId = null, apollo = {}) {
return apollo.query({
query: promoCampaign,
variables: {
diff --git a/src/util/checkoutUtils.js b/src/util/checkoutUtils.js
index 0ef0a498a2..15dd35c60a 100644
--- a/src/util/checkoutUtils.js
+++ b/src/util/checkoutUtils.js
@@ -1,6 +1,6 @@
import numeral from 'numeral';
-import myFTD from '@/graphql/query/myFTD.graphql';
-import removeCreditByTypeMutation from '@/graphql/mutation/shopRemoveCreditByType.graphql';
+import myFTD from '#src/graphql/query/myFTD.graphql';
+import removeCreditByTypeMutation from '#src/graphql/mutation/shopRemoveCreditByType.graphql';
/** Format Transaction Data for Analtyics events
* @param {Number} transactionId
diff --git a/src/util/contentful/isContentfulQuery.js b/src/util/contentful/isContentfulQuery.js
index b28f80404b..7fcd957fa1 100644
--- a/src/util/contentful/isContentfulQuery.js
+++ b/src/util/contentful/isContentfulQuery.js
@@ -1,4 +1,3 @@
-/* eslint-disable import/prefer-default-export */
/**
* Returns true if contentful query
*
diff --git a/src/util/contentful/richTextRenderer.js b/src/util/contentful/richTextRenderer.js
index 7bf484f001..0d7dd176ca 100644
--- a/src/util/contentful/richTextRenderer.js
+++ b/src/util/contentful/richTextRenderer.js
@@ -1,4 +1,3 @@
-/* eslint-disable import/prefer-default-export */
/*
* Custom renderer for Contentful Rich Text content
* Has the ability to return html for embedded assets
@@ -8,9 +7,9 @@
import {
formatResponsiveImageSet, responsiveImageSetSourceSets, formatContentTypes
-} from '@/util/contentfulUtils';
-import { BLOCKS, INLINES } from '~/@contentful/rich-text-types';
-import { documentToHtmlString } from '~/@contentful/rich-text-html-renderer';
+} from '#src/util/contentfulUtils';
+import { BLOCKS, INLINES } from '@contentful/rich-text-types';
+import { documentToHtmlString } from '@contentful/rich-text-html-renderer';
/**
* Returns a string representation of a value
@@ -114,7 +113,7 @@ export function richTextRenderer(content) {
// The content prop expects an object, but in this context
// only passing in a string representation of an object will work
// We must stringify the object, then replace the quotes
- // eslint-disable-next-line max-len
+
const buttonObjectAsString = htmlSafeStringify(entryContent?.fields);
return ``;
}
@@ -160,7 +159,6 @@ export function richTextRenderer(content) {
return documentToHtmlString(contentWithoutTrailingEmptyParagraph, options);
}
-/* eslint-disable import/prefer-default-export */
/**
* Adds target="_blank" to links so they open in a new tab
*
diff --git a/src/util/contentfulPreviewCookie.js b/src/util/contentfulPreviewCookie.js
index 70f768fbcd..032c6f4d47 100644
--- a/src/util/contentfulPreviewCookie.js
+++ b/src/util/contentfulPreviewCookie.js
@@ -1,7 +1,7 @@
// Contentful Preview Functionality
// Create or delete cookie value if preview query parameter exists on route
// This cookie value is read by apollo in src/api/ContentfulPreviewLink.js
-// eslint-disable-next-line import/prefer-default-export
+
export function contentfulPreviewCookie({ route, cookieStore }) {
const isPreview = route?.query?.preview;
if (isPreview && isPreview === 'true') {
diff --git a/src/util/experiment/experimentUtils.js b/src/util/experiment/experimentUtils.js
index 474519b976..dcb2f723ac 100644
--- a/src/util/experiment/experimentUtils.js
+++ b/src/util/experiment/experimentUtils.js
@@ -1,11 +1,11 @@
-import experimentSettingQuery from '@/graphql/query/experimentSetting.graphql';
-import experimentVersionFragment from '@/graphql/fragments/experimentVersion.graphql';
-import experimentIdsQuery from '@/graphql/query/experimentIds.graphql';
-import { readJSONSetting, hashCode } from '@/util/settingsUtils';
-import logReadQueryError from '@/util/logReadQueryError';
+import experimentSettingQuery from '#src/graphql/query/experimentSetting.graphql';
+import experimentVersionFragment from '#src/graphql/fragments/experimentVersion.graphql';
+import experimentIdsQuery from '#src/graphql/query/experimentIds.graphql';
+import { readJSONSetting, hashCode } from '#src/util/settingsUtils';
+import logReadQueryError from '#src/util/logReadQueryError';
import { v4 as uuidv4 } from 'uuid';
-import logFormatter from '@/util/logFormatter';
-import experimentAssignmentQuery from '@/graphql/query/experimentAssignment.graphql';
+import logFormatter from '#src/util/logFormatter';
+import experimentAssignmentQuery from '#src/graphql/query/experimentAssignment.graphql';
import Alea from './Alea';
/**
diff --git a/src/util/flssUtils.js b/src/util/flssUtils.js
index 6e5a1a7a64..d58504a8e9 100644
--- a/src/util/flssUtils.js
+++ b/src/util/flssUtils.js
@@ -1,9 +1,9 @@
-import flssLoanQuery from '@/graphql/query/flssLoansQuery.graphql';
-import flssLoanFacetsQuery from '@/graphql/query/flssLoanFacetsQuery.graphql';
-import flssLoanChannelQuery from '@/graphql/query/flssLoanChannel.graphql';
-import categoryListFlssQuery from '@/graphql/query/loanFinding/categoryListFlss.graphql';
-import logReadQueryError from '@/util/logReadQueryError';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import flssLoanQuery from '#src/graphql/query/flssLoansQuery.graphql';
+import flssLoanFacetsQuery from '#src/graphql/query/flssLoanFacetsQuery.graphql';
+import flssLoanChannelQuery from '#src/graphql/query/flssLoanChannel.graphql';
+import categoryListFlssQuery from '#src/graphql/query/loanFinding/categoryListFlss.graphql';
+import logReadQueryError from '#src/util/logReadQueryError';
+import filterConfig from '#src/util/loanSearch/filterConfig';
/**
* FLSS Query Context Const lists
@@ -44,10 +44,10 @@ export function getFlssFilters(loanSearchState) {
export async function fetchFacets(
apollo,
origin = FLSS_ORIGIN_NOT_SPECIFIED,
- isoCodeFilters,
- themeFilters,
- sectorFilters,
- tagFilters,
+ isoCodeFilters = {},
+ themeFilters = {},
+ sectorFilters = {},
+ tagFilters = {},
) {
try {
const result = await apollo.query({
diff --git a/src/util/getDeepComponents.js b/src/util/getDeepComponents.js
index 4381cd46a0..6cdb97f1cc 100644
--- a/src/util/getDeepComponents.js
+++ b/src/util/getDeepComponents.js
@@ -9,8 +9,7 @@ async function deepAdd(components, set) {
let def = definition;
// import dynamic component
if (typeof definition === 'function') {
- const imported = await definition();
- def = imported.default;
+ def = await definition();
}
// add the component definition and its children if the definition hasn't been added yet
if (!set.has(def)) {
diff --git a/src/util/importHelpers.js b/src/util/importHelpers.js
new file mode 100644
index 0000000000..90d5618ca3
--- /dev/null
+++ b/src/util/importHelpers.js
@@ -0,0 +1,13 @@
+/**
+ * @description - Helper function to import modules from import.meta.glob()
+ *
+ * @param {object} glob - result from import.meta.glob()
+ * @param {string} rootPath - root path of the glob
+ * @returns any - module from glob matching the path
+ */
+export function metaGlobReader(glob, rootPath) {
+ return path => {
+ const module = glob?.[`${rootPath}${path}`];
+ return module?.default ?? module;
+ };
+}
diff --git a/src/util/joinArray.js b/src/util/joinArray.js
index e3302346d0..c690d37e1d 100644
--- a/src/util/joinArray.js
+++ b/src/util/joinArray.js
@@ -6,7 +6,7 @@
* @param {string} Conjunction to use when joining array
* @returns {string}
*/
-// eslint-disable-next-line import/prefer-default-export
+
export function joinArray(arr, last = 'and') {
// Default last conjunction is 'and'
if (!Array.isArray(arr)) {
diff --git a/src/util/loanCallouts.js b/src/util/loanCallouts.js
index f60d6138de..d90fc65e00 100644
--- a/src/util/loanCallouts.js
+++ b/src/util/loanCallouts.js
@@ -65,4 +65,4 @@ function loanCallouts(loan, categoryPageName) {
return callouts;
}
-module.exports = loanCallouts;
+export default loanCallouts;
diff --git a/src/util/loanChannelUtils.js b/src/util/loanChannelUtils.js
index 02e0acd424..50ffd89ef1 100644
--- a/src/util/loanChannelUtils.js
+++ b/src/util/loanChannelUtils.js
@@ -3,10 +3,10 @@ import {
getCachedLoanChannel,
getLoanChannelVariables,
watchLoanChannel
-} from '@/util/flssUtils';
-import loanChannelQuery from '@/graphql/query/loanChannelDataExpanded.graphql';
-import logReadQueryError from '@/util/logReadQueryError';
-import logFormatter from '@/util/logFormatter';
+} from '#src/util/flssUtils';
+import loanChannelQuery from '#src/graphql/query/loanChannelDataExpanded.graphql';
+import logReadQueryError from '#src/util/logReadQueryError';
+import logFormatter from '#src/util/logFormatter';
/**
* Returns the FLSS loan search state object based on the map and category
@@ -138,7 +138,6 @@ export function watchChannelQuery(apollo, queryMap, channelUrl, loanQueryVars, n
});
watch(vars => {
- // eslint-disable-next-line max-len
observer.setVariables(queryMapFLSS ? getLoanChannelVariables(queryMapFLSS, vars) : vars);
});
diff --git a/src/util/loanSearch/dataUtils.js b/src/util/loanSearch/dataUtils.js
index 8f4dcc5ade..21a7e1f9fc 100644
--- a/src/util/loanSearch/dataUtils.js
+++ b/src/util/loanSearch/dataUtils.js
@@ -1,12 +1,12 @@
-import loanFacetsQuery from '@/graphql/query/loanFacetsQuery.graphql';
-import loanEnumsQuery from '@/graphql/query/loanEnumsQuery.graphql';
+import loanFacetsQuery from '#src/graphql/query/loanFacetsQuery.graphql';
+import loanEnumsQuery from '#src/graphql/query/loanEnumsQuery.graphql';
import {
fetchFacets,
fetchLoans,
getFlssFilters,
FLSS_ORIGIN_NOT_SPECIFIED,
-} from '@/util/flssUtils';
-import logReadQueryError from '@/util/logReadQueryError';
+} from '#src/util/flssUtils';
+import logReadQueryError from '#src/util/logReadQueryError';
/**
* Runs the query to get the filter facets
diff --git a/src/util/loanSearch/filterConfig.js b/src/util/loanSearch/filterConfig.js
index 40ccf341a1..56ae28651e 100644
--- a/src/util/loanSearch/filterConfig.js
+++ b/src/util/loanSearch/filterConfig.js
@@ -1,22 +1,22 @@
-import pageOffset from '@/util/loanSearch/filters/pageOffset';
-import pageLimit from '@/util/loanSearch/filters/pageLimit';
-import genders from '@/util/loanSearch/filters/genders';
-import isIndividual from '@/util/loanSearch/filters/isIndividual';
-import keywordSearch from '@/util/loanSearch/filters/keywordSearch';
-import sortOptions from '@/util/loanSearch/filters/sortOptions';
-import regions from '@/util/loanSearch/filters/regions';
-import sectors from '@/util/loanSearch/filters/sectors';
-import themes from '@/util/loanSearch/filters/themes';
-import tags from '@/util/loanSearch/filters/tags';
-import lenderRepaymentTerms from '@/util/loanSearch/filters/lenderRepaymentTerms';
-import distributionModels from '@/util/loanSearch/filters/distributionModels';
-import partners from '@/util/loanSearch/filters/partners';
-import partnerRiskRating from '@/util/loanSearch/filters/partnerRiskRating';
-import partnerDefaultRate from '@/util/loanSearch/filters/partnerDefaultRate';
-import partnerAvgProfitability from '@/util/loanSearch/filters/partnerAvgProfitability';
-import activities from '@/util/loanSearch/filters/activities';
-import isMatchable from '@/util/loanSearch/filters/isMatchable';
-import flexibleFundraisingEnabled from '@/util/loanSearch/filters/flexibleFundraisingEnabled';
+import pageOffset from '#src/util/loanSearch/filters/pageOffset';
+import pageLimit from '#src/util/loanSearch/filters/pageLimit';
+import genders from '#src/util/loanSearch/filters/genders';
+import isIndividual from '#src/util/loanSearch/filters/isIndividual';
+import keywordSearch from '#src/util/loanSearch/filters/keywordSearch';
+import sortOptions from '#src/util/loanSearch/filters/sortOptions';
+import regions from '#src/util/loanSearch/filters/regions';
+import sectors from '#src/util/loanSearch/filters/sectors';
+import themes from '#src/util/loanSearch/filters/themes';
+import tags from '#src/util/loanSearch/filters/tags';
+import lenderRepaymentTerms from '#src/util/loanSearch/filters/lenderRepaymentTerms';
+import distributionModels from '#src/util/loanSearch/filters/distributionModels';
+import partners from '#src/util/loanSearch/filters/partners';
+import partnerRiskRating from '#src/util/loanSearch/filters/partnerRiskRating';
+import partnerDefaultRate from '#src/util/loanSearch/filters/partnerDefaultRate';
+import partnerAvgProfitability from '#src/util/loanSearch/filters/partnerAvgProfitability';
+import activities from '#src/util/loanSearch/filters/activities';
+import isMatchable from '#src/util/loanSearch/filters/isMatchable';
+import flexibleFundraisingEnabled from '#src/util/loanSearch/filters/flexibleFundraisingEnabled';
/**
* Configuration for the lend/filter FLSS-driven page
diff --git a/src/util/loanSearch/filterUtils.js b/src/util/loanSearch/filterUtils.js
index 0ca1d042b8..391c7d41d3 100644
--- a/src/util/loanSearch/filterUtils.js
+++ b/src/util/loanSearch/filterUtils.js
@@ -44,7 +44,9 @@ export function transformRadioGroupOptions(options, order, displayMap, valueMap
value: valueMap[key] ?? o.name,
};
}).sort((a, b) => {
- return capitalizedOrder?.indexOf(a.name.toUpperCase()) - capitalizedOrder?.indexOf(b.name.toUpperCase());
+ const indexA = capitalizedOrder?.indexOf(a.name.toUpperCase()) ?? 0;
+ const indexB = capitalizedOrder?.indexOf(b.name.toUpperCase()) ?? 0;
+ return indexA - indexB;
});
return transformed ?? [];
diff --git a/src/util/loanSearch/filters/activities.js b/src/util/loanSearch/filters/activities.js
index 74270747de..5fcfb4c3c1 100644
--- a/src/util/loanSearch/filters/activities.js
+++ b/src/util/loanSearch/filters/activities.js
@@ -1,4 +1,4 @@
-import { getIdsFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { getIdsFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
export default {
uiConfig: {
@@ -30,7 +30,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- activityId: [...loanSearchState.activityId?.filter(id => facet.id !== id)]
+ activityId: [...(loanSearchState?.activityId ?? []).filter(id => facet?.id !== id)]
}),
getSavedSearch: () => ({}),
getFlssFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/filters/distributionModels.js b/src/util/loanSearch/filters/distributionModels.js
index 73f92e4f37..25abb0ad69 100644
--- a/src/util/loanSearch/filters/distributionModels.js
+++ b/src/util/loanSearch/filters/distributionModels.js
@@ -1,5 +1,5 @@
-import { filterUiType, transformRadioGroupOptions } from '@/util/loanSearch/filterUtils';
-import { getEnumNameFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions } from '#src/util/loanSearch/filterUtils';
+import { getEnumNameFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
// Distribution model enum keys
export const FIELDPARTNER_KEY = 'FIELDPARTNER';
diff --git a/src/util/loanSearch/filters/flexibleFundraisingEnabled.js b/src/util/loanSearch/filters/flexibleFundraisingEnabled.js
index b5cdd66e30..a48952cf5a 100644
--- a/src/util/loanSearch/filters/flexibleFundraisingEnabled.js
+++ b/src/util/loanSearch/filters/flexibleFundraisingEnabled.js
@@ -1,5 +1,5 @@
-import { getBooleanValueFromQueryParam } from '@/util/loanSearch/queryParseUtils';
-import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '@/util/loanSearch/filterUtils';
+import { getBooleanValueFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '#src/util/loanSearch/filterUtils';
/**
* Key for options
diff --git a/src/util/loanSearch/filters/genders.js b/src/util/loanSearch/filters/genders.js
index 854901a4b0..4a2ee58741 100644
--- a/src/util/loanSearch/filters/genders.js
+++ b/src/util/loanSearch/filters/genders.js
@@ -1,5 +1,5 @@
-import { filterUiType, transformRadioGroupOptions } from '@/util/loanSearch/filterUtils';
-import { getEnumNameFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions } from '#src/util/loanSearch/filterUtils';
+import { getEnumNameFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
// Gender enum keys
export const FEMALE_KEY = 'FEMALE';
diff --git a/src/util/loanSearch/filters/isIndividual.js b/src/util/loanSearch/filters/isIndividual.js
index 278bad9b40..9a824f7d07 100644
--- a/src/util/loanSearch/filters/isIndividual.js
+++ b/src/util/loanSearch/filters/isIndividual.js
@@ -1,5 +1,5 @@
-import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '@/util/loanSearch/filterUtils';
-import { getBooleanValueFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '#src/util/loanSearch/filterUtils';
+import { getBooleanValueFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
// Is individual option keys
export const INDIVIDUAL_KEY = 'INDIVIDUAL';
diff --git a/src/util/loanSearch/filters/isMatchable.js b/src/util/loanSearch/filters/isMatchable.js
index 01eccb3f84..97928efe4b 100644
--- a/src/util/loanSearch/filters/isMatchable.js
+++ b/src/util/loanSearch/filters/isMatchable.js
@@ -1,5 +1,5 @@
-import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '@/util/loanSearch/filterUtils';
-import { getBooleanValueFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '#src/util/loanSearch/filterUtils';
+import { getBooleanValueFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
/**
* Key for matched loans option
diff --git a/src/util/loanSearch/filters/keywordSearch.js b/src/util/loanSearch/filters/keywordSearch.js
index 4c272c1491..d91b7ea382 100644
--- a/src/util/loanSearch/filters/keywordSearch.js
+++ b/src/util/loanSearch/filters/keywordSearch.js
@@ -1,4 +1,4 @@
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
export default {
uiConfig: {
diff --git a/src/util/loanSearch/filters/lenderRepaymentTerms.js b/src/util/loanSearch/filters/lenderRepaymentTerms.js
index a672da91b1..5cdd08ecce 100644
--- a/src/util/loanSearch/filters/lenderRepaymentTerms.js
+++ b/src/util/loanSearch/filters/lenderRepaymentTerms.js
@@ -1,6 +1,6 @@
-import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '@/util/loanSearch/filterUtils';
-import { createMinMaxRange, getMinMaxRangeFilter, getMinMaxRangeQueryParam } from '@/util/loanSearch/minMaxRange';
-import { getMinMaxRangeFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { filterUiType, transformRadioGroupOptions, getFilterKeyFromValue } from '#src/util/loanSearch/filterUtils';
+import { createMinMaxRange, getMinMaxRangeFilter, getMinMaxRangeQueryParam } from '#src/util/loanSearch/minMaxRange';
+import { getMinMaxRangeFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
// Lender repayment term option keys
export const EIGHT_MONTHS_KEY = 'EIGHT_MONTHS';
diff --git a/src/util/loanSearch/filters/pageLimit.js b/src/util/loanSearch/filters/pageLimit.js
index 90fa8abebe..17ad2d48fe 100644
--- a/src/util/loanSearch/filters/pageLimit.js
+++ b/src/util/loanSearch/filters/pageLimit.js
@@ -1,5 +1,5 @@
-import { getDefaultLoanSearchState } from '@/api/localResolvers/loanSearch';
-import { isNumber } from '@/util/numberUtils';
+import { getDefaultLoanSearchState } from '#src/api/localResolvers/loanSearch';
+import { isNumber } from '#src/util/numberUtils';
export default {
uiConfig: {
diff --git a/src/util/loanSearch/filters/pageOffset.js b/src/util/loanSearch/filters/pageOffset.js
index 9cd5825e2c..fd350bc186 100644
--- a/src/util/loanSearch/filters/pageOffset.js
+++ b/src/util/loanSearch/filters/pageOffset.js
@@ -1,5 +1,5 @@
-import { getDefaultLoanSearchState } from '@/api/localResolvers/loanSearch';
-import { isNumber } from '@/util/numberUtils';
+import { getDefaultLoanSearchState } from '#src/api/localResolvers/loanSearch';
+import { isNumber } from '#src/util/numberUtils';
export default {
uiConfig: {
diff --git a/src/util/loanSearch/filters/partnerAvgProfitability.js b/src/util/loanSearch/filters/partnerAvgProfitability.js
index b01b6aa1f5..dab7701596 100644
--- a/src/util/loanSearch/filters/partnerAvgProfitability.js
+++ b/src/util/loanSearch/filters/partnerAvgProfitability.js
@@ -1,6 +1,6 @@
-import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '@/util/loanSearch/minMaxRange';
-import { getMinMaxRangeFromQueryParam } from '@/util/loanSearch/queryParseUtils';
-import { filterUiType, getDisplayedNumber } from '@/util/loanSearch/filterUtils';
+import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
+import { getMinMaxRangeFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
+import { filterUiType, getDisplayedNumber } from '#src/util/loanSearch/filterUtils';
/**
* The min average profitability value
diff --git a/src/util/loanSearch/filters/partnerDefaultRate.js b/src/util/loanSearch/filters/partnerDefaultRate.js
index 0e0a88ecc9..f8c12e447a 100644
--- a/src/util/loanSearch/filters/partnerDefaultRate.js
+++ b/src/util/loanSearch/filters/partnerDefaultRate.js
@@ -1,6 +1,6 @@
-import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '@/util/loanSearch/minMaxRange';
-import { getMinMaxRangeFromQueryParam } from '@/util/loanSearch/queryParseUtils';
-import { filterUiType, getDisplayedNumber } from '@/util/loanSearch/filterUtils';
+import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
+import { getMinMaxRangeFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
+import { filterUiType, getDisplayedNumber } from '#src/util/loanSearch/filterUtils';
/**
* The min default rate value
diff --git a/src/util/loanSearch/filters/partnerRiskRating.js b/src/util/loanSearch/filters/partnerRiskRating.js
index 29a178e15e..212f71eeb2 100644
--- a/src/util/loanSearch/filters/partnerRiskRating.js
+++ b/src/util/loanSearch/filters/partnerRiskRating.js
@@ -1,6 +1,6 @@
-import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '@/util/loanSearch/minMaxRange';
-import { getMinMaxRangeFromQueryParam } from '@/util/loanSearch/queryParseUtils';
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { getMinMaxRangeFilter, getMinMaxRangeQueryParam, createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
+import { getMinMaxRangeFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
/**
* The min risk rating value
diff --git a/src/util/loanSearch/filters/partners.js b/src/util/loanSearch/filters/partners.js
index 2059559ef9..4893393fd9 100644
--- a/src/util/loanSearch/filters/partners.js
+++ b/src/util/loanSearch/filters/partners.js
@@ -1,5 +1,5 @@
-import { getIdsFromQueryParam } from '@/util/loanSearch/queryParseUtils';
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { getIdsFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
/**
* Transforms partners into a form usable by the select box
@@ -77,7 +77,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- partnerId: [...loanSearchState.partnerId?.filter(id => facet.id !== id)]
+ partnerId: [...(loanSearchState?.partnerId ?? []).filter(id => facet?.id !== id)]
}),
getSavedSearch: loanSearchState => ({ partner: loanSearchState?.partnerId }),
getFlssFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/filters/regions.js b/src/util/loanSearch/filters/regions.js
index b655069ce4..293afa1236 100644
--- a/src/util/loanSearch/filters/regions.js
+++ b/src/util/loanSearch/filters/regions.js
@@ -1,5 +1,5 @@
-import { filterUiType } from '@/util/loanSearch/filterUtils';
-import { sortRegions } from '@/util/loanSearch/countryUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
+import { sortRegions } from '#src/util/loanSearch/countryUtils';
/**
* Transforms ISO codes into regions usable by the filters
@@ -161,9 +161,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- countryIsoCode: [...loanSearchState.countryIsoCode?.filter(iso => {
- return facet.isoCode !== iso;
- })]
+ countryIsoCode: [...(loanSearchState?.countryIsoCode ?? []).filter(iso => facet?.isoCode !== iso)]
}),
getSavedSearch: loanSearchState => ({ country: loanSearchState?.countryIsoCode }),
getFlssFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/filters/sectors.js b/src/util/loanSearch/filters/sectors.js
index c39ca0e6a9..8c04d3ef12 100644
--- a/src/util/loanSearch/filters/sectors.js
+++ b/src/util/loanSearch/filters/sectors.js
@@ -1,6 +1,6 @@
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
import _orderBy from 'lodash/orderBy';
-import { getIdsFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { getIdsFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
/**
* Transforms filtered sectors into a form usable by the filters
@@ -54,7 +54,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- sectorId: [...loanSearchState.sectorId?.filter(id => facet.id !== id)]
+ sectorId: [...(loanSearchState?.sectorId ?? []).filter(id => facet?.id !== id)]
}),
getSavedSearch: loanSearchState => ({ sector: loanSearchState?.sectorId }),
getFlssFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/filters/sortOptions.js b/src/util/loanSearch/filters/sortOptions.js
index 9be43fe4ae..e3beecfe34 100644
--- a/src/util/loanSearch/filters/sortOptions.js
+++ b/src/util/loanSearch/filters/sortOptions.js
@@ -1,4 +1,4 @@
-import { filterUiType, STANDARD_QUERY_TYPE, FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import { filterUiType, STANDARD_QUERY_TYPE, FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
/**
* Used to map the sort value to display value
@@ -103,7 +103,8 @@ export default {
isPercentage: false,
displayedUnit: undefined,
},
- getOptions: (allFacets = {}, _filteredFacets, extend = false) => {
+ // eslint-disable-next-line no-unused-vars
+ getOptions: (allFacets = {}, _filteredFacets = {}, extend = false) => {
return formatSortOptions(allFacets.standardSorts ?? [], allFacets.flssSorts ?? [], extend);
},
showSavedSearch: () => false,
diff --git a/src/util/loanSearch/filters/tags.js b/src/util/loanSearch/filters/tags.js
index c196a43db3..000a560094 100644
--- a/src/util/loanSearch/filters/tags.js
+++ b/src/util/loanSearch/filters/tags.js
@@ -1,6 +1,6 @@
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
import _orderBy from 'lodash/orderBy';
-import { getIdsFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { getIdsFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
/**
* Transforms tag names for display
@@ -69,7 +69,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- tagId: [...loanSearchState.tagId?.filter(id => facet.id !== id)]
+ tagId: [...(loanSearchState?.tagId ?? 0).filter(id => facet?.id !== id)]
}),
getSavedSearch: loanSearchState => ({ loanTags: loanSearchState?.tagId }),
getFlssFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/filters/themes.js b/src/util/loanSearch/filters/themes.js
index 0b4cae08fe..1df6a0ee98 100644
--- a/src/util/loanSearch/filters/themes.js
+++ b/src/util/loanSearch/filters/themes.js
@@ -1,6 +1,6 @@
-import { filterUiType } from '@/util/loanSearch/filterUtils';
+import { filterUiType } from '#src/util/loanSearch/filterUtils';
import _orderBy from 'lodash/orderBy';
-import { getIdsFromQueryParam } from '@/util/loanSearch/queryParseUtils';
+import { getIdsFromQueryParam } from '#src/util/loanSearch/queryParseUtils';
/**
* The themes/attributes that are always visible in the filter UI
@@ -64,7 +64,7 @@ export default {
return [];
},
getRemovedFacet: (loanSearchState, facet) => ({
- themeId: [...loanSearchState.themeId?.filter(id => facet.id !== id)]
+ themeId: [...(loanSearchState?.themeId ?? []).filter(id => facet?.id !== id)]
}),
getSavedSearch: (loanSearchState, allFacets) => ({
theme: loanSearchState?.themeId.map(themeId => allFacets.themeFacets.find(t => t.id === themeId).name)
@@ -78,7 +78,8 @@ export default {
getFilterFromQuery: (query, allFacets) => ({
themeId: getIdsFromQueryParam(
query.attribute || query.attributes || query.theme,
- allFacets?.themeNames, allFacets?.themeFacets
+ allFacets?.themeNames,
+ allFacets?.themeFacets
) ?? []
}),
getQueryFromFilter: loanSearchState => ({
diff --git a/src/util/loanSearch/minMaxRange.js b/src/util/loanSearch/minMaxRange.js
index 13633a8f88..4ed5241fd7 100644
--- a/src/util/loanSearch/minMaxRange.js
+++ b/src/util/loanSearch/minMaxRange.js
@@ -1,4 +1,4 @@
-import { isNumber } from '@/util/numberUtils';
+import { isNumber } from '#src/util/numberUtils';
/**
* Creates the min max range object
diff --git a/src/util/loanSearch/queryParamUtils.js b/src/util/loanSearch/queryParamUtils.js
index 5566584d9d..b1b2ffcdc4 100644
--- a/src/util/loanSearch/queryParamUtils.js
+++ b/src/util/loanSearch/queryParamUtils.js
@@ -1,5 +1,5 @@
-import VueRouter from 'vue-router';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import { isNavigationFailure, NavigationFailureType } from 'vue-router';
+import filterConfig from '#src/util/loanSearch/filterConfig';
/**
* Check for excluded query params
@@ -79,8 +79,6 @@ export function updateQueryParams(loanSearchState, router, queryType) {
if (!doParamsMatch) {
router.push({ ...router.currentRoute, query: newParams, params: { noScroll: true, noAnalytics: true } })
.catch(e => {
- const { isNavigationFailure, NavigationFailureType } = VueRouter;
-
// Ignore "navigation canceled" errors from clicking filter options quickly
if (!isNavigationFailure(e, NavigationFailureType.cancelled)) {
throw e;
diff --git a/src/util/loanSearch/queryParseUtils.js b/src/util/loanSearch/queryParseUtils.js
index 15f20ac14c..ce4f5d82d8 100644
--- a/src/util/loanSearch/queryParseUtils.js
+++ b/src/util/loanSearch/queryParseUtils.js
@@ -1,5 +1,5 @@
-import { isNumber } from '@/util/numberUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+import { isNumber } from '#src/util/numberUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
/**
* Returns the enum name property based on the query param
diff --git a/src/util/loanSearch/searchStateUtils.js b/src/util/loanSearch/searchStateUtils.js
index 7e75dae185..da98233509 100644
--- a/src/util/loanSearch/searchStateUtils.js
+++ b/src/util/loanSearch/searchStateUtils.js
@@ -1,6 +1,6 @@
-import updateLoanSearchMutation from '@/graphql/mutation/updateLoanSearchState.graphql';
-import createSavedSearchMutation from '@/graphql/mutation/createSavedSearch.graphql';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import updateLoanSearchMutation from '#src/graphql/mutation/updateLoanSearchState.graphql';
+import createSavedSearchMutation from '#src/graphql/mutation/createSavedSearch.graphql';
+import filterConfig from '#src/util/loanSearch/filterConfig';
/**
* Returns loan search state that has been validated against the available facets
diff --git a/src/util/loanUse.js b/src/util/loanUse.js
index 4e88290664..393d16fef1 100644
--- a/src/util/loanUse.js
+++ b/src/util/loanUse.js
@@ -1,5 +1,4 @@
-// This file uses common JS imports/exports so our express router can use it as well.
-const numeral = require('numeral');
+import numeral from 'numeral';
const DIRECT = 'direct';
const PARTNER = 'fieldPartner';
@@ -156,4 +155,4 @@ function getLoanUse({
+ `${truncateUse(normalizeUse(use, name), maxLength)}`;
}
-module.exports = getLoanUse;
+export default getLoanUse;
diff --git a/src/util/loanUtils.js b/src/util/loanUtils.js
index 9f064a9f0f..28b3d794a6 100644
--- a/src/util/loanUtils.js
+++ b/src/util/loanUtils.js
@@ -129,7 +129,7 @@ export function getDropdownPriceArray(
minAmount,
enableFiveDollarsNotes,
inPfp = false,
- enableHugeAmount,
+ enableHugeAmount = false,
) {
const parsedAmountLeft = parseFloat(unreservedAmount);
let combinedPricesArray = [];
diff --git a/src/util/numberUtils.js b/src/util/numberUtils.js
index 19a0b06257..dc717e3d80 100644
--- a/src/util/numberUtils.js
+++ b/src/util/numberUtils.js
@@ -1,5 +1,4 @@
// TODO: remove eslint-disable when more exports are added
-/* eslint-disable import/prefer-default-export */
/**
* Returns whether the provided value is a number
diff --git a/src/util/optimizelyUserMetrics.js b/src/util/optimizelyUserMetrics.js
index 9b26a3bf1e..be5bf17d31 100644
--- a/src/util/optimizelyUserMetrics.js
+++ b/src/util/optimizelyUserMetrics.js
@@ -1,6 +1,6 @@
import numeral from 'numeral';
-import thanksPageQuery from '@/graphql/query/thanksPage.graphql';
-import logReadQueryError from '@/util/logReadQueryError';
+import thanksPageQuery from '#src/graphql/query/thanksPage.graphql';
+import logReadQueryError from '#src/util/logReadQueryError';
function setUserAttribute(key, value) {
if (typeof window === 'undefined') {
diff --git a/src/util/pushNotificationsManager.js b/src/util/pushNotificationsManager.js
index a170d4735a..af3bda1caa 100644
--- a/src/util/pushNotificationsManager.js
+++ b/src/util/pushNotificationsManager.js
@@ -1,8 +1,7 @@
export function registerServiceWorker() {
return new Promise((resolve, reject) => {
if ('serviceWorker' in navigator) {
- // eslint-disable-next-line max-len
- return navigator.serviceWorker.register('/js/kv-notifications/kvPushNotificationsServiceWorker.js', { scope: '/' })
+ navigator.serviceWorker.register('/js/kv-notifications/kvPushNotificationsServiceWorker.js', { scope: '/' })
.then(() => {
return navigator.serviceWorker.ready
.then(registration => {
@@ -36,15 +35,16 @@ export function registerServiceWorker() {
}
reject(error);
});
+ } else {
+ reject('Oops - setting up notifications didn\'t work.');
}
- reject('Oops - setting up notifications didn\'t work.');
});
}
export function isSubscribed() {
return new Promise((resolve, reject) => {
if ('serviceWorker' in navigator) {
- return navigator.serviceWorker.getRegistration()
+ navigator.serviceWorker.getRegistration()
.then(registration => {
if (registration) {
return registration.pushManager.getSubscription()
@@ -64,15 +64,16 @@ export function isSubscribed() {
.catch(error => {
reject(error);
});
+ } else {
+ reject();
}
- reject();
});
}
export function unsubscribe() {
return new Promise((resolve, reject) => {
if ('serviceWorker' in navigator) {
- return navigator.serviceWorker.getRegistration()
+ navigator.serviceWorker.getRegistration()
.then(registration => {
if (registration) {
return registration.pushManager.getSubscription()
@@ -103,7 +104,8 @@ export function unsubscribe() {
.catch(() => {
reject('Oops - unsubscribing didn\'t work. Please refresh the page and try again.');
});
+ } else {
+ reject('Oops - unsubscribing didn\'t work. Please refresh the page and try again.');
}
- reject('Oops - unsubscribing didn\'t work. Please refresh the page and try again.');
});
}
diff --git a/src/util/searchEngine.js b/src/util/searchEngine.js
index 5e1d71e0f0..d8cd2c5e50 100644
--- a/src/util/searchEngine.js
+++ b/src/util/searchEngine.js
@@ -3,7 +3,7 @@ import _flatten from 'lodash/flatten';
import _map from 'lodash/map';
import Fuse from 'fuse.js/dist/fuse.common';
// import Fuse from 'fuse.js'; // re-enabled after https://github.com/krisk/Fuse/pull/383 is merged
-import { startsWith } from '@/util/comparators';
+import { startsWith } from '#src/util/comparators';
/*
* Simple wrapper class around Fuse
diff --git a/src/util/settingsUtils.js b/src/util/settingsUtils.js
index c3ecf52f42..21a57eb055 100644
--- a/src/util/settingsUtils.js
+++ b/src/util/settingsUtils.js
@@ -100,7 +100,7 @@ export function hashCode(source) {
// original approach left shift
hash = ((hash << 5) - hash) + character;
// Convert to 32bit integer
- hash &= hash; // eslint-disable-line no-bitwise
+ hash &= hash;
}
return Math.abs(hash);
}
diff --git a/src/util/syncDate.js b/src/util/syncDate.js
index 3a60a0c80e..bde92d84ea 100644
--- a/src/util/syncDate.js
+++ b/src/util/syncDate.js
@@ -4,7 +4,7 @@
* validating authentication tokens or displaying the time remaining on a loan reservation) import
* and call this function like so:
*
- * import syncDate from '@/util/syncDate';
+ * import syncDate from '#src/util/syncDate';
* syncDate().then(() => {
* // time is synchronized
* });
@@ -12,7 +12,7 @@
import store2 from 'store2';
import { create } from 'timesync';
-import logFormatter from '@/util/logFormatter';
+import logFormatter from '#src/util/logFormatter';
// Grab Date.now before the Date prototype is replaced
const systemNow = Date.now;
diff --git a/src/util/teamsUtil.js b/src/util/teamsUtil.js
index 27b47dabe1..64fc62d654 100644
--- a/src/util/teamsUtil.js
+++ b/src/util/teamsUtil.js
@@ -1,6 +1,6 @@
-import teamsQuery from '@/graphql/query/teamsQuery.graphql';
-import teamsGoals from '@/graphql/query/teamsGoals.graphql';
-import leaderboardsQuery from '@/graphql/query/leaderboardsQuery.graphql';
+import teamsQuery from '#src/graphql/query/teamsQuery.graphql';
+import teamsGoals from '#src/graphql/query/teamsGoals.graphql';
+import leaderboardsQuery from '#src/graphql/query/leaderboardsQuery.graphql';
export const teamCategories = [
{
diff --git a/src/util/trackTransactionEvent.js b/src/util/trackTransactionEvent.js
index 37aee83759..039cdfadc5 100644
--- a/src/util/trackTransactionEvent.js
+++ b/src/util/trackTransactionEvent.js
@@ -1,6 +1,6 @@
-import trackTransactionMutation from '@/graphql/mutation/shop/trackTransaction.graphql';
-import parseGACookie from '@/util/parseGACookie';
-import parseSPCookie from '@/util/parseSPCookie';
+import trackTransactionMutation from '#src/graphql/mutation/shop/trackTransaction.graphql';
+import parseGACookie from '#src/util/parseGACookie';
+import parseSPCookie from '#src/util/parseSPCookie';
export default function trackTransactionEvent(transactionId, apolloClient, cookieStore) {
if (!transactionId) {
diff --git a/test/unit/index.js b/test/unit/index.js
index db39fa084e..28093dbc04 100644
--- a/test/unit/index.js
+++ b/test/unit/index.js
@@ -1,6 +1,6 @@
-import Vue from 'vue';
+// import Vue from 'vue';
-Vue.config.productionTip = false;
+// Vue.config.productionTip = false;
// require all test files (files that ends with .spec.js)
const testsContext = require.context('./specs', true, /\.spec$/);
diff --git a/test/unit/jest.conf.js b/test/unit/jest.conf.cjs
similarity index 75%
rename from test/unit/jest.conf.js
rename to test/unit/jest.conf.cjs
index 58dadb2f34..4344eac789 100644
--- a/test/unit/jest.conf.js
+++ b/test/unit/jest.conf.cjs
@@ -7,13 +7,15 @@ module.exports = {
moduleNameMapper: {
'^~/(.*)$': '/node_modules/$1',
'^@/(.*)$': '/src/$1',
+ '^/src/(.*)$': '/src/$1',
+ '^#src/(.*)$': '/src/$1',
foundation: '/build/no-op.js',
},
transform: {
'^.+\\.(gql|graphql)$': 'jest-transform-graphql',
- '^.+\\.vue$': 'vue-jest',
+ '^.+\\.vue$': '@vue/vue3-jest',
'^.+\\.js$': 'babel-jest',
- '^.+\\.svg$': '/test/unit/transforms/svgTransform.js',
+ // '^.+\\.svg$': '/test/unit/transforms/svgTransform.cjs',
},
transformIgnorePatterns: ['/node_modules/(?!@kiva/)'],
snapshotSerializers: ['jest-serializer-vue'],
@@ -36,7 +38,10 @@ module.exports = {
'/src/util/animation',
'/node_modules/'
],
- testURL: 'http://localhost',
testEnvironment: 'jsdom',
- setupFiles: ['/test/unit/setupJestMocks.js']
+ testEnvironmentOptions: {
+ url: 'http://localhost',
+ customExportConditions: ['node', 'node-addons'],
+ },
+ // setupFiles: ['/test/unit/setupJestMocks.js']
};
diff --git a/test/unit/specs/api/localResolvers/experiment.spec.js b/test/unit/specs/api/localResolvers/experiment.spec.js
index 907c8ccda1..e897da49bf 100644
--- a/test/unit/specs/api/localResolvers/experiment.spec.js
+++ b/test/unit/specs/api/localResolvers/experiment.spec.js
@@ -1,6 +1,6 @@
-import * as expUtils from '@/util/experiment/experimentUtils';
-import expResolverFactory from '@/api/localResolvers/experiment';
-import Experiment from '@/api/fixtures/Experiment';
+import * as expUtils from '#src/util/experiment/experimentUtils';
+import expResolverFactory from '#src/api/localResolvers/experiment';
+import Experiment from '#src/api/fixtures/Experiment';
const EXP_ID = 'test_experiment';
const HASH = 1234;
diff --git a/test/unit/specs/api/localResolvers/loan.spec.js b/test/unit/specs/api/localResolvers/loan.spec.js
index f58ed07b04..db225e993e 100644
--- a/test/unit/specs/api/localResolvers/loan.spec.js
+++ b/test/unit/specs/api/localResolvers/loan.spec.js
@@ -1,5 +1,5 @@
import { add, formatISO } from 'date-fns';
-import loanResolverFactory from '@/api/localResolvers/loan';
+import loanResolverFactory from '#src/api/localResolvers/loan';
describe('loan.js', () => {
describe('LoanBasic.fundraisingPercent', () => {
diff --git a/test/unit/specs/api/localResolvers/loanSearch.spec.js b/test/unit/specs/api/localResolvers/loanSearch.spec.js
index 05fcbdfbce..7e1632829b 100644
--- a/test/unit/specs/api/localResolvers/loanSearch.spec.js
+++ b/test/unit/specs/api/localResolvers/loanSearch.spec.js
@@ -1,4 +1,4 @@
-import loanSearchFactory from '@/api/localResolvers/loanSearch';
+import loanSearchFactory from '#src/api/localResolvers/loanSearch';
describe('loanSearch.js', () => {
describe('Mutation.updateLoanSearch', () => {
diff --git a/test/unit/specs/api/localResolvers/my.spec.js b/test/unit/specs/api/localResolvers/my.spec.js
index 4cd140ca24..cc9d1ca9f4 100644
--- a/test/unit/specs/api/localResolvers/my.spec.js
+++ b/test/unit/specs/api/localResolvers/my.spec.js
@@ -1,6 +1,6 @@
-import myResolverFactory from '@/api/localResolvers/my';
-import CookieStore from '@/util/cookieStore';
-import { MockKvAuth0 } from '@/util/KvAuth0';
+import myResolverFactory from '#src/api/localResolvers/my';
+import CookieStore from '#src/util/cookieStore';
+import { MockKvAuth0 } from '#src/util/KvAuth0';
import clearDocumentCookies from '../../../setup/clearDocumentCookies';
describe('my.js', () => {
diff --git a/test/unit/specs/components/BorrowerProfile/ChallengeTeamInvite.spec.js b/test/unit/specs/components/BorrowerProfile/ChallengeTeamInvite.spec.js
index b5206aa752..0ea9fb3f4f 100644
--- a/test/unit/specs/components/BorrowerProfile/ChallengeTeamInvite.spec.js
+++ b/test/unit/specs/components/BorrowerProfile/ChallengeTeamInvite.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
-import ChallengeTeamInvite from '@/components/BorrowerProfile/ChallengeTeamInvite';
-import KvUserAvatar from '~/@kiva/kv-components/vue/KvUserAvatar';
+import ChallengeTeamInvite from '#src/components/BorrowerProfile/ChallengeTeamInvite';
+import KvUserAvatar from '@kiva/kv-components/vue/KvUserAvatar';
const shareLender = { id: 1, name: 'Lender' };
const teamName = 'Team Test';
diff --git a/test/unit/specs/components/BorrowerProfile/SupportedByLenders.spec.js b/test/unit/specs/components/BorrowerProfile/SupportedByLenders.spec.js
index 04d53eafbf..9c63e47d3b 100644
--- a/test/unit/specs/components/BorrowerProfile/SupportedByLenders.spec.js
+++ b/test/unit/specs/components/BorrowerProfile/SupportedByLenders.spec.js
@@ -1,5 +1,5 @@
import { render, waitFor } from '@testing-library/vue';
-import SupportedByLenders from '@/components/BorrowerProfile/SupportedByLenders';
+import SupportedByLenders from '#src/components/BorrowerProfile/SupportedByLenders';
const participants = {
values: [
diff --git a/test/unit/specs/components/Checkout/BasketItem.spec.js b/test/unit/specs/components/Checkout/BasketItem.spec.js
index c34d67d625..05a7b007fc 100644
--- a/test/unit/specs/components/Checkout/BasketItem.spec.js
+++ b/test/unit/specs/components/Checkout/BasketItem.spec.js
@@ -1,8 +1,7 @@
-import BasketItem from '@/components/Checkout/BasketItem';
-import kvAnalytics from '@/plugins/kv-analytics-plugin';
-import VueRouter from 'vue-router';
-import numeralFilter from '@/plugins/numeral-filter';
-import CookieStore from '@/util/cookieStore';
+import BasketItem from '#src/components/Checkout/BasketItem';
+import kvAnalytics from '#src/plugins/kv-analytics-plugin';
+import numeralFilter from '#src/plugins/numeral-filter';
+import CookieStore from '#src/util/cookieStore';
import { render, within } from '@testing-library/vue';
import loanReservation from '../../../fixtures/MatchedPromoLoanReservation.json';
import basketLoanTeams from '../../../fixtures/BasketLoanTeams.json';
@@ -33,7 +32,7 @@ describe('BasketItem loan', () => {
},
cookieStore: new CookieStore(),
},
- routes: new VueRouter(),
+ routes: [],
props: {
disableMatching: false,
disableRedirects: false,
@@ -117,7 +116,7 @@ describe('BasketItem loan', () => {
},
cookieStore: new CookieStore(),
},
- routes: new VueRouter(),
+ routes: [],
props: {
disableMatching: false,
disableRedirects: false,
diff --git a/test/unit/specs/components/Checkout/LoanReservation.spec.js b/test/unit/specs/components/Checkout/LoanReservation.spec.js
index 0a223f424d..886181579e 100644
--- a/test/unit/specs/components/Checkout/LoanReservation.spec.js
+++ b/test/unit/specs/components/Checkout/LoanReservation.spec.js
@@ -1,6 +1,6 @@
-import kvAnalytics from '@/plugins/kv-analytics-plugin';
-import LoanReservation from '@/components/Checkout/LoanReservation';
-import numeralFilter from '@/plugins/numeral-filter';
+import kvAnalytics from '#src/plugins/kv-analytics-plugin';
+import LoanReservation from '#src/components/Checkout/LoanReservation';
+import numeralFilter from '#src/plugins/numeral-filter';
import { render } from '@testing-library/vue';
const Time = new Date(); // creates a new date/time based on now
diff --git a/test/unit/specs/components/Checkout/TeamAttribution.spec.js b/test/unit/specs/components/Checkout/TeamAttribution.spec.js
index 98738fa2ae..3306c88e88 100644
--- a/test/unit/specs/components/Checkout/TeamAttribution.spec.js
+++ b/test/unit/specs/components/Checkout/TeamAttribution.spec.js
@@ -1,5 +1,5 @@
import { render } from '@testing-library/vue';
-import TeamAttribution from '@/components/Checkout/TeamAttribution';
+import TeamAttribution from '#src/components/Checkout/TeamAttribution';
import basketLoanTeams from '../../../fixtures/BasketLoanTeams.json';
describe('TeamDropDown', () => {
diff --git a/test/unit/specs/components/Kv/KvCheckboxList.spec.js b/test/unit/specs/components/Kv/KvCheckboxList.spec.js
index d8f8552142..62cef15bd9 100644
--- a/test/unit/specs/components/Kv/KvCheckboxList.spec.js
+++ b/test/unit/specs/components/Kv/KvCheckboxList.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import KvCheckboxList from '@/components/Kv/KvCheckboxList';
+import KvCheckboxList from '#src/components/Kv/KvCheckboxList';
const items = [...Array(4)].map((_, i) => ({ value: `${i}`, title: `Option ${i}` }));
diff --git a/test/unit/specs/components/Kv/KvPagination.spec.js b/test/unit/specs/components/Kv/KvPagination.spec.js
index a6dd6f6c30..eac9f8bd67 100644
--- a/test/unit/specs/components/Kv/KvPagination.spec.js
+++ b/test/unit/specs/components/Kv/KvPagination.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import KvPagination from '@/components/Kv/KvPagination';
+import KvPagination from '#src/components/Kv/KvPagination';
global.scrollTo = jest.fn();
diff --git a/test/unit/specs/components/Kv/KvProgressCampaign.spec.js b/test/unit/specs/components/Kv/KvProgressCampaign.spec.js
index 78cc6b9a73..1eb1518cb6 100644
--- a/test/unit/specs/components/Kv/KvProgressCampaign.spec.js
+++ b/test/unit/specs/components/Kv/KvProgressCampaign.spec.js
@@ -1,5 +1,5 @@
import { render } from '@testing-library/vue';
-import KvProgressCampaign from '@/components/Kv/KvProgressCampaign';
+import KvProgressCampaign from '#src/components/Kv/KvProgressCampaign';
import numeral from 'numeral';
describe('KvProgressCampaign', () => {
diff --git a/test/unit/specs/components/Kv/KvRangeMinMaxSlider.spec.js b/test/unit/specs/components/Kv/KvRangeMinMaxSlider.spec.js
index 018b787902..8b9718054b 100644
--- a/test/unit/specs/components/Kv/KvRangeMinMaxSlider.spec.js
+++ b/test/unit/specs/components/Kv/KvRangeMinMaxSlider.spec.js
@@ -1,5 +1,5 @@
import { render, fireEvent } from '@testing-library/vue';
-import KvRangeMinMaxSlider from '@/components/Kv/KvRangeMinMaxSlider';
+import KvRangeMinMaxSlider from '#src/components/Kv/KvRangeMinMaxSlider';
describe('KvRangeMinMaxSlider', () => {
it('should render defaults', () => {
@@ -18,7 +18,8 @@ describe('KvRangeMinMaxSlider', () => {
});
it('should render props', () => {
- const { getAllByRole } = render(KvRangeMinMaxSlider,
+ const { getAllByRole } = render(
+ KvRangeMinMaxSlider,
{
props: {
rangeMin: 10,
@@ -27,7 +28,8 @@ describe('KvRangeMinMaxSlider', () => {
min: 15,
max: 20
}
- });
+ }
+ );
const rangeInputs = getAllByRole('slider');
@@ -70,13 +72,15 @@ describe('KvRangeMinMaxSlider', () => {
});
it('should move other slide when pushed beyond current setting', async () => {
- const { getAllByRole } = render(KvRangeMinMaxSlider,
+ const { getAllByRole } = render(
+ KvRangeMinMaxSlider,
{
props: {
min: 10,
max: 25
}
- });
+ }
+ );
const rangeInputs = getAllByRole('slider');
@@ -113,13 +117,15 @@ describe('KvRangeMinMaxSlider', () => {
});
it('should handle initial numbers below the range', async () => {
- const { getAllByRole, updateProps } = render(KvRangeMinMaxSlider,
+ const { getAllByRole, updateProps } = render(
+ KvRangeMinMaxSlider,
{
props: {
min: -1,
max: -1
}
- });
+ }
+ );
const rangeInputs = getAllByRole('slider');
@@ -145,13 +151,15 @@ describe('KvRangeMinMaxSlider', () => {
});
it('should handle initial numbers above the range', async () => {
- const { getAllByRole, updateProps } = render(KvRangeMinMaxSlider,
+ const { getAllByRole, updateProps } = render(
+ KvRangeMinMaxSlider,
{
props: {
min: 110,
max: 110
}
- });
+ }
+ );
const rangeInputs = getAllByRole('slider');
@@ -177,13 +185,15 @@ describe('KvRangeMinMaxSlider', () => {
});
it('should handle prop numbers outside the range', async () => {
- const { getAllByRole, updateProps } = render(KvRangeMinMaxSlider,
+ const { getAllByRole, updateProps } = render(
+ KvRangeMinMaxSlider,
{
props: {
min: 10,
max: 25
}
- });
+ }
+ );
const rangeInputs = getAllByRole('slider');
diff --git a/test/unit/specs/components/Kv/KvResultsPerPage.spec.js b/test/unit/specs/components/Kv/KvResultsPerPage.spec.js
index ec58c0c0a2..88ce6f7d98 100644
--- a/test/unit/specs/components/Kv/KvResultsPerPage.spec.js
+++ b/test/unit/specs/components/Kv/KvResultsPerPage.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import KvResultsPerPage, { defaultOptions } from '@/components/Kv/KvResultsPerPage';
+import KvResultsPerPage, { defaultOptions } from '#src/components/Kv/KvResultsPerPage';
global.scrollTo = jest.fn();
diff --git a/test/unit/specs/components/Kv/KvSectionModalLoader.spec.js b/test/unit/specs/components/Kv/KvSectionModalLoader.spec.js
index ce32404473..00162f9be1 100644
--- a/test/unit/specs/components/Kv/KvSectionModalLoader.spec.js
+++ b/test/unit/specs/components/Kv/KvSectionModalLoader.spec.js
@@ -1,5 +1,5 @@
import { render } from '@testing-library/vue';
-import KvSectionModalLoader, { LOADING_LABEL } from '@/components/Kv/KvSectionModalLoader';
+import KvSectionModalLoader, { LOADING_LABEL } from '#src/components/Kv/KvSectionModalLoader';
describe('KvSectionModalLoader', () => {
it('should hide loader by default', () => {
diff --git a/test/unit/specs/components/Kv/KvSelectBox.spec.js b/test/unit/specs/components/Kv/KvSelectBox.spec.js
index 8ec7d57029..f73479b3c1 100644
--- a/test/unit/specs/components/Kv/KvSelectBox.spec.js
+++ b/test/unit/specs/components/Kv/KvSelectBox.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import KvSelectBox, { NO_RESULTS } from '@/components/Kv/KvSelectBox';
+import KvSelectBox, { NO_RESULTS } from '#src/components/Kv/KvSelectBox';
const items = [...Array(20)].map((_, i) => ({ id: i, name: `Item ${20 - i + 1}`, header: `Header ${i % 5}` }));
diff --git a/test/unit/specs/components/Lend/LoanSearch/ChallengeCallout.spec.js b/test/unit/specs/components/Lend/LoanSearch/ChallengeCallout.spec.js
index 13cce0da88..5c8c4e9ba6 100644
--- a/test/unit/specs/components/Lend/LoanSearch/ChallengeCallout.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/ChallengeCallout.spec.js
@@ -1,6 +1,6 @@
import Vue from 'vue';
import { render } from '@testing-library/vue';
-import ChallengeCallout from '@/components/Lend/LoanSearch/ChallengeCallout';
+import ChallengeCallout from '#src/components/Lend/LoanSearch/ChallengeCallout';
const teamName = 'Team Test';
const mocks = {
diff --git a/test/unit/specs/components/Lend/LoanSearch/LoanSearchCheckboxListFilter.spec.js b/test/unit/specs/components/Lend/LoanSearch/LoanSearchCheckboxListFilter.spec.js
index ceddc335ae..285afeb4ab 100644
--- a/test/unit/specs/components/Lend/LoanSearch/LoanSearchCheckboxListFilter.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/LoanSearchCheckboxListFilter.spec.js
@@ -1,8 +1,8 @@
import Vue from 'vue';
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import LoanSearchCheckboxListFilter from '@/components/Lend/LoanSearch/LoanSearchCheckboxListFilter';
-import { getCheckboxLabel } from '@/util/loanSearch/filterUtils';
+import LoanSearchCheckboxListFilter from '#src/components/Lend/LoanSearch/LoanSearchCheckboxListFilter';
+import { getCheckboxLabel } from '#src/util/loanSearch/filterUtils';
const getOptions = disabled => [...Array(4)].map((_c, i) => ({
id: i,
diff --git a/test/unit/specs/components/Lend/LoanSearch/LoanSearchFilterChips.spec.js b/test/unit/specs/components/Lend/LoanSearch/LoanSearchFilterChips.spec.js
index e899eeac0e..a615c00df1 100644
--- a/test/unit/specs/components/Lend/LoanSearch/LoanSearchFilterChips.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/LoanSearchFilterChips.spec.js
@@ -1,11 +1,11 @@
import Vue from 'vue';
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import LoanSearchFilterChips from '@/components/Lend/LoanSearch/LoanSearchFilterChips';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import LoanSearchFilterChips from '#src/components/Lend/LoanSearch/LoanSearchFilterChips';
+import filterConfig from '#src/util/loanSearch/filterConfig';
import { mockState, mockAllFacets } from '../../../../fixtures/mockLoanSearchData';
-jest.mock('@/util/loanSearch/filterConfig', () => {
+jest.mock('#src/util/loanSearch/filterConfig', () => {
return {
config: {
a: {
diff --git a/test/unit/specs/components/Lend/LoanSearch/LoanSearchLocationFilter.spec.js b/test/unit/specs/components/Lend/LoanSearch/LoanSearchLocationFilter.spec.js
index 845177a1c6..02389f0203 100644
--- a/test/unit/specs/components/Lend/LoanSearch/LoanSearchLocationFilter.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/LoanSearchLocationFilter.spec.js
@@ -1,7 +1,7 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import { getCheckboxLabel } from '@/util/loanSearch/filterUtils';
-import LoanSearchLocationFilter from '@/components/Lend/LoanSearch/LoanSearchLocationFilter';
+import { getCheckboxLabel } from '#src/util/loanSearch/filterUtils';
+import LoanSearchLocationFilter from '#src/components/Lend/LoanSearch/LoanSearchLocationFilter';
const NUM_ITEMS = 4;
diff --git a/test/unit/specs/components/Lend/LoanSearch/LoanSearchRadioGroupFilter.spec.js b/test/unit/specs/components/Lend/LoanSearch/LoanSearchRadioGroupFilter.spec.js
index d8f7a3a587..a28a87a4a6 100644
--- a/test/unit/specs/components/Lend/LoanSearch/LoanSearchRadioGroupFilter.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/LoanSearchRadioGroupFilter.spec.js
@@ -1,7 +1,8 @@
import Vue from 'vue';
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import LoanSearchRadioGroupFilter, { ALL_LOANS_TITLE } from '@/components/Lend/LoanSearch/LoanSearchRadioGroupFilter';
+import LoanSearchRadioGroupFilter, { ALL_LOANS_TITLE }
+ from '#src/components/Lend/LoanSearch/LoanSearchRadioGroupFilter';
const getOptions = (isObject = false, isBoolean = false) => [...Array(4)].map((_c, i) => ({
title: `Option ${i}`,
diff --git a/test/unit/specs/components/Lend/LoanSearch/LoanSearchSortBy.spec.js b/test/unit/specs/components/Lend/LoanSearch/LoanSearchSortBy.spec.js
index ee26c8347e..854ea19b9a 100644
--- a/test/unit/specs/components/Lend/LoanSearch/LoanSearchSortBy.spec.js
+++ b/test/unit/specs/components/Lend/LoanSearch/LoanSearchSortBy.spec.js
@@ -1,7 +1,7 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import LoanSearchSortBy from '@/components/Lend/LoanSearch/LoanSearchSortBy';
-import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import LoanSearchSortBy from '#src/components/Lend/LoanSearch/LoanSearchSortBy';
+import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
// Prospective sort options from both APIs (values for flss will expand)
const allSortOptions = [
diff --git a/test/unit/specs/components/LoanCards/Buttons/LendAmountButton.spec.js b/test/unit/specs/components/LoanCards/Buttons/LendAmountButton.spec.js
index f14858da2b..85bd9d71bf 100644
--- a/test/unit/specs/components/LoanCards/Buttons/LendAmountButton.spec.js
+++ b/test/unit/specs/components/LoanCards/Buttons/LendAmountButton.spec.js
@@ -1,10 +1,11 @@
import { render } from '@testing-library/vue';
-import LendAmountButton from '@/components/LoanCards/Buttons/LendAmountButton';
-import kvAnalytics from '@/plugins/kv-analytics-plugin';
+import LendAmountButton from '#src/components/LoanCards/Buttons/LendAmountButton';
+import kvAnalytics from '#src/plugins/kv-analytics-plugin';
describe('LendAmountButton', () => {
it('should display amount with a number input', async () => {
- const { getByText } = render(LendAmountButton,
+ const { getByText } = render(
+ LendAmountButton,
{
provide: {
apollo: {
@@ -15,7 +16,8 @@ describe('LendAmountButton', () => {
},
vue => {
vue.use(kvAnalytics);
- });
+ }
+ );
// Expect the button to exist and have correct amount
const buttonElement = getByText('Lend $20');
@@ -23,7 +25,8 @@ describe('LendAmountButton', () => {
});
it('should display amount with a string input', async () => {
- const { getByText } = render(LendAmountButton,
+ const { getByText } = render(
+ LendAmountButton,
{
provide: {
apollo: {
@@ -34,7 +37,8 @@ describe('LendAmountButton', () => {
},
vue => {
vue.use(kvAnalytics);
- });
+ }
+ );
// Expect the button to exist and have correct amount
const buttonElement = getByText('Lend $20');
diff --git a/test/unit/specs/components/LoanCards/LoanProgressGroup.spec.js b/test/unit/specs/components/LoanCards/LoanProgressGroup.spec.js
index 8c4b5250a8..1dcb299650 100644
--- a/test/unit/specs/components/LoanCards/LoanProgressGroup.spec.js
+++ b/test/unit/specs/components/LoanCards/LoanProgressGroup.spec.js
@@ -1,5 +1,5 @@
import { render } from '@testing-library/vue';
-import LoanProgressGroup from '@/components/LoanCards/LoanProgressGroup';
+import LoanProgressGroup from '#src/components/LoanCards/LoanProgressGroup';
describe('LoanProgressGroup', () => {
it('should display default message', () => {
diff --git a/test/unit/specs/components/RouteListing.spec.js b/test/unit/specs/components/RouteListing.spec.js
index dae89aff50..afe4a3b454 100644
--- a/test/unit/specs/components/RouteListing.spec.js
+++ b/test/unit/specs/components/RouteListing.spec.js
@@ -1,6 +1,6 @@
import { render } from '@testing-library/vue';
-import RouteListing from '@/pages/UiSiteMap/RouteListing';
-import routes from '@/router/routes';
+import RouteListing from '#src/pages/UiSiteMap/RouteListing';
+import routes from '#src/router/routes';
import byTextContent from '../../helpers/byTextContent';
// Async components in route causes some issues with components that use
diff --git a/test/unit/specs/components/Thanks/ChallengeHeader.spec.js b/test/unit/specs/components/Thanks/ChallengeHeader.spec.js
index 02cbae3682..03282a23f1 100644
--- a/test/unit/specs/components/Thanks/ChallengeHeader.spec.js
+++ b/test/unit/specs/components/Thanks/ChallengeHeader.spec.js
@@ -1,7 +1,7 @@
-import ChallengeHeader from '@/components/Thanks/ChallengeHeader';
-import kvAnalytics from '@/plugins/kv-analytics-plugin';
+import ChallengeHeader from '#src/components/Thanks/ChallengeHeader';
+import kvAnalytics from '#src/plugins/kv-analytics-plugin';
import { render } from '@testing-library/vue';
-import KvProgressCircle from '@/components/Kv/KvProgressCircle';
+import KvProgressCircle from '#src/components/Kv/KvProgressCircle';
describe('ChallengeHeader', () => {
it('should contain these components and text', () => {
diff --git a/test/unit/specs/components/WwwFrame/SearchBar.spec.js b/test/unit/specs/components/WwwFrame/SearchBar.spec.js
index 20f177efb9..e8ebb0a56a 100755
--- a/test/unit/specs/components/WwwFrame/SearchBar.spec.js
+++ b/test/unit/specs/components/WwwFrame/SearchBar.spec.js
@@ -1,7 +1,7 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import SearchBar from '@/components/WwwFrame/SearchBar';
-import suggestionsQuery from '@/graphql/query/loanSearchSuggestions.graphql';
+import SearchBar from '#src/components/WwwFrame/SearchBar';
+import suggestionsQuery from '#src/graphql/query/loanSearchSuggestions.graphql';
import byTextContent from '../../../helpers/byTextContent';
const suggestions = [
diff --git a/test/unit/specs/components/WwwFrame/TheHeader.spec.js b/test/unit/specs/components/WwwFrame/TheHeader.spec.js
index 7d601564da..4c5a231f90 100644
--- a/test/unit/specs/components/WwwFrame/TheHeader.spec.js
+++ b/test/unit/specs/components/WwwFrame/TheHeader.spec.js
@@ -1,11 +1,10 @@
import { render } from '@testing-library/vue';
import userEvent from '@testing-library/user-event';
-import VueRouter from 'vue-router';
-import TheHeader from '@/components/WwwFrame/TheHeader';
-import kvAnalytics from '@/plugins/kv-analytics-plugin';
-import CookieStore from '@/util/cookieStore';
-import { MockKvAuth0 } from '@/util/KvAuth0';
-import numeralFilter from '@/plugins/numeral-filter';
+import TheHeader from '#src/components/WwwFrame/TheHeader';
+import kvAnalytics from '#src/plugins/kv-analytics-plugin';
+import CookieStore from '#src/util/cookieStore';
+import { MockKvAuth0 } from '#src/util/KvAuth0';
+import numeralFilter from '#src/plugins/numeral-filter';
const emptyComponent = {
template: '',
@@ -26,7 +25,7 @@ describe('TheHeader', () => {
cookieStore: new CookieStore(),
kvAuth0: MockKvAuth0,
},
- routes: new VueRouter(),
+ routes: [],
// Stubbing out child components not used in this test
stubs: {
MonthlyGoodExpMenuWrapper: { ...emptyComponent },
diff --git a/test/unit/specs/components/WwwFrame/TheTipMessage.spec.js b/test/unit/specs/components/WwwFrame/TheTipMessage.spec.js
index 1ca34aa7de..3e6b0f94da 100644
--- a/test/unit/specs/components/WwwFrame/TheTipMessage.spec.js
+++ b/test/unit/specs/components/WwwFrame/TheTipMessage.spec.js
@@ -1,7 +1,7 @@
import { render } from '@testing-library/vue';
-import { TIP, WARNING, ERROR } from '@/api/fixtures/FlashMessageTypeEnum';
-import TheTipMessage from '@/components/WwwFrame/TheTipMessage';
-import CookieStore from '@/util/cookieStore';
+import { TIP, WARNING, ERROR } from '#src/api/fixtures/FlashMessageTypeEnum';
+import TheTipMessage from '#src/components/WwwFrame/TheTipMessage';
+import CookieStore from '#src/util/cookieStore';
function renderTipMessage(tipMessage, flashMessages) {
return render(TheTipMessage, {
diff --git a/test/unit/specs/pages/LoginAndRegister/RegisterSocial.spec.js b/test/unit/specs/pages/LoginAndRegister/RegisterSocial.spec.js
index 9230276467..6c22061479 100644
--- a/test/unit/specs/pages/LoginAndRegister/RegisterSocial.spec.js
+++ b/test/unit/specs/pages/LoginAndRegister/RegisterSocial.spec.js
@@ -1,4 +1,4 @@
-import routes from '@/router/routes';
+import routes from '#src/router/routes';
const beforeEnterGuard = routes.find(route => route.path === '/register/social').beforeEnter;
diff --git a/test/unit/specs/server/live-loan-fetch.spec.js b/test/unit/specs/server/live-loan-fetch.spec.js
index 8db2d3b1ed..92e1e77758 100644
--- a/test/unit/specs/server/live-loan-fetch.spec.js
+++ b/test/unit/specs/server/live-loan-fetch.spec.js
@@ -53,10 +53,14 @@ describe('live-loan-fetch', () => {
await testFilterParsing('theme_start-up', { theme: ['Start-Up'] });
await testFilterParsing('theme_youth,theme_green', { theme: ['Youth', 'Green'] });
await testFilterParsing('tag_u.s. black-owned businesses', { loanTags: [43] });
- await testFilterParsing('tag_u.s. black-owned businesses,theme_green',
- { loanTags: [43], theme: ['Green'] });
- await testFilterParsing('tag_latinx/hispanic owned business,tag_u.s. black-owned businesses',
- { loanTags: [45, 43] });
+ await testFilterParsing(
+ 'tag_u.s. black-owned businesses,theme_green',
+ { loanTags: [43], theme: ['Green'] }
+ );
+ await testFilterParsing(
+ 'tag_latinx/hispanic owned business,tag_u.s. black-owned businesses',
+ { loanTags: [45, 43] }
+ );
await testFilterParsing('notafilter_value', {});
await testFilterParsing('sector_notasector', {});
await testFilterParsing('theme_notatheme', {});
diff --git a/test/unit/specs/util/KvAuth0.spec.js b/test/unit/specs/util/KvAuth0.spec.js
index 1017b21f55..f049debb17 100644
--- a/test/unit/specs/util/KvAuth0.spec.js
+++ b/test/unit/specs/util/KvAuth0.spec.js
@@ -1,4 +1,4 @@
-import KvAuth0, { KIVA_ID_KEY, LAST_LOGIN_KEY, USED_MFA_KEY } from '@/util/KvAuth0';
+import KvAuth0, { KIVA_ID_KEY, LAST_LOGIN_KEY, USED_MFA_KEY } from '#src/util/KvAuth0';
function getKvAuth0WithFACookie(cookieValue, checkFakeAuth = true, domain = 'login.dev.kiva.org') {
return new KvAuth0({
diff --git a/test/unit/specs/util/achievementUtils.spec.js b/test/unit/specs/util/achievementUtils.spec.js
index c7f2d28b1f..7262986b4d 100644
--- a/test/unit/specs/util/achievementUtils.spec.js
+++ b/test/unit/specs/util/achievementUtils.spec.js
@@ -1,6 +1,6 @@
import {
achievementProgression, missingMilestones
-} from '@/util/achievementUtils';
+} from '#src/util/achievementUtils';
const sampleAPIMilestoneProgress = [
{
diff --git a/test/unit/specs/util/comparators.spec.js b/test/unit/specs/util/comparators.spec.js
index 1e94fc9396..408405e6af 100644
--- a/test/unit/specs/util/comparators.spec.js
+++ b/test/unit/specs/util/comparators.spec.js
@@ -1,4 +1,4 @@
-import * as comparators from '@/util/comparators';
+import * as comparators from '#src/util/comparators';
describe('comparators.js', () => {
describe('abc', () => {
diff --git a/test/unit/specs/util/contentfulUtils.spec.js b/test/unit/specs/util/contentfulUtils.spec.js
index 31188cc860..058a318a79 100644
--- a/test/unit/specs/util/contentfulUtils.spec.js
+++ b/test/unit/specs/util/contentfulUtils.spec.js
@@ -8,7 +8,7 @@ import {
processPageContent,
processPageContentFlat,
responsiveImageSetSourceSets
-} from '@/util/contentfulUtils';
+} from '#src/util/contentfulUtils';
import inactiveUiSetting from '../../fixtures/UiSettingTypeInactiveRaw.json';
import ccPageRaw from '../../fixtures/CorporateCampaignContentfulPageRaw.json';
diff --git a/test/unit/specs/util/cookieStore.spec.js b/test/unit/specs/util/cookieStore.spec.js
index 25e942d57c..58edc1761f 100644
--- a/test/unit/specs/util/cookieStore.spec.js
+++ b/test/unit/specs/util/cookieStore.spec.js
@@ -1,4 +1,4 @@
-import CookieStore from '@/util/cookieStore';
+import CookieStore from '#src/util/cookieStore';
import clearDocumentCookies from '../../setup/clearDocumentCookies';
describe('cookieStore.js', () => {
diff --git a/test/unit/specs/util/dateUtils.spec.js b/test/unit/specs/util/dateUtils.spec.js
index ff6595e445..492731f3fd 100644
--- a/test/unit/specs/util/dateUtils.spec.js
+++ b/test/unit/specs/util/dateUtils.spec.js
@@ -1,4 +1,4 @@
-import getMonthsCount from '@/util/dateUtils';
+import getMonthsCount from '#src/util/dateUtils';
describe('dateUtils.js', () => {
const startTimestamp = 1674172800000; // Start subscription on Jan 20th
diff --git a/test/unit/specs/util/experiment/Alea.spec.js b/test/unit/specs/util/experiment/Alea.spec.js
index c6232aada2..1b08a95e98 100644
--- a/test/unit/specs/util/experiment/Alea.spec.js
+++ b/test/unit/specs/util/experiment/Alea.spec.js
@@ -1,4 +1,4 @@
-import Alea, { Mash } from '@/util/experiment/Alea';
+import Alea, { Mash } from '#src/util/experiment/Alea';
import { runManyTimes, runManyTimesAndCompare } from '../../../helpers/runAndCompare';
describe('Alea.js', () => {
diff --git a/test/unit/specs/util/experiment/experimentUtils.spec.js b/test/unit/specs/util/experiment/experimentUtils.spec.js
index 28e586970b..e7b408b44f 100644
--- a/test/unit/specs/util/experiment/experimentUtils.spec.js
+++ b/test/unit/specs/util/experiment/experimentUtils.spec.js
@@ -13,13 +13,13 @@ import {
getForcedAssignment,
getLoginId,
assignAllActiveExperiments,
-} from '@/util/experiment/experimentUtils';
-import * as Alea from '@/util/experiment/Alea';
-import experimentIdsQuery from '@/graphql/query/experimentIds.graphql';
-import experimentSettingQuery from '@/graphql/query/experimentSetting.graphql';
-import experimentVersionFragment from '@/graphql/fragments/experimentVersion.graphql';
-import CookieStore from '@/util/cookieStore';
-import experimentAssignmentQuery from '@/graphql/query/experimentAssignment.graphql';
+} from '#src/util/experiment/experimentUtils';
+import * as Alea from '#src/util/experiment/Alea';
+import experimentIdsQuery from '#src/graphql/query/experimentIds.graphql';
+import experimentSettingQuery from '#src/graphql/query/experimentSetting.graphql';
+import experimentVersionFragment from '#src/graphql/fragments/experimentVersion.graphql';
+import CookieStore from '#src/util/cookieStore';
+import experimentAssignmentQuery from '#src/graphql/query/experimentAssignment.graphql';
import { runManyTimesAndCompare } from '../../../helpers/runAndCompare';
import clearDocumentCookies from '../../../setup/clearDocumentCookies';
diff --git a/test/unit/specs/util/flssUtils.spec.js b/test/unit/specs/util/flssUtils.spec.js
index 000c424ef8..61f93dca4d 100644
--- a/test/unit/specs/util/flssUtils.spec.js
+++ b/test/unit/specs/util/flssUtils.spec.js
@@ -7,14 +7,14 @@ import {
fetchLoanChannel,
getCachedLoanChannel,
watchLoanChannel,
-} from '@/util/flssUtils';
-import flssLoanQuery from '@/graphql/query/flssLoansQuery.graphql';
-import flssLoanFacetsQuery from '@/graphql/query/flssLoanFacetsQuery.graphql';
-import flssLoanChannelQuery from '@/graphql/query/flssLoanChannel.graphql';
-import categoryListFlssQuery from '@/graphql/query/loanFinding/categoryListFlss.graphql';
-import filterConfig from '@/util/loanSearch/filterConfig';
-
-jest.mock('@/util/loanSearch/filterConfig', () => {
+} from '#src/util/flssUtils';
+import flssLoanQuery from '#src/graphql/query/flssLoansQuery.graphql';
+import flssLoanFacetsQuery from '#src/graphql/query/flssLoanFacetsQuery.graphql';
+import flssLoanChannelQuery from '#src/graphql/query/flssLoanChannel.graphql';
+import categoryListFlssQuery from '#src/graphql/query/loanFinding/categoryListFlss.graphql';
+import filterConfig from '#src/util/loanSearch/filterConfig';
+
+jest.mock('#src/util/loanSearch/filterConfig', () => {
return {
config: {
a: { getFlssFilter: jest.fn().mockReturnValue({ a: 'a' }) },
diff --git a/test/unit/specs/util/getDeepComponents.spec.js b/test/unit/specs/util/getDeepComponents.spec.js
index a66f8af982..e3a55a488d 100644
--- a/test/unit/specs/util/getDeepComponents.spec.js
+++ b/test/unit/specs/util/getDeepComponents.spec.js
@@ -1,4 +1,4 @@
-import getDeepComponents from '@/util/getDeepComponents';
+import getDeepComponents from '#src/util/getDeepComponents';
const ComponentA = { name: 'ComponentA' };
diff --git a/test/unit/specs/util/imageUtils.spec.js b/test/unit/specs/util/imageUtils.spec.js
index db2c7d8e6c..1980922e14 100644
--- a/test/unit/specs/util/imageUtils.spec.js
+++ b/test/unit/specs/util/imageUtils.spec.js
@@ -1,4 +1,4 @@
-import { getKivaImageUrl, isLegacyPlaceholderAvatar } from '@/util/imageUtils';
+import { getKivaImageUrl, isLegacyPlaceholderAvatar } from '#src/util/imageUtils';
describe('imageUtils.js', () => {
describe('getKivaImageUrl()', () => {
diff --git a/test/unit/specs/util/injectionCheck.spec.js b/test/unit/specs/util/injectionCheck.spec.js
index f51a971d03..45ada17cb6 100644
--- a/test/unit/specs/util/injectionCheck.spec.js
+++ b/test/unit/specs/util/injectionCheck.spec.js
@@ -1,4 +1,4 @@
-import checkInjections from '@/util/injectionCheck';
+import checkInjections from '#src/util/injectionCheck';
describe('injectionCheck', () => {
it('throws an error if vm instance does not inject required injections', () => {
diff --git a/test/unit/specs/util/joinArray.spec.js b/test/unit/specs/util/joinArray.spec.js
index 6f560e31b3..8932e73e8d 100644
--- a/test/unit/specs/util/joinArray.spec.js
+++ b/test/unit/specs/util/joinArray.spec.js
@@ -1,6 +1,6 @@
import {
joinArray
-} from '@/util/joinArray';
+} from '#src/util/joinArray';
const testArray = ['First Item', 'Second Item', 'Third Item', 'Fourth Item'];
describe('joinArray.js', () => {
diff --git a/test/unit/specs/util/loanCallouts.spec.js b/test/unit/specs/util/loanCallouts.spec.js
index b46da6c41e..bb1f50a1df 100644
--- a/test/unit/specs/util/loanCallouts.spec.js
+++ b/test/unit/specs/util/loanCallouts.spec.js
@@ -1,4 +1,4 @@
-import loanCallouts from '@/util/loanCallouts';
+import loanCallouts from '#src/util/loanCallouts';
import mockLoanData from '../../fixtures/mockLoanData';
const loan = mockLoanData[0];
diff --git a/test/unit/specs/util/loanChannelUtils.spec.js b/test/unit/specs/util/loanChannelUtils.spec.js
index 22564bcd15..b2c57ed0dc 100644
--- a/test/unit/specs/util/loanChannelUtils.spec.js
+++ b/test/unit/specs/util/loanChannelUtils.spec.js
@@ -5,11 +5,11 @@ import {
getCachedChannel,
getLoanChannel,
watchChannelQuery,
-} from '@/util/loanChannelUtils';
-import loanChannelQuery from '@/graphql/query/loanChannelDataExpanded.graphql';
-import * as experimentalUtils from '@/util/experiment/experimentUtils';
-import * as flssUtils from '@/util/flssUtils';
-import { getLoanChannelVariables } from '@/util/flssUtils';
+} from '#src/util/loanChannelUtils';
+import loanChannelQuery from '#src/graphql/query/loanChannelDataExpanded.graphql';
+import * as experimentalUtils from '#src/util/experiment/experimentUtils';
+import * as flssUtils from '#src/util/flssUtils';
+import { getLoanChannelVariables } from '#src/util/flssUtils';
const mockWomenMap = {
id: 5,
diff --git a/test/unit/specs/util/loanSearch/countryUtils.spec.js b/test/unit/specs/util/loanSearch/countryUtils.spec.js
index d02a8059ff..ead23ce1a0 100644
--- a/test/unit/specs/util/loanSearch/countryUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/countryUtils.spec.js
@@ -3,7 +3,7 @@ import {
isoToCountryName,
mapIsoCodesToCountryNames,
sortRegions
-} from '@/util/loanSearch/countryUtils';
+} from '#src/util/loanSearch/countryUtils';
import {
mockTransformedMiddleEast,
mockTransformedChile,
diff --git a/test/unit/specs/util/loanSearch/dataUtils.spec.js b/test/unit/specs/util/loanSearch/dataUtils.spec.js
index b5d689ac86..451cdd7552 100644
--- a/test/unit/specs/util/loanSearch/dataUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/dataUtils.spec.js
@@ -1,8 +1,8 @@
-import { runFacetsQueries, runLoansQuery, fetchLoanFacets } from '@/util/loanSearch/dataUtils';
-import * as flssUtils from '@/util/flssUtils';
-import loanFacetsQuery from '@/graphql/query/loanFacetsQuery.graphql';
-import loanEnumsQuery from '@/graphql/query/loanEnumsQuery.graphql';
-import { getFlssFilters, FLSS_ORIGIN_NOT_SPECIFIED } from '@/util/flssUtils';
+import { runFacetsQueries, runLoansQuery, fetchLoanFacets } from '#src/util/loanSearch/dataUtils';
+import * as flssUtils from '#src/util/flssUtils';
+import loanFacetsQuery from '#src/graphql/query/loanFacetsQuery.graphql';
+import loanEnumsQuery from '#src/graphql/query/loanEnumsQuery.graphql';
+import { getFlssFilters, FLSS_ORIGIN_NOT_SPECIFIED } from '#src/util/flssUtils';
import { mockState } from '../../../fixtures/mockLoanSearchData';
describe('dataUtils.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filterUtils.spec.js b/test/unit/specs/util/loanSearch/filterUtils.spec.js
index 06b405f40a..c42f48e558 100644
--- a/test/unit/specs/util/loanSearch/filterUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/filterUtils.spec.js
@@ -4,8 +4,8 @@ import {
transformRadioGroupOptions,
getFilterKeyFromValue,
getDisplayedNumber,
-} from '@/util/loanSearch/filterUtils';
-import { lenderRepaymentTermValueMap, EIGHT_MONTHS_KEY } from '@/util/loanSearch/filters/lenderRepaymentTerms';
+} from '#src/util/loanSearch/filterUtils';
+import { lenderRepaymentTermValueMap, EIGHT_MONTHS_KEY } from '#src/util/loanSearch/filters/lenderRepaymentTerms';
describe('filterUtils.js', () => {
describe('transformRadioGroupOptions', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/activities.spec.js b/test/unit/specs/util/loanSearch/filters/activities.spec.js
index 17ea7f5b05..2eae8a567b 100644
--- a/test/unit/specs/util/loanSearch/filters/activities.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/activities.spec.js
@@ -1,4 +1,4 @@
-import activities from '@/util/loanSearch/filters/activities';
+import activities from '#src/util/loanSearch/filters/activities';
describe('activities.js', () => {
describe('activities', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/distributionModels.spec.js b/test/unit/specs/util/loanSearch/filters/distributionModels.spec.js
index a187c1cbd8..24d8bc933b 100644
--- a/test/unit/specs/util/loanSearch/filters/distributionModels.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/distributionModels.spec.js
@@ -3,8 +3,8 @@ import distributionModels, {
DIRECT_KEY,
FIELDPARTNER_KEY,
distributionModelDisplayMap
-} from '@/util/loanSearch/filters/distributionModels';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+} from '#src/util/loanSearch/filters/distributionModels';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('distributionModels.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/flexibleFundraisingEnabled.spec.js b/test/unit/specs/util/loanSearch/filters/flexibleFundraisingEnabled.spec.js
index bd7b526adf..564580a217 100644
--- a/test/unit/specs/util/loanSearch/filters/flexibleFundraisingEnabled.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/flexibleFundraisingEnabled.spec.js
@@ -5,7 +5,7 @@ import flexibleFundraisingEnabled, {
valueMap,
facetsKey,
typeName,
-} from '@/util/loanSearch/filters/flexibleFundraisingEnabled';
+} from '#src/util/loanSearch/filters/flexibleFundraisingEnabled';
describe('flexibleFundraisingEnabled.js', () => {
describe('default', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/genders.spec.js b/test/unit/specs/util/loanSearch/filters/genders.spec.js
index 8a5c3aae2d..8b581707b0 100644
--- a/test/unit/specs/util/loanSearch/filters/genders.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/genders.spec.js
@@ -4,8 +4,8 @@ import genders, {
FEMALE_KEY,
NON_BINARY_KEY,
genderDisplayMap
-} from '@/util/loanSearch/filters/genders';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+} from '#src/util/loanSearch/filters/genders';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('genders.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/isIndividual.spec.js b/test/unit/specs/util/loanSearch/filters/isIndividual.spec.js
index a4a9d15bb2..867c0aa75b 100644
--- a/test/unit/specs/util/loanSearch/filters/isIndividual.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/isIndividual.spec.js
@@ -4,8 +4,8 @@ import isIndividual, {
INDIVIDUAL_KEY,
GROUP_KEY,
isIndividualDisplayMap
-} from '@/util/loanSearch/filters/isIndividual';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+} from '#src/util/loanSearch/filters/isIndividual';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('isIndividual.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/isMatchable.spec.js b/test/unit/specs/util/loanSearch/filters/isMatchable.spec.js
index c2f72965d8..90395d0615 100644
--- a/test/unit/specs/util/loanSearch/filters/isMatchable.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/isMatchable.spec.js
@@ -1,5 +1,5 @@
-import isMatchable from '@/util/loanSearch/filters/isMatchable';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import isMatchable from '#src/util/loanSearch/filters/isMatchable';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('isMatchable.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/keywordSearch.spec.js b/test/unit/specs/util/loanSearch/filters/keywordSearch.spec.js
index e08f8923c5..9477e6bed2 100644
--- a/test/unit/specs/util/loanSearch/filters/keywordSearch.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/keywordSearch.spec.js
@@ -1,5 +1,5 @@
-import keywordSearch from '@/util/loanSearch/filters/keywordSearch';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import keywordSearch from '#src/util/loanSearch/filters/keywordSearch';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('keywordSearch.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/lenderRepaymentTerms.spec.js b/test/unit/specs/util/loanSearch/filters/lenderRepaymentTerms.spec.js
index 58e587b5e4..112a147dc9 100644
--- a/test/unit/specs/util/loanSearch/filters/lenderRepaymentTerms.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/lenderRepaymentTerms.spec.js
@@ -6,9 +6,9 @@ import lenderRepaymentTerms, {
MORE_THAN_TWO_YEARS_KEY,
lenderRepaymentTermDisplayMap,
lenderRepaymentTermValueMap,
-} from '@/util/loanSearch/filters/lenderRepaymentTerms';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+} from '#src/util/loanSearch/filters/lenderRepaymentTerms';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('lenderRepaymentTerms.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/pageLimit.spec.js b/test/unit/specs/util/loanSearch/filters/pageLimit.spec.js
index 2f41c40a45..cf9086f57c 100644
--- a/test/unit/specs/util/loanSearch/filters/pageLimit.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/pageLimit.spec.js
@@ -1,6 +1,6 @@
-import pageLimit from '@/util/loanSearch/filters/pageLimit';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { getDefaultLoanSearchState } from '@/api/localResolvers/loanSearch';
+import pageLimit from '#src/util/loanSearch/filters/pageLimit';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { getDefaultLoanSearchState } from '#src/api/localResolvers/loanSearch';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('pageLimit.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/pageOffset.spec.js b/test/unit/specs/util/loanSearch/filters/pageOffset.spec.js
index e522909b7e..d1285f3b23 100644
--- a/test/unit/specs/util/loanSearch/filters/pageOffset.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/pageOffset.spec.js
@@ -1,6 +1,6 @@
-import pageOffset from '@/util/loanSearch/filters/pageOffset';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { getDefaultLoanSearchState } from '@/api/localResolvers/loanSearch';
+import pageOffset from '#src/util/loanSearch/filters/pageOffset';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { getDefaultLoanSearchState } from '#src/api/localResolvers/loanSearch';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('pageOffset.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/partnerAvgProfitability.spec.js b/test/unit/specs/util/loanSearch/filters/partnerAvgProfitability.spec.js
index 70921a1edd..2e66309a15 100644
--- a/test/unit/specs/util/loanSearch/filters/partnerAvgProfitability.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/partnerAvgProfitability.spec.js
@@ -1,6 +1,6 @@
-import partnerAvgProfitability, { MIN, MAX } from '@/util/loanSearch/filters/partnerAvgProfitability';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+import partnerAvgProfitability, { MIN, MAX } from '#src/util/loanSearch/filters/partnerAvgProfitability';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('partnerAvgProfitability.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/partnerDefaultRate.spec.js b/test/unit/specs/util/loanSearch/filters/partnerDefaultRate.spec.js
index 8349a2fc27..e7234e173f 100644
--- a/test/unit/specs/util/loanSearch/filters/partnerDefaultRate.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/partnerDefaultRate.spec.js
@@ -1,6 +1,6 @@
-import partnerDefaultRate, { MIN, MAX } from '@/util/loanSearch/filters/partnerDefaultRate';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+import partnerDefaultRate, { MIN, MAX } from '#src/util/loanSearch/filters/partnerDefaultRate';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('partnerDefaultRate.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/partnerRiskRating.spec.js b/test/unit/specs/util/loanSearch/filters/partnerRiskRating.spec.js
index edbd05ef29..4e32a32db7 100644
--- a/test/unit/specs/util/loanSearch/filters/partnerRiskRating.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/partnerRiskRating.spec.js
@@ -1,6 +1,6 @@
-import partnerRiskRating, { MIN, MAX } from '@/util/loanSearch/filters/partnerRiskRating';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+import partnerRiskRating, { MIN, MAX } from '#src/util/loanSearch/filters/partnerRiskRating';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('partnerRiskRating.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/partners.spec.js b/test/unit/specs/util/loanSearch/filters/partners.spec.js
index 96d9955c94..952160a2fe 100644
--- a/test/unit/specs/util/loanSearch/filters/partners.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/partners.spec.js
@@ -1,5 +1,5 @@
-import partners, { transformPartners } from '@/util/loanSearch/filters/partners';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import partners, { transformPartners } from '#src/util/loanSearch/filters/partners';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('partners.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/regions.spec.js b/test/unit/specs/util/loanSearch/filters/regions.spec.js
index 7f3d24b20f..9658555eca 100644
--- a/test/unit/specs/util/loanSearch/filters/regions.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/regions.spec.js
@@ -2,8 +2,8 @@ import regions, {
transformIsoCodes,
getCountryIsoCodesFromQueryParam,
getUpdatedRegions
-} from '@/util/loanSearch/filters/regions';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+} from '#src/util/loanSearch/filters/regions';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import {
mockTransformedRegions,
mockAllFacets,
@@ -264,7 +264,8 @@ describe('regions.js', () => {
it('should update numLoansFundraising', () => {
// Next regions have no Middle East and different fundraising numbers
const nextSouthAmerica = mockTransformedSouthAmerica(
- [mockTransformedChile(1), mockTransformedColombia(2)], 3
+ [mockTransformedChile(1), mockTransformedColombia(2)],
+ 3
);
expect(getUpdatedRegions(mockTransformedRegions, [nextSouthAmerica])).toEqual([
@@ -277,7 +278,8 @@ describe('regions.js', () => {
const southAmerica = mockTransformedSouthAmerica();
const middleEast = mockTransformedMiddleEast();
const updatedSouthAmerica = mockTransformedSouthAmerica(
- [mockTransformedChile(0), mockTransformedColombia(0)], 0
+ [mockTransformedChile(0), mockTransformedColombia(0)],
+ 0
);
expect(getUpdatedRegions([southAmerica], [middleEast])).toEqual([middleEast, updatedSouthAmerica]);
diff --git a/test/unit/specs/util/loanSearch/filters/sectors.spec.js b/test/unit/specs/util/loanSearch/filters/sectors.spec.js
index 86b50ce074..422eac7ce1 100644
--- a/test/unit/specs/util/loanSearch/filters/sectors.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/sectors.spec.js
@@ -1,5 +1,5 @@
-import sectors, { transformSectors } from '@/util/loanSearch/filters/sectors';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import sectors, { transformSectors } from '#src/util/loanSearch/filters/sectors';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('sectors.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/sortOptions.spec.js b/test/unit/specs/util/loanSearch/filters/sortOptions.spec.js
index 299db0b895..42f3a03640 100644
--- a/test/unit/specs/util/loanSearch/filters/sortOptions.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/sortOptions.spec.js
@@ -1,5 +1,5 @@
-import sortOptions, { visibleFLSSSortOptions, formatSortOptions } from '@/util/loanSearch/filters/sortOptions';
-import { STANDARD_QUERY_TYPE, FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import sortOptions, { visibleFLSSSortOptions, formatSortOptions } from '#src/util/loanSearch/filters/sortOptions';
+import { STANDARD_QUERY_TYPE, FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('sortOptions.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/tags.spec.js b/test/unit/specs/util/loanSearch/filters/tags.spec.js
index 23dfcf95ee..fc673475a6 100644
--- a/test/unit/specs/util/loanSearch/filters/tags.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/tags.spec.js
@@ -1,5 +1,5 @@
-import tags, { transformTagName, transformTags } from '@/util/loanSearch/filters/tags';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import tags, { transformTagName, transformTags } from '#src/util/loanSearch/filters/tags';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('tags.js', () => {
diff --git a/test/unit/specs/util/loanSearch/filters/themes.spec.js b/test/unit/specs/util/loanSearch/filters/themes.spec.js
index 4be3cd7fe0..f43c27e89f 100644
--- a/test/unit/specs/util/loanSearch/filters/themes.spec.js
+++ b/test/unit/specs/util/loanSearch/filters/themes.spec.js
@@ -1,5 +1,5 @@
-import themes, { transformThemes } from '@/util/loanSearch/filters/themes';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
+import themes, { transformThemes } from '#src/util/loanSearch/filters/themes';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
import { mockAllFacets, mockState } from '../../../../fixtures/mockLoanSearchData';
describe('themes.js', () => {
diff --git a/test/unit/specs/util/loanSearch/minMaxRange.spec.js b/test/unit/specs/util/loanSearch/minMaxRange.spec.js
index 0f6b2d1b13..236bee4893 100644
--- a/test/unit/specs/util/loanSearch/minMaxRange.spec.js
+++ b/test/unit/specs/util/loanSearch/minMaxRange.spec.js
@@ -1,4 +1,4 @@
-import { createMinMaxRange, getMinMaxRangeFilter, getMinMaxRangeQueryParam } from '@/util/loanSearch/minMaxRange';
+import { createMinMaxRange, getMinMaxRangeFilter, getMinMaxRangeQueryParam } from '#src/util/loanSearch/minMaxRange';
describe('minMaxRange.js', () => {
describe('createMinMaxRange', () => {
diff --git a/test/unit/specs/util/loanSearch/queryParamUtils.spec.js b/test/unit/specs/util/loanSearch/queryParamUtils.spec.js
index 615f736ac5..045220367a 100644
--- a/test/unit/specs/util/loanSearch/queryParamUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/queryParamUtils.spec.js
@@ -1,9 +1,9 @@
-import { convertQueryToFilters, updateQueryParams, hasExcludedQueryParams } from '@/util/loanSearch/queryParamUtils';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import { convertQueryToFilters, updateQueryParams, hasExcludedQueryParams } from '#src/util/loanSearch/queryParamUtils';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import filterConfig from '#src/util/loanSearch/filterConfig';
import { mockState, mockAllFacets } from '../../../fixtures/mockLoanSearchData';
-jest.mock('@/util/loanSearch/filterConfig', () => {
+jest.mock('#src/util/loanSearch/filterConfig', () => {
return {
config: {
a: {
diff --git a/test/unit/specs/util/loanSearch/queryParseUtils.spec.js b/test/unit/specs/util/loanSearch/queryParseUtils.spec.js
index a597d7ea60..f66b099a5a 100644
--- a/test/unit/specs/util/loanSearch/queryParseUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/queryParseUtils.spec.js
@@ -3,8 +3,8 @@ import {
getEnumNameFromQueryParam,
getBooleanValueFromQueryParam,
getMinMaxRangeFromQueryParam,
-} from '@/util/loanSearch/queryParseUtils';
-import { createMinMaxRange } from '@/util/loanSearch/minMaxRange';
+} from '#src/util/loanSearch/queryParseUtils';
+import { createMinMaxRange } from '#src/util/loanSearch/minMaxRange';
import { mockAllFacets } from '../../../fixtures/mockLoanSearchData';
describe('queryParseUtils.js', () => {
diff --git a/test/unit/specs/util/loanSearch/searchStateUtils.spec.js b/test/unit/specs/util/loanSearch/searchStateUtils.spec.js
index b2b3409a49..2d79d6c94f 100644
--- a/test/unit/specs/util/loanSearch/searchStateUtils.spec.js
+++ b/test/unit/specs/util/loanSearch/searchStateUtils.spec.js
@@ -1,11 +1,11 @@
-import { updateSearchState, getValidatedSearchState, createSavedSearch } from '@/util/loanSearch/searchStateUtils';
-import { FLSS_QUERY_TYPE } from '@/util/loanSearch/filterUtils';
-import updateLoanSearchMutation from '@/graphql/mutation/updateLoanSearchState.graphql';
-import createSavedSearchMutation from '@/graphql/mutation/createSavedSearch.graphql';
-import filterConfig from '@/util/loanSearch/filterConfig';
+import { updateSearchState, getValidatedSearchState, createSavedSearch } from '#src/util/loanSearch/searchStateUtils';
+import { FLSS_QUERY_TYPE } from '#src/util/loanSearch/filterUtils';
+import updateLoanSearchMutation from '#src/graphql/mutation/updateLoanSearchState.graphql';
+import createSavedSearchMutation from '#src/graphql/mutation/createSavedSearch.graphql';
+import filterConfig from '#src/util/loanSearch/filterConfig';
import { mockAllFacets, savedSearchParams } from '../../../fixtures/mockLoanSearchData';
-jest.mock('@/util/loanSearch/filterConfig', () => {
+jest.mock('#src/util/loanSearch/filterConfig', () => {
return {
config: {
a: { getValidatedSearchState: jest.fn().mockReturnValue({ a: 'a' }) },
diff --git a/test/unit/specs/util/loanUse.spec.js b/test/unit/specs/util/loanUse.spec.js
index 62f8527dc5..b698a4c87c 100644
--- a/test/unit/specs/util/loanUse.spec.js
+++ b/test/unit/specs/util/loanUse.spec.js
@@ -1,7 +1,7 @@
import {
FUNDRAISING, INACTIVE, REVIEWED, PAYING_BACK
-} from '@/api/fixtures/LoanStatusEnum';
-import getLoanUse from '@/util/loanUse';
+} from '#src/api/fixtures/LoanStatusEnum';
+import getLoanUse from '#src/util/loanUse';
const loanDefaults = {
anonymizationLevel: 'none',
diff --git a/test/unit/specs/util/loanUtils.spec.js b/test/unit/specs/util/loanUtils.spec.js
index 7fdabdcb94..49a85230c7 100644
--- a/test/unit/specs/util/loanUtils.spec.js
+++ b/test/unit/specs/util/loanUtils.spec.js
@@ -5,7 +5,7 @@ import {
ERL_COOKIE_NAME,
TOP_UP_CAMPAIGN,
BASE_CAMPAIGN,
-} from '@/util/loanUtils';
+} from '#src/util/loanUtils';
describe('loanUtils.js', () => {
describe('getDropdownPriceArray', () => {
diff --git a/test/unit/specs/util/numberUtils.spec.js b/test/unit/specs/util/numberUtils.spec.js
index 5c2de6017f..f0fa8e957d 100644
--- a/test/unit/specs/util/numberUtils.spec.js
+++ b/test/unit/specs/util/numberUtils.spec.js
@@ -1,4 +1,4 @@
-import { isNumber } from '@/util/numberUtils';
+import { isNumber } from '#src/util/numberUtils';
describe('numberUtils.js', () => {
describe('isNumber', () => {
diff --git a/test/unit/specs/util/parseGACookie.spec.js b/test/unit/specs/util/parseGACookie.spec.js
index 3e11441b3f..214fbc8735 100644
--- a/test/unit/specs/util/parseGACookie.spec.js
+++ b/test/unit/specs/util/parseGACookie.spec.js
@@ -1,5 +1,5 @@
-import CookieStore from '@/util/cookieStore';
-import parseGACookie from '@/util/parseGACookie';
+import CookieStore from '#src/util/cookieStore';
+import parseGACookie from '#src/util/parseGACookie';
describe('parseGACookie.js', () => {
it('returns the campaign, campaign content, gclid, medium, and source from the GA cookie', () => {
diff --git a/test/unit/specs/util/parseSPCookie.spec.js b/test/unit/specs/util/parseSPCookie.spec.js
index 05ff76c558..9161fb38d9 100644
--- a/test/unit/specs/util/parseSPCookie.spec.js
+++ b/test/unit/specs/util/parseSPCookie.spec.js
@@ -1,5 +1,5 @@
-import CookieStore from '@/util/cookieStore';
-import parseSPCookie from '@/util/parseSPCookie';
+import CookieStore from '#src/util/cookieStore';
+import parseSPCookie from '#src/util/parseSPCookie';
describe('parseSPCookie.js', () => {
it('returns the user id and session id from the Snowplow cookie', () => {
diff --git a/test/unit/specs/util/richTextRenderer.spec.js b/test/unit/specs/util/richTextRenderer.spec.js
index 99105cdcf1..1f545dc1e8 100644
--- a/test/unit/specs/util/richTextRenderer.spec.js
+++ b/test/unit/specs/util/richTextRenderer.spec.js
@@ -1,6 +1,6 @@
import {
removeTrailingParagraphTag,
-} from '@/util/contentful/richTextRenderer';
+} from '#src/util/contentful/richTextRenderer';
import RichTextField from '../../fixtures/RichTextField.json';
diff --git a/test/unit/specs/util/searchEngine.spec.js b/test/unit/specs/util/searchEngine.spec.js
index 27bd1199c5..dba680ffdf 100644
--- a/test/unit/specs/util/searchEngine.spec.js
+++ b/test/unit/specs/util/searchEngine.spec.js
@@ -2,7 +2,7 @@
* @jest-environment node
*/
-import SearchEngine from '@/util/searchEngine';
+import SearchEngine from '#src/util/searchEngine';
describe('SearchEngine', () => {
let engine;
diff --git a/test/unit/specs/util/settingsUtils.spec.js b/test/unit/specs/util/settingsUtils.spec.js
index f0da68e71a..662675d8fe 100644
--- a/test/unit/specs/util/settingsUtils.spec.js
+++ b/test/unit/specs/util/settingsUtils.spec.js
@@ -1,4 +1,4 @@
-import { readJSONSetting, hashCode, readBoolSetting } from '@/util/settingsUtils';
+import { readJSONSetting, hashCode, readBoolSetting } from '#src/util/settingsUtils';
describe('settingsUtils.js', () => {
describe('readJSONSetting', () => {
diff --git a/test/unit/specs/util/simpleQueue.spec.js b/test/unit/specs/util/simpleQueue.spec.js
index f75b428804..5dc350dd72 100644
--- a/test/unit/specs/util/simpleQueue.spec.js
+++ b/test/unit/specs/util/simpleQueue.spec.js
@@ -1,4 +1,4 @@
-import SimpleQueue from '@/util/simpleQueue';
+import SimpleQueue from '#src/util/simpleQueue';
describe('SimpleQueue', () => {
const queue = new SimpleQueue();
diff --git a/test/unit/specs/util/syncDate.spec.js b/test/unit/specs/util/syncDate.spec.js
index 3ae0c637f7..5ce0b46816 100644
--- a/test/unit/specs/util/syncDate.spec.js
+++ b/test/unit/specs/util/syncDate.spec.js
@@ -5,7 +5,7 @@ import {
reset,
setDelay,
} from 'timesync';
-import syncDate from '@/util/syncDate';
+import syncDate from '#src/util/syncDate';
describe('syncDate.js', () => {
const delay = 10000;
diff --git a/test/unit/specs/util/teamChallengeUtils.spec.js b/test/unit/specs/util/teamChallengeUtils.spec.js
index 70c3d2721b..7599618e06 100644
--- a/test/unit/specs/util/teamChallengeUtils.spec.js
+++ b/test/unit/specs/util/teamChallengeUtils.spec.js
@@ -3,7 +3,7 @@ import {
removeLoansFromChallengeCookie,
TEAM_CHALLENGE_COOKIE_NAME,
setChallengeCookieData
-} from '@/util/teamChallengeUtils';
+} from '#src/util/teamChallengeUtils';
describe('teamChallengeUtils.js', () => {
const mockLoans = [
diff --git a/test/unit/specs/util/urlUtils.spec.js b/test/unit/specs/util/urlUtils.spec.js
index 1887316630..46ffe15cfd 100644
--- a/test/unit/specs/util/urlUtils.spec.js
+++ b/test/unit/specs/util/urlUtils.spec.js
@@ -1,4 +1,4 @@
-import { getFullUrl, isCCPage, isExcludedUrl } from '@/util/urlUtils';
+import { getFullUrl, isCCPage, isExcludedUrl } from '#src/util/urlUtils';
describe('urlUtils.js', () => {
describe('getFullUrl', () => {
@@ -49,7 +49,7 @@ describe('urlUtils.js', () => {
redirect_uri: 'http://kiva.org',
quote: undefined,
}))
- // eslint-disable-next-line max-len
+
.toBe('https://www.facebook.com/dialog/share?redirect_uri=http%3A%2F%2Fkiva.org');
});
it('return a valid url if missing args', () => {
diff --git a/test/unit/transforms/svgTransform.js b/test/unit/transforms/svgTransform.cjs
similarity index 74%
rename from test/unit/transforms/svgTransform.js
rename to test/unit/transforms/svgTransform.cjs
index b04e19d1f9..63d2377be1 100644
--- a/test/unit/transforms/svgTransform.js
+++ b/test/unit/transforms/svgTransform.cjs
@@ -1,4 +1,4 @@
-const vueJest = require('vue-jest/lib/template-compiler');
+const vueJest = require('@vue/vue3-jest/lib/template-compiler');
module.exports = {
process(content) {
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000000..58d513b070
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,125 @@
+import path from 'path';
+import { fileURLToPath } from 'url';
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import GitRevisionPlugin from 'git-revision-webpack-plugin';
+import graphQLLoader from 'vite-plugin-graphql-loader';
+// import htmlPurge from 'vite-plugin-html-purgecss';
+import legacy from '@vitejs/plugin-legacy';
+import svgLoader from 'vite-svg-loader';
+import svgStore from 'vite-plugin-svg-store';
+import autoprefixer from 'autoprefixer';
+import cssnano from 'cssnano';
+import tailwindcss from 'tailwindcss';
+
+const isProd = process.env.NODE_ENV === 'production';
+
+// Get git information
+const gitRevisionPlugin = new GitRevisionPlugin({
+ branch: true,
+ lightweightTags: true,
+});
+
+// resolve path
+const resolve = dir => path.resolve(path.dirname(fileURLToPath(import.meta.url)), dir);
+
+// asset regular expressions
+const binaryRegex = /binary\/.+\.bin/;
+const fontsRegex = /fonts\/.+\.(woff2?|eot|ttf|otf|svg)/;
+const iconsRegex = /icons\/(sprite\/.+|app-store|play-store)\.svg/;
+const imagesRegex = /images\/.+\.(png|jpe?g|gif|webp|avif|svg|ico)/;
+const mediaRegex = /media\/.+\.(mp4|webm|ogg|mp3|wav|flac|aac)/;
+const wasmRegex = /wasm\/.+\.wasm/;
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ assetsInclude: [
+ binaryRegex,
+ fontsRegex,
+ iconsRegex,
+ imagesRegex,
+ mediaRegex,
+ wasmRegex,
+ ],
+ base: '/static/',
+ build: {
+ assetsDir: 'static',
+ assetsInlineLimit: (filePath, content) => {
+ const size = content.length;
+ if (fontsRegex.test(filePath) || mediaRegex.test(filePath)) {
+ return size <= 10000;
+ }
+ if (imagesRegex.test(filePath)) {
+ return size <= 1; // could be 10000 but we'd need to exclude apple-touch-icons
+ }
+ // vite default
+ return size <= 4096;
+ },
+ },
+ css: {
+ postcss: {
+ plugins: isProd ? [
+ autoprefixer,
+ cssnano,
+ tailwindcss,
+ ] : [
+ tailwindcss,
+ ],
+ },
+ preprocessorOptions: {
+ scss: {
+ // Suppress deprecation warnings from node modules
+ quietDeps: true,
+ },
+ },
+ },
+ define: {
+ UI_COMMIT: JSON.stringify(gitRevisionPlugin.commithash()),
+ UI_BRANCH: JSON.stringify(gitRevisionPlugin.branch()),
+ UI_TAG: JSON.stringify(gitRevisionPlugin.version()),
+ },
+ plugins: [
+ vue({
+ template: {
+ compilerOptions: {
+ compatConfig: {
+ MODE: 3,
+ },
+ },
+ },
+ }),
+ // load .graphql and .gql files
+ graphQLLoader(),
+ // this is supposed to be equivalent to mini-css-extract-plugin, not sure if that's true
+ // htmlPurge(),
+ // polyfill for older browsers. requires terser
+ legacy(),
+ // load svg files as vue components
+ svgLoader({
+ svgoConfig: {
+ plugins: [
+ { name: 'removeTitle', active: false },
+ ],
+ },
+ }),
+ // svg icon sprite sheet
+ svgStore({
+ dirs: ['src/assets/icons/sprite'],
+ symbolId: 'icon-[name]',
+ optimizeOptions: {
+ floatPrecision: 3,
+ },
+ }),
+ ],
+ resolve: {
+ alias: {
+ // alias src directory
+ '#src': resolve('src'),
+ // alias promise module to handle timesync calling require('promise')
+ promise: resolve('build/promise.js'),
+ // required for src/components/Contentful/DynamicRichText.vue
+ vue$: 'vue/dist/vue.esm-browser.js',
+ },
+ extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json', '.vue'],
+ },
+});