@heyo-sh/heyo-cms 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/astro.d.ts +12 -5
- package/dist/adapters/astro.d.ts.map +1 -1
- package/dist/adapters/astro.js +1 -1
- package/dist/adapters/deliver.d.ts +26 -0
- package/dist/adapters/deliver.d.ts.map +1 -0
- package/dist/adapters/next.d.ts +26 -12
- package/dist/adapters/next.d.ts.map +1 -1
- package/dist/adapters/next.js +1 -1
- package/dist/adapters/nuxt.d.ts +10 -6
- package/dist/adapters/nuxt.d.ts.map +1 -1
- package/dist/adapters/nuxt.js +1 -1
- package/dist/adapters/react-router.d.ts +12 -5
- package/dist/adapters/react-router.d.ts.map +1 -1
- package/dist/adapters/react-router.js +1 -1
- package/dist/adapters/sveltekit.d.ts +9 -5
- package/dist/adapters/sveltekit.d.ts.map +1 -1
- package/dist/adapters/sveltekit.js +1 -1
- package/dist/ai/assistant/schema.d.ts +10 -0
- package/dist/ai/assistant/schema.d.ts.map +1 -1
- package/dist/ai/service.d.ts.map +1 -1
- package/dist/ai.js +1 -1
- package/dist/auth.js +1 -1
- package/dist/cli.js +2 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/types.d.ts +24 -1
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/content/import.d.ts.map +1 -1
- package/dist/content.js +1 -1
- package/dist/db/d1.js +1 -1
- package/dist/db/mongodb.js +2 -2
- package/dist/db/postgres.js +1 -1
- package/dist/db/sql/dialect.d.ts +2 -0
- package/dist/db/sql/dialect.d.ts.map +1 -1
- package/dist/db/sqlite.d.ts +13 -2
- package/dist/db/sqlite.d.ts.map +1 -1
- package/dist/db/sqlite.js +1 -1
- package/dist/editor/builtin.d.ts.map +1 -1
- package/dist/editor/serialize.d.ts.map +1 -1
- package/dist/editor.d.ts +1 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +1 -1
- package/dist/engine/documents.d.ts.map +1 -1
- package/dist/engine/engine.d.ts +19 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/slugs.d.ts +124 -0
- package/dist/engine/slugs.d.ts.map +1 -0
- package/dist/fields/builtin.d.ts +86 -16
- package/dist/fields/builtin.d.ts.map +1 -1
- package/dist/fields/registry.d.ts.map +1 -1
- package/dist/fields.d.ts +1 -0
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/rich-text.d.ts +12 -1
- package/dist/http/rich-text.d.ts.map +1 -1
- package/dist/http/routes/ai.d.ts +1 -1
- package/dist/http/routes/documents.d.ts.map +1 -1
- package/dist/http/routes/media.d.ts +30 -0
- package/dist/http/routes/media.d.ts.map +1 -1
- package/dist/http.js +1 -1
- package/dist/index-1xz3pmtk.js +3 -0
- package/dist/index-2ddk43me.js +2 -0
- package/dist/index-385ggnge.js +2 -0
- package/dist/{index-7k091gpe.js → index-466cwb0b.js} +2 -2
- package/dist/{index-b2ecggck.js → index-4qrep5f0.js} +6 -6
- package/dist/{index-vq2978e7.js → index-63x90ejh.js} +8 -8
- package/dist/index-6m1kjq9g.js +2 -0
- package/dist/index-761dec5z.js +2 -0
- package/dist/{index-2kb5nbxx.js → index-8nzmqy0f.js} +2 -2
- package/dist/index-91fa1gzf.js +2 -0
- package/dist/index-a1jv6396.js +18 -0
- package/dist/index-a8jcwqsf.js +2 -0
- package/dist/index-abfzb1ve.js +2 -0
- package/dist/index-axpzy2hj.js +2 -0
- package/dist/index-b79c3k6g.js +2 -0
- package/dist/index-dtwe2z69.js +5 -0
- package/dist/index-eqfcxn71.js +2 -0
- package/dist/{index-9x1z3b85.js → index-mpkhjgvk.js} +4 -4
- package/dist/index-p2cqsmvw.js +2 -0
- package/dist/index-ptttzgtp.js +7 -0
- package/dist/{index-cbwwtcm4.js → index-rw0hze6x.js} +2 -2
- package/dist/index-s9x07zb3.js +2 -0
- package/dist/{index-34s342fz.js → index-szaq03qq.js} +2 -2
- package/dist/index-vf163r10.js +2 -0
- package/dist/{index-gpwcmmvr.js → index-vzhxn50e.js} +2 -2
- package/dist/index-wbc2xh4h.js +40 -0
- package/dist/index-y8kzzn94.js +2 -0
- package/dist/{index-7a231xfp.js → index-ypcmns0v.js} +2 -2
- package/dist/index-zyg6bfdq.js +2 -0
- package/dist/index.js +1 -1
- package/dist/jobs.js +1 -1
- package/dist/media/cloudflare.d.ts +58 -0
- package/dist/media/cloudflare.d.ts.map +1 -0
- package/dist/media/document.d.ts +7 -6
- package/dist/media/document.d.ts.map +1 -1
- package/dist/media/gc.d.ts.map +1 -1
- package/dist/media/pipeline.d.ts +19 -0
- package/dist/media/pipeline.d.ts.map +1 -1
- package/dist/media/service.d.ts.map +1 -1
- package/dist/media/urls.d.ts +77 -0
- package/dist/media/urls.d.ts.map +1 -0
- package/dist/media/usages.d.ts +9 -1
- package/dist/media/usages.d.ts.map +1 -1
- package/dist/media/variants.d.ts +11 -0
- package/dist/media/variants.d.ts.map +1 -1
- package/dist/migrations.js +1 -1
- package/dist/plugins/indexnow.d.ts +82 -0
- package/dist/plugins/indexnow.d.ts.map +1 -0
- package/dist/plugins.d.ts +9 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +1 -0
- package/dist/query.js +1 -1
- package/dist/{run-3r72dwhs.js → run-rqmtv3cn.js} +4 -4
- package/dist/schema/snapshot.d.ts +2 -0
- package/dist/schema/snapshot.d.ts.map +1 -1
- package/dist/schema/system.d.ts +9 -0
- package/dist/schema/system.d.ts.map +1 -1
- package/dist/schema.js +1 -1
- package/dist/slugify.d.ts +31 -0
- package/dist/slugify.d.ts.map +1 -0
- package/dist/telemetry.js +1 -1
- package/dist/types/api.d.ts +56 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/config.d.ts +15 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/editor.d.ts +26 -0
- package/dist/types/editor.d.ts.map +1 -1
- package/dist/types/fields.d.ts +2 -2
- package/dist/types/fields.d.ts.map +1 -1
- package/dist/types/media.d.ts +97 -0
- package/dist/types/media.d.ts.map +1 -1
- package/dist/types/panel.d.ts +2 -0
- package/dist/types/panel.d.ts.map +1 -1
- package/dist/types/plugin.d.ts +23 -1
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/uploads.d.ts +1 -0
- package/dist/uploads.d.ts.map +1 -1
- package/dist/uploads.js +4 -4
- package/dist/webhooks.js +1 -1
- package/package.json +9 -5
- package/dist/index-2757kej5.js +0 -2
- package/dist/index-2z1qe5mw.js +0 -2
- package/dist/index-5ngtc7gy.js +0 -2
- package/dist/index-9zqnf6gx.js +0 -23
- package/dist/index-hq05mc1n.js +0 -3
- package/dist/index-hy1x46nf.js +0 -2
- package/dist/index-k8wbg1dw.js +0 -2
- package/dist/index-kbsgt44t.js +0 -2
- package/dist/index-m82a0shw.js +0 -2
- package/dist/index-md79xr6h.js +0 -5
- package/dist/index-nvgwyykk.js +0 -40
- package/dist/index-ty698y02.js +0 -2
- package/dist/index-vxw0a03g.js +0 -2
- package/dist/index-wj8y1xcj.js +0 -2
- package/dist/index-y5mwknr9.js +0 -2
- package/dist/index-ymq6jsar.js +0 -2
package/dist/http/routes/ai.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ import type { RouteRecord } from "../router";
|
|
|
18
18
|
* POST /ai/assistant (SSE)
|
|
19
19
|
* POST /ai/assistant/plans/:id/approve
|
|
20
20
|
*
|
|
21
|
-
* The per-field routes exist only when a field declares `aiGenerate` or
|
|
21
|
+
* The per-field routes exist only when a field declares `aiGenerate` or an `ai` action.
|
|
22
22
|
* A deployment with no AI has no AI endpoints, which is what
|
|
23
23
|
* `cms.inspect().routes` should say (section 8).
|
|
24
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/http/routes/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../../src/http/routes/documents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAkBxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAkE7C;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CA0T9D;AA6KD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CA8I5D;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAEjE;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAEhE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CmsInstance } from "../../types/instance";
|
|
2
|
+
import type { MediaVariantResult } from "../../types/media";
|
|
2
3
|
import type { RouteRecord } from "../router";
|
|
3
4
|
/**
|
|
4
5
|
* The media library over HTTP.
|
|
@@ -14,6 +15,35 @@ import type { RouteRecord } from "../router";
|
|
|
14
15
|
* protect (stage 6).
|
|
15
16
|
*/
|
|
16
17
|
export declare function mediaRoutes(cms: CmsInstance): RouteRecord[];
|
|
18
|
+
/**
|
|
19
|
+
* One file, as an HTTP response: the API route and the public route share it.
|
|
20
|
+
*
|
|
21
|
+
* The tag is the checksum of the original plus the variant name: two
|
|
22
|
+
* deployments of the same bytes produce the same tag, and a re-render of the
|
|
23
|
+
* same size does not invalidate a cache that is already correct. A variant is
|
|
24
|
+
* addressed by a name whose meaning is fixed by the configuration, so the
|
|
25
|
+
* bytes behind one URL only change when an editor re-crops — which changes
|
|
26
|
+
* the checksum and the tag — and the answer may be kept for a year.
|
|
27
|
+
*
|
|
28
|
+
* Except when the size could not be rendered and the original stands in for
|
|
29
|
+
* it: that answer is right for now and wrong once the processor recovers, so
|
|
30
|
+
* it carries its own tag and is cached for minutes, not for a year.
|
|
31
|
+
*/
|
|
32
|
+
export declare function mediaResponse(request: Request, result: MediaVariantResult, extraHeaders?: Record<string, string>): Promise<Response>;
|
|
33
|
+
/**
|
|
34
|
+
* The files themselves, at addresses made for the web:
|
|
35
|
+
*
|
|
36
|
+
* /media/med_0mv…/condition-report.png
|
|
37
|
+
* /media/med_0mv…/card/condition-report.webp
|
|
38
|
+
*
|
|
39
|
+
* Registered only with `uploads.publicPath`, outside `basePath`, on the root
|
|
40
|
+
* router: the application mounts the CMS handler on this path as well. The
|
|
41
|
+
* id says which file and the optional middle segment which size; the name is
|
|
42
|
+
* for people and image search, and is otherwise ignored, so a renamed file
|
|
43
|
+
* keeps every link it ever had. No actor, no hooks, no RBAC — a file on a
|
|
44
|
+
* page is public, which is what this route exists to say.
|
|
45
|
+
*/
|
|
46
|
+
export declare function publicMediaRoutes(cms: CmsInstance): RouteRecord[];
|
|
17
47
|
/**
|
|
18
48
|
* The orphan sweep, as an endpoint.
|
|
19
49
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/http/routes/media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/http/routes/media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAW7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CA6R3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACxC,OAAO,CAAC,QAAQ,CAAC,CAwBnB;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CA2CjE;AAcD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,EAAE,CAsCjE;AAED,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,UAA0C,CAAC"}
|
package/dist/http.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./index-
|
|
1
|
+
import"./index-6m1kjq9g.js";import"./index-axpzy2hj.js";import"./index-a1jv6396.js";import{Ze,g,Ye,y,I,On,Xn,eo,P,G,i,Pn,oe,K,St,Xt,f,De,v,W,Re,o,c,a,q,_n,h,r,N,Tt,$n,jn,Se,qe}from"./index-wbc2xh4h.js";import"./index-63x90ejh.js";import"./index-91fa1gzf.js";import"./index-eqfcxn71.js";export{Se as Router,G as booleanParam,$n as buildOpenApi,qe as createCmsHttp,St as errorResponse,On as findArgs,P as integerParam,i as json,h as jsonBody,_n as listParams,q as localeParams,oe as noContent,r as okJson,W as optionalString,Re as optionalStringArray,eo as parseSort,Xn as parseWhere,c as pathParam,a as queryParam,I as readArgs,Xt as readJson,f as readJsonObject,Tt as readResponses,o as ref,jn as requestDb,y as requestSource,Ze as requireActor,De as requireData,g as requirePermission,Ye as requireSession,v as requireString,K as stopped,Pn as text,N as writeResponses};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{Z,Le,Ct,_,j}from"./index-63x90ejh.js";import{l}from"./index-axpzy2hj.js";import{t}from"./index-6m1kjq9g.js";import{d}from"./index-9g2n7xa6.js";import{X}from"./index-ptttzgtp.js";import{ie,mn}from"./index-p2cqsmvw.js";import{b}from"./index-8nzmqy0f.js";import{e}from"./index-x72d1hzh.js";var K="v1",ee=12;async function L(n){if(n.length<16)throw new e("ai.storage.secret must be at least 16 characters; it encrypts provider keys.",{status:500,code:"ai_secret_too_short"});let i=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return crypto.subtle.importKey("raw",i,{name:"AES-GCM"},!1,["encrypt","decrypt"])}async function M(n,i){let r=await L(i),a=crypto.getRandomValues(new Uint8Array(ee)),c=await crypto.subtle.encrypt({name:"AES-GCM",iv:a},r,new TextEncoder().encode(n));return[K,ie(a),ie(new Uint8Array(c))].join(".")}async function I(n,i){let[r,a,c]=n.split(".");if(r!==K||!a||!c)throw new e("A stored provider key is not in a format this version can read.",{status:500,code:"ai_credential_unreadable"});let s=await L(i);try{let m=await crypto.subtle.decrypt({name:"AES-GCM",iv:mn(a)},s,mn(c));return new TextDecoder().decode(m)}catch{throw new e("A stored provider key could not be decrypted; ai.storage.secret has probably changed. Re-enter the key in the panel.",{status:500,code:"ai_credential_unreadable"})}}function E(n){return n.length<=4?"****":`…${n.slice(-4)}`}var z;async function F(){return z??=import("@mariozechner/pi-ai").catch(()=>{throw new e('AI needs "@mariozechner/pi-ai". Install it, or set ai.complete to your own implementation.',{status:500,code:"ai_runtime_missing"})}),z}async function kn(n){let{getModel:i}=await F(),r;try{r=i(n.provider,n.model)}catch{r=void 0}if(r)return r;throw await Sn(n.provider,n.model),new e(`pi could not resolve ${n.provider}/${n.model}.`,{status:500,code:"ai_unknown_model"})}function V(n,i){let r=Rn(n);if(r.includes(i.type))return;throw new e(`The provider "${n}" needs ${r.map((a)=>`"${a}"`).join(" or ")} credentials.`,{status:500,code:"ai_auth_mismatch"})}async function Yn(n,i){switch(V(n,i),i.type){case"api-key":return{getApiKey:()=>i.token};case"oauth":return{getApiKey:()=>i.getAccessToken()};case"aws":{let{streamSimple:r}=await F();return{streamFn:(a,c,s)=>r(a,c,{...s,region:i.region,...i.accessKeyId===void 0?{}:{accessKeyId:i.accessKeyId},...i.secretAccessKey===void 0?{}:{secretAccessKey:i.secretAccessKey}})}}}}var te=new Set(["github-copilot","openai-codex"]);function Rn(n){if(n==="amazon-bedrock")return["aws"];if(te.has(n))return["oauth"];return["api-key"]}async function Sn(n,i){let{getModel:r,getProviders:a}=await F();try{if(r(n,i))return}catch{}if(!a().includes(n))throw new e(`The AI provider "${n}" is not in pi's catalogue.`,{status:400,code:"ai_unknown_provider"});throw new e(`The provider "${n}" has no model called "${i}".`,{status:400,code:"ai_unknown_model"})}async function Qn(n){try{let{getModels:i}=await F();return i(n).map((r)=>r.id)}catch{return[]}}var Ke=async(n)=>{let{complete:i,stream:r}=await F(),{model:a,auth:c}=n;V(a.provider,c);let s=await kn(a),m={systemPrompt:n.system,messages:[{role:"user",content:[{type:"text",text:n.prompt},...(n.images??[]).map((u)=>({type:"image",data:ne(u.data),mimeType:u.contentType}))],timestamp:Date.now()}]},f={...n.maxTokens===void 0?{}:{maxTokens:n.maxTokens},...n.signal===void 0?{}:{signal:n.signal},...c.type==="api-key"?{apiKey:c.token}:{},...c.type==="oauth"?{apiKey:await c.getAccessToken()}:{},...c.type==="aws"?{region:c.region,...c.accessKeyId===void 0?{}:{accessKeyId:c.accessKeyId},...c.secretAccessKey===void 0?{}:{secretAccessKey:c.secretAccessKey}}:{}},A=await i(s,m,f);if(A.stopReason==="error"||A.errorMessage)throw new e(A.errorMessage??"The model returned an error.",{status:502,code:"ai_provider_error"});return{text:A.content.filter((u)=>u.type==="text").map((u)=>u.text).join(""),usage:Tn(A.usage)}};function Tn(n){return{input:n.input??0,output:n.output??0,total:n.totalTokens??(n.input??0)+(n.output??0),cost:n.cost?.total??0}}function ne(n){let i="";for(let r of n)i+=String.fromCharCode(r);return btoa(i)}async function q(n){let i={input:0,output:0,total:0,cost:0},r=async(s)=>{if(!s.trim())return s;let m=await n.complete({system:"Translate CMS text. Answer with the translation only, without quotes or a preamble. Keep names, placeholders and URLs intact.",prompt:`Translate from ${n.sourceLocale} to ${n.locale}. This text belongs to the ${n.fieldName} field:
|
|
2
|
+
|
|
3
|
+
${s}`,...n.signal===void 0?{}:{signal:n.signal}});i.input+=m.usage.input,i.output+=m.usage.output,i.total+=m.usage.total,i.cost+=m.usage.cost;let f=m.text.trim();if(!f)throw Error(`AI returned an empty translation for ${n.fieldName}.`);let A=s.slice(0,s.length-s.trimStart().length),o=s.slice(s.trimEnd().length);return`${A}${f}${o}`},a=async(s)=>{if(Array.isArray(s)){let f=[];for(let A of s)f.push(await a(A));return f}if(!s||typeof s!=="object")return s;let m={...s};if(s.type==="text"&&typeof s.text==="string")m.text=await r(s.text);if(s.type==="image"&&s.attrs&&typeof s.attrs==="object"&&!Array.isArray(s.attrs)){let f={...s.attrs};for(let A of["alt","title"])if(typeof f[A]==="string")f[A]=await r(f[A]);m.attrs=f}if(Array.isArray(s.content))m.content=await a(s.content);return m},c=await a(n.value);return{value:c,preview:X(c),usage:i}}var k="cms_ai_credentials";function Rt(n){let{config:i}=n,r=i.ai?.complete??Ke,a=async(o)=>{try{return await r(o)}catch(u){if(u instanceof e)throw u;if(o.signal?.aborted)throw new e("The request was cancelled.",{status:499,code:"ai_aborted",cause:u});let p=u instanceof Error?u.message:"The AI provider could not complete the request.";throw new e(p,{status:502,code:"ai_provider_error",cause:u})}},c=()=>{let o=i.ai;if(!o)throw new e("This deployment has no `ai` section, so AI is switched off.",{status:501,code:"ai_disabled"});return o},s=(o)=>{let u={...i.collections,...i.globals},p=u[o];if(p)return p;let y=Object.values(u).find((h)=>h.slug===o);if(y)return y;throw e.notFound(`No collection called "${o}".`)},m=async(o)=>{let u=c(),p=await oe(n,o);if(p)return{type:"api-key",token:p};let y=u.auth?.[o];if(y)return y;throw new e(`No credentials for the AI provider "${o}". Add them to ai.auth or store them in the panel.`,{status:500,code:"ai_credentials_missing"})},f=async(o)=>{if(!i.uploads)return null;try{let u=await n.cms().media.variant({id:o});if(!u||!u.contentType.startsWith("image/"))return null;let p=new Uint8Array(await new Response(u.body).arrayBuffer());return{contentType:u.contentType,data:p}}catch{return null}},A=async(o,u,p,y)=>{await(await n.database()).transaction((g)=>n.emit(g,[{type:o,data:y===void 0?u:{...u,error:y instanceof Error?y.message:String(y)},previous:null}],{actor:p,...typeof u.collection==="string"?{collection:u.collection}:{},...typeof u.documentId==="string"?{documentId:u.documentId}:{}})),n.deliver()};return{get enabled(){return i.ai!==void 0},get assistantEnabled(){return i.ai!==void 0&&i.ai.assistant?.enabled!==!1},actions(o){return Le(o)},async run(o){let u=c(),p=s(o.collection),y=o.actor??null,h=o.locale??i.i18n.defaultLocale,g=p.fields[o.field];if(!g)throw e.notFound(`"${o.field}" is not a field of ${p.name}.`);let x=o.action==="generate"?g.aiGenerate:g.ai?.[o.action],P=o.variantTranslation===!0&&o.action==="translate"&&g.localized&&["text","textarea","richText","email","url"].includes(g.type);if(x===void 0&&!P)throw e.notFound(`"${o.action}" is not configured on ${p.name}.${o.field}.`);let S=x===void 0||x===!0?{}:x,T=Z(o.action)??Ct(o.action,S.prompt??"");if(T.requiresLocalized&&!g.localized)throw e.validation(`"${o.action}" needs a localized field; ${p.name}.${o.field} stores one value for every language.`);let C=o.sourceLocale??(T.requiresLocalized?i.i18n.defaultLocale:h),{document:R,stored:D}=await U(n,p,o,h),G=T.requiresLocalized&&C!==h?(await U(n,p,o,C,o.variantTranslation===!0)).document:R;await _(p,{actor:y,operation:"update",locale:h,rbac:i.rbac,...D===void 0?{}:{record:D}}),j(p,{[o.field]:null},y,h);let H=re(p,y,h),W=(S.context??[]).filter((w)=>{if(!(w in p.fields))throw e.validation(`ai.context names "${w}", which is not a field of ${p.name}.`);return H.has(w)}),v=S.model??u.defaultModel,Q=await m(v.provider),J={action:o.action,value:G[o.field]??null,field:g,fieldName:o.field,collection:p,context:Object.fromEntries(W.map((w)=>[w,R[w]??null])),document:R,locale:h,sourceLocale:C,options:S,model:v,actor:y,loadImage:f,complete:(w)=>a({...w,model:v,auth:Q}),...o.signal===void 0?{}:{signal:o.signal}},Y=Date.now();try{let w=P&&g.type==="richText"?await q(J):await T.run(J);return await A("ai.task.completed",{collection:p.name,field:o.field,action:o.action,locale:h,provider:v.provider,model:v.model,usage:w.usage,durationMs:Date.now()-Y,...o.id===void 0?{}:{documentId:o.id}},y),{collection:p.name,field:o.field,action:o.action,value:w.value,preview:w.preview,model:v,usage:w.usage}}catch(w){throw await A("ai.task.failed",{collection:p.name,field:o.field,action:o.action,locale:h,provider:v.provider,model:v.model,...o.id===void 0?{}:{documentId:o.id}},y,w),w}},runAssistant(o){return async function*(){let{runAssistant:u}=await import("./run-rqmtv3cn.js");yield*u({args:o,config:i,cms:n.cms(),database:()=>n.database(),authFor:m,record:A})}()},approveAssistantPlan(o){return import("./run-rqmtv3cn.js").then(({approvePlan:u})=>u({args:o,config:i,cms:n.cms(),database:()=>n.database(),record:A}))},async providers(){let o=i.ai,u=new Map;for(let[y,h]of Object.entries(o?.auth??{}))u.set(y,{provider:y,configured:!0,source:"config",type:h.type,hint:null,updatedAt:null});if(o?.storage?.secret){let y=await n.database(),h=await y.transaction((g)=>y.query(g,{table:k}));for(let g of h)u.set(String(g.provider),{provider:String(g.provider),configured:!0,source:"database",type:"api-key",hint:g.hint===null||g.hint===void 0?null:String(g.hint),updatedAt:l(g.updated_at)})}let p=o?.defaultModel.provider;if(p&&!u.has(p))u.set(p,{provider:p,configured:!1,source:null,type:null,hint:null,updatedAt:null});return[...u.values()].sort((y,h)=>y.provider.localeCompare(h.provider))},async setCredential(o){let p=c().storage?.secret;if(!p)throw new e("Set ai.storage.secret to store provider keys in the database; without it keys can only come from ai.auth.",{status:501,code:"ai_storage_disabled"});let y=o.token.trim();if(y.length===0)throw e.validation("A provider key cannot be empty.");let h=await n.database(),g=new Date,x=await M(y,p),P=E(y);return await h.transaction(async(T)=>{let C=d(h,T);if(await C.findOne(k,t("provider",o.provider)))await C.update(k,t("provider",o.provider),{secret:x,hint:P,updated_at:g});else await C.insert(k,{id:b("aic"),provider:o.provider,auth_type:"api-key",secret:x,hint:P,created_at:g,updated_at:g});return{provider:o.provider,configured:!0,source:"database",type:"api-key",hint:P,updatedAt:g.toISOString()}})},async removeCredential(o){c();let u=await n.database();return u.transaction(async(p)=>await d(u,p).delete(k,t("provider",o.provider))>0)}}}async function oe(n,i){let r=n.config.ai?.storage?.secret;if(!r)return null;let a=await n.database(),c=await a.transaction(async(s)=>d(a,s).findOne(k,t("provider",i)));if(!c||typeof c.secret!=="string")return null;return I(c.secret,r)}async function U(n,i,r,a,c=!1){let s=n.cms(),m=r.actor??null,f;if(i.kind==="global"){let o=s.globals[i.name];if(o)f=await o.get({actor:m,locale:a,...c?{fallbackLocale:!1}:{}})}else if(r.id){let A=s.api[i.name],o=A?await A.findById(r.id,{actor:m,locale:a,...c?{fallbackLocale:!1}:{}}):null;if(!o)throw e.notFound(`No ${i.name} with id "${r.id}", or it is not readable.`);f=o}return{document:{...f??{},...r.document??{}},stored:f}}function re(n,i,r){let a=new Set;for(let[c,s]of Object.entries(n.fields)){let m=s.access?.read;if(m&&!m({actor:i,locale:r}))continue;a.add(c)}return a}function xt(n,i,r){let a=n.i18n.defaultLocale,c=Object.values(n.collections).map((f)=>B(f,i,a)).filter((f)=>f!==null),s=Object.values(n.globals).map((f)=>B(f,i,a)).filter((f)=>f!==null),m={collections:c,globals:s,defaultLocale:a,locales:r,media:n.uploads!==void 0,trash:n.trash.enabled};return{...m,fingerprint:ae(m)}}function B(n,i,r){if(!O(n,"read",i,r))return null;let a=[];for(let[c,s]of Object.entries(n.fields)){let m=s.access?.read;if(m&&!m({actor:i,locale:r}))continue;a.push(se(c,s,n,i,r))}return{name:n.name,slug:n.slug,label:n.label,kind:n.kind,titleField:kt(n),fields:a,can:{read:!0,create:n.kind==="collection"&&O(n,"create",i,r),update:O(n,"update",i,r),delete:n.kind==="collection"&&O(n,"delete",i,r)}}}function se(n,i,r,a,c){let s=i.options,m=N(s.options),f=i.type==="list"&&typeof s.fields==="object"&&s.fields!==null?Object.entries(s.fields).map(([A,o])=>{let u=N(o.options.options);return{name:A,type:o.type,required:o.required,...u&&u.length>0?{options:u}:{}}}):void 0;return{name:n,type:i.type,label:typeof s.label==="string"?s.label:n,required:i.required,localized:i.localized===!0,...m&&m.length>0?{options:m}:{},...i.relationTo===void 0?{}:{relationTo:i.relationTo},...f?{rowFields:f}:{},writable:At(r,n,a,c)}}function N(n){if(!Array.isArray(n))return;return n.map((i)=>typeof i==="string"?i:typeof i==="object"&&i!==null?String(i.value??""):"").filter((i)=>i.length>0)}function At(n,i,r,a){let c=n.fields[i];if(!c)return!1;if(c.options.readOnly===!0)return!1;try{return j(n,{[i]:null},r,a),!0}catch{return!1}}function Qt(n,i,r,a){let c=n.fields[i]?.access?.read;return c?c({actor:r,locale:a})===!0:!0}function O(n,i,r,a){let c=n.access[i];if(!c)return!0;try{let s=c({actor:r,operation:i,locale:a});if(s instanceof Promise)return!0;return s!==!1}catch{return!0}}function kt(n){let i=n.admin?.useAsTitle;if(i!==void 0&&n.fields[i])return i;for(let a of["title","name","label"])if(n.fields[a])return a;return Object.entries(n.fields).find(([,a])=>a.type==="text")?.[0]??null}function ae(n){let i=JSON.stringify(n),r=2166136261;for(let a=0;a<i.length;a+=1)r^=i.charCodeAt(a),r=Math.imul(r,16777619)>>>0;return r.toString(16).padStart(8,"0")}export{kn,Yn,Rn,Sn,Qn,Ke,Tn,xt,At,Qt,kt,Rt};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
export{
|
|
1
|
+
var Ae="x-heyo-signature";async function ke(e,n,t=Math.floor(Date.now()/1000)){let o=await crypto.subtle.importKey("raw",new TextEncoder().encode(n),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),a=await crypto.subtle.sign("HMAC",o,new TextEncoder().encode(`${t}.${e}`));return`t=${t},v1=${u(new Uint8Array(a))}`}async function Cn(e){let n=new Map(e.header.split(",").map((r)=>{let[l,d]=r.split("=");return[l?.trim()??"",d?.trim()??""]})),t=Number(n.get("t")),o=n.get("v1");if(!Number.isFinite(t)||!o)return!1;let a=e.now??Math.floor(Date.now()/1000),c=e.toleranceSeconds??300;if(Math.abs(a-t)>c)return!1;let s=(await ke(e.body,e.secret,t)).split("v1=")[1]??"";if(s.length!==o.length)return!1;let i=0;for(let r=0;r<s.length;r+=1)i|=s.charCodeAt(r)^o.charCodeAt(r);return i===0}function u(e){let n="";for(let t of e)n+=t.toString(16).padStart(2,"0");return n}
|
|
2
|
+
export{Ae,ke,Cn};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ce,Oe}from"./index-vzhxn50e.js";import{z}from"./index-761dec5z.js";import{e,n}from"./index-x72d1hzh.js";class S{columns=new Map;documentColumns=new Map;constructor(t){if(t)this.use(t)}use(t){this.columns.clear(),this.documentColumns.clear();for(let r of t.tables)if(this.columns.set(r.name,new Map(r.columns.map((i)=>[i.name,i.type]))),r.documentColumn)this.documentColumns.set(r.name,r.documentColumn)}columnType(t,r){return this.columns.get(t)?.get(r)}documentColumn(t){return this.documentColumns.get(t)}tableColumns(t){return[...this.columns.get(t)?.keys()??[]]}knows(t){return this.columns.has(t)}}class E{dialect;catalog;constructor(t,r){this.dialect=t;this.catalog=r}compileQuery(t){let r=[],i=this.dialect.quote(t.table),a=`SELECT ${t.count?"COUNT(*) AS count":this.compileSelect(t)} FROM ${i}`;if(t.where)a+=` WHERE ${this.compileWhere(t.table,t.where,r)}`;if(!t.count&&t.orderBy&&t.orderBy.length>0){let o=t.orderBy.map((c)=>{let u=this.resolve(t.table,c.path),l=c.direction==="desc"?"DESC":"ASC";return`${this.expression(u)} ${l}`}).join(", ");a+=` ORDER BY ${o}`}if(!t.count&&t.limit!==void 0)a+=` LIMIT ${b(t.limit)}`;if(!t.count&&t.offset!==void 0)a+=` OFFSET ${b(t.offset)}`;return{text:a,values:r}}compileMutation(t){let r=[],i=this.dialect.quote(t.table);if(t.kind==="insert"){let o=Object.entries(t.values);if(o.length===0)throw new e("An insert needs at least one column.",{code:"empty_insert"});let c=o.map(([m])=>this.dialect.quote(m)).join(", "),u=o.map(([m,g])=>(r.push(this.encodeColumn(t.table,m,g)),this.dialect.placeholder(r.length))).join(", "),l=t.returning===!1?"":" RETURNING *";return{text:`INSERT INTO ${i} (${c}) VALUES (${u})${l}`,values:r}}if(t.kind==="update"){let o=Object.entries(t.set);if(o.length===0)throw new e("An update needs at least one column.",{code:"empty_update"});let c=o.map(([m,g])=>(r.push(this.encodeColumn(t.table,m,g)),`${this.dialect.quote(m)} = ${this.dialect.placeholder(r.length)}`)).join(", "),u=this.compileWhere(t.table,t.where,r),l=t.returning===!1?"":" RETURNING *";return{text:`UPDATE ${i} SET ${c} WHERE ${u}${l}`,values:r}}let s=this.compileWhere(t.table,t.where,r),a=t.returning===!0?" RETURNING *":"";return{text:`DELETE FROM ${i} WHERE ${s}${a}`,values:r}}decodeRow(t,r){let i={};for(let[s,a]of Object.entries(r)){let o=this.catalog.columnType(t,s);i[s]=o===void 0?a:this.dialect.decode(a,o)}return i}compileSelect(t){if(!t.select||t.select.length===0)return"*";return t.select.map((r)=>{let i=this.resolve(t.table,r);if(i.path.length===0)return this.dialect.quote(r);return`${this.expression(i)} AS "${r.replaceAll('"',"")}"`}).join(", ")}compileWhere(t,r,i){if(r.kind==="and"||r.kind==="or"){if(r.conditions.length===0)return r.kind==="and"?"1 = 1":"1 = 0";return`(${r.conditions.map((o)=>this.compileWhere(t,o,i)).join(r.kind==="and"?" AND ":" OR ")})`}if(r.kind==="not")return`NOT (${this.compileWhere(t,r.condition,i)})`;let s=this.resolve(t,r.path);return this.compileComparison(s,r.operator,r.value,i)}comparisonExpression(t,r){if(t.path.length===0)return this.dialect.quote(t.column);return this.dialect.jsonExtract(t.column,t.path,r)}compileComparison(t,r,i,s){let a=Array.isArray(i)?i[0]:i,o=O(t,a??null),c=this.comparisonExpression(t,o),u=(l)=>(s.push(this.dialect.encode(l,o)),this.dialect.placeholder(s.length));switch(r){case"eq":case"ne":{if(i===null)return`${c} IS ${r==="eq"?"":"NOT "}NULL`;return`${c} ${r==="eq"?"=":"<>"} ${u(i)}`}case"gt":case"gte":case"lt":case"lte":{let l={gt:">",gte:">=",lt:"<",lte:"<="}[r];return`${c} ${l} ${u(i)}`}case"in":case"nin":{let l=Array.isArray(i)?i:[i];if(l.length===0)return r==="in"?"1 = 0":"1 = 1";let m=l.map((g)=>u(g)).join(", ");return`${c} ${r==="in"?"IN":"NOT IN"} (${m})`}case"like":case"ilike":{let l=this.dialect.likeOperator(r==="ilike");return`${c} ${l} ${u(i)}`}case"contains":{s.push(String(i));let l=this.dialect.placeholder(s.length);return this.dialect.jsonArrayMembership(t.column,t.path,l)}case"exists":return`${c} IS ${i===!1?"":"NOT "}NULL`}}expression(t){if(t.path.length===0)return this.dialect.quote(t.column);return this.dialect.jsonExtract(t.column,t.path,t.type)}resolve(t,r){let i=r.split("."),s=i[0],a=this.catalog.columnType(t,s);if(a!==void 0&&i.length===1)return{column:s,path:[],type:a};if(a!==void 0)return{column:s,path:i.slice(1),type:"text"};let o=this.catalog.documentColumn(t);if(!o)throw new e(`Unknown column ${t}.${r}`,{status:400,code:"unknown_column"});return{column:o,path:i,type:"text"}}encodeColumn(t,r,i){let s=this.catalog.columnType(t,r);if(s===void 0)throw new e(`Unknown column ${t}.${r}`,{status:400,code:"unknown_column"});return this.dialect.encode(i,s)}}function O(t,r){if(t.path.length===0)return t.type;if(r instanceof Date)return"timestamp";if(typeof r==="number")return"real";if(typeof r==="boolean")return"boolean";return"text"}function b(t){if(!Number.isInteger(t)||t<0)throw new e(`Expected a non-negative integer, received ${t}`,{code:"invalid_pagination"});return t}class T{dialect;target;constructor(t,r){this.dialect=t;this.target=r}render(t){return`${t.flatMap((i)=>{let s=this.renderStep(i);return[`-- ${Oe(i)}`,...s]}).join(`
|
|
2
2
|
`)}
|
|
3
3
|
`}renderStep(t){switch(t.kind){case"create_table":return[this.createTable(t.table)];case"drop_table":return[`DROP TABLE IF EXISTS ${this.q(t.table)};`];case"add_column":return this.addColumn(t.table,t.column);case"drop_column":return[`ALTER TABLE ${this.q(t.table)} DROP COLUMN ${this.q(t.column)};`];case"alter_column":return this.alterColumn(t.table,t.column);case"create_index":return[this.createIndex(t.index)];case"drop_index":return[`DROP INDEX IF EXISTS ${this.q(t.index)};`];case"set_document_field":return[this.setDocumentField(t.table,t.collection,t.documentColumn,t.path,t.value)];case"unset_document_field":return[this.unsetDocumentField(t.table,t.collection,t.documentColumn,t.path)]}}createTable(t){let r=t.columns.map((i)=>this.columnClause(i));if(t.primaryKey.length>0)r.push(`PRIMARY KEY (${t.primaryKey.map((i)=>this.q(i)).join(", ")})`);for(let i of t.columns){if(!i.references)continue;r.push(`FOREIGN KEY (${this.q(i.name)}) REFERENCES ${this.q(i.references.table)} (${this.q(i.references.column)})${I(i.references.onDelete)}`)}return`CREATE TABLE IF NOT EXISTS ${this.q(t.name)} (
|
|
4
4
|
${r.join(`,
|
|
5
5
|
`)}
|
|
6
|
-
);`}columnClause(t){let r=[this.q(t.name),this.dialect.columnType(t)];if(!t.nullable)r.push("NOT NULL");if(t.default!==void 0)r.push(`DEFAULT ${this.literal(t)}`);return r.join(" ")}addColumn(t,r){if(!r.nullable&&r.default===void 0)throw new n(`${t}.${r.name}`,"a required column needs a default before it can be added to an existing table");return[`ALTER TABLE ${this.q(t)} ADD COLUMN ${this.columnClause(r)};`]}alterColumn(t,r){if(this.dialect.supportsAlterColumn){let o=this.q(r.name),c=[`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} TYPE ${this.dialect.columnType(r)} USING ${o}::${this.dialect.columnType(r)};`,`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} ${r.nullable?"DROP NOT NULL":"SET NOT NULL"};`];return c.push(r.default===void 0?`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} DROP DEFAULT;`:`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} SET DEFAULT ${this.literal(r)};`),c}let i=this.target().tables.find((o)=>o.name===t);if(!i)throw new n(t,"cannot rebuild a table that is not in the target schema");let s=`${t}__rebuild`,a=i.columns.map((o)=>this.q(o.name)).join(", ");return[this.createTable({...i,name:s}),`INSERT INTO ${this.q(s)} (${a}) SELECT ${a} FROM ${this.q(t)};`,`DROP TABLE ${this.q(t)};`,`ALTER TABLE ${this.q(s)} RENAME TO ${this.q(t)};`,...i.indexes.map((o)=>this.createIndex(o))]}createIndex(t){let r=t.targets.map((a)=>a.kind==="column"?this.q(a.column):`(${this.dialect.jsonExtract(a.column,a.path,a.type)})`).join(", "),i=t.unique?"UNIQUE ":"",s=t.where?` WHERE ${this.q(t.where.column)} = ${d(t.where.equals)}`:"";return`CREATE ${i}INDEX IF NOT EXISTS ${this.q(t.name)} ON ${this.q(t.table)} (${r})${s};`}setDocumentField(t,r,i,s,a){let o=this.q(i),c=d(JSON.stringify(a)),u=`WHERE "collection" = ${d(r)}`;if(this.dialect.id==="postgres"){let m=`'{${s.join(",")}}'`;return`UPDATE ${this.q(t)} SET ${o} = jsonb_set(${o}, ${m}, ${c}::jsonb, true) ${u} AND ${o} #> ${m} IS NULL;`}let l=d(`$.${s.join(".")}`);return`UPDATE ${this.q(t)} SET ${o} = json_set(${o}, ${l}, json(${c})) ${u} AND json_extract(${o}, ${l}) IS NULL;`}unsetDocumentField(t,r,i,s){let a=this.q(i),o=`WHERE "collection" = ${d(r)}`;if(this.dialect.id==="postgres")return`UPDATE ${this.q(t)} SET ${a} = ${a} #- '{${s.join(",")}}' ${o};`;return`UPDATE ${this.q(t)} SET ${a} = json_remove(${a}, ${d(`$.${s.join(".")}`)}) ${o};`}literal(t){let r=t.default;if(r===null||r===void 0)return"NULL";if(typeof r==="number")return String(r);if(typeof r==="boolean")return this.dialect.id==="postgres"?String(r):r?"1":"0";return d(String(r))}q(t){return this.dialect.quote(t)}}function I(t){switch(t){case"cascade":return" ON DELETE CASCADE";case"set-null":return" ON DELETE SET NULL";case"restrict":return" ON DELETE RESTRICT";default:return""}}function d(t){return`'${t.replaceAll("'","''")}'`}function
|
|
6
|
+
);`}columnClause(t){let r=[this.q(t.name),this.dialect.columnType(t)];if(!t.nullable)r.push("NOT NULL");if(t.default!==void 0)r.push(`DEFAULT ${this.literal(t)}`);return r.join(" ")}addColumn(t,r){if(!r.nullable&&r.default===void 0)throw new n(`${t}.${r.name}`,"a required column needs a default before it can be added to an existing table");return[`ALTER TABLE ${this.q(t)} ADD COLUMN ${this.columnClause(r)};`]}alterColumn(t,r){if(this.dialect.supportsAlterColumn){let o=this.q(r.name),c=[`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} TYPE ${this.dialect.columnType(r)} USING ${o}::${this.dialect.columnType(r)};`,`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} ${r.nullable?"DROP NOT NULL":"SET NOT NULL"};`];return c.push(r.default===void 0?`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} DROP DEFAULT;`:`ALTER TABLE ${this.q(t)} ALTER COLUMN ${o} SET DEFAULT ${this.literal(r)};`),c}let i=this.target().tables.find((o)=>o.name===t);if(!i)throw new n(t,"cannot rebuild a table that is not in the target schema");let s=`${t}__rebuild`,a=i.columns.map((o)=>this.q(o.name)).join(", ");return[this.createTable({...i,name:s}),`INSERT INTO ${this.q(s)} (${a}) SELECT ${a} FROM ${this.q(t)};`,`DROP TABLE ${this.q(t)};`,`ALTER TABLE ${this.q(s)} RENAME TO ${this.q(t)};`,...i.indexes.map((o)=>this.createIndex(o))]}createIndex(t){let r=t.targets.map((a)=>a.kind==="column"?this.q(a.column):`(${this.dialect.jsonExtract(a.column,a.path,a.type)})`).join(", "),i=t.unique?"UNIQUE ":"",s=t.where?` WHERE ${this.q(t.where.column)} = ${d(t.where.equals)}`:"";return`CREATE ${i}INDEX IF NOT EXISTS ${this.q(t.name)} ON ${this.q(t.table)} (${r})${s};`}setDocumentField(t,r,i,s,a){let o=this.q(i),c=d(JSON.stringify(a)),u=`WHERE "collection" = ${d(r)}`;if(this.dialect.id==="postgres"){let m=`'{${s.join(",")}}'`;return`UPDATE ${this.q(t)} SET ${o} = jsonb_set(${o}, ${m}, ${c}::jsonb, true) ${u} AND ${o} #> ${m} IS NULL;`}let l=d(`$.${s.join(".")}`);return`UPDATE ${this.q(t)} SET ${o} = json_set(${o}, ${l}, json(${c})) ${u} AND json_extract(${o}, ${l}) IS NULL;`}unsetDocumentField(t,r,i,s){let a=this.q(i),o=`WHERE "collection" = ${d(r)}`;if(this.dialect.id==="postgres")return`UPDATE ${this.q(t)} SET ${a} = ${a} #- '{${s.join(",")}}' ${o};`;return`UPDATE ${this.q(t)} SET ${a} = json_remove(${a}, ${d(`$.${s.join(".")}`)}) ${o};`}literal(t){let r=t.default;if(r===null||r===void 0)return"NULL";if(typeof r==="number")return String(r);if(typeof r==="boolean")return this.dialect.id==="postgres"?String(r):r?"1":"0";return d(String(r))}q(t){return this.dialect.quote(t)}}function I(t){switch(t){case"cascade":return" ON DELETE CASCADE";case"set-null":return" ON DELETE SET NULL";case"restrict":return" ON DELETE RESTRICT";default:return""}}function d(t){return`'${t.replaceAll("'","''")}'`}function Mt(t){let r=[],i="",s=!1;for(let a=0;a<t.length;a+=1){let o=t[a];if(o==="'"){if(s&&t[a+1]==="'"){i+="''",a+=1;continue}s=!s,i+=o;continue}if(o==="-"&&!s&&t[a+1]==="-"){let c=t.indexOf(`
|
|
7
7
|
`,a);a=c===-1?t.length:c;continue}if(o===";"&&!s){if(i.trim())r.push(i.trim());i="";continue}i+=o}if(i.trim())r.push(i.trim());return r}async function R(t){let r=await t.all(`SELECT table_name, column_name, data_type, is_nullable, column_default
|
|
8
8
|
FROM information_schema.columns
|
|
9
9
|
WHERE table_schema = current_schema()
|
|
@@ -17,10 +17,10 @@ import{Ae,xe}from"./index-gpwcmmvr.js";import{N}from"./index-y5mwknr9.js";import
|
|
|
17
17
|
AND kcu.table_schema = tc.table_schema
|
|
18
18
|
WHERE tc.constraint_type = 'PRIMARY KEY'
|
|
19
19
|
AND tc.table_schema = current_schema()
|
|
20
|
-
ORDER BY tc.table_name, kcu.ordinal_position`,[]),a=new Map;for(let o of r)A(a,String(o.table_name)).columns.push({name:String(o.column_name),type:
|
|
21
|
-
${this.renderer.render(t)}`,summary:t.map(
|
|
20
|
+
ORDER BY tc.table_name, kcu.ordinal_position`,[]),a=new Map;for(let o of r)A(a,String(o.table_name)).columns.push({name:String(o.column_name),type:j(String(o.data_type)),nullable:o.is_nullable==="YES",storage:"column"});for(let o of s){let c=a.get(String(o.table_name));if(c)c.primaryKey.push(String(o.column_name))}for(let o of i){let c=a.get(String(o.table_name));if(!c)continue;let u=String(o.definition);c.indexes.push({name:String(o.index_name),table:c.name,targets:[],unique:u.startsWith("CREATE UNIQUE")})}return N(a)}async function w(t){let r=await t.all("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name",[]),i=new Map;for(let s of r){let a=String(s.name),o=A(i,a),c=await t.all(`PRAGMA table_info(${C(a)})`,[]);for(let l of c)if(o.columns.push({name:String(l.name),type:M(String(l.type)),nullable:Number(l.notnull)===0,storage:"column"}),Number(l.pk)>0)o.primaryKey.push(String(l.name));let u=await t.all(`PRAGMA index_list(${C(a)})`,[]);for(let l of u){let m=String(l.name);if(m.startsWith("sqlite_autoindex"))continue;o.indexes.push({name:m,table:a,targets:[],unique:Number(l.unique)===1})}}return N(i)}function A(t,r){let i=t.get(r);if(i)return i;let s={name:r,columns:[],primaryKey:[],indexes:[]};return t.set(r,s),s}function N(t){return{version:1,tables:[...t.values()].filter((i)=>i.name!==z).map((i)=>({...i,columns:y(i.columns),indexes:y(i.indexes)})).sort((i,s)=>i.name.localeCompare(s.name)),collections:[]}}function y(t){return[...t].sort((r,i)=>r.name.localeCompare(i.name))}function j(t){switch(t){case"integer":return"integer";case"bigint":return"bigint";case"double precision":case"numeric":case"real":return"real";case"boolean":return"boolean";case"timestamp with time zone":case"timestamp without time zone":return"timestamp";case"jsonb":case"json":return"json";case"bytea":return"blob";default:return"text"}}function M(t){let r=t.toUpperCase();if(r.includes("INT"))return"integer";if(r.includes("REAL")||r.includes("DOUB"))return"real";if(r.includes("BLOB"))return"blob";return"text"}function C(t){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw Error(`Unsafe SQL identifier: ${t}`);return`"${t}"`}class h{id;real;driver;constructor(t,r,i){this.id=t;this.real=r;this.driver=i}}class ce{driver;dialect;id;capabilities;catalog=new S;compiler;renderer;schema={version:1,tables:[],collections:[]};journalReady=!1;transactionDepth=0;constructor(t,r,i={}){this.driver=t;this.dialect=r;if(this.id=t.id,this.capabilities={transactions:!0,sqlMigrations:!0,jsonQuery:!0,...i.capabilities},this.compiler=new E(r,this.catalog),this.renderer=new T(r,()=>this.schema),i.schema)this.useSchema(i.schema)}useSchema(t){this.schema=t,this.catalog.use(t)}introspect(){return this.dialect.id==="postgres"?R(this.driver):w(this.driver)}plan(t,r){return Ce(t,r)}render(t,r){return{id:r,extension:"sql",content:`-- ${r}
|
|
21
|
+
${this.renderer.render(t)}`,summary:t.map(Oe)}}async applyMigration(t){await this.ensureJournal();for(let r of Mt(t.content))await this.driver.exec(r)}async listAppliedMigrations(){return await this.ensureJournal(),(await this.driver.all(`SELECT id, checksum, applied_at FROM ${this.dialect.quote(z)} ORDER BY id`,[])).map((r)=>({id:String(r.id),checksum:String(r.checksum),appliedAt:new Date(String(r.applied_at))}))}async recordMigration(t,r){await this.ensureJournal(),await this.driver.run(`INSERT INTO ${this.dialect.quote(z)} (id, checksum, applied_at) VALUES (${this.dialect.placeholder(1)}, ${this.dialect.placeholder(2)}, ${this.dialect.placeholder(3)})`,[t,r,new Date().toISOString()])}async transaction(t){if(!this.capabilities.transactions)return t(new h(f(),!1,this.driver));if(this.transactionDepth>0)return t(new h(f(),!0,this.driver));if(this.driver.transaction)return this.driver.transaction((r)=>t(new h(f(),!0,r)));this.transactionDepth+=1,await this.driver.exec(this.dialect.beginTransaction??"BEGIN");try{let r=await t(new h(f(),!0,this.driver));return await this.driver.exec("COMMIT"),r}catch(r){throw await this.driver.exec("ROLLBACK"),r}finally{this.transactionDepth-=1}}async query(t,r){let i=this.compiler.compileQuery(r),s=await x(t,this.driver).all(i.text,i.values);if(r.count===!0)return[{count:Number(s[0]?.count??0)}];return s.map((a)=>this.compiler.decodeRow(r.table,a))}async mutate(t,r){let i=this.compiler.compileMutation(r),s=x(t,this.driver);if(i.text.includes(" RETURNING ")){let c=await s.all(i.text,i.values);return{rows:c.map((u)=>this.compiler.decodeRow(r.table,u)),count:c.length}}let o=await s.run(i.text,i.values);return{rows:[],count:o.rowsAffected}}async close(){await this.driver.close?.()}async ensureJournal(){if(this.journalReady)return;await this.driver.exec(`CREATE TABLE IF NOT EXISTS ${this.dialect.quote(z)} (
|
|
22
22
|
${this.dialect.quote("id")} TEXT NOT NULL PRIMARY KEY,
|
|
23
23
|
${this.dialect.quote("checksum")} TEXT NOT NULL,
|
|
24
24
|
${this.dialect.quote("applied_at")} TEXT NOT NULL
|
|
25
|
-
)`),this.journalReady=!0}}function
|
|
26
|
-
export{
|
|
25
|
+
)`),this.journalReady=!0}}function x(t,r){return t instanceof h?t.driver:r}var D=0;function f(){return D+=1,`tx_${D}`}var p=(t)=>{if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw Error(`Unsafe SQL identifier: ${t}`);return`"${t}"`};function L(t){return`$${t.map((r)=>`."${r.replaceAll('"',"\\\"")}"`).join("")}`}var k={text:"text",integer:"integer",bigint:"bigint",real:"double precision",boolean:"boolean",timestamp:"timestamptz",json:"jsonb",blob:"bytea"},Hn={id:"postgres",placeholder:(t)=>`$${t}`,quote:p,columnType:(t)=>t.array===!0?"jsonb":k[t.type],jsonExtract(t,r,i){let s=`${p(t)} #>> '{${r.map(q).join(",")}}'`;switch(i){case"integer":case"bigint":return`(${s})::bigint`;case"real":return`(${s})::double precision`;case"boolean":return`(${s})::boolean`;case"timestamp":return`(${s})::timestamptz`;default:return`(${s})`}},jsonArrayMembership(t,r,i){return`EXISTS (SELECT 1 FROM jsonb_array_elements_text(${r.length===0?p(t):`${p(t)} #> '{${r.map(q).join(",")}}'`}) AS membership(value) WHERE membership.value = ${i})`},likeOperator:(t)=>t?"ILIKE":"LIKE",encode(t,r){if(t===void 0||t===null)return null;if(r==="json")return JSON.stringify(t);if(r==="timestamp")return _(t);return t},decode(t,r){if(t===null||t===void 0)return null;if(r==="timestamp")return t instanceof Date?t:new Date(String(t));if(r==="json"&&typeof t==="string")return JSON.parse(t);if(r==="bigint"&&typeof t==="string")return Number(t);return t},supportsAlterColumn:!0};function q(t){return/[,{}"\s]/.test(t)?`"${t.replaceAll('"',"\\\"")}"`:t}var P={text:"TEXT",integer:"INTEGER",bigint:"INTEGER",real:"REAL",boolean:"INTEGER",timestamp:"INTEGER",json:"TEXT",blob:"BLOB"},st={id:"sqlite",beginTransaction:"BEGIN IMMEDIATE",placeholder:()=>"?",quote:p,columnType:(t)=>t.array===!0?"TEXT":P[t.type],jsonExtract(t,r,i){let s=`json_extract(${p(t)}, '${L(r)}')`;return i==="timestamp"?`CAST(ROUND((julianday(${s}) - 2440587.5) * 86400000) AS INTEGER)`:s},jsonArrayMembership(t,r,i){return`EXISTS (SELECT 1 FROM json_each(${r.length===0?p(t):`json_extract(${p(t)}, '${L(r)}')`}) WHERE json_each.value = ${i})`},likeOperator:()=>"LIKE",encode(t,r){if(t===void 0||t===null)return null;if(r==="json")return JSON.stringify(t);if(r==="timestamp")return _(t).getTime();if(r==="boolean")return t===!0?1:0;return t},decode(t,r){if(t===null||t===void 0)return null;if(r==="timestamp")return new Date(typeof t==="number"?t:Number(t));if(r==="boolean")return t===1||t===!0;if(r==="json"){if(typeof t!=="string")return t;return JSON.parse(t)}return t},supportsAlterColumn:!1};function _(t){if(t instanceof Date)return t;if(typeof t==="number")return new Date(t);return new Date(String(t))}
|
|
26
|
+
export{Mt,ce,Hn,st};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import{
|
|
2
|
-
`))}}),
|
|
3
|
-
`);return u(t,r)}}),
|
|
1
|
+
import{he}from"./index-a1jv6396.js";import{X}from"./index-ptttzgtp.js";import{jt,E}from"./index-axpzy2hj.js";import{e,n}from"./index-x72d1hzh.js";var p=new Map;function pe(t){if(!/^[a-z][a-z0-9-]*$/.test(t.id))throw new n(`ai.actions.${t.id}`,"an action id becomes a URL segment; use lowercase letters, digits and dashes");let i=p.get(t.id);if(i&&i!==t)throw new n(`ai.actions.${t.id}`,"a different action with this id is already registered");return p.set(t.id,t),t}function Z(t){return p.get(t)}function Le(t){return[...p.values()].filter((i)=>i.appliesTo.includes("*")||i.appliesTo.includes(t)).map((i)=>i.id).sort()}function me(){return[...p.keys()].sort()}function Ct(t,i){return{id:t,appliesTo:["*"],label:t,prompt:i,run:(r)=>u(r,i)}}var d=["text","textarea","richText","email","url"],Ao=pe({id:"generate",appliesTo:d,label:"Generate",prompt:"Write this field from the document below.",async run(t){return u(t,h(t))}}),ko=pe({id:"improve",appliesTo:d,label:"Improve",prompt:"Improve the current value: keep its meaning, tighten the wording, remove filler.",async run(t){let i=w(t);if(i.trim().length===0)throw e.validation(`There is nothing in ${t.fieldName} to improve yet.`);return u(t,[h(t),"","Current value:",i].join(`
|
|
2
|
+
`))}}),Ro=pe({id:"summarize",appliesTo:d,label:"Summarise",prompt:"Summarise the document below into this field.",async run(t){return u(t,h(t))}}),ro=pe({id:"translate",appliesTo:["*"],label:"Translate",prompt:"Translate the value into the target language.",requiresLocalized:!0,async run(t){let i=w(t);if(i.trim().length===0)throw e.validation(`${t.fieldName} is empty in ${t.sourceLocale??"the source language"}; there is nothing to translate.`);let r=[t.options.prompt??ro.prompt,`Source language: ${t.sourceLocale??"unknown"}.`,`Target language: ${t.locale??"unknown"}.`,"Keep formatting, links and names intact. Answer with the translation only.","",i].join(`
|
|
3
|
+
`);return u(t,r)}}),io=pe({id:"alt",appliesTo:["media"],label:"Describe the image",prompt:"Write alternative text for this image: one sentence, describing what is shown, no 'image of' preamble.",async run(t){let i=typeof t.value==="string"?t.value:null;if(!i)throw e.validation(`${t.fieldName} has no file selected yet.`);let r=await t.loadImage(i),o=await t.complete({system:f(t),prompt:[t.options.prompt??io.prompt,r===null?"The image itself is not available; infer from the surrounding content.":"",m(t)].filter((a)=>a.length>0).join(`
|
|
4
4
|
|
|
5
|
-
`),...r===null?{}:{images:[r]},...t.options.maxLength===void 0?{}:{maxTokens:v(t.options.maxLength)},...t.signal===void 0?{}:{signal:t.signal}}),s=b(o.text);return{value:s,preview:s,usage:o.usage}}}),
|
|
5
|
+
`),...r===null?{}:{images:[r]},...t.options.maxLength===void 0?{}:{maxTokens:v(t.options.maxLength)},...t.signal===void 0?{}:{signal:t.signal}}),s=b(o.text);return{value:s,preview:s,usage:o.usage}}}),so=pe({id:"tags",appliesTo:["multiselect","select","relation"],label:"Suggest values",prompt:"Choose the values that fit the document below.",async run(t){let i=T(t),r=await t.complete({system:f(t),prompt:[t.options.prompt??so.prompt,i.length>0?`Choose only from: ${i.join(", ")}.`:"Answer with short, lowercase values.","Answer with a comma-separated list and nothing else.",m(t)].join(`
|
|
6
6
|
|
|
7
7
|
`),...t.signal===void 0?{}:{signal:t.signal}}),o=r.text.split(/[,\n]/).map((l)=>l.trim().replace(/^[-*]\s*/,"")).filter((l)=>l.length>0),s=i.length===0?o:o.filter((l)=>i.includes(l));return{value:t.field.type==="multiselect"||t.field.options.many===!0?s:s[0]??null,preview:s.join(", "),usage:r.usage}}});async function u(t,i){let r=await t.complete({system:f(t),prompt:`${i}
|
|
8
8
|
|
|
9
|
-
${m(t)}`.trim(),...t.options.maxLength===void 0?{}:{maxTokens:v(t.options.maxLength)},...t.signal===void 0?{}:{signal:t.signal}}),o=r.text.trim();if(t.field.type==="richText")return{value:
|
|
9
|
+
${m(t)}`.trim(),...t.options.maxLength===void 0?{}:{maxTokens:v(t.options.maxLength)},...t.signal===void 0?{}:{signal:t.signal}}),o=r.text.trim();if(t.field.type==="richText")return{value:he(o),preview:o,usage:r.usage};let s=t.field.type==="textarea"?o:b(o),a=t.options.maxLength===void 0?s:s.slice(0,t.options.maxLength);return{value:a,preview:a,usage:r.usage}}function f(t){let i=[`You are an editorial assistant working inside a CMS. You are filling in the "${t.fieldName}" field of a "${t.collection.label}" document.`,`The field type is ${t.field.type}.`];if(t.field.type==="richText")i.push("Answer in Markdown. Do not wrap the answer in a code fence.");else i.push("Answer with the field value only: no preamble, no quotes, no Markdown fences.");if(t.locale)i.push(`Write in the "${t.locale}" locale.`);if(t.options.maxLength!==void 0)i.push(`Stay under ${t.options.maxLength} characters.`);return i.join(" ")}function m(t){let i=Object.entries(t.context).filter(([,r])=>r!==null&&r!==void 0&&r!=="");if(i.length===0)return"";return i.map(([r,o])=>`## ${r}
|
|
10
10
|
${g(o)}`).join(`
|
|
11
11
|
|
|
12
|
-
`)}function g(t){if(t===null||t===void 0)return"";if(typeof t==="string")return t;if(typeof t==="number"||typeof t==="boolean")return String(t);if(Array.isArray(t))return t.map(g).join(", ");if(typeof t==="object"&&t.type)return
|
|
13
|
-
`," ").replace(/\s{2,}/g," ").trim()}function v(t){return Math.max(64,Math.ceil(t/3)+32)}var k={read:"read",create:"create",update:"update",delete:"delete",restore:"delete",purge:"delete"};async function
|
|
14
|
-
export{
|
|
12
|
+
`)}function g(t){if(t===null||t===void 0)return"";if(typeof t==="string")return t;if(typeof t==="number"||typeof t==="boolean")return String(t);if(Array.isArray(t))return t.map(g).join(", ");if(typeof t==="object"&&t.type)return X(t);return JSON.stringify(t)}function h(t){let i=Z(t.action)?.prompt??"";return t.options.prompt??i}function w(t){return g(t.value)}function T(t){let i=t.field.options.options;if(!Array.isArray(i))return[];return i.filter((r)=>typeof r==="string")}function b(t){return t.replace(/^["'`]+|["'`]+$/g,"").replaceAll(`
|
|
13
|
+
`," ").replace(/\s{2,}/g," ").trim()}function v(t){return Math.max(64,Math.ceil(t/3)+32)}var k={read:"read",create:"create",update:"update",delete:"delete",restore:"delete",purge:"delete"};async function _(t,i){let r=t.access[k[i.operation]];if(!r){F(t,i);return}let o=await r({actor:i.actor,operation:i.operation,locale:i.locale,...i.record===void 0?{}:{record:i.record}});if(o===!0)return;if(o===!1)throw C(t,i);return o}function F(t,i){if(!i.rbac)return;let r=jt(t.name,i.operation);if(E(i.actor,r))return;throw C(t,i,r)}function C(t,i,r){let o=`${i.operation} ${t.name}`;return i.actor===null?e.unauthorized(`Not allowed to ${o}`):e.forbidden(r?`Not allowed to ${o}; the "${r}" permission is required`:`Not allowed to ${o}`)}var R=new WeakMap;function A(t){let i=R.get(t);if(i)return i;let r={read:[],update:[]};for(let[o,s]of Object.entries(t.fields)){if(s.access?.read)r.read.push(o);if(s.access?.update)r.update.push(o)}return R.set(t,r),r}function on(t){let i=A(t);return i.read.length>0||i.update.length>0}function fe(t,i,r,o){let s=A(i).read.filter((a)=>{let l=i.fields[a]?.access?.read;return l&&!l({actor:r,record:t,locale:o})});for(let a of["scheduledPatch","_fallback"]){let l=t[a];if(l&&typeof l==="object"&&!Array.isArray(l)){let c={...l};for(let y of s)delete c[y];t[a]=c}}if(Array.isArray(t._localeFields))t._localeFields=t._localeFields.filter((a)=>typeof a==="string"&&!s.includes(a));for(let a of s)delete t[a];return t}function j(t,i,r,o,s){let a=[];for(let l of A(t).update){if(!(l in i))continue;let c=t.fields[l]?.access?.update;if(!c)continue;if(!c({actor:r,locale:o,...s===void 0?{}:{record:s}}))a.push(l)}if(a.length===0)return;throw e.forbidden(`Not allowed to write ${a.map((l)=>`"${l}"`).join(", ")} on ${t.name}`)}
|
|
14
|
+
export{pe,Z,Le,me,Ct,Ao,ko,Ro,ro,io,so,_,on,fe,j};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function s(...e){return{kind:"and",conditions:e.filter(o)}}function R(...e){return{kind:"or",conditions:e.filter(o)}}function zn(e){return{kind:"not",condition:e}}function er(e,r,n){return{kind:"compare",path:e,operator:r,value:n}}function t(e,r){return{kind:"compare",path:e,operator:"eq",value:r}}function We(e,r){return{kind:"compare",path:e,operator:"ne",value:r}}function it(e,r){return{kind:"compare",path:e,operator:"gt",value:r}}function tr(e,r){return{kind:"compare",path:e,operator:"gte",value:r}}function H(e,r){return{kind:"compare",path:e,operator:"lt",value:r}}function M(e,r){return{kind:"compare",path:e,operator:"lte",value:r}}function S(e,r){return{kind:"compare",path:e,operator:"in",value:r}}function nr(e,r){return{kind:"compare",path:e,operator:"nin",value:r}}function ae(e,r,n=!1){return{kind:"compare",path:e,operator:n?"ilike":"like",value:r}}function rr(e,r){return{kind:"compare",path:e,operator:"contains",value:r}}function le(e,r=!0){return{kind:"compare",path:e,operator:"exists",value:r}}function m(e,r="asc"){return{path:e,direction:r}}function Xo(e,r){if(!e)return r;if(!r)return e;return s(e,r)}function ir(e,r){let n=Xo(e.where,r);return n===void 0?e:{...e,where:n}}function o(e){return e!==void 0}
|
|
2
|
+
export{s,R,zn,er,t,We,it,tr,H,M,S,nr,ae,rr,le,m,Xo,ir};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var z="cms_migrations";function e(u,i,a={}){return{name:u,type:i,nullable:a.default!==void 0?!1:a.nullable??!0,storage:"column",...a.default===void 0?{}:{default:a.default},...a.unique===void 0?{}:{unique:a.unique},...a.index===void 0?{}:{index:a.index},...a.array===void 0?{}:{array:a.array},...a.references===void 0?{}:{references:a.references}}}var l=()=>e("id","text",{nullable:!1,unique:!0}),n=()=>e("created_at","timestamp",{nullable:!1}),o=()=>e("updated_at","timestamp",{nullable:!1});function t(u,i,a={}){let d=i.map((c)=>({kind:"column",column:c})),r=a.unique===!0?"uniq":"idx";return{name:a.name??`${r}_${u}_${i.join("_")}`,table:u,targets:d,unique:a.unique===!0}}function s(u,i,a=[],d){return{name:u,columns:[...i].sort((r,c)=>r.name.localeCompare(c.name)),primaryKey:["id"],indexes:[...a].sort((r,c)=>r.name.localeCompare(c.name)),...d===void 0?{}:{documentColumn:d}}}function nt(){return[_(),b(),f(),p(),x(),h(),y(),g(),T(),v(),k(),q(),S(),j(),w(),C(),D()].sort((u,i)=>u.name.localeCompare(i.name))}function ot(){return["cms_migrations",m,...nt().map((u)=>u.name)].sort()}var m="slug_history";function mo(){return s(m,[l(),e("collection","text",{nullable:!1}),e("field","text",{nullable:!1}),e("locale","text",{nullable:!1,default:""}),e("slug","text",{nullable:!1}),e("document_id","text",{nullable:!1}),n()],[t(m,["collection","field","locale","slug"],{unique:!0,name:"uniq_slug_history_address"}),t(m,["document_id"])])}function _(){return s("documents",[l(),e("collection","text",{nullable:!1}),e("data","json",{nullable:!1}),e("revision","integer",{nullable:!1,default:1}),e("scheduled_at","timestamp"),e("scheduled_patch","json"),e("deleted_at","timestamp"),e("purge_after","timestamp"),n(),o(),e("updated_by","text")],[t("documents",["collection"]),t("documents",["collection","deleted_at"]),t("documents",["collection","updated_at"]),t("documents",["scheduled_at"]),t("documents",["purge_after"])],"data")}function b(){return s("cms_users",[l(),e("email","text",{nullable:!1,unique:!0}),e("name","text"),e("password_hash","text"),e("two_factor_secret","text"),e("two_factor_enabled","boolean",{default:!1}),e("status","text",{nullable:!1,default:"active"}),e("roles","json",{nullable:!1,array:!0}),e("avatar_url","text"),e("locale","text"),e("last_login_at","timestamp"),n(),o()],[t("cms_users",["email"],{unique:!0})])}function f(){return s("cms_sessions",[l(),e("user_id","text",{nullable:!1,references:{table:"cms_users",column:"id",onDelete:"cascade"}}),e("token_hash","text",{nullable:!1,unique:!0}),e("ip","text"),e("user_agent","text"),e("expires_at","timestamp",{nullable:!1}),n()],[t("cms_sessions",["token_hash"],{unique:!0}),t("cms_sessions",["user_id"]),t("cms_sessions",["expires_at"])])}function p(){return s("cms_accounts",[l(),e("user_id","text",{nullable:!1,references:{table:"cms_users",column:"id",onDelete:"cascade"}}),e("provider","text",{nullable:!1}),e("provider_account_id","text",{nullable:!1}),e("email","text"),n(),o()],[t("cms_accounts",["provider","provider_account_id"],{unique:!0,name:"uniq_cms_accounts_provider_account"}),t("cms_accounts",["user_id"])])}function x(){return s("cms_tokens",[l(),e("type","text",{nullable:!1}),e("user_id","text",{references:{table:"cms_users",column:"id",onDelete:"cascade"}}),e("email","text"),e("token_hash","text",{nullable:!1,unique:!0}),e("data","json"),e("expires_at","timestamp",{nullable:!1}),e("consumed_at","timestamp"),n()],[t("cms_tokens",["token_hash"],{unique:!0}),t("cms_tokens",["user_id"]),t("cms_tokens",["type","expires_at"])])}function h(){return s("cms_api_keys",[l(),e("name","text",{nullable:!1}),e("user_id","text",{references:{table:"cms_users",column:"id",onDelete:"cascade"}}),e("key_hash","text",{nullable:!1,unique:!0}),e("prefix","text",{nullable:!1}),e("scopes","json",{nullable:!1,array:!0}),e("last_used_at","timestamp"),e("expires_at","timestamp"),e("revoked_at","timestamp"),n()],[t("cms_api_keys",["key_hash"],{unique:!0}),t("cms_api_keys",["user_id"])])}function y(){return s("cms_roles",[l(),e("name","text",{nullable:!1,unique:!0}),e("label","text"),e("permissions","json",{nullable:!1,array:!0}),n(),o()],[t("cms_roles",["name"],{unique:!0})])}function g(){return s("cms_ai_credentials",[l(),e("provider","text",{nullable:!1,unique:!0}),e("auth_type","text",{nullable:!1,default:"api-key"}),e("secret","text",{nullable:!1}),e("hint","text"),n(),o()],[t("cms_ai_credentials",["provider"],{unique:!0})])}function T(){return s("cms_ai_mutations",[l(),e("idempotency_key","text",{nullable:!1,unique:!0}),e("run_id","text",{nullable:!1}),e("collection","text"),e("document_id","text"),e("result","json"),n()],[t("cms_ai_mutations",["idempotency_key"],{unique:!0}),t("cms_ai_mutations",["run_id"])])}function v(){return s("cms_ai_plans",[l(),e("run_id","text",{nullable:!1}),e("actor_id","text"),e("kind","text",{nullable:!1}),e("summary","text",{nullable:!1}),e("operations","json",{nullable:!1}),e("status","text",{nullable:!1,default:"pending"}),e("result","json"),e("expires_at","timestamp",{nullable:!1}),e("approved_at","timestamp"),n()],[t("cms_ai_plans",["run_id"]),t("cms_ai_plans",["status","expires_at"])])}function k(){return s("media",[l(),e("filename","text",{nullable:!1}),e("mime_type","text",{nullable:!1}),e("size","bigint",{nullable:!1}),e("width","integer"),e("height","integer"),e("storage_key","text",{nullable:!1,unique:!0}),e("checksum","text"),e("alt","json"),e("focal_x","real"),e("focal_y","real"),e("status","text",{nullable:!1,default:"active"}),e("orphaned_at","timestamp"),e("purge_after","timestamp"),e("purge_error","text"),e("metadata","json"),e("created_by","text"),n(),o()],[t("media",["storage_key"],{unique:!0}),t("media",["status"]),t("media",["status","purge_after"])])}function q(){return s("media_usages",[l(),e("media_id","text",{nullable:!1,references:{table:"media",column:"id",onDelete:"cascade"}}),e("collection","text",{nullable:!1}),e("document_id","text",{nullable:!1}),e("field","text",{nullable:!1}),e("locale","text",{nullable:!1,default:""}),n()],[t("media_usages",["media_id"]),t("media_usages",["document_id"]),t("media_usages",["media_id","document_id","field","locale"],{unique:!0,name:"uniq_media_usages_reference"})])}function S(){return s("webhooks",[l(),e("url","text",{nullable:!1}),e("events","json",{nullable:!1,array:!0}),e("filters","json"),e("headers","json"),e("secret","text"),e("active","boolean",{nullable:!1,default:!0}),n(),o()],[t("webhooks",["active"])])}function j(){return s("webhook_deliveries",[l(),e("webhook_id","text",{nullable:!1,references:{table:"webhooks",column:"id",onDelete:"cascade"}}),e("event_id","text",{nullable:!1}),e("event_type","text",{nullable:!1}),e("status","text",{nullable:!1,default:"pending"}),e("attempt","integer",{nullable:!1,default:0}),e("request_body","json"),e("response_status","integer"),e("response_body","text"),e("error","text"),e("next_attempt_at","timestamp"),e("delivered_at","timestamp"),n()],[t("webhook_deliveries",["webhook_id","created_at"]),t("webhook_deliveries",["status","next_attempt_at"]),t("webhook_deliveries",["event_id"])])}function w(){return s("outbox",[l(),e("event_id","text",{nullable:!1,unique:!0}),e("type","text",{nullable:!1}),e("payload","json",{nullable:!1}),e("previous","json"),e("actor","json"),e("collection","text"),e("document_id","text"),e("status","text",{nullable:!1,default:"pending"}),e("attempts","integer",{nullable:!1,default:0}),e("available_at","timestamp",{nullable:!1}),e("processed_at","timestamp"),e("error","text"),n()],[t("outbox",["event_id"],{unique:!0}),t("outbox",["status","available_at"]),t("outbox",["document_id","created_at"])])}function C(){return s("activity",[l(),e("actor_id","text"),e("actor_source","text"),e("action","text",{nullable:!1}),e("source","text"),e("collection","text"),e("document_id","text"),e("locale","text"),e("changes","json"),e("ip","text"),n()],[t("activity",["collection","document_id"]),t("activity",["actor_id"]),t("activity",["created_at"])])}function D(){return s("jobs",[l(),e("type","text",{nullable:!1}),e("payload","json"),e("status","text",{nullable:!1,default:"pending"}),e("run_at","timestamp",{nullable:!1}),e("attempts","integer",{nullable:!1,default:0}),e("locked_at","timestamp"),e("locked_by","text"),e("completed_at","timestamp"),e("error","text"),n()],[t("jobs",["status","run_at"]),t("jobs",["type"])])}
|
|
2
|
+
export{z,nt,ot,mo};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function i(t){let e="";while(e.length<t){let o=crypto.getRandomValues(new Uint8Array(t*2));for(let r of o){if(r>=252)continue;if(e+="0123456789abcdefghijklmnopqrstuvwxyz"[r%36],e.length===t)break}}return e}function
|
|
2
|
-
export{
|
|
1
|
+
function i(t){let e="";while(e.length<t){let o=crypto.getRandomValues(new Uint8Array(t*2));for(let r of o){if(r>=252)continue;if(e+="0123456789abcdefghijklmnopqrstuvwxyz"[r%36],e.length===t)break}}return e}function b(t){let n=Date.now().toString(36).padStart(9,"0");return`${t}_${n}${i(8)}`}var f=0;function ve(t){f=(f+1)%60466175;let n=Date.now().toString(36).padStart(9,"0"),e=f.toString(36).padStart(5,"0");return`${t}_${n}${e}${i(3)}`}function bo(t){let n=0xcbf29ce484222325n,e=0x100000001b3n,o=0xffffffffffffffffn,r=new TextEncoder().encode(t);for(let c of r)n=(n^BigInt(c))*e&o;return n.toString(16).padStart(16,"0")}
|
|
2
|
+
export{b,ve,bo};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{s,t,We,S}from"./index-6m1kjq9g.js";import{w}from"./index-rw0hze6x.js";import{b}from"./index-8nzmqy0f.js";var T="media",U="media_usages",g="mediaId";function en(e){return Object.values(e.fields).some((n)=>n.type==="media"||n.type==="richText"||n.relationTo==="media")}function tn(e,n){let i=new Map,o=(c,a,d)=>{if(!c)return;i.set(`${c}|${a}|${d}`,{mediaId:c,field:a,locale:d})};for(let[c,a]of Object.entries(e.fields)){let d=a.type==="media"||a.relationTo==="media",f=a.type==="richText";if(!d&&!f)continue;for(let[r,l]of h(n[c],a.localized)){if(d){for(let u of M(l))o(u,c,r);continue}for(let u of Qe(l))o(u,c,r)}}return[...i.values()]}async function nn(e){let{db:n,documentId:i}=e,o=await n.find(U,t("document_id",i)),c=new Map((e.references??[]).map((r)=>[`${r.mediaId}|${r.field}|${r.locale}`,r])),a=new Set,d=[];for(let r of o){let l=`${String(r.media_id)}|${String(r.field)}|${String(r.locale??"")}`;if(c.delete(l))continue;d.push(String(r.id)),a.add(String(r.media_id))}if(d.length>0)await n.delete(U,S("id",d));let f=new Set;for(let r of c.values())f.add(r.mediaId),await n.insert(U,{id:b("mus"),media_id:r.mediaId,collection:e.collection,document_id:i,field:r.field,locale:r.locale,created_at:e.now});if(!e.lifecycle)return{orphaned:[],reclaimed:[]};return{orphaned:await p(e,[...a]),reclaimed:await m(e,[...f])}}async function p(e,n){if(n.length===0)return[];if(e.retention?.orphanAfterUnreferenced===!1)return[];let i=[];for(let o of n){if((await e.db.find(U,t("media_id",o))).length>0)continue;if(await e.db.update(T,s(t("id",o),t("status","active")),{status:"orphaned",orphaned_at:e.now,purge_after:y(e.retention,e.now),updated_at:e.now})>0)i.push(o)}return i}async function m(e,n){if(n.length===0)return[];if(e.retention?.reclaimOnReference===!1)return[];let i=[];for(let o of n)if(await e.db.update(T,s(t("id",o),We("status","active")),{status:"active",orphaned_at:null,purge_after:null,purge_error:null,updated_at:e.now})>0)i.push(o);return i}function y(e,n){let i=e?.purgeAfter??"30d";if(i===!1)return null;return new Date(n.getTime()+w(i))}function h(e,n){if(!n)return[["",e]];if(typeof e!=="object"||e===null||Array.isArray(e))return[];return Object.entries(e)}function M(e){if(typeof e==="string")return e.length>0?[e]:[];if(Array.isArray(e))return e.filter((n)=>typeof n==="string");return[]}function Qe(e){let n=[],i=[e??null];while(i.length>0){let o=i.pop();if(Array.isArray(o)){i.push(...o);continue}if(typeof o!=="object"||o===null)continue;for(let[c,a]of Object.entries(o)){if(c===g&&typeof a==="string"){n.push(a);continue}if(a!==null&&typeof a==="object")i.push(a)}}return n}
|
|
2
|
+
export{T,U,en,tn,nn,Qe};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import{k,Y,Fe,Ne,Xe,ee}from"./index-ptttzgtp.js";var So=k({name:"doc",content:"block+",toHtml:({children:t})=>t,toMarkdown:({children:t})=>t}),To=k({name:"paragraph",group:"block",content:"inline*",toHtml:({children:t})=>`<p>${t}</p>`,toMarkdown:({children:t})=>t}),Co=k({name:"heading",group:"block",content:"inline*",attrs:{level:{default:1}},toHtml:({node:t,children:e})=>{let n=f(t.attrs?.level);return`<h${n}>${e}</h${n}>`},toMarkdown:({node:t,children:e})=>`${"#".repeat(f(t.attrs?.level))} ${e}`}),Oo=k({name:"blockquote",group:"block",content:"block+",toHtml:({children:t})=>`<blockquote>${t}</blockquote>`,toMarkdown:({children:t})=>t.split(`
|
|
2
|
+
`).map((e)=>e.length===0?">":`> ${e}`).join(`
|
|
3
|
+
`)}),Po=k({name:"bulletList",group:"block",content:"listItem+",toHtml:({children:t})=>`<ul>${t}</ul>`,toMarkdown:({childStrings:t})=>t.map((e)=>`- ${Xe(e,2)}`).join(`
|
|
4
|
+
`)}),_o=k({name:"orderedList",group:"block",content:"listItem+",attrs:{start:{default:1}},toHtml:({node:t,children:e})=>{let n=typeof t.attrs?.start==="number"?t.attrs.start:1;return`<ol${n===1?"":` start="${n}"`}>${e}</ol>`},toMarkdown:({node:t,childStrings:e})=>{let n=typeof t.attrs?.start==="number"?t.attrs.start:1;return e.map((r,o)=>{let i=`${n+o}. `;return`${i}${Xe(r,i.length)}`}).join(`
|
|
5
|
+
`)}}),$o=k({name:"listItem",content:"paragraph block*",toHtml:({children:t})=>`<li>${t}</li>`,toMarkdown:({children:t})=>t}),jo=k({name:"taskList",group:"block",content:"taskItem+",toHtml:({children:t})=>`<ul data-type="taskList">${t}</ul>`,toMarkdown:({childStrings:t})=>t.join(`
|
|
6
|
+
`)}),Io=k({name:"taskItem",content:"paragraph block*",attrs:{checked:{default:!1}},toHtml:({node:t,children:e})=>`<li data-type="taskItem"${Ne({"data-checked":t.attrs?.checked===!0})}>${e}</li>`,toMarkdown:({node:t,children:e})=>`- [${t.attrs?.checked===!0?"x":" "}] ${Xe(e,6)}`}),Eo=k({name:"codeBlock",group:"block",content:"text*",marks:"",attrs:{language:{default:null}},toHtml:({node:t,childNodes:e})=>{let n=ee(t,"language"),r=Fe(p(e));return`<pre><code${n?` class="language-${Fe(n)}"`:""}>${r}</code></pre>`},toMarkdown:({node:t,childNodes:e})=>{let n=ee(t,"language")??"",r=p(e),o=Math.max(0,...[...r.matchAll(/`+/g)].map((a)=>a[0].length)),i="`".repeat(Math.max(3,o+1));return`${i}${n}
|
|
7
|
+
${r}
|
|
8
|
+
${i}`},toText:({childNodes:t})=>p(t)}),Mo=k({name:"horizontalRule",group:"block",atom:!0,toHtml:()=>"<hr>",toMarkdown:()=>"---",toText:()=>""}),Do=k({name:"hardBreak",group:"inline",inline:!0,atom:!0,toHtml:()=>"<br>",toMarkdown:()=>`
|
|
9
|
+
`,toText:()=>`
|
|
10
|
+
`}),qo=k({name:"image",group:"block",atom:!0,attrs:{src:{default:null},alt:{default:null},title:{default:null},mediaId:{default:null}},toHtml:({node:t,mediaUrl:e,mediaImage:n,images:r})=>{let o=g(t.attrs,n),i=o?.src??b(t.attrs,e);return`<img${Ne({src:i,alt:x(ee(t,"alt"))??o?.alt??"",title:ee(t,"title"),width:o?.width??void 0,height:o?.height??void 0,srcset:o?.srcset??void 0,sizes:o?.srcset?o.sizes??void 0:void 0,loading:r?.loading,decoding:r?.decoding,"data-media-id":ee(t,"mediaId")})}>`},toMarkdown:({node:t,mediaUrl:e,mediaImage:n})=>{let r=g(t.attrs,n),o=r?.src??b(t.attrs,e)??"",i=x(ee(t,"alt"))??r?.alt??"",a=ee(t,"title");return``},toText:({node:t})=>ee(t,"alt")??""}),Lo=k({name:"table",group:"block",content:"tableRow+",toHtml:({children:t})=>`<table><tbody>${t}</tbody></table>`,toMarkdown:({childStrings:t})=>{let[e,...n]=t;if(e===void 0)return"";let r=e.split(" | ").length,o=`| ${Array.from({length:r},()=>"---").join(" | ")} |`;return[`| ${e} |`,o,...n.map((i)=>`| ${i} |`)].join(`
|
|
11
|
+
`)}}),Fo=k({name:"tableRow",content:"(tableCell | tableHeader)*",toHtml:({children:t})=>`<tr>${t}</tr>`,toMarkdown:({childStrings:t})=>t.map((e)=>e.replaceAll(`
|
|
12
|
+
`," ")).join(" | ")}),No=k({name:"tableHeader",content:"block+",attrs:{colspan:{default:1},rowspan:{default:1},colwidth:{default:null}},toHtml:({node:t,children:e})=>`<th${N(t.attrs)}>${e}</th>`,toMarkdown:({children:t})=>t}),Uo=k({name:"tableCell",content:"block+",attrs:{colspan:{default:1},rowspan:{default:1},colwidth:{default:null}},toHtml:({node:t,children:e})=>`<td${N(t.attrs)}>${e}</td>`,toMarkdown:({children:t})=>t}),Jo=Y({name:"bold",toHtml:({text:t})=>`<strong>${t}</strong>`,toMarkdown:({text:t})=>`**${t}**`}),Wo=Y({name:"italic",toHtml:({text:t})=>`<em>${t}</em>`,toMarkdown:({text:t})=>`*${t}*`}),zo=Y({name:"underline",toHtml:({text:t})=>`<u>${t}</u>`,toMarkdown:({text:t})=>`<u>${t}</u>`}),Ho=Y({name:"strike",toHtml:({text:t})=>`<s>${t}</s>`,toMarkdown:({text:t})=>`~~${t}~~`}),Bo=Y({name:"code",toHtml:({text:t})=>`<code>${t}</code>`,toMarkdown:({text:t})=>`\`${t}\``}),Vo=Y({name:"link",attrs:{href:{default:null},target:{default:null},rel:{default:null}},toHtml:({mark:t,text:e})=>`<a${Ne({href:t.attrs?.href??"",target:t.attrs?.target,rel:t.attrs?.rel})}>${e}</a>`,toMarkdown:({mark:t,text:e})=>`[${e}](${String(t.attrs?.href??"")})`});function f(t){let e=typeof t==="number"?Math.trunc(t):1;return Math.min(6,Math.max(1,e))}function p(t){return t.map((e)=>e.text??"").join("")}function N(t){let e=t?.colspan,n=t?.rowspan;return Ne({colspan:typeof e==="number"&&e>1?e:void 0,rowspan:typeof n==="number"&&n>1?n:void 0})}function g(t,e){let n=t?.mediaId;if(typeof n!=="string"||!e)return null;return e(n)}function x(t){return t===void 0||t.trim()===""?void 0:t}function b(t,e){let n=t?.mediaId;if(typeof n==="string"&&e){let o=e(n);if(o)return o}let r=t?.src;return typeof r==="string"?r:void 0}function he(t){let e=t.replaceAll(`\r
|
|
13
|
+
`,`
|
|
14
|
+
`).split(`
|
|
15
|
+
`),n=m(e);return{type:"doc",content:n.length>0?n:[{type:"paragraph"}]}}function En(t){let e=t.replaceAll(`\r
|
|
16
|
+
`,`
|
|
17
|
+
`).split(/\n{2,}/).map((n)=>n.trim()).filter((n)=>n.length>0);return{type:"doc",content:e.length===0?[{type:"paragraph"}]:e.map((n)=>({type:"paragraph",content:[{type:"text",text:n}]}))}}function m(t){let e=[],n=0;while(n<t.length){let r=t[n]??"";if(r.trim().length===0){n+=1;continue}let o=/^\s*(`{3,})(.*)$/.exec(r);if(o){let s=o[1],d=(o[2]??"").trim(),l=[];n+=1;while(n<t.length&&!(t[n]??"").startsWith(s))l.push(t[n]??""),n+=1;n+=1,e.push({type:"codeBlock",...d.length>0?{attrs:{language:d}}:{},...l.length>0?{content:[{type:"text",text:l.join(`
|
|
18
|
+
`)}]}:{}});continue}let i=/^(#{1,6})\s+(.*)$/.exec(r);if(i){e.push({type:"heading",attrs:{level:i[1].length},content:h(i[2].trim())}),n+=1;continue}if(/^\s*(-{3,}|\*{3,}|_{3,})\s*$/.test(r)){e.push({type:"horizontalRule"}),n+=1;continue}if(/^\s*>/.test(r)){let s=[];while(n<t.length&&/^\s*>/.test(t[n]??""))s.push((t[n]??"").replace(/^\s*>\s?/,"")),n+=1;e.push({type:"blockquote",content:m(s)});continue}if(c(r)){let[s,d]=M(t,n);e.push(s),n=d;continue}let a=[];while(n<t.length){let s=t[n]??"";if(s.trim().length===0||c(s)||/^(#{1,6})\s/.test(s)||/^\s*>/.test(s)||/^\s*`{3,}/.test(s))break;a.push(s.trim()),n+=1}e.push({type:"paragraph",content:h(a.join(" "))})}return e}function c(t){let e=/^(\s*)[-*+]\s+(\[([ xX])\]\s+)?(.*)$/.exec(t);if(e){let r=e[3];return{ordered:!1,task:r===void 0?null:r.toLowerCase()==="x",indent:(e[1]??"").length,text:e[4]??"",start:1}}let n=/^(\s*)(\d+)[.)]\s+(.*)$/.exec(t);if(n)return{ordered:!0,task:null,indent:(n[1]??"").length,text:n[3]??"",start:Number(n[2]??1)};return null}function M(t,e){let n=c(t[e]??"");if(!n)return[{type:"paragraph"},e+1];let r=[],o=e;while(o<t.length){let a=c(t[o]??"");if(!a||a.indent!==n.indent)break;if(a.ordered!==n.ordered)break;if(a.task===null!==(n.task===null))break;let s=[a.text];o+=1;while(o<t.length){let d=t[o]??"";if(d.trim().length===0)break;let l=c(d);if(l&&l.indent<=n.indent)break;if(!l&&d.search(/\S/)<=n.indent)break;s.push(d.slice(n.indent+2)),o+=1}r.push({type:n.task===null?"listItem":"taskItem",...a.task===null?{}:{attrs:{checked:a.task}},content:m(s)})}let i=n.task!==null?"taskList":n.ordered?"orderedList":"bulletList";return[{type:i,...i==="orderedList"&&n.start!==1?{attrs:{start:n.start}}:{},content:r},o]}function h(t){let e=[],n="",r=()=>{if(n.length===0)return;e.push({type:"text",text:n}),n=""},o=0;while(o<t.length){let i=t.slice(o);if(i.startsWith("\\")&&i.length>1){n+=i[1],o+=2;continue}let a=/^\[([^\]]*)\]\(([^)\s]*)(?:\s+"([^"]*)")?\)/.exec(i);if(a){if(r(),o>0&&t[o-1]==="!"){e.push({type:"image",attrs:{src:a[2]??"",alt:a[1]??""}});let u=e.at(-2);if(u?.type==="text"&&u.text?.endsWith("!"))u.text=u.text.slice(0,-1)}else e.push({type:"text",text:a[1]??"",marks:[{type:"link",attrs:{href:a[2]??""}}]});o+=a[0].length;continue}let s=w(i);if(s){r();for(let l of h(s.inner))e.push(y(l,s.mark));o+=s.length;continue}let d=/^`([^`]+)`/.exec(i);if(d){r(),e.push({type:"text",text:d[1]??"",marks:[{type:"code"}]}),o+=d[0].length;continue}n+=t[o],o+=1}return r(),e}function w(t){let e=[[/^\*\*\*([^*]+)\*\*\*/,{type:"bold"}],[/^\*\*([^*]+)\*\*/,{type:"bold"}],[/^__([^_]+)__/,{type:"bold"}],[/^~~([^~]+)~~/,{type:"strike"}],[/^\*([^*]+)\*/,{type:"italic"}],[/^_([^_]+)_/,{type:"italic"}]];for(let[n,r]of e){let o=n.exec(t);if(o)return{mark:r,inner:o[1]??"",length:o[0].length}}return null}function y(t,e){if(t.type!=="text")return t;return{...t,marks:[...t.marks??[],e]}}export{So,To,Co,Oo,Po,_o,$o,jo,Io,Eo,Mo,Do,qo,Lo,Fo,No,Uo,Jo,Wo,zo,Ho,Bo,Vo,he,En};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w}from"./index-rw0hze6x.js";async function ct(o,r={}){let{drainEvents:t=!0,...s}=r,i=await o.jobs.run(s);if(t)await o.drainEvents();return i}function bn(o){let{cms:r,interval:t=60000,immediate:s=!0,onReport:i,onError:e,signal:f,...R}=o,b=typeof t==="number"?t:w(t),a=!1,p=null,u,c=async()=>{let n=ct(r,R);p=n;try{let m=await n;return i?.(m),m}finally{p=null}},l=()=>{if(a)return;u=setTimeout(()=>{c().catch((n)=>{if(e)e(n);else console.error("[heyo-cms] job sweep failed:",n)}).finally(l)},b),u.unref?.()},d={runNow:()=>c(),async stop(){if(a=!0,u)clearTimeout(u);await p?.catch(()=>{return})},get running(){return!a}};if(f?.addEventListener("abort",()=>void d.stop(),{once:!0}),s)c().catch((n)=>{if(e)e(n);else console.error("[heyo-cms] job sweep failed:",n)}).finally(l);else l();return d}function wn(o,r={}){return async(t,s,i)=>{let e=ct(o,r);i?.waitUntil?.(e),await e}}
|
|
2
|
+
export{ct,bn,wn};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var l={ß:"ss",æ:"ae",œ:"oe",ø:"o",ð:"d",þ:"th",đ:"d",ł:"l",ı:"i",ĸ:"k",ŋ:"n",ŧ:"t"},a={а:"a",б:"b",в:"v",г:"h",ґ:"g",д:"d",е:"e",є:"ie",ж:"zh",з:"z",и:"y",і:"i",ї:"i",й:"i",к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ў:"u",ф:"f",х:"kh",ц:"ts",ч:"ch",ш:"sh",щ:"shch",ь:"",ю:"iu",я:"ia",ъ:"",ы:"y",э:"e",ё:"e"},u={α:"a",β:"v",γ:"g",δ:"d",ε:"e",ζ:"z",η:"i",θ:"th",ι:"i",κ:"k",λ:"l",μ:"m",ν:"n",ξ:"x",ο:"o",π:"p",ρ:"r",σ:"s",ς:"s",τ:"t",υ:"y",φ:"f",χ:"ch",ψ:"ps",ω:"o"},Mn="^[a-z0-9]+(?:-[a-z0-9]+)*$",p=new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$");function sn(e){return p.test(e)}function ye(e,n={}){let t=n.maxLength??96,c=Array.from(e.toLowerCase()).map((r)=>l[r]??a[r]??u[r.normalize("NFD").replace(/[\u0300-\u036f]/g,"")]??r).join("").normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/['’`]/g,"").replace(/[^a-z0-9]+/g,"-"),s=g(c);if(s.length<=t)return s;let i=s.slice(0,t),o=i.lastIndexOf("-");return o>=t/2?i.slice(0,o):g(i)}function g(e){let n=0,t=e.length;while(n<t&&e.charCodeAt(n)===45)n++;while(t>n&&e.charCodeAt(t-1)===45)t--;return e.slice(n,t)}
|
|
2
|
+
export{Mn,sn,ye};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e}from"./index-x72d1hzh.js";var ho="*";function jt(t,n){return`${t}:${n}`}function m(t){if(t==="*")return["*","*"];let n=t.indexOf(":");if(n===-1)return[t,"*"];return[t.slice(0,n),t.slice(n+1)]}function b(t,n){return t==="*"||t===n}function Wn(t,n){let[o,r]=m(t),[i,s]=m(n);return b(o,i)&&b(r,s)}function E(t,n){if(!t)return!1;return t.permissions.some((o)=>Wn(o,n))}function rt(t,n){let o=new Set;for(let r of t)for(let i of n[r]??[])o.add(i);return[...o].sort()}function It(t,n){let o=new Set;for(let r of t){let[i,s]=m(r);for(let a of n){let[c,f]=m(a),p=j(i,c),d=j(s,f);if(p===null||d===null)continue;o.add(p==="*"&&d==="*"?"*":`${p}:${d}`)}}return[...o].sort()}function j(t,n){if(t==="*")return n;if(n==="*")return t;return t===n?t:null}function Et(t){let n=new Set;for(let o of t){if(o==="*"||o.includes(":")){n.add(o);continue}switch(o){case"read":n.add("*:read");break;case"write":n.add("*:read"),n.add("*:create"),n.add("*:update");break;case"delete":n.add("*:delete");break;default:break}}return[...n].sort()}function _e(t){if(t==="*")return!0;if(["read","write","delete"].includes(t))return!0;return/^[a-z0-9_*-]+:[a-z0-9_*-]+$/.test(t)}function O(t,n={}){let o=n.locale??t.i18n.defaultLocale;return{locale:o,chain:[o,...C(t,o,n)]}}function C(t,n,o){if(o.fallbackLocale===!1)return[];if(typeof o.fallbackLocale==="string")return o.fallbackLocale===n?[]:[o.fallbackLocale];let r=t.i18n.defaultLocale;return r===n?[]:[r]}function fn(t,n){let o=h(t)?t:{};for(let r of n.chain){let i=o[r];if(i!==void 0&&i!==null)return{value:i,from:r}}return{value:null,from:null}}function J(t,n,o){let r=h(t)?{...t}:{};return r[n]=o,r}function h(t){return typeof t==="object"&&t!==null&&!Array.isArray(t)}var v=["id","revision","createdAt","updatedAt","updatedBy","deletedAt","purgeAfter","scheduledAt","scheduledPatch","_fallback","_localeFields"],w=new Set(v);function A(t,n,o){let r=u(t.data),i={},s={},a=[];for(let[c,f]of Object.entries(n.fields)){if(f.localized){let d=r[c];if(d&&typeof d==="object"&&!Array.isArray(d)&&Object.hasOwn(d,o.locale))a.push(c);let g=fn(d,o);if(i[c]=g.value??y(f),g.from!==null&&g.from!==o.locale)s[c]=g.from;continue}let p=r[c];i[c]=p===void 0?y(f):p}if(Object.values(n.fields).some((c)=>c.localized))i._localeFields=a;if(i.id=String(t.id),i.revision=hn(t.revision),i.createdAt=l(t.created_at),i.updatedAt=l(t.updated_at),i.updatedBy=t.updated_by===void 0?null:t.updated_by,i.deletedAt=l(t.deleted_at),i.purgeAfter=l(t.purge_after),i.scheduledAt=l(t.scheduled_at),i.scheduledPatch=je(t)?.data??null,Object.keys(s).length>0)i._fallback=s;return i}function $e(t,n,o,r){S(t,n);let i=r===void 0,s={...r??{}},a=[];for(let[c,f]of Object.entries(t.fields)){let p=n[c];if(p!==void 0){s[c]=f.localized?J(s[c],o.locale,p):p,a.push(c);continue}if(!i)continue;let d=y(f);if(s[c]=f.localized?d===null?{}:{[o.locale]:d}:d,d!==null)a.push(c)}return{data:s,touched:a}}function Je(t,n,o,r){let i={};for(let s of r){let a=t.fields[s];if(!a)continue;let c=a.localized?u(n[s])[o.locale]??null:n[s]??null;if(c===null&&a.required){i[s]="is required";continue}let f=a.schema.safeParse(c);if(!f.success)i[s]=V(f.error.issues[0])}if(Object.keys(i).length>0)throw e.validation(`${t.name}: ${Object.entries(i).map(([s,a])=>`${s} ${a}`).join(", ")}`,{fields:i})}function V(t){if(!t)return"is invalid";let n=t.path.map((r)=>typeof r==="number"?`#${r+1}`:String(r)).join(" ");if(!n)return t.message;let o=t.code==="invalid_type"&&/received (null|undefined)$/.test(t.message);return`${n}: ${o?"is required":t.message}`}function go(t,n,o){return Object.keys(t.fields).filter((r)=>!R(n[r],o[r]))}function yo(t){let n={};for(let[o,r]of Object.entries(t))n[k(o)]=r instanceof Date?r.toISOString():r instanceof Uint8Array?null:r;return n}function je(t){let n=t.scheduled_patch;if(n===null||n===void 0)return null;let o=u(n),r=u(o.data),i=typeof o.locale==="string"?o.locale:null;if(i===null)return null;return{data:r,locale:i,actor:L(o.actor)}}function L(t){if(typeof t!=="object"||t===null||Array.isArray(t))return null;let n=t;if(typeof n.id!=="string")return null;return{id:n.id,source:n.source==="api-key"?"api-key":"session",roles:x(n.roles),permissions:x(n.permissions)}}function x(t){return Array.isArray(t)?t.filter((n)=>typeof n==="string"):[]}function hn(t){let n=Number(t??1);return Number.isFinite(n)&&n>0?Math.trunc(n):1}function l(t){if(t===void 0||t===null)return null;if(t instanceof Date)return t.toISOString();return String(t)}function u(t){return typeof t==="object"&&t!==null&&!Array.isArray(t)?t:{}}function y(t){let n=t.defaultValue??t.column.default;return n===void 0?null:n}function S(t,n){let o=Object.keys(n).filter((r)=>!(r in t.fields)&&!w.has(r));if(o.length>0)throw e.validation(`${t.name} has no field ${o.map((r)=>`"${r}"`).join(", ")}`,{unknown:o})}function R(t,n){if(t===n)return!0;if(t===void 0||n===void 0)return!1;if(typeof t!=="object"||typeof n!=="object")return!1;return JSON.stringify(t)===JSON.stringify(n)}function k(t){return t.replace(/_([a-z0-9])/g,(n,o)=>o.toUpperCase())}
|
|
2
|
+
export{ho,jt,Wn,E,rt,It,Et,_e,O,fn,A,$e,Je,go,yo,je,hn,l,u};
|