scrapbox-userscript-std
実装したいこと
documentつくる
README.mdに書いたdocumentのURLとcommit idとが常に一致するようにできないだろうか?
2022-03-27 20:16:28 今はrelease前に手動でversionを書き換えている
cursor操作函数を作る
まあこれは気が向いたらでいいや
優先度が低い
getFormula()
の実装が古い
.cursor-line
のときの表示をちゃんとやる
previewとテキストの双方を返せるようにする?
正規表現なしでスペースの数を数えられる
文字列処理の強化
欲しい物
任意のDOMに含まれる文字の番号を取得する
オンプレ版scrapboxに対応する
やっぱ instance.patch()
みたいなのを作ろうかな
目的:APIを叩く回数を減らす
現状だと、書き込む度にuser idとproject idを取得しに行っている
そんなことはなかった。ちゃんとcacheしてた
ならclassにする必要ないかな?
これらが変わることは普通ないから、一度取得したら保持しておけばいい
interface
こんなのはどうかな?
tsconst editor = makeHeadlessEditor();
editor.patch("project", "title", (lines, metadata) => [/*...*/]);
2022-04-19 19:19:21 いや、普通にclassを使おう
保持する状態が多い
下手に関数にするより、classで書いたほうがやりやすそう
tsexport class Headless {
#userId: string;
static #projectIds = new Map<string, projectId>();
static #pageIds = new Map<`/${string}/${string}`, pageId>();
constructor();
patch();
pin();
unpin();
delete();
*readStream(project: string): AsyncGenerator<>;
*readPage(project: string, title: string): AsyncGenerator<>;
disconnect();
#request(): Promise<void>;
}
disconnect()
したら *readStream()
などを中断できるようにする;
10:38:59 やっぱりほしい
ts{
using room = await join(projectId, pageId, userId);
for await (const event of room) {
// ...
}
// ページが削除されたら失敗する
await room.push(changes)
// scopeを抜けるときにdisconnect
}
const streamRoom = await join(projectId, "stream");
const listRoom = await join(projectId, "list");
"socket.io-request"
はflatにしよう
これだけ "socket.io-request"
→ method
と二段階で場合分けしなければならない
型定義が面倒
event nameを commit
, room:join
, cursor
に統一し、前2つのみ実際には socket.io-request
として送信するようにすればいい
うーん、デメリットかどうか微妙
2024-08-19 統合した
patch()
の updater
の引数を変える
Line[]
ではなく string[]
を返すようにする
Line[]
は第二引数のobjectに入れて、使いたい人だけが使えるようにすればいい
REST APIのwrapper
エラー処理が雑 and 冗長な気がする
あんまり解決策は思いつかない
他のUserScriptでもそうしたい
モチベ
もしかしたらページマージ機能もscrapboxの実装を直接使える可能性が出てきた
takeCursor().page.patch
を使えばいけそう?
別にした恩恵が今のところない
むしろ別々にbranch切ってPR出して更新しなければならないので面倒
統合してしまおうかな
value
から val
への破壊的変更が発生する
v1でリリースすべきか?
まあまだv0.xのbeta versionだし、破壊してもいいだろう
バグ
scrapbox.page.linesではなくDOMから文字を取得してしまっている
これでは元の文字を取得できない
おそらくコードブロック更新機能が壊れている
/*@__PURE__*/
をproject linkだと誤認してしまう
これをproject linkとしてwebsocketでserverに送信すると、 430[{"error":{"name":"Error","message":"Your changes have been declined by the server. invalid projectLink found: /*@__PURE__*/"}}]
が返ってくる
修正箇所
REST API
websocket
その他URL
directory layout
./
mod.ts
すべてのコードをここからexportする
utilty関係はここにflatに置く
rest/
REST API系は全部ここ
browser/
browserで動かすやつ
dom/
↓以外
websocket/
各階層に mod.ts
を置いてある
あれ入ってたっけ?
editとmotionで分けたつもりだった
ややこしいところあるっぽいから説明詳しくしないとな
2024-08-02 15:18:26
JSRにpublishした
2022-02-10
08:05:03 CIを導入した
まだ単体テストを書いていないのでエラーが出ているが、無視する
mod.tsexport * from "jsr:@cosense/std@0.29";
dom.tsexport * from "jsr:@cosense/std@0.29/browser/dom";
export * from "jsr:@cosense/std@0.29/title";
websocket.tsexport * from "jsr:@cosense/std@0.29/browser/websocket";
export * from "jsr:@cosense/std@0.29/title";
rest.tsexport * from "jsr:@cosense/std@0.29/rest";
export * from "jsr:@cosense/std@0.29/title";
text.tsexport * from "jsr:@cosense/std@0.27/text";
export * from "jsr:@cosense/std@0.29/title";