@kbapp/js-bridge 1.0.1-alpha.0 → 1.0.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -208,8 +208,8 @@ function M(e) {
208
208
  }
209
209
  class j {
210
210
  }
211
- const H = M(
212
- c(() => w({
211
+ const H = c(
212
+ M(() => w({
213
213
  name: "OpenActRequest",
214
214
  params: {
215
215
  type: 35,
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(r,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(r=typeof globalThis<"u"?globalThis:r||self,A(r.kbBridge={}))})(this,function(r){"use strict";var q;function A(e){if(Object.prototype.toString.call(e)!=="[object Object]")return e;const t={};return Object.keys(e).forEach(i=>{const o=e[i];o!=null&&(t[i]=Object.prototype.toString.call(o)==="[object Object]"?A(o):o)}),t}const f=class f{constructor(t){this.errorCode=t.errorCode,this.errorMsg=t.errorMsg}};f.UNKNOWN=new f({errorCode:1e3,errorMsg:"未知错误"}),f.UNSUPPORTED_VERSION=new f({errorCode:1001,errorMsg:"当前开吧版本不支持"}),f.TIMEOUT=new f({errorCode:1002,errorMsg:"执行超时"}),f.UNSUPPORTED_BRIDGE_ENV=new f({errorCode:1003,errorMsg:"请在开吧app内执行"});let p=f;const H=()=>{const e=(a,s,n)=>{var c="";typeof s=="function"&&(n=s,s={});var u={data:s===void 0?null:s};if(typeof n=="function"){var h="dscb"+window.dscb++;window[h]=n,u._dscbstub=h}if(u=JSON.stringify(u),window.flutter_inappwebview?window.flutter_inappwebview.callHandler&&(c=window.flutter_inappwebview.callHandler(""+a,u)):(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1)&&(c=prompt("_flutterDsbridge="+a,u)),c instanceof Promise)return c;try{return JSON.parse(c||"{}").data}catch{console.error("callHandle异常,JSON.parse错误")}},t=()=>window.navigator.userAgent.includes("Android")?window.flutter_inappwebview&&window.flutter_inappwebview._platformReady:!0,i=(()=>{const a=[],s=setInterval(()=>{t()&&(clearInterval(s),a.forEach(n=>{e.apply(window,n)}),a.length=0)},500);return(...n)=>{a.push(n)}})();var o={default:void 0,callHandler:function(a,s,n){return t()?e(a,s,n):i(a,s,n)},register:function(a,s,n){var c=n?window._dsaf:window._dsf;window._dsInit||(window._dsInit=!0,setTimeout(function(){o.callHandler("_dsb.dsinit")},0)),typeof s=="object"?c._obs[a]=s:c[a]=s},registerHandler:function(a,s){this.register(a,s,!0)}};return function(){if(!window._dsf){var a={_dsf:{_obs:{}},_dsaf:{_obs:{}},dscb:0,jsBridge:o,_handleMessageFromNative:function(n){var c=JSON.parse(n.data),u={id:n.callbackId,complete:!0},h=this._dsf[n.method],b=this._dsaf[n.method],U=function(P,E){u.data=P.apply(E,c),o.callHandler("_dsb.returnValue",u)},C=function(P,E){c.push(function(fe,ge){u.data=fe,u.complete=ge!==!1,o.callHandler("_dsb.returnValue",u)}),P.apply(E,c)};if(h)U(h,this._dsf);else if(b)C(b,this._dsaf);else{var T=n.method.split(".");if(T.length<2)return;var M=T.pop(),L=T.join("."),O=this._dsf._obs,_=O[L]||{},w=_[M];if(w&&typeof w=="function"){U(w,_);return}if(O=this._dsaf._obs,_=O[L]||{},w=_[M],w&&typeof w=="function"){C(w,_);return}}}};for(var s in a)window[s]=a[s]}}(),o},v=(e=>/(kb)/i.test(e)?H():{registerHandler(t,i){throw p.UNSUPPORTED_BRIDGE_ENV},callHandler(t,i,o){throw p.UNSUPPORTED_BRIDGE_ENV}})((q=window==null?void 0:window.navigator)==null?void 0:q.userAgent),S=e=>new Promise((t,i)=>{var o,a,s;try{v.registerHandler(e.name,e.handler),(o=e.success)==null||o.call(e),t()}catch(n){(a=e.fail)==null||a.call(e,n),i(n)}finally{(s=e.complete)==null||s.call(e)}});function g(e){const t=i=>{let o;const a=n=>{var c;(!o||o==="success")&&(o="success",(c=i.success)==null||c.call(i,n))},s=n=>{var c;(!o||o==="error")&&(o="error",(c=i.fail)==null||c.call(i,n))};i.timeout&&setTimeout(()=>{s(p.TIMEOUT)},i.timeout);try{v.callHandler(i.name,i.params,n=>{let c;try{typeof n=="string"&&/^\s*(\{|\[).*(\}|\])\s*$/.test(n)?c=JSON.parse(n.replace(/\n/g,"\\n").replace(/\r/g,"\\r")):c=n}catch{c=n}a(c)})}catch(n){s(n)}};return new Promise((i,o)=>{t({name:e.name,params:A(e.params),timeout:e.timeout,success:a=>{var s,n;(s=e.success)==null||s.call(e,a),(n=e.complete)==null||n.call(e),i(a)},fail:a=>{var s,n;(s=e.fail)==null||s.call(e,a),(n=e.complete)==null||n.call(e),o(a)}})})}function l(e){v.callHandler(e.name,e.params,t=>{})}function d(e){return async function(...i){const o=i[0]||{},{success:a,fail:s,complete:n,...c}=o;try{const u=await Promise.resolve(e(c));return a==null||a(u),u}catch(u){const h=u!=null&&u.errorCode?u:new p({errorCode:p.UNKNOWN.errorCode,errorMsg:String(u)});throw s==null||s(h),h}finally{n==null||n()}}}function B(e){let t;return function(...i){return t||(t=e(...i),Promise.resolve(t).catch(()=>{t=void 0}),t)}}class D{}const R=B(d(()=>g({name:"OpenActRequest",params:{type:35,data:{}}}))),I=d(async e=>(await R()).vcode>=e.minVersion);function j(e,t){return(...i)=>I({minVersion:e.minVersion}).then(o=>o?t(...i):Promise.reject(new p({errorCode:p.UNSUPPORTED_VERSION.errorCode,errorMsg:`最低版本要求${e.minVersion}`})))}const K=d(()=>{l({name:"OpenActRequest",params:{type:56,data:null}})}),W=d(()=>{l({name:"OpenActRequest",params:{type:-1,data:{}}})}),k={microphone:{description:"用于发帖上传音频"},location:{description:"获取你选择的位置信息,用于线下导航服务"},camera:{description:"收集你选中的照片或视频信息 ,用于 发表评论、分享视频"}},F=d(e=>(Object.assign(k,e),S({name:"getPermissionUsage",handler(t,i){i(k[t.permission])}}))),J=/(kb_flutter|kb_dsbridge_flutter|kb_ios|kb_android|kb_dsbridge_android)/i.test(window.navigator.userAgent),G=d(async e=>{const{kbKey:t,...i}=e,{data:o}=await g({name:"OpenActRequest",params:{type:51,data:i}});return o});class V{constructor(){this.enableImageUpload=!0,this.enableAudioUpload=!0,this.enableVideoUpload=!0,this.enableAddress=!0,this.enableMediaVideoUpload=!1,this.minTextLength=0,this.maxTextLength=1e3,this.minImageCount=0,this.maxImageCount=9,this.isAudioRequired=!1,this.isVideoRequired=!1,this.isMediaVideoRequired=!1}}function $(e){const t=new V;return e&&Object.keys(e).forEach(o=>{t[o]=e[o]}),{hint:t.placeholder,initialText:t.initialText,audio:t.enableAudioUpload,image:t.enableImageUpload,video:t.enableVideoUpload,address:t.enableAddress,asset_video:t.enableMediaVideoUpload,text_must:t.minTextLength>0,content_min_length:t.minTextLength,content_max_length:t.maxTextLength,image_must:t.minImageCount>0,min_image_count:t.minImageCount,max_image_count:t.maxImageCount,audio_must:t.isAudioRequired,video_must:t.isVideoRequired,asset_video_must:t.isMediaVideoRequired}}const z=d(async(e={})=>g({name:"OpenActRequest",params:{type:13,data:e}}).then(({data:t})=>{const{pic:i,...o}=t;return{images:i,...o}})),Q=d(e=>{l({name:"OpenActRequest",params:{type:69,data:{eventId:e.eventName,trackParams:e.eventParams,ExtEventType:e.eventType}}})}),X=d(e=>{l({name:"OpenActRequest",params:{type:1001,data:e}})}),Y=d(e=>{l({name:"OpenActRequest",params:{type:62,data:e}})}),Z=d(e=>{l({name:"OpenActRequest",params:{type:63,data:e}})}),x=d(()=>g({name:"OpenActRequest",params:{type:26,data:{}}})),ee=d(e=>{l({name:"OpenActRequest",params:{type:71,data:e}})}),te=d(e=>{l({name:"OpenActRequest",params:{type:64,data:e}})}),ne=d(e=>{l({name:"OpenActRequest",params:{type:58,data:e}})}),m="SHARE_EVENT_NAME";class ie{}const re=d(e=>S({name:"CommonShare",handler(t,i){window.dispatchEvent(new Event(m)),"onShareApp"in e&&e.onShareApp?i({type:12,data:e.onShareApp()}):i({type:12,data:e})}})),oe=d(async e=>{window.dispatchEvent(new Event(m)),l({name:"OpenActRequest",params:{type:58,data:e}})});function se(e){return window.addEventListener(m,e),()=>{window.removeEventListener(m,e)}}const ae=d(e=>{l({name:"OpenActRequest",params:{type:68,data:{show:e.showMenu,showActionMode:e.panelStyle||0}}})}),ce=d(()=>g({name:"OpenActRequest",params:{type:72}})),de=d(async()=>{l({name:"OpenActRequest",params:{type:73}})});class ue{}const N=d(async()=>(await g({name:"OpenActRequest",params:{type:31,data:{requireLogin:!1}}})).data||null),y=(()=>{const e=new Set,t=(()=>{let i;const o=a=>{i=setTimeout(async()=>{const n=await N();if(!n)return o(++a);e.forEach(c=>c(n)),e.clear()},(n=>n===0?0:n<50?600:n<80?1e3:5e3)(a))};return{start(){i&&clearTimeout(i),e.size>0&&o(0)},stop(){i&&clearTimeout(i)}}})();return{addTask(i){e.add(i)},removeTask(i){e.delete(i),e.size===0&&t.stop()},triggerCheckTask(){t.start()}}})(),le=d(async()=>{y.triggerCheckTask(),g({name:"OpenActRequest",params:{type:31,data:{requireLogin:!0}},success(e){var t;(t=e.data)!=null&&t.userId&&y.triggerCheckTask()}})}),pe=e=>(y.addTask(e),y.triggerCheckTask(),()=>{y.removeTask(e)});r.AppBaseInfo=D,r.AppLoginInfo=ue,r.AppShareModel=ie,r.BridgeCode=p,r.IS_KB_APP_ENV=J,r.PostEditorParams=V,r.checkForNewVersion=K,r.closeWebView=W,r.createPostEditorParams=$,r.decorateAppVersionSupport=j,r.defineAppShareModel=re,r.defineAppSharePanelState=ae,r.defineBridgeCallback=S,r.definePermissionUsage=F,r.generateKBSign=G,r.getAppBaseInfo=R,r.getAppLoginInfo=N,r.getAppSubscribeNotifyStatus=ce,r.isAppVersionSupport=I,r.onAppLoginSuccess=pe,r.onAppSharePanelShow=se,r.openAppSharePanel=oe,r.openAppSubscribeNotifySettings=de,r.openPostEditor=z,r.reportDAEvent=Q,r.runAction=X,r.runBridgeApi=l,r.runBridgeApiResponse=g,r.saveImageToLocal=Y,r.saveVideoToLocal=Z,r.scanQRCode=x,r.setScreenOrientation=ee,r.setWebViewTitle=te,r.shareImage=ne,r.triggerAppLogin=le,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
1
+ (function(r,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(r=typeof globalThis<"u"?globalThis:r||self,A(r.kbBridge={}))})(this,function(r){"use strict";var q;function A(e){if(Object.prototype.toString.call(e)!=="[object Object]")return e;const t={};return Object.keys(e).forEach(i=>{const o=e[i];o!=null&&(t[i]=Object.prototype.toString.call(o)==="[object Object]"?A(o):o)}),t}const f=class f{constructor(t){this.errorCode=t.errorCode,this.errorMsg=t.errorMsg}};f.UNKNOWN=new f({errorCode:1e3,errorMsg:"未知错误"}),f.UNSUPPORTED_VERSION=new f({errorCode:1001,errorMsg:"当前开吧版本不支持"}),f.TIMEOUT=new f({errorCode:1002,errorMsg:"执行超时"}),f.UNSUPPORTED_BRIDGE_ENV=new f({errorCode:1003,errorMsg:"请在开吧app内执行"});let p=f;const H=()=>{const e=(a,s,n)=>{var c="";typeof s=="function"&&(n=s,s={});var u={data:s===void 0?null:s};if(typeof n=="function"){var h="dscb"+window.dscb++;window[h]=n,u._dscbstub=h}if(u=JSON.stringify(u),window.flutter_inappwebview?window.flutter_inappwebview.callHandler&&(c=window.flutter_inappwebview.callHandler(""+a,u)):(window._dswk||navigator.userAgent.indexOf("_dsbridge")!=-1)&&(c=prompt("_flutterDsbridge="+a,u)),c instanceof Promise)return c;try{return JSON.parse(c||"{}").data}catch{console.error("callHandle异常,JSON.parse错误")}},t=()=>window.navigator.userAgent.includes("Android")?window.flutter_inappwebview&&window.flutter_inappwebview._platformReady:!0,i=(()=>{const a=[],s=setInterval(()=>{t()&&(clearInterval(s),a.forEach(n=>{e.apply(window,n)}),a.length=0)},500);return(...n)=>{a.push(n)}})();var o={default:void 0,callHandler:function(a,s,n){return t()?e(a,s,n):i(a,s,n)},register:function(a,s,n){var c=n?window._dsaf:window._dsf;window._dsInit||(window._dsInit=!0,setTimeout(function(){o.callHandler("_dsb.dsinit")},0)),typeof s=="object"?c._obs[a]=s:c[a]=s},registerHandler:function(a,s){this.register(a,s,!0)}};return function(){if(!window._dsf){var a={_dsf:{_obs:{}},_dsaf:{_obs:{}},dscb:0,jsBridge:o,_handleMessageFromNative:function(n){var c=JSON.parse(n.data),u={id:n.callbackId,complete:!0},h=this._dsf[n.method],b=this._dsaf[n.method],U=function(P,E){u.data=P.apply(E,c),o.callHandler("_dsb.returnValue",u)},C=function(P,E){c.push(function(fe,ge){u.data=fe,u.complete=ge!==!1,o.callHandler("_dsb.returnValue",u)}),P.apply(E,c)};if(h)U(h,this._dsf);else if(b)C(b,this._dsaf);else{var T=n.method.split(".");if(T.length<2)return;var M=T.pop(),L=T.join("."),O=this._dsf._obs,_=O[L]||{},w=_[M];if(w&&typeof w=="function"){U(w,_);return}if(O=this._dsaf._obs,_=O[L]||{},w=_[M],w&&typeof w=="function"){C(w,_);return}}}};for(var s in a)window[s]=a[s]}}(),o},v=(e=>/(kb)/i.test(e)?H():{registerHandler(t,i){throw p.UNSUPPORTED_BRIDGE_ENV},callHandler(t,i,o){throw p.UNSUPPORTED_BRIDGE_ENV}})((q=window==null?void 0:window.navigator)==null?void 0:q.userAgent),S=e=>new Promise((t,i)=>{var o,a,s;try{v.registerHandler(e.name,e.handler),(o=e.success)==null||o.call(e),t()}catch(n){(a=e.fail)==null||a.call(e,n),i(n)}finally{(s=e.complete)==null||s.call(e)}});function g(e){const t=i=>{let o;const a=n=>{var c;(!o||o==="success")&&(o="success",(c=i.success)==null||c.call(i,n))},s=n=>{var c;(!o||o==="error")&&(o="error",(c=i.fail)==null||c.call(i,n))};i.timeout&&setTimeout(()=>{s(p.TIMEOUT)},i.timeout);try{v.callHandler(i.name,i.params,n=>{let c;try{typeof n=="string"&&/^\s*(\{|\[).*(\}|\])\s*$/.test(n)?c=JSON.parse(n.replace(/\n/g,"\\n").replace(/\r/g,"\\r")):c=n}catch{c=n}a(c)})}catch(n){s(n)}};return new Promise((i,o)=>{t({name:e.name,params:A(e.params),timeout:e.timeout,success:a=>{var s,n;(s=e.success)==null||s.call(e,a),(n=e.complete)==null||n.call(e),i(a)},fail:a=>{var s,n;(s=e.fail)==null||s.call(e,a),(n=e.complete)==null||n.call(e),o(a)}})})}function l(e){v.callHandler(e.name,e.params,t=>{})}function d(e){return async function(...i){const o=i[0]||{},{success:a,fail:s,complete:n,...c}=o;try{const u=await Promise.resolve(e(c));return a==null||a(u),u}catch(u){const h=u!=null&&u.errorCode?u:new p({errorCode:p.UNKNOWN.errorCode,errorMsg:String(u)});throw s==null||s(h),h}finally{n==null||n()}}}function B(e){let t;return function(...i){return t||(t=e(...i),Promise.resolve(t).catch(()=>{t=void 0}),t)}}class D{}const R=d(B(()=>g({name:"OpenActRequest",params:{type:35,data:{}}}))),I=d(async e=>(await R()).vcode>=e.minVersion);function j(e,t){return(...i)=>I({minVersion:e.minVersion}).then(o=>o?t(...i):Promise.reject(new p({errorCode:p.UNSUPPORTED_VERSION.errorCode,errorMsg:`最低版本要求${e.minVersion}`})))}const K=d(()=>{l({name:"OpenActRequest",params:{type:56,data:null}})}),W=d(()=>{l({name:"OpenActRequest",params:{type:-1,data:{}}})}),k={microphone:{description:"用于发帖上传音频"},location:{description:"获取你选择的位置信息,用于线下导航服务"},camera:{description:"收集你选中的照片或视频信息 ,用于 发表评论、分享视频"}},F=d(e=>(Object.assign(k,e),S({name:"getPermissionUsage",handler(t,i){i(k[t.permission])}}))),J=/(kb_flutter|kb_dsbridge_flutter|kb_ios|kb_android|kb_dsbridge_android)/i.test(window.navigator.userAgent),G=d(async e=>{const{kbKey:t,...i}=e,{data:o}=await g({name:"OpenActRequest",params:{type:51,data:i}});return o});class V{constructor(){this.enableImageUpload=!0,this.enableAudioUpload=!0,this.enableVideoUpload=!0,this.enableAddress=!0,this.enableMediaVideoUpload=!1,this.minTextLength=0,this.maxTextLength=1e3,this.minImageCount=0,this.maxImageCount=9,this.isAudioRequired=!1,this.isVideoRequired=!1,this.isMediaVideoRequired=!1}}function $(e){const t=new V;return e&&Object.keys(e).forEach(o=>{t[o]=e[o]}),{hint:t.placeholder,initialText:t.initialText,audio:t.enableAudioUpload,image:t.enableImageUpload,video:t.enableVideoUpload,address:t.enableAddress,asset_video:t.enableMediaVideoUpload,text_must:t.minTextLength>0,content_min_length:t.minTextLength,content_max_length:t.maxTextLength,image_must:t.minImageCount>0,min_image_count:t.minImageCount,max_image_count:t.maxImageCount,audio_must:t.isAudioRequired,video_must:t.isVideoRequired,asset_video_must:t.isMediaVideoRequired}}const z=d(async(e={})=>g({name:"OpenActRequest",params:{type:13,data:e}}).then(({data:t})=>{const{pic:i,...o}=t;return{images:i,...o}})),Q=d(e=>{l({name:"OpenActRequest",params:{type:69,data:{eventId:e.eventName,trackParams:e.eventParams,ExtEventType:e.eventType}}})}),X=d(e=>{l({name:"OpenActRequest",params:{type:1001,data:e}})}),Y=d(e=>{l({name:"OpenActRequest",params:{type:62,data:e}})}),Z=d(e=>{l({name:"OpenActRequest",params:{type:63,data:e}})}),x=d(()=>g({name:"OpenActRequest",params:{type:26,data:{}}})),ee=d(e=>{l({name:"OpenActRequest",params:{type:71,data:e}})}),te=d(e=>{l({name:"OpenActRequest",params:{type:64,data:e}})}),ne=d(e=>{l({name:"OpenActRequest",params:{type:58,data:e}})}),m="SHARE_EVENT_NAME";class ie{}const re=d(e=>S({name:"CommonShare",handler(t,i){window.dispatchEvent(new Event(m)),"onShareApp"in e&&e.onShareApp?i({type:12,data:e.onShareApp()}):i({type:12,data:e})}})),oe=d(async e=>{window.dispatchEvent(new Event(m)),l({name:"OpenActRequest",params:{type:58,data:e}})});function se(e){return window.addEventListener(m,e),()=>{window.removeEventListener(m,e)}}const ae=d(e=>{l({name:"OpenActRequest",params:{type:68,data:{show:e.showMenu,showActionMode:e.panelStyle||0}}})}),ce=d(()=>g({name:"OpenActRequest",params:{type:72}})),de=d(async()=>{l({name:"OpenActRequest",params:{type:73}})});class ue{}const N=d(async()=>(await g({name:"OpenActRequest",params:{type:31,data:{requireLogin:!1}}})).data||null),y=(()=>{const e=new Set,t=(()=>{let i;const o=a=>{i=setTimeout(async()=>{const n=await N();if(!n)return o(++a);e.forEach(c=>c(n)),e.clear()},(n=>n===0?0:n<50?600:n<80?1e3:5e3)(a))};return{start(){i&&clearTimeout(i),e.size>0&&o(0)},stop(){i&&clearTimeout(i)}}})();return{addTask(i){e.add(i)},removeTask(i){e.delete(i),e.size===0&&t.stop()},triggerCheckTask(){t.start()}}})(),le=d(async()=>{y.triggerCheckTask(),g({name:"OpenActRequest",params:{type:31,data:{requireLogin:!0}},success(e){var t;(t=e.data)!=null&&t.userId&&y.triggerCheckTask()}})}),pe=e=>(y.addTask(e),y.triggerCheckTask(),()=>{y.removeTask(e)});r.AppBaseInfo=D,r.AppLoginInfo=ue,r.AppShareModel=ie,r.BridgeCode=p,r.IS_KB_APP_ENV=J,r.PostEditorParams=V,r.checkForNewVersion=K,r.closeWebView=W,r.createPostEditorParams=$,r.decorateAppVersionSupport=j,r.defineAppShareModel=re,r.defineAppSharePanelState=ae,r.defineBridgeCallback=S,r.definePermissionUsage=F,r.generateKBSign=G,r.getAppBaseInfo=R,r.getAppLoginInfo=N,r.getAppSubscribeNotifyStatus=ce,r.isAppVersionSupport=I,r.onAppLoginSuccess=pe,r.onAppSharePanelShow=se,r.openAppSharePanel=oe,r.openAppSubscribeNotifySettings=de,r.openPostEditor=z,r.reportDAEvent=Q,r.runAction=X,r.runBridgeApi=l,r.runBridgeApiResponse=g,r.saveImageToLocal=Y,r.saveVideoToLocal=Z,r.scanQRCode=x,r.setScreenOrientation=ee,r.setWebViewTitle=te,r.shareImage=ne,r.triggerAppLogin=le,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.0.1-alpha.0",
6
+ "version": "1.0.2-alpha.0",
7
7
  "description": "开吧客户端桥接",
8
8
  "author": "along",
9
9
  "type": "module",