@intlayer/core 8.11.1 → 8.11.2
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/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs +0 -1
- package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs +0 -1
- package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs.map +1 -1
- package/dist/cjs/formatters/compact.cjs +0 -1
- package/dist/cjs/formatters/compact.cjs.map +1 -1
- package/dist/cjs/formatters/currency.cjs +0 -1
- package/dist/cjs/formatters/currency.cjs.map +1 -1
- package/dist/cjs/formatters/date.cjs +0 -1
- package/dist/cjs/formatters/date.cjs.map +1 -1
- package/dist/cjs/formatters/list.cjs +0 -1
- package/dist/cjs/formatters/list.cjs.map +1 -1
- package/dist/cjs/formatters/number.cjs +0 -1
- package/dist/cjs/formatters/number.cjs.map +1 -1
- package/dist/cjs/formatters/percentage.cjs +0 -1
- package/dist/cjs/formatters/percentage.cjs.map +1 -1
- package/dist/cjs/formatters/relativeTime.cjs +0 -1
- package/dist/cjs/formatters/relativeTime.cjs.map +1 -1
- package/dist/cjs/formatters/units.cjs +0 -1
- package/dist/cjs/formatters/units.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/interpreter/getCondition.cjs.map +1 -1
- package/dist/cjs/interpreter/getContent/getContent.cjs +0 -1
- package/dist/cjs/interpreter/getContent/getContent.cjs.map +1 -1
- package/dist/cjs/interpreter/getDictionary.cjs.map +1 -1
- package/dist/cjs/interpreter/getEnumeration.cjs.map +1 -1
- package/dist/cjs/interpreter/getGender.cjs.map +1 -1
- package/dist/cjs/interpreter/getIntlayer.cjs +0 -1
- package/dist/cjs/interpreter/getIntlayer.cjs.map +1 -1
- package/dist/cjs/interpreter/getNesting.cjs.map +1 -1
- package/dist/cjs/interpreter/getPlural.cjs.map +1 -1
- package/dist/cjs/interpreter/getTranslation.cjs.map +1 -1
- package/dist/cjs/localization/getBrowserLocale.cjs +0 -1
- package/dist/cjs/localization/getBrowserLocale.cjs.map +1 -1
- package/dist/cjs/localization/getLocale.cjs +0 -1
- package/dist/cjs/localization/getLocale.cjs.map +1 -1
- package/dist/cjs/localization/getLocalizedUrl.cjs +0 -1
- package/dist/cjs/localization/getLocalizedUrl.cjs.map +1 -1
- package/dist/cjs/localization/getPathWithoutLocale.cjs +0 -1
- package/dist/cjs/localization/getPathWithoutLocale.cjs.map +1 -1
- package/dist/cjs/localization/getPrefix.cjs +0 -1
- package/dist/cjs/localization/getPrefix.cjs.map +1 -1
- package/dist/cjs/localization/localeMapper.cjs +0 -1
- package/dist/cjs/localization/localeMapper.cjs.map +1 -1
- package/dist/cjs/localization/localeResolver.cjs +0 -1
- package/dist/cjs/localization/localeResolver.cjs.map +1 -1
- package/dist/cjs/markdown/compiler.cjs +53 -31
- package/dist/cjs/markdown/compiler.cjs.map +1 -1
- package/dist/cjs/markdown/index.cjs +2 -0
- package/dist/cjs/transpiler/condition/condition.cjs +0 -1
- package/dist/cjs/transpiler/condition/condition.cjs.map +1 -1
- package/dist/cjs/transpiler/enumeration/enumeration.cjs +0 -1
- package/dist/cjs/transpiler/enumeration/enumeration.cjs.map +1 -1
- package/dist/cjs/transpiler/file/file.cjs +0 -1
- package/dist/cjs/transpiler/file/file.cjs.map +1 -1
- package/dist/cjs/transpiler/gender/gender.cjs +0 -1
- package/dist/cjs/transpiler/gender/gender.cjs.map +1 -1
- package/dist/cjs/transpiler/html/html.cjs +0 -1
- package/dist/cjs/transpiler/html/html.cjs.map +1 -1
- package/dist/cjs/transpiler/insertion/insertion.cjs +0 -1
- package/dist/cjs/transpiler/insertion/insertion.cjs.map +1 -1
- package/dist/cjs/transpiler/markdown/markdown.cjs +0 -1
- package/dist/cjs/transpiler/markdown/markdown.cjs.map +1 -1
- package/dist/cjs/transpiler/nesting/nesting.cjs +0 -1
- package/dist/cjs/transpiler/nesting/nesting.cjs.map +1 -1
- package/dist/cjs/transpiler/plural/plural.cjs +0 -1
- package/dist/cjs/transpiler/plural/plural.cjs.map +1 -1
- package/dist/cjs/transpiler/translation/translation.cjs +0 -1
- package/dist/cjs/transpiler/translation/translation.cjs.map +1 -1
- package/dist/cjs/utils/intl.cjs +0 -1
- package/dist/cjs/utils/intl.cjs.map +1 -1
- package/dist/cjs/utils/localeStorage.cjs +0 -1
- package/dist/cjs/utils/localeStorage.cjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/interpreter/getCondition.mjs.map +1 -1
- package/dist/esm/interpreter/getContent/getContent.mjs.map +1 -1
- package/dist/esm/interpreter/getDictionary.mjs.map +1 -1
- package/dist/esm/interpreter/getEnumeration.mjs.map +1 -1
- package/dist/esm/interpreter/getGender.mjs.map +1 -1
- package/dist/esm/interpreter/getIntlayer.mjs.map +1 -1
- package/dist/esm/interpreter/getNesting.mjs.map +1 -1
- package/dist/esm/interpreter/getPlural.mjs.map +1 -1
- package/dist/esm/interpreter/getTranslation.mjs.map +1 -1
- package/dist/esm/markdown/compiler.mjs +44 -24
- package/dist/esm/markdown/compiler.mjs.map +1 -1
- package/dist/esm/markdown/index.mjs +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/interpreter/getCondition.d.ts +1 -1
- package/dist/types/interpreter/getCondition.d.ts.map +1 -1
- package/dist/types/interpreter/getContent/getContent.d.ts +1 -1
- package/dist/types/interpreter/getContent/getContent.d.ts.map +1 -1
- package/dist/types/interpreter/getDictionary.d.ts +1 -1
- package/dist/types/interpreter/getDictionary.d.ts.map +1 -1
- package/dist/types/interpreter/getEnumeration.d.ts +2 -2
- package/dist/types/interpreter/getEnumeration.d.ts.map +1 -1
- package/dist/types/interpreter/getGender.d.ts +1 -1
- package/dist/types/interpreter/getGender.d.ts.map +1 -1
- package/dist/types/interpreter/getIntlayer.d.ts +1 -1
- package/dist/types/interpreter/getIntlayer.d.ts.map +1 -1
- package/dist/types/interpreter/getNesting.d.ts +1 -1
- package/dist/types/interpreter/getNesting.d.ts.map +1 -1
- package/dist/types/interpreter/getPlural.d.ts +1 -1
- package/dist/types/interpreter/getPlural.d.ts.map +1 -1
- package/dist/types/interpreter/getTranslation.d.ts +1 -1
- package/dist/types/interpreter/getTranslation.d.ts.map +1 -1
- package/dist/types/localization/getPrefix.d.ts +5 -5
- package/dist/types/localization/getPrefix.d.ts.map +1 -1
- package/dist/types/markdown/compiler.d.ts +12 -1
- package/dist/types/markdown/compiler.d.ts.map +1 -1
- package/dist/types/markdown/index.d.ts +2 -2
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPathWithoutLocale.cjs","names":["internationalization","checkIsURLAbsolute"],"sources":["../../../src/localization/getPathWithoutLocale.ts"],"sourcesContent":["import { internationalization } from '@intlayer/config/built';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\n/**\n * True when the build-time routing mode is known and is not a prefix-based\n * mode (neither 'prefix-all' nor 'prefix-no-default').\n */\nconst TREE_SHAKE_PREFIX_MODES =\n process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-all' &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-no-default';\n\n/**\n * True when the build-time routing mode is known and is NOT 'search-params'.\n */\nconst TREE_SHAKE_SEARCH_PARAMS =\n process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'search-params';\n\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { checkIsURLAbsolute } from '../utils/checkIsURLAbsolute';\n\n/**\n * Removes the locale segment from the given URL or pathname if present.\n * Also removes locale from search parameters if present.\n *\n * This function get the locales from the configuration if not provided.\n *\n * Example:\n *\n * ```ts\n * getPathWithoutLocale('/en/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('/fr/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('dashboard') // Returns 'dashboard'\n * getPathWithoutLocale('/dashboard?locale=fr') // Returns '/dashboard'\n * getPathWithoutLocale('https://example.com/en/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/fr/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/dashboard?locale=fr') // Returns 'https://example.com/dashboard'\n * ```\n *\n * @param inputUrl - The complete URL string or pathname to process.\n * @param locales - Optional array of supported locales. Defaults to `localesDefault`.\n * @returns The URL string or pathname without the locale segment or locale search parameter.\n */\nexport const getPathWithoutLocale = (\n inputUrl: string,\n locales: LocalesValues[] = internationalization?.locales\n): string => {\n // Determine if the original URL is absolute (includes protocol)\n const isAbsoluteUrl = checkIsURLAbsolute(inputUrl);\n\n let fixedInputUrl = inputUrl;\n\n if (inputUrl?.endsWith('/')) {\n fixedInputUrl = inputUrl.slice(0, -1);\n }\n\n // Initialize a URL object if the URL is absolute\n // For relative URLs, use a dummy base to leverage the URL API\n const url = isAbsoluteUrl\n ? new URL(fixedInputUrl)\n : new URL(fixedInputUrl, 'http://example.com');\n\n const pathname = url.pathname;\n\n // Ensure the pathname starts with '/'\n if (!pathname.startsWith('/')) {\n // If not, return the URL as is\n url.pathname = `/${pathname}`;\n }\n\n // Only strip locale path prefix in prefix-based routing modes\n if (!TREE_SHAKE_PREFIX_MODES) {\n // Split the pathname to extract the first segment\n const pathSegments = pathname.split('/');\n const firstSegment = pathSegments[1]; // The segment after the first '/'\n\n // Check if the first segment is a supported locale\n if (locales?.includes(firstSegment as LocalesValues)) {\n // Remove the locale segment from the pathname\n pathSegments.splice(1, 1); // Remove the first segment\n\n // Reconstruct the pathname\n const newPathname = pathSegments.join('/') ?? '/';\n url.pathname = newPathname;\n }\n }\n\n // Only strip locale from search parameters in search-params routing mode\n if (!TREE_SHAKE_SEARCH_PARAMS) {\n const searchParams = new URLSearchParams(url.search);\n if (searchParams.has('locale')) {\n searchParams.delete('locale');\n url.search = searchParams.toString();\n }\n }\n\n if (isAbsoluteUrl) {\n // Return the modified URL as a string\n return url.toString();\n }\n\n // Return the modified URL as a string\n return url.toString().replace('http://example.com', '');\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getPathWithoutLocale.cjs","names":["internationalization","checkIsURLAbsolute"],"sources":["../../../src/localization/getPathWithoutLocale.ts"],"sourcesContent":["import { internationalization } from '@intlayer/config/built';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\n/**\n * True when the build-time routing mode is known and is not a prefix-based\n * mode (neither 'prefix-all' nor 'prefix-no-default').\n */\nconst TREE_SHAKE_PREFIX_MODES =\n process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-all' &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-no-default';\n\n/**\n * True when the build-time routing mode is known and is NOT 'search-params'.\n */\nconst TREE_SHAKE_SEARCH_PARAMS =\n process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'search-params';\n\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { checkIsURLAbsolute } from '../utils/checkIsURLAbsolute';\n\n/**\n * Removes the locale segment from the given URL or pathname if present.\n * Also removes locale from search parameters if present.\n *\n * This function get the locales from the configuration if not provided.\n *\n * Example:\n *\n * ```ts\n * getPathWithoutLocale('/en/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('/fr/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('/dashboard') // Returns '/dashboard'\n * getPathWithoutLocale('dashboard') // Returns 'dashboard'\n * getPathWithoutLocale('/dashboard?locale=fr') // Returns '/dashboard'\n * getPathWithoutLocale('https://example.com/en/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/fr/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/dashboard') // Returns 'https://example.com/dashboard'\n * getPathWithoutLocale('https://example.com/dashboard?locale=fr') // Returns 'https://example.com/dashboard'\n * ```\n *\n * @param inputUrl - The complete URL string or pathname to process.\n * @param locales - Optional array of supported locales. Defaults to `localesDefault`.\n * @returns The URL string or pathname without the locale segment or locale search parameter.\n */\nexport const getPathWithoutLocale = (\n inputUrl: string,\n locales: LocalesValues[] = internationalization?.locales\n): string => {\n // Determine if the original URL is absolute (includes protocol)\n const isAbsoluteUrl = checkIsURLAbsolute(inputUrl);\n\n let fixedInputUrl = inputUrl;\n\n if (inputUrl?.endsWith('/')) {\n fixedInputUrl = inputUrl.slice(0, -1);\n }\n\n // Initialize a URL object if the URL is absolute\n // For relative URLs, use a dummy base to leverage the URL API\n const url = isAbsoluteUrl\n ? new URL(fixedInputUrl)\n : new URL(fixedInputUrl, 'http://example.com');\n\n const pathname = url.pathname;\n\n // Ensure the pathname starts with '/'\n if (!pathname.startsWith('/')) {\n // If not, return the URL as is\n url.pathname = `/${pathname}`;\n }\n\n // Only strip locale path prefix in prefix-based routing modes\n if (!TREE_SHAKE_PREFIX_MODES) {\n // Split the pathname to extract the first segment\n const pathSegments = pathname.split('/');\n const firstSegment = pathSegments[1]; // The segment after the first '/'\n\n // Check if the first segment is a supported locale\n if (locales?.includes(firstSegment as LocalesValues)) {\n // Remove the locale segment from the pathname\n pathSegments.splice(1, 1); // Remove the first segment\n\n // Reconstruct the pathname\n const newPathname = pathSegments.join('/') ?? '/';\n url.pathname = newPathname;\n }\n }\n\n // Only strip locale from search parameters in search-params routing mode\n if (!TREE_SHAKE_SEARCH_PARAMS) {\n const searchParams = new URLSearchParams(url.search);\n if (searchParams.has('locale')) {\n searchParams.delete('locale');\n url.search = searchParams.toString();\n }\n }\n\n if (isAbsoluteUrl) {\n // Return the modified URL as a string\n return url.toString();\n }\n\n // Return the modified URL as a string\n return url.toString().replace('http://example.com', '');\n};\n"],"mappings":";;;;;;;;;AAUA,MAAM,0BACJ,QAAQ,IAAI,4BACZ,QAAQ,IAAI,6BAA6B,gBACzC,QAAQ,IAAI,6BAA6B;;;;AAK3C,MAAM,2BACJ,QAAQ,IAAI,4BACZ,QAAQ,IAAI,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;AA6B3C,MAAa,wBACX,UACA,UAA2BA,6CAAsB,YACtC;CAEX,MAAM,gBAAgBC,oDAAmB,QAAQ;CAEjD,IAAI,gBAAgB;CAEpB,IAAI,UAAU,SAAS,GAAG,GACxB,gBAAgB,SAAS,MAAM,GAAG,EAAE;CAKtC,MAAM,MAAM,gBACR,IAAI,IAAI,aAAa,IACrB,IAAI,IAAI,eAAe,oBAAoB;CAE/C,MAAM,WAAW,IAAI;CAGrB,IAAI,CAAC,SAAS,WAAW,GAAG,GAE1B,IAAI,WAAW,IAAI;CAIrB,IAAI,CAAC,yBAAyB;EAE5B,MAAM,eAAe,SAAS,MAAM,GAAG;EACvC,MAAM,eAAe,aAAa;EAGlC,IAAI,SAAS,SAAS,YAA6B,GAAG;GAEpD,aAAa,OAAO,GAAG,CAAC;GAIxB,IAAI,WADgB,aAAa,KAAK,GAAG,KAAK;EAEhD;CACF;CAGA,IAAI,CAAC,0BAA0B;EAC7B,MAAM,eAAe,IAAI,gBAAgB,IAAI,MAAM;EACnD,IAAI,aAAa,IAAI,QAAQ,GAAG;GAC9B,aAAa,OAAO,QAAQ;GAC5B,IAAI,SAAS,aAAa,SAAS;EACrC;CACF;CAEA,IAAI,eAEF,OAAO,IAAI,SAAS;CAItB,OAAO,IAAI,SAAS,EAAE,QAAQ,sBAAsB,EAAE;AACxD"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
2
|
let _intlayer_config_built = require("@intlayer/config/built");
|
|
4
3
|
let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
|
|
5
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPrefix.cjs","names":["internationalization","DEFAULT_LOCALE","routing","ROUTING_MODE","LOCALES"],"sources":["../../../src/localization/getPrefix.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport {\n DEFAULT_LOCALE,\n LOCALES,\n ROUTING_MODE,\n} from '@intlayer/config/defaultValues';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { RoutingConfig } from '@intlayer/types/config';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\n/**\n * Shared routing options used across all URL localization functions.\n */\nexport type RoutingOptions = {\n locales?: LocalesValues[];\n defaultLocale?: LocalesValues;\n mode?: RoutingConfig['mode'];\n rewrite?: RoutingConfig['rewrite'];\n domains?: RoutingConfig['domains'];\n /**\n * The hostname of the page currently being rendered (e.g. `'intlayer.org'`).\n * When provided, `getLocalizedUrl` returns a relative URL for locales whose\n * configured domain matches `currentDomain`, and an absolute URL only when\n * the target locale lives on a different domain.\n *\n * When omitted the function tries to infer it from:\n * 1. The domain of an absolute input URL.\n * 2. `window.location.hostname` in browser environments.\n * Falls back to always generating absolute URLs when neither is available.\n */\n currentDomain?: string;\n};\n\n/**\n * Resolves routing configuration by merging provided options with configuration defaults.\n * Single source of truth for default routing config resolution across all localization functions.\n */\nexport const resolveRoutingConfig = (options: RoutingOptions = {}) => ({\n defaultLocale: internationalization?.defaultLocale ?? DEFAULT_LOCALE,\n mode: routing?.mode ?? ROUTING_MODE,\n locales: internationalization?.locales ?? LOCALES,\n rewrite: routing?.rewrite,\n domains: routing?.domains,\n ...options,\n});\n\nexport type GetPrefixOptions = {\n defaultLocale?: LocalesValues;\n mode?: RoutingConfig['mode'];\n};\n\nexport type GetPrefixResult = {\n /**\n * The complete base URL path with leading and trailing slashes.\n *\n * @example\n * // https://example.com/fr/about -> '/fr'\n * // https://example.com/about -> ''\n */\n prefix: string;\n /**\n * The locale identifier without slashes.\n *\n * @example\n * // https://example.com/fr/about -> 'fr'\n * // https://example.com/about -> undefined\n */\n localePrefix: Locale | undefined;\n};\n\n/**\n * Determines the URL prefix for a given locale based on the routing mode configuration.\n *\n * Example:\n *\n * ```ts\n * // prefix-no-default mode with default locale\n * getPrefix('en', { defaultLocale: 'en', mode: 'prefix-no-default' })\n * // Returns { prefix: '', localePrefix: undefined }\n *\n * // prefix-no-default mode with non-default locale\n * getPrefix('fr', { defaultLocale: 'en', mode: 'prefix-no-default' })\n * // Returns { prefix: '/fr', localePrefix: 'fr' }\n *\n * // prefix-all mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'prefix-all' })\n * // Returns { prefix: '/en', localePrefix: locale }\n *\n * // search-params mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'search-params' })\n * // Returns { prefix: '', localePrefix: undefined }\n *\n * // no-prefix mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'no-prefix' })\n * // Returns { prefix: '', localePrefix: undefined }\n * ```\n *\n * @param locale - The locale to check for prefix. If not provided, uses configured default locale.\n * @param options - Configuration options\n * @param options.defaultLocale - The default locale. Defaults to configured default locale.\n * @param options.mode - URL routing mode for locale handling. Defaults to configured mode.\n * @returns An object containing pathPrefix, prefix, and localePrefix for the given locale.\n */\nexport const getPrefix = (\n locale: LocalesValues | undefined,\n options: RoutingOptions = {}\n): GetPrefixResult => {\n const { defaultLocale, mode, locales, domains } =\n resolveRoutingConfig(options);\n\n if (\n (process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-all' &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-no-default') ||\n !locale ||\n !locales.includes(locale)\n ) {\n return {\n prefix: '',\n localePrefix: undefined,\n };\n }\n\n // If this locale is the only one assigned to its domain, no URL prefix is needed\n // (the domain itself identifies the locale). Shared domains use normal prefix logic.\n if (process.env['INTLAYER_ROUTING_DOMAINS'] !== 'false' && domains) {\n const localeDomain = domains[locale as LocalesValues];\n\n if (localeDomain) {\n const localesOnSameDomain = Object.values(domains).filter(\n (domain) => domain === localeDomain\n ).length;\n\n if (localesOnSameDomain === 1) {\n return {\n prefix: '',\n localePrefix: undefined,\n };\n }\n }\n }\n\n // Handle prefix-based modes (prefix-all or prefix-no-default)\n const shouldPrefix =\n mode === 'prefix-all' ||\n (mode === 'prefix-no-default' && defaultLocale !== locale);\n\n if (shouldPrefix) {\n return {\n prefix: `${locale}/`,\n localePrefix: locale as Locale,\n };\n }\n\n return {\n prefix: '',\n localePrefix: undefined,\n };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getPrefix.cjs","names":["internationalization","DEFAULT_LOCALE","routing","ROUTING_MODE","LOCALES"],"sources":["../../../src/localization/getPrefix.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport {\n DEFAULT_LOCALE,\n LOCALES,\n ROUTING_MODE,\n} from '@intlayer/config/defaultValues';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { RoutingConfig } from '@intlayer/types/config';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\n/**\n * Shared routing options used across all URL localization functions.\n */\nexport type RoutingOptions = {\n locales?: LocalesValues[];\n defaultLocale?: LocalesValues;\n mode?: RoutingConfig['mode'];\n rewrite?: RoutingConfig['rewrite'];\n domains?: RoutingConfig['domains'];\n /**\n * The hostname of the page currently being rendered (e.g. `'intlayer.org'`).\n * When provided, `getLocalizedUrl` returns a relative URL for locales whose\n * configured domain matches `currentDomain`, and an absolute URL only when\n * the target locale lives on a different domain.\n *\n * When omitted the function tries to infer it from:\n * 1. The domain of an absolute input URL.\n * 2. `window.location.hostname` in browser environments.\n * Falls back to always generating absolute URLs when neither is available.\n */\n currentDomain?: string;\n};\n\n/**\n * Resolves routing configuration by merging provided options with configuration defaults.\n * Single source of truth for default routing config resolution across all localization functions.\n */\nexport const resolveRoutingConfig = (options: RoutingOptions = {}) => ({\n defaultLocale: internationalization?.defaultLocale ?? DEFAULT_LOCALE,\n mode: routing?.mode ?? ROUTING_MODE,\n locales: internationalization?.locales ?? LOCALES,\n rewrite: routing?.rewrite,\n domains: routing?.domains,\n ...options,\n});\n\nexport type GetPrefixOptions = {\n defaultLocale?: LocalesValues;\n mode?: RoutingConfig['mode'];\n};\n\nexport type GetPrefixResult = {\n /**\n * The complete base URL path with leading and trailing slashes.\n *\n * @example\n * // https://example.com/fr/about -> '/fr'\n * // https://example.com/about -> ''\n */\n prefix: string;\n /**\n * The locale identifier without slashes.\n *\n * @example\n * // https://example.com/fr/about -> 'fr'\n * // https://example.com/about -> undefined\n */\n localePrefix: Locale | undefined;\n};\n\n/**\n * Determines the URL prefix for a given locale based on the routing mode configuration.\n *\n * Example:\n *\n * ```ts\n * // prefix-no-default mode with default locale\n * getPrefix('en', { defaultLocale: 'en', mode: 'prefix-no-default' })\n * // Returns { prefix: '', localePrefix: undefined }\n *\n * // prefix-no-default mode with non-default locale\n * getPrefix('fr', { defaultLocale: 'en', mode: 'prefix-no-default' })\n * // Returns { prefix: '/fr', localePrefix: 'fr' }\n *\n * // prefix-all mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'prefix-all' })\n * // Returns { prefix: '/en', localePrefix: locale }\n *\n * // search-params mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'search-params' })\n * // Returns { prefix: '', localePrefix: undefined }\n *\n * // no-prefix mode\n * getPrefix('en', { defaultLocale: 'en', mode: 'no-prefix' })\n * // Returns { prefix: '', localePrefix: undefined }\n * ```\n *\n * @param locale - The locale to check for prefix. If not provided, uses configured default locale.\n * @param options - Configuration options\n * @param options.defaultLocale - The default locale. Defaults to configured default locale.\n * @param options.mode - URL routing mode for locale handling. Defaults to configured mode.\n * @returns An object containing pathPrefix, prefix, and localePrefix for the given locale.\n */\nexport const getPrefix = (\n locale: LocalesValues | undefined,\n options: RoutingOptions = {}\n): GetPrefixResult => {\n const { defaultLocale, mode, locales, domains } =\n resolveRoutingConfig(options);\n\n if (\n (process.env['INTLAYER_ROUTING_MODE'] &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-all' &&\n process.env['INTLAYER_ROUTING_MODE'] !== 'prefix-no-default') ||\n !locale ||\n !locales.includes(locale)\n ) {\n return {\n prefix: '',\n localePrefix: undefined,\n };\n }\n\n // If this locale is the only one assigned to its domain, no URL prefix is needed\n // (the domain itself identifies the locale). Shared domains use normal prefix logic.\n if (process.env['INTLAYER_ROUTING_DOMAINS'] !== 'false' && domains) {\n const localeDomain = domains[locale as LocalesValues];\n\n if (localeDomain) {\n const localesOnSameDomain = Object.values(domains).filter(\n (domain) => domain === localeDomain\n ).length;\n\n if (localesOnSameDomain === 1) {\n return {\n prefix: '',\n localePrefix: undefined,\n };\n }\n }\n }\n\n // Handle prefix-based modes (prefix-all or prefix-no-default)\n const shouldPrefix =\n mode === 'prefix-all' ||\n (mode === 'prefix-no-default' && defaultLocale !== locale);\n\n if (shouldPrefix) {\n return {\n prefix: `${locale}/`,\n localePrefix: locale as Locale,\n };\n }\n\n return {\n prefix: '',\n localePrefix: undefined,\n };\n};\n"],"mappings":";;;;;;;;;AA0CA,MAAa,wBAAwB,UAA0B,CAAC,OAAO;CACrE,eAAeA,6CAAsB,iBAAiBC;CACtD,MAAMC,gCAAS,QAAQC;CACvB,SAASH,6CAAsB,WAAWI;CAC1C,SAASF,gCAAS;CAClB,SAASA,gCAAS;CAClB,GAAG;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,MAAa,aACX,QACA,UAA0B,CAAC,MACP;CACpB,MAAM,EAAE,eAAe,MAAM,SAAS,YACpC,qBAAqB,OAAO;CAE9B,IACG,QAAQ,IAAI,4BACX,QAAQ,IAAI,6BAA6B,gBACzC,QAAQ,IAAI,6BAA6B,uBAC3C,CAAC,UACD,CAAC,QAAQ,SAAS,MAAM,GAExB,OAAO;EACL,QAAQ;EACR,cAAc;CAChB;CAKF,IAAI,QAAQ,IAAI,gCAAgC,WAAW,SAAS;EAClE,MAAM,eAAe,QAAQ;EAE7B,IAAI,cAKF;OAJ4B,OAAO,OAAO,OAAO,EAAE,QAChD,WAAW,WAAW,YACzB,EAAE,WAE0B,GAC1B,OAAO;IACL,QAAQ;IACR,cAAc;GAChB;EACF;CAEJ;CAOA,IAHE,SAAS,gBACR,SAAS,uBAAuB,kBAAkB,QAGnD,OAAO;EACL,QAAQ,GAAG,OAAO;EAClB,cAAc;CAChB;CAGF,OAAO;EACL,QAAQ;EACR,cAAc;CAChB;AACF"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
2
|
const require_localization_getPrefix = require('./getPrefix.cjs');
|
|
4
3
|
let _intlayer_config_built = require("@intlayer/config/built");
|
|
5
4
|
let _intlayer_config_defaultValues = require("@intlayer/config/defaultValues");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeMapper.cjs","names":["internationalization","DEFAULT_LOCALE","routing","getPrefix"],"sources":["../../../src/localization/localeMapper.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport { DEFAULT_LOCALE } from '@intlayer/config/defaultValues';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { getPrefix } from './getPrefix';\n\nexport type LocaleData = {\n locale: Locale;\n defaultLocale: Locale;\n isDefault: boolean;\n locales: Locale[];\n urlPrefix: string;\n};\n\n/**\n * Map the locale data to an array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * ({\n * path: localizedData.urlPrefix,\n * name: localizedData.locale,\n * isDefault: localizedData.isDefault,\n * locales: localizedData.locales,\n * defaultLocale: localizedData.defaultLocale,\n * }),\n * );\n *\n * // Result\n * [\n * { path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' },\n * { path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' },\n * { path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' },\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an object\n * @returns An array of objects\n */\nexport const localeMap = <T>(\n mapper: (locale: LocaleData) => T,\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): T[] =>\n (locales ?? []).map((locale) =>\n mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData)\n );\n\n/**\n * Flatten the locale map into a single array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * [{\n * path: localizedData.urlPrefix,\n * name: localizedData.locale,\n * isDefault: localizedData.isDefault,\n * locales: localizedData.locales,\n * defaultLocale: localizedData.defaultLocale,\n * }],\n * );\n *\n * // Result\n * [\n * path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' ,\n * path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' ,\n * path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' ,\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an array of objects\n * @returns An array of objects\n */\nexport const localeFlatMap = <T>(\n mapper: (locale: LocaleData) => T[],\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): T[] =>\n locales.flatMap((locale) =>\n mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData)\n );\n\n/**\n * Creates a record object mapping locales to values transformed by the mapper function\n *\n * @example\n * ```ts\n * const translations = localeRecord(({ locale }) =>\n * require(`./translations/${locale}.json`)\n * );\n *\n * // Result\n *\n * en: ... , // Content of translations/en.json\n * fr: ... , // Content of translations/fr.json\n * es: ...\n *\n * ```\n *\n * @param mapper - Function that takes locale data and returns a value for that locale\n * @param locales - Array of locale codes to map over (defaults to configured locales)\n * @param defaultLocale - The default locale (defaults to configured default)\n * @param mode - URL routing mode for locale handling (defaults to configured value)\n * @returns Record mapping locale codes to mapped values\n */\nexport const localeRecord = <T>(\n mapper: (locale: LocaleData) => T,\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): Record<LocalesValues, T> =>\n (locales ?? []).reduce(\n (acc, locale) => {\n acc[locale] = mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData);\n return acc;\n },\n {} as Record<LocalesValues, T>\n );\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"localeMapper.cjs","names":["internationalization","DEFAULT_LOCALE","routing","getPrefix"],"sources":["../../../src/localization/localeMapper.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport { DEFAULT_LOCALE } from '@intlayer/config/defaultValues';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { getPrefix } from './getPrefix';\n\nexport type LocaleData = {\n locale: Locale;\n defaultLocale: Locale;\n isDefault: boolean;\n locales: Locale[];\n urlPrefix: string;\n};\n\n/**\n * Map the locale data to an array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * ({\n * path: localizedData.urlPrefix,\n * name: localizedData.locale,\n * isDefault: localizedData.isDefault,\n * locales: localizedData.locales,\n * defaultLocale: localizedData.defaultLocale,\n * }),\n * );\n *\n * // Result\n * [\n * { path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' },\n * { path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' },\n * { path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' },\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an object\n * @returns An array of objects\n */\nexport const localeMap = <T>(\n mapper: (locale: LocaleData) => T,\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): T[] =>\n (locales ?? []).map((locale) =>\n mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData)\n );\n\n/**\n * Flatten the locale map into a single array of objects\n *\n * @example\n * ```ts\n * const routes = localeMap((localizedData) =>\n * [{\n * path: localizedData.urlPrefix,\n * name: localizedData.locale,\n * isDefault: localizedData.isDefault,\n * locales: localizedData.locales,\n * defaultLocale: localizedData.defaultLocale,\n * }],\n * );\n *\n * // Result\n * [\n * path: '/', name: 'en', isDefault: true, locales: ['en'], defaultLocale: 'en', urlPrefix: '' ,\n * path: '/fr', name: 'fr', isDefault: false, locales: ['fr'], defaultLocale: 'en', urlPrefix: '/fr' ,\n * path: '/es', name: 'es', isDefault: false, locales: ['es'], defaultLocale: 'en', urlPrefix: '/es' ,\n * ]\n * ```\n *\n * @param mapper - The mapper function that returns an array of objects\n * @returns An array of objects\n */\nexport const localeFlatMap = <T>(\n mapper: (locale: LocaleData) => T[],\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): T[] =>\n locales.flatMap((locale) =>\n mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData)\n );\n\n/**\n * Creates a record object mapping locales to values transformed by the mapper function\n *\n * @example\n * ```ts\n * const translations = localeRecord(({ locale }) =>\n * require(`./translations/${locale}.json`)\n * );\n *\n * // Result\n *\n * en: ... , // Content of translations/en.json\n * fr: ... , // Content of translations/fr.json\n * es: ...\n *\n * ```\n *\n * @param mapper - Function that takes locale data and returns a value for that locale\n * @param locales - Array of locale codes to map over (defaults to configured locales)\n * @param defaultLocale - The default locale (defaults to configured default)\n * @param mode - URL routing mode for locale handling (defaults to configured value)\n * @returns Record mapping locale codes to mapped values\n */\nexport const localeRecord = <T>(\n mapper: (locale: LocaleData) => T,\n locales: LocalesValues[] = internationalization.locales ?? [],\n defaultLocale: LocalesValues = internationalization.defaultLocale ??\n DEFAULT_LOCALE,\n mode:\n | 'prefix-no-default'\n | 'prefix-all'\n | 'no-prefix'\n | 'search-params' = routing?.mode ?? 'prefix-no-default'\n): Record<LocalesValues, T> =>\n (locales ?? []).reduce(\n (acc, locale) => {\n acc[locale] = mapper({\n locale,\n defaultLocale,\n locales,\n isDefault: locale === defaultLocale,\n urlPrefix: getPrefix(locale, { defaultLocale, mode, locales })\n .localePrefix\n ? `/${locale}`\n : '',\n } as LocaleData);\n return acc;\n },\n {} as Record<LocalesValues, T>\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAa,aACX,QACA,UAA2BA,4CAAqB,WAAW,CAAC,GAC5D,gBAA+BA,4CAAqB,iBAClDC,+CACF,OAIsBC,gCAAS,QAAQ,yBAEtC,WAAW,CAAC,GAAG,KAAK,WACnB,OAAO;CACL;CACA;CACA;CACA,WAAW,WAAW;CACtB,WAAWC,yCAAU,QAAQ;EAAE;EAAe;EAAM;CAAQ,CAAC,EAC1D,eACC,IAAI,WACJ;AACN,CAAe,CACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BF,MAAa,iBACX,QACA,UAA2BH,4CAAqB,WAAW,CAAC,GAC5D,gBAA+BA,4CAAqB,iBAClDC,+CACF,OAIsBC,gCAAS,QAAQ,wBAEvC,QAAQ,SAAS,WACf,OAAO;CACL;CACA;CACA;CACA,WAAW,WAAW;CACtB,WAAWC,yCAAU,QAAQ;EAAE;EAAe;EAAM;CAAQ,CAAC,EAC1D,eACC,IAAI,WACJ;AACN,CAAe,CACjB;;;;;;;;;;;;;;;;;;;;;;;;AAyBF,MAAa,gBACX,QACA,UAA2BH,4CAAqB,WAAW,CAAC,GAC5D,gBAA+BA,4CAAqB,iBAClDC,+CACF,OAIsBC,gCAAS,QAAQ,yBAEtC,WAAW,CAAC,GAAG,QACb,KAAK,WAAW;CACf,IAAI,UAAU,OAAO;EACnB;EACA;EACA;EACA,WAAW,WAAW;EACtB,WAAWC,yCAAU,QAAQ;GAAE;GAAe;GAAM;EAAQ,CAAC,EAC1D,eACC,IAAI,WACJ;CACN,CAAe;CACf,OAAO;AACT,GACA,CAAC,CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localeResolver.cjs","names":["internationalization"],"sources":["../../../src/localization/localeResolver.ts"],"sourcesContent":["import { internationalization } from '@intlayer/config/built';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\n/**\n * Resolves the most specific locale from a user-provided list,\n * or falls back to the default locale if no match is found.\n */\nexport const localeResolver = (\n selectedLocale: LocalesValues | LocalesValues[],\n locales: LocalesValues[] = internationalization?.locales,\n defaultLocale: LocalesValues = internationalization?.defaultLocale\n): Locale => {\n // Ensure we can handle both a single locale or an array of locales uniformly\n const requestedLocales = [selectedLocale].flat();\n\n // Simple helper to normalize locale strings (e.g. \"en-US\" => \"en-us\")\n const normalize = (locale: string): string => locale.trim().toLowerCase();\n\n try {\n // Check each requested locale in order\n for (const requested of requestedLocales) {\n const normalizedRequested = normalize(requested);\n\n // Attempt exact match\n const exactMatch = locales.find(\n (locale) => normalize(locale) === normalizedRequested\n );\n if (exactMatch) {\n return exactMatch as Locale;\n }\n\n // Attempt partial match on language subtag\n // e.g. if requested is \"en-US\" and not found,\n // see if \"en\" is available among locales\n const [requestedLang] = normalizedRequested.split('-');\n const partialMatch = locales.find(\n (locale) => normalize(locale).split('-')[0] === requestedLang\n );\n if (partialMatch) {\n return partialMatch as Locale;\n }\n }\n } catch {\n // If anything unexpected happened, fall back to default\n }\n\n // If no match was found, return the default\n return defaultLocale as Locale;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"localeResolver.cjs","names":["internationalization"],"sources":["../../../src/localization/localeResolver.ts"],"sourcesContent":["import { internationalization } from '@intlayer/config/built';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\n\n/**\n * Resolves the most specific locale from a user-provided list,\n * or falls back to the default locale if no match is found.\n */\nexport const localeResolver = (\n selectedLocale: LocalesValues | LocalesValues[],\n locales: LocalesValues[] = internationalization?.locales,\n defaultLocale: LocalesValues = internationalization?.defaultLocale\n): Locale => {\n // Ensure we can handle both a single locale or an array of locales uniformly\n const requestedLocales = [selectedLocale].flat();\n\n // Simple helper to normalize locale strings (e.g. \"en-US\" => \"en-us\")\n const normalize = (locale: string): string => locale.trim().toLowerCase();\n\n try {\n // Check each requested locale in order\n for (const requested of requestedLocales) {\n const normalizedRequested = normalize(requested);\n\n // Attempt exact match\n const exactMatch = locales.find(\n (locale) => normalize(locale) === normalizedRequested\n );\n if (exactMatch) {\n return exactMatch as Locale;\n }\n\n // Attempt partial match on language subtag\n // e.g. if requested is \"en-US\" and not found,\n // see if \"en\" is available among locales\n const [requestedLang] = normalizedRequested.split('-');\n const partialMatch = locales.find(\n (locale) => normalize(locale).split('-')[0] === requestedLang\n );\n if (partialMatch) {\n return partialMatch as Locale;\n }\n }\n } catch {\n // If anything unexpected happened, fall back to default\n }\n\n // If no match was found, return the default\n return defaultLocale as Locale;\n};\n"],"mappings":";;;;;;;;AAQA,MAAa,kBACX,gBACA,UAA2BA,6CAAsB,SACjD,gBAA+BA,6CAAsB,kBAC1C;CAEX,MAAM,mBAAmB,CAAC,cAAc,EAAE,KAAK;CAG/C,MAAM,aAAa,WAA2B,OAAO,KAAK,EAAE,YAAY;CAExE,IAAI;EAEF,KAAK,MAAM,aAAa,kBAAkB;GACxC,MAAM,sBAAsB,UAAU,SAAS;GAG/C,MAAM,aAAa,QAAQ,MACxB,WAAW,UAAU,MAAM,MAAM,mBACpC;GACA,IAAI,YACF,OAAO;GAMT,MAAM,CAAC,iBAAiB,oBAAoB,MAAM,GAAG;GACrD,MAAM,eAAe,QAAQ,MAC1B,WAAW,UAAU,MAAM,EAAE,MAAM,GAAG,EAAE,OAAO,aAClD;GACA,IAAI,cACF,OAAO;EAEX;CACF,QAAQ,CAER;CAGA,OAAO;AACT"}
|
|
@@ -227,7 +227,6 @@ const createRules = (createElement, ctx, options, footnotes, refs, attrStringToM
|
|
|
227
227
|
const attrs = { ...node.attrs ?? {} };
|
|
228
228
|
const langClass = node.lang ? `lang-${node.lang}` : "lang-plaintext";
|
|
229
229
|
attrs.className = attrs.className ? `${attrs.className} ${langClass}` : langClass;
|
|
230
|
-
if (node.lang && !attrs.lang) attrs.lang = node.lang;
|
|
231
230
|
return createElement("pre", { key: state.key }, createElement("code", attrs, node.text));
|
|
232
231
|
}
|
|
233
232
|
},
|
|
@@ -697,20 +696,8 @@ const createRules = (createElement, ctx, options, footnotes, refs, attrStringToM
|
|
|
697
696
|
}
|
|
698
697
|
};
|
|
699
698
|
};
|
|
700
|
-
const
|
|
701
|
-
const
|
|
702
|
-
const slug = (input) => {
|
|
703
|
-
if (process.env.NODE_ENV === "test" && input === "中文") {
|
|
704
|
-
const def = require_markdown_utils.slugify(input);
|
|
705
|
-
console.log("Slug check:", {
|
|
706
|
-
input,
|
|
707
|
-
ctxSlugify: !!ctx.slugify,
|
|
708
|
-
defaultSlugifyResult: def
|
|
709
|
-
});
|
|
710
|
-
}
|
|
711
|
-
return ctx.slugify ? ctx.slugify(input, require_markdown_utils.slugify) : require_markdown_utils.slugify(input);
|
|
712
|
-
};
|
|
713
|
-
const createElement = createElementFactory(ctx, options);
|
|
699
|
+
const parseMarkdown = (markdown = "", ctx, options = {}) => {
|
|
700
|
+
const dummyCreateElement = () => null;
|
|
714
701
|
const footnotes = [];
|
|
715
702
|
const refs = {};
|
|
716
703
|
const attrStringToMap = (tag, str) => {
|
|
@@ -725,7 +712,7 @@ const compile = (markdown = "", ctx, options = {}) => {
|
|
|
725
712
|
const mappedKey = require_markdown_constants.ATTRIBUTE_TO_NODE_PROP_MAP[key] ?? key;
|
|
726
713
|
if (mappedKey === "ref") return map;
|
|
727
714
|
map[mappedKey] = require_markdown_utils.attributeValueToNodePropValue(tag, key, value, ctx.sanitizer ?? require_markdown_utils.sanitizer);
|
|
728
|
-
if (typeof map[mappedKey] === "string" && (require_markdown_constants.HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) || require_markdown_constants.HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))) map[mappedKey] =
|
|
715
|
+
if (typeof map[mappedKey] === "string" && (require_markdown_constants.HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) || require_markdown_constants.HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))) map[mappedKey] = parseMarkdown(map[mappedKey].trim(), ctx, options).ast;
|
|
729
716
|
} else if (raw !== "style") map[require_markdown_constants.ATTRIBUTE_TO_NODE_PROP_MAP[raw] ?? raw] = true;
|
|
730
717
|
return map;
|
|
731
718
|
}, {});
|
|
@@ -754,18 +741,48 @@ const compile = (markdown = "", ctx, options = {}) => {
|
|
|
754
741
|
require_markdown_constants.CUSTOM_COMPONENT_R
|
|
755
742
|
], slice);
|
|
756
743
|
};
|
|
757
|
-
const baseRules = createRules(
|
|
758
|
-
const
|
|
744
|
+
const baseRules = createRules(dummyCreateElement, ctx, options, footnotes, refs, attrStringToMap, containsBlockSyntax, nonParagraphBlockSyntaxes);
|
|
745
|
+
const parser = require_markdown_parser.parserFor(options.disableParsingRawHTML ? Object.keys(baseRules).reduce((acc, key) => {
|
|
759
746
|
if (key !== require_markdown_constants.RuleType.htmlBlock && key !== require_markdown_constants.RuleType.htmlSelfClosing) acc[key] = baseRules[key];
|
|
760
747
|
return acc;
|
|
761
|
-
}, {}) : baseRules;
|
|
762
|
-
const
|
|
763
|
-
const
|
|
764
|
-
const
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
748
|
+
}, {}) : baseRules);
|
|
749
|
+
const result = options.preserveFrontmatter ? markdown : markdown.replace(require_markdown_constants.FRONT_MATTER_R, "");
|
|
750
|
+
const inline = options.forceInline || !options.forceBlock && require_markdown_constants.SHOULD_RENDER_AS_BLOCK_R.test(result.replace(require_markdown_constants.TRIM_STARTING_NEWLINES, "")) === false;
|
|
751
|
+
const ast = parser(inline ? result : `${require_markdown_utils.trimEnd(result).replace(require_markdown_constants.TRIM_STARTING_NEWLINES, "")}\n\n`, { inline });
|
|
752
|
+
if (footnotes.length > 0) for (const def of footnotes) def.parsedAst = parser(def.footnote, { inline: true });
|
|
753
|
+
return {
|
|
754
|
+
ast,
|
|
755
|
+
footnotes,
|
|
756
|
+
inline
|
|
757
|
+
};
|
|
758
|
+
};
|
|
759
|
+
const renderMarkdownAst = (parsed, ctx, options = {}) => {
|
|
760
|
+
const components = ctx.components ?? {};
|
|
761
|
+
const slug = (input) => {
|
|
762
|
+
if (process.env.NODE_ENV === "test" && input === "中文") {
|
|
763
|
+
const def = require_markdown_utils.slugify(input);
|
|
764
|
+
console.log("Slug check:", {
|
|
765
|
+
input,
|
|
766
|
+
ctxSlugify: !!ctx.slugify,
|
|
767
|
+
defaultSlugifyResult: def
|
|
768
|
+
});
|
|
769
|
+
}
|
|
770
|
+
return ctx.slugify ? ctx.slugify(input, require_markdown_utils.slugify) : require_markdown_utils.slugify(input);
|
|
771
|
+
};
|
|
772
|
+
const createElement = createElementFactory(ctx, options);
|
|
773
|
+
const footnotes = parsed.footnotes || [];
|
|
774
|
+
const refs = {};
|
|
775
|
+
const attrStringToMap = () => null;
|
|
776
|
+
const containsBlockSyntax = () => false;
|
|
777
|
+
const baseRules = createRules(createElement, ctx, options, footnotes, refs, attrStringToMap, containsBlockSyntax, []);
|
|
778
|
+
const emitter = require_markdown_renderer.renderFor(require_markdown_renderer.createRenderer(options.disableParsingRawHTML ? Object.keys(baseRules).reduce((acc, key) => {
|
|
779
|
+
if (key !== require_markdown_constants.RuleType.htmlBlock && key !== require_markdown_constants.RuleType.htmlSelfClosing) acc[key] = baseRules[key];
|
|
780
|
+
return acc;
|
|
781
|
+
}, {}) : baseRules, options.renderRule));
|
|
782
|
+
const inline = parsed.inline;
|
|
783
|
+
const arr = emitter(parsed.ast, { inline });
|
|
784
|
+
while (typeof arr[arr.length - 1] === "string" && !arr[arr.length - 1].trim()) arr.pop();
|
|
785
|
+
const getOuterNode = () => {
|
|
769
786
|
if (options.wrapper === null) return arr;
|
|
770
787
|
const wrapper = options.wrapper ?? (inline ? "span" : "div");
|
|
771
788
|
if (arr.length > 1 || options.forceWrapper) return createElement(wrapper, { key: "outer" }, arr);
|
|
@@ -789,15 +806,18 @@ const compile = (markdown = "", ctx, options = {}) => {
|
|
|
789
806
|
}
|
|
790
807
|
return createElement(wrapper, { key: "outer" }, null);
|
|
791
808
|
};
|
|
809
|
+
const node = getOuterNode();
|
|
810
|
+
return footnotes.length ? createElement("div", null, node, createElement("footer", { key: "footer" }, ...footnotes.map((def) => createElement("div", {
|
|
811
|
+
id: slug(def.identifier),
|
|
812
|
+
key: def.identifier
|
|
813
|
+
}, def.identifier, emitter(def.parsedAst || def.footnote, { inline: true }))))) : node;
|
|
814
|
+
};
|
|
815
|
+
const compile = (markdown = "", ctx, options = {}) => {
|
|
792
816
|
if (typeof markdown !== "string") {
|
|
793
817
|
if (process.env.NODE_ENV !== "production") console.error("intlayer: the first argument must be a string. Received", typeof markdown);
|
|
794
818
|
throw new Error("intlayer: the first argument must be a string");
|
|
795
819
|
}
|
|
796
|
-
|
|
797
|
-
return footnotes.length ? createElement("div", null, node, createElement("footer", { key: "footer" }, ...footnotes.map((def) => createElement("div", {
|
|
798
|
-
id: slug(def.identifier),
|
|
799
|
-
key: def.identifier
|
|
800
|
-
}, def.identifier, emitter(parser(def.footnote, { inline: true }), { inline: true }))))) : node;
|
|
820
|
+
return renderMarkdownAst(parseMarkdown(markdown, ctx, options), ctx, options);
|
|
801
821
|
};
|
|
802
822
|
const createCompiler = (ctx) => (markdown, options) => compile(markdown, ctx, options);
|
|
803
823
|
const compileWithOptions = (markdown, runtime, options = {}) => {
|
|
@@ -815,4 +835,6 @@ const compileWithOptions = (markdown, runtime, options = {}) => {
|
|
|
815
835
|
exports.compile = compile;
|
|
816
836
|
exports.compileWithOptions = compileWithOptions;
|
|
817
837
|
exports.createCompiler = createCompiler;
|
|
838
|
+
exports.parseMarkdown = parseMarkdown;
|
|
839
|
+
exports.renderMarkdownAst = renderMarkdownAst;
|
|
818
840
|
//# sourceMappingURL=compiler.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.cjs","names":["get","cx","defaultSlugify","defaultSanitizer","NAMED_CODES_TO_UNICODE","ORDERED_LIST_R","UNORDERED_LIST_R","ORDERED_LIST_ITEM_R","UNORDERED_LIST_ITEM_R","ORDERED_LIST_ITEM_PREFIX_R","UNORDERED_LIST_ITEM_PREFIX_R","allowInline","LIST_LOOKBEHIND_R","Priority","BLOCK_END_R","trimEnd","some","RuleType","blockRegex","BLOCKQUOTE_R","BLOCKQUOTE_TRIM_LEFT_MULTILINE_R","BLOCKQUOTE_ALERT_R","parseBlock","parseInline","anyScopeRegex","BREAK_LINE_R","captureNothing","BREAK_THEMATIC_R","CODE_BLOCK_R","unescapeString","CODE_BLOCK_FENCED_R","simpleInlineRegex","CODE_INLINE_R","FOOTNOTE_R","renderNothing","inlineRegex","FOOTNOTE_REFERENCE_R","GFM_TASK_R","HEADING_ATX_COMPLIANT_R","HEADING_R","HEADING_SETEXT_R","HTML_BLOCK_ELEMENT_R","HTML_LEFT_TRIM_AMOUNT_R","trimLeadingWhitespaceOutsideFences","DO_NOT_PROCESS_HTML_ELEMENTS","HTML_COMMENT_R","HTML_SELF_CLOSING_ELEMENT_R","CUSTOM_COMPONENT_R","parseCaptureInline","parseSimpleInline","LINK_AUTOLINK_R","startsWith","LINK_AUTOLINK_BARE_URL_R","CONSECUTIVE_NEWLINE_R","REFERENCE_IMAGE_OR_LINK","REFERENCE_IMAGE_R","REFERENCE_LINK_R","NP_TABLE_R","parseTableAlign","parseTableCells","parseTableRow","SHORTCODE_R","TEXT_PLAIN_R","HTML_CHAR_CODE_R","TEXT_BOLD_R","TEXT_EMPHASIZED_R","TEXT_ESCAPED_R","TEXT_MARKED_R","TEXT_STRIKETHROUGHED_R","ATTR_EXTRACTOR_R","normalizeAttributeKey","unquote","ATTRIBUTE_TO_NODE_PROP_MAP","attributeValueToNodePropValue","TRIM_STARTING_NEWLINES","PARAGRAPH_R","parserFor","renderFor","createRenderer","FRONT_MATTER_R","SHOULD_RENDER_AS_BLOCK_R"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["import {\n ATTR_EXTRACTOR_R,\n ATTRIBUTE_TO_NODE_PROP_MAP,\n BLOCK_END_R,\n BLOCKQUOTE_ALERT_R,\n BLOCKQUOTE_R,\n BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,\n BREAK_LINE_R,\n BREAK_THEMATIC_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n CODE_INLINE_R,\n CONSECUTIVE_NEWLINE_R,\n CUSTOM_COMPONENT_R,\n DO_NOT_PROCESS_HTML_ELEMENTS,\n FOOTNOTE_R,\n FOOTNOTE_REFERENCE_R,\n FRONT_MATTER_R,\n GFM_TASK_R,\n HEADING_ATX_COMPLIANT_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_CHAR_CODE_R,\n HTML_COMMENT_R,\n HTML_LEFT_TRIM_AMOUNT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LINK_AUTOLINK_BARE_URL_R,\n LINK_AUTOLINK_R,\n LIST_LOOKBEHIND_R,\n type ListType,\n NAMED_CODES_TO_UNICODE,\n NP_TABLE_R,\n ORDERED,\n ORDERED_LIST_ITEM_PREFIX_R,\n ORDERED_LIST_ITEM_R,\n ORDERED_LIST_R,\n PARAGRAPH_R,\n Priority,\n REFERENCE_IMAGE_OR_LINK,\n REFERENCE_IMAGE_R,\n REFERENCE_LINK_R,\n RuleType,\n SHORTCODE_R,\n SHOULD_RENDER_AS_BLOCK_R,\n TEXT_BOLD_R,\n TEXT_EMPHASIZED_R,\n TEXT_ESCAPED_R,\n TEXT_MARKED_R,\n TEXT_PLAIN_R,\n TEXT_STRIKETHROUGHED_R,\n TRIM_STARTING_NEWLINES,\n UNORDERED,\n UNORDERED_LIST_ITEM_PREFIX_R,\n UNORDERED_LIST_ITEM_R,\n UNORDERED_LIST_R,\n} from './constants';\nimport { parserFor } from './parser';\nimport { createRenderer, renderFor } from './renderer';\nimport type {\n CompileOptions,\n ComponentOverrides as ComponentDefinition,\n HeadingNode,\n HTMLTag,\n MarkdownContext,\n MarkdownOptions,\n MarkdownRuntime,\n OrderedListNode,\n ParseState,\n Rule,\n Rules,\n TableNode,\n UnorderedListNode,\n} from './types';\nimport {\n allowInline,\n anyScopeRegex,\n attributeValueToNodePropValue,\n blockRegex,\n captureNothing,\n cx,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n get,\n inlineRegex,\n normalizeAttributeKey,\n parseBlock,\n parseCaptureInline,\n parseInline,\n parseSimpleInline,\n parseTableAlign,\n parseTableCells,\n parseTableRow,\n renderNothing,\n simpleInlineRegex,\n some,\n startsWith,\n trimEnd,\n trimLeadingWhitespaceOutsideFences,\n unescapeString,\n unquote,\n} from './utils';\n\ntype CreateElementFunction = (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n) => unknown;\n\ntype FootnoteDef = { footnote: string; identifier: string };\n\nconst IMAGE_R = /^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/;\nconst LINK_INSIDE =\n '(?:\\\\[[^\\\\[\\\\]]*(?:\\\\[[^\\\\[\\\\]]*\\\\][^\\\\[\\\\]]*)*\\\\]|[^\\\\[\\\\]])*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\nconst LINK_R = new RegExp(\n `^\\\\[(${LINK_INSIDE})\\\\]\\\\(${LINK_HREF_AND_TITLE}\\\\)`\n);\n\nconst getTag = (tag: any, components: ComponentDefinition<any>): any => {\n if (typeof tag !== 'string') return tag;\n let override = get(components, tag);\n\n if (!override && typeof tag === 'string') {\n const lowercaseTag = tag.toLowerCase();\n // Try case-insensitive lookup\n const key = Object.keys(components).find(\n (k) => k.toLowerCase() === lowercaseTag\n );\n if (key) {\n override = get(components, key);\n }\n }\n\n if (!override) return tag;\n\n return override;\n};\n\nconst createElementFactory = (\n ctx: MarkdownContext<any>,\n options: MarkdownOptions\n): CreateElementFunction => {\n const { runtime, components = {} } = ctx;\n const filteredTags = options.tagfilter\n ? [\n 'title',\n 'textarea',\n 'style',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'script',\n 'plaintext',\n ]\n : [];\n\n return (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n ): unknown => {\n if (typeof tag === 'string' && filteredTags.includes(tag.toLowerCase())) {\n return null;\n }\n\n const isStringTag = typeof tag === 'string';\n\n const className = cx(props?.className, props?.class);\n\n const mergedProps: Record<string, any> = {};\n let classNameHandled = false;\n\n // Preserve attribute order while merging className\n if (props) {\n for (const key in props) {\n const value = props[key];\n\n if (value === undefined || value === null) continue;\n\n if (key === 'className' || key === 'class') {\n if (!classNameHandled) {\n if (className) mergedProps.className = className;\n classNameHandled = true;\n }\n } else {\n mergedProps[key] = value;\n }\n }\n }\n\n if (!classNameHandled && className) {\n mergedProps.className = className;\n }\n\n let finalProps = mergedProps;\n\n if (runtime.normalizeProps && isStringTag)\n finalProps = runtime.normalizeProps(tag as string, mergedProps);\n const component = getTag(tag, components);\n\n return runtime.createElement(\n component,\n finalProps,\n ...(children.length === 1 ? [children[0]] : children)\n );\n };\n};\n\nconst createRules = (\n createElement: CreateElementFunction,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions,\n footnotes: FootnoteDef[],\n refs: Record<string, { target: string; title?: string }>,\n attrStringToMap: (tag: HTMLTag, str: string) => Record<string, any> | null,\n containsBlockSyntax: (input: string) => boolean,\n nonParagraphBlockSyntaxes: RegExp[]\n): Rules => {\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const sanitize = ctx.sanitizer ?? defaultSanitizer;\n const namedCodesToUnicode = ctx.namedCodesToUnicode\n ? { ...NAMED_CODES_TO_UNICODE, ...ctx.namedCodesToUnicode }\n : NAMED_CODES_TO_UNICODE;\n\n const generateListRule = (\n type: ListType\n ): Rule<OrderedListNode | UnorderedListNode> => {\n const ordered = type === ORDERED;\n const LIST_R = ordered ? ORDERED_LIST_R : UNORDERED_LIST_R;\n const LIST_ITEM_R = ordered ? ORDERED_LIST_ITEM_R : UNORDERED_LIST_ITEM_R;\n const LIST_ITEM_PREFIX_R = ordered\n ? ORDERED_LIST_ITEM_PREFIX_R\n : UNORDERED_LIST_ITEM_PREFIX_R;\n\n return {\n _qualify: (source) => LIST_ITEM_PREFIX_R.test(source),\n _match: allowInline((source, state) => {\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(state.prevCapture ?? '');\n const isListAllowed = state.list ?? (!state.inline && !state.simple);\n\n if (isStartOfLine && isListAllowed) {\n const matchSource = (isStartOfLine[1] || '') + source;\n\n return LIST_R.exec(matchSource);\n }\n\n return null;\n }),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const bullet = capture[2];\n const startValue = ordered ? +bullet.slice(0, -1) : undefined;\n const items = capture[0]\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R) as string[];\n\n if (!items) return { items: [], ordered, start: startValue } as any;\n\n let lastItemWasAParagraph = false;\n\n const result = items.map((item, i) => {\n const prefixCapture = LIST_ITEM_PREFIX_R.exec(item);\n const space = prefixCapture ? prefixCapture[0].length : 0;\n const spaceRegex = new RegExp(`^ {1,${space}}`, 'gm');\n const content = item\n .replace(spaceRegex, '')\n .replace(LIST_ITEM_PREFIX_R, '');\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n const oldStateInline = state.inline;\n const oldStateList = state.list;\n state.list = true;\n\n let adjustedContent: string;\n\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = `${trimEnd(content)}\\n\\n`;\n } else {\n state.inline = true;\n adjustedContent = trimEnd(content);\n }\n\n const parsed = parse(adjustedContent, state);\n state.inline = oldStateInline;\n state.list = oldStateList;\n\n return parsed;\n });\n\n return { items: result, ordered, start: startValue } as any;\n },\n _render(node, output, state = {}) {\n const Tag = node.ordered ? 'ol' : 'ul';\n const props: Record<string, any> = { key: state.key };\n\n if (node.ordered && node.start != null) props.start = node.start;\n\n return createElement(\n Tag,\n props,\n ...node.items.map((item, i) =>\n createElement('li', { key: i }, output(item, state))\n )\n );\n },\n };\n };\n\n const matchParagraph = (\n source: string,\n state: ParseState\n ): RegExpMatchArray | null => {\n if (\n state.inline ||\n state.simple ||\n (state.inHTML &&\n source.indexOf('\\n\\n') === -1 &&\n state.prevCapture?.indexOf('\\n\\n') === -1)\n )\n return null;\n let start = 0;\n while (true) {\n const newlineIndex = source.indexOf('\\n', start);\n const line = source.slice(\n start,\n newlineIndex === -1 ? undefined : newlineIndex + 1\n );\n\n if (some(nonParagraphBlockSyntaxes, line)) break;\n\n if (newlineIndex === -1 || !line.trim()) break;\n start = newlineIndex + 1;\n }\n const match = source.slice(0, start);\n // Align with original simple-markdown behavior: capture the whole match including newlines\n\n if (match === '') return null;\n const captured = trimEnd(match);\n\n if (captured === '') return null;\n\n return [match, undefined, captured] as unknown as RegExpMatchArray;\n };\n\n const rules: Rules = {\n [RuleType.blockQuote]: {\n _qualify: ['>'],\n _match: blockRegex(BLOCKQUOTE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const matchAlert = capture[0]\n .replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, '')\n .match(BLOCKQUOTE_ALERT_R);\n const alert = matchAlert?.[1];\n const content = matchAlert?.[2] ?? '';\n const hasNewline = content.indexOf('\\n') !== -1;\n const children = hasNewline\n ? parseBlock(parse, content, state)\n : parseInline(parse, content, state);\n\n return { alert, children };\n },\n _render(node, output, state = {}) {\n const props: Record<string, any> = { key: state.key };\n\n if (node.alert) {\n props.className = `markdown-alert-${slug(node.alert.toLowerCase())}`;\n node.children.unshift({\n attrs: {},\n children: [{ type: RuleType.text, text: node.alert }],\n noInnerParse: true,\n type: RuleType.htmlBlock,\n tag: 'header',\n } as any);\n }\n\n return createElement('blockquote', props, output(node.children, state));\n },\n },\n [RuleType.breakLine]: {\n _qualify: [' '],\n _match: anyScopeRegex(BREAK_LINE_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('br', { key: state.key });\n },\n },\n [RuleType.breakThematic]: {\n _qualify: ['--', '__', '**', '- ', '* ', '_ '],\n _match: blockRegex(BREAK_THEMATIC_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('hr', { key: state.key });\n },\n },\n [RuleType.codeBlock]: {\n _qualify: [' '],\n _match: blockRegex(CODE_BLOCK_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n type: RuleType.codeBlock,\n lang: undefined,\n text: unescapeString(trimEnd(capture[0].replace(/^ {4}/gm, ''))),\n };\n },\n _render(node, _, state = {}) {\n const attrs = { ...((node as any).attrs ?? {}) } as Record<string, any>;\n const langClass = node.lang ? `lang-${node.lang}` : 'lang-plaintext';\n attrs.className = attrs.className\n ? `${attrs.className} ${langClass}`\n : langClass;\n\n if (node.lang && !attrs.lang) attrs.lang = node.lang;\n\n return createElement(\n 'pre',\n { key: state.key },\n createElement('code', attrs, node.text)\n );\n },\n },\n [RuleType.codeFenced]: {\n _qualify: ['```', '~~~'],\n _match: blockRegex(CODE_BLOCK_FENCED_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n attrs: attrStringToMap('code', capture[3] ?? ''),\n lang: capture[2] || undefined,\n text: capture[4],\n type: RuleType.codeBlock,\n };\n },\n },\n [RuleType.codeInline]: {\n _qualify: ['`'],\n _match: simpleInlineRegex(CODE_INLINE_R),\n _order: Priority.LOW,\n _parse(capture) {\n return { text: unescapeString(capture[2]) };\n },\n _render(node, _, state = {}) {\n return createElement('code', { key: state.key }, node.text);\n },\n },\n [RuleType.footnote]: {\n _qualify: ['[^'],\n _match: blockRegex(FOOTNOTE_R),\n _order: Priority.MAX,\n _parse(capture) {\n footnotes.push({ footnote: capture[2], identifier: capture[1] });\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.footnoteReference]: {\n _qualify: ['[^'],\n _match: inlineRegex(FOOTNOTE_REFERENCE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { target: `#${slug(capture[1])}`, text: capture[1] };\n },\n _render(node, _, state = {}) {\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(node.target, 'a', 'href') ?? undefined,\n },\n createElement('sup', { key: state.key }, node.text)\n );\n },\n },\n [RuleType.gfmTask]: {\n _qualify: ['[ ]', '[x]'],\n _match: inlineRegex(GFM_TASK_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { completed: capture[1].toLowerCase() === 'x' };\n },\n _render(node, _, state = {}) {\n return createElement('input', {\n checked: node.completed,\n key: state.key,\n readOnly: true,\n type: 'checkbox',\n });\n },\n },\n [RuleType.heading]: {\n _qualify: ['#'],\n _match: blockRegex(\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R\n ),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[2], state),\n id: slug(capture[2]),\n level: capture[1].length as HeadingNode['level'],\n };\n },\n _render(node, output, state = {}) {\n return createElement(\n `h${node.level}` as HTMLTag,\n { id: node.id, key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.headingSetext]: {\n _qualify: (source) => {\n const nlIndex = source.indexOf('\\n');\n\n return (\n nlIndex > 0 &&\n nlIndex < source.length - 1 &&\n (source[nlIndex + 1] === '=' || source[nlIndex + 1] === '-')\n );\n },\n _match: blockRegex(HEADING_SETEXT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: RuleType.heading,\n };\n },\n },\n [RuleType.htmlBlock]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n const match = source.match(/^ *<([a-z][a-z0-9:-]*)\\b/i);\n if (!match) return false;\n const tag = match[1];\n\n return source.toLowerCase().indexOf(`</${tag.toLowerCase()}>`) !== -1;\n },\n _match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tagName = capture[1].trim();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName.toLowerCase()) !== -1;\n const tag = (noInnerParse ? tagName.toLowerCase() : tagName) as HTMLTag;\n const ast: any = {\n attrs: attrStringToMap(tag, capture[2] ?? ''),\n noInnerParse,\n tag,\n };\n state.inAnchor = state.inAnchor || tagName.toLowerCase() === 'a';\n\n if (noInnerParse) {\n ast.text = capture[3];\n } else {\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n }\n state.inAnchor = false;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.htmlComment]: {\n _qualify: ['<!'],\n _match: anyScopeRegex(HTML_COMMENT_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render: renderNothing,\n },\n [RuleType.htmlSelfClosing]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n return /^ *<([a-zA-Z][a-zA-Z0-9:]*)[\\s>/]/.test(source);\n },\n _match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture) {\n const tag = capture[1].trim() as HTMLTag;\n\n return { attrs: attrStringToMap(tag, capture[2] || ''), tag };\n },\n _render(node, _, state = {}) {\n return createElement(node.tag, {\n key: state.key,\n ...(node.attrs ?? {}),\n });\n },\n },\n [RuleType.customComponent]: {\n _qualify: (source) => /^ *<([A-Z][a-zA-Z0-9]*)/.test(source),\n _match: anyScopeRegex(CUSTOM_COMPONENT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tag = capture[1].trim();\n const ast: any = {\n attrs: attrStringToMap(tag as HTMLTag, capture[2] ?? ''),\n noInnerParse: false,\n tag,\n };\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag as HTMLTag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.paragraph]: {\n _match: matchParagraph,\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'p',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.image]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(IMAGE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return {\n alt: unescapeString(capture[1]),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, _, state = {}) {\n return createElement('img', {\n key: state.key,\n alt: node.alt ?? undefined,\n title: node.title ?? undefined,\n src: sanitize(node.target, 'img', 'src') ?? undefined,\n });\n },\n },\n [RuleType.link]: {\n _qualify: ['['],\n _match: inlineRegex(LINK_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, output, state = {}) {\n const sanitizedHref = sanitize(node.target, 'a', 'href');\n if (\n process.env.NODE_ENV === 'test' &&\n node.target.includes('javascript:')\n ) {\n console.log('Compiler sanitize result:', {\n target: node.target,\n sanitizedHref,\n finalHref: sanitizedHref ?? undefined,\n });\n }\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitizedHref ?? undefined,\n title: node.title ?? undefined,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.linkAngleBraceStyleDetector]: {\n _qualify: ['<'],\n _match: inlineRegex(LINK_AUTOLINK_R),\n _order: Priority.MAX,\n _parse(capture) {\n let target = capture[1];\n let isEmail = false;\n\n if (target.indexOf('@') !== -1 && target.indexOf('//') === -1) {\n isEmail = true;\n target = target.replace('mailto:', '');\n }\n\n return {\n children: [{ text: target, type: RuleType.text }],\n target: isEmail ? `mailto:${target}` : target,\n type: RuleType.link,\n };\n },\n },\n [RuleType.linkBareUrlDetector]: {\n _qualify: (source, state) =>\n !!(\n state.inline &&\n !state.inAnchor &&\n !options.disableAutoLink &&\n (startsWith(source, 'http://') || startsWith(source, 'https://'))\n ),\n _match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n children: [{ text: capture[1], type: RuleType.text }],\n target: capture[1],\n type: RuleType.link,\n };\n },\n },\n [RuleType.newlineCoalescer]: {\n _match: blockRegex(CONSECUTIVE_NEWLINE_R),\n _order: Priority.LOW,\n _parse: captureNothing,\n _render() {\n return '\\n';\n },\n },\n [RuleType.orderedList]: generateListRule(ORDERED),\n [RuleType.unorderedList]: generateListRule(UNORDERED),\n [RuleType.ref]: {\n _qualify: ['['],\n _match: anyScopeRegex(REFERENCE_IMAGE_OR_LINK),\n _order: Priority.MAX,\n _parse(capture) {\n refs[capture[1]] = { target: capture[2], title: capture[4] };\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.refImage]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(REFERENCE_IMAGE_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n alt: capture[1] ? unescapeString(capture[1]) : undefined,\n ref: capture[2],\n };\n },\n _render(node, _, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref) return null;\n\n return createElement('img', {\n key: state.key,\n alt: node.alt,\n src: sanitize(ref.target, 'img', 'src') ?? undefined,\n title: ref.title,\n });\n },\n },\n [RuleType.refLink]: {\n _qualify: (source) => source[0] === '[' && source.indexOf('](') === -1,\n _match: inlineRegex(REFERENCE_LINK_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n fallbackChildren: capture[0],\n ref: capture[2],\n };\n },\n _render(node, output, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref)\n return createElement(\n 'span',\n { key: state.key },\n node.fallbackChildren\n );\n\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(ref.target, 'a', 'href') ?? undefined,\n title: ref.title,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.table]: {\n _qualify: ['|'],\n _match: blockRegex(NP_TABLE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n state.inline = true;\n const align = capture[2] ? parseTableAlign(capture[2]) : [];\n const cells = capture[3]\n ? parseTableCells(capture[3], parse, state)\n : [];\n const header = parseTableRow(capture[1], parse, state, !!cells.length);\n state.inline = false;\n\n return cells.length\n ? { align, cells, header, type: RuleType.table }\n : { children: header.flat(), type: RuleType.paragraph };\n },\n _render(node, output, state = {}) {\n const table = node as TableNode;\n const getStyle = (i: number) =>\n table.align[i] && table.align[i] !== 'left'\n ? { textAlign: table.align[i] }\n : {};\n\n return createElement(\n 'table',\n { key: state.key },\n createElement(\n 'thead',\n null,\n createElement(\n 'tr',\n null,\n ...table.header.map((c, i) =>\n createElement(\n 'th',\n { key: i, style: getStyle(i) },\n output(c, state)\n )\n )\n )\n ),\n createElement(\n 'tbody',\n null,\n ...table.cells.map((row, i) =>\n createElement(\n 'tr',\n { key: i },\n ...row.map((c, j) =>\n createElement(\n 'td',\n { key: j, style: getStyle(j) },\n output(c, state)\n )\n )\n )\n )\n )\n );\n },\n },\n [RuleType.tableSeparator]: {\n _match: (source, state) =>\n state.inTable && source[0] === '|' ? /^\\|/.exec(source) : null,\n _order: Priority.HIGH,\n _parse() {\n return { type: RuleType.tableSeparator };\n },\n _render() {\n return ' | ';\n },\n },\n [RuleType.text]: {\n _match: allowInline((source, _state) => {\n const shortMatch = SHORTCODE_R.exec(source);\n\n if (shortMatch) return shortMatch;\n\n return TEXT_PLAIN_R.exec(source) || /^[\\s\\S]/.exec(source);\n }),\n _order: Priority.MIN,\n _parse(capture) {\n const text = capture[0];\n\n return {\n text:\n text.indexOf('&') === -1\n ? text\n : text.replace(HTML_CHAR_CODE_R, (f, i) => {\n if (i.startsWith('#x'))\n return String.fromCharCode(parseInt(i.slice(2), 16));\n if (i.startsWith('#'))\n return String.fromCharCode(parseInt(i.slice(1), 10));\n return namedCodesToUnicode[i] || f;\n }),\n };\n },\n _render(node) {\n return node.text;\n },\n },\n [RuleType.textBolded]: {\n _qualify: ['**', '__'],\n _match: simpleInlineRegex(TEXT_BOLD_R),\n _order: Priority.MED,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'strong',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEmphasized]: {\n _qualify: ['*', '_'],\n _match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'em',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEscaped]: {\n _qualify: ['\\\\'],\n _match: simpleInlineRegex(TEXT_ESCAPED_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { text: capture[1], type: RuleType.text };\n },\n },\n [RuleType.textMarked]: {\n _qualify: ['=='],\n _match: simpleInlineRegex(TEXT_MARKED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'mark',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textStrikethroughed]: {\n _qualify: ['~~'],\n _match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'del',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n };\n\n return rules;\n};\n\n// Removed compilerCache completely to avoid issues with props changes not invalidating cache\n// const compilerCache = new Map<string, unknown>();\n\nexport const compile = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n // const cacheKey = JSON.stringify({\n // markdown,\n // options,\n // components: ctx.components ? Object.keys(ctx.components) : [],\n // });\n\n // if (compilerCache.has(cacheKey)) {\n // return compilerCache.get(cacheKey);\n // }\n\n const components = ctx.components ?? {};\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const createElement = createElementFactory(ctx, options);\n const footnotes: FootnoteDef[] = [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = (\n tag: HTMLTag,\n str: string\n ): Record<string, any> | null => {\n if (!str?.trim()) return null;\n\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n if (!attributes) return null;\n\n return attributes.reduce((map: any, raw) => {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(raw.slice(0, delimiterIdx)).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n const mappedKey = ATTRIBUTE_TO_NODE_PROP_MAP[key] ?? key;\n\n if (mappedKey === 'ref') return map;\n map[mappedKey] = attributeValueToNodePropValue(\n tag,\n key,\n value,\n ctx.sanitizer ?? defaultSanitizer\n );\n\n if (\n typeof map[mappedKey] === 'string' &&\n (HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))\n ) {\n map[mappedKey] = compileInner(map[mappedKey].trim());\n }\n } else if (raw !== 'style') {\n map[ATTRIBUTE_TO_NODE_PROP_MAP[raw] ?? raw] = true;\n }\n\n return map;\n }, {});\n };\n\n const nonParagraphBlockSyntaxes = [\n BLOCKQUOTE_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R,\n HEADING_SETEXT_R,\n NP_TABLE_R,\n ORDERED_LIST_R,\n UNORDERED_LIST_R,\n CUSTOM_COMPONENT_R,\n ];\n\n const containsBlockSyntax = (input: string): boolean => {\n const cleaned = input.replace(TRIM_STARTING_NEWLINES, '');\n const slice = cleaned.length > 2048 ? cleaned.slice(0, 2048) : cleaned;\n\n // A blank line unambiguously separates block-level elements\n if (slice.indexOf('\\n\\n') !== -1) return true;\n\n const syntaxes = options.disableParsingRawHTML\n ? nonParagraphBlockSyntaxes\n : [\n ...nonParagraphBlockSyntaxes,\n PARAGRAPH_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n CUSTOM_COMPONENT_R,\n ];\n\n return some(syntaxes as RegExp[], slice);\n };\n\n const baseRules = createRules(\n createElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const parser = parserFor(rules);\n const emitter = renderFor(createRenderer(rules, options.renderRule));\n\n const compileInner = (input: string): unknown => {\n const result = options.preserveFrontmatter\n ? input\n : input.replace(FRONT_MATTER_R, '');\n const inline =\n options.forceInline ||\n (!options.forceBlock &&\n SHOULD_RENDER_AS_BLOCK_R.test(\n result.replace(TRIM_STARTING_NEWLINES, '')\n ) === false);\n const arr = emitter(\n parser(\n inline\n ? result\n : `${trimEnd(result).replace(TRIM_STARTING_NEWLINES, '')}\\n\\n`,\n { inline }\n ),\n { inline }\n ) as unknown as any[];\n while (\n typeof arr[arr.length - 1] === 'string' &&\n !arr[arr.length - 1].trim()\n )\n arr.pop();\n\n if (options.wrapper === null) return arr;\n const wrapper = options.wrapper ?? (inline ? 'span' : 'div');\n\n if (arr.length > 1 || options.forceWrapper)\n return createElement(wrapper, { key: 'outer' }, arr);\n\n if (arr.length === 1) {\n const node = arr[0];\n\n if (typeof node === 'string') {\n const spanProps: Record<string, any> = { key: 'outer' };\n\n if (!inline && components) {\n const pOverrideProps = (get(components, 'p.props', {}) ??\n {}) as Record<string, any>;\n const mergedClassName = cx(\n spanProps.className,\n pOverrideProps.className\n );\n const finalSpanProps: Record<string, any> = {\n ...spanProps,\n ...pOverrideProps,\n };\n\n if (mergedClassName) finalSpanProps.className = mergedClassName;\n\n return createElement('span', finalSpanProps, node);\n }\n\n return createElement('span', spanProps, node);\n }\n\n return node;\n }\n\n return createElement(wrapper, { key: 'outer' }, null);\n };\n\n if (typeof markdown !== 'string') {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n 'intlayer: the first argument must be a string. Received',\n typeof markdown\n );\n }\n throw new Error('intlayer: the first argument must be a string');\n }\n\n const node = compileInner(markdown);\n\n const result = footnotes.length\n ? createElement(\n 'div',\n null,\n node,\n createElement(\n 'footer',\n { key: 'footer' },\n ...footnotes.map((def) =>\n createElement(\n 'div',\n { id: slug(def.identifier), key: def.identifier },\n def.identifier,\n emitter(parser(def.footnote, { inline: true }), { inline: true })\n )\n )\n )\n )\n : node;\n\n // compilerCache.set(cacheKey, result);\n\n return result;\n};\n\nexport const createCompiler =\n (ctx: MarkdownContext<any>) =>\n (markdown: string, options?: MarkdownOptions): unknown =>\n compile(markdown, ctx, options);\n\nexport const compileWithOptions = (\n markdown: string,\n runtime: MarkdownRuntime,\n options: CompileOptions<any> = {}\n): unknown => {\n const {\n components,\n namedCodesToUnicode,\n sanitizer,\n slugify,\n ...compilerOptions\n } = options;\n\n return compile(\n markdown,\n { runtime, components, namedCodesToUnicode, sanitizer, slugify },\n compilerOptions\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compiler.cjs","names":["get","cx","defaultSlugify","defaultSanitizer","NAMED_CODES_TO_UNICODE","ORDERED_LIST_R","UNORDERED_LIST_R","ORDERED_LIST_ITEM_R","UNORDERED_LIST_ITEM_R","ORDERED_LIST_ITEM_PREFIX_R","UNORDERED_LIST_ITEM_PREFIX_R","allowInline","LIST_LOOKBEHIND_R","Priority","BLOCK_END_R","trimEnd","some","RuleType","blockRegex","BLOCKQUOTE_R","BLOCKQUOTE_TRIM_LEFT_MULTILINE_R","BLOCKQUOTE_ALERT_R","parseBlock","parseInline","anyScopeRegex","BREAK_LINE_R","captureNothing","BREAK_THEMATIC_R","CODE_BLOCK_R","unescapeString","CODE_BLOCK_FENCED_R","simpleInlineRegex","CODE_INLINE_R","FOOTNOTE_R","renderNothing","inlineRegex","FOOTNOTE_REFERENCE_R","GFM_TASK_R","HEADING_ATX_COMPLIANT_R","HEADING_R","HEADING_SETEXT_R","HTML_BLOCK_ELEMENT_R","HTML_LEFT_TRIM_AMOUNT_R","trimLeadingWhitespaceOutsideFences","DO_NOT_PROCESS_HTML_ELEMENTS","HTML_COMMENT_R","HTML_SELF_CLOSING_ELEMENT_R","CUSTOM_COMPONENT_R","parseCaptureInline","parseSimpleInline","LINK_AUTOLINK_R","startsWith","LINK_AUTOLINK_BARE_URL_R","CONSECUTIVE_NEWLINE_R","REFERENCE_IMAGE_OR_LINK","REFERENCE_IMAGE_R","REFERENCE_LINK_R","NP_TABLE_R","parseTableAlign","parseTableCells","parseTableRow","SHORTCODE_R","TEXT_PLAIN_R","HTML_CHAR_CODE_R","TEXT_BOLD_R","TEXT_EMPHASIZED_R","TEXT_ESCAPED_R","TEXT_MARKED_R","TEXT_STRIKETHROUGHED_R","ATTR_EXTRACTOR_R","normalizeAttributeKey","unquote","ATTRIBUTE_TO_NODE_PROP_MAP","attributeValueToNodePropValue","TRIM_STARTING_NEWLINES","PARAGRAPH_R","parserFor","FRONT_MATTER_R","SHOULD_RENDER_AS_BLOCK_R","renderFor","createRenderer"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["import {\n ATTR_EXTRACTOR_R,\n ATTRIBUTE_TO_NODE_PROP_MAP,\n BLOCK_END_R,\n BLOCKQUOTE_ALERT_R,\n BLOCKQUOTE_R,\n BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,\n BREAK_LINE_R,\n BREAK_THEMATIC_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n CODE_INLINE_R,\n CONSECUTIVE_NEWLINE_R,\n CUSTOM_COMPONENT_R,\n DO_NOT_PROCESS_HTML_ELEMENTS,\n FOOTNOTE_R,\n FOOTNOTE_REFERENCE_R,\n FRONT_MATTER_R,\n GFM_TASK_R,\n HEADING_ATX_COMPLIANT_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_CHAR_CODE_R,\n HTML_COMMENT_R,\n HTML_LEFT_TRIM_AMOUNT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LINK_AUTOLINK_BARE_URL_R,\n LINK_AUTOLINK_R,\n LIST_LOOKBEHIND_R,\n type ListType,\n NAMED_CODES_TO_UNICODE,\n NP_TABLE_R,\n ORDERED,\n ORDERED_LIST_ITEM_PREFIX_R,\n ORDERED_LIST_ITEM_R,\n ORDERED_LIST_R,\n PARAGRAPH_R,\n Priority,\n REFERENCE_IMAGE_OR_LINK,\n REFERENCE_IMAGE_R,\n REFERENCE_LINK_R,\n RuleType,\n SHORTCODE_R,\n SHOULD_RENDER_AS_BLOCK_R,\n TEXT_BOLD_R,\n TEXT_EMPHASIZED_R,\n TEXT_ESCAPED_R,\n TEXT_MARKED_R,\n TEXT_PLAIN_R,\n TEXT_STRIKETHROUGHED_R,\n TRIM_STARTING_NEWLINES,\n UNORDERED,\n UNORDERED_LIST_ITEM_PREFIX_R,\n UNORDERED_LIST_ITEM_R,\n UNORDERED_LIST_R,\n} from './constants';\nimport { parserFor } from './parser';\nimport { createRenderer, renderFor } from './renderer';\nimport type {\n CompileOptions,\n ComponentOverrides as ComponentDefinition,\n HeadingNode,\n HTMLTag,\n MarkdownContext,\n MarkdownOptions,\n MarkdownRuntime,\n OrderedListNode,\n ParseState,\n Rule,\n Rules,\n TableNode,\n UnorderedListNode,\n} from './types';\nimport {\n allowInline,\n anyScopeRegex,\n attributeValueToNodePropValue,\n blockRegex,\n captureNothing,\n cx,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n get,\n inlineRegex,\n normalizeAttributeKey,\n parseBlock,\n parseCaptureInline,\n parseInline,\n parseSimpleInline,\n parseTableAlign,\n parseTableCells,\n parseTableRow,\n renderNothing,\n simpleInlineRegex,\n some,\n startsWith,\n trimEnd,\n trimLeadingWhitespaceOutsideFences,\n unescapeString,\n unquote,\n} from './utils';\n\ntype CreateElementFunction = (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n) => unknown;\n\ntype FootnoteDef = { footnote: string; identifier: string };\n\nconst IMAGE_R = /^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/;\nconst LINK_INSIDE =\n '(?:\\\\[[^\\\\[\\\\]]*(?:\\\\[[^\\\\[\\\\]]*\\\\][^\\\\[\\\\]]*)*\\\\]|[^\\\\[\\\\]])*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\nconst LINK_R = new RegExp(\n `^\\\\[(${LINK_INSIDE})\\\\]\\\\(${LINK_HREF_AND_TITLE}\\\\)`\n);\n\nconst getTag = (tag: any, components: ComponentDefinition<any>): any => {\n if (typeof tag !== 'string') return tag;\n let override = get(components, tag);\n\n if (!override && typeof tag === 'string') {\n const lowercaseTag = tag.toLowerCase();\n // Try case-insensitive lookup\n const key = Object.keys(components).find(\n (k) => k.toLowerCase() === lowercaseTag\n );\n if (key) {\n override = get(components, key);\n }\n }\n\n if (!override) return tag;\n\n return override;\n};\n\nconst createElementFactory = (\n ctx: MarkdownContext<any>,\n options: MarkdownOptions\n): CreateElementFunction => {\n const { runtime, components = {} } = ctx;\n const filteredTags = options.tagfilter\n ? [\n 'title',\n 'textarea',\n 'style',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'script',\n 'plaintext',\n ]\n : [];\n\n return (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n ): unknown => {\n if (typeof tag === 'string' && filteredTags.includes(tag.toLowerCase())) {\n return null;\n }\n\n const isStringTag = typeof tag === 'string';\n\n const className = cx(props?.className, props?.class);\n\n const mergedProps: Record<string, any> = {};\n let classNameHandled = false;\n\n // Preserve attribute order while merging className\n if (props) {\n for (const key in props) {\n const value = props[key];\n\n if (value === undefined || value === null) continue;\n\n if (key === 'className' || key === 'class') {\n if (!classNameHandled) {\n if (className) mergedProps.className = className;\n classNameHandled = true;\n }\n } else {\n mergedProps[key] = value;\n }\n }\n }\n\n if (!classNameHandled && className) {\n mergedProps.className = className;\n }\n\n let finalProps = mergedProps;\n\n if (runtime.normalizeProps && isStringTag)\n finalProps = runtime.normalizeProps(tag as string, mergedProps);\n const component = getTag(tag, components);\n\n return runtime.createElement(\n component,\n finalProps,\n ...(children.length === 1 ? [children[0]] : children)\n );\n };\n};\n\nconst createRules = (\n createElement: CreateElementFunction,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions,\n footnotes: FootnoteDef[],\n refs: Record<string, { target: string; title?: string }>,\n attrStringToMap: (tag: HTMLTag, str: string) => Record<string, any> | null,\n containsBlockSyntax: (input: string) => boolean,\n nonParagraphBlockSyntaxes: RegExp[]\n): Rules => {\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const sanitize = ctx.sanitizer ?? defaultSanitizer;\n const namedCodesToUnicode = ctx.namedCodesToUnicode\n ? { ...NAMED_CODES_TO_UNICODE, ...ctx.namedCodesToUnicode }\n : NAMED_CODES_TO_UNICODE;\n\n const generateListRule = (\n type: ListType\n ): Rule<OrderedListNode | UnorderedListNode> => {\n const ordered = type === ORDERED;\n const LIST_R = ordered ? ORDERED_LIST_R : UNORDERED_LIST_R;\n const LIST_ITEM_R = ordered ? ORDERED_LIST_ITEM_R : UNORDERED_LIST_ITEM_R;\n const LIST_ITEM_PREFIX_R = ordered\n ? ORDERED_LIST_ITEM_PREFIX_R\n : UNORDERED_LIST_ITEM_PREFIX_R;\n\n return {\n _qualify: (source) => LIST_ITEM_PREFIX_R.test(source),\n _match: allowInline((source, state) => {\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(state.prevCapture ?? '');\n const isListAllowed = state.list ?? (!state.inline && !state.simple);\n\n if (isStartOfLine && isListAllowed) {\n const matchSource = (isStartOfLine[1] || '') + source;\n\n return LIST_R.exec(matchSource);\n }\n\n return null;\n }),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const bullet = capture[2];\n const startValue = ordered ? +bullet.slice(0, -1) : undefined;\n const items = capture[0]\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R) as string[];\n\n if (!items) return { items: [], ordered, start: startValue } as any;\n\n let lastItemWasAParagraph = false;\n\n const result = items.map((item, i) => {\n const prefixCapture = LIST_ITEM_PREFIX_R.exec(item);\n const space = prefixCapture ? prefixCapture[0].length : 0;\n const spaceRegex = new RegExp(`^ {1,${space}}`, 'gm');\n const content = item\n .replace(spaceRegex, '')\n .replace(LIST_ITEM_PREFIX_R, '');\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n const oldStateInline = state.inline;\n const oldStateList = state.list;\n state.list = true;\n\n let adjustedContent: string;\n\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = `${trimEnd(content)}\\n\\n`;\n } else {\n state.inline = true;\n adjustedContent = trimEnd(content);\n }\n\n const parsed = parse(adjustedContent, state);\n state.inline = oldStateInline;\n state.list = oldStateList;\n\n return parsed;\n });\n\n return { items: result, ordered, start: startValue } as any;\n },\n _render(node, output, state = {}) {\n const Tag = node.ordered ? 'ol' : 'ul';\n const props: Record<string, any> = { key: state.key };\n\n if (node.ordered && node.start != null) props.start = node.start;\n\n return createElement(\n Tag,\n props,\n ...node.items.map((item, i) =>\n createElement('li', { key: i }, output(item, state))\n )\n );\n },\n };\n };\n\n const matchParagraph = (\n source: string,\n state: ParseState\n ): RegExpMatchArray | null => {\n if (\n state.inline ||\n state.simple ||\n (state.inHTML &&\n source.indexOf('\\n\\n') === -1 &&\n state.prevCapture?.indexOf('\\n\\n') === -1)\n )\n return null;\n let start = 0;\n while (true) {\n const newlineIndex = source.indexOf('\\n', start);\n const line = source.slice(\n start,\n newlineIndex === -1 ? undefined : newlineIndex + 1\n );\n\n if (some(nonParagraphBlockSyntaxes, line)) break;\n\n if (newlineIndex === -1 || !line.trim()) break;\n start = newlineIndex + 1;\n }\n const match = source.slice(0, start);\n // Align with original simple-markdown behavior: capture the whole match including newlines\n\n if (match === '') return null;\n const captured = trimEnd(match);\n\n if (captured === '') return null;\n\n return [match, undefined, captured] as unknown as RegExpMatchArray;\n };\n\n const rules: Rules = {\n [RuleType.blockQuote]: {\n _qualify: ['>'],\n _match: blockRegex(BLOCKQUOTE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const matchAlert = capture[0]\n .replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, '')\n .match(BLOCKQUOTE_ALERT_R);\n const alert = matchAlert?.[1];\n const content = matchAlert?.[2] ?? '';\n const hasNewline = content.indexOf('\\n') !== -1;\n const children = hasNewline\n ? parseBlock(parse, content, state)\n : parseInline(parse, content, state);\n\n return { alert, children };\n },\n _render(node, output, state = {}) {\n const props: Record<string, any> = { key: state.key };\n\n if (node.alert) {\n props.className = `markdown-alert-${slug(node.alert.toLowerCase())}`;\n node.children.unshift({\n attrs: {},\n children: [{ type: RuleType.text, text: node.alert }],\n noInnerParse: true,\n type: RuleType.htmlBlock,\n tag: 'header',\n } as any);\n }\n\n return createElement('blockquote', props, output(node.children, state));\n },\n },\n [RuleType.breakLine]: {\n _qualify: [' '],\n _match: anyScopeRegex(BREAK_LINE_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('br', { key: state.key });\n },\n },\n [RuleType.breakThematic]: {\n _qualify: ['--', '__', '**', '- ', '* ', '_ '],\n _match: blockRegex(BREAK_THEMATIC_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('hr', { key: state.key });\n },\n },\n [RuleType.codeBlock]: {\n _qualify: [' '],\n _match: blockRegex(CODE_BLOCK_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n type: RuleType.codeBlock,\n lang: undefined,\n text: unescapeString(trimEnd(capture[0].replace(/^ {4}/gm, ''))),\n };\n },\n _render(node, _, state = {}) {\n const attrs = { ...((node as any).attrs ?? {}) } as Record<string, any>;\n const langClass = node.lang ? `lang-${node.lang}` : 'lang-plaintext';\n attrs.className = attrs.className\n ? `${attrs.className} ${langClass}`\n : langClass;\n\n return createElement(\n 'pre',\n { key: state.key },\n createElement('code', attrs, node.text)\n );\n },\n },\n [RuleType.codeFenced]: {\n _qualify: ['```', '~~~'],\n _match: blockRegex(CODE_BLOCK_FENCED_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n attrs: attrStringToMap('code', capture[3] ?? ''),\n lang: capture[2] || undefined,\n text: capture[4],\n type: RuleType.codeBlock,\n };\n },\n },\n [RuleType.codeInline]: {\n _qualify: ['`'],\n _match: simpleInlineRegex(CODE_INLINE_R),\n _order: Priority.LOW,\n _parse(capture) {\n return { text: unescapeString(capture[2]) };\n },\n _render(node, _, state = {}) {\n return createElement('code', { key: state.key }, node.text);\n },\n },\n [RuleType.footnote]: {\n _qualify: ['[^'],\n _match: blockRegex(FOOTNOTE_R),\n _order: Priority.MAX,\n _parse(capture) {\n footnotes.push({ footnote: capture[2], identifier: capture[1] });\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.footnoteReference]: {\n _qualify: ['[^'],\n _match: inlineRegex(FOOTNOTE_REFERENCE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { target: `#${slug(capture[1])}`, text: capture[1] };\n },\n _render(node, _, state = {}) {\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(node.target, 'a', 'href') ?? undefined,\n },\n createElement('sup', { key: state.key }, node.text)\n );\n },\n },\n [RuleType.gfmTask]: {\n _qualify: ['[ ]', '[x]'],\n _match: inlineRegex(GFM_TASK_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { completed: capture[1].toLowerCase() === 'x' };\n },\n _render(node, _, state = {}) {\n return createElement('input', {\n checked: node.completed,\n key: state.key,\n readOnly: true,\n type: 'checkbox',\n });\n },\n },\n [RuleType.heading]: {\n _qualify: ['#'],\n _match: blockRegex(\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R\n ),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[2], state),\n id: slug(capture[2]),\n level: capture[1].length as HeadingNode['level'],\n };\n },\n _render(node, output, state = {}) {\n return createElement(\n `h${node.level}` as HTMLTag,\n { id: node.id, key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.headingSetext]: {\n _qualify: (source) => {\n const nlIndex = source.indexOf('\\n');\n\n return (\n nlIndex > 0 &&\n nlIndex < source.length - 1 &&\n (source[nlIndex + 1] === '=' || source[nlIndex + 1] === '-')\n );\n },\n _match: blockRegex(HEADING_SETEXT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: RuleType.heading,\n };\n },\n },\n [RuleType.htmlBlock]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n const match = source.match(/^ *<([a-z][a-z0-9:-]*)\\b/i);\n if (!match) return false;\n const tag = match[1];\n\n return source.toLowerCase().indexOf(`</${tag.toLowerCase()}>`) !== -1;\n },\n _match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tagName = capture[1].trim();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName.toLowerCase()) !== -1;\n const tag = (noInnerParse ? tagName.toLowerCase() : tagName) as HTMLTag;\n const ast: any = {\n attrs: attrStringToMap(tag, capture[2] ?? ''),\n noInnerParse,\n tag,\n };\n state.inAnchor = state.inAnchor || tagName.toLowerCase() === 'a';\n\n if (noInnerParse) {\n ast.text = capture[3];\n } else {\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n }\n state.inAnchor = false;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.htmlComment]: {\n _qualify: ['<!'],\n _match: anyScopeRegex(HTML_COMMENT_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render: renderNothing,\n },\n [RuleType.htmlSelfClosing]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n return /^ *<([a-zA-Z][a-zA-Z0-9:]*)[\\s>/]/.test(source);\n },\n _match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture) {\n const tag = capture[1].trim() as HTMLTag;\n\n return { attrs: attrStringToMap(tag, capture[2] || ''), tag };\n },\n _render(node, _, state = {}) {\n return createElement(node.tag, {\n key: state.key,\n ...(node.attrs ?? {}),\n });\n },\n },\n [RuleType.customComponent]: {\n _qualify: (source) => /^ *<([A-Z][a-zA-Z0-9]*)/.test(source),\n _match: anyScopeRegex(CUSTOM_COMPONENT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tag = capture[1].trim();\n const ast: any = {\n attrs: attrStringToMap(tag as HTMLTag, capture[2] ?? ''),\n noInnerParse: false,\n tag,\n };\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag as HTMLTag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.paragraph]: {\n _match: matchParagraph,\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'p',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.image]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(IMAGE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return {\n alt: unescapeString(capture[1]),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, _, state = {}) {\n return createElement('img', {\n key: state.key,\n alt: node.alt ?? undefined,\n title: node.title ?? undefined,\n src: sanitize(node.target, 'img', 'src') ?? undefined,\n });\n },\n },\n [RuleType.link]: {\n _qualify: ['['],\n _match: inlineRegex(LINK_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, output, state = {}) {\n const sanitizedHref = sanitize(node.target, 'a', 'href');\n if (\n process.env.NODE_ENV === 'test' &&\n node.target.includes('javascript:')\n ) {\n console.log('Compiler sanitize result:', {\n target: node.target,\n sanitizedHref,\n finalHref: sanitizedHref ?? undefined,\n });\n }\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitizedHref ?? undefined,\n title: node.title ?? undefined,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.linkAngleBraceStyleDetector]: {\n _qualify: ['<'],\n _match: inlineRegex(LINK_AUTOLINK_R),\n _order: Priority.MAX,\n _parse(capture) {\n let target = capture[1];\n let isEmail = false;\n\n if (target.indexOf('@') !== -1 && target.indexOf('//') === -1) {\n isEmail = true;\n target = target.replace('mailto:', '');\n }\n\n return {\n children: [{ text: target, type: RuleType.text }],\n target: isEmail ? `mailto:${target}` : target,\n type: RuleType.link,\n };\n },\n },\n [RuleType.linkBareUrlDetector]: {\n _qualify: (source, state) =>\n !!(\n state.inline &&\n !state.inAnchor &&\n !options.disableAutoLink &&\n (startsWith(source, 'http://') || startsWith(source, 'https://'))\n ),\n _match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n children: [{ text: capture[1], type: RuleType.text }],\n target: capture[1],\n type: RuleType.link,\n };\n },\n },\n [RuleType.newlineCoalescer]: {\n _match: blockRegex(CONSECUTIVE_NEWLINE_R),\n _order: Priority.LOW,\n _parse: captureNothing,\n _render() {\n return '\\n';\n },\n },\n [RuleType.orderedList]: generateListRule(ORDERED),\n [RuleType.unorderedList]: generateListRule(UNORDERED),\n [RuleType.ref]: {\n _qualify: ['['],\n _match: anyScopeRegex(REFERENCE_IMAGE_OR_LINK),\n _order: Priority.MAX,\n _parse(capture) {\n refs[capture[1]] = { target: capture[2], title: capture[4] };\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.refImage]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(REFERENCE_IMAGE_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n alt: capture[1] ? unescapeString(capture[1]) : undefined,\n ref: capture[2],\n };\n },\n _render(node, _, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref) return null;\n\n return createElement('img', {\n key: state.key,\n alt: node.alt,\n src: sanitize(ref.target, 'img', 'src') ?? undefined,\n title: ref.title,\n });\n },\n },\n [RuleType.refLink]: {\n _qualify: (source) => source[0] === '[' && source.indexOf('](') === -1,\n _match: inlineRegex(REFERENCE_LINK_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n fallbackChildren: capture[0],\n ref: capture[2],\n };\n },\n _render(node, output, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref)\n return createElement(\n 'span',\n { key: state.key },\n node.fallbackChildren\n );\n\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(ref.target, 'a', 'href') ?? undefined,\n title: ref.title,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.table]: {\n _qualify: ['|'],\n _match: blockRegex(NP_TABLE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n state.inline = true;\n const align = capture[2] ? parseTableAlign(capture[2]) : [];\n const cells = capture[3]\n ? parseTableCells(capture[3], parse, state)\n : [];\n const header = parseTableRow(capture[1], parse, state, !!cells.length);\n state.inline = false;\n\n return cells.length\n ? { align, cells, header, type: RuleType.table }\n : { children: header.flat(), type: RuleType.paragraph };\n },\n _render(node, output, state = {}) {\n const table = node as TableNode;\n const getStyle = (i: number) =>\n table.align[i] && table.align[i] !== 'left'\n ? { textAlign: table.align[i] }\n : {};\n\n return createElement(\n 'table',\n { key: state.key },\n createElement(\n 'thead',\n null,\n createElement(\n 'tr',\n null,\n ...table.header.map((c, i) =>\n createElement(\n 'th',\n { key: i, style: getStyle(i) },\n output(c, state)\n )\n )\n )\n ),\n createElement(\n 'tbody',\n null,\n ...table.cells.map((row, i) =>\n createElement(\n 'tr',\n { key: i },\n ...row.map((c, j) =>\n createElement(\n 'td',\n { key: j, style: getStyle(j) },\n output(c, state)\n )\n )\n )\n )\n )\n );\n },\n },\n [RuleType.tableSeparator]: {\n _match: (source, state) =>\n state.inTable && source[0] === '|' ? /^\\|/.exec(source) : null,\n _order: Priority.HIGH,\n _parse() {\n return { type: RuleType.tableSeparator };\n },\n _render() {\n return ' | ';\n },\n },\n [RuleType.text]: {\n _match: allowInline((source, _state) => {\n const shortMatch = SHORTCODE_R.exec(source);\n\n if (shortMatch) return shortMatch;\n\n return TEXT_PLAIN_R.exec(source) || /^[\\s\\S]/.exec(source);\n }),\n _order: Priority.MIN,\n _parse(capture) {\n const text = capture[0];\n\n return {\n text:\n text.indexOf('&') === -1\n ? text\n : text.replace(HTML_CHAR_CODE_R, (f, i) => {\n if (i.startsWith('#x'))\n return String.fromCharCode(parseInt(i.slice(2), 16));\n if (i.startsWith('#'))\n return String.fromCharCode(parseInt(i.slice(1), 10));\n return namedCodesToUnicode[i] || f;\n }),\n };\n },\n _render(node) {\n return node.text;\n },\n },\n [RuleType.textBolded]: {\n _qualify: ['**', '__'],\n _match: simpleInlineRegex(TEXT_BOLD_R),\n _order: Priority.MED,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'strong',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEmphasized]: {\n _qualify: ['*', '_'],\n _match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'em',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEscaped]: {\n _qualify: ['\\\\'],\n _match: simpleInlineRegex(TEXT_ESCAPED_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { text: capture[1], type: RuleType.text };\n },\n },\n [RuleType.textMarked]: {\n _qualify: ['=='],\n _match: simpleInlineRegex(TEXT_MARKED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'mark',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textStrikethroughed]: {\n _qualify: ['~~'],\n _match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'del',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n };\n\n return rules;\n};\n\n// Removed compilerCache completely to avoid issues with props changes not invalidating cache\n// const compilerCache = new Map<string, unknown>();\n\nexport type ParsedMarkdown = {\n ast: any[];\n footnotes: FootnoteDef[];\n inline: boolean;\n};\n\nexport const parseMarkdown = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): ParsedMarkdown => {\n const dummyCreateElement = () => null;\n const footnotes: FootnoteDef[] = [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = (\n tag: HTMLTag,\n str: string\n ): Record<string, any> | null => {\n if (!str?.trim()) return null;\n\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n if (!attributes) return null;\n\n return attributes.reduce((map: any, raw) => {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(raw.slice(0, delimiterIdx)).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n const mappedKey = ATTRIBUTE_TO_NODE_PROP_MAP[key] ?? key;\n\n if (mappedKey === 'ref') return map;\n map[mappedKey] = attributeValueToNodePropValue(\n tag,\n key,\n value,\n ctx.sanitizer ?? defaultSanitizer\n );\n\n if (\n typeof map[mappedKey] === 'string' &&\n (HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))\n ) {\n map[mappedKey] = parseMarkdown(\n map[mappedKey].trim(),\n ctx,\n options\n ).ast;\n }\n } else if (raw !== 'style') {\n map[ATTRIBUTE_TO_NODE_PROP_MAP[raw] ?? raw] = true;\n }\n\n return map;\n }, {});\n };\n\n const nonParagraphBlockSyntaxes = [\n BLOCKQUOTE_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R,\n HEADING_SETEXT_R,\n NP_TABLE_R,\n ORDERED_LIST_R,\n UNORDERED_LIST_R,\n CUSTOM_COMPONENT_R,\n ];\n\n const containsBlockSyntax = (input: string): boolean => {\n const cleaned = input.replace(TRIM_STARTING_NEWLINES, '');\n const slice = cleaned.length > 2048 ? cleaned.slice(0, 2048) : cleaned;\n\n if (slice.indexOf('\\n\\n') !== -1) return true;\n\n const syntaxes = options.disableParsingRawHTML\n ? nonParagraphBlockSyntaxes\n : [\n ...nonParagraphBlockSyntaxes,\n PARAGRAPH_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n CUSTOM_COMPONENT_R,\n ];\n\n return some(syntaxes as RegExp[], slice);\n };\n\n const baseRules = createRules(\n dummyCreateElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const parser = parserFor(rules);\n\n const result = options.preserveFrontmatter\n ? markdown\n : markdown.replace(FRONT_MATTER_R, '');\n const inline =\n options.forceInline ||\n (!options.forceBlock &&\n SHOULD_RENDER_AS_BLOCK_R.test(\n result.replace(TRIM_STARTING_NEWLINES, '')\n ) === false);\n\n const ast = parser(\n inline\n ? result\n : `${trimEnd(result).replace(TRIM_STARTING_NEWLINES, '')}\\n\\n`,\n { inline }\n );\n\n if (footnotes.length > 0) {\n // Parse footnotes content as well\n for (const def of footnotes) {\n (def as any).parsedAst = parser(def.footnote, { inline: true });\n }\n }\n\n return { ast, footnotes, inline };\n};\n\nexport const renderMarkdownAst = (\n parsed: ParsedMarkdown,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n const components = ctx.components ?? {};\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const createElement = createElementFactory(ctx, options);\n const footnotes = parsed.footnotes || [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = () => null; // Not needed during render\n const containsBlockSyntax = () => false; // Not needed during render\n const nonParagraphBlockSyntaxes: any[] = [];\n\n const baseRules = createRules(\n createElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const emitter = renderFor(createRenderer(rules, options.renderRule));\n\n const inline = parsed.inline;\n const arr = emitter(parsed.ast, { inline }) as unknown as any[];\n\n while (typeof arr[arr.length - 1] === 'string' && !arr[arr.length - 1].trim())\n arr.pop();\n\n const getOuterNode = () => {\n if (options.wrapper === null) return arr;\n const wrapper = options.wrapper ?? (inline ? 'span' : 'div');\n\n if (arr.length > 1 || options.forceWrapper)\n return createElement(wrapper, { key: 'outer' }, arr);\n\n if (arr.length === 1) {\n const node = arr[0];\n\n if (typeof node === 'string') {\n const spanProps: Record<string, any> = { key: 'outer' };\n\n if (!inline && components) {\n const pOverrideProps = (get(components, 'p.props', {}) ??\n {}) as Record<string, any>;\n const mergedClassName = cx(\n spanProps.className,\n pOverrideProps.className\n );\n const finalSpanProps: Record<string, any> = {\n ...spanProps,\n ...pOverrideProps,\n };\n\n if (mergedClassName) finalSpanProps.className = mergedClassName;\n\n return createElement('span', finalSpanProps, node);\n }\n\n return createElement('span', spanProps, node);\n }\n\n return node;\n }\n\n return createElement(wrapper, { key: 'outer' }, null);\n };\n\n const node = getOuterNode();\n\n const result = footnotes.length\n ? createElement(\n 'div',\n null,\n node,\n createElement(\n 'footer',\n { key: 'footer' },\n ...footnotes.map((def) =>\n createElement(\n 'div',\n { id: slug(def.identifier), key: def.identifier },\n def.identifier,\n emitter((def as any).parsedAst || def.footnote, { inline: true })\n )\n )\n )\n )\n : node;\n\n return result;\n};\n\nexport const compile = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n if (typeof markdown !== 'string') {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n 'intlayer: the first argument must be a string. Received',\n typeof markdown\n );\n }\n throw new Error('intlayer: the first argument must be a string');\n }\n\n const parsed = parseMarkdown(markdown, ctx, options);\n return renderMarkdownAst(parsed, ctx, options);\n};\n\nexport const createCompiler =\n (ctx: MarkdownContext<any>) =>\n (markdown: string, options?: MarkdownOptions): unknown =>\n compile(markdown, ctx, options);\n\nexport const compileWithOptions = (\n markdown: string,\n runtime: MarkdownRuntime,\n options: CompileOptions<any> = {}\n): unknown => {\n const {\n components,\n namedCodesToUnicode,\n sanitizer,\n slugify,\n ...compilerOptions\n } = options;\n\n return compile(\n markdown,\n { runtime, components, namedCodesToUnicode, sanitizer, slugify },\n compilerOptions\n );\n};\n"],"mappings":";;;;;;;AA+GA,MAAM,UAAU;AAKhB,MAAM,SAAS,IAAI,OACjB,4JACF;AAEA,MAAM,UAAU,KAAU,eAA8C;CACtE,IAAI,OAAO,QAAQ,UAAU,OAAO;CACpC,IAAI,WAAWA,2BAAI,YAAY,GAAG;CAElC,IAAI,CAAC,YAAY,OAAO,QAAQ,UAAU;EACxC,MAAM,eAAe,IAAI,YAAY;EAErC,MAAM,MAAM,OAAO,KAAK,UAAU,EAAE,MACjC,MAAM,EAAE,YAAY,MAAM,YAC7B;EACA,IAAI,KACF,WAAWA,2BAAI,YAAY,GAAG;CAElC;CAEA,IAAI,CAAC,UAAU,OAAO;CAEtB,OAAO;AACT;AAEA,MAAM,wBACJ,KACA,YAC0B;CAC1B,MAAM,EAAE,SAAS,aAAa,CAAC,MAAM;CACrC,MAAM,eAAe,QAAQ,YACzB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA,CAAC;CAEL,QACE,KACA,OACA,GAAG,aACS;EACZ,IAAI,OAAO,QAAQ,YAAY,aAAa,SAAS,IAAI,YAAY,CAAC,GACpE,OAAO;EAGT,MAAM,cAAc,OAAO,QAAQ;EAEnC,MAAM,YAAYC,0BAAG,OAAO,WAAW,OAAO,KAAK;EAEnD,MAAM,cAAmC,CAAC;EAC1C,IAAI,mBAAmB;EAGvB,IAAI,OACF,KAAK,MAAM,OAAO,OAAO;GACvB,MAAM,QAAQ,MAAM;GAEpB,IAAI,UAAU,UAAa,UAAU,MAAM;GAE3C,IAAI,QAAQ,eAAe,QAAQ,SACjC;QAAI,CAAC,kBAAkB;KACrB,IAAI,WAAW,YAAY,YAAY;KACvC,mBAAmB;IACrB;UAEA,YAAY,OAAO;EAEvB;EAGF,IAAI,CAAC,oBAAoB,WACvB,YAAY,YAAY;EAG1B,IAAI,aAAa;EAEjB,IAAI,QAAQ,kBAAkB,aAC5B,aAAa,QAAQ,eAAe,KAAe,WAAW;EAChE,MAAM,YAAY,OAAO,KAAK,UAAU;EAExC,OAAO,QAAQ,cACb,WACA,YACA,GAAI,SAAS,WAAW,IAAI,CAAC,SAAS,EAAE,IAAI,QAC9C;CACF;AACF;AAEA,MAAM,eACJ,eACA,KACA,SACA,WACA,MACA,iBACA,qBACA,8BACU;CACV,MAAM,QAAQ,UAAkB;EAC9B,IAAI,QAAQ,IAAI,aAAa,UAAU,UAAU,MAAM;GACrD,MAAM,MAAMC,+BAAe,KAAK;GAChC,QAAQ,IAAI,eAAe;IACzB;IACA,YAAY,CAAC,CAAC,IAAI;IAClB,sBAAsB;GACxB,CAAC;EACH;EACA,OAAO,IAAI,UACP,IAAI,QAAQ,OAAOA,8BAAc,IACjCA,+BAAe,KAAK;CAC1B;CACA,MAAM,WAAW,IAAI,aAAaC;CAClC,MAAM,sBAAsB,IAAI,sBAC5B;EAAE,GAAGC;EAAwB,GAAG,IAAI;CAAoB,IACxDA;CAEJ,MAAM,oBACJ,SAC8C;EAC9C,MAAM,UAAU;EAChB,MAAM,SAAS,UAAUC,4CAAiBC;EAC1C,MAAM,cAAc,UAAUC,iDAAsBC;EACpD,MAAM,qBAAqB,UACvBC,wDACAC;EAEJ,OAAO;GACL,WAAW,WAAW,mBAAmB,KAAK,MAAM;GACpD,QAAQC,oCAAa,QAAQ,UAAU;IACrC,MAAM,gBAAgBC,6CAAkB,KAAK,MAAM,eAAe,EAAE;IACpE,MAAM,gBAAgB,MAAM,SAAS,CAAC,MAAM,UAAU,CAAC,MAAM;IAE7D,IAAI,iBAAiB,eAAe;KAClC,MAAM,eAAe,cAAc,MAAM,MAAM;KAE/C,OAAO,OAAO,KAAK,WAAW;IAChC;IAEA,OAAO;GACT,CAAC;GACD,QAAQC,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,MAAM,SAAS,QAAQ;IACvB,MAAM,aAAa,UAAU,CAAC,OAAO,MAAM,GAAG,EAAE,IAAI;IACpD,MAAM,QAAQ,QAAQ,GACnB,QAAQC,wCAAa,IAAI,EACzB,MAAM,WAAW;IAEpB,IAAI,CAAC,OAAO,OAAO;KAAE,OAAO,CAAC;KAAG;KAAS,OAAO;IAAW;IAE3D,IAAI,wBAAwB;IAoC5B,OAAO;KAAE,OAlCM,MAAM,KAAK,MAAM,MAAM;MACpC,MAAM,gBAAgB,mBAAmB,KAAK,IAAI;MAClD,MAAM,QAAQ,gBAAgB,cAAc,GAAG,SAAS;MACxD,MAAM,aAAa,IAAI,OAAO,QAAQ,MAAM,IAAI,IAAI;MACpD,MAAM,UAAU,KACb,QAAQ,YAAY,EAAE,EACtB,QAAQ,oBAAoB,EAAE;MACjC,MAAM,aAAa,MAAM,MAAM,SAAS;MAExC,MAAM,uBADiB,QAAQ,QAAQ,MAAM,MAAM,MAE9B,cAAc;MACnC,wBAAwB;MAExB,MAAM,iBAAiB,MAAM;MAC7B,MAAM,eAAe,MAAM;MAC3B,MAAM,OAAO;MAEb,IAAI;MAEJ,IAAI,sBAAsB;OACxB,MAAM,SAAS;OACf,kBAAkB,GAAGC,+BAAQ,OAAO,EAAE;MACxC,OAAO;OACL,MAAM,SAAS;OACf,kBAAkBA,+BAAQ,OAAO;MACnC;MAEA,MAAM,SAAS,MAAM,iBAAiB,KAAK;MAC3C,MAAM,SAAS;MACf,MAAM,OAAO;MAEb,OAAO;KACT,CAEqB;KAAG;KAAS,OAAO;IAAW;GACrD;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,MAAM,MAAM,KAAK,UAAU,OAAO;IAClC,MAAM,QAA6B,EAAE,KAAK,MAAM,IAAI;IAEpD,IAAI,KAAK,WAAW,KAAK,SAAS,MAAM,MAAM,QAAQ,KAAK;IAE3D,OAAO,cACL,KACA,OACA,GAAG,KAAK,MAAM,KAAK,MAAM,MACvB,cAAc,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,MAAM,KAAK,CAAC,CACrD,CACF;GACF;EACF;CACF;CAEA,MAAM,kBACJ,QACA,UAC4B;EAC5B,IACE,MAAM,UACN,MAAM,UACL,MAAM,UACL,OAAO,QAAQ,MAAM,MAAM,MAC3B,MAAM,aAAa,QAAQ,MAAM,MAAM,IAEzC,OAAO;EACT,IAAI,QAAQ;EACZ,OAAO,MAAM;GACX,MAAM,eAAe,OAAO,QAAQ,MAAM,KAAK;GAC/C,MAAM,OAAO,OAAO,MAClB,OACA,iBAAiB,KAAK,SAAY,eAAe,CACnD;GAEA,IAAIC,4BAAK,2BAA2B,IAAI,GAAG;GAE3C,IAAI,iBAAiB,MAAM,CAAC,KAAK,KAAK,GAAG;GACzC,QAAQ,eAAe;EACzB;EACA,MAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;EAGnC,IAAI,UAAU,IAAI,OAAO;EACzB,MAAM,WAAWD,+BAAQ,KAAK;EAE9B,IAAI,aAAa,IAAI,OAAO;EAE5B,OAAO;GAAC;GAAO;GAAW;EAAQ;CACpC;CA6oBA,OAAO;GA1oBJE,oCAAS,aAAa;GACrB,UAAU,CAAC,GAAG;GACd,QAAQC,kCAAWC,uCAAY;GAC/B,QAAQN,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,MAAM,aAAa,QAAQ,GACxB,QAAQO,6DAAkC,EAAE,EAC5C,MAAMC,6CAAkB;IAC3B,MAAM,QAAQ,aAAa;IAC3B,MAAM,UAAU,aAAa,MAAM;IAMnC,OAAO;KAAE;KAAO,UALG,QAAQ,QAAQ,IAAI,MAAM,KAEzCC,kCAAW,OAAO,SAAS,KAAK,IAChCC,mCAAY,OAAO,SAAS,KAAK;IAEZ;GAC3B;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,MAAM,QAA6B,EAAE,KAAK,MAAM,IAAI;IAEpD,IAAI,KAAK,OAAO;KACd,MAAM,YAAY,kBAAkB,KAAK,KAAK,MAAM,YAAY,CAAC;KACjE,KAAK,SAAS,QAAQ;MACpB,OAAO,CAAC;MACR,UAAU,CAAC;OAAE,MAAMN,oCAAS;OAAM,MAAM,KAAK;MAAM,CAAC;MACpD,cAAc;MACd,MAAMA,oCAAS;MACf,KAAK;KACP,CAAQ;IACV;IAEA,OAAO,cAAc,cAAc,OAAO,OAAO,KAAK,UAAU,KAAK,CAAC;GACxE;EACF;GACCA,oCAAS,YAAY;GACpB,UAAU,CAAC,IAAI;GACf,QAAQO,qCAAcC,uCAAY;GAClC,QAAQZ,oCAAS;GACjB,QAAQa;GACR,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG;IACzB,OAAO,cAAc,MAAM,EAAE,KAAK,MAAM,IAAI,CAAC;GAC/C;EACF;GACCT,oCAAS,gBAAgB;GACxB,UAAU;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;GAAI;GAC7C,QAAQC,kCAAWS,2CAAgB;GACnC,QAAQd,oCAAS;GACjB,QAAQa;GACR,QAAQ,GAAG,IAAI,QAAQ,CAAC,GAAG;IACzB,OAAO,cAAc,MAAM,EAAE,KAAK,MAAM,IAAI,CAAC;GAC/C;EACF;GACCT,oCAAS,YAAY;GACpB,UAAU,CAAC,MAAM;GACjB,QAAQC,kCAAWU,uCAAY;GAC/B,QAAQf,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KACL,MAAMI,oCAAS;KACf,MAAM;KACN,MAAMY,sCAAed,+BAAQ,QAAQ,GAAG,QAAQ,WAAW,EAAE,CAAC,CAAC;IACjE;GACF;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,MAAM,QAAQ,EAAE,GAAK,KAAa,SAAS,CAAC,EAAG;IAC/C,MAAM,YAAY,KAAK,OAAO,QAAQ,KAAK,SAAS;IACpD,MAAM,YAAY,MAAM,YACpB,GAAG,MAAM,UAAU,GAAG,cACtB;IAEJ,OAAO,cACL,OACA,EAAE,KAAK,MAAM,IAAI,GACjB,cAAc,QAAQ,OAAO,KAAK,IAAI,CACxC;GACF;EACF;GACCE,oCAAS,aAAa;GACrB,UAAU,CAAC,OAAO,KAAK;GACvB,QAAQC,kCAAWY,8CAAmB;GACtC,QAAQjB,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KACL,OAAO,gBAAgB,QAAQ,QAAQ,MAAM,EAAE;KAC/C,MAAM,QAAQ,MAAM;KACpB,MAAM,QAAQ;KACd,MAAMI,oCAAS;IACjB;GACF;EACF;GACCA,oCAAS,aAAa;GACrB,UAAU,CAAC,GAAG;GACd,QAAQc,yCAAkBC,wCAAa;GACvC,QAAQnB,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO,EAAE,MAAMgB,sCAAe,QAAQ,EAAE,EAAE;GAC5C;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,OAAO,cAAc,QAAQ,EAAE,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI;GAC5D;EACF;GACCZ,oCAAS,WAAW;GACnB,UAAU,CAAC,IAAI;GACf,QAAQC,kCAAWe,qCAAU;GAC7B,QAAQpB,oCAAS;GACjB,OAAO,SAAS;IACd,UAAU,KAAK;KAAE,UAAU,QAAQ;KAAI,YAAY,QAAQ;IAAG,CAAC;IAE/D,OAAO,CAAC;GACV;GACA,SAASqB;EACX;GACCjB,oCAAS,oBAAoB;GAC5B,UAAU,CAAC,IAAI;GACf,QAAQkB,mCAAYC,+CAAoB;GACxC,QAAQvB,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KAAE,QAAQ,IAAI,KAAK,QAAQ,EAAE;KAAK,MAAM,QAAQ;IAAG;GAC5D;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,OAAO,cACL,KACA;KACE,KAAK,MAAM;KACX,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,KAAK;IAC9C,GACA,cAAc,OAAO,EAAE,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,CACpD;GACF;EACF;GACCI,oCAAS,UAAU;GAClB,UAAU,CAAC,OAAO,KAAK;GACvB,QAAQkB,mCAAYE,qCAAU;GAC9B,QAAQxB,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO,EAAE,WAAW,QAAQ,GAAG,YAAY,MAAM,IAAI;GACvD;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,OAAO,cAAc,SAAS;KAC5B,SAAS,KAAK;KACd,KAAK,MAAM;KACX,UAAU;KACV,MAAM;IACR,CAAC;GACH;EACF;GACCI,oCAAS,UAAU;GAClB,UAAU,CAAC,GAAG;GACd,QAAQC,kCACN,QAAQ,qBAAqBoB,qDAA0BC,oCACzD;GACA,QAAQ1B,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO;KACL,UAAUU,mCAAY,OAAO,QAAQ,IAAI,KAAK;KAC9C,IAAI,KAAK,QAAQ,EAAE;KACnB,OAAO,QAAQ,GAAG;IACpB;GACF;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,IAAI,KAAK,SACT;KAAE,IAAI,KAAK;KAAI,KAAK,MAAM;IAAI,GAC9B,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACCN,oCAAS,gBAAgB;GACxB,WAAW,WAAW;IACpB,MAAM,UAAU,OAAO,QAAQ,IAAI;IAEnC,OACE,UAAU,KACV,UAAU,OAAO,SAAS,MACzB,OAAO,UAAU,OAAO,OAAO,OAAO,UAAU,OAAO;GAE5D;GACA,QAAQC,kCAAWsB,2CAAgB;GACnC,QAAQ3B,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO;KACL,UAAUU,mCAAY,OAAO,QAAQ,IAAI,KAAK;KAC9C,OAAO,QAAQ,OAAO,MAAM,IAAI;KAChC,MAAMN,oCAAS;IACjB;GACF;EACF;GACCA,oCAAS,YAAY;GACpB,WAAW,WAAW;IACpB,IAAI,QAAQ,uBAAuB,OAAO;IAE1C,MAAM,QAAQ,OAAO,MAAM,2BAA2B;IACtD,IAAI,CAAC,OAAO,OAAO;IACnB,MAAM,MAAM,MAAM;IAElB,OAAO,OAAO,YAAY,EAAE,QAAQ,KAAK,IAAI,YAAY,EAAE,EAAE,MAAM;GACrE;GACA,QAAQO,qCAAciB,+CAAoB;GAC1C,QAAQ5B,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAE5B,MAAM,aADI,QAAQ,GAAG,MAAM6B,kDACR,IAAI,MAAM;IAC7B,MAAM,UAAUC,0DACd,QAAQ,IACR,UACF;IACA,MAAM,YAAY,oBAAoB,OAAO,IACzCrB,oCACAC;IACJ,MAAM,UAAU,QAAQ,GAAG,KAAK;IAChC,MAAM,eACJqB,wDAA6B,QAAQ,QAAQ,YAAY,CAAC,MAAM;IAClE,MAAM,MAAO,eAAe,QAAQ,YAAY,IAAI;IACpD,MAAM,MAAW;KACf,OAAO,gBAAgB,KAAK,QAAQ,MAAM,EAAE;KAC5C;KACA;IACF;IACA,MAAM,WAAW,MAAM,YAAY,QAAQ,YAAY,MAAM;IAE7D,IAAI,cACF,IAAI,OAAO,QAAQ;SACd;KACL,MAAM,aAAa,MAAM;KACzB,MAAM,SAAS;KACf,IAAI,WAAW,UAAU,OAAO,SAAS,KAAK;KAC9C,MAAM,SAAS;IACjB;IACA,MAAM,WAAW;IAEjB,OAAO;GACT;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,KAAK,KACL;KAAE,KAAK,MAAM;KAAK,GAAI,KAAK,SAAS,CAAC;IAAG,GACxC,KAAK,SAAS,KAAK,WAAW,OAAO,KAAK,UAAU,KAAK,IAAI,GAC/D;GACF;EACF;GACC3B,oCAAS,cAAc;GACtB,UAAU,CAAC,IAAI;GACf,QAAQO,qCAAcqB,yCAAc;GACpC,QAAQhC,oCAAS;GACjB,QAAQa;GACR,SAASQ;EACX;GACCjB,oCAAS,kBAAkB;GAC1B,WAAW,WAAW;IACpB,IAAI,QAAQ,uBAAuB,OAAO;IAE1C,OAAO,oCAAoC,KAAK,MAAM;GACxD;GACA,QAAQO,qCAAcsB,sDAA2B;GACjD,QAAQjC,oCAAS;GACjB,OAAO,SAAS;IACd,MAAM,MAAM,QAAQ,GAAG,KAAK;IAE5B,OAAO;KAAE,OAAO,gBAAgB,KAAK,QAAQ,MAAM,EAAE;KAAG;IAAI;GAC9D;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,OAAO,cAAc,KAAK,KAAK;KAC7B,KAAK,MAAM;KACX,GAAI,KAAK,SAAS,CAAC;IACrB,CAAC;GACH;EACF;GACCI,oCAAS,kBAAkB;GAC1B,WAAW,WAAW,0BAA0B,KAAK,MAAM;GAC3D,QAAQO,qCAAcuB,6CAAkB;GACxC,QAAQlC,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAE5B,MAAM,aADI,QAAQ,GAAG,MAAM6B,kDACR,IAAI,MAAM;IAC7B,MAAM,UAAUC,0DACd,QAAQ,IACR,UACF;IACA,MAAM,YAAY,oBAAoB,OAAO,IACzCrB,oCACAC;IACJ,MAAM,MAAM,QAAQ,GAAG,KAAK;IAC5B,MAAM,MAAW;KACf,OAAO,gBAAgB,KAAgB,QAAQ,MAAM,EAAE;KACvD,cAAc;KACd;IACF;IACA,MAAM,aAAa,MAAM;IACzB,MAAM,SAAS;IACf,IAAI,WAAW,UAAU,OAAO,SAAS,KAAK;IAC9C,MAAM,SAAS;IAEf,OAAO;GACT;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,KAAK,KACL;KAAE,KAAK,MAAM;KAAK,GAAI,KAAK,SAAS,CAAC;IAAG,GACxC,KAAK,SAAS,KAAK,WAAW,OAAO,KAAK,UAAU,KAAK,IAAI,GAC/D;GACF;EACF;GACCN,oCAAS,YAAY;GACpB,QAAQ;GACR,QAAQJ,oCAAS;GACjB,QAAQmC;GACR,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,KACA,EAAE,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACC/B,oCAAS,QAAQ;GAChB,UAAU,CAAC,IAAI;GACf,QAAQc,yCAAkB,OAAO;GACjC,QAAQlB,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KACL,KAAKgB,sCAAe,QAAQ,EAAE;KAC9B,QAAQA,sCAAe,QAAQ,EAAE;KACjC,OAAOA,sCAAe,QAAQ,EAAE;IAClC;GACF;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,OAAO,cAAc,OAAO;KAC1B,KAAK,MAAM;KACX,KAAK,KAAK,OAAO;KACjB,OAAO,KAAK,SAAS;KACrB,KAAK,SAAS,KAAK,QAAQ,OAAO,KAAK,KAAK;IAC9C,CAAC;GACH;EACF;GACCZ,oCAAS,OAAO;GACf,UAAU,CAAC,GAAG;GACd,QAAQkB,mCAAY,MAAM;GAC1B,QAAQtB,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO;KACL,UAAUoC,yCAAkB,OAAO,QAAQ,IAAI,KAAK;KACpD,QAAQpB,sCAAe,QAAQ,EAAE;KACjC,OAAOA,sCAAe,QAAQ,EAAE;IAClC;GACF;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,MAAM,gBAAgB,SAAS,KAAK,QAAQ,KAAK,MAAM;IACvD,IACE,QAAQ,IAAI,aAAa,UACzB,KAAK,OAAO,SAAS,aAAa,GAElC,QAAQ,IAAI,6BAA6B;KACvC,QAAQ,KAAK;KACb;KACA,WAAW,iBAAiB;IAC9B,CAAC;IAEH,OAAO,cACL,KACA;KACE,KAAK,MAAM;KACX,MAAM,iBAAiB;KACvB,OAAO,KAAK,SAAS;IACvB,GACA,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACCZ,oCAAS,8BAA8B;GACtC,UAAU,CAAC,GAAG;GACd,QAAQkB,mCAAYe,0CAAe;GACnC,QAAQrC,oCAAS;GACjB,OAAO,SAAS;IACd,IAAI,SAAS,QAAQ;IACrB,IAAI,UAAU;IAEd,IAAI,OAAO,QAAQ,GAAG,MAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,IAAI;KAC7D,UAAU;KACV,SAAS,OAAO,QAAQ,WAAW,EAAE;IACvC;IAEA,OAAO;KACL,UAAU,CAAC;MAAE,MAAM;MAAQ,MAAMI,oCAAS;KAAK,CAAC;KAChD,QAAQ,UAAU,UAAU,WAAW;KACvC,MAAMA,oCAAS;IACjB;GACF;EACF;GACCA,oCAAS,sBAAsB;GAC9B,WAAW,QAAQ,UACjB,CAAC,EACC,MAAM,UACN,CAAC,MAAM,YACP,CAAC,QAAQ,oBACRkC,kCAAW,QAAQ,SAAS,KAAKA,kCAAW,QAAQ,UAAU;GAEnE,QAAQhB,mCAAYiB,mDAAwB;GAC5C,QAAQvC,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KACL,UAAU,CAAC;MAAE,MAAM,QAAQ;MAAI,MAAMI,oCAAS;KAAK,CAAC;KACpD,QAAQ,QAAQ;KAChB,MAAMA,oCAAS;IACjB;GACF;EACF;GACCA,oCAAS,mBAAmB;GAC3B,QAAQC,kCAAWmC,gDAAqB;GACxC,QAAQxC,oCAAS;GACjB,QAAQa;GACR,UAAU;IACR,OAAO;GACT;EACF;GACCT,oCAAS,cAAc,kBAAwB;GAC/CA,oCAAS,gBAAgB,kBAA0B;GACnDA,oCAAS,MAAM;GACd,UAAU,CAAC,GAAG;GACd,QAAQO,qCAAc8B,kDAAuB;GAC7C,QAAQzC,oCAAS;GACjB,OAAO,SAAS;IACd,KAAK,QAAQ,MAAM;KAAE,QAAQ,QAAQ;KAAI,OAAO,QAAQ;IAAG;IAE3D,OAAO,CAAC;GACV;GACA,SAASqB;EACX;GACCjB,oCAAS,WAAW;GACnB,UAAU,CAAC,IAAI;GACf,QAAQc,yCAAkBwB,4CAAiB;GAC3C,QAAQ1C,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KACL,KAAK,QAAQ,KAAKgB,sCAAe,QAAQ,EAAE,IAAI;KAC/C,KAAK,QAAQ;IACf;GACF;GACA,QAAQ,MAAM,GAAG,QAAQ,CAAC,GAAG;IAC3B,MAAM,MAAM,KAAK,KAAK;IAEtB,IAAI,CAAC,KAAK,OAAO;IAEjB,OAAO,cAAc,OAAO;KAC1B,KAAK,MAAM;KACX,KAAK,KAAK;KACV,KAAK,SAAS,IAAI,QAAQ,OAAO,KAAK,KAAK;KAC3C,OAAO,IAAI;IACb,CAAC;GACH;EACF;GACCZ,oCAAS,UAAU;GAClB,WAAW,WAAW,OAAO,OAAO,OAAO,OAAO,QAAQ,IAAI,MAAM;GACpE,QAAQkB,mCAAYqB,2CAAgB;GACpC,QAAQ3C,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO;KACL,UAAUoC,yCAAkB,OAAO,QAAQ,IAAI,KAAK;KACpD,kBAAkB,QAAQ;KAC1B,KAAK,QAAQ;IACf;GACF;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,MAAM,MAAM,KAAK,KAAK;IAEtB,IAAI,CAAC,KACH,OAAO,cACL,QACA,EAAE,KAAK,MAAM,IAAI,GACjB,KAAK,gBACP;IAEF,OAAO,cACL,KACA;KACE,KAAK,MAAM;KACX,MAAM,SAAS,IAAI,QAAQ,KAAK,MAAM,KAAK;KAC3C,OAAO,IAAI;IACb,GACA,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACChC,oCAAS,QAAQ;GAChB,UAAU,CAAC,GAAG;GACd,QAAQC,kCAAWuC,qCAAU;GAC7B,QAAQ5C,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,MAAM,SAAS;IACf,MAAM,QAAQ,QAAQ,KAAK6C,uCAAgB,QAAQ,EAAE,IAAI,CAAC;IAC1D,MAAM,QAAQ,QAAQ,KAClBC,uCAAgB,QAAQ,IAAI,OAAO,KAAK,IACxC,CAAC;IACL,MAAM,SAASC,qCAAc,QAAQ,IAAI,OAAO,OAAO,CAAC,CAAC,MAAM,MAAM;IACrE,MAAM,SAAS;IAEf,OAAO,MAAM,SACT;KAAE;KAAO;KAAO;KAAQ,MAAM3C,oCAAS;IAAM,IAC7C;KAAE,UAAU,OAAO,KAAK;KAAG,MAAMA,oCAAS;IAAU;GAC1D;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,MAAM,QAAQ;IACd,MAAM,YAAY,MAChB,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,SACjC,EAAE,WAAW,MAAM,MAAM,GAAG,IAC5B,CAAC;IAEP,OAAO,cACL,SACA,EAAE,KAAK,MAAM,IAAI,GACjB,cACE,SACA,MACA,cACE,MACA,MACA,GAAG,MAAM,OAAO,KAAK,GAAG,MACtB,cACE,MACA;KAAE,KAAK;KAAG,OAAO,SAAS,CAAC;IAAE,GAC7B,OAAO,GAAG,KAAK,CACjB,CACF,CACF,CACF,GACA,cACE,SACA,MACA,GAAG,MAAM,MAAM,KAAK,KAAK,MACvB,cACE,MACA,EAAE,KAAK,EAAE,GACT,GAAG,IAAI,KAAK,GAAG,MACb,cACE,MACA;KAAE,KAAK;KAAG,OAAO,SAAS,CAAC;IAAE,GAC7B,OAAO,GAAG,KAAK,CACjB,CACF,CACF,CACF,CACF,CACF;GACF;EACF;GACCA,oCAAS,iBAAiB;GACzB,SAAS,QAAQ,UACf,MAAM,WAAW,OAAO,OAAO,MAAM,MAAM,KAAK,MAAM,IAAI;GAC5D,QAAQJ,oCAAS;GACjB,SAAS;IACP,OAAO,EAAE,MAAMI,oCAAS,eAAe;GACzC;GACA,UAAU;IACR,OAAO;GACT;EACF;GACCA,oCAAS,OAAO;GACf,QAAQN,oCAAa,QAAQ,WAAW;IACtC,MAAM,aAAakD,uCAAY,KAAK,MAAM;IAE1C,IAAI,YAAY,OAAO;IAEvB,OAAOC,wCAAa,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM;GAC3D,CAAC;GACD,QAAQjD,oCAAS;GACjB,OAAO,SAAS;IACd,MAAM,OAAO,QAAQ;IAErB,OAAO,EACL,MACE,KAAK,QAAQ,GAAG,MAAM,KAClB,OACA,KAAK,QAAQkD,8CAAmB,GAAG,MAAM;KACvC,IAAI,EAAE,WAAW,IAAI,GACnB,OAAO,OAAO,aAAa,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;KACrD,IAAI,EAAE,WAAW,GAAG,GAClB,OAAO,OAAO,aAAa,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;KACrD,OAAO,oBAAoB,MAAM;IACnC,CAAC,EACT;GACF;GACA,QAAQ,MAAM;IACZ,OAAO,KAAK;GACd;EACF;GACC9C,oCAAS,aAAa;GACrB,UAAU,CAAC,MAAM,IAAI;GACrB,QAAQc,yCAAkBiC,sCAAW;GACrC,QAAQnD,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO,EAAE,UAAU,MAAM,QAAQ,IAAI,KAAK,EAAE;GAC9C;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,UACA,EAAE,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACCI,oCAAS,iBAAiB;GACzB,UAAU,CAAC,KAAK,GAAG;GACnB,QAAQc,yCAAkBkC,4CAAiB;GAC3C,QAAQpD,oCAAS;GACjB,OAAO,SAAS,OAAO,OAAO;IAC5B,OAAO,EAAE,UAAU,MAAM,QAAQ,IAAI,KAAK,EAAE;GAC9C;GACA,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,MACA,EAAE,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACCI,oCAAS,cAAc;GACtB,UAAU,CAAC,IAAI;GACf,QAAQc,yCAAkBmC,yCAAc;GACxC,QAAQrD,oCAAS;GACjB,OAAO,SAAS;IACd,OAAO;KAAE,MAAM,QAAQ;KAAI,MAAMI,oCAAS;IAAK;GACjD;EACF;GACCA,oCAAS,aAAa;GACrB,UAAU,CAAC,IAAI;GACf,QAAQc,yCAAkBoC,wCAAa;GACvC,QAAQtD,oCAAS;GACjB,QAAQmC;GACR,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,QACA,EAAE,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;GACC/B,oCAAS,sBAAsB;GAC9B,UAAU,CAAC,IAAI;GACf,QAAQc,yCAAkBqC,iDAAsB;GAChD,QAAQvD,oCAAS;GACjB,QAAQmC;GACR,QAAQ,MAAM,QAAQ,QAAQ,CAAC,GAAG;IAChC,OAAO,cACL,OACA,EAAE,KAAK,MAAM,IAAI,GACjB,OAAO,KAAK,UAAU,KAAK,CAC7B;GACF;EACF;CAGS;AACb;AAWA,MAAa,iBACX,WAAmB,IACnB,KACA,UAA2B,CAAC,MACT;CACnB,MAAM,2BAA2B;CACjC,MAAM,YAA2B,CAAC;CAClC,MAAM,OAA2D,CAAC;CAElE,MAAM,mBACJ,KACA,QAC+B;EAC/B,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO;EAEzB,MAAM,aAAa,IAAI,MAAMqB,2CAAgB;EAE7C,IAAI,CAAC,YAAY,OAAO;EAExB,OAAO,WAAW,QAAQ,KAAU,QAAQ;GAC1C,MAAM,eAAe,IAAI,QAAQ,GAAG;GAEpC,IAAI,iBAAiB,IAAI;IACvB,MAAM,MAAMC,6CAAsB,IAAI,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK;IACnE,MAAM,QAAQC,+BAAQ,IAAI,MAAM,eAAe,CAAC,EAAE,KAAK,CAAC;IACxD,MAAM,YAAYC,sDAA2B,QAAQ;IAErD,IAAI,cAAc,OAAO,OAAO;IAChC,IAAI,aAAaC,qDACf,KACA,KACA,OACA,IAAI,aAAatE,gCACnB;IAEA,IACE,OAAO,IAAI,eAAe,aACzBsC,gDAAqB,KAAK,IAAI,UAAU,KACvCK,uDAA4B,KAAK,IAAI,UAAU,IAEjD,IAAI,aAAa,cACf,IAAI,WAAW,KAAK,GACpB,KACA,OACF,EAAE;GAEN,OAAO,IAAI,QAAQ,SACjB,IAAI0B,sDAA2B,QAAQ,OAAO;GAGhD,OAAO;EACT,GAAG,CAAC,CAAC;CACP;CAEA,MAAM,4BAA4B;EAChCrD;EACAW;EACAF;EACA,QAAQ,qBAAqBU,qDAA0BC;EACvDC;EACAiB;EACApD;EACAC;EACAyC;CACF;CAEA,MAAM,uBAAuB,UAA2B;EACtD,MAAM,UAAU,MAAM,QAAQ2B,mDAAwB,EAAE;EACxD,MAAM,QAAQ,QAAQ,SAAS,OAAO,QAAQ,MAAM,GAAG,IAAI,IAAI;EAE/D,IAAI,MAAM,QAAQ,MAAM,MAAM,IAAI,OAAO;EAazC,OAAO1D,4BAXU,QAAQ,wBACrB,4BACA;GACE,GAAG;GACH2D;GACAlC;GACAI;GACAC;GACAC;EACF,GAE8B,KAAK;CACzC;CAEA,MAAM,YAAY,YAChB,oBACA,KACA,SACA,WACA,MACA,iBACA,qBACA,yBACF;CAYA,MAAM,SAAS6B,kCAVD,QAAQ,wBAClB,OAAO,KAAK,SAAS,EAAE,QAAQ,KAAK,QAAQ;EAC1C,IAAI,QAAQ3D,oCAAS,aAAa,QAAQA,oCAAS,iBACjD,IAAI,OAAO,UAAU;EAGvB,OAAO;CACT,GAAG,CAAC,CAAU,IACd,SAE0B;CAE9B,MAAM,SAAS,QAAQ,sBACnB,WACA,SAAS,QAAQ4D,2CAAgB,EAAE;CACvC,MAAM,SACJ,QAAQ,eACP,CAAC,QAAQ,cACRC,oDAAyB,KACvB,OAAO,QAAQJ,mDAAwB,EAAE,CAC3C,MAAM;CAEV,MAAM,MAAM,OACV,SACI,SACA,GAAG3D,+BAAQ,MAAM,EAAE,QAAQ2D,mDAAwB,EAAE,EAAE,OAC3D,EAAE,OAAO,CACX;CAEA,IAAI,UAAU,SAAS,GAErB,KAAK,MAAM,OAAO,WAChB,AAAC,IAAY,YAAY,OAAO,IAAI,UAAU,EAAE,QAAQ,KAAK,CAAC;CAIlE,OAAO;EAAE;EAAK;EAAW;CAAO;AAClC;AAEA,MAAa,qBACX,QACA,KACA,UAA2B,CAAC,MAChB;CACZ,MAAM,aAAa,IAAI,cAAc,CAAC;CACtC,MAAM,QAAQ,UAAkB;EAC9B,IAAI,QAAQ,IAAI,aAAa,UAAU,UAAU,MAAM;GACrD,MAAM,MAAMxE,+BAAe,KAAK;GAChC,QAAQ,IAAI,eAAe;IACzB;IACA,YAAY,CAAC,CAAC,IAAI;IAClB,sBAAsB;GACxB,CAAC;EACH;EACA,OAAO,IAAI,UACP,IAAI,QAAQ,OAAOA,8BAAc,IACjCA,+BAAe,KAAK;CAC1B;CACA,MAAM,gBAAgB,qBAAqB,KAAK,OAAO;CACvD,MAAM,YAAY,OAAO,aAAa,CAAC;CACvC,MAAM,OAA2D,CAAC;CAElE,MAAM,wBAAwB;CAC9B,MAAM,4BAA4B;CAGlC,MAAM,YAAY,YAChB,eACA,KACA,SACA,WACA,MACA,iBACA,qBACA,CAAwB,CAC1B;CAYA,MAAM,UAAU6E,oCAAUC,yCAVZ,QAAQ,wBAClB,OAAO,KAAK,SAAS,EAAE,QAAQ,KAAK,QAAQ;EAC1C,IAAI,QAAQ/D,oCAAS,aAAa,QAAQA,oCAAS,iBACjD,IAAI,OAAO,UAAU;EAGvB,OAAO;CACT,GAAG,CAAC,CAAU,IACd,WAE4C,QAAQ,UAAU,CAAC;CAEnE,MAAM,SAAS,OAAO;CACtB,MAAM,MAAM,QAAQ,OAAO,KAAK,EAAE,OAAO,CAAC;CAE1C,OAAO,OAAO,IAAI,IAAI,SAAS,OAAO,YAAY,CAAC,IAAI,IAAI,SAAS,GAAG,KAAK,GAC1E,IAAI,IAAI;CAEV,MAAM,qBAAqB;EACzB,IAAI,QAAQ,YAAY,MAAM,OAAO;EACrC,MAAM,UAAU,QAAQ,YAAY,SAAS,SAAS;EAEtD,IAAI,IAAI,SAAS,KAAK,QAAQ,cAC5B,OAAO,cAAc,SAAS,EAAE,KAAK,QAAQ,GAAG,GAAG;EAErD,IAAI,IAAI,WAAW,GAAG;GACpB,MAAM,OAAO,IAAI;GAEjB,IAAI,OAAO,SAAS,UAAU;IAC5B,MAAM,YAAiC,EAAE,KAAK,QAAQ;IAEtD,IAAI,CAAC,UAAU,YAAY;KACzB,MAAM,iBAAkBjB,2BAAI,YAAY,WAAW,CAAC,CAAC,KACnD,CAAC;KACH,MAAM,kBAAkBC,0BACtB,UAAU,WACV,eAAe,SACjB;KACA,MAAM,iBAAsC;MAC1C,GAAG;MACH,GAAG;KACL;KAEA,IAAI,iBAAiB,eAAe,YAAY;KAEhD,OAAO,cAAc,QAAQ,gBAAgB,IAAI;IACnD;IAEA,OAAO,cAAc,QAAQ,WAAW,IAAI;GAC9C;GAEA,OAAO;EACT;EAEA,OAAO,cAAc,SAAS,EAAE,KAAK,QAAQ,GAAG,IAAI;CACtD;CAEA,MAAM,OAAO,aAAa;CAsB1B,OApBe,UAAU,SACrB,cACE,OACA,MACA,MACA,cACE,UACA,EAAE,KAAK,SAAS,GAChB,GAAG,UAAU,KAAK,QAChB,cACE,OACA;EAAE,IAAI,KAAK,IAAI,UAAU;EAAG,KAAK,IAAI;CAAW,GAChD,IAAI,YACJ,QAAS,IAAY,aAAa,IAAI,UAAU,EAAE,QAAQ,KAAK,CAAC,CAClE,CACF,CACF,CACF,IACA;AAGN;AAEA,MAAa,WACX,WAAmB,IACnB,KACA,UAA2B,CAAC,MAChB;CACZ,IAAI,OAAO,aAAa,UAAU;EAChC,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,MACN,2DACA,OAAO,QACT;EAEF,MAAM,IAAI,MAAM,+CAA+C;CACjE;CAGA,OAAO,kBADQ,cAAc,UAAU,KAAK,OACd,GAAG,KAAK,OAAO;AAC/C;AAEA,MAAa,kBACV,SACA,UAAkB,YACjB,QAAQ,UAAU,KAAK,OAAO;AAElC,MAAa,sBACX,UACA,SACA,UAA+B,CAAC,MACpB;CACZ,MAAM,EACJ,YACA,qBACA,WACA,SACA,GAAG,oBACD;CAEJ,OAAO,QACL,UACA;EAAE;EAAS;EAAY;EAAqB;EAAW;CAAQ,GAC/D,eACF;AACF"}
|
|
@@ -104,6 +104,7 @@ exports.normalizeWhitespace = require_markdown_utils.normalizeWhitespace;
|
|
|
104
104
|
exports.parseBlock = require_markdown_utils.parseBlock;
|
|
105
105
|
exports.parseCaptureInline = require_markdown_utils.parseCaptureInline;
|
|
106
106
|
exports.parseInline = require_markdown_utils.parseInline;
|
|
107
|
+
exports.parseMarkdown = require_markdown_compiler.parseMarkdown;
|
|
107
108
|
exports.parseSimpleInline = require_markdown_utils.parseSimpleInline;
|
|
108
109
|
exports.parseStyleAttribute = require_markdown_utils.parseStyleAttribute;
|
|
109
110
|
exports.parseTableAlign = require_markdown_utils.parseTableAlign;
|
|
@@ -113,6 +114,7 @@ exports.parseTableRow = require_markdown_utils.parseTableRow;
|
|
|
113
114
|
exports.parserFor = require_markdown_parser.parserFor;
|
|
114
115
|
exports.qualifies = require_markdown_utils.qualifies;
|
|
115
116
|
exports.renderFor = require_markdown_renderer.renderFor;
|
|
117
|
+
exports.renderMarkdownAst = require_markdown_compiler.renderMarkdownAst;
|
|
116
118
|
exports.renderNothing = require_markdown_utils.renderNothing;
|
|
117
119
|
exports.sanitizer = require_markdown_utils.sanitizer;
|
|
118
120
|
exports.simpleInlineRegex = require_markdown_utils.simpleInlineRegex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"condition.cjs","names":["CONDITION"],"sources":["../../../../src/transpiler/condition/condition.ts"],"sourcesContent":["import type { TypedNodeModel } from '@intlayer/types/nodeType';\nimport { CONDITION, formatNodeType } from '@intlayer/types/nodeType';\n\nexport type ConditionContentStates<Content> = Record<`${boolean}`, Content> & {\n fallback?: Content;\n};\n\nexport type ConditionContent<Content = unknown> = TypedNodeModel<\n typeof CONDITION,\n ConditionContentStates<Content>\n>;\n\n/**\n * Function intended to be used to build intlayer dictionaries.\n *\n * Allow to pick a content based on a condition.\n *\n * Usage:\n *\n * ```ts\n * cond({\n * 'true': 'The condition is validated',\n * 'false': 'The condition is not validated',\n * });\n * ```\n *\n * The last key provided will be used as the fallback value.\n *\n */\nconst condition = <Content>(\n content?: ConditionContentStates<Content>\n): ConditionContent<Content> => formatNodeType(CONDITION, content);\n\nexport { condition as cond };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"condition.cjs","names":["CONDITION"],"sources":["../../../../src/transpiler/condition/condition.ts"],"sourcesContent":["import type { TypedNodeModel } from '@intlayer/types/nodeType';\nimport { CONDITION, formatNodeType } from '@intlayer/types/nodeType';\n\nexport type ConditionContentStates<Content> = Record<`${boolean}`, Content> & {\n fallback?: Content;\n};\n\nexport type ConditionContent<Content = unknown> = TypedNodeModel<\n typeof CONDITION,\n ConditionContentStates<Content>\n>;\n\n/**\n * Function intended to be used to build intlayer dictionaries.\n *\n * Allow to pick a content based on a condition.\n *\n * Usage:\n *\n * ```ts\n * cond({\n * 'true': 'The condition is validated',\n * 'false': 'The condition is not validated',\n * });\n * ```\n *\n * The last key provided will be used as the fallback value.\n *\n */\nconst condition = <Content>(\n content?: ConditionContentStates<Content>\n): ConditionContent<Content> => formatNodeType(CONDITION, content);\n\nexport { condition as cond };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA6BA,MAAM,aACJ,yDAC6CA,oCAAW,OAAO"}
|