liveblocks 1.1.0 → 1.1.1-pnpmtest1
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/README.md
CHANGED
|
@@ -43,11 +43,10 @@ Automatically detects your package manager (npm, yarn, pnpm, or bun).
|
|
|
43
43
|
## Run with Docker
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
docker run -p 1153:1153 ghcr.io/liveblocks/
|
|
46
|
+
docker run -p 1153:1153 ghcr.io/liveblocks/dev-server
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
See [DOCKER.md](./DOCKER.md) for configuration
|
|
50
|
-
signature verification.
|
|
49
|
+
See [DOCKER.md](./DOCKER.md) for configuration and volume mounts.
|
|
51
50
|
|
|
52
51
|
## License
|
|
53
52
|
|
|
@@ -381,7 +381,7 @@ that the user can disable this by setting it to "false".`}import{execSync as rt}
|
|
|
381
381
|
</main>
|
|
382
382
|
</body>
|
|
383
383
|
</html>
|
|
384
|
-
`;var K=new gt({authorize:()=>!0});K.route("GET /v7",()=>co(426));K.route("GET /v8",()=>co(426));K.route("GET /health",()=>ft({status:"ok"}));K.route("GET /",()=>pt(ao.replace("__VERSION__","1.1.0")));import{QueryParser as vt}from"@liveblocks/query-parser";import{jsonObjectYolo as Tt,ROOT_YDOC_ID as Te,snapshotToLossyJson_eager as bt,snapshotToPlainLson_eager as po}from"@liveblocks/server";import{json as ie,ZenRouter as St}from"@liveblocks/zenrouter";import{array as J,constant as yt,either as _t,enum_ as Rt,nullable as mo,object as be,optional as N,record as Z,string as R}from"decoders";import{Base64 as Ot}from"js-base64";import*as ae from"yjs";import*as T from"yjs";function ht(e){return e.content instanceof T.ContentFormat||e.content instanceof T.ContentEmbed?"text":"arr"in e.content?"array":"str"in e.content?"text":"type"in e.content?"xml":"unknown"}function It(e){let o=[],t=e;for(;t!==null;){if(!t.deleted)if(t.content instanceof T.ContentType)o.push(t.content.type.toJSON());else if(t.content instanceof T.ContentString)o.push(t.content.str);else if(t.content instanceof T.ContentFormat){let{key:s,value:i}=t.content;o.push({key:s,value:i})}else t.content instanceof T.ContentEmbed&&o.push(t.content.embed);t=t.right}return o}function uo(e,o,t,s=!1){if(!o._first&&o._map instanceof Map&&o._map.size>0)return e.getMap(t).toJSON();if(o._first!==null){let i=ht(o._first);if(i==="text")return s?It(o._first):e.getText(t).toJSON();if(i==="array")return e.getArray(t).toJSON();if(i==="xml")return e.getXmlFragment(t).toJSON()}return o.toJSON()}var Et={ytext:T.Text,yxmlfragment:T.XmlFragment,yxmltext:T.XmlText,ymap:T.Map,yarray:T.Array};function lo(e,o="",t=!1,s=""){let i={};if(o.length){if(e.share.has(o)){if(s.length){let a=Et[s];if(a)return e.get(o,a).toJSON()}return{[o]:uo(e,e.share.get(o),o,t)}}return{[o]:""}}for(let[a,d]of e.share)i[a]=uo(e,d,a,t);return i}var fo=(t=>(t.PlainLson="plain-lson",t.LossyJson="json",t))(fo||{}),Ct=Rt(fo),go=Z(R,_t(R,J(R))),n=new St({authorize:({req:e})=>ne(e)});function x(e){return ie({error:"ROOM_NOT_FOUND",message:`Room with id "${e}" not found.`},404)}var Lt=new vt({fields:{roomId:"string"},indexableFields:{metadata:"token"}});function wt(e){let o=Lt.parse(e),t={};for(let s of o.query.allOf)switch(s.type){case"PrefixCondition":{s.field.type==="DirectField"&&s.field.ref.name==="roomId"&&(t.roomId={value:s.prefix.value,operator:"^"});break}case"ExactCondition":{s.field.type==="KeyedField"&&s.field.base.name==="metadata"&&s.value.type==="LiteralString"&&(t.metadata??={},t.metadata[s.field.key]=s.value.value);break}}return t}function de(e){return{type:"room",id:e.id,organizationId:e.organizationId,createdAt:e.createdAt,metadata:e.metadata,defaultAccesses:e.defaultAccesses,groupsAccesses:e.groupsAccesses,usersAccesses:e.usersAccesses}}n.route("GET /v2/rooms/<roomId>",({p:e})=>{let o=O(e.roomId);if(!o)throw x(e.roomId);return de(o)});n.route("GET /v2/rooms",({url:e})=>{let o,t=e.searchParams.get("query");if(t)try{o=wt(t)}catch(d){return ie({error:"INVALID_QUERY",message:d instanceof Error?d.message:String(d)},422)}else{let d={};for(let[m,h]of e.searchParams.entries())m.startsWith("metadata.")&&(d[m.slice(9)]=h);Object.keys(d).length>0&&(o={metadata:d})}let s=e.searchParams.get("organizationId")??void 0;return s&&(o={...o,organizationId:s}),{data:Je(o).map(de),nextPage:null,nextCursor:null}});n.route("POST /v2/rooms",be({id:R,organizationId:N(R),defaultAccesses:N(J(R)),metadata:N(go),usersAccesses:N(Z(R,J(R))),groupsAccesses:N(Z(R,J(R)))}),({body:e})=>{if(O(e.id))return ie({error:"ROOM_ALREADY_EXISTS",message:`Room with id "${e.id}" already exists.`},409);let o=re(e.id,{organizationId:e.organizationId,defaultAccesses:e.defaultAccesses,metadata:e.metadata,usersAccesses:e.usersAccesses,groupsAccesses:e.groupsAccesses});return de(o)});n.route("POST /v2/rooms/<roomId>",be({defaultAccesses:N(J(R)),metadata:N(go),usersAccesses:N(Z(R,mo(J(R)))),groupsAccesses:N(Z(R,mo(J(R))))}),({p:e,body:o})=>{let t=Ge(e.roomId,{defaultAccesses:o.defaultAccesses,metadata:o.metadata,usersAccesses:o.usersAccesses,groupsAccesses:o.groupsAccesses});if(!t)throw x(e.roomId);return de(t)});n.route("DELETE /v2/rooms/<roomId>",async({p:e})=>(await ze(e.roomId),new Response(null,{status:204})));n.route("GET /v2/rooms/<roomId>/storage",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=Ct.value(e.searchParams.get("format"))??"plain-lson",s=L(o.roomId);await s.load();let i=s.storage.loadedDriver.get_snapshot(!1),a=t==="json"?bt(i):po(i);return new Response(JSON.stringify(a),{status:200,headers:{"Content-Type":"application/json"}})});n.route("POST /v2/rooms/<roomId>/storage",be({liveblocksType:yt("LiveObject"),data:Tt}).refineType(),async({p:e,body:o})=>{if(!O(e.roomId))throw x(e.roomId);let t=L(e.roomId);await t.load();let s=t.storage.loadedDriver.get_snapshot(!1),i=po(s);return Object.keys(i.data).length>0?new Response(JSON.stringify({error:"CANNOT_UPDATE_EXISTING_STORAGE",message:"The room already has storage data. It's only possible to initialize the storage for an empty room.",suggestion:"Create another room or clear this room storage first."}),{status:409,headers:{"Content-Type":"application/json"}}):(await t.driver.DANGEROUSLY_reset_nodes(o),t.unload(),new Response(JSON.stringify(o),{status:200,headers:{"Content-Type":"application/json"}}))});n.route("DELETE /v2/rooms/<roomId>/storage",async({p:e})=>{if(!O(e.roomId))throw x(e.roomId);let o=L(e.roomId);await o.load();let t={liveblocksType:"LiveObject",data:{}};return await o.driver.DANGEROUSLY_reset_nodes(t),o.unload(),new Response(null,{status:204})});n.route("GET /v2/rooms/<roomId>/ydoc",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=L(o.roomId);await t.load();let s=e.searchParams.get("key")??"",i=e.searchParams.get("type")??"",a=e.searchParams.get("guid")??Te,d=e.searchParams.get("formatting")!==null,m=await t.yjsStorage.getYDoc(a),h=lo(m,s,d,i);return new Response(JSON.stringify(h),{status:200,headers:{"Content-Type":"application/json"}})});n.route("PUT /v2/rooms/<roomId>/ydoc",async({req:e,url:o,p:t})=>{if(e.headers.get("content-type")!=="application/octet-stream")return new Response(JSON.stringify({error:"BAD_REQUEST",message:'Expected "Content-Type" header to be "application/octet-stream", and the HTTP body to be a valid binary Yjs update.'}),{status:400,headers:{"Content-Type":"application/json"}});if(!O(t.roomId))throw x(t.roomId);let s=L(t.roomId);await s.load();let i=await e.arrayBuffer(),a=Ot.fromUint8Array(new Uint8Array(i)),d=o.searchParams.get("guid"),h=o.searchParams.get("encoder")==="v2",f=d&&d!==Te?d:void 0;try{return await s.mutex.runExclusive(()=>s.yjsStorage.addYDocUpdate({},a,f,h)),new Response(JSON.stringify({success:!0}),{status:200,headers:{"Content-Type":"application/json"}})}catch(u){return new Response(JSON.stringify({error:"UNPROCESSABLE_ENTITY",message:u instanceof Error?u.message:"Could not apply update",suggestion:"Please ensure the update is correct, and you selected the correct encoder to use (v1 or v2)."}),{status:422,headers:{"Content-Type":"application/json"}})}});n.route("GET /v2/rooms/<roomId>/ydoc-binary",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=L(o.roomId);await t.load();let s=e.searchParams.get("guid")??Te,i=e.searchParams.get("encoder"),a=await t.yjsStorage.getYDoc(s),d=i==="v2"?ae.encodeStateAsUpdateV2(a):ae.encodeStateAsUpdate(a);return new Response(d,{status:200,headers:{"Content-Type":"application/octet-stream"}})});n.route("GET /v2/rooms/<roomId>/active_users",({p:e})=>{if(!O(e.roomId))throw x(e.roomId);let t=L(e.roomId).listSessions().map(s=>({type:"user",connectionId:s.actor,id:s.user.id,info:s.user.info}));return ie({data:t})});n.route("PATCH /v2/rooms/<roomId>/storage/json-patch",()=>r()),n.route("POST /v2/rooms/<roomId>/presence",()=>r()),n.route("GET /v2/rooms/<roomId>/threads",()=>r()),n.route("POST /v2/rooms/<roomId>/upsert",()=>r()),n.route("POST /v2/rooms/<roomId>/update-room-id",()=>r()),n.route("POST /v2/rooms/<roomId>/update-tenant-id",()=>r()),n.route("POST /v2/rooms/<roomId>/update-organization-id",()=>r()),n.route("GET /v2/rooms/<roomId>/prewarm",()=>r()),n.route("POST /v2/rooms/<roomId>/request-storage-mutation",()=>r()),n.route("POST /v2/rooms/<roomId>/send-message",()=>r()),n.route("POST /v2/rooms/<roomId>/broadcast_event",()=>r()),n.route("GET /v2/rooms/<roomId>/versions",()=>r()),n.route("GET /v2/rooms/<roomId>/version/<version>",()=>r()),n.route("POST /v2/rooms/<roomId>/version",()=>r()),n.route("POST /v2/rooms/<roomId>/threads",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/mark-as-resolved",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/mark-as-unresolved",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/subscribe",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/unsubscribe",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/subscriptions",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/metadata",()=>r()),n.route("DELETE /v2/rooms/<roomId>/threads/<threadId>",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/participants",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/inbox-notifications",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/metadata",()=>r()),n.route("DELETE /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/add-reaction",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/remove-reaction",()=>r()),n.route("GET /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("GET /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("POST /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("POST /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("DELETE /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("DELETE /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("GET /v2/users/<userId>/inbox-notifications/<inboxNotificationId>",()=>r()),n.route("DELETE /v2/users/<userId>/inbox-notifications/<inboxNotificationId>",()=>r()),n.route("GET /v2/users/<userId>/inbox-notifications",()=>r()),n.route("DELETE /v2/users/<userId>/inbox-notifications",()=>r()),n.route("GET /v2/users/<userId>/notification-settings",()=>r()),n.route("POST /v2/users/<userId>/notification-settings",()=>r()),n.route("DELETE /v2/users/<userId>/notification-settings",()=>r()),n.route("GET /v2/users/<userId>/room-subscription-settings",()=>r()),n.route("GET /v2/users/<userId>/threads",()=>r()),n.route("POST /v2/inbox-notifications/trigger",()=>r()),n.route("POST /v2/inbox-notifications/<inboxNotificationId>/read",()=>r()),n.route("GET /v2/threads",()=>r()),n.route("POST /v2/groups",()=>r()),n.route("GET /v2/groups/<groupId>",()=>r()),n.route("POST /v2/groups/<groupId>/add-members",()=>r()),n.route("POST /v2/groups/<groupId>/remove-members",()=>r()),n.route("DELETE /v2/groups/<groupId>",()=>r()),n.route("GET /v2/groups",()=>r()),n.route("GET /v2/users/<userId>/groups",()=>r()),n.route("GET /v2/ai/copilots",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/<knowledgeSourceId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/file/<knowledgeSourceId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/web/<knowledgeSourceId>/links",()=>r()),n.route("POST /v2/ai/copilots",()=>r()),n.route("POST /v2/ai/copilots/<copilotId>",()=>r()),n.route("POST /v2/ai/copilots/<copilotId>/knowledge/web",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>/knowledge/file/<knowledgeSourceId>",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>/knowledge/web/<knowledgeSourceId>",()=>r()),n.route("PUT /v2/ai/copilots/<copilotId>/knowledge/file/<fileName>",()=>r()),n.route("GET /v2/management/projects",()=>r()),n.route("GET /v2/management/projects/<projectId>",()=>r()),n.route("POST /v2/management/projects",()=>r()),n.route("POST /v2/management/projects/<projectId>",()=>r()),n.route("DELETE /v2/management/projects/<projectId>",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks/<webhookId>/additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/delete-additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/recover-failed-messages",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/secret/roll",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/test",()=>r()),n.route("DELETE /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/activate",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/deactivate",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/roll",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/secret/roll",()=>r());function xt(e,o,t,s){if(!e.upgrade(o,{data:{refuseConnection:{code:t,message:s}}}))return new Response("Could not upgrade to WebSocket",{status:426})}var X=new kt;X.relay("/v2/authorize-user/*",q);X.relay("/v2/identify-user/*",q);X.relay("/v2/c/*",c);X.relay("/v2/*",n);X.relay("/*",K);var ye=1153;function ho(e){if(e===void 0)return;let o=Number(e);return Number.isInteger(o)&&o>0&&o<=65535?o:void 0}function At(e){return process.platform==="win32"?[process.env.COMSPEC||"cmd.exe","/c",e]:["sh","-c",e]}var Dt={description:"Start the local Liveblocks dev server",async run(e){let{options:o}=Oe(e,{port:{type:"string",short:"p",default:ye.toString()},host:{type:"string"},cmd:{type:"string",short:"c"},help:{type:"boolean",short:"h",default:!1},"no-check":{type:"boolean",default:!1},ci:{type:"boolean",default:!1},verbose:{type:"boolean",short:"v",default:!1}});if(o.help){console.log("Usage: liveblocks dev [options]"),console.log(),console.log("Start the local Liveblocks dev server"),console.log(),console.log("Options:"),console.log(` --port, -p Port to listen on (default: ${ye})`),console.log(" --host Host to bind to (default: localhost)"),console.log(" --cmd, -c Run a one-off command against a fresh server instance, then"),console.log(" shut down. Does not affect your local data in .liveblocks/."),console.log(" --ci Start a fresh server instance on every boot, ideal for CI"),console.log(" --no-check Skip project setup check on start"),console.log(" --verbose, -v Show verbose output"),console.log(" --help, -h Show help");return}let t=!1;o.ci&&(t=!0,o["no-check"]=!0),o.cmd&&(t=!0,o["no-check"]=!0);let s=ho(o.port)??ho(process.env.LIVEBLOCKS_DEVSERVER_PORT)??ye,i=o.host||process.env.LIVEBLOCKS_DEVSERVER_HOST||"localhost",a=t?Me():null;await ro(s,i)&&(console.error(`Port ${s} is already in use.
|
|
384
|
+
`;var K=new gt({authorize:()=>!0});K.route("GET /v7",()=>co(426));K.route("GET /v8",()=>co(426));K.route("GET /health",()=>ft({status:"ok"}));K.route("GET /",()=>pt(ao.replace("__VERSION__","1.1.1-pnpmtest1")));import{QueryParser as vt}from"@liveblocks/query-parser";import{jsonObjectYolo as Tt,ROOT_YDOC_ID as Te,snapshotToLossyJson_eager as bt,snapshotToPlainLson_eager as po}from"@liveblocks/server";import{json as ie,ZenRouter as St}from"@liveblocks/zenrouter";import{array as J,constant as yt,either as _t,enum_ as Rt,nullable as mo,object as be,optional as N,record as Z,string as R}from"decoders";import{Base64 as Ot}from"js-base64";import*as ae from"yjs";import*as T from"yjs";function ht(e){return e.content instanceof T.ContentFormat||e.content instanceof T.ContentEmbed?"text":"arr"in e.content?"array":"str"in e.content?"text":"type"in e.content?"xml":"unknown"}function It(e){let o=[],t=e;for(;t!==null;){if(!t.deleted)if(t.content instanceof T.ContentType)o.push(t.content.type.toJSON());else if(t.content instanceof T.ContentString)o.push(t.content.str);else if(t.content instanceof T.ContentFormat){let{key:s,value:i}=t.content;o.push({key:s,value:i})}else t.content instanceof T.ContentEmbed&&o.push(t.content.embed);t=t.right}return o}function uo(e,o,t,s=!1){if(!o._first&&o._map instanceof Map&&o._map.size>0)return e.getMap(t).toJSON();if(o._first!==null){let i=ht(o._first);if(i==="text")return s?It(o._first):e.getText(t).toJSON();if(i==="array")return e.getArray(t).toJSON();if(i==="xml")return e.getXmlFragment(t).toJSON()}return o.toJSON()}var Et={ytext:T.Text,yxmlfragment:T.XmlFragment,yxmltext:T.XmlText,ymap:T.Map,yarray:T.Array};function lo(e,o="",t=!1,s=""){let i={};if(o.length){if(e.share.has(o)){if(s.length){let a=Et[s];if(a)return e.get(o,a).toJSON()}return{[o]:uo(e,e.share.get(o),o,t)}}return{[o]:""}}for(let[a,d]of e.share)i[a]=uo(e,d,a,t);return i}var fo=(t=>(t.PlainLson="plain-lson",t.LossyJson="json",t))(fo||{}),Ct=Rt(fo),go=Z(R,_t(R,J(R))),n=new St({authorize:({req:e})=>ne(e)});function x(e){return ie({error:"ROOM_NOT_FOUND",message:`Room with id "${e}" not found.`},404)}var Lt=new vt({fields:{roomId:"string"},indexableFields:{metadata:"token"}});function wt(e){let o=Lt.parse(e),t={};for(let s of o.query.allOf)switch(s.type){case"PrefixCondition":{s.field.type==="DirectField"&&s.field.ref.name==="roomId"&&(t.roomId={value:s.prefix.value,operator:"^"});break}case"ExactCondition":{s.field.type==="KeyedField"&&s.field.base.name==="metadata"&&s.value.type==="LiteralString"&&(t.metadata??={},t.metadata[s.field.key]=s.value.value);break}}return t}function de(e){return{type:"room",id:e.id,organizationId:e.organizationId,createdAt:e.createdAt,metadata:e.metadata,defaultAccesses:e.defaultAccesses,groupsAccesses:e.groupsAccesses,usersAccesses:e.usersAccesses}}n.route("GET /v2/rooms/<roomId>",({p:e})=>{let o=O(e.roomId);if(!o)throw x(e.roomId);return de(o)});n.route("GET /v2/rooms",({url:e})=>{let o,t=e.searchParams.get("query");if(t)try{o=wt(t)}catch(d){return ie({error:"INVALID_QUERY",message:d instanceof Error?d.message:String(d)},422)}else{let d={};for(let[m,h]of e.searchParams.entries())m.startsWith("metadata.")&&(d[m.slice(9)]=h);Object.keys(d).length>0&&(o={metadata:d})}let s=e.searchParams.get("organizationId")??void 0;return s&&(o={...o,organizationId:s}),{data:Je(o).map(de),nextPage:null,nextCursor:null}});n.route("POST /v2/rooms",be({id:R,organizationId:N(R),defaultAccesses:N(J(R)),metadata:N(go),usersAccesses:N(Z(R,J(R))),groupsAccesses:N(Z(R,J(R)))}),({body:e})=>{if(O(e.id))return ie({error:"ROOM_ALREADY_EXISTS",message:`Room with id "${e.id}" already exists.`},409);let o=re(e.id,{organizationId:e.organizationId,defaultAccesses:e.defaultAccesses,metadata:e.metadata,usersAccesses:e.usersAccesses,groupsAccesses:e.groupsAccesses});return de(o)});n.route("POST /v2/rooms/<roomId>",be({defaultAccesses:N(J(R)),metadata:N(go),usersAccesses:N(Z(R,mo(J(R)))),groupsAccesses:N(Z(R,mo(J(R))))}),({p:e,body:o})=>{let t=Ge(e.roomId,{defaultAccesses:o.defaultAccesses,metadata:o.metadata,usersAccesses:o.usersAccesses,groupsAccesses:o.groupsAccesses});if(!t)throw x(e.roomId);return de(t)});n.route("DELETE /v2/rooms/<roomId>",async({p:e})=>(await ze(e.roomId),new Response(null,{status:204})));n.route("GET /v2/rooms/<roomId>/storage",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=Ct.value(e.searchParams.get("format"))??"plain-lson",s=L(o.roomId);await s.load();let i=s.storage.loadedDriver.get_snapshot(!1),a=t==="json"?bt(i):po(i);return new Response(JSON.stringify(a),{status:200,headers:{"Content-Type":"application/json"}})});n.route("POST /v2/rooms/<roomId>/storage",be({liveblocksType:yt("LiveObject"),data:Tt}).refineType(),async({p:e,body:o})=>{if(!O(e.roomId))throw x(e.roomId);let t=L(e.roomId);await t.load();let s=t.storage.loadedDriver.get_snapshot(!1),i=po(s);return Object.keys(i.data).length>0?new Response(JSON.stringify({error:"CANNOT_UPDATE_EXISTING_STORAGE",message:"The room already has storage data. It's only possible to initialize the storage for an empty room.",suggestion:"Create another room or clear this room storage first."}),{status:409,headers:{"Content-Type":"application/json"}}):(await t.driver.DANGEROUSLY_reset_nodes(o),t.unload(),new Response(JSON.stringify(o),{status:200,headers:{"Content-Type":"application/json"}}))});n.route("DELETE /v2/rooms/<roomId>/storage",async({p:e})=>{if(!O(e.roomId))throw x(e.roomId);let o=L(e.roomId);await o.load();let t={liveblocksType:"LiveObject",data:{}};return await o.driver.DANGEROUSLY_reset_nodes(t),o.unload(),new Response(null,{status:204})});n.route("GET /v2/rooms/<roomId>/ydoc",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=L(o.roomId);await t.load();let s=e.searchParams.get("key")??"",i=e.searchParams.get("type")??"",a=e.searchParams.get("guid")??Te,d=e.searchParams.get("formatting")!==null,m=await t.yjsStorage.getYDoc(a),h=lo(m,s,d,i);return new Response(JSON.stringify(h),{status:200,headers:{"Content-Type":"application/json"}})});n.route("PUT /v2/rooms/<roomId>/ydoc",async({req:e,url:o,p:t})=>{if(e.headers.get("content-type")!=="application/octet-stream")return new Response(JSON.stringify({error:"BAD_REQUEST",message:'Expected "Content-Type" header to be "application/octet-stream", and the HTTP body to be a valid binary Yjs update.'}),{status:400,headers:{"Content-Type":"application/json"}});if(!O(t.roomId))throw x(t.roomId);let s=L(t.roomId);await s.load();let i=await e.arrayBuffer(),a=Ot.fromUint8Array(new Uint8Array(i)),d=o.searchParams.get("guid"),h=o.searchParams.get("encoder")==="v2",f=d&&d!==Te?d:void 0;try{return await s.mutex.runExclusive(()=>s.yjsStorage.addYDocUpdate({},a,f,h)),new Response(JSON.stringify({success:!0}),{status:200,headers:{"Content-Type":"application/json"}})}catch(u){return new Response(JSON.stringify({error:"UNPROCESSABLE_ENTITY",message:u instanceof Error?u.message:"Could not apply update",suggestion:"Please ensure the update is correct, and you selected the correct encoder to use (v1 or v2)."}),{status:422,headers:{"Content-Type":"application/json"}})}});n.route("GET /v2/rooms/<roomId>/ydoc-binary",async({url:e,p:o})=>{if(!O(o.roomId))throw x(o.roomId);let t=L(o.roomId);await t.load();let s=e.searchParams.get("guid")??Te,i=e.searchParams.get("encoder"),a=await t.yjsStorage.getYDoc(s),d=i==="v2"?ae.encodeStateAsUpdateV2(a):ae.encodeStateAsUpdate(a);return new Response(d,{status:200,headers:{"Content-Type":"application/octet-stream"}})});n.route("GET /v2/rooms/<roomId>/active_users",({p:e})=>{if(!O(e.roomId))throw x(e.roomId);let t=L(e.roomId).listSessions().map(s=>({type:"user",connectionId:s.actor,id:s.user.id,info:s.user.info}));return ie({data:t})});n.route("PATCH /v2/rooms/<roomId>/storage/json-patch",()=>r()),n.route("POST /v2/rooms/<roomId>/presence",()=>r()),n.route("GET /v2/rooms/<roomId>/threads",()=>r()),n.route("POST /v2/rooms/<roomId>/upsert",()=>r()),n.route("POST /v2/rooms/<roomId>/update-room-id",()=>r()),n.route("POST /v2/rooms/<roomId>/update-organization-id",()=>r()),n.route("GET /v2/rooms/<roomId>/prewarm",()=>r()),n.route("POST /v2/rooms/<roomId>/broadcast_event",()=>r()),n.route("GET /v2/rooms/<roomId>/versions",()=>r()),n.route("GET /v2/rooms/<roomId>/version/<version>",()=>r()),n.route("POST /v2/rooms/<roomId>/version",()=>r()),n.route("POST /v2/rooms/<roomId>/threads",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/mark-as-resolved",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/mark-as-unresolved",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/subscribe",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/unsubscribe",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/subscriptions",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/metadata",()=>r()),n.route("DELETE /v2/rooms/<roomId>/threads/<threadId>",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/participants",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/inbox-notifications",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments",()=>r()),n.route("GET /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/metadata",()=>r()),n.route("DELETE /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/add-reaction",()=>r()),n.route("POST /v2/rooms/<roomId>/threads/<threadId>/comments/<commentId>/remove-reaction",()=>r()),n.route("GET /v2/rooms/<roomId>/attachments/<attachmentId>",()=>r()),n.route("GET /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("GET /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("POST /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("POST /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("DELETE /v2/rooms/<roomId>/users/<userId>/notification-settings",()=>r()),n.route("DELETE /v2/rooms/<roomId>/users/<userId>/subscription-settings",()=>r()),n.route("GET /v2/users/<userId>/inbox-notifications/<inboxNotificationId>",()=>r()),n.route("DELETE /v2/users/<userId>/inbox-notifications/<inboxNotificationId>",()=>r()),n.route("GET /v2/users/<userId>/inbox-notifications",()=>r()),n.route("DELETE /v2/users/<userId>/inbox-notifications",()=>r()),n.route("GET /v2/users/<userId>/notification-settings",()=>r()),n.route("POST /v2/users/<userId>/notification-settings",()=>r()),n.route("DELETE /v2/users/<userId>/notification-settings",()=>r()),n.route("GET /v2/users/<userId>/room-subscription-settings",()=>r()),n.route("POST /v2/inbox-notifications/trigger",()=>r()),n.route("POST /v2/inbox-notifications/<inboxNotificationId>/read",()=>r()),n.route("POST /v2/groups",()=>r()),n.route("GET /v2/groups/<groupId>",()=>r()),n.route("POST /v2/groups/<groupId>/add-members",()=>r()),n.route("POST /v2/groups/<groupId>/remove-members",()=>r()),n.route("DELETE /v2/groups/<groupId>",()=>r()),n.route("GET /v2/groups",()=>r()),n.route("GET /v2/users/<userId>/groups",()=>r()),n.route("GET /v2/ai/copilots",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/<knowledgeSourceId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/file/<knowledgeSourceId>",()=>r()),n.route("GET /v2/ai/copilots/<copilotId>/knowledge/web/<knowledgeSourceId>/links",()=>r()),n.route("POST /v2/ai/copilots",()=>r()),n.route("POST /v2/ai/copilots/<copilotId>",()=>r()),n.route("POST /v2/ai/copilots/<copilotId>/knowledge/web",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>/knowledge/file/<knowledgeSourceId>",()=>r()),n.route("DELETE /v2/ai/copilots/<copilotId>/knowledge/web/<knowledgeSourceId>",()=>r()),n.route("PUT /v2/ai/copilots/<copilotId>/knowledge/file/<fileName>",()=>r()),n.route("GET /v2/management/projects",()=>r()),n.route("GET /v2/management/projects/<projectId>",()=>r()),n.route("POST /v2/management/projects",()=>r()),n.route("POST /v2/management/projects/<projectId>",()=>r()),n.route("DELETE /v2/management/projects/<projectId>",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("GET /v2/management/projects/<projectId>/webhooks/<webhookId>/additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/delete-additional-headers",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/recover-failed-messages",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/secret/roll",()=>r()),n.route("POST /v2/management/projects/<projectId>/webhooks/<webhookId>/test",()=>r()),n.route("DELETE /v2/management/projects/<projectId>/webhooks/<webhookId>",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/activate",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/deactivate",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/public/roll",()=>r()),n.route("POST /v2/management/projects/<projectId>/api-keys/secret/roll",()=>r());function xt(e,o,t,s){if(!e.upgrade(o,{data:{refuseConnection:{code:t,message:s}}}))return new Response("Could not upgrade to WebSocket",{status:426})}var X=new kt;X.relay("/v2/authorize-user/*",q);X.relay("/v2/identify-user/*",q);X.relay("/v2/c/*",c);X.relay("/v2/*",n);X.relay("/*",K);var ye=1153;function ho(e){if(e===void 0)return;let o=Number(e);return Number.isInteger(o)&&o>0&&o<=65535?o:void 0}function At(e){return process.platform==="win32"?[process.env.COMSPEC||"cmd.exe","/c",e]:["sh","-c",e]}var Dt={description:"Start the local Liveblocks dev server",async run(e){let{options:o}=Oe(e,{port:{type:"string",short:"p",default:ye.toString()},host:{type:"string"},cmd:{type:"string",short:"c"},help:{type:"boolean",short:"h",default:!1},"no-check":{type:"boolean",default:!1},ci:{type:"boolean",default:!1},verbose:{type:"boolean",short:"v",default:!1}});if(o.help){console.log("Usage: liveblocks dev [options]"),console.log(),console.log("Start the local Liveblocks dev server"),console.log(),console.log("Options:"),console.log(` --port, -p Port to listen on (default: ${ye})`),console.log(" --host Host to bind to (default: localhost)"),console.log(" --cmd, -c Run a one-off command against a fresh server instance, then"),console.log(" shut down. Does not affect your local data in .liveblocks/."),console.log(" --ci Start a fresh server instance on every boot, ideal for CI"),console.log(" --no-check Skip project setup check on start"),console.log(" --verbose, -v Show verbose output"),console.log(" --help, -h Show help");return}let t=!1;o.ci&&(t=!0,o["no-check"]=!0),o.cmd&&(t=!0,o["no-check"]=!0);let s=ho(o.port)??ho(process.env.LIVEBLOCKS_DEVSERVER_PORT)??ye,i=o.host||process.env.LIVEBLOCKS_DEVSERVER_HOST||"localhost",a=t?Me():null;await ro(s,i)&&(console.error(`Port ${s} is already in use.
|
|
385
385
|
Is another dev server already running?`),process.exit(1));let d;function m(){return Se.serve({hostname:i,port:s,async fetch(u,g){if(u.headers.get("Upgrade")==="websocket"){let v=Ze(u);if(!v.ok)return he(v.xwarn,!0),xt(g,u,Pt.NOT_ALLOWED,"You have no access to this room");let{roomId:y,ticketData:A}=v,w=L(y);await w.load();let _e=await w.createTicket(A),Io=_e.sessionKey;if(g.upgrade(u,{data:{room:w,ticket:_e,sessionKey:Io}})){console.log(`${D("101")} WS ${new URL(u.url).pathname}${_(` - ${y}`)}`);return}return new Response("Could not upgrade to WebSocket",{status:426})}let E=new URL(u.url);if(u.method==="POST"&&E.pathname==="/crash")return console.log(`${D("204")} POST /crash`),setTimeout(()=>void h(),0),new Response(null,{status:204});let S=`${u.method} ${E.pathname}`,b=await X.fetch(u),l=b.status,p=l>=500?Q(l):l>=400?G(l):D(l);console.log(`${p} ${S}`);let I=b.headers.get("X-LB-Warn")??void 0;return he(I,!b.ok),b},error(u){return console.error(u),new Response("An unknown error occurred",{status:500})},websocket:{async open(u){let{refuseConnection:g,room:E,ticket:S}=u.data;if(g){u.close(g.code,g.message);return}E&&S&&await E.startBrowserSession(S,u)},async message(u,g){let{room:E,sessionKey:S}=u.data;E&&S&&await E.handleData(S,g)},close(u,g,E){let{room:S,sessionKey:b}=u.data;S&&b&&S.endBrowserSession(b,g,E)}}})}d=m();async function h(){Ye(),await d.stop(!0),d=m(),console.log("Crash \u{1F4A5}")}let f=u=>process.stderr.write(u+`
|
|
386
|
-
`);if(f(`Liveblocks dev server ${_("v1.1.
|
|
386
|
+
`);if(f(`Liveblocks dev server ${_("v1.1.1-pnpmtest1")} running at http://${d.hostname}:${d.port}`),a&&o.verbose&&f(_(`Ephemeral mode, using ${a}`)),o.cmd){let u=Nt(a,"server.log");f(_(`Server logs: ${u}`));let g=Se.file(u).writer(),E=(...b)=>{g.write(b.map(String).join(" ")+`
|
|
387
387
|
`),g.flush()};console.log=E,console.error=E;let S=1;try{let b=Se.spawn(At(o.cmd),{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:{...process.env,LIVEBLOCKS_DEV_SERVER_HOST:i,LIVEBLOCKS_DEV_SERVER_PORT:String(s)}}),l=()=>{b.kill()};process.on("SIGTERM",l),process.on("SIGINT",l),S=await b.exited}finally{g.end(),await d.stop(),ce(),f(_("Liveblocks dev server shut down"))}process.exit(S)}else{let u=`http://${i}:${s}`,g=o["no-check"]?[]:await eo(u);console.log(_("Press ")+Y("q")+_(" to quit, ")+Y("!")+_(" to crash, ")+Y("c")+_(" to clear"));let E=null;process.stdin.setRawMode?.(!0),process.stdin.resume(),process.stdin.on("data",S=>{let b=S.toString();if(b==="q"||b==="")d.stop(!0).then(()=>{ce(),process.exit(0)});else if(b==="!")E!==null?(clearTimeout(E),E=null,h()):(console.log("Simulating crash in 2.5s... (press ! again to crash now)"),E=setTimeout(()=>{E=null,h()},2500));else if(b==="c")console.clear();else if(b==="p")if(g.length>0){let l=oo(g,u);to(l),console.log(_("Copied AI fix prompt to clipboard"))}else console.log(_("No setup issues detected"))})}}},rs=Dt;export{rs as default};
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{h as r}from"./chunk-NQ6I7Q7X.js";import{execFileSync as l,spawnSync as c}from"node:child_process";function a(){try{return l("bun",["--version"],{stdio:"ignore"}),!0}catch{return!1}}function d(){if(a()){let e=c("bun",process.argv.slice(1),{stdio:"inherit"});process.exit(e.status??1)}else console.error("The Liveblocks local dev server requires Bun."),console.error("See https://liveblocks.io/docs/get-started/dev-server for more information."),process.exit(1)}var s=process.argv.slice(2),o=s.findIndex(e=>!e.startsWith("-")),{options:t}=r(o>=0?s.slice(0,o):s,{help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",default:!1}}),n=o>=0?s[o]:void 0,u=o>=0?s.slice(o+1):[];async function p(e){switch(e){case"dev":return typeof Bun>"u"&&d(),(await import("./dev-server-
|
|
2
|
+
import{h as r}from"./chunk-NQ6I7Q7X.js";import{execFileSync as l,spawnSync as c}from"node:child_process";function a(){try{return l("bun",["--version"],{stdio:"ignore"}),!0}catch{return!1}}function d(){if(a()){let e=c("bun",process.argv.slice(1),{stdio:"inherit"});process.exit(e.status??1)}else console.error("The Liveblocks local dev server requires Bun."),console.error("See https://liveblocks.io/docs/get-started/dev-server for more information."),process.exit(1)}var s=process.argv.slice(2),o=s.findIndex(e=>!e.startsWith("-")),{options:t}=r(o>=0?s.slice(0,o):s,{help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",default:!1}}),n=o>=0?s[o]:void 0,u=o>=0?s.slice(o+1):[];async function p(e){switch(e){case"dev":return typeof Bun>"u"&&d(),(await import("./dev-server-GA6FKPHE.js")).default;case"upgrade":return(await import("./upgrade-7XBRTIXJ.js")).default;default:return}}var m={dev:"Start the local Liveblocks dev server",upgrade:"Upgrade all Liveblocks packages"};function f(){console.log("liveblocks v1.1.1-pnpmtest1"),console.log(),console.log("Usage: liveblocks <command> [options]"),console.log(),console.log("Commands:");for(let[e,i]of Object.entries(m))console.log(` ${e.padEnd(12)} ${i}`);console.log(),console.log("Options:"),console.log(" --help, -h Show this help message"),console.log(" --version Show version number")}async function v(){t.version&&(console.log("1.1.1-pnpmtest1"),process.exit(0)),(t.help||!n)&&(f(),process.exit(n?0:1));let e=await p(n);e?await e.run(u):(console.error(`Unknown command: ${n}`),console.error('Run "liveblocks --help" for usage.'),process.exit(1))}v();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "liveblocks",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1-pnpmtest1",
|
|
4
4
|
"description": "Liveblocks command line interface",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -11,17 +11,6 @@
|
|
|
11
11
|
"LICENSE",
|
|
12
12
|
"README.md"
|
|
13
13
|
],
|
|
14
|
-
"scripts": {
|
|
15
|
-
"build": "tsup",
|
|
16
|
-
"clean": "rm -rf dist/",
|
|
17
|
-
"dev": "bun ./dist/index.js dev -v",
|
|
18
|
-
"add-license-headers": "eslint --fix 'src/**/*.{ts,tsx}' 'test/**/*.{ts,tsx}'",
|
|
19
|
-
"lint": "eslint 'src/**/*.{ts,tsx}' 'test/**/*.{ts,tsx}'",
|
|
20
|
-
"lint:package": "publint --strict && attw --pack",
|
|
21
|
-
"format": "eslint --fix src/ test/ ; prettier --write src/ test/",
|
|
22
|
-
"test": "bun test",
|
|
23
|
-
"test:typescript": "tsc --noEmit"
|
|
24
|
-
},
|
|
25
14
|
"license": "AGPL-3.0-or-later",
|
|
26
15
|
"author": "Liveblocks Inc.",
|
|
27
16
|
"keywords": [
|
|
@@ -33,19 +22,39 @@
|
|
|
33
22
|
],
|
|
34
23
|
"sideEffects": false,
|
|
35
24
|
"devDependencies": {
|
|
36
|
-
"@
|
|
25
|
+
"@arethetypeswrong/cli": "^0.18.2",
|
|
26
|
+
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
|
37
27
|
"@typescript-eslint/parser": "^6.17.0",
|
|
38
28
|
"bun-types": "^1.3.9",
|
|
39
29
|
"eslint": "^8.56.0",
|
|
40
|
-
"eslint-plugin-
|
|
30
|
+
"eslint-plugin-import": "^2.29.1",
|
|
31
|
+
"eslint-plugin-license-header": "^0.8.0",
|
|
32
|
+
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
33
|
+
"fast-check": "^3.23.2",
|
|
34
|
+
"itertools": "^2.3.2",
|
|
35
|
+
"prettier": "^3.3.2",
|
|
36
|
+
"publint": "^0.3.17",
|
|
37
|
+
"typescript": "^5.3.3",
|
|
38
|
+
"@liveblocks/eslint-config": "0.0.1"
|
|
41
39
|
},
|
|
42
40
|
"dependencies": {
|
|
43
41
|
"@liveblocks/core": "3.14.0",
|
|
44
|
-
"@liveblocks/query-parser": "^0.1.1",
|
|
45
|
-
"@liveblocks/server": "1.1.0",
|
|
46
42
|
"@liveblocks/zenrouter": "^1.0.17",
|
|
47
43
|
"decoders": "^2.9.0",
|
|
48
44
|
"js-base64": "^3.7.5",
|
|
49
|
-
"yjs": "^13.6.10"
|
|
45
|
+
"yjs": "^13.6.10",
|
|
46
|
+
"@liveblocks/query-parser": "^0.1.1",
|
|
47
|
+
"@liveblocks/server": "^1.1.1-pnpmtest1"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsup",
|
|
51
|
+
"clean": "rm -rf dist/",
|
|
52
|
+
"dev": "bun ./dist/index.js dev -v",
|
|
53
|
+
"add-license-headers": "eslint --fix 'src/**/*.{ts,tsx}' 'test/**/*.{ts,tsx}'",
|
|
54
|
+
"lint": "eslint 'src/**/*.{ts,tsx}' 'test/**/*.{ts,tsx}'",
|
|
55
|
+
"lint:package": "publint --strict && attw --pack",
|
|
56
|
+
"format": "eslint --fix src/ test/ ; prettier --write src/ test/",
|
|
57
|
+
"test": "bun test",
|
|
58
|
+
"test:types": "tsc --noEmit"
|
|
50
59
|
}
|
|
51
|
-
}
|
|
60
|
+
}
|