@funhub/platform 0.1.119 → 0.1.120

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.
@@ -1,11 +1,11 @@
1
1
 
2
2
  import * as React from "react";
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
- import Image from "next/image";
4
+ import NextImage from "next/image";
5
5
 
6
6
  //#region components/ui/image.d.ts
7
7
  /** BaseImageProps 属性定义。 */
8
- type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof Image>, 'className' | 'src' | 'alt' | 'width' | 'height' | 'loading' | 'priority' | 'fill' | 'style'>;
8
+ type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof NextImage>, 'className' | 'src' | 'alt' | 'width' | 'height' | 'loading' | 'priority' | 'fill' | 'style'>;
9
9
  type CommonImageProps = BaseImageProps & {
10
10
  /** 图片地址,支持普通 URL、默认资源路径和加密地址。 */src: string; /** 图片替代文本。 */
11
11
  alt?: string; /** 图片类名。 */
@@ -27,6 +27,6 @@ type ImagePropsWithSize = CommonImageProps & {
27
27
  /** ImageProps 属性定义。 */
28
28
  type ImageProps = ImagePropsWithFill | ImagePropsWithSize;
29
29
  /** 图片组件:支持 bnc 解密、默认资源域名拼接与错误占位。 */
30
- declare function Image$1(props: ImageProps): react_jsx_runtime0.JSX.Element;
30
+ declare function Image(props: ImageProps): react_jsx_runtime0.JSX.Element;
31
31
  //#endregion
32
- export { BaseImageProps, CommonImageProps, Image$1 as Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
32
+ export { BaseImageProps, CommonImageProps, Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{decryptImageToArrayBuffer as e,isEncryptedImageUrl as t,resolveImageUrl as n,shouldProbeImageUrl as r}from"../../utils/decrypt-image-client.mjs";import{pxToVw as i}from"../../utils/helper.mjs";import{useEffect as a,useReducer as o,useRef as s}from"react";import{jsx as c}from"react/jsx-runtime";import l from"next/image";const u=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4//8/LwAJCQMLCIuEYQAAAABJRU5ErkJggg==`,d=new Map,f=new Map,p={display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:`#f3f4f6`,color:`#9ca3af`,fontSize:12};function m(e){return d.get(e)}function h(e,t){if(d.has(e)&&d.delete(e),d.set(e,t),d.size<=300)return;let n=d.keys().next().value;if(!n)return;let r=d.get(n);d.delete(n),r?.startsWith(`blob:`)&&URL.revokeObjectURL(r)}async function g(t){let n=m(t);if(n)return n;let r=f.get(t);if(r)return r;let i=e(t).then(e=>{if(!e)return``;let n=URL.createObjectURL(new Blob([e.buffer],{type:e.contentType}));return h(t,n),n}).finally(()=>{f.delete(t)});return f.set(t,i),i}function _(e,t){switch(t.type){case`set-final-src`:return{...e,finalSrc:t.value};case`set-has-error`:return{...e,hasError:t.value};default:return e}}function v(e){return e?.trim()?t(e)?m(e)??u:e.startsWith(`http`)?e:r(e)?u:e:u}function y(e){return e?/\b(?:w|h)-[\w[\]/.]+/.test(e):!1}function b(e){let{src:d,alt:f=``,className:h,style:b,unoptimized:x=!0,priority:S,quality:C,sizes:w,fill:T,objectFit:E,onLoad:D,onError:O,...k}=e,A=`width`in e?e.width:void 0,j=`height`in e?e.height:void 0,[M,N]=o(_,d,e=>({finalSrc:v(e),hasError:!1})),P=s(0);a(()=>{if(d?.trim()){if(N({type:`set-has-error`,value:!1}),P.current=0,t(d)){let e=m(d);if(e){N({type:`set-final-src`,value:e});return}N({type:`set-final-src`,value:u});let t=!1;return g(d).then(e=>{t||!e||N({type:`set-final-src`,value:e})}).catch(()=>{}),()=>{t=!0}}if(d.startsWith(`http`)){N({type:`set-final-src`,value:d});return}if(r(d)){N({type:`set-final-src`,value:u});let e=!1;return n(d).then(t=>{e||!t||N({type:`set-final-src`,value:t})}).catch(()=>{e||N({type:`set-final-src`,value:d})}),()=>{e=!0}}N({type:`set-final-src`,value:d})}},[d]);function F(e){e.currentTarget.dataset.keyId=d,P.current=0,N({type:`set-has-error`,value:!1}),e.currentTarget.dataset.keyId=d,D?.(e)}function I(e){P.current+=1,P.current===1?N({type:`set-final-src`,value:`/feedback.png`}):P.current>1&&N({type:`set-has-error`,value:!0}),O?.(e)}if(M.hasError)return c(`div`,{className:h,style:{...p,...T?{width:`100%`,height:`100%`}:{width:i(A??0),height:i(j??0)}},children:`error`});let L={...b||{},...E?{objectFit:E}:{}},R=y(h)?L:{width:i(A??0),height:i(j??0),...L};return T?c(l,{...k,src:M.finalSrc,alt:f,fill:!0,className:h,style:L,priority:S,quality:C,sizes:w,unoptimized:x,onLoad:F,onError:I,crossOrigin:`anonymous`}):c(l,{...k,src:M.finalSrc,alt:f,width:A??0,height:j??0,className:h,style:R,priority:S,quality:C,sizes:w,unoptimized:x,onLoad:F,onError:I,crossOrigin:`anonymous`})}export{b as Image};
2
+ "use client";import e from"../../utils/get-res-url.mjs";import{decryptImageToArrayBuffer as t,isEncryptedImageUrl as n,resolveImageUrl as r,shouldProbeImageUrl as i,shouldUseApiResDirectly as a}from"../../utils/decrypt-image-client.mjs";import{pxToVw as o}from"../../utils/helper.mjs";import{useEffect as s,useReducer as c,useRef as l}from"react";import{jsx as u}from"react/jsx-runtime";import d from"next/image";const f=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4//8/LwAJCQMLCIuEYQAAAABJRU5ErkJggg==`,p=new Map,m=new Map,h={display:`flex`,alignItems:`center`,justifyContent:`center`,backgroundColor:`#f3f4f6`,color:`#9ca3af`,fontSize:12};function g(e){return p.get(e)}function _(e,t){if(p.has(e)&&p.delete(e),p.set(e,t),p.size<=300)return;let n=p.keys().next().value;if(!n)return;let r=p.get(n);p.delete(n),r?.startsWith(`blob:`)&&URL.revokeObjectURL(r)}async function v(e){let n=g(e);if(n)return n;let r=m.get(e);if(r)return r;let i=t(e).then(t=>{if(!t)return``;let n=URL.createObjectURL(new Blob([t.buffer],{type:t.contentType}));return _(e,n),n}).finally(()=>{m.delete(e)});return m.set(e,i),i}function y(e,t){switch(t.type){case`set-final-src`:return{...e,finalSrc:t.value};case`set-has-error`:return{...e,hasError:t.value};default:return e}}function b(t){if(!t?.trim())return f;if(n(t))return g(t)??f;if(t.startsWith(`http`))return t;if(a(t)){let n=t.startsWith(`/`)?t:`/${t}`;return`${e()}${n}`}return i(t)?f:t}function x(e){return e?/\b(?:w|h)-[\w[\]/.]+/.test(e):!1}function S(t){let{src:p,alt:m=``,className:_,style:S,unoptimized:C=!0,priority:w,quality:T,sizes:E,fill:D,objectFit:O,onLoad:k,onError:A,...j}=t,M=`width`in t?t.width:void 0,N=`height`in t?t.height:void 0,[P,F]=c(y,p,e=>({finalSrc:b(e),hasError:!1})),I=l(0);s(()=>{if(p?.trim()){if(F({type:`set-has-error`,value:!1}),I.current=0,n(p)){let e=g(p);if(e){F({type:`set-final-src`,value:e});return}F({type:`set-final-src`,value:f});let t=!1;return v(p).then(e=>{t||!e||F({type:`set-final-src`,value:e})}).catch(()=>{}),()=>{t=!0}}if(p.startsWith(`http`)){F({type:`set-final-src`,value:p});return}if(a(p)){let t=p.startsWith(`/`)?p:`/${p}`;F({type:`set-final-src`,value:`${e()}${t}`});return}if(i(p)){F({type:`set-final-src`,value:f});let e=!1;return r(p).then(t=>{e||!t||F({type:`set-final-src`,value:t})}).catch(()=>{e||F({type:`set-final-src`,value:p})}),()=>{e=!0}}F({type:`set-final-src`,value:p})}},[p]);function L(e){e.currentTarget.dataset.keyId=p,I.current=0,F({type:`set-has-error`,value:!1}),e.currentTarget.dataset.keyId=p,k?.(e)}function R(e){I.current+=1,I.current===1?F({type:`set-final-src`,value:`/feedback.png`}):I.current>1&&F({type:`set-has-error`,value:!0}),A?.(e)}if(P.hasError)return u(`div`,{className:_,style:{...h,...D?{width:`100%`,height:`100%`}:{width:o(M??0),height:o(N??0)}},children:`error`});let z={...S||{},...O?{objectFit:O}:{}},B=x(_)?z:{width:o(M??0),height:o(N??0),...z};return D?u(d,{...j,src:P.finalSrc,alt:m,fill:!0,className:_,style:z,priority:w,quality:T,sizes:E,unoptimized:C,onLoad:L,onError:R,crossOrigin:`anonymous`}):u(d,{...j,src:P.finalSrc,alt:m,width:M??0,height:N??0,className:_,style:B,priority:w,quality:T,sizes:E,unoptimized:C,onLoad:L,onError:R,crossOrigin:`anonymous`})}export{S as Image};
@@ -16,6 +16,8 @@ declare function isEncryptedImageUrl(url: string): boolean;
16
16
  * @returns 推断得到的 MIME 类型。
17
17
  */
18
18
  declare function guessImageContentTypeFromUrl(url: string): string;
19
+ /** 判断图片地址是否应直接拼接 apiRes。 */
20
+ declare function shouldUseApiResDirectly(url: string): boolean;
19
21
  /** 判断图片地址是否需要在原始路径和 apiRes 路径之间做探测。 */
20
22
  declare function shouldProbeImageUrl(url: string): boolean;
21
23
  /**
@@ -59,4 +61,4 @@ declare function decryptImageToUint8Array(url: string, secretKey?: string): Prom
59
61
  */
60
62
  declare function decryptImageUrl(url: string, secretKey?: string): Promise<string>;
61
63
  //#endregion
62
- export { decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, guessImageContentTypeFromUrl, isEncryptedImageUrl, resolveImageUrl, shouldProbeImageUrl };
64
+ export { decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, guessImageContentTypeFromUrl, isEncryptedImageUrl, resolveImageUrl, shouldProbeImageUrl, shouldUseApiResDirectly };
@@ -1,2 +1,2 @@
1
1
 
2
- "use client";import{getItem as e,setItem as t}from"./db.mjs";import{createBncDecryptWorker as n}from"./decrypt.worker.mjs";import r from"./get-res-url.mjs";const i=new Map,a=new Map;let o=null;function s(){if(typeof window>`u`)return null;if(o)return o;let e=[];function t(){let e={worker:n(),busy:!1,current:null},t=()=>{try{e.worker.terminate()}catch{}e.worker=n(),e.busy=!1,e.current=null,r(e)},r=e=>{e.worker.addEventListener(`message`,t=>{let n=t.data;if(!e.current||n?.id!==e.current.id)return;let{resolve:r}=e.current;e.current=null,e.busy=!1,r(n),y()}),e.worker.addEventListener(`error`,n=>{if(e.current){let{reject:t}=e.current;e.current=null,e.busy=!1,t(n)}t(),y()})};return r(e),e}for(let n=0;n<4;n++)e.push(t());return o=e,o}const c=[];function l(e){if(!e)return!1;let t=e.split(`?`)[0];return/bnc$/i.test(t)||/xxx$/i.test(t)}function u(e){let t=String(e||``).split(`?`)[0].toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)(?:\.?(?:bnc|xxx))?$/i)?.[1];return t===`jpg`||t===`jpeg`?`image/jpeg`:t===`png`?`image/png`:t===`gif`?`image/gif`:t===`webp`?`image/webp`:`application/octet-stream`}function d(e,t){return!t||e.startsWith(`http`)?e:`${t.endsWith(`/`)?t.slice(0,-1):t}${e.startsWith(`/`)?e:`/${e}`}`}function f(e){return Array.from(new Set(e.filter(e=>!!e?.trim())))}function p(e,t=3e3){return typeof window>`u`?Promise.resolve(!1):new Promise(n=>{let r=new XMLHttpRequest,i=!1,a=e=>{if(!i){i=!0,clearTimeout(o);try{r.abort()}catch{}n(e)}},o=window.setTimeout(()=>{a(!1)},t);r.onreadystatechange=()=>{r.readyState===2&&a(r.status===200||r.status===206)},r.onerror=()=>{a(!1)},r.onabort=()=>{a(!1)};try{r.open(`GET`,e,!0),r.setRequestHeader(`Range`,`bytes=0-0`),r.send()}catch{a(!1)}})}function m(e){return/^(?:https?:)?\/\//.test(e)||e.startsWith(`data:`)}function h(e){return!e?.trim()||l(e)?!1:!m(e)}async function g(e){if(!h(e))return e;let t=e.startsWith(`/`)?e:`/${e}`,n=i.get(t);if(n)return n;let o=a.get(t);if(o)return o;let s=(async()=>{let e=r(),n=t,a=d(t,e),o=f([n,a]),s=await new Promise(e=>{let t=o.length,n=!1;if(!t){e(null);return}let r=t=>{n||(n=!0,e(t))};for(let e of o)p(e).then(n=>{if(n){r(e);return}--t,t===0&&r(null)}).catch(()=>{--t,t===0&&r(null)})});if(s)return i.set(t,s),s;let c=a||n;return i.set(t,c),c})().finally(()=>{a.delete(t)});return a.set(t,s),s}async function _(n,i){if(!n?.trim())return null;if(l(n)){let r=await e(n);if(r instanceof ArrayBuffer)return{buffer:r,contentType:u(n)};let{buffer:a,contentType:o,error:s}=await b(n,i);return s?null:(await t(n,a),{buffer:a,contentType:o??u(n)})}let a=r(),o=h(n)?await g(n):n.startsWith(`http`)?n:n.startsWith(`/`)?d(n,a):d(`/${n}`,a),s=await fetch(o);return s.ok?{buffer:await s.arrayBuffer(),contentType:s.headers.get(`content-type`)||u(n)}:null}async function v(e,t){let n=await _(e,t);return n?{bytes:new Uint8Array(n.buffer),contentType:n.contentType}:null}function y(){let e=s();if(e)for(let t of e){if(t.busy)continue;let e=c.shift();if(!e)return;t.busy=!0,t.current={id:e.id,resolve:e.resolve,reject:e.reject};let n={id:e.id,mode:`bnc-url`,url:e.url,apiRes:r(),secretKey:e.secretKey};t.worker.postMessage(n)}}function b(e,t){if(!s())return Promise.resolve({id:`no-worker`,buffer:new ArrayBuffer(0),error:`worker not available`});let n=typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`;return new Promise((r,i)=>{c.push({id:n,url:e,secretKey:t,resolve:r,reject:i}),y()})}async function x(n,r){let i=await e(n);if(i instanceof ArrayBuffer)return URL.createObjectURL(new Blob([i],{type:u(n)}));if(l(n)){let{buffer:e,contentType:i,error:a}=await b(n,r);return a?``:(await t(n,e),URL.createObjectURL(new Blob([e],{type:i??u(n)})))}else return m(n)?n:h(n)?g(n):n}export{_ as decryptImageToArrayBuffer,v as decryptImageToUint8Array,x as decryptImageUrl,u as guessImageContentTypeFromUrl,l as isEncryptedImageUrl,g as resolveImageUrl,h as shouldProbeImageUrl};
2
+ "use client";import{getItem as e,setItem as t}from"./db.mjs";import{createBncDecryptWorker as n}from"./decrypt.worker.mjs";import r from"./get-res-url.mjs";const i=new Map,a=new Map;let o=null;function s(){if(typeof window>`u`)return null;if(o)return o;let e=[];function t(){let e={worker:n(),busy:!1,current:null},t=()=>{try{e.worker.terminate()}catch{}e.worker=n(),e.busy=!1,e.current=null,r(e)},r=e=>{e.worker.addEventListener(`message`,t=>{let n=t.data;if(!e.current||n?.id!==e.current.id)return;let{resolve:r}=e.current;e.current=null,e.busy=!1,r(n),b()}),e.worker.addEventListener(`error`,n=>{if(e.current){let{reject:t}=e.current;e.current=null,e.busy=!1,t(n)}t(),b()})};return r(e),e}for(let n=0;n<4;n++)e.push(t());return o=e,o}const c=[];function l(e){if(!e)return!1;let t=e.split(`?`)[0];return/bnc$/i.test(t)||/xxx$/i.test(t)}function u(e){let t=String(e||``).split(`?`)[0].toLowerCase().match(/\.(jpg|jpeg|png|gif|webp)(?:\.?(?:bnc|xxx))?$/i)?.[1];return t===`jpg`||t===`jpeg`?`image/jpeg`:t===`png`?`image/png`:t===`gif`?`image/gif`:t===`webp`?`image/webp`:`application/octet-stream`}function d(e,t){return!t||e.startsWith(`http`)?e:`${t.endsWith(`/`)?t.slice(0,-1):t}${e.startsWith(`/`)?e:`/${e}`}`}function f(e){return Array.from(new Set(e.filter(e=>!!e?.trim())))}function p(e,t=3e3){return typeof window>`u`?Promise.resolve(!1):new Promise(n=>{let r=new XMLHttpRequest,i=!1,a=e=>{if(!i){i=!0,clearTimeout(o);try{r.abort()}catch{}n(e)}},o=window.setTimeout(()=>{a(!1)},t);r.onreadystatechange=()=>{r.readyState===2&&a(r.status===200||r.status===206)},r.onerror=()=>{a(!1)},r.onabort=()=>{a(!1)};try{r.open(`GET`,e,!0),r.setRequestHeader(`Range`,`bytes=0-0`),r.send()}catch{a(!1)}})}function m(e){return/^(?:https?:)?\/\//.test(e)||e.startsWith(`data:`)}function h(e){return e.startsWith(`/md-204`)}function g(e){return!e?.trim()||l(e)||h(e)?!1:!m(e)}async function _(e){if(h(e))return d(e,r());if(!g(e))return e;let t=e.startsWith(`/`)?e:`/${e}`,n=i.get(t);if(n)return n;let o=a.get(t);if(o)return o;let s=(async()=>{let e=r(),n=t,a=d(t,e),o=f([n,a]),s=await new Promise(e=>{let t=o.length,n=!1;if(!t){e(null);return}let r=t=>{n||(n=!0,e(t))};for(let e of o)p(e).then(n=>{if(n){r(e);return}--t,t===0&&r(null)}).catch(()=>{--t,t===0&&r(null)})});if(s)return i.set(t,s),s;let c=a||n;return i.set(t,c),c})().finally(()=>{a.delete(t)});return a.set(t,s),s}async function v(n,i){if(!n?.trim())return null;if(l(n)){let r=await e(n);if(r instanceof ArrayBuffer)return{buffer:r,contentType:u(n)};let{buffer:a,contentType:o,error:s}=await x(n,i);return s?null:(await t(n,a),{buffer:a,contentType:o??u(n)})}let a=r(),o=h(n)?d(n,a):g(n)?await _(n):n.startsWith(`http`)?n:n.startsWith(`/`)?d(n,a):d(`/${n}`,a),s=await fetch(o);return s.ok?{buffer:await s.arrayBuffer(),contentType:s.headers.get(`content-type`)||u(n)}:null}async function y(e,t){let n=await v(e,t);return n?{bytes:new Uint8Array(n.buffer),contentType:n.contentType}:null}function b(){let e=s();if(e)for(let t of e){if(t.busy)continue;let e=c.shift();if(!e)return;t.busy=!0,t.current={id:e.id,resolve:e.resolve,reject:e.reject};let n={id:e.id,mode:`bnc-url`,url:e.url,apiRes:r(),secretKey:e.secretKey};t.worker.postMessage(n)}}function x(e,t){if(!s())return Promise.resolve({id:`no-worker`,buffer:new ArrayBuffer(0),error:`worker not available`});let n=typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`;return new Promise((r,i)=>{c.push({id:n,url:e,secretKey:t,resolve:r,reject:i}),b()})}async function S(n,i){let a=await e(n);if(a instanceof ArrayBuffer)return URL.createObjectURL(new Blob([a],{type:u(n)}));if(l(n)){let{buffer:e,contentType:r,error:a}=await x(n,i);return a?``:(await t(n,e),URL.createObjectURL(new Blob([e],{type:r??u(n)})))}else return m(n)?n:h(n)?d(n,r()):g(n)?_(n):n}export{v as decryptImageToArrayBuffer,y as decryptImageToUint8Array,S as decryptImageUrl,u as guessImageContentTypeFromUrl,l as isEncryptedImageUrl,_ as resolveImageUrl,g as shouldProbeImageUrl,h as shouldUseApiResDirectly};
package/dist/utils.d.mts CHANGED
@@ -6,7 +6,7 @@ import "./utils/schema/index.mjs";
6
6
  import { clearMyChannelsFromStorage, loadHiddenChannelIdsFromStorage, loadMyChannelsFromStorage, saveHiddenChannelIdsToStorage } from "./utils/channel-storage.mjs";
7
7
  import { cn } from "./utils/cn.mjs";
8
8
  import { debounceFun, formatVideoDuration, generateDynamicSign, generateUUID, getAtUserElement, getCookie, getCurrentSecondTime, getUserId, hashPassword, isClient, isMobileDevice, numToString, parseResolution, parseTextAtUserIds, randomString, removeCookie, replaceAtUserElement, replaceAtUserElementHtmlStr, secondToTime, setCookie, stringToNumber, stripHtmlTags, updateUrlParams } from "./utils/common.mjs";
9
- import { decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, guessImageContentTypeFromUrl, isEncryptedImageUrl, resolveImageUrl, shouldProbeImageUrl } from "./utils/decrypt-image-client.mjs";
9
+ import { decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, guessImageContentTypeFromUrl, isEncryptedImageUrl, resolveImageUrl, shouldProbeImageUrl, shouldUseApiResDirectly } from "./utils/decrypt-image-client.mjs";
10
10
  import { eventBus } from "./utils/event-bus.mjs";
11
11
  import { checkFollowStatus, followUser, getAppId, getCurrentUserId, unfollowUser } from "./utils/follow-service.mjs";
12
12
  import { getResUrl } from "./utils/get-res-url.mjs";
@@ -19,4 +19,4 @@ import { PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGT
19
19
  import { PresignedUploadInfo, UploadToS3Options, UploadToS3Result, uploadToS3WithPresignedUrl } from "./utils/s3-uploader.mjs";
20
20
  import { base64ToUint8Array, uint8ArrayToBase64, uint8ArrayToNumberArray } from "./utils/uint8.mjs";
21
21
  import { UploadFileResult, encryptBncBuffer, uploadFile } from "./utils/upload-file.mjs";
22
- export { eventBus as EventBus, HttpClient, HttpError, INSPECTOR_META_KEY, ImageCompressionQualityRule, InferSchemaProps, MaterialComponentMode, MaterialComponentProps, MaterialMap, PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasswordValidationResult, PasswordValidationType, PresignedUploadInfo, RequestConfig, RequestMethod, ResponseData, SchemaHasDefaultValue, UploadFileResult, UploadToS3Options, UploadToS3Result, base64ToUint8Array, checkFollowStatus, clearMyChannelsFromStorage, cn, components, compressImage, createInputAndSelectFile, debounceFun, decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, defaultImageCompressionMaxSizeMB, defaultImageCompressionQuality, defineArrayItemPropSchema, defineCheckboxPropSchema, defineColorPropSchema, defineComponentPropsSchema, defineDatetimePropSchema, defineMaterial, defineNumberPropSchema, defineObjectPropSchema, defineSelectEnumPropSchema, defineSelectPropSchema, defineSwitchPropSchema, defineTextPropSchema, defineTextareaPropSchema, defineTimeRangePropSchema, disablePageScroll, enablePageScroll, encryptBncBuffer, followUser, formatVideoDuration, generateDynamicSign, generateMaterialMap, generateMaterialMapGroupByCategory, generateUUID, getAppId, getAtUserElement, getCookie, getCoverImage, getCurrentSecondTime, getCurrentUserId, getFirstInvalidPasswordChar, getImageCompressionQuality, getImageResolutionFromFile, getPasswordCharacterTypeCount, getPasswordValidationErrorText, getResUrl, getSchemaDefaultProps, getUserId, guessImageContentTypeFromUrl, hashPassword, httpClient, imageCompressionQualityRules, isClient, isEncryptedImageUrl, isMobileDevice, loadComponent, loadHiddenChannelIdsFromStorage, loadMyChannelsFromStorage, normalizeClassName, numToString, overwriteMaterial, parseResolution, parseTextAtUserIds, pxToVw, randomString, removeCookie, replaceAtUserElement, replaceAtUserElementHtmlStr, resolveImageUrl, rewriteComponent, saveHiddenChannelIdsToStorage, secondToTime, setCookie, shouldProbeImageUrl, stringToNumber, stripHtmlTags, uint8ArrayToBase64, uint8ArrayToNumberArray, unfollowUser, updateUrlParams, uploadFile, uploadToS3WithPresignedUrl, validatePasswordPair, withInspectorMeta };
22
+ export { eventBus as EventBus, HttpClient, HttpError, INSPECTOR_META_KEY, ImageCompressionQualityRule, InferSchemaProps, MaterialComponentMode, MaterialComponentProps, MaterialMap, PASSWORD_ALLOWED_SPECIAL_CHARS, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasswordValidationResult, PasswordValidationType, PresignedUploadInfo, RequestConfig, RequestMethod, ResponseData, SchemaHasDefaultValue, UploadFileResult, UploadToS3Options, UploadToS3Result, base64ToUint8Array, checkFollowStatus, clearMyChannelsFromStorage, cn, components, compressImage, createInputAndSelectFile, debounceFun, decryptImageToArrayBuffer, decryptImageToUint8Array, decryptImageUrl, defaultImageCompressionMaxSizeMB, defaultImageCompressionQuality, defineArrayItemPropSchema, defineCheckboxPropSchema, defineColorPropSchema, defineComponentPropsSchema, defineDatetimePropSchema, defineMaterial, defineNumberPropSchema, defineObjectPropSchema, defineSelectEnumPropSchema, defineSelectPropSchema, defineSwitchPropSchema, defineTextPropSchema, defineTextareaPropSchema, defineTimeRangePropSchema, disablePageScroll, enablePageScroll, encryptBncBuffer, followUser, formatVideoDuration, generateDynamicSign, generateMaterialMap, generateMaterialMapGroupByCategory, generateUUID, getAppId, getAtUserElement, getCookie, getCoverImage, getCurrentSecondTime, getCurrentUserId, getFirstInvalidPasswordChar, getImageCompressionQuality, getImageResolutionFromFile, getPasswordCharacterTypeCount, getPasswordValidationErrorText, getResUrl, getSchemaDefaultProps, getUserId, guessImageContentTypeFromUrl, hashPassword, httpClient, imageCompressionQualityRules, isClient, isEncryptedImageUrl, isMobileDevice, loadComponent, loadHiddenChannelIdsFromStorage, loadMyChannelsFromStorage, normalizeClassName, numToString, overwriteMaterial, parseResolution, parseTextAtUserIds, pxToVw, randomString, removeCookie, replaceAtUserElement, replaceAtUserElementHtmlStr, resolveImageUrl, rewriteComponent, saveHiddenChannelIdsToStorage, secondToTime, setCookie, shouldProbeImageUrl, shouldUseApiResDirectly, stringToNumber, stripHtmlTags, uint8ArrayToBase64, uint8ArrayToNumberArray, unfollowUser, updateUrlParams, uploadFile, uploadToS3WithPresignedUrl, validatePasswordPair, withInspectorMeta };
package/dist/utils.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
 
2
- import{cn as e}from"./utils/cn.mjs";import{clearMyChannelsFromStorage as t,loadHiddenChannelIdsFromStorage as n,loadMyChannelsFromStorage as r,saveHiddenChannelIdsToStorage as i}from"./utils/channel-storage.mjs";import{debounceFun as a,formatVideoDuration as o,generateDynamicSign as s,generateUUID as c,getAtUserElement as l,getCookie as u,getCurrentSecondTime as d,getUserId as f,hashPassword as p,isClient as m,isMobileDevice as h,numToString as g,parseResolution as _,parseTextAtUserIds as v,randomString as y,removeCookie as b,replaceAtUserElement as x,replaceAtUserElementHtmlStr as S,secondToTime as C,setCookie as w,stringToNumber as T,stripHtmlTags as E,updateUrlParams as D}from"./utils/common.mjs";import O from"./utils/get-res-url.mjs";import{decryptImageToArrayBuffer as k,decryptImageToUint8Array as A,decryptImageUrl as j,guessImageContentTypeFromUrl as M,isEncryptedImageUrl as N,resolveImageUrl as P,shouldProbeImageUrl as F}from"./utils/decrypt-image-client.mjs";import I from"./utils/event-bus.mjs";import L,{HttpClient as R,HttpError as z}from"./utils/http.mjs";import{checkFollowStatus as B,followUser as V,getAppId as H,getCurrentUserId as U,unfollowUser as W}from"./utils/follow-service.mjs";import{disablePageScroll as G,enablePageScroll as K,normalizeClassName as q,pxToVw as J}from"./utils/helper.mjs";import{compressImage as Y,defaultImageCompressionMaxSizeMB as X,defaultImageCompressionQuality as Z,getImageCompressionQuality as Q,imageCompressionQualityRules as $}from"./utils/image-compression.mjs";import{components as ee,loadComponent as te,rewriteComponent as ne}from"./utils/loaders.mjs";import{createInputAndSelectFile as re,getCoverImage as ie,getImageResolutionFromFile as ae}from"./utils/media.mjs";import{PASSWORD_ALLOWED_SPECIAL_CHARS as oe,PASSWORD_MAX_LENGTH as se,PASSWORD_MIN_LENGTH as ce,getFirstInvalidPasswordChar as le,getPasswordCharacterTypeCount as ue,getPasswordValidationErrorText as de,validatePasswordPair as fe}from"./utils/password-validator.mjs";import{uploadToS3WithPresignedUrl as pe}from"./utils/s3-uploader.mjs";import{defineMaterial as me,overwriteMaterial as he}from"./utils/schema/material.mjs";import{INSPECTOR_META_KEY as ge,defineArrayItemPropSchema as _e,defineCheckboxPropSchema as ve,defineColorPropSchema as ye,defineComponentPropsSchema as be,defineDatetimePropSchema as xe,defineNumberPropSchema as Se,defineObjectPropSchema as Ce,defineSelectEnumPropSchema as we,defineSelectPropSchema as Te,defineSwitchPropSchema as Ee,defineTextPropSchema as De,defineTextareaPropSchema as Oe,defineTimeRangePropSchema as ke,getSchemaDefaultProps as Ae,withInspectorMeta as je}from"./utils/schema/schema.mjs";import{generateMaterialMap as Me,generateMaterialMapGroupByCategory as Ne}from"./utils/schema/utils.mjs";import{base64ToUint8Array as Pe,uint8ArrayToBase64 as Fe,uint8ArrayToNumberArray as Ie}from"./utils/uint8.mjs";import{encryptBncBuffer as Le,uploadFile as Re}from"./utils/upload-file.mjs";export{I as EventBus,R as HttpClient,z as HttpError,ge as INSPECTOR_META_KEY,oe as PASSWORD_ALLOWED_SPECIAL_CHARS,se as PASSWORD_MAX_LENGTH,ce as PASSWORD_MIN_LENGTH,Pe as base64ToUint8Array,B as checkFollowStatus,t as clearMyChannelsFromStorage,e as cn,ee as components,Y as compressImage,re as createInputAndSelectFile,a as debounceFun,k as decryptImageToArrayBuffer,A as decryptImageToUint8Array,j as decryptImageUrl,X as defaultImageCompressionMaxSizeMB,Z as defaultImageCompressionQuality,_e as defineArrayItemPropSchema,ve as defineCheckboxPropSchema,ye as defineColorPropSchema,be as defineComponentPropsSchema,xe as defineDatetimePropSchema,me as defineMaterial,Se as defineNumberPropSchema,Ce as defineObjectPropSchema,we as defineSelectEnumPropSchema,Te as defineSelectPropSchema,Ee as defineSwitchPropSchema,De as defineTextPropSchema,Oe as defineTextareaPropSchema,ke as defineTimeRangePropSchema,G as disablePageScroll,K as enablePageScroll,Le as encryptBncBuffer,V as followUser,o as formatVideoDuration,s as generateDynamicSign,Me as generateMaterialMap,Ne as generateMaterialMapGroupByCategory,c as generateUUID,H as getAppId,l as getAtUserElement,u as getCookie,ie as getCoverImage,d as getCurrentSecondTime,U as getCurrentUserId,le as getFirstInvalidPasswordChar,Q as getImageCompressionQuality,ae as getImageResolutionFromFile,ue as getPasswordCharacterTypeCount,de as getPasswordValidationErrorText,O as getResUrl,Ae as getSchemaDefaultProps,f as getUserId,M as guessImageContentTypeFromUrl,p as hashPassword,L as httpClient,$ as imageCompressionQualityRules,m as isClient,N as isEncryptedImageUrl,h as isMobileDevice,te as loadComponent,n as loadHiddenChannelIdsFromStorage,r as loadMyChannelsFromStorage,q as normalizeClassName,g as numToString,he as overwriteMaterial,_ as parseResolution,v as parseTextAtUserIds,J as pxToVw,y as randomString,b as removeCookie,x as replaceAtUserElement,S as replaceAtUserElementHtmlStr,P as resolveImageUrl,ne as rewriteComponent,i as saveHiddenChannelIdsToStorage,C as secondToTime,w as setCookie,F as shouldProbeImageUrl,T as stringToNumber,E as stripHtmlTags,Fe as uint8ArrayToBase64,Ie as uint8ArrayToNumberArray,W as unfollowUser,D as updateUrlParams,Re as uploadFile,pe as uploadToS3WithPresignedUrl,fe as validatePasswordPair,je as withInspectorMeta};
2
+ import{cn as e}from"./utils/cn.mjs";import{clearMyChannelsFromStorage as t,loadHiddenChannelIdsFromStorage as n,loadMyChannelsFromStorage as r,saveHiddenChannelIdsToStorage as i}from"./utils/channel-storage.mjs";import{debounceFun as a,formatVideoDuration as o,generateDynamicSign as s,generateUUID as c,getAtUserElement as l,getCookie as u,getCurrentSecondTime as d,getUserId as f,hashPassword as p,isClient as m,isMobileDevice as h,numToString as g,parseResolution as _,parseTextAtUserIds as v,randomString as y,removeCookie as b,replaceAtUserElement as x,replaceAtUserElementHtmlStr as S,secondToTime as C,setCookie as w,stringToNumber as T,stripHtmlTags as E,updateUrlParams as D}from"./utils/common.mjs";import O from"./utils/get-res-url.mjs";import{decryptImageToArrayBuffer as k,decryptImageToUint8Array as A,decryptImageUrl as j,guessImageContentTypeFromUrl as M,isEncryptedImageUrl as N,resolveImageUrl as P,shouldProbeImageUrl as F,shouldUseApiResDirectly as I}from"./utils/decrypt-image-client.mjs";import L from"./utils/event-bus.mjs";import R,{HttpClient as z,HttpError as B}from"./utils/http.mjs";import{checkFollowStatus as V,followUser as H,getAppId as U,getCurrentUserId as W,unfollowUser as G}from"./utils/follow-service.mjs";import{disablePageScroll as K,enablePageScroll as q,normalizeClassName as J,pxToVw as Y}from"./utils/helper.mjs";import{compressImage as X,defaultImageCompressionMaxSizeMB as Z,defaultImageCompressionQuality as Q,getImageCompressionQuality as $,imageCompressionQualityRules as ee}from"./utils/image-compression.mjs";import{components as te,loadComponent as ne,rewriteComponent as re}from"./utils/loaders.mjs";import{createInputAndSelectFile as ie,getCoverImage as ae,getImageResolutionFromFile as oe}from"./utils/media.mjs";import{PASSWORD_ALLOWED_SPECIAL_CHARS as se,PASSWORD_MAX_LENGTH as ce,PASSWORD_MIN_LENGTH as le,getFirstInvalidPasswordChar as ue,getPasswordCharacterTypeCount as de,getPasswordValidationErrorText as fe,validatePasswordPair as pe}from"./utils/password-validator.mjs";import{uploadToS3WithPresignedUrl as me}from"./utils/s3-uploader.mjs";import{defineMaterial as he,overwriteMaterial as ge}from"./utils/schema/material.mjs";import{INSPECTOR_META_KEY as _e,defineArrayItemPropSchema as ve,defineCheckboxPropSchema as ye,defineColorPropSchema as be,defineComponentPropsSchema as xe,defineDatetimePropSchema as Se,defineNumberPropSchema as Ce,defineObjectPropSchema as we,defineSelectEnumPropSchema as Te,defineSelectPropSchema as Ee,defineSwitchPropSchema as De,defineTextPropSchema as Oe,defineTextareaPropSchema as ke,defineTimeRangePropSchema as Ae,getSchemaDefaultProps as je,withInspectorMeta as Me}from"./utils/schema/schema.mjs";import{generateMaterialMap as Ne,generateMaterialMapGroupByCategory as Pe}from"./utils/schema/utils.mjs";import{base64ToUint8Array as Fe,uint8ArrayToBase64 as Ie,uint8ArrayToNumberArray as Le}from"./utils/uint8.mjs";import{encryptBncBuffer as Re,uploadFile as ze}from"./utils/upload-file.mjs";export{L as EventBus,z as HttpClient,B as HttpError,_e as INSPECTOR_META_KEY,se as PASSWORD_ALLOWED_SPECIAL_CHARS,ce as PASSWORD_MAX_LENGTH,le as PASSWORD_MIN_LENGTH,Fe as base64ToUint8Array,V as checkFollowStatus,t as clearMyChannelsFromStorage,e as cn,te as components,X as compressImage,ie as createInputAndSelectFile,a as debounceFun,k as decryptImageToArrayBuffer,A as decryptImageToUint8Array,j as decryptImageUrl,Z as defaultImageCompressionMaxSizeMB,Q as defaultImageCompressionQuality,ve as defineArrayItemPropSchema,ye as defineCheckboxPropSchema,be as defineColorPropSchema,xe as defineComponentPropsSchema,Se as defineDatetimePropSchema,he as defineMaterial,Ce as defineNumberPropSchema,we as defineObjectPropSchema,Te as defineSelectEnumPropSchema,Ee as defineSelectPropSchema,De as defineSwitchPropSchema,Oe as defineTextPropSchema,ke as defineTextareaPropSchema,Ae as defineTimeRangePropSchema,K as disablePageScroll,q as enablePageScroll,Re as encryptBncBuffer,H as followUser,o as formatVideoDuration,s as generateDynamicSign,Ne as generateMaterialMap,Pe as generateMaterialMapGroupByCategory,c as generateUUID,U as getAppId,l as getAtUserElement,u as getCookie,ae as getCoverImage,d as getCurrentSecondTime,W as getCurrentUserId,ue as getFirstInvalidPasswordChar,$ as getImageCompressionQuality,oe as getImageResolutionFromFile,de as getPasswordCharacterTypeCount,fe as getPasswordValidationErrorText,O as getResUrl,je as getSchemaDefaultProps,f as getUserId,M as guessImageContentTypeFromUrl,p as hashPassword,R as httpClient,ee as imageCompressionQualityRules,m as isClient,N as isEncryptedImageUrl,h as isMobileDevice,ne as loadComponent,n as loadHiddenChannelIdsFromStorage,r as loadMyChannelsFromStorage,J as normalizeClassName,g as numToString,ge as overwriteMaterial,_ as parseResolution,v as parseTextAtUserIds,Y as pxToVw,y as randomString,b as removeCookie,x as replaceAtUserElement,S as replaceAtUserElementHtmlStr,P as resolveImageUrl,re as rewriteComponent,i as saveHiddenChannelIdsToStorage,C as secondToTime,w as setCookie,F as shouldProbeImageUrl,I as shouldUseApiResDirectly,T as stringToNumber,E as stripHtmlTags,Ie as uint8ArrayToBase64,Le as uint8ArrayToNumberArray,G as unfollowUser,D as updateUrlParams,ze as uploadFile,me as uploadToS3WithPresignedUrl,pe as validatePasswordPair,Me as withInspectorMeta};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@funhub/platform",
3
3
  "type": "module",
4
- "version": "0.1.119",
4
+ "version": "0.1.120",
5
5
  "private": false,
6
6
  "sideEffects": [
7
7
  "**/*.css"