@ourofoundation/ouro-js 3.8.1 → 3.8.3
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/chunk-64ZUBBP7.js +2 -0
- package/dist/chunk-64ZUBBP7.js.map +1 -0
- package/dist/chunk-ADLJ3UUW.cjs +2 -0
- package/dist/chunk-ADLJ3UUW.cjs.map +1 -0
- package/dist/chunk-AJ2O7ER6.js +2 -0
- package/dist/chunk-AJ2O7ER6.js.map +1 -0
- package/dist/{chunk-T6UO42TO.cjs → chunk-CIEATF7M.cjs} +2 -2
- package/dist/{chunk-T6UO42TO.cjs.map → chunk-CIEATF7M.cjs.map} +1 -1
- package/dist/chunk-GUEHIQ6T.cjs +2 -0
- package/dist/chunk-GUEHIQ6T.cjs.map +1 -0
- package/dist/chunk-LMRFVO4I.cjs +2 -0
- package/dist/chunk-LMRFVO4I.cjs.map +1 -0
- package/dist/chunk-MRUJUIPN.js +2 -0
- package/dist/chunk-MRUJUIPN.js.map +1 -0
- package/dist/chunk-OCMBP3U7.cjs +2 -0
- package/dist/chunk-OCMBP3U7.cjs.map +1 -0
- package/dist/chunk-PJLIO4PA.cjs +7 -0
- package/dist/chunk-PJLIO4PA.cjs.map +1 -0
- package/dist/chunk-Q4IXX6KS.js +7 -0
- package/dist/chunk-Q4IXX6KS.js.map +1 -0
- package/dist/chunk-XXFKHRNE.js +2 -0
- package/dist/chunk-XXFKHRNE.js.map +1 -0
- package/dist/{chunk-5CPECQKN.js → chunk-ZFARY5F4.js} +2 -2
- package/dist/{chunk-5CPECQKN.js.map → chunk-ZFARY5F4.js.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/schema/asset-filters.cjs +1 -1
- package/dist/schema/asset-filters.d.cts +2 -0
- package/dist/schema/asset-filters.d.ts +2 -0
- package/dist/schema/asset-filters.js +1 -1
- package/dist/schema/notifications.cjs +1 -1
- package/dist/schema/notifications.d.cts +128 -1
- package/dist/schema/notifications.d.ts +128 -1
- package/dist/schema/notifications.js +1 -1
- package/dist/schema/quests.cjs +1 -1
- package/dist/schema/quests.js +1 -1
- package/dist/utils/air/index.cjs +1 -1
- package/dist/utils/air/index.d.cts +23 -1
- package/dist/utils/air/index.d.ts +23 -1
- package/dist/utils/air/index.js +1 -1
- package/dist/utils/air/markdown-parser.cjs +1 -1
- package/dist/utils/air/markdown-parser.js +1 -1
- package/dist/utils/quest-submission.cjs +1 -1
- package/dist/utils/quest-submission.js +1 -1
- package/package.json +1 -1
- package/tests/markdown-parser.test.mjs +52 -0
- package/dist/chunk-5SC4M4E3.cjs +0 -2
- package/dist/chunk-5SC4M4E3.cjs.map +0 -1
- package/dist/chunk-CRUIBV5F.js +0 -2
- package/dist/chunk-CRUIBV5F.js.map +0 -1
- package/dist/chunk-EC376C5T.js +0 -2
- package/dist/chunk-EC376C5T.js.map +0 -1
- package/dist/chunk-EVQAA7RQ.cjs +0 -2
- package/dist/chunk-EVQAA7RQ.cjs.map +0 -1
- package/dist/chunk-KMENBGAB.js +0 -2
- package/dist/chunk-KMENBGAB.js.map +0 -1
- package/dist/chunk-KXYKN3TY.js +0 -7
- package/dist/chunk-KXYKN3TY.js.map +0 -1
- package/dist/chunk-LHCGBWFP.cjs +0 -2
- package/dist/chunk-LHCGBWFP.cjs.map +0 -1
- package/dist/chunk-NSKBXBRD.cjs +0 -7
- package/dist/chunk-NSKBXBRD.cjs.map +0 -1
- package/dist/chunk-O4LSX56P.js +0 -2
- package/dist/chunk-O4LSX56P.js.map +0 -1
- package/dist/chunk-U6XOT6XH.cjs +0 -2
- package/dist/chunk-U6XOT6XH.cjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {e}from'./chunk-RS5H4XDK.js';import {a}from'./chunk-33C7IDRP.js';import {record,string,object,uuid,union,optional,boolean}from'zod';function _(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=record(string(),object({asset_id:uuid(),asset_type:a})),T=union([uuid(),object({asset_id:uuid(),asset_type:optional(a)})]),E=record(string(),T),q=e.extend({required:optional(boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function K(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(_(t)){let i=Object.entries(t).filter(([,r])=>_(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function Q(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function j(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=Q(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=K(s),l=Object.keys(t),u=j(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,d;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let p=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=p.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((d=(u=p.file_type)!=null?u:p.type)!=null?d:"").toLowerCase().split("/")[0],c=t.fileType.toLowerCase();if(o&&c&&!o.includes(c)&&o!==c)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}export{P as a,T as b,E as c,q as d,K as e,Q as f,j as g,L as h,B as i,F as j,V as k,M as l,$ as m};//# sourceMappingURL=chunk-64ZUBBP7.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-64ZUBBP7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/quest-submission.ts"],"names":["isPlainObject","value","normalizeFileExtension","safe","normalizeFileExtensions","rawValues","entry","KeyedAssetRefsSchema","record","string","object","uuid","AssetTypeSchema","KeyedAssetInputValueSchema","union","optional","KeyedAssetInputSchema","QuestSubmissionAssetDeclarationSchema","RouteInputAssetDeclarationSchema","boolean","readDeclarationExtensions","declaration","readDeclarationFilter","getRouteInputDeclarationsFromRoute","route","_a","detail","inputs","entries","declarationToSubmissionDeclaration","extensions","filter","materializeContributorSubmissionAssets","routeInputs","pinnedKeys","pinned","out","key","getPrimaryDeclarationKey","declarations","primary","d","getSubmissionAssetShape","item","_b","materialized","declarationToPickerFilters","assetType","filters","fileType","assetMatchesDeclaration","asset","_c","_d","_e","_f","metadata","ext","type","expected","getPrimaryAssetRef","refs","ref","toRouteInputAssets"],"mappings":"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","file":"chunk-64ZUBBP7.js","sourcesContent":["import {\n object,\n string,\n record,\n optional,\n boolean,\n array,\n uuid,\n union,\n type z,\n} from \"zod\";\n\nimport { AssetTypeSchema } from \"../schema/common\";\nimport { RouteInputAssetDeclarationSchema } from \"../schema/services\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFileExtension(value: string | null | undefined): string | null {\n if (!value) return null;\n const normalized = value.replace(/^\\.+/, \"\").trim().toLowerCase();\n const safe = normalized.replace(/[^a-z0-9]/g, \"\");\n if (!safe || /^\\d+$/.test(safe) || safe.length > 12) return null;\n return safe;\n}\n\nfunction normalizeFileExtensions(\n value: string | string[] | null | undefined\n): string[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(/[\\s,]+/)\n : [];\n return Array.from(\n new Set(\n rawValues\n .map((entry) => normalizeFileExtension(entry))\n .filter((entry): entry is string => Boolean(entry))\n )\n );\n}\n\n/** Stored on entries and eval_static_inputs after server normalization. */\nexport const KeyedAssetRefsSchema = record(\n string(),\n object({\n asset_id: uuid(),\n asset_type: AssetTypeSchema,\n })\n);\n\n/** Accepted on POST /quests/:id/entries/create — server fills asset_type. */\nexport const KeyedAssetInputValueSchema = union([\n uuid(),\n object({\n asset_id: uuid(),\n asset_type: optional(AssetTypeSchema),\n }),\n]);\n\nexport const KeyedAssetInputSchema = record(\n string(),\n KeyedAssetInputValueSchema\n);\n\nexport const QuestSubmissionAssetDeclarationSchema =\n RouteInputAssetDeclarationSchema.extend({\n required: optional(boolean()).default(true),\n });\n\nexport type KeyedAssetRefs = z.infer<typeof KeyedAssetRefsSchema>;\nexport type KeyedAssetInput = z.infer<typeof KeyedAssetInputSchema>;\nexport type QuestSubmissionAssetDeclaration = z.infer<\n typeof QuestSubmissionAssetDeclarationSchema\n>;\n\nexport type AssetDeclarationPickerFilters = {\n assetType?: string;\n fileType?: string;\n extensions?: string[];\n hasConstraints: boolean;\n};\n\nexport type QuestSubmissionItemInput = {\n eval_route_id?: string | null;\n submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;\n eval_static_inputs?: KeyedAssetRefs | null;\n expected_asset_type?: string | null;\n};\n\nexport type RouteInputDeclarationLike = {\n asset_type?: string | null;\n primary?: boolean;\n input_filter?: string | null;\n filter?: string | null;\n file_extensions?: string[] | null;\n input_file_extensions?: string[] | null;\n};\n\nexport type RouteForSubmissionShape = {\n route?: {\n input_assets?: Record<string, RouteInputDeclarationLike> | null;\n input_type?: string | null;\n input_filter?: string | null;\n input_file_extensions?: string[] | null;\n } | null;\n} | null;\n\nfunction readDeclarationExtensions(\n declaration: RouteInputDeclarationLike\n): string[] {\n return normalizeFileExtensions([\n ...(Array.isArray(declaration.file_extensions)\n ? declaration.file_extensions\n : []),\n ...(Array.isArray(declaration.input_file_extensions)\n ? declaration.input_file_extensions\n : []),\n ].join(\",\"));\n}\n\nfunction readDeclarationFilter(\n declaration: RouteInputDeclarationLike\n): string | undefined {\n return declaration.input_filter || declaration.filter || undefined;\n}\n\n/** Route keyed inputs as a flat map (includes legacy input_type fallback). */\nexport function getRouteInputDeclarationsFromRoute(\n route: RouteForSubmissionShape\n): Record<string, RouteInputDeclarationLike> {\n const detail = route?.route;\n if (!detail) return {};\n\n const inputs = detail.input_assets;\n if (isPlainObject(inputs)) {\n const entries = Object.entries(inputs).filter(([, value]) =>\n isPlainObject(value)\n ) as [string, RouteInputDeclarationLike][];\n if (entries.length > 0) {\n return Object.fromEntries(entries);\n }\n }\n\n if (detail.input_type) {\n return {\n [detail.input_type]: {\n asset_type: detail.input_type,\n primary: true,\n input_filter: detail.input_filter,\n input_file_extensions: detail.input_file_extensions ?? null,\n },\n };\n }\n\n return {};\n}\n\nexport function declarationToSubmissionDeclaration(\n declaration: RouteInputDeclarationLike\n): QuestSubmissionAssetDeclaration {\n const extensions = readDeclarationExtensions(declaration);\n const filter = readDeclarationFilter(declaration);\n return {\n asset_type: declaration.asset_type as QuestSubmissionAssetDeclaration[\"asset_type\"],\n primary: declaration.primary,\n input_filter: (filter ?? null) as QuestSubmissionAssetDeclaration[\"input_filter\"],\n file_extensions: extensions.length > 0 ? extensions : null,\n required: true,\n };\n}\n\n/** Materialize contributor declarations from route inputs minus pinned keys. */\nexport function materializeContributorSubmissionAssets(\n routeInputs: Record<string, RouteInputDeclarationLike>,\n pinnedKeys: string[]\n): Record<string, QuestSubmissionAssetDeclaration> {\n const pinned = new Set(pinnedKeys);\n const out: Record<string, QuestSubmissionAssetDeclaration> = {};\n for (const [key, declaration] of Object.entries(routeInputs)) {\n if (pinned.has(key)) continue;\n out[key] = declarationToSubmissionDeclaration(declaration);\n }\n return out;\n}\n\nexport function getPrimaryDeclarationKey(\n declarations: Record<string, QuestSubmissionAssetDeclaration>\n): string | null {\n const entries = Object.entries(declarations);\n if (!entries.length) return null;\n const primary = entries.find(([, d]) => d.primary === true);\n if (primary) return primary[0];\n if (entries.length === 1) return entries[0][0];\n return entries[0][0];\n}\n\nexport function getSubmissionAssetShape(\n item: QuestSubmissionItemInput,\n route?: RouteForSubmissionShape | null\n): {\n contributorKeys: string[];\n declarations: Record<string, QuestSubmissionAssetDeclaration>;\n pinned: KeyedAssetRefs;\n} {\n const pinned: KeyedAssetRefs = item.eval_static_inputs ?? {};\n\n if (item.eval_route_id && route) {\n const routeInputs = getRouteInputDeclarationsFromRoute(route);\n const pinnedKeys = Object.keys(pinned);\n const materialized = materializeContributorSubmissionAssets(\n routeInputs,\n pinnedKeys\n );\n return {\n contributorKeys: Object.keys(materialized),\n declarations: materialized,\n pinned,\n };\n }\n\n const declarations = item.submission_assets ?? {};\n return {\n contributorKeys: Object.keys(declarations),\n declarations,\n pinned,\n };\n}\n\nexport function declarationToPickerFilters(\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): AssetDeclarationPickerFilters | null {\n if (!declaration) return null;\n const assetType = declaration.asset_type || undefined;\n if (!assetType) return null;\n\n const filters: AssetDeclarationPickerFilters = {\n assetType,\n hasConstraints: false,\n };\n\n if (assetType === \"file\") {\n const extensions = readDeclarationExtensions(declaration);\n if (extensions.length > 0) {\n filters.extensions = extensions;\n filters.hasConstraints = true;\n }\n const fileType = readDeclarationFilter(declaration);\n if (fileType) {\n filters.fileType = fileType;\n filters.hasConstraints = true;\n }\n }\n\n return filters;\n}\n\nexport function assetMatchesDeclaration(\n asset:\n | {\n assetType?: string | null;\n asset_type?: string | null;\n asset?: { metadata?: Record<string, unknown> } | null;\n }\n | null\n | undefined,\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): boolean {\n if (!declaration || !asset) return true;\n const filters = declarationToPickerFilters(declaration);\n if (!filters) return true;\n\n const assetType = asset.assetType ?? asset.asset_type;\n if (filters.assetType && assetType !== filters.assetType) return false;\n\n if (filters.assetType === \"file\") {\n const metadata = asset.asset?.metadata ?? {};\n if (filters.extensions && filters.extensions.length > 0) {\n const ext = String(metadata.extension ?? \"\").toLowerCase();\n if (!ext || !filters.extensions.includes(ext)) return false;\n }\n if (filters.fileType) {\n const type = String(metadata.file_type ?? metadata.type ?? \"\")\n .toLowerCase()\n .split(\"/\")[0];\n const expected = filters.fileType.toLowerCase();\n if (type && expected && !type.includes(expected) && type !== expected) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function getPrimaryAssetRef(\n refs: KeyedAssetRefs | null | undefined,\n declarations?: Record<string, QuestSubmissionAssetDeclaration> | null\n): { key: string; asset_id: string; asset_type: string } | null {\n if (!refs || !Object.keys(refs).length) return null;\n const key =\n (declarations && getPrimaryDeclarationKey(declarations)) ||\n Object.keys(refs)[0];\n const ref = refs[key];\n if (!ref) return null;\n return { key, asset_id: ref.asset_id, asset_type: ref.asset_type };\n}\n\nexport function toRouteInputAssets(\n refs: KeyedAssetRefs | null | undefined\n): Record<string, { assetId: string; assetType: string }> {\n if (!refs) return {};\n return Object.fromEntries(\n Object.entries(refs).map(([key, ref]) => [\n key,\n { assetId: ref.asset_id, assetType: ref.asset_type },\n ])\n );\n}\n\n/** @deprecated Use declarationToPickerFilters */\nexport type EvalSubmissionFilters = AssetDeclarationPickerFilters;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkXEA4DDOE_cjs=require('./chunk-XEA4DDOE.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');function _(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=zod.record(zod.string(),zod.object({asset_id:zod.uuid(),asset_type:chunkYFEGRZXL_cjs.a})),T=zod.union([zod.uuid(),zod.object({asset_id:zod.uuid(),asset_type:zod.optional(chunkYFEGRZXL_cjs.a)})]),E=zod.record(zod.string(),T),q=chunkXEA4DDOE_cjs.e.extend({required:zod.optional(zod.boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function K(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(_(t)){let i=Object.entries(t).filter(([,r])=>_(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function Q(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function j(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=Q(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=K(s),l=Object.keys(t),u=j(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,d;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let p=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=p.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((d=(u=p.file_type)!=null?u:p.type)!=null?d:"").toLowerCase().split("/")[0],c=t.fileType.toLowerCase();if(o&&c&&!o.includes(c)&&o!==c)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}exports.a=P;exports.b=T;exports.c=E;exports.d=q;exports.e=K;exports.f=Q;exports.g=j;exports.h=L;exports.i=B;exports.j=F;exports.k=V;exports.l=M;exports.m=$;//# sourceMappingURL=chunk-ADLJ3UUW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-ADLJ3UUW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/quest-submission.ts"],"names":["isPlainObject","value","normalizeFileExtension","safe","normalizeFileExtensions","rawValues","entry","KeyedAssetRefsSchema","record","string","object","uuid","AssetTypeSchema","KeyedAssetInputValueSchema","union","optional","KeyedAssetInputSchema","QuestSubmissionAssetDeclarationSchema","RouteInputAssetDeclarationSchema","boolean","readDeclarationExtensions","declaration","readDeclarationFilter","getRouteInputDeclarationsFromRoute","route","_a","detail","inputs","entries","declarationToSubmissionDeclaration","extensions","filter","materializeContributorSubmissionAssets","routeInputs","pinnedKeys","pinned","out","key","getPrimaryDeclarationKey","declarations","primary","d","getSubmissionAssetShape","item","_b","materialized","declarationToPickerFilters","assetType","filters","fileType","assetMatchesDeclaration","asset","_c","_d","_e","_f","metadata","ext","type","expected","getPrimaryAssetRef","refs","ref","toRouteInputAssets"],"mappings":"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","file":"chunk-ADLJ3UUW.cjs","sourcesContent":["import {\n object,\n string,\n record,\n optional,\n boolean,\n array,\n uuid,\n union,\n type z,\n} from \"zod\";\n\nimport { AssetTypeSchema } from \"../schema/common\";\nimport { RouteInputAssetDeclarationSchema } from \"../schema/services\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFileExtension(value: string | null | undefined): string | null {\n if (!value) return null;\n const normalized = value.replace(/^\\.+/, \"\").trim().toLowerCase();\n const safe = normalized.replace(/[^a-z0-9]/g, \"\");\n if (!safe || /^\\d+$/.test(safe) || safe.length > 12) return null;\n return safe;\n}\n\nfunction normalizeFileExtensions(\n value: string | string[] | null | undefined\n): string[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(/[\\s,]+/)\n : [];\n return Array.from(\n new Set(\n rawValues\n .map((entry) => normalizeFileExtension(entry))\n .filter((entry): entry is string => Boolean(entry))\n )\n );\n}\n\n/** Stored on entries and eval_static_inputs after server normalization. */\nexport const KeyedAssetRefsSchema = record(\n string(),\n object({\n asset_id: uuid(),\n asset_type: AssetTypeSchema,\n })\n);\n\n/** Accepted on POST /quests/:id/entries/create — server fills asset_type. */\nexport const KeyedAssetInputValueSchema = union([\n uuid(),\n object({\n asset_id: uuid(),\n asset_type: optional(AssetTypeSchema),\n }),\n]);\n\nexport const KeyedAssetInputSchema = record(\n string(),\n KeyedAssetInputValueSchema\n);\n\nexport const QuestSubmissionAssetDeclarationSchema =\n RouteInputAssetDeclarationSchema.extend({\n required: optional(boolean()).default(true),\n });\n\nexport type KeyedAssetRefs = z.infer<typeof KeyedAssetRefsSchema>;\nexport type KeyedAssetInput = z.infer<typeof KeyedAssetInputSchema>;\nexport type QuestSubmissionAssetDeclaration = z.infer<\n typeof QuestSubmissionAssetDeclarationSchema\n>;\n\nexport type AssetDeclarationPickerFilters = {\n assetType?: string;\n fileType?: string;\n extensions?: string[];\n hasConstraints: boolean;\n};\n\nexport type QuestSubmissionItemInput = {\n eval_route_id?: string | null;\n submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;\n eval_static_inputs?: KeyedAssetRefs | null;\n expected_asset_type?: string | null;\n};\n\nexport type RouteInputDeclarationLike = {\n asset_type?: string | null;\n primary?: boolean;\n input_filter?: string | null;\n filter?: string | null;\n file_extensions?: string[] | null;\n input_file_extensions?: string[] | null;\n};\n\nexport type RouteForSubmissionShape = {\n route?: {\n input_assets?: Record<string, RouteInputDeclarationLike> | null;\n input_type?: string | null;\n input_filter?: string | null;\n input_file_extensions?: string[] | null;\n } | null;\n} | null;\n\nfunction readDeclarationExtensions(\n declaration: RouteInputDeclarationLike\n): string[] {\n return normalizeFileExtensions([\n ...(Array.isArray(declaration.file_extensions)\n ? declaration.file_extensions\n : []),\n ...(Array.isArray(declaration.input_file_extensions)\n ? declaration.input_file_extensions\n : []),\n ].join(\",\"));\n}\n\nfunction readDeclarationFilter(\n declaration: RouteInputDeclarationLike\n): string | undefined {\n return declaration.input_filter || declaration.filter || undefined;\n}\n\n/** Route keyed inputs as a flat map (includes legacy input_type fallback). */\nexport function getRouteInputDeclarationsFromRoute(\n route: RouteForSubmissionShape\n): Record<string, RouteInputDeclarationLike> {\n const detail = route?.route;\n if (!detail) return {};\n\n const inputs = detail.input_assets;\n if (isPlainObject(inputs)) {\n const entries = Object.entries(inputs).filter(([, value]) =>\n isPlainObject(value)\n ) as [string, RouteInputDeclarationLike][];\n if (entries.length > 0) {\n return Object.fromEntries(entries);\n }\n }\n\n if (detail.input_type) {\n return {\n [detail.input_type]: {\n asset_type: detail.input_type,\n primary: true,\n input_filter: detail.input_filter,\n input_file_extensions: detail.input_file_extensions ?? null,\n },\n };\n }\n\n return {};\n}\n\nexport function declarationToSubmissionDeclaration(\n declaration: RouteInputDeclarationLike\n): QuestSubmissionAssetDeclaration {\n const extensions = readDeclarationExtensions(declaration);\n const filter = readDeclarationFilter(declaration);\n return {\n asset_type: declaration.asset_type as QuestSubmissionAssetDeclaration[\"asset_type\"],\n primary: declaration.primary,\n input_filter: (filter ?? null) as QuestSubmissionAssetDeclaration[\"input_filter\"],\n file_extensions: extensions.length > 0 ? extensions : null,\n required: true,\n };\n}\n\n/** Materialize contributor declarations from route inputs minus pinned keys. */\nexport function materializeContributorSubmissionAssets(\n routeInputs: Record<string, RouteInputDeclarationLike>,\n pinnedKeys: string[]\n): Record<string, QuestSubmissionAssetDeclaration> {\n const pinned = new Set(pinnedKeys);\n const out: Record<string, QuestSubmissionAssetDeclaration> = {};\n for (const [key, declaration] of Object.entries(routeInputs)) {\n if (pinned.has(key)) continue;\n out[key] = declarationToSubmissionDeclaration(declaration);\n }\n return out;\n}\n\nexport function getPrimaryDeclarationKey(\n declarations: Record<string, QuestSubmissionAssetDeclaration>\n): string | null {\n const entries = Object.entries(declarations);\n if (!entries.length) return null;\n const primary = entries.find(([, d]) => d.primary === true);\n if (primary) return primary[0];\n if (entries.length === 1) return entries[0][0];\n return entries[0][0];\n}\n\nexport function getSubmissionAssetShape(\n item: QuestSubmissionItemInput,\n route?: RouteForSubmissionShape | null\n): {\n contributorKeys: string[];\n declarations: Record<string, QuestSubmissionAssetDeclaration>;\n pinned: KeyedAssetRefs;\n} {\n const pinned: KeyedAssetRefs = item.eval_static_inputs ?? {};\n\n if (item.eval_route_id && route) {\n const routeInputs = getRouteInputDeclarationsFromRoute(route);\n const pinnedKeys = Object.keys(pinned);\n const materialized = materializeContributorSubmissionAssets(\n routeInputs,\n pinnedKeys\n );\n return {\n contributorKeys: Object.keys(materialized),\n declarations: materialized,\n pinned,\n };\n }\n\n const declarations = item.submission_assets ?? {};\n return {\n contributorKeys: Object.keys(declarations),\n declarations,\n pinned,\n };\n}\n\nexport function declarationToPickerFilters(\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): AssetDeclarationPickerFilters | null {\n if (!declaration) return null;\n const assetType = declaration.asset_type || undefined;\n if (!assetType) return null;\n\n const filters: AssetDeclarationPickerFilters = {\n assetType,\n hasConstraints: false,\n };\n\n if (assetType === \"file\") {\n const extensions = readDeclarationExtensions(declaration);\n if (extensions.length > 0) {\n filters.extensions = extensions;\n filters.hasConstraints = true;\n }\n const fileType = readDeclarationFilter(declaration);\n if (fileType) {\n filters.fileType = fileType;\n filters.hasConstraints = true;\n }\n }\n\n return filters;\n}\n\nexport function assetMatchesDeclaration(\n asset:\n | {\n assetType?: string | null;\n asset_type?: string | null;\n asset?: { metadata?: Record<string, unknown> } | null;\n }\n | null\n | undefined,\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): boolean {\n if (!declaration || !asset) return true;\n const filters = declarationToPickerFilters(declaration);\n if (!filters) return true;\n\n const assetType = asset.assetType ?? asset.asset_type;\n if (filters.assetType && assetType !== filters.assetType) return false;\n\n if (filters.assetType === \"file\") {\n const metadata = asset.asset?.metadata ?? {};\n if (filters.extensions && filters.extensions.length > 0) {\n const ext = String(metadata.extension ?? \"\").toLowerCase();\n if (!ext || !filters.extensions.includes(ext)) return false;\n }\n if (filters.fileType) {\n const type = String(metadata.file_type ?? metadata.type ?? \"\")\n .toLowerCase()\n .split(\"/\")[0];\n const expected = filters.fileType.toLowerCase();\n if (type && expected && !type.includes(expected) && type !== expected) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function getPrimaryAssetRef(\n refs: KeyedAssetRefs | null | undefined,\n declarations?: Record<string, QuestSubmissionAssetDeclaration> | null\n): { key: string; asset_id: string; asset_type: string } | null {\n if (!refs || !Object.keys(refs).length) return null;\n const key =\n (declarations && getPrimaryDeclarationKey(declarations)) ||\n Object.keys(refs)[0];\n const ref = refs[key];\n if (!ref) return null;\n return { key, asset_id: ref.asset_id, asset_type: ref.asset_type };\n}\n\nexport function toRouteInputAssets(\n refs: KeyedAssetRefs | null | undefined\n): Record<string, { assetId: string; assetType: string }> {\n if (!refs) return {};\n return Object.fromEntries(\n Object.entries(refs).map(([key, ref]) => [\n key,\n { assetId: ref.asset_id, assetType: ref.asset_type },\n ])\n );\n}\n\n/** @deprecated Use declarationToPickerFilters */\nexport type EvalSubmissionFilters = AssetDeclarationPickerFilters;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function $(e){return e==="default"?"card":e==="chart"?"preview":e==="preview"||e==="interactive"||e==="card"||e==="list"?e:"card"}function z(e){let s={};if(e.displayConfig&&(s=typeof e.displayConfig=="string"?JSON.parse(e.displayConfig):{...e.displayConfig}),s.visualizationId===void 0&&e.visualizationId&&(s.visualizationId=e.visualizationId),s.filters===void 0&&e.filters){let i=e.filters;s.filters=typeof i=="string"?JSON.parse(i):i;}return s}var v="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",T=new RegExp(`^(post|dataset|file|service|route|quest):(${v})$`,"i"),R=new RegExp(`^asset:(${v})$`,"i"),L=new RegExp(`^action:(${v})$`,"i"),w=new RegExp(`\\[(post|dataset|file|service|route|quest|asset|action):(${v})\\](?!\\()`,"gi"),x=new Set(["post","dataset","file","service","route","quest"]);function _(e){let s=T.exec(e);if(s){let a=s[1].toLowerCase();return x.has(a)?{id:s[2],assetType:a,legacy:false}:null}let i=R.exec(e);return i?{id:i[1],legacy:true}:null}function S(e){let s=L.exec(e);return s?{id:s[1]}:null}function m(e){if(!e)return [];let s=[],i=new RegExp(w.source,w.flags),a;for(;(a=i.exec(e))!==null;){let r=a[1].toLowerCase(),l=a[2],c=`${r}:${l}`;r==="action"?s.push({raw:a[0],href:c,id:l,action:true}):r==="asset"?s.push({raw:a[0],href:c,id:l,legacy:true}):x.has(r)&&s.push({raw:a[0],href:c,id:l,assetType:r,legacy:false});}return s}function D(e,s){let i;try{if(e.startsWith("/"))i=e;else {let d=new URL(e);if(s){let p=new URL(s).host;if(d.host!==p)return null}i=d.pathname;}}catch{return null}let a=i.match(/^\/(\w+)s\/([^/]+)\/([^/?#]+)/);if(!a)return null;let[,r,l,c]=a;return x.has(r)?{assetType:r,entity:decodeURIComponent(l),slug:decodeURIComponent(c)}:null}var k=e=>Array.isArray(e)?e.map(k):e!=null&&e.content?Array.isArray(e.content)?e.content.map(k).flat():k(e.content):e;function U(e,s){var E;if(!e||!(e!=null&&e.content))return {users:[],assets:[],actions:[],linkedAssets:[]};let i=e.content.map(k).flat(),a=i.filter(t=>t.type==="mention").map(t=>{var n,o,f;return {user_id:(n=t.attrs)==null?void 0:n.id,username:((o=t.attrs)==null?void 0:o.label)||((f=t.attrs)==null?void 0:f.username)}}).reduce((t,n)=>(t.some(o=>o.user_id&&n.user_id&&o.user_id===n.user_id||o.username&&n.username&&o.username===n.username)||t.push(n),t),[]),r=i.filter(t=>{var n,o;return t.type==="assetComponent"&&((n=t.attrs)==null?void 0:n.id)&&!((o=t.attrs)!=null&&o.partial)}).map(({attrs:t})=>({id:t.id,assetType:t.assetType,via:"embed"})).reduce((t,n)=>(t.some(o=>o.id===n.id)||t.push(n),t),[]),l=[],c=[],d=new Set(r.map(t=>t.id)),p=new Set,C=new Set,I=t=>{for(let n of m(t)){if("action"in n&&n.action){p.has(n.id)||(p.add(n.id),c.push({id:n.id,via:"link"}));continue}d.has(n.id)||(d.add(n.id),"legacy"in n&&n.legacy?r.push({id:n.id,via:"link",legacy:true}):"assetType"in n&&r.push({id:n.id,assetType:n.assetType,via:"link",legacy:false}));}};for(let t of i){if((t==null?void 0:t.type)!=="text")continue;let n=t.marks||[],o=n.some(u=>u.type==="code"),f=n.find(u=>u.type==="link");if((E=f==null?void 0:f.attrs)!=null&&E.href){let u=f.attrs.href,h=S(u);if(h){p.has(h.id)||(p.add(h.id),c.push({id:h.id,via:"link"}));continue}let A=_(u);if(A){let g=A.id;d.has(g)||(d.add(g),A.legacy?r.push({id:g,via:"link",legacy:true}):r.push({id:g,assetType:A.assetType,via:"link",legacy:false}));continue}let y=D(u,s==null?void 0:s.siteUrl);if(y){let g=`${y.assetType}:${y.entity}:${y.slug}`;C.has(g)||(C.add(g),l.push(y));}continue}!o&&typeof t.text=="string"&&I(t.text);}return {users:a,assets:r,actions:c,linkedAssets:l}}export{$ as a,z as b,_ as c,S as d,m as e,D as f,U as g};//# sourceMappingURL=chunk-AJ2O7ER6.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-AJ2O7ER6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/air/index.ts"],"names":["normalizeViewMode","raw","resolveDisplayConfig","attrs","base","UUID_RE","TYPED_ASSET_LINK_RE","LEGACY_ASSET_LINK_RE","ACTION_LINK_RE","ASSET_WIKI_LINK_RE","VALID_ASSET_TYPES","parseAssetLinkShorthand","href","typed","assetType","legacy","parseActionLinkShorthand","match","extractAssetWikiLinks","text","matches","re","kind","id","parseOuroAssetUrl","siteUrl","pathname","url","siteHost","entity","slug","extractContent","item","getReferencesInContent","json","options","_a","content","users","_b","_c","unique","u","assets","linkedAssets","actions","seenAssetIds","a","seenActionIds","seenLinkedKeys","addWikiRefs","wiki","marks","hasCodeMark","m","linkMark","actionShorthand","shorthand","parsed","key"],"mappings":"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","file":"chunk-AJ2O7ER6.js","sourcesContent":["import { Content } from \"../../schema/posts\";\nimport { Profile } from \"../../schema/users\";\n\nexport interface DataFilter {\n column: string;\n value: string;\n operator: string;\n active?: boolean;\n}\n\nexport interface DisplayConfig {\n /** Dataset: ID of a saved visualization to render instead of the default chart. */\n visualizationId?: string | null;\n /** Dataset: column filters applied to the data. */\n filters?: DataFilter[];\n /** Route: ID of a specific action to preview (status, logs, side-effect assets). */\n actionId?: string | null;\n /** Route: author-provided defaults for an interactive route form. */\n defaultValues?: Record<string, unknown>;\n}\n\n/**\n * Normalize legacy viewMode values to the current set.\n * \"chart\" → \"preview\", \"default\" → \"card\", anything else → \"card\".\n */\nexport function normalizeViewMode(\n raw: string | undefined | null\n): \"card\" | \"preview\" | \"interactive\" | \"list\" {\n if (raw === \"default\") return \"card\";\n if (raw === \"chart\") return \"preview\";\n if (\n raw === \"preview\" ||\n raw === \"interactive\" ||\n raw === \"card\" ||\n raw === \"list\"\n )\n return raw;\n return \"card\";\n}\n\n/**\n * Build a DisplayConfig from node/element attributes, handling the legacy\n * flat `visualizationId` / `filters` attrs and the new `displayConfig` object.\n * Prefers values inside `displayConfig` when present.\n */\nexport function resolveDisplayConfig(attrs: {\n displayConfig?: DisplayConfig | string | null;\n visualizationId?: string | null;\n filters?: DataFilter[] | string | null;\n}): DisplayConfig {\n let base: DisplayConfig = {};\n\n if (attrs.displayConfig) {\n base =\n typeof attrs.displayConfig === \"string\"\n ? JSON.parse(attrs.displayConfig)\n : { ...attrs.displayConfig };\n }\n\n // Fall back to legacy flat attrs when displayConfig doesn't carry them\n if (base.visualizationId === undefined && attrs.visualizationId) {\n base.visualizationId = attrs.visualizationId;\n }\n if (base.filters === undefined && attrs.filters) {\n const raw = attrs.filters;\n base.filters =\n typeof raw === \"string\" ? JSON.parse(raw) : raw;\n }\n\n return base;\n}\n\nexport interface InlineAssetAttrs {\n id: string;\n assetType: string;\n viewMode: \"card\" | \"preview\" | \"interactive\" | \"list\";\n displayConfig?: DisplayConfig | null;\n /** @deprecated Use displayConfig.filters */\n filters?: any;\n /** @deprecated Use displayConfig.visualizationId */\n visualizationId?: string | null;\n partial?: boolean;\n}\n\n/** Assets pulled from Air JSON: embedded blocks or link href shorthands. */\nexport type ExtractedContentAsset =\n | { id: string; assetType: string; via: \"embed\" }\n | { id: string; assetType: string; via: \"link\"; legacy: false }\n | { id: string; via: \"link\"; legacy: true };\n\ninterface LinkedAssetRef {\n assetType: string;\n entity: string;\n slug: string;\n}\n\n/** UUID v4 pattern for inline link hrefs */\nconst UUID_RE =\n \"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\";\n\n/** Shorthand link hrefs: `post:<uuid>`, `file:<uuid>`, … (preferred over legacy `asset:<uuid>`). */\nconst TYPED_ASSET_LINK_RE = new RegExp(\n `^(post|dataset|file|service|route|quest):(${UUID_RE})$`,\n \"i\"\n);\n\n/** @deprecated Prefer `post:<uuid>` etc.; still supported and resolved server-side. */\nconst LEGACY_ASSET_LINK_RE = new RegExp(`^asset:(${UUID_RE})$`, \"i\");\n\n/** Route action link hrefs: `action:<uuid>` → history page for that run. */\nconst ACTION_LINK_RE = new RegExp(`^action:(${UUID_RE})$`, \"i\");\n\n/**\n * Collapsed wiki-link form agents often write: `[dataset:<uuid>]` instead of\n * `[label](dataset:<uuid>)`. Negative lookahead skips real markdown links\n * whose label happens to be the shorthand (`[dataset:<uuid>](…)`).\n */\nconst ASSET_WIKI_LINK_RE = new RegExp(\n `\\\\[(post|dataset|file|service|route|quest|asset|action):(${UUID_RE})\\\\](?!\\\\()`,\n \"gi\"\n);\n\nconst VALID_ASSET_TYPES = new Set([\n \"post\",\n \"dataset\",\n \"file\",\n \"service\",\n \"route\",\n \"quest\",\n]);\n\nexport type ExtractedContentAction = { id: string; via: \"link\" };\n\n/**\n * Parse an inline link `href` for Ouro asset shorthands.\n * - `post:<uuid>`, `file:<uuid>`, … → typed (asset type known from prefix)\n * - `asset:<uuid>` → legacy (type resolved via DB when creating connections)\n */\nfunction parseAssetLinkShorthand(\n href: string\n):\n | { id: string; assetType: string; legacy: false }\n | { id: string; legacy: true }\n | null {\n const typed = TYPED_ASSET_LINK_RE.exec(href);\n if (typed) {\n const assetType = typed[1].toLowerCase();\n if (!VALID_ASSET_TYPES.has(assetType)) return null;\n return { id: typed[2], assetType, legacy: false };\n }\n const legacy = LEGACY_ASSET_LINK_RE.exec(href);\n if (legacy) return { id: legacy[1], legacy: true };\n return null;\n}\n\n/**\n * Parse an inline link `href` for a route action shorthand: `action:<uuid>`.\n * Actions are not assets — callers must resolve them separately.\n */\nfunction parseActionLinkShorthand(href: string): { id: string } | null {\n const match = ACTION_LINK_RE.exec(href);\n if (!match) return null;\n return { id: match[1] };\n}\n\nexport type AssetWikiLinkMatch =\n | { raw: string; href: string; id: string; assetType: string; legacy: false }\n | { raw: string; href: string; id: string; legacy: true }\n | { raw: string; href: string; id: string; action: true };\n\n/**\n * Find collapsed `[dataset:<uuid>]` / `[action:<uuid>]` spans in a text node.\n * Skips `[shorthand](href)` markdown links via the regex lookahead.\n */\nfunction extractAssetWikiLinks(text: string): AssetWikiLinkMatch[] {\n if (!text) return [];\n const matches: AssetWikiLinkMatch[] = [];\n const re = new RegExp(ASSET_WIKI_LINK_RE.source, ASSET_WIKI_LINK_RE.flags);\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const kind = match[1].toLowerCase();\n const id = match[2];\n const href = `${kind}:${id}`;\n if (kind === \"action\") {\n matches.push({ raw: match[0], href, id, action: true });\n } else if (kind === \"asset\") {\n matches.push({ raw: match[0], href, id, legacy: true });\n } else if (VALID_ASSET_TYPES.has(kind)) {\n matches.push({ raw: match[0], href, id, assetType: kind, legacy: false });\n }\n }\n return matches;\n}\n\n/**\n * Parse an Ouro site URL into its asset components.\n * Accepts both absolute URLs (https://ouro.foundation/posts/entity/slug)\n * and relative paths (/posts/entity/slug).\n */\nfunction parseOuroAssetUrl(\n href: string,\n siteUrl?: string\n): LinkedAssetRef | null {\n let pathname: string;\n try {\n if (href.startsWith(\"/\")) {\n pathname = href;\n } else {\n const url = new URL(href);\n if (siteUrl) {\n const siteHost = new URL(siteUrl).host;\n if (url.host !== siteHost) return null;\n }\n pathname = url.pathname;\n }\n } catch {\n return null;\n }\n\n // Pattern: /{assetType}s/{entity}/{slug}\n const match = pathname.match(\n /^\\/(\\w+)s\\/([^/]+)\\/([^/?#]+)/\n );\n if (!match) return null;\n\n const [, assetType, entity, slug] = match;\n if (!VALID_ASSET_TYPES.has(assetType)) return null;\n\n return { assetType, entity: decodeURIComponent(entity), slug: decodeURIComponent(slug) };\n}\n\nconst extractContent = (item: any): any => {\n if (Array.isArray(item)) return item.map(extractContent);\n if (item?.content) {\n if (Array.isArray(item.content))\n return item.content.map(extractContent).flat();\n else return extractContent(item.content);\n } else return item; // leaf\n};\n\nfunction getReferencesInContent(\n json: Content[\"json\"],\n options?: { siteUrl?: string }\n) {\n if (!json || !json?.content)\n return { users: [], assets: [], actions: [], linkedAssets: [] };\n const content = json.content.map(extractContent).flat();\n\n const users = content\n .filter((item: any) => item.type === \"mention\")\n .map((item: any) => ({\n user_id: item.attrs?.id,\n username: item.attrs?.label || item.attrs?.username,\n }))\n .reduce((unique: any[], item: any) => {\n if (\n !unique.some(\n (u) =>\n (u.user_id && item.user_id && u.user_id === item.user_id) ||\n (u.username && item.username && u.username === item.username)\n )\n ) {\n unique.push(item);\n }\n return unique;\n }, []) as Partial<Profile>[];\n\n const assets: ExtractedContentAsset[] = content\n .filter(\n (item: any) =>\n item.type === \"assetComponent\" && item.attrs?.id && !item.attrs?.partial\n )\n .map(({ attrs }: { attrs: InlineAssetAttrs }) => ({\n id: attrs.id,\n assetType: attrs.assetType,\n via: \"embed\" as const,\n }))\n .reduce((unique: ExtractedContentAsset[], item: ExtractedContentAsset) => {\n if (!unique.some((u) => u.id === item.id)) {\n unique.push(item);\n }\n return unique;\n }, []);\n\n // Extract asset / action references from link marks\n const linkedAssets: LinkedAssetRef[] = [];\n const actions: ExtractedContentAction[] = [];\n const seenAssetIds = new Set(assets.map((a) => a.id));\n const seenActionIds = new Set<string>();\n const seenLinkedKeys = new Set<string>();\n\n const addWikiRefs = (text: string) => {\n for (const wiki of extractAssetWikiLinks(text)) {\n if (\"action\" in wiki && wiki.action) {\n if (!seenActionIds.has(wiki.id)) {\n seenActionIds.add(wiki.id);\n actions.push({ id: wiki.id, via: \"link\" });\n }\n continue;\n }\n if (seenAssetIds.has(wiki.id)) continue;\n seenAssetIds.add(wiki.id);\n if (\"legacy\" in wiki && wiki.legacy) {\n assets.push({ id: wiki.id, via: \"link\", legacy: true });\n } else if (\"assetType\" in wiki) {\n assets.push({\n id: wiki.id,\n assetType: wiki.assetType,\n via: \"link\",\n legacy: false,\n });\n }\n }\n };\n\n for (const item of content) {\n if (item?.type !== \"text\") continue;\n const marks = item.marks || [];\n const hasCodeMark = marks.some((m: any) => m.type === \"code\");\n const linkMark = marks.find((m: any) => m.type === \"link\");\n\n if (linkMark?.attrs?.href) {\n const href: string = linkMark.attrs.href;\n\n const actionShorthand = parseActionLinkShorthand(href);\n if (actionShorthand) {\n if (!seenActionIds.has(actionShorthand.id)) {\n seenActionIds.add(actionShorthand.id);\n actions.push({ id: actionShorthand.id, via: \"link\" });\n }\n continue;\n }\n\n const shorthand = parseAssetLinkShorthand(href);\n if (shorthand) {\n const id = shorthand.id;\n if (!seenAssetIds.has(id)) {\n seenAssetIds.add(id);\n if (shorthand.legacy) {\n assets.push({ id, via: \"link\", legacy: true });\n } else {\n assets.push({\n id,\n assetType: shorthand.assetType,\n via: \"link\",\n legacy: false,\n });\n }\n }\n continue;\n }\n\n const parsed = parseOuroAssetUrl(href, options?.siteUrl);\n if (parsed) {\n const key = `${parsed.assetType}:${parsed.entity}:${parsed.slug}`;\n if (!seenLinkedKeys.has(key)) {\n seenLinkedKeys.add(key);\n linkedAssets.push(parsed);\n }\n }\n continue;\n }\n\n if (!hasCodeMark && typeof item.text === \"string\") {\n addWikiRefs(item.text);\n }\n }\n\n return {\n users,\n assets,\n actions,\n linkedAssets,\n };\n}\n\nexport {\n extractAssetWikiLinks,\n getReferencesInContent,\n parseActionLinkShorthand,\n parseAssetLinkShorthand,\n parseOuroAssetUrl,\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkADLJ3UUW_cjs=require('./chunk-ADLJ3UUW.cjs'),chunkRMMMRN4X_cjs=require('./chunk-RMMMRN4X.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');var w=zod.enum(["closable","continuous"]),E=zod.enum(["draft","open","closed","cancelled"]),l=zod.enum(["pending","in_progress","done","skipped"]),I=zod.enum(["btc","usd"]),q=zod.enum(["skipped","running","passed","failed","errored"]),k=zod.enum(["submitted","accepted","rejected"]),C=zod.enum(["desc","asc"]),T=zod.object({type:zod.string(),content:zod.optional(zod.array(zod.any())),attrs:zod.optional(zod.record(zod.string(),zod.any())),marks:zod.optional(zod.array(zod.any())),text:zod.optional(zod.string())}),d=zod.object({json:zod.object({type:zod.literal("doc"),content:zod.array(T)}),text:zod.string()}),A=zod.object({id:zod.uuid(),quest_id:zod.uuid(),description:d,status:l.default("pending"),auto_skipped:zod.optional(zod.nullable(zod.string().or(zod.any()))),status_before_auto_skip:zod.optional(zod.nullable(l)),sort_order:zod.number().default(0),type:zod.string().default("task"),created_by:zod.uuid(),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunkYFEGRZXL_cjs.a)),reward_xp:zod.number().int().nonnegative().default(0),reward_currency:I.default("btc"),reward_amount:zod.number().int().nonnegative().default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_categories_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),leaderboard_enabled:zod.optional(zod.boolean()).default(false),leaderboard_order:zod.optional(C).default("desc"),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkADLJ3UUW_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.a)),notes:zod.optional(zod.nullable(zod.string())),contributor_keys:zod.optional(zod.nullable(zod.array(zod.object({key:zod.string(),required:zod.boolean().default(true),filters:zod.object({assetType:zod.optional(zod.string()),fileType:zod.optional(zod.string()),extensions:zod.optional(zod.array(zod.string())),hasConstraints:zod.boolean().default(false)})})))),created_at:zod.string(),updated_at:zod.string()}),R=A,x=zod.object({description:zod.union([zod.string().min(1,{message:"Item description cannot be empty"}),d]),type:zod.optional(zod.string()).default("task"),sort_order:zod.optional(zod.number().int()),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunkYFEGRZXL_cjs.a)),reward_xp:zod.optional(zod.number().int().nonnegative()).default(0),reward_currency:zod.optional(I).default("btc"),reward_amount:zod.optional(zod.number().int().nonnegative()).default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_categories_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),leaderboard_enabled:zod.optional(zod.boolean()).default(false),leaderboard_order:zod.optional(C).default("desc"),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkADLJ3UUW_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.a)),notes:zod.optional(zod.nullable(zod.string()))}),U=zod.union([zod.string().min(1,{message:"Item description cannot be empty"}).transform(u=>x.parse({description:u})),x]),j=zod.object({type:w.default("closable"),status:E.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),closed_at:zod.optional(zod.nullable(zod.string()))}),O=chunkRMMMRN4X_cjs.f.extend({asset_type:zod.literal("quest").default("quest"),metadata:zod.optional(zod.nullable(chunkRMMMRN4X_cjs.b.partial())),quest:zod.optional(j.partial()),items:zod.optional(zod.array(R.partial())),progress:zod.optional(zod.object({total:zod.number(),resolved:zod.number(),remaining:zod.number(),items:zod.optional(zod.array(zod.object({id:zod.string(),status:l,waiting_on:zod.optional(zod.nullable(zod.string())),waiting_until:zod.optional(zod.nullable(zod.string())),waiting_check_every:zod.optional(zod.nullable(zod.string()))}).partial()))}))}),Z=chunkRMMMRN4X_cjs.h.extend({asset_type:zod.literal("quest").default("quest"),name:zod.optional(zod.nullable(zod.string())).default(null),description:zod.optional(zod.nullable(d)),type:w.default("closable"),status:E.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),items:zod.optional(zod.array(U)).default([])}).transform(u=>chunkRMMMRN4X_cjs.a(u)),F=O.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,items:true,progress:true,is_pinned_in_team:true}).extend({asset_type:zod.literal("quest").default("quest"),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(u=>chunkRMMMRN4X_cjs.a(u)),M=x.partial().extend({status:zod.optional(l)}),N=zod.object({id:zod.uuid(),quest_id:zod.uuid(),user_id:zod.uuid(),item_id:zod.optional(zod.nullable(zod.uuid())),asset_id:zod.optional(zod.nullable(zod.uuid())),asset_type:zod.optional(zod.nullable(chunkYFEGRZXL_cjs.a)),assets:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.a)),description:zod.optional(zod.nullable(d)),review:zod.optional(zod.nullable(d)),status:k,reviewer_id:zod.optional(zod.nullable(zod.uuid())),reviewed_at:zod.optional(zod.nullable(zod.string())),eval_action_id:zod.optional(zod.nullable(zod.uuid())),eval_score:zod.optional(zod.nullable(zod.number())),eval_category_scores:zod.optional(zod.nullable(zod.record(zod.string(),zod.number()))),eval_status:zod.optional(zod.nullable(q)),created_at:zod.string(),updated_at:zod.string()}),P=zod.object({item_id:zod.uuid(),assets:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.c)),description:zod.optional(zod.nullable(zod.union([zod.string(),d])))}),G=zod.object({status:zod.enum(["accepted","rejected"]),review:zod.optional(zod.nullable(zod.union([zod.string(),d])))});exports.a=w;exports.b=E;exports.c=l;exports.d=I;exports.e=q;exports.f=k;exports.g=C;exports.h=A;exports.i=R;exports.j=x;exports.k=U;exports.l=O;exports.m=Z;exports.n=F;exports.o=M;exports.p=N;exports.q=P;exports.r=G;//# sourceMappingURL=chunk-CIEATF7M.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-CIEATF7M.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","LeaderboardOrderSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","zodBoolean","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","QuestItemSchema","CreateQuestItemObjectSchema","union","CreateQuestItemSchema","description","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"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","file":"chunk-T6UO42TO.cjs","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n/** desc = higher scores rank first; asc = lower scores rank first */\nconst LeaderboardOrderSchema = zodEnum([\"desc\", \"asc\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: ContentSchema,\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_categories_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n leaderboard_enabled: optional(zodBoolean()).default(false),\n leaderboard_order: optional(LeaderboardOrderSchema).default(\"desc\"),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string or TipTap Content as a convenience —\n * a bare string is lifted into `{ description }` by the `union` below.\n * The backend normalizes either shape with `toContentFromMaybeMarkdown`.\n */\nconst CreateQuestItemObjectSchema = object({\n description: union([\n string().min(1, { message: \"Item description cannot be empty\" }),\n ContentSchema,\n ]),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_categories_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n leaderboard_enabled: optional(zodBoolean()).default(false),\n leaderboard_order: optional(LeaderboardOrderSchema).default(\"desc\"),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string()\n .min(1, { message: \"Item description cannot be empty\" })\n .transform((description) =>\n CreateQuestItemObjectSchema.parse({ description })\n ),\n CreateQuestItemObjectSchema,\n]);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // List and detail both nest specifics under `quest`. Detail also hoists\n // full items to the top level. Progress (counts + bar segments) is always\n // top-level `progress` on list and detail responses.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n resolved: number(),\n remaining: number(),\n // Lightweight per-item segments for progress bars (list + detail).\n items: optional(\n array(\n object({\n id: string(),\n status: QuestItemStatusSchema,\n waiting_on: optional(nullable(string())),\n waiting_until: optional(nullable(string())),\n waiting_check_every: optional(nullable(string())),\n }).partial()\n )\n ),\n })\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings, TipTap Content objects, or\n * full item objects — the backend `createQuestItems`/`createQuest` paths\n * already handle both shapes, and `CreateQuestItemSchema` normalizes strings\n * into `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n is_pinned_in_team: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_category_scores: optional(nullable(record(string(), number()))),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n LeaderboardOrderSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type LeaderboardOrder = z.infer<typeof LeaderboardOrderSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","LeaderboardOrderSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","zodBoolean","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","QuestItemSchema","CreateQuestItemObjectSchema","union","CreateQuestItemSchema","description","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"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","file":"chunk-CIEATF7M.cjs","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n/** desc = higher scores rank first; asc = lower scores rank first */\nconst LeaderboardOrderSchema = zodEnum([\"desc\", \"asc\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: ContentSchema,\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_categories_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n leaderboard_enabled: optional(zodBoolean()).default(false),\n leaderboard_order: optional(LeaderboardOrderSchema).default(\"desc\"),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string or TipTap Content as a convenience —\n * a bare string is lifted into `{ description }` by the `union` below.\n * The backend normalizes either shape with `toContentFromMaybeMarkdown`.\n */\nconst CreateQuestItemObjectSchema = object({\n description: union([\n string().min(1, { message: \"Item description cannot be empty\" }),\n ContentSchema,\n ]),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_categories_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n leaderboard_enabled: optional(zodBoolean()).default(false),\n leaderboard_order: optional(LeaderboardOrderSchema).default(\"desc\"),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string()\n .min(1, { message: \"Item description cannot be empty\" })\n .transform((description) =>\n CreateQuestItemObjectSchema.parse({ description })\n ),\n CreateQuestItemObjectSchema,\n]);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // List and detail both nest specifics under `quest`. Detail also hoists\n // full items to the top level. Progress (counts + bar segments) is always\n // top-level `progress` on list and detail responses.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n resolved: number(),\n remaining: number(),\n // Lightweight per-item segments for progress bars (list + detail).\n items: optional(\n array(\n object({\n id: string(),\n status: QuestItemStatusSchema,\n waiting_on: optional(nullable(string())),\n waiting_until: optional(nullable(string())),\n waiting_check_every: optional(nullable(string())),\n }).partial()\n )\n ),\n })\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings, TipTap Content objects, or\n * full item objects — the backend `createQuestItems`/`createQuest` paths\n * already handle both shapes, and `CreateQuestItemSchema` normalizes strings\n * into `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n is_pinned_in_team: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_category_scores: optional(nullable(record(string(), number()))),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n LeaderboardOrderSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type LeaderboardOrder = z.infer<typeof LeaderboardOrderSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');var m=zod.enum(["public","private","organization","monetized"]),d=zod.enum(["image","video","audio"]),u=zod.object({user:zod.optional(zod.uuid()),team:zod.optional(zod.uuid()),visibility:zod.optional(m),top_level_only:zod.optional(zod.boolean()),asset_type:zod.optional(zod.enum(["file","dataset"])),file_type:zod.optional(d),extension:zod.optional(zod.string()),license:zod.optional(zod.string()),method:zod.optional(chunkYFEGRZXL_cjs.l),status:zod.optional(chunkYFEGRZXL_cjs.j),source:zod.optional(chunkYFEGRZXL_cjs.k),has_reactions:zod.optional(zod.boolean()),has_comments:zod.optional(zod.boolean())}),S=zod.object({asset_type:zod.optional(zod.union([chunkYFEGRZXL_cjs.a,zod.array(chunkYFEGRZXL_cjs.a)])),user_id:zod.optional(zod.uuid()),org_id:zod.optional(zod.uuid()),team_id:zod.optional(zod.uuid()),visibility:zod.optional(zod.union([m,zod.array(m)])),license_id:zod.optional(zod.string()),source:zod.optional(chunkYFEGRZXL_cjs.k),top_level_only:zod.optional(zod.boolean()),method:zod.optional(chunkYFEGRZXL_cjs.l),status:zod.optional(chunkYFEGRZXL_cjs.j),exclude_user_id:zod.optional(zod.uuid()),exclude_org_ids:zod.optional(zod.array(zod.uuid())),exclude_team_id:zod.optional(zod.uuid()),exclude_team_ids:zod.optional(zod.array(zod.uuid()))}),F=zod.object({file_type:zod.optional(zod.string()),extension:zod.optional(zod.union([zod.string(),zod.array(zod.string())]))}).catchall(zod.optional(zod.union([zod.string(),zod.array(zod.string()),zod.boolean()])));exports.a=m;exports.b=d;exports.c=u;exports.d=S;exports.e=F;//# sourceMappingURL=chunk-GUEHIQ6T.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-GUEHIQ6T.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/asset-filters.ts"],"names":["AssetFilterVisibilitySchema","zodEnum","AssetFilterFileTypeSchema","AssetFiltersSchema","object","optional","uuid","boolean","string","HttpMethodSchema","StatusSchema","SourceSchema","AssetSearchFiltersSchema","union","AssetTypeSchema","array","AssetMetadataFiltersSchema"],"mappings":"sFAoBMA,IAAAA,CAAAA,CAA8BC,QAAQ,CAAA,CAC1C,QACA,CAAA,SAAA,CACA,cACA,CAAA,WACF,CAAC,CAAA,CAGKC,EAA4BD,QAAQ,CAAA,CAAC,OAAS,CAAA,OAAA,CAAS,OAAO,CAAC,EAO/DE,CAAqBC,CAAAA,UAAAA,CAAO,CAChC,IAAA,CAAMC,YAASC,CAAAA,QAAAA,EAAM,CACrB,CAAA,IAAA,CAAMD,YAASC,CAAAA,QAAAA,EAAM,CAAA,CACrB,UAAYD,CAAAA,YAAAA,CAASL,CAA2B,CAAA,CAChD,cAAgBK,CAAAA,YAAAA,CAASE,WAAQ,EAAC,EAElC,UAAYF,CAAAA,YAAAA,CAASJ,QAAQ,CAAA,CAAC,MAAQ,CAAA,SAAS,CAAC,CAAC,CAAA,CACjD,SAAWI,CAAAA,YAAAA,CAASH,CAAyB,CAAA,CAC7C,UAAWG,YAASG,CAAAA,UAAAA,EAAQ,CAAA,CAC5B,OAASH,CAAAA,YAAAA,CAASG,UAAO,EAAC,CAC1B,CAAA,MAAA,CAAQH,YAASI,CAAAA,mBAAgB,CACjC,CAAA,MAAA,CAAQJ,aAASK,mBAAY,CAAA,CAC7B,MAAQL,CAAAA,YAAAA,CAASM,mBAAY,CAAA,CAC7B,cAAeN,YAASE,CAAAA,WAAAA,EAAS,CAAA,CACjC,YAAcF,CAAAA,YAAAA,CAASE,aAAS,CAClC,CAAC,CAAA,CAMKK,CAA2BR,CAAAA,UAAAA,CAAO,CACtC,UAAA,CAAYC,YAASQ,CAAAA,SAAAA,CAAM,CAACC,mBAAAA,CAAiBC,SAAMD,CAAAA,mBAAe,CAAC,CAAC,CAAC,CACrE,CAAA,OAAA,CAAST,YAASC,CAAAA,QAAAA,EAAM,CACxB,CAAA,MAAA,CAAQD,YAASC,CAAAA,QAAAA,EAAM,CAAA,CACvB,QAASD,YAASC,CAAAA,QAAAA,EAAM,CAAA,CACxB,UAAYD,CAAAA,YAAAA,CACVQ,SAAM,CAAA,CAACb,CAA6Be,CAAAA,SAAAA,CAAMf,CAA2B,CAAC,CAAC,CACzE,EACA,UAAYK,CAAAA,YAAAA,CAASG,UAAO,EAAC,CAC7B,CAAA,MAAA,CAAQH,aAASM,mBAAY,CAAA,CAC7B,cAAgBN,CAAAA,YAAAA,CAASE,WAAQ,EAAC,EAClC,MAAQF,CAAAA,YAAAA,CAASI,mBAAgB,CAAA,CACjC,MAAQJ,CAAAA,YAAAA,CAASK,mBAAY,CAAA,CAE7B,eAAiBL,CAAAA,YAAAA,CAASC,QAAK,EAAC,CAChC,CAAA,eAAA,CAAiBD,aAASU,SAAMT,CAAAA,QAAAA,EAAM,CAAC,CAEvC,CAAA,eAAA,CAAiBD,aAASC,QAAK,EAAC,CAChC,CAAA,gBAAA,CAAkBD,YAASU,CAAAA,SAAAA,CAAMT,UAAM,CAAC,CAC1C,CAAC,CAMKU,CAAAA,CAAAA,CAA6BZ,UAAO,CAAA,CACxC,SAAWC,CAAAA,YAAAA,CAASG,UAAO,EAAC,CAC5B,CAAA,SAAA,CAAWH,aAASQ,SAAM,CAAA,CAACL,UAAO,EAAA,CAAGO,SAAMP,CAAAA,UAAAA,EAAQ,CAAC,CAAC,CAAC,CACxD,CAAC,CAAE,CAAA,QAAA,CAASH,aAASQ,SAAM,CAAA,CAACL,UAAO,EAAA,CAAGO,SAAMP,CAAAA,UAAAA,EAAQ,CAAA,CAAGD,WAAQ,EAAC,CAAC,CAAC,CAAC","file":"chunk-GUEHIQ6T.cjs","sourcesContent":["import {\n object,\n string,\n uuid,\n boolean,\n array,\n union,\n enum as zodEnum,\n optional,\n type z,\n} from \"zod\";\n\nimport {\n AssetTypeSchema,\n HttpMethodSchema,\n SourceSchema,\n StatusSchema,\n} from \"./common\";\n\n/** Filterable visibilities — excludes `inherit` (not a browse/search value). */\nconst AssetFilterVisibilitySchema = zodEnum([\n \"public\",\n \"private\",\n \"organization\",\n \"monetized\",\n]);\n\n/** UI file-category chips used in the assets filter bar. */\nconst AssetFilterFileTypeSchema = zodEnum([\"image\", \"video\", \"audio\"]);\n\n/**\n * Client/UI filter state for asset lists and the filter bar.\n * Short keys (`user`, `team`, `license`) map to API columns via\n * {@link toAssetSearchFilters}.\n */\nconst AssetFiltersSchema = object({\n user: optional(uuid()),\n team: optional(uuid()),\n visibility: optional(AssetFilterVisibilitySchema),\n top_level_only: optional(boolean()),\n /** Data-list subtype chip (file vs dataset). */\n asset_type: optional(zodEnum([\"file\", \"dataset\"])),\n file_type: optional(AssetFilterFileTypeSchema),\n extension: optional(string()),\n license: optional(string()),\n method: optional(HttpMethodSchema),\n status: optional(StatusSchema),\n source: optional(SourceSchema),\n has_reactions: optional(boolean()),\n has_comments: optional(boolean()),\n});\n\n/**\n * Wire-format `filters` object for `/search/assets` and related RPCs.\n * Uses DB/API column names (`user_id`, `team_id`, `license_id`).\n */\nconst AssetSearchFiltersSchema = object({\n asset_type: optional(union([AssetTypeSchema, array(AssetTypeSchema)])),\n user_id: optional(uuid()),\n org_id: optional(uuid()),\n team_id: optional(uuid()),\n visibility: optional(\n union([AssetFilterVisibilitySchema, array(AssetFilterVisibilitySchema)])\n ),\n license_id: optional(string()),\n source: optional(SourceSchema),\n top_level_only: optional(boolean()),\n method: optional(HttpMethodSchema),\n status: optional(StatusSchema),\n /** Server-side personal/global scoping helper. */\n exclude_user_id: optional(uuid()),\n exclude_org_ids: optional(array(uuid())),\n /** Hide a team (e.g. the global org's All team) from public/discover lists. */\n exclude_team_id: optional(uuid()),\n exclude_team_ids: optional(array(uuid())),\n});\n\n/**\n * Wire-format `metadata_filters` for file-oriented search\n * (`file_type`, `extension`, and arbitrary metadata keys).\n */\nconst AssetMetadataFiltersSchema = object({\n file_type: optional(string()),\n extension: optional(union([string(), array(string())])),\n}).catchall(optional(union([string(), array(string()), boolean()])));\n\nexport {\n AssetFilterVisibilitySchema,\n AssetFilterFileTypeSchema,\n AssetFiltersSchema,\n AssetSearchFiltersSchema,\n AssetMetadataFiltersSchema,\n};\n\nexport type AssetFilterVisibility = z.infer<typeof AssetFilterVisibilitySchema>;\nexport type AssetFilterFileType = z.infer<typeof AssetFilterFileTypeSchema>;\nexport type AssetFilters = z.infer<typeof AssetFiltersSchema>;\nexport type AssetSearchFilters = z.infer<typeof AssetSearchFiltersSchema>;\nexport type AssetMetadataFilters = z.infer<typeof AssetMetadataFiltersSchema>;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkYTCAK2AH_cjs=require('./chunk-YTCAK2AH.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');var ne=zod.enum(["follow","like","comment","reply","mention","reference","invite","payment","event","share","badge","reaction","deposit","action-complete","action-failed","quest-entry","quest-entry-accepted","quest-entry-eval-failed","onboarding-complete","onboarding-action-required","route-earnings-milestone","route-payout","ownership-transfer","content-moved","content-deleted","other"]),w=zod.object({assetId:zod.string(),assetType:chunkYFEGRZXL_cjs.a}),r=zod.object({assetId:zod.optional(zod.string()),assetType:zod.optional(chunkYFEGRZXL_cjs.a),id:zod.optional(zod.string()),asset_type:zod.optional(chunkYFEGRZXL_cjs.a),name:zod.optional(zod.nullable(zod.string())),user_id:zod.optional(zod.string()),preview:zod.optional(zod.any()),description:zod.optional(zod.any()),slug:zod.optional(zod.nullable(zod.string())),name_url_slug:zod.optional(zod.nullable(zod.string())),org_id:zod.optional(zod.string()),parent_id:zod.optional(zod.nullable(zod.string())),parent:zod.optional(zod.any()),user:zod.optional(zod.any()),organization:zod.optional(zod.any()),team:zod.optional(zod.any())}),S=zod.object({assetId:zod.string(),assetType:chunkYFEGRZXL_cjs.a}),_=zod.object({slug:zod.string(),assetType:chunkYFEGRZXL_cjs.a}),z=zod.object({name:zod.string(),description:zod.optional(zod.nullable(zod.string())),slug:zod.optional(zod.nullable(zod.string()))}),u=zod.object({id:zod.string(),name:zod.optional(zod.nullable(zod.string()))}),y=zod.object({id:zod.string(),asset_id:zod.optional(zod.nullable(zod.string())),asset_type:zod.optional(zod.nullable(zod.string())),asset_name:zod.optional(zod.nullable(zod.string()))}),i={text:zod.optional(zod.string())},E=zod.object({...i,asset:zod.optional(r),parent:zod.optional(S),root:zod.optional(_)}),C=zod.object({...i,asset:zod.optional(r),parent:zod.optional(S),root:zod.optional(_)}),x=C,I=zod.object({...i,asset:zod.optional(r),referencedAssetIds:zod.optional(zod.array(zod.string())),referencedAssets:zod.optional(zod.array(w)),referenceCount:zod.optional(zod.number())}),O=zod.object({...i,asset:zod.optional(r),reaction_label:zod.optional(zod.string()),reaction_verb:zod.optional(zod.string()),aggregate_count:zod.optional(zod.number())}),g=zod.object({...i,asset:zod.optional(r)}),P=g,Q=zod.object({...i}),B=zod.object({...i,organization:zod.optional(zod.object({id:zod.string(),name:zod.string()}))}),k=zod.object({...i,asset:zod.optional(r),currency:zod.optional(chunkYFEGRZXL_cjs.e),value:zod.optional(zod.number())}),F=zod.object({...i,value:zod.optional(zod.number())}),M=zod.object({...i,badge:zod.optional(z)}),N=zod.object({...i,status:zod.optional(zod.enum(["success","error","timed-out"])),duration:zod.optional(zod.number()),route:zod.optional(zod.object({id:zod.string(),name:zod.optional(zod.nullable(zod.string()))}))}),D=N,j=zod.object({...i,quest:zod.optional(u),entry:zod.optional(y)}),L=zod.object({...i,quest:zod.optional(u),entry:zod.optional(y),source:zod.optional(zod.enum(["review","eval"])),reviewer:zod.optional(zod.nullable(zod.object({id:zod.string(),username:zod.optional(zod.nullable(zod.string()))})))}),U=zod.object({...i,quest:zod.optional(u),entry:zod.optional(y),eval_status:zod.optional(zod.enum(["failed","errored"])),eval_score:zod.optional(zod.nullable(zod.number()))}),V=zod.object({...i}),Z=zod.object({...i,requirements:zod.optional(zod.array(zod.string()))}),G=zod.object({...i,milestone_cents:zod.optional(zod.number()),total_earnings_cents:zod.optional(zod.number())}),H=zod.object({...i,payout_cents:zod.optional(zod.number()),gross_cents:zod.optional(zod.number()),platform_fee_cents:zod.optional(zod.number()),assets:zod.optional(zod.any()),asset_names:zod.optional(zod.array(zod.string())),invoice_id:zod.optional(zod.string())}),v=zod.object({...i,team_id:zod.optional(zod.string()),team_name:zod.optional(zod.nullable(zod.string())),asset_name:zod.optional(zod.nullable(zod.string())),asset_type:zod.optional(zod.nullable(zod.string())),action:zod.optional(zod.string()),reason:zod.optional(zod.nullable(zod.string())),moderator_scope:zod.optional(zod.enum(["platform","team"]))}),J=v,K=zod.object({...i,event:zod.optional(zod.object({type:zod.enum(["success","error"])}))}),W=zod.object({...i,asset:zod.optional(r)}),X=zod.object({...i}),Y=zod.object({id:zod.uuid(),source_user_id:zod.uuid(),destination_user_id:zod.uuid(),org_id:zod.optional(zod.nullable(zod.uuid())),asset_id:zod.optional(zod.nullable(zod.uuid())),reaction_id:zod.optional(zod.nullable(zod.uuid())),action_id:zod.optional(zod.nullable(zod.uuid())),parent_asset_id:zod.optional(zod.nullable(zod.uuid())),root_asset_id:zod.optional(zod.nullable(zod.uuid())),viewed:zod.boolean(),created_at:zod.string(),last_updated:zod.string(),source_user:zod.optional(chunkYTCAK2AH_cjs.b.partial()),asset:zod.optional(r)}),o=(T,b)=>Y.extend({type:zod.literal(T),content:b}),oe=zod.discriminatedUnion("type",[o("follow",Q),o("like",W),o("comment",C),o("reply",x),o("mention",E),o("reference",I),o("invite",B),o("payment",k),o("event",K),o("share",g),o("badge",M),o("reaction",O),o("deposit",F),o("action-complete",N),o("action-failed",D),o("quest-entry",j),o("quest-entry-accepted",L),o("quest-entry-eval-failed",U),o("onboarding-complete",V),o("onboarding-action-required",Z),o("route-earnings-milestone",G),o("route-payout",H),o("ownership-transfer",P),o("content-moved",v),o("content-deleted",J),o("other",X)]);exports.A=J;exports.B=K;exports.C=oe;exports.a=ne;exports.b=w;exports.c=r;exports.d=S;exports.e=_;exports.f=E;exports.g=C;exports.h=x;exports.i=I;exports.j=O;exports.k=g;exports.l=P;exports.m=Q;exports.n=B;exports.o=k;exports.p=F;exports.q=M;exports.r=N;exports.s=j;exports.t=L;exports.u=U;exports.v=V;exports.w=Z;exports.x=G;exports.y=H;exports.z=v;//# sourceMappingURL=chunk-LMRFVO4I.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-LMRFVO4I.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/notifications.ts"],"names":["NotificationTypeSchema","zodEnum","NotificationAssetRefSchema","object","string","AssetTypeSchema","NotificationContentAssetSchema","optional","nullable","any","NotificationParentRefSchema","NotificationRootInfoSchema","NotificationBadgeContentSchema","NotificationQuestRefSchema","NotificationQuestEntryRefSchema","NotificationContentBase","MentionContentSchema","CommentContentSchema","ReplyContentSchema","ReferenceContentSchema","array","number","ReactionContentSchema","ShareContentSchema","OwnershipTransferContentSchema","FollowContentSchema","InviteContentSchema","PaymentContentSchema","PriceCurrencySchema","DepositContentSchema","BadgeContentSchema","ActionCompleteContentSchema","ActionFailedContentSchema","QuestEntryContentSchema","QuestEntryAcceptedContentSchema","QuestEntryEvalFailedContentSchema","OnboardingCompleteContentSchema","OnboardingActionRequiredContentSchema","RouteEarningsMilestoneContentSchema","RoutePayoutContentSchema","ContentMovedContentSchema","ContentDeletedContentSchema","EventContentSchema","LikeContentSchema","OtherContentSchema","NotificationRowBaseSchema","uuid","boolean","ProfileSchema","notificationVariant","type","content","literal","NotificationSchema","discriminatedUnion"],"mappings":"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","file":"chunk-LMRFVO4I.cjs","sourcesContent":["import {\n object,\n string,\n boolean,\n number,\n array,\n any,\n type z,\n enum as zodEnum,\n optional,\n nullable,\n uuid,\n literal,\n discriminatedUnion,\n} from \"zod\";\n\nimport { AssetTypeSchema, PriceCurrencySchema } from \"./common\";\nimport { ProfileSchema } from \"./users\";\n\nconst NotificationTypeSchema = zodEnum([\n \"follow\",\n \"like\",\n \"comment\",\n \"reply\",\n \"mention\",\n \"reference\",\n \"invite\",\n \"payment\",\n \"event\",\n \"share\",\n \"badge\",\n \"reaction\",\n \"deposit\",\n \"action-complete\",\n \"action-failed\",\n \"quest-entry\",\n \"quest-entry-accepted\",\n \"quest-entry-eval-failed\",\n \"onboarding-complete\",\n \"onboarding-action-required\",\n \"route-earnings-milestone\",\n \"route-payout\",\n \"ownership-transfer\",\n \"content-moved\",\n \"content-deleted\",\n \"other\",\n]);\n\n/** Stored pointer written when creating a notification. */\nconst NotificationAssetRefSchema = object({\n assetId: string(),\n assetType: AssetTypeSchema,\n});\n\n/**\n * `content.asset` is a ref at write time and a list-row asset after API\n * hydration (which replaces the ref and may attach `parent`).\n */\nconst NotificationContentAssetSchema = object({\n assetId: optional(string()),\n assetType: optional(AssetTypeSchema),\n id: optional(string()),\n asset_type: optional(AssetTypeSchema),\n name: optional(nullable(string())),\n user_id: optional(string()),\n preview: optional(any()),\n description: optional(any()),\n slug: optional(nullable(string())),\n name_url_slug: optional(nullable(string())),\n org_id: optional(string()),\n parent_id: optional(nullable(string())),\n parent: optional(any()),\n user: optional(any()),\n organization: optional(any()),\n team: optional(any()),\n});\n\nconst NotificationParentRefSchema = object({\n assetId: string(),\n assetType: AssetTypeSchema,\n});\n\nconst NotificationRootInfoSchema = object({\n slug: string(),\n assetType: AssetTypeSchema,\n});\n\nconst NotificationBadgeContentSchema = object({\n name: string(),\n description: optional(nullable(string())),\n slug: optional(nullable(string())),\n});\n\nconst NotificationQuestRefSchema = object({\n id: string(),\n name: optional(nullable(string())),\n});\n\nconst NotificationQuestEntryRefSchema = object({\n id: string(),\n asset_id: optional(nullable(string())),\n asset_type: optional(nullable(string())),\n asset_name: optional(nullable(string())),\n});\n\nconst NotificationContentBase = {\n text: optional(string()),\n};\n\nconst MentionContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n parent: optional(NotificationParentRefSchema),\n root: optional(NotificationRootInfoSchema),\n});\n\nconst CommentContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n parent: optional(NotificationParentRefSchema),\n root: optional(NotificationRootInfoSchema),\n});\n\nconst ReplyContentSchema = CommentContentSchema;\n\nconst ReferenceContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n referencedAssetIds: optional(array(string())),\n referencedAssets: optional(array(NotificationAssetRefSchema)),\n referenceCount: optional(number()),\n});\n\nconst ReactionContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n reaction_label: optional(string()),\n reaction_verb: optional(string()),\n aggregate_count: optional(number()),\n});\n\nconst ShareContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n});\n\nconst OwnershipTransferContentSchema = ShareContentSchema;\n\nconst FollowContentSchema = object({\n ...NotificationContentBase,\n});\n\nconst InviteContentSchema = object({\n ...NotificationContentBase,\n organization: optional(\n object({\n id: string(),\n name: string(),\n })\n ),\n});\n\nconst PaymentContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n currency: optional(PriceCurrencySchema),\n value: optional(number()),\n});\n\nconst DepositContentSchema = object({\n ...NotificationContentBase,\n value: optional(number()),\n});\n\nconst BadgeContentSchema = object({\n ...NotificationContentBase,\n badge: optional(NotificationBadgeContentSchema),\n});\n\nconst ActionCompleteContentSchema = object({\n ...NotificationContentBase,\n status: optional(zodEnum([\"success\", \"error\", \"timed-out\"])),\n duration: optional(number()),\n route: optional(\n object({\n id: string(),\n name: optional(nullable(string())),\n })\n ),\n});\n\nconst ActionFailedContentSchema = ActionCompleteContentSchema;\n\nconst QuestEntryContentSchema = object({\n ...NotificationContentBase,\n quest: optional(NotificationQuestRefSchema),\n entry: optional(NotificationQuestEntryRefSchema),\n});\n\nconst QuestEntryAcceptedContentSchema = object({\n ...NotificationContentBase,\n quest: optional(NotificationQuestRefSchema),\n entry: optional(NotificationQuestEntryRefSchema),\n source: optional(zodEnum([\"review\", \"eval\"])),\n reviewer: optional(\n nullable(\n object({\n id: string(),\n username: optional(nullable(string())),\n })\n )\n ),\n});\n\nconst QuestEntryEvalFailedContentSchema = object({\n ...NotificationContentBase,\n quest: optional(NotificationQuestRefSchema),\n entry: optional(NotificationQuestEntryRefSchema),\n eval_status: optional(zodEnum([\"failed\", \"errored\"])),\n eval_score: optional(nullable(number())),\n});\n\nconst OnboardingCompleteContentSchema = object({\n ...NotificationContentBase,\n});\n\nconst OnboardingActionRequiredContentSchema = object({\n ...NotificationContentBase,\n requirements: optional(array(string())),\n});\n\nconst RouteEarningsMilestoneContentSchema = object({\n ...NotificationContentBase,\n milestone_cents: optional(number()),\n total_earnings_cents: optional(number()),\n});\n\nconst RoutePayoutContentSchema = object({\n ...NotificationContentBase,\n payout_cents: optional(number()),\n gross_cents: optional(number()),\n platform_fee_cents: optional(number()),\n assets: optional(any()),\n asset_names: optional(array(string())),\n invoice_id: optional(string()),\n});\n\nconst ContentMovedContentSchema = object({\n ...NotificationContentBase,\n team_id: optional(string()),\n team_name: optional(nullable(string())),\n asset_name: optional(nullable(string())),\n asset_type: optional(nullable(string())),\n action: optional(string()),\n reason: optional(nullable(string())),\n moderator_scope: optional(zodEnum([\"platform\", \"team\"])),\n});\n\nconst ContentDeletedContentSchema = ContentMovedContentSchema;\n\nconst EventContentSchema = object({\n ...NotificationContentBase,\n event: optional(\n object({\n type: zodEnum([\"success\", \"error\"]),\n })\n ),\n});\n\nconst LikeContentSchema = object({\n ...NotificationContentBase,\n asset: optional(NotificationContentAssetSchema),\n});\n\nconst OtherContentSchema = object({\n ...NotificationContentBase,\n});\n\nconst NotificationRowBaseSchema = object({\n id: uuid(),\n source_user_id: uuid(),\n destination_user_id: uuid(),\n org_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n reaction_id: optional(nullable(uuid())),\n action_id: optional(nullable(uuid())),\n parent_asset_id: optional(nullable(uuid())),\n root_asset_id: optional(nullable(uuid())),\n viewed: boolean(),\n created_at: string(),\n last_updated: string(),\n /** Joined on list/read responses. */\n source_user: optional(ProfileSchema.partial()),\n /** Joined `assets` row for `asset_id` (not `content.asset`). */\n asset: optional(NotificationContentAssetSchema),\n});\n\nconst notificationVariant = <\n T extends z.infer<typeof NotificationTypeSchema>,\n C extends z.ZodType,\n>(\n type: T,\n content: C\n) =>\n NotificationRowBaseSchema.extend({\n type: literal(type),\n content,\n });\n\nconst NotificationSchema = discriminatedUnion(\"type\", [\n notificationVariant(\"follow\", FollowContentSchema),\n notificationVariant(\"like\", LikeContentSchema),\n notificationVariant(\"comment\", CommentContentSchema),\n notificationVariant(\"reply\", ReplyContentSchema),\n notificationVariant(\"mention\", MentionContentSchema),\n notificationVariant(\"reference\", ReferenceContentSchema),\n notificationVariant(\"invite\", InviteContentSchema),\n notificationVariant(\"payment\", PaymentContentSchema),\n notificationVariant(\"event\", EventContentSchema),\n notificationVariant(\"share\", ShareContentSchema),\n notificationVariant(\"badge\", BadgeContentSchema),\n notificationVariant(\"reaction\", ReactionContentSchema),\n notificationVariant(\"deposit\", DepositContentSchema),\n notificationVariant(\"action-complete\", ActionCompleteContentSchema),\n notificationVariant(\"action-failed\", ActionFailedContentSchema),\n notificationVariant(\"quest-entry\", QuestEntryContentSchema),\n notificationVariant(\"quest-entry-accepted\", QuestEntryAcceptedContentSchema),\n notificationVariant(\n \"quest-entry-eval-failed\",\n QuestEntryEvalFailedContentSchema\n ),\n notificationVariant(\"onboarding-complete\", OnboardingCompleteContentSchema),\n notificationVariant(\n \"onboarding-action-required\",\n OnboardingActionRequiredContentSchema\n ),\n notificationVariant(\n \"route-earnings-milestone\",\n RouteEarningsMilestoneContentSchema\n ),\n notificationVariant(\"route-payout\", RoutePayoutContentSchema),\n notificationVariant(\"ownership-transfer\", OwnershipTransferContentSchema),\n notificationVariant(\"content-moved\", ContentMovedContentSchema),\n notificationVariant(\"content-deleted\", ContentDeletedContentSchema),\n notificationVariant(\"other\", OtherContentSchema),\n]);\n\ntype Notification = z.infer<typeof NotificationSchema>;\ntype NotificationType = z.infer<typeof NotificationTypeSchema>;\ntype NotificationOfType<T extends NotificationType> = Extract<\n Notification,\n { type: T }\n>;\ntype NotificationContentAsset = z.infer<typeof NotificationContentAssetSchema>;\ntype NotificationAssetRef = z.infer<typeof NotificationAssetRefSchema>;\n\nexport {\n NotificationSchema,\n NotificationTypeSchema,\n NotificationAssetRefSchema,\n NotificationContentAssetSchema,\n NotificationParentRefSchema,\n NotificationRootInfoSchema,\n MentionContentSchema,\n CommentContentSchema,\n ReplyContentSchema,\n ReferenceContentSchema,\n ReactionContentSchema,\n ShareContentSchema,\n OwnershipTransferContentSchema,\n FollowContentSchema,\n InviteContentSchema,\n PaymentContentSchema,\n DepositContentSchema,\n BadgeContentSchema,\n ActionCompleteContentSchema,\n QuestEntryContentSchema,\n QuestEntryAcceptedContentSchema,\n QuestEntryEvalFailedContentSchema,\n OnboardingCompleteContentSchema,\n OnboardingActionRequiredContentSchema,\n RouteEarningsMilestoneContentSchema,\n RoutePayoutContentSchema,\n ContentMovedContentSchema,\n ContentDeletedContentSchema,\n EventContentSchema,\n};\nexport type {\n Notification,\n NotificationType,\n NotificationOfType,\n NotificationContentAsset,\n NotificationAssetRef,\n};\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {k,j,l,a}from'./chunk-33C7IDRP.js';import {enum as _enum,object,optional,boolean,string,uuid,array,union}from'zod';var m=_enum(["public","private","organization","monetized"]),d=_enum(["image","video","audio"]),u=object({user:optional(uuid()),team:optional(uuid()),visibility:optional(m),top_level_only:optional(boolean()),asset_type:optional(_enum(["file","dataset"])),file_type:optional(d),extension:optional(string()),license:optional(string()),method:optional(l),status:optional(j),source:optional(k),has_reactions:optional(boolean()),has_comments:optional(boolean())}),S=object({asset_type:optional(union([a,array(a)])),user_id:optional(uuid()),org_id:optional(uuid()),team_id:optional(uuid()),visibility:optional(union([m,array(m)])),license_id:optional(string()),source:optional(k),top_level_only:optional(boolean()),method:optional(l),status:optional(j),exclude_user_id:optional(uuid()),exclude_org_ids:optional(array(uuid())),exclude_team_id:optional(uuid()),exclude_team_ids:optional(array(uuid()))}),F=object({file_type:optional(string()),extension:optional(union([string(),array(string())]))}).catchall(optional(union([string(),array(string()),boolean()])));export{m as a,d as b,u as c,S as d,F as e};//# sourceMappingURL=chunk-MRUJUIPN.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-MRUJUIPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/asset-filters.ts"],"names":["AssetFilterVisibilitySchema","zodEnum","AssetFilterFileTypeSchema","AssetFiltersSchema","object","optional","uuid","boolean","string","HttpMethodSchema","StatusSchema","SourceSchema","AssetSearchFiltersSchema","union","AssetTypeSchema","array","AssetMetadataFiltersSchema"],"mappings":"0HAoBMA,IAAAA,CAAAA,CAA8BC,KAAQ,CAAA,CAC1C,QACA,CAAA,SAAA,CACA,cACA,CAAA,WACF,CAAC,CAAA,CAGKC,EAA4BD,KAAQ,CAAA,CAAC,OAAS,CAAA,OAAA,CAAS,OAAO,CAAC,EAO/DE,CAAqBC,CAAAA,MAAAA,CAAO,CAChC,IAAA,CAAMC,QAASC,CAAAA,IAAAA,EAAM,CACrB,CAAA,IAAA,CAAMD,QAASC,CAAAA,IAAAA,EAAM,CAAA,CACrB,UAAYD,CAAAA,QAAAA,CAASL,CAA2B,CAAA,CAChD,cAAgBK,CAAAA,QAAAA,CAASE,OAAQ,EAAC,EAElC,UAAYF,CAAAA,QAAAA,CAASJ,KAAQ,CAAA,CAAC,MAAQ,CAAA,SAAS,CAAC,CAAC,CAAA,CACjD,SAAWI,CAAAA,QAAAA,CAASH,CAAyB,CAAA,CAC7C,UAAWG,QAASG,CAAAA,MAAAA,EAAQ,CAAA,CAC5B,OAASH,CAAAA,QAAAA,CAASG,MAAO,EAAC,CAC1B,CAAA,MAAA,CAAQH,QAASI,CAAAA,CAAgB,CACjC,CAAA,MAAA,CAAQJ,SAASK,CAAY,CAAA,CAC7B,MAAQL,CAAAA,QAAAA,CAASM,CAAY,CAAA,CAC7B,cAAeN,QAASE,CAAAA,OAAAA,EAAS,CAAA,CACjC,YAAcF,CAAAA,QAAAA,CAASE,SAAS,CAClC,CAAC,CAAA,CAMKK,CAA2BR,CAAAA,MAAAA,CAAO,CACtC,UAAA,CAAYC,QAASQ,CAAAA,KAAAA,CAAM,CAACC,CAAAA,CAAiBC,KAAMD,CAAAA,CAAe,CAAC,CAAC,CAAC,CACrE,CAAA,OAAA,CAAST,QAASC,CAAAA,IAAAA,EAAM,CACxB,CAAA,MAAA,CAAQD,QAASC,CAAAA,IAAAA,EAAM,CAAA,CACvB,QAASD,QAASC,CAAAA,IAAAA,EAAM,CAAA,CACxB,UAAYD,CAAAA,QAAAA,CACVQ,KAAM,CAAA,CAACb,CAA6Be,CAAAA,KAAAA,CAAMf,CAA2B,CAAC,CAAC,CACzE,EACA,UAAYK,CAAAA,QAAAA,CAASG,MAAO,EAAC,CAC7B,CAAA,MAAA,CAAQH,SAASM,CAAY,CAAA,CAC7B,cAAgBN,CAAAA,QAAAA,CAASE,OAAQ,EAAC,EAClC,MAAQF,CAAAA,QAAAA,CAASI,CAAgB,CAAA,CACjC,MAAQJ,CAAAA,QAAAA,CAASK,CAAY,CAAA,CAE7B,eAAiBL,CAAAA,QAAAA,CAASC,IAAK,EAAC,CAChC,CAAA,eAAA,CAAiBD,SAASU,KAAMT,CAAAA,IAAAA,EAAM,CAAC,CAEvC,CAAA,eAAA,CAAiBD,SAASC,IAAK,EAAC,CAChC,CAAA,gBAAA,CAAkBD,QAASU,CAAAA,KAAAA,CAAMT,MAAM,CAAC,CAC1C,CAAC,CAMKU,CAAAA,CAAAA,CAA6BZ,MAAO,CAAA,CACxC,SAAWC,CAAAA,QAAAA,CAASG,MAAO,EAAC,CAC5B,CAAA,SAAA,CAAWH,SAASQ,KAAM,CAAA,CAACL,MAAO,EAAA,CAAGO,KAAMP,CAAAA,MAAAA,EAAQ,CAAC,CAAC,CAAC,CACxD,CAAC,CAAE,CAAA,QAAA,CAASH,SAASQ,KAAM,CAAA,CAACL,MAAO,EAAA,CAAGO,KAAMP,CAAAA,MAAAA,EAAQ,CAAA,CAAGD,OAAQ,EAAC,CAAC,CAAC,CAAC","file":"chunk-MRUJUIPN.js","sourcesContent":["import {\n object,\n string,\n uuid,\n boolean,\n array,\n union,\n enum as zodEnum,\n optional,\n type z,\n} from \"zod\";\n\nimport {\n AssetTypeSchema,\n HttpMethodSchema,\n SourceSchema,\n StatusSchema,\n} from \"./common\";\n\n/** Filterable visibilities — excludes `inherit` (not a browse/search value). */\nconst AssetFilterVisibilitySchema = zodEnum([\n \"public\",\n \"private\",\n \"organization\",\n \"monetized\",\n]);\n\n/** UI file-category chips used in the assets filter bar. */\nconst AssetFilterFileTypeSchema = zodEnum([\"image\", \"video\", \"audio\"]);\n\n/**\n * Client/UI filter state for asset lists and the filter bar.\n * Short keys (`user`, `team`, `license`) map to API columns via\n * {@link toAssetSearchFilters}.\n */\nconst AssetFiltersSchema = object({\n user: optional(uuid()),\n team: optional(uuid()),\n visibility: optional(AssetFilterVisibilitySchema),\n top_level_only: optional(boolean()),\n /** Data-list subtype chip (file vs dataset). */\n asset_type: optional(zodEnum([\"file\", \"dataset\"])),\n file_type: optional(AssetFilterFileTypeSchema),\n extension: optional(string()),\n license: optional(string()),\n method: optional(HttpMethodSchema),\n status: optional(StatusSchema),\n source: optional(SourceSchema),\n has_reactions: optional(boolean()),\n has_comments: optional(boolean()),\n});\n\n/**\n * Wire-format `filters` object for `/search/assets` and related RPCs.\n * Uses DB/API column names (`user_id`, `team_id`, `license_id`).\n */\nconst AssetSearchFiltersSchema = object({\n asset_type: optional(union([AssetTypeSchema, array(AssetTypeSchema)])),\n user_id: optional(uuid()),\n org_id: optional(uuid()),\n team_id: optional(uuid()),\n visibility: optional(\n union([AssetFilterVisibilitySchema, array(AssetFilterVisibilitySchema)])\n ),\n license_id: optional(string()),\n source: optional(SourceSchema),\n top_level_only: optional(boolean()),\n method: optional(HttpMethodSchema),\n status: optional(StatusSchema),\n /** Server-side personal/global scoping helper. */\n exclude_user_id: optional(uuid()),\n exclude_org_ids: optional(array(uuid())),\n /** Hide a team (e.g. the global org's All team) from public/discover lists. */\n exclude_team_id: optional(uuid()),\n exclude_team_ids: optional(array(uuid())),\n});\n\n/**\n * Wire-format `metadata_filters` for file-oriented search\n * (`file_type`, `extension`, and arbitrary metadata keys).\n */\nconst AssetMetadataFiltersSchema = object({\n file_type: optional(string()),\n extension: optional(union([string(), array(string())])),\n}).catchall(optional(union([string(), array(string()), boolean()])));\n\nexport {\n AssetFilterVisibilitySchema,\n AssetFilterFileTypeSchema,\n AssetFiltersSchema,\n AssetSearchFiltersSchema,\n AssetMetadataFiltersSchema,\n};\n\nexport type AssetFilterVisibility = z.infer<typeof AssetFilterVisibilitySchema>;\nexport type AssetFilterFileType = z.infer<typeof AssetFilterFileTypeSchema>;\nexport type AssetFilters = z.infer<typeof AssetFiltersSchema>;\nexport type AssetSearchFilters = z.infer<typeof AssetSearchFiltersSchema>;\nexport type AssetMetadataFilters = z.infer<typeof AssetMetadataFiltersSchema>;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function $(e){return e==="default"?"card":e==="chart"?"preview":e==="preview"||e==="interactive"||e==="card"||e==="list"?e:"card"}function z(e){let s={};if(e.displayConfig&&(s=typeof e.displayConfig=="string"?JSON.parse(e.displayConfig):{...e.displayConfig}),s.visualizationId===void 0&&e.visualizationId&&(s.visualizationId=e.visualizationId),s.filters===void 0&&e.filters){let i=e.filters;s.filters=typeof i=="string"?JSON.parse(i):i;}return s}var v="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",T=new RegExp(`^(post|dataset|file|service|route|quest):(${v})$`,"i"),R=new RegExp(`^asset:(${v})$`,"i"),L=new RegExp(`^action:(${v})$`,"i"),w=new RegExp(`\\[(post|dataset|file|service|route|quest|asset|action):(${v})\\](?!\\()`,"gi"),x=new Set(["post","dataset","file","service","route","quest"]);function _(e){let s=T.exec(e);if(s){let a=s[1].toLowerCase();return x.has(a)?{id:s[2],assetType:a,legacy:false}:null}let i=R.exec(e);return i?{id:i[1],legacy:true}:null}function S(e){let s=L.exec(e);return s?{id:s[1]}:null}function m(e){if(!e)return [];let s=[],i=new RegExp(w.source,w.flags),a;for(;(a=i.exec(e))!==null;){let r=a[1].toLowerCase(),l=a[2],c=`${r}:${l}`;r==="action"?s.push({raw:a[0],href:c,id:l,action:true}):r==="asset"?s.push({raw:a[0],href:c,id:l,legacy:true}):x.has(r)&&s.push({raw:a[0],href:c,id:l,assetType:r,legacy:false});}return s}function D(e,s){let i;try{if(e.startsWith("/"))i=e;else {let d=new URL(e);if(s){let p=new URL(s).host;if(d.host!==p)return null}i=d.pathname;}}catch{return null}let a=i.match(/^\/(\w+)s\/([^/]+)\/([^/?#]+)/);if(!a)return null;let[,r,l,c]=a;return x.has(r)?{assetType:r,entity:decodeURIComponent(l),slug:decodeURIComponent(c)}:null}var k=e=>Array.isArray(e)?e.map(k):e!=null&&e.content?Array.isArray(e.content)?e.content.map(k).flat():k(e.content):e;function U(e,s){var E;if(!e||!(e!=null&&e.content))return {users:[],assets:[],actions:[],linkedAssets:[]};let i=e.content.map(k).flat(),a=i.filter(t=>t.type==="mention").map(t=>{var n,o,f;return {user_id:(n=t.attrs)==null?void 0:n.id,username:((o=t.attrs)==null?void 0:o.label)||((f=t.attrs)==null?void 0:f.username)}}).reduce((t,n)=>(t.some(o=>o.user_id&&n.user_id&&o.user_id===n.user_id||o.username&&n.username&&o.username===n.username)||t.push(n),t),[]),r=i.filter(t=>{var n,o;return t.type==="assetComponent"&&((n=t.attrs)==null?void 0:n.id)&&!((o=t.attrs)!=null&&o.partial)}).map(({attrs:t})=>({id:t.id,assetType:t.assetType,via:"embed"})).reduce((t,n)=>(t.some(o=>o.id===n.id)||t.push(n),t),[]),l=[],c=[],d=new Set(r.map(t=>t.id)),p=new Set,C=new Set,I=t=>{for(let n of m(t)){if("action"in n&&n.action){p.has(n.id)||(p.add(n.id),c.push({id:n.id,via:"link"}));continue}d.has(n.id)||(d.add(n.id),"legacy"in n&&n.legacy?r.push({id:n.id,via:"link",legacy:true}):"assetType"in n&&r.push({id:n.id,assetType:n.assetType,via:"link",legacy:false}));}};for(let t of i){if((t==null?void 0:t.type)!=="text")continue;let n=t.marks||[],o=n.some(u=>u.type==="code"),f=n.find(u=>u.type==="link");if((E=f==null?void 0:f.attrs)!=null&&E.href){let u=f.attrs.href,h=S(u);if(h){p.has(h.id)||(p.add(h.id),c.push({id:h.id,via:"link"}));continue}let A=_(u);if(A){let g=A.id;d.has(g)||(d.add(g),A.legacy?r.push({id:g,via:"link",legacy:true}):r.push({id:g,assetType:A.assetType,via:"link",legacy:false}));continue}let y=D(u,s==null?void 0:s.siteUrl);if(y){let g=`${y.assetType}:${y.entity}:${y.slug}`;C.has(g)||(C.add(g),l.push(y));}continue}!o&&typeof t.text=="string"&&I(t.text);}return {users:a,assets:r,actions:c,linkedAssets:l}}exports.a=$;exports.b=z;exports.c=_;exports.d=S;exports.e=m;exports.f=D;exports.g=U;//# sourceMappingURL=chunk-OCMBP3U7.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-OCMBP3U7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/air/index.ts"],"names":["normalizeViewMode","raw","resolveDisplayConfig","attrs","base","UUID_RE","TYPED_ASSET_LINK_RE","LEGACY_ASSET_LINK_RE","ACTION_LINK_RE","ASSET_WIKI_LINK_RE","VALID_ASSET_TYPES","parseAssetLinkShorthand","href","typed","assetType","legacy","parseActionLinkShorthand","match","extractAssetWikiLinks","text","matches","re","kind","id","parseOuroAssetUrl","siteUrl","pathname","url","siteHost","entity","slug","extractContent","item","getReferencesInContent","json","options","_a","content","users","_b","_c","unique","u","assets","linkedAssets","actions","seenAssetIds","a","seenActionIds","seenLinkedKeys","addWikiRefs","wiki","marks","hasCodeMark","m","linkMark","actionShorthand","shorthand","parsed","key"],"mappings":"aAyBO,SAASA,CAAAA,CACdC,EAC6C,CAC7C,OAAIA,IAAQ,SAAkB,CAAA,MAAA,CAC1BA,CAAQ,GAAA,OAAA,CAAgB,SAE1BA,CAAAA,CAAAA,GAAQ,WACRA,CAAQ,GAAA,aAAA,EACRA,CAAQ,GAAA,MAAA,EACRA,CAAQ,GAAA,MAAA,CAEDA,EACF,MACT,CAOO,SAASC,CAAAA,CAAqBC,CAInB,CAAA,CAChB,IAAIC,CAAsB,CAAA,EAa1B,CAAA,GAXID,CAAM,CAAA,aAAA,GACRC,EACE,OAAOD,CAAAA,CAAM,aAAkB,EAAA,QAAA,CAC3B,IAAK,CAAA,KAAA,CAAMA,EAAM,aAAa,CAAA,CAC9B,CAAE,GAAGA,CAAM,CAAA,aAAc,GAI7BC,CAAK,CAAA,eAAA,GAAoB,MAAaD,EAAAA,CAAAA,CAAM,eAC9CC,GAAAA,CAAAA,CAAK,gBAAkBD,CAAM,CAAA,eAAA,CAAA,CAE3BC,CAAK,CAAA,OAAA,GAAY,MAAaD,EAAAA,CAAAA,CAAM,QAAS,CAC/C,IAAMF,CAAME,CAAAA,CAAAA,CAAM,OAClBC,CAAAA,CAAAA,CAAK,QACH,OAAOH,CAAAA,EAAQ,QAAW,CAAA,IAAA,CAAK,KAAMA,CAAAA,CAAG,EAAIA,EAChD,CAEA,OAAOG,CACT,CA2BA,IAAMC,EACJ,8DAGIC,CAAAA,CAAAA,CAAsB,IAAI,MAAA,CAC9B,CAA6CD,0CAAAA,EAAAA,CAAO,KACpD,GACF,CAAA,CAGME,CAAuB,CAAA,IAAI,MAAO,CAAA,CAAA,QAAA,EAAWF,CAAO,CAAM,EAAA,CAAA,CAAA,GAAG,CAG7DG,CAAAA,CAAAA,CAAiB,IAAI,MAAA,CAAO,YAAYH,CAAO,CAAA,EAAA,CAAA,CAAM,GAAG,CAAA,CAOxDI,CAAqB,CAAA,IAAI,OAC7B,CAA4DJ,yDAAAA,EAAAA,CAAO,CACnE,WAAA,CAAA,CAAA,IACF,CAEMK,CAAAA,CAAAA,CAAoB,IAAI,GAAI,CAAA,CAChC,MACA,CAAA,SAAA,CACA,MACA,CAAA,SAAA,CACA,QACA,OACF,CAAC,CASD,CAAA,SAASC,CACPC,CAAAA,CAAAA,CAIO,CACP,IAAMC,CAAAA,CAAQP,CAAoB,CAAA,IAAA,CAAKM,CAAI,CAAA,CAC3C,GAAIC,CAAO,CAAA,CACT,IAAMC,CAAAA,CAAYD,CAAM,CAAA,CAAC,EAAE,WAAY,EAAA,CACvC,OAAKH,CAAAA,CAAkB,GAAII,CAAAA,CAAS,EAC7B,CAAE,EAAA,CAAID,CAAM,CAAA,CAAC,CAAG,CAAA,SAAA,CAAAC,EAAW,MAAQ,CAAA,KAAM,CADF,CAAA,IAEhD,CACA,IAAMC,EAASR,CAAqB,CAAA,IAAA,CAAKK,CAAI,CAAA,CAC7C,OAAIG,CAAAA,CAAe,CAAE,EAAIA,CAAAA,CAAAA,CAAO,CAAC,CAAA,CAAG,MAAQ,CAAA,IAAK,EAC1C,IACT,CAMA,SAASC,CAAAA,CAAyBJ,CAAqC,CAAA,CACrE,IAAMK,CAAQT,CAAAA,CAAAA,CAAe,IAAKI,CAAAA,CAAI,CACtC,CAAA,OAAKK,EACE,CAAE,EAAA,CAAIA,CAAM,CAAA,CAAC,CAAE,CAAA,CADH,IAErB,CAWA,SAASC,CAAsBC,CAAAA,CAAAA,CAAoC,CACjE,GAAI,CAACA,CAAM,CAAA,OAAO,EAAC,CACnB,IAAMC,CAAAA,CAAgC,EAChCC,CAAAA,CAAAA,CAAK,IAAI,MAAA,CAAOZ,CAAmB,CAAA,MAAA,CAAQA,EAAmB,KAAK,CAAA,CACrEQ,CACJ,CAAA,KAAA,CAAQA,CAAQI,CAAAA,CAAAA,CAAG,KAAKF,CAAI,CAAA,IAAO,IAAM,EAAA,CACvC,IAAMG,CAAAA,CAAOL,EAAM,CAAC,CAAA,CAAE,WAAY,EAAA,CAC5BM,CAAKN,CAAAA,CAAAA,CAAM,CAAC,CACZL,CAAAA,CAAAA,CAAO,CAAGU,EAAAA,CAAI,CAAIC,CAAAA,EAAAA,CAAE,GACtBD,CAAS,GAAA,QAAA,CACXF,CAAQ,CAAA,IAAA,CAAK,CAAE,GAAA,CAAKH,EAAM,CAAC,CAAA,CAAG,IAAAL,CAAAA,CAAAA,CAAM,EAAAW,CAAAA,CAAAA,CAAI,OAAQ,IAAK,CAAC,CAC7CD,CAAAA,CAAAA,GAAS,OAClBF,CAAAA,CAAAA,CAAQ,KAAK,CAAE,GAAA,CAAKH,CAAM,CAAA,CAAC,CAAG,CAAA,IAAA,CAAAL,EAAM,EAAAW,CAAAA,CAAAA,CAAI,MAAQ,CAAA,IAAK,CAAC,CAAA,CAC7Cb,EAAkB,GAAIY,CAAAA,CAAI,CACnCF,EAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAE,IAAKH,CAAM,CAAA,CAAC,CAAG,CAAA,IAAA,CAAAL,CAAM,CAAA,EAAA,CAAAW,EAAI,SAAWD,CAAAA,CAAAA,CAAM,MAAQ,CAAA,KAAM,CAAC,EAE5E,CACA,OAAOF,CACT,CAOA,SAASI,CACPZ,CAAAA,CAAAA,CACAa,EACuB,CACvB,IAAIC,CACJ,CAAA,GAAI,CACF,GAAId,EAAK,UAAW,CAAA,GAAG,CACrBc,CAAAA,CAAAA,CAAWd,CACN,CAAA,KAAA,CACL,IAAMe,CAAM,CAAA,IAAI,GAAIf,CAAAA,CAAI,CACxB,CAAA,GAAIa,EAAS,CACX,IAAMG,CAAW,CAAA,IAAI,GAAIH,CAAAA,CAAO,EAAE,IAClC,CAAA,GAAIE,CAAI,CAAA,IAAA,GAASC,CAAU,CAAA,OAAO,IACpC,CACAF,CAAAA,CAAWC,CAAI,CAAA,SACjB,CACF,CAAA,KAAQ,CACN,OAAO,IACT,CAGA,IAAMV,CAAQS,CAAAA,CAAAA,CAAS,MACrB,+BACF,CAAA,CACA,GAAI,CAACT,CAAO,CAAA,OAAO,KAEnB,GAAM,EAAGH,CAAAA,CAAWe,CAAQC,CAAAA,CAAI,EAAIb,CACpC,CAAA,OAAKP,CAAkB,CAAA,GAAA,CAAII,CAAS,CAAA,CAE7B,CAAE,SAAAA,CAAAA,CAAAA,CAAW,MAAQ,CAAA,kBAAA,CAAmBe,CAAM,CAAA,CAAG,KAAM,kBAAmBC,CAAAA,CAAI,CAAE,CAAA,CAFzC,IAGhD,CAEA,IAAMC,CAAkBC,CAAAA,CAAAA,EAClB,KAAM,CAAA,OAAA,CAAQA,CAAI,CAAA,CAAUA,EAAK,GAAID,CAAAA,CAAc,CACnDC,CAAAA,CAAAA,EAAA,IAAAA,EAAAA,CAAAA,CAAM,QACJ,KAAM,CAAA,OAAA,CAAQA,CAAK,CAAA,OAAO,CACrBA,CAAAA,CAAAA,CAAK,QAAQ,GAAID,CAAAA,CAAc,CAAE,CAAA,IAAA,EAC9BA,CAAAA,CAAAA,CAAeC,EAAK,OAAO,CAAA,CAC3BA,CAGhB,CAAA,SAASC,CACPC,CAAAA,CAAAA,CACAC,EACA,CAnPF,IAAAC,CAoPE,CAAA,GAAI,CAACF,CAAAA,EAAQ,EAACA,CAAA,EAAA,IAAA,EAAAA,CAAM,CAAA,OAAA,CAAA,CAClB,OAAO,CAAE,MAAO,EAAC,CAAG,OAAQ,EAAC,CAAG,QAAS,EAAC,CAAG,YAAc,CAAA,EAAG,CAAA,CAChE,IAAMG,CAAUH,CAAAA,CAAAA,CAAK,OAAQ,CAAA,GAAA,CAAIH,CAAc,CAAA,CAAE,MAE3CO,CAAAA,CAAAA,CAAQD,CACX,CAAA,MAAA,CAAQL,CAAcA,EAAAA,CAAAA,CAAK,OAAS,SAAS,CAAA,CAC7C,GAAKA,CAAAA,CAAAA,EAAW,CA1PrB,IAAAI,EAAAG,CAAAC,CAAAA,CAAAA,CA0PyB,OACnB,CAAA,OAAA,CAAA,CAASJ,CAAAJ,CAAAA,CAAAA,CAAK,QAAL,IAAAI,CAAAA,MAAAA,CAAAA,CAAAA,CAAY,EACrB,CAAA,QAAA,CAAA,CAAA,CAAUG,CAAAP,CAAAA,CAAAA,CAAK,QAAL,IAAAO,CAAAA,MAAAA,CAAAA,CAAAA,CAAY,KAASC,IAAAA,CAAAA,CAAAA,CAAAR,CAAK,CAAA,KAAA,GAAL,YAAAQ,CAAY,CAAA,QAAA,CAC7C,CAAE,CAAA,CAAA,CACD,MAAO,CAAA,CAACC,EAAeT,CAEnBS,IAAAA,CAAAA,CAAO,IACLC,CAAAA,CAAAA,EACEA,CAAE,CAAA,OAAA,EAAWV,EAAK,OAAWU,EAAAA,CAAAA,CAAE,OAAYV,GAAAA,CAAAA,CAAK,OAChDU,EAAAA,CAAAA,CAAE,UAAYV,CAAK,CAAA,QAAA,EAAYU,CAAE,CAAA,QAAA,GAAaV,CAAK,CAAA,QACxD,GAEAS,CAAO,CAAA,IAAA,CAAKT,CAAI,CAAA,CAEXS,CACN,CAAA,CAAA,EAAE,CAEDE,CAAAA,CAAAA,CAAkCN,CACrC,CAAA,MAAA,CACEL,CAAW,EAAA,CA7QlB,IAAAI,CAAAG,CAAAA,CAAAA,CA8QQ,OAAAP,CAAAA,CAAK,IAAS,GAAA,gBAAA,GAAA,CAAoBI,EAAAJ,CAAK,CAAA,KAAA,GAAL,IAAAI,CAAAA,MAAAA,CAAAA,CAAAA,CAAY,EAAM,CAAA,EAAA,EAAA,CAACG,EAAAP,CAAK,CAAA,KAAA,GAAL,IAAAO,EAAAA,CAAAA,CAAY,OACrE,CAAA,CAAA,CAAA,CACC,IAAI,CAAC,CAAE,KAAApC,CAAAA,CAAM,CAAoC,IAAA,CAChD,GAAIA,CAAM,CAAA,EAAA,CACV,SAAWA,CAAAA,CAAAA,CAAM,SACjB,CAAA,GAAA,CAAK,OACP,CAAE,CAAA,CAAA,CACD,MAAO,CAAA,CAACsC,CAAiCT,CAAAA,CAAAA,IACnCS,EAAO,IAAMC,CAAAA,CAAAA,EAAMA,CAAE,CAAA,EAAA,GAAOV,CAAK,CAAA,EAAE,GACtCS,CAAO,CAAA,IAAA,CAAKT,CAAI,CAAA,CAEXS,CACN,CAAA,CAAA,EAAE,CAGDG,CAAAA,CAAAA,CAAiC,EAAC,CAClCC,CAAoC,CAAA,GACpCC,CAAe,CAAA,IAAI,GAAIH,CAAAA,CAAAA,CAAO,GAAKI,CAAAA,CAAAA,EAAMA,EAAE,EAAE,CAAC,CAC9CC,CAAAA,CAAAA,CAAgB,IAAI,GAAA,CACpBC,EAAiB,IAAI,GAAA,CAErBC,CAAe/B,CAAAA,CAAAA,EAAiB,CACpC,IAAA,IAAWgC,KAAQjC,CAAsBC,CAAAA,CAAI,CAAG,CAAA,CAC9C,GAAI,QAAA,GAAYgC,GAAQA,CAAK,CAAA,MAAA,CAAQ,CAC9BH,CAAAA,CAAc,GAAIG,CAAAA,CAAAA,CAAK,EAAE,CAC5BH,GAAAA,CAAAA,CAAc,GAAIG,CAAAA,CAAAA,CAAK,EAAE,CAAA,CACzBN,EAAQ,IAAK,CAAA,CAAE,EAAIM,CAAAA,CAAAA,CAAK,EAAI,CAAA,GAAA,CAAK,MAAO,CAAC,CAAA,CAAA,CAE3C,QACF,CACIL,CAAa,CAAA,GAAA,CAAIK,EAAK,EAAE,CAAA,GAC5BL,CAAa,CAAA,GAAA,CAAIK,CAAK,CAAA,EAAE,EACpB,QAAYA,GAAAA,CAAAA,EAAQA,CAAK,CAAA,MAAA,CAC3BR,CAAO,CAAA,IAAA,CAAK,CAAE,EAAIQ,CAAAA,CAAAA,CAAK,EAAI,CAAA,GAAA,CAAK,MAAQ,CAAA,MAAA,CAAQ,IAAK,CAAC,CAAA,CAC7C,WAAeA,GAAAA,CAAAA,EACxBR,CAAO,CAAA,IAAA,CAAK,CACV,EAAIQ,CAAAA,CAAAA,CAAK,EACT,CAAA,SAAA,CAAWA,CAAK,CAAA,SAAA,CAChB,IAAK,MACL,CAAA,MAAA,CAAQ,KACV,CAAC,CAEL,EAAA,CACF,EAEA,IAAWnB,IAAAA,CAAAA,IAAQK,CAAS,CAAA,CAC1B,GAAIL,CAAAA,CAAAA,EAAA,YAAAA,CAAM,CAAA,IAAA,IAAS,MAAQ,CAAA,SAC3B,IAAMoB,CAAAA,CAAQpB,EAAK,KAAS,EAAA,EACtBqB,CAAAA,CAAAA,CAAcD,CAAM,CAAA,IAAA,CAAME,GAAWA,CAAE,CAAA,IAAA,GAAS,MAAM,CAAA,CACtDC,CAAWH,CAAAA,CAAAA,CAAM,KAAME,CAAWA,EAAAA,CAAAA,CAAE,IAAS,GAAA,MAAM,CAEzD,CAAA,GAAA,CAAIlB,EAAAmB,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAU,CAAA,KAAA,GAAV,IAAAnB,EAAAA,CAAAA,CAAiB,KAAM,CACzB,IAAMxB,CAAe2C,CAAAA,CAAAA,CAAS,KAAM,CAAA,IAAA,CAE9BC,EAAkBxC,CAAyBJ,CAAAA,CAAI,CACrD,CAAA,GAAI4C,CAAiB,CAAA,CACdR,EAAc,GAAIQ,CAAAA,CAAAA,CAAgB,EAAE,CAAA,GACvCR,CAAc,CAAA,GAAA,CAAIQ,EAAgB,EAAE,CAAA,CACpCX,CAAQ,CAAA,IAAA,CAAK,CAAE,EAAA,CAAIW,EAAgB,EAAI,CAAA,GAAA,CAAK,MAAO,CAAC,CAEtD,CAAA,CAAA,QACF,CAEA,IAAMC,CAAAA,CAAY9C,CAAwBC,CAAAA,CAAI,CAC9C,CAAA,GAAI6C,EAAW,CACb,IAAMlC,CAAKkC,CAAAA,CAAAA,CAAU,EAChBX,CAAAA,CAAAA,CAAa,IAAIvB,CAAE,CAAA,GACtBuB,CAAa,CAAA,GAAA,CAAIvB,CAAE,CAAA,CACfkC,EAAU,MACZd,CAAAA,CAAAA,CAAO,IAAK,CAAA,CAAE,EAAApB,CAAAA,CAAAA,CAAI,IAAK,MAAQ,CAAA,MAAA,CAAQ,IAAK,CAAC,CAE7CoB,CAAAA,CAAAA,CAAO,KAAK,CACV,EAAA,CAAApB,CACA,CAAA,SAAA,CAAWkC,CAAU,CAAA,SAAA,CACrB,IAAK,MACL,CAAA,MAAA,CAAQ,KACV,CAAC,CAGL,CAAA,CAAA,QACF,CAEA,IAAMC,CAAAA,CAASlC,CAAkBZ,CAAAA,CAAAA,CAAMuB,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,EAAS,OAAO,CAAA,CACvD,GAAIuB,CAAAA,CAAQ,CACV,IAAMC,EAAM,CAAGD,EAAAA,CAAAA,CAAO,SAAS,CAAA,CAAA,EAAIA,CAAO,CAAA,MAAM,IAAIA,CAAO,CAAA,IAAI,CAC1DT,CAAAA,CAAAA,CAAAA,CAAe,GAAIU,CAAAA,CAAG,IACzBV,CAAe,CAAA,GAAA,CAAIU,CAAG,CAAA,CACtBf,CAAa,CAAA,IAAA,CAAKc,CAAM,CAE5B,EAAA,CACA,QACF,CAEI,CAACL,CAAAA,EAAe,OAAOrB,CAAK,CAAA,IAAA,EAAS,QACvCkB,EAAAA,CAAAA,CAAYlB,CAAK,CAAA,IAAI,EAEzB,CAEA,OAAO,CACL,KAAA,CAAAM,CACA,CAAA,MAAA,CAAAK,EACA,OAAAE,CAAAA,CAAAA,CACA,YAAAD,CAAAA,CACF,CACF","file":"chunk-OCMBP3U7.cjs","sourcesContent":["import { Content } from \"../../schema/posts\";\nimport { Profile } from \"../../schema/users\";\n\nexport interface DataFilter {\n column: string;\n value: string;\n operator: string;\n active?: boolean;\n}\n\nexport interface DisplayConfig {\n /** Dataset: ID of a saved visualization to render instead of the default chart. */\n visualizationId?: string | null;\n /** Dataset: column filters applied to the data. */\n filters?: DataFilter[];\n /** Route: ID of a specific action to preview (status, logs, side-effect assets). */\n actionId?: string | null;\n /** Route: author-provided defaults for an interactive route form. */\n defaultValues?: Record<string, unknown>;\n}\n\n/**\n * Normalize legacy viewMode values to the current set.\n * \"chart\" → \"preview\", \"default\" → \"card\", anything else → \"card\".\n */\nexport function normalizeViewMode(\n raw: string | undefined | null\n): \"card\" | \"preview\" | \"interactive\" | \"list\" {\n if (raw === \"default\") return \"card\";\n if (raw === \"chart\") return \"preview\";\n if (\n raw === \"preview\" ||\n raw === \"interactive\" ||\n raw === \"card\" ||\n raw === \"list\"\n )\n return raw;\n return \"card\";\n}\n\n/**\n * Build a DisplayConfig from node/element attributes, handling the legacy\n * flat `visualizationId` / `filters` attrs and the new `displayConfig` object.\n * Prefers values inside `displayConfig` when present.\n */\nexport function resolveDisplayConfig(attrs: {\n displayConfig?: DisplayConfig | string | null;\n visualizationId?: string | null;\n filters?: DataFilter[] | string | null;\n}): DisplayConfig {\n let base: DisplayConfig = {};\n\n if (attrs.displayConfig) {\n base =\n typeof attrs.displayConfig === \"string\"\n ? JSON.parse(attrs.displayConfig)\n : { ...attrs.displayConfig };\n }\n\n // Fall back to legacy flat attrs when displayConfig doesn't carry them\n if (base.visualizationId === undefined && attrs.visualizationId) {\n base.visualizationId = attrs.visualizationId;\n }\n if (base.filters === undefined && attrs.filters) {\n const raw = attrs.filters;\n base.filters =\n typeof raw === \"string\" ? JSON.parse(raw) : raw;\n }\n\n return base;\n}\n\nexport interface InlineAssetAttrs {\n id: string;\n assetType: string;\n viewMode: \"card\" | \"preview\" | \"interactive\" | \"list\";\n displayConfig?: DisplayConfig | null;\n /** @deprecated Use displayConfig.filters */\n filters?: any;\n /** @deprecated Use displayConfig.visualizationId */\n visualizationId?: string | null;\n partial?: boolean;\n}\n\n/** Assets pulled from Air JSON: embedded blocks or link href shorthands. */\nexport type ExtractedContentAsset =\n | { id: string; assetType: string; via: \"embed\" }\n | { id: string; assetType: string; via: \"link\"; legacy: false }\n | { id: string; via: \"link\"; legacy: true };\n\ninterface LinkedAssetRef {\n assetType: string;\n entity: string;\n slug: string;\n}\n\n/** UUID v4 pattern for inline link hrefs */\nconst UUID_RE =\n \"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\";\n\n/** Shorthand link hrefs: `post:<uuid>`, `file:<uuid>`, … (preferred over legacy `asset:<uuid>`). */\nconst TYPED_ASSET_LINK_RE = new RegExp(\n `^(post|dataset|file|service|route|quest):(${UUID_RE})$`,\n \"i\"\n);\n\n/** @deprecated Prefer `post:<uuid>` etc.; still supported and resolved server-side. */\nconst LEGACY_ASSET_LINK_RE = new RegExp(`^asset:(${UUID_RE})$`, \"i\");\n\n/** Route action link hrefs: `action:<uuid>` → history page for that run. */\nconst ACTION_LINK_RE = new RegExp(`^action:(${UUID_RE})$`, \"i\");\n\n/**\n * Collapsed wiki-link form agents often write: `[dataset:<uuid>]` instead of\n * `[label](dataset:<uuid>)`. Negative lookahead skips real markdown links\n * whose label happens to be the shorthand (`[dataset:<uuid>](…)`).\n */\nconst ASSET_WIKI_LINK_RE = new RegExp(\n `\\\\[(post|dataset|file|service|route|quest|asset|action):(${UUID_RE})\\\\](?!\\\\()`,\n \"gi\"\n);\n\nconst VALID_ASSET_TYPES = new Set([\n \"post\",\n \"dataset\",\n \"file\",\n \"service\",\n \"route\",\n \"quest\",\n]);\n\nexport type ExtractedContentAction = { id: string; via: \"link\" };\n\n/**\n * Parse an inline link `href` for Ouro asset shorthands.\n * - `post:<uuid>`, `file:<uuid>`, … → typed (asset type known from prefix)\n * - `asset:<uuid>` → legacy (type resolved via DB when creating connections)\n */\nfunction parseAssetLinkShorthand(\n href: string\n):\n | { id: string; assetType: string; legacy: false }\n | { id: string; legacy: true }\n | null {\n const typed = TYPED_ASSET_LINK_RE.exec(href);\n if (typed) {\n const assetType = typed[1].toLowerCase();\n if (!VALID_ASSET_TYPES.has(assetType)) return null;\n return { id: typed[2], assetType, legacy: false };\n }\n const legacy = LEGACY_ASSET_LINK_RE.exec(href);\n if (legacy) return { id: legacy[1], legacy: true };\n return null;\n}\n\n/**\n * Parse an inline link `href` for a route action shorthand: `action:<uuid>`.\n * Actions are not assets — callers must resolve them separately.\n */\nfunction parseActionLinkShorthand(href: string): { id: string } | null {\n const match = ACTION_LINK_RE.exec(href);\n if (!match) return null;\n return { id: match[1] };\n}\n\nexport type AssetWikiLinkMatch =\n | { raw: string; href: string; id: string; assetType: string; legacy: false }\n | { raw: string; href: string; id: string; legacy: true }\n | { raw: string; href: string; id: string; action: true };\n\n/**\n * Find collapsed `[dataset:<uuid>]` / `[action:<uuid>]` spans in a text node.\n * Skips `[shorthand](href)` markdown links via the regex lookahead.\n */\nfunction extractAssetWikiLinks(text: string): AssetWikiLinkMatch[] {\n if (!text) return [];\n const matches: AssetWikiLinkMatch[] = [];\n const re = new RegExp(ASSET_WIKI_LINK_RE.source, ASSET_WIKI_LINK_RE.flags);\n let match: RegExpExecArray | null;\n while ((match = re.exec(text)) !== null) {\n const kind = match[1].toLowerCase();\n const id = match[2];\n const href = `${kind}:${id}`;\n if (kind === \"action\") {\n matches.push({ raw: match[0], href, id, action: true });\n } else if (kind === \"asset\") {\n matches.push({ raw: match[0], href, id, legacy: true });\n } else if (VALID_ASSET_TYPES.has(kind)) {\n matches.push({ raw: match[0], href, id, assetType: kind, legacy: false });\n }\n }\n return matches;\n}\n\n/**\n * Parse an Ouro site URL into its asset components.\n * Accepts both absolute URLs (https://ouro.foundation/posts/entity/slug)\n * and relative paths (/posts/entity/slug).\n */\nfunction parseOuroAssetUrl(\n href: string,\n siteUrl?: string\n): LinkedAssetRef | null {\n let pathname: string;\n try {\n if (href.startsWith(\"/\")) {\n pathname = href;\n } else {\n const url = new URL(href);\n if (siteUrl) {\n const siteHost = new URL(siteUrl).host;\n if (url.host !== siteHost) return null;\n }\n pathname = url.pathname;\n }\n } catch {\n return null;\n }\n\n // Pattern: /{assetType}s/{entity}/{slug}\n const match = pathname.match(\n /^\\/(\\w+)s\\/([^/]+)\\/([^/?#]+)/\n );\n if (!match) return null;\n\n const [, assetType, entity, slug] = match;\n if (!VALID_ASSET_TYPES.has(assetType)) return null;\n\n return { assetType, entity: decodeURIComponent(entity), slug: decodeURIComponent(slug) };\n}\n\nconst extractContent = (item: any): any => {\n if (Array.isArray(item)) return item.map(extractContent);\n if (item?.content) {\n if (Array.isArray(item.content))\n return item.content.map(extractContent).flat();\n else return extractContent(item.content);\n } else return item; // leaf\n};\n\nfunction getReferencesInContent(\n json: Content[\"json\"],\n options?: { siteUrl?: string }\n) {\n if (!json || !json?.content)\n return { users: [], assets: [], actions: [], linkedAssets: [] };\n const content = json.content.map(extractContent).flat();\n\n const users = content\n .filter((item: any) => item.type === \"mention\")\n .map((item: any) => ({\n user_id: item.attrs?.id,\n username: item.attrs?.label || item.attrs?.username,\n }))\n .reduce((unique: any[], item: any) => {\n if (\n !unique.some(\n (u) =>\n (u.user_id && item.user_id && u.user_id === item.user_id) ||\n (u.username && item.username && u.username === item.username)\n )\n ) {\n unique.push(item);\n }\n return unique;\n }, []) as Partial<Profile>[];\n\n const assets: ExtractedContentAsset[] = content\n .filter(\n (item: any) =>\n item.type === \"assetComponent\" && item.attrs?.id && !item.attrs?.partial\n )\n .map(({ attrs }: { attrs: InlineAssetAttrs }) => ({\n id: attrs.id,\n assetType: attrs.assetType,\n via: \"embed\" as const,\n }))\n .reduce((unique: ExtractedContentAsset[], item: ExtractedContentAsset) => {\n if (!unique.some((u) => u.id === item.id)) {\n unique.push(item);\n }\n return unique;\n }, []);\n\n // Extract asset / action references from link marks\n const linkedAssets: LinkedAssetRef[] = [];\n const actions: ExtractedContentAction[] = [];\n const seenAssetIds = new Set(assets.map((a) => a.id));\n const seenActionIds = new Set<string>();\n const seenLinkedKeys = new Set<string>();\n\n const addWikiRefs = (text: string) => {\n for (const wiki of extractAssetWikiLinks(text)) {\n if (\"action\" in wiki && wiki.action) {\n if (!seenActionIds.has(wiki.id)) {\n seenActionIds.add(wiki.id);\n actions.push({ id: wiki.id, via: \"link\" });\n }\n continue;\n }\n if (seenAssetIds.has(wiki.id)) continue;\n seenAssetIds.add(wiki.id);\n if (\"legacy\" in wiki && wiki.legacy) {\n assets.push({ id: wiki.id, via: \"link\", legacy: true });\n } else if (\"assetType\" in wiki) {\n assets.push({\n id: wiki.id,\n assetType: wiki.assetType,\n via: \"link\",\n legacy: false,\n });\n }\n }\n };\n\n for (const item of content) {\n if (item?.type !== \"text\") continue;\n const marks = item.marks || [];\n const hasCodeMark = marks.some((m: any) => m.type === \"code\");\n const linkMark = marks.find((m: any) => m.type === \"link\");\n\n if (linkMark?.attrs?.href) {\n const href: string = linkMark.attrs.href;\n\n const actionShorthand = parseActionLinkShorthand(href);\n if (actionShorthand) {\n if (!seenActionIds.has(actionShorthand.id)) {\n seenActionIds.add(actionShorthand.id);\n actions.push({ id: actionShorthand.id, via: \"link\" });\n }\n continue;\n }\n\n const shorthand = parseAssetLinkShorthand(href);\n if (shorthand) {\n const id = shorthand.id;\n if (!seenAssetIds.has(id)) {\n seenAssetIds.add(id);\n if (shorthand.legacy) {\n assets.push({ id, via: \"link\", legacy: true });\n } else {\n assets.push({\n id,\n assetType: shorthand.assetType,\n via: \"link\",\n legacy: false,\n });\n }\n }\n continue;\n }\n\n const parsed = parseOuroAssetUrl(href, options?.siteUrl);\n if (parsed) {\n const key = `${parsed.assetType}:${parsed.entity}:${parsed.slug}`;\n if (!seenLinkedKeys.has(key)) {\n seenLinkedKeys.add(key);\n linkedAssets.push(parsed);\n }\n }\n continue;\n }\n\n if (!hasCodeMark && typeof item.text === \"string\") {\n addWikiRefs(item.text);\n }\n }\n\n return {\n users,\n assets,\n actions,\n linkedAssets,\n };\n}\n\nexport {\n extractAssetWikiLinks,\n getReferencesInContent,\n parseActionLinkShorthand,\n parseAssetLinkShorthand,\n parseOuroAssetUrl,\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
'use strict';var marked=require('marked');function o(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<")}function l(e,t){return `<span data-latex="${o(e)}" data-display-mode="${t}"></span>`}var p={name:"katexBlock",level:"block",start(e){let t=e.match(/\\\[/);return t?t.index:void 0},end(e){var r,n,s;let t=e.match(/\s\\\]/);return t?((r=t.index)!=null?r:0)+((s=(n=t[0])==null?void 0:n.length)!=null?s:0):void 0},tokenizer(e,t){let n=/^\\\[([\s\S]*?)\\\]/.exec(e);if(n)return {type:"katexBlock",raw:n[0],latex:n[1].trim(),displayMode:true}},renderer(e){return l(e.latex,e.displayMode)}},m={name:"katexInline",level:"inline",start(e){let t=e.match(/\\\(/);return t?t.index:void 0},end(e){var r,n,s;let t=e.match(/\s\\\)/);return t?((r=t.index)!=null?r:0)+((s=(n=t[0])==null?void 0:n.length)!=null?s:0):void 0},tokenizer(e,t){let n=/^\\\(([\s\S]*?)\\\)/.exec(e);if(n)return {type:"katexInline",raw:n[0],latex:n[1].trim(),displayMode:false}},renderer(e){return l(e.latex,e.displayMode)}},k={name:"assetComponent",level:"block",start(e){var t;return (t=e.match(/^```assetComponent/))==null?void 0:t.index},end(e){var t;return (t=e.match(/^```/))==null?void 0:t.index},tokenizer(e,t){let n=/^```assetComponent\s+(\{[\s\S]*?\})\n```/.exec(e);if(n)return {type:"assetComponent",raw:n[0],properties:n[1],tokens:[]}},renderer(e){let t;try{t=JSON.parse(e.properties);}catch(n){console.error("Invalid JSON in assetComponent properties:",n),t={};}return `
|
|
2
|
+
<asset-component ${Object.entries(t).map(([n,s])=>{let i=(typeof s=="object"&&s!==null?JSON.stringify(s):String(s)).replace(/"/g,""");return `${n}="${i}"`}).join(" ")}></asset-component>`}},y={name:"userMention",level:"inline",start(e){let t=e.match(/`\{@|(?<![`])\{@/);return t?t.index:void 0},end(e){var t,r,n;return (n=(t=e.match(/\}`/))==null?void 0:t.index)!=null?n:(r=e.match(/(?<![`])\{@[^}]*\}/))==null?void 0:r.index},tokenizer(e,t){let r=/^`\{@([a-zA-Z0-9_]+)\}`/.exec(e);if(r)return {type:"userMention",raw:r[0],username:r[1]};let n=/^\{@([a-zA-Z0-9_]+)\}/.exec(e);if(n)return {type:"userMention",raw:n[0],username:n[1]}},renderer(e){let t=o(e.username);return `<user-mention username="${t}" data-label="${t}"></user-mention>`}},f="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",h=new RegExp(`^\\[(post|dataset|file|service|route|quest|asset|action):(${f})\\](?!\\()`,"i"),x={name:"assetWikiLink",level:"inline",start(e){let t=e.match(/\[(?:post|dataset|file|service|route|quest|asset|action):/i);return t?t.index:void 0},tokenizer(e){let t=h.exec(e);if(!t)return;let r=`${t[1].toLowerCase()}:${t[2]}`;return {type:"assetWikiLink",raw:t[0],href:r}},renderer(e){let t=o(e.href);return `<a href="${t}">${t}</a>`}};marked.marked.use({gfm:true,extensions:[k,y,x,p,m],renderer:{list(e){var t;return !e.ordered&&((t=e.items)==null?void 0:t.length)>0&&e.items.every(r=>r.task)?`<ul data-type="taskList">
|
|
3
|
+
${e.items.map(n=>{let s=n.tokens.filter(u=>u.type!=="checkbox"),a=this.parser.parse(s,!!n.loose);n.loose||(a=`<p>${a}</p>`);let i=n.checked?"true":"false",d=n.checked?' checked="checked"':"";return `<li data-type="taskItem" data-checked="${i}"><label contenteditable="false"><input type="checkbox"${d}></label><div>${a}</div></li>`}).join(`
|
|
4
|
+
`)}
|
|
5
|
+
</ul>
|
|
6
|
+
`:false}}});function $(e){return marked.marked.parse(e)}exports.a=$;//# sourceMappingURL=chunk-PJLIO4PA.cjs.map
|
|
7
|
+
//# sourceMappingURL=chunk-PJLIO4PA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/air/markdown-parser.ts"],"names":["escapeHtmlAttr","s","mathSpanHtml","latex","displayMode","katexBlockParser","src","match","_a","_b","_c","tokens","token","katexInlineParser","assetComponentExtension","properties","e","key","value","escapedValue","userMentionExtension","m","codeWrapped","bracesOnly","u","UUID_RE","ASSET_WIKI_LINK_TOKEN","assetWikiLinkExtension","href","marked","item","inner","t","text","checked","ckAttr","parseMarkdown","markdown"],"mappings":"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","file":"chunk-PJLIO4PA.cjs","sourcesContent":["import { marked } from \"marked\";\n\n/** Safe for double-quoted HTML attributes (e.g. data-latex). */\nfunction escapeHtmlAttr(s: string): string {\n return s\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\nfunction mathSpanHtml(latex: string, displayMode: boolean): string {\n return `<span data-latex=\"${escapeHtmlAttr(latex)}\" data-display-mode=\"${displayMode}\"></span>`;\n}\n\nconst katexBlockParser = {\n name: \"katexBlock\",\n level: \"block\",\n start(src: string) {\n const match = src.match(/\\\\\\[/);\n return match ? match.index : undefined;\n },\n end(src: string) {\n const match = src.match(/\\s\\\\\\]/);\n return match ? (match.index ?? 0) + (match[0]?.length ?? 0) : undefined;\n },\n tokenizer(src: string, tokens: any) {\n const displayRule = /^\\\\\\[([\\s\\S]*?)\\\\\\]/;\n const match = displayRule.exec(src);\n if (match) {\n return {\n type: \"katexBlock\",\n raw: match[0],\n latex: match[1].trim(),\n displayMode: true,\n };\n }\n },\n renderer(token: any) {\n // Non-self-closing span is important for client-side inline flow around the node.\n return mathSpanHtml(token.latex, token.displayMode);\n },\n};\n\nconst katexInlineParser = {\n name: \"katexInline\",\n level: \"inline\",\n start(src: string) {\n const match = src.match(/\\\\\\(/);\n return match ? match.index : undefined;\n },\n end(src: string) {\n const match = src.match(/\\s\\\\\\)/);\n return match ? (match.index ?? 0) + (match[0]?.length ?? 0) : undefined;\n },\n tokenizer(src: string, tokens: any) {\n const inlineRule = /^\\\\\\(([\\s\\S]*?)\\\\\\)/;\n const match = inlineRule.exec(src);\n if (match) {\n return {\n type: \"katexInline\",\n raw: match[0],\n latex: match[1].trim(),\n displayMode: false,\n };\n }\n },\n renderer(token: any) {\n // STRANGE: The non-self-closing tag is important for client side to render as inline and render text after it\n return mathSpanHtml(token.latex, token.displayMode);\n },\n};\n\nconst assetComponentExtension = {\n name: \"assetComponent\",\n level: \"block\",\n start(src: string) {\n return src.match(/^```assetComponent/)?.index;\n },\n end(src: string) {\n return src.match(/^```/)?.index;\n },\n tokenizer(src: string, tokens: any) {\n const rule = /^```assetComponent\\s+(\\{[\\s\\S]*?\\})\\n```/;\n const match = rule.exec(src);\n if (match) {\n const token = {\n type: \"assetComponent\",\n raw: match[0],\n properties: match[1],\n tokens: [],\n };\n return token;\n }\n },\n renderer(token: any) {\n let properties;\n try {\n properties = JSON.parse(token.properties);\n } catch (e) {\n console.error(\"Invalid JSON in assetComponent properties:\", e);\n properties = {};\n }\n const componentHtml = `\n <asset-component ${Object.entries(properties)\n .map(([key, value]) => {\n // Stringify arrays and objects, keep primitives as-is\n const stringValue = typeof value === 'object' && value !== null\n ? JSON.stringify(value)\n : String(value);\n // Escape quotes for HTML attributes\n const escapedValue = stringValue.replace(/\"/g, '"');\n return `${key}=\"${escapedValue}\"`;\n })\n .join(\" \")}></asset-component>`;\n\n return componentHtml;\n },\n};\n\nconst userMentionExtension = {\n name: \"userMention\",\n level: \"inline\",\n start(src: string) {\n const m = src.match(/`\\{@|(?<![`])\\{@/);\n return m ? m.index : undefined;\n },\n end(src: string) {\n return src.match(/\\}`/)?.index ?? src.match(/(?<![`])\\{@[^}]*\\}/)?.index;\n },\n tokenizer(src: string, tokens: any) {\n const codeWrapped = /^`\\{@([a-zA-Z0-9_]+)\\}`/.exec(src);\n if (codeWrapped) {\n return {\n type: \"userMention\",\n raw: codeWrapped[0],\n username: codeWrapped[1],\n };\n }\n const bracesOnly = /^\\{@([a-zA-Z0-9_]+)\\}/.exec(src);\n if (bracesOnly) {\n return {\n type: \"userMention\",\n raw: bracesOnly[0],\n username: bracesOnly[1],\n };\n }\n },\n renderer(token: any) {\n const u = escapeHtmlAttr(token.username);\n return `<user-mention username=\"${u}\" data-label=\"${u}\"></user-mention>`;\n },\n};\n\n/** UUID-shaped ids (v4 and v7) used in typed asset shorthands. */\nconst UUID_RE =\n \"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\";\n\n/**\n * Collapsed `[dataset:<uuid>]` form. `(?!\\\\()` leaves `[label](dataset:<uuid>)`\n * to the built-in markdown link tokenizer.\n */\nconst ASSET_WIKI_LINK_TOKEN = new RegExp(\n `^\\\\[(post|dataset|file|service|route|quest|asset|action):(${UUID_RE})\\\\](?!\\\\()`,\n \"i\"\n);\n\nconst assetWikiLinkExtension = {\n name: \"assetWikiLink\",\n level: \"inline\",\n start(src: string) {\n const m = src.match(\n /\\[(?:post|dataset|file|service|route|quest|asset|action):/i\n );\n return m ? m.index : undefined;\n },\n tokenizer(src: string) {\n const match = ASSET_WIKI_LINK_TOKEN.exec(src);\n if (!match) return;\n const href = `${match[1].toLowerCase()}:${match[2]}`;\n return {\n type: \"assetWikiLink\",\n raw: match[0],\n href,\n };\n },\n renderer(token: any) {\n const href = escapeHtmlAttr(token.href);\n return `<a href=\"${href}\">${href}</a>`;\n },\n};\n\nmarked.use({\n gfm: true,\n extensions: [\n assetComponentExtension,\n userMentionExtension,\n assetWikiLinkExtension,\n katexBlockParser,\n katexInlineParser,\n ],\n renderer: {\n list(token: any) {\n if (\n !token.ordered &&\n token.items?.length > 0 &&\n token.items.every((item: any) => item.task)\n ) {\n const body = token.items\n .map((item: any) => {\n const inner = item.tokens.filter(\n (t: any) => t.type !== \"checkbox\"\n );\n let text = (this as any).parser.parse(inner, !!item.loose);\n if (!item.loose) text = `<p>${text}</p>`;\n const checked = item.checked ? \"true\" : \"false\";\n const ckAttr = item.checked ? ' checked=\"checked\"' : \"\";\n return `<li data-type=\"taskItem\" data-checked=\"${checked}\"><label contenteditable=\"false\"><input type=\"checkbox\"${ckAttr}></label><div>${text}</div></li>`;\n })\n .join(\"\\n\");\n return `<ul data-type=\"taskList\">\\n${body}\\n</ul>\\n`;\n }\n return false as any;\n },\n },\n});\n\nexport function parseMarkdown(markdown: string) {\n return marked.parse(markdown);\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import {marked}from'marked';function o(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<")}function l(e,t){return `<span data-latex="${o(e)}" data-display-mode="${t}"></span>`}var p={name:"katexBlock",level:"block",start(e){let t=e.match(/\\\[/);return t?t.index:void 0},end(e){var r,n,s;let t=e.match(/\s\\\]/);return t?((r=t.index)!=null?r:0)+((s=(n=t[0])==null?void 0:n.length)!=null?s:0):void 0},tokenizer(e,t){let n=/^\\\[([\s\S]*?)\\\]/.exec(e);if(n)return {type:"katexBlock",raw:n[0],latex:n[1].trim(),displayMode:true}},renderer(e){return l(e.latex,e.displayMode)}},m={name:"katexInline",level:"inline",start(e){let t=e.match(/\\\(/);return t?t.index:void 0},end(e){var r,n,s;let t=e.match(/\s\\\)/);return t?((r=t.index)!=null?r:0)+((s=(n=t[0])==null?void 0:n.length)!=null?s:0):void 0},tokenizer(e,t){let n=/^\\\(([\s\S]*?)\\\)/.exec(e);if(n)return {type:"katexInline",raw:n[0],latex:n[1].trim(),displayMode:false}},renderer(e){return l(e.latex,e.displayMode)}},k={name:"assetComponent",level:"block",start(e){var t;return (t=e.match(/^```assetComponent/))==null?void 0:t.index},end(e){var t;return (t=e.match(/^```/))==null?void 0:t.index},tokenizer(e,t){let n=/^```assetComponent\s+(\{[\s\S]*?\})\n```/.exec(e);if(n)return {type:"assetComponent",raw:n[0],properties:n[1],tokens:[]}},renderer(e){let t;try{t=JSON.parse(e.properties);}catch(n){console.error("Invalid JSON in assetComponent properties:",n),t={};}return `
|
|
2
|
+
<asset-component ${Object.entries(t).map(([n,s])=>{let i=(typeof s=="object"&&s!==null?JSON.stringify(s):String(s)).replace(/"/g,""");return `${n}="${i}"`}).join(" ")}></asset-component>`}},y={name:"userMention",level:"inline",start(e){let t=e.match(/`\{@|(?<![`])\{@/);return t?t.index:void 0},end(e){var t,r,n;return (n=(t=e.match(/\}`/))==null?void 0:t.index)!=null?n:(r=e.match(/(?<![`])\{@[^}]*\}/))==null?void 0:r.index},tokenizer(e,t){let r=/^`\{@([a-zA-Z0-9_]+)\}`/.exec(e);if(r)return {type:"userMention",raw:r[0],username:r[1]};let n=/^\{@([a-zA-Z0-9_]+)\}/.exec(e);if(n)return {type:"userMention",raw:n[0],username:n[1]}},renderer(e){let t=o(e.username);return `<user-mention username="${t}" data-label="${t}"></user-mention>`}},f="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",h=new RegExp(`^\\[(post|dataset|file|service|route|quest|asset|action):(${f})\\](?!\\()`,"i"),x={name:"assetWikiLink",level:"inline",start(e){let t=e.match(/\[(?:post|dataset|file|service|route|quest|asset|action):/i);return t?t.index:void 0},tokenizer(e){let t=h.exec(e);if(!t)return;let r=`${t[1].toLowerCase()}:${t[2]}`;return {type:"assetWikiLink",raw:t[0],href:r}},renderer(e){let t=o(e.href);return `<a href="${t}">${t}</a>`}};marked.use({gfm:true,extensions:[k,y,x,p,m],renderer:{list(e){var t;return !e.ordered&&((t=e.items)==null?void 0:t.length)>0&&e.items.every(r=>r.task)?`<ul data-type="taskList">
|
|
3
|
+
${e.items.map(n=>{let s=n.tokens.filter(u=>u.type!=="checkbox"),a=this.parser.parse(s,!!n.loose);n.loose||(a=`<p>${a}</p>`);let i=n.checked?"true":"false",d=n.checked?' checked="checked"':"";return `<li data-type="taskItem" data-checked="${i}"><label contenteditable="false"><input type="checkbox"${d}></label><div>${a}</div></li>`}).join(`
|
|
4
|
+
`)}
|
|
5
|
+
</ul>
|
|
6
|
+
`:false}}});function $(e){return marked.parse(e)}export{$ as a};//# sourceMappingURL=chunk-Q4IXX6KS.js.map
|
|
7
|
+
//# sourceMappingURL=chunk-Q4IXX6KS.js.map
|