|
1 | | -import type { ParsedLine } from "./line.ts"; |
2 | | -export * from "./line.ts"; |
3 | | - |
4 | | -// utilities |
5 | | -type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; |
6 | | - |
7 | | -/** scrapboxの行のメタデータ */ |
8 | | -export interface Line { |
9 | | - /** 行のid */ id: string; |
10 | | - /** 行のテキスト */ text: string; |
11 | | - /** 一番最後に行を編集した人のid */ userId: string; |
12 | | - /** 行の作成日時 */ created: number; |
13 | | - /** 行の最終更新日時 */ updated: number; |
14 | | -} |
| 1 | +import { Omit } from "../utils.ts"; |
| 2 | +import { Line } from "../base.ts"; |
| 3 | +import { NotFoundError, NotMemberError } from "./error.ts"; |
15 | 4 |
|
16 | 5 | /** 関連ページのメタデータ */ |
17 | 6 | export interface RelatedPage { |
@@ -113,16 +102,6 @@ export interface Project { |
113 | 102 | plan?: string; |
114 | 103 | } |
115 | 104 |
|
116 | | -export type NotMemberError = { |
117 | | - name: "NotMemberError"; |
118 | | - message: string; |
119 | | -}; |
120 | | - |
121 | | -export type NotFoundError = { |
122 | | - name: "NotFoundError"; |
123 | | - message: string; |
124 | | -}; |
125 | | - |
126 | 105 | /** the response type of https://scrpabox.io/api/projects/:projectname */ |
127 | 106 | export type ProjectResponse = |
128 | 107 | | NotFoundError |
@@ -199,120 +178,3 @@ export type ProjectBackupWithMetadata = { |
199 | 178 | lines: { text: string; updated: number; created: number }[]; |
200 | 179 | }; |
201 | 180 | }; |
202 | | - |
203 | | -export type Layout = |
204 | | - | "list" |
205 | | - | "page" |
206 | | - | "stream" |
207 | | - | "project-settings-billing-page" |
208 | | - | "project-settings-basic-page" |
209 | | - | "project-settings-members-page" |
210 | | - | "settings-profile-page" |
211 | | - | "settings-extensions-page" |
212 | | - | "settings-delete-account-page"; |
213 | | -export type Scrapbox = |
214 | | - & { |
215 | | - Project: { |
216 | | - name: string; |
217 | | - pages: PageBrief[]; |
218 | | - }; |
219 | | - TimeStamp: TimeStamp; |
220 | | - PopupMenu: { |
221 | | - addButton: ( |
222 | | - props: { |
223 | | - title: string | ((selectedText: string) => string); |
224 | | - onClick: (selectedText: string) => string | undefined; |
225 | | - }, |
226 | | - ) => void; |
227 | | - }; |
228 | | - PageMenu: ((name: string) => PageMenu) & { |
229 | | - addMenu: ( |
230 | | - props: { title: string; image: string; onClick?: () => void }, |
231 | | - ) => void; |
232 | | - addItem: (props: AddItemProps) => void; |
233 | | - addSeparator: () => void; |
234 | | - removeAllItems: () => void; |
235 | | - }; |
236 | | - addListener: (type: string, listener: () => void) => void; |
237 | | - on: (type: string, listener: () => void) => void; |
238 | | - removeListener: (type: string, listener: () => void) => void; |
239 | | - off: (type: string, listener: () => void) => void; |
240 | | - removeAllListeners: (type?: string) => void; |
241 | | - once: (type: string, listener: () => void) => void; |
242 | | - prependListener: (type: string, listener: () => void) => void; |
243 | | - prependOnceListener: (type: string, listener: () => void) => void; |
244 | | - listeners: (type: string) => (() => void)[]; |
245 | | - rawListeners: (type: string) => (() => void)[]; |
246 | | - listenerCount: (type: string) => number; |
247 | | - emit: (type: string) => void; |
248 | | - eventNames: () => string[]; |
249 | | - getMexListeners: () => number; |
250 | | - setMexListeners: (length: number) => void; |
251 | | - } |
252 | | - & ({ |
253 | | - Layout: |
254 | | - | "list" |
255 | | - | "stream" |
256 | | - | "project-settings-billing-page" |
257 | | - | "project-settings-basic-page" |
258 | | - | "project-settings-members-page" |
259 | | - | "settings-profile-page" |
260 | | - | "settings-extensions-page" |
261 | | - | "settings-delete-account-page"; |
262 | | - Page: { |
263 | | - title: null; |
264 | | - lines: null; |
265 | | - id: null; |
266 | | - }; |
267 | | - } | { |
268 | | - Layout: "page"; |
269 | | - Page: { |
270 | | - title: string; |
271 | | - lines: ParsedLine[]; |
272 | | - id: string; |
273 | | - }; |
274 | | - }); |
275 | | - |
276 | | -export type PageBrief = { |
277 | | - exists: boolean; |
278 | | - hasIcon?: boolean; |
279 | | - id: string; |
280 | | - title: string; |
281 | | - titleLc: string; |
282 | | - updated: number; |
283 | | -}; |
284 | | - |
285 | | -type TimeStamp = { |
286 | | - addFormat: (format: string | (() => string)) => void; |
287 | | - removeAllFormat: () => void; |
288 | | -}; |
289 | | - |
290 | | -type AddItemProps = { |
291 | | - title: string | (() => string); |
292 | | - image?: string; |
293 | | - onClick: () => void; |
294 | | -}; |
295 | | -type PageMenu = { |
296 | | - addItem: ( |
297 | | - props: AddItemProps, |
298 | | - ) => void; |
299 | | - addSeparator: () => void; |
300 | | - removeAllItems: () => void; |
301 | | - menuName: string; |
302 | | - reset: () => void; |
303 | | - emitChange: () => void; |
304 | | - menus: Map< |
305 | | - string, |
306 | | - { |
307 | | - image: string | null; |
308 | | - onClick?: () => void; |
309 | | - items: (AddItemProps & { separator: boolean })[]; |
310 | | - } |
311 | | - >; |
312 | | -}; |
313 | | - |
314 | | -export type eventName = |
315 | | - | "lines:changed" |
316 | | - | "page:changed" |
317 | | - | "layout:changed" |
318 | | - | "project:changed"; |
0 commit comments