@fragmentsx/fragments-client 0.2.0-dev-20260922090625 → 0.2.0-dev-20260928114300

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/README.md CHANGED
@@ -39,9 +39,63 @@ const area = await client.$area.resolve('home');
39
39
 
40
40
  `apiToken` обязателен. Остальные опции — `backendEndpoint` (источник
41
41
  манифеста; по умолчанию `window.location.origin`), `projectId?: number`,
42
- `referer?`, `timeout?`, `plugins?` и `inject?` (callback монтирования CSS в
42
+ `referer?`, `timeout?`, `plugins?`, `inject?` (callback монтирования CSS в
43
43
  DOM; в браузере передайте `injectStylesheet` из `@fragmentsx/runtime-react`
44
- или используйте готовый `createBrowserClient` оттуда же).
44
+ или используйте готовый `createBrowserClient` оттуда же), `sourceCache?` и
45
+ `sources?`.
46
+
47
+ ## Кэш источников и слот фетчера
48
+
49
+ `useSource` из `@fragmentsx/runtime-react` держит ответы источников в кэше
50
+ клиента и предсказуемо ведёт себя на чужой странице: не перезапрашивает
51
+ одинаковые вызовы, склеивает конкурентные и переживает отказ источника
52
+ фоллбэком. Два слота отвечают за две разные вещи независимо: `sources.<имя>`
53
+ — как идти в сеть за данными конкретного источника, `sourceCache` — где
54
+ лежит результат.
55
+
56
+ ```ts
57
+ import { createFragmentsClient, createSourceCache } from '@fragmentsx/fragments-client';
58
+
59
+ const sourceCache = createSourceCache();
60
+ sourceCache.set({ source: 's24', target: 'getBonus', params: { bk: 'betboom' } }, bonus);
61
+
62
+ createFragmentsClient({ apiToken, sourceCache, sources: { s24: { fetch } } });
63
+ ```
64
+
65
+ Интерфейс кэша — четыре метода: `get`/`set`/`load`/`subscribe`. Форма записи
66
+ `get(call)` — `{ status: 'ready', data, origin } | { status: 'pending' } |
67
+ undefined`. Ключ записи — `источник:операция` плюс канонические `params`;
68
+ хост передаёт объект вызова целиком (`{ source, target, params }`), строку
69
+ ключа не собирает — формат внутренний.
70
+
71
+ Кэш живёт всю жизнь клиента, срока жизни у записи нет: то, что изменилось в
72
+ источнике, зритель увидит после перезагрузки страницы. Вытеснения тоже нет —
73
+ хост с необычной нагрузкой на память передаёт свою реализацию `SourceCache`.
74
+ Отказ источника в кэше не хранится: следующий монтаж блока пробует запрос
75
+ заново.
76
+
77
+ **Два проекта на одной странице с общим кэшем и одноимёнными источниками —
78
+ создайте два кэша.** В ключе записи нет id проекта — общий кэш означает общие
79
+ имена источников, и это решение хоста, не библиотеки.
80
+
81
+ Имя слота в `sources` — то же имя, каким источник назван в коде артефакта
82
+ (`useSource('s24', …)`). Без подмены работает наш анонимный фетчер:
83
+ `credentials: 'same-origin'`, отправку cookie на чужой домен включает только
84
+ ваш собственный фетчер (`credentials: 'include'` — решение хоста, библиотека
85
+ его не ставит никогда). `baseUrl` в слоте не заводится — фетчер получает
86
+ полный абсолютный URL, окружение (staging/prod) переключается переписыванием
87
+ адреса внутри самого фетчера.
88
+
89
+ Таймаут: наш фетчер источников обрывает запрос через `timeout` клиента или
90
+ через 10 секунд без опции. **К фетчеру хоста наш таймаут не применяется —
91
+ за зависший запрос отвечаете вы сами.**
92
+
93
+ Любой отказ — исключение фетчера, ответ не `Response`-совместимой формы,
94
+ битый `json()` — даёт фоллбэк с предупреждением в консоли, а не падение
95
+ страницы. `origin` записи различает три пути, которыми данные попали в кэш:
96
+ `'network'` (наш фетчер), `'host-fetch'` (ваш слот) и `'host-set'` (вы
97
+ положили готовый ответ через `sourceCache.set`). С `debug: true` каждая
98
+ завершённая загрузка источника пишет одну строку в консоль.
45
99
 
46
100
  ## Пара с runtime-react
47
101
 
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from '@graph-state/core';
2
- import { ResolvedValue, ResolvedSlotPosition } from '../types';
2
+ import { AreaSourceTransport, ResolvedValue, ResolvedSlotPosition } from '../types';
3
3
  import { InjectFn } from '../stylesheet';
4
4
  /**
5
5
  * Тип resolved value из $area.resolve — subset manifest без fragment refs.
@@ -50,6 +50,7 @@ export interface AreaResolveResult {
50
50
  * приём, что у `props` выше.
51
51
  */
52
52
  slots: Record<string, ResolvedSlotPosition>;
53
+ sources: Record<string, AreaSourceTransport>;
53
54
  }
54
55
  /**
55
56
  * Публичный тип $area namespace.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/$area/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAuB,aAAa,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA+D9C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;;OAQG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjD;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnF;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,CAAC;IAC1C;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,CA0KnE;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,MAAqD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/$area/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAuB,mBAAmB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC9G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAgE9C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;;OAQG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjD;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnF;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,CAAC;IAC1C;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,CA2KnE;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,MAAqD,CAAC"}
@@ -2,6 +2,8 @@ import { Plugin } from '@graph-state/core';
2
2
  import { FilterOverrides } from './namespaces';
3
3
  import { InjectFn } from './stylesheet';
4
4
  import { SpecifierImporter, SpecifierResolveFn } from './$fragments';
5
+ import { SourceCache } from './sources/createSourceCache';
6
+ import { SourceSlot } from './sources/sourceFetch';
5
7
  /**
6
8
  * Options для createFragmentsClient.
7
9
  *
@@ -12,6 +14,12 @@ export interface Options {
12
14
  projectId?: number;
13
15
  referer?: string;
14
16
  backendEndpoint?: string;
17
+ /**
18
+ * Таймаут запросов к `client-api` (через `$fetch`) и нашего фетчера
19
+ * источников без слота (`sources.<имя>.fetch` не задан) — без опции 10
20
+ * секунд (Phase 115, D-115-20). К фетчеру хоста таймаут не применяется,
21
+ * за него отвечает хост.
22
+ */
15
23
  timeout?: number;
16
24
  plugins?: Plugin[];
17
25
  /**
@@ -50,6 +58,27 @@ export interface Options {
50
58
  * (T-rvp-02): флаг нельзя поднять из пользовательского ввода на лету.
51
59
  */
52
60
  debug?: boolean;
61
+ /**
62
+ * Phase 115 (D-115-04): кэш источников. По умолчанию у каждого клиента
63
+ * свой — хост может создать `createSourceCache()` сам и передать, чтобы
64
+ * прогревать его заранее (`sourceCache.set(...)`), читать состояние или
65
+ * делить один кэш между несколькими клиентами на странице (D-115-16).
66
+ * Reversibility: costly — публичная опция клиента, меняется только версией.
67
+ */
68
+ sourceCache?: SourceCache;
69
+ /**
70
+ * Phase 115 (D-115-13): слот фетчера хоста по имени источника — как оно
71
+ * написано в коде артефакта (`useSource('s24', …)`), общего дефолта на
72
+ * все источники нет. Фетчер совместим с `fetch`: `(url, init) =>
73
+ * Promise<SourceResponse>` (`ok`/`status`/`json()`, а не готовые данные).
74
+ * Получает только запросы своего источника и полный абсолютный URL —
75
+ * `baseUrl` в слоте нет, окружение переключается переписыванием адреса
76
+ * внутри фетчера (D-115-19). `credentials: "include"` ставит сам
77
+ * фетчер — наш анонимный остаётся на `same-origin` (D-115-18). К
78
+ * фетчеру хоста таймаут не применяется, за него отвечает хост
79
+ * (D-115-20). Reversibility: costly — публичная опция клиента.
80
+ */
81
+ sources?: Record<string, SourceSlot>;
53
82
  }
54
83
  /**
55
84
  * Создаёт compiled-only GraphState client.
@@ -1 +1 @@
1
- {"version":3,"file":"createFragmentsClient.d.ts","sourceRoot":"","sources":["../src/createFragmentsClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAe1E;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,sGAuErD,CAAC"}
1
+ {"version":3,"file":"createFragmentsClient.d.ts","sourceRoot":"","sources":["../src/createFragmentsClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAe9E;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,sGAiFrD,CAAC"}
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ce=require("@graph-state/core"),Pe=require("@graph-state/checkers");class V extends Error{constructor(t,r,n,s){super(r),this.code=t,this.details=n,this.status=s,this.name="FragmentsAreaError",Object.setPrototypeOf(this,V.prototype)}}class L extends Error{constructor(t,r){super(`Manifest apiVersion mismatch: expected ${t}, received ${r}`),this.expected=t,this.received=r,this.name="FragmentsApiVersionError",Object.setPrototypeOf(this,L.prototype)}}class F extends Error{constructor(t,r,n){super(`Failed to load fragment ${t} from ${r}`),this.fragmentId=t,this.moduleUrl=r,this.cause=n,this.name="FragmentsLoadError",Object.setPrototypeOf(this,F.prototype)}}const y=(...e)=>e.reduce((t,r)=>(t[r]=r,t),{}),je=y("Fragment","FragmentInstance","Instance","Collection","ArrayItem","Breakpoint","Frame","Image","Text","SolidPaintStyle","CssLink","Variable","ComputedValue","TransformValue","StopColor","LinearGradient","CssChunk","Border","Paint","Link","Interaction","Classname","GoalEvent","MutateEvent","TextHighlight","TextStyleMark","ImagePaint"),we=y("auto","fill"),Ae=y("None","Solid","Dashed","Dotted"),Ie=y("_blank","none"),Oe=y("None","Solid","LinearGradient","RadialGradient","ConicGradient","Image"),_e=y("Auto","Contain","Cover"),$e=y("Min","Center","Max","Stretch","Scale"),xe=y("absolute","relative"),Fe=y("Fixed","Hug","Fill","Relative"),Te=y("none","flex"),Ve=y("vertical","horizontal"),Me=y("start","center","end"),Le=y("start","center","end","space-between","space-around"),Be=y("none","uppercase","lowercase","capitalize"),Ge=y("none","underline","line-through"),Ne=y("loop","appear","hover","tap"),Re=y("fade","slide","bounce","wiggle","increase"),f=y("Event","String","Link","Boolean","Array","Color","ComponentInstance","Date","Enum","Number","Image","Object","Goal"),De=y("normal","nowrap","pre","pre-wrap","pre-line","break-spaces"),qe=y("visible","hidden","scroll"),Ke=y("convert","exists","equals","startWith","endWith","contains","dateBefore","dateAfter","dateBetween","feature","notFeature","gt","gte","lt","lte","convertFromBoolean","negative"),He=y("canvas","document"),Xe=y("viewport","parent","fixed"),We=y("click","mouseover","appear"),R=y("goal","mutate","callback","tracker"),ze=y("AreaScope","InstanceScope","FragmentScope","CollectionScope","CollectionItemScope"),Ue=y("Global","Fragment"),Z=3,Je=Object.freeze(Object.defineProperty({__proto__:null,MAX_SCHEMA_DEPTH:Z,borderType:Ae,constrain:$e,createConstants:y,cssChunkScopeTypes:Ue,effectName:Re,effectType:Ne,eventMode:R,fragmentGrowingMode:we,imagePaintScaleModes:_e,interactions:We,layerAlign:Me,layerDirection:Ve,layerDistribute:Le,layerMode:Te,linkTarget:Ie,nodes:je,overflow:qe,paintMode:Oe,positionType:xe,renderMode:Xe,renderTarget:He,scopeTypes:ze,sizing:Fe,textDecorations:Ge,textTransform:Be,variableTransforms:Ke,variableType:f,whiteSpace:De},Symbol.toStringTag,{value:"Module"}));function Ye(e){return{lang:(e==null?void 0:e.lang)??void 0,message:e==null?void 0:e.message,abortEarly:(e==null?void 0:e.abortEarly)??void 0,abortPipeEarly:(e==null?void 0:e.abortPipeEarly)??void 0}}function Qe(e,t){var r;return(r=void 0)==null?void 0:r.get(t)}function q(e){var t,r;const n=typeof e;return n==="string"?`"${e}"`:n==="number"||n==="bigint"||n==="boolean"?`${e}`:n==="object"||n==="function"?(e&&((r=(t=Object.getPrototypeOf(e))==null?void 0:t.constructor)==null?void 0:r.name))??"null":n}function A(e,t,r,n,s){const l=s&&"input"in s?s.input:r.value,c=(s==null?void 0:s.expected)??e.expects??null,u=(s==null?void 0:s.received)??q(l),i={kind:e.kind,type:e.type,input:l,expected:c,received:u,message:`Invalid ${t}: ${c?`Expected ${c} but r`:"R"}eceived ${u}`,requirement:e.requirement,path:s==null?void 0:s.path,issues:s==null?void 0:s.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},h=e.kind==="schema",m=(s==null?void 0:s.message)??e.message??Qe(e.reference,i.lang)??(h?(i.lang,void 0):null)??n.message??(i.lang,void 0);m!==void 0&&(i.message=typeof m=="function"?m(i):m),h&&(r.typed=!1),r.issues?r.issues.push(i):r.issues=[i]}function j(e){return{version:1,vendor:"valibot",validate(t){return e["~run"]({value:t},Ye())}}}function Ze(e,t){return Object.hasOwn(e,t)&&t!=="__proto__"&&t!=="prototype"&&t!=="constructor"}function ee(e,t){const r=[...new Set(e)];return r.length>1?`(${r.join(` ${t} `)})`:r[0]??"never"}function er(e,t,r){return typeof e.fallback=="function"?e.fallback(t,r):e.fallback}function K(e,t,r){return typeof e.default=="function"?e.default(t,r):e.default}function H(e,t){return{kind:"schema",type:"array",reference:H,expects:"Array",async:!1,item:e,message:t,get"~standard"(){return j(this)},"~run"(r,n){var s;const l=r.value;if(Array.isArray(l)){r.typed=!0,r.value=[];for(let c=0;c<l.length;c++){const u=l[c],i=this.item["~run"]({value:u},n);if(i.issues){const h={type:"array",origin:"value",input:l,key:c,value:u};for(const m of i.issues)m.path?m.path.unshift(h):m.path=[h],(s=r.issues)==null||s.push(m);if(r.issues||(r.issues=i.issues),n.abortEarly){r.typed=!1;break}}i.typed||(r.typed=!1),r.value.push(i.value)}}else A(this,"type",r,n);return r}}}function g(e){return{kind:"schema",type:"boolean",reference:g,expects:"boolean",async:!1,message:e,get"~standard"(){return j(this)},"~run"(t,r){return typeof t.value=="boolean"?t.typed=!0:A(this,"type",t,r),t}}}function X(e){return{kind:"schema",type:"lazy",reference:X,expects:"unknown",async:!1,getter:e,get"~standard"(){return j(this)},"~run"(t,r){return this.getter(t.value)["~run"](t,r)}}}function I(e,t){return{kind:"schema",type:"literal",reference:I,expects:q(e),async:!1,literal:e,message:t,get"~standard"(){return j(this)},"~run"(r,n){return r.value===this.literal?r.typed=!0:A(this,"type",r,n),r}}}function re(e){return{kind:"schema",type:"never",reference:re,expects:"never",async:!1,message:e,get"~standard"(){return j(this)},"~run"(t,r){return A(this,"type",t,r),t}}}function B(e,t){return{kind:"schema",type:"nullable",reference:B,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:t,get"~standard"(){return j(this)},"~run"(r,n){return r.value===null&&(this.default!==void 0&&(r.value=K(this,r,n)),r.value===null)?(r.typed=!0,r):this.wrapped["~run"](r,n)}}}function x(e){return{kind:"schema",type:"number",reference:x,expects:"number",async:!1,message:e,get"~standard"(){return j(this)},"~run"(t,r){return typeof t.value=="number"&&!isNaN(t.value)?t.typed=!0:A(this,"type",t,r),t}}}function w(e,t){return{kind:"schema",type:"object",reference:w,expects:"Object",async:!1,entries:e,message:t,get"~standard"(){return j(this)},"~run"(r,n){var s;const l=r.value;if(l&&typeof l=="object"){r.typed=!0,r.value={};for(const c in this.entries){const u=this.entries[c];if(c in l||(u.type==="exact_optional"||u.type==="optional"||u.type==="nullish")&&u.default!==void 0){const i=c in l?l[c]:K(u),h=u["~run"]({value:i},n);if(h.issues){const m={type:"object",origin:"value",input:l,key:c,value:i};for(const b of h.issues)b.path?b.path.unshift(m):b.path=[m],(s=r.issues)==null||s.push(b);if(r.issues||(r.issues=h.issues),n.abortEarly){r.typed=!1;break}}h.typed||(r.typed=!1),r.value[c]=h.value}else if(u.fallback!==void 0)r.value[c]=er(u);else if(u.type!=="exact_optional"&&u.type!=="optional"&&u.type!=="nullish"&&(A(this,"key",r,n,{input:void 0,expected:`"${c}"`,path:[{type:"object",origin:"key",input:l,key:c,value:l[c]}]}),n.abortEarly))break}}else A(this,"type",r,n);return r}}}function a(e,t){return{kind:"schema",type:"optional",reference:a,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:t,get"~standard"(){return j(this)},"~run"(r,n){return r.value===void 0&&(this.default!==void 0&&(r.value=K(this,r,n)),r.value===void 0)?(r.typed=!0,r):this.wrapped["~run"](r,n)}}}function te(e,t){return{kind:"schema",type:"picklist",reference:te,expects:ee(e.map(q),"|"),async:!1,options:e,message:t,get"~standard"(){return j(this)},"~run"(r,n){return this.options.includes(r.value)?r.typed=!0:A(this,"type",r,n),r}}}function D(e,t,r){return{kind:"schema",type:"record",reference:D,expects:"Object",async:!1,key:e,value:t,message:r,get"~standard"(){return j(this)},"~run"(n,s){var l,c;const u=n.value;if(u&&typeof u=="object"){n.typed=!0,n.value={};for(const i in u)if(Ze(u,i)){const h=u[i],m=this.key["~run"]({value:i},s);if(m.issues){const d={type:"object",origin:"key",input:u,key:i,value:h};for(const o of m.issues)o.path=[d],(l=n.issues)==null||l.push(o);if(n.issues||(n.issues=m.issues),s.abortEarly){n.typed=!1;break}}const b=this.value["~run"]({value:h},s);if(b.issues){const d={type:"object",origin:"value",input:u,key:i,value:h};for(const o of b.issues)o.path?o.path.unshift(d):o.path=[d],(c=n.issues)==null||c.push(o);if(n.issues||(n.issues=b.issues),s.abortEarly){n.typed=!1;break}}(!m.typed||!b.typed)&&(n.typed=!1),m.typed&&(n.value[m.value]=b.value)}}else A(this,"type",n,s);return n}}}function k(e){return{kind:"schema",type:"string",reference:k,expects:"string",async:!1,message:e,get"~standard"(){return j(this)},"~run"(t,r){return typeof t.value=="string"?t.typed=!0:A(this,"type",t,r),t}}}function G(){return{kind:"schema",type:"unknown",reference:G,expects:"unknown",async:!1,get"~standard"(){return j(this)},"~run"(e){return e.typed=!0,e}}}function ne(e,t,r){return{kind:"schema",type:"variant",reference:ne,expects:"Object",async:!1,key:e,options:t,message:r,get"~standard"(){return j(this)},"~run"(n,s){const l=n.value;if(l&&typeof l=="object"){let c,u=0,i=this.key,h=[];const m=(b,d)=>{for(const o of b.options){if(o.type==="variant")m(o,new Set(d).add(o.key));else{let p=!0,S=0;for(const v of d){const E=o.entries[v];if(v in l?E["~run"]({typed:!1,value:l[v]},s).issues:E.type!=="exact_optional"&&E.type!=="optional"&&E.type!=="nullish"){p=!1,i!==v&&(u<S||u===S&&v in l&&!(i in l))&&(u=S,i=v,h=[]),i===v&&h.push(o.entries[v].expects);break}S++}if(p){const v=o["~run"]({value:l},s);(!c||!c.typed&&v.typed)&&(c=v)}}if(c&&!c.issues)break}};if(m(this,new Set([this.key])),c)return c;A(this,"type",n,s,{input:l[i],expected:ee(h,"|"),path:[{type:"object",origin:"value",input:l,key:i,value:l[i]}]})}else A(this,"type",n,s);return n}}}const se=w({name:a(k(),"String"),type:a(I(f.String),f.String),defaultValue:a(k(),""),required:a(g(),!1),editable:a(g(),!0),placeholder:a(k(),""),isTextarea:a(g(),!1),isRich:a(g(),!1)}),ae=w({name:a(k(),"Number"),type:a(I(f.Number),f.Number),defaultValue:a(x(),0),required:a(g(),!1),editable:a(g(),!0),min:a(x(),1),max:a(x(),100),step:a(x(),1),displayStepper:a(g(),!0)}),ie=w({name:a(k(),"Boolean"),type:a(I(f.Boolean),f.Boolean),defaultValue:a(g(),!1),required:a(g(),!1),editable:a(g(),!0)}),oe=w({name:a(k(),"String"),type:a(I(f.Color),f.Color),defaultValue:a(k(),"#000"),required:a(g(),!1),editable:a(g(),!0)}),le=w({name:a(k(),"Option"),type:a(I(f.Enum),f.Enum),defaultValue:a(k(),""),required:a(g(),!1),editable:a(g(),!0),cases:a(H(w({id:k(),name:k()})),[])}),ce=w({name:a(k(),"Link"),type:a(I(f.Link),f.Link),defaultValue:a(k(),""),required:a(g(),!1),editable:a(g(),!0)}),ue=w({name:a(k(),"Image"),type:a(I(f.Image),f.Image),defaultValue:a(B(k()),null),required:a(g(),!1),editable:a(g(),!0)});function fe(e){return w({name:a(k(),"Object"),type:a(I(f.Object),f.Object),defaultValue:a(D(k(),G()),{}),fields:a(D(k(),X(()=>de(e+1))),{}),required:a(g(),!1),editable:a(g(),!0)})}function pe(e){return w({name:a(k(),"Collection"),type:a(I(f.Array),f.Array),defaultValue:a(H(G()),[]),definition:a(B(X(()=>de(e+1))),null),required:a(g(),!1),editable:a(g(),!0)})}function de(e){return e>Z?re():ne("type",[se,ae,ie,oe,le,ce,ue,fe(e),pe(e)])}const rr=w({name:a(k(),"Event"),type:a(I(f.Event),f.Event),mode:a(te(Object.keys(R)),R.callback),defaultValue:a(G(),null),required:a(g(),!1),editable:a(g(),!0)}),tr=fe(0),nr=pe(0),sr=w({name:a(k(),"Goal"),type:a(I(f.Goal),f.Goal),defaultValue:a(B(x()),null),required:a(g(),!1),editable:a(g(),!0)});f.Number+"",f.Boolean+"",f.String+"",f.Color+"",f.Event+"",f.Link+"",f.Enum+"",f.Object+"",f.Image+"",f.Array+"",f.Goal+"";f.String+"",f.Link+"",f.Color+"",f.Image+"",f.Date+"",f.Number+"",f.Boolean+"",f.Enum+"",f.Object+"",f.Array+"",f.Event+"",f.Goal+"",f.ComponentInstance+"";const me=(...e)=>e.reduce((t,r)=>(t[r]=r,t),{}),ar={"Content-Type":"application/json"},ir=(e,t={},r={})=>{const{timeout:n}=r,s=new Map;return{get:(u,i={})=>{const h=`${e}${u}`;if(s.has(h))return s.get(h);const m=i.timeout??n,b=m!=null?AbortSignal.timeout(m):void 0,d=typeof t=="function"?t():t,o=fetch(h,{method:"GET",headers:{...ar,...d},signal:b}).then(async p=>{if(!p.ok){let v={};try{v=await p.json()}catch{v={error:{code:"UNKNOWN",message:p.statusText}}}return{ok:!1,errorBody:v,status:p.status}}let S;try{S=await p.json()}catch{S=null}return{ok:!0,data:S,status:p.status}}).finally(()=>{s.delete(h)});return s.set(h,o),o},getAbsolute:u=>{fetch(u,{method:"GET",mode:"no-cors",credentials:"omit",keepalive:!0}).catch(i=>{console.error(i)})}}},or=e=>({sendBeacon:(r,n)=>{if(!r||typeof navigator>"u"||typeof(navigator==null?void 0:navigator.sendBeacon)!="function")return!1;try{return navigator.sendBeacon.bind(navigator)(r,n)}catch(s){return console.error(s),!1}}}),lr=e=>{var i,h,m,b;const t=(i=e==null?void 0:e.env)==null?void 0:i.backendEndpoint,r=(h=e==null?void 0:e.env)==null?void 0:h.apiToken,n=(m=e==null?void 0:e.env)==null?void 0:m.referer;if(!t)return;const s=()=>{var p,S,v;const d=(p=e==null?void 0:e.env)==null?void 0:p.filterOverrides,o={};return r&&(o["X-Api-Key"]=r),n&&(o.Referer=n),d!=null&&d.deviceType&&(o["X-Filter-Device-Type"]=d.deviceType),d!=null&&d.osType&&(o["X-Filter-OS-Type"]=d.osType),d!=null&&d.page&&(o["X-Filter-Page"]=d.page),(S=d==null?void 0:d.geo)!=null&&S.code?o["X-Filter-Geo"]=d.geo.code:d!=null&&d.ip&&(o["X-Filter-IP"]=d.ip),(v=e==null?void 0:e.env)!=null&&v.debug&&(o["X-Debug"]="true"),o},l=(b=e==null?void 0:e.env)==null?void 0:b.timeout,c=ir(t,s,{timeout:l}),u=or();e.$fetch={get:c.get,sendBeacon:u.sendBeacon,getAbsolute:c.getAbsolute}},W=typeof window<"u",J=new Set,cr=e=>{try{const t=new Image;t.referrerPolicy="no-referrer";const r=()=>{t.removeEventListener("load",r),t.removeEventListener("error",r),J.delete(t)};t.addEventListener("load",r,{once:!0}),t.addEventListener("error",r,{once:!0}),J.add(t),t.src=e}catch{}},ur=(e,t)=>{if(typeof t!="function")return!1;try{return t(e),!0}catch{return!1}},fr=e=>{if(typeof navigator>"u"||typeof navigator.sendBeacon!="function")return!1;try{return navigator.sendBeacon(e)}catch{return!1}},pr=(e,t,r)=>{if(!W)return;const n=e==null?void 0:e.trim();if(n){if(typeof t=="function")try{if(t(n)===!0)return}catch{}fr(n)||ur(n,r)||cr(n)}},Y=me("INIT_SESSION","RELEASE_SESSION","REACH_PROJECT_GOAL"),he=e=>{const t=(s,l)=>{var u;if(s!==Y.REACH_PROJECT_GOAL||!l)return;const c=new URLSearchParams({goal_id:String(l.goalId),variant_id:String(l.variantId),area_id:String(l.areaId),campaign_id:String(l.campaignId)});(u=e.$fetch)==null||u.get(`/api/metric/goal?${c}`).catch(()=>{})},r=s=>{t(Y.REACH_PROJECT_GOAL,s)},n=s=>{var c,u;const l=((c=e.$fetch)==null?void 0:c.getAbsolute)!=null?i=>e.$fetch.getAbsolute(i):void 0;pr(s,(u=e==null?void 0:e.$fetch)==null?void 0:u.sendBeacon,l)};e.$metrics={reachGoal:r,trackAdPixel:n}},N=e=>(e==null?void 0:e.loaded)??Promise.resolve(),ye=e=>`fragment:${e}:css`,dr=e=>`fragment:${e}:fonts`,ge=e=>`chunk:${e}`,ve="global";function mr(e){if(!e)return[];const t=[];function r(s){if(s!==null){if(Array.isArray(s)){for(const l of s)r(l);return}t.push(s.fragmentId),s.slots&&n(s.slots)}}function n(s){for(const l of Object.keys(s))r(s[l])}return n(e),t}function be(e){return t=>{const r=new Map,n=new Map,s=new Map,l=(i,h)=>{if(r.has(i))return Promise.resolve(r.get(i));if(n.has(i))return n.get(i);s.delete(i);const m=`/api/area/${i}/compiled`,b=(async()=>{var P,T,_,M,U;const d=await t.$fetch.get(m);if(!d.ok){const O=d.errorBody;throw new V(((P=O==null?void 0:O.error)==null?void 0:P.code)??"UNKNOWN",((T=O==null?void 0:O.error)==null?void 0:T.message)??String(d.status),(_=O==null?void 0:O.error)==null?void 0:_.details,d.status)}const o=d.data;if(o.apiVersion!==2)throw new L(2,o.apiVersion);const p=o.globalCssUrl??null,S=p?N(e.inject(p,ve)):Promise.resolve(),v=mr(o.slots),E=(M=t.$fragments)==null?void 0:M.populate(o.fragments??[],o.rootFragmentId,v),$=(U=t.$cssChunks)==null?void 0:U.populate(o.cssChunks??{});W&&await Promise.allSettled([E,$,S]);const C={rootFragmentId:o.rootFragmentId,variantId:o.variantId??null,props:o.props??{},projectProperties:o.projectProperties??{},globalCssUrl:p,fragments:o.fragments??[],slots:o.slots??{}};return r.set(i,C),C})();return n.set(i,b),b.catch(d=>{s.set(i,d)}).finally(()=>{n.delete(i)}),b},c=i=>{if(r.has(i))return r.get(i);throw n.has(i)?n.get(i):s.has(i)?s.get(i):new V("AREA_NOT_RESOLVED",`Area ${i} not resolved — call $area.resolve(code) before read()`)},u=i=>r.has(i)||s.has(i);t.$area={resolve:l,read:c,has:u}}}const hr=be({inject:()=>()=>{}});function Q(e){return`fragment/${e}/index.js`}function ke(e){return`fragment/${e}/styles.css`}function yr(e){if(!e.length)return e;let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;const r=Math.abs(t).toString(36);return/^[0-9]/.test(r)?`h${r}`:r}function gr(e){return`fx-${yr(String(e))}`}const Se=e=>{return null;try{return(void 0)(e)}catch{return null}};function vr(e){return Se(ke(e))}const br=e=>`fragment:${e}:preload`;function kr(e,t){if(!W)return()=>{};const r=document.createElement("link");return r.rel="modulepreload",r.href=e,r.setAttribute("data-fragment-key",t),document.head.appendChild(r),()=>r.remove()}function z(e){const t=(e==null?void 0:e.importer)??(l=>import(l)),r=(e==null?void 0:e.inject)??(()=>()=>{}),n=(e==null?void 0:e.resolveSpecifier)??Se,s=(e==null?void 0:e.preloadModule)??kr;return l=>{const c=new Map,u=o=>c.has(o),i=o=>{var p;return(p=c.get(o))==null?void 0:p.schema},h=o=>{var p;return(p=c.get(o))==null?void 0:p.scopeClass},m=o=>{const p=c.get(o);if(p===void 0)throw new F(o,"",new Error(`Fragment ${o} not populated — call populate() before read()`));if(!p.imported)throw new F(o,"",new Error(`Fragment ${o} is a nested element of the cone, not the root — its module resolves via a static import inside the consumer's code, not via $fragments.read()`));if(p.status==="pending")throw p.promise;if(p.status==="error")throw p.error;return p.component},b=(o,p)=>{const S=Q(o);p.imported=!0;const v=t(S).then(E=>(p.status="success",p.component=E.default,p.schema=E.schema,p.scopeClass=typeof E.scopeClass=="string"?E.scopeClass:void 0,E.default),E=>{const $=new F(o,S,E);throw p.status="error",p.error=$,$});p.promise=v,v.catch(()=>{})},d=(o,p,S)=>{const v=[],E=S?new Set(S):void 0,$=C=>C===p||((E==null?void 0:E.has(C))??!1);return o.forEach(C=>{let P=c.get(C);if(P===void 0){P={status:"pending",promise:Promise.resolve(),imported:!1,assetsLoaded:Promise.resolve(),cssCleanups:[]},c.set(C,P);const T=n(ke(C));if(T){const _=r(T,ye(C));P.cssCleanups.push(_),P.assetsLoaded=N(_)}if($(C))b(C,P);else{const _=n(Q(C));if(_){const M=s(_,br(C));P.cssCleanups.push(M)}}}else $(C)&&!P.imported&&b(C,P);v.push(P.promise,P.assetsLoaded)}),Promise.allSettled(v).then(()=>{})};l.$fragments={has:u,read:m,populate:d,getSchema:i,getScopeClass:h}}}const Sr=z();function Ee(e){return t=>{const r=new Map;t.$cssChunks={has:n=>r.has(n),populate:n=>{const s=[];for(const[l,c]of Object.entries(n)){const u=Number(l);if(!r.has(u))if(c.cssUrl){const i=e.inject(c.cssUrl,ge(u));r.set(u,{ref:c,cleanup:i,loaded:N(i)})}else r.set(u,{ref:c,cleanup:()=>{},loaded:Promise.resolve()});s.push(r.get(u).loaded)}return Promise.allSettled(s).then(()=>{})}}}}const Er=me("GlobalManager"),Cr=e=>{const t=()=>()=>{},r=(e==null?void 0:e.inject)??t;return Ce.createState({_type:"GlobalManager",initialState:{},skip:[Pe.allowTypes([...Object.keys(Je.nodes),...Object.keys(Er)])],plugins:[n=>{n.env={backendEndpoint:(e==null?void 0:e.backendEndpoint)??"https://client-api.fragmentsx.com",apiToken:e==null?void 0:e.apiToken,referer:e==null?void 0:e.referer,timeout:e==null?void 0:e.timeout,filterOverrides:e==null?void 0:e.filterOverrides,debug:e==null?void 0:e.debug}},n=>{n.setFilters=s=>{var l;n.env={...n.env,filterOverrides:{...(l=n.env)==null?void 0:l.filterOverrides,...s}}}},n=>{(e==null?void 0:e.projectId)!=null&&(n.$project={projectId:e.projectId})},...(e==null?void 0:e.plugins)??[],lr,he,be({inject:r}),z({inject:r,resolveSpecifier:e==null?void 0:e.resolveSpecifier,importer:e==null?void 0:e.importer}),Ee({inject:r})]})};exports.AREA_GLOBAL_CSS_KEY=ve;exports.FragmentsApiVersionError=L;exports.FragmentsAreaError=V;exports.FragmentsLoadError=F;exports.areaPlugin=hr;exports.createCssChunksCachePlugin=Ee;exports.createFragmentsCachePlugin=z;exports.createFragmentsClient=Cr;exports.cssChunkKey=ge;exports.fragmentCssKey=ye;exports.fragmentFontsKey=dr;exports.fragmentsCachePlugin=Sr;exports.globalMetricsPlugin=he;exports.readyOf=N;exports.resolveStylesHref=vr;exports.toScopeClassName=gr;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Te=require("@graph-state/core"),_e=require("@graph-state/checkers");class R extends Error{constructor(r,t,n,a){super(t),this.code=r,this.details=n,this.status=a,this.name="FragmentsAreaError",Object.setPrototypeOf(this,R.prototype)}}class D extends Error{constructor(r,t){super(`Manifest apiVersion mismatch: expected ${r}, received ${t}`),this.expected=r,this.received=t,this.name="FragmentsApiVersionError",Object.setPrototypeOf(this,D.prototype)}}class M extends Error{constructor(r,t,n){super(`Failed to load fragment ${r} from ${t}`),this.fragmentId=r,this.moduleUrl=t,this.cause=n,this.name="FragmentsLoadError",Object.setPrototypeOf(this,M.prototype)}}const b=(...e)=>e.reduce((r,t)=>(r[t]=t,r),{}),Fe=b("Fragment","FragmentInstance","Instance","Collection","ArrayItem","Breakpoint","Frame","Image","Text","SolidPaintStyle","CssLink","Variable","ComputedValue","TransformValue","StopColor","LinearGradient","CssChunk","Border","Paint","Link","Interaction","Classname","GoalEvent","MutateEvent","TextHighlight","TextStyleMark","ImagePaint"),Me=b("auto","fill"),Ve=b("None","Solid","Dashed","Dotted"),xe=b("_blank","none"),Re=b("None","Solid","LinearGradient","RadialGradient","ConicGradient","Image"),Le=b("Auto","Contain","Cover"),Ne=b("Min","Center","Max","Stretch","Scale"),Be=b("absolute","relative"),De=b("Fixed","Hug","Fill","Relative"),Ge=b("none","flex"),qe=b("vertical","horizontal"),Ke=b("start","center","end"),Ue=b("start","center","end","space-between","space-around"),He=b("none","uppercase","lowercase","capitalize"),We=b("none","underline","line-through"),Xe=b("loop","appear","hover","tap"),Je=b("fade","slide","bounce","wiggle","increase"),m=b("Event","String","Link","Boolean","Array","Color","ComponentInstance","Date","Enum","Number","Image","Object","Goal"),Ye=b("normal","nowrap","pre","pre-wrap","pre-line","break-spaces"),Qe=b("visible","hidden","scroll"),Ze=b("convert","exists","equals","startWith","endWith","contains","dateBefore","dateAfter","dateBetween","feature","notFeature","gt","gte","lt","lte","convertFromBoolean","negative"),ze=b("canvas","document"),et=b("viewport","parent","fixed"),tt=b("click","mouseover","appear"),H=b("goal","mutate","callback","tracker"),rt=b("AreaScope","InstanceScope","FragmentScope","CollectionScope","CollectionItemScope"),nt=b("Global","Fragment"),ae=3,st=Object.freeze(Object.defineProperty({__proto__:null,MAX_SCHEMA_DEPTH:ae,borderType:Ve,constrain:Ne,createConstants:b,cssChunkScopeTypes:nt,effectName:Je,effectType:Xe,eventMode:H,fragmentGrowingMode:Me,imagePaintScaleModes:Le,interactions:tt,layerAlign:Ke,layerDirection:qe,layerDistribute:Ue,layerMode:Ge,linkTarget:xe,nodes:Fe,overflow:Qe,paintMode:Re,positionType:Be,renderMode:et,renderTarget:ze,scopeTypes:rt,sizing:De,textDecorations:We,textTransform:He,variableTransforms:Ze,variableType:m,whiteSpace:Ye},Symbol.toStringTag,{value:"Module"}));function it(e){return{lang:(e==null?void 0:e.lang)??void 0,message:e==null?void 0:e.message,abortEarly:(e==null?void 0:e.abortEarly)??void 0,abortPipeEarly:(e==null?void 0:e.abortPipeEarly)??void 0}}function at(e,r){var t;return(t=void 0)==null?void 0:t.get(r)}function J(e){var r,t;const n=typeof e;return n==="string"?`"${e}"`:n==="number"||n==="bigint"||n==="boolean"?`${e}`:n==="object"||n==="function"?(e&&((t=(r=Object.getPrototypeOf(e))==null?void 0:r.constructor)==null?void 0:t.name))??"null":n}function P(e,r,t,n,a){const u=a&&"input"in a?a.input:t.value,s=(a==null?void 0:a.expected)??e.expects??null,o=(a==null?void 0:a.received)??J(u),i={kind:e.kind,type:e.type,input:u,expected:s,received:o,message:`Invalid ${r}: ${s?`Expected ${s} but r`:"R"}eceived ${o}`,requirement:e.requirement,path:a==null?void 0:a.path,issues:a==null?void 0:a.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},d=e.kind==="schema",h=(a==null?void 0:a.message)??e.message??at(e.reference,i.lang)??(d?(i.lang,void 0):null)??n.message??(i.lang,void 0);h!==void 0&&(i.message=typeof h=="function"?h(i):h),d&&(t.typed=!1),t.issues?t.issues.push(i):t.issues=[i]}function $(e){return{version:1,vendor:"valibot",validate(r){return e["~run"]({value:r},it())}}}function ot(e,r){return Object.hasOwn(e,r)&&r!=="__proto__"&&r!=="prototype"&&r!=="constructor"}function oe(e,r){const t=[...new Set(e)];return t.length>1?`(${t.join(` ${r} `)})`:t[0]??"never"}function ut(e,r,t){return typeof e.fallback=="function"?e.fallback(r,t):e.fallback}function Y(e,r,t){return typeof e.default=="function"?e.default(r,t):e.default}function Q(e,r){return{kind:"schema",type:"array",reference:Q,expects:"Array",async:!1,item:e,message:r,get"~standard"(){return $(this)},"~run"(t,n){var a;const u=t.value;if(Array.isArray(u)){t.typed=!0,t.value=[];for(let s=0;s<u.length;s++){const o=u[s],i=this.item["~run"]({value:o},n);if(i.issues){const d={type:"array",origin:"value",input:u,key:s,value:o};for(const h of i.issues)h.path?h.path.unshift(d):h.path=[d],(a=t.issues)==null||a.push(h);if(t.issues||(t.issues=i.issues),n.abortEarly){t.typed=!1;break}}i.typed||(t.typed=!1),t.value.push(i.value)}}else P(this,"type",t,n);return t}}}function k(e){return{kind:"schema",type:"boolean",reference:k,expects:"boolean",async:!1,message:e,get"~standard"(){return $(this)},"~run"(r,t){return typeof r.value=="boolean"?r.typed=!0:P(this,"type",r,t),r}}}function Z(e){return{kind:"schema",type:"lazy",reference:Z,expects:"unknown",async:!1,getter:e,get"~standard"(){return $(this)},"~run"(r,t){return this.getter(r.value)["~run"](r,t)}}}function A(e,r){return{kind:"schema",type:"literal",reference:A,expects:J(e),async:!1,literal:e,message:r,get"~standard"(){return $(this)},"~run"(t,n){return t.value===this.literal?t.typed=!0:P(this,"type",t,n),t}}}function ue(e){return{kind:"schema",type:"never",reference:ue,expects:"never",async:!1,message:e,get"~standard"(){return $(this)},"~run"(r,t){return P(this,"type",r,t),r}}}function G(e,r){return{kind:"schema",type:"nullable",reference:G,expects:`(${e.expects} | null)`,async:!1,wrapped:e,default:r,get"~standard"(){return $(this)},"~run"(t,n){return t.value===null&&(this.default!==void 0&&(t.value=Y(this,t,n)),t.value===null)?(t.typed=!0,t):this.wrapped["~run"](t,n)}}}function F(e){return{kind:"schema",type:"number",reference:F,expects:"number",async:!1,message:e,get"~standard"(){return $(this)},"~run"(r,t){return typeof r.value=="number"&&!isNaN(r.value)?r.typed=!0:P(this,"type",r,t),r}}}function w(e,r){return{kind:"schema",type:"object",reference:w,expects:"Object",async:!1,entries:e,message:r,get"~standard"(){return $(this)},"~run"(t,n){var a;const u=t.value;if(u&&typeof u=="object"){t.typed=!0,t.value={};for(const s in this.entries){const o=this.entries[s];if(s in u||(o.type==="exact_optional"||o.type==="optional"||o.type==="nullish")&&o.default!==void 0){const i=s in u?u[s]:Y(o),d=o["~run"]({value:i},n);if(d.issues){const h={type:"object",origin:"value",input:u,key:s,value:i};for(const f of d.issues)f.path?f.path.unshift(h):f.path=[h],(a=t.issues)==null||a.push(f);if(t.issues||(t.issues=d.issues),n.abortEarly){t.typed=!1;break}}d.typed||(t.typed=!1),t.value[s]=d.value}else if(o.fallback!==void 0)t.value[s]=ut(o);else if(o.type!=="exact_optional"&&o.type!=="optional"&&o.type!=="nullish"&&(P(this,"key",t,n,{input:void 0,expected:`"${s}"`,path:[{type:"object",origin:"key",input:u,key:s,value:u[s]}]}),n.abortEarly))break}}else P(this,"type",t,n);return t}}}function c(e,r){return{kind:"schema",type:"optional",reference:c,expects:`(${e.expects} | undefined)`,async:!1,wrapped:e,default:r,get"~standard"(){return $(this)},"~run"(t,n){return t.value===void 0&&(this.default!==void 0&&(t.value=Y(this,t,n)),t.value===void 0)?(t.typed=!0,t):this.wrapped["~run"](t,n)}}}function le(e,r){return{kind:"schema",type:"picklist",reference:le,expects:oe(e.map(J),"|"),async:!1,options:e,message:r,get"~standard"(){return $(this)},"~run"(t,n){return this.options.includes(t.value)?t.typed=!0:P(this,"type",t,n),t}}}function W(e,r,t){return{kind:"schema",type:"record",reference:W,expects:"Object",async:!1,key:e,value:r,message:t,get"~standard"(){return $(this)},"~run"(n,a){var u,s;const o=n.value;if(o&&typeof o=="object"){n.typed=!0,n.value={};for(const i in o)if(ot(o,i)){const d=o[i],h=this.key["~run"]({value:i},a);if(h.issues){const p={type:"object",origin:"key",input:o,key:i,value:d};for(const l of h.issues)l.path=[p],(u=n.issues)==null||u.push(l);if(n.issues||(n.issues=h.issues),a.abortEarly){n.typed=!1;break}}const f=this.value["~run"]({value:d},a);if(f.issues){const p={type:"object",origin:"value",input:o,key:i,value:d};for(const l of f.issues)l.path?l.path.unshift(p):l.path=[p],(s=n.issues)==null||s.push(l);if(n.issues||(n.issues=f.issues),a.abortEarly){n.typed=!1;break}}(!h.typed||!f.typed)&&(n.typed=!1),h.typed&&(n.value[h.value]=f.value)}}else P(this,"type",n,a);return n}}}function j(e){return{kind:"schema",type:"string",reference:j,expects:"string",async:!1,message:e,get"~standard"(){return $(this)},"~run"(r,t){return typeof r.value=="string"?r.typed=!0:P(this,"type",r,t),r}}}function q(){return{kind:"schema",type:"unknown",reference:q,expects:"unknown",async:!1,get"~standard"(){return $(this)},"~run"(e){return e.typed=!0,e}}}function ce(e,r,t){return{kind:"schema",type:"variant",reference:ce,expects:"Object",async:!1,key:e,options:r,message:t,get"~standard"(){return $(this)},"~run"(n,a){const u=n.value;if(u&&typeof u=="object"){let s,o=0,i=this.key,d=[];const h=(f,p)=>{for(const l of f.options){if(l.type==="variant")h(l,new Set(p).add(l.key));else{let y=!0,S=0;for(const g of p){const v=l.entries[g];if(g in u?v["~run"]({typed:!1,value:u[g]},a).issues:v.type!=="exact_optional"&&v.type!=="optional"&&v.type!=="nullish"){y=!1,i!==g&&(o<S||o===S&&g in u&&!(i in u))&&(o=S,i=g,d=[]),i===g&&d.push(l.entries[g].expects);break}S++}if(y){const g=l["~run"]({value:u},a);(!s||!s.typed&&g.typed)&&(s=g)}}if(s&&!s.issues)break}};if(h(this,new Set([this.key])),s)return s;P(this,"type",n,a,{input:u[i],expected:oe(d,"|"),path:[{type:"object",origin:"value",input:u,key:i,value:u[i]}]})}else P(this,"type",n,a);return n}}}const fe=w({name:c(j(),"String"),type:c(A(m.String),m.String),defaultValue:c(j(),""),required:c(k(),!1),editable:c(k(),!0),placeholder:c(j(),""),isTextarea:c(k(),!1),isRich:c(k(),!1)}),pe=w({name:c(j(),"Number"),type:c(A(m.Number),m.Number),defaultValue:c(F(),0),required:c(k(),!1),editable:c(k(),!0),min:c(F(),1),max:c(F(),100),step:c(F(),1),displayStepper:c(k(),!0)}),de=w({name:c(j(),"Boolean"),type:c(A(m.Boolean),m.Boolean),defaultValue:c(k(),!1),required:c(k(),!1),editable:c(k(),!0)}),he=w({name:c(j(),"String"),type:c(A(m.Color),m.Color),defaultValue:c(j(),"#000"),required:c(k(),!1),editable:c(k(),!0)}),me=w({name:c(j(),"Option"),type:c(A(m.Enum),m.Enum),defaultValue:c(j(),""),required:c(k(),!1),editable:c(k(),!0),cases:c(Q(w({id:j(),name:j()})),[])}),ye=w({name:c(j(),"Link"),type:c(A(m.Link),m.Link),defaultValue:c(j(),""),required:c(k(),!1),editable:c(k(),!0)}),ge=w({name:c(j(),"Image"),type:c(A(m.Image),m.Image),defaultValue:c(G(j()),null),required:c(k(),!1),editable:c(k(),!0)});function ve(e){return w({name:c(j(),"Object"),type:c(A(m.Object),m.Object),defaultValue:c(W(j(),q()),{}),fields:c(W(j(),Z(()=>ke(e+1))),{}),required:c(k(),!1),editable:c(k(),!0)})}function be(e){return w({name:c(j(),"Collection"),type:c(A(m.Array),m.Array),defaultValue:c(Q(q()),[]),definition:c(G(Z(()=>ke(e+1))),null),required:c(k(),!1),editable:c(k(),!0)})}function ke(e){return e>ae?ue():ce("type",[fe,pe,de,he,me,ye,ge,ve(e),be(e)])}const lt=w({name:c(j(),"Event"),type:c(A(m.Event),m.Event),mode:c(le(Object.keys(H)),H.callback),defaultValue:c(q(),null),required:c(k(),!1),editable:c(k(),!0)}),ct=ve(0),ft=be(0),pt=w({name:c(j(),"Goal"),type:c(A(m.Goal),m.Goal),defaultValue:c(G(F()),null),required:c(k(),!1),editable:c(k(),!0)});m.Number+"",m.Boolean+"",m.String+"",m.Color+"",m.Event+"",m.Link+"",m.Enum+"",m.Object+"",m.Image+"",m.Array+"",m.Goal+"";m.String+"",m.Link+"",m.Color+"",m.Image+"",m.Date+"",m.Number+"",m.Boolean+"",m.Enum+"",m.Object+"",m.Array+"",m.Event+"",m.Goal+"",m.ComponentInstance+"";const Se=(...e)=>e.reduce((r,t)=>(r[t]=t,r),{});function B(e){return e===""||e===null||e===void 0||Array.isArray(e)&&e.length===0}const _=Symbol("sourceCallKey:empty");function X(e){if(B(e))return _;if(Array.isArray(e)){const r=e.map(X).filter(t=>t!==_);return r.length===0?_:["a",r]}if(typeof e=="object"&&e!==null){const r=Object.keys(e).sort().map(t=>[t,X(e[t])]).filter(([,t])=>t!==_);return r.length===0?_:["o",r]}return e}function x(e){const r=X(e.params??{});return JSON.stringify([e.source,e.target,r===_?["o",[]]:r])}function je(){const e=new Map,r=new Map,t=new Map;function n(i){var d;(d=r.get(i))==null||d.forEach(h=>h())}return{get:i=>e.get(x(i)),set:(i,d)=>{const h=x(i);e.set(h,Object.freeze({status:"ready",data:d,origin:"host-set"})),n(h)},load:(i,d,h="host-fetch")=>{const f=x(i),p=e.get(f);if((p==null?void 0:p.status)==="ready")return Promise.resolve(p);const l=t.get(f);if(l)return l;const y=Object.freeze({status:"pending"});e.set(f,y),n(f);const S=new Promise(g=>g(d())).then(g=>{if(e.get(f)===y){const O=Object.freeze({status:"ready",data:g,origin:h});return e.set(f,O),n(f),O}const v=e.get(f);return(v==null?void 0:v.status)==="ready"?v:void 0}).catch(g=>{if(console.warn(`[sourceCache] ${i.source}:${i.target}: ${g instanceof Error?g.message:String(g)}`),e.get(f)===y){e.delete(f),n(f);return}const v=e.get(f);return(v==null?void 0:v.status)==="ready"?v:void 0}).finally(()=>{t.delete(f)});return t.set(f,S),S},subscribe:(i,d)=>{const h=x(i);let f=r.get(h);return f||(f=new Set,r.set(h,f)),f.add(d),()=>{f.delete(d),f.size===0&&r.delete(h)}}}}const dt=1e4;function ht(e){if(typeof e!="object"||e===null)return!1;const r=e;return typeof r.ok=="boolean"&&typeof r.status=="number"&&typeof r.json=="function"}function re(e){if(!ht(e))throw new Error("not-a-response");if(!e.ok)throw new Error(`http-${e.status}`);return e.status===204?Promise.resolve(void 0):Promise.resolve().then(()=>e.json()).then(r=>r===null?void 0:r).catch(()=>{throw new Error("invalid-json")})}function mt(e,r){const{url:t,init:n}=e,a=r==null?void 0:r.fetcher;if(a)return Promise.resolve().then(()=>a(t,n)).then(re);const u=new AbortController,s=(r==null?void 0:r.timeout)??dt,o={...n,credentials:"same-origin",signal:u.signal},i=Promise.resolve().then(()=>fetch(t,o)).then(re);return new Promise((d,h)=>{let f=!1;const p=setTimeout(()=>{f||(f=!0,u.abort(),h(new Error("timeout")))},s);i.then(l=>{f||(f=!0,clearTimeout(p),d(l))},l=>{f||(f=!0,clearTimeout(p),h(l))})})}function yt(e){const r=Object.create(null);if(!e)return Object.freeze(r);for(const t of Object.keys(e)){const n=e[t];n&&typeof n.fetch=="function"?r[t]=n.fetch:console.warn(`[fragments-client] sources.${t}: нет функции fetch — источник пойдёт нашим фетчером`)}return Object.freeze(r)}const gt={"Content-Type":"application/json"},vt=(e,r={},t={})=>{const{timeout:n}=t,a=new Map;return{get:(o,i={})=>{const d=`${e}${o}`;if(a.has(d))return a.get(d);const h=i.timeout??n,f=h!=null?AbortSignal.timeout(h):void 0,p=typeof r=="function"?r():r,l=fetch(d,{method:"GET",headers:{...gt,...p},signal:f}).then(async y=>{if(!y.ok){let g={};try{g=await y.json()}catch{g={error:{code:"UNKNOWN",message:y.statusText}}}return{ok:!1,errorBody:g,status:y.status}}let S;try{S=await y.json()}catch{S=null}return{ok:!0,data:S,status:y.status}}).finally(()=>{a.delete(d)});return a.set(d,l),l},getAbsolute:o=>{fetch(o,{method:"GET",mode:"no-cors",credentials:"omit",keepalive:!0}).catch(i=>{console.error(i)})}}},bt=e=>({sendBeacon:(t,n)=>{if(!t||typeof navigator>"u"||typeof(navigator==null?void 0:navigator.sendBeacon)!="function")return!1;try{return navigator.sendBeacon.bind(navigator)(t,n)}catch(a){return console.error(a),!1}}}),kt=e=>{var i,d,h,f;const r=(i=e==null?void 0:e.env)==null?void 0:i.backendEndpoint,t=(d=e==null?void 0:e.env)==null?void 0:d.apiToken,n=(h=e==null?void 0:e.env)==null?void 0:h.referer;if(!r)return;const a=()=>{var y,S,g;const p=(y=e==null?void 0:e.env)==null?void 0:y.filterOverrides,l={};return t&&(l["X-Api-Key"]=t),n&&(l.Referer=n),p!=null&&p.deviceType&&(l["X-Filter-Device-Type"]=p.deviceType),p!=null&&p.osType&&(l["X-Filter-OS-Type"]=p.osType),p!=null&&p.page&&(l["X-Filter-Page"]=p.page),(S=p==null?void 0:p.geo)!=null&&S.code?l["X-Filter-Geo"]=p.geo.code:p!=null&&p.ip&&(l["X-Filter-IP"]=p.ip),(g=e==null?void 0:e.env)!=null&&g.debug&&(l["X-Debug"]="true"),l},u=(f=e==null?void 0:e.env)==null?void 0:f.timeout,s=vt(r,a,{timeout:u}),o=bt();e.$fetch={get:s.get,sendBeacon:o.sendBeacon,getAbsolute:s.getAbsolute}},z=typeof window<"u",ne=new Set,St=e=>{try{const r=new Image;r.referrerPolicy="no-referrer";const t=()=>{r.removeEventListener("load",t),r.removeEventListener("error",t),ne.delete(r)};r.addEventListener("load",t,{once:!0}),r.addEventListener("error",t,{once:!0}),ne.add(r),r.src=e}catch{}},jt=(e,r)=>{if(typeof r!="function")return!1;try{return r(e),!0}catch{return!1}},Et=e=>{if(typeof navigator>"u"||typeof navigator.sendBeacon!="function")return!1;try{return navigator.sendBeacon(e)}catch{return!1}},Ct=(e,r,t)=>{if(!z)return;const n=e==null?void 0:e.trim();if(n){if(typeof r=="function")try{if(r(n)===!0)return}catch{}Et(n)||jt(n,t)||St(n)}},se=Se("INIT_SESSION","RELEASE_SESSION","REACH_PROJECT_GOAL"),Ee=e=>{const r=(a,u)=>{var o;if(a!==se.REACH_PROJECT_GOAL||!u)return;const s=new URLSearchParams({goal_id:String(u.goalId),variant_id:String(u.variantId),area_id:String(u.areaId),campaign_id:String(u.campaignId)});(o=e.$fetch)==null||o.get(`/api/metric/goal?${s}`).catch(()=>{})},t=a=>{r(se.REACH_PROJECT_GOAL,a)},n=a=>{var s,o;const u=((s=e.$fetch)==null?void 0:s.getAbsolute)!=null?i=>e.$fetch.getAbsolute(i):void 0;Ct(a,(o=e==null?void 0:e.$fetch)==null?void 0:o.sendBeacon,u)};e.$metrics={reachGoal:t,trackAdPixel:n}},K=e=>(e==null?void 0:e.loaded)??Promise.resolve(),Ce=e=>`fragment:${e}:css`,$t=e=>`fragment:${e}:fonts`,$e=e=>`chunk:${e}`,we="global";function wt(e){if(!e)return[];const r=[];function t(a){if(a!==null){if(Array.isArray(a)){for(const u of a)t(u);return}r.push(a.fragmentId),a.slots&&n(a.slots)}}function n(a){for(const u of Object.keys(a))t(a[u])}return n(e),r}function Pe(e){return r=>{const t=new Map,n=new Map,a=new Map,u=(i,d)=>{if(t.has(i))return Promise.resolve(t.get(i));if(n.has(i))return n.get(i);a.delete(i);const h=`/api/area/${i}/compiled`,f=(async()=>{var C,V,T,L,te;const p=await r.$fetch.get(h);if(!p.ok){const I=p.errorBody;throw new R(((C=I==null?void 0:I.error)==null?void 0:C.code)??"UNKNOWN",((V=I==null?void 0:I.error)==null?void 0:V.message)??String(p.status),(T=I==null?void 0:I.error)==null?void 0:T.details,p.status)}const l=p.data;if(l.apiVersion!==2)throw new D(2,l.apiVersion);const y=l.globalCssUrl??null,S=y?K(e.inject(y,we)):Promise.resolve(),g=wt(l.slots),v=(L=r.$fragments)==null?void 0:L.populate(l.fragments??[],l.rootFragmentId,g),O=(te=r.$cssChunks)==null?void 0:te.populate(l.cssChunks??{});z&&await Promise.allSettled([v,O,S]);const E={rootFragmentId:l.rootFragmentId,variantId:l.variantId??null,props:l.props??{},projectProperties:l.projectProperties??{},globalCssUrl:y,fragments:l.fragments??[],slots:l.slots??{},sources:l.sources??{}};return t.set(i,E),E})();return n.set(i,f),f.catch(p=>{a.set(i,p)}).finally(()=>{n.delete(i)}),f},s=i=>{if(t.has(i))return t.get(i);throw n.has(i)?n.get(i):a.has(i)?a.get(i):new R("AREA_NOT_RESOLVED",`Area ${i} not resolved — call $area.resolve(code) before read()`)},o=i=>t.has(i)||a.has(i);r.$area={resolve:u,read:s,has:o}}}const Pt=Pe({inject:()=>()=>{}});function ie(e){return`fragment/${e}/index.js`}function Ae(e){return`fragment/${e}/styles.css`}function At(e){if(!e.length)return e;let r=0;for(let n=0;n<e.length;n++)r=(r<<5)-r+e.charCodeAt(n),r|=0;const t=Math.abs(r).toString(36);return/^[0-9]/.test(t)?`h${t}`:t}function Ot(e){return`fx-${At(String(e))}`}const Oe=e=>{return null;try{return(void 0)(e)}catch{return null}};function It(e){return Oe(Ae(e))}const Tt=e=>`fragment:${e}:preload`;function _t(e,r){if(!z)return()=>{};const t=document.createElement("link");return t.rel="modulepreload",t.href=e,t.setAttribute("data-fragment-key",r),document.head.appendChild(t),()=>t.remove()}function ee(e){const r=(e==null?void 0:e.importer)??(u=>import(u)),t=(e==null?void 0:e.inject)??(()=>()=>{}),n=(e==null?void 0:e.resolveSpecifier)??Oe,a=(e==null?void 0:e.preloadModule)??_t;return u=>{const s=new Map,o=l=>s.has(l),i=l=>{var y;return(y=s.get(l))==null?void 0:y.schema},d=l=>{var y;return(y=s.get(l))==null?void 0:y.scopeClass},h=l=>{const y=s.get(l);if(y===void 0)throw new M(l,"",new Error(`Fragment ${l} not populated — call populate() before read()`));if(!y.imported)throw new M(l,"",new Error(`Fragment ${l} is a nested element of the cone, not the root — its module resolves via a static import inside the consumer's code, not via $fragments.read()`));if(y.status==="pending")throw y.promise;if(y.status==="error")throw y.error;return y.component},f=(l,y)=>{const S=ie(l);y.imported=!0;const g=r(S).then(v=>(y.status="success",y.component=v.default,y.schema=v.schema,y.scopeClass=typeof v.scopeClass=="string"?v.scopeClass:void 0,v.default),v=>{const O=new M(l,S,v);throw y.status="error",y.error=O,O});y.promise=g,g.catch(()=>{})},p=(l,y,S)=>{const g=[],v=S?new Set(S):void 0,O=E=>E===y||((v==null?void 0:v.has(E))??!1);return l.forEach(E=>{let C=s.get(E);if(C===void 0){C={status:"pending",promise:Promise.resolve(),imported:!1,assetsLoaded:Promise.resolve(),cssCleanups:[]},s.set(E,C);const V=n(Ae(E));if(V){const T=t(V,Ce(E));C.cssCleanups.push(T),C.assetsLoaded=K(T)}if(O(E))f(E,C);else{const T=n(ie(E));if(T){const L=a(T,Tt(E));C.cssCleanups.push(L)}}}else O(E)&&!C.imported&&f(E,C);g.push(C.promise,C.assetsLoaded)}),Promise.allSettled(g).then(()=>{})};u.$fragments={has:o,read:h,populate:p,getSchema:i,getScopeClass:d}}}const Ft=ee();function Ie(e){return r=>{const t=new Map;r.$cssChunks={has:n=>t.has(n),populate:n=>{const a=[];for(const[u,s]of Object.entries(n)){const o=Number(u);if(!t.has(o))if(s.cssUrl){const i=e.inject(s.cssUrl,$e(o));t.set(o,{ref:s,cleanup:i,loaded:K(i)})}else t.set(o,{ref:s,cleanup:()=>{},loaded:Promise.resolve()});a.push(t.get(o).loaded)}return Promise.allSettled(a).then(()=>{})}}}}const Mt=Se("GlobalManager"),Vt=e=>{const r=()=>()=>{},t=(e==null?void 0:e.inject)??r;return Te.createState({_type:"GlobalManager",initialState:{},skip:[_e.allowTypes([...Object.keys(st.nodes),...Object.keys(Mt)])],plugins:[n=>{n.env={backendEndpoint:(e==null?void 0:e.backendEndpoint)??"https://client-api.fragmentsx.com",apiToken:e==null?void 0:e.apiToken,referer:e==null?void 0:e.referer,timeout:e==null?void 0:e.timeout,filterOverrides:e==null?void 0:e.filterOverrides,debug:e==null?void 0:e.debug}},n=>{n.sourceCache=(e==null?void 0:e.sourceCache)??je()},n=>{n.sourceFetchers=yt(e==null?void 0:e.sources)},n=>{n.setFilters=a=>{var u;n.env={...n.env,filterOverrides:{...(u=n.env)==null?void 0:u.filterOverrides,...a}}}},n=>{(e==null?void 0:e.projectId)!=null&&(n.$project={projectId:e.projectId})},...(e==null?void 0:e.plugins)??[],kt,Ee,Pe({inject:t}),ee({inject:t,resolveSpecifier:e==null?void 0:e.resolveSpecifier,importer:e==null?void 0:e.importer}),Ie({inject:t})]})},U=e=>typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e),xt=(e,r)=>`${e}:${r}`;function Rt(e,r){if(!(!e||!Object.prototype.hasOwnProperty.call(e,r)))return e[r]}function N(e){if(B(e))return{kind:"empty"};if(Array.isArray(e)){const r=[];for(const t of e)if(!B(t)){if(!U(t))return{kind:"invalid"};r.push(t)}return r.length===0?{kind:"empty"}:{kind:"array",items:r}}if(typeof e=="object"&&e!==null){const r=[];for(const t of Object.keys(e)){const n=e[t];if(!B(n)){if(!U(n))return{kind:"invalid"};r.push([t,n])}}return r.length===0?{kind:"empty"}:{kind:"object",entries:r}}return U(e)?{kind:"scalar",value:e}:{kind:"invalid"}}function Lt(e,r,t,n){const a=s=>encodeURIComponent(String(s));if(n.kind==="invalid")return null;if(r==="deepObject")return t?n.kind==="empty"?[]:n.kind!=="object"?null:n.entries.map(([s,o])=>({name:`${a(e)}[${a(s)}]`,value:a(o)})):null;const u=r==="form"?",":r==="spaceDelimited"?"%20":r==="pipeDelimited"?"|":null;return u===null?null:n.kind==="empty"?[]:n.kind==="scalar"?[{name:e,value:a(n.value)}]:n.kind==="array"?t?n.items.map(s=>({name:e,value:a(s)})):r==="spaceDelimited"&&n.items.some(s=>/\s/.test(String(s)))?null:[{name:e,value:n.items.map(a).join(u)}]:r!=="form"?null:t?n.entries.map(([s,o])=>({name:s,value:a(o)})):[{name:e,value:n.entries.flatMap(([s,o])=>[a(s),a(o)]).join(u)}]}const Nt=new Set([".","..","%2e",".%2e","%2e.","%2e%2e"]);function Bt(e){return Nt.has(e.toLowerCase())}function Dt(e,r,t,n){if(r!=="simple"&&r!=="label"&&r!=="matrix"||n.kind==="invalid"||n.kind==="empty")return null;const a=s=>{const o=String(s);if(Bt(o))return null;let i=encodeURIComponent(o);return r==="label"&&(i=i.replace(/\./g,"%2E")),i};if(n.kind==="scalar"){const s=a(n.value);return s===null?null:r==="simple"?s:r==="label"?`.${s}`:`;${e}=${s}`}if(n.kind==="array"){const s=[];for(const o of n.items){const i=a(o);if(i===null)return null;s.push(i)}return r==="simple"?s.join(","):r==="label"?t?s.map(o=>`.${o}`).join(""):`.${s.join(",")}`:t?s.map(o=>`;${e}=${o}`).join(""):`;${e}=${s.join(",")}`}const u=[];for(const[s,o]of n.entries){const i=a(s),d=a(o);if(i===null||d===null)return null;u.push([i,d])}return r==="simple"?t?u.map(([s,o])=>`${s}=${o}`).join(","):u.flatMap(([s,o])=>[s,o]).join(","):r==="label"?t?u.map(([s,o])=>`.${s}=${o}`).join(""):`.${u.flatMap(([s,o])=>[s,o]).join(",")}`:t?u.map(([s,o])=>`;${s}=${o}`).join(""):`;${e}=${u.flatMap(([s,o])=>[s,o]).join(",")}`}function Gt(e,r,t){if(t.kind==="invalid"||e!=="simple")return null;if(t.kind==="empty")return{present:!1};const n=u=>encodeURIComponent(String(u));let a;return t.kind==="scalar"?a=String(t.value):t.kind==="array"?a=t.items.map(n).join(","):a=r?t.entries.map(([u,s])=>`${n(u)}=${n(s)}`).join(","):t.entries.flatMap(([u,s])=>[n(u),n(s)]).join(","),/[\r\n\0]/.test(a)?null:{present:!0,value:a}}function qt(e){if(!e||typeof e!="object")return null;const r=e;if(typeof r.method!="string"||!/^[A-Z]+$/.test(r.method)||typeof r.path!="string"||!r.path.startsWith("/")||!r.params||typeof r.params!="object"||Array.isArray(r.params))return null;for(const t of Object.values(r.params)){if(!t||typeof t!="object")return null;const n=t;if(!["path","query","header","cookie"].includes(n.in)||typeof n.style!="string"||typeof n.explode!="boolean")return null}return r}function Kt(e){try{return["http:","https:"].includes(new URL(e).protocol)}catch{return!1}}function Ut(e,r,t){let n=r.path;const a={},u=[];let s;try{if(s=new URL(e),!["http:","https:"].includes(s.protocol))return null}catch{return null}for(const i of Object.keys(r.params).sort()){const d=r.params[i],h=Rt(t,i);if(d.in==="query"){const f=N(h);if(f.kind==="invalid")return null;const p=Lt(i,d.style,d.explode,f);if(p===null)return null;for(const l of p)u.push(`${l.name}=${l.value}`)}else if(d.in==="path"){const f=N(h),p=Dt(i,d.style,d.explode,f);if(p===null)return null;n=n.split(`{${i}}`).join(p)}else if(d.in==="header"){const f=N(h),p=Gt(d.style,d.explode,f);if(p===null)return null;p.present&&(a[i]=p.value)}else{const f=N(h);if(f.kind==="invalid"||f.kind!=="empty")return null}}if(/\{[^}]+\}/.test(n))return null;if(s.pathname=`${s.pathname.replace(/\/$/,"")}/${n.replace(/^\//,"")}`,u.length>0){const i=s.search?s.search.slice(1):"";s.search=i?`${i}&${u.join("&")}`:u.join("&")}const o={method:r.method,credentials:"same-origin",headers:a};return{url:s.toString(),init:o}}function Ht(e,r){if(!e)return{ok:!1,reason:"missing"};if(e.kind!=="openapi")return{ok:!1,reason:"unsupported-kind"};const t=qt(e.transport);if(!t)return{ok:!1,reason:"invalid-transport"};if(!Kt(e.baseUrl))return{ok:!1,reason:"invalid-transport"};const n=Ut(e.baseUrl,t,r);return n?{ok:!0,...n}:{ok:!1,reason:"unsupported-params"}}exports.AREA_GLOBAL_CSS_KEY=we;exports.FragmentsApiVersionError=D;exports.FragmentsAreaError=R;exports.FragmentsLoadError=M;exports.areaPlugin=Pt;exports.createCssChunksCachePlugin=Ie;exports.createFragmentsCachePlugin=ee;exports.createFragmentsClient=Vt;exports.createSourceCache=je;exports.cssChunkKey=$e;exports.fragmentCssKey=Ce;exports.fragmentFontsKey=$t;exports.fragmentsCachePlugin=Ft;exports.globalMetricsPlugin=Ee;exports.readyOf=K;exports.resolveSourceRequest=Ht;exports.resolveStylesHref=It;exports.runSourceFetch=mt;exports.sourceCallKey=x;exports.sourceTransportKey=xt;exports.toScopeClassName=Ot;
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  * оттуда — потребитель (runtime-react, playgrounds) получает аугментацию вместе
13
13
  * с пакетом. Гейт на факт сборки — `src/dist-declarations.test.ts`.
14
14
  */
15
- export type { AreaResolveResponse, CssChunkRef, ResolvedValue, ResolvedSlotValue, ResolvedSlotPosition, FieldId, } from './types';
15
+ export type { AreaResolveResponse, AreaSourceTransport, CssChunkRef, ResolvedValue, ResolvedSlotValue, ResolvedSlotPosition, FieldId, } from './types';
16
16
  export type { FragmentsEnv, FilterOverrides, AreaNamespace, FetchNamespace, CssChunksNamespace, } from './namespaces';
17
17
  export { FragmentsAreaError, FragmentsApiVersionError, FragmentsLoadError, } from './errors';
18
18
  export { createFragmentsClient } from './createFragmentsClient';
@@ -26,4 +26,10 @@ export type { AreaResolveResult } from './$area';
26
26
  export { globalMetricsPlugin } from './metrics/globalMetrics';
27
27
  export { readyOf, fragmentCssKey, fragmentFontsKey, cssChunkKey, AREA_GLOBAL_CSS_KEY, } from './stylesheet';
28
28
  export type { StylesheetHandle, InjectFn } from './stylesheet';
29
+ export { createSourceCache } from './sources/createSourceCache';
30
+ export type { SourceCache, SourceCall, SourceCacheEntry, SourceReadyEntry, SourcePendingEntry, SourceOrigin, SourceRun, } from './sources/createSourceCache';
31
+ export { sourceCallKey } from './sources/sourceCallKey';
32
+ export { resolveSourceRequest, sourceTransportKey } from './sources/sourceRequest';
33
+ export { runSourceFetch } from './sources/sourceFetch';
34
+ export type { SourceFetcher, SourceSlot, SourceResponse } from './sources/sourceFetch';
29
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,GACR,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAI5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAK9D,OAAO,EACL,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,GACR,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAI5F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAK9D,OAAO,EACL,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAK/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAInF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}