@govuk-one-login/frontend-ui 4.1.4 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/build/all.css +1 -0
  2. package/build/cjs/backend/index.cjs +257 -0
  3. package/build/cjs/backend/index.d.cts +39 -0
  4. package/build/cjs/backend/index.d.ts +39 -0
  5. package/build/cjs/backend/index.d.ts.map +1 -0
  6. package/build/cjs/backend/lib/helmet.d.ts +31 -0
  7. package/build/cjs/backend/lib/helmet.d.ts.map +1 -0
  8. package/build/cjs/backend/lib/index.d.ts +4 -0
  9. package/build/cjs/backend/lib/index.d.ts.map +1 -0
  10. package/build/cjs/backend/lib/locals.d.ts +11 -0
  11. package/build/cjs/backend/lib/locals.d.ts.map +1 -0
  12. package/build/cjs/backend/lib/settings.d.ts +21 -0
  13. package/build/cjs/backend/lib/settings.d.ts.map +1 -0
  14. package/build/cjs/backend/utils/logger.d.ts +9 -0
  15. package/build/cjs/backend/utils/logger.d.ts.map +1 -0
  16. package/build/cjs/frontend/index.cjs +443 -0
  17. package/build/cjs/frontend/index.d.cts +4 -0
  18. package/build/cjs/frontend/index.d.ts +4 -0
  19. package/build/cjs/frontend/index.d.ts.map +1 -0
  20. package/build/cjs/frontend/progress-button/progress-button.d.ts +2 -0
  21. package/build/cjs/frontend/progress-button/progress-button.d.ts.map +1 -0
  22. package/build/cjs/frontend/spinner/__tests__/spinner.test.d.ts +2 -0
  23. package/build/cjs/frontend/spinner/__tests__/spinner.test.d.ts.map +1 -0
  24. package/build/cjs/frontend/spinner/spinner.d.ts +64 -0
  25. package/build/cjs/frontend/spinner/spinner.d.ts.map +1 -0
  26. package/build/cjs/frontend/utils/types.d.ts +108 -0
  27. package/build/cjs/frontend/utils/types.d.ts.map +1 -0
  28. package/build/components/_all.scss +6 -0
  29. package/build/components/bases/auth/auth-base.njk +136 -0
  30. package/build/components/bases/home/home-base.njk +133 -0
  31. package/build/components/bases/identity/identity-base-form.njk +123 -0
  32. package/build/components/bases/identity/identity-base-page.njk +123 -0
  33. package/build/components/bases/ipv-core/ipv-core-base.njk +172 -0
  34. package/build/components/bases/mobile/mobile-base.njk +195 -0
  35. package/build/components/cookie-banner/cookie-banner.yaml +6 -0
  36. package/build/components/cookie-banner/macro.njk +1 -0
  37. package/build/components/cookie-banner/template.njk +106 -0
  38. package/build/components/footer/_index.scss +28 -0
  39. package/build/components/footer/footer.yaml +5 -0
  40. package/build/components/footer/macro.njk +1 -0
  41. package/build/components/footer/template.njk +12 -0
  42. package/build/components/header/README.md +34 -0
  43. package/build/components/header/_index.scss +102 -0
  44. package/build/components/header/header.yaml +16 -0
  45. package/build/components/header/macro.njk +3 -0
  46. package/build/components/header/template.njk +39 -0
  47. package/build/components/language-select/_index.scss +35 -0
  48. package/build/components/language-select/language-select.yaml +43 -0
  49. package/build/components/language-select/macro.njk +2 -0
  50. package/build/components/language-select/template.njk +38 -0
  51. package/build/components/macros/logo.njk +75 -0
  52. package/build/components/phase-banner/_index.scss +28 -0
  53. package/build/components/phase-banner/macro.njk +3 -0
  54. package/build/components/phase-banner/phase-banner.yaml +17 -0
  55. package/build/components/phase-banner/tag/macro.njk +3 -0
  56. package/build/components/phase-banner/tag/template.njk +3 -0
  57. package/build/components/phase-banner/template.njk +26 -0
  58. package/build/components/progress-button/_index.scss +51 -0
  59. package/build/components/progress-button/macro.njk +2 -0
  60. package/build/components/progress-button/progress-button.yaml +13 -0
  61. package/build/components/progress-button/template.njk +112 -0
  62. package/build/components/skip-link/README.md +10 -0
  63. package/build/components/skip-link/macro.njk +3 -0
  64. package/build/components/skip-link/skip-link.yaml +5 -0
  65. package/build/components/skip-link/template.njk +14 -0
  66. package/build/components/spinner/README.md +130 -0
  67. package/build/components/spinner/_index.scss +55 -0
  68. package/build/components/spinner/macro.njk +3 -0
  69. package/build/components/spinner/template.njk +18 -0
  70. package/build/esm/backend/index.d.ts +39 -0
  71. package/build/esm/backend/index.d.ts.map +1 -0
  72. package/build/esm/backend/index.js +247 -0
  73. package/build/esm/backend/lib/helmet.d.ts +31 -0
  74. package/build/esm/backend/lib/helmet.d.ts.map +1 -0
  75. package/build/esm/backend/lib/index.d.ts +4 -0
  76. package/build/esm/backend/lib/index.d.ts.map +1 -0
  77. package/build/esm/backend/lib/locals.d.ts +11 -0
  78. package/build/esm/backend/lib/locals.d.ts.map +1 -0
  79. package/build/esm/backend/lib/settings.d.ts +21 -0
  80. package/build/esm/backend/lib/settings.d.ts.map +1 -0
  81. package/build/esm/backend/utils/logger.d.ts +9 -0
  82. package/build/esm/backend/utils/logger.d.ts.map +1 -0
  83. package/build/esm/frontend/index.d.ts +4 -0
  84. package/build/esm/frontend/index.d.ts.map +1 -0
  85. package/build/esm/frontend/index.js +440 -0
  86. package/build/esm/frontend/progress-button/progress-button.d.ts +2 -0
  87. package/build/esm/frontend/progress-button/progress-button.d.ts.map +1 -0
  88. package/build/esm/frontend/spinner/__tests__/spinner.test.d.ts +2 -0
  89. package/build/esm/frontend/spinner/__tests__/spinner.test.d.ts.map +1 -0
  90. package/build/esm/frontend/spinner/spinner.d.ts +64 -0
  91. package/build/esm/frontend/spinner/spinner.d.ts.map +1 -0
  92. package/build/esm/frontend/utils/types.d.ts +108 -0
  93. package/build/esm/frontend/utils/types.d.ts.map +1 -0
  94. package/package.json +1 -2
package/build/all.css ADDED
@@ -0,0 +1 @@
1
+ @media(max-width: 640px){.govuk-header__navigation-item{border-left:none !important}.govuk-template--rebranded .govuk-header__navigation-list{padding-bottom:0px !important}.govuk-header__navigation-item{padding-top:8px !important}}.frontendUi_header_signOut-item{padding:5px 0px 5px 30px;border-left:1px solid #b1b4b6;margin-left:auto}.frontendUi_header_signOut-item--rebrand{border-left:none;padding:5px 0px 5px 0px;margin-left:auto;font-weight:700 !important}.frontendUi_header__signOut{display:flex;flex-wrap:wrap}.frontendUi-header__content{margin-left:auto}.govuk-header__navigation--signOut{padding:15px 0 15px !important}.govuk-template--rebranded .govuk-header__navigation{padding:15px 0 15px !important}@media(max-width: 640px){.govuk-header__navigation--signOut{padding:18px 0 8px !important}.govuk-template--rebranded .govuk-header__navigation{padding:18px 0 8px !important}}.govuk-template--rebranded .govuk-header__navigation-item a{font-weight:700 !important}.govuk-template--rebranded .govuk-header__navigation-item{padding-top:5px !important}@media(min-width: 20em)and (max-width: 48.0525em){.govuk-template--rebranded .govuk-header__navigation-list{padding-bottom:0px}}@media(max-width: 323px){.govuk-header__logo{padding-right:5px}.frontendUi_header_signOut-item{padding-left:0px}}@media(max-width: 261px){.frontendUi-header__content{margin-left:unset}.govuk-template--rebranded .govuk-header__navigation{padding:0px 0 8px !important}.govuk-header__logotype{max-width:100%;max-height:auto}.govuk-template--rebranded .govuk-header__logo{padding-top:5% !important;padding-bottom:5% !important}}.govuk-tag{font-size:16px;font-weight:bold;line-height:1;display:inline-block;padding-top:5px;padding-right:8px;padding-bottom:4px;padding-left:8px;outline:2px solid rgba(0,0,0,0);outline-offset:-2px;color:#fff !important;background-color:#1d70b8 !important;letter-spacing:1px !important;text-decoration:none !important;text-transform:uppercase !important}@media(max-width: 256px){.govuk-phase-banner__content{display:block}}.language-select{margin:15px 0 15px 0}.language-select__list{margin-top:1em;text-align:right}.language-select__list-item{display:inline-block}.language-select__list-item:first-child::after{content:"";display:inline-block;position:relative;top:.1875em;height:1em;border-right:.09375em solid #000}.language-select__list-item a,.language-select__list-item [aria-current]{padding:.3125em}@media screen and (max-width: 641px){.language-select__list{float:none;text-align:left;padding-bottom:10px;border-bottom:1px solid #b1b4b6}}.spinner{width:80px;height:80px;border-radius:50%;border-width:12px;border-style:solid;border-color:#dee0e2;border-top-color:#005ea5;margin-bottom:15px}@media(forced-colors: active){.spinner{forced-color-adjust:none;border-top-color:rgba(0,0,0,0) !important}}@media not (prefers-reduced-motion){.spinner{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}}@media(prefers-reduced-motion){.spinner{transform:rotate(0.125turn)}}.spinner__finished{border-color:#005ea5;-webkit-animation:none;animation:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.centre{margin-left:auto;margin-right:auto;text-align:center;display:block}@media(max-width: 256px){.govuk-footer__crown{max-width:100%;max-height:auto}}.govuk-footer{padding-top:25px;padding-bottom:15px;border-top:1px solid #b1b4b6;color:#0b0c0c;background:#f3f2f1}.govuk-template--rebranded .govuk-footer{border-top:10px solid #1d70b8;background:#f4f8fb}.govuk-footer__copyright-logo::before{background:#6e777a}.govuk-template--rebranded .govuk-footer__copyright-logo::before{background:currentcolor}.govuk-button--progress{position:relative}.govuk-button--progress-loading{background-color:#505a5f !important;color:#fff !important;pointer-events:none !important;padding-left:40px !important}@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.govuk-button--progress-loading::before{content:"";border:3px solid hsla(0,0%,100%,.35);border-top:3px solid #fff;border-radius:50%;width:20px;height:20px;animation:rotate 1s infinite linear;position:absolute;top:12% !important;left:8px}.govuk-progress-button--disabled{opacity:1 !important}@media(prefers-reduced-motion: reduce){.govuk-button--progress-loading{padding-left:10px !important}.govuk-button--progress-loading::before{display:none}}
@@ -0,0 +1,257 @@
1
+ 'use strict';
2
+
3
+ var path = require('node:path');
4
+ var node_fs = require('node:fs');
5
+
6
+ var cookieBanner$1 = {
7
+ body1: "Rydym yn defnyddio rhai cwcis hanfodol i wneud i'r gwasanaeth hwn weithio.",
8
+ body2: "Hoffem osod cwcis ychwanegol er mwyn i ni allu cofio eich gosodiadau, deall sut mae pobl yn defnyddio'r gwasanaeth a gwneud gwelliannau.",
9
+ ariaLabel: "Cwcis ar GOV.UK One Login",
10
+ headingText: "Cwcis ar GOV.UK One Login",
11
+ acceptAdditionalCookies: "Derbyn cwcis ychwanegol",
12
+ rejectAdditionalCookies: "Gwrthod cwcis ychwanegol",
13
+ viewCookies: "Gweld cwcis",
14
+ cookieBannerAccept: {
15
+ body1: "Rydych wedi derbyn cwcis ychwanegol. Gallwch ",
16
+ body2: " ar unrhyw adeg."
17
+ },
18
+ cookieBannerReject: {
19
+ body1: "Rydych wedi gwrthod cwcis ychwanegol. Gallwch ",
20
+ body2: " ar unrhyw adeg."
21
+ },
22
+ changeCookiePreferencesLink: "newid eich gosodiadau cwcis",
23
+ hideCookieMessage: "Cuddio’r neges yma",
24
+ viewCookiesLink: "https://signin.account.gov.uk/cookies"
25
+ };
26
+ var footer$1 = {
27
+ footerNavItems: [
28
+ {
29
+ href: "https://signin.account.gov.uk/accessibility-statement",
30
+ text: "Datganiad hygyrchedd"
31
+ },
32
+ {
33
+ href: "https://signin.account.gov.uk/cookies",
34
+ text: "Cwcis"
35
+ },
36
+ {
37
+ href: "https://signin.account.gov.uk/terms-and-conditions",
38
+ text: "Telerau ac amodau"
39
+ },
40
+ {
41
+ href: "https://www.gov.uk/government/publications/govuk-one-login-privacy-notice",
42
+ text: "Hysbysiad preifatrwydd"
43
+ },
44
+ {
45
+ href: "https://home.account.gov.uk/contact-gov-uk-one-login",
46
+ text: "Cymorth (agor mewn tab newydd)",
47
+ attributes: {
48
+ rel: "noreferrer noopener",
49
+ target: "_blank"
50
+ }
51
+ }
52
+ ],
53
+ copyright: {
54
+ text: "© Hawlfraint y goron"
55
+ },
56
+ contentLicence: {
57
+ html: "Mae'r holl gynnwys ar gael o dan <a class=\"govuk-footer__link\" href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence-cymraeg/version/3/\" rel=\"licence\">Trwydded Llywodraeth Agored v3.0</a>, oni nodir yn wahanol"
58
+ }
59
+ };
60
+ var header$1 = {
61
+ signOut: "Allgofnodi",
62
+ ariaLabel: "GOV.UK One Login dewislen",
63
+ signOutAriaLabel: "Allgofnodi"
64
+ };
65
+ var languageSelect$1 = {
66
+ ariaLabel: "Switcher iaith"
67
+ };
68
+ var phaseBanner$1 = {
69
+ tag: "BETA",
70
+ text: "Mae hwn yn wasanaeth newydd. Helpwch ni i'w wella a ",
71
+ link: "rhoi eich adborth (agor mewn tab newydd)"
72
+ };
73
+ var skipLink$1 = {
74
+ title: "Neidio i'r prif gynnwys"
75
+ };
76
+ var progressButton$1 = {
77
+ text: "Parhau",
78
+ waitingText: "Aros",
79
+ longWaitingText: "Parhau i aros",
80
+ noJavascriptMessage: "Gall gymryd hyd at 10 eiliad i barhau i'r dudalen nesaf. Ar ôl i chi barhau, peidiwch ag ail-lwytho na chau'r dudalen hon."
81
+ };
82
+ var translationCy = {
83
+ cookieBanner: cookieBanner$1,
84
+ footer: footer$1,
85
+ header: header$1,
86
+ languageSelect: languageSelect$1,
87
+ phaseBanner: phaseBanner$1,
88
+ skipLink: skipLink$1,
89
+ progressButton: progressButton$1
90
+ };
91
+
92
+ var cookieBanner = {
93
+ body1: "We use some essential cookies to make this service work.",
94
+ body2: "We'd like to set additional cookies so we can remember your settings, understand how people use the service and make improvements.",
95
+ ariaLabel: "Cookies on GOV.UK One Login",
96
+ headingText: "Cookies on GOV.UK One Login",
97
+ acceptAdditionalCookies: "Accept additional cookies",
98
+ rejectAdditionalCookies: "Reject additional cookies",
99
+ viewCookies: "View cookies",
100
+ cookieBannerAccept: {
101
+ body1: "You've accepted additional cookies. You can ",
102
+ body2: " at any time."
103
+ },
104
+ cookieBannerReject: {
105
+ body1: "You've rejected additional cookies. You can ",
106
+ body2: " at any time."
107
+ },
108
+ changeCookiePreferencesLink: "change your cookie settings",
109
+ hideCookieMessage: "Hide this message",
110
+ viewCookiesLink: "https://signin.account.gov.uk/cookies"
111
+ };
112
+ var footer = {
113
+ footerNavItems: [
114
+ {
115
+ href: "https://signin.account.gov.uk/accessibility-statement",
116
+ text: "Accessibility statement"
117
+ },
118
+ {
119
+ href: "https://signin.account.gov.uk/cookies",
120
+ text: "Cookies"
121
+ },
122
+ {
123
+ href: "https://signin.account.gov.uk/terms-and-conditions",
124
+ text: "Terms and conditions"
125
+ },
126
+ {
127
+ href: "https://www.gov.uk/government/publications/govuk-one-login-privacy-notice",
128
+ text: "Privacy notice"
129
+ },
130
+ {
131
+ href: "https://home.account.gov.uk/contact-gov-uk-one-login",
132
+ text: "Support (opens in new tab)",
133
+ attributes: {
134
+ rel: "noreferrer noopener",
135
+ target: "_blank"
136
+ }
137
+ }
138
+ ],
139
+ copyright: {
140
+ text: "© Crown copyright"
141
+ },
142
+ contentLicence: {
143
+ html: "All content is available under the <a class=\"govuk-footer__link\" href=\"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/\" rel=\"licence\">Open Government Licence v3.0</a>, except where otherwise stated"
144
+ }
145
+ };
146
+ var header = {
147
+ signOut: "Sign Out",
148
+ ariaLabel: "GOV.UK One Login menu",
149
+ signOutAriaLabel: "Sign out"
150
+ };
151
+ var languageSelect = {
152
+ ariaLabel: "Select language"
153
+ };
154
+ var phaseBanner = {
155
+ tag: "BETA",
156
+ text: "This is a new service. Help us improve it and ",
157
+ link: "give your feedback (opens in a new tab)"
158
+ };
159
+ var skipLink = {
160
+ title: "Skip to main content"
161
+ };
162
+ var progressButton = {
163
+ text: "Continue",
164
+ waitingText: "Wait",
165
+ longWaitingText: "Keep waiting",
166
+ noJavascriptMessage: "It can take up to 10 seconds to continue to the next page. After you continue, do not reload or close this page."
167
+ };
168
+ var translationEn = {
169
+ cookieBanner: cookieBanner,
170
+ footer: footer,
171
+ header: header,
172
+ languageSelect: languageSelect,
173
+ phaseBanner: phaseBanner,
174
+ skipLink: skipLink,
175
+ progressButton: progressButton
176
+ };
177
+
178
+ // Implementation
179
+ function frontendUiMiddleware(req, res, next) {
180
+ res.locals.translations = req.i18n.store.data[req.i18n.language];
181
+ res.locals.basePath = process.cwd();
182
+ next();
183
+ }
184
+ const setFrontendUiTranslations = (instanceI18n) => {
185
+ instanceI18n.addResourceBundle("en", "translation", translationEn, true, false);
186
+ instanceI18n.addResourceBundle("cy", "translation", translationCy, true, false);
187
+ };
188
+ const frontendUiMiddlewareIdentityBypass = (req, res, next) => {
189
+ const localTranslations = {
190
+ en: translationEn,
191
+ cy: translationCy,
192
+ };
193
+ const language = req.i18n.language;
194
+ res.locals.translations = localTranslations[language] || {};
195
+ res.locals.basePath = process.cwd();
196
+ next();
197
+ };
198
+ function addLanguageParam(language, url) {
199
+ if (!url) {
200
+ console.warn("URL is undefined. The parameter cannot be added, and the toggle will not work.");
201
+ return "#invalid-url-lang-toggle";
202
+ }
203
+ url.searchParams.set("lng", language);
204
+ return url.pathname + url.search;
205
+ }
206
+ function contactUsUrl(baseUrl, urlToAppend) {
207
+ if (!baseUrl) {
208
+ return null;
209
+ }
210
+ try {
211
+ const newUrl = new URL(urlToAppend); // Create a new URL object to modify
212
+ newUrl.search = ''; // Remove the query parameters
213
+ const encodedUrl = encodeURIComponent(newUrl.toString()); // Encode the entire URL
214
+ const searchParams = new URLSearchParams({ fromURL: encodedUrl });
215
+ return `${baseUrl}?${searchParams.toString()}`;
216
+ }
217
+ catch (_a) {
218
+ const encodedUrlToAppend = encodeURIComponent(urlToAppend);
219
+ const searchParams = new URLSearchParams({ fromURL: encodedUrlToAppend });
220
+ return `${baseUrl}?${searchParams.toString()}`;
221
+ }
222
+ }
223
+ const setBaseTranslations = (instanceI18n, filePath) => {
224
+ ["cy", "en"].forEach((locale) => {
225
+ instanceI18n.addResourceBundle(locale, "translation", getTranslationObject(locale, filePath));
226
+ });
227
+ };
228
+ const getTranslationObject = (locale, filepath) => {
229
+ const possiblePaths = [
230
+ path.resolve("locales", locale, "translation.json"),
231
+ path.resolve("src/locales", locale, "translation.json"),
232
+ path.resolve(filepath !== null && filepath !== void 0 ? filepath : "", locale, "translation.json"),
233
+ ];
234
+ for (const filePath of possiblePaths) {
235
+ if (node_fs.existsSync(filePath)) {
236
+ try {
237
+ const fileContent = node_fs.readFileSync(filePath, "utf8");
238
+ return JSON.parse(fileContent);
239
+ }
240
+ catch (error) {
241
+ console.error(`Error reading or parsing translation file at ${filePath}:`, error);
242
+ }
243
+ }
244
+ }
245
+ console.warn(`No translation file found for locale: ${locale}`);
246
+ return {}; // Return an empty object as a fallback
247
+ };
248
+
249
+ exports.addLanguageParam = addLanguageParam;
250
+ exports.contactUsUrl = contactUsUrl;
251
+ exports.frontendUiMiddleware = frontendUiMiddleware;
252
+ exports.frontendUiMiddlewareIdentityBypass = frontendUiMiddlewareIdentityBypass;
253
+ exports.frontendUiTranslationCy = translationCy;
254
+ exports.frontendUiTranslationEn = translationEn;
255
+ exports.getTranslationObject = getTranslationObject;
256
+ exports.setBaseTranslations = setBaseTranslations;
257
+ exports.setFrontendUiTranslations = setFrontendUiTranslations;
@@ -0,0 +1,39 @@
1
+ import i18next from "i18next";
2
+ import { NextFunction, Request, Response } from "express";
3
+ interface I18nData {
4
+ language: string;
5
+ store: {
6
+ data: {
7
+ [key: string]: unknown;
8
+ };
9
+ };
10
+ }
11
+ interface ExpressRequest extends Request {
12
+ i18n: I18nData;
13
+ }
14
+ interface ExpressResponse extends Response {
15
+ locals: {
16
+ translations: unknown;
17
+ basePath?: string;
18
+ };
19
+ }
20
+ interface PlainRequest {
21
+ i18n: I18nData;
22
+ }
23
+ interface PlainResponse {
24
+ locals: {
25
+ translations: unknown;
26
+ basePath?: string;
27
+ };
28
+ }
29
+ export declare function frontendUiMiddleware(req: ExpressRequest, res: ExpressResponse, next: NextFunction): void;
30
+ export declare function frontendUiMiddleware(req: PlainRequest, res: PlainResponse, next: NextFunction): void;
31
+ export declare const setFrontendUiTranslations: (instanceI18n: typeof i18next) => void;
32
+ export declare const frontendUiMiddlewareIdentityBypass: (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => void;
33
+ export declare function addLanguageParam(language: string, url?: URL): string;
34
+ export declare function contactUsUrl(baseUrl: string, urlToAppend: string): string | null;
35
+ export declare const setBaseTranslations: (instanceI18n: typeof i18next, filePath?: string) => void;
36
+ export declare const getTranslationObject: (locale: string, filepath?: string) => Record<string, unknown>;
37
+ export { default as frontendUiTranslationEn } from "../locales/en/translation.json";
38
+ export { default as frontendUiTranslationCy } from "../locales/cy/translation.json";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,39 @@
1
+ import i18next from "i18next";
2
+ import { NextFunction, Request, Response } from "express";
3
+ interface I18nData {
4
+ language: string;
5
+ store: {
6
+ data: {
7
+ [key: string]: unknown;
8
+ };
9
+ };
10
+ }
11
+ interface ExpressRequest extends Request {
12
+ i18n: I18nData;
13
+ }
14
+ interface ExpressResponse extends Response {
15
+ locals: {
16
+ translations: unknown;
17
+ basePath?: string;
18
+ };
19
+ }
20
+ interface PlainRequest {
21
+ i18n: I18nData;
22
+ }
23
+ interface PlainResponse {
24
+ locals: {
25
+ translations: unknown;
26
+ basePath?: string;
27
+ };
28
+ }
29
+ export declare function frontendUiMiddleware(req: ExpressRequest, res: ExpressResponse, next: NextFunction): void;
30
+ export declare function frontendUiMiddleware(req: PlainRequest, res: PlainResponse, next: NextFunction): void;
31
+ export declare const setFrontendUiTranslations: (instanceI18n: typeof i18next) => void;
32
+ export declare const frontendUiMiddlewareIdentityBypass: (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => void;
33
+ export declare function addLanguageParam(language: string, url?: URL): string;
34
+ export declare function contactUsUrl(baseUrl: string, urlToAppend: string): string | null;
35
+ export declare const setBaseTranslations: (instanceI18n: typeof i18next, filePath?: string) => void;
36
+ export declare const getTranslationObject: (locale: string, filepath?: string) => Record<string, unknown>;
37
+ export { default as frontendUiTranslationEn } from "../locales/en/translation.json";
38
+ export { default as frontendUiTranslationCy } from "../locales/cy/translation.json";
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQ1D,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QACL,IAAI,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;KAClC,CAAC;CACH;AAED,UAAU,cAAe,SAAQ,OAAO;IACtC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,UAAU,eAAgB,SAAQ,QAAQ;IACxC,MAAM,EAAE;QACN,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE;QACN,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAGD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,YAAY,GACjB,IAAI,CAAC;AAER,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,YAAY,GACjB,IAAI,CAAC;AAaR,eAAO,MAAM,yBAAyB,GAAI,cAAc,OAAO,OAAO,SAerE,CAAC;AAGF,eAAO,MAAM,kCAAkC,GAC7C,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,MAAM,YAAY,SAUnB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,UAU3D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAkBhE;AAED,eAAO,MAAM,mBAAmB,GAC9B,cAAc,OAAO,OAAO,EAC5B,WAAW,MAAM,SASlB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAuBxB,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { Request, Response } from "express";
2
+ declare const _default: {
3
+ contentSecurityPolicy: {
4
+ directives: {
5
+ defaultSrc: string[];
6
+ styleSrc: string[];
7
+ scriptSrc: (string | ((_req: Request, res: Response) => string))[];
8
+ imgSrc: string[];
9
+ formAction: string[];
10
+ objectSrc: string[];
11
+ connectSrc: string[];
12
+ };
13
+ };
14
+ dnsPrefetchControl: {
15
+ allow: boolean;
16
+ };
17
+ frameguard: {
18
+ action: string;
19
+ };
20
+ hsts: {
21
+ maxAge: number;
22
+ preload: boolean;
23
+ includeSubDomains: boolean;
24
+ };
25
+ referrerPolicy: boolean;
26
+ permittedCrossDomainPolicies: boolean;
27
+ expectCt: boolean;
28
+ crossOriginEmbedderPolicy: boolean;
29
+ };
30
+ export default _default;
31
+ //# sourceMappingURL=helmet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helmet.d.ts","sourceRoot":"","sources":["../../../../src/lib/helmet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;;;;;;yCAS7B,OAAO,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;AAPrC,wBA4CE"}
@@ -0,0 +1,4 @@
1
+ export * as locals from "./locals";
2
+ export * as settings from "./settings";
3
+ export * as helmet from "./helmet";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { NextFunction, Request, Response } from "express";
2
+ import { CustomLogger } from "../utils/logger";
3
+ declare const getGTM: (req: Request, res: Response, next: NextFunction) => void;
4
+ declare const getAssetPath: (req: Request, res: Response, next: NextFunction) => void;
5
+ declare const getLanguageToggle: (req: Request & {
6
+ i18n: {
7
+ language: string;
8
+ };
9
+ }, res: Response, next: NextFunction, customLogger?: CustomLogger) => void;
10
+ export { getAssetPath, getGTM, getLanguageToggle };
11
+ //# sourceMappingURL=locals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locals.d.ts","sourceRoot":"","sources":["../../../../src/lib/locals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,YAAY,EAA8B,MAAM,iBAAiB,CAAC;AAE3E,QAAA,MAAM,MAAM,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IA0BjE,CAAC;AAEF,QAAA,MAAM,YAAY,GAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,IAGF,CAAC;AAEF,QAAA,MAAM,iBAAiB,GACrB,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC7C,KAAK,QAAQ,EACb,MAAM,YAAY,EAClB,eAAe,YAAY,KAC1B,IAqBF,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Express } from "express";
2
+ interface SetGTM {
3
+ app: Express;
4
+ ga4ContainerId: string;
5
+ analyticsCookieDomain: string;
6
+ ga4Enabled: boolean;
7
+ ga4PageViewEnabled: boolean;
8
+ ga4FormResponseEnabled: boolean;
9
+ ga4FormErrorEnabled: boolean;
10
+ ga4FormChangeEnabled: boolean;
11
+ ga4NavigationEnabled: boolean;
12
+ ga4SelectContentEnabled: boolean;
13
+ analyticsDataSensitive: boolean;
14
+ }
15
+ declare const setGTM: ({ app, ga4ContainerId, analyticsCookieDomain, ga4Enabled, ga4PageViewEnabled, ga4FormResponseEnabled, ga4FormErrorEnabled, ga4FormChangeEnabled, ga4NavigationEnabled, ga4SelectContentEnabled, analyticsDataSensitive, }: SetGTM) => void;
16
+ declare const setLanguageToggle: ({ app, showLanguageToggle, }: {
17
+ app: Express;
18
+ showLanguageToggle: boolean;
19
+ }) => void;
20
+ export { setGTM, setLanguageToggle };
21
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../../src/lib/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,UAAU,MAAM;IACd,GAAG,EAAE,OAAO,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,QAAA,MAAM,MAAM,GAAI,2NAYb,MAAM,SAWR,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,8BAGxB;IACD,GAAG,EAAE,OAAO,CAAC;IACb,kBAAkB,EAAE,OAAO,CAAC;CAC7B,SAEA,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Logger } from "pino";
2
+ export type CustomLogger = {
3
+ trace: (message: string) => void;
4
+ warn: (message: string) => void;
5
+ };
6
+ export declare const setCustomLogger: (customLogger: CustomLogger) => void;
7
+ export declare const getLogger: () => Logger | CustomLogger;
8
+ export declare const resetLogger: () => void;
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,cAAc,YAAY,SAEzD,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,YAWrC,CAAC;AAEF,eAAO,MAAM,WAAW,YAEvB,CAAC"}