@fgv/ts-bcp47 0.9.6 → 2.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/build.lint/_eslint-R7SFxnrl.json +481 -0
- package/dist/ts-bcp47.d.ts +2554 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/lib/data/bcp/overrides.json +20 -0
- package/lib/data/iana/language-subtags.json +57439 -0
- package/{data → lib/data}/iana/language-tag-extensions.json +2 -6
- package/lib/data/unsd/m49.json +3723 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +57 -0
- package/lib/index.js.map +1 -0
- package/lib/packlets/bcp47/bcp47Subtags/converters.d.ts.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/converters.js +2 -1
- package/lib/packlets/bcp47/bcp47Subtags/converters.js.map +1 -0
- package/lib/packlets/bcp47/bcp47Subtags/index.d.ts.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/index.js +1 -1
- package/lib/packlets/bcp47/bcp47Subtags/index.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/model.d.ts +3 -1
- package/lib/packlets/bcp47/bcp47Subtags/model.d.ts.map +1 -0
- package/lib/packlets/bcp47/bcp47Subtags/model.js +24 -0
- package/lib/packlets/bcp47/bcp47Subtags/model.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/validate.d.ts +2 -2
- package/lib/packlets/bcp47/bcp47Subtags/validate.d.ts.map +1 -0
- package/lib/packlets/bcp47/bcp47Subtags/validate.js +74 -0
- package/lib/packlets/bcp47/bcp47Subtags/validate.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/common.d.ts +4 -4
- package/lib/packlets/bcp47/common.d.ts.map +1 -0
- package/lib/packlets/bcp47/common.js +59 -0
- package/lib/packlets/bcp47/common.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/helpers.d.ts +8 -8
- package/lib/packlets/bcp47/helpers.d.ts.map +1 -0
- package/lib/packlets/bcp47/helpers.js +103 -0
- package/lib/packlets/bcp47/helpers.js.map +1 -0
- package/lib/packlets/bcp47/index.d.ts +10 -0
- package/lib/packlets/bcp47/index.d.ts.map +1 -0
- package/lib/packlets/bcp47/index.js +68 -0
- package/lib/packlets/bcp47/index.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/languageRegistryData.d.ts +26 -27
- package/lib/packlets/bcp47/languageRegistryData.d.ts.map +1 -0
- package/lib/packlets/bcp47/languageRegistryData.js +206 -0
- package/lib/packlets/bcp47/languageRegistryData.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/languageTag.d.ts +12 -13
- package/lib/packlets/bcp47/languageTag.d.ts.map +1 -0
- package/lib/packlets/bcp47/languageTag.js +390 -0
- package/lib/packlets/bcp47/languageTag.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/languageTagParser.d.ts +13 -14
- package/lib/packlets/bcp47/languageTagParser.d.ts.map +1 -0
- package/lib/packlets/bcp47/languageTagParser.js +303 -0
- package/lib/packlets/bcp47/languageTagParser.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/match/chooser.d.ts +8 -8
- package/lib/packlets/bcp47/match/chooser.d.ts.map +1 -0
- package/lib/packlets/bcp47/match/chooser.js +92 -0
- package/lib/packlets/bcp47/match/chooser.js.map +1 -0
- package/lib/packlets/bcp47/match/common.d.ts.map +1 -0
- package/lib/packlets/bcp47/match/common.js +52 -0
- package/lib/packlets/bcp47/match/common.js.map +1 -0
- package/lib/packlets/bcp47/match/index.d.ts +4 -0
- package/lib/packlets/bcp47/match/index.d.ts.map +1 -0
- package/lib/packlets/bcp47/match/index.js +45 -0
- package/lib/packlets/bcp47/match/index.js.map +1 -0
- package/lib/packlets/bcp47/match/similarity.d.ts.map +1 -0
- package/lib/packlets/bcp47/match/similarity.js +230 -0
- package/lib/packlets/bcp47/match/similarity.js.map +1 -0
- package/lib/packlets/bcp47/normalization/baseNormalizer.d.ts +35 -0
- package/lib/packlets/bcp47/normalization/baseNormalizer.d.ts.map +1 -0
- package/lib/packlets/bcp47/normalization/baseNormalizer.js +116 -0
- package/lib/packlets/bcp47/normalization/baseNormalizer.js.map +1 -0
- package/lib/packlets/bcp47/normalization/canonicalNormalizer.d.ts +22 -0
- package/lib/packlets/bcp47/normalization/canonicalNormalizer.d.ts.map +1 -0
- package/lib/packlets/bcp47/normalization/canonicalNormalizer.js +113 -0
- package/lib/packlets/bcp47/normalization/canonicalNormalizer.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/normalization/common.d.ts +1 -1
- package/lib/packlets/bcp47/normalization/common.d.ts.map +1 -0
- package/lib/packlets/bcp47/normalization/common.js +82 -0
- package/lib/packlets/bcp47/normalization/common.js.map +1 -0
- package/lib/packlets/bcp47/normalization/index.d.ts.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/normalization/index.js +1 -1
- package/lib/packlets/bcp47/normalization/index.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/normalization/normalizeTag.d.ts +6 -6
- package/lib/packlets/bcp47/normalization/normalizeTag.d.ts.map +1 -0
- package/lib/packlets/bcp47/normalization/normalizeTag.js +105 -0
- package/lib/packlets/bcp47/normalization/normalizeTag.js.map +1 -0
- package/lib/packlets/bcp47/normalization/preferredTagNormalizer.d.ts +27 -0
- package/lib/packlets/bcp47/normalization/preferredTagNormalizer.d.ts.map +1 -0
- package/lib/packlets/bcp47/normalization/preferredTagNormalizer.js +204 -0
- package/lib/packlets/bcp47/normalization/preferredTagNormalizer.js.map +1 -0
- package/lib/packlets/bcp47/overrides/converters.d.ts +19 -0
- package/lib/packlets/bcp47/overrides/converters.d.ts.map +1 -0
- package/lib/packlets/bcp47/overrides/converters.js +76 -0
- package/lib/packlets/bcp47/overrides/converters.js.map +1 -0
- package/lib/packlets/bcp47/overrides/defaultRegistries.d.ts.map +1 -0
- package/lib/packlets/bcp47/overrides/defaultRegistries.js +42 -0
- package/lib/packlets/bcp47/overrides/defaultRegistries.js.map +1 -0
- package/lib/packlets/bcp47/overrides/index.d.ts.map +1 -0
- package/lib/packlets/bcp47/overrides/index.js +30 -0
- package/lib/packlets/bcp47/overrides/index.js.map +1 -0
- package/lib/packlets/bcp47/overrides/model.d.ts +11 -0
- package/lib/packlets/bcp47/overrides/model.d.ts.map +1 -0
- package/lib/packlets/bcp47/overrides/model.js +24 -0
- package/lib/packlets/bcp47/overrides/model.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/overrides/overridesRegistry.d.ts +8 -8
- package/lib/packlets/bcp47/overrides/overridesRegistry.d.ts.map +1 -0
- package/lib/packlets/bcp47/overrides/overridesRegistry.js +113 -0
- package/lib/packlets/bcp47/overrides/overridesRegistry.js.map +1 -0
- package/lib/packlets/bcp47/validation/baseValidator.d.ts +35 -0
- package/lib/packlets/bcp47/validation/baseValidator.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/baseValidator.js +113 -0
- package/lib/packlets/bcp47/validation/baseValidator.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/validation/common.d.ts +1 -1
- package/lib/packlets/bcp47/validation/common.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/common.js +84 -0
- package/lib/packlets/bcp47/validation/common.js.map +1 -0
- package/lib/packlets/bcp47/validation/index.d.ts.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/validation/index.js +1 -1
- package/lib/packlets/bcp47/validation/index.js.map +1 -0
- package/lib/packlets/bcp47/validation/isCanonical.d.ts +22 -0
- package/lib/packlets/bcp47/validation/isCanonical.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/isCanonical.js +106 -0
- package/lib/packlets/bcp47/validation/isCanonical.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/validation/isInPreferredForm.d.ts +4 -4
- package/lib/packlets/bcp47/validation/isInPreferredForm.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/isInPreferredForm.js +73 -0
- package/lib/packlets/bcp47/validation/isInPreferredForm.js.map +1 -0
- package/lib/packlets/bcp47/validation/isStrictlyValid.d.ts +18 -0
- package/lib/packlets/bcp47/validation/isStrictlyValid.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/isStrictlyValid.js +98 -0
- package/lib/packlets/bcp47/validation/isStrictlyValid.js.map +1 -0
- package/lib/packlets/bcp47/validation/isValid.d.ts +24 -0
- package/lib/packlets/bcp47/validation/isValid.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/isValid.js +119 -0
- package/lib/packlets/bcp47/validation/isValid.js.map +1 -0
- package/lib/packlets/bcp47/validation/isWellFormed.d.ts +22 -0
- package/lib/packlets/bcp47/validation/isWellFormed.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/isWellFormed.js +102 -0
- package/lib/packlets/bcp47/validation/isWellFormed.js.map +1 -0
- package/{bcp47 → lib/packlets/bcp47}/validation/validateTag.d.ts +9 -9
- package/lib/packlets/bcp47/validation/validateTag.d.ts.map +1 -0
- package/lib/packlets/bcp47/validation/validateTag.js +159 -0
- package/lib/packlets/bcp47/validation/validateTag.js.map +1 -0
- package/{iana → lib/packlets/iana}/common/converters.d.ts +2 -2
- package/lib/packlets/iana/common/converters.d.ts.map +1 -0
- package/lib/packlets/iana/common/converters.js +85 -0
- package/lib/packlets/iana/common/converters.js.map +1 -0
- package/{iana → lib/packlets/iana}/common/model.d.ts +1 -1
- package/lib/packlets/iana/common/model.d.ts.map +1 -0
- package/lib/packlets/iana/common/model.js +24 -0
- package/lib/packlets/iana/common/model.js.map +1 -0
- package/lib/packlets/iana/common/registeredItems.d.ts.map +1 -0
- package/lib/packlets/iana/common/registeredItems.js +124 -0
- package/lib/packlets/iana/common/registeredItems.js.map +1 -0
- package/lib/packlets/iana/common/utils.d.ts.map +1 -0
- package/lib/packlets/iana/common/utils.js +34 -0
- package/lib/packlets/iana/common/utils.js.map +1 -0
- package/{iana → lib/packlets/iana}/common/validate.d.ts +1 -1
- package/lib/packlets/iana/common/validate.d.ts.map +1 -0
- package/lib/packlets/iana/common/validate.js +62 -0
- package/lib/packlets/iana/common/validate.js.map +1 -0
- package/lib/packlets/iana/converters.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/converters.js +1 -1
- package/lib/packlets/iana/converters.js.map +1 -0
- package/lib/packlets/iana/defaultRegistries.d.ts.map +1 -0
- package/lib/packlets/iana/defaultRegistries.js +42 -0
- package/lib/packlets/iana/defaultRegistries.js.map +1 -0
- package/{iana → lib/packlets/iana}/index.d.ts +4 -2
- package/lib/packlets/iana/index.d.ts.map +1 -0
- package/{iana/jar/language-subtags/tags → lib/packlets/iana}/index.js +18 -6
- package/lib/packlets/iana/index.js.map +1 -0
- package/lib/packlets/iana/jar/converters.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/jar/converters.js +1 -1
- package/lib/packlets/iana/jar/converters.js.map +1 -0
- package/lib/packlets/iana/jar/index.d.ts +5 -0
- package/lib/packlets/iana/jar/index.d.ts.map +1 -0
- package/{unsd/csv → lib/packlets/iana/jar}/index.js +4 -2
- package/lib/packlets/iana/jar/index.js.map +1 -0
- package/{iana → lib/packlets/iana}/jar/jarConverters.d.ts +5 -5
- package/lib/packlets/iana/jar/jarConverters.d.ts.map +1 -0
- package/lib/packlets/iana/jar/jarConverters.js +86 -0
- package/lib/packlets/iana/jar/jarConverters.js.map +1 -0
- package/{iana → lib/packlets/iana}/jar/jarModel.d.ts +1 -1
- package/lib/packlets/iana/jar/jarModel.d.ts.map +1 -0
- package/lib/packlets/iana/jar/jarModel.js +24 -0
- package/lib/packlets/iana/jar/jarModel.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/converters.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/jar/language-subtags/converters.js +1 -1
- package/lib/packlets/iana/jar/language-subtags/converters.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/index.d.ts +5 -0
- package/lib/packlets/iana/jar/language-subtags/index.d.ts.map +1 -0
- package/{iana/jar/language-subtags/registry → lib/packlets/iana/jar/language-subtags}/index.js +29 -28
- package/lib/packlets/iana/jar/language-subtags/index.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/model.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/jar/language-subtags/model.js +1 -1
- package/lib/packlets/iana/jar/language-subtags/model.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/registry/converters.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/registry/converters.js +59 -0
- package/lib/packlets/iana/jar/language-subtags/registry/converters.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/registry/index.d.ts.map +1 -0
- package/{iana/jar/language-subtags → lib/packlets/iana/jar/language-subtags/registry}/index.js +23 -22
- package/lib/packlets/iana/jar/language-subtags/registry/index.js.map +1 -0
- package/{iana → lib/packlets/iana}/jar/language-subtags/registry/model.d.ts +12 -12
- package/lib/packlets/iana/jar/language-subtags/registry/model.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/registry/model.js +46 -0
- package/lib/packlets/iana/jar/language-subtags/registry/model.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/converters.d.ts +55 -0
- package/lib/packlets/iana/jar/language-subtags/tags/converters.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/converters.js +129 -0
- package/lib/packlets/iana/jar/language-subtags/tags/converters.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/index.d.ts +6 -0
- package/lib/packlets/iana/jar/language-subtags/tags/index.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/index.js +58 -0
- package/lib/packlets/iana/jar/language-subtags/tags/index.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/model.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/model.js +24 -0
- package/lib/packlets/iana/jar/language-subtags/tags/model.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/tagValidation.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/tagValidation.js +70 -0
- package/lib/packlets/iana/jar/language-subtags/tags/tagValidation.js.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/validate.d.ts.map +1 -0
- package/lib/packlets/iana/jar/language-subtags/tags/validate.js +88 -0
- package/lib/packlets/iana/jar/language-subtags/tags/validate.js.map +1 -0
- package/lib/packlets/iana/jar/model.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/jar/model.js +1 -1
- package/lib/packlets/iana/jar/model.js.map +1 -0
- package/lib/packlets/iana/language-subtags/common.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/common.js +24 -0
- package/lib/packlets/iana/language-subtags/common.js.map +1 -0
- package/lib/packlets/iana/language-subtags/converters.d.ts +52 -0
- package/lib/packlets/iana/language-subtags/converters.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/converters.js +209 -0
- package/lib/packlets/iana/language-subtags/converters.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/index.d.ts +4 -3
- package/lib/packlets/iana/language-subtags/index.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/index.js +10 -8
- package/lib/packlets/iana/language-subtags/index.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/jarConverters.d.ts +8 -8
- package/lib/packlets/iana/language-subtags/jarConverters.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/jarConverters.js +237 -0
- package/lib/packlets/iana/language-subtags/jarConverters.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/model.d.ts +15 -15
- package/lib/packlets/iana/language-subtags/model.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/model.js +24 -0
- package/lib/packlets/iana/language-subtags/model.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/scope.d.ts +12 -12
- package/lib/packlets/iana/language-subtags/scope.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/scope.js +179 -0
- package/lib/packlets/iana/language-subtags/scope.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/subtagRegistry.d.ts +1 -1
- package/lib/packlets/iana/language-subtags/subtagRegistry.d.ts.map +1 -0
- package/lib/packlets/iana/language-subtags/subtagRegistry.js +150 -0
- package/lib/packlets/iana/language-subtags/subtagRegistry.js.map +1 -0
- package/lib/packlets/iana/language-subtags/validate.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/language-subtags/validate.js +1 -1
- package/lib/packlets/iana/language-subtags/validate.js.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/converters.d.ts +22 -0
- package/lib/packlets/iana/language-tag-extensions/converters.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/converters.js +86 -0
- package/lib/packlets/iana/language-tag-extensions/converters.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/extensionsRegistry.d.ts +2 -2
- package/lib/packlets/iana/language-tag-extensions/extensionsRegistry.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/extensionsRegistry.js +105 -0
- package/lib/packlets/iana/language-tag-extensions/extensionsRegistry.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/extensionsScope.d.ts +3 -3
- package/lib/packlets/iana/language-tag-extensions/extensionsScope.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/extensionsScope.js +77 -0
- package/lib/packlets/iana/language-tag-extensions/extensionsScope.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/index.d.ts +3 -2
- package/lib/packlets/iana/language-tag-extensions/index.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/index.js +6 -4
- package/lib/packlets/iana/language-tag-extensions/index.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/jarConverters.d.ts +2 -3
- package/lib/packlets/iana/language-tag-extensions/jarConverters.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/jarConverters.js +79 -0
- package/lib/packlets/iana/language-tag-extensions/jarConverters.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/model.d.ts +5 -6
- package/lib/packlets/iana/language-tag-extensions/model.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/model.js +25 -0
- package/lib/packlets/iana/language-tag-extensions/model.js.map +1 -0
- package/{iana → lib/packlets/iana}/language-tag-extensions/validate.d.ts +2 -2
- package/lib/packlets/iana/language-tag-extensions/validate.d.ts.map +1 -0
- package/lib/packlets/iana/language-tag-extensions/validate.js +36 -0
- package/lib/packlets/iana/language-tag-extensions/validate.js.map +1 -0
- package/lib/packlets/iana/languageRegistries.d.ts.map +1 -0
- package/lib/packlets/iana/languageRegistries.js +56 -0
- package/lib/packlets/iana/languageRegistries.js.map +1 -0
- package/lib/packlets/iana/model.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/model.js +1 -1
- package/lib/packlets/iana/model.js.map +1 -0
- package/lib/packlets/iana/validate.d.ts.map +1 -0
- package/{iana → lib/packlets/iana}/validate.js +1 -1
- package/lib/packlets/iana/validate.js.map +1 -0
- package/lib/packlets/unsd/areas.d.ts +29 -0
- package/lib/packlets/unsd/areas.d.ts.map +1 -0
- package/lib/packlets/unsd/areas.js +96 -0
- package/lib/packlets/unsd/areas.js.map +1 -0
- package/lib/packlets/unsd/common.d.ts +49 -0
- package/lib/packlets/unsd/common.d.ts.map +1 -0
- package/lib/packlets/unsd/common.js +24 -0
- package/lib/packlets/unsd/common.js.map +1 -0
- package/{unsd → lib/packlets/unsd}/csv/converters.d.ts +7 -4
- package/lib/packlets/unsd/csv/converters.d.ts.map +1 -0
- package/lib/packlets/unsd/csv/converters.js +78 -0
- package/lib/packlets/unsd/csv/converters.js.map +1 -0
- package/lib/packlets/unsd/csv/index.d.ts.map +1 -0
- package/{iana/jar → lib/packlets/unsd/csv}/index.js +1 -1
- package/lib/packlets/unsd/csv/index.js.map +1 -0
- package/lib/packlets/unsd/csv/model.d.ts +22 -0
- package/lib/packlets/unsd/csv/model.d.ts.map +1 -0
- package/lib/packlets/unsd/csv/model.js +24 -0
- package/lib/packlets/unsd/csv/model.js.map +1 -0
- package/lib/packlets/unsd/defaultRegistries.d.ts.map +1 -0
- package/lib/packlets/unsd/defaultRegistries.js +42 -0
- package/lib/packlets/unsd/defaultRegistries.js.map +1 -0
- package/{unsd → lib/packlets/unsd}/index.d.ts +2 -0
- package/lib/packlets/unsd/index.d.ts.map +1 -0
- package/lib/packlets/unsd/index.js +58 -0
- package/lib/packlets/unsd/index.js.map +1 -0
- package/{unsd → lib/packlets/unsd}/regionCodes.d.ts +7 -7
- package/lib/packlets/unsd/regionCodes.d.ts.map +1 -0
- package/lib/packlets/unsd/regionCodes.js +122 -0
- package/lib/packlets/unsd/regionCodes.js.map +1 -0
- package/lib/packlets/unsd/regions.d.ts +21 -0
- package/lib/packlets/unsd/regions.d.ts.map +1 -0
- package/lib/packlets/unsd/regions.js +77 -0
- package/lib/packlets/unsd/regions.js.map +1 -0
- package/lib/packlets/utils/index.d.ts.map +1 -0
- package/{utils → lib/packlets/utils}/index.js +1 -1
- package/lib/packlets/utils/index.js.map +1 -0
- package/lib/packlets/utils/jsonHelpers.d.ts.map +1 -0
- package/lib/packlets/utils/jsonHelpers.js +29 -0
- package/lib/packlets/utils/jsonHelpers.js.map +1 -0
- package/lib/packlets/utils/public.d.ts +2 -0
- package/lib/packlets/utils/public.d.ts.map +1 -0
- package/lib/packlets/utils/public.js +28 -0
- package/lib/packlets/utils/public.js.map +1 -0
- package/{utils → lib/packlets/utils}/validationHelpers.d.ts +9 -10
- package/lib/packlets/utils/validationHelpers.d.ts.map +1 -0
- package/lib/packlets/utils/validationHelpers.js +120 -0
- package/lib/packlets/utils/validationHelpers.js.map +1 -0
- package/package.json +73 -67
- package/bcp47/bcp47Subtags/converters.d.ts.map +0 -1
- package/bcp47/bcp47Subtags/index.d.ts.map +0 -1
- package/bcp47/bcp47Subtags/model.d.ts.map +0 -1
- package/bcp47/bcp47Subtags/model.js +0 -24
- package/bcp47/bcp47Subtags/validate.d.ts.map +0 -1
- package/bcp47/bcp47Subtags/validate.js +0 -74
- package/bcp47/common.d.ts.map +0 -1
- package/bcp47/common.js +0 -59
- package/bcp47/helpers.d.ts.map +0 -1
- package/bcp47/helpers.js +0 -103
- package/bcp47/index.d.ts +0 -7
- package/bcp47/index.d.ts.map +0 -1
- package/bcp47/index.js +0 -27
- package/bcp47/languageRegistryData.d.ts.map +0 -1
- package/bcp47/languageRegistryData.js +0 -209
- package/bcp47/languageTag.d.ts.map +0 -1
- package/bcp47/languageTag.js +0 -390
- package/bcp47/languageTagParser.d.ts.map +0 -1
- package/bcp47/languageTagParser.js +0 -302
- package/bcp47/match/chooser.d.ts.map +0 -1
- package/bcp47/match/chooser.js +0 -92
- package/bcp47/match/common.d.ts.map +0 -1
- package/bcp47/match/common.js +0 -51
- package/bcp47/match/index.d.ts +0 -4
- package/bcp47/match/index.d.ts.map +0 -1
- package/bcp47/match/index.js +0 -45
- package/bcp47/match/similarity.d.ts.map +0 -1
- package/bcp47/match/similarity.js +0 -230
- package/bcp47/normalization/baseNormalizer.d.ts +0 -36
- package/bcp47/normalization/baseNormalizer.d.ts.map +0 -1
- package/bcp47/normalization/baseNormalizer.js +0 -114
- package/bcp47/normalization/canonicalNormalizer.d.ts +0 -22
- package/bcp47/normalization/canonicalNormalizer.d.ts.map +0 -1
- package/bcp47/normalization/canonicalNormalizer.js +0 -113
- package/bcp47/normalization/common.d.ts.map +0 -1
- package/bcp47/normalization/common.js +0 -82
- package/bcp47/normalization/index.d.ts.map +0 -1
- package/bcp47/normalization/normalizeTag.d.ts.map +0 -1
- package/bcp47/normalization/normalizeTag.js +0 -105
- package/bcp47/normalization/preferredTagNormalizer.d.ts +0 -27
- package/bcp47/normalization/preferredTagNormalizer.d.ts.map +0 -1
- package/bcp47/normalization/preferredTagNormalizer.js +0 -209
- package/bcp47/overrides/converters.d.ts +0 -19
- package/bcp47/overrides/converters.d.ts.map +0 -1
- package/bcp47/overrides/converters.js +0 -75
- package/bcp47/overrides/defaultRegistries.d.ts.map +0 -1
- package/bcp47/overrides/defaultRegistries.js +0 -42
- package/bcp47/overrides/index.d.ts.map +0 -1
- package/bcp47/overrides/index.js +0 -30
- package/bcp47/overrides/model.d.ts +0 -11
- package/bcp47/overrides/model.d.ts.map +0 -1
- package/bcp47/overrides/model.js +0 -24
- package/bcp47/overrides/overridesRegistry.d.ts.map +0 -1
- package/bcp47/overrides/overridesRegistry.js +0 -112
- package/bcp47/validation/baseValidator.d.ts +0 -35
- package/bcp47/validation/baseValidator.d.ts.map +0 -1
- package/bcp47/validation/baseValidator.js +0 -111
- package/bcp47/validation/common.d.ts.map +0 -1
- package/bcp47/validation/common.js +0 -84
- package/bcp47/validation/index.d.ts.map +0 -1
- package/bcp47/validation/isCanonical.d.ts +0 -22
- package/bcp47/validation/isCanonical.d.ts.map +0 -1
- package/bcp47/validation/isCanonical.js +0 -104
- package/bcp47/validation/isInPreferredForm.d.ts.map +0 -1
- package/bcp47/validation/isInPreferredForm.js +0 -73
- package/bcp47/validation/isStrictlyValid.d.ts +0 -18
- package/bcp47/validation/isStrictlyValid.d.ts.map +0 -1
- package/bcp47/validation/isStrictlyValid.js +0 -98
- package/bcp47/validation/isValid.d.ts +0 -24
- package/bcp47/validation/isValid.d.ts.map +0 -1
- package/bcp47/validation/isValid.js +0 -115
- package/bcp47/validation/isWellFormed.d.ts +0 -22
- package/bcp47/validation/isWellFormed.d.ts.map +0 -1
- package/bcp47/validation/isWellFormed.js +0 -98
- package/bcp47/validation/validateTag.d.ts.map +0 -1
- package/bcp47/validation/validateTag.js +0 -159
- package/data/bcp/overrides.json +0 -21
- package/data/iana/language-subtags.json +0 -77295
- package/data/unsd/m49.json +0 -251
- package/iana/common/converters.d.ts.map +0 -1
- package/iana/common/converters.js +0 -84
- package/iana/common/model.d.ts.map +0 -1
- package/iana/common/model.js +0 -24
- package/iana/common/registeredItems.d.ts.map +0 -1
- package/iana/common/registeredItems.js +0 -124
- package/iana/common/utils.d.ts.map +0 -1
- package/iana/common/utils.js +0 -34
- package/iana/common/validate.d.ts.map +0 -1
- package/iana/common/validate.js +0 -61
- package/iana/converters.d.ts.map +0 -1
- package/iana/defaultRegistries.d.ts.map +0 -1
- package/iana/defaultRegistries.js +0 -42
- package/iana/index.d.ts.map +0 -1
- package/iana/index.js +0 -64
- package/iana/jar/converters.d.ts.map +0 -1
- package/iana/jar/index.d.ts.map +0 -1
- package/iana/jar/jarConverters.d.ts.map +0 -1
- package/iana/jar/jarConverters.js +0 -85
- package/iana/jar/jarModel.d.ts.map +0 -1
- package/iana/jar/jarModel.js +0 -24
- package/iana/jar/language-subtags/converters.d.ts.map +0 -1
- package/iana/jar/language-subtags/index.d.ts.map +0 -1
- package/iana/jar/language-subtags/model.d.ts.map +0 -1
- package/iana/jar/language-subtags/registry/converters.d.ts.map +0 -1
- package/iana/jar/language-subtags/registry/converters.js +0 -58
- package/iana/jar/language-subtags/registry/index.d.ts +0 -4
- package/iana/jar/language-subtags/registry/index.d.ts.map +0 -1
- package/iana/jar/language-subtags/registry/model.d.ts.map +0 -1
- package/iana/jar/language-subtags/registry/model.js +0 -41
- package/iana/jar/language-subtags/tags/converters.d.ts +0 -55
- package/iana/jar/language-subtags/tags/converters.d.ts.map +0 -1
- package/iana/jar/language-subtags/tags/converters.js +0 -128
- package/iana/jar/language-subtags/tags/index.d.ts +0 -5
- package/iana/jar/language-subtags/tags/index.d.ts.map +0 -1
- package/iana/jar/language-subtags/tags/model.d.ts.map +0 -1
- package/iana/jar/language-subtags/tags/model.js +0 -24
- package/iana/jar/language-subtags/tags/tagValidation.d.ts.map +0 -1
- package/iana/jar/language-subtags/tags/tagValidation.js +0 -70
- package/iana/jar/language-subtags/tags/validate.d.ts.map +0 -1
- package/iana/jar/language-subtags/tags/validate.js +0 -87
- package/iana/jar/model.d.ts.map +0 -1
- package/iana/language-subtags/common.d.ts.map +0 -1
- package/iana/language-subtags/common.js +0 -24
- package/iana/language-subtags/converters.d.ts +0 -52
- package/iana/language-subtags/converters.d.ts.map +0 -1
- package/iana/language-subtags/converters.js +0 -200
- package/iana/language-subtags/index.d.ts.map +0 -1
- package/iana/language-subtags/jarConverters.d.ts.map +0 -1
- package/iana/language-subtags/jarConverters.js +0 -213
- package/iana/language-subtags/model.d.ts.map +0 -1
- package/iana/language-subtags/model.js +0 -24
- package/iana/language-subtags/scope.d.ts.map +0 -1
- package/iana/language-subtags/scope.js +0 -179
- package/iana/language-subtags/subtagRegistry.d.ts.map +0 -1
- package/iana/language-subtags/subtagRegistry.js +0 -149
- package/iana/language-subtags/validate.d.ts.map +0 -1
- package/iana/language-tag-extensions/converters.d.ts +0 -23
- package/iana/language-tag-extensions/converters.d.ts.map +0 -1
- package/iana/language-tag-extensions/converters.js +0 -87
- package/iana/language-tag-extensions/extensionsRegistry.d.ts.map +0 -1
- package/iana/language-tag-extensions/extensionsRegistry.js +0 -104
- package/iana/language-tag-extensions/extensionsScope.d.ts.map +0 -1
- package/iana/language-tag-extensions/extensionsScope.js +0 -77
- package/iana/language-tag-extensions/index.d.ts.map +0 -1
- package/iana/language-tag-extensions/jarConverters.d.ts.map +0 -1
- package/iana/language-tag-extensions/jarConverters.js +0 -102
- package/iana/language-tag-extensions/model.d.ts.map +0 -1
- package/iana/language-tag-extensions/model.js +0 -24
- package/iana/language-tag-extensions/validate.d.ts.map +0 -1
- package/iana/language-tag-extensions/validate.js +0 -36
- package/iana/languageRegistries.d.ts.map +0 -1
- package/iana/languageRegistries.js +0 -56
- package/iana/model.d.ts.map +0 -1
- package/iana/validate.d.ts.map +0 -1
- package/index.d.ts +0 -6
- package/index.d.ts.map +0 -1
- package/index.js +0 -56
- package/unsd/areas.d.ts +0 -29
- package/unsd/areas.d.ts.map +0 -1
- package/unsd/areas.js +0 -96
- package/unsd/common.d.ts +0 -49
- package/unsd/common.d.ts.map +0 -1
- package/unsd/common.js +0 -24
- package/unsd/csv/converters.d.ts.map +0 -1
- package/unsd/csv/converters.js +0 -70
- package/unsd/csv/index.d.ts +0 -4
- package/unsd/csv/index.d.ts.map +0 -1
- package/unsd/csv/model.d.ts +0 -22
- package/unsd/csv/model.d.ts.map +0 -1
- package/unsd/csv/model.js +0 -24
- package/unsd/defaultRegistries.d.ts.map +0 -1
- package/unsd/defaultRegistries.js +0 -42
- package/unsd/index.d.ts.map +0 -1
- package/unsd/index.js +0 -44
- package/unsd/regionCodes.d.ts.map +0 -1
- package/unsd/regionCodes.js +0 -121
- package/unsd/regions.d.ts +0 -21
- package/unsd/regions.d.ts.map +0 -1
- package/unsd/regions.js +0 -77
- package/utils/index.d.ts.map +0 -1
- package/utils/jsonHelpers.d.ts.map +0 -1
- package/utils/jsonHelpers.js +0 -29
- package/utils/public.d.ts +0 -2
- package/utils/public.d.ts.map +0 -1
- package/utils/public.js +0 -28
- package/utils/validationHelpers.d.ts.map +0 -1
- package/utils/validationHelpers.js +0 -120
- /package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/converters.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/bcp47Subtags/index.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/match/common.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/match/similarity.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/normalization/index.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/overrides/defaultRegistries.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/overrides/index.d.ts +0 -0
- /package/{bcp47 → lib/packlets/bcp47}/validation/index.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/common/registeredItems.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/common/utils.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/converters.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/defaultRegistries.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/converters.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/converters.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/model.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/registry/converters.d.ts +0 -0
- /package/{iana/jar/language-subtags → lib/packlets/iana/jar/language-subtags/registry}/index.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/tags/model.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/tags/tagValidation.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/language-subtags/tags/validate.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/jar/model.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/language-subtags/common.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/language-subtags/validate.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/languageRegistries.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/model.d.ts +0 -0
- /package/{iana → lib/packlets/iana}/validate.d.ts +0 -0
- /package/{iana/jar → lib/packlets/unsd/csv}/index.d.ts +0 -0
- /package/{unsd → lib/packlets/unsd}/defaultRegistries.d.ts +0 -0
- /package/{utils → lib/packlets/utils}/index.d.ts +0 -0
- /package/{utils → lib/packlets/utils}/jsonHelpers.d.ts +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2022 Erik Fortune
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
* furnished to do so, subject to the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
* copies or substantial portions of the Software.
|
|
14
|
+
*
|
|
15
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
* SOFTWARE.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.mostValid = exports.compareValidity = void 0;
|
|
25
|
+
/**
|
|
26
|
+
* Ordered ranking of the degrees of validity, from `unknown` (least
|
|
27
|
+
* validation) to `strictly-valid` (fully validated).
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
const validityRank = {
|
|
31
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
32
|
+
/**
|
|
33
|
+
* No validation has been performed.
|
|
34
|
+
*/
|
|
35
|
+
unknown: 0,
|
|
36
|
+
/**
|
|
37
|
+
* Tag is well-formed {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646}.
|
|
38
|
+
*/
|
|
39
|
+
'well-formed': 0.5,
|
|
40
|
+
/**
|
|
41
|
+
* Tag is valid {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646} -
|
|
42
|
+
* well-formed, and is a registered grandfathered tag or all subtags are registered,
|
|
43
|
+
* with no duplicate extensions or variant subtags.
|
|
44
|
+
*/
|
|
45
|
+
valid: 0.9,
|
|
46
|
+
/**
|
|
47
|
+
* Tag is valid {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646} and meets
|
|
48
|
+
* other constraints described by the RFC - e.g. if present, any extlang or variant subtags have a
|
|
49
|
+
* {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-3.1.8 | valid prefix} as specified by
|
|
50
|
+
* the registry.
|
|
51
|
+
*/
|
|
52
|
+
'strictly-valid': 1.0
|
|
53
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Determines which of two validity ranks is most normalized.
|
|
57
|
+
* @param v1 - The first {@link TagValidity} to be compared.
|
|
58
|
+
* @param v2 - The second {@link TagValidity} to be compared.
|
|
59
|
+
* @returns `1` if `v1` is more normalized, `-1` if `v2` is more
|
|
60
|
+
* normalized, or `0` if they are identical.
|
|
61
|
+
* @public
|
|
62
|
+
*/
|
|
63
|
+
function compareValidity(v1, v2) {
|
|
64
|
+
if (validityRank[v1] > validityRank[v2]) {
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
else if (validityRank[v1] < validityRank[v2]) {
|
|
68
|
+
return -1;
|
|
69
|
+
}
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
exports.compareValidity = compareValidity;
|
|
73
|
+
/**
|
|
74
|
+
* Chooses the most valid of two normalization ranks.
|
|
75
|
+
* @param v1 - The first {@link TagValidity} to be compared.
|
|
76
|
+
* @param v2 - The second {@link TagValidity} to be compared.
|
|
77
|
+
* @returns The most validated of `v1` or `v2`.
|
|
78
|
+
* @public
|
|
79
|
+
*/
|
|
80
|
+
function mostValid(v1, v2) {
|
|
81
|
+
return validityRank[v1] >= validityRank[v2] ? v1 : v2;
|
|
82
|
+
}
|
|
83
|
+
exports.mostValid = mostValid;
|
|
84
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/common.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAQH;;;;GAIG;AACH,MAAM,YAAY,GAAgC;IAChD,yDAAyD;IACzD;;OAEG;IACH,OAAO,EAAE,CAAC;IACV;;OAEG;IACH,aAAa,EAAE,GAAG;IAClB;;;;OAIG;IACH,KAAK,EAAE,GAAG;IACV;;;;;OAKG;IACH,gBAAgB,EAAE,GAAG;IACrB,wDAAwD;CACzD,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,eAAe,CAAC,EAAe,EAAE,EAAe;IAC9D,IAAI,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE;QACvC,OAAO,CAAC,CAAC;KACV;SAAM,IAAI,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE;QAC9C,OAAO,CAAC,CAAC,CAAC;KACX;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAPD,0CAOC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,EAAe,EAAE,EAAe;IACxD,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAFD,8BAEC","sourcesContent":["/*\n * Copyright (c) 2022 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Describes the validation level of a particular tag.\n * @public\n */\nexport type TagValidity = 'unknown' | 'well-formed' | 'valid' | 'strictly-valid';\n\n/**\n * Ordered ranking of the degrees of validity, from `unknown` (least\n * validation) to `strictly-valid` (fully validated).\n * @public\n */\nconst validityRank: Record<TagValidity, number> = {\n /* eslint-disable @typescript-eslint/naming-convention */\n /**\n * No validation has been performed.\n */\n unknown: 0,\n /**\n * Tag is well-formed {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646}.\n */\n 'well-formed': 0.5,\n /**\n * Tag is valid {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646} -\n * well-formed, and is a registered grandfathered tag or all subtags are registered,\n * with no duplicate extensions or variant subtags.\n */\n valid: 0.9,\n /**\n * Tag is valid {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-2.2.9 | according to RFC 5646} and meets\n * other constraints described by the RFC - e.g. if present, any extlang or variant subtags have a\n * {@link https://www.rfc-editor.org/rfc/rfc5646.html#section-3.1.8 | valid prefix} as specified by\n * the registry.\n */\n 'strictly-valid': 1.0\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\n/**\n * Determines which of two validity ranks is most normalized.\n * @param v1 - The first {@link TagValidity} to be compared.\n * @param v2 - The second {@link TagValidity} to be compared.\n * @returns `1` if `v1` is more normalized, `-1` if `v2` is more\n * normalized, or `0` if they are identical.\n * @public\n */\nexport function compareValidity(v1: TagValidity, v2: TagValidity): -1 | 0 | 1 {\n if (validityRank[v1] > validityRank[v2]) {\n return 1;\n } else if (validityRank[v1] < validityRank[v2]) {\n return -1;\n }\n return 0;\n}\n\n/**\n * Chooses the most valid of two normalization ranks.\n * @param v1 - The first {@link TagValidity} to be compared.\n * @param v2 - The second {@link TagValidity} to be compared.\n * @returns The most validated of `v1` or `v2`.\n * @public\n */\nexport function mostValid(v1: TagValidity, v2: TagValidity): TagValidity {\n return validityRank[v1] >= validityRank[v2] ? v1 : v2;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/index.ts"],"names":[],"mappings":"AAuBA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -48,4 +48,4 @@ var isWellFormed_1 = require("./isWellFormed");
|
|
|
48
48
|
Object.defineProperty(exports, "IsWellFormedValidator", { enumerable: true, get: function () { return isWellFormed_1.IsWellFormedValidator; } });
|
|
49
49
|
var validateTag_1 = require("./validateTag");
|
|
50
50
|
Object.defineProperty(exports, "ValidateTag", { enumerable: true, get: function () { return validateTag_1.ValidateTag; } });
|
|
51
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uBAAuB;;;;;;;;;;;;;;;;;AAEvB,2CAAyB;AACzB,6CAAqD;AAA5C,mHAAA,oBAAoB,OAAA;AAC7B,qDAA6D;AAApD,2HAAA,wBAAwB,OAAA;AACjC,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,+CAAuD;AAA9C,qHAAA,qBAAqB,OAAA;AAC9B,6CAA4C;AAAnC,0GAAA,WAAW,OAAA","sourcesContent":["/*\n * Copyright (c) 2022 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n// istanbul ignore file\n\nexport * from './common';\nexport { IsCanonicalValidator } from './isCanonical';\nexport { IsStrictlyValidValidator } from './isStrictlyValid';\nexport { IsValidValidator } from './isValid';\nexport { IsWellFormedValidator } from './isWellFormed';\nexport { ValidateTag } from './validateTag';\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Iana from '../../iana';
|
|
2
|
+
import { Result } from '@fgv/ts-utils';
|
|
3
|
+
import { ExtensionSingleton, ExtensionSubtag } from '../bcp47Subtags/model';
|
|
4
|
+
import { ISubtags } from '../common';
|
|
5
|
+
import { TagValidatorBase } from './baseValidator';
|
|
6
|
+
import { TagValidity } from './common';
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class IsCanonicalValidator extends TagValidatorBase {
|
|
11
|
+
validity: TagValidity;
|
|
12
|
+
protected _checkLanguage(subtags: ISubtags): Result<Iana.LanguageSubtags.LanguageSubtag | undefined>;
|
|
13
|
+
protected _checkExtlangs(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined>;
|
|
14
|
+
protected _checkScript(subtags: ISubtags): Result<Iana.LanguageSubtags.ScriptSubtag | undefined>;
|
|
15
|
+
protected _checkRegion(subtags: ISubtags): Result<Iana.LanguageSubtags.RegionSubtag | undefined>;
|
|
16
|
+
protected _checkVariants(subtags: ISubtags): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined>;
|
|
17
|
+
protected _checkExtensionSingleton(singleton: ExtensionSingleton): Result<ExtensionSingleton>;
|
|
18
|
+
protected _checkExtensionSubtagValue(value: ExtensionSubtag): Result<ExtensionSubtag>;
|
|
19
|
+
protected _checkPrivateUseTags(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtendedLanguageRange[] | undefined>;
|
|
20
|
+
protected _checkGrandfatheredTags(subtags: ISubtags): Result<Iana.LanguageSubtags.GrandfatheredTag | undefined>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=isCanonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isCanonical.d.ts","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isCanonical.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,MAAM,EAA6B,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACjD,QAAQ,EAAE,WAAW,CAAiB;IAE7C,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;IAOpG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAUrG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;IAIhG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;IAIhG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAUrG,SAAS,CAAC,wBAAwB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAI7F,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAIrF,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,QAAQ,GAChB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAYnE,SAAS,CAAC,uBAAuB,CAC/B,OAAO,EAAE,QAAQ,GAChB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,GAAG,SAAS,CAAC;CAK7D"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2022 Erik Fortune
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
* furnished to do so, subject to the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
* copies or substantial portions of the Software.
|
|
14
|
+
*
|
|
15
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
* SOFTWARE.
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.IsCanonicalValidator = void 0;
|
|
48
|
+
const Iana = __importStar(require("../../iana"));
|
|
49
|
+
const Bcp47Subtags = __importStar(require("../bcp47Subtags"));
|
|
50
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
51
|
+
const baseValidator_1 = require("./baseValidator");
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
class IsCanonicalValidator extends baseValidator_1.TagValidatorBase {
|
|
56
|
+
constructor() {
|
|
57
|
+
super(...arguments);
|
|
58
|
+
this.validity = 'well-formed';
|
|
59
|
+
}
|
|
60
|
+
_checkLanguage(subtags) {
|
|
61
|
+
if (subtags.primaryLanguage) {
|
|
62
|
+
return this.iana.subtags.languages.verifyIsCanonical(subtags.primaryLanguage);
|
|
63
|
+
}
|
|
64
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
65
|
+
}
|
|
66
|
+
_checkExtlangs(subtags) {
|
|
67
|
+
if (subtags.extlangs) {
|
|
68
|
+
return (0, ts_utils_1.allSucceed)(subtags.extlangs.map((e) => this.iana.subtags.extlangs.verifyIsCanonical(e)), subtags.extlangs);
|
|
69
|
+
}
|
|
70
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
71
|
+
}
|
|
72
|
+
_checkScript(subtags) {
|
|
73
|
+
return subtags.script ? this.iana.subtags.scripts.verifyIsCanonical(subtags.script) : (0, ts_utils_1.succeed)(undefined);
|
|
74
|
+
}
|
|
75
|
+
_checkRegion(subtags) {
|
|
76
|
+
return subtags.region ? this.iana.subtags.regions.verifyIsCanonical(subtags.region) : (0, ts_utils_1.succeed)(undefined);
|
|
77
|
+
}
|
|
78
|
+
_checkVariants(subtags) {
|
|
79
|
+
if (subtags.variants) {
|
|
80
|
+
return (0, ts_utils_1.allSucceed)(subtags.variants.map((v) => this.iana.subtags.variants.verifyIsCanonical(v)), subtags.variants);
|
|
81
|
+
}
|
|
82
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
83
|
+
}
|
|
84
|
+
_checkExtensionSingleton(singleton) {
|
|
85
|
+
return this.iana.extensions.extensions.verifyIsCanonical(singleton);
|
|
86
|
+
}
|
|
87
|
+
_checkExtensionSubtagValue(value) {
|
|
88
|
+
return Bcp47Subtags.Validate.extensionSubtag.verifyIsCanonical(value);
|
|
89
|
+
}
|
|
90
|
+
_checkPrivateUseTags(subtags) {
|
|
91
|
+
if (subtags.privateUse) {
|
|
92
|
+
const result = Iana.LanguageSubtags.Validate.extendedLanguageRange.verifyIsCanonical(subtags.privateUse.join('-'));
|
|
93
|
+
if (result.isFailure()) {
|
|
94
|
+
return (0, ts_utils_1.fail)(result.message);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return (0, ts_utils_1.succeed)(subtags.privateUse);
|
|
98
|
+
}
|
|
99
|
+
_checkGrandfatheredTags(subtags) {
|
|
100
|
+
return subtags.grandfathered
|
|
101
|
+
? this.iana.subtags.grandfathered.verifyIsCanonical(subtags.grandfathered)
|
|
102
|
+
: (0, ts_utils_1.succeed)(undefined);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.IsCanonicalValidator = IsCanonicalValidator;
|
|
106
|
+
//# sourceMappingURL=isCanonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isCanonical.js","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isCanonical.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2022 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as Iana from '../../iana';\nimport * as Bcp47Subtags from '../bcp47Subtags';\n\nimport { Result, allSucceed, fail, succeed } from '@fgv/ts-utils';\nimport { ExtensionSingleton, ExtensionSubtag } from '../bcp47Subtags/model';\n\nimport { ISubtags } from '../common';\nimport { TagValidatorBase } from './baseValidator';\nimport { TagValidity } from './common';\n\n/**\n * @internal\n */\nexport class IsCanonicalValidator extends TagValidatorBase {\n public validity: TagValidity = 'well-formed';\n\n protected _checkLanguage(subtags: ISubtags): Result<Iana.LanguageSubtags.LanguageSubtag | undefined> {\n if (subtags.primaryLanguage) {\n return this.iana.subtags.languages.verifyIsCanonical(subtags.primaryLanguage);\n }\n return succeed(undefined);\n }\n\n protected _checkExtlangs(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined> {\n if (subtags.extlangs) {\n return allSucceed(\n subtags.extlangs.map((e) => this.iana.subtags.extlangs.verifyIsCanonical(e)),\n subtags.extlangs\n );\n }\n return succeed(undefined);\n }\n\n protected _checkScript(subtags: ISubtags): Result<Iana.LanguageSubtags.ScriptSubtag | undefined> {\n return subtags.script ? this.iana.subtags.scripts.verifyIsCanonical(subtags.script) : succeed(undefined);\n }\n\n protected _checkRegion(subtags: ISubtags): Result<Iana.LanguageSubtags.RegionSubtag | undefined> {\n return subtags.region ? this.iana.subtags.regions.verifyIsCanonical(subtags.region) : succeed(undefined);\n }\n\n protected _checkVariants(subtags: ISubtags): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined> {\n if (subtags.variants) {\n return allSucceed(\n subtags.variants.map((v) => this.iana.subtags.variants.verifyIsCanonical(v)),\n subtags.variants\n );\n }\n return succeed(undefined);\n }\n\n protected _checkExtensionSingleton(singleton: ExtensionSingleton): Result<ExtensionSingleton> {\n return this.iana.extensions.extensions.verifyIsCanonical(singleton);\n }\n\n protected _checkExtensionSubtagValue(value: ExtensionSubtag): Result<ExtensionSubtag> {\n return Bcp47Subtags.Validate.extensionSubtag.verifyIsCanonical(value);\n }\n\n protected _checkPrivateUseTags(\n subtags: ISubtags\n ): Result<Iana.LanguageSubtags.ExtendedLanguageRange[] | undefined> {\n if (subtags.privateUse) {\n const result = Iana.LanguageSubtags.Validate.extendedLanguageRange.verifyIsCanonical(\n subtags.privateUse.join('-') as Iana.LanguageSubtags.ExtendedLanguageRange\n );\n if (result.isFailure()) {\n return fail(result.message);\n }\n }\n return succeed(subtags.privateUse);\n }\n\n protected _checkGrandfatheredTags(\n subtags: ISubtags\n ): Result<Iana.LanguageSubtags.GrandfatheredTag | undefined> {\n return subtags.grandfathered\n ? this.iana.subtags.grandfathered.verifyIsCanonical(subtags.grandfathered)\n : succeed(undefined);\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as Iana from '../../iana';
|
|
2
2
|
import { Result } from '@fgv/ts-utils';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ISubtags } from '../common';
|
|
4
|
+
import { ITagValidator } from './baseValidator';
|
|
5
5
|
import { TagValidity } from './common';
|
|
6
6
|
/**
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
|
-
export declare class IsInPreferredFromValidator implements
|
|
9
|
+
export declare class IsInPreferredFromValidator implements ITagValidator {
|
|
10
10
|
readonly iana: Iana.LanguageRegistries;
|
|
11
11
|
readonly validity: TagValidity;
|
|
12
12
|
constructor(iana?: Iana.LanguageRegistries);
|
|
13
|
-
validateSubtags(subtags:
|
|
13
|
+
validateSubtags(subtags: ISubtags): Result<true>;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=isInPreferredForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isInPreferredForm.d.ts","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isInPreferredForm.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAiB,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,qBAAa,0BAA2B,YAAW,aAAa;IAC9D,SAAgB,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC9C,SAAgB,QAAQ,EAAE,WAAW,CAAW;gBAE7B,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB;IAK1C,eAAe,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;CAUxD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2022 Erik Fortune
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
* furnished to do so, subject to the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
* copies or substantial portions of the Software.
|
|
14
|
+
*
|
|
15
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
* SOFTWARE.
|
|
22
|
+
*/
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.IsInPreferredFromValidator = void 0;
|
|
48
|
+
const Iana = __importStar(require("../../iana"));
|
|
49
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
50
|
+
const common_1 = require("../common");
|
|
51
|
+
const normalization_1 = require("../normalization");
|
|
52
|
+
/**
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
class IsInPreferredFromValidator {
|
|
56
|
+
constructor(iana) {
|
|
57
|
+
this.validity = 'valid';
|
|
58
|
+
/* c8 ignore next */
|
|
59
|
+
this.iana = iana !== null && iana !== void 0 ? iana : Iana.DefaultRegistries.languageRegistries;
|
|
60
|
+
}
|
|
61
|
+
validateSubtags(subtags) {
|
|
62
|
+
return normalization_1.NormalizeTag.toPreferred(subtags).onSuccess((preferred) => {
|
|
63
|
+
const want = (0, common_1.subtagsToString)(preferred);
|
|
64
|
+
const have = (0, common_1.subtagsToString)(subtags);
|
|
65
|
+
if (want !== have) {
|
|
66
|
+
return (0, ts_utils_1.fail)(`${have}: does not match preferred form ${want}`);
|
|
67
|
+
}
|
|
68
|
+
return (0, ts_utils_1.succeed)(true);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.IsInPreferredFromValidator = IsInPreferredFromValidator;
|
|
73
|
+
//# sourceMappingURL=isInPreferredForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isInPreferredForm.js","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isInPreferredForm.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAmC;AAEnC,4CAAsD;AACtD,sCAAsD;AACtD,oDAAgD;AAIhD;;GAEG;AACH,MAAa,0BAA0B;IAIrC,YAAmB,IAA8B;QAFjC,aAAQ,GAAgB,OAAO,CAAC;QAG9C,oBAAoB;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;IAChE,CAAC;IAEM,eAAe,CAAC,OAAiB;QACtC,OAAO,4BAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/D,MAAM,IAAI,GAAG,IAAA,wBAAe,EAAC,SAAS,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,IAAI,EAAE;gBACjB,OAAO,IAAA,eAAI,EAAC,GAAG,IAAI,mCAAmC,IAAI,EAAE,CAAC,CAAC;aAC/D;YACD,OAAO,IAAA,kBAAO,EAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAnBD,gEAmBC","sourcesContent":["/*\n * Copyright (c) 2022 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as Iana from '../../iana';\n\nimport { Result, fail, succeed } from '@fgv/ts-utils';\nimport { ISubtags, subtagsToString } from '../common';\nimport { NormalizeTag } from '../normalization';\nimport { ITagValidator } from './baseValidator';\nimport { TagValidity } from './common';\n\n/**\n * @internal\n */\nexport class IsInPreferredFromValidator implements ITagValidator {\n public readonly iana: Iana.LanguageRegistries;\n public readonly validity: TagValidity = 'valid';\n\n public constructor(iana?: Iana.LanguageRegistries) {\n /* c8 ignore next */\n this.iana = iana ?? Iana.DefaultRegistries.languageRegistries;\n }\n\n public validateSubtags(subtags: ISubtags): Result<true> {\n return NormalizeTag.toPreferred(subtags).onSuccess((preferred) => {\n const want = subtagsToString(preferred);\n const have = subtagsToString(subtags);\n if (want !== have) {\n return fail(`${have}: does not match preferred form ${want}`);\n }\n return succeed(true);\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Iana from '../../iana';
|
|
2
|
+
import { Result } from '@fgv/ts-utils';
|
|
3
|
+
import { ISubtags } from '../common';
|
|
4
|
+
import { TagNormalization } from '../normalization';
|
|
5
|
+
import { TagValidity } from './common';
|
|
6
|
+
import { IsValidValidator } from './isValid';
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class IsStrictlyValidValidator extends IsValidValidator {
|
|
11
|
+
validity: TagValidity;
|
|
12
|
+
normalization: TagNormalization;
|
|
13
|
+
protected _checkExtlangs(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined>;
|
|
14
|
+
protected _checkVariants(subtags: ISubtags): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined>;
|
|
15
|
+
protected _validateExtlangPrefix(subtags: Readonly<ISubtags>): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined>;
|
|
16
|
+
protected _validateVariantPrefix(subtags: Readonly<ISubtags>, variants: Iana.LanguageSubtags.VariantSubtag[]): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=isStrictlyValid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isStrictlyValid.d.ts","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isStrictlyValid.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,MAAM,EAA6B,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAgB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IACrD,QAAQ,EAAE,WAAW,CAAoB;IACzC,aAAa,EAAE,gBAAgB,CAAa;IAEnD,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAOrG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAOrG,SAAS,CAAC,sBAAsB,CAC9B,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IA2B3D,SAAS,CAAC,sBAAsB,CAC9B,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC3B,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAC7C,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;CAgC5D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2022 Erik Fortune
|
|
4
|
+
*
|
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
* furnished to do so, subject to the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
* copies or substantial portions of the Software.
|
|
14
|
+
*
|
|
15
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
* SOFTWARE.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.IsStrictlyValidValidator = void 0;
|
|
25
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
26
|
+
const common_1 = require("../common");
|
|
27
|
+
const normalization_1 = require("../normalization");
|
|
28
|
+
const isValid_1 = require("./isValid");
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
class IsStrictlyValidValidator extends isValid_1.IsValidValidator {
|
|
33
|
+
constructor() {
|
|
34
|
+
super(...arguments);
|
|
35
|
+
this.validity = 'strictly-valid';
|
|
36
|
+
this.normalization = 'unknown';
|
|
37
|
+
}
|
|
38
|
+
_checkExtlangs(subtags) {
|
|
39
|
+
if (subtags.extlangs) {
|
|
40
|
+
return super._checkExtlangs(subtags).onSuccess(() => this._validateExtlangPrefix(subtags));
|
|
41
|
+
}
|
|
42
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
43
|
+
}
|
|
44
|
+
_checkVariants(subtags) {
|
|
45
|
+
if (subtags.variants) {
|
|
46
|
+
return super._checkVariants(subtags).onSuccess((v) => this._validateVariantPrefix(subtags, v));
|
|
47
|
+
}
|
|
48
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
49
|
+
}
|
|
50
|
+
_validateExtlangPrefix(subtags) {
|
|
51
|
+
if (subtags.extlangs) {
|
|
52
|
+
const prefix = this.iana.subtags.languages.toCanonical(subtags.primaryLanguage).orDefault();
|
|
53
|
+
if (!prefix) {
|
|
54
|
+
return (0, ts_utils_1.fail)('missing primary language for extlang prefix validation.');
|
|
55
|
+
}
|
|
56
|
+
return (0, ts_utils_1.mapResults)(subtags.extlangs.map((extlang) => {
|
|
57
|
+
const def = this.iana.subtags.extlangs.tryGet(extlang);
|
|
58
|
+
/* c8 ignore next 3 - should never happen due to guards earlier in conversion */
|
|
59
|
+
if (!def) {
|
|
60
|
+
return (0, ts_utils_1.fail)(`invalid extlang subtag "${extlang}" (not registered).`);
|
|
61
|
+
}
|
|
62
|
+
if (prefix !== def.prefix) {
|
|
63
|
+
return (0, ts_utils_1.fail)(`invalid prefix "${prefix}" for extlang subtag ${extlang} (expected "${def.prefix}").`);
|
|
64
|
+
}
|
|
65
|
+
return (0, ts_utils_1.succeed)(extlang);
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
/* c8 ignore next 2 - should be caught in the caller */
|
|
69
|
+
return (0, ts_utils_1.succeed)(undefined);
|
|
70
|
+
}
|
|
71
|
+
_validateVariantPrefix(subtags, variants) {
|
|
72
|
+
const { primaryLanguage, extlangs, script, region } = subtags;
|
|
73
|
+
const nonCanonical = { primaryLanguage, extlangs, script, region };
|
|
74
|
+
const canonical = normalization_1.NormalizeTag.normalizeSubtags(nonCanonical, 'canonical');
|
|
75
|
+
/* c8 ignore next 3 - should be caught in the first pass */
|
|
76
|
+
if (canonical.isFailure()) {
|
|
77
|
+
return (0, ts_utils_1.fail)(`failed to normalize variant prefix: ${canonical.message}`);
|
|
78
|
+
}
|
|
79
|
+
let prefix = (0, common_1.subtagsToString)(canonical.value);
|
|
80
|
+
return (0, ts_utils_1.mapResults)(variants.map((variant) => {
|
|
81
|
+
var _a;
|
|
82
|
+
const def = this.iana.subtags.variants.tryGet(variant);
|
|
83
|
+
/* c8 ignore next 3 - should be caught in the first pass */
|
|
84
|
+
if (!def) {
|
|
85
|
+
return (0, ts_utils_1.fail)(`invalid variant subtag "${variant}" (not registered).`);
|
|
86
|
+
}
|
|
87
|
+
// only fail if registration specifies prefixes but none are present
|
|
88
|
+
if (((_a = def.prefix) === null || _a === void 0 ? void 0 : _a.includes(prefix)) === false) {
|
|
89
|
+
return (0, ts_utils_1.fail)(`invalid prefix "${prefix}" for variant subtag ${variant} (expected "(${def.prefix.join(', ')})").`);
|
|
90
|
+
}
|
|
91
|
+
const canonicalVariant = this.iana.subtags.variants.toCanonical(variant).orDefault();
|
|
92
|
+
prefix = `${prefix}-${canonicalVariant}`;
|
|
93
|
+
return (0, ts_utils_1.succeed)(variant);
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.IsStrictlyValidValidator = IsStrictlyValidValidator;
|
|
98
|
+
//# sourceMappingURL=isStrictlyValid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isStrictlyValid.js","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isStrictlyValid.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2022 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as Iana from '../../iana';\n\nimport { Result, fail, mapResults, succeed } from '@fgv/ts-utils';\nimport { ISubtags, subtagsToString } from '../common';\nimport { NormalizeTag, TagNormalization } from '../normalization';\n\nimport { TagValidity } from './common';\nimport { IsValidValidator } from './isValid';\n\n/**\n * @internal\n */\nexport class IsStrictlyValidValidator extends IsValidValidator {\n public validity: TagValidity = 'strictly-valid';\n public normalization: TagNormalization = 'unknown';\n\n protected _checkExtlangs(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined> {\n if (subtags.extlangs) {\n return super._checkExtlangs(subtags).onSuccess(() => this._validateExtlangPrefix(subtags));\n }\n return succeed(undefined);\n }\n\n protected _checkVariants(subtags: ISubtags): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined> {\n if (subtags.variants) {\n return super._checkVariants(subtags).onSuccess((v) => this._validateVariantPrefix(subtags, v!));\n }\n return succeed(undefined);\n }\n\n protected _validateExtlangPrefix(\n subtags: Readonly<ISubtags>\n ): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined> {\n if (subtags.extlangs) {\n const prefix = this.iana.subtags.languages.toCanonical(subtags.primaryLanguage).orDefault();\n if (!prefix) {\n return fail('missing primary language for extlang prefix validation.');\n }\n\n return mapResults(\n subtags.extlangs.map((extlang) => {\n const def = this.iana.subtags.extlangs.tryGet(extlang);\n /* c8 ignore next 3 - should never happen due to guards earlier in conversion */\n if (!def) {\n return fail(`invalid extlang subtag \"${extlang}\" (not registered).`);\n }\n if (prefix !== def.prefix) {\n return fail(\n `invalid prefix \"${prefix}\" for extlang subtag ${extlang} (expected \"${def.prefix}\").`\n );\n }\n return succeed(extlang);\n })\n );\n }\n /* c8 ignore next 2 - should be caught in the caller */\n return succeed(undefined);\n }\n\n protected _validateVariantPrefix(\n subtags: Readonly<ISubtags>,\n variants: Iana.LanguageSubtags.VariantSubtag[]\n ): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined> {\n const { primaryLanguage, extlangs, script, region } = subtags;\n const nonCanonical = { primaryLanguage, extlangs, script, region };\n const canonical = NormalizeTag.normalizeSubtags(nonCanonical, 'canonical');\n /* c8 ignore next 3 - should be caught in the first pass */\n if (canonical.isFailure()) {\n return fail(`failed to normalize variant prefix: ${canonical.message}`);\n }\n let prefix = subtagsToString(canonical.value);\n\n return mapResults(\n variants.map((variant) => {\n const def = this.iana.subtags.variants.tryGet(variant);\n /* c8 ignore next 3 - should be caught in the first pass */\n if (!def) {\n return fail(`invalid variant subtag \"${variant}\" (not registered).`);\n }\n\n // only fail if registration specifies prefixes but none are present\n if (def.prefix?.includes(prefix as Iana.LanguageSubtags.ExtendedLanguageRange) === false) {\n return fail(\n `invalid prefix \"${prefix}\" for variant subtag ${variant} (expected \"(${def.prefix.join(\n ', '\n )})\").`\n );\n }\n const canonicalVariant = this.iana.subtags.variants.toCanonical(variant).orDefault();\n prefix = `${prefix}-${canonicalVariant}`;\n return succeed(variant);\n })\n );\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as Iana from '../../iana';
|
|
2
|
+
import { Result } from '@fgv/ts-utils';
|
|
3
|
+
import { ExtensionSingleton, ExtensionSubtag } from '../bcp47Subtags/model';
|
|
4
|
+
import { IExtensionSubtagValue, ISubtags } from '../common';
|
|
5
|
+
import { TagValidatorBase } from './baseValidator';
|
|
6
|
+
import { TagValidity } from './common';
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare class IsValidValidator extends TagValidatorBase {
|
|
11
|
+
validity: TagValidity;
|
|
12
|
+
protected _checkLanguage(subtags: ISubtags): Result<Iana.LanguageSubtags.LanguageSubtag | undefined>;
|
|
13
|
+
protected _checkExtlangs(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtLangSubtag[] | undefined>;
|
|
14
|
+
protected _checkScript(subtags: ISubtags): Result<Iana.LanguageSubtags.ScriptSubtag | undefined>;
|
|
15
|
+
protected _checkRegion(subtags: ISubtags): Result<Iana.LanguageSubtags.RegionSubtag | undefined>;
|
|
16
|
+
protected _checkVariants(subtags: ISubtags): Result<Iana.LanguageSubtags.VariantSubtag[] | undefined>;
|
|
17
|
+
protected _checkExtensionSingleton(singleton: ExtensionSingleton): Result<ExtensionSingleton>;
|
|
18
|
+
protected _checkExtensionSubtagValue(value: ExtensionSubtag): Result<ExtensionSubtag>;
|
|
19
|
+
protected _checkExtensions(subtags: ISubtags): Result<IExtensionSubtagValue[] | undefined>;
|
|
20
|
+
protected _checkPrivateUseTags(subtags: ISubtags): Result<Iana.LanguageSubtags.ExtendedLanguageRange[] | undefined>;
|
|
21
|
+
protected _checkGrandfatheredTags(subtags: ISubtags): Result<Iana.LanguageSubtags.GrandfatheredTag | undefined>;
|
|
22
|
+
protected _postValidate(subtags: ISubtags): Result<ISubtags>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=isValid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isValid.d.ts","sourceRoot":"","sources":["../../../../src/packlets/bcp47/validation/isValid.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,MAAM,EAAyC,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IAC7C,QAAQ,EAAE,WAAW,CAAW;IAEvC,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,SAAS,CAAC;IAMpG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAUrG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;IAIhG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC;IAIhG,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC;IAgBrG,SAAS,CAAC,wBAAwB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAI7F,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAIrF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAM1F,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,QAAQ,GAChB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAYnE,SAAS,CAAC,uBAAuB,CAC/B,OAAO,EAAE,QAAQ,GAChB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAM5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;CAQ7D"}
|