generated at
scrapbox-userscript-std
UserScriptでよく使う函数を集めたmodule

実装したいこと
documentつくる
README.mdに書いたdocumentのURLとcommit idとが常に一致するようにできないだろうか?
2022-03-27 20:16:28 今はrelease前に手動でversionを書き換えている
cursor操作函数を作る
まあこれは気が向いたらでいいや
優先度が低い
getFormula() の実装が古い
.cursor-line のときの表示をちゃんとやる
previewとテキストの双方を返せるようにする?
getIndentCount() String.prototype.trimStart()で実装し直す
正規表現なしでスペースの数を数えられる
文字列処理の強化
欲しい物
任意のDOMに含まれる文字の番号を取得する
オンプレ版scrapboxに対応する
やっぱ instance.patch() みたいなのを作ろうかな
目的:APIを叩く回数を減らす
現状だと、書き込む度にuser idとproject idを取得しに行っている
そんなことはなかった。ちゃんとcacheしてた
ならclassにする必要ないかな?
これらが変わることは普通ないから、一度取得したら保持しておけばいい
interface
こんなのはどうかな?
ts
const editor = makeHeadlessEditor(); editor.patch("project", "title", (lines, metadata) => [/*...*/]);
2022-04-19 19:19:21 いや、普通にclassを使おう
保持する状態が多い
下手に関数にするより、classで書いたほうがやりやすそう
ts
export 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 やっぱりほしいtakker
現状だと同じページに連続して書き込む場合でも、api/pages/:projectname/:pagetitleを叩き直さないといけない
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 として送信するようにすればいい
scrapbox-userscript-websocketにwebsocketの処理を分離する必要あった?
scrapbox-userscript-stdのsocket周りを修正するのに、scrapbox-userscript-websocketに手を加えないといけない?
うーん、デメリットかどうか微妙
2024-08-19 統合した
patch() updater の引数を変える
Line[] ではなく string[] を返すようにする
Line[] は第二引数のobjectに入れて、使いたい人だけが使えるようにすればいい
REST APIのwrapper
エラー処理が雑 and 冗長な気がする
あんまり解決策は思いつかない
自前実装をdeno_stdにある実装に切り替える
他のUserScriptでもそうしたい
assets/index.js内のobjectの型定義作成
patch の引数はおそらくscrapbox-userscript-websocket CommitNotification と同一
モチベ
もしかしたらページマージ機能もscrapboxの実装を直接使える可能性が出てきた
takeCursor().page.patch を使えばいけそう?
scrapbox-userscript-websocketをstdとを分ける必要あったかなtakker
別にした恩恵が今のところない
むしろ別々にbranch切ってPR出して更新しなければならないので面倒
統合してしまおうかな
Result<T, E>option-tの定義に置き換える
value から val への破壊的変更が発生する
v1でリリースすべきか?
まあまだv0.xのbeta versionだし、破壊してもいいだろう

バグ
scrapbox.page.linesではなくDOMから文字を取得してしまっている
これでは元の文字を取得できない
おそらくコードブロック更新機能が壊れている
すでにコードブロックに別のコードが書き込まれているとき、import-devにbackgroundでテストコードを貼り付けるUserScriptが正常に機能していない
patch()エラー
/*@__PURE__*/ をproject linkだと誤認してしまう
これをproject linkとしてwebsocketでserverに送信すると、 430[{"error":{"name":"Error","message":"Your changes have been declined by the server. invalid projectLink found: /*@__PURE__*/"}}] が返ってくる
scrapbox-parserに手を加える必要がありそう

修正箇所
REST API
websocket
その他URL

directory layout
./
mod.ts
すべてのコードをここからexportする
utilty関係はここにflatに置く
rest/
REST API系は全部ここ
browser/
browserで動かすやつ
dom/
↓以外
websocket/
scrapbox-headless-scriptを移動したもの
各階層に mod.ts を置いてある

あれ入ってたっけ?
editとmotionで分けたつもりだった
ややこしいところあるっぽいから説明詳しくしないとな

2024-08-02 15:18:26 JSRにpublishした
@cosense/stdに置いた
2022-02-10
08:05:03 CIを導入した
まだ単体テストを書いていないのでエラーが出ているが、無視する



mod.ts
export * from "jsr:@cosense/std@0.29";
dom.ts
export * from "jsr:@cosense/std@0.29/browser/dom"; export * from "jsr:@cosense/std@0.29/title";
websocket.ts
export * from "jsr:@cosense/std@0.29/browser/websocket"; export * from "jsr:@cosense/std@0.29/title";
rest.ts
export * from "jsr:@cosense/std@0.29/rest"; export * from "jsr:@cosense/std@0.29/title";
text.ts
export * from "jsr:@cosense/std@0.27/text"; export * from "jsr:@cosense/std@0.29/title";

#2024-07-14 12:09:59
#2024-07-13 22:58:58
#2023-11-05 12:46:47
#2023-09-04 10:51:44
#2023-04-29 09:18:11
#2023-04-04 20:40:33
#2022-12-24 14:58:51
#2022-10-07 11:59:50
#2022-07-26 06:36:47
#2022-05-13 16:44:08
#2022-04-30 09:35:35
#2022-04-24 17:18:56
#2022-04-22 05:08:39
#2022-04-19 19:35:58
#2022-04-17 15:05:12
#2022-04-09 19:53:35
#2022-04-07 05:24:06
#2022-04-06 19:45:37
#2022-03-27 20:13:06
#2022-03-25 02:24:47
#2022-03-12 22:49:11
#2022-03-01 07:36:11
#2022-02-21 17:27:00
#2022-02-21 01:38:48
#2022-02-20 03:07:40
#2022-02-16 17:17:51
#2022-02-14 14:33:22
#2022-02-10 05:56:32
#2021-10-12 11:40:49
#2021-09-30 11:50:01