@inlang/plugin-icu1 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +108 -0
  2. package/dist/index.js +8 -0
  3. package/package.json +40 -0
package/README.md ADDED
@@ -0,0 +1,108 @@
1
+ ---
2
+ og:title: ICU MessageFormat v1 Plugin
3
+ og:description: Storage plugin for inlang that reads and writes ICU MessageFormat v1 JSON files. Supports selects, plurals, selectordinal, offsets, and formatter styles.
4
+ ---
5
+
6
+ # ICU MessageFormat v1 Plugin
7
+
8
+ The ICU MessageFormat v1 plugin is a storage plugin for inlang. It reads and writes ICU1 strings in JSON files per locale.
9
+ It targets ICU MessageFormat v1 (a.k.a. ICU MessageFormat) and maps it onto inlang's data model so selectors and variants are preserved.
10
+
11
+ ## Features
12
+
13
+ - Parses ICU1 messages using `@messageformat/parser`.
14
+ - Supports `select`, `plural`, and `selectordinal`, including exact matches (`=n`) and `offset`.
15
+ - Supports `#` (octothorpe) inside plural/selectordinal cases.
16
+ - Supports formatter functions (e.g. `number`, `date`, `time`, `spellout`, `ordinal`, `duration`) with style parameters.
17
+ - Exports ICU1 strings back from inlang data.
18
+
19
+ ## Installation
20
+
21
+ Install the plugin in your Inlang Project by adding it to your `modules` in `project.inlang/settings.json` and configure `pathPattern`.
22
+
23
+ ```diff
24
+ // project.inlang/settings.json
25
+ {
26
+ "modules": [
27
+ + "https://cdn.jsdelivr.net/npm/@inlang/plugin-icu1@latest/dist/index.js"
28
+ ],
29
+ + "plugin.inlang.icu-messageformat-1": {
30
+ + "pathPattern": "./messages/{locale}.json"
31
+ + }
32
+ }
33
+ ```
34
+
35
+ ## Configuration
36
+
37
+ Configuration happens in `project.inlang/settings.json` under `"plugin.inlang.icu-messageformat-1"`.
38
+
39
+ ### `pathPattern`
40
+
41
+ You can define a single `pathPattern` or provide an array of patterns. The placeholder should be `{locale}`.
42
+
43
+ #### Single path pattern example
44
+
45
+ ```json
46
+ {
47
+ "plugin.inlang.icu-messageformat-1": {
48
+ "pathPattern": "./messages/{locale}.json"
49
+ }
50
+ }
51
+ ```
52
+
53
+ #### Multiple path patterns example
54
+
55
+ ```json
56
+ {
57
+ "plugin.inlang.icu-messageformat-1": {
58
+ "pathPattern": ["./defaults/{locale}.json", "./product/{locale}.json"]
59
+ }
60
+ }
61
+ ```
62
+
63
+ > [!NOTE]
64
+ > When exporting, all messages are written to every path pattern in the array (one file per pattern and locale). Multiple patterns are a one-way merge for import.
65
+
66
+ ## Messages
67
+
68
+ ICU1 files contain key-value pairs with ICU MessageFormat strings.
69
+
70
+ ```json
71
+ // messages/en.json
72
+ {
73
+ "hello_world": "Hello World!",
74
+ "greeting": "Good morning {name}!",
75
+ "likes": "You have {count, plural, one {# like} other {# likes}}"
76
+ }
77
+ ```
78
+
79
+ ### Plurals and selectordinal
80
+
81
+ ```json
82
+ {
83
+ "items": "{count, plural, offset:1 =0 {no items} one {# item} other {# items}}",
84
+ "rank": "{place, selectordinal, one {#st} two {#nd} few {#rd} other {#th}}"
85
+ }
86
+ ```
87
+
88
+ ### Select
89
+
90
+ ```json
91
+ {
92
+ "gender": "{gender, select, male {He} female {She} other {They}}"
93
+ }
94
+ ```
95
+
96
+ ### Escaping
97
+
98
+ ICU1 uses apostrophes to escape literals. To include literal braces, wrap them in apostrophes:
99
+
100
+ - `'{'
101
+ - `'}'`
102
+
103
+ If you need a literal apostrophe, use `''` (two single quotes).
104
+
105
+ ## Caveats
106
+
107
+ - Export is canonicalized. Output is semantically equivalent, but whitespace and formatting may differ from the original source.
108
+ - Tags/markup are treated as plain text by the parser.
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ var En=Object.create;var tn=Object.defineProperty;var Cn=Object.getOwnPropertyDescriptor;var Bn=Object.getOwnPropertyNames;var Fn=Object.getPrototypeOf,Kn=Object.prototype.hasOwnProperty;var Re=(o,e)=>()=>(e||o((e={exports:{}}).exports,e),e.exports);var hn=(o,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of Bn(e))!Kn.call(o,p)&&p!==r&&tn(o,p,{get:()=>e[p],enumerable:!(a=Cn(e,p))||a.enumerable});return o};var rn=(o,e,r)=>(r=o!=null?En(Fn(o)):{},hn(e||!o||!o.__esModule?tn(r,"default",{value:o,enumerable:!0}):r,o));var sn=Re(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.Type=u.JsonType=u.JavaScriptTypeBuilder=u.JsonTypeBuilder=u.TypeBuilder=u.TypeBuilderError=u.TransformEncodeBuilder=u.TransformDecodeBuilder=u.TemplateLiteralDslParser=u.TemplateLiteralGenerator=u.TemplateLiteralGeneratorError=u.TemplateLiteralFinite=u.TemplateLiteralFiniteError=u.TemplateLiteralParser=u.TemplateLiteralParserError=u.TemplateLiteralResolver=u.TemplateLiteralPattern=u.TemplateLiteralPatternError=u.UnionResolver=u.KeyArrayResolver=u.KeyArrayResolverError=u.KeyResolver=u.ObjectMap=u.Intrinsic=u.IndexedAccessor=u.TypeClone=u.TypeExtends=u.TypeExtendsResult=u.TypeExtendsError=u.ExtendsUndefined=u.TypeGuard=u.TypeGuardUnknownTypeError=u.ValueGuard=u.FormatRegistry=u.TypeBoxError=u.TypeRegistry=u.PatternStringExact=u.PatternNumberExact=u.PatternBooleanExact=u.PatternString=u.PatternNumber=u.PatternBoolean=u.Kind=u.Hint=u.Optional=u.Readonly=u.Transform=void 0;u.Transform=Symbol.for("TypeBox.Transform");u.Readonly=Symbol.for("TypeBox.Readonly");u.Optional=Symbol.for("TypeBox.Optional");u.Hint=Symbol.for("TypeBox.Hint");u.Kind=Symbol.for("TypeBox.Kind");u.PatternBoolean="(true|false)";u.PatternNumber="(0|[1-9][0-9]*)";u.PatternString="(.*)";u.PatternBooleanExact=`^${u.PatternBoolean}$`;u.PatternNumberExact=`^${u.PatternNumber}$`;u.PatternStringExact=`^${u.PatternString}$`;var He;(function(o){let e=new Map;function r(){return new Map(e)}o.Entries=r;function a(){return e.clear()}o.Clear=a;function p(v){return e.delete(v)}o.Delete=p;function s(v){return e.has(v)}o.Has=s;function c(v,O){e.set(v,O)}o.Set=c;function T(v){return e.get(v)}o.Get=T})(He||(u.TypeRegistry=He={}));var ae=class extends Error{constructor(e){super(e)}};u.TypeBoxError=ae;var on;(function(o){let e=new Map;function r(){return new Map(e)}o.Entries=r;function a(){return e.clear()}o.Clear=a;function p(v){return e.delete(v)}o.Delete=p;function s(v){return e.has(v)}o.Has=s;function c(v,O){e.set(v,O)}o.Set=c;function T(v){return e.get(v)}o.Get=T})(on||(u.FormatRegistry=on={}));var I;(function(o){function e(g){return Array.isArray(g)}o.IsArray=e;function r(g){return typeof g=="bigint"}o.IsBigInt=r;function a(g){return typeof g=="boolean"}o.IsBoolean=a;function p(g){return g instanceof globalThis.Date}o.IsDate=p;function s(g){return g===null}o.IsNull=s;function c(g){return typeof g=="number"}o.IsNumber=c;function T(g){return typeof g=="object"&&g!==null}o.IsObject=T;function v(g){return typeof g=="string"}o.IsString=v;function O(g){return g instanceof globalThis.Uint8Array}o.IsUint8Array=O;function m(g){return g===void 0}o.IsUndefined=m})(I||(u.ValueGuard=I={}));var Je=class extends ae{};u.TypeGuardUnknownTypeError=Je;var l;(function(o){function e(i){try{return new RegExp(i),!0}catch{return!1}}function r(i){if(!I.IsString(i))return!1;for(let D=0;D<i.length;D++){let te=i.charCodeAt(D);if(te>=7&&te<=13||te===27||te===127)return!1}return!0}function a(i){return c(i)||J(i)}function p(i){return I.IsUndefined(i)||I.IsBigInt(i)}function s(i){return I.IsUndefined(i)||I.IsNumber(i)}function c(i){return I.IsUndefined(i)||I.IsBoolean(i)}function T(i){return I.IsUndefined(i)||I.IsString(i)}function v(i){return I.IsUndefined(i)||I.IsString(i)&&r(i)&&e(i)}function O(i){return I.IsUndefined(i)||I.IsString(i)&&r(i)}function m(i){return I.IsUndefined(i)||J(i)}function g(i){return S(i,"Any")&&T(i.$id)}o.TAny=g;function L(i){return S(i,"Array")&&i.type==="array"&&T(i.$id)&&J(i.items)&&s(i.minItems)&&s(i.maxItems)&&c(i.uniqueItems)&&m(i.contains)&&s(i.minContains)&&s(i.maxContains)}o.TArray=L;function y(i){return S(i,"AsyncIterator")&&i.type==="AsyncIterator"&&T(i.$id)&&J(i.items)}o.TAsyncIterator=y;function x(i){return S(i,"BigInt")&&i.type==="bigint"&&T(i.$id)&&p(i.exclusiveMaximum)&&p(i.exclusiveMinimum)&&p(i.maximum)&&p(i.minimum)&&p(i.multipleOf)}o.TBigInt=x;function k(i){return S(i,"Boolean")&&i.type==="boolean"&&T(i.$id)}o.TBoolean=k;function E(i){return S(i,"Constructor")&&i.type==="Constructor"&&T(i.$id)&&I.IsArray(i.parameters)&&i.parameters.every(D=>J(D))&&J(i.returns)}o.TConstructor=E;function F(i){return S(i,"Date")&&i.type==="Date"&&T(i.$id)&&s(i.exclusiveMaximumTimestamp)&&s(i.exclusiveMinimumTimestamp)&&s(i.maximumTimestamp)&&s(i.minimumTimestamp)&&s(i.multipleOfTimestamp)}o.TDate=F;function B(i){return S(i,"Function")&&i.type==="Function"&&T(i.$id)&&I.IsArray(i.parameters)&&i.parameters.every(D=>J(D))&&J(i.returns)}o.TFunction=B;function j(i){return S(i,"Integer")&&i.type==="integer"&&T(i.$id)&&s(i.exclusiveMaximum)&&s(i.exclusiveMinimum)&&s(i.maximum)&&s(i.minimum)&&s(i.multipleOf)}o.TInteger=j;function H(i){return S(i,"Intersect")&&!(I.IsString(i.type)&&i.type!=="object")&&I.IsArray(i.allOf)&&i.allOf.every(D=>J(D)&&!W(D))&&T(i.type)&&(c(i.unevaluatedProperties)||m(i.unevaluatedProperties))&&T(i.$id)}o.TIntersect=H;function se(i){return S(i,"Iterator")&&i.type==="Iterator"&&T(i.$id)&&J(i.items)}o.TIterator=se;function S(i,D){return V(i)&&i[u.Kind]===D}o.TKindOf=S;function V(i){return I.IsObject(i)&&u.Kind in i&&I.IsString(i[u.Kind])}o.TKind=V;function Z(i){return b(i)&&I.IsString(i.const)}o.TLiteralString=Z;function Y(i){return b(i)&&I.IsNumber(i.const)}o.TLiteralNumber=Y;function f(i){return b(i)&&I.IsBoolean(i.const)}o.TLiteralBoolean=f;function b(i){return S(i,"Literal")&&T(i.$id)&&(I.IsBoolean(i.const)||I.IsNumber(i.const)||I.IsString(i.const))}o.TLiteral=b;function w(i){return S(i,"Never")&&I.IsObject(i.not)&&Object.getOwnPropertyNames(i.not).length===0}o.TNever=w;function P(i){return S(i,"Not")&&J(i.not)}o.TNot=P;function N(i){return S(i,"Null")&&i.type==="null"&&T(i.$id)}o.TNull=N;function R(i){return S(i,"Number")&&i.type==="number"&&T(i.$id)&&s(i.exclusiveMaximum)&&s(i.exclusiveMinimum)&&s(i.maximum)&&s(i.minimum)&&s(i.multipleOf)}o.TNumber=R;function A(i){return S(i,"Object")&&i.type==="object"&&T(i.$id)&&I.IsObject(i.properties)&&a(i.additionalProperties)&&s(i.minProperties)&&s(i.maxProperties)&&Object.entries(i.properties).every(([D,te])=>r(D)&&J(te))}o.TObject=A;function h(i){return S(i,"Promise")&&i.type==="Promise"&&T(i.$id)&&J(i.item)}o.TPromise=h;function C(i){return S(i,"Record")&&i.type==="object"&&T(i.$id)&&a(i.additionalProperties)&&I.IsObject(i.patternProperties)&&(D=>{let te=Object.getOwnPropertyNames(D.patternProperties);return te.length===1&&e(te[0])&&I.IsObject(D.patternProperties)&&J(D.patternProperties[te[0]])})(i)}o.TRecord=C;function $(i){return I.IsObject(i)&&u.Hint in i&&i[u.Hint]==="Recursive"}o.TRecursive=$;function q(i){return S(i,"Ref")&&T(i.$id)&&I.IsString(i.$ref)}o.TRef=q;function G(i){return S(i,"String")&&i.type==="string"&&T(i.$id)&&s(i.minLength)&&s(i.maxLength)&&v(i.pattern)&&O(i.format)}o.TString=G;function ee(i){return S(i,"Symbol")&&i.type==="symbol"&&T(i.$id)}o.TSymbol=ee;function Q(i){return S(i,"TemplateLiteral")&&i.type==="string"&&I.IsString(i.pattern)&&i.pattern[0]==="^"&&i.pattern[i.pattern.length-1]==="$"}o.TTemplateLiteral=Q;function re(i){return S(i,"This")&&T(i.$id)&&I.IsString(i.$ref)}o.TThis=re;function W(i){return I.IsObject(i)&&u.Transform in i}o.TTransform=W;function _(i){return S(i,"Tuple")&&i.type==="array"&&T(i.$id)&&I.IsNumber(i.minItems)&&I.IsNumber(i.maxItems)&&i.minItems===i.maxItems&&(I.IsUndefined(i.items)&&I.IsUndefined(i.additionalItems)&&i.minItems===0||I.IsArray(i.items)&&i.items.every(D=>J(D)))}o.TTuple=_;function ie(i){return S(i,"Undefined")&&i.type==="undefined"&&T(i.$id)}o.TUndefined=ie;function ue(i){return ne(i)&&i.anyOf.every(D=>Z(D)||Y(D))}o.TUnionLiteral=ue;function ne(i){return S(i,"Union")&&T(i.$id)&&I.IsObject(i)&&I.IsArray(i.anyOf)&&i.anyOf.every(D=>J(D))}o.TUnion=ne;function pe(i){return S(i,"Uint8Array")&&i.type==="Uint8Array"&&T(i.$id)&&s(i.minByteLength)&&s(i.maxByteLength)}o.TUint8Array=pe;function X(i){return S(i,"Unknown")&&T(i.$id)}o.TUnknown=X;function Se(i){return S(i,"Unsafe")}o.TUnsafe=Se;function Ie(i){return S(i,"Void")&&i.type==="void"&&T(i.$id)}o.TVoid=Ie;function _e(i){return I.IsObject(i)&&i[u.Readonly]==="Readonly"}o.TReadonly=_e;function qe(i){return I.IsObject(i)&&i[u.Optional]==="Optional"}o.TOptional=qe;function J(i){return I.IsObject(i)&&(g(i)||L(i)||k(i)||x(i)||y(i)||E(i)||F(i)||B(i)||j(i)||H(i)||se(i)||b(i)||w(i)||P(i)||N(i)||R(i)||A(i)||h(i)||C(i)||q(i)||G(i)||ee(i)||Q(i)||re(i)||_(i)||ie(i)||ne(i)||pe(i)||X(i)||Se(i)||Ie(i)||V(i)&&He.Has(i[u.Kind]))}o.TSchema=J})(l||(u.TypeGuard=l={}));var an;(function(o){function e(r){return r[u.Kind]==="Intersect"?r.allOf.every(a=>e(a)):r[u.Kind]==="Union"?r.anyOf.some(a=>e(a)):r[u.Kind]==="Undefined"?!0:r[u.Kind]==="Not"?!e(r.not):!1}o.Check=e})(an||(u.ExtendsUndefined=an={}));var ke=class extends ae{};u.TypeExtendsError=ke;var d;(function(o){o[o.Union=0]="Union",o[o.True=1]="True",o[o.False=2]="False"})(d||(u.TypeExtendsResult=d={}));var fe;(function(o){function e(n){return n===d.False?n:d.True}function r(n){throw new ke(n)}function a(n){return l.TNever(n)||l.TIntersect(n)||l.TUnion(n)||l.TUnknown(n)||l.TAny(n)}function p(n,t){return l.TNever(t)?S(n,t):l.TIntersect(t)?B(n,t):l.TUnion(t)?ze(n,t):l.TUnknown(t)?nn(n,t):l.TAny(t)?s(n,t):r("StructuralRight")}function s(n,t){return d.True}function c(n,t){return l.TIntersect(t)?B(n,t):l.TUnion(t)&&t.anyOf.some(K=>l.TAny(K)||l.TUnknown(K))?d.True:l.TUnion(t)?d.Union:l.TUnknown(t)||l.TAny(t)?d.True:d.Union}function T(n,t){return l.TUnknown(n)?d.False:l.TAny(n)?d.Union:l.TNever(n)?d.True:d.False}function v(n,t){return l.TObject(t)&&Q(t)?d.True:a(t)?p(n,t):l.TArray(t)?e(M(n.items,t.items)):d.False}function O(n,t){return a(t)?p(n,t):l.TAsyncIterator(t)?e(M(n.items,t.items)):d.False}function m(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TBigInt(t)?d.True:d.False}function g(n,t){return l.TLiteral(n)&&I.IsBoolean(n.const)||l.TBoolean(n)?d.True:d.False}function L(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TBoolean(t)?d.True:d.False}function y(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TConstructor(t)?n.parameters.length>t.parameters.length?d.False:n.parameters.every((K,oe)=>e(M(t.parameters[oe],K))===d.True)?e(M(n.returns,t.returns)):d.False:d.False}function x(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TDate(t)?d.True:d.False}function k(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TFunction(t)?n.parameters.length>t.parameters.length?d.False:n.parameters.every((K,oe)=>e(M(t.parameters[oe],K))===d.True)?e(M(n.returns,t.returns)):d.False:d.False}function E(n,t){return l.TLiteral(n)&&I.IsNumber(n.const)||l.TNumber(n)||l.TInteger(n)?d.True:d.False}function F(n,t){return l.TInteger(t)||l.TNumber(t)?d.True:a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):d.False}function B(n,t){return t.allOf.every(K=>M(n,K)===d.True)?d.True:d.False}function j(n,t){return n.allOf.some(K=>M(K,t)===d.True)?d.True:d.False}function H(n,t){return a(t)?p(n,t):l.TIterator(t)?e(M(n.items,t.items)):d.False}function se(n,t){return l.TLiteral(t)&&t.const===n.const?d.True:a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TString(t)?Ie(n,t):l.TNumber(t)?b(n,t):l.TInteger(t)?E(n,t):l.TBoolean(t)?g(n,t):d.False}function S(n,t){return d.False}function V(n,t){return d.True}function Z(n){let[t,K]=[n,0];for(;l.TNot(t);)t=t.not,K+=1;return K%2===0?t:u.Type.Unknown()}function Y(n,t){return l.TNot(n)?M(Z(n),t):l.TNot(t)?M(n,Z(t)):r("Invalid fallthrough for Not")}function f(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TNull(t)?d.True:d.False}function b(n,t){return l.TLiteralNumber(n)||l.TNumber(n)||l.TInteger(n)?d.True:d.False}function w(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TInteger(t)||l.TNumber(t)?d.True:d.False}function P(n,t){return Object.getOwnPropertyNames(n.properties).length===t}function N(n){return Q(n)}function R(n){return P(n,0)||P(n,1)&&"description"in n.properties&&l.TUnion(n.properties.description)&&n.properties.description.anyOf.length===2&&(l.TString(n.properties.description.anyOf[0])&&l.TUndefined(n.properties.description.anyOf[1])||l.TString(n.properties.description.anyOf[1])&&l.TUndefined(n.properties.description.anyOf[0]))}function A(n){return P(n,0)}function h(n){return P(n,0)}function C(n){return P(n,0)}function $(n){return P(n,0)}function q(n){return Q(n)}function G(n){let t=u.Type.Number();return P(n,0)||P(n,1)&&"length"in n.properties&&e(M(n.properties.length,t))===d.True}function ee(n){return P(n,0)}function Q(n){let t=u.Type.Number();return P(n,0)||P(n,1)&&"length"in n.properties&&e(M(n.properties.length,t))===d.True}function re(n){let t=u.Type.Function([u.Type.Any()],u.Type.Any());return P(n,0)||P(n,1)&&"then"in n.properties&&e(M(n.properties.then,t))===d.True}function W(n,t){return M(n,t)===d.False||l.TOptional(n)&&!l.TOptional(t)?d.False:d.True}function _(n,t){return l.TUnknown(n)?d.False:l.TAny(n)?d.Union:l.TNever(n)||l.TLiteralString(n)&&N(t)||l.TLiteralNumber(n)&&A(t)||l.TLiteralBoolean(n)&&h(t)||l.TSymbol(n)&&R(t)||l.TBigInt(n)&&C(t)||l.TString(n)&&N(t)||l.TSymbol(n)&&R(t)||l.TNumber(n)&&A(t)||l.TInteger(n)&&A(t)||l.TBoolean(n)&&h(t)||l.TUint8Array(n)&&q(t)||l.TDate(n)&&$(t)||l.TConstructor(n)&&ee(t)||l.TFunction(n)&&G(t)?d.True:l.TRecord(n)&&l.TString(ne(n))?t[u.Hint]==="Record"?d.True:d.False:l.TRecord(n)&&l.TNumber(ne(n))?P(t,0)?d.True:d.False:d.False}function ie(n,t){return a(t)?p(n,t):l.TRecord(t)?X(n,t):l.TObject(t)?(()=>{for(let K of Object.getOwnPropertyNames(t.properties)){if(!(K in n.properties)&&!l.TOptional(t.properties[K]))return d.False;if(l.TOptional(t.properties[K]))return d.True;if(W(n.properties[K],t.properties[K])===d.False)return d.False}return d.True})():d.False}function ue(n,t){return a(t)?p(n,t):l.TObject(t)&&re(t)?d.True:l.TPromise(t)?e(M(n.item,t.item)):d.False}function ne(n){return u.PatternNumberExact in n.patternProperties?u.Type.Number():u.PatternStringExact in n.patternProperties?u.Type.String():r("Unknown record key pattern")}function pe(n){return u.PatternNumberExact in n.patternProperties?n.patternProperties[u.PatternNumberExact]:u.PatternStringExact in n.patternProperties?n.patternProperties[u.PatternStringExact]:r("Unable to get record value schema")}function X(n,t){let[K,oe]=[ne(t),pe(t)];return l.TLiteralString(n)&&l.TNumber(K)&&e(M(n,oe))===d.True?d.True:l.TUint8Array(n)&&l.TNumber(K)||l.TString(n)&&l.TNumber(K)||l.TArray(n)&&l.TNumber(K)?M(n,oe):l.TObject(n)?(()=>{for(let An of Object.getOwnPropertyNames(n.properties))if(W(oe,n.properties[An])===d.False)return d.False;return d.True})():d.False}function Se(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?M(pe(n),pe(t)):d.False}function Ie(n,t){return l.TLiteral(n)&&I.IsString(n.const)||l.TString(n)?d.True:d.False}function _e(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TString(t)?d.True:d.False}function qe(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TSymbol(t)?d.True:d.False}function J(n,t){return l.TTemplateLiteral(n)?M(le.Resolve(n),t):l.TTemplateLiteral(t)?M(n,le.Resolve(t)):r("Invalid fallthrough for TemplateLiteral")}function i(n,t){return l.TArray(t)&&n.items!==void 0&&n.items.every(K=>M(K,t.items)===d.True)}function D(n,t){return l.TNever(n)?d.True:l.TUnknown(n)?d.False:l.TAny(n)?d.Union:d.False}function te(n,t){return a(t)?p(n,t):l.TObject(t)&&Q(t)||l.TArray(t)&&i(n,t)?d.True:l.TTuple(t)?I.IsUndefined(n.items)&&!I.IsUndefined(t.items)||!I.IsUndefined(n.items)&&I.IsUndefined(t.items)?d.False:I.IsUndefined(n.items)&&!I.IsUndefined(t.items)||n.items.every((K,oe)=>M(K,t.items[oe])===d.True)?d.True:d.False:d.False}function Un(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TUint8Array(t)?d.True:d.False}function Sn(n,t){return a(t)?p(n,t):l.TObject(t)?_(n,t):l.TRecord(t)?X(n,t):l.TVoid(t)?Nn(n,t):l.TUndefined(t)?d.True:d.False}function ze(n,t){return t.anyOf.some(K=>M(n,K)===d.True)?d.True:d.False}function Rn(n,t){return n.anyOf.every(K=>M(K,t)===d.True)?d.True:d.False}function nn(n,t){return d.True}function kn(n,t){return l.TNever(t)?S(n,t):l.TIntersect(t)?B(n,t):l.TUnion(t)?ze(n,t):l.TAny(t)?s(n,t):l.TString(t)?Ie(n,t):l.TNumber(t)?b(n,t):l.TInteger(t)?E(n,t):l.TBoolean(t)?g(n,t):l.TArray(t)?T(n,t):l.TTuple(t)?D(n,t):l.TObject(t)?_(n,t):l.TUnknown(t)?d.True:d.False}function Nn(n,t){return l.TUndefined(n)||l.TUndefined(n)?d.True:d.False}function $n(n,t){return l.TIntersect(t)?B(n,t):l.TUnion(t)?ze(n,t):l.TUnknown(t)?nn(n,t):l.TAny(t)?s(n,t):l.TObject(t)?_(n,t):l.TVoid(t)?d.True:d.False}function M(n,t){return l.TTemplateLiteral(n)||l.TTemplateLiteral(t)?J(n,t):l.TNot(n)||l.TNot(t)?Y(n,t):l.TAny(n)?c(n,t):l.TArray(n)?v(n,t):l.TBigInt(n)?m(n,t):l.TBoolean(n)?L(n,t):l.TAsyncIterator(n)?O(n,t):l.TConstructor(n)?y(n,t):l.TDate(n)?x(n,t):l.TFunction(n)?k(n,t):l.TInteger(n)?F(n,t):l.TIntersect(n)?j(n,t):l.TIterator(n)?H(n,t):l.TLiteral(n)?se(n,t):l.TNever(n)?V(n,t):l.TNull(n)?f(n,t):l.TNumber(n)?w(n,t):l.TObject(n)?ie(n,t):l.TRecord(n)?Se(n,t):l.TString(n)?_e(n,t):l.TSymbol(n)?qe(n,t):l.TTuple(n)?te(n,t):l.TPromise(n)?ue(n,t):l.TUint8Array(n)?Un(n,t):l.TUndefined(n)?Sn(n,t):l.TUnion(n)?Rn(n,t):l.TUnknown(n)?kn(n,t):l.TVoid(n)?$n(n,t):r(`Unknown left type operand '${n[u.Kind]}'`)}function Ln(n,t){return M(n,t)}o.Extends=Ln})(fe||(u.TypeExtends=fe={}));var U;(function(o){function e(v){return v.map(O=>s(O))}function r(v){return new Date(v.getTime())}function a(v){return new Uint8Array(v)}function p(v){let O=Object.getOwnPropertyNames(v).reduce((g,L)=>({...g,[L]:s(v[L])}),{}),m=Object.getOwnPropertySymbols(v).reduce((g,L)=>({...g,[L]:s(v[L])}),{});return{...O,...m}}function s(v){return I.IsArray(v)?e(v):I.IsDate(v)?r(v):I.IsUint8Array(v)?a(v):I.IsObject(v)?p(v):v}function c(v){return v.map(O=>T(O))}o.Rest=c;function T(v,O={}){return{...s(v),...O}}o.Type=T})(U||(u.TypeClone=U={}));var We;(function(o){function e(y){return y.map(x=>{let{[u.Optional]:k,...E}=U.Type(x);return E})}function r(y){return y.every(x=>l.TOptional(x))}function a(y){return y.some(x=>l.TOptional(x))}function p(y){return r(y.allOf)?u.Type.Optional(u.Type.Intersect(e(y.allOf))):y}function s(y){return a(y.anyOf)?u.Type.Optional(u.Type.Union(e(y.anyOf))):y}function c(y){return y[u.Kind]==="Intersect"?p(y):y[u.Kind]==="Union"?s(y):y}function T(y,x){let k=y.allOf.reduce((E,F)=>{let B=g(F,x);return B[u.Kind]==="Never"?E:[...E,B]},[]);return c(u.Type.Intersect(k))}function v(y,x){let k=y.anyOf.map(E=>g(E,x));return c(u.Type.Union(k))}function O(y,x){let k=y.properties[x];return I.IsUndefined(k)?u.Type.Never():u.Type.Union([k])}function m(y,x){let k=y.items;if(I.IsUndefined(k))return u.Type.Never();let E=k[x];return I.IsUndefined(E)?u.Type.Never():E}function g(y,x){return y[u.Kind]==="Intersect"?T(y,x):y[u.Kind]==="Union"?v(y,x):y[u.Kind]==="Object"?O(y,x):y[u.Kind]==="Tuple"?m(y,x):u.Type.Never()}function L(y,x,k={}){let E=x.map(F=>g(y,F.toString()));return c(u.Type.Union(E,k))}o.Resolve=L})(We||(u.IndexedAccessor=We={}));var de;(function(o){function e(m){let[g,L]=[m.slice(0,1),m.slice(1)];return`${g.toLowerCase()}${L}`}function r(m){let[g,L]=[m.slice(0,1),m.slice(1)];return`${g.toUpperCase()}${L}`}function a(m){return m.toUpperCase()}function p(m){return m.toLowerCase()}function s(m,g){let L=ye.ParseExact(m.pattern);if(!ve.Check(L))return{...m,pattern:c(m.pattern,g)};let k=[...be.Generate(L)].map(B=>u.Type.Literal(B)),E=T(k,g),F=u.Type.Union(E);return u.Type.TemplateLiteral([F])}function c(m,g){return typeof m=="string"?g==="Uncapitalize"?e(m):g==="Capitalize"?r(m):g==="Uppercase"?a(m):g==="Lowercase"?p(m):m:m.toString()}function T(m,g){if(m.length===0)return[];let[L,...y]=m;return[O(L,g),...T(y,g)]}function v(m,g){return l.TTemplateLiteral(m)?s(m,g):l.TUnion(m)?u.Type.Union(T(m.anyOf,g)):l.TLiteral(m)?u.Type.Literal(c(m.const,g)):m}function O(m,g){return v(m,g)}o.Map=O})(de||(u.Intrinsic=de={}));var Te;(function(o){function e(c,T){return u.Type.Intersect(c.allOf.map(v=>p(v,T)),{...c})}function r(c,T){return u.Type.Union(c.anyOf.map(v=>p(v,T)),{...c})}function a(c,T){return T(c)}function p(c,T){return c[u.Kind]==="Intersect"?e(c,T):c[u.Kind]==="Union"?r(c,T):c[u.Kind]==="Object"?a(c,T):c}function s(c,T,v){return{...p(U.Type(c),T),...v}}o.Map=s})(Te||(u.ObjectMap=Te={}));var Ne;(function(o){function e(O){return O[0]==="^"&&O[O.length-1]==="$"?O.slice(1,O.length-1):O}function r(O,m){return O.allOf.reduce((g,L)=>[...g,...c(L,m)],[])}function a(O,m){let g=O.anyOf.map(L=>c(L,m));return[...g.reduce((L,y)=>y.map(x=>g.every(k=>k.includes(x))?L.add(x):L)[0],new Set)]}function p(O,m){return Object.getOwnPropertyNames(O.properties)}function s(O,m){return m.includePatterns?Object.getOwnPropertyNames(O.patternProperties):[]}function c(O,m){return l.TIntersect(O)?r(O,m):l.TUnion(O)?a(O,m):l.TObject(O)?p(O,m):l.TRecord(O)?s(O,m):[]}function T(O,m){return[...new Set(c(O,m))]}o.ResolveKeys=T;function v(O){return`^(${T(O,{includePatterns:!0}).map(L=>`(${e(L)})`).join("|")})$`}o.ResolvePattern=v})(Ne||(u.KeyResolver=Ne={}));var $e=class extends ae{};u.KeyArrayResolverError=$e;var Oe;(function(o){function e(r){return Array.isArray(r)?r:l.TUnionLiteral(r)?r.anyOf.map(a=>a.const.toString()):l.TLiteral(r)?[r.const]:l.TTemplateLiteral(r)?(()=>{let a=ye.ParseExact(r.pattern);if(!ve.Check(a))throw new $e("Cannot resolve keys from infinite template expression");return[...be.Generate(a)]})():[]}o.Resolve=e})(Oe||(u.KeyArrayResolver=Oe={}));var Ye;(function(o){function*e(a){for(let p of a.anyOf)p[u.Kind]==="Union"?yield*e(p):yield p}function r(a){return u.Type.Union([...e(a)],{...a})}o.Resolve=r})(Ye||(u.UnionResolver=Ye={}));var Le=class extends ae{};u.TemplateLiteralPatternError=Le;var Ae;(function(o){function e(s){throw new Le(s)}function r(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function a(s,c){return l.TTemplateLiteral(s)?s.pattern.slice(1,s.pattern.length-1):l.TUnion(s)?`(${s.anyOf.map(T=>a(T,c)).join("|")})`:l.TNumber(s)?`${c}${u.PatternNumber}`:l.TInteger(s)?`${c}${u.PatternNumber}`:l.TBigInt(s)?`${c}${u.PatternNumber}`:l.TString(s)?`${c}${u.PatternString}`:l.TLiteral(s)?`${c}${r(s.const.toString())}`:l.TBoolean(s)?`${c}${u.PatternBoolean}`:e(`Unexpected Kind '${s[u.Kind]}'`)}function p(s){return`^${s.map(c=>a(c,"")).join("")}$`}o.Create=p})(Ae||(u.TemplateLiteralPattern=Ae={}));var le;(function(o){function e(r){let a=ye.ParseExact(r.pattern);if(!ve.Check(a))return u.Type.String();let p=[...be.Generate(a)].map(s=>u.Type.Literal(s));return u.Type.Union(p)}o.Resolve=e})(le||(u.TemplateLiteralResolver=le={}));var Pe=class extends ae{};u.TemplateLiteralParserError=Pe;var ye;(function(o){function e(y,x,k){return y[x]===k&&y.charCodeAt(x-1)!==92}function r(y,x){return e(y,x,"(")}function a(y,x){return e(y,x,")")}function p(y,x){return e(y,x,"|")}function s(y){if(!(r(y,0)&&a(y,y.length-1)))return!1;let x=0;for(let k=0;k<y.length;k++)if(r(y,k)&&(x+=1),a(y,k)&&(x-=1),x===0&&k!==y.length-1)return!1;return!0}function c(y){return y.slice(1,y.length-1)}function T(y){let x=0;for(let k=0;k<y.length;k++)if(r(y,k)&&(x+=1),a(y,k)&&(x-=1),p(y,k)&&x===0)return!0;return!1}function v(y){for(let x=0;x<y.length;x++)if(r(y,x))return!0;return!1}function O(y){let[x,k]=[0,0],E=[];for(let B=0;B<y.length;B++)if(r(y,B)&&(x+=1),a(y,B)&&(x-=1),p(y,B)&&x===0){let j=y.slice(k,B);j.length>0&&E.push(g(j)),k=B+1}let F=y.slice(k);return F.length>0&&E.push(g(F)),E.length===0?{type:"const",const:""}:E.length===1?E[0]:{type:"or",expr:E}}function m(y){function x(F,B){if(!r(F,B))throw new Pe("TemplateLiteralParser: Index must point to open parens");let j=0;for(let H=B;H<F.length;H++)if(r(F,H)&&(j+=1),a(F,H)&&(j-=1),j===0)return[B,H];throw new Pe("TemplateLiteralParser: Unclosed group parens in expression")}function k(F,B){for(let j=B;j<F.length;j++)if(r(F,j))return[B,j];return[B,F.length]}let E=[];for(let F=0;F<y.length;F++)if(r(y,F)){let[B,j]=x(y,F),H=y.slice(B,j+1);E.push(g(H)),F=j}else{let[B,j]=k(y,F),H=y.slice(B,j);H.length>0&&E.push(g(H)),F=j-1}return E.length===0?{type:"const",const:""}:E.length===1?E[0]:{type:"and",expr:E}}function g(y){return s(y)?g(c(y)):T(y)?O(y):v(y)?m(y):{type:"const",const:y}}o.Parse=g;function L(y){return g(y.slice(1,y.length-1))}o.ParseExact=L})(ye||(u.TemplateLiteralParser=ye={}));var Ee=class extends ae{};u.TemplateLiteralFiniteError=Ee;var ve;(function(o){function e(c){throw new Ee(c)}function r(c){return c.type==="or"&&c.expr.length===2&&c.expr[0].type==="const"&&c.expr[0].const==="0"&&c.expr[1].type==="const"&&c.expr[1].const==="[1-9][0-9]*"}function a(c){return c.type==="or"&&c.expr.length===2&&c.expr[0].type==="const"&&c.expr[0].const==="true"&&c.expr[1].type==="const"&&c.expr[1].const==="false"}function p(c){return c.type==="const"&&c.const===".*"}function s(c){return a(c)?!0:r(c)||p(c)?!1:c.type==="and"?c.expr.every(T=>s(T)):c.type==="or"?c.expr.every(T=>s(T)):c.type==="const"?!0:e("Unknown expression type")}o.Check=s})(ve||(u.TemplateLiteralFinite=ve={}));var Ce=class extends ae{};u.TemplateLiteralGeneratorError=Ce;var be;(function(o){function*e(c){if(c.length===1)return yield*c[0];for(let T of c[0])for(let v of e(c.slice(1)))yield`${T}${v}`}function*r(c){return yield*e(c.expr.map(T=>[...s(T)]))}function*a(c){for(let T of c.expr)yield*s(T)}function*p(c){return yield c.const}function*s(c){return c.type==="and"?yield*r(c):c.type==="or"?yield*a(c):c.type==="const"?yield*p(c):(()=>{throw new Ce("Unknown expression")})()}o.Generate=s})(be||(u.TemplateLiteralGenerator=be={}));var Qe;(function(o){function*e(s){let c=s.trim().replace(/"|'/g,"");return c==="boolean"?yield u.Type.Boolean():c==="number"?yield u.Type.Number():c==="bigint"?yield u.Type.BigInt():c==="string"?yield u.Type.String():yield(()=>{let T=c.split("|").map(v=>u.Type.Literal(v.trim()));return T.length===0?u.Type.Never():T.length===1?T[0]:u.Type.Union(T)})()}function*r(s){if(s[1]!=="{"){let c=u.Type.Literal("$"),T=a(s.slice(1));return yield*[c,...T]}for(let c=2;c<s.length;c++)if(s[c]==="}"){let T=e(s.slice(2,c)),v=a(s.slice(c+1));return yield*[...T,...v]}yield u.Type.Literal(s)}function*a(s){for(let c=0;c<s.length;c++)if(s[c]==="$"){let T=u.Type.Literal(s.slice(0,c)),v=r(s.slice(c));return yield*[T,...v]}yield u.Type.Literal(s)}function p(s){return[...a(s)]}o.Parse=p})(Qe||(u.TemplateLiteralDslParser=Qe={}));var Be=class{constructor(e){this.schema=e}Decode(e){return new Fe(this.schema,e)}};u.TransformDecodeBuilder=Be;var Fe=class{constructor(e,r){this.schema=e,this.decode=r}Encode(e){let r=U.Type(this.schema);return l.TTransform(r)?(()=>{let s={Encode:c=>r[u.Transform].Encode(e(c)),Decode:c=>this.decode(r[u.Transform].Decode(c))};return{...r,[u.Transform]:s}})():(()=>{let a={Decode:this.decode,Encode:e};return{...r,[u.Transform]:a}})()}};u.TransformEncodeBuilder=Fe;var jn=0,Ke=class extends ae{};u.TypeBuilderError=Ke;var he=class{Create(e){return e}Throw(e){throw new Ke(e)}Discard(e,r){return r.reduce((a,p)=>{let{[p]:s,...c}=a;return c},e)}Strict(e){return JSON.parse(JSON.stringify(e))}};u.TypeBuilder=he;var we=class extends he{ReadonlyOptional(e){return this.Readonly(this.Optional(e))}Readonly(e){return{...U.Type(e),[u.Readonly]:"Readonly"}}Optional(e){return{...U.Type(e),[u.Optional]:"Optional"}}Any(e={}){return this.Create({...e,[u.Kind]:"Any"})}Array(e,r={}){return this.Create({...r,[u.Kind]:"Array",type:"array",items:U.Type(e)})}Boolean(e={}){return this.Create({...e,[u.Kind]:"Boolean",type:"boolean"})}Capitalize(e,r={}){return{...de.Map(U.Type(e),"Capitalize"),...r}}Composite(e,r){let a=u.Type.Intersect(e,{}),s=Ne.ResolveKeys(a,{includePatterns:!1}).reduce((c,T)=>({...c,[T]:u.Type.Index(a,[T])}),{});return u.Type.Object(s,r)}Enum(e,r={}){if(I.IsUndefined(e))return this.Throw("Enum undefined or empty");let a=Object.getOwnPropertyNames(e).filter(c=>isNaN(c)).map(c=>e[c]),s=[...new Set(a)].map(c=>u.Type.Literal(c));return this.Union(s,{...r,[u.Hint]:"Enum"})}Extends(e,r,a,p,s={}){switch(fe.Extends(e,r)){case d.Union:return this.Union([U.Type(a,s),U.Type(p,s)]);case d.True:return U.Type(a,s);case d.False:return U.Type(p,s)}}Exclude(e,r,a={}){return l.TTemplateLiteral(e)?this.Exclude(le.Resolve(e),r,a):l.TTemplateLiteral(r)?this.Exclude(e,le.Resolve(r),a):l.TUnion(e)?(()=>{let p=e.anyOf.filter(s=>fe.Extends(s,r)===d.False);return p.length===1?U.Type(p[0],a):this.Union(p,a)})():fe.Extends(e,r)!==d.False?this.Never(a):U.Type(e,a)}Extract(e,r,a={}){return l.TTemplateLiteral(e)?this.Extract(le.Resolve(e),r,a):l.TTemplateLiteral(r)?this.Extract(e,le.Resolve(r),a):l.TUnion(e)?(()=>{let p=e.anyOf.filter(s=>fe.Extends(s,r)!==d.False);return p.length===1?U.Type(p[0],a):this.Union(p,a)})():fe.Extends(e,r)!==d.False?U.Type(e,a):this.Never(a)}Index(e,r,a={}){return l.TArray(e)&&l.TNumber(r)?U.Type(e.items,a):l.TTuple(e)&&l.TNumber(r)?(()=>{let s=(I.IsUndefined(e.items)?[]:e.items).map(c=>U.Type(c));return this.Union(s,a)})():(()=>{let p=Oe.Resolve(r),s=U.Type(e);return We.Resolve(s,p,a)})()}Integer(e={}){return this.Create({...e,[u.Kind]:"Integer",type:"integer"})}Intersect(e,r={}){if(e.length===0)return u.Type.Never();if(e.length===1)return U.Type(e[0],r);e.some(c=>l.TTransform(c))&&this.Throw("Cannot intersect transform types");let a=e.every(c=>l.TObject(c)),p=U.Rest(e),s=l.TSchema(r.unevaluatedProperties)?{unevaluatedProperties:U.Type(r.unevaluatedProperties)}:{};return r.unevaluatedProperties===!1||l.TSchema(r.unevaluatedProperties)||a?this.Create({...r,...s,[u.Kind]:"Intersect",type:"object",allOf:p}):this.Create({...r,...s,[u.Kind]:"Intersect",allOf:p})}KeyOf(e,r={}){return l.TRecord(e)?(()=>{let a=Object.getOwnPropertyNames(e.patternProperties)[0];return a===u.PatternNumberExact?this.Number(r):a===u.PatternStringExact?this.String(r):this.Throw("Unable to resolve key type from Record key pattern")})():l.TTuple(e)?(()=>{let p=(I.IsUndefined(e.items)?[]:e.items).map((s,c)=>u.Type.Literal(c.toString()));return this.Union(p,r)})():l.TArray(e)?this.Number(r):(()=>{let a=Ne.ResolveKeys(e,{includePatterns:!1});if(a.length===0)return this.Never(r);let p=a.map(s=>this.Literal(s));return this.Union(p,r)})()}Literal(e,r={}){return this.Create({...r,[u.Kind]:"Literal",const:e,type:typeof e})}Lowercase(e,r={}){return{...de.Map(U.Type(e),"Lowercase"),...r}}Never(e={}){return this.Create({...e,[u.Kind]:"Never",not:{}})}Not(e,r){return this.Create({...r,[u.Kind]:"Not",not:U.Type(e)})}Null(e={}){return this.Create({...e,[u.Kind]:"Null",type:"null"})}Number(e={}){return this.Create({...e,[u.Kind]:"Number",type:"number"})}Object(e,r={}){let a=Object.getOwnPropertyNames(e),p=a.filter(v=>l.TOptional(e[v])),s=a.filter(v=>!p.includes(v)),c=l.TSchema(r.additionalProperties)?{additionalProperties:U.Type(r.additionalProperties)}:{},T=a.reduce((v,O)=>({...v,[O]:U.Type(e[O])}),{});return s.length>0?this.Create({...r,...c,[u.Kind]:"Object",type:"object",properties:T,required:s}):this.Create({...r,...c,[u.Kind]:"Object",type:"object",properties:T})}Omit(e,r,a={}){let p=Oe.Resolve(r);return Te.Map(this.Discard(U.Type(e),["$id",u.Transform]),s=>{I.IsArray(s.required)&&(s.required=s.required.filter(c=>!p.includes(c)),s.required.length===0&&delete s.required);for(let c of Object.getOwnPropertyNames(s.properties))p.includes(c)&&delete s.properties[c];return this.Create(s)},a)}Partial(e,r={}){return Te.Map(this.Discard(U.Type(e),["$id",u.Transform]),a=>{let p=Object.getOwnPropertyNames(a.properties).reduce((s,c)=>({...s,[c]:this.Optional(a.properties[c])}),{});return this.Object(p,this.Discard(a,["required"]))},r)}Pick(e,r,a={}){let p=Oe.Resolve(r);return Te.Map(this.Discard(U.Type(e),["$id",u.Transform]),s=>{I.IsArray(s.required)&&(s.required=s.required.filter(c=>p.includes(c)),s.required.length===0&&delete s.required);for(let c of Object.getOwnPropertyNames(s.properties))p.includes(c)||delete s.properties[c];return this.Create(s)},a)}Record(e,r,a={}){return l.TTemplateLiteral(e)?(()=>{let p=ye.ParseExact(e.pattern);return ve.Check(p)?this.Object([...be.Generate(p)].reduce((s,c)=>({...s,[c]:U.Type(r)}),{}),a):this.Create({...a,[u.Kind]:"Record",type:"object",patternProperties:{[e.pattern]:U.Type(r)}})})():l.TUnion(e)?(()=>{let p=Ye.Resolve(e);if(l.TUnionLiteral(p)){let s=p.anyOf.reduce((c,T)=>({...c,[T.const]:U.Type(r)}),{});return this.Object(s,{...a,[u.Hint]:"Record"})}else this.Throw("Record key of type union contains non-literal types")})():l.TLiteral(e)?I.IsString(e.const)||I.IsNumber(e.const)?this.Object({[e.const]:U.Type(r)},a):this.Throw("Record key of type literal is not of type string or number"):l.TInteger(e)||l.TNumber(e)?this.Create({...a,[u.Kind]:"Record",type:"object",patternProperties:{[u.PatternNumberExact]:U.Type(r)}}):l.TString(e)?(()=>{let p=I.IsUndefined(e.pattern)?u.PatternStringExact:e.pattern;return this.Create({...a,[u.Kind]:"Record",type:"object",patternProperties:{[p]:U.Type(r)}})})():this.Never()}Recursive(e,r={}){I.IsUndefined(r.$id)&&(r.$id=`T${jn++}`);let a=e({[u.Kind]:"This",$ref:`${r.$id}`});return a.$id=r.$id,this.Create({...r,[u.Hint]:"Recursive",...a})}Ref(e,r={}){return I.IsString(e)?this.Create({...r,[u.Kind]:"Ref",$ref:e}):(I.IsUndefined(e.$id)&&this.Throw("Reference target type must specify an $id"),this.Create({...r,[u.Kind]:"Ref",$ref:e.$id}))}Required(e,r={}){return Te.Map(this.Discard(U.Type(e),["$id",u.Transform]),a=>{let p=Object.getOwnPropertyNames(a.properties).reduce((s,c)=>({...s,[c]:this.Discard(a.properties[c],[u.Optional])}),{});return this.Object(p,a)},r)}Rest(e){return l.TTuple(e)&&!I.IsUndefined(e.items)?U.Rest(e.items):l.TIntersect(e)?U.Rest(e.allOf):l.TUnion(e)?U.Rest(e.anyOf):[]}String(e={}){return this.Create({...e,[u.Kind]:"String",type:"string"})}TemplateLiteral(e,r={}){let a=I.IsString(e)?Ae.Create(Qe.Parse(e)):Ae.Create(e);return this.Create({...r,[u.Kind]:"TemplateLiteral",type:"string",pattern:a})}Transform(e){return new Be(e)}Tuple(e,r={}){let[a,p,s]=[!1,e.length,e.length],c=U.Rest(e),T=e.length>0?{...r,[u.Kind]:"Tuple",type:"array",items:c,additionalItems:a,minItems:p,maxItems:s}:{...r,[u.Kind]:"Tuple",type:"array",minItems:p,maxItems:s};return this.Create(T)}Uncapitalize(e,r={}){return{...de.Map(U.Type(e),"Uncapitalize"),...r}}Union(e,r={}){return l.TTemplateLiteral(e)?le.Resolve(e):(()=>{let a=e;if(a.length===0)return this.Never(r);if(a.length===1)return this.Create(U.Type(a[0],r));let p=U.Rest(a);return this.Create({...r,[u.Kind]:"Union",anyOf:p})})()}Unknown(e={}){return this.Create({...e,[u.Kind]:"Unknown"})}Unsafe(e={}){return this.Create({...e,[u.Kind]:e[u.Kind]||"Unsafe"})}Uppercase(e,r={}){return{...de.Map(U.Type(e),"Uppercase"),...r}}};u.JsonTypeBuilder=we;var je=class extends we{AsyncIterator(e,r={}){return this.Create({...r,[u.Kind]:"AsyncIterator",type:"AsyncIterator",items:U.Type(e)})}Awaited(e,r={}){let a=p=>p.length>0?(()=>{let[s,...c]=p;return[this.Awaited(s),...a(c)]})():p;return l.TIntersect(e)?u.Type.Intersect(a(e.allOf)):l.TUnion(e)?u.Type.Union(a(e.anyOf)):l.TPromise(e)?this.Awaited(e.item):U.Type(e,r)}BigInt(e={}){return this.Create({...e,[u.Kind]:"BigInt",type:"bigint"})}ConstructorParameters(e,r={}){return this.Tuple([...e.parameters],{...r})}Constructor(e,r,a){let[p,s]=[U.Rest(e),U.Type(r)];return this.Create({...a,[u.Kind]:"Constructor",type:"Constructor",parameters:p,returns:s})}Date(e={}){return this.Create({...e,[u.Kind]:"Date",type:"Date"})}Function(e,r,a){let[p,s]=[U.Rest(e),U.Type(r)];return this.Create({...a,[u.Kind]:"Function",type:"Function",parameters:p,returns:s})}InstanceType(e,r={}){return U.Type(e.returns,r)}Iterator(e,r={}){return this.Create({...r,[u.Kind]:"Iterator",type:"Iterator",items:U.Type(e)})}Parameters(e,r={}){return this.Tuple(e.parameters,{...r})}Promise(e,r={}){return this.Create({...r,[u.Kind]:"Promise",type:"Promise",item:U.Type(e)})}RegExp(e,r={}){let a=I.IsString(e)?e:e.source;return this.Create({...r,[u.Kind]:"String",type:"string",pattern:a})}RegEx(e,r={}){return this.RegExp(e,r)}ReturnType(e,r={}){return U.Type(e.returns,r)}Symbol(e){return this.Create({...e,[u.Kind]:"Symbol",type:"symbol"})}Undefined(e={}){return this.Create({...e,[u.Kind]:"Undefined",type:"undefined"})}Uint8Array(e={}){return this.Create({...e,[u.Kind]:"Uint8Array",type:"Uint8Array"})}Void(e={}){return this.Create({...e,[u.Kind]:"Void",type:"void"})}};u.JavaScriptTypeBuilder=je;u.JsonType=new we;u.Type=new je});var cn=Re((ln,Me)=>{(function(o,e){typeof define=="function"&&define.amd?define([],e):typeof Me=="object"&&Me.exports?Me.exports=e():o.moo=e()})(ln,function(){"use strict";var o=Object.prototype.hasOwnProperty,e=Object.prototype.toString,r=typeof new RegExp().sticky=="boolean";function a(f){return f&&e.call(f)==="[object RegExp]"}function p(f){return f&&typeof f=="object"&&!a(f)&&!Array.isArray(f)}function s(f){return f.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function c(f){var b=new RegExp("|"+f);return b.exec("").length-1}function T(f){return"("+f+")"}function v(f){if(!f.length)return"(?!)";var b=f.map(function(w){return"(?:"+w+")"}).join("|");return"(?:"+b+")"}function O(f){if(typeof f=="string")return"(?:"+s(f)+")";if(a(f)){if(f.ignoreCase)throw new Error("RegExp /i flag not allowed");if(f.global)throw new Error("RegExp /g flag is implied");if(f.sticky)throw new Error("RegExp /y flag is implied");if(f.multiline)throw new Error("RegExp /m flag is implied");return f.source}else throw new Error("Not a pattern: "+f)}function m(f,b){return f.length>b?f:Array(b-f.length+1).join(" ")+f}function g(f,b){for(var w=f.length,P=0;;){var N=f.lastIndexOf(`
2
+ `,w-1);if(N===-1||(P++,w=N,P===b)||w===0)break}var R=P<b?0:w+1;return f.substring(R).split(`
3
+ `)}function L(f){for(var b=Object.getOwnPropertyNames(f),w=[],P=0;P<b.length;P++){var N=b[P],R=f[N],A=[].concat(R);if(N==="include"){for(var h=0;h<A.length;h++)w.push({include:A[h]});continue}var C=[];A.forEach(function($){p($)?(C.length&&w.push(x(N,C)),w.push(x(N,$)),C=[]):C.push($)}),C.length&&w.push(x(N,C))}return w}function y(f){for(var b=[],w=0;w<f.length;w++){var P=f[w];if(P.include){for(var N=[].concat(P.include),R=0;R<N.length;R++)b.push({include:N[R]});continue}if(!P.type)throw new Error("Rule has no type: "+JSON.stringify(P));b.push(x(P.type,P))}return b}function x(f,b){if(p(b)||(b={match:b}),b.include)throw new Error("Matching rules cannot also include states");var w={defaultType:f,lineBreaks:!!b.error||!!b.fallback,pop:!1,next:null,push:null,error:!1,fallback:!1,value:null,type:null,shouldThrow:!1};for(var P in b)o.call(b,P)&&(w[P]=b[P]);if(typeof w.type=="string"&&f!==w.type)throw new Error("Type transform cannot be a string (type '"+w.type+"' for token '"+f+"')");var N=w.match;return w.match=Array.isArray(N)?N:N?[N]:[],w.match.sort(function(R,A){return a(R)&&a(A)?0:a(A)?-1:a(R)?1:A.length-R.length}),w}function k(f){return Array.isArray(f)?y(f):L(f)}var E=x("error",{lineBreaks:!0,shouldThrow:!0});function F(f,b){for(var w=null,P=Object.create(null),N=!0,R=null,A=[],h=[],C=0;C<f.length;C++)f[C].fallback&&(N=!1);for(var C=0;C<f.length;C++){var $=f[C];if($.include)throw new Error("Inheritance is not allowed in stateless lexers");if($.error||$.fallback){if(w)throw!$.fallback==!w.fallback?new Error("Multiple "+($.fallback?"fallback":"error")+" rules not allowed (for token '"+$.defaultType+"')"):new Error("fallback and error are mutually exclusive (for token '"+$.defaultType+"')");w=$}var q=$.match.slice();if(N)for(;q.length&&typeof q[0]=="string"&&q[0].length===1;){var G=q.shift();P[G.charCodeAt(0)]=$}if($.pop||$.push||$.next){if(!b)throw new Error("State-switching options are not allowed in stateless lexers (for token '"+$.defaultType+"')");if($.fallback)throw new Error("State-switching options are not allowed on fallback tokens (for token '"+$.defaultType+"')")}if(q.length!==0){N=!1,A.push($);for(var ee=0;ee<q.length;ee++){var Q=q[ee];if(a(Q)){if(R===null)R=Q.unicode;else if(R!==Q.unicode&&$.fallback===!1)throw new Error("If one rule is /u then all must be")}}var re=v(q.map(O)),W=new RegExp(re);if(W.test(""))throw new Error("RegExp matches empty string: "+W);var _=c(re);if(_>0)throw new Error("RegExp has capture groups: "+W+`
4
+ Use (?: \u2026 ) instead`);if(!$.lineBreaks&&W.test(`
5
+ `))throw new Error("Rule should declare lineBreaks: "+W);h.push(T(re))}}var ie=w&&w.fallback,ue=r&&!ie?"ym":"gm",ne=r||ie?"":"|";R===!0&&(ue+="u");var pe=new RegExp(v(h)+ne,ue);return{regexp:pe,groups:A,fast:P,error:w||E}}function B(f){var b=F(k(f));return new S({start:b},"start")}function j(f,b,w){var P=f&&(f.push||f.next);if(P&&!w[P])throw new Error("Missing state '"+P+"' (in token '"+f.defaultType+"' of state '"+b+"')");if(f&&f.pop&&+f.pop!=1)throw new Error("pop must be 1 (in token '"+f.defaultType+"' of state '"+b+"')")}function H(f,b){var w=f.$all?k(f.$all):[];delete f.$all;var P=Object.getOwnPropertyNames(f);b||(b=P[0]);for(var N=Object.create(null),R=0;R<P.length;R++){var A=P[R];N[A]=k(f[A]).concat(w)}for(var R=0;R<P.length;R++)for(var A=P[R],h=N[A],C=Object.create(null),$=0;$<h.length;$++){var q=h[$];if(q.include){var G=[$,1];if(q.include!==A&&!C[q.include]){C[q.include]=!0;var ee=N[q.include];if(!ee)throw new Error("Cannot include nonexistent state '"+q.include+"' (in state '"+A+"')");for(var Q=0;Q<ee.length;Q++){var re=ee[Q];h.indexOf(re)===-1&&G.push(re)}}h.splice.apply(h,G),$--}}for(var W=Object.create(null),R=0;R<P.length;R++){var A=P[R];W[A]=F(N[A],!0)}for(var R=0;R<P.length;R++){for(var _=P[R],ie=W[_],ue=ie.groups,$=0;$<ue.length;$++)j(ue[$],_,W);for(var ne=Object.getOwnPropertyNames(ie.fast),$=0;$<ne.length;$++)j(ie.fast[ne[$]],_,W)}return new S(W,b)}function se(f){for(var b=typeof Map<"u",w=b?new Map:Object.create(null),P=Object.getOwnPropertyNames(f),N=0;N<P.length;N++){var R=P[N],A=f[R],h=Array.isArray(A)?A:[A];h.forEach(function(C){if(typeof C!="string")throw new Error("keyword must be string (in keyword '"+R+"')");b?w.set(C,R):w[C]=R})}return function(C){return b?w.get(C):w[C]}}var S=function(f,b){this.startState=b,this.states=f,this.buffer="",this.stack=[],this.reset()};S.prototype.reset=function(f,b){return this.buffer=f||"",this.index=0,this.line=b?b.line:1,this.col=b?b.col:1,this.queuedToken=b?b.queuedToken:null,this.queuedText=b?b.queuedText:"",this.queuedThrow=b?b.queuedThrow:null,this.setState(b?b.state:this.startState),this.stack=b&&b.stack?b.stack.slice():[],this},S.prototype.save=function(){return{line:this.line,col:this.col,state:this.state,stack:this.stack.slice(),queuedToken:this.queuedToken,queuedText:this.queuedText,queuedThrow:this.queuedThrow}},S.prototype.setState=function(f){if(!(!f||this.state===f)){this.state=f;var b=this.states[f];this.groups=b.groups,this.error=b.error,this.re=b.regexp,this.fast=b.fast}},S.prototype.popState=function(){this.setState(this.stack.pop())},S.prototype.pushState=function(f){this.stack.push(this.state),this.setState(f)};var V=r?function(f,b){return f.exec(b)}:function(f,b){var w=f.exec(b);return w[0].length===0?null:w};S.prototype._getGroup=function(f){for(var b=this.groups.length,w=0;w<b;w++)if(f[w+1]!==void 0)return this.groups[w];throw new Error("Cannot find token type for matched text")};function Z(){return this.value}if(S.prototype.next=function(){var f=this.index;if(this.queuedGroup){var b=this._token(this.queuedGroup,this.queuedText,f);return this.queuedGroup=null,this.queuedText="",b}var w=this.buffer;if(f!==w.length){var A=this.fast[w.charCodeAt(f)];if(A)return this._token(A,w.charAt(f),f);var P=this.re;P.lastIndex=f;var N=V(P,w),R=this.error;if(N==null)return this._token(R,w.slice(f,w.length),f);var A=this._getGroup(N),h=N[0];return R.fallback&&N.index!==f?(this.queuedGroup=A,this.queuedText=h,this._token(R,w.slice(f,N.index),f)):this._token(A,h,f)}},S.prototype._token=function(f,b,w){var P=0;if(f.lineBreaks){var N=/\n/g,R=1;if(b===`
6
+ `)P=1;else for(;N.exec(b);)P++,R=N.lastIndex}var A={type:typeof f.type=="function"&&f.type(b)||f.defaultType,value:typeof f.value=="function"?f.value(b):b,text:b,toString:Z,offset:w,lineBreaks:P,line:this.line,col:this.col},h=b.length;if(this.index+=h,this.line+=P,P!==0?this.col=h-R+1:this.col+=h,f.shouldThrow){var C=new Error(this.formatError(A,"invalid syntax"));throw C}return f.pop?this.popState():f.push?this.pushState(f.push):f.next&&this.setState(f.next),A},typeof Symbol<"u"&&Symbol.iterator){var Y=function(f){this.lexer=f};Y.prototype.next=function(){var f=this.lexer.next();return{value:f,done:!f}},Y.prototype[Symbol.iterator]=function(){return this},S.prototype[Symbol.iterator]=function(){return new Y(this)}}return S.prototype.formatError=function(f,b){if(f==null)var w=this.buffer.slice(this.index),f={text:w,offset:this.index,lineBreaks:w.indexOf(`
7
+ `)===-1?0:1,line:this.line,col:this.col};var P=2,N=Math.max(f.line-P,1),R=f.line+P,A=String(R).length,h=g(this.buffer,this.line-f.line+P+1).slice(0,5),C=[];C.push(b+" at line "+f.line+" col "+f.col+":"),C.push("");for(var $=0;$<h.length;$++){var q=h[$],G=N+$;C.push(m(String(G),A)+" "+q),G===f.line&&C.push(m("",A+f.col+1)+"^")}return C.join(`
8
+ `)},S.prototype.clone=function(){return new S(this.states,this.state)},S.prototype.has=function(f){return!0},{compile:B,states:H,error:Object.freeze({error:!0}),fallback:Object.freeze({fallback:!0}),keywords:se}})});var pn=Re(ce=>{"use strict";var Mn=ce&&ce.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(ce,"__esModule",{value:!0});ce.lexer=ce.states=void 0;var Dn=Mn(cn());ce.states={body:{doubleapos:{match:"''",value:()=>"'"},quoted:{lineBreaks:!0,match:/'[{}#](?:[^']|'')*'(?!')/u,value:o=>o.slice(1,-1).replace(/''/g,"'")},argument:{lineBreaks:!0,match:/\{\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*/u,push:"arg",value:o=>o.substring(1).trim()},octothorpe:"#",end:{match:"}",pop:1},content:{lineBreaks:!0,match:/[^][^{}#']*/u}},arg:{select:{lineBreaks:!0,match:/,\s*(?:plural|select|selectordinal)\s*,\s*/u,next:"select",value:o=>o.split(",")[1].trim()},"func-args":{lineBreaks:!0,match:/,\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*,/u,next:"body",value:o=>o.split(",")[1].trim()},"func-simple":{lineBreaks:!0,match:/,\s*[^\p{Pat_Syn}\p{Pat_WS}]+\s*/u,value:o=>o.substring(1).trim()},end:{match:"}",pop:1}},select:{offset:{lineBreaks:!0,match:/\s*offset\s*:\s*\d+\s*/u,value:o=>o.split(":")[1].trim()},case:{lineBreaks:!0,match:/\s*(?:=\d+|[^\p{Pat_Syn}\p{Pat_WS}]+)\s*\{/u,push:"body",value:o=>o.substring(0,o.indexOf("{")).trim()},end:{match:/\s*\}/u,pop:1}}};ce.lexer=Dn.default.states(ce.states)});var Tn=Re(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.ParseError=void 0;xe.parse=qn;var dn=pn(),De=o=>({offset:o.offset,line:o.line,col:o.col,text:o.text,lineBreaks:o.lineBreaks}),Xe=o=>o==="plural"||o==="select"||o==="selectordinal";function Vn(o,e){let r="",a="";for(let s of e){let c=s.ctx.text;switch(a+=c,s.type){case"content":r+=s.value;break;case"argument":case"function":case"octothorpe":r+=c;break;default:throw new z(o,`Unsupported part in strict mode function arg style: ${c}`)}}return[{type:"content",value:r.trim(),ctx:Object.assign({},e[0].ctx,{text:a})}]}var _n=["number","date","time","spellout","ordinal","duration"],fn=["zero","one","two","few","many","other"],z=class extends Error{constructor(e,r){super(dn.lexer.formatError(e,r))}};xe.ParseError=z;var Ze=class{constructor(e,r){var a,p,s,c;this.lexer=dn.lexer.reset(e),this.cardinalKeys=(a=r?.cardinal)!==null&&a!==void 0?a:fn,this.ordinalKeys=(p=r?.ordinal)!==null&&p!==void 0?p:fn,this.strict=(s=r?.strict)!==null&&s!==void 0?s:!1,this.strictPluralKeys=(c=r?.strictPluralKeys)!==null&&c!==void 0?c:!0}parse(){return this.parseBody(!1,!0)}checkSelectKey(e,r,a){if(a[0]==="="){if(r==="select")throw new z(e,`The case ${a} is not valid with select`)}else if(r!=="select"){let p=r==="plural"?this.cardinalKeys:this.ordinalKeys;if(this.strictPluralKeys&&p.length>0&&!p.includes(a)){let s=`The ${r} case ${a} is not valid in this locale`;throw new z(e,s)}}}parseSelect({value:e},r,a,p){let s={type:p,arg:e,cases:[],ctx:a};p==="plural"||p==="selectordinal"?r=!0:this.strict&&(r=!1);for(let c of this.lexer)switch(c.type){case"offset":if(p==="select")throw new z(c,"Unexpected plural offset for select");if(s.cases.length>0)throw new z(c,"Plural offset must be set before cases");s.pluralOffset=Number(c.value),a.text+=c.text,a.lineBreaks+=c.lineBreaks;break;case"case":{this.checkSelectKey(c,p,c.value),s.cases.push({key:c.value,tokens:this.parseBody(r),ctx:De(c)});break}case"end":return s;default:throw new z(c,`Unexpected lexer token: ${c.type}`)}throw new z(null,"Unexpected message end")}parseArgToken(e,r){let a=De(e),p=this.lexer.next();if(!p)throw new z(null,"Unexpected message end");if(a.text+=p.text,a.lineBreaks+=p.lineBreaks,this.strict&&(p.type==="func-simple"||p.type==="func-args")&&!_n.includes(p.value)){let s=`Invalid strict mode function arg type: ${p.value}`;throw new z(e,s)}switch(p.type){case"end":return{type:"argument",arg:e.value,ctx:a};case"func-simple":{let s=this.lexer.next();if(!s)throw new z(null,"Unexpected message end");if(s.type!=="end")throw new z(s,`Unexpected lexer token: ${s.type}`);if(a.text+=s.text,Xe(p.value.toLowerCase()))throw new z(p,`Invalid type identifier: ${p.value}`);return{type:"function",arg:e.value,key:p.value,ctx:a}}case"func-args":{if(Xe(p.value.toLowerCase())){let c=`Invalid type identifier: ${p.value}`;throw new z(p,c)}let s=this.parseBody(this.strict?!1:r);return this.strict&&s.length>0&&(s=Vn(e,s)),{type:"function",arg:e.value,key:p.value,param:s,ctx:a}}case"select":if(Xe(p.value))return this.parseSelect(e,r,a,p.value);throw new z(p,`Unexpected select type ${p.value}`);default:throw new z(p,`Unexpected lexer token: ${p.type}`)}}parseBody(e,r){let a=[],p=null;for(let s of this.lexer)if(s.type==="argument")p&&(p=null),a.push(this.parseArgToken(s,e));else if(s.type==="octothorpe"&&e)p&&(p=null),a.push({type:"octothorpe",ctx:De(s)});else{if(s.type==="end"&&!r)return a;{let c=s.value;if(!e&&s.type==="quoted"&&c[0]==="#"){if(c.includes("{")){let T=`Unsupported escape pattern: ${c}`;throw new z(s,T)}c=s.text}p?(p.value+=c,p.ctx.text+=s.text,p.ctx.lineBreaks+=s.lineBreaks):(p={type:"content",value:c,ctx:De(s)},a.push(p))}}if(r)return a;throw new z(null,"Unexpected message end")}};function qn(o,e={}){return new Ze(o,e).parse()}});var me=rn(sn(),1),un=me.Type.Object({pathPattern:me.Type.Union([me.Type.String({pattern:".*\\{locale\\}.*\\.json$",examples:["./messages/{locale}.json","./i18n/{locale}.json"]}),me.Type.Array(me.Type.String({pattern:".*\\{locale\\}.*\\.json$",examples:["./messages/{locale}.json","./i18n/{locale}.json"]}))],{title:"Path to language files",description:"Specify the pathPattern to locate language files in your repository. It must include `{locale}` and end with `.json`."})});var vn=rn(Tn(),1),zn={pattern:[],matches:[]};function bn(o){let e=(0,vn.parse)(o.messageSource,{strict:!1}),r={inputVariables:new Map,localVariables:new Map,selectors:[],pluralSelectors:new Map},a=mn(e,zn,r,void 0),p=[...r.inputVariables.values(),...r.localVariables.values()],s=r.selectors.map(T=>({type:"variable-reference",name:T})),c=a.map(T=>({messageBundleId:o.bundleId,messageLocale:o.locale,matches:T.matches,pattern:T.pattern}));return{declarations:p,selectors:s,variants:c}}function mn(o,e,r,a){let p=[yn(e)];for(let s of o)switch(s.type){case"content":{for(let c of p)c.pattern.push({type:"text",value:s.value});break}case"argument":{Ve(r,s.arg);for(let c of p)c.pattern.push({type:"expression",arg:{type:"variable-reference",name:s.arg}});break}case"function":{Ve(r,s.arg);let c=Wn(s.key,s.param);for(let T of p)T.pattern.push({type:"expression",arg:{type:"variable-reference",name:s.arg},annotation:c});break}case"octothorpe":{if(!a){for(let c of p)c.pattern.push({type:"text",value:"#"});break}Ve(r,a.arg);for(let c of p)c.pattern.push({type:"expression",arg:{type:"variable-reference",name:a.arg},annotation:{type:"function-reference",name:"icu:pound",options:[]}});break}case"select":case"plural":case"selectordinal":{Ve(r,s.arg);let c=s.type==="select"?s.arg:Hn(r,{arg:s.arg,type:s.type,offset:s.pluralOffset});r.selectors.includes(c)||r.selectors.push(c);let T=[];for(let v of s.cases){let O=Jn(c,v.key);for(let m of p){let g=O?[...m.matches,O]:m.matches,L=yn({pattern:m.pattern,matches:g}),y=mn(v.tokens,L,r,s.type==="select"?a:{arg:s.arg});T.push(...y)}}p=T;break}default:{let c=s;throw new Error(`Unsupported token type ${c?.type}`)}}return p}function Ve(o,e){o.inputVariables.has(e)||o.inputVariables.set(e,{type:"input-variable",name:e})}function Hn(o,e){let r=`${e.arg}|${e.type}|${e.offset??0}`,a=o.pluralSelectors.get(r);if(a)return a.selectorName;let p=e.type==="selectordinal"?`${e.arg}Ordinal`:`${e.arg}Plural${e.offset&&e.offset!==0?`Offset${e.offset}`:""}`,s=p,c=1;for(;o.localVariables.has(s)||o.inputVariables.has(s);)s=`${p}${c}`,c+=1;let T=[];e.type==="selectordinal"&&T.push({name:"type",value:{type:"literal",value:"ordinal"}}),e.offset&&e.offset!==0&&T.push({name:"offset",value:{type:"literal",value:String(e.offset)}});let v={type:"local-variable",name:s,value:{type:"expression",arg:{type:"variable-reference",name:e.arg},annotation:{type:"function-reference",name:"plural",options:T}}};return o.localVariables.set(s,v),o.pluralSelectors.set(r,{selectorName:s,arg:e.arg,type:e.type,offset:e.offset}),s}function Jn(o,e){return e==="other"?{type:"catchall-match",key:o}:{type:"literal-match",key:o,value:e}}function Wn(o,e){let r=[],a=e?Ge(e,{inPlural:!1}).trim():void 0;return a&&a.length>0&&r.push({name:"style",value:{type:"literal",value:a}}),{type:"function-reference",name:o,options:r}}function Ge(o,e){let r="";for(let a of o)switch(a.type){case"content":r+=Yn(a.value,e);break;case"argument":r+=`{${a.arg}}`;break;case"function":{let p=a.param?`, ${Ge(a.param,{inPlural:!1})}`:"";r+=`{${a.arg}, ${a.key}${p}}`;break}case"octothorpe":r+="#";break;case"select":case"plural":case"selectordinal":{let p=`${a.arg}, ${a.type},`;a.pluralOffset&&a.pluralOffset!==0&&(p+=` offset:${a.pluralOffset}`);let s=a.cases.map(c=>`${c.key} {${Ge(c.tokens,{inPlural:a.type!=="select"})}}`).join(" ");r+=`{${p} ${s}}`;break}default:{let p=a;throw new Error(`Unsupported token type ${p?.type}`)}}return r}function Yn(o,e){let r=o.replace(/'/g,"''");return r=r.replace(/\{/g,"'{'").replace(/\}/g,"'}'"),e.inPlural&&(r=r.replace(/#/g,"'#'")),r}function yn(o){return{pattern:o.pattern.map(e=>({...e})),matches:o.matches.map(e=>({...e}))}}var gn="icu:pound";function In(o){let{bundle:e,message:r,variants:a}=o;return r.selectors.length===0?a.length===0?"":Ue(a[0].pattern,{inPlural:!1}):On(a,r.selectors,e.declarations,!1)}function On(o,e,r,a){if(o.length===0)return"";if(e.length===0)return Ue(o[0].pattern,{inPlural:a});let p=e.findIndex(V=>o.some(Z=>Z.matches.some(Y=>Y.key===V.name)));if(p===-1)return Ue(o[0].pattern,{inPlural:a});let s=e[p],c=e.slice(p+1),T=Gn(s,r),v=T.type!=="select",O=o.map(V=>V.pattern),m=Math.min(...O.map(V=>V.length)),g=rt(o.map(V=>V.pattern),v),L=g.length>=m?0:g.length,y=O.map(V=>V.slice(L)),x=it(y,v),k=x.length>=m-L?0:x.length,E=L===0?[]:g,F=k===0?[]:x,B=o.map(V=>({...V,pattern:tt(V.pattern,L,k)})),j=new Map;for(let V of B){let Z=V.matches.find(b=>b.key===s.name),Y=Qn(Z),f=j.get(Y)??[];f.push(Zn(V,s.name)),j.set(Y,f)}let H=Array.from(j.entries()).map(([V,Z])=>{let Y=Xn(V),f=On(Z,c,r,v);return`${Y} {${f}}`}),se=`${T.arg}, ${T.type},`;T.offset&&T.offset!==0&&(se+=` offset:${T.offset}`);let S=`{${se} ${H.join(" ")}}`;return[Ue(E,{inPlural:a}),S,Ue(F,{inPlural:a})].join("")}function Qn(o){return!o||o.type==="catchall-match"?"*":o.value}function Xn(o){return o==="*"||o==="other"?"other":o}function Zn(o,e){return{...o,matches:o.matches.filter(r=>r.key!==e)}}function Gn(o,e){let r=e.find(a=>a.type==="local-variable"&&a.name===o.name);if(r&&r.type==="local-variable"&&r.value.annotation?.type==="function-reference"&&r.value.annotation?.name==="plural"){let a=r.value.arg.type==="variable-reference"?r.value.arg.name:o.name,p=en(r.value.annotation,"type"),s=en(r.value.annotation,"offset");return{type:p==="ordinal"?"selectordinal":"plural",arg:a,offset:s?Number(s):void 0}}return{type:"select",arg:o.name}}function en(o,e){let r=o.options.find(a=>a.name===e);if(!(!r||r.value.type!=="literal"))return r.value.value}function Ue(o,e){return o.map(r=>r.type==="text"?nt(r.value,e):et(r,e)).join("")}function et(o,e){if(o.annotation?.type==="function-reference"&&o.annotation.name===gn)return"#";let r=o.arg.type==="variable-reference"?o.arg.name:o.arg.value;if(!o.annotation)return`{${r}}`;let a=en(o.annotation,"style");return a?`{${r}, ${o.annotation.name}, ${a}}`:`{${r}, ${o.annotation.name}}`}function nt(o,e){let r=o.replace(/'/g,"''");return r=r.replace(/\{/g,"'{'").replace(/\}/g,"'}'"),e.inPlural&&(r=r.replace(/#/g,"'#'")),r}function tt(o,e,r){return o.slice(e,o.length-r)}function rt(o,e){let r=[],a=Math.min(...o.map(p=>p.length));for(let p=0;p<a;p+=1){let s=o[0]?.[p];if(!s||e&&wn(s))break;if(o.every(c=>Pn(c[p],s)))r.push(s);else break}return r}function it(o,e){let r=[],a=Math.min(...o.map(p=>p.length));for(let p=0;p<a;p+=1){let s=o[0]?.[o[0].length-1-p];if(!s||e&&wn(s))break;if(o.every(c=>Pn(c[c.length-1-p],s)))r.unshift(s);else break}return r}function Pn(o,e){if(!o||!e||o.type!==e.type)return!1;if(o.type==="text"&&e.type==="text")return o.value===e.value;if(o.type==="expression"&&e.type==="expression"){if(o.arg.type!==e.arg.type)return!1;if(o.arg.type==="variable-reference"){if(e.arg.type!=="variable-reference"||o.arg.name!==e.arg.name)return!1}else if(e.arg.type!=="literal"||o.arg.value!==e.arg.value)return!1;return!o.annotation&&!e.annotation?!0:!o.annotation||!e.annotation||o.annotation.name!==e.annotation.name?!1:JSON.stringify(o.annotation.options)===JSON.stringify(e.annotation.options)}return!1}function wn(o){return o.type==="expression"&&o.annotation?.type==="function-reference"&&o.annotation.name===gn}var ge="plugin.inlang.icu-messageformat-1",xn={key:ge,settingsSchema:un,toBeImportedFiles:async({settings:o})=>{let e=o[ge]?.pathPattern?Array.isArray(o[ge].pathPattern)?o[ge].pathPattern:[o[ge].pathPattern]:[],r=[];for(let a of e)for(let p of o.locales)r.push({locale:p,path:a.replace(/{locale}/,p)});return r},importFiles:({files:o})=>{let e=new Map,r=[],a=[],p=new TextDecoder("utf-8");for(let s of o){let c=JSON.parse(p.decode(s.content));for(let[T,v]of Object.entries(c)){if(T==="$schema"||typeof v!="string")continue;let O=bn({messageSource:v,bundleId:T,locale:s.locale}),m=e.get(T)??{id:T,declarations:[]};m.declarations=ot([...m.declarations,...O.declarations]),e.set(T,m),r.push({bundleId:T,locale:s.locale,selectors:O.selectors}),a.push(...O.variants)}}return{bundles:[...e.values()],messages:r,variants:a}},exportFiles:({bundles:o,messages:e,variants:r,settings:a})=>{let p=new TextEncoder,s={};for(let v of e){let O=o.find(L=>L.id===v.bundleId);if(!O)continue;let m=r.filter(L=>L.messageId===v.id),g=In({bundle:O,message:v,variants:m});s[v.locale]={...s[v.locale],[v.bundleId]:g}}let c=a[ge]?.pathPattern,T=Array.isArray(c)?c:[c??"{locale}.json"];return Object.entries(s).flatMap(([v,O])=>T.map(m=>({locale:v,name:m.replace(/{locale}/,v),content:p.encode(JSON.stringify(O,void 0," "))})))}};function ot(o){let e=new Map;for(let r of o){let a=JSON.stringify(r);e.has(a)||e.set(a,r)}return[...e.values()]}var mt=xn;export{mt as default};
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@inlang/plugin-icu1",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/opral/inlang",
11
+ "directory": "packages/plugins/icu1"
12
+ },
13
+ "type": "module",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": "./dist/index.js"
17
+ },
18
+ "files": [
19
+ "./dist"
20
+ ],
21
+ "devDependencies": {
22
+ "@sinclair/typebox": "^0.31.17",
23
+ "esbuild": "^0.25.9",
24
+ "prettier": "3.3.3",
25
+ "typescript": "^5.5.2",
26
+ "vitest": "^4.0.6",
27
+ "@inlang/sdk": "2.6.0",
28
+ "@inlang/tsconfig": "1.1.0"
29
+ },
30
+ "dependencies": {
31
+ "@messageformat/parser": "^5.1.1"
32
+ },
33
+ "scripts": {
34
+ "dev": "node ./build.js",
35
+ "build": "NODE_ENV=production node ./build.js",
36
+ "test": "tsc --noEmit && vitest run --passWithNoTests",
37
+ "format": "prettier ./src --write",
38
+ "clean": "rm -rf ./dist ./node_modules"
39
+ }
40
+ }