@xtrable-ltd/nanoesis 0.1.9 → 0.1.11

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 (32) hide show
  1. package/dist/adapter-azure-blob.d.ts +7 -1
  2. package/dist/adapter-azure-blob.js +2 -2
  3. package/dist/{chunk-J6VYOB47.js → chunk-XO3CT6GL.js} +1699 -1167
  4. package/dist/editor-api.d.ts +39 -2
  5. package/dist/editor-api.js +396 -6
  6. package/dist/index.d.ts +491 -222
  7. package/dist/index.js +25 -1
  8. package/editor/assets/MigrationsPane-BAHPPSXP.css +1 -0
  9. package/editor/assets/MigrationsPane-BYGqWBAA.js +4 -0
  10. package/editor/assets/{TemplatesPane-CHzfB00-.js → TemplatesPane-B5hn_v0Z.js} +208 -202
  11. package/editor/assets/{TemplatesPane-B4_sg2u5.css → TemplatesPane-D0gGehUt.css} +1 -1
  12. package/editor/assets/{cssMode-BahdJh1A.js → cssMode-BbIf5k6I.js} +1 -1
  13. package/editor/assets/{freemarker2-2FC3twUE.js → freemarker2-DoW0pSYV.js} +1 -1
  14. package/editor/assets/{handlebars-pMjPHNx1.js → handlebars-DLlET-qc.js} +1 -1
  15. package/editor/assets/{html-KTToTG0n.js → html-4khbqrhe.js} +1 -1
  16. package/editor/assets/{htmlMode-ufik94dZ.js → htmlMode-DblHkZ-k.js} +1 -1
  17. package/editor/assets/index-CkESQLMV.css +7 -0
  18. package/editor/assets/index-Do1drqEQ.js +138 -0
  19. package/editor/assets/{javascript-CD4kAZXr.js → javascript-CgPO2Hmj.js} +1 -1
  20. package/editor/assets/{jsonMode-ClHucayn.js → jsonMode-BrWh2436.js} +1 -1
  21. package/editor/assets/{liquid-B-uYib60.js → liquid-BsQJXwPT.js} +1 -1
  22. package/editor/assets/{mdx-BOc9oMkZ.js → mdx-AO8t67gx.js} +1 -1
  23. package/editor/assets/{python-BipLFHGs.js → python-3w4sZj5c.js} +1 -1
  24. package/editor/assets/{razor-C0di_gwM.js → razor-BFsvo06w.js} +1 -1
  25. package/editor/assets/{tsMode-B7fenrcD.js → tsMode-QrC4ERjp.js} +1 -1
  26. package/editor/assets/{typescript-CDg7c2A-.js → typescript-BXJ3QLad.js} +1 -1
  27. package/editor/assets/{xml-DTAdn5Pw.js → xml-CxKYn1FP.js} +1 -1
  28. package/editor/assets/{yaml-B9-OjY0Z.js → yaml-BmWLvF7Q.js} +1 -1
  29. package/editor/index.html +2 -2
  30. package/package.json +1 -1
  31. package/editor/assets/index-BsRGVHEP.css +0 -7
  32. package/editor/assets/index-CPKtfzWD.js +0 -134
package/dist/index.js CHANGED
@@ -9,6 +9,9 @@ import {
9
9
  IndexedStore,
10
10
  RESERVED_PREFIX,
11
11
  analyzeTemplate,
12
+ applyMigration,
13
+ baseTemplateName,
14
+ bestFitSnapshot,
12
15
  buildAuthoringReference,
13
16
  buildContentIndex,
14
17
  buildPictureMarkup,
@@ -20,10 +23,12 @@ import {
20
23
  compilePage,
21
24
  compileSite,
22
25
  compileTemplate,
26
+ computeSchemaDelta,
23
27
  contentHash,
24
28
  contentTypeFor,
25
29
  createDiagnosticRegistry,
26
30
  deriveFields,
31
+ detectStamp,
27
32
  emptyIndex,
28
33
  escapeHtmlAttribute,
29
34
  escapeHtmlText,
@@ -32,7 +37,10 @@ import {
32
37
  hasRole,
33
38
  humanize,
34
39
  inferControl,
40
+ isDestructiveTypeChange,
35
41
  isFieldType,
42
+ isReservedVersionedPath,
43
+ isVersionedTemplateName,
36
44
  joinAuthors,
37
45
  loadComponentScripts,
38
46
  loadComponentStyles,
@@ -43,11 +51,13 @@ import {
43
51
  loadRedirects,
44
52
  loadSiteConfig,
45
53
  loadTemplate,
54
+ nextVersionNumber,
46
55
  noopPurgeService,
47
56
  outputPathForItem,
48
57
  parseContentItem,
49
58
  parseRedirects,
50
59
  parseSortFile,
60
+ pendingMigrations,
51
61
  processImage,
52
62
  publishSite,
53
63
  reconcileIndex,
@@ -56,14 +66,16 @@ import {
56
66
  sanitizeUrl,
57
67
  saveIndex,
58
68
  slugify,
69
+ snapshotName,
59
70
  textContent,
60
71
  toAuthorRefs,
61
72
  urlForItem,
62
73
  validateSite,
63
74
  valueKindOf,
75
+ versionNumber,
64
76
  wholeValueToken,
65
77
  workingStoreRoundTripDiagnostic
66
- } from "./chunk-J6VYOB47.js";
78
+ } from "./chunk-XO3CT6GL.js";
67
79
  export {
68
80
  ContentParseError,
69
81
  DEFAULT_DIRS,
@@ -75,6 +87,9 @@ export {
75
87
  IndexedStore,
76
88
  RESERVED_PREFIX,
77
89
  analyzeTemplate,
90
+ applyMigration,
91
+ baseTemplateName,
92
+ bestFitSnapshot,
78
93
  buildAuthoringReference,
79
94
  buildContentIndex,
80
95
  buildPictureMarkup,
@@ -86,10 +101,12 @@ export {
86
101
  compilePage,
87
102
  compileSite,
88
103
  compileTemplate,
104
+ computeSchemaDelta,
89
105
  contentHash,
90
106
  contentTypeFor,
91
107
  createDiagnosticRegistry,
92
108
  deriveFields,
109
+ detectStamp,
93
110
  emptyIndex,
94
111
  escapeHtmlAttribute,
95
112
  escapeHtmlText,
@@ -98,7 +115,10 @@ export {
98
115
  hasRole,
99
116
  humanize,
100
117
  inferControl,
118
+ isDestructiveTypeChange,
101
119
  isFieldType,
120
+ isReservedVersionedPath,
121
+ isVersionedTemplateName,
102
122
  joinAuthors,
103
123
  loadComponentScripts,
104
124
  loadComponentStyles,
@@ -109,11 +129,13 @@ export {
109
129
  loadRedirects,
110
130
  loadSiteConfig,
111
131
  loadTemplate,
132
+ nextVersionNumber,
112
133
  noopPurgeService,
113
134
  outputPathForItem,
114
135
  parseContentItem,
115
136
  parseRedirects,
116
137
  parseSortFile,
138
+ pendingMigrations,
117
139
  processImage,
118
140
  publishSite,
119
141
  reconcileIndex,
@@ -122,11 +144,13 @@ export {
122
144
  sanitizeUrl,
123
145
  saveIndex,
124
146
  slugify,
147
+ snapshotName,
125
148
  textContent,
126
149
  toAuthorRefs,
127
150
  urlForItem,
128
151
  validateSite,
129
152
  valueKindOf,
153
+ versionNumber,
130
154
  wholeValueToken,
131
155
  workingStoreRoundTripDiagnostic
132
156
  };
@@ -0,0 +1 @@
1
+ .migrations.svelte-1lpfi31{display:grid;gap:var(--space-4);padding:var(--space-4);overflow:auto;min-height:0}.list-head.svelte-1lpfi31,.detail-head.svelte-1lpfi31{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3)}.detail-head.svelte-1lpfi31 h2:where(.svelte-1lpfi31){margin:0;font-size:var(--text-base);font-weight:500;flex:1}.back.svelte-1lpfi31{border:1px solid var(--border);background:var(--surface);color:var(--text);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm);font:inherit;font-size:var(--text-sm);cursor:pointer}.empty.svelte-1lpfi31{border:1px dashed var(--border);border-radius:var(--radius-md);padding:var(--space-6);text-align:center;color:var(--text-muted)}.empty.svelte-1lpfi31 h3:where(.svelte-1lpfi31){margin:0 0 var(--space-1);color:var(--text);font-size:var(--text-base)}.group.svelte-1lpfi31{display:grid;gap:var(--space-2)}.group-title.svelte-1lpfi31{margin:0;font-size:var(--text-sm);display:flex;align-items:center;gap:var(--space-2)}.group-title.svelte-1lpfi31 code:where(.svelte-1lpfi31){background:var(--surface-raised);padding:0 var(--space-1);border-radius:var(--radius-sm);font-size:var(--text-sm)}.count.svelte-1lpfi31{color:var(--text-subtle);font-weight:400;font-size:var(--text-xs)}.items.svelte-1lpfi31{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-2)}.item-row.svelte-1lpfi31{display:flex;align-items:center;gap:var(--space-3);width:100%;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font:inherit;text-align:left;cursor:pointer}.item-row.svelte-1lpfi31:hover{background:var(--surface-raised)}.item-path.svelte-1lpfi31{flex:0 0 auto}.item-summary.svelte-1lpfi31{color:var(--text-muted);font-size:var(--text-sm);flex:1}.open-icon.svelte-1lpfi31{color:var(--text-subtle)}.diff.svelte-1lpfi31{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.pane.svelte-1lpfi31{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);display:grid;grid-template-rows:auto 1fr;min-height:0}.pane-head.svelte-1lpfi31{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);font-size:var(--text-sm);color:var(--text-muted);font-weight:500}.source.svelte-1lpfi31{margin:0;padding:var(--space-3);font-family:var(--font-mono, monospace);font-size:var(--text-xs);color:var(--text);white-space:pre-wrap;overflow:auto;max-height:32rem}.resolutions.svelte-1lpfi31{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);padding:var(--space-3)}.resolutions.svelte-1lpfi31 h3:where(.svelte-1lpfi31){margin:0 0 var(--space-1);font-size:var(--text-sm);font-weight:500}.hint.svelte-1lpfi31{margin:0 0 var(--space-3);color:var(--text-muted);font-size:var(--text-sm)}.orphans.svelte-1lpfi31{list-style:none;margin:0;padding:0;display:grid;gap:var(--space-3)}.orphan.svelte-1lpfi31{border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);display:grid;gap:var(--space-2)}.orphan-head.svelte-1lpfi31{display:flex;align-items:baseline;gap:var(--space-3)}.orphan-name.svelte-1lpfi31{background:var(--warning-surface, rgb(217 119 6 / .1));color:var(--warning, #c2780e);padding:0 var(--space-1);border-radius:var(--radius-sm);font-size:var(--text-sm)}.orphan-value.svelte-1lpfi31{color:var(--text-muted);font-size:var(--text-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.orphan-actions.svelte-1lpfi31{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-3);align-items:center;font-size:var(--text-sm)}.orphan-actions.svelte-1lpfi31 label:where(.svelte-1lpfi31){display:inline-flex;align-items:center;gap:var(--space-1)}.orphan-actions.svelte-1lpfi31 select:where(.svelte-1lpfi31){border:1px solid var(--border);background:var(--surface);color:var(--text);padding:0 var(--space-2);border-radius:var(--radius-sm);font:inherit;font-size:var(--text-sm)}.commit-bar.svelte-1lpfi31{display:flex;justify-content:flex-end}button.svelte-1lpfi31{border:1px solid var(--border);background:var(--surface);color:var(--text);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font:inherit;font-size:var(--text-sm);cursor:pointer}button.svelte-1lpfi31:hover:not(:disabled){background:var(--surface-raised)}button.svelte-1lpfi31:disabled{opacity:.5;cursor:not-allowed}button.primary.svelte-1lpfi31{border-color:transparent;background:var(--accent);color:var(--accent-contrast);font-weight:500}.placeholder.svelte-1lpfi31{color:var(--text-subtle);font-size:var(--text-sm)}.error.svelte-1lpfi31{margin:0;color:var(--danger);font-size:var(--text-sm)}
@@ -0,0 +1,4 @@
1
+ import{a3 as Ie,ao as F,a1 as Te,V as g,J as k,G as e,f as n,W as Ye,l as a,B as Q,ap as h,t as j,ak as o,E as _,ad as v,m as ze,y as U,s as He,g as Qe,au as Ue,ai as c,aq as W,ae as X,af as _e,K as Xe,ac as Ze,Y as ea}from"./index-Do1drqEQ.js";var aa=_('<p class="placeholder svelte-1lpfi31">Loading preview…</p>'),ta=_('<p class="error svelte-1lpfi31" role="alert"> </p>'),la=_("<option> </option>"),sa=_('<select class="svelte-1lpfi31"></select>'),ra=_('<li class="orphan svelte-1lpfi31"><div class="orphan-head svelte-1lpfi31"><code class="orphan-name svelte-1lpfi31"> </code> <span class="orphan-value svelte-1lpfi31"> </span></div> <div class="orphan-actions svelte-1lpfi31" role="radiogroup"><label class="svelte-1lpfi31"><input type="radio" value="drop"/> Drop</label> <label class="svelte-1lpfi31"><input type="radio" value="keep"/> Keep (unrendered)</label> <label class="svelte-1lpfi31"><input type="radio" value="rename"/> Rename to</label> <!></div></li>'),ia=_(`<section class="resolutions svelte-1lpfi31" aria-label="Orphan field resolutions"><h3 class="svelte-1lpfi31">Orphan fields</h3> <p class="hint svelte-1lpfi31">These fields exist in this item's JSON but the current template doesn't render them.
2
+ Pick what to do with each.</p> <ul class="orphans svelte-1lpfi31"></ul></section>`),na=_('<p class="error svelte-1lpfi31" role="alert"> </p>'),oa=_('<div class="diff svelte-1lpfi31"><section class="pane svelte-1lpfi31" aria-label="Previous version (left)"><header class="pane-head svelte-1lpfi31"><!></header> <pre class="source svelte-1lpfi31"> </pre></section> <section class="pane svelte-1lpfi31" aria-label="Current template (right)"><header class="pane-head svelte-1lpfi31"> </header> <pre class="source svelte-1lpfi31"> </pre></section></div> <!> <!> <div class="commit-bar svelte-1lpfi31"><button type="button" class="primary svelte-1lpfi31"> </button></div>',1),va=_('<header class="detail-head svelte-1lpfi31"><button type="button" class="back svelte-1lpfi31">← Back</button> <h2 class="svelte-1lpfi31"> </h2></header> <!>',1),pa=_('<p class="error svelte-1lpfi31" role="alert"> </p>'),ca=_('<p class="placeholder svelte-1lpfi31">Loading…</p>'),fa=_(`<div class="empty svelte-1lpfi31"><h3 class="svelte-1lpfi31">All caught up</h3> <p>Every content item's fields match its bound template. Migrations show up here when a
3
+ destructive template edit (or a manual hand-edit) leaves an item with orphan fields.</p></div>`),da=_('<li class="item"><button class="item-row svelte-1lpfi31" type="button"><span class="item-path svelte-1lpfi31"><code> </code></span> <span class="item-summary svelte-1lpfi31"><!> <!> <!></span> <span class="open-icon svelte-1lpfi31">→</span></button></li>'),ua=_('<section class="group svelte-1lpfi31"><h3 class="group-title svelte-1lpfi31"><code class="svelte-1lpfi31"> </code> <span class="count svelte-1lpfi31"> </span></h3> <ul class="items svelte-1lpfi31"></ul></section>'),ma=_('<header class="list-head svelte-1lpfi31"><h2>Migrations</h2> <button type="button" class="svelte-1lpfi31"> </button></header> <!>',1),_a=_('<div class="migrations svelte-1lpfi31"><!> <!></div>');function ga(Ee,Le){Ie(Le,!0);let M=F(null),d=F(null),Z=F(!1),R=F(null),r=F(Te({})),he=F(Te({})),A=F(!1),K=F(null);g.ensureLoaded();async function Re(s){v(M,s,!0),v(r,{},!0),v(he,{},!0),v(d,null),v(R,null),v(Z,!0);try{v(d,await ea(s),!0);const f={};for(const l of e(d).orphans){const u=Se(l.name,e(d).currentTemplateFields);f[l.name]=u?{rename:u}:"keep"}v(r,f,!0)}catch(f){v(R,f instanceof Error?f.message:String(f),!0)}finally{v(Z,!1)}}function ge(){v(M,null),v(d,null),v(R,null)}function Se(s,f){const l=s.toLowerCase();for(const u of f)if(u.toLowerCase().startsWith(l)||u.toLowerCase().endsWith(l))return u;return null}async function Ce(){if(!(e(M)===null||e(d)===null)){v(A,!0),v(K,null);try{const s={drop:Object.entries(e(r)).filter(([,l])=>l==="drop").map(([l])=>l),keep:Object.entries(e(r)).filter(([,l])=>l==="keep").map(([l])=>l),rename:Object.fromEntries(Object.entries(e(r)).filter(([,l])=>typeof l=="object"&&l!==null&&"rename"in l).map(([l,u])=>[l,u.rename])),fill:{...e(he)}},f=await Qe(e(M),s);g.refresh().catch(()=>{}),ge()}catch(s){v(K,s instanceof Error?s.message:String(s),!0)}finally{v(A,!1)}}}function Pe(s){return typeof s=="string"?s:JSON.stringify(s)}const qe=Ue(()=>g.list===null?[]:Object.entries(g.list.byTemplate).map(([s,f])=>({template:s,items:[...f].sort((l,u)=>l.path.localeCompare(u.path))})));var be=_a(),ye=a(be);{var Be=s=>{var f=va(),l=Q(f),u=a(l),ee=o(u,2),ae=a(ee),te=o(l,2);{var le=i=>{var m=aa();n(i,m)},se=i=>{var m=ta(),w=a(m);h(()=>c(w,e(R))),n(i,m)},re=i=>{var m=oa(),w=Q(m),E=a(w),O=a(E),N=a(O);{var V=p=>{var y=W();h(()=>c(y,`Before — ${e(d).left.template??""}`)),n(p,y)},$=p=>{var y=W("Before — no snapshot available");n(p,y)};k(N,p=>{e(d).left?p(V):p($,-1)})}var ie=o(O,2),ne=a(ie),oe=o(E,2),D=a(oe),S=a(D),b=o(D,2),G=a(b),C=o(w,2);{var I=p=>{var y=ia(),P=o(a(y),4);U(P,21,()=>e(d).orphans,q=>q.name,(q,t)=>{var x=ra(),z=a(x),xe=a(z),Ke=a(xe),Ne=o(xe,2),Ve=a(Ne),ke=o(z,2),we=a(ke),fe=a(we),Fe=o(we,2),de=a(Fe),je=o(Fe,2),ue=a(je),$e=o(je,2);{var De=B=>{var T=sa();U(T,20,()=>e(d).currentTemplateFields,J=>J,(J,me)=>{var H=la(),Ge=a(H),Oe={};h(()=>{c(Ge,me),Oe!==(Oe=me)&&(H.value=(H.__value=me)??"")}),n(J,H)});var Me;Xe(T),h(()=>{Me!==(Me=e(r)[e(t).name].rename)&&(T.value=(T.__value=e(r)[e(t).name].rename)??"",Ze(T,e(r)[e(t).name].rename))}),j("change",T,J=>v(r,{...e(r),[e(t).name]:{rename:J.currentTarget.value}},!0)),n(B,T)};k($e,B=>{typeof e(r)[e(t).name]=="object"&&e(r)[e(t).name]!==null&&"rename"in e(r)[e(t).name]&&B(De)})}h(B=>{c(Ke,e(t).name),c(Ve,B),X(ke,"aria-label",`Resolution for ${e(t).name}`),X(fe,"name",`d-${e(t).name}`),_e(fe,e(r)[e(t).name]==="drop"),X(de,"name",`d-${e(t).name}`),_e(de,e(r)[e(t).name]==="keep"),X(ue,"name",`d-${e(t).name}`),_e(ue,typeof e(r)[e(t).name]=="object"&&e(r)[e(t).name]!==null&&"rename"in e(r)[e(t).name])},[()=>Pe(e(t).value)]),j("change",fe,()=>v(r,{...e(r),[e(t).name]:"drop"},!0)),j("change",de,()=>v(r,{...e(r),[e(t).name]:"keep"},!0)),j("change",ue,()=>v(r,{...e(r),[e(t).name]:{rename:e(d).currentTemplateFields[0]??""}},!0)),n(q,x)}),n(p,y)};k(C,p=>{e(d).orphans.length>0&&p(I)})}var Y=o(C,2);{var ve=p=>{var y=na(),P=a(y);h(()=>c(P,e(K))),n(p,y)};k(Y,p=>{e(K)&&p(ve)})}var pe=o(Y,2),L=a(pe),ce=a(L);h(()=>{var p;c(ne,((p=e(d).left)==null?void 0:p.html)??"(no snapshot covers this item)"),c(S,`After — ${e(d).right.template??""}`),c(G,e(d).right.html),L.disabled=e(A)||e(d).orphans.length===0,c(ce,e(A)?"Migrating…":"Migrate item")}),j("click",L,Ce),n(i,m)};k(te,i=>{e(Z)?i(le):e(R)?i(se,1):e(d)&&i(re,2)})}h(()=>c(ae,e(M))),j("click",u,ge),n(s,f)},Je=s=>{var f=ma(),l=Q(f),u=o(a(l),2),ee=a(u),ae=o(l,2);{var te=i=>{var m=pa(),w=a(m);h(()=>c(w,g.error)),n(i,m)},le=i=>{var m=ca();n(i,m)},se=i=>{var m=fa();n(i,m)},re=i=>{var m=ze(),w=Q(m);U(w,17,()=>e(qe),E=>E.template,(E,O)=>{var N=ua(),V=a(N),$=a(V),ie=a($),ne=o($,2),oe=a(ne),D=o(V,2);U(D,21,()=>e(O).items,S=>S.path,(S,b)=>{var G=da(),C=a(G),I=a(C),Y=a(I),ve=a(Y),pe=o(I,2),L=a(pe);{var ce=t=>{var x=W();h(z=>c(x,`${e(b).orphanFields.length??""} orphan field${e(b).orphanFields.length===1?"":"s"}:
4
+ ${z??""}`),[()=>e(b).orphanFields.join(", ")]),n(t,x)};k(L,t=>{e(b).orphanFields.length>0&&t(ce)})}var p=o(L,2);{var y=t=>{var x=W();h(()=>c(x,`· ${e(b).missingRequiredFields.length??""} missing required`)),n(t,x)};k(p,t=>{e(b).missingRequiredFields.length>0&&t(y)})}var P=o(p,2);{var q=t=>{var x=W();h(()=>c(x,`· best-fit: ${e(b).bestFitSnapshot??""}`)),n(t,x)};k(P,t=>{e(b).bestFitSnapshot&&t(q)})}h(()=>c(ve,e(b).path)),j("click",C,()=>Re(e(b).path)),n(S,G)}),h(()=>{c(ie,e(O).template),c(oe,`${e(O).items.length??""} item${e(O).items.length===1?"":"s"}`)}),n(E,N)}),n(i,m)};k(ae,i=>{g.error?i(te):g.loading&&g.list===null?i(le,1):g.count===0?i(se,2):i(re,-1)})}h(()=>{u.disabled=g.loading,c(ee,g.loading?"Refreshing…":"Refresh")}),j("click",u,()=>g.refresh()),n(s,f)};k(ye,s=>{e(M)!==null?s(Be):s(Je,-1)})}var We=o(ye,2);{var Ae=s=>{};k(We,s=>{!e(M)&&g.list===null&&s(Ae)})}n(Ee,be),Ye()}He(["click","change"]);export{ga as default};