diff --git a/.pnp.cjs b/.pnp.cjs index eaaaf1f6b..cd7f836b1 100644 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -46,6 +46,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@percy/cli", "npm:1.11.0"],\ ["@percy/cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@popperjs/core", "npm:2.11.6"],\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@twuni/emojify", "npm:1.0.2"],\ ["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@vue/test-utils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.1.0"],\ ["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.2"],\ @@ -2148,6 +2150,31 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["@rollup/pluginutils", [\ + ["npm:5.0.2", {\ + "packageLocation": "./.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\ + "packageDependencies": [\ + ["@rollup/pluginutils", "npm:5.0.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2", {\ + "packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-ca58d3a074/0/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\ + "packageDependencies": [\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@types/estree", "npm:1.0.0"],\ + ["@types/rollup", null],\ + ["estree-walker", "npm:2.0.2"],\ + ["picomatch", "npm:2.3.1"],\ + ["rollup", null]\ + ],\ + "packagePeers": [\ + "@types/rollup",\ + "rollup"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@sidvind/better-ajv-errors", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/@sidvind-better-ajv-errors-npm-2.0.0-3531bddef9-12b0d87855.zip/node_modules/@sidvind/better-ajv-errors/",\ @@ -2200,6 +2227,24 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["@twuni/emojify", [\ + ["npm:1.0.2", {\ + "packageLocation": "./.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip/node_modules/@twuni/emojify/",\ + "packageDependencies": [\ + ["@twuni/emojify", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/estree", [\ + ["npm:1.0.0", {\ + "packageLocation": "./.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/istanbul-lib-coverage", [\ ["npm:2.0.4", {\ "packageLocation": "./.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.4-734954bb56-a25d7589ee.zip/node_modules/@types/istanbul-lib-coverage/",\ @@ -8544,6 +8589,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@percy/cli", "npm:1.11.0"],\ ["@percy/cypress", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@popperjs/core", "npm:2.11.6"],\ + ["@rollup/pluginutils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.0.2"],\ + ["@twuni/emojify", "npm:1.0.2"],\ ["@vitejs/plugin-vue", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:3.1.2"],\ ["@vue/test-utils", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:2.1.0"],\ ["bootstrap", "virtual:dc3fc578bfa5e06182a4d2be39ede0bc5b74940b1ffe0d70c26892ab140a4699787750fba175dc306292e80b4aa2c8c5f68c2a821e69b2c37e360c0dff36ff66#npm:5.2.2"],\ diff --git a/.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip b/.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip new file mode 100644 index 000000000..d898c5035 Binary files /dev/null and b/.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip differ diff --git a/.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip b/.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip new file mode 100644 index 000000000..4bcf04a90 Binary files /dev/null and b/.yarn/cache/@twuni-emojify-npm-1.0.2-a45d6eb0a7-0044c83b05.zip differ diff --git a/.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip b/.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip new file mode 100644 index 000000000..8b03b040a Binary files /dev/null and b/.yarn/cache/@types-estree-npm-1.0.0-eddde5b631-910d97fb70.zip differ diff --git a/client/agenda/AgendaMobileBar.vue b/client/agenda/AgendaMobileBar.vue index 423647cdf..201d51794 100644 --- a/client/agenda/AgendaMobileBar.vue +++ b/client/agenda/AgendaMobileBar.vue @@ -31,7 +31,7 @@ import { } from 'naive-ui' import { useAgendaStore } from './store' -import { useSiteStore } from '../shared/store'; +import { useSiteStore } from '../shared/store' import { getUrl } from '../shared/urls' // MESSAGE PROVIDER diff --git a/client/components/ChatLog.vue b/client/components/ChatLog.vue index 779734f91..d393b1866 100644 --- a/client/components/ChatLog.vue +++ b/client/components/ChatLog.vue @@ -22,6 +22,8 @@ diff --git a/client/shared/colors.scss b/client/shared/colors.scss new file mode 100644 index 000000000..e34c459e9 --- /dev/null +++ b/client/shared/colors.scss @@ -0,0 +1,139 @@ +// Bootstrap 5 Color Variables +// Extracted from https://github.com/twbs/bootstrap/blob/main/scss/_variables.scss +// Copyright (c) 2011-2022 Twitter, Inc. +// Copyright (c) 2011-2022 The Bootstrap Authors + +// Tint a color: mix a color with white +@function tint-color($color, $weight) { + @return mix(white, $color, $weight); +} + +// Shade a color: mix a color with black +@function shade-color($color, $weight) { + @return mix(black, $color, $weight); +} + +// Color system + +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; + +$blue: #0d6efd !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #d63384 !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #198754 !default; +$teal: #20c997 !default; +$cyan: #0dcaf0 !default; + +$blue-100: tint-color($blue, 80%) !default; +$blue-200: tint-color($blue, 60%) !default; +$blue-300: tint-color($blue, 40%) !default; +$blue-400: tint-color($blue, 20%) !default; +$blue-500: $blue !default; +$blue-600: shade-color($blue, 20%) !default; +$blue-700: shade-color($blue, 40%) !default; +$blue-800: shade-color($blue, 60%) !default; +$blue-900: shade-color($blue, 80%) !default; + +$indigo-100: tint-color($indigo, 80%) !default; +$indigo-200: tint-color($indigo, 60%) !default; +$indigo-300: tint-color($indigo, 40%) !default; +$indigo-400: tint-color($indigo, 20%) !default; +$indigo-500: $indigo !default; +$indigo-600: shade-color($indigo, 20%) !default; +$indigo-700: shade-color($indigo, 40%) !default; +$indigo-800: shade-color($indigo, 60%) !default; +$indigo-900: shade-color($indigo, 80%) !default; + +$purple-100: tint-color($purple, 80%) !default; +$purple-200: tint-color($purple, 60%) !default; +$purple-300: tint-color($purple, 40%) !default; +$purple-400: tint-color($purple, 20%) !default; +$purple-500: $purple !default; +$purple-600: shade-color($purple, 20%) !default; +$purple-700: shade-color($purple, 40%) !default; +$purple-800: shade-color($purple, 60%) !default; +$purple-900: shade-color($purple, 80%) !default; + +$pink-100: tint-color($pink, 80%) !default; +$pink-200: tint-color($pink, 60%) !default; +$pink-300: tint-color($pink, 40%) !default; +$pink-400: tint-color($pink, 20%) !default; +$pink-500: $pink !default; +$pink-600: shade-color($pink, 20%) !default; +$pink-700: shade-color($pink, 40%) !default; +$pink-800: shade-color($pink, 60%) !default; +$pink-900: shade-color($pink, 80%) !default; + +$red-100: tint-color($red, 80%) !default; +$red-200: tint-color($red, 60%) !default; +$red-300: tint-color($red, 40%) !default; +$red-400: tint-color($red, 20%) !default; +$red-500: $red !default; +$red-600: shade-color($red, 20%) !default; +$red-700: shade-color($red, 40%) !default; +$red-800: shade-color($red, 60%) !default; +$red-900: shade-color($red, 80%) !default; + +$orange-100: tint-color($orange, 80%) !default; +$orange-200: tint-color($orange, 60%) !default; +$orange-300: tint-color($orange, 40%) !default; +$orange-400: tint-color($orange, 20%) !default; +$orange-500: $orange !default; +$orange-600: shade-color($orange, 20%) !default; +$orange-700: shade-color($orange, 40%) !default; +$orange-800: shade-color($orange, 60%) !default; +$orange-900: shade-color($orange, 80%) !default; + +$yellow-100: tint-color($yellow, 80%) !default; +$yellow-200: tint-color($yellow, 60%) !default; +$yellow-300: tint-color($yellow, 40%) !default; +$yellow-400: tint-color($yellow, 20%) !default; +$yellow-500: $yellow !default; +$yellow-600: shade-color($yellow, 20%) !default; +$yellow-700: shade-color($yellow, 40%) !default; +$yellow-800: shade-color($yellow, 60%) !default; +$yellow-900: shade-color($yellow, 80%) !default; + +$green-100: tint-color($green, 80%) !default; +$green-200: tint-color($green, 60%) !default; +$green-300: tint-color($green, 40%) !default; +$green-400: tint-color($green, 20%) !default; +$green-500: $green !default; +$green-600: shade-color($green, 20%) !default; +$green-700: shade-color($green, 40%) !default; +$green-800: shade-color($green, 60%) !default; +$green-900: shade-color($green, 80%) !default; + +$teal-100: tint-color($teal, 80%) !default; +$teal-200: tint-color($teal, 60%) !default; +$teal-300: tint-color($teal, 40%) !default; +$teal-400: tint-color($teal, 20%) !default; +$teal-500: $teal !default; +$teal-600: shade-color($teal, 20%) !default; +$teal-700: shade-color($teal, 40%) !default; +$teal-800: shade-color($teal, 60%) !default; +$teal-900: shade-color($teal, 80%) !default; + +$cyan-100: tint-color($cyan, 80%) !default; +$cyan-200: tint-color($cyan, 60%) !default; +$cyan-300: tint-color($cyan, 40%) !default; +$cyan-400: tint-color($cyan, 20%) !default; +$cyan-500: $cyan !default; +$cyan-600: shade-color($cyan, 20%) !default; +$cyan-700: shade-color($cyan, 40%) !default; +$cyan-800: shade-color($cyan, 60%) !default; +$cyan-900: shade-color($cyan, 80%) !default; diff --git a/client/shared/urls.js b/client/shared/urls.js index b60d656fe..ba84dc2ff 100644 --- a/client/shared/urls.js +++ b/client/shared/urls.js @@ -1,20 +1,8 @@ -import template from 'lodash-es/template' -import transform from 'lodash-es/transform' - -const urls = { - bofDefinition: 'https://www.ietf.org/how/bofs/', - meetingCalIcs: '/meeting/{meetingNumber}/agenda.ics', - meetingDetails: '/meeting/{meetingNumber}/session/{eventAcronym}/', - meetingMaterialsPdf: '/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.pdf', - meetingMaterialsTar: '/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.tgz', - meetingMeetechoRecordings: 'https://www.meetecho.com/ietf{meetingNumber}/recordings#{eventAcronym}', - meetingNotes: 'https://notes.ietf.org/notes-ietf-{meetingNumber}-{eventAcronym}' -} - -const interpolate = /{([\s\S]+?)}/g -const compiled = transform(urls, (result, value, key) => { - result[key] = template(value, { interpolate }) -}, {}) +/** + * DO NOT add the urls here directly. Edit the urls.json file instead. + * The urls are automatically precompiled into the variable below at build time. + */ +const urls = { /* __COMPILED_URLS__ */ } /** * Get an URL and replace tokens with provided values. @@ -25,6 +13,6 @@ const compiled = transform(urls, (result, value, key) => { */ export const getUrl = (key, tokens = {}) => { if (!key) { throw new Error('Must provide a key for getUrl()') } - if (!compiled[key]) { throw new Error('Invalid getUrl() key') } - return compiled[key](tokens) + if (!urls[key]) { throw new Error('Invalid getUrl() key') } + return urls[key](tokens) } diff --git a/client/shared/urls.json b/client/shared/urls.json new file mode 100644 index 000000000..285caa07d --- /dev/null +++ b/client/shared/urls.json @@ -0,0 +1,9 @@ +{ + "bofDefinition": "https://www.ietf.org/how/bofs/", + "meetingCalIcs": "/meeting/{meetingNumber}/agenda.ics", + "meetingDetails": "/meeting/{meetingNumber}/session/{eventAcronym}/", + "meetingMaterialsPdf": "/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.pdf", + "meetingMaterialsTar": "/meeting/{meetingNumber}/agenda/{eventAcronym}-drafts.tgz", + "meetingMeetechoRecordings": "https://www.meetecho.com/ietf{meetingNumber}/recordings#{eventAcronym}", + "meetingNotes": "https://notes.ietf.org/notes-ietf-{meetingNumber}-{eventAcronym}" +} diff --git a/dev/vite-plugins/precompile-lodash-templates.js b/dev/vite-plugins/precompile-lodash-templates.js new file mode 100644 index 000000000..2b2b7d54f --- /dev/null +++ b/dev/vite-plugins/precompile-lodash-templates.js @@ -0,0 +1,28 @@ +import { createFilter } from '@rollup/pluginutils' +import template from 'lodash/template' +import transform from 'lodash/transform' +import fs from 'fs/promises' + +export default function precompileLodashTemplates(options = {}) { + const filter = createFilter(options.include, options.exclude) + return { + name: 'precompile-lodash-templates', + enforce: 'pre', + async transform(code, id) { + if (!filter(id)) { return } + + const jsonPath = `${id}on` + const urls = JSON.parse(await fs.readFile(jsonPath, { encoding: 'utf8' })) + + const interpolate = /{([\s\S]+?)}/g + const compiledUrls = transform(urls, (result, value, key) => { + result.push(`"${key}": ${template(value.replaceAll('{', '{data.'), { interpolate, variable: 'data' }).source.replace('function(obj)', '(obj) =>')}`) + }, []) + + return { + code: code.replace('/* __COMPILED_URLS__ */', compiledUrls.join(',\n')), + map: null + } + } + } +} diff --git a/docker/scripts/app-rsync-extras.sh b/docker/scripts/app-rsync-extras.sh index ef6966224..b99082b53 100755 --- a/docker/scripts/app-rsync-extras.sh +++ b/docker/scripts/app-rsync-extras.sh @@ -43,7 +43,6 @@ cat << EOF > "$EXCLUDE" *.doc *.exe *.html -*.json *.mib *.new *.p7s diff --git a/ietf/dbtemplate/fixtures/nomcom_templates.xml b/ietf/dbtemplate/fixtures/nomcom_templates.xml index 369cad73c..dbaa7df3e 100644 --- a/ietf/dbtemplate/fixtures/nomcom_templates.xml +++ b/ietf/dbtemplate/fixtures/nomcom_templates.xml @@ -41,7 +41,7 @@ You have been nominated for the position of $position. The NomCom would appreciate receiving an indication of whether or not you accept this nomination to stand for consideration as a candidate for this position. -You can accept the nomination via web going to the following link http://$domain$accept_url or decline the nomination going the following link http://$domain$decline_url +You can accept the nomination via web going to the following link https://$domain$accept_url or decline the nomination going the following link https://$domain$decline_url If you accept, you will need to fill out a questionnaire. You will receive the questionnaire by email. @@ -107,7 +107,7 @@ You have been nominated for the position of $position. The NomCom would appreciate receiving an indication of whether or not you accept this nomination to stand for consideration as a candidate for this position. -You can accept the nomination via web going to the following link http://$domain$accept_url or decline the nomination going the following link http://$domain$decline_url +You can accept the nomination via web going to the following link https://$domain$accept_url or decline the nomination going the following link https://$domain$decline_url If you accept, you will need to fill out a questionnaire. diff --git a/ietf/doc/utils.py b/ietf/doc/utils.py index 65666ab6c..041d38895 100644 --- a/ietf/doc/utils.py +++ b/ietf/doc/utils.py @@ -1308,6 +1308,8 @@ def fuzzy_find_documents(name, rev=None): document. """ # Handle special case name formats + if re.match(r"^\s*rfc", name, flags=re.IGNORECASE): + name = re.sub(r"\s+", "", name.lower()) if name.startswith('rfc0'): name = "rfc" + name[3:].lstrip('0') if name.startswith('review-') and re.search(r'-\d\d\d\d-\d\d$', name): @@ -1318,8 +1320,6 @@ def fuzzy_find_documents(name, rev=None): rev = rev[-2:] if re.match("^[0-9]+$", name): name = f'rfc{name}' - if re.match("^[Rr][Ff][Cc] [0-9]+$",name): - name = f'rfc{name[4:]}' # see if we can find a document using this name docs = Document.objects.filter(docalias__name=name, type_id='draft') diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index 50712f9aa..3227771af 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -425,7 +425,7 @@ def make_nomineeposition_for_newperson(nomcom, candidate_name, candidate_email, return make_nomineeposition(nomcom, email.person, position, author) -def getheader(header_text, default="ascii"): +def getheader(header_text, default="utf-8"): """Decode the specified header""" tuples = decode_header(header_text) @@ -433,7 +433,7 @@ def getheader(header_text, default="ascii"): return "".join(header_sections) -def get_charset(message, default="ascii"): +def get_charset(message, default="utf-8"): """Get the message charset""" if message.get_content_charset(): diff --git a/ietf/templates/group/meetings.html b/ietf/templates/group/meetings.html index f58f8840b..fbbfd661f 100644 --- a/ietf/templates/group/meetings.html +++ b/ietf/templates/group/meetings.html @@ -1,6 +1,5 @@ {% extends "group/group_base.html" %} -{# Copyright The IETF Trust 2015, All Rights Reserved #} -{# TODO: Add text noting that dates and weekdays are displayed in each meeting's timezone #} +{# Copyright The IETF Trust 2015-2022, All Rights Reserved #} {% load origin %} {% block title %} Meetings @@ -86,6 +85,7 @@ {% endif %}

- This page shows meetings within the last four years. For earlier meetings, please see the proceedings. + This page shows meetings within the last four years. For earlier meetings, please see the + proceedings.

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index 944255046..98f45aa38 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -73,25 +73,13 @@ body { right: 0; z-index: 1000000000; } - -#app-loading-footer > a { - text-decoration: none; - font-weight: 500; - font-size: .9em; - color: #0aa2c0; - display: inline-block; - padding: 8px 16px; - background-color: #F9F9F9; - border-radius: 5px; - margin-bottom: 12px; -} {% endblock %} {% block content %} {% origin %}
{% endblock %} diff --git a/package.json b/package.json index aeb0ff128..d96c37b0a 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@fullcalendar/timegrid": "5.11.3", "@fullcalendar/vue3": "5.11.2", "@popperjs/core": "2.11.6", + "@twuni/emojify": "1.0.2", "bootstrap": "5.2.2", "bootstrap-icons": "1.9.1", "browser-fs-access": "0.31.1", @@ -58,6 +59,7 @@ "@parcel/transformer-sass": "2.7.0", "@percy/cli": "1.11.0", "@percy/cypress": "3.1.2", + "@rollup/pluginutils": "5.0.2", "@vitejs/plugin-vue": "3.1.2", "@vue/test-utils": "2.1.0", "browserlist": "latest", diff --git a/vite.config.js b/vite.config.js index c7e81bc16..41a2cb02e 100644 --- a/vite.config.js +++ b/vite.config.js @@ -2,6 +2,7 @@ import { defineConfig } from 'vite' import { resolve } from 'path' import vue from '@vitejs/plugin-vue' import servePreviewAssets from './dev/vite-plugins/serve-preview-assets' +import precompileLodashTemplates from './dev/vite-plugins/precompile-lodash-templates' // https://vitejs.dev/config/ export default defineConfig(({ command, mode }) => { @@ -19,7 +20,12 @@ export default defineConfig(({ command, mode }) => { }, cacheDir: '.vite', plugins: [ - vue() + vue(), + precompileLodashTemplates({ + include: [ + '**/shared/urls.js' + ] + }) ], publicDir: 'ietf/static/public', server: { diff --git a/yarn.lock b/yarn.lock index 0a1120953..dda4f64ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1668,6 +1668,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:5.0.2": + version: 5.0.2 + resolution: "@rollup/pluginutils@npm:5.0.2" + dependencies: + "@types/estree": ^1.0.0 + estree-walker: ^2.0.2 + picomatch: ^2.3.1 + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: edea15e543bebc7dcac3b0ac8bc7b8e8e6dbd46e2864dbe5dd28072de1fbd5b0e10d545a610c0edaa178e8a7ac432e2a2a52e547ece1308471412caba47db8ce + languageName: node + linkType: hard + "@sidvind/better-ajv-errors@npm:^2.0.0": version: 2.0.0 resolution: "@sidvind/better-ajv-errors@npm:2.0.0" @@ -1703,6 +1719,20 @@ __metadata: languageName: node linkType: hard +"@twuni/emojify@npm:1.0.2": + version: 1.0.2 + resolution: "@twuni/emojify@npm:1.0.2" + checksum: 0044c83b0589767dae1c1bb933cd56f2e5031a438f0fc993413e4cc229080e29c275cdd836be33ee02ddd59a5d1d6223a718685650f11ecfffc69c881c072152 + languageName: node + linkType: hard + +"@types/estree@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -7114,6 +7144,8 @@ browserlist@latest: "@percy/cli": 1.11.0 "@percy/cypress": 3.1.2 "@popperjs/core": 2.11.6 + "@rollup/pluginutils": 5.0.2 + "@twuni/emojify": 1.0.2 "@vitejs/plugin-vue": 3.1.2 "@vue/test-utils": 2.1.0 bootstrap: 5.2.2