@pointyink/rogue 0.2.0 → 0.2.2
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/suggestions.js +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{anchorForRange as T,endOfDocPos as P}from"./comments.js";function E(o,s,l,d){let i=o.visIxOf(l);if(i===null){const a=o.nextVisId(l);i=a===null?null:o.visIxOf(a)}let r=o.visIxOf(d);if(r===null){const a=o.prevVisId(d);r=a===null?null:o.visIxOf(a)}if(i===null||r===null||i>r)return null;const u=s.visIxToDomPos(i);if(!u)return null;const f=s.visIxToDomPos(r+1)??P(s,o.visLen());return f?{startNode:u.node,startOffset:u.offset,endNode:f.node,endOffset:f.offset}:null}function I({crdt:o,rope:s,baseUrl:l,fetchFn:d,rerender:i,onError:r,markUserEdit:u,getSelectionRange:f}){const a=d??((e,t)=>globalThis.fetch(e,t));let m=[],O=!1;async function g(e,t){const n=await a(l+e,{credentials:"same-origin",headers:{"Content-Type":"application/json"},...t});if(!n.ok)throw new Error(`suggestions request failed: ${n.status} ${e}`);return n.status===204?null:n.json()}function N(e){return{...e,range:E(o,s,e.start_id,e.end_id)}}function w(){return m.map(N)}function y(){O||i?.(w())}async function p(){m=await g("")??[];const e=w();return y(),e}async function v(e){try{await e(),await p()}catch(t){throw r?.(t),t}}return{load:p,suggestions:()=>w(),create:e=>{const t=f?.();if(!t)return Promise.reject(new Error("no text selected"));const n=T(o,s,t);return n?v(()=>g("",{method:"POST",body:JSON.stringify({...n,replacement:e})})):Promise.reject(new Error("empty selection cannot be anchored"))},accept:async e=>{const t=m.find(c=>c.id===e);if(!t)throw new Error("suggestion not found");const n=E(o,s,t.start_id,t.end_id);if(!n){const c=new Error("suggestion span is stale \u2014 review the current text before accepting");throw r?.(c),c}u?.();const x=n.startNode.ownerDocument;if(!x){const c=new Error("suggestion span has no owning document");throw r?.(c),c}const h=x.createRange();h.setStart(n.startNode,n.startOffset),h.setEnd(n.endNode,n.endOffset),h.deleteContents(),t.replacement.length>0&&h.insertNode(x.createTextNode(t.replacement)),await v(()=>g(`/${e}/accept`,{method:"POST"}))},reject:e=>v(()=>g(`/${e}`,{method:"DELETE"})),handleDocumentChange:e=>{y()},handleRemoteChange:()=>p(),destroy:()=>{O=!0}}}export{I as createSuggestions,E as resolveSuggestionAnchor};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pointyink/rogue",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "State-of-the-art HTML sync CRDT engine (Fugue CRDT + rope treap) with a DOM sync layer.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"repository": {
|
|
@@ -49,16 +49,16 @@
|
|
|
49
49
|
"test:watch": "vitest",
|
|
50
50
|
"build:wasm": "zig build wasm -Doptimize=ReleaseFast && node scripts/emit-wasm.mjs",
|
|
51
51
|
"build:types": "tsc -p tsconfig.types.json",
|
|
52
|
-
"build:dist": "rm -rf dist && esbuild src/index.js src/sync.js src/dom_rope.js src/comments.js src/editor-session.js src/crdt_error.js src/replica.js src/checkpoint.js src/rogue_text.js src/oplog.js src/sync-client.js src/doc-cache.js src/doc-bus.js src/headless.js src/rogue.wasm.js --minify --outdir=dist --format=esm --platform=neutral",
|
|
52
|
+
"build:dist": "rm -rf dist && esbuild src/index.js src/sync.js src/dom_rope.js src/comments.js src/suggestions.js src/editor-session.js src/crdt_error.js src/replica.js src/checkpoint.js src/rogue_text.js src/oplog.js src/sync-client.js src/doc-cache.js src/doc-bus.js src/headless.js src/rogue.wasm.js --minify --outdir=dist --format=esm --platform=neutral",
|
|
53
53
|
"prepublishOnly": "npm run build:dist",
|
|
54
54
|
"build": "esbuild ../clients/tinymce/main.js --bundle --minify --outfile=../public/tiny.js --platform=browser --format=esm --alias:@pointyink/rogue=./src --alias:@pointyink/serde=../serde --sourcemap",
|
|
55
|
-
"build:tinymce": "esbuild ../plugins/tinymce/plugin.js --bundle --minify --outfile=../
|
|
55
|
+
"build:tinymce": "esbuild ../plugins/tinymce/plugin.js --bundle --minify --outfile=../static/tinymce-plugin.js --platform=browser --format=esm --alias:@pointyink/rogue=./src --alias:@pointyink/serde=../serde --sourcemap",
|
|
56
56
|
"build:huge": "esbuild ../clients/hugerte/main.js --bundle --minify --outfile=../public/huge-app.js --platform=browser --format=esm --alias:@pointyink/hugerte=../plugins/hugerte/plugin.js --alias:@pointyink/rogue=./src --alias:@pointyink/serde=../serde --sourcemap",
|
|
57
|
-
"build:hugerte": "esbuild ../plugins/hugerte/plugin.js --bundle --minify --outfile=../
|
|
57
|
+
"build:hugerte": "esbuild ../plugins/hugerte/plugin.js --bundle --minify --outfile=../static/hugerte-plugin.js --platform=browser --format=esm --alias:@pointyink/rogue=./src --alias:@pointyink/serde=../serde --sourcemap",
|
|
58
58
|
"build:app": "esbuild ../clients/app/main.js --bundle --minify --outfile=../public/app.js --platform=browser --format=esm --alias:@pointyink/rogue=./src --alias:@pointyink/serde=../serde --sourcemap"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@pointyink/serde": "^0.2.
|
|
61
|
+
"@pointyink/serde": "^0.2.2",
|
|
62
62
|
"diff-match-patch": "^1.0.5",
|
|
63
63
|
"dompurify": "^3.2.6"
|
|
64
64
|
},
|