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
こんなのはどうかな?
code:ts
const editor = makeHeadlessEditor();
editor.patch("project", "title", (lines, metadata) => /*...*/); 2022-04-19 19:19:21 いや、普通にclassを使おう
保持する状態が多い
下手に関数にするより、classで書いたほうがやりやすそう
code:ts
export class Headless {
static #pageIds = new Map</${string}/${string}, pageId>(); constructor();
patch();
pin();
unpin();
delete();
*readStream(project: string): AsyncGenerator<>;
*readPage(project: string, title: string): AsyncGenerator<>;
disconnect();
}
disconnect()したら*readStream()などを中断できるようにする;
10:38:59 やっぱりほしいtakker.icon
code: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を導入した
まだ単体テストを書いていないのでエラーが出ているが、無視する
code:mod.ts
export * from "jsr:@cosense/std@0.29";
code:dom.ts
export * from "jsr:@cosense/std@0.29/browser/dom";
export * from "jsr:@cosense/std@0.29/title";
code:websocket.ts
export * from "jsr:@cosense/std@0.29/browser/websocket";
export * from "jsr:@cosense/std@0.29/title";
code:rest.ts
export * from "jsr:@cosense/std@0.29/rest";
export * from "jsr:@cosense/std@0.29/title";
code:text.ts
export * from "jsr:@cosense/std@0.27/text";
export * from "jsr:@cosense/std@0.29/title";