rendercv-ts 0.1.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.
- package/LICENSE +26 -0
- package/README.md +112 -0
- package/assets/fonts/EB Garamond/EBGaramond-Bold.ttf +0 -0
- package/assets/fonts/EB Garamond/EBGaramond-BoldItalic.ttf +0 -0
- package/assets/fonts/EB Garamond/EBGaramond-Italic.ttf +0 -0
- package/assets/fonts/EB Garamond/EBGaramond-Regular.ttf +0 -0
- package/assets/fonts/Fontin/Fontin-Bold.otf +0 -0
- package/assets/fonts/Fontin/Fontin-Italic.otf +0 -0
- package/assets/fonts/Fontin/Fontin-Regular.otf +0 -0
- package/assets/fonts/Gentium Book Plus/GentiumBookPlus-Bold.ttf +0 -0
- package/assets/fonts/Gentium Book Plus/GentiumBookPlus-BoldItalic.ttf +0 -0
- package/assets/fonts/Gentium Book Plus/GentiumBookPlus-Italic.ttf +0 -0
- package/assets/fonts/Gentium Book Plus/GentiumBookPlus-Regular.ttf +0 -0
- package/assets/fonts/Lato/Lato-Bold.ttf +0 -0
- package/assets/fonts/Lato/Lato-BoldItalic.ttf +0 -0
- package/assets/fonts/Lato/Lato-Italic.ttf +0 -0
- package/assets/fonts/Lato/Lato-Regular.ttf +0 -0
- package/assets/fonts/Raleway/Raleway-Bold.ttf +0 -0
- package/assets/fonts/Raleway/Raleway-BoldItalic.ttf +0 -0
- package/assets/fonts/Raleway/Raleway-Italic.ttf +0 -0
- package/assets/fonts/Raleway/Raleway-Regular.ttf +0 -0
- package/assets/fonts/Source Sans 3/SourceSans3-Bold.ttf +0 -0
- package/assets/fonts/Source Sans 3/SourceSans3-BoldItalic.ttf +0 -0
- package/assets/fonts/Source Sans 3/SourceSans3-Italic.ttf +0 -0
- package/assets/fonts/Source Sans 3/SourceSans3-Regular.ttf +0 -0
- package/assets/fonts/Ubuntu/Ubuntu-Bold.ttf +0 -0
- package/assets/fonts/Ubuntu/Ubuntu-BoldItalic.ttf +0 -0
- package/assets/fonts/Ubuntu/Ubuntu-Italic.ttf +0 -0
- package/assets/fonts/Ubuntu/Ubuntu-Regular.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Black.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Bold.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-ExtraBold.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-ExtraLight.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Light.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Medium.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Regular.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-SemiBold.ttf +0 -0
- package/assets/fonts/Vazirmatn/Vazirmatn-Thin.ttf +0 -0
- package/assets/fonts/XCharter/XCharter-Bold.otf +0 -0
- package/assets/fonts/XCharter/XCharter-BoldItalic.otf +0 -0
- package/assets/fonts/XCharter/XCharter-Italic.otf +0 -0
- package/assets/fonts/XCharter/XCharter-Regular.otf +0 -0
- package/assets/wasm/typst_ts_renderer_bg.wasm +0 -0
- package/assets/wasm/typst_ts_web_compiler_bg.wasm +0 -0
- package/dist/asset_paths-Q3SHUESH.js +12 -0
- package/dist/asset_paths-Q3SHUESH.js.map +1 -0
- package/dist/chunk-CJBTP63L.js +94 -0
- package/dist/chunk-CJBTP63L.js.map +1 -0
- package/dist/chunk-EVM6BVMO.js +16 -0
- package/dist/chunk-EVM6BVMO.js.map +1 -0
- package/dist/chunk-QZVXUQ72.js +91 -0
- package/dist/chunk-QZVXUQ72.js.map +1 -0
- package/dist/chunk-VZSMPOAA.js +1012 -0
- package/dist/chunk-VZSMPOAA.js.map +1 -0
- package/dist/font_cache-BZENGUJA.js +84 -0
- package/dist/font_cache-BZENGUJA.js.map +1 -0
- package/dist/font_registry-TJ7PJJTJ.js +183 -0
- package/dist/font_registry-TJ7PJJTJ.js.map +1 -0
- package/dist/index.cjs +9979 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +195 -0
- package/dist/index.d.ts +195 -0
- package/dist/index.js +8396 -0
- package/dist/index.js.map +1 -0
- package/dist/renderer/worker/pdf_worker.cjs +1518 -0
- package/dist/renderer/worker/pdf_worker.cjs.map +1 -0
- package/dist/renderer/worker/pdf_worker.d.cts +24 -0
- package/dist/renderer/worker/pdf_worker.d.ts +24 -0
- package/dist/renderer/worker/pdf_worker.js +51 -0
- package/dist/renderer/worker/pdf_worker.js.map +1 -0
- package/dist/typst_font_cache-LYHXH5UA.js +60 -0
- package/dist/typst_font_cache-LYHXH5UA.js.map +1 -0
- package/dist/typst_setup-SW3GQFSL.js +30 -0
- package/dist/typst_setup-SW3GQFSL.js.map +1 -0
- package/dist/typst_setup-WebjDI32.d.cts +266 -0
- package/dist/typst_setup-WebjDI32.d.ts +266 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/renderer/assets/rendercv_typst/icons.typ","../src/renderer/assets/rendercv_typst/lib.typ","../src/renderer/assets/rendercv_typst/typst.toml","../src/renderer/fonts/load_bundled_font.ts","../src/renderer/asset_paths.ts","../src/renderer/assets/font_manifest.ts","../src/renderer/fonts/typst_font_cache.ts","../src/renderer/fonts/font_registry.ts","../src/renderer/fonts/font_cache.ts","../src/renderer/typst_setup.ts","../src/index.ts","../node_modules/zod/v3/external.js","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../src/schema/error-handling.ts","../src/schema/parse_validation_errors.ts","../src/schema/error_dictionary.yaml","../src/schema/yaml_document.ts","../src/schema/path.ts","../src/schema/models/base.ts","../src/schema/models/cv/custom_connection.ts","../src/schema/models/cv/entries/bases/entry.ts","../src/schema/models/dates.ts","../src/schema/models/cv/entries/bases/entry_with_date.ts","../src/schema/models/cv/entries/bases/entry_with_complex_fields.ts","../src/schema/models/cv/entries/index.ts","../src/schema/models/cv/section.ts","../src/schema/models/cv/social_network.ts","../src/schema/models/cv/cv.ts","../src/schema/models/design/color.ts","../src/schema/models/design/font_family.ts","../src/schema/models/design/typst_dimension.ts","../src/schema/models/design/classic_theme.ts","../src/schema/models/design/themes_loader.ts","../src/schema/models/design/other_themes/ember.yaml","../src/schema/models/design/other_themes/engineeringclassic.yaml","../src/schema/models/design/other_themes/engineeringresumes.yaml","../src/schema/models/design/other_themes/harvard.yaml","../src/schema/models/design/other_themes/ink.yaml","../src/schema/models/design/other_themes/moderncv.yaml","../src/schema/models/design/other_themes/opal.yaml","../src/schema/models/design/other_themes/sb2nov.yaml","../src/schema/models/design/variant_generator.ts","../src/schema/models/design/design.ts","../src/schema/models/locale/locales.ts","../src/schema/models/locale/locale.ts","../src/schema/models/locale/other_locales/arabic.yaml","../src/schema/models/locale/other_locales/danish.yaml","../src/schema/models/locale/other_locales/dutch.yaml","../src/schema/models/locale/other_locales/french.yaml","../src/schema/models/locale/other_locales/german.yaml","../src/schema/models/locale/other_locales/hebrew.yaml","../src/schema/models/locale/other_locales/hindi.yaml","../src/schema/models/locale/other_locales/hungarian.yaml","../src/schema/models/locale/other_locales/indonesian.yaml","../src/schema/models/locale/other_locales/italian.yaml","../src/schema/models/locale/other_locales/japanese.yaml","../src/schema/models/locale/other_locales/korean.yaml","../src/schema/models/locale/other_locales/mandarin_chinese.yaml","../src/schema/models/locale/other_locales/norwegian_bokm%C3%A5l.yaml","../src/schema/models/locale/other_locales/norwegian_nynorsk.yaml","../src/schema/models/locale/other_locales/persian.yaml","../src/schema/models/locale/other_locales/portuguese.yaml","../src/schema/models/locale/other_locales/russian.yaml","../src/schema/models/locale/other_locales/spanish.yaml","../src/schema/models/locale/other_locales/turkish.yaml","../src/schema/models/locale/other_locales/vietnamese.yaml","../src/schema/models/settings/render_command.ts","../src/schema/models/settings/settings.ts","../src/schema/models/rendercv_model.ts","../src/schema/yaml_reader.ts","../src/renderer/templater/templater.ts","../src/renderer/templater/markdown_parser.ts","../src/renderer/templater/connections.ts","../src/renderer/assets/icons/icon_ids.ts","../src/renderer/templater/string_processor.ts","../src/renderer/templater/date.ts","../src/renderer/templater/entry_templates_from_input.ts","../src/renderer/templater/footer_and_top_note.ts","../src/renderer/templater/model_processor.ts","../src/renderer/templater/templates/html/Full.html","../src/renderer/templater/templates/markdown/Header.j2.md","../src/renderer/templater/templates/markdown/SectionBeginning.j2.md","../src/renderer/templater/templates/markdown/SectionEnding.j2.md","../src/renderer/templater/templates/markdown/entries/BulletEntry.j2.md","../src/renderer/templater/templates/markdown/entries/EducationEntry.j2.md","../src/renderer/templater/templates/markdown/entries/ExperienceEntry.j2.md","../src/renderer/templater/templates/markdown/entries/NormalEntry.j2.md","../src/renderer/templater/templates/markdown/entries/NumberedEntry.j2.md","../src/renderer/templater/templates/markdown/entries/OneLineEntry.j2.md","../src/renderer/templater/templates/markdown/entries/PublicationEntry.j2.md","../src/renderer/templater/templates/markdown/entries/ReversedNumberedEntry.j2.md","../src/renderer/templater/templates/markdown/entries/TextEntry.j2.md","../src/renderer/templater/templates/typst/Header.j2.typ","../src/renderer/templater/templates/typst/Preamble.j2.typ","../src/renderer/templater/templates/typst/SectionBeginning.j2.typ","../src/renderer/templater/templates/typst/SectionEnding.j2.typ","../src/renderer/templater/templates/typst/entries/BulletEntry.j2.typ","../src/renderer/templater/templates/typst/entries/EducationEntry.j2.typ","../src/renderer/templater/templates/typst/entries/ExperienceEntry.j2.typ","../src/renderer/templater/templates/typst/entries/NormalEntry.j2.typ","../src/renderer/templater/templates/typst/entries/NumberedEntry.j2.typ","../src/renderer/templater/templates/typst/entries/OneLineEntry.j2.typ","../src/renderer/templater/templates/typst/entries/PublicationEntry.j2.typ","../src/renderer/templater/templates/typst/entries/ReversedNumberedEntry.j2.typ","../src/renderer/templater/templates/typst/entries/TextEntry.j2.typ","../src/renderer/templater/template_registry.ts","../src/renderer/typst.ts","../src/renderer/markdown.ts","../src/renderer/html.ts","../src/renderer/photo.ts","../src/renderer/worker/pdf_worker_facade.ts","../src/renderer/pdf_png.ts","../src/renderer/path_resolver.ts"],"sourcesContent":["// Auto-generated by scripts/generate-connection-icons.mjs — do not edit.\n\n#let rendercv-icon-map = (\n \"envelope\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M2 4h20v16H2V4zm2 2v.01L12 13l8-6.99V6H4zm16 10V8.5l-8 5.5-8-5.5V16h16z\\\"/></svg>\",\n \"phone\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M6.6 10.8c1.4 2.8 3.8 5.1 6.6 6.6l2.2-2.2c.3-.3.7-.4 1-.2 1.1.4 2.3.6 3.6.6.6 0 1 .4 1 1V20c0 .6-.4 1-1 1C10.6 21 3 13.4 3 4c0-.6.4-1 1-1h3.5c.6 0 1 .4 1 1 0 1.3.2 2.5.6 3.6.1.3 0 .7-.2 1L6.6 10.8z\\\"/></svg>\",\n \"link\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M3.9 12c0-1.7 1.3-3 3-3h4V7H6.9C4.2 7 2 9.2 2 11.9c0 2.7 2.2 4.9 4.9 4.9H11v-2H6.9c-1.7 0-3-1.3-3-3zm16.2-5H13v2h4.1c1.7 0 3 1.3 3 3s-1.3 3-3 3H13v2h7.1c2.7 0 4.9-2.2 4.9-4.9 0-2.7-2.2-4.9-4.8-4.9zM8 11h8v2H8v-2z\\\"/></svg>\",\n \"location-dot\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M12 2C8.1 2 5 5.1 5 9c0 5.2 7 13 7 13s7-7.8 7-13c0-3.9-3.1-7-7-7zm0 9.5A2.5 2.5 0 1 1 12 6a2.5 2.5 0 0 1 0 5.5z\\\"/></svg>\",\n \"linkedin\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 1 1 0-4.124 2.062 2.062 0 0 1 0 4.124zM7.119 20.452H3.555V9h3.564v11.452z\\\"/></svg>\",\n \"github\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\\\"/></svg>\",\n \"gitlab\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z\\\"/></svg>\",\n \"imdb\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M22.3781 0H1.6218C.7411.0583.0587.7437.0018 1.5953l-.001 20.783c.0585.8761.7125 1.543 1.5559 1.6191A.337.337 0 0 0 1.6016 24h20.7971a.4579.4579 0 0 0 .0437-.002c.8727-.0768 1.5568-.8271 1.5568-1.7085V1.7098c0-.8914-.696-1.6416-1.584-1.7078A.3294.3294 0 0 0 22.3781 0zm0 .496a1.2144 1.2144 0 0 1 1.1252 1.2139v20.5797c0 .6377-.4875 1.1602-1.1045 1.2145H1.6016c-.5967-.0543-1.0645-.5297-1.1053-1.1258V1.6284C.5371 1.0185 1.0184.5364 1.6217.496h20.7564zM4.7954 8.2603v7.3636H2.8899V8.2603h1.9055zm6.5367 0v7.3636H9.6707v-4.9704l-.6711 4.9704H7.813l-.6986-4.8618-.0066 4.8618h-1.668V8.2603h2.468c.0748.4476.1492.9694.2307 1.5734l.2712 1.8713.4407-3.4447h2.4817zm2.9772 1.3289c.0742.0404.122.108.1417.2034.0279.0953.0345.3118.0345.6442v2.8548c0 .4881-.0345.7867-.0955.8954-.0609.1152-.2304.1695-.5018.1695V9.5211c.204 0 .3457.0205.4211.0681zm-.0211 6.0347c.4543 0 .8006-.0265 1.0245-.0742.2304-.0477.4204-.1357.5694-.2648.1556-.1218.2642-.298.3251-.5219.0611-.2238.1021-.6648.1021-1.3224v-2.5832c0-.6986-.0271-1.1668-.0742-1.4039-.041-.237-.1431-.4543-.3126-.6437-.1695-.1973-.4198-.3324-.7456-.421-.3191-.0808-.8542-.1285-1.7694-.1285h-1.4244v7.3636h2.3051zm5.14-1.7827c0 .3523-.0199.5762-.0544.6708-.033.0947-.1894.1424-.3046.1424-.1086 0-.19-.0477-.2238-.1351-.041-.0887-.0609-.2986-.0609-.6238v-1.9469c0-.3324.0199-.5423.0543-.6237.0338-.0808.1086-.122.2171-.122.1153 0 .2709.0412.3114.1425.041.0947.0609.2986.0609.6032v1.8926zm-2.4747-5.5809v7.3636h1.7157l.1152-.4675c.1556.1894.3251.3324.5152.4271.1828.0881.4608.1357.678.1357.3047 0 .5629-.0748.7802-.237.2165-.1562.3589-.3462.4198-.5628.0543-.2173.0887-.543.0887-.9841v-2.0675c0-.4409-.0139-.7324-.0344-.8681-.0199-.1357-.0742-.2781-.1695-.4204-.1021-.1425-.2437-.251-.4272-.3325-.1834-.0742-.3999-.1152-.6576-.1152-.2172 0-.4952.0477-.6846.1285-.1835.0887-.353.2238-.5086.4007V8.2603h-1.8309z\\\"/></svg>\",\n \"instagram\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077\\\"/></svg>\",\n \"mastodon\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z\\\"/></svg>\",\n \"orcid\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M12 0C5.372 0 0 5.372 0 12s5.372 12 12 12 12-5.372 12-12S18.628 0 12 0zM7.369 4.378c.525 0 .947.431.947.947s-.422.947-.947.947a.95.95 0 0 1-.947-.947c0-.525.422-.947.947-.947zm-.722 3.038h1.444v10.041H6.647V7.416zm3.562 0h3.9c3.712 0 5.344 2.653 5.344 5.025 0 2.578-2.016 5.025-5.325 5.025h-3.919V7.416zm1.444 1.303v7.444h2.297c3.272 0 4.022-2.484 4.022-3.722 0-2.016-1.284-3.722-4.097-3.722h-2.222z\\\"/></svg>\",\n \"stack-overflow\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M15.725 0l-1.72 1.277 6.39 8.588 1.716-1.277L15.725 0zm-3.94 3.418l-1.369 1.644 8.225 6.85 1.369-1.644-8.225-6.85zm-3.15 4.465l-.905 1.94 9.702 4.517.904-1.94-9.701-4.517zm-1.85 4.86l-.44 2.093 10.473 2.201.44-2.092-10.473-2.203zM1.89 15.47V24h19.19v-8.53h-2.133v6.397H4.021v-6.396H1.89zm4.265 2.133v2.13h10.66v-2.13H6.154Z\\\"/></svg>\",\n \"researchgate\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M19.586 0c-.818 0-1.508.19-2.073.565-.563.377-.97.936-1.213 1.68a3.193 3.193 0 0 0-.112.437 8.365 8.365 0 0 0-.078.53 9 9 0 0 0-.05.727c-.01.282-.013.621-.013 1.016a31.121 31.123 0 0 0 .014 1.017 9 9 0 0 0 .05.727 7.946 7.946 0 0 0 .077.53h-.005a3.334 3.334 0 0 0 .113.438c.245.743.65 1.303 1.214 1.68.565.376 1.256.564 2.075.564.8 0 1.536-.213 2.105-.603.57-.39.94-.916 1.175-1.65.076-.235.135-.558.177-.93a10.9 10.9 0 0 0 .043-1.207v-.82c0-.095-.047-.142-.14-.142h-3.064c-.094 0-.14.047-.14.141v.956c0 .094.046.14.14.14h1.666c.056 0 .084.03.084.086 0 .36 0 .62-.036.865-.038.244-.1.447-.147.606-.108.385-.348.664-.638.876-.29.212-.738.35-1.227.35-.545 0-.901-.15-1.21-.353-.306-.203-.517-.454-.67-.915a3.136 3.136 0 0 1-.147-.762 17.366 17.367 0 0 1-.034-.656c-.01-.26-.014-.572-.014-.939a26.401 26.403 0 0 1 .014-.938 15.821 15.822 0 0 1 .035-.656 3.19 3.19 0 0 1 .148-.76 1.89 1.89 0 0 1 .742-1.01c.344-.244.593-.352 1.137-.352.508 0 .815.096 1.144.303.33.207.528.492.764.925.047.094.111.118.198.07l1.044-.43c.075-.048.09-.115.042-.199a3.549 3.549 0 0 0-.466-.742 3 3 0 0 0-.679-.607 3.313 3.313 0 0 0-.903-.41A4.068 4.068 0 0 0 19.586 0zM8.217 5.836c-1.69 0-3.036.086-4.297.086-1.146 0-2.291 0-3.007-.029v.831l1.088.2c.744.144 1.174.488 1.174 2.264v11.288c0 1.777-.43 2.12-1.174 2.263l-1.088.2v.832c.773-.029 2.12-.086 3.465-.086 1.29 0 2.951.057 3.667.086v-.831l-1.49-.2c-.773-.115-1.174-.487-1.174-2.264v-4.784c.688.057 1.29.057 2.206.057 1.748 3.123 3.41 5.472 4.355 6.56.86 1.032 2.177 1.691 3.839 1.691.487 0 1.003-.086 1.318-.23v-.744c-1.031 0-2.063-.716-2.808-1.518-1.26-1.376-2.95-3.582-4.355-6.074 2.32-.545 4.04-2.722 4.04-4.9 0-3.208-2.492-4.698-5.758-4.698zm-.515 1.29c2.406 0 3.839 1.26 3.839 3.552 0 2.263-1.547 3.782-4.097 3.782-.974 0-1.404-.03-2.063-.086v-7.19c.66-.059 1.547-.059 2.32-.059z\\\"/></svg>\",\n \"youtube\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\\\"/></svg>\",\n \"graduation-cap\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M12 3 1 9l4 2.2V17c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-5.8L23 9 12 3zm0 2.2 6.5 3.6L12 12.4 5.5 8.8 12 5.2zM7 17v-4.8l5 2.8 5-2.8V17H7z\\\"/></svg>\",\n \"telegram\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z\\\"/></svg>\",\n \"whatsapp\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z\\\"/></svg>\",\n \"code\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M8.7 15.9 4.8 12l3.9-3.9L7 6.3 2.3 11 7 15.7l1.7-1.8zm6.6 0 1.7 1.8L21.7 12l-4.7-4.7-1.7 1.8L19.2 12l-3.9 3.9z\\\"/></svg>\",\n \"x-twitter\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z\\\"/></svg>\",\n \"bluesky\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026\\\"/></svg>\",\n \"reddit\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z\\\"/></svg>\",\n \"external-link\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"__FILL__\\\" d=\\\"M14 3h7v7h-2V6.4l-9.2 9.2-1.4-1.4L17.6 5H14V3zM5 5h6v2H7v10h10v-4h2v6H5V5z\\\"/></svg>\",\n)\n\n#let rendercv-icon(name, size: 0.9em, fill: rgb(0, 0, 0)) = {\n let svg-template = rendercv-icon-map.at(name, default: rendercv-icon-map.at(\"link\"))\n let svg = svg-template.replace(\"__FILL__\", fill.to-hex())\n box(\n image(bytes(svg), format: \"svg\", width: size, height: size, alt: \"\"),\n width: size,\n height: size,\n baseline: 22%,\n )\n}\n","#import \"icons.typ\": rendercv-icon\n\n// State to hold rendercv configuration for use by components\n#let rendercv-config = state(\"rendercv-config\", (:))\n\n// Direction-aware inset: maps logical start/end to physical left/right.\n// Must be called from within a `context` scope.\n#let directional-inset(start: 0cm, end: 0cm) = {\n let is-rtl = rendercv-config.get().at(\"is-rtl\")\n if is-rtl {\n (left: end, right: start)\n } else {\n (left: start, right: end)\n }\n}\n\n#let headline(headline) = {\n metadata(\"skip-content-area\")\n context {\n let config = rendercv-config.get()\n let typography-font-size-headline = config.at(\"typography-font-size-headline\")\n let typography-font-family-headline = config.at(\"typography-font-family-headline\")\n let typography-bold-headline = config.at(\"typography-bold-headline\")\n let colors-headline = config.at(\"colors-headline\")\n let typography-small-caps-headline = config.at(\"typography-small-caps-headline\")\n let header-alignment = config.at(\"header-alignment\")\n let header-space-below-headline = config.at(\"header-space-below-headline\")\n set text(\n fill: colors-headline,\n font: typography-font-family-headline,\n size: typography-font-size-headline,\n weight: if typography-bold-headline { 700 } else { 400 },\n )\n set align(header-alignment)\n block(\n if typography-small-caps-headline { smallcaps(headline) } else { headline },\n width: 100%,\n height: auto,\n )\n v(header-space-below-headline, weak: true)\n }\n}\n\n#let connections(..connections) = {\n metadata(\"skip-content-area\")\n\n context {\n let config = rendercv-config.get()\n let typography-line-spacing = config.at(\"typography-line-spacing\")\n let header-connections-space-between-connections = config.at(\"header-connections-space-between-connections\")\n let header-connections-separator = config.at(\"header-connections-separator\")\n let page-left-margin = config.at(\"page-left-margin\")\n let page-right-margin = config.at(\"page-right-margin\")\n let header-space-below-connections = config.at(\"header-space-below-connections\")\n let section-titles-space-above = config.at(\"section-titles-space-above\")\n let colors-connections = config.at(\"colors-connections\")\n let typography-font-family-connections = config.at(\"typography-font-family-connections\")\n let typography-font-size-connections = config.at(\"typography-font-size-connections\")\n let typography-small-caps-connections = config.at(\"typography-small-caps-connections\")\n let typography-bold-connections = config.at(\"typography-bold-connections\")\n let header-alignment = config.at(\"header-alignment\")\n\n set par(spacing: 0pt, leading: typography-line-spacing * 1.7, justify: false)\n set text(\n fill: colors-connections,\n font: typography-font-family-connections,\n size: typography-font-size-connections,\n weight: if typography-bold-connections { 700 } else { 400 },\n )\n\n let separator = (\n h(header-connections-space-between-connections / 2, weak: true)\n + header-connections-separator\n + h(header-connections-space-between-connections / 2, weak: true)\n )\n let separator-width = (\n measure(header-connections-separator).width + header-connections-space-between-connections\n )\n if connections.pos().len() > 0 {\n set align(header-alignment)\n box(\n {\n layout(size => {\n let line-width = 0cm\n for (i, connection) in connections.pos().enumerate() {\n let connection-body = if typography-small-caps-connections { smallcaps(connection) } else { connection }\n let connection-width = measure(connection-body).width\n let is-last = i == connections.pos().len() - 1\n\n // Check if adding this connection + separator would exceed the line\n if (\n line-width + connection-width + separator-width > size.width and line-width > 0cm\n ) {\n linebreak()\n line-width = 0cm\n }\n\n // Add separator only if we're not at the start of a line\n if line-width > 0cm {\n separator\n }\n\n box(connection-body, width: auto)\n line-width = line-width + connection-width + (if line-width > 0cm { separator-width } else { 0cm })\n }\n })\n },\n width: 100%,\n height: auto,\n )\n }\n v(header-space-below-connections - section-titles-space-above)\n }\n}\n\n#let original-link = link\n#let link(dest, body, icon: none, if-underline: none, if-color: none) = context {\n let config = rendercv-config.get()\n let links-underline = config.at(\"links-underline\")\n let links-show-external-link-icon = config.at(\"links-show-external-link-icon\")\n let typography-font-size-body = config.at(\"typography-font-size-body\")\n let colors-links = config.at(\"colors-links\")\n\n let icon = icon\n if icon == none {\n if links-show-external-link-icon {\n icon = true\n } else {\n icon = false\n }\n }\n let if-underline = if-underline\n if if-underline == none {\n if links-underline {\n if-underline = true\n } else {\n if-underline = false\n }\n }\n let if-color = if-color\n if if-color == none {\n if-color = true\n }\n\n let body = [#if if-underline [#underline(body)] else [#body]]\n if icon {\n let ext-icon-content = rendercv-icon(\"external-link\", size: 0.65em)\n let icon-width = measure(ext-icon-content).width\n // Zero-height box reserves horizontal space but doesn't affect line height\n // or baseline. place() renders the icon out of flow, positioned above the\n // baseline to align visually with text.\n let ext-icon = box(\n width: icon-width,\n height: 0pt,\n baseline: 0pt,\n place(dy: -0.75em, ext-icon-content),\n )\n // Wrap body in box to create BiDi isolation — the box becomes a neutral\n // atomic inline, so the paragraph direction controls the icon's placement.\n body = [#box[#body]#h(typography-font-size-body / 4)#ext-icon]\n }\n body = [#if if-color [#set text(fill: colors-links);#body] else [#body]]\n original-link(dest, body)\n}\n\n// Box around body creates BiDi isolation — the icon and body are both neutral\n// atomic inlines, so the paragraph direction controls their relative order.\n#let connection-with-icon(icon-name, body) = context {\n let config = rendercv-config.get()\n let colors-connections = config.at(\"colors-connections\")\n let typography-font-size-connections = config.at(\"typography-font-size-connections\")\n let icon-size = typography-font-size-connections * 0.85\n\n box(width: auto, baseline: 18%)[\n #rendercv-icon(icon-name, size: icon-size, fill: colors-connections)\n #h(0.1em, weak: true)\n #box(baseline: 0pt)[#body]\n ]\n}\n\n#let content-area(content) = context {\n let config = rendercv-config.get()\n let entries-side-space = config.at(\"entries-side-space\")\n let entries-date-and-location-width = config.at(\"entries-date-and-location-width\")\n let entries-space-between-columns = config.at(\"entries-space-between-columns\")\n let entries-allow-page-break = config.at(\"entries-allow-page-break\")\n let sections-space-between-text-based-entries = config.at(\"sections-space-between-text-based-entries\")\n let section-titles-type = config.at(\"section-titles-type\")\n let typography-line-spacing = config.at(\"typography-line-spacing\")\n let justify = config.at(\"justify\")\n let entries-highlights-bullet = config.at(\"entries-highlights-bullet\")\n let entries-highlights-nested-bullet = config.at(\"entries-highlights-nested-bullet\")\n let entries-highlights-space-between-bullet-and-text = config.at(\n \"entries-highlights-space-between-bullet-and-text\",\n )\n let start-align = config.at(\"start-align\")\n\n let start-space = entries-side-space\n if section-titles-type == \"moderncv\" {\n start-space = (\n start-space + entries-date-and-location-width + entries-space-between-columns\n )\n }\n\n set par(\n spacing: sections-space-between-text-based-entries + typography-line-spacing,\n leading: typography-line-spacing,\n justify: justify,\n )\n set align(start-align)\n set enum(\n spacing: sections-space-between-text-based-entries + typography-line-spacing,\n )\n set list(\n marker: (entries-highlights-bullet, entries-highlights-nested-bullet),\n indent: 0cm,\n spacing: sections-space-between-text-based-entries + typography-line-spacing,\n body-indent: entries-highlights-space-between-bullet-and-text,\n )\n\n block(\n content,\n breakable: entries-allow-page-break,\n below: sections-space-between-text-based-entries + typography-line-spacing,\n inset: directional-inset(start: start-space, end: entries-side-space),\n width: 100%,\n )\n}\n\n#let summary(summary) = {\n context {\n let config = rendercv-config.get()\n let entries-summary-space-left = config.at(\"entries-summary-space-left\")\n let entries-summary-space-above = config.at(\"entries-summary-space-above\")\n let typography-line-spacing = config.at(\"typography-line-spacing\")\n block(\n summary,\n inset: directional-inset(start: entries-summary-space-left),\n above: entries-summary-space-above + typography-line-spacing,\n )\n }\n}\n\n#let regular-entry(main-column, date-and-location-column, main-column-second-row: none) = {\n metadata(\"skip-content-area\")\n\n context {\n let config = rendercv-config.get()\n let section-titles-type = config.at(\"section-titles-type\")\n let entries-date-and-location-width = config.at(\"entries-date-and-location-width\")\n let entries-space-between-columns = config.at(\"entries-space-between-columns\")\n let entries-highlights-bullet = config.at(\"entries-highlights-bullet\")\n let entries-highlights-nested-bullet = config.at(\"entries-highlights-nested-bullet\")\n let entries-highlights-space-between-items = config.at(\n \"entries-highlights-space-between-items\",\n )\n let entries-highlights-space-between-bullet-and-text = config.at(\n \"entries-highlights-space-between-bullet-and-text\",\n )\n let entries-highlights-space-above = config.at(\"entries-highlights-space-above\")\n let typography-line-spacing = config.at(\"typography-line-spacing\")\n let entries-allow-page-break = config.at(\"entries-allow-page-break\")\n let sections-space-between-regular-entries = config.at(\"sections-space-between-regular-entries\")\n let entries-side-space = config.at(\"entries-side-space\")\n let justify = config.at(\"justify\")\n let typography-date-and-location-column-alignment = config.at(\"typography-date-and-location-column-alignment\")\n let entries-highlights-space-left = config.at(\"entries-highlights-space-left\")\n let start-align = config.at(\"start-align\")\n\n set list(\n marker: (entries-highlights-bullet, entries-highlights-nested-bullet),\n indent: entries-highlights-space-left,\n spacing: entries-highlights-space-between-items + typography-line-spacing,\n body-indent: entries-highlights-space-between-bullet-and-text,\n )\n let list-depth = state(\"list-depth\", 0)\n show list.item: i => {\n list-depth.update(d => d + 1)\n i\n list-depth.update(d => d - 1)\n }\n show list: l => {\n context if list-depth.get() == 1 {\n v(entries-highlights-space-above)\n }\n context if list-depth.get() == 2 {\n v(entries-highlights-space-between-items)\n }\n l\n }\n set par(\n spacing: typography-line-spacing,\n leading: typography-line-spacing,\n justify: justify,\n )\n block(\n {\n if section-titles-type == \"moderncv\" {\n grid(\n columns: (entries-date-and-location-width, 1fr),\n column-gutter: entries-space-between-columns,\n align: (typography-date-and-location-column-alignment, start-align),\n [\n #date-and-location-column\n ],\n [\n #main-column\n\n #main-column-second-row\n ],\n )\n } else {\n if repr(main-column) != \"[ ]\" or repr(date-and-location-column) != \"[ ]\" {\n grid(\n columns: (1fr, entries-date-and-location-width),\n column-gutter: entries-space-between-columns,\n align: (start-align, typography-date-and-location-column-alignment),\n main-column, date-and-location-column,\n )\n }\n set align(start-align)\n main-column-second-row\n }\n },\n breakable: entries-allow-page-break,\n below: sections-space-between-regular-entries + typography-line-spacing,\n inset: (\n left: entries-side-space,\n right: entries-side-space,\n ),\n width: 100%,\n )\n }\n}\n\n#let education-entry(main-column, date-and-location-column, degree-column: none, main-column-second-row: none) = {\n metadata(\"skip-content-area\")\n\n context {\n let config = rendercv-config.get()\n let entries-space-between-columns = config.at(\"entries-space-between-columns\")\n let entries-degree-width = config.at(\"entries-degree-width\")\n let start-align = config.at(\"start-align\")\n\n regular-entry(\n if degree-column != none {\n grid(\n columns: (entries-degree-width, 1fr),\n column-gutter: entries-space-between-columns,\n align: (start-align, auto),\n [\n #degree-column\n ],\n [\n #main-column\n ],\n )\n } else {\n main-column\n },\n date-and-location-column,\n main-column-second-row: if main-column-second-row != none and repr(main-column-second-row) != \"[ ]\" {\n [\n #block(\n main-column-second-row,\n inset: directional-inset(\n start: if degree-column != none { entries-degree-width + entries-space-between-columns } else { 0cm },\n ),\n )\n ]\n } else { none },\n )\n }\n}\n\n#let reversed-numbered-entries(entries) = {\n set enum(reversed: true)\n entries\n}\n\n#let rendercv(\n doc,\n name: \"John Doe\",\n title: \"John Doe's CV\",\n footer: context { \"Page \" + str(here().page()) + \" of \" + str(counter(page).final().first()) + \"\" },\n top-note: \"Last updated in \" + datetime.today().display(),\n locale-catalog-language: \"en\",\n text-direction: ltr,\n page-size: \"us-letter\",\n page-top-margin: 0.7in,\n page-bottom-margin: 0.7in,\n page-left-margin: 0.7in,\n page-right-margin: 0.7in,\n page-show-footer: true,\n page-show-top-note: true,\n colors-body: rgb(0, 0, 0),\n colors-name: rgb(0, 79, 144),\n colors-headline: rgb(0, 79, 144),\n colors-connections: rgb(0, 79, 144),\n colors-section-titles: rgb(0, 79, 144),\n colors-links: rgb(0, 79, 144),\n colors-footer: rgb(128, 128, 128),\n colors-top-note: rgb(128, 128, 128),\n typography-line-spacing: 0.6em,\n typography-alignment: \"justified\",\n typography-date-and-location-column-alignment: right,\n typography-font-family-body: \"Raleway\",\n typography-font-family-name: \"Raleway\",\n typography-font-family-headline: \"Raleway\",\n typography-font-family-connections: \"Raleway\",\n typography-font-family-section-titles: \"Raleway\",\n typography-font-size-body: 10pt,\n typography-font-size-name: 30pt,\n typography-font-size-headline: 10pt,\n typography-font-size-connections: 10pt,\n typography-font-size-section-titles: 1.4em,\n typography-small-caps-name: false,\n typography-small-caps-headline: false,\n typography-small-caps-connections: false,\n typography-small-caps-section-titles: false,\n typography-bold-name: false,\n typography-bold-headline: false,\n typography-bold-connections: false,\n typography-bold-section-titles: false,\n links-underline: false,\n links-show-external-link-icon: false,\n header-alignment: left,\n header-photo-width: 3.5cm,\n header-space-below-name: 0.7cm,\n header-space-below-headline: 0.7cm,\n header-space-below-connections: 0.7cm,\n header-connections-hyperlink: true,\n header-connections-show-icons: true,\n header-connections-display-urls-instead-of-usernames: false,\n header-connections-separator: \"\",\n header-connections-space-between-connections: 0.5cm,\n section-titles-type: \"with_full_line\",\n section-titles-line-thickness: 0.5pt,\n section-titles-space-above: 0.5cm,\n section-titles-space-below: 0.3cm,\n sections-allow-page-break: true,\n sections-space-between-text-based-entries: 0.3em,\n sections-space-between-regular-entries: 1.2em,\n entries-date-and-location-width: 4.15cm,\n entries-side-space: 0.2cm,\n entries-space-between-columns: 0.1cm,\n entries-allow-page-break: false,\n entries-short-second-row: false,\n entries-degree-width: 1cm,\n entries-summary-space-left: 0cm,\n entries-summary-space-above: 0.12cm,\n entries-highlights-bullet: \"•\",\n entries-highlights-nested-bullet: \"•\",\n entries-highlights-space-left: 0cm,\n entries-highlights-space-above: 0.12cm,\n entries-highlights-space-between-items: 0.12cm,\n entries-highlights-space-between-bullet-and-text: 0.5em,\n date: datetime(\n year: 2025,\n month: 12,\n day: 5,\n ),\n) = [\n #let (justify, hyphenate) = (\n \"justified\": (true, true),\n \"left\": (false, false),\n \"justified-with-no-hyphenation\": (true, false),\n ).at(typography-alignment)\n\n #let is-rtl = text-direction == rtl\n #let start-align = if is-rtl { right } else { left }\n #let end-align = if is-rtl { left } else { right }\n\n // Initialize state with all configuration parameters\n #rendercv-config.update((\n // Direction\n text-direction: text-direction,\n is-rtl: is-rtl,\n start-align: start-align,\n // Page\n page-left-margin: page-left-margin,\n page-right-margin: page-right-margin,\n // Colors\n colors-body: colors-body,\n colors-name: colors-name,\n colors-headline: colors-headline,\n colors-connections: colors-connections,\n colors-section-titles: colors-section-titles,\n colors-links: colors-links,\n colors-footer: colors-footer,\n colors-top-note: colors-top-note,\n // Typography\n typography-line-spacing: typography-line-spacing,\n typography-alignment: typography-alignment,\n typography-date-and-location-column-alignment: typography-date-and-location-column-alignment,\n typography-font-family-body: typography-font-family-body,\n typography-font-family-name: typography-font-family-name,\n typography-font-family-headline: typography-font-family-headline,\n typography-font-family-connections: typography-font-family-connections,\n typography-font-family-section-titles: typography-font-family-section-titles,\n typography-font-size-body: typography-font-size-body,\n typography-font-size-name: typography-font-size-name,\n typography-font-size-headline: typography-font-size-headline,\n typography-font-size-connections: typography-font-size-connections,\n typography-font-size-section-titles: typography-font-size-section-titles,\n typography-small-caps-name: typography-small-caps-name,\n typography-small-caps-headline: typography-small-caps-headline,\n typography-small-caps-connections: typography-small-caps-connections,\n typography-small-caps-section-titles: typography-small-caps-section-titles,\n typography-bold-name: typography-bold-name,\n typography-bold-headline: typography-bold-headline,\n typography-bold-connections: typography-bold-connections,\n typography-bold-section-titles: typography-bold-section-titles,\n // Links\n links-underline: links-underline,\n links-show-external-link-icon: links-show-external-link-icon,\n // Header\n header-alignment: header-alignment,\n header-photo-width: header-photo-width,\n header-space-below-name: header-space-below-name,\n header-space-below-headline: header-space-below-headline,\n header-space-below-connections: header-space-below-connections,\n header-connections-hyperlink: header-connections-hyperlink,\n header-connections-show-icons: header-connections-show-icons,\n header-connections-display-urls-instead-of-usernames: header-connections-display-urls-instead-of-usernames,\n header-connections-separator: header-connections-separator,\n header-connections-space-between-connections: header-connections-space-between-connections,\n // Section titles\n section-titles-type: section-titles-type,\n section-titles-line-thickness: section-titles-line-thickness,\n section-titles-space-above: section-titles-space-above,\n section-titles-space-below: section-titles-space-below,\n // Sections\n sections-allow-page-break: sections-allow-page-break,\n sections-space-between-regular-entries: sections-space-between-regular-entries,\n sections-space-between-text-based-entries: sections-space-between-text-based-entries,\n // Entries\n entries-date-and-location-width: entries-date-and-location-width,\n entries-side-space: entries-side-space,\n entries-space-between-columns: entries-space-between-columns,\n entries-allow-page-break: entries-allow-page-break,\n entries-summary-space-left: entries-summary-space-left,\n entries-summary-space-above: entries-summary-space-above,\n entries-highlights-bullet: entries-highlights-bullet,\n entries-highlights-nested-bullet: entries-highlights-nested-bullet,\n entries-highlights-space-left: entries-highlights-space-left,\n entries-highlights-space-above: entries-highlights-space-above,\n entries-highlights-space-between-items: entries-highlights-space-between-items,\n entries-highlights-space-between-bullet-and-text: entries-highlights-space-between-bullet-and-text,\n entries-degree-width: entries-degree-width,\n // Internal computed values\n justify: justify,\n ))\n\n // Metadata:\n #set document(author: name, title: title, date: date)\n\n // Page:\n #set page(\n margin: (\n top: page-top-margin,\n bottom: page-bottom-margin,\n left: page-left-margin,\n right: page-right-margin,\n ),\n paper: page-size,\n footer: if page-show-footer and footer != none and footer != \"\" {\n text(\n fill: colors-footer,\n align(center, [#footer]),\n size: 0.9em,\n )\n } else {\n none\n },\n footer-descent: 0% - 0.6em + page-bottom-margin / 2,\n )\n\n // Text:\n #set text(\n font: typography-font-family-body,\n size: typography-font-size-body,\n lang: locale-catalog-language,\n dir: text-direction,\n hyphenate: hyphenate,\n fill: colors-body,\n // Disable ligatures for better ATS compatibility:\n ligatures: true,\n )\n\n // Main heading (name):\n #show heading.where(level: 1): it => [\n #set par(spacing: 0pt)\n #set align(header-alignment)\n #set text(\n font: typography-font-family-name,\n size: typography-font-size-name,\n fill: colors-name,\n weight: if typography-bold-name { 700 } else { 400 },\n )\n #let body\n #if typography-small-caps-name {\n body = [#smallcaps(it.body)]\n } else {\n body = [#it.body]\n }\n #body\n // Vertical space after the name\n #v(header-space-below-name, weak: true)\n ]\n\n // Section titles:\n #show heading.where(level: 2): it => [\n #let is-centered = section-titles-type in (\"centered_without_line\", \"centered_with_partial_line\", \"centered_with_centered_partial_line\", \"centered_with_full_line\")\n #set align(if is-centered { center } else { start-align })\n #set text(size: (1em / 1.2)) // reset\n #set text(\n font: typography-font-family-section-titles,\n size: (typography-font-size-section-titles),\n weight: if typography-bold-section-titles { 700 } else { 400 },\n fill: colors-section-titles,\n )\n #let section-title = (\n if typography-small-caps-section-titles [\n #smallcaps(it.body)\n ] else [\n #it.body\n ]\n )\n // Vertical space above the section title\n #v(section-titles-space-above, weak: true)\n\n #block(\n breakable: false,\n width: 100%,\n [\n #if section-titles-type == \"moderncv\" [\n #grid(\n columns: (entries-date-and-location-width + entries-side-space, 1fr),\n column-gutter: entries-space-between-columns,\n align: (end-align, start-align),\n [\n #align(horizon, box(\n width: 1fr,\n height: section-titles-line-thickness,\n fill: colors-section-titles,\n ))\n ],\n [\n #section-title\n ],\n )\n ] else if section-titles-type == \"centered_without_line\" [\n #section-title\n ] else if section-titles-type == \"centered_with_partial_line\" [\n #grid(\n columns: (1fr, auto, 1fr),\n align: (bottom, center + bottom, bottom),\n column-gutter: 0.3em,\n [#box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)],\n [#section-title],\n [#box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)],\n )\n ] else if section-titles-type == \"centered_with_centered_partial_line\" [\n #grid(\n columns: (1fr, auto, 1fr),\n align: (horizon, center, horizon),\n column-gutter: 0.3em,\n [#box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)],\n [#section-title],\n [#box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)],\n )\n ] else if section-titles-type == \"centered_with_full_line\" [\n #section-title\n #v(typography-font-size-body * 0.3)\n #box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)\n ] else [\n #section-title\n #if section-titles-type == \"with_partial_line\" [\n #box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)\n ] else if section-titles-type == \"with_full_line\" [\n\n #v(typography-font-size-body * 0.3)\n #box(width: 1fr, height: section-titles-line-thickness, fill: colors-section-titles)\n ]\n ]\n ],\n )\n\n // Vertical space after the section title\n #v(section-titles-space-below - 0.5em)\n ]\n\n // Top note:\n #if page-show-top-note and top-note != none and top-note != \"\" {\n let dx = if is-rtl { entries-side-space } else { -entries-side-space }\n place(\n top + end-align,\n dy: -page-top-margin / 2,\n dx: dx,\n text(\n [#top-note],\n fill: colors-top-note,\n size: 0.9em,\n ),\n )\n }\n\n // From: https://github.com/typst/typst/issues/2666\n #let group-sections(content) = {\n let sections = ()\n let preamble = () // Content before any heading\n\n for element in content.children {\n if element.func() == heading {\n // Push a new section\n sections.push((element, ()))\n } else if sections.len() > 0 {\n // Add to current section\n sections.last().at(1).push(element)\n } else {\n // No heading yet - this is preamble content\n preamble.push(element)\n }\n }\n\n // Join the content in each section\n let result = sections.map(it => {\n let (title, content) = it\n (title, content.join())\n })\n\n // Return both preamble and sections\n (preamble: preamble.join(), sections: result)\n }\n\n #set par(spacing: 0cm)\n\n #let grouped = group-sections(doc)\n\n // Render preamble content (before any heading)\n #if grouped.preamble != none and grouped.preamble.func() != parbreak [\n #block(breakable: sections-allow-page-break)[\n #grouped.preamble\n ]\n ]\n\n // Render sections as before\n #for (section-title, section-content) in grouped.sections [\n #section-title\n #let should-skip = {\n let skip = false\n if section-content != none and section-content.has(\"children\") {\n for child in section-content.children {\n if child.func() == metadata and child.value == \"skip-content-area\" {\n skip = true\n break\n }\n }\n }\n skip\n }\n #if section-content != none and section-content.func() != parbreak [\n #block(breakable: sections-allow-page-break)[\n #if should-skip [\n #section-content\n ] else [\n #content-area(section-content)\n ]\n ]\n ]\n ]\n]\n","[package]\nname = \"rendercv\"\nversion = \"0.3.0\"\nentrypoint = \"lib.typ\"\nauthors = [\"Sina Atalay <dev@atalay.biz>\"]\nlicense = \"MIT\"\ndescription = \"Resume builder for academics and engineers\"\nrepository = \"https://github.com/rendercv/rendercv\"\nkeywords = [\"rendercv\", \"cv\", \"resume\", \"curriculum-vitae\"]\ncategories = [\"cv\"]\ndisciplines = []\ncompiler = \"0.14.0\"\nexclude = [\"examples/*.pdf\"]\n\n[template]\npath = \"template\"\nentrypoint = \"main.typ\"\nthumbnail = \"thumbnail.png\"\n","/**\n * Load a single bundled font file with in-memory cache.\n * Node: reads from src/renderer/assets/fonts on disk (fast, no bundler chunks).\n * Browser: dynamic import of the binary asset.\n */\nconst fontFileCache = new Map<string, Uint8Array>();\nlet nodeFontsRoot: string | null | undefined;\nlet browserFontsBaseUrl = '/fonts';\nlet fontsUrlConfigured = false;\n\nexport function configureBrowserFonts(baseUrl = '/fonts'): void {\n fontsUrlConfigured = true;\n browserFontsBaseUrl = baseUrl.replace(/\\/$/, '');\n}\n\nexport function isFontsUrlConfigured(): boolean {\n return fontsUrlConfigured;\n}\n\nfunction isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && Boolean(process.versions?.node);\n}\n\nasync function resolveNodeFontsRoot(): Promise<string | null> {\n if (nodeFontsRoot !== undefined) {\n return nodeFontsRoot;\n }\n if (!isNodeRuntime()) {\n nodeFontsRoot = null;\n return null;\n }\n\n const [{ existsSync }, path, { fileURLToPath }] = await Promise.all([\n import('node:fs'),\n import('node:path'),\n import('node:url'),\n ]);\n\n const cwd = process.cwd();\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const candidates = [\n path.resolve(moduleDir, '../assets/fonts'),\n path.resolve(moduleDir, '../../assets/fonts'),\n path.resolve(moduleDir, '../../../assets/fonts'),\n path.join(cwd, 'assets/fonts'),\n path.join(cwd, 'node_modules/rendercv-ts/assets/fonts'),\n path.join(cwd, 'rendercv-ts/assets/fonts'),\n path.join(cwd, 'src/renderer/assets/fonts'),\n path.join(cwd, 'rendercv-ts/src/renderer/assets/fonts'),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n nodeFontsRoot = candidate;\n return candidate;\n }\n }\n\n nodeFontsRoot = null;\n return null;\n}\n\nasync function loadBundledFontPath(relativePath: string): Promise<Uint8Array> {\n const cached = fontFileCache.get(relativePath);\n if (cached) {\n return cached;\n }\n\n const fontsRoot = await resolveNodeFontsRoot();\n let bytes: Uint8Array;\n\n if (fontsRoot) {\n const [{ readFile }, path] = await Promise.all([\n import('node:fs/promises'),\n import('node:path'),\n ]);\n bytes = new Uint8Array(await readFile(path.join(fontsRoot, relativePath)));\n } else if (typeof window !== 'undefined') {\n const response = await fetch(\n `${browserFontsBaseUrl}/${relativePath.split('/').map(encodeURIComponent).join('/')}`,\n );\n if (!response.ok) {\n throw new Error(`Failed to load font: ${relativePath} (${response.status})`);\n }\n bytes = new Uint8Array(await response.arrayBuffer());\n } else {\n const mod = await import(`../assets/fonts/${relativePath}?binary`);\n bytes = mod.default as Uint8Array;\n }\n\n fontFileCache.set(relativePath, bytes);\n return bytes;\n}\n\nexport async function loadBundledFontPaths(paths: readonly string[]): Promise<Uint8Array[]> {\n return Promise.all(paths.map((relativePath) => loadBundledFontPath(relativePath)));\n}\n","/**\n * Resolve bundled runtime asset locations (fonts + Typst WASM).\n */\nimport { configureBrowserFonts, isFontsUrlConfigured } from './fonts/load_bundled_font';\nimport { configureBrowserWasm, isWasmUrlConfigured, setBrowserWasmBytes } from './typst_setup';\n\nexport interface RendercvAssetPaths {\n wasmBaseUrl: string;\n fontsBaseUrl: string;\n}\n\nlet assetsConfigured = false;\n\n/** Default browser URLs when assets are served from the app origin (e.g. /wasm, /fonts). */\nexport function resolveBundledAssetPaths(origin = ''): RendercvAssetPaths {\n const base = origin.replace(/\\/$/, '');\n return {\n wasmBaseUrl: `${base}/wasm`,\n fontsBaseUrl: `${base}/fonts`,\n };\n}\n\nfunction isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && Boolean(process.versions?.node);\n}\n\nasync function resolvePublishAssetsRoot(): Promise<string | null> {\n if (!isNodeRuntime()) {\n return null;\n }\n\n const [{ existsSync }, path, { fileURLToPath }] = await Promise.all([\n import('node:fs'),\n import('node:path'),\n import('node:url'),\n ]);\n\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const cwd = process.cwd();\n const candidates = [\n path.resolve(moduleDir, '../../assets'),\n path.resolve(moduleDir, '../assets'),\n path.join(cwd, 'assets'),\n path.join(cwd, 'node_modules/rendercv-ts/assets'),\n path.join(cwd, 'rendercv-ts/assets'),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(path.join(candidate, 'wasm')) && existsSync(path.join(candidate, 'fonts'))) {\n return candidate;\n }\n }\n\n return null;\n}\n\nasync function injectWasmFromDisk(assetsRoot: string): Promise<void> {\n const [{ readFile }, path] = await Promise.all([import('node:fs/promises'), import('node:path')]);\n const wasmDir = path.join(assetsRoot, 'wasm');\n const [compiler, renderer] = await Promise.all([\n readFile(path.join(wasmDir, 'typst_ts_web_compiler_bg.wasm')),\n readFile(path.join(wasmDir, 'typst_ts_renderer_bg.wasm')),\n ]);\n setBrowserWasmBytes(compiler.buffer, renderer.buffer);\n}\n\n/**\n * Configure font/WASM loading. In the browser, defaults to `{origin}/wasm` and `{origin}/fonts`.\n * In Node (tests), loads WASM bytes from the bundled assets/ directory on disk.\n */\nexport async function configureDefaultAssets(options?: {\n origin?: string;\n}): Promise<RendercvAssetPaths> {\n if (assetsConfigured) {\n return resolveBundledAssetPaths(options?.origin ?? getBrowserOrigin());\n }\n\n const assetsRoot = await resolvePublishAssetsRoot();\n let wasmLoadedFromDisk = false;\n\n if (assetsRoot && isNodeRuntime()) {\n await injectWasmFromDisk(assetsRoot);\n wasmLoadedFromDisk = true;\n }\n\n const origin = options?.origin ?? getBrowserOrigin();\n const paths = resolveBundledAssetPaths(origin);\n\n if (typeof window !== 'undefined' && origin) {\n if (!isWasmUrlConfigured() && !wasmLoadedFromDisk) {\n configureBrowserWasm(paths.wasmBaseUrl);\n }\n if (!isFontsUrlConfigured() && !assetsRoot) {\n configureBrowserFonts(paths.fontsBaseUrl);\n }\n }\n\n assetsConfigured = true;\n return paths;\n}\n\nfunction getBrowserOrigin(): string {\n if (typeof window === 'undefined') {\n return '';\n }\n return window.location?.origin ?? '';\n}\n","/** Auto-generated by scripts/generate-font-manifest.mjs — do not edit. */\n\nimport { loadBundledFontPaths as loadFontPaths } from '../fonts/load_bundled_font.js';\n\nexport const FONT_FAMILY_ALIASES: Readonly<Record<string, string>> = {\n 'Vazirmatn Variable': 'Vazirmatn',\n};\n\nexport const bundledFontsByFamily: Readonly<Record<string, readonly string[]>> = {\n 'EB Garamond': [\n 'EB Garamond/EBGaramond-Bold.ttf',\n 'EB Garamond/EBGaramond-BoldItalic.ttf',\n 'EB Garamond/EBGaramond-Italic.ttf',\n 'EB Garamond/EBGaramond-Regular.ttf',\n ],\n 'Fontin': [\n 'Fontin/Fontin-Bold.otf',\n 'Fontin/Fontin-Italic.otf',\n 'Fontin/Fontin-Regular.otf',\n ],\n 'Gentium Book Plus': [\n 'Gentium Book Plus/GentiumBookPlus-Bold.ttf',\n 'Gentium Book Plus/GentiumBookPlus-BoldItalic.ttf',\n 'Gentium Book Plus/GentiumBookPlus-Italic.ttf',\n 'Gentium Book Plus/GentiumBookPlus-Regular.ttf',\n ],\n 'Lato': [\n 'Lato/Lato-Bold.ttf',\n 'Lato/Lato-BoldItalic.ttf',\n 'Lato/Lato-Italic.ttf',\n 'Lato/Lato-Regular.ttf',\n ],\n 'Raleway': [\n 'Raleway/Raleway-Bold.ttf',\n 'Raleway/Raleway-BoldItalic.ttf',\n 'Raleway/Raleway-Italic.ttf',\n 'Raleway/Raleway-Regular.ttf',\n ],\n 'Source Sans 3': [\n 'Source Sans 3/SourceSans3-Bold.ttf',\n 'Source Sans 3/SourceSans3-BoldItalic.ttf',\n 'Source Sans 3/SourceSans3-Italic.ttf',\n 'Source Sans 3/SourceSans3-Regular.ttf',\n ],\n 'Ubuntu': [\n 'Ubuntu/Ubuntu-Bold.ttf',\n 'Ubuntu/Ubuntu-BoldItalic.ttf',\n 'Ubuntu/Ubuntu-Italic.ttf',\n 'Ubuntu/Ubuntu-Regular.ttf',\n ],\n 'Vazirmatn': [\n 'Vazirmatn/Vazirmatn-Black.ttf',\n 'Vazirmatn/Vazirmatn-Bold.ttf',\n 'Vazirmatn/Vazirmatn-ExtraBold.ttf',\n 'Vazirmatn/Vazirmatn-ExtraLight.ttf',\n 'Vazirmatn/Vazirmatn-Light.ttf',\n 'Vazirmatn/Vazirmatn-Medium.ttf',\n 'Vazirmatn/Vazirmatn-Regular.ttf',\n 'Vazirmatn/Vazirmatn-SemiBold.ttf',\n 'Vazirmatn/Vazirmatn-Thin.ttf',\n ],\n 'XCharter': [\n 'XCharter/XCharter-Bold.otf',\n 'XCharter/XCharter-BoldItalic.otf',\n 'XCharter/XCharter-Italic.otf',\n 'XCharter/XCharter-Regular.otf',\n ],\n};\n\nexport const bundledFontPaths: readonly string[] = [\n 'EB Garamond/EBGaramond-Bold.ttf',\n 'EB Garamond/EBGaramond-BoldItalic.ttf',\n 'EB Garamond/EBGaramond-Italic.ttf',\n 'EB Garamond/EBGaramond-Regular.ttf',\n 'Fontin/Fontin-Bold.otf',\n 'Fontin/Fontin-Italic.otf',\n 'Fontin/Fontin-Regular.otf',\n 'Gentium Book Plus/GentiumBookPlus-Bold.ttf',\n 'Gentium Book Plus/GentiumBookPlus-BoldItalic.ttf',\n 'Gentium Book Plus/GentiumBookPlus-Italic.ttf',\n 'Gentium Book Plus/GentiumBookPlus-Regular.ttf',\n 'Lato/Lato-Bold.ttf',\n 'Lato/Lato-BoldItalic.ttf',\n 'Lato/Lato-Italic.ttf',\n 'Lato/Lato-Regular.ttf',\n 'Raleway/Raleway-Bold.ttf',\n 'Raleway/Raleway-BoldItalic.ttf',\n 'Raleway/Raleway-Italic.ttf',\n 'Raleway/Raleway-Regular.ttf',\n 'Source Sans 3/SourceSans3-Bold.ttf',\n 'Source Sans 3/SourceSans3-BoldItalic.ttf',\n 'Source Sans 3/SourceSans3-Italic.ttf',\n 'Source Sans 3/SourceSans3-Regular.ttf',\n 'Ubuntu/Ubuntu-Bold.ttf',\n 'Ubuntu/Ubuntu-BoldItalic.ttf',\n 'Ubuntu/Ubuntu-Italic.ttf',\n 'Ubuntu/Ubuntu-Regular.ttf',\n 'Vazirmatn/Vazirmatn-Black.ttf',\n 'Vazirmatn/Vazirmatn-Bold.ttf',\n 'Vazirmatn/Vazirmatn-ExtraBold.ttf',\n 'Vazirmatn/Vazirmatn-ExtraLight.ttf',\n 'Vazirmatn/Vazirmatn-Light.ttf',\n 'Vazirmatn/Vazirmatn-Medium.ttf',\n 'Vazirmatn/Vazirmatn-Regular.ttf',\n 'Vazirmatn/Vazirmatn-SemiBold.ttf',\n 'Vazirmatn/Vazirmatn-Thin.ttf',\n 'XCharter/XCharter-Bold.otf',\n 'XCharter/XCharter-BoldItalic.otf',\n 'XCharter/XCharter-Italic.otf',\n 'XCharter/XCharter-Regular.otf',\n];\n\nexport async function loadBundledFontPaths(paths: readonly string[]): Promise<Uint8Array[]> {\n return loadFontPaths(paths);\n}\n\n/** @deprecated Use loadBundledFontPaths with model-specific paths instead. */\nexport async function loadBundledFonts(): Promise<Uint8Array[]> {\n return loadBundledFontPaths(bundledFontPaths);\n}\n\n","/**\n * Disk cache for Typst base fonts in Node (avoids re-downloading on every CLI run).\n */\nimport { createHash } from 'node:crypto';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nconst CACHE_VERSION = 'v1';\nlet cacheDir: string | null | undefined;\n\nfunction isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && Boolean(process.versions?.node);\n}\n\nfunction getCacheDir(): string | null {\n if (cacheDir !== undefined) {\n return cacheDir;\n }\n if (!isNodeRuntime()) {\n cacheDir = null;\n return null;\n }\n const dir = path.join(process.cwd(), '.rendercv-cache', 'typst-fonts', CACHE_VERSION);\n try {\n mkdirSync(dir, { recursive: true });\n cacheDir = dir;\n return dir;\n } catch {\n cacheDir = null;\n return null;\n }\n}\n\nfunction cacheFilePath(url: string): string | null {\n const dir = getCacheDir();\n if (!dir) {\n return null;\n }\n const hash = createHash('sha256').update(url).digest('hex').slice(0, 16);\n const base = path.basename(url);\n return path.join(dir, `${hash}-${base}`);\n}\n\nexport async function fetchTypstFontBytes(url: string): Promise<Uint8Array> {\n const cachedPath = cacheFilePath(url);\n if (cachedPath && existsSync(cachedPath)) {\n return new Uint8Array(readFileSync(cachedPath));\n }\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Font file fetch failed (${response.status}): ${url}`);\n }\n const bytes = new Uint8Array(await response.arrayBuffer());\n\n if (cachedPath) {\n try {\n writeFileSync(cachedPath, bytes);\n } catch {\n // ignore cache write failures\n }\n }\n\n return bytes;\n}\n","/**\n * Bundled font loading for Typst WASM — no network theme-font fetching.\n * Loads only the font families required by the current model.\n */\nimport type { RenderCVModel } from '../../schema/models/rendercv_model';\nimport {\n FONT_FAMILY_ALIASES,\n bundledFontsByFamily,\n loadBundledFontPaths,\n} from '../assets/font_manifest';\n\nconst TYPST_TEXT_FONT_PREFIX =\n 'https://cdn.jsdelivr.net/gh/typst/typst-assets@v0.13.1/files/fonts/';\nconst TYPST_TEXT_FONTS = [\n 'DejaVuSansMono-Bold.ttf',\n 'DejaVuSansMono-BoldOblique.ttf',\n 'DejaVuSansMono-Oblique.ttf',\n 'DejaVuSansMono.ttf',\n 'LibertinusSerif-Bold.otf',\n 'LibertinusSerif-BoldItalic.otf',\n 'LibertinusSerif-Italic.otf',\n 'LibertinusSerif-Regular.otf',\n 'LibertinusSerif-Semibold.otf',\n 'LibertinusSerif-SemiboldItalic.otf',\n 'NewCM10-Bold.otf',\n 'NewCM10-BoldItalic.otf',\n 'NewCM10-Italic.otf',\n 'NewCM10-Regular.otf',\n 'NewCMMath-Bold.otf',\n 'NewCMMath-Book.otf',\n 'NewCMMath-Regular.otf',\n] as const;\n\nlet typstTextFontBytesPromise: Promise<Uint8Array[]> | null = null;\nconst bundledFontBytesByKey = new Map<string, Promise<Uint8Array[]>>();\n\nfunction normalizeFamilyName(family: string): string {\n return family.trim();\n}\n\nfunction collectFontFamilies(model: RenderCVModel): string[] {\n const typography = model.design.typography;\n const families = new Set<string>();\n const add = (value: string | null | undefined) => {\n if (value) {\n families.add(normalizeFamilyName(value));\n }\n };\n\n add(typography.font_family.body);\n add(typography.font_family.name);\n add(typography.font_family.headline);\n add(typography.font_family.connections);\n add(typography.font_family.section_titles);\n\n return [...families];\n}\n\nexport function modelFontCacheKey(model: RenderCVModel): string {\n return collectFontFamilies(model).sort().join(';');\n}\n\nfunction resolveBundledFolder(family: string): string {\n return FONT_FAMILY_ALIASES[family] ?? family;\n}\n\nfunction bundledPathsForFamilies(families: readonly string[]): string[] {\n const paths = new Set<string>();\n for (const family of families) {\n const folder = resolveBundledFolder(family);\n for (const path of bundledFontsByFamily[folder] ?? []) {\n paths.add(path);\n }\n }\n return [...paths].sort();\n}\n\nasync function fetchRemoteFontBytes(url: string): Promise<Uint8Array> {\n if (typeof process !== 'undefined' && process.versions?.node) {\n const { fetchTypstFontBytes } = await import('./typst_font_cache.js');\n return fetchTypstFontBytes(url);\n }\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Font file fetch failed (${response.status}): ${url}`);\n }\n return new Uint8Array(await response.arrayBuffer());\n}\n\nasync function loadTypstTextFontBytes(): Promise<Uint8Array[]> {\n if (!typstTextFontBytesPromise) {\n typstTextFontBytesPromise = Promise.all(\n TYPST_TEXT_FONTS.map((fileName) =>\n fetchRemoteFontBytes(`${TYPST_TEXT_FONT_PREFIX}${fileName}`),\n ),\n );\n }\n return typstTextFontBytesPromise;\n}\n\nasync function loadBundledFontBytesForFamilies(families: readonly string[]): Promise<Uint8Array[]> {\n const paths = bundledPathsForFamilies(families);\n if (paths.length === 0) {\n return [];\n }\n return loadBundledFontPaths(paths);\n}\n\nexport async function loadBaseFontsForTypst(): Promise<Uint8Array[]> {\n return loadTypstTextFontBytes();\n}\n\n/** Typst base fonts + bundled CV fonts needed by the model only. */\nexport async function loadFontsForTypst(model: RenderCVModel): Promise<Uint8Array[]> {\n const key = modelFontCacheKey(model);\n let promise = bundledFontBytesByKey.get(key);\n if (!promise) {\n promise = (async () => {\n const families = collectFontFamilies(model);\n const [typstTextFonts, themeFonts] = await Promise.all([\n loadTypstTextFontBytes(),\n loadBundledFontBytesForFamilies(families),\n ]);\n return [...typstTextFonts, ...themeFonts];\n })();\n bundledFontBytesByKey.set(key, promise);\n }\n return promise;\n}\n","const DB_NAME = 'rendercv-fonts';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'fonts-v1';\n\nconst memoryCache = new Map<string, Uint8Array>();\n\nfunction openDatabase(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, DB_VERSION);\n request.onerror = () =>\n reject(request.error ?? new Error('Failed to open font cache database'));\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME);\n }\n };\n request.onsuccess = () => resolve(request.result);\n });\n}\n\nasync function readFromIndexedDb(key: string): Promise<Uint8Array | null> {\n if (typeof indexedDB === 'undefined') {\n return null;\n }\n const db = await openDatabase();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n const request = store.get(key);\n request.onerror = () => reject(request.error ?? new Error('Font cache read failed'));\n request.onsuccess = () => {\n const value = request.result;\n resolve(value instanceof Uint8Array ? value : null);\n };\n });\n}\n\nasync function writeToIndexedDb(key: string, bytes: Uint8Array): Promise<void> {\n if (typeof indexedDB === 'undefined') {\n return;\n }\n const db = await openDatabase();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const request = store.put(bytes, key);\n request.onerror = () => reject(request.error ?? new Error('Font cache write failed'));\n request.onsuccess = () => resolve();\n });\n}\n\nexport async function getCachedFontBytes(key: string): Promise<Uint8Array | null> {\n const memoryHit = memoryCache.get(key);\n if (memoryHit) {\n return memoryHit;\n }\n const indexedHit = await readFromIndexedDb(key);\n if (indexedHit) {\n memoryCache.set(key, indexedHit);\n }\n return indexedHit;\n}\n\nexport async function setCachedFontBytes(key: string, bytes: Uint8Array): Promise<void> {\n memoryCache.set(key, bytes);\n await writeToIndexedDb(key, bytes);\n}\n\nexport async function clearFontCache(): Promise<void> {\n memoryCache.clear();\n if (typeof indexedDB === 'undefined') {\n return;\n }\n const db = await openDatabase();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const request = store.clear();\n request.onerror = () => reject(request.error ?? new Error('Font cache clear failed'));\n request.onsuccess = () => resolve();\n });\n}\n","/**\n * Bundled Typst package + font setup for the WASM compiler.\n */\nimport {\n type TypstCompiler,\n type TypstRenderer,\n createTypstCompiler,\n createTypstFontBuilder,\n createTypstRenderer,\n initOptions,\n} from '@myriaddreamin/typst.ts';\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport rendercvIconsTyp from './assets/rendercv_typst/icons.typ?raw';\nimport rendercvLibTyp from './assets/rendercv_typst/lib.typ?raw';\nimport rendercvTypstToml from './assets/rendercv_typst/typst.toml?raw';\n\nexport const RENDERCV_PACKAGE_VERSION = readPackageVersion(rendercvTypstToml);\n\nconst MAIN_TYP_PATH = '/main.typ';\nconst TYPST_ROOT = '/';\n\ninterface TypstRuntime {\n compiler: TypstCompiler;\n renderer: TypstRenderer;\n}\n\nlet runtimePromise: Promise<TypstRuntime> | null = null;\nlet cachedFontBytes: Uint8Array[] | null = null;\nlet cachedFontModelKey: string | null = null;\n\nlet browserWasmBaseUrl = '/wasm';\nlet browserWasmBytes: {\n compiler: ArrayBuffer;\n renderer: ArrayBuffer;\n} | null = null;\nlet browserWasmPromise: Promise<void> | null = null;\nlet wasmUrlConfigured = false;\n\nexport function configureBrowserWasm(baseUrl = '/wasm'): void {\n wasmUrlConfigured = true;\n browserWasmBaseUrl = baseUrl.replace(/\\/$/, '');\n browserWasmBytes = null;\n browserWasmPromise = null;\n}\n\nexport function isWasmUrlConfigured(): boolean {\n return wasmUrlConfigured;\n}\n\n/** Inject WASM modules directly (used in Node tests and when assets are read from disk). */\nexport function setBrowserWasmBytes(compiler: ArrayBuffer, renderer: ArrayBuffer): void {\n browserWasmBytes = { compiler, renderer };\n browserWasmPromise = Promise.resolve();\n}\n\nasync function ensureBrowserWasm(): Promise<void> {\n if (typeof window === 'undefined') {\n return;\n }\n if (browserWasmBytes) {\n return;\n }\n if (!browserWasmPromise) {\n browserWasmPromise = (async () => {\n const fetchWasm = async (name: string): Promise<ArrayBuffer> => {\n const response = await fetch(`${browserWasmBaseUrl}/${name}`);\n if (!response.ok) {\n throw new Error(`Failed to load Typst WASM: ${name} (${response.status})`);\n }\n return response.arrayBuffer();\n };\n const [compiler, renderer] = await Promise.all([\n fetchWasm('typst_ts_web_compiler_bg.wasm'),\n fetchWasm('typst_ts_renderer_bg.wasm'),\n ]);\n browserWasmBytes = { compiler, renderer };\n })();\n }\n await browserWasmPromise;\n}\n\nfunction browserCompilerInitOptions(): { getModule?: () => ArrayBuffer } {\n if (!browserWasmBytes) {\n return {};\n }\n return { getModule: () => browserWasmBytes!.compiler };\n}\n\nfunction browserRendererInitOptions(): { getModule?: () => ArrayBuffer } {\n if (!browserWasmBytes) {\n return {};\n }\n return { getModule: () => browserWasmBytes!.renderer };\n}\n\nclass BundledPackageRegistry {\n private readonly packages = new Set<string>();\n\n register(name: string, version: string): void {\n this.packages.add(`${name}/${version}`);\n }\n\n resolve(\n spec: { namespace: string; name: string; version: string },\n _context: unknown,\n ): string | undefined {\n if (spec.namespace !== 'preview') {\n return undefined;\n }\n const key = `${spec.name}/${spec.version}`;\n if (!this.packages.has(key)) {\n return undefined;\n }\n return `/preview/${spec.name}/${spec.version}`;\n }\n}\n\nfunction createBundledPackageRegistry(): BundledPackageRegistry {\n const registry = new BundledPackageRegistry();\n registry.register('rendercv', RENDERCV_PACKAGE_VERSION);\n return registry;\n}\n\nfunction readPackageVersion(typstToml: string): string {\n const match = typstToml.match(/^\\s*version\\s*=\\s*\"([^\"]+)\"/m);\n if (!match) {\n throw new Error('Could not find version in bundled typst.toml');\n }\n return match[1]!;\n}\n\nfunction encodeText(text: string): Uint8Array {\n return new TextEncoder().encode(text);\n}\n\nfunction packageFilePath(name: string, version: string, file: string): string {\n return `/preview/${name}/${version}/${file}`;\n}\n\nfunction registerPackage(\n compiler: TypstCompiler,\n name: string,\n version: string,\n files: Record<string, string>,\n): void {\n for (const [file, content] of Object.entries(files)) {\n compiler.mapShadow(packageFilePath(name, version, file), encodeText(content));\n }\n}\n\nconst RENDERCV_PACKAGE_FILES = {\n 'typst.toml': rendercvTypstToml,\n 'lib.typ': rendercvLibTyp,\n 'icons.typ': rendercvIconsTyp,\n};\n\nfunction registerRendercvPackage(compiler: TypstCompiler): void {\n registerPackage(compiler, 'rendercv', RENDERCV_PACKAGE_VERSION, RENDERCV_PACKAGE_FILES);\n}\n\nasync function createRuntime(): Promise<TypstRuntime> {\n await ensureBrowserWasm();\n const compilerWasmOptions = browserCompilerInitOptions();\n const rendererWasmOptions = browserRendererInitOptions();\n\n const compiler = createTypstCompiler();\n await compiler.init({\n ...compilerWasmOptions,\n beforeBuild: [\n initOptions.disableDefaultFontAssets(),\n initOptions.withPackageRegistry(createBundledPackageRegistry()),\n ],\n });\n\n registerRendercvPackage(compiler);\n\n const renderer = createTypstRenderer();\n await renderer.init(rendererWasmOptions);\n\n return { compiler, renderer };\n}\n\nasync function applyFontBytesToCompiler(\n compiler: TypstCompiler,\n fontBytes: Uint8Array[],\n): Promise<void> {\n await ensureBrowserWasm();\n const fontBuilder = createTypstFontBuilder();\n await fontBuilder.init(browserCompilerInitOptions());\n for (const bytes of fontBytes) {\n if (bytes.length > 0) {\n await fontBuilder.addFontData(bytes);\n }\n }\n await fontBuilder.build(async (resolver) => {\n compiler.setFonts(resolver);\n });\n}\n\nexport async function getTypstRuntime(): Promise<TypstRuntime> {\n if (!runtimePromise) {\n runtimePromise = (async () => {\n const { configureDefaultAssets } = await import('./asset_paths.js');\n await configureDefaultAssets();\n return createRuntime();\n })();\n }\n return runtimePromise;\n}\n\nexport async function preloadTypst(): Promise<void> {\n const { configureDefaultAssets } = await import('./asset_paths.js');\n await configureDefaultAssets();\n await getTypstRuntime();\n}\n\nexport function decodeAssetBytes(value: string): Uint8Array {\n if (value.startsWith('data:')) {\n const base64 = value.split(',')[1] ?? '';\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n return encodeText(value);\n}\n\nasync function resolveFontBytesForModel(model: RenderCVModel): Promise<Uint8Array[]> {\n const { loadFontsForTypst, modelFontCacheKey } = await import('./fonts/font_registry.js');\n const key = modelFontCacheKey(model);\n if (cachedFontModelKey === key && cachedFontBytes) {\n return cachedFontBytes;\n }\n\n cachedFontBytes = await loadFontsForTypst(model);\n cachedFontModelKey = key;\n return cachedFontBytes;\n}\n\nexport async function ensureFontsForModel(model: RenderCVModel): Promise<void> {\n const runtime = await getTypstRuntime();\n const fontBytes = await resolveFontBytesForModel(model);\n await applyFontBytesToCompiler(runtime.compiler, fontBytes);\n}\n\nexport async function prepareTypstCompilation(\n typstSource: string,\n options?: {\n photoName?: string | null;\n photoBytes?: Uint8Array | null;\n model?: RenderCVModel;\n },\n): Promise<{ compiler: TypstCompiler; mainFilePath: string }> {\n const runtime = await getTypstRuntime();\n await runtime.compiler.resetShadow();\n registerRendercvPackage(runtime.compiler);\n\n if (options?.model) {\n await ensureFontsForModel(options.model);\n } else if (cachedFontBytes === null) {\n const { loadBaseFontsForTypst } = await import('./fonts/font_registry.js');\n cachedFontBytes = await loadBaseFontsForTypst();\n cachedFontModelKey = 'bundled-only';\n await applyFontBytesToCompiler(runtime.compiler, cachedFontBytes);\n } else {\n await applyFontBytesToCompiler(runtime.compiler, cachedFontBytes);\n }\n\n runtime.compiler.addSource(MAIN_TYP_PATH, typstSource);\n\n if (options?.photoName && options.photoBytes) {\n runtime.compiler.mapShadow(`/${options.photoName}`, options.photoBytes);\n }\n\n return { compiler: runtime.compiler, mainFilePath: MAIN_TYP_PATH };\n}\n\nexport async function clearFontCache(): Promise<void> {\n const { clearFontCache: clearCache } = await import('./fonts/font_cache.js');\n await clearCache();\n cachedFontBytes = null;\n cachedFontModelKey = null;\n}\n\nexport { MAIN_TYP_PATH, TYPST_ROOT };\n","/**\n * rendercv-ts — TypeScript port (browser programmatic API).\n */\nexport { buildRendercvModel, RenderCvModelSchema } from './schema/models/rendercv_model';\nexport type { RenderCVModel } from './schema/models/rendercv_model';\nexport {\n buildRendercvModelFromYaml,\n readYaml,\n setByDottedPath,\n} from './schema/yaml_reader';\nexport type { BuildOptions, BuildResult } from './schema/yaml_reader';\n\nexport {\n RenderCVUserError,\n RenderCVUserValidationError,\n RenderCVValidationError,\n RenderCVInternalError,\n} from './schema/error-handling';\nexport { parseValidationErrors } from './schema/parse_validation_errors';\n\nexport { cvSchema } from './schema/models/cv/cv';\nexport type { Cv } from './schema/models/cv/cv';\nexport {\n DesignSchema,\n availableThemes,\n THEME_NAMES,\n} from './schema/models/design/design';\nexport type { ClassicTheme, ThemeName } from './schema/models/design/design';\n\nexport {\n LocaleSchema,\n availableLocales,\n} from './schema/models/locale/locales';\nexport type { Locale, LocaleName } from './schema/models/locale/locales';\n\nexport {\n generateTypst,\n generateMarkdown,\n generateHtml,\n generatePdf,\n generatePng,\n} from './renderer';\nexport type { RenderOptions, ProcessedRenderCVModel } from './renderer';\n\nexport { resolveRendercvFilePath, buildNameVariants } from './renderer/path_resolver';\nexport { processModel } from './renderer/templater/model_processor';\nexport { configureBrowserFonts } from './renderer/fonts/load_bundled_font';\nexport {\n preloadTypst,\n clearFontCache,\n configureBrowserWasm,\n} from './renderer/typst_setup';\nexport {\n configureDefaultAssets,\n resolveBundledAssetPaths,\n} from './renderer/asset_paths';\nexport type { RendercvAssetPaths } from './renderer/asset_paths';\nexport { PRESET_ICON_IDS } from './renderer/assets/icons/icon_ids';\nexport { resolveIconId } from './renderer/templater/connections';\n\nexport const VERSION = '0.1.0';\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","/**\n * Error types for the rendercv pipeline.\n *\n * Ported from src/rendercv/exception.py. We use classes (not dataclasses) and\n * preserve the structured shape so callers can map errors to YAML positions.\n */\n\nexport type YamlSource =\n | 'main_yaml_file'\n | 'design_yaml_file'\n | 'locale_yaml_file'\n | 'settings_yaml_file';\n\nexport type OverlaySourceKey = 'design' | 'locale' | 'settings';\n\n/** [[startLine, startCol], [endLine, endCol]] — 1-indexed, like ruamel.yaml. */\nexport type YamlLocation = [[number, number], [number, number]];\n\nexport const OVERLAY_SOURCE_TO_YAML_SOURCE: Record<OverlaySourceKey, YamlSource> = {\n design: 'design_yaml_file',\n locale: 'locale_yaml_file',\n settings: 'settings_yaml_file',\n};\n\n/**\n * Structured validation error paired with a YAML source location.\n *\n * Mirrors rendercv's `RenderCVValidationError` dataclass. The CLI / playground\n * uses `yaml_location` to point at the offending YAML span.\n */\nexport class RenderCVValidationError {\n constructor(\n public readonly schemaLocation: readonly string[] | null,\n public readonly yamlLocation: YamlLocation | null,\n public readonly yamlSource: YamlSource,\n public readonly message: string,\n public readonly input: string,\n ) {}\n}\n\n/** User-facing error carrying multiple structured validation errors. */\nexport class RenderCVUserValidationError extends Error {\n constructor(public readonly validationErrors: RenderCVValidationError[]) {\n const first = validationErrors[0];\n super(first ? first.message : 'Validation failed');\n this.name = 'RenderCVUserValidationError';\n }\n}\n\n/** User-facing error for recoverable problems (invalid input, missing files). */\nexport class RenderCVUserError extends Error {\n constructor(message?: string) {\n super(message);\n this.name = 'RenderCVUserError';\n }\n}\n\n/** Internal error indicating a bug in rendercv logic. Should never reach users. */\nexport class RenderCVInternalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'RenderCVInternalError';\n }\n}\n","/**\n * Map Zod validation issues to RenderCVValidationError — port of\n * `pydantic_error_handling.py`.\n */\nimport { parse as parseYaml } from 'yaml';\nimport type { ZodIssue } from 'zod';\nimport {\n OVERLAY_SOURCE_TO_YAML_SOURCE,\n type OverlaySourceKey,\n RenderCVValidationError,\n type YamlLocation,\n type YamlSource,\n} from './error-handling';\nimport errorDictionaryYaml from './error_dictionary.yaml?raw';\nimport {\n type OverlayDocuments,\n type YamlDocumentBundle,\n getCoordinatesOfKey,\n} from './yaml_document';\n\nconst ERROR_DICTIONARY = parseYaml(errorDictionaryYaml) as Record<string, string>;\n\nconst UNWANTED_TEXTS = ['Invalid email', 'Provide a valid email address.', 'Value error, '];\nconst UNWANTED_LOCATION_PARTS = [\n 'tagged-union',\n 'list',\n 'literal',\n 'int',\n 'str',\n 'constrained-str',\n 'function-',\n];\n\nexport const ENTRY_VALIDATION_PARAM = 'rendercvEntryValidation';\nexport const CAUSED_BY_PARAM = 'causedBy';\n\nexport interface ParseValidationErrorsOptions {\n mainDocument: YamlDocumentBundle;\n overlayDocuments?: OverlayDocuments;\n}\n\nfunction pathToLocation(path: readonly (string | number)[]): string[] {\n return path.map(String).filter((part) => !UNWANTED_LOCATION_PARTS.some((u) => part.includes(u)));\n}\n\nfunction formatMessage(rawMessage: string, location: string[]): string {\n let message = rawMessage;\n let normalizedLocation = location;\n for (const unwanted of UNWANTED_TEXTS) {\n message = message.replace(unwanted, '');\n }\n\n if (\n normalizedLocation.length > 0 &&\n normalizedLocation[normalizedLocation.length - 1] === 'end_date'\n ) {\n message =\n 'This is not a valid `end_date`! Please use either YYYY-MM-DD, YYYY-MM, ' +\n 'or YYYY format or \"present\"!';\n }\n\n if (\n normalizedLocation.length >= 2 &&\n normalizedLocation[normalizedLocation.length - 1] === 'date' &&\n normalizedLocation[normalizedLocation.length - 2] === 'current_date'\n ) {\n normalizedLocation = normalizedLocation.slice(0, -1);\n }\n if (\n normalizedLocation.length > 0 &&\n normalizedLocation[normalizedLocation.length - 1] === 'current_date'\n ) {\n message = 'This is not a valid `current_date`! Please use YYYY-MM-DD format or \"today\".';\n }\n\n // Email parity with Pydantic.\n if (message.includes('@') === false && rawMessage.toLowerCase().includes('email')) {\n message = 'An email address must have an @-sign.';\n }\n\n for (const [oldMsg, newMsg] of Object.entries(ERROR_DICTIONARY)) {\n if (message.includes(oldMsg)) {\n message = newMsg;\n break;\n }\n }\n\n // Zod-specific mappings for Python parity.\n if (message.includes('Expected string, received object')) {\n message = 'Input should be a valid string.';\n }\n if (message.includes('Expected array, received string')) {\n message = \"This field should contain a list of items but it doesn't.\";\n }\n if (message.includes('Required')) {\n message = 'This field is required.';\n }\n\n if (!message.endsWith('.')) message += '.';\n return message;\n}\n\nfunction getInputFromDictionary(root: Record<string, unknown>, location: string[]): unknown {\n let current: unknown = root;\n for (const key of location) {\n if (current === null || current === undefined) return '...';\n if (Array.isArray(current)) {\n const idx = Number(key);\n current = current[idx];\n } else if (typeof current === 'object') {\n current = (current as Record<string, unknown>)[key];\n } else {\n return '...';\n }\n }\n if (current === null || current === undefined) return '...';\n if (typeof current === 'object') return '...';\n return String(current);\n}\n\nfunction issueInput(issue: ZodIssue, rootDictionary?: Record<string, unknown>): string {\n const params = issue as ZodIssue & { input?: unknown };\n if (params.input !== undefined && typeof params.input !== 'object') {\n return String(params.input);\n }\n if (rootDictionary) {\n const loc = pathToLocation(issue.path);\n if (loc.length > 0) {\n const value = getInputFromDictionary(rootDictionary, loc);\n return typeof value === 'string' ? value : '...';\n }\n }\n return '...';\n}\n\nfunction resolveYamlBundle(\n location: string[],\n mainDocument: YamlDocumentBundle,\n overlayDocuments?: OverlayDocuments,\n): YamlDocumentBundle {\n if (location.length > 0 && overlayDocuments) {\n const key = location[0] as OverlaySourceKey;\n if (key in overlayDocuments && overlayDocuments[key]) {\n return overlayDocuments[key]!;\n }\n }\n return mainDocument;\n}\n\nfunction yamlSourceForLocation(\n location: string[],\n mainDocument: YamlDocumentBundle,\n overlayDocuments?: OverlayDocuments,\n): YamlSource {\n if (location.length > 0 && overlayDocuments) {\n const key = location[0] as OverlaySourceKey;\n if (key in overlayDocuments && overlayDocuments[key]) {\n return OVERLAY_SOURCE_TO_YAML_SOURCE[key];\n }\n }\n return mainDocument.source;\n}\n\nexport function parsePlainZodIssue(\n issue: ZodIssue,\n options: ParseValidationErrorsOptions,\n): RenderCVValidationError {\n let location = pathToLocation(issue.path);\n\n // Design/locale discriminator: skip synthetic union key if present.\n if (location[0] === 'design' || location[0] === 'locale') {\n if (location.length > 2) {\n location = [location[0]!, ...location.slice(2)];\n }\n }\n\n const message = formatMessage(issue.message, [...location]);\n const bundle = resolveYamlBundle(location, options.mainDocument, options.overlayDocuments);\n const yamlSource = yamlSourceForLocation(\n location,\n options.mainDocument,\n options.overlayDocuments,\n );\n\n const coordPath =\n issue.code === 'invalid_type' && issue.message.includes('Required')\n ? location.slice(0, -1)\n : location;\n\n const yamlLocation: YamlLocation | null = getCoordinatesOfKey(bundle, coordPath);\n\n return new RenderCVValidationError(\n location,\n yamlLocation,\n yamlSource,\n message,\n issueInput(issue, options.mainDocument.value),\n );\n}\n\nexport function parseValidationErrors(\n issues: readonly ZodIssue[],\n options: ParseValidationErrorsOptions,\n): RenderCVValidationError[] {\n const allErrors: RenderCVValidationError[] = [];\n\n for (const issue of issues) {\n const params = (issue as ZodIssue & { params?: Record<string, unknown> }).params;\n if (params?.[ENTRY_VALIDATION_PARAM]) {\n allErrors.push(parsePlainZodIssue(issue, options));\n const causedBy = params[CAUSED_BY_PARAM] as ZodIssue[] | undefined;\n if (causedBy) {\n for (const cause of causedBy) {\n const merged: ZodIssue = {\n ...cause,\n path: [...issue.path, ...cause.path.map(String)],\n };\n allErrors.push(parsePlainZodIssue(merged, options));\n }\n }\n continue;\n }\n allErrors.push(parsePlainZodIssue(issue, options));\n }\n\n const seen = new Set<string>();\n const deduped: RenderCVValidationError[] = [];\n for (const err of allErrors) {\n const key = JSON.stringify(err.schemaLocation);\n if (!seen.has(key)) {\n seen.add(key);\n deduped.push(err);\n }\n }\n return deduped.sort((a, b) =>\n JSON.stringify(a.schemaLocation).localeCompare(JSON.stringify(b.schemaLocation)),\n );\n}\n","# Keys are validation error message fragments. Values are user-facing messages.\n# Ported from rendercv-main/src/rendercv/schema/error_dictionary.yaml\nInput should be 'present': This is not a valid `end_date`. Please use either YYYY-MM-DD, YYYY-MM, or YYYY format or 'present'.\nInput should be a valid integer, unable to parse string as an integer: This is not a valid date. Please use either YYYY-MM-DD, YYYY-MM, or YYYY format.\nString should match pattern '\\\\d{4}-\\\\d{2}(-\\\\d{2})?': This is not a valid date. Please use either YYYY-MM-DD, YYYY-MM, or YYYY format.\nString should match pattern '\\\\b10\\\\..*': A DOI prefix should always start with \"10.\". For example, \"10.1109/TASC.2023.3340648\".\nInput should be a valid URL: This is not a valid URL.\nField required: This field is required.\nvalue is not a valid phone number: This is not a valid phone number.\nmonth must be in 1..12: The month must be between 1 and 12.\nday is out of range for month: The day is out of range for the month.\nmust be in range: The day is out of range for the month.\nExtra inputs are not permitted: This field is unknown for this object. Please remove it.\nInput should be a valid list: This field should contain a list of items but it doesn't.\n\"value is not a valid color\": 'This is not a valid color. Here are some examples of valid colors: \"red\", \"#ff0000\", \"rgb(255, 0, 0)\", \"hsl(0, 100%, 50%)\"'\n","/**\n * YAML parsing with source coordinates for error reporting.\n */\nimport {\n type Document,\n LineCounter,\n type Node,\n type Pair,\n isMap,\n isPair,\n isScalar,\n isSeq,\n parseDocument,\n} from 'yaml';\nimport type { YamlSource } from './error-handling';\n\nexport interface YamlDocumentBundle {\n value: Record<string, unknown>;\n document: Document;\n lineCounter: LineCounter;\n source: YamlSource;\n}\n\nexport function parseYamlDocument(content: string, source: YamlSource): YamlDocumentBundle {\n const lineCounter = new LineCounter();\n const document = parseDocument(content, { lineCounter, strict: false, keepSourceTokens: true });\n\n if (document.errors.length > 0) {\n const err = document.errors[0]!;\n const loc = yamlErrorLocation(err);\n throw { yamlError: true, message: err.message, loc, source };\n }\n\n const value = document.toJS() as Record<string, unknown> | null;\n if (value === null || value === undefined) {\n throw { yamlError: true, message: 'The input file is empty!', loc: null, source };\n }\n if (typeof value !== 'object' || Array.isArray(value)) {\n throw { yamlError: true, message: 'YAML root must be a mapping.', loc: null, source };\n }\n\n return { value, document, lineCounter, source };\n}\n\nfunction yamlErrorLocation(err: {\n linePos?:\n | [{ line: number; col: number }]\n | [{ line: number; col: number }, { line: number; col: number }];\n}): [[number, number], [number, number]] | null {\n if (!err.linePos?.length) return null;\n const start = err.linePos[0]!;\n const end = err.linePos.length > 1 ? err.linePos[1]! : start;\n return [\n [start.line + 1, start.col + 1],\n [end.line + 1, end.col + 1],\n ];\n}\n\nfunction toDocumentPath(location: readonly string[]): (string | number)[] {\n return location.map((segment) => (/^\\d+$/.test(segment) ? Number(segment) : segment));\n}\n\nfunction rangeEnd(range: [number, number] | [number, number, number]): number {\n return range.length === 3 ? range[2]! : range[1]!;\n}\n\nfunction nodeRange(\n bundle: YamlDocumentBundle,\n node: Node,\n): [[number, number], [number, number]] | null {\n if (!node.range) return null;\n const start = bundle.lineCounter.linePos(node.range[0]);\n const end = bundle.lineCounter.linePos(rangeEnd(node.range) - 1);\n return [\n [start.line, start.col + 1],\n [end.line, end.col + 1],\n ];\n}\n\nfunction findMapPair(map: Node, key: string): Pair | null {\n if (!isMap(map)) return null;\n for (const item of map.items) {\n if (isPair(item) && isScalar(item.key) && String(item.key.value) === key) {\n return item;\n }\n }\n return null;\n}\n\n/** Resolve dotted schema path to 1-indexed YAML coordinates (ruamel-compatible). */\nexport function getCoordinatesOfKey(\n bundle: YamlDocumentBundle,\n location: readonly string[],\n): [[number, number], [number, number]] | null {\n try {\n if (location.length === 0) return null;\n\n const path = toDocumentPath(location);\n const lastSeg = location[location.length - 1]!;\n\n // Map key: highlight the whole `key: value` pair.\n if (!/^\\d+$/.test(lastSeg) && path.length >= 1) {\n const parentPath = path.slice(0, -1);\n const parent =\n parentPath.length === 0\n ? (bundle.document.contents as Node)\n : (bundle.document.getIn(parentPath, true) as Node | null);\n if (parent) {\n const pair = findMapPair(parent, lastSeg);\n if (pair?.key && isScalar(pair.key) && pair.key.range) {\n return nodeRange(bundle, pair.key);\n }\n }\n }\n\n // Sequence index: narrow highlight near list marker (ruamel list-item style).\n if (/^\\d+$/.test(lastSeg)) {\n const node = bundle.document.getIn(path, true) as Node | null;\n if (node?.range) {\n const pos = bundle.lineCounter.linePos(node.range[0]);\n const oneIndexed = pos.col + 1;\n return [\n [pos.line, Math.max(1, oneIndexed - 3)],\n [pos.line, Math.max(1, oneIndexed - 2)],\n ];\n }\n }\n\n // Nested map / section container (entry-validation parent paths).\n const node = bundle.document.getIn(path, true) as Node | null;\n if (node) {\n if (isSeq(node) && node.items.length > 0) {\n const first = node.items[0] as Node;\n const last = node.items[node.items.length - 1] as Node;\n if (first.range && last.range) {\n const start = bundle.lineCounter.linePos(first.range[0]);\n const end = bundle.lineCounter.linePos(Math.max(last.range[0], last.range[1] - 1));\n return [\n [start.line, start.col + 1],\n [end.line, end.col + 1],\n ];\n }\n }\n return nodeRange(bundle, node);\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nexport type OverlayDocuments = Partial<\n Record<'design' | 'locale' | 'settings', YamlDocumentBundle>\n>;\n\nconst CV_HEADER_KEYS = new Set([\n 'name',\n 'headline',\n 'location',\n 'email',\n 'photo',\n 'phone',\n 'website',\n 'social_networks',\n 'custom_connections',\n 'sections',\n]);\n\n/** Extract cv header key order from YAML AST (insertion order), dropping null values. */\nexport function extractCvHeaderKeyOrder(bundle: YamlDocumentBundle): string[] | undefined {\n const root = bundle.document.contents as Node | null;\n if (!root) {\n return undefined;\n }\n const cvPair = findMapPair(root, 'cv');\n if (!cvPair?.value || !isMap(cvPair.value)) {\n return undefined;\n }\n\n const cvValue =\n typeof (bundle.value.cv as Record<string, unknown> | undefined) === 'object'\n ? (bundle.value.cv as Record<string, unknown>)\n : null;\n\n const order: string[] = [];\n for (const item of cvPair.value.items) {\n if (!isPair(item) || !isScalar(item.key)) {\n continue;\n }\n const key = String(item.key.value);\n if (!CV_HEADER_KEYS.has(key)) {\n continue;\n }\n const value = cvValue?.[key];\n if (value !== undefined && value !== null) {\n order.push(key);\n }\n }\n return order.length > 0 ? order : undefined;\n}\n","/**\n * Browser-adapted path validation — port of `path.py`.\n *\n * Relative paths are resolved against the caller-supplied `assets` map instead\n * of the filesystem. HTTP(S) URLs pass through unchanged.\n */\nimport type { ValidationContext } from './validation_context';\n\nconst HTTP_URL = /^https?:\\/\\//;\n\nexport function isHttpUrl(value: string): boolean {\n return HTTP_URL.test(value);\n}\n\n/** Validate that a relative asset path exists in the assets map (or is a URL). */\nexport function validateExistingAssetPath(\n path: string,\n context: ValidationContext | undefined,\n fieldLabel = 'file',\n): void {\n if (!path) return;\n if (isHttpUrl(path)) return;\n\n const assets = context?.assets ?? {};\n if (path in assets) return;\n\n throw new PathValidationError(`The ${fieldLabel} \\`${path}\\` does not exist.`, path);\n}\n\nexport class PathValidationError extends Error {\n constructor(\n message: string,\n public readonly path: string,\n ) {\n super(message);\n this.name = 'PathValidationError';\n }\n}\n\n/** Resolve a photo path to a URL usable by the renderer. */\nexport function resolvePhotoPath(path: string, context: ValidationContext | undefined): string {\n if (isHttpUrl(path)) return path;\n validateExistingAssetPath(path, context, 'file');\n return context!.assets![path]!;\n}\n","/**\n * Base Zod helpers mirroring rendercv's two Pydantic base classes.\n *\n * - `BaseModelWithoutExtraKeys` → `.strict()` objects (reject unknown keys)\n * - `BaseModelWithExtraKeys` → `.passthrough()` objects (allow unknown keys)\n *\n * In Pydantic these are inherited by every model. In Zod we apply the modifier\n * at the leaf of each schema definition. The helpers below keep the call sites\n * readable and consistent with the Python source.\n */\nimport type { z } from 'zod';\n\n/**\n * Wrap an object schema to forbid unknown keys (Pydantic `extra=\"forbid\"`).\n *\n * Use this for every model that subclasses `BaseModelWithoutExtraKeys` in the\n * Python source — that's most of them.\n */\nexport function strict<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n): z.ZodObject<z.ZodRawShape, 'strict'> {\n return schema.strict();\n}\n\n/**\n * Wrap an object schema to allow AND capture unknown keys (Pydantic `extra=\"allow\"`).\n *\n * Used by entry models — they accept arbitrary keys so template placeholders\n * (like `FOO` in `main_column: \"**FOO**\"`) can flow through. The captured\n * extras live under the `__extras` key on the parsed object so they're\n * addressable but never collide with declared fields.\n *\n * We use `.passthrough()` so unknown keys survive parsing, then move them into\n * `__extras` in a `transform` step. Stripping them out again before\n * re-serialization keeps round-trips clean.\n */\nexport function allowExtras<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n): z.ZodEffects<z.ZodObject<z.ZodRawShape, 'passthrough'>, WithExtras<z.infer<T>>, z.input<T>> {\n const passthrough = schema.passthrough();\n return passthrough.transform((value) => {\n const knownKeys = new Set<string>(Object.keys(schema.shape));\n const extras: Record<string, unknown> = {};\n const picked: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (knownKeys.has(k)) {\n picked[k] = v;\n } else {\n extras[k] = v;\n }\n }\n return { ...picked, __extras: extras } as WithExtras<z.infer<T>>;\n });\n}\n\n/** Type marker for objects that carry an `__extras` bag of unknown keys. */\nexport type WithExtras<T> = T & { __extras: Record<string, unknown> };\n\n/** Pull the declared field keys out of a Zod object schema (no recursion). */\nexport function fieldKeys<T extends z.ZodObject<z.ZodRawShape>>(schema: T): string[] {\n return Object.keys(schema.shape);\n}\n","/**\n * CustomConnection — ported from `cv/custom_connection.py`.\n *\n * A user-defined header contact: Font Awesome icon name, display placeholder,\n * optional URL. Minimal validation.\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\n\nexport const CustomConnectionSchema = strict(\n z.object({\n fontawesome_icon: z.string(),\n placeholder: z.string(),\n url: z.string().url().nullable().optional(),\n }),\n);\n\nexport type CustomConnection = z.infer<typeof CustomConnectionSchema>;\n","/**\n * Base entry — ported from `cv/entries/bases/entry.py`.\n *\n * In Python this is `BaseEntry(BaseModelWithExtraKeys)`. In Zod we model\n * \"allows extra keys\" with `.passthrough()` + a transform that funnels unknown\n * keys into `__extras` (see base.ts).\n *\n * Per-entry schemas are built by extending this shape. We export a function\n * `baseEntry()` rather than a constant so each entry type gets its own fresh\n * object schema (Zod object shapes are mutable by `.extend`).\n */\nimport { z } from 'zod';\nimport { allowExtras } from '../../../base';\n\n/** The bare minimum shared by every entry type: nothing required. */\nexport function baseEntryShape() {\n return z.object({}).passthrough();\n}\n\n/**\n * Wrap an entry object schema so it (a) allows unknown keys (Pydantic\n * `extra=\"allow\"`) and (b) collects them into `__extras`. Use at the leaf of\n * every entry schema definition.\n *\n * Accepts any object schema regardless of unknown-key mode (strip/strict/\n * passthrough) and converts to passthrough internally so unknown keys survive\n * into the `__extras` bag.\n */\nexport function entry<T extends z.ZodObject<z.ZodRawShape>>(schema: T) {\n return allowExtras(schema.passthrough());\n}\n","/**\n * Date helpers — ported from `entry_with_date.py` and `entry_with_complex_fields.py`.\n *\n * rendercv dates are unusual: they accept \"free text\" like \"Fall 2023\" for\n * display, while strict dates (YYYY / YYYY-MM / YYYY-MM-DD) are validated and\n * used for arithmetic (start ≤ end, duration calc). The literal `\"present\"`\n * resolves to the rendering's \"current date\".\n */\nimport type { RenderCVValidationError } from '../error-handling';\n\nconst FULL_DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst YEAR_MONTH_RE = /^\\d{4}-\\d{2}$/;\nconst YEAR_RE = /^\\d{4}$/;\n\nexport interface SimpleDate {\n year: number;\n month: number; // 1-12\n day: number; // 1-31\n}\n\n/** Validate that a YYYY-MM-DD string has a real month/day (mirrors Date.fromisoformat). */\nexport function isValidStrictDate(s: string): boolean {\n if (FULL_DATE_RE.test(s)) {\n const [y, m, d] = s.split('-').map(Number) as [number, number, number];\n return isValidYMD(y, m, d);\n }\n if (YEAR_MONTH_RE.test(s)) {\n const [y, m] = s.split('-').map(Number) as [number, number];\n return isValidYMD(y, m, 1);\n }\n if (YEAR_RE.test(s)) {\n const y = Number(s);\n return y >= 1 && y <= 9999;\n }\n return false;\n}\n\nfunction isValidYMD(y: number, m: number, d: number): boolean {\n if (y < 1 || y > 9999) return false;\n if (m < 1 || m > 12) return false;\n const daysInMonth = [31, isLeap(y) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (d < 1 || d > (daysInMonth[m - 1] ?? 0)) return false;\n return true;\n}\n\nfunction isLeap(y: number): boolean {\n return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;\n}\n\n/**\n * Validate an \"arbitrary date\" (used by PublicationEntry.date and entry `date`).\n * Strict formats get validated; arbitrary text (e.g. \"Fall 2023\") passes through.\n * Returns the input unchanged on success; throws on malformed strict dates.\n *\n * Mirrors `validate_arbitrary_date` in entry_with_date.py.\n */\nexport function validateArbitraryDate(date: string | number): string | number {\n const dateStr = String(date);\n if (FULL_DATE_RE.test(dateStr) || YEAR_MONTH_RE.test(dateStr)) {\n if (!isValidStrictDate(dateStr)) {\n throw new InvalidDateError(buildDateMessage(dateStr) ?? 'Invalid date.');\n }\n }\n return date;\n}\n\n/**\n * Validate an \"exact date\" (used by start_date / end_date). Must be YYYY,\n * YYYY-MM, or YYYY-MM-DD — no free text allowed.\n * Mirrors `validate_exact_date` in entry_with_complex_fields.py.\n */\nexport function validateExactDate(date: string | number): string | number {\n const dateStr = String(date);\n if (YEAR_RE.test(dateStr) || YEAR_MONTH_RE.test(dateStr) || FULL_DATE_RE.test(dateStr)) {\n if (isValidStrictDate(dateStr)) {\n return date;\n }\n }\n throw new InvalidDateError(\n 'This is not a valid date! Please use either YYYY-MM-DD, YYYY-MM, or YYYY format.',\n );\n}\n\nfunction buildDateMessage(s: string): string | null {\n // Mirror Pydantic's friendly messages from python date parsing.\n const parts = s.split('-').map(Number);\n if (parts.length >= 2 && (parts[1]! < 1 || parts[1]! > 12)) {\n return 'The month must be between 1 and 12.';\n }\n if (parts.length === 3) {\n const daysInMonth = [31, isLeap(parts[0]!) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const max = daysInMonth[(parts[1] ?? 1) - 1] ?? 31;\n if (parts[2]! < 1 || parts[2]! > max) {\n return 'The day is out of range for the month.';\n }\n }\n return null;\n}\n\nexport class InvalidDateError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidDateError';\n }\n}\n\n/**\n * Convert a strict date string/int (or \"present\") into a SimpleDate for\n * comparison/arithmetic. Mirrors `get_date_object` in entry_with_complex_fields.py.\n *\n * `currentDate` is the reference date used to resolve \"present\"; it must be\n * supplied by the caller (typically `settings._resolved_current_date`).\n */\nexport function getDateObject(date: string | number, currentDate: SimpleDate): SimpleDate {\n if (typeof date === 'number') {\n return { year: date, month: 1, day: 1 };\n }\n if (FULL_DATE_RE.test(date)) {\n const [y, m, d] = date.split('-').map(Number) as [number, number, number];\n return { year: y, month: m, day: d };\n }\n if (YEAR_MONTH_RE.test(date)) {\n const [y, m] = date.split('-').map(Number) as [number, number];\n return { year: y, month: m, day: 1 };\n }\n if (YEAR_RE.test(date)) {\n return { year: Number(date), month: 1, day: 1 };\n }\n if (date === 'present') {\n return currentDate;\n }\n throw new Error('This is not a valid date!');\n}\n\n/** Compare two SimpleDates: -1 if a < b, 0 if equal, 1 if a > b. */\nexport function compareDates(a: SimpleDate, b: SimpleDate): number {\n if (a.year !== b.year) return a.year < b.year ? -1 : 1;\n if (a.month !== b.month) return a.month < b.month ? -1 : 1;\n if (a.day !== b.day) return a.day < b.day ? -1 : 1;\n return 0;\n}\n\n/** Type used to carry a validation context (input file, current date). */\nexport interface ValidationContext {\n currentDate: SimpleDate;\n}\n\n/** Build the validation context from the user's settings (default = today). */\nexport function todayAsSimpleDate(): SimpleDate {\n const d = new Date();\n return { year: d.getFullYear(), month: d.getMonth() + 1, day: d.getDate() };\n}\n\nexport type { RenderCVValidationError };\n","/**\n * BaseEntryWithDate — ported from `cv/entries/bases/entry_with_date.py`.\n *\n * Adds a single optional `date` field of type `ArbitraryDate`: free-text dates\n * (\"Fall 2023\") pass through, strict formats (YYYY-MM-DD / YYYY-MM) get\n * validated. Numbers (years) are also allowed.\n */\nimport { z } from 'zod';\nimport { InvalidDateError, validateArbitraryDate } from '../../../dates';\nimport { entry } from './entry';\n\nconst ArbitraryDateSchema = z.union([z.string(), z.number()]).superRefine((value, ctx) => {\n try {\n validateArbitraryDate(value);\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof InvalidDateError ? e.message : 'Invalid date.',\n });\n }\n});\n\n/** Build a \"base + optional date\" entry schema over the given extra shape. */\nexport function withOptionalDate<T extends z.ZodRawShape>(extra: T) {\n return entry(\n z.object({\n date: ArbitraryDateSchema.nullable().optional(),\n ...extra,\n }),\n );\n}\n\nexport { ArbitraryDateSchema };\n","/**\n * BaseEntryWithComplexFields — ported from\n * `cv/entries/bases/entry_with_complex_fields.py`.\n *\n * Adds start_date / end_date / location / summary / highlights, plus the\n * `check_and_adjust_dates` model validator:\n * - If `date` is set, start_date/end_date are cleared.\n * - If only `end_date` is set, it becomes the lone `date`.\n * - If only `start_date` is set, `end_date` becomes \"present\".\n * - start_date must not be after end_date.\n *\n * In Python this validator runs as Pydantic `model_validator(mode=\"after\")` with\n * access to a validation context (current_date). We mirror it with `.superRefine`\n * + a closure-captured `currentDate` (the resolver decides what \"today\" is).\n *\n * IMPORTANT: this returns a *factory* (`withComplexFields(shape, ctx)`) so each\n * entry type can supply its own required fields (company/position, institution/\n * area, name) while reusing the date-adjustment logic.\n */\nimport { z } from 'zod';\nimport type { SimpleDate } from '../../../dates';\nimport { compareDates, getDateObject, validateExactDate } from '../../../dates';\nimport { withOptionalDate } from './entry_with_date';\n\n/** Strict-format date (YYYY / YYYY-MM / YYYY-MM-DD) used by start/end dates. */\nconst ExactDateSchema = z.union([z.string(), z.number()]).refine(\n (v) => {\n try {\n validateExactDate(v);\n return true;\n } catch {\n return false;\n }\n },\n {\n message: 'This is not a valid date! Please use either YYYY-MM-DD, YYYY-MM, or YYYY format.',\n },\n);\n\nconst PresentOrExactDateSchema = z.union([ExactDateSchema, z.literal('present')]);\n\n/**\n * Build a complex-fields entry schema.\n *\n * @param required The entry-type-specific required fields (e.g. company, position).\n * @param currentDate Used to resolve \"present\" and to compare start/end.\n */\nexport function withComplexFields<T extends z.ZodRawShape>(required: T, currentDate: SimpleDate) {\n const base = withOptionalDate({\n start_date: ExactDateSchema.nullable().optional(),\n end_date: PresentOrExactDateSchema.nullable().optional(),\n location: z.string().nullable().optional(),\n summary: z.string().nullable().optional(),\n highlights: z.array(z.string()).nullable().optional(),\n ...required,\n });\n\n return base.superRefine((entryData, ctx) => {\n // Apply the date adjustment logic. We mutate a local copy and write it back\n // through the issue's `path` — but Zod doesn't support rewriting input\n // inside superRefine, so we instead surface errors for invalid combinations\n // and rely on the model-processor to handle defaults downstream. To preserve\n // parity with Python (which mutates the model), we attach the adjusted\n // values onto the parsed object directly.\n const adjusted = adjustDates(entryData, currentDate);\n // Mutate in place — Zod allows mutating the parsed value during refine.\n Object.assign(entryData, adjusted);\n\n if (adjusted.__dateError) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: adjusted.__dateError,\n });\n }\n });\n}\n\n/** Pure function implementing `check_and_adjust_dates` — exported for testing. */\nexport function adjustDates<T extends Record<string, unknown>>(\n entry: T,\n currentDate: SimpleDate,\n): T & { __dateError?: string } {\n // Work on a plain record so we can freely set date keys without TS narrowing\n // complaints about the generic T not having them.\n const result: Record<string, unknown> & { __dateError?: string } = { ...entry };\n const date = result.date as string | number | null | undefined;\n const startDate = result.start_date as string | number | null | undefined;\n const endDate = result.end_date as string | number | 'present' | null | undefined;\n const dateIsProvided = date !== undefined && date !== null;\n const startDateIsProvided = startDate !== undefined && startDate !== null;\n const endDateIsProvided = endDate !== undefined && endDate !== null;\n\n if (dateIsProvided) {\n // If only `date` is provided, ignore start_date and end_date.\n result.start_date = null;\n result.end_date = null;\n } else if (!startDateIsProvided && endDateIsProvided) {\n // Only end_date → treat as a one-day event.\n result.date = endDate ?? null;\n result.start_date = null;\n result.end_date = null;\n } else if (startDateIsProvided && !endDateIsProvided) {\n // Only start_date → ongoing event.\n result.end_date = 'present';\n }\n\n const finalStart = result.start_date as string | number | null | undefined;\n const finalEnd = result.end_date as string | number | 'present' | null | undefined;\n if (finalStart && finalEnd) {\n const startObj = getDateObject(finalStart, currentDate);\n const endObj = getDateObject(finalEnd, currentDate);\n if (compareDates(startObj, endObj) > 0) {\n result.__dateError = `\\`start_date\\` cannot be after \\`end_date\\`. The \\`start_date\\` is ${finalStart} and the \\`end_date\\` is ${finalEnd}.`;\n }\n }\n\n return result as T & { __dateError?: string };\n}\n\nexport { ExactDateSchema, PresentOrExactDateSchema };\n","/**\n * Entry type schemas — ported from `cv/entries/*.py`.\n *\n * All 9 entry types are defined here. They build on the three bases:\n * - BaseEntry (no fields)\n * - BaseEntryWithDate (adds optional `date`)\n * - BaseEntryWithComplexFields (adds start_date/end_date/location/summary/highlights\n * + date adjustment logic)\n *\n * Because the complex-fields validator needs `currentDate` to resolve \"present\",\n * every entry schema is built through a factory: `buildEntrySchemas(currentDate)`.\n * The section model and inference logic use the resulting registry.\n *\n * Entry types (matching Python field order):\n * OneLineEntry : label, details\n * NormalEntry : name + complex fields\n * ExperienceEntry : company, position + complex fields\n * EducationEntry : institution, area, degree? + complex fields\n * PublicationEntry : title, authors[], doi?, url?, journal?, summary? + date\n * BulletEntry : bullet\n * NumberedEntry : number\n * ReversedNumberedEntry : reversed_number\n * TextEntry : (a plain string)\n */\nimport { z } from 'zod';\nimport type { SimpleDate } from '../../dates';\nimport { entry } from './bases/entry';\nimport { withComplexFields } from './bases/entry_with_complex_fields';\nimport { withOptionalDate } from './bases/entry_with_date';\n\nexport type EntrySchemas = ReturnType<typeof buildEntrySchemas>;\n\n/** Factory: build all entry schemas bound to a given \"current date\". */\nexport function buildEntrySchemas(currentDate: SimpleDate) {\n const OneLineEntry = entry(\n z.object({\n label: z.string(),\n details: z.string(),\n }),\n );\n\n // NormalEntry: BaseEntryWithComplexFields merged with BaseNormalEntry { name }.\n // Field order: name comes first (Python: NormalEntry inherits Complex then Base).\n const NormalEntry = withComplexFields(\n {\n name: z.string(),\n },\n currentDate,\n );\n\n // ExperienceEntry: company, position + complex.\n const ExperienceEntry = withComplexFields(\n {\n company: z.string(),\n position: z.string(),\n },\n currentDate,\n );\n\n // EducationEntry: institution, area, degree? + complex.\n const EducationEntry = withComplexFields(\n {\n institution: z.string(),\n area: z.string(),\n degree: z.string().nullable().optional(),\n },\n currentDate,\n );\n\n // PublicationEntry: BaseEntryWithDate merged with BasePublicationEntry.\n const doiPattern = /\\b10\\..*/;\n const PublicationEntry = withOptionalDate({\n title: z.string(),\n authors: z.array(z.string()),\n summary: z.string().nullable().optional(),\n doi: z.string().regex(doiPattern, 'Invalid DOI format.').nullable().optional(),\n url: z.string().url().nullable().optional(),\n journal: z.string().nullable().optional(),\n }).transform((entryData) => {\n // ignore_url_if_doi_is_given: if DOI is provided, clear the URL.\n if (entryData.doi !== undefined && entryData.doi !== null) {\n (entryData as { url?: string | null }).url = null;\n }\n return entryData;\n });\n\n const BulletEntry = entry(z.object({ bullet: z.string() }));\n\n const NumberedEntry = entry(z.object({ number: z.string() }));\n\n const ReversedNumberedEntry = entry(z.object({ reversed_number: z.string() }));\n\n return {\n OneLineEntry,\n NormalEntry,\n ExperienceEntry,\n EducationEntry,\n PublicationEntry,\n BulletEntry,\n NumberedEntry,\n ReversedNumberedEntry,\n };\n}\n\n/** Discriminator-free registry: entry-type name → schema factory. */\nexport const ENTRY_TYPE_NAMES = [\n 'OneLineEntry',\n 'NormalEntry',\n 'ExperienceEntry',\n 'EducationEntry',\n 'PublicationEntry',\n 'BulletEntry',\n 'NumberedEntry',\n 'ReversedNumberedEntry',\n 'TextEntry',\n] as const;\n\nexport type EntryTypeName = (typeof ENTRY_TYPE_NAMES)[number];\n\n/**\n * Compute the \"characteristic fields\" for each entry type — fields unique to\n * that type. Used by section auto-inference to detect an entry's type from its\n * keys. Ported verbatim from `get_characteristic_entry_fields` in section.py.\n *\n * Returns a map of entry-type name → set of unique field names.\n */\nexport function characteristicEntryFields(): Record<string, Set<string>> {\n // The field set per entry type — matches Python `model_fields.keys()`.\n // TextEntry (str) has no fields.\n const fieldsPerType: Record<string, readonly string[]> = {\n OneLineEntry: ['label', 'details'],\n NormalEntry: ['name', 'date', 'start_date', 'end_date', 'location', 'summary', 'highlights'],\n ExperienceEntry: [\n 'company',\n 'position',\n 'date',\n 'start_date',\n 'end_date',\n 'location',\n 'summary',\n 'highlights',\n ],\n EducationEntry: [\n 'institution',\n 'area',\n 'degree',\n 'date',\n 'start_date',\n 'end_date',\n 'location',\n 'summary',\n 'highlights',\n ],\n PublicationEntry: ['title', 'authors', 'summary', 'doi', 'url', 'journal', 'date'],\n BulletEntry: ['bullet'],\n NumberedEntry: ['number'],\n ReversedNumberedEntry: ['reversed_number'],\n };\n\n // Count occurrences across all types; common fields (count > 1) are not characteristic.\n const allAttributes: string[] = [];\n for (const attrs of Object.values(fieldsPerType)) {\n allAttributes.push(...attrs);\n }\n const counts: Record<string, number> = {};\n for (const a of allAttributes) counts[a] = (counts[a] ?? 0) + 1;\n const common = new Set(\n Object.entries(counts)\n .filter(([, c]) => c > 1)\n .map(([k]) => k),\n );\n\n const result: Record<string, Set<string>> = {};\n for (const [typeName, attrs] of Object.entries(fieldsPerType)) {\n result[typeName] = new Set(attrs.filter((a) => !common.has(a)));\n }\n return result;\n}\n\n/**\n * Detect the entry type of a raw entry (a dict or string) by its keys.\n * Returns the entry-type name, or null if no type matches.\n *\n * Mirrors `get_entry_type_name_and_section_model` in section.py. The order of\n * iteration matters in Python (the first match wins); we preserve it via the\n * ENTRY_TYPE_NAMES order.\n */\nexport function detectEntryType(\n entry: unknown,\n characteristic: Record<string, Set<string>>,\n): EntryTypeName | null {\n if (typeof entry === 'string') {\n return 'TextEntry';\n }\n if (entry !== null && typeof entry === 'object') {\n const keys = new Set(Object.keys(entry));\n for (const typeName of ENTRY_TYPE_NAMES) {\n if (typeName === 'TextEntry') continue;\n const chars = characteristic[typeName];\n if (!chars) continue;\n // First matching characteristic set wins.\n for (const c of chars) {\n if (keys.has(c)) {\n return typeName as EntryTypeName;\n }\n }\n }\n }\n return null;\n}\n","/**\n * Section validation + entry-type inference — ported from `cv/section.py`.\n */\nimport { z } from 'zod';\nimport { CAUSED_BY_PARAM, ENTRY_VALIDATION_PARAM } from '../../parse_validation_errors';\nimport type { SimpleDate } from '../dates';\nimport {\n ENTRY_TYPE_NAMES,\n type EntrySchemas,\n type EntryTypeName,\n buildEntrySchemas,\n characteristicEntryFields,\n detectEntryType,\n} from './entries';\n\n/** A validated section: title (post-formatting), entry type, entries. */\nexport interface RenderCVSection {\n title: string;\n entryType: EntryTypeName;\n entries: unknown[];\n}\n\nexport function snakeCaseTitle(title: string): string {\n return title.toLowerCase().replace(/ /g, '_');\n}\n\nexport function dictionaryKeyToProperSectionTitle(key: string): string {\n if (key.includes(' ') || /[A-Z]/.test(key)) {\n return key;\n }\n const title = key.replaceAll('_', ' ');\n const words = title.split(' ');\n const lowercaseWords = new Set([\n 'a',\n 'and',\n 'as',\n 'at',\n 'but',\n 'by',\n 'for',\n 'from',\n 'if',\n 'in',\n 'into',\n 'like',\n 'near',\n 'nor',\n 'of',\n 'off',\n 'on',\n 'onto',\n 'or',\n 'over',\n 'so',\n 'than',\n 'that',\n 'to',\n 'upon',\n 'when',\n 'with',\n 'yet',\n ]);\n return words\n .map((word) => (lowercaseWords.has(word) ? word : word.charAt(0).toUpperCase() + word.slice(1)))\n .join(' ');\n}\n\nexport type SectionValidationResult =\n | { ok: true; data: unknown[] }\n | { ok: false; message: string; causedBy?: z.ZodIssue[]; entryTypeName?: string };\n\nexport function validateSectionResult(\n entries: unknown,\n entrySchemas: EntrySchemas,\n): SectionValidationResult {\n if (!Array.isArray(entries)) {\n return {\n ok: false,\n message: 'Each section should be a list of entries! This is not a list.',\n };\n }\n if (entries.length === 0) {\n return { ok: true, data: entries };\n }\n\n const characteristic = characteristicEntryFields();\n let entryTypeName: EntryTypeName | null = null;\n for (const entry of entries) {\n entryTypeName = detectEntryType(entry, characteristic);\n if (entryTypeName !== null) break;\n }\n if (entryTypeName === null) {\n return {\n ok: false,\n message:\n \"RenderCV couldn't match this section with any entry types. Please check \" +\n 'the entries and make sure they are provided correctly.',\n };\n }\n\n if (entryTypeName === 'TextEntry') {\n for (const entry of entries) {\n if (typeof entry !== 'string') {\n return {\n ok: false,\n message:\n 'RenderCV detected the entry type of this section to be TextEntry, but ' +\n 'one or more entries are not strings.',\n };\n }\n }\n return { ok: true, data: entries };\n }\n\n const schema = entrySchemas[entryTypeName];\n if (!schema) {\n return { ok: false, message: `Unknown entry type: ${entryTypeName}` };\n }\n\n const validatedEntries: unknown[] = [];\n const causedBy: z.ZodIssue[] = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]!;\n const result = schema.safeParse(entry);\n if (result.success) {\n validatedEntries.push(result.data);\n } else {\n for (const issue of result.error.issues) {\n causedBy.push({\n ...issue,\n path: [String(i), ...issue.path],\n });\n }\n }\n }\n\n if (causedBy.length > 0) {\n return {\n ok: false,\n entryTypeName,\n message: `There are problems with the entries. RenderCV detected the entry type of this section to be ${entryTypeName}. The problems are shown below.`,\n causedBy,\n };\n }\n\n return { ok: true, data: validatedEntries };\n}\n\nexport function validateSection(entries: unknown, entrySchemas: EntrySchemas): unknown[] {\n const result = validateSectionResult(entries, entrySchemas);\n if (!result.ok) {\n throw new SectionValidationError(result.message);\n }\n return result.data;\n}\n\nexport class SectionValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'SectionValidationError';\n }\n}\n\nexport function sectionSchema(currentDate: SimpleDate) {\n const entrySchemas = buildEntrySchemas(currentDate);\n return z\n .record(z.string(), z.array(z.unknown()))\n .superRefine((sections, ctx) => {\n for (const [title, entries] of Object.entries(sections)) {\n const validation = validateSectionResult(entries, entrySchemas);\n if (!validation.ok) {\n if (validation.causedBy) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: validation.message,\n path: [title],\n params: {\n [ENTRY_VALIDATION_PARAM]: true,\n [CAUSED_BY_PARAM]: validation.causedBy,\n },\n });\n } else {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: validation.message,\n path: [title],\n });\n }\n continue;\n }\n sections[title] = validation.data;\n }\n })\n .transform((sections) => sections);\n}\n\nexport function getRendercvSections(\n sections: Record<string, unknown[]> | null | undefined,\n): RenderCVSection[] {\n if (!sections) return [];\n const characteristic = characteristicEntryFields();\n const result: RenderCVSection[] = [];\n for (const [title, entries] of Object.entries(sections)) {\n const formattedTitle = dictionaryKeyToProperSectionTitle(title);\n let entryTypeName: EntryTypeName;\n if (entries.length === 0) {\n entryTypeName = 'TextEntry';\n } else {\n entryTypeName = detectEntryType(entries[0], characteristic) ?? 'TextEntry';\n }\n result.push({ title: formattedTitle, entryType: entryTypeName, entries });\n }\n return result;\n}\n\nexport { buildEntrySchemas, ENTRY_TYPE_NAMES };\nexport type { EntrySchemas, EntryTypeName };\n","/**\n * SocialNetwork — ported from `cv/social_network.py`.\n *\n * A discriminated network name + username. Per-network regex validation runs\n * in `check_username`, and `url` is generated from the network+username\n * (Mastodon extracts the domain from the @user@domain handle).\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\n\nexport const SOCIAL_NETWORK_NAMES = [\n 'LinkedIn',\n 'GitHub',\n 'GitLab',\n 'IMDB',\n 'Instagram',\n 'ORCID',\n 'Mastodon',\n 'StackOverflow',\n 'ResearchGate',\n 'YouTube',\n 'Google Scholar',\n 'Telegram',\n 'WhatsApp',\n 'Leetcode',\n 'X',\n 'Bluesky',\n 'Reddit',\n] as const;\n\nexport type SocialNetworkName = (typeof SOCIAL_NETWORK_NAMES)[number];\n\n/**\n * Per-network URL prefixes. Mastodon is intentionally omitted — its URL is\n * built specially in `buildSocialNetworkUrl` (it extracts the domain from the\n * @user@domain handle), so a Record<SocialNetworkName, string> would require a\n * meaningless entry here.\n */\nexport const URL_DICTIONARY: Partial<Record<SocialNetworkName, string>> = {\n LinkedIn: 'https://linkedin.com/in/',\n GitHub: 'https://github.com/',\n GitLab: 'https://gitlab.com/',\n IMDB: 'https://imdb.com/name/',\n Instagram: 'https://instagram.com/',\n ORCID: 'https://orcid.org/',\n StackOverflow: 'https://stackoverflow.com/users/',\n ResearchGate: 'https://researchgate.net/profile/',\n YouTube: 'https://youtube.com/@',\n 'Google Scholar': 'https://scholar.google.com/citations?user=',\n Telegram: 'https://t.me/',\n WhatsApp: 'https://wa.me/',\n Leetcode: 'https://leetcode.com/u/',\n X: 'https://x.com/',\n Bluesky: 'https://bsky.app/profile/',\n Reddit: 'https://reddit.com/user/',\n};\n\n/**\n * Validate a username against its network's rules. Mirrors\n * `SocialNetwork.check_username`. Throws on invalid input.\n */\nexport function validateUsername(network: string, username: string): void {\n switch (network) {\n case 'Mastodon':\n if (!/@[^@]+@[^@]+/.test(username)) {\n throw new UsernameError('Mastodon username should be in the format \"@username@domain\".');\n }\n break;\n case 'StackOverflow':\n if (!/^\\d+\\/[^/]+$/.test(username)) {\n throw new UsernameError(\n 'StackOverflow username should be in the format \"user_id/username\".',\n );\n }\n break;\n case 'YouTube':\n if (username.startsWith('@')) {\n throw new UsernameError(\n 'YouTube username should not start with \"@\". Remove \"@\" from the beginning of the username.\"',\n );\n }\n break;\n case 'ORCID':\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$/.test(username)) {\n throw new UsernameError(\"ORCID username should be in the format 'XXXX-XXXX-XXXX-XXX'.\");\n }\n break;\n case 'IMDB':\n if (!/^nm\\d{7}$/.test(username)) {\n throw new UsernameError(\"IMDB name should be in the format 'nmXXXXXXX'.\");\n }\n break;\n case 'Bluesky':\n if (\n !/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(\n username,\n )\n ) {\n throw new UsernameError(\n \"Bluesky username should be a valid handle with no '@' (e.g., 'username.bsky.social' or 'domain.com').\",\n );\n }\n break;\n case 'WhatsApp': {\n // Approximate phone-number validation (digits with optional leading +).\n // The Python version uses phonenumbers.PhoneNumber; we use a simpler\n // digit check that accepts international format.\n const digits = username.replace(/[^\\d+]/g, '');\n if (!/^\\+?\\d{7,15}$/.test(digits)) {\n throw new UsernameError(\n 'WhatsApp username should be your phone number with country code in international format (e.g., +1 for USA, +44 for UK).',\n );\n }\n break;\n }\n case 'Reddit':\n if (!/^[a-zA-Z0-9_-]{3,23}$/.test(username)) {\n throw new UsernameError(\n 'Reddit username should be made up of uppercase/lowercase letters, numbers, underscores, and hyphens between 3 and 23 characters.',\n );\n }\n break;\n default:\n // No special validation for LinkedIn, GitHub, etc.\n break;\n }\n}\n\nexport class UsernameError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UsernameError';\n }\n}\n\n/**\n * Build the profile URL from a network + username. Mirrors the Python\n * `SocialNetwork.url` cached property.\n */\nexport function buildSocialNetworkUrl(network: string, username: string): string {\n if (network === 'Mastodon') {\n // @username@domain → https://domain/@username\n const parts = username.split('@'); // ['', 'username', 'domain']\n const user = parts[1] ?? '';\n const domain = parts[2] ?? '';\n return `https://${domain}/@${user}`;\n }\n const base = URL_DICTIONARY[network as SocialNetworkName];\n if (!base) {\n throw new Error(`Unknown social network: ${network}`);\n }\n return base + username;\n}\n\nexport const SocialNetworkSchema = strict(\n z.object({\n network: z.enum(SOCIAL_NETWORK_NAMES),\n username: z.string(),\n }),\n).superRefine((value, ctx) => {\n try {\n validateUsername(value.network, value.username);\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof Error ? e.message : 'Invalid username',\n path: ['username'],\n });\n }\n});\n\nexport type SocialNetwork = z.infer<typeof SocialNetworkSchema>;\n","/**\n * Cv — ported from `cv/cv.py`.\n *\n * The header / personal-information block. Holds name, headline, location,\n * contact details (email/phone/website — each scalar-or-list), photo,\n * social networks, custom connections, and the sections dict.\n *\n * Python-specific behaviors that need careful porting:\n * - `capture_input_order` (model_validator wrap): preserve YAML key order so\n * the header renders in user-defined order. In JS, object keys already\n * preserve insertion order, so we just record which header keys were\n * present in the input into `_keyOrder`.\n * - `validate_list_or_scalar_fields`: email/phone/website accept a scalar OR\n * a list. We model with a Zod union of single-or-array.\n * - Private attrs (_plain_name, _connections, _top_note, _footer) are computed\n * during the renderer's model-processor step, NOT here. We only carry\n * `_keyOrder` (computed at parse time from input order).\n *\n * Like the entry schema, Cv needs a `currentDate` (passed through to sections),\n * so we expose a factory `cvSchema(currentDate)`.\n */\nimport { z } from 'zod';\nimport { validateExistingAssetPath } from '../../path';\nimport type { ValidationContext } from '../../validation_context';\nimport { strict } from '../base';\nimport type { SimpleDate } from '../dates';\nimport { CustomConnectionSchema } from './custom_connection';\nimport { sectionSchema } from './section';\nimport { SocialNetworkSchema } from './social_network';\n\n// Email: a reasonably permissive RFC-ish check. (Pydantic uses email-validator;\n// we use a pragmatic regex that accepts standard user@domain.tld forms.)\nconst EmailSchema = z.string().email('An email address must have an @-sign.');\n\nconst PhoneSchema = z.string().regex(/^\\+?[\\d\\s\\-()]{7,}$/, 'This is not a valid phone number.');\n\nconst WebsiteSchema = z\n .string()\n .url('This is not a valid URL.')\n .refine((v) => /^https?:\\/\\//.test(v), 'This is not a valid URL.');\n\n/** scalar-or-list helper: validate each element with the given element schema. */\nfunction scalarOrList<T extends z.ZodTypeAny>(element: T) {\n return z.union([element, z.array(element)]);\n}\n\nexport interface Cv {\n name?: string | null;\n headline?: string | null;\n location?: string | null;\n email?: string | string[];\n photo?: string;\n phone?: string | string[];\n website?: string | string[];\n social_networks?: unknown[];\n custom_connections?: unknown[];\n sections?: Record<string, unknown[]>;\n /** Header keys in their original YAML order (for header rendering). */\n _keyOrder: string[];\n}\n\n/**\n * Build the Cv schema bound to a `currentDate` (used by the nested section schema).\n */\n/** Validate photo path at field level so errors are collected alongside other field failures. */\nfunction photoSchema(context?: ValidationContext) {\n return z\n .string()\n .nullable()\n .optional()\n .superRefine((value, ctx) => {\n if (!value) return;\n try {\n validateExistingAssetPath(value, context, 'file');\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof Error ? e.message : String(e),\n });\n }\n });\n}\n\nexport function cvSchema(currentDate: SimpleDate, validationContext?: ValidationContext) {\n return strict(\n z.object({\n name: z.string().nullable().optional(),\n headline: z.string().nullable().optional(),\n location: z.string().nullable().optional(),\n email: scalarOrList(EmailSchema).nullable().optional(),\n photo: photoSchema(validationContext),\n phone: scalarOrList(PhoneSchema).nullable().optional(),\n website: scalarOrList(WebsiteSchema).nullable().optional(),\n social_networks: z.array(SocialNetworkSchema).nullable().optional(),\n custom_connections: z.array(CustomConnectionSchema).nullable().optional(),\n sections: sectionSchema(currentDate).nullable().optional(),\n }),\n ).transform((value): Cv => {\n const headerKeys = validationContext?.cvHeaderKeyOrder ?? [\n 'name',\n 'headline',\n 'location',\n 'email',\n 'photo',\n 'phone',\n 'website',\n 'social_networks',\n 'custom_connections',\n 'sections',\n ];\n const keyOrder: string[] = [];\n for (const k of headerKeys) {\n const v = (value as Record<string, unknown>)[k];\n if (v !== undefined && v !== null) {\n keyOrder.push(k);\n }\n }\n return { ...value, _keyOrder: keyOrder } as Cv;\n });\n}\n","/**\n * Color scalar — ported from `pydantic_extra_types.color.Color` as used by\n * rendercv (which only ever calls `.as_rgb()` to stringify for Typst).\n *\n * Accepted input formats (per rendercv docs):\n * - W3C/SVG color name: \"Black\", \"aqua\", \"AliceBlue\"\n * - Hex: \"#000\", \"#7fffd4\", \"7fffd4\", \"7fffd4ff\"\n * - rgb(): \"rgb(0, 79, 144)\", \"rgb(0, 79, 144, 0.5)\" — decimal 0-255, optional alpha\n * - hsl(): \"hsl(270, 60%, 70%)\", \"hsl(270, 60%, 70%, 0.5)\"\n *\n * Output (matching pydantic-extra-types `as_rgb()`): `rgb(r, g, b)` with integer\n * channels 0-255. Alpha is dropped because the Typst template renders RGB only\n * (see `design.colors.*.as_rgb()` calls in `Preamble.j2.typ`).\n *\n * Validation errors throw `Error` with a message; the Zod wrapper turns these\n * into `z.ZodError`s so they integrate with the rest of the schema.\n */\nimport { z } from 'zod';\n\n/** W3C/SVG named colors → [r, g, b]. Mirrors the `webcolors` table. */\nconst NAMED_COLORS: Record<string, [number, number, number]> = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n grey: [128, 128, 128],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n rebeccapurple: [102, 51, 153],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50],\n transparent: [0, 0, 0],\n};\n\nfunction clamp255(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\n/** Convert HSL (h: 0-360, s/l: 0-1) to [r,g,b] in 0-255. */\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n const hue = ((h % 360) + 360) % 360;\n if (s === 0) {\n const v = clamp255(l * 255);\n return [v, v, v];\n }\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (hue < 60) [r, g, b] = [c, x, 0];\n else if (hue < 120) [r, g, b] = [x, c, 0];\n else if (hue < 180) [r, g, b] = [0, c, x];\n else if (hue < 240) [r, g, b] = [0, x, c];\n else if (hue < 300) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n return [clamp255((r + m) * 255), clamp255((g + m) * 255), clamp255((b + m) * 255)];\n}\n\n/** Parse any rendercv-supported color string into [r, g, b] (0-255 integers). */\nexport function parseColor(input: string): [number, number, number] {\n if (typeof input !== 'string') {\n throw new Error('Color must be a string.');\n }\n const s = input.trim();\n if (s.length === 0) {\n throw new Error('Color value cannot be empty.');\n }\n\n // Named color (case-insensitive)\n const lower = s.toLowerCase();\n if (lower in NAMED_COLORS) {\n return NAMED_COLORS[lower]!;\n }\n\n // rgb(...)\n const rgbMatch = /^rgba?\\(\\s*([^)]+)\\s*\\)$/i.exec(s);\n if (rgbMatch) {\n const parts = rgbMatch[1]!.split(/[,\\s]+/).filter((p) => p.length > 0);\n if (parts.length < 3) {\n throw new Error(`Invalid rgb() color: ${s}`);\n }\n const r = clamp255(Number.parseFloat(parts[0]!));\n const g = clamp255(Number.parseFloat(parts[1]!));\n const b = clamp255(Number.parseFloat(parts[2]!));\n return [r, g, b];\n }\n\n // hsl(...)\n const hslMatch = /^hsla?\\(\\s*([^)]+)\\s*\\)$/i.exec(s);\n if (hslMatch) {\n const parts = hslMatch[1]!.split(/[,\\s]+/).filter((p) => p.length > 0);\n if (parts.length < 3) {\n throw new Error(`Invalid hsl() color: ${s}`);\n }\n const h = Number.parseFloat(parts[0]!);\n const sat = parts[1]!.endsWith('%')\n ? Number.parseFloat(parts[1]!) / 100\n : Number.parseFloat(parts[1]!) / 100;\n const light = parts[2]!.endsWith('%')\n ? Number.parseFloat(parts[2]!) / 100\n : Number.parseFloat(parts[2]!) / 100;\n return hslToRgb(h, sat, light);\n }\n\n // Hex: with or without leading '#', 3/4/6/8 digits\n const hexMatch = /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(s);\n if (hexMatch) {\n const hex = hexMatch[1]!;\n if (hex.length === 3) {\n return [\n Number.parseInt(hex[0]! + hex[0]!, 16),\n Number.parseInt(hex[1]! + hex[1]!, 16),\n Number.parseInt(hex[2]! + hex[2]!, 16),\n ];\n }\n if (hex.length === 6 || hex.length === 8) {\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n }\n // 4-digit hex: #rgba — expand like 3-digit\n return [\n Number.parseInt(hex[0]! + hex[0]!, 16),\n Number.parseInt(hex[1]! + hex[1]!, 16),\n Number.parseInt(hex[2]! + hex[2]!, 16),\n ];\n }\n\n throw new Error(\n `'${s}' is not a valid color. Use a name, hex (#7fffd4), rgb(0,79,144), or hsl(270, 60%, 70%).`,\n );\n}\n\n/** Stringify as `rgb(r, g, b)` — exactly what the Typst preamble template needs. */\nexport function colorToRgbString(rgb: [number, number, number]): string {\n return `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`;\n}\n\n/**\n * A Color class that mirrors the Python `Color` object's surface as used by\n * rendercv: parse on construct, expose `.asRgb()` → \"rgb(r, g, b)\" string.\n */\nexport class Color {\n readonly rgb: [number, number, number];\n\n constructor(input: string) {\n this.rgb = parseColor(input);\n }\n\n /** `rgb(r, g, b)` — same output as Pydantic's `Color.as_rgb()`. */\n asRgb(): string {\n return colorToRgbString(this.rgb);\n }\n\n toString(): string {\n return this.asRgb();\n }\n\n static parse(input: string): Color {\n return new Color(input);\n }\n}\n\n/**\n * Zod schema for color inputs. Produces a `Color` instance on success.\n *\n * Accepts BOTH:\n * - strings (from YAML/user input): parsed into a Color via parseColor\n * - Color instances (from defaults / deep-merged theme configs): passed through\n *\n * The dual-input is required because Zod re-validates `.default()` values\n * through the schema. Defaults we set are already-parsed Color instances, so\n * the schema must accept them as-is.\n */\nexport const ColorSchema = z.any().transform((s, ctx): Color => {\n if (s instanceof Color) return s;\n if (typeof s === 'string') {\n try {\n return new Color(s);\n } catch (e) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof Error ? e.message : 'Invalid color',\n });\n return z.NEVER as never;\n }\n }\n if (\n s &&\n typeof s === 'object' &&\n 'rgb' in s &&\n Array.isArray((s as { rgb: unknown }).rgb) &&\n (s as { rgb: unknown[] }).rgb.length === 3\n ) {\n const [r, g, b] = (s as { rgb: [number, number, number] }).rgb;\n return new Color(colorToRgbString([r, g, b]));\n }\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Color must be a string, got ${typeof s}.`,\n });\n return z.NEVER as never;\n});\n","/**\n * FontFamily scalar — ported from `font_family.py`.\n *\n * Any string is accepted at runtime. The curated list matches bundled CV fonts.\n */\nimport { z } from 'zod';\n\n/** Bundled font families shipped with rendercv-ts (+ Typst built-ins for fallback). */\nexport const availableFontFamilies: readonly string[] = [\n 'DejaVu Sans Mono',\n 'EB Garamond',\n 'Fontin',\n 'Gentium Book Plus',\n 'Lato',\n 'Libertinus Serif',\n 'New Computer Modern',\n 'Raleway',\n 'Source Sans 3',\n 'Ubuntu',\n 'Vazirmatn',\n 'XCharter',\n]\n .slice()\n .sort();\n\nexport const FontFamilySchema = z.string();\n\nexport type FontFamily = string;\n","/**\n * TypstDimension scalar — ported from `typst_dimension.py`.\n *\n * Accepts strings like \"0.7in\", \"-0.5cm\", \"1.4em\", \"10pt\", \"100mm\".\n * Validation matches the Python regex (negative values allowed for offsets).\n */\nimport { z } from 'zod';\n\nconst DIMENSION_RE = /^-?\\d+(?:\\.\\d+)?(cm|in|pt|mm|em)$/;\n\nexport const TypstDimensionSchema = z.string().refine((v) => DIMENSION_RE.test(v), {\n message:\n 'The value must be a number followed by a unit (cm, in, pt, mm, em). For example, 0.1cm.',\n});\n\nexport type TypstDimension = z.infer<typeof TypstDimensionSchema>;\n\n/** Shared description text — appears in JSON schema / IDE tooltips. */\nexport const lengthCommonDescription =\n 'It can be specified with units (cm, in, pt, mm, em). For example, `0.1cm`.';\n","/**\n * ClassicTheme — ported from `design/classic_theme.py`.\n *\n * This is the base schema for ALL themes. Other built-in themes inherit the\n * same field structure; they differ only in defaults (stored as static\n * override objects in `themes/*.ts` and deep-merged over classic defaults\n * at schema-construction time — see `variant_generator.ts`).\n *\n * Field structure (matching Python field order):\n * theme: Literal[\"classic\"]\n * page: Page\n * colors: Colors\n * typography: Typography\n * links: Links\n * header: Header\n * section_titles: SectionTitles\n * sections: Sections\n * entries: Entries\n * templates: Templates\n *\n * Each sub-object is exported individually so the variant generator can\n * override their defaults.\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\nimport { ColorSchema } from './color';\nimport { FontFamilySchema } from './font_family';\nimport { TypstDimensionSchema, lengthCommonDescription } from './typst_dimension';\n\n// ---- Reusable literal schemas ----\n\nexport const pageSize = z.enum(['a4', 'a5', 'us-letter', 'us-executive']);\nexport const bodyAlignment = z.enum(['left', 'justified', 'justified-with-no-hyphenation']);\nexport const alignment = z.enum(['left', 'center', 'right']);\nexport const phoneNumberFormat = z.enum(['national', 'international', 'E164']);\nexport const photoPosition = z.enum(['left', 'right']);\nexport const sectionTitleType = z.enum([\n 'with_partial_line',\n 'with_full_line',\n 'without_line',\n 'moderncv',\n 'centered_without_line',\n 'centered_with_partial_line',\n 'centered_with_centered_partial_line',\n 'centered_with_full_line',\n]);\nexport const bulletChar = z.enum(['●', '•', '◦', '-', '◆', '★', '■', '—', '○']);\n\n// ---- Sub-object schemas (with classic defaults) ----\n\nexport const PageSchema = strict(\n z.object({\n size: pageSize.default('us-letter'),\n top_margin: TypstDimensionSchema.default('0.7in'),\n bottom_margin: TypstDimensionSchema.default('0.7in'),\n left_margin: TypstDimensionSchema.default('0.7in'),\n right_margin: TypstDimensionSchema.default('0.7in'),\n show_footer: z.boolean().default(true),\n show_top_note: z.boolean().default(true),\n }),\n);\n\nexport const ColorsSchema = strict(\n z.object({\n body: ColorSchema.default(() => ColorSchema.parse('rgb(0, 0, 0)')),\n name: ColorSchema.default(() => ColorSchema.parse('rgb(0, 79, 144)')),\n headline: ColorSchema.default(() => ColorSchema.parse('rgb(0, 79, 144)')),\n connections: ColorSchema.default(() => ColorSchema.parse('rgb(0, 79, 144)')),\n section_titles: ColorSchema.default(() => ColorSchema.parse('rgb(0, 79, 144)')),\n links: ColorSchema.default(() => ColorSchema.parse('rgb(0, 79, 144)')),\n footer: ColorSchema.default(() => ColorSchema.parse('rgb(128, 128, 128)')),\n top_note: ColorSchema.default(() => ColorSchema.parse('rgb(128, 128, 128)')),\n }),\n);\n\n/** FontFamily accepts a string (applies to all elements) OR a per-element dict. */\nexport const FontFamilyObjectSchema = strict(\n z.object({\n body: FontFamilySchema.default('Source Sans 3'),\n name: FontFamilySchema.default('Source Sans 3'),\n headline: FontFamilySchema.default('Source Sans 3'),\n connections: FontFamilySchema.default('Source Sans 3'),\n section_titles: FontFamilySchema.default('Source Sans 3'),\n }),\n);\n\nconst FontFamilyFieldSchema = z.union([FontFamilyObjectSchema, FontFamilySchema]).transform((v) =>\n typeof v === 'string'\n ? {\n body: v,\n name: v,\n headline: v,\n connections: v,\n section_titles: v,\n }\n : v,\n);\n\nexport const FontSizeSchema = strict(\n z.object({\n body: TypstDimensionSchema.default('10pt'),\n name: TypstDimensionSchema.default('30pt'),\n headline: TypstDimensionSchema.default('10pt'),\n connections: TypstDimensionSchema.default('10pt'),\n section_titles: TypstDimensionSchema.default('1.4em'),\n }),\n);\n\nexport const SmallCapsSchema = strict(\n z.object({\n name: z.boolean().default(false),\n headline: z.boolean().default(false),\n connections: z.boolean().default(false),\n section_titles: z.boolean().default(false),\n }),\n);\n\nexport const BoldSchema = strict(\n z.object({\n name: z.boolean().default(true),\n headline: z.boolean().default(false),\n connections: z.boolean().default(false),\n section_titles: z.boolean().default(true),\n }),\n);\n\nexport const TypographySchema = strict(\n z.object({\n line_spacing: TypstDimensionSchema.default('0.6em'),\n alignment: bodyAlignment.default('justified'),\n date_and_location_column_alignment: alignment.default('right'),\n font_family: FontFamilyFieldSchema.default(() => FontFamilyObjectSchema.parse({})),\n font_size: FontSizeSchema.default(() => FontSizeSchema.parse({})),\n small_caps: SmallCapsSchema.default(() => SmallCapsSchema.parse({})),\n bold: BoldSchema.default(() => BoldSchema.parse({})),\n }),\n);\n\nexport const LinksSchema = strict(\n z.object({\n underline: z.boolean().default(false),\n show_external_link_icon: z.boolean().default(false),\n }),\n);\n\nexport const ConnectionsSchema = strict(\n z.object({\n phone_number_format: phoneNumberFormat.default('national'),\n hyperlink: z.boolean().default(true),\n show_icons: z.boolean().default(true),\n display_urls_instead_of_usernames: z.boolean().default(false),\n separator: z.string().default(''),\n space_between_connections: TypstDimensionSchema.default('0.5cm'),\n }),\n);\n\nexport const HeaderSchema = strict(\n z.object({\n alignment: alignment.default('center'),\n photo_width: TypstDimensionSchema.default('3.5cm'),\n photo_position: photoPosition.default('left'),\n photo_space_left: TypstDimensionSchema.default('0.4cm'),\n photo_space_right: TypstDimensionSchema.default('0.4cm'),\n space_below_name: TypstDimensionSchema.default('0.7cm'),\n space_below_headline: TypstDimensionSchema.default('0.7cm'),\n space_below_connections: TypstDimensionSchema.default('0.7cm'),\n connections: ConnectionsSchema.default(() => ConnectionsSchema.parse({})),\n }),\n);\n\nexport const SectionTitlesSchema = strict(\n z.object({\n type: sectionTitleType.default('with_partial_line'),\n line_thickness: TypstDimensionSchema.default('0.5pt'),\n space_above: TypstDimensionSchema.default('0.5cm'),\n space_below: TypstDimensionSchema.default('0.3cm'),\n }),\n);\n\nexport const SectionsSchema = strict(\n z.object({\n allow_page_break: z.boolean().default(true),\n space_between_regular_entries: TypstDimensionSchema.default('1.2em'),\n space_between_text_based_entries: TypstDimensionSchema.default('0.3em'),\n show_time_spans_in: z\n .array(z.string())\n .default(['experience'])\n .transform((titles) => titles.map((t) => t.toLowerCase().replace(/ /g, '_'))),\n }),\n);\n\nexport const SummarySchema = strict(\n z.object({\n space_above: TypstDimensionSchema.default('0cm'),\n space_left: TypstDimensionSchema.default('0cm'),\n }),\n);\n\nexport const HighlightsSchema = strict(\n z.object({\n bullet: bulletChar.default('•'),\n nested_bullet: bulletChar.default('•'),\n space_left: TypstDimensionSchema.default('0.15cm'),\n space_above: TypstDimensionSchema.default('0cm'),\n space_between_items: TypstDimensionSchema.default('0cm'),\n space_between_bullet_and_text: TypstDimensionSchema.default('0.5em'),\n }),\n);\n\nexport const EntriesSchema = strict(\n z.object({\n date_and_location_width: TypstDimensionSchema.default('4.15cm'),\n side_space: TypstDimensionSchema.default('0.2cm'),\n space_between_columns: TypstDimensionSchema.default('0.1cm'),\n allow_page_break: z.boolean().default(false),\n short_second_row: z.boolean().default(true),\n degree_width: TypstDimensionSchema.default('1cm'),\n summary: SummarySchema.default(() => SummarySchema.parse({})),\n highlights: HighlightsSchema.default(() => HighlightsSchema.parse({})),\n }),\n);\n\nexport const OneLineEntryTemplateSchema = strict(\n z.object({\n main_column: z.string().default('**LABEL:** DETAILS'),\n }),\n);\n\nexport const EducationEntryTemplateSchema = strict(\n z.object({\n main_column: z.string().default('**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS'),\n degree_column: z.string().nullable().default('**DEGREE**'),\n date_and_location_column: z.string().default('LOCATION\\nDATE'),\n }),\n);\n\nexport const NormalEntryTemplateSchema = strict(\n z.object({\n main_column: z.string().default('**NAME**\\nSUMMARY\\nHIGHLIGHTS'),\n date_and_location_column: z.string().default('LOCATION\\nDATE'),\n }),\n);\n\nexport const ExperienceEntryTemplateSchema = strict(\n z.object({\n main_column: z.string().default('**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS'),\n date_and_location_column: z.string().default('LOCATION\\nDATE'),\n }),\n);\n\nexport const PublicationEntryTemplateSchema = strict(\n z.object({\n main_column: z.string().default('**TITLE**\\nSUMMARY\\nAUTHORS\\nURL (JOURNAL)'),\n date_and_location_column: z.string().default('DATE'),\n }),\n);\n\nexport const TemplatesSchema = strict(\n z.object({\n footer: z.string().default('*NAME -- PAGE_NUMBER/TOTAL_PAGES*'),\n top_note: z.string().default('*LAST_UPDATED CURRENT_DATE*'),\n single_date: z.string().default('MONTH_ABBREVIATION YEAR'),\n date_range: z.string().default('START_DATE – END_DATE'),\n time_span: z.string().default('HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS'),\n one_line_entry: OneLineEntryTemplateSchema.default(() => OneLineEntryTemplateSchema.parse({})),\n education_entry: EducationEntryTemplateSchema.default(() =>\n EducationEntryTemplateSchema.parse({}),\n ),\n normal_entry: NormalEntryTemplateSchema.default(() => NormalEntryTemplateSchema.parse({})),\n experience_entry: ExperienceEntryTemplateSchema.default(() =>\n ExperienceEntryTemplateSchema.parse({}),\n ),\n publication_entry: PublicationEntryTemplateSchema.default(() =>\n PublicationEntryTemplateSchema.parse({}),\n ),\n }),\n);\n\n/**\n * The base theme schema shared by ALL themes. The `theme` field accepts any of\n * the built-in theme names (the variant generator pins it to the right literal\n * per-variant). `ClassicThemeSchema` below wraps this with `theme = 'classic'`.\n */\nexport const ThemeBaseSchema = strict(\n z.object({\n // Accept any built-in theme name; the variant generator pins the literal.\n theme: z\n .enum([\n 'classic',\n 'ember',\n 'engineeringclassic',\n 'engineeringresumes',\n 'harvard',\n 'ink',\n 'moderncv',\n 'opal',\n 'sb2nov',\n ])\n .default('classic'),\n page: PageSchema.default(() => PageSchema.parse({})),\n colors: ColorsSchema.default(() => ColorsSchema.parse({})),\n typography: TypographySchema.default(() => TypographySchema.parse({})),\n links: LinksSchema.default(() => LinksSchema.parse({})),\n header: HeaderSchema.default(() => HeaderSchema.parse({})),\n section_titles: SectionTitlesSchema.default(() => SectionTitlesSchema.parse({})),\n sections: SectionsSchema.default(() => SectionsSchema.parse({})),\n entries: EntriesSchema.default(() => EntriesSchema.parse({})),\n templates: TemplatesSchema.default(() => TemplatesSchema.parse({})),\n }),\n);\n\n/**\n * The top-level ClassicTheme object schema (discriminator: theme = \"classic\").\n * Wraps `ThemeBaseSchema` with a `theme` literal refinement.\n */\nexport const ClassicThemeSchema = ThemeBaseSchema.refine((v) => v.theme === 'classic', {\n path: ['theme'],\n message: \"Expected theme 'classic'.\",\n});\n\nexport type ClassicTheme = z.infer<typeof ThemeBaseSchema>;\n\nexport { lengthCommonDescription };\n","/**\n * Built-in theme configs loaded from YAML (ported from Python other_themes/).\n */\nimport { parse as parseYaml } from 'yaml';\nimport emberYaml from './other_themes/ember.yaml?raw';\nimport engineeringclassicYaml from './other_themes/engineeringclassic.yaml?raw';\nimport engineeringresumesYaml from './other_themes/engineeringresumes.yaml?raw';\nimport harvardYaml from './other_themes/harvard.yaml?raw';\nimport inkYaml from './other_themes/ink.yaml?raw';\nimport moderncvYaml from './other_themes/moderncv.yaml?raw';\nimport opalYaml from './other_themes/opal.yaml?raw';\nimport sb2novYaml from './other_themes/sb2nov.yaml?raw';\nimport type { ThemeConfig, ThemeName } from './variant_generator';\n\nfunction themeConfigFromYaml(yamlText: string): ThemeConfig {\n const parsed = parseYaml(yamlText) as { design?: ThemeConfig } | null;\n return parsed?.design ?? {};\n}\n\nexport const THEME_CONFIGS: Record<ThemeName, ThemeConfig> = {\n classic: {},\n ember: themeConfigFromYaml(emberYaml),\n engineeringclassic: themeConfigFromYaml(engineeringclassicYaml),\n engineeringresumes: themeConfigFromYaml(engineeringresumesYaml),\n harvard: themeConfigFromYaml(harvardYaml),\n ink: themeConfigFromYaml(inkYaml),\n moderncv: themeConfigFromYaml(moderncvYaml),\n opal: themeConfigFromYaml(opalYaml),\n sb2nov: themeConfigFromYaml(sb2novYaml),\n};\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: ember\n page:\n top_margin: 0.6in\n bottom_margin: 0.6in\n left_margin: 0.6in\n right_margin: 0.6in\n typography:\n line_spacing: 0.6em\n alignment: justified-with-no-hyphenation\n font_family:\n body: Ubuntu\n name: Gentium Book Plus\n headline: Gentium Book Plus\n connections: Ubuntu\n section_titles: Ubuntu\n font_size:\n body: 10.5pt\n name: 24pt\n headline: 10.5pt\n connections: 10pt\n section_titles: 1.15em\n small_caps:\n name: false\n headline: true\n connections: false\n section_titles: true\n bold:\n name: true\n headline: false\n connections: false\n section_titles: true\n colors:\n body: rgb(35, 31, 32)\n name: rgb(155, 35, 25)\n headline: rgb(90, 60, 55)\n connections: rgb(100, 75, 68)\n section_titles: rgb(155, 35, 25)\n links: rgb(155, 35, 25)\n footer: rgb(140, 125, 118)\n top_note: rgb(140, 125, 118)\n header:\n alignment: center\n space_below_name: 0.5cm\n space_below_headline: 0.4cm\n space_below_connections: 0.6cm\n connections:\n separator: \"·\"\n show_icons: false\n space_between_connections: 0.5cm\n links:\n underline: true\n show_external_link_icon: false\n section_titles:\n type: centered_without_line\n line_thickness: 0.5pt\n space_above: 0.55cm\n space_below: 0.25cm\n sections:\n space_between_regular_entries: 1.1em\n space_between_text_based_entries: 0.3em\n show_time_spans_in: []\n entries:\n short_second_row: false\n side_space: 0.1cm\n space_between_columns: 0.15cm\n summary:\n space_above: 0.05cm\n highlights:\n bullet: \"◆\"\n nested_bullet: \"◦\"\n space_left: 0.15cm\n space_above: 0.05cm\n space_between_items: 0.04cm\n space_between_bullet_and_text: 0.5em\n templates:\n education_entry:\n main_column: \"**INSTITUTION** -- LOCATION\\n*DEGREE_WITH_AREA*\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**COMPANY** -- LOCATION\\n*POSITION*\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: engineeringclassic\n typography:\n font_family:\n body: Raleway\n name: Raleway\n headline: Raleway\n connections: Raleway\n section_titles: Raleway\n bold:\n name: false\n section_titles: false\n header:\n alignment: left\n links:\n show_external_link_icon: false\n section_titles:\n type: with_full_line\n sections:\n show_time_spans_in: []\n entries:\n short_second_row: false\n summary:\n space_above: 0.12cm\n highlights:\n space_left: \"0cm\"\n space_above: 0.12cm\n space_between_items: \"0.12cm\"\n templates:\n education_entry:\n main_column: \"**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- **LOCATION**\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**POSITION**, COMPANY -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: engineeringresumes\n page:\n show_footer: false\n typography:\n font_family:\n body: XCharter\n name: XCharter\n headline: XCharter\n connections: XCharter\n section_titles: XCharter\n font_size:\n name: 24pt\n section_titles: 1.15em\n bold:\n name: true\n section_titles: true\n header:\n connections:\n separator: \"|\"\n show_icons: false\n display_urls_instead_of_usernames: true\n colors:\n name: rgb(0,0,0)\n connections: rgb(0,0,0)\n headline: rgb(0,0,0)\n section_titles: rgb(0,0,0)\n links: rgb(0,0,0)\n links:\n underline: true\n show_external_link_icon: false\n section_titles:\n type: with_full_line\n space_above: \"0.5cm\"\n space_below: \"0.3cm\"\n sections:\n space_between_regular_entries: \"0.42cm\"\n space_between_text_based_entries: \"0.15cm\"\n show_time_spans_in: []\n entries:\n short_second_row: false\n summary:\n space_above: 0.08cm\n side_space: \"0cm\"\n highlights:\n bullet: ●\n nested_bullet: ●\n space_left: \"0cm\"\n space_above: 0.08cm\n space_between_items: 0.08cm\n space_between_bullet_and_text: 0.3em\n templates:\n education_entry:\n main_column: \"**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- **LOCATION**\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**POSITION**, COMPANY -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: harvard\n page:\n top_margin: 0.5in\n bottom_margin: 0.5in\n left_margin: 0.5in\n right_margin: 0.5in\n show_top_note: false\n colors:\n name: rgb(0,0,0)\n headline: rgb(0,0,0)\n connections: rgb(0,0,0)\n section_titles: rgb(0,0,0)\n links: rgb(0,0,0)\n typography:\n font_family:\n body: XCharter\n name: XCharter\n headline: XCharter\n connections: XCharter\n section_titles: XCharter\n font_size:\n name: 22pt\n body: 10.5pt\n connections: 10pt\n section_titles: 1.15em\n header:\n space_below_name: 0.5cm\n space_below_headline: 0.5cm\n space_below_connections: 0.5cm\n connections:\n show_icons: false\n separator: \"•\"\n space_between_connections: 0.4cm\n section_titles:\n type: centered_with_centered_partial_line\n space_below: 0.2cm\n sections:\n space_between_regular_entries: 1em\n show_time_spans_in: []\n entries:\n short_second_row: false\n templates:\n time_span: ''\n education_entry:\n main_column: \"**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n normal_entry:\n main_column: \"**NAME** -- **LOCATION**\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**COMPANY**, POSITION -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: ink\n page:\n top_margin: 0.6in\n bottom_margin: 0.6in\n left_margin: 0.6in\n right_margin: 0.6in\n typography:\n line_spacing: 0.55em\n alignment: justified\n font_family:\n body: EB Garamond\n name: EB Garamond\n headline: EB Garamond\n connections: EB Garamond\n section_titles: EB Garamond\n font_size:\n body: 10pt\n name: 24pt\n headline: 11pt\n connections: 10pt\n section_titles: 1.4em\n small_caps:\n name: false\n headline: false\n section_titles: true\n bold:\n name: true\n headline: false\n connections: false\n section_titles: true\n colors:\n name: rgb(42, 24, 82)\n headline: rgb(42, 24, 82)\n connections: rgb(70, 50, 110)\n section_titles: rgb(42, 24, 82)\n links: rgb(42, 24, 82)\n footer: rgb(120, 100, 140)\n top_note: rgb(120, 100, 140)\n header:\n alignment: left\n space_below_name: 0.5cm\n space_below_headline: 0.4cm\n space_below_connections: 0.5cm\n connections:\n separator: \"|\"\n show_icons: false\n display_urls_instead_of_usernames: true\n space_between_connections: 0.4cm\n links:\n underline: true\n show_external_link_icon: false\n section_titles:\n type: without_line\n space_above: 0.5cm\n space_below: 0.2cm\n sections:\n space_between_regular_entries: 1em\n space_between_text_based_entries: 0.2em\n show_time_spans_in: []\n entries:\n short_second_row: false\n side_space: 0cm\n space_between_columns: 0.2cm\n summary:\n space_above: 0.06cm\n highlights:\n bullet: \"•\"\n nested_bullet: \"•\"\n space_left: 0cm\n space_above: 0.06cm\n space_between_items: 0.06cm\n space_between_bullet_and_text: 0.4em\n templates:\n education_entry:\n main_column: \"**INSTITUTION** -- LOCATION\\n*DEGREE_WITH_AREA*\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- **LOCATION**\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**COMPANY** -- LOCATION\\n*POSITION*\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: moderncv\n typography:\n line_spacing: 0.6em\n font_family:\n body: Fontin\n name: Fontin\n headline: Fontin\n connections: Fontin\n section_titles: Fontin\n font_size:\n name: 24pt\n section_titles: 1.2em\n bold:\n name: true\n section_titles: true\n header:\n alignment: left\n photo_width: 4.15cm\n photo_space_left: 0cm\n photo_space_right: 0.3cm\n links:\n underline: true\n show_external_link_icon: false\n section_titles:\n type: moderncv\n space_above: 0.55cm\n space_below: 0.3cm\n line_thickness: 0.15cm\n sections:\n show_time_spans_in: []\n entries:\n short_second_row: false\n side_space: 0cm\n space_between_columns: 0.3cm\n summary:\n space_above: 0.1cm\n highlights:\n space_left: 0cm\n space_above: 0.15cm\n space_between_items: 0.1cm\n space_between_bullet_and_text: 0.3em\n templates:\n education_entry:\n main_column: \"**INSTITUTION**, DEGREE_WITH_AREA -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- **LOCATION**\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**POSITION**, COMPANY -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: opal\n page:\n top_margin: 0.65in\n bottom_margin: 0.65in\n left_margin: 0.65in\n right_margin: 0.65in\n show_footer: false\n show_top_note: false\n typography:\n line_spacing: 0.6em\n alignment: left\n font_family:\n body: Lato\n name: Lato\n headline: Lato\n connections: Lato\n section_titles: Lato\n font_size:\n body: 10.5pt\n name: 24pt\n headline: 10.5pt\n connections: 10pt\n section_titles: 1.15em\n small_caps:\n name: false\n headline: true\n connections: false\n section_titles: true\n bold:\n name: true\n headline: false\n connections: false\n section_titles: true\n colors:\n name: rgb(0, 100, 90)\n headline: rgb(0, 80, 72)\n connections: rgb(0, 80, 72)\n section_titles: rgb(0, 100, 90)\n links: rgb(0, 100, 90)\n footer: rgb(100, 140, 135)\n top_note: rgb(100, 140, 135)\n header:\n alignment: center\n space_below_name: 0.3cm\n space_below_headline: 0.3cm\n space_below_connections: 0.6cm\n connections:\n separator: \"•\"\n show_icons: true\n space_between_connections: 0.5cm\n links:\n underline: false\n show_external_link_icon: false\n section_titles:\n type: centered_without_line\n line_thickness: 0.4pt\n space_above: 0.55cm\n space_below: 0.25cm\n sections:\n space_between_regular_entries: 1.1em\n space_between_text_based_entries: 0.3em\n show_time_spans_in: []\n entries:\n short_second_row: true\n side_space: 0.15cm\n space_between_columns: 0.1cm\n summary:\n space_above: 0.04cm\n highlights:\n bullet: \"◦\"\n nested_bullet: \"◦\"\n space_left: 0.15cm\n space_above: 0.04cm\n space_between_items: 0.04cm\n space_between_bullet_and_text: 0.5em\n templates:\n education_entry:\n main_column: \"**INSTITUTION** -- LOCATION\\nDEGREE_WITH_AREA\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n degree_column: null\n normal_entry:\n main_column: \"**NAME** -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n experience_entry:\n main_column: \"**COMPANY**, *POSITION* -- LOCATION\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: DATE\n","# yaml-language-server: $schema=../../../../../../schema.json\ndesign:\n theme: sb2nov\n typography:\n font_family:\n body: New Computer Modern\n name: New Computer Modern\n headline: New Computer Modern\n connections: New Computer Modern\n section_titles: New Computer Modern\n colors:\n name: rgb(0,0,0)\n connections: rgb(0,0,0)\n section_titles: rgb(0,0,0)\n headline: rgb(0,0,0)\n links: rgb(0,0,0)\n links:\n underline: true\n show_external_link_icon: false\n section_titles:\n type: with_full_line\n sections:\n show_time_spans_in: []\n header:\n connections:\n hyperlink: true\n show_icons: false\n display_urls_instead_of_usernames: true\n separator: \"•\"\n entries:\n short_second_row: false\n highlights:\n bullet: \"◦\"\n nested_bullet: \"◦\"\n templates:\n education_entry:\n main_column: \"**INSTITUTION**\\n*DEGREE* *in* *AREA*\\nSUMMARY\\nHIGHLIGHTS\"\n degree_column: null\n date_and_location_column: \"*LOCATION*\\n*DATE*\"\n normal_entry:\n date_and_location_column: \"*LOCATION*\\n*DATE*\"\n experience_entry:\n main_column: \"**POSITION**\\n*COMPANY*\\nSUMMARY\\nHIGHLIGHTS\"\n date_and_location_column: \"*LOCATION*\\n*DATE*\"\n","/**\n * Variant generator — TS replacement for Python's `variant_pydantic_model_generator.py`.\n *\n * The Python version dynamically builds new Pydantic classes with overridden\n * defaults at import time. In Zod we don't need new classes — every theme has\n * the *same shape* (it's all ClassicTheme), they differ only in default values.\n *\n * Our approach keeps everything as RAW INPUT data (strings, plain objects) and\n * lets ClassicThemeSchema do the parsing:\n * 1. Define `RAW_CLASSIC_DEFAULTS` — plain JSON of classic's default values\n * (color values are strings like \"rgb(0, 79, 144)\", NOT Color instances).\n * 2. Each theme is described by a plain JSON config object (`ThemeConfig`) —\n * a deep-merge overlay over classic defaults.\n * 3. `buildThemeSchema(themeConfig)` produces a Zod schema whose input is\n * deep-merged (rawDefaults over user input) and then parsed by\n * ClassicThemeSchema. The `theme` field is pinned via the overlay.\n *\n * This sidesteps the type-mismatch that arises when pre-parsed Color objects\n * are fed back into a `z.string().transform(Color)` schema.\n */\nimport { z } from 'zod';\nimport { type ClassicTheme, ThemeBaseSchema } from './classic_theme';\n\n/** A deeply-nested partial of ClassicTheme — theme overrides live here. */\nexport type ThemeConfig = {\n [K in keyof ClassicTheme]?: K extends 'theme' ? string : ThemeConfigValue<ClassicTheme[K]>;\n};\ntype ThemeConfigValue<T> = T extends object ? { [K in keyof T]?: ThemeConfigValue<T[K]> } : T;\n\n/**\n * Classic theme defaults expressed as RAW INPUT DATA (strings, plain objects).\n * These mirror what ClassicThemeSchema would produce when fed {}, but kept in\n * their unparsed (JSON-compatible) form so they can be deep-merged with user\n * input before being parsed.\n */\nexport const RAW_CLASSIC_DEFAULTS = {\n theme: 'classic',\n page: {\n size: 'us-letter',\n top_margin: '0.7in',\n bottom_margin: '0.7in',\n left_margin: '0.7in',\n right_margin: '0.7in',\n show_footer: true,\n show_top_note: true,\n },\n colors: {\n body: 'rgb(0, 0, 0)',\n name: 'rgb(0, 79, 144)',\n headline: 'rgb(0, 79, 144)',\n connections: 'rgb(0, 79, 144)',\n section_titles: 'rgb(0, 79, 144)',\n links: 'rgb(0, 79, 144)',\n footer: 'rgb(128, 128, 128)',\n top_note: 'rgb(128, 128, 128)',\n },\n typography: {\n line_spacing: '0.6em',\n alignment: 'justified',\n date_and_location_column_alignment: 'right',\n font_family: {\n body: 'Source Sans 3',\n name: 'Source Sans 3',\n headline: 'Source Sans 3',\n connections: 'Source Sans 3',\n section_titles: 'Source Sans 3',\n },\n font_size: {\n body: '10pt',\n name: '30pt',\n headline: '10pt',\n connections: '10pt',\n section_titles: '1.4em',\n },\n small_caps: { name: false, headline: false, connections: false, section_titles: false },\n bold: { name: true, headline: false, connections: false, section_titles: true },\n },\n links: { underline: false, show_external_link_icon: false },\n header: {\n alignment: 'center',\n photo_width: '3.5cm',\n photo_position: 'left',\n photo_space_left: '0.4cm',\n photo_space_right: '0.4cm',\n space_below_name: '0.7cm',\n space_below_headline: '0.7cm',\n space_below_connections: '0.7cm',\n connections: {\n phone_number_format: 'national',\n hyperlink: true,\n show_icons: true,\n display_urls_instead_of_usernames: false,\n separator: '',\n space_between_connections: '0.5cm',\n },\n },\n section_titles: {\n type: 'with_partial_line',\n line_thickness: '0.5pt',\n space_above: '0.5cm',\n space_below: '0.3cm',\n },\n sections: {\n allow_page_break: true,\n space_between_regular_entries: '1.2em',\n space_between_text_based_entries: '0.3em',\n show_time_spans_in: ['experience'],\n },\n entries: {\n date_and_location_width: '4.15cm',\n side_space: '0.2cm',\n space_between_columns: '0.1cm',\n allow_page_break: false,\n short_second_row: true,\n degree_width: '1cm',\n summary: { space_above: '0cm', space_left: '0cm' },\n highlights: {\n bullet: '•',\n nested_bullet: '•',\n space_left: '0.15cm',\n space_above: '0cm',\n space_between_items: '0cm',\n space_between_bullet_and_text: '0.5em',\n },\n },\n templates: {\n footer: '*NAME -- PAGE_NUMBER/TOTAL_PAGES*',\n top_note: '*LAST_UPDATED CURRENT_DATE*',\n single_date: 'MONTH_ABBREVIATION YEAR',\n date_range: 'START_DATE – END_DATE',\n time_span: 'HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS',\n one_line_entry: { main_column: '**LABEL:** DETAILS' },\n education_entry: {\n main_column: '**INSTITUTION**, AREA\\nSUMMARY\\nHIGHLIGHTS',\n degree_column: '**DEGREE**',\n date_and_location_column: 'LOCATION\\nDATE',\n },\n normal_entry: {\n main_column: '**NAME**\\nSUMMARY\\nHIGHLIGHTS',\n date_and_location_column: 'LOCATION\\nDATE',\n },\n experience_entry: {\n main_column: '**COMPANY**, POSITION\\nSUMMARY\\nHIGHLIGHTS',\n date_and_location_column: 'LOCATION\\nDATE',\n },\n publication_entry: {\n main_column: '**TITLE**\\nSUMMARY\\nAUTHORS\\nURL (JOURNAL)',\n date_and_location_column: 'DATE',\n },\n },\n} as const;\n\n/**\n * Deeply merge `overrides` onto `base`, returning a new object. Arrays and\n * scalars from `overrides` replace `base` values (matches the Python deep-merge\n * semantics for theme variants).\n */\nexport function deepMerge<T>(base: T, overrides: unknown): T {\n if (overrides === null || overrides === undefined) return base;\n if (typeof base !== 'object' || base === null) return base;\n if (Array.isArray(base)) {\n return (Array.isArray(overrides) ? overrides : base) as T;\n }\n const result: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n const ov = overrides as Record<string, unknown>;\n for (const key of Object.keys(ov)) {\n const ovVal = ov[key];\n const baseVal = (base as Record<string, unknown>)[key];\n if (\n ovVal !== null &&\n typeof ovVal === 'object' &&\n !Array.isArray(ovVal) &&\n typeof baseVal === 'object' &&\n baseVal !== null &&\n !Array.isArray(baseVal)\n ) {\n result[key] = deepMerge(baseVal, ovVal);\n } else if (ovVal !== undefined) {\n result[key] = ovVal;\n }\n }\n return result as T;\n}\n\n/** All theme names rendercv ships with (classic + 8 variants). */\nexport const THEME_NAMES = [\n 'classic',\n 'ember',\n 'engineeringclassic',\n 'engineeringresumes',\n 'harvard',\n 'ink',\n 'moderncv',\n 'opal',\n 'sb2nov',\n] as const;\n\nexport type ThemeName = (typeof THEME_NAMES)[number];\n\n/**\n * Build a Zod schema for a single theme, with theme-specific defaults baked in.\n *\n * Implementation: preprocess user input by deep-merging it OVER the theme's\n * raw defaults (so unspecified fields fall back to theme defaults), then parse\n * through ClassicThemeSchema. The `theme` field is always pinned to the\n * variant's name.\n */\nexport function buildThemeSchema(themeName: ThemeName, config: ThemeConfig) {\n // Compute theme defaults as raw JSON (deep-merge config over classic raw defaults).\n const themeDefaults = deepMerge(RAW_CLASSIC_DEFAULTS, config);\n\n return z\n .preprocess((input, ctx) => {\n // Validate the user-supplied theme matches, if provided.\n if (\n input !== null &&\n typeof input === 'object' &&\n !Array.isArray(input) &&\n 'theme' in input &&\n (input as Record<string, unknown>).theme !== themeName\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Expected theme '${themeName}' but got '${String((input as Record<string, unknown>).theme)}'.`,\n path: ['theme'],\n });\n }\n // Deep-merge theme defaults with user input (user wins on conflicts).\n if (input === null || input === undefined) {\n return { ...themeDefaults, theme: themeName };\n }\n if (typeof input === 'object' && !Array.isArray(input)) {\n return deepMerge({ ...themeDefaults, theme: themeName }, input);\n }\n return { ...themeDefaults, theme: themeName };\n }, ThemeBaseSchema)\n .transform((v) => ({ ...v, theme: themeName }) as ClassicTheme);\n}\n","/**\n * Design — ported from `design/design.py` + `design/built_in_design.py`.\n */\nimport { z } from 'zod';\nimport { type ClassicTheme, ClassicThemeSchema } from './classic_theme';\nimport { THEME_CONFIGS } from './themes_loader';\nimport {\n THEME_NAMES,\n type ThemeConfig,\n type ThemeName,\n buildThemeSchema,\n deepMerge,\n} from './variant_generator';\n\nconst themeSchemas = {} as Record<ThemeName, z.ZodType<ClassicTheme, z.ZodTypeDef, unknown>>;\nfor (const name of THEME_NAMES) {\n themeSchemas[name] = buildThemeSchema(name, THEME_CONFIGS[name]);\n}\n\nfunction parseDesignInput(input: unknown, ctx: z.RefinementCtx): ClassicTheme {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Design must be an object.',\n });\n return z.NEVER;\n }\n\n const themeValue = (input as Record<string, unknown>).theme;\n if (typeof themeValue !== 'string' || !(themeValue in themeSchemas)) {\n if (typeof themeValue === 'string' && !/^[a-z0-9]+$/.test(themeValue)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `The custom theme name should only contain lowercase letters and digits. The provided value is \\`${themeValue}\\`.`,\n path: ['theme'],\n });\n } else {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Unknown theme '${String(themeValue)}'. Available themes: ${THEME_NAMES.join(', ')}.`,\n path: ['theme'],\n });\n }\n return z.NEVER;\n }\n\n const result = themeSchemas[themeValue as ThemeName]!.safeParse(input);\n if (!result.success) {\n for (const issue of result.error.issues) {\n ctx.addIssue(issue);\n }\n return z.NEVER;\n }\n return result.data;\n}\n\nexport const DesignSchema = z\n .unknown()\n .transform((input, ctx) => parseDesignInput(input, ctx)) as z.ZodType<ClassicTheme>;\n\nexport const availableThemes: readonly string[] = THEME_NAMES;\n\nexport function buildCustomThemeSchema(name: string, config: ThemeConfig) {\n return buildThemeSchema(name as ThemeName, { ...config, theme: name });\n}\n\nexport { ClassicThemeSchema, deepMerge, THEME_NAMES, THEME_CONFIGS };\nexport type { ClassicTheme, ThemeConfig, ThemeName };\n\n/** Raw theme config input before Color parsing (YAML/JSON compatible). */\nexport type ThemeConfigInput = ThemeConfig;\n","import { parse as parseYaml } from 'yaml';\n/**\n * Locales registry + LocaleSchema dispatcher.\n *\n * The 21 locale YAMLs (copied verbatim from the Python source) are imported\n * as raw strings via Vite/Node's `?raw` suffix and parsed at module load by\n * the `yaml` package. Each becomes a deep-merge overlay over English defaults.\n *\n * LocaleSchema dispatches to the matching variant based on the `language`\n * field — same pattern as DesignSchema.\n */\nimport { z } from 'zod';\nimport {\n LOCALE_NAMES,\n type Locale,\n LocaleBaseSchema,\n type LocaleName,\n buildLocaleSchema,\n} from './locale';\n\n// --- Raw YAML imports (one per non-English locale) ---\n// Vite/tsup/vitest all support `?raw` to load file contents as a string.\nimport arabicYaml from './other_locales/arabic.yaml?raw';\nimport danishYaml from './other_locales/danish.yaml?raw';\nimport dutchYaml from './other_locales/dutch.yaml?raw';\nimport frenchYaml from './other_locales/french.yaml?raw';\nimport germanYaml from './other_locales/german.yaml?raw';\nimport hebrewYaml from './other_locales/hebrew.yaml?raw';\nimport hindiYaml from './other_locales/hindi.yaml?raw';\nimport hungarianYaml from './other_locales/hungarian.yaml?raw';\nimport indonesianYaml from './other_locales/indonesian.yaml?raw';\nimport italianYaml from './other_locales/italian.yaml?raw';\nimport japaneseYaml from './other_locales/japanese.yaml?raw';\nimport koreanYaml from './other_locales/korean.yaml?raw';\nimport mandarinChineseYaml from './other_locales/mandarin_chinese.yaml?raw';\nimport norwegianBokmalYaml from './other_locales/norwegian_bokmål.yaml?raw';\nimport norwegianNynorskYaml from './other_locales/norwegian_nynorsk.yaml?raw';\nimport persianYaml from './other_locales/persian.yaml?raw';\nimport portugueseYaml from './other_locales/portuguese.yaml?raw';\nimport russianYaml from './other_locales/russian.yaml?raw';\nimport spanishYaml from './other_locales/spanish.yaml?raw';\nimport turkishYaml from './other_locales/turkish.yaml?raw';\nimport vietnameseYaml from './other_locales/vietnamese.yaml?raw';\n\n/**\n * Parse a locale YAML file into a config overlay (the inner `locale:` object).\n * Each YAML wraps its content under a top-level `locale:` key (see french.yaml).\n */\nfunction localeConfig(yamlText: string): Record<string, unknown> {\n const parsed = parseYaml(yamlText) as { locale?: Record<string, unknown> } | null;\n return parsed?.locale ?? {};\n}\n\n/** Build one Zod schema per locale name. */\nconst localeSchemas = {} as Partial<Record<LocaleName, z.ZodType<Locale, z.ZodTypeDef, unknown>>>;\nconst localeConfigsByName: Partial<Record<LocaleName, Record<string, unknown>>> = {};\n\nconst yamlByLocale: Record<LocaleName, string | null> = {\n english: null,\n arabic: arabicYaml,\n danish: danishYaml,\n dutch: dutchYaml,\n french: frenchYaml,\n german: germanYaml,\n hebrew: hebrewYaml,\n hindi: hindiYaml,\n hungarian: hungarianYaml,\n indonesian: indonesianYaml,\n italian: italianYaml,\n japanese: japaneseYaml,\n korean: koreanYaml,\n mandarin_chinese: mandarinChineseYaml,\n norwegian_bokmål: norwegianBokmalYaml,\n norwegian_nynorsk: norwegianNynorskYaml,\n persian: persianYaml,\n portuguese: portugueseYaml,\n russian: russianYaml,\n spanish: spanishYaml,\n turkish: turkishYaml,\n vietnamese: vietnameseYaml,\n};\n\nfor (const name of LOCALE_NAMES) {\n if (name === 'english') {\n // English uses the raw base schema directly (its defaults ARE English).\n localeSchemas.english = LocaleBaseSchema;\n } else {\n const yamlText = yamlByLocale[name];\n if (!yamlText) {\n throw new Error(`Missing locale YAML for '${name}'`);\n }\n const config = localeConfig(yamlText);\n localeConfigsByName[name] = config;\n localeSchemas[name] = buildLocaleSchema(name, config);\n }\n}\n\nfunction parseLocaleInput(input: unknown, ctx: z.RefinementCtx): Locale {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Locale must be an object.',\n });\n return z.NEVER;\n }\n\n const lang = (input as Record<string, unknown>).language;\n const localeName = lang === undefined ? 'english' : typeof lang === 'string' ? lang : null;\n\n if (localeName === null || !(localeName in localeSchemas)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Unknown language '${String(lang)}'. Available: ${LOCALE_NAMES.join(', ')}.`,\n path: ['language'],\n });\n return z.NEVER;\n }\n\n const variantSchema = localeSchemas[localeName as LocaleName]!;\n const result = variantSchema.safeParse(input);\n if (!result.success) {\n for (const issue of result.error.issues) {\n ctx.addIssue(issue);\n }\n return z.NEVER;\n }\n return result.data;\n}\n\n/**\n * LocaleSchema — dispatches to the right locale based on the `language` field.\n */\nexport const LocaleSchema = z\n .unknown()\n .transform((input, ctx) => parseLocaleInput(input, ctx)) as z.ZodType<Locale>;\n\n/** All locale names exported for callers (UI dropdowns, schema gen). */\nexport const availableLocales: readonly string[] = LOCALE_NAMES;\n\nexport { LOCALE_NAMES, LocaleBaseSchema };\nexport type { Locale, LocaleName };\n","/**\n * Locale — ported from `locale/locale.py` + `locale/english_locale.py`.\n *\n * Structure (matching Python field order):\n * language: Literal[\"english\"] (or one of 20 other names)\n * last_updated, month, months, year, years, present: str\n * phrases: { degree_with_area: str }\n * month_abbreviations: string[12]\n * month_names: string[12]\n *\n * Plus computed properties (ported as functions here, not class methods):\n * languageIso6391(language) → ISO 639-1 2-letter code\n * flagEmoji(language) → flag emoji string\n * isRtl(language) → boolean\n *\n * Like the Design layer, locales use the variant-generator pattern: a single\n * base schema + deep-merged YAML configs for each non-English locale. The 21\n * YAMLs are loaded as raw strings and parsed via the `yaml` package at module\n * load — keeping them byte-identical to the Python source.\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\nimport { deepMerge } from '../design/variant_generator';\n\n/** Known language names (English + 20 others). */\nexport const LOCALE_NAMES = [\n 'english',\n 'arabic',\n 'danish',\n 'dutch',\n 'french',\n 'german',\n 'hebrew',\n 'hindi',\n 'hungarian',\n 'indonesian',\n 'italian',\n 'japanese',\n 'korean',\n 'mandarin_chinese',\n 'norwegian_bokmål',\n 'norwegian_nynorsk',\n 'persian',\n 'portuguese',\n 'russian',\n 'spanish',\n 'turkish',\n 'vietnamese',\n] as const;\n\nexport type LocaleName = (typeof LOCALE_NAMES)[number];\n\n/** English defaults (the base). Same structure as EnglishLocale in Python. */\nexport const RAW_ENGLISH_DEFAULTS = {\n language: 'english',\n last_updated: 'Last updated in',\n month: 'month',\n months: 'months',\n year: 'year',\n years: 'years',\n present: 'present',\n phrases: { degree_with_area: 'DEGREE in AREA' },\n month_abbreviations: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'June',\n 'July',\n 'Aug',\n 'Sept',\n 'Oct',\n 'Nov',\n 'Dec',\n ],\n month_names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n} as const;\n\n/** Phrases sub-schema. */\nconst PhrasesSchema = strict(\n z.object({\n degree_with_area: z.string().default('DEGREE in AREA'),\n }),\n);\n\n/**\n * Base locale schema. The `language` field accepts any known locale name; the\n * variant generator pins the literal per-locale.\n */\nexport const LocaleBaseSchema = strict(\n z.object({\n // z.enum needs a tuple; we widen to z.string() since custom locales may be\n // added at runtime (the dispatcher validates against the known set).\n language: z.string().default('english'),\n last_updated: z.string().default('Last updated in'),\n month: z.string().default('month'),\n months: z.string().default('months'),\n year: z.string().default('year'),\n years: z.string().default('years'),\n present: z.string().default('present'),\n phrases: PhrasesSchema.default(() => PhrasesSchema.parse({})),\n month_abbreviations: z\n .array(z.string())\n .length(12)\n .default(() => RAW_ENGLISH_DEFAULTS.month_abbreviations.slice()),\n month_names: z\n .array(z.string())\n .length(12)\n .default(() => RAW_ENGLISH_DEFAULTS.month_names.slice()),\n }),\n);\n\nexport type Locale = z.infer<typeof LocaleBaseSchema>;\n\n// ---- Computed properties (ported as pure functions) ----\n\nconst LANGUAGE_TO_ISO_639_1: Record<string, string> = {\n danish: 'da',\n dutch: 'nl',\n english: 'en',\n french: 'fr',\n german: 'de',\n hindi: 'hi',\n italian: 'it',\n indonesian: 'id',\n japanese: 'ja',\n korean: 'ko',\n indonesia: 'id',\n mandarin_chinese: 'zh',\n norwegian_bokmål: 'nb',\n norwegian_nynorsk: 'nn',\n portuguese: 'pt',\n russian: 'ru',\n spanish: 'es',\n turkish: 'tr',\n arabic: 'ar',\n hebrew: 'he',\n persian: 'fa',\n vietnamese: 'vi',\n hungarian: 'hu',\n};\n\nconst LANGUAGE_TO_COUNTRY: Record<string, string> = {\n arabic: 'SA',\n danish: 'DK',\n dutch: 'NL',\n english: 'GB',\n french: 'FR',\n german: 'DE',\n hebrew: 'IL',\n hindi: 'IN',\n hungarian: 'HU',\n indonesian: 'ID',\n italian: 'IT',\n japanese: 'JP',\n korean: 'KR',\n mandarin_chinese: 'CN',\n norwegian_bokmål: 'NO',\n norwegian_nynorsk: 'NO',\n persian: 'IR',\n portuguese: 'PT',\n russian: 'RU',\n spanish: 'ES',\n turkish: 'TR',\n vietnamese: 'VN',\n};\n\nconst RTL_LANGUAGES = new Set(['arabic', 'hebrew', 'persian']);\n\n/** ISO 639-1 2-letter code for the locale (used by Typst `lang` and HTML `lang`). */\nexport function languageIso6391(language: string): string {\n return LANGUAGE_TO_ISO_639_1[language] ?? 'en';\n}\n\n/** Flag emoji for the locale's primary country. */\nexport function flagEmoji(language: string): string {\n const country = LANGUAGE_TO_COUNTRY[language];\n if (!country) return '';\n return Array.from(country)\n .map((c) => String.fromCodePoint(0x1f1e6 + c.charCodeAt(0) - 'A'.charCodeAt(0)))\n .join('');\n}\n\n/** Whether the locale's text is right-to-left. */\nexport function isRtl(language: string): boolean {\n return RTL_LANGUAGES.has(language);\n}\n\n/**\n * Build a Zod schema for a single locale, with locale-specific defaults baked in.\n * Uses the same preprocess+deepMerge pattern as the theme variant generator.\n */\nexport function buildLocaleSchema(localeName: LocaleName, config: Record<string, unknown>) {\n const localeDefaults = deepMerge(RAW_ENGLISH_DEFAULTS, config);\n return z\n .preprocess((input, ctx) => {\n if (\n input !== null &&\n typeof input === 'object' &&\n !Array.isArray(input) &&\n 'language' in input &&\n (input as Record<string, unknown>).language !== localeName\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Expected language '${localeName}' but got '${String((input as Record<string, unknown>).language)}'.`,\n path: ['language'],\n });\n }\n if (input === null || input === undefined) {\n return { ...localeDefaults, language: localeName };\n }\n if (typeof input === 'object' && !Array.isArray(input)) {\n return deepMerge({ ...localeDefaults, language: localeName }, input);\n }\n return { ...localeDefaults, language: localeName };\n }, LocaleBaseSchema)\n .transform((v) => ({ ...v, language: localeName }) as Locale);\n}\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: arabic\n last_updated: آخر تحديث في\n month: شهر\n months: أشهر\n year: سنة\n years: سنوات\n present: الحاضر\n phrases:\n degree_with_area: \"DEGREE في AREA\"\n month_abbreviations:\n - ينا\n - فبر\n - مار\n - أبر\n - ماي\n - يون\n - يول\n - أغس\n - سبت\n - أكت\n - نوف\n - ديس\n month_names:\n - يناير\n - فبراير\n - مارس\n - أبريل\n - مايو\n - يونيو\n - يوليو\n - أغسطس\n - سبتمبر\n - أكتوبر\n - نوفمبر\n - ديسمبر\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: danish\n last_updated: \"Senest opdateret\"\n month: \"måned\"\n months: \"måneder\"\n year: \"år\"\n years: \"år\"\n present: \"nuværende\"\n phrases:\n degree_with_area: DEGREE i AREA\n month_abbreviations:\n - \"Jan\"\n - \"Feb\"\n - \"Mar\"\n - \"Apr\"\n - \"Maj\"\n - \"Jun\"\n - \"Jul\"\n - \"Aug\"\n - \"Sep\"\n - \"Okt\"\n - \"Nov\"\n - \"Dec\"\n month_names:\n - \"Januar\"\n - \"Februar\"\n - \"Marts\"\n - \"April\"\n - \"Maj\"\n - \"Juni\"\n - \"Juli\"\n - \"August\"\n - \"September\"\n - \"Oktober\"\n - \"November\"\n - \"December\"\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: dutch\n last_updated: \"Laatst bijgewerkt\"\n month: \"maand\"\n months: \"maanden\"\n year: \"jaar\"\n years: \"jaren\"\n present: \"heden\"\n phrases:\n degree_with_area: DEGREE in AREA\n month_abbreviations:\n - Jan\n - Feb\n - Mrt\n - Apr\n - Mei\n - Jun\n - Jul\n - Aug\n - Sep\n - Okt\n - Nov\n - Dec\n month_names:\n - Januari\n - Februari\n - Maart\n - April\n - Mei\n - Juni\n - Juli\n - Augustus\n - September\n - Oktober\n - November\n - December","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: french\n last_updated: Dernière mise à jour\n month: mois\n months: mois\n year: an\n years: ans\n present: présent\n phrases:\n degree_with_area: DEGREE en AREA\n month_abbreviations:\n - Jan\n - Fév\n - Mar\n - Avr\n - Mai\n - Juin\n - Juil\n - Aoû\n - Sep\n - Oct\n - Nov\n - Déc\n month_names:\n - Janvier\n - Février\n - Mars\n - Avril\n - Mai\n - Juin\n - Juillet\n - Août\n - Septembre\n - Octobre\n - Novembre\n - Décembre\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: german\n last_updated: Zuletzt aktualisiert\n month: Monat\n months: Monate\n year: Jahr\n years: Jahre\n present: gegenwärtig\n phrases:\n degree_with_area: DEGREE in AREA\n month_abbreviations:\n - Jan\n - Feb\n - Mär\n - Apr\n - Mai\n - Jun\n - Jul\n - Aug\n - Sep\n - Okt\n - Nov\n - Dez\n month_names:\n - Januar\n - Februar\n - März\n - April\n - Mai\n - Juni\n - Juli\n - August\n - September\n - Oktober\n - November\n - Dezember\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: hebrew\n last_updated: עודכן לאחרונה ב\n month: חודש\n months: חודשים\n year: שנה\n years: שנים\n present: הווה\n phrases:\n degree_with_area: \"DEGREE בAREA\"\n month_abbreviations:\n - ינו'\n - פבר'\n - מרץ\n - אפר'\n - מאי\n - יוני\n - יולי\n - אוג'\n - ספט'\n - אוק'\n - נוב'\n - דצמ'\n month_names:\n - ינואר\n - פברואר\n - מרץ\n - אפריל\n - מאי\n - יוני\n - יולי\n - אוגוסט\n - ספטמבר\n - אוקטובר\n - נובמבר\n - דצמבר\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: hindi\n last_updated: अंतिम अद्यतन\n month: महीना\n months: महीने\n year: वर्ष\n years: वर्ष\n present: वर्तमान\n phrases:\n degree_with_area: \"AREA में DEGREE\"\n month_abbreviations:\n - जन\n - फर\n - मार\n - अप्र\n - मई\n - जून\n - जुल\n - अग\n - सित\n - अक्ट\n - नव\n - दिस\n month_names:\n - जनवरी\n - फरवरी\n - मार्च\n - अप्रैल\n - मई\n - जून\n - जुलाई\n - अगस्त\n - सितंबर\n - अक्टूबर\n - नवंबर\n - दिसंबर\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: hungarian\n last_updated: Utoljára frissítve\n month: hónap\n months: hónap\n year: év\n years: év\n present: jelenleg\n phrases:\n degree_with_area: DEGREE AREA szakon\n month_abbreviations:\n - Jan\n - Febr\n - Márc\n - Ápr\n - Máj\n - Jún\n - Júl\n - Aug\n - Szept\n - Okt\n - Nov\n - Dec\n month_names:\n - Január\n - Február\n - Március\n - Április\n - Május\n - Június\n - Július\n - Augusztus\n - Szeptember\n - Október\n - November\n - December\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: indonesian\n last_updated: Terakhir diperbarui\n month: bulan\n months: bulan\n year: tahun\n years: tahun\n present: sekarang\n phrases:\n degree_with_area: DEGREE di AREA\n month_abbreviations:\n - Jan\n - Feb\n - Mar\n - Apr\n - Mei\n - Jun\n - Jul\n - Agu\n - Sep\n - Okt\n - Nov\n - Des\n month_names:\n - Januari\n - Februari\n - Maret\n - April\n - Mei\n - Juni\n - Juli\n - Agustus\n - September\n - Oktober\n - November\n - Desember\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: italian\n last_updated: Ultimo aggiornamento\n month: mese\n months: mesi\n year: anno\n years: anni\n present: presente\n phrases:\n degree_with_area: DEGREE in AREA\n month_abbreviations:\n - Gen\n - Feb\n - Mar\n - Apr\n - Mag\n - Giu\n - Lug\n - Ago\n - Set\n - Ott\n - Nov\n - Dic\n month_names:\n - Gennaio\n - Febbraio\n - Marzo\n - Aprile\n - Maggio\n - Giugno\n - Luglio\n - Agosto\n - Settembre\n - Ottobre\n - Novembre\n - Dicembre\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: japanese\n last_updated: 最終更新\n month: 月\n months: ヶ月\n year: 年\n years: 年\n present: 現在\n phrases:\n degree_with_area: AREA DEGREE\n month_abbreviations:\n - 1月\n - 2月\n - 3月\n - 4月\n - 5月\n - 6月\n - 7月\n - 8月\n - 9月\n - 10月\n - 11月\n - 12月\n month_names:\n - 1月\n - 2月\n - 3月\n - 4月\n - 5月\n - 6月\n - 7月\n - 8月\n - 9月\n - 10月\n - 11月\n - 12月\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: korean\n last_updated: 마지막 업데이트\n month: 월\n months: 개월\n year: 년\n years: 년\n present: 현재\n phrases:\n degree_with_area: AREA DEGREE\n month_abbreviations:\n - 1월\n - 2월\n - 3월\n - 4월\n - 5월\n - 6월\n - 7월\n - 8월\n - 9월\n - 10월\n - 11월\n - 12월\n month_names:\n - 1월\n - 2월\n - 3월\n - 4월\n - 5월\n - 6월\n - 7월\n - 8월\n - 9월\n - 10월\n - 11월\n - 12월\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: mandarin_chinese\n last_updated: 最后更新于\n month: 个月\n months: 个月\n year: 年\n years: 年\n present: 至今\n phrases:\n degree_with_area: AREA DEGREE\n month_abbreviations:\n - 1月\n - 2月\n - 3月\n - 4月\n - 5月\n - 6月\n - 7月\n - 8月\n - 9月\n - 10月\n - 11月\n - 12月\n month_names:\n - 一月\n - 二月\n - 三月\n - 四月\n - 五月\n - 六月\n - 七月\n - 八月\n - 九月\n - 十月\n - 十一月\n - 十二月\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: norwegian_bokmål\n last_updated: \"Sist oppdatert\"\n month: \"måned\"\n months: \"måneder\"\n year: \"år\"\n years: \"år\"\n present: \"nåværende\"\n phrases:\n degree_with_area: DEGREE i AREA\n month_abbreviations:\n - Jan\n - Feb\n - Mar\n - Apr\n - Mai\n - Jun\n - Jul\n - Aug\n - Sep\n - Okt\n - Nov\n - Des\n month_names:\n - Januar\n - Februar\n - Mars\n - April\n - Mai\n - Juni\n - Juli\n - August\n - September\n - Oktober\n - November\n - Desember\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: norwegian_nynorsk\n last_updated: \"Sist oppdatert\"\n month: \"månad\"\n months: \"månader\"\n year: \"år\"\n years: \"år\"\n present: \"nåverande\"\n phrases:\n degree_with_area: DEGREE i AREA\n month_abbreviations:\n - Jan\n - Feb\n - Mar\n - Apr\n - Mai\n - Jun\n - Jul\n - Aug\n - Sep\n - Okt\n - Nov\n - Des\n month_names:\n - Januar\n - Februar\n - Mars\n - April\n - Mai\n - Juni\n - Juli\n - August\n - September\n - Oktober\n - November\n - Desember\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: persian\n last_updated: آخرین بهروزرسانی در\n month: ماه\n months: ماه\n year: سال\n years: سال\n present: حال\n phrases:\n degree_with_area: \"DEGREE در AREA\"\n month_abbreviations:\n - ژان\n - فور\n - مار\n - آور\n - مه\n - ژون\n - ژول\n - اوت\n - سپت\n - اکت\n - نوا\n - دسا\n month_names:\n - ژانویه\n - فوریه\n - مارس\n - آوریل\n - مه\n - ژوئن\n - ژوئیه\n - اوت\n - سپتامبر\n - اکتبر\n - نوامبر\n - دسامبر\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: portuguese\n last_updated: Última atualização\n month: mês\n months: meses\n year: ano\n years: anos\n present: presente\n phrases:\n degree_with_area: DEGREE em AREA\n month_abbreviations:\n - Jan\n - Fev\n - Mar\n - Abr\n - Mai\n - Jun\n - Jul\n - Ago\n - Set\n - Out\n - Nov\n - Dez\n month_names:\n - Janeiro\n - Fevereiro\n - Março\n - Abril\n - Maio\n - Junho\n - Julho\n - Agosto\n - Setembro\n - Outubro\n - Novembro\n - Dezembro\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: russian\n last_updated: Последнее обновление\n month: месяц\n months: месяцы\n year: год\n years: лет\n present: настоящее время\n phrases:\n degree_with_area: \"DEGREE в AREA\"\n month_abbreviations:\n - Янв\n - Фев\n - Мар\n - Апр\n - Май\n - Июн\n - Июл\n - Авг\n - Сен\n - Окт\n - Ноя\n - Дек\n month_names:\n - Январь\n - Февраль\n - Март\n - Апрель\n - Май\n - Июнь\n - Июль\n - Август\n - Сентябрь\n - Октябрь\n - Ноябрь\n - Декабрь\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: spanish\n last_updated: Última actualización\n month: mes\n months: meses\n year: año\n years: años\n present: presente\n phrases:\n degree_with_area: DEGREE en AREA\n month_abbreviations:\n - Ene\n - Feb\n - Mar\n - Abr\n - May\n - Jun\n - Jul\n - Ago\n - Sep\n - Oct\n - Nov\n - Dic\n month_names:\n - Enero\n - Febrero\n - Marzo\n - Abril\n - Mayo\n - Junio\n - Julio\n - Agosto\n - Septiembre\n - Octubre\n - Noviembre\n - Diciembre\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: turkish\n last_updated: Son güncelleme\n month: ay\n months: ay\n year: yıl\n years: yıl\n present: halen\n phrases:\n degree_with_area: \"AREA, DEGREE\"\n month_abbreviations:\n - Oca\n - Şub\n - Mar\n - Nis\n - May\n - Haz\n - Tem\n - Ağu\n - Eyl\n - Eki\n - Kas\n - Ara\n month_names:\n - Ocak\n - Şubat\n - Mart\n - Nisan\n - Mayıs\n - Haziran\n - Temmuz\n - Ağustos\n - Eylül\n - Ekim\n - Kasım\n - Aralık\n","# yaml-language-server: $schema=../../../../../../schema.json\nlocale:\n language: vietnamese\n last_updated: Cập nhật lần cuối vào\n month: tháng\n months: tháng\n year: năm\n years: năm\n present: hiện tại\n phrases:\n degree_with_area: DEGREE ngành AREA\n month_abbreviations:\n - Th01\n - Th02\n - Th03\n - Th04\n - Th05\n - Th06\n - Th07\n - Th08\n - Th09\n - Th10\n - Th11\n - Th12\n month_names:\n - Tháng Một\n - Tháng Hai\n - Tháng Ba\n - Tháng Tư\n - Tháng Năm\n - Tháng Sáu\n - Tháng Bảy\n - Tháng Tám\n - Tháng Chín\n - Tháng Mười\n - Tháng Mười Một\n - Tháng Mười Hai\n","/**\n * RenderCommand — ported from `settings/render_command.py`.\n *\n * Holds output paths (with placeholders like `OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.typ`)\n * and per-format disable flags. The browser port treats paths as plain strings\n * (the path-resolver expands placeholders at render time); the\n * `ExistingPathRelativeToInput` / `PlannedPathRelativeToInput` custom types in\n * Python are just strings with extra validation that we keep as `z.string()`.\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\n\nexport const FILE_PATH_PLACEHOLDERS_DESCRIPTION = `The following placeholders can be used:\n\n- OUTPUT_FOLDER: The output folder path (e.g., rendercv_output)\n- MONTH_NAME: Full name of the month (e.g., January)\n- MONTH_ABBREVIATION: Abbreviation of the month (e.g., Jan)\n- MONTH: Month as a number (e.g., 1)\n- MONTH_IN_TWO_DIGITS: Month as a number in two digits (e.g., 01)\n- DAY: Day of the month (e.g., 5)\n- DAY_IN_TWO_DIGITS: Day of the month in two digits (e.g., 05)\n- YEAR: Year as a number (e.g., 2024)\n- YEAR_IN_TWO_DIGITS: Year as a number in two digits (e.g., 24)\n- NAME: The name of the CV owner (e.g., John Doe)\n- NAME_IN_SNAKE_CASE: The name of the CV owner in snake case (e.g., John_Doe)\n- NAME_IN_LOWER_SNAKE_CASE: The name of the CV owner in lower snake case (e.g., john_doe)\n- NAME_IN_UPPER_SNAKE_CASE: The name of the CV owner in upper snake case (e.g., JOHN_DOE)\n- NAME_IN_KEBAB_CASE: The name of the CV owner in kebab case (e.g., John-Doe)\n- NAME_IN_LOWER_KEBAB_CASE: The name of the CV owner in lower kebab case (e.g., john-doe)\n- NAME_IN_UPPER_KEBAB_CASE: The name of the CV owner in upper kebab case (e.g., JOHN-DOE)\n`;\n\nexport const RenderCommandSchema = strict(\n z.object({\n output_folder: z.string().default('rendercv_output'),\n design: z.string().nullable().optional(),\n locale: z.string().nullable().optional(),\n typst_path: z.string().default('OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.typ'),\n pdf_path: z.string().default('OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.pdf'),\n markdown_path: z.string().default('OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.md'),\n html_path: z.string().default('OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.html'),\n png_path: z.string().default('OUTPUT_FOLDER/NAME_IN_SNAKE_CASE_CV.png'),\n dont_generate_markdown: z.boolean().default(false),\n dont_generate_html: z.boolean().default(false),\n dont_generate_typst: z.boolean().default(false),\n dont_generate_pdf: z.boolean().default(false),\n dont_generate_png: z.boolean().default(false),\n }),\n);\n\nexport type RenderCommand = z.infer<typeof RenderCommandSchema>;\n","/**\n * Settings — ported from `settings/settings.py`.\n *\n * Holds the \"current date\" (literal \"today\" or a real date), bold keywords,\n * the PDF title template, and the nested RenderCommand settings.\n *\n * The `current_date` field resolves at parse time:\n * - \"today\" → today's date\n * - YYYY-MM-DD → that date\n * - YYYY-MM / YYYY → that date (day/month default to 1)\n * The resolved date is attached as `_resolvedCurrentDate` for downstream use\n * (entry date adjustment, time-span calculations).\n */\nimport { z } from 'zod';\nimport { strict } from '../base';\nimport type { SimpleDate } from '../dates';\nimport { todayAsSimpleDate } from '../dates';\nimport { type RenderCommand, RenderCommandSchema } from './render_command';\n\nexport interface Settings {\n current_date: string; // \"today\" or a YYYY-MM-DD / YYYY-MM / YYYY string\n render_command: RenderCommand;\n bold_keywords: string[];\n pdf_title: string;\n /** Resolved at parse time — used by entry date adjustment and path resolution. */\n _resolvedCurrentDate: SimpleDate;\n}\n\n/** Parse \"today\" | YYYY | YYYY-MM | YYYY-MM-DD into a SimpleDate. */\nfunction resolveCurrentDate(value: string): SimpleDate {\n if (value === 'today') {\n return todayAsSimpleDate();\n }\n const s = String(value);\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(s)) {\n const [y, m, d] = s.split('-').map(Number) as [number, number, number];\n return { year: y, month: m, day: d };\n }\n if (/^\\d{4}-\\d{2}$/.test(s)) {\n const [y, m] = s.split('-').map(Number) as [number, number];\n return { year: y, month: m, day: 1 };\n }\n if (/^\\d{4}$/.test(s)) {\n return { year: Number(s), month: 1, day: 1 };\n }\n throw new Error('Invalid current_date');\n}\n\nexport const SettingsSchema = strict(\n z.object({\n current_date: z\n .union([\n z.literal('today'),\n z.string().regex(/^\\d{4}(-\\d{2}(-\\d{2})?)?$/, 'Invalid current_date format.'),\n ])\n .default('today'),\n render_command: RenderCommandSchema.default(() => RenderCommandSchema.parse({})),\n bold_keywords: z.array(z.string()).default([]),\n pdf_title: z.string().default('NAME - CV'),\n }),\n).transform((value): Settings => {\n // keep_unique_keywords: dedupe while preserving order (Python: dict.fromkeys).\n const seen = new Set<string>();\n const uniqueKeywords: string[] = [];\n for (const kw of value.bold_keywords) {\n if (!seen.has(kw)) {\n seen.add(kw);\n uniqueKeywords.push(kw);\n }\n }\n return {\n current_date: value.current_date,\n render_command: value.render_command,\n bold_keywords: uniqueKeywords,\n pdf_title: value.pdf_title,\n _resolvedCurrentDate: resolveCurrentDate(value.current_date),\n };\n});\n\nexport type { RenderCommand };\n","/**\n * RenderCVModel — ported from `models/rendercv_model.py` + the builder.\n */\nimport type { ZodIssue } from 'zod';\nimport { z } from 'zod';\nimport { RenderCVUserValidationError } from '../error-handling';\nimport { parseValidationErrors } from '../parse_validation_errors';\nimport type { ValidationContext } from '../validation_context';\nimport type { OverlayDocuments, YamlDocumentBundle } from '../yaml_document';\nimport { type Cv, cvSchema } from './cv/cv';\nimport { todayAsSimpleDate } from './dates';\nimport { type ClassicTheme as Design, DesignSchema } from './design/design';\nimport { type Locale, LocaleSchema } from './locale/locales';\nimport { type Settings, SettingsSchema } from './settings/settings';\n\nexport interface RenderCVModel {\n cv: Cv;\n design: Design;\n locale: Locale;\n settings: Settings;\n}\n\nexport interface BuildRendercvModelOptions {\n validationContext?: ValidationContext;\n yamlDocuments?: {\n main: YamlDocumentBundle;\n overlays?: OverlayDocuments;\n };\n}\n\nfunction stripInternalModelFields(input: Record<string, unknown>): Record<string, unknown> {\n const root = { ...input };\n\n if (\n root.settings !== null &&\n typeof root.settings === 'object' &&\n !Array.isArray(root.settings)\n ) {\n const { _resolvedCurrentDate: _ignoredDate, ...settings } = root.settings as Record<\n string,\n unknown\n >;\n root.settings = settings;\n }\n\n if (root.cv !== null && typeof root.cv === 'object' && !Array.isArray(root.cv)) {\n const { _keyOrder: _ignoredOrder, ...cv } = root.cv as Record<string, unknown>;\n root.cv = cv;\n }\n\n return root;\n}\n\nexport function buildRendercvModel(\n input: unknown,\n options: BuildRendercvModelOptions = {},\n): RenderCVModel {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) {\n throw new Error('RenderCVModel input must be an object.');\n }\n const root = stripInternalModelFields(input as Record<string, unknown>);\n const ctx = options.validationContext;\n const allIssues: ZodIssue[] = [];\n\n const settingsResult = SettingsSchema.safeParse(root.settings ?? {});\n if (!settingsResult.success) {\n allIssues.push(...prefixIssues(settingsResult.error.issues, 'settings'));\n }\n const settings = settingsResult.success ? settingsResult.data : null;\n const resolvedDate = settings?._resolvedCurrentDate ?? todayAsSimpleDate();\n\n const cvResult = cvSchema(resolvedDate, ctx).safeParse(root.cv ?? {});\n if (!cvResult.success) {\n allIssues.push(...prefixIssues(cvResult.error.issues, 'cv'));\n }\n\n const designResult = DesignSchema.safeParse(root.design ?? { theme: 'classic' });\n if (!designResult.success) {\n allIssues.push(...prefixIssues(designResult.error.issues, 'design'));\n }\n\n const localeResult = LocaleSchema.safeParse(root.locale ?? {});\n if (!localeResult.success) {\n allIssues.push(...prefixIssues(localeResult.error.issues, 'locale'));\n }\n\n if (allIssues.length > 0) {\n if (options.yamlDocuments) {\n const validationErrors = parseValidationErrors(allIssues, {\n mainDocument: options.yamlDocuments.main,\n overlayDocuments: options.yamlDocuments.overlays,\n });\n throw new RenderCVUserValidationError(validationErrors);\n }\n throw new CombinedZodError(allIssues);\n }\n\n return {\n cv: cvResult.data!,\n design: designResult.data!,\n locale: localeResult.data!,\n settings: settings!,\n };\n}\n\nexport const RenderCvModelSchema: z.ZodType<RenderCVModel> = z\n .any()\n .transform((input, ctx): RenderCVModel => {\n try {\n return buildRendercvModel(input);\n } catch (e) {\n if (e instanceof RenderCVUserValidationError) {\n for (const err of e.validationErrors) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: err.message,\n });\n }\n return z.NEVER as never;\n }\n if (e instanceof CombinedZodError) {\n for (const issue of e.issues) ctx.addIssue(issue);\n return z.NEVER as never;\n }\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: e instanceof Error ? e.message : String(e),\n });\n return z.NEVER as never;\n }\n });\n\nfunction prefixIssues(issues: readonly ZodIssue[], prefix: string): ZodIssue[] {\n return issues.map((issue) => ({\n ...issue,\n path: [prefix, ...issue.path],\n }));\n}\n\nexport class CombinedZodError extends Error {\n constructor(public readonly issues: ZodIssue[]) {\n super('RenderCVModel validation failed');\n this.name = 'CombinedZodError';\n }\n}\n","import {\n OVERLAY_SOURCE_TO_YAML_SOURCE,\n type OverlaySourceKey,\n RenderCVUserValidationError,\n RenderCVValidationError,\n type YamlLocation,\n type YamlSource,\n} from './error-handling';\n/**\n * YAML reader + builder — ported from `yaml_reader.py` + `rendercv_model_builder.py`\n * + `override_dictionary.py`.\n */\nimport type { RenderCVModel } from './models/rendercv_model';\nimport { buildRendercvModel } from './models/rendercv_model';\nimport type { ValidationContext } from './validation_context';\nimport {\n type OverlayDocuments,\n type YamlDocumentBundle,\n extractCvHeaderKeyOrder,\n parseYamlDocument,\n} from './yaml_document';\n\n/** Options accepted by buildRendercvModelFromYaml(). */\nexport interface BuildOptions {\n /** Relative-path assets (path → URL or data URL) for photo/overlay files. */\n assets?: Record<string, string>;\n designYaml?: string;\n localeYaml?: string;\n settingsYaml?: string;\n outputFolder?: string;\n typstPath?: string;\n pdfPath?: string;\n markdownPath?: string;\n htmlPath?: string;\n pngPath?: string;\n dontGenerateTypst?: boolean;\n dontGenerateHtml?: boolean;\n dontGenerateMarkdown?: boolean;\n dontGeneratePdf?: boolean;\n dontGeneratePng?: boolean;\n overrides?: Record<string, unknown>;\n}\n\nexport interface BuildResult {\n model: RenderCVModel;\n dictionary: Record<string, unknown>;\n documents: {\n main: YamlDocumentBundle;\n overlays: OverlayDocuments;\n };\n}\n\nexport function readYaml(content: string, source: YamlSource): unknown {\n try {\n return parseYamlDocument(content, source).value;\n } catch (e) {\n if (isYamlSyntaxError(e)) {\n let msg = e.message.split('\\n')[0]?.trim() ?? 'YAML parse error';\n if (!msg.endsWith('.')) msg += '.';\n throw new RenderCVUserValidationError([\n new RenderCVValidationError(\n null,\n e.loc,\n e.source,\n `This is not a valid YAML file. ${msg}`,\n '...',\n ),\n ]);\n }\n throw e;\n }\n}\n\nexport function readYamlDocument(content: string, source: YamlSource): YamlDocumentBundle {\n try {\n return parseYamlDocument(content, source);\n } catch (e) {\n if (isYamlSyntaxError(e)) {\n let msg = e.message.split('\\n')[0]?.trim() ?? 'YAML parse error';\n if (!msg.endsWith('.')) msg += '.';\n throw new RenderCVUserValidationError([\n new RenderCVValidationError(\n null,\n e.loc,\n e.source,\n `This is not a valid YAML file. ${msg}`,\n '...',\n ),\n ]);\n }\n throw e;\n }\n}\n\nfunction isYamlSyntaxError(\n e: unknown,\n): e is { yamlError: true; message: string; loc: YamlLocation | null; source: YamlSource } {\n return typeof e === 'object' && e !== null && (e as { yamlError?: boolean }).yamlError === true;\n}\n\nexport function buildRendercvModelFromYaml(mainYaml: string, opts: BuildOptions = {}): BuildResult {\n const mainDoc = readYamlDocument(mainYaml, 'main_yaml_file');\n const dict: Record<string, unknown> = { ...mainDoc.value };\n const overlays: OverlayDocuments = {};\n\n if (typeof dict.settings !== 'object' || dict.settings === null) dict.settings = {};\n const settings = dict.settings as Record<string, unknown>;\n if (typeof settings.render_command !== 'object' || settings.render_command === null) {\n settings.render_command = {};\n }\n\n const overlayInputs: { key: OverlaySourceKey; content?: string }[] = [\n { key: 'settings', content: opts.settingsYaml },\n { key: 'design', content: opts.designYaml },\n { key: 'locale', content: opts.localeYaml },\n ];\n for (const { key, content } of overlayInputs) {\n if (content) {\n const overlayDoc = readYamlDocument(content, OVERLAY_SOURCE_TO_YAML_SOURCE[key]);\n overlays[key] = overlayDoc;\n dict[key] = overlayDoc.value[key];\n }\n }\n\n const rc = settings.render_command as Record<string, unknown>;\n const flagMap: Record<string, unknown> = {\n output_folder: opts.outputFolder,\n typst_path: opts.typstPath,\n pdf_path: opts.pdfPath,\n markdown_path: opts.markdownPath,\n html_path: opts.htmlPath,\n png_path: opts.pngPath,\n dont_generate_typst: opts.dontGenerateTypst,\n dont_generate_html: opts.dontGenerateHtml,\n dont_generate_markdown: opts.dontGenerateMarkdown,\n dont_generate_pdf: opts.dontGeneratePdf,\n dont_generate_png: opts.dontGeneratePng,\n };\n for (const [k, v] of Object.entries(flagMap)) {\n if (v !== undefined) rc[k] = v;\n }\n\n if (opts.overrides) {\n for (const [path, value] of Object.entries(opts.overrides)) {\n setByDottedPath(dict, path, value);\n }\n }\n\n const validationContext: ValidationContext = {\n assets: opts.assets,\n cvHeaderKeyOrder: extractCvHeaderKeyOrder(mainDoc),\n };\n\n const model = buildRendercvModel(dict, {\n validationContext,\n yamlDocuments: { main: mainDoc, overlays },\n });\n\n return { model, dictionary: dict, documents: { main: mainDoc, overlays } };\n}\n\nexport function setByDottedPath(\n target: Record<string, unknown> | unknown[],\n fullPath: string,\n value: unknown,\n): void {\n const keys = fullPath.split('.');\n let cursor: unknown = target;\n for (let i = 0; i < keys.length - 1; i++) {\n const k = keys[i]!;\n const next = keys[i + 1]!;\n const isIndex = /^\\d+$/.test(next);\n if (Array.isArray(cursor)) {\n const idx = Number(k);\n if (cursor[idx] === undefined) cursor[idx] = isIndex ? [] : {};\n cursor = cursor[idx]!;\n } else if (cursor !== null && typeof cursor === 'object') {\n const obj = cursor as Record<string, unknown>;\n if (obj[k] === undefined) obj[k] = isIndex ? [] : {};\n cursor = obj[k]!;\n } else {\n throw new Error(`Cannot descend into '${fullPath}' at segment '${k}'.`);\n }\n }\n const lastKey = keys[keys.length - 1]!;\n if (Array.isArray(cursor)) {\n cursor[Number(lastKey)] = value;\n } else if (cursor !== null && typeof cursor === 'object') {\n (cursor as Record<string, unknown>)[lastKey] = value;\n } else {\n throw new Error(`Cannot set '${fullPath}' on a non-container.`);\n }\n}\n","/**\n * Nunjucks templater — ported from `templater/templater.py`.\n */\nimport nunjucks from 'nunjucks';\nimport type { RenderCVSection } from '../../schema/models/cv/section';\nimport { getRendercvSections, snakeCaseTitle } from '../../schema/models/cv/section';\nimport type { Color } from '../../schema/models/design/color';\nimport { isRtl, languageIso6391 } from '../../schema/models/locale/locale';\nimport type { RenderCVModel } from '../../schema/models/rendercv_model';\nimport type { RenderOptions } from '../types';\nimport { markdownToHtml } from './markdown_parser';\nimport { type ProcessedRenderCVModel, processModel } from './model_processor';\nimport { cleanUrl } from './string_processor';\nimport { BUILTIN_TEMPLATES, templateKey } from './template_registry';\n\nexport type TemplateFileType = 'markdown' | 'typst' | 'html';\n\nconst MARKDOWN_TRIM_ENTRY_TYPES = new Set([\n 'TextEntry',\n 'OneLineEntry',\n 'BulletEntry',\n 'NumberedEntry',\n 'ReversedNumberedEntry',\n]);\n\nlet cachedEnv: nunjucks.Environment | null = null;\nconst compiledTemplates = new Map<string, nunjucks.Template>();\n\nfunction getNunjucksEnvironment(): nunjucks.Environment {\n if (cachedEnv) {\n return cachedEnv;\n }\n\n const env = new nunjucks.Environment(null, {\n autoescape: false,\n trimBlocks: true,\n lstripBlocks: true,\n });\n\n env.addFilter('clean_url', cleanUrl);\n env.addFilter('strip', (value: string) => String(value).trim());\n env.addFilter('as_rgb', (color: Color) => color.asRgb());\n env.addFilter('splitlines', (value: unknown) => {\n const text = String(value ?? '');\n if (text === '') {\n return [];\n }\n return text.split('\\n');\n });\n env.addFilter('slice', (value: unknown, start: number, end?: number) => {\n const arr = Array.isArray(value) ? value : String(value ?? '').split('\\n');\n return arr.slice(start, end);\n });\n env.addFilter('replace', (value: string, search: string, replacement: string) =>\n String(value).split(search).join(replacement),\n );\n env.addFilter('format_markdown_column_line', (line: unknown) => {\n const value = String(line ?? '').replace(/ {4}/g, '');\n return value.startsWith('(') ? ` ${value}` : value;\n });\n env.addFilter('lower', (value: unknown) => String(value).toLowerCase());\n\n cachedEnv = env;\n return env;\n}\n\nfunction getCompiledTemplate(source: string): nunjucks.Template {\n let compiled = compiledTemplates.get(source);\n if (!compiled) {\n compiled = new nunjucks.Template(source, getNunjucksEnvironment());\n compiledTemplates.set(source, compiled);\n }\n return compiled;\n}\n\nfunction resolveTemplateSource(\n fileType: TemplateFileType,\n relativeTemplatePath: string,\n theme: string,\n options?: RenderOptions,\n): string {\n const candidates = [\n options?.customTemplates?.[`${theme}/${relativeTemplatePath}`],\n options?.customTemplates?.[templateKey(fileType, relativeTemplatePath)],\n BUILTIN_TEMPLATES[templateKey(fileType, relativeTemplatePath)],\n ];\n for (const candidate of candidates) {\n if (candidate != null) {\n return candidate;\n }\n }\n throw new Error(`Template not found: ${fileType}/${relativeTemplatePath}`);\n}\n\nfunction buildTemplateContext(model: ProcessedRenderCVModel) {\n return {\n cv: model.cv,\n design: model.design,\n locale: {\n ...model.locale,\n language_iso_639_1: languageIso6391(model.locale.language),\n is_rtl: isRtl(model.locale.language),\n },\n settings: {\n ...model.settings,\n _resolved_current_date: model.settings._resolvedCurrentDate,\n },\n };\n}\n\nexport function prepareForRender(\n rendercvModel: RenderCVModel,\n fileType: 'typst' | 'markdown',\n options?: RenderOptions,\n): ProcessedRenderCVModel {\n return processModel(rendercvModel, fileType, options);\n}\n\nexport function renderSingleTemplate(\n fileType: TemplateFileType,\n relativeTemplatePath: string,\n rendercvModel: ProcessedRenderCVModel,\n options?: RenderOptions,\n extraContext: Record<string, unknown> = {},\n): string {\n const source = resolveTemplateSource(\n fileType,\n relativeTemplatePath,\n rendercvModel.design.theme,\n options,\n );\n const template = getCompiledTemplate(source);\n return template.render({\n ...buildTemplateContext(rendercvModel),\n ...extraContext,\n });\n}\n\nfunction getProcessedSections(model: ProcessedRenderCVModel): RenderCVSection[] {\n if (model.cv._rendercvSections) {\n return model.cv._rendercvSections;\n }\n return getRendercvSections(model.cv.sections);\n}\n\nexport function renderFullTemplate(\n rendercvModel: RenderCVModel,\n fileType: 'typst' | 'markdown',\n options?: RenderOptions,\n processedModel?: ProcessedRenderCVModel,\n): string {\n const extension = fileType === 'typst' ? 'typ' : 'md';\n const model = processedModel ?? prepareForRender(rendercvModel, fileType, options);\n\n const header = renderSingleTemplate(fileType, `Header.j2.${extension}`, model, options).replace(\n /^\\n+/,\n '\\n',\n );\n\n let code: string;\n if (fileType === 'typst') {\n const preamble = renderSingleTemplate(fileType, `Preamble.j2.${extension}`, model, options);\n code = `${preamble.trimEnd()}\\n\\n${header}\\n`;\n } else {\n code = `${header}\\n`;\n }\n\n for (const rendercvSection of getProcessedSections(model)) {\n const sectionBeginningRaw = renderSingleTemplate(\n fileType,\n `SectionBeginning.j2.${extension}`,\n model,\n options,\n {\n section_title: rendercvSection.title,\n snake_case_section_title: snakeCaseTitle(rendercvSection.title),\n entry_type: rendercvSection.entryType,\n },\n );\n const sectionEndingRaw = renderSingleTemplate(\n fileType,\n `SectionEnding.j2.${extension}`,\n model,\n options,\n { entry_type: rendercvSection.entryType },\n );\n const sectionBeginning =\n fileType === 'markdown' ? sectionBeginningRaw.trimEnd() : sectionBeginningRaw;\n const sectionEnding = fileType === 'markdown' ? sectionEndingRaw.trimEnd() : sectionEndingRaw;\n\n const entryCodes: string[] = [];\n for (const entry of rendercvSection.entries) {\n const rendered = renderSingleTemplate(\n fileType,\n `entries/${rendercvSection.entryType}.j2.${extension}`,\n model,\n options,\n { entry },\n );\n const shouldTrimEnd =\n fileType === 'typst' ||\n (fileType === 'markdown' && MARKDOWN_TRIM_ENTRY_TYPES.has(rendercvSection.entryType));\n entryCodes.push(shouldTrimEnd ? rendered.trimEnd() : rendered);\n }\n\n const entriesCode = entryCodes.join('\\n\\n');\n code += `\\n${sectionBeginning}\\n${entriesCode}\\n${sectionEnding}`;\n }\n\n return code;\n}\n\nexport function renderHtml(\n rendercvModel: RenderCVModel,\n markdown: string,\n options?: RenderOptions,\n processedModel?: ProcessedRenderCVModel,\n): string {\n const model = processedModel ?? prepareForRender(rendercvModel, 'markdown', options);\n const htmlBody = markdownToHtml(markdown);\n return renderSingleTemplate('html', 'Full.html', model, options, {\n html_body: htmlBody,\n });\n}\n","/**\n * Markdown → Typst/HTML conversion — ported from `templater/markdown_parser.py`.\n */\nimport { Marked, marked } from 'marked';\n\nconst typstMarkdown = new Marked({ gfm: false, breaks: false });\n\nconst mathPattern = /(\\$\\$.*?\\$\\$)/g;\n\nconst typstCommandNamePattern = /^#([A-Za-z][^\\s(\\[]*)/;\n\nfunction readTypstCommandSpan(string: string, start: number): { end: number; text: string } | null {\n if (string[start] !== '#') {\n return null;\n }\n const nameMatch = string.slice(start).match(typstCommandNamePattern);\n if (!nameMatch) {\n return null;\n }\n\n let end = start + nameMatch[0].length;\n\n if (string[end] === '(') {\n let depth = 0;\n for (let i = end; i < string.length; i++) {\n const ch = string[i]!;\n if (ch === '(') depth += 1;\n else if (ch === ')') {\n depth -= 1;\n if (depth === 0) {\n end = i + 1;\n break;\n }\n }\n }\n }\n\n if (string[end] === '[') {\n let depth = 0;\n for (let i = end; i < string.length; i++) {\n const ch = string[i]!;\n if (ch === '[') depth += 1;\n else if (ch === ']') {\n depth -= 1;\n if (depth === 0) {\n end = i + 1;\n break;\n }\n }\n }\n }\n\n return { end, text: string.slice(start, end) };\n}\n\nfunction splitTypstCommands(string: string): Array<{ kind: 'text' | 'command'; value: string }> {\n const parts: Array<{ kind: 'text' | 'command'; value: string }> = [];\n let index = 0;\n\n while (index < string.length) {\n const command = readTypstCommandSpan(string, index);\n if (command) {\n parts.push({ kind: 'command', value: command.text });\n index = command.end;\n continue;\n }\n\n let nextCommand = string.indexOf('#', index + 1);\n if (nextCommand === -1) {\n nextCommand = string.length;\n } else {\n while (nextCommand < string.length && !readTypstCommandSpan(string, nextCommand)) {\n nextCommand = string.indexOf('#', nextCommand + 1);\n if (nextCommand === -1) {\n nextCommand = string.length;\n break;\n }\n }\n }\n\n parts.push({ kind: 'text', value: string.slice(index, nextCommand) });\n index = nextCommand;\n }\n\n return parts;\n}\n\nfunction escapeTypstText(string: string): string {\n const escapeDictionary: Record<string, string> = {\n '[': '\\\\[',\n ']': '\\\\]',\n '\\\\': '\\\\\\\\',\n '\"': '\\\\\"',\n '#': '\\\\#',\n $: '\\\\$',\n '@': '\\\\@',\n '%': '\\\\%',\n '~': '\\\\~',\n _: '\\\\_',\n '/': '\\\\/',\n '>': '\\\\>',\n '<': '\\\\<',\n };\n\n let working = [...string].map((ch) => escapeDictionary[ch] ?? ch).join('');\n\n const longerEscapeDictionary: Record<string, string> = {\n '* ': '#sym.ast.basic ',\n '*': '#sym.ast.basic#h(0pt, weak: true)',\n };\n for (const [key, value] of Object.entries(longerEscapeDictionary)) {\n working = working.split(key).join(value);\n }\n\n return working;\n}\n\nexport function escapeTypstCharacters(string: string): string {\n if (string === '\\n') {\n return string;\n }\n\n const typstCommandMapping: Record<string, string> = {};\n let index = 0;\n let working = string;\n\n const preserveMatch = (match: string) => {\n const dummyName = `RENDERCVTYPSTCOMMANDORMATH${index}`;\n index += 1;\n typstCommandMapping[dummyName] = match.replace(/\\$\\$/g, '$');\n working = working.replace(match, dummyName);\n };\n\n for (const match of working.matchAll(mathPattern)) {\n preserveMatch(match[0]!);\n }\n\n const escapedParts = splitTypstCommands(working).map((part) => {\n if (part.kind === 'command') {\n return part.value;\n }\n return escapeTypstText(part.value);\n });\n working = escapedParts.join('');\n\n for (const [dummyName, fullCommand] of Object.entries(typstCommandMapping)) {\n working = working.split(dummyName).join(fullCommand);\n }\n\n return working;\n}\n\nfunction decodeHtmlEntities(text: string): string {\n return text\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/** Convert marked HTML output to Typst without requiring DOMParser (works in Node). */\nexport function convertHtmlToTypst(html: string): string {\n let working = html.trim();\n const paragraphMatch = working.match(/^<p>([\\s\\S]*)<\\/p>$/i);\n if (paragraphMatch) {\n working = paragraphMatch[1]!;\n }\n\n const convertInner = (input: string): string => {\n let out = input;\n let previous = '';\n while (out !== previous) {\n previous = out;\n out = out\n .replace(\n /<a\\s+href=\"([^\"]*)\"[^>]*>([\\s\\S]*?)<\\/a>/gi,\n (_, href, inner) => `#link(\"${href}\")[${convertInner(inner)}]`,\n )\n .replace(\n /<em>\\s*<strong>([\\s\\S]*?)<\\/strong>\\s*<\\/em>/gi,\n (_, inner) => `#strong[#emph[${convertInner(inner)}]]`,\n )\n .replace(/<strong>([\\s\\S]*?)<\\/strong>/gi, (_, inner) => `#strong[${convertInner(inner)}]`)\n .replace(/<b>([\\s\\S]*?)<\\/b>/gi, (_, inner) => `#strong[${convertInner(inner)}]`)\n .replace(/<em>([\\s\\S]*?)<\\/em>/gi, (_, inner) => `#emph[${convertInner(inner)}]`)\n .replace(/<i>([\\s\\S]*?)<\\/i>/gi, (_, inner) => `#emph[${convertInner(inner)}]`)\n .replace(/<code>([\\s\\S]*?)<\\/code>/gi, (_, inner) => `\\`${inner}\\``)\n .replace(\n /<div[^>]*>([\\s\\S]*?)<\\/div>/gi,\n (_, inner) => `#summary[${convertInner(inner).trim().replace(/\\n/g, ' \\\\\\\\ ')}]`,\n );\n }\n out = out.replace(/<[^>]+>/g, '');\n out = decodeHtmlEntities(out);\n return escapeTypstCharacters(out);\n };\n\n return convertInner(working);\n}\n\nfunction elementToTypst(elem: Element): string {\n const result: string[] = [];\n\n for (const child of Array.from(elem.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n result.push(escapeTypstCharacters(child.textContent ?? ''));\n continue;\n }\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const el = child as Element;\n let childContent = '';\n switch (el.tagName.toLowerCase()) {\n case 'strong':\n case 'b':\n childContent = `#strong[${elementToTypst(el)}]`;\n break;\n case 'em':\n case 'i': {\n const strongChild = Array.from(el.children).find(\n (node) =>\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName.toLowerCase() === 'strong',\n ) as Element | undefined;\n if (strongChild) {\n childContent = `#strong[#emph[${elementToTypst(strongChild)}]]`;\n break;\n }\n childContent = `#emph[${elementToTypst(el)}]`;\n break;\n }\n case 'code':\n childContent = `\\`${el.textContent ?? ''}\\``;\n break;\n case 'a': {\n const href = el.getAttribute('href') ?? 'https://example.com';\n childContent = `#link(\"${href}\")[${elementToTypst(el)}]`;\n break;\n }\n case 'div':\n childContent = `#summary[${elementToTypst(el).trim().replace(/\\n/g, ' \\\\ ')}]`;\n break;\n default:\n if (el.classList.contains('admonition-title')) {\n continue;\n }\n childContent = elementToTypst(el);\n break;\n }\n result.push(childContent);\n }\n\n return result.join('');\n}\n\nfunction htmlToTypst(html: string): string {\n if (typeof DOMParser !== 'undefined') {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const body = doc.body;\n if (!body) {\n return '';\n }\n if (body.children.length === 1 && body.firstElementChild?.tagName.toLowerCase() === 'p') {\n return elementToTypst(body.firstElementChild);\n }\n return elementToTypst(body);\n }\n return convertHtmlToTypst(html);\n}\n\nfunction convertAdmonitionBlock(markdownString: string): string {\n const lines = markdownString.split('\\n');\n const body = lines\n .slice(1)\n .map((line) => line.replace(/^ {4}/, ''))\n .join('\\n');\n const convertedBody = convertMarkdownChunk(body);\n return `#summary[${convertedBody.trim().replace(/\\n/g, ' \\\\ ')}]`;\n}\n\nfunction convertMarkdownChunk(markdownString: string): string {\n const listLine = markdownString.match(/^\\s*-\\s([\\s\\S]*)$/);\n if (listLine) {\n const prefix = '- ';\n const bodyHtml = typstMarkdown.parseInline(listLine[1]!, { async: false }) as string;\n const bodyTypst = convertHtmlToTypst(`<p>${bodyHtml}</p>`);\n return prefix + bodyTypst;\n }\n\n const html = typstMarkdown.parse(markdownString, { async: false }) as string;\n let result = htmlToTypst(html);\n if (/^\\s+\\(/.test(markdownString)) {\n result = result.trimStart();\n }\n return result;\n}\n\nexport function markdownToTypst(markdownString: string): string {\n const lines = markdownString.split('\\n');\n const resultParts: string[] = [];\n let i = 0;\n while (i < lines.length) {\n if (lines[i]!.startsWith('!!!')) {\n const block = [lines[i]!];\n i += 1;\n while (i < lines.length && lines[i]!.startsWith(' ')) {\n block.push(lines[i]!);\n i += 1;\n }\n resultParts.push(convertAdmonitionBlock(block.join('\\n')));\n } else {\n resultParts.push(convertMarkdownChunk(lines[i]!));\n i += 1;\n }\n }\n return resultParts.join('\\n');\n}\n\nfunction flattenNestedMarkdownLists(markdownString: string): string {\n return markdownString.replace(/^ {2}- /gm, '- ');\n}\n\nfunction formatHtmlLikePythonMarkdown(html: string): string {\n return html.replace(/<li><p>/g, '<li>\\n<p>');\n}\n\nexport function markdownToHtml(markdownString: string): string {\n const htmlInput = flattenNestedMarkdownLists(markdownString).replace(/^ \\(/gm, '(');\n const html = marked.parse(htmlInput, {\n async: false,\n gfm: false,\n breaks: false,\n }) as string;\n return formatHtmlLikePythonMarkdown(html)\n .replace(/'/g, \"'\")\n .replace(/<em><strong>(.*?)<\\/strong><\\/em>/g, '<strong><em>$1</em></strong>')\n .trimEnd();\n}\n","/**\n * Connection formatting — ported from `templater/connections.py`.\n */\nimport parsePhoneNumberFromString from 'libphonenumber-js';\nimport { RenderCVInternalError } from '../../schema/error-handling';\nimport type { CustomConnection } from '../../schema/models/cv/custom_connection';\nimport { type SocialNetwork, buildSocialNetworkUrl } from '../../schema/models/cv/social_network';\nimport type { RenderCVModel } from '../../schema/models/rendercv_model';\nimport { PRESET_ICON_IDS } from '../assets/icons/icon_ids';\nimport { markdownToTypst } from './markdown_parser';\nimport { cleanUrl, normalizeHttpUrl } from './string_processor';\n\nexport type OutputFileType = 'typst' | 'markdown';\n\nconst presetIconSet = new Set<string>(PRESET_ICON_IDS);\n\nconst connectionIcons: Record<string, string> = {\n LinkedIn: 'linkedin',\n GitHub: 'github',\n GitLab: 'gitlab',\n IMDB: 'imdb',\n Instagram: 'instagram',\n Mastodon: 'mastodon',\n ORCID: 'orcid',\n StackOverflow: 'stack-overflow',\n ResearchGate: 'researchgate',\n YouTube: 'youtube',\n 'Google Scholar': 'graduation-cap',\n Telegram: 'telegram',\n WhatsApp: 'whatsapp',\n Leetcode: 'code',\n X: 'x-twitter',\n Bluesky: 'bluesky',\n location: 'location-dot',\n email: 'envelope',\n phone: 'phone',\n website: 'link',\n Reddit: 'reddit',\n};\n\n/** Map YAML custom_connections.fontawesome_icon values to bundled SVG preset ids. */\nexport function resolveIconId(iconName: string): string {\n if (presetIconSet.has(iconName)) {\n return iconName;\n }\n const aliases: Record<string, string> = {\n 'envelope-o': 'envelope',\n 'map-marker': 'location-dot',\n 'map-marker-alt': 'location-dot',\n 'location-pin': 'location-dot',\n globe: 'link',\n 'link-simple': 'link',\n 'external-link-alt': 'external-link',\n 'external-link': 'external-link',\n twitter: 'x-twitter',\n 'x-twitter': 'x-twitter',\n 'google-scholar': 'graduation-cap',\n 'stack-overflow': 'stack-overflow',\n 'location-dot': 'location-dot',\n };\n if (aliases[iconName]) {\n return aliases[iconName]!;\n }\n if (connectionIcons[iconName]) {\n return connectionIcons[iconName]!;\n }\n return 'link';\n}\n\nexport interface Connection {\n iconId: string;\n url: string | null;\n body: string;\n}\n\nconst PHONE_FORMAT_MAP: Record<string, 'NATIONAL' | 'INTERNATIONAL' | 'E.164'> = {\n NATIONAL: 'NATIONAL',\n INTERNATIONAL: 'INTERNATIONAL',\n E164: 'E.164',\n};\n\nexport function formatPhoneNumber(phone: string, formatName: string): string {\n const parsed = parsePhoneNumberFromString(phone);\n if (!parsed) {\n return phone;\n }\n const format = PHONE_FORMAT_MAP[formatName.toUpperCase()] ?? 'NATIONAL';\n return parsed.format(format);\n}\n\nfunction formatPhoneUrl(phone: string): string {\n const parsed = parsePhoneNumberFromString(phone);\n if (!parsed) {\n return phone;\n }\n return `tel:+${parsed.formatInternational().slice(1).replace(/ /g, '-')}`;\n}\n\nfunction normalizeWebsiteUrl(url: string): string {\n return normalizeHttpUrl(url);\n}\n\nexport function parseConnections(rendercvModel: RenderCVModel): Connection[] {\n const connections: Connection[] = [];\n for (const key of rendercvModel.cv._keyOrder) {\n switch (key) {\n case 'email': {\n let emails = rendercvModel.cv.email;\n if (emails == null) break;\n if (!Array.isArray(emails)) emails = [emails];\n for (const email of emails) {\n connections.push({\n iconId: connectionIcons.email!,\n url: `mailto:${email}`,\n body: String(email),\n });\n }\n break;\n }\n case 'phone': {\n let phones = rendercvModel.cv.phone;\n if (phones == null) {\n throw new RenderCVInternalError('phone key present but value is None');\n }\n if (!Array.isArray(phones)) phones = [phones];\n const phoneFormat = rendercvModel.design.header.connections.phone_number_format;\n for (const phone of phones) {\n const phoneString = String(phone);\n connections.push({\n iconId: connectionIcons.phone!,\n url: formatPhoneUrl(phoneString),\n body: formatPhoneNumber(phoneString, phoneFormat),\n });\n }\n break;\n }\n case 'website': {\n let websites = rendercvModel.cv.website;\n if (!websites) {\n throw new RenderCVInternalError('website key present but value is None');\n }\n if (!Array.isArray(websites)) websites = [websites];\n for (const website of websites) {\n const url = normalizeWebsiteUrl(String(website));\n connections.push({\n iconId: connectionIcons.website!,\n url,\n body: cleanUrl(url),\n });\n }\n break;\n }\n case 'location': {\n connections.push({\n iconId: connectionIcons.location!,\n url: null,\n body: String(rendercvModel.cv.location),\n });\n break;\n }\n case 'social_networks': {\n const networks = rendercvModel.cv.social_networks as SocialNetwork[] | null | undefined;\n if (networks == null) {\n throw new RenderCVInternalError('social_networks key present but value is None');\n }\n const displayUrls =\n rendercvModel.design.header.connections.display_urls_instead_of_usernames;\n for (const socialNetwork of networks) {\n const url = buildSocialNetworkUrl(socialNetwork.network, socialNetwork.username);\n let body: string;\n if (displayUrls) {\n body = cleanUrl(url);\n } else if (socialNetwork.network === 'Google Scholar') {\n body = 'Google Scholar';\n } else {\n body = socialNetwork.username;\n }\n connections.push({\n iconId: connectionIcons[socialNetwork.network]!,\n url,\n body,\n });\n }\n break;\n }\n case 'custom_connections': {\n const customConnections = rendercvModel.cv.custom_connections as\n | CustomConnection[]\n | null\n | undefined;\n if (customConnections == null) {\n throw new RenderCVInternalError('custom_connections key present but value is None');\n }\n for (const customConnection of customConnections) {\n connections.push({\n iconId: resolveIconId(customConnection.fontawesome_icon),\n url: customConnection.url != null ? String(customConnection.url) : null,\n body: customConnection.placeholder,\n });\n }\n break;\n }\n }\n }\n return connections;\n}\n\nexport function computeConnectionsForTypst(rendercvModel: RenderCVModel): string[] {\n const connections = parseConnections(rendercvModel);\n const showIcon = rendercvModel.design.header.connections.show_icons;\n const hyperlink = rendercvModel.design.header.connections.hyperlink;\n\n const placeholders = connections.map((connection) => {\n const body = markdownToTypst(connection.body);\n if (showIcon) {\n return `#connection-with-icon(\"${connection.iconId}\")[${body}]`;\n }\n return body;\n });\n\n return connections.map((connection, index) => {\n const placeholder = placeholders[index]!;\n if (connection.url && hyperlink) {\n return `#link(\"${connection.url}\", icon: false, if-underline: false, if-color: false)[${placeholder}]`;\n }\n return placeholder;\n });\n}\n\nexport function computeConnectionsForMarkdown(rendercvModel: RenderCVModel): string[] {\n const connections = parseConnections(rendercvModel);\n return connections.map((connection) =>\n connection.url ? `[${connection.body}](${connection.url})` : connection.body,\n );\n}\n\nexport function computeConnections(\n rendercvModel: RenderCVModel,\n fileType: OutputFileType,\n): string[] {\n return fileType === 'typst'\n ? computeConnectionsForTypst(rendercvModel)\n : computeConnectionsForMarkdown(rendercvModel);\n}\n","/** Auto-generated by scripts/generate-connection-icons.mjs — do not edit. */\n\nexport const PRESET_ICON_IDS = [\n \"envelope\",\n \"phone\",\n \"link\",\n \"location-dot\",\n \"linkedin\",\n \"github\",\n \"gitlab\",\n \"imdb\",\n \"instagram\",\n \"mastodon\",\n \"orcid\",\n \"stack-overflow\",\n \"researchgate\",\n \"youtube\",\n \"graduation-cap\",\n \"telegram\",\n \"whatsapp\",\n \"code\",\n \"x-twitter\",\n \"bluesky\",\n \"reddit\",\n \"external-link\"\n] as const;\n\nexport type PresetIconId = (typeof PRESET_ICON_IDS)[number];\n","/**\n * String processors — ported from `templater/string_processor.py`.\n */\nimport { RenderCVInternalError } from '../../schema/error-handling';\n\nconst keywordPatternCache = new Map<string, RegExp>();\n\nexport type StringProcessor = (string: string) => string;\n\nexport function applyStringProcessors(\n string: string | null | undefined,\n stringProcessors: StringProcessor[],\n): string | null | undefined {\n if (string == null) {\n return string;\n }\n return stringProcessors.reduce((value, fn) => fn(value), string);\n}\n\nexport function buildKeywordMatcherPattern(\n keywords: ReadonlySet<string>,\n wordBoundary = false,\n): RegExp {\n if (keywords.size === 0) {\n throw new RenderCVInternalError('Keywords cannot be empty');\n }\n\n const cacheKey = `${wordBoundary}:${[...keywords].sort().join('\\0')}`;\n const cached = keywordPatternCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n let pattern: RegExp;\n if (wordBoundary) {\n const parts: string[] = [];\n for (const k of keywords) {\n const esc = k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const prefix = /^\\w/.test(k) ? '\\\\b' : '';\n const suffix = /\\w$/.test(k) ? '\\\\b' : '';\n parts.push(`${prefix}${esc}${suffix}`);\n }\n parts.sort((a, b) => b.length - a.length);\n pattern = new RegExp(`(${parts.join('|')})`, 'g');\n } else {\n const escaped = [...keywords]\n .map((k) => k.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .sort((a, b) => b.length - a.length);\n pattern = new RegExp(`(${escaped.join('|')})`, 'g');\n }\n\n keywordPatternCache.set(cacheKey, pattern);\n return pattern;\n}\n\nexport function makeKeywordsBold(string: string, keywords: string[]): string {\n if (keywords.length === 0) {\n return string;\n }\n const pattern = buildKeywordMatcherPattern(new Set(keywords), true);\n return string.replace(pattern, (match) => `**${match}**`);\n}\n\nexport function substitutePlaceholders(\n string: string,\n placeholders: Record<string, string>,\n): string {\n if (Object.keys(placeholders).length === 0) {\n return string;\n }\n const pattern = buildKeywordMatcherPattern(new Set(Object.keys(placeholders)));\n return string.replace(pattern, (match) => placeholders[match] ?? match).trim();\n}\n\nexport function normalizeHttpUrl(url: string): string {\n try {\n const parsed = new URL(url);\n if (!parsed.pathname || parsed.pathname === '/') {\n return `${parsed.origin}/`;\n }\n } catch {\n return url;\n }\n return url;\n}\n\nexport function cleanUrl(url: string): string {\n return String(url).replace('https://', '').replace('http://', '').replace(/\\/+$/, '');\n}\n","/**\n * Date formatting — ported from `templater/date.py`.\n */\nimport { getDateObject } from '../../schema/models/dates';\nimport type { SimpleDate } from '../../schema/models/dates';\nimport type { Locale } from '../../schema/models/locale/locales';\nimport { substitutePlaceholders } from './string_processor';\n\nexport function buildDatePlaceholders(date: SimpleDate, locale: Locale): Record<string, string> {\n const month = date.month;\n const day = date.day;\n const year = date.year;\n\n return {\n MONTH_NAME: locale.month_names[month - 1]!,\n MONTH_ABBREVIATION: locale.month_abbreviations[month - 1]!,\n MONTH: String(month),\n MONTH_IN_TWO_DIGITS: String(month).padStart(2, '0'),\n DAY: String(day),\n DAY_IN_TWO_DIGITS: String(day).padStart(2, '0'),\n YEAR: String(year),\n YEAR_IN_TWO_DIGITS: String(year % 100).padStart(2, '0'),\n };\n}\n\nexport function dateObjectToString(\n date: SimpleDate,\n locale: Locale,\n singleDateTemplate: string,\n): string {\n return substitutePlaceholders(singleDateTemplate, buildDatePlaceholders(date, locale));\n}\n\nexport function formatDateRange(\n startDate: string | number,\n endDate: string | number | 'present',\n locale: Locale,\n singleDateTemplate: string,\n dateRangeTemplate: string,\n currentDate: SimpleDate,\n): string {\n let startDateString: string;\n if (typeof startDate === 'number') {\n startDateString = String(startDate);\n } else {\n const dateObject = getDateObject(startDate, currentDate);\n startDateString = dateObjectToString(dateObject, locale, singleDateTemplate);\n }\n\n let endDateString: string;\n if (endDate === 'present') {\n endDateString = locale.present;\n } else if (typeof endDate === 'number') {\n endDateString = String(endDate);\n } else {\n const dateObject = getDateObject(endDate, currentDate);\n endDateString = dateObjectToString(dateObject, locale, singleDateTemplate);\n }\n\n return substitutePlaceholders(dateRangeTemplate, {\n START_DATE: startDateString,\n END_DATE: endDateString,\n });\n}\n\nexport function formatSingleDate(\n date: string | number | 'present',\n locale: Locale,\n singleDateTemplate: string,\n currentDate: SimpleDate,\n): string {\n if (typeof date === 'number') {\n return String(date);\n }\n if (date === 'present') {\n return locale.present;\n }\n try {\n const dateObject = getDateObject(date, currentDate);\n return dateObjectToString(dateObject, locale, singleDateTemplate);\n } catch {\n return String(date);\n }\n}\n\nexport function computeTimeSpanString(\n startDate: string | number,\n endDate: string | number | 'present',\n locale: Locale,\n currentDate: SimpleDate,\n timeSpanTemplate: string,\n): string {\n if (typeof startDate === 'number' || typeof endDate === 'number') {\n const startYear = getDateObject(startDate, currentDate).year;\n const endYear = getDateObject(endDate, currentDate).year;\n const timeSpanInYears = endYear - startYear;\n\n let howManyYears: string;\n let localeYears: string;\n if (timeSpanInYears < 2) {\n howManyYears = '1';\n localeYears = locale.year;\n } else {\n howManyYears = String(timeSpanInYears);\n localeYears = locale.years;\n }\n\n return substitutePlaceholders(timeSpanTemplate, {\n HOW_MANY_YEARS: howManyYears,\n YEARS: localeYears,\n HOW_MANY_MONTHS: '',\n MONTHS: '',\n });\n }\n\n const endDateObject = getDateObject(endDate, currentDate);\n const startDateObject = getDateObject(startDate, currentDate);\n const timespanInDays = Math.floor(\n (Date.UTC(endDateObject.year, endDateObject.month - 1, endDateObject.day) -\n Date.UTC(startDateObject.year, startDateObject.month - 1, startDateObject.day)) /\n (1000 * 60 * 60 * 24),\n );\n\n let howManyYears = Math.floor(timespanInDays / 365);\n let howManyMonths = Math.floor((timespanInDays % 365) / 30) + 1;\n howManyYears += Math.floor(howManyMonths / 12);\n howManyMonths %= 12;\n\n let howManyYearsStr: string;\n let localeYears: string;\n if (howManyYears === 0) {\n howManyYearsStr = '';\n localeYears = '';\n } else if (howManyYears === 1) {\n howManyYearsStr = '1';\n localeYears = locale.year;\n } else {\n howManyYearsStr = String(howManyYears);\n localeYears = locale.years;\n }\n\n let howManyMonthsStr: string;\n let localeMonths: string;\n if (howManyMonths === 0) {\n howManyMonthsStr = '';\n localeMonths = '';\n } else if (howManyMonths === 1) {\n howManyMonthsStr = '1';\n localeMonths = locale.month;\n } else {\n howManyMonthsStr = String(howManyMonths);\n localeMonths = locale.months;\n }\n\n return substitutePlaceholders(timeSpanTemplate, {\n HOW_MANY_YEARS: howManyYearsStr,\n YEARS: localeYears,\n HOW_MANY_MONTHS: howManyMonthsStr,\n MONTHS: localeMonths,\n });\n}\n","/**\n * Entry template expansion — ported from `templater/entry_templates_from_input.py`.\n */\nimport { RenderCVInternalError } from '../../schema/error-handling';\nimport type { EntryTypeName } from '../../schema/models/cv/entries';\nimport type { SimpleDate } from '../../schema/models/dates';\nimport type { ClassicTheme } from '../../schema/models/design/design';\nimport type { Locale } from '../../schema/models/locale/locales';\nimport { computeTimeSpanString, formatDateRange, formatSingleDate } from './date';\nimport { cleanUrl, normalizeHttpUrl, substitutePlaceholders } from './string_processor';\n\nconst uppercaseWordPattern = /\\b[A-Z_]+\\b/g;\nconst uppercaseWordFullPattern = /^[A-Z_]+$/;\nconst connectorWordPattern = /(?<=\\s)(?![A-Z])[^\\W\\d_]\\S*(?=\\s)/g;\nconst unwantedTrailingPartsPattern = /[^A-Za-z0-9.!?\\[\\]\\(\\)\\*_%]+$/;\n\nexport function entryTypeToSnakeCase(entryType: EntryTypeName): string {\n return entryType.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();\n}\n\nexport function removeConnectorsOfMissingPlaceholders(\n template: string,\n notProvidedPlaceholders: Set<string>,\n): string {\n const tokens = template.split(/(\\b[A-Z_]+\\b)/);\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n if (uppercaseWordFullPattern.test(token)) {\n continue;\n }\n\n let prevPh: string | null = null;\n for (let j = i - 1; j >= 0; j--) {\n if (uppercaseWordFullPattern.test(tokens[j]!)) {\n prevPh = tokens[j]!;\n break;\n }\n }\n\n let nextPh: string | null = null;\n for (let j = i + 1; j < tokens.length; j++) {\n if (uppercaseWordFullPattern.test(tokens[j]!)) {\n nextPh = tokens[j]!;\n break;\n }\n }\n\n if (\n prevPh != null &&\n nextPh != null &&\n (notProvidedPlaceholders.has(prevPh) || notProvidedPlaceholders.has(nextPh))\n ) {\n tokens[i] = token.replace(connectorWordPattern, '');\n }\n }\n\n return tokens.join('');\n}\n\nfunction dumpEntryFields(entry: Record<string, unknown>): Record<string, string> {\n const fields: Record<string, string> = {};\n for (const [key, value] of Object.entries(entry)) {\n if (value === null || value === undefined || value === '') continue;\n if (key.startsWith('_')) continue;\n if (Array.isArray(value)) {\n if (value.length > 0) {\n fields[key.toUpperCase()] = '';\n }\n continue;\n }\n fields[key.toUpperCase()] = String(value);\n }\n return fields;\n}\n\nfunction getTemplateRecord(\n templates: ClassicTheme['templates'],\n entryTypeSnake: string,\n): Record<string, string> | null {\n const raw = (templates as Record<string, unknown>)[entryTypeSnake];\n if (raw == null || typeof raw !== 'object') {\n return null;\n }\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(raw as Record<string, unknown>)) {\n if (value != null) {\n out[key] = String(value);\n }\n }\n return out;\n}\n\nexport function renderEntryTemplates(\n entry: unknown,\n options: {\n entryType: EntryTypeName;\n templates: ClassicTheme['templates'];\n locale: Locale;\n showTimeSpan: boolean;\n currentDate: SimpleDate;\n },\n): unknown {\n if (typeof entry === 'string') {\n return entry;\n }\n\n const entryTypeSnake = entryTypeToSnakeCase(options.entryType);\n const entryTemplates = getTemplateRecord(options.templates, entryTypeSnake);\n if (entryTemplates == null) {\n return entry;\n }\n\n const entryRecord = entry as Record<string, unknown>;\n const entryFields = dumpEntryFields(entryRecord);\n\n let expandedTemplates = { ...entryTemplates };\n for (const [phraseName, phraseTemplate] of Object.entries(options.locale.phrases)) {\n const phrasePlaceholder = phraseName.toUpperCase();\n expandedTemplates = Object.fromEntries(\n Object.entries(expandedTemplates).map(([key, template]) => [\n key,\n template.replaceAll(phrasePlaceholder, String(phraseTemplate)),\n ]),\n );\n }\n\n if ('HIGHLIGHTS' in entryFields) {\n const highlights = entryRecord.highlights as string[] | null | undefined;\n if (highlights == null) {\n throw new RenderCVInternalError('HIGHLIGHTS in fields but highlights is None');\n }\n entryFields.HIGHLIGHTS = processHighlights(highlights);\n }\n\n if ('AUTHORS' in entryFields) {\n const authors = entryRecord.authors as string[] | null | undefined;\n if (authors == null) {\n throw new RenderCVInternalError('AUTHORS in fields but authors is None');\n }\n entryFields.AUTHORS = processAuthors(authors);\n }\n\n if ('DATE' in entryFields || 'START_DATE' in entryFields || 'END_DATE' in entryFields) {\n entryFields.DATE = processDate({\n date: entryRecord.date as string | number | null | undefined,\n startDate: entryRecord.start_date as string | number | null | undefined,\n endDate: entryRecord.end_date as string | number | 'present' | null | undefined,\n locale: options.locale,\n showTimeSpan: options.showTimeSpan,\n currentDate: options.currentDate,\n singleDateTemplate: options.templates.single_date,\n dateRangeTemplate: options.templates.date_range,\n timeSpanTemplate: options.templates.time_span,\n });\n }\n\n if ('START_DATE' in entryFields) {\n const startDate = entryRecord.start_date;\n if (startDate == null) {\n throw new RenderCVInternalError('START_DATE in fields but start_date is None');\n }\n entryFields.START_DATE = formatSingleDate(\n startDate as string | number,\n options.locale,\n options.templates.single_date,\n options.currentDate,\n );\n }\n\n if ('END_DATE' in entryFields) {\n const endDate = entryRecord.end_date;\n if (endDate == null) {\n throw new RenderCVInternalError('END_DATE in fields but end_date is None');\n }\n entryFields.END_DATE = formatSingleDate(\n endDate as string | number | 'present',\n options.locale,\n options.templates.single_date,\n options.currentDate,\n );\n }\n\n if ('URL' in entryFields) {\n entryFields.URL = processUrl(entryRecord);\n }\n\n if ('DOI' in entryFields) {\n entryFields.URL = processUrl(entryRecord);\n entryFields.DOI = processDoi(entryRecord);\n }\n\n if ('SUMMARY' in entryFields) {\n const summaryIsStandalone = Object.values(expandedTemplates).some((template) =>\n template.split('\\n').some((line) => line.trim() === 'SUMMARY'),\n );\n if (summaryIsStandalone) {\n entryFields.SUMMARY = processSummary(entryFields.SUMMARY!);\n }\n }\n\n expandedTemplates = removeNotProvidedPlaceholders(expandedTemplates, entryFields);\n\n const merged = { ...expandedTemplates, ...entryFields };\n const result = { ...entryRecord };\n for (const [templateName, template] of Object.entries(merged)) {\n result[templateName] = substitutePlaceholders(template, entryFields);\n }\n return result;\n}\n\nexport function processHighlights(highlights: string[]): string {\n return highlights.map((highlight) => `- ${highlight.replace(/ - /g, '\\n - ')}`).join('\\n');\n}\n\nexport function processAuthors(authors: string[]): string {\n return authors.join(', ');\n}\n\nexport function processDate(options: {\n date?: string | number | null;\n startDate?: string | number | null;\n endDate?: string | number | 'present' | null;\n locale: Locale;\n currentDate: SimpleDate;\n showTimeSpan: boolean;\n singleDateTemplate: string;\n dateRangeTemplate: string;\n timeSpanTemplate: string;\n}): string {\n const { date, startDate, endDate } = options;\n if (date && !(startDate || endDate)) {\n return formatSingleDate(date, options.locale, options.singleDateTemplate, options.currentDate);\n }\n if (startDate && endDate) {\n const dateRange = formatDateRange(\n startDate,\n endDate,\n options.locale,\n options.singleDateTemplate,\n options.dateRangeTemplate,\n options.currentDate,\n );\n if (options.showTimeSpan) {\n const timeSpan = computeTimeSpanString(\n startDate,\n endDate,\n options.locale,\n options.currentDate,\n options.timeSpanTemplate,\n );\n return `${dateRange}\\n\\n${timeSpan}`;\n }\n return dateRange;\n }\n throw new RenderCVInternalError('Date is not provided for this entry.');\n}\n\nexport function getDoiUrl(doi: string): string {\n return `https://doi.org/${doi}`;\n}\n\nexport function processUrl(entry: Record<string, unknown>): string {\n const doi = entry.doi as string | null | undefined;\n if (doi) {\n return processDoi(entry);\n }\n const url = entry.url as string | null | undefined;\n if (url) {\n const normalizedUrl = normalizeHttpUrl(String(url));\n return `[${cleanUrl(normalizedUrl)}](${normalizedUrl})`;\n }\n throw new RenderCVInternalError('URL is not provided for this entry.');\n}\n\nexport function processDoi(entry: Record<string, unknown>): string {\n const doi = entry.doi as string | null | undefined;\n if (doi) {\n return `[${doi}](${getDoiUrl(doi)})`;\n }\n throw new RenderCVInternalError('DOI is not provided for this entry.');\n}\n\nexport function processSummary(summary: string): string {\n const indented = summary\n .split('\\n')\n .map((line) => ` ${line}`)\n .join('\\n');\n return `!!! summary\\n${indented}`;\n}\n\nexport function removeNotProvidedPlaceholders(\n entryTemplates: Record<string, string>,\n entryFields: Record<string, string>,\n): Record<string, string> {\n const usedPlaceholders = new Set<string>();\n for (const match of Object.values(entryTemplates).join(' ').matchAll(uppercaseWordPattern)) {\n usedPlaceholders.add(match[0]!);\n }\n\n const notProvided = new Set(\n [...usedPlaceholders].filter((placeholder) => !(placeholder in entryFields)),\n );\n\n if (notProvided.size === 0) {\n return entryTemplates;\n }\n\n let updated = Object.fromEntries(\n Object.entries(entryTemplates).map(([key, value]) => [\n key,\n removeConnectorsOfMissingPlaceholders(value, notProvided).replace(/ {2,}/g, ' '),\n ]),\n );\n\n const sortedPlaceholders = [...notProvided].sort((a, b) => b.length - a.length);\n const notProvidedPattern = new RegExp(`\\\\S*\\\\b(?:${sortedPlaceholders.join('|')})\\\\b\\\\S*`, 'g');\n\n updated = Object.fromEntries(\n Object.entries(updated).map(([key, value]) => [\n key,\n cleanTrailingParts(value.replace(notProvidedPattern, '').replace(/ {2,}/g, ' ')),\n ]),\n );\n\n return updated;\n}\n\nexport function cleanTrailingParts(text: string): string {\n const newLines: string[] = [];\n for (const line of text.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed === '') continue;\n newLines.push(trimmed.replace(unwantedTrailingPartsPattern, '').trimEnd());\n }\n return newLines.join('\\n');\n}\n","/**\n * Footer and top note rendering — ported from `templater/footer_and_top_note.py`.\n */\nimport type { SimpleDate } from '../../schema/models/dates';\nimport type { Locale } from '../../schema/models/locale/locales';\nimport { buildDatePlaceholders, dateObjectToString } from './date';\nimport {\n type StringProcessor,\n applyStringProcessors,\n substitutePlaceholders,\n} from './string_processor';\n\nexport function renderTopNoteTemplate(\n topNoteTemplate: string,\n options: {\n locale: Locale;\n currentDate: SimpleDate;\n name: string | null | undefined;\n singleDateTemplate: string;\n stringProcessors?: StringProcessor[];\n },\n): string {\n const stringProcessors = options.stringProcessors ?? [];\n const placeholders: Record<string, string> = {\n CURRENT_DATE: dateObjectToString(\n options.currentDate,\n options.locale,\n options.singleDateTemplate,\n ),\n LAST_UPDATED: options.locale.last_updated,\n NAME: options.name ?? '',\n ...buildDatePlaceholders(options.currentDate, options.locale),\n };\n return applyStringProcessors(\n substitutePlaceholders(topNoteTemplate, placeholders),\n stringProcessors,\n ) as string;\n}\n\nexport function renderFooterTemplate(\n footerTemplate: string,\n options: {\n locale: Locale;\n currentDate: SimpleDate;\n name: string | null | undefined;\n singleDateTemplate: string;\n stringProcessors?: StringProcessor[];\n },\n): string {\n const stringProcessors = options.stringProcessors ?? [];\n const placeholders: Record<string, string> = {\n CURRENT_DATE: dateObjectToString(\n options.currentDate,\n options.locale,\n options.singleDateTemplate,\n ),\n NAME: options.name ?? '',\n PAGE_NUMBER: '#str(here().page())',\n TOTAL_PAGES: '#str(counter(page).final().first())',\n ...buildDatePlaceholders(options.currentDate, options.locale),\n };\n const body = applyStringProcessors(\n substitutePlaceholders(footerTemplate, placeholders),\n stringProcessors,\n );\n return `context { [${body}] }`;\n}\n","import type { RenderCVSection } from '../../schema/models/cv/section';\nimport { getRendercvSections, snakeCaseTitle } from '../../schema/models/cv/section';\nimport { buildSocialNetworkUrl } from '../../schema/models/cv/social_network';\n/**\n * Model pre-processing — ported from `templater/model_processor.py` (browser variant).\n */\nimport type { RenderCVModel } from '../../schema/models/rendercv_model';\nimport type { RenderOptions } from '../types';\nimport { computeConnections, formatPhoneNumber } from './connections';\nimport { buildDatePlaceholders, dateObjectToString } from './date';\nimport { renderEntryTemplates } from './entry_templates_from_input';\nimport { renderFooterTemplate, renderTopNoteTemplate } from './footer_and_top_note';\nimport { markdownToTypst } from './markdown_parser';\nimport {\n type StringProcessor,\n applyStringProcessors,\n makeKeywordsBold,\n normalizeHttpUrl,\n substitutePlaceholders,\n} from './string_processor';\n\nexport interface ProcessedCvFields {\n _plainName?: string | null;\n _plain_name?: string | null;\n _connections?: string[];\n _topNote?: string;\n _top_note?: string;\n _footer?: string;\n photo?: string;\n photo_name?: string;\n _rendercvSections?: RenderCVSection[];\n [key: string]: unknown;\n}\n\nexport type ProcessedRenderCVModel = RenderCVModel & {\n cv: RenderCVModel['cv'] & ProcessedCvFields;\n};\n\nfunction cloneModel(model: RenderCVModel): ProcessedRenderCVModel {\n return {\n cv: {\n ...model.cv,\n sections: model.cv.sections\n ? Object.fromEntries(\n Object.entries(model.cv.sections).map(([title, entries]) => [\n title,\n entries.map((entry) =>\n typeof entry === 'string' ? entry : { ...(entry as Record<string, unknown>) },\n ),\n ]),\n )\n : model.cv.sections,\n },\n design: model.design,\n locale: model.locale,\n settings: { ...model.settings },\n };\n}\n\nfunction applyPhotoAssets(model: ProcessedRenderCVModel, options?: RenderOptions): void {\n const photo = model.cv.photo;\n if (!photo) {\n return;\n }\n const asset = options?.assets?.[photo];\n if (asset) {\n model.cv.photo = asset;\n }\n}\n\nexport function processModel(\n rendercvModel: RenderCVModel,\n fileType: 'typst' | 'markdown',\n options?: RenderOptions,\n): ProcessedRenderCVModel {\n const model = cloneModel(rendercvModel);\n if (model.cv.photo) {\n const originalPhotoPath = String(model.cv.photo).replace(/\\\\/g, '/');\n model.cv.photo_name = originalPhotoPath.split('/').pop() ?? originalPhotoPath;\n }\n applyPhotoAssets(model, options);\n enrichCvContactFields(model);\n\n const stringProcessors: StringProcessor[] = [\n (string) => makeKeywordsBold(string, model.settings.bold_keywords),\n ];\n if (fileType === 'typst') {\n stringProcessors.push(markdownToTypst);\n }\n\n model.cv._plainName = model.cv.name ?? null;\n model.cv._plain_name = model.cv._plainName;\n model.cv.name = applyStringProcessors(model.cv.name, stringProcessors) as\n | string\n | null\n | undefined;\n model.cv.headline = applyStringProcessors(model.cv.headline, stringProcessors) as\n | string\n | null\n | undefined;\n model.cv._connections = computeConnections(model, fileType);\n model.cv._topNote = renderTopNoteTemplate(model.design.templates.top_note, {\n locale: model.locale,\n currentDate: model.settings._resolvedCurrentDate,\n name: model.cv.name,\n singleDateTemplate: model.design.templates.single_date,\n stringProcessors,\n });\n model.cv._top_note = model.cv._topNote;\n model.cv._footer = renderFooterTemplate(model.design.templates.footer, {\n locale: model.locale,\n currentDate: model.settings._resolvedCurrentDate,\n name: model.cv.name,\n singleDateTemplate: model.design.templates.single_date,\n stringProcessors,\n });\n\n const pdfTitlePlaceholders: Record<string, string> = {\n CURRENT_DATE: dateObjectToString(\n model.settings._resolvedCurrentDate,\n model.locale,\n model.design.templates.single_date,\n ),\n NAME: model.cv._plainName ?? '',\n ...buildDatePlaceholders(model.settings._resolvedCurrentDate, model.locale),\n };\n model.settings.pdf_title = substitutePlaceholders(model.settings.pdf_title, pdfTitlePlaceholders);\n\n if (!model.cv.sections) {\n return model;\n }\n\n const rendercvSections = getRendercvSections(model.cv.sections);\n const sectionKeys = Object.keys(model.cv.sections);\n model.cv._rendercvSections = [];\n\n for (let index = 0; index < rendercvSections.length; index++) {\n const section = rendercvSections[index]!;\n const sectionKey = sectionKeys[index];\n if (!sectionKey) continue;\n\n const showTimeSpan = model.design.sections.show_time_spans_in.includes(\n snakeCaseTitle(sectionKey),\n );\n\n const processedEntries = section.entries.map((entry) => {\n const processedEntry = renderEntryTemplates(entry, {\n entryType: section.entryType,\n templates: model.design.templates,\n locale: model.locale,\n showTimeSpan,\n currentDate: model.settings._resolvedCurrentDate,\n });\n return processFields(processedEntry, stringProcessors);\n });\n\n model.cv.sections[sectionKey] = processedEntries;\n model.cv._rendercvSections.push({\n title: applyStringProcessors(section.title, stringProcessors) as string,\n entryType: section.entryType,\n entries: processedEntries,\n });\n }\n\n return model;\n}\n\nfunction enrichCvContactFields(model: ProcessedRenderCVModel): void {\n const phone = model.cv.phone;\n if (phone) {\n model.cv.phone = Array.isArray(phone)\n ? phone.map((entry) => formatPhoneNumber(String(entry), 'INTERNATIONAL'))\n : formatPhoneNumber(String(phone), 'INTERNATIONAL');\n }\n\n const website = model.cv.website;\n if (website) {\n model.cv.website = Array.isArray(website)\n ? website.map((entry) => normalizeHttpUrl(String(entry)))\n : normalizeHttpUrl(String(website));\n }\n\n const networks = model.cv.social_networks as\n | Array<{ network: string; username: string; url?: string }>\n | undefined;\n if (networks) {\n model.cv.social_networks = networks.map((network) => ({\n ...network,\n url: buildSocialNetworkUrl(network.network, network.username),\n }));\n }\n}\n\nexport function processFields(entry: unknown, stringProcessors: StringProcessor[]): unknown {\n const skipped = new Set(['start_date', 'end_date', 'doi', 'url']);\n\n if (typeof entry === 'string') {\n return applyStringProcessors(entry, stringProcessors);\n }\n\n if (entry == null || typeof entry !== 'object') {\n return entry;\n }\n\n const record = entry as Record<string, unknown>;\n for (const [field, value] of Object.entries(record)) {\n if (skipped.has(field) || field.startsWith('_')) {\n continue;\n }\n if (typeof value === 'string') {\n record[field] = applyStringProcessors(value, stringProcessors);\n } else if (Array.isArray(value)) {\n record[field] = value.map((item) =>\n typeof item === 'string' ? applyStringProcessors(item, stringProcessors) : item,\n );\n } else if (value != null) {\n record[field] = applyStringProcessors(String(value), stringProcessors);\n }\n }\n return record;\n}\n","<!DOCTYPE html>\n<html lang=\"{{ locale.language_iso_639_1 }}\">\n\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n <title>\n {{ title }}\n </title>\n <link rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown-light.min.css\"\n integrity=\"sha512-Pmhg2i/F7+5+7SsdoUqKeH7UAZoVMYb1sxGOoJ0jWXAEHP0XV2H4CITyK267eHWp2jpj7rtqWNkmEOw1tNyYpg==\"\n crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\" />\n <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/katex@0.16.12/dist/katex.min.css\" integrity=\"sha384-PDbUeNCuE6bOPudPOgFyIUEy3UJawJVwr3XlGO90FIuf5qNIoTLSgOJo/dC2ZXV/\" crossorigin=\"anonymous\">\n\n <!-- The loading of KaTeX is deferred to speed up page rendering -->\n <script defer src=\"https://cdn.jsdelivr.net/npm/katex@0.16.12/dist/katex.min.js\" integrity=\"sha384-VkqWq8xtm5YQk1BBXczQ8/Sx+DlCzF8cuS43bZwmtVXzRFtyLTqTCdP7MKmKo+KN\" crossorigin=\"anonymous\"></script>\n\n <!-- To automatically render math in text elements, include the auto-render extension: -->\n <script defer src=\"https://cdn.jsdelivr.net/npm/katex@0.16.12/dist/contrib/auto-render.min.js\" integrity=\"sha384-hCXGrW6PitJEwbkoStFjeJxv+fSOOQKOPbJxSfM6G5sWZjAyWhXiTIIAmQqnlLlh\" crossorigin=\"anonymous\"\n onload=\"renderMathInElement(document.body, {delimiters: [{ left: '$$', right: '$$', display: false }]});\"></script>\n <style>\n .markdown-body {\n box-sizing: border-box;\n min-width: 200px;\n max-width: 980px;\n margin: 0 auto;\n padding: 45px;\n }\n\n @media (max-width: 767px) {\n .markdown-body {\n padding: 15px;\n }\n }\n </style>\n</head>\n\n<body>\n <article class=\"markdown-body\">\n {{ html_body|indent(8) }}\n </article>\n</body>\n\n</html>","{% if cv.name %}\n# {{ cv.name }}'s CV\n{% endif %}\n\n{% if cv.phone %}\n- Phone: {{cv.phone|replace(\"tel:\", \"\")|replace(\"-\",\" \")}}\n{% endif %}\n{% if cv.email %}\n- Email: [{{cv.email}}](mailto:{{cv.email}})\n{% endif %}\n{% if cv.location %}\n- Location: {{cv.location}}\n{% endif %}\n{% if cv.website %}\n- Website: [{{cv.website|replace(\"https://\",\"\")|replace(\"/\",\"\")}}]({{cv.website}})\n{% endif %}\n{% if cv.social_networks %}\n {% for network in cv.social_networks %}\n- {{network.network}}: [{{network.username}}]({{network.url}})\n {% endfor %}\n{% endif %}\n","# {{section_title}}\n","","- {{entry.bullet}}\n","## {{ (entry.main_column | splitlines)[0] }}\n{%- if design.templates.education_entry.degree_column %}\n\n\n{{ entry.degree_column }}\n\n{% endif -%}\n{% for line in entry.date_and_location_column | splitlines %}\n\n{{ line }}\n\n{% endfor %}\n{% for line in (entry.main_column | splitlines) | slice(1) %}\n{%- if line != \"!!! summary\" -%}{{ line|replace(\" \", \"\") }}\n\n{% endif -%}\n{% endfor %}\n","## {{ (entry.main_column | splitlines)[0] }}\n\n{% for line in entry.date_and_location_column | splitlines %}\n{{ line }}\n\n{% endfor %}\n{% for line in (entry.main_column | splitlines) | slice(1) %}\n{%- if line != \"!!! summary\" -%}{{ line|replace(\" \", \"\") }}\n\n{% endif -%}\n{% endfor %}\n","## {{ (entry.main_column | splitlines)[0] }}\n\n{% for line in entry.date_and_location_column | splitlines %}\n{{ line }}\n\n{% endfor %}\n{% for line in (entry.main_column | splitlines) | slice(1) %}\n{%- if line != \"!!! summary\" -%}{{ line|replace(\" \", \"\") }}\n\n{% endif -%}\n{% endfor %}\n","1. {{entry.number}}\n","{{entry.main_column}}\n","## {{ (entry.main_column | splitlines)[0] }}\n\n{% for line in entry.date_and_location_column | splitlines %}\n{{ line }}\n\n{% endfor %}\n{% for line in (entry.main_column | splitlines) | slice(1) %}\n{%- if line != \"!!! summary\" -%}{{ line|replace(\" \", \"\")|format_markdown_column_line }}\n\n{% endif -%}\n{% endfor %}\n","1. {{entry.reversed_number}}\n","{{entry}}\n","{% macro image() %}\n#pad(left: {{ design.header.photo_space_left }}, right: {{ design.header.photo_space_right }}, image(\"{{ cv.photo_name }}\", width: {{ design.header.photo_width }}))\n{% endmacro %}\n\n{% if cv.photo %}\n{% set photo = \"image(\\\"\" + cv.photo + \"\\\", width: \"+ design.header.photo_width + \")\" %}\n#grid(\n{% if design.header.photo_position == \"left\" %}\n columns: (auto, 1fr),\n{% else %}\n columns: (1fr, auto),\n{% endif %}\n column-gutter: 0cm,\n align: horizon + left,\n{% if design.header.photo_position == \"left\" %}\n [{{ image() }}],\n [\n{% else %}\n [\n{% endif %}\n{% endif %}\n{% if cv.name %}\n= {{ cv.name }}\n{% endif %}\n\n{% if cv.headline %}\n #headline([{{ cv.headline }}])\n\n{% endif %}\n#connections(\n{% for connection in cv._connections %}\n [{{ connection }}],\n{% endfor %}\n)\n{% if cv.photo %}\n{% if design.header.photo_position == \"left\" %}\n ]\n)\n{% else %}\n ],\n [{{ image() }}],\n)\n{% endif %}\n{% endif %}\n","// Import the rendercv function and all the refactored components\n#import \"@preview/rendercv:0.3.0\": *\n\n// Apply the rendercv template with custom configuration\n#show: rendercv.with(\n name: \"{{ cv._plain_name }}\",\n title: \"{{ settings.pdf_title }}\",\n footer: {{ cv._footer }},\n top-note: [ {{ cv._top_note }} ],\n locale-catalog-language: \"{{ locale.language_iso_639_1 }}\",\n text-direction: {% if locale.is_rtl %}rtl{% else %}ltr{% endif %},\n page-size: \"{{ design.page.size }}\",\n page-top-margin: {{ design.page.top_margin }},\n page-bottom-margin: {{ design.page.bottom_margin }},\n page-left-margin: {{ design.page.left_margin }},\n page-right-margin: {{ design.page.right_margin }},\n page-show-footer: {{ design.page.show_footer|lower }},\n page-show-top-note: {{ design.page.show_top_note|lower }},\n colors-body: {{ design.colors.body | as_rgb }},\n colors-name: {{ design.colors.name | as_rgb }},\n colors-headline: {{ design.colors.headline | as_rgb }},\n colors-connections: {{ design.colors.connections | as_rgb }},\n colors-section-titles: {{ design.colors.section_titles | as_rgb }},\n colors-links: {{ design.colors.links | as_rgb }},\n colors-footer: {{ design.colors.footer | as_rgb }},\n colors-top-note: {{ design.colors.top_note | as_rgb }},\n typography-line-spacing: {{ design.typography.line_spacing }},\n typography-alignment: \"{{ design.typography.alignment }}\",\n typography-date-and-location-column-alignment: {{ design.typography.date_and_location_column_alignment }},\n typography-font-family-body: \"{{ design.typography.font_family.body }}\",\n typography-font-family-name: \"{{ design.typography.font_family.name }}\",\n typography-font-family-headline: \"{{ design.typography.font_family.headline }}\",\n typography-font-family-connections: \"{{ design.typography.font_family.connections }}\",\n typography-font-family-section-titles: \"{{ design.typography.font_family.section_titles }}\",\n typography-font-size-body: {{ design.typography.font_size.body }},\n typography-font-size-name: {{ design.typography.font_size.name }},\n typography-font-size-headline: {{ design.typography.font_size.headline }},\n typography-font-size-connections: {{ design.typography.font_size.connections }},\n typography-font-size-section-titles: {{ design.typography.font_size.section_titles }},\n typography-small-caps-name: {{ design.typography.small_caps.name|lower }},\n typography-small-caps-headline: {{ design.typography.small_caps.headline|lower }},\n typography-small-caps-connections: {{ design.typography.small_caps.connections|lower }},\n typography-small-caps-section-titles: {{ design.typography.small_caps.section_titles|lower }},\n typography-bold-name: {{ design.typography.bold.name|lower }},\n typography-bold-headline: {{ design.typography.bold.headline|lower }},\n typography-bold-connections: {{ design.typography.bold.connections|lower }},\n typography-bold-section-titles: {{ design.typography.bold.section_titles|lower }},\n links-underline: {{ design.links.underline|lower }},\n links-show-external-link-icon: {{ design.links.show_external_link_icon|lower }},\n header-alignment: {{ design.header.alignment }},\n header-photo-width: {{ design.header.photo_width }},\n header-space-below-name: {{ design.header.space_below_name }},\n header-space-below-headline: {{ design.header.space_below_headline }},\n header-space-below-connections: {{ design.header.space_below_connections }},\n header-connections-hyperlink: {{ design.header.connections.hyperlink|lower }},\n header-connections-show-icons: {{ design.header.connections.show_icons|lower }},\n header-connections-display-urls-instead-of-usernames: {{ design.header.connections.display_urls_instead_of_usernames|lower }},\n header-connections-separator: \"{{ design.header.connections.separator }}\",\n header-connections-space-between-connections: {{ design.header.connections.space_between_connections }},\n section-titles-type: \"{{ design.section_titles.type }}\",\n section-titles-line-thickness: {{ design.section_titles.line_thickness }},\n section-titles-space-above: {{ design.section_titles.space_above }},\n section-titles-space-below: {{ design.section_titles.space_below }},\n sections-allow-page-break: {{ design.sections.allow_page_break|lower }},\n sections-space-between-text-based-entries: {{ design.sections.space_between_text_based_entries }},\n sections-space-between-regular-entries: {{ design.sections.space_between_regular_entries }},\n entries-date-and-location-width: {{ design.entries.date_and_location_width }},\n entries-side-space: {{ design.entries.side_space }},\n entries-space-between-columns: {{ design.entries.space_between_columns }},\n entries-allow-page-break: {{ design.entries.allow_page_break|lower }},\n entries-short-second-row: {{ design.entries.short_second_row|lower }},\n entries-degree-width: {{ design.entries.degree_width }},\n entries-summary-space-left: {{ design.entries.summary.space_left }},\n entries-summary-space-above: {{ design.entries.summary.space_above }},\n entries-highlights-bullet: {% if design.entries.highlights.bullet == \"●\" %} text(13pt, [•], baseline: -0.6pt) {% else %} \"{{ design.entries.highlights.bullet }}\" {% endif %},\n entries-highlights-nested-bullet: {% if design.entries.highlights.nested_bullet == \"●\" %} text(13pt, [•], baseline: -0.6pt) {% else %} \"{{ design.entries.highlights.nested_bullet }}\" {% endif %},\n entries-highlights-space-left: {{ design.entries.highlights.space_left }},\n entries-highlights-space-above: {{ design.entries.highlights.space_above }},\n entries-highlights-space-between-items: {{ design.entries.highlights.space_between_items }},\n entries-highlights-space-between-bullet-and-text: {{ design.entries.highlights.space_between_bullet_and_text }},\n date: datetime(\n year: {{ settings._resolved_current_date.year }},\n month: {{ settings._resolved_current_date.month }},\n day: {{ settings._resolved_current_date.day }},\n ),\n)\n","== {{section_title}}\n{% if entry_type in [\"ReversedNumberedEntry\"] %}\n\n#reversed-numbered-entries(\n [\n{% endif %}\n","{% if entry_type in [\"ReversedNumberedEntry\"] %}\n ],\n)\n{% endif %}\n","- {{entry.bullet}}\n","{% if not design.entries.short_second_row %}\n{% set first_row_lines = (entry.date_and_location_column | splitlines | length) %}\n{% if first_row_lines == 0 %} {% set first_row_lines = 1 %} {% endif %}\n{% else %}\n{% set first_row_lines = (entry.main_column | splitlines | length) %}\n{% endif %}\n#education-entry(\n [\n{% for line in (entry.main_column | splitlines) | slice(0, first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n [\n{% for line in entry.date_and_location_column | splitlines %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% if design.templates.education_entry.degree_column %}\n degree-column: [\n {{ entry.degree_column|indent(4) }}\n ],\n{% endif %}\n{% if not design.entries.short_second_row %}\n main-column-second-row: [\n{% for line in (entry.main_column | splitlines) | slice(first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% endif %}\n)\n","{% if not design.entries.short_second_row %}\n{% set first_row_lines = (entry.date_and_location_column | splitlines | length) %}\n{% if first_row_lines == 0 %} {% set first_row_lines = 1 %} {% endif %}\n{% else %}\n{% set first_row_lines = (entry.main_column | splitlines | length) %}\n{% endif %}\n#regular-entry(\n [\n{% for line in (entry.main_column | splitlines) | slice(0, first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n [\n{% for line in entry.date_and_location_column | splitlines %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% if not design.entries.short_second_row %}\n main-column-second-row: [\n{% for line in (entry.main_column | splitlines) | slice(first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% endif %}\n)\n","{% if not design.entries.short_second_row %}\n{% set first_row_lines = (entry.date_and_location_column | splitlines | length) %}\n{% if first_row_lines == 0 %} {% set first_row_lines = 1 %} {% endif %}\n{% else %}\n{% set first_row_lines = (entry.main_column | splitlines | length) %}\n{% endif %}\n#regular-entry(\n [\n{% for line in (entry.main_column | splitlines) | slice(0, first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n [\n{% for line in entry.date_and_location_column | splitlines %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% if not design.entries.short_second_row %}\n main-column-second-row: [\n{% for line in (entry.main_column | splitlines) | slice(first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% endif %}\n)\n","+ {{entry.number}}\n","{{entry.main_column}}\n","{% if not design.entries.short_second_row %}\n{% set first_row_lines = (entry.date_and_location_column | splitlines | length) %}\n{% if first_row_lines == 0 %} {% set first_row_lines = 1 %} {% endif %}\n{% else %}\n{% set first_row_lines = (entry.main_column | splitlines | length) %}\n{% endif %}\n#regular-entry(\n [\n{% for line in (entry.main_column | splitlines) | slice(0, first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n [\n{% for line in entry.date_and_location_column | splitlines %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% if not design.entries.short_second_row %}\n main-column-second-row: [\n{% for line in (entry.main_column | splitlines) | slice(first_row_lines) %}\n {{ line|indent(4) }}\n\n{% endfor %}\n ],\n{% endif %}\n)\n","+ {{entry.reversed_number}}\n","{{entry}}\n","/**\n * Bundled Nunjucks templates — imported as raw strings at build time.\n */\nimport htmlFull from './templates/html/Full.html?raw';\n\nimport mdHeader from './templates/markdown/Header.j2.md?raw';\nimport mdSectionBeginning from './templates/markdown/SectionBeginning.j2.md?raw';\nimport mdSectionEnding from './templates/markdown/SectionEnding.j2.md?raw';\nimport mdBulletEntry from './templates/markdown/entries/BulletEntry.j2.md?raw';\nimport mdEducationEntry from './templates/markdown/entries/EducationEntry.j2.md?raw';\nimport mdExperienceEntry from './templates/markdown/entries/ExperienceEntry.j2.md?raw';\nimport mdNormalEntry from './templates/markdown/entries/NormalEntry.j2.md?raw';\nimport mdNumberedEntry from './templates/markdown/entries/NumberedEntry.j2.md?raw';\nimport mdOneLineEntry from './templates/markdown/entries/OneLineEntry.j2.md?raw';\nimport mdPublicationEntry from './templates/markdown/entries/PublicationEntry.j2.md?raw';\nimport mdReversedNumberedEntry from './templates/markdown/entries/ReversedNumberedEntry.j2.md?raw';\nimport mdTextEntry from './templates/markdown/entries/TextEntry.j2.md?raw';\n\nimport typstHeader from './templates/typst/Header.j2.typ?raw';\nimport typstPreamble from './templates/typst/Preamble.j2.typ?raw';\nimport typstSectionBeginning from './templates/typst/SectionBeginning.j2.typ?raw';\nimport typstSectionEnding from './templates/typst/SectionEnding.j2.typ?raw';\nimport typstBulletEntry from './templates/typst/entries/BulletEntry.j2.typ?raw';\nimport typstEducationEntry from './templates/typst/entries/EducationEntry.j2.typ?raw';\nimport typstExperienceEntry from './templates/typst/entries/ExperienceEntry.j2.typ?raw';\nimport typstNormalEntry from './templates/typst/entries/NormalEntry.j2.typ?raw';\nimport typstNumberedEntry from './templates/typst/entries/NumberedEntry.j2.typ?raw';\nimport typstOneLineEntry from './templates/typst/entries/OneLineEntry.j2.typ?raw';\nimport typstPublicationEntry from './templates/typst/entries/PublicationEntry.j2.typ?raw';\nimport typstReversedNumberedEntry from './templates/typst/entries/ReversedNumberedEntry.j2.typ?raw';\nimport typstTextEntry from './templates/typst/entries/TextEntry.j2.typ?raw';\n\nexport const BUILTIN_TEMPLATES: Record<string, string> = {\n 'html/Full.html': htmlFull,\n\n 'markdown/Header.j2.md': mdHeader,\n 'markdown/SectionBeginning.j2.md': mdSectionBeginning,\n 'markdown/SectionEnding.j2.md': mdSectionEnding,\n 'markdown/entries/BulletEntry.j2.md': mdBulletEntry,\n 'markdown/entries/EducationEntry.j2.md': mdEducationEntry,\n 'markdown/entries/ExperienceEntry.j2.md': mdExperienceEntry,\n 'markdown/entries/NormalEntry.j2.md': mdNormalEntry,\n 'markdown/entries/NumberedEntry.j2.md': mdNumberedEntry,\n 'markdown/entries/OneLineEntry.j2.md': mdOneLineEntry,\n 'markdown/entries/PublicationEntry.j2.md': mdPublicationEntry,\n 'markdown/entries/ReversedNumberedEntry.j2.md': mdReversedNumberedEntry,\n 'markdown/entries/TextEntry.j2.md': mdTextEntry,\n\n 'typst/Header.j2.typ': typstHeader,\n 'typst/Preamble.j2.typ': typstPreamble,\n 'typst/SectionBeginning.j2.typ': typstSectionBeginning,\n 'typst/SectionEnding.j2.typ': typstSectionEnding,\n 'typst/entries/BulletEntry.j2.typ': typstBulletEntry,\n 'typst/entries/EducationEntry.j2.typ': typstEducationEntry,\n 'typst/entries/ExperienceEntry.j2.typ': typstExperienceEntry,\n 'typst/entries/NormalEntry.j2.typ': typstNormalEntry,\n 'typst/entries/NumberedEntry.j2.typ': typstNumberedEntry,\n 'typst/entries/OneLineEntry.j2.typ': typstOneLineEntry,\n 'typst/entries/PublicationEntry.j2.typ': typstPublicationEntry,\n 'typst/entries/ReversedNumberedEntry.j2.typ': typstReversedNumberedEntry,\n 'typst/entries/TextEntry.j2.typ': typstTextEntry,\n};\n\nexport function templateKey(\n fileType: 'markdown' | 'typst' | 'html',\n relativeTemplatePath: string,\n): string {\n return `${fileType}/${relativeTemplatePath}`;\n}\n","/**\n * Typst generation — browser port of `typst.py` (returns string, no filesystem).\n */\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport { renderFullTemplate } from './templater/templater';\nimport type { RenderOptions } from './types';\n\nexport function generateTypst(\n rendercvModel: RenderCVModel,\n options?: RenderOptions,\n): string | null {\n if (rendercvModel.settings.render_command.dont_generate_typst) {\n return null;\n }\n return renderFullTemplate(rendercvModel, 'typst', options);\n}\n","/**\n * Markdown generation — browser port of `markdown.py` (returns string, no filesystem).\n */\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport { renderFullTemplate } from './templater/templater';\nimport type { RenderOptions } from './types';\n\nexport function generateMarkdown(\n rendercvModel: RenderCVModel,\n options?: RenderOptions,\n): string | null {\n if (rendercvModel.settings.render_command.dont_generate_markdown) {\n return null;\n }\n return renderFullTemplate(rendercvModel, 'markdown', options);\n}\n","/**\n * HTML generation — browser port of `html.py` (returns string, no filesystem).\n */\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport { prepareForRender, renderFullTemplate, renderHtml } from './templater/templater';\nimport type { RenderOptions } from './types';\n\nexport function generateHtml(rendercvModel: RenderCVModel, options?: RenderOptions): string | null {\n if (rendercvModel.settings.render_command.dont_generate_html) {\n return null;\n }\n\n const processed = prepareForRender(rendercvModel, 'markdown', options);\n const markdown = renderFullTemplate(rendercvModel, 'markdown', options, processed);\n return renderHtml(rendercvModel, markdown, options, processed);\n}\n","/**\n * Shared photo resolution for Typst compilation.\n */\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport type { RenderOptions } from './types';\nimport { decodeAssetBytes } from './typst_setup';\n\nexport interface ResolvedPhoto {\n photoName: string | null;\n photoBytes: Uint8Array | null;\n}\n\nexport function resolvePhoto(model: RenderCVModel, options?: RenderOptions): ResolvedPhoto {\n const photo = model.cv.photo;\n if (!photo) {\n return { photoName: null, photoBytes: null };\n }\n\n const photoPath = photo.replace(/\\\\/g, '/');\n const photoName = photoPath.split('/').pop() ?? photoPath;\n\n const assetValue = options?.assets?.[photo];\n if (assetValue) {\n return { photoName, photoBytes: decodeAssetBytes(assetValue) };\n }\n\n if (/^https?:\\/\\//i.test(photo)) {\n return { photoName: null, photoBytes: null };\n }\n\n return { photoName, photoBytes: null };\n}\n","/**\n * Main-thread facade for optional PDF Web Worker compilation.\n */\nimport type { RenderCVModel } from '../../schema/models/rendercv_model';\nimport type { RenderOptions } from '../types';\nimport type { PdfWorkerRequest, PdfWorkerResponse } from './pdf_worker';\n\nlet worker: Worker | null = null;\nlet nextRequestId = 1;\n\nfunction getPdfWorker(): Worker | null {\n if (typeof Worker === 'undefined') {\n return null;\n }\n if (!worker) {\n worker = new Worker(new URL('./renderer/worker/pdf_worker.js', import.meta.url), {\n type: 'module',\n });\n }\n return worker;\n}\n\nexport async function compilePdfViaWorker(\n typstSource: string,\n model: RenderCVModel,\n _options?: RenderOptions,\n photo?: { photoName: string | null; photoBytes: Uint8Array | null },\n): Promise<Uint8Array | null> {\n // Bundlers (e.g. Next.js) cannot load Typst WASM inside a module worker without\n // extra setup. Main-thread compilation is used instead.\n if (typeof window !== 'undefined') {\n return null;\n }\n\n const pdfWorker = getPdfWorker();\n if (!pdfWorker) {\n return null;\n }\n\n const id = nextRequestId++;\n const request: PdfWorkerRequest = {\n type: 'compile-pdf',\n id,\n typstSource,\n model,\n photoName: photo?.photoName ?? null,\n photoBytes: photo?.photoBytes ?? null,\n };\n\n return new Promise((resolve, reject) => {\n const onMessage = (event: MessageEvent<PdfWorkerResponse>) => {\n const data = event.data;\n if (data.id !== id) {\n return;\n }\n pdfWorker.removeEventListener('message', onMessage);\n if (data.type === 'compile-pdf-result') {\n resolve(data.pdf);\n return;\n }\n reject(new Error(data.message));\n };\n pdfWorker.addEventListener('message', onMessage);\n pdfWorker.postMessage(request);\n });\n}\n","/**\n * PDF / PNG generation via Typst WASM — browser port of `pdf_png.py`.\n */\nimport { RenderCVInternalError } from '../schema/error-handling';\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport { resolvePhoto } from './photo';\nimport type { RenderOptions } from './types';\nimport { generateTypst } from './typst';\nimport { compilePdfViaWorker } from './worker/pdf_worker_facade';\n\ntype CanvasLike = HTMLCanvasElement & {\n toBuffer?: (mimeType: string) => Uint8Array;\n};\n\ntype TypstArtifactFormat = 'pdf' | 'vector';\n\ndeclare global {\n var __rendercvRasterizeSvgToPng:\n | ((\n svg: string,\n widthPx: number,\n heightPx: number,\n backgroundColor: string,\n ) => Promise<Uint8Array>)\n | undefined;\n}\n\nasync function canvasToPngBytes(canvas: CanvasLike): Promise<Uint8Array> {\n if (typeof canvas.toBlob === 'function') {\n const blob = await new Promise<Blob | null>((resolve) => {\n canvas.toBlob(resolve, 'image/png');\n });\n if (!blob) {\n throw new RenderCVInternalError('Canvas toBlob returned null for PNG export');\n }\n return new Uint8Array(await blob.arrayBuffer());\n }\n if (typeof canvas.toBuffer === 'function') {\n return canvas.toBuffer('image/png');\n }\n throw new RenderCVInternalError('PNG export requires a canvas with toBlob or toBuffer');\n}\n\nasync function rasterizeSvgToPng(\n svg: string,\n widthPx: number,\n heightPx: number,\n backgroundColor = '#ffffff',\n): Promise<Uint8Array> {\n if (typeof globalThis.__rendercvRasterizeSvgToPng === 'function') {\n return globalThis.__rendercvRasterizeSvgToPng(svg, widthPx, heightPx, backgroundColor);\n }\n\n const canvas = document.createElement('canvas') as CanvasLike;\n canvas.width = widthPx;\n canvas.height = heightPx;\n const context = canvas.getContext('2d');\n if (!context) {\n throw new RenderCVInternalError('Canvas 2D context is unavailable for PNG export');\n }\n\n context.fillStyle = backgroundColor;\n context.fillRect(0, 0, widthPx, heightPx);\n\n const blob = new Blob([svg], { type: 'image/svg+xml;charset=utf-8' });\n const image = new Image();\n const url = URL.createObjectURL(blob);\n try {\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = () =>\n reject(new RenderCVInternalError('Failed to rasterize SVG for PNG export'));\n image.src = url;\n });\n context.drawImage(image, 0, 0, widthPx, heightPx);\n } finally {\n URL.revokeObjectURL(url);\n }\n\n const bytes = await canvasToPngBytes(canvas);\n if (!bytes.length) {\n throw new RenderCVInternalError('SVG rasterization returned empty PNG bytes');\n }\n return bytes;\n}\n\nfunction pageSvgWindow(pages: { width: number; height: number }[], pageIndex: number) {\n let yOffset = 0;\n for (let index = 0; index < pageIndex; index++) {\n yOffset += pages[index]!.height;\n }\n const page = pages[pageIndex]!;\n return {\n lo: { x: 0, y: yOffset },\n hi: { x: page.width, y: yOffset + page.height },\n };\n}\n\nexport type PreviewPageSvg = {\n svg: string;\n widthPt: number;\n heightPt: number;\n};\n\nasync function compilePageSvgs(\n typstSource: string,\n model: RenderCVModel,\n options?: RenderOptions,\n): Promise<PreviewPageSvg[]> {\n const vector = await compileTypstArtifact('vector', typstSource, model, options);\n const { getTypstRuntime } = await import('./typst_setup.js');\n const { renderer } = await getTypstRuntime();\n\n const pages: PreviewPageSvg[] = [];\n await renderer.runWithSession({ format: 'vector', artifactContent: vector }, async (session) => {\n const pageInfos = renderer.retrievePagesInfoFromSession(session);\n for (const [pageIndex, page] of pageInfos.entries()) {\n const svg =\n pageInfos.length === 1\n ? await renderer.renderSvg({ renderSession: session })\n : renderer.renderSvgDiff({\n renderSession: session,\n window: pageSvgWindow(pageInfos, pageIndex),\n });\n pages.push({ svg, widthPt: page.width, heightPt: page.height });\n }\n });\n\n return pages;\n}\n\nasync function compileTypstArtifact(\n format: TypstArtifactFormat,\n typstSource: string,\n model: RenderCVModel,\n options?: RenderOptions,\n): Promise<Uint8Array> {\n const photo = resolvePhoto(model, options);\n\n if (format === 'pdf' && typeof Worker !== 'undefined') {\n try {\n const workerPdf = await compilePdfViaWorker(typstSource, model, options, photo);\n if (workerPdf) {\n return workerPdf;\n }\n } catch {\n // Fall back to main-thread compile.\n }\n }\n\n const { prepareTypstCompilation, TYPST_ROOT } = await import('./typst_setup.js');\n const { compiler, mainFilePath } = await prepareTypstCompilation(typstSource, {\n photoName: photo.photoName,\n photoBytes: photo.photoBytes,\n model,\n });\n\n return compiler.runWithWorld({ mainFilePath, root: TYPST_ROOT }, async (world) => {\n const result =\n format === 'pdf'\n ? await world.pdf({ diagnostics: 'full' })\n : await world.vector({ diagnostics: 'full' });\n if (!result.result?.length) {\n const message =\n result.diagnostics?.map((d) => ('message' in d ? d.message : String(d))).join('\\n') ??\n `Typst compiler returned empty ${format} bytes`;\n throw new RenderCVInternalError(message);\n }\n return result.result;\n });\n}\n\nexport async function generatePdf(\n rendercvModel: RenderCVModel,\n options?: RenderOptions,\n): Promise<Uint8Array | null> {\n if (rendercvModel.settings.render_command.dont_generate_pdf) {\n return null;\n }\n\n const typstSource = generateTypst(rendercvModel, options);\n if (typstSource == null) {\n return null;\n }\n\n return compileTypstArtifact('pdf', typstSource, rendercvModel, options);\n}\n\n/** SVG pages for in-app preview (vector render — no PDF viewer chrome). */\nexport async function generatePageSvgs(\n rendercvModel: RenderCVModel,\n options?: RenderOptions,\n): Promise<PreviewPageSvg[] | null> {\n if (rendercvModel.settings.render_command.dont_generate_typst) {\n return null;\n }\n\n const typstSource = generateTypst(rendercvModel, options);\n if (typstSource == null) {\n return null;\n }\n\n const pages = await compilePageSvgs(typstSource, rendercvModel, options);\n return pages.length > 0 ? pages : null;\n}\n\nexport async function generatePng(\n rendercvModel: RenderCVModel,\n options?: RenderOptions,\n): Promise<Uint8Array[] | null> {\n if (rendercvModel.settings.render_command.dont_generate_png) {\n return null;\n }\n\n const typstSource = generateTypst(rendercvModel, options);\n if (typstSource == null) {\n return null;\n }\n\n const svgPages = await compilePageSvgs(typstSource, rendercvModel, options);\n const pngPages: Uint8Array[] = [];\n const pixelPerPt = 3;\n for (const page of svgPages) {\n const widthPx = Math.ceil(page.widthPt * pixelPerPt);\n const heightPx = Math.ceil(page.heightPt * pixelPerPt);\n pngPages.push(await rasterizeSvgToPng(page.svg, widthPx, heightPx));\n }\n\n return pngPages.length > 0 ? pngPages : null;\n}\n","/**\n * Path placeholder expansion — browser port of `path_resolver.py` (no filesystem).\n */\nimport type { RenderCVModel } from '../schema/models/rendercv_model';\nimport { buildDatePlaceholders, dateObjectToString } from './templater/date';\nimport { substitutePlaceholders } from './templater/string_processor';\n\nexport function buildNameVariants(name: string | null | undefined): Record<string, string> {\n if (name == null) {\n return {};\n }\n return {\n NAME: name,\n NAME_IN_SNAKE_CASE: name.replace(/ /g, '_'),\n NAME_IN_LOWER_SNAKE_CASE: name.replace(/ /g, '_').toLowerCase(),\n NAME_IN_UPPER_SNAKE_CASE: name.replace(/ /g, '_').toUpperCase(),\n NAME_IN_KEBAB_CASE: name.replace(/ /g, '-'),\n NAME_IN_LOWER_KEBAB_CASE: name.replace(/ /g, '-').toLowerCase(),\n NAME_IN_UPPER_KEBAB_CASE: name.replace(/ /g, '-').toUpperCase(),\n };\n}\n\nexport function resolveOutputFolderPlaceholder(filePath: string, outputFolder: string): string {\n const normalized = filePath.replace(/\\\\/g, '/');\n const outputNormalized = outputFolder.replace(/\\\\/g, '/').replace(/\\/+$/, '');\n const parts = normalized.split('/');\n const idx = parts.indexOf('OUTPUT_FOLDER');\n if (idx === -1) {\n return normalized;\n }\n const suffixParts = parts.slice(idx + 1);\n if (suffixParts.length === 0) {\n return outputNormalized;\n }\n return `${outputNormalized}/${suffixParts.join('/')}`;\n}\n\nexport function resolveRendercvFilePath(rendercvModel: RenderCVModel, filePath: string): string {\n const outputFolder = rendercvModel.settings.render_command.output_folder;\n const withFolder = resolveOutputFolderPlaceholder(filePath, outputFolder);\n\n const currentDate = rendercvModel.settings._resolvedCurrentDate;\n const filePathPlaceholders: Record<string, string> = {\n ...buildDatePlaceholders(currentDate, rendercvModel.locale),\n ...buildNameVariants(rendercvModel.cv.name),\n CURRENT_DATE: dateObjectToString(\n currentDate,\n rendercvModel.locale,\n rendercvModel.design.templates.single_date,\n ),\n };\n\n const lastSlash = Math.max(withFolder.lastIndexOf('/'), withFolder.lastIndexOf('\\\\'));\n const dir = lastSlash >= 0 ? withFolder.slice(0, lastSlash + 1) : '';\n const fileName = lastSlash >= 0 ? withFolder.slice(lastSlash + 1) : withFolder;\n const resolvedFileName = substitutePlaceholders(fileName, filePathPlaceholders);\n return `${dir}${resolvedFileName}`.replace(/\\\\/g, '/');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["existsSync","path","isNodeRuntime","existsSync","path","import_meta","loadBundledFontPaths","isNodeRuntime","path","path","fetchTypstFontBytes","loadBundledFontPaths","clearFontCache","configureDefaultAssets","loadFontsForTypst","modelFontCacheKey","loadBaseFontsForTypst","clearFontCache","util","objectUtil","path","errorUtil","path","errorMap","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","import_yaml","document","path","node","parseYaml","path","path","entry","entry","entry","import_yaml","parseYaml","import_yaml","parseYaml","path","parsePhoneNumberFromString","howManyYears","localeYears","entry","entry","Header_j2_default","SectionBeginning_j2_default","SectionEnding_j2_default","BulletEntry_j2_default","EducationEntry_j2_default","ExperienceEntry_j2_default","NormalEntry_j2_default","NumberedEntry_j2_default","OneLineEntry_j2_default","PublicationEntry_j2_default","ReversedNumberedEntry_j2_default","TextEntry_j2_default","Header_j2_default","SectionBeginning_j2_default","SectionEnding_j2_default","BulletEntry_j2_default","EducationEntry_j2_default","ExperienceEntry_j2_default","NormalEntry_j2_default","NumberedEntry_j2_default","OneLineEntry_j2_default","PublicationEntry_j2_default","ReversedNumberedEntry_j2_default","TextEntry_j2_default","nunjucks","entry","import_meta","getTypstRuntime","prepareTypstCompilation","TYPST_ROOT"]}
|