Skip to content

Commit 6652f7c

Browse files
authored
Merge pull request #7 from takker99/split-files
Split files
2 parents c3b0353 + d934b93 commit 6652f7c

File tree

9 files changed

+203
-197
lines changed

9 files changed

+203
-197
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# types
2+
23
scrapbox関連の型定義ファイル

api/error.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export type NotMemberError = {
2+
name: "NotMemberError";
3+
message: string;
4+
};
5+
6+
export type NotFoundError = {
7+
name: "NotFoundError";
8+
message: string;
9+
};

scrapbox.ts renamed to api/response.ts

Lines changed: 3 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
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";
154

165
/** 関連ページのメタデータ */
176
export interface RelatedPage {
@@ -113,16 +102,6 @@ export interface Project {
113102
plan?: string;
114103
}
115104

116-
export type NotMemberError = {
117-
name: "NotMemberError";
118-
message: string;
119-
};
120-
121-
export type NotFoundError = {
122-
name: "NotFoundError";
123-
message: string;
124-
};
125-
126105
/** the response type of https://scrpabox.io/api/projects/:projectname */
127106
export type ProjectResponse =
128107
| NotFoundError
@@ -199,120 +178,3 @@ export type ProjectBackupWithMetadata = {
199178
lines: { text: string; updated: number; created: number }[];
200179
};
201180
};
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";

base.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/** scrapboxの行のメタデータ */
2+
export interface Line {
3+
/** 行のid */ id: string;
4+
/** 行のテキスト */ text: string;
5+
/** 一番最後に行を編集した人のid */ userId: string;
6+
/** 行の作成日時 */ created: number;
7+
/** 行の最終更新日時 */ updated: number;
8+
}

mod.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export * from "./api/response.ts";
2+
export * from "./api/error.ts";
3+
export * from "./userscript.ts";
4+
export * from "./userscript/blocks.ts";
5+
export * from "./userscript/nodes.ts";

userscript.ts

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
import { ParsedLine } from "./userscript/blocks.ts";
2+
3+
export type Layout =
4+
| "list"
5+
| "page"
6+
| "stream"
7+
| "project-settings-billing-page"
8+
| "project-settings-basic-page"
9+
| "project-settings-members-page"
10+
| "settings-profile-page"
11+
| "settings-extensions-page"
12+
| "settings-delete-account-page";
13+
export type Scrapbox =
14+
& {
15+
Project: {
16+
name: string;
17+
pages: PageBrief[];
18+
};
19+
TimeStamp: TimeStamp;
20+
PopupMenu: {
21+
addButton: (
22+
props: {
23+
title: string | ((selectedText: string) => string);
24+
onClick: (selectedText: string) => string | undefined;
25+
},
26+
) => void;
27+
};
28+
PageMenu: ((name: string) => PageMenu) & {
29+
addMenu: (
30+
props: { title: string; image: string; onClick?: () => void },
31+
) => void;
32+
addItem: (props: AddItemProps) => void;
33+
addSeparator: () => void;
34+
removeAllItems: () => void;
35+
};
36+
addListener: (type: string, listener: () => void) => void;
37+
on: (type: string, listener: () => void) => void;
38+
removeListener: (type: string, listener: () => void) => void;
39+
off: (type: string, listener: () => void) => void;
40+
removeAllListeners: (type?: string) => void;
41+
once: (type: string, listener: () => void) => void;
42+
prependListener: (type: string, listener: () => void) => void;
43+
prependOnceListener: (type: string, listener: () => void) => void;
44+
listeners: (type: string) => (() => void)[];
45+
rawListeners: (type: string) => (() => void)[];
46+
listenerCount: (type: string) => number;
47+
emit: (type: string) => void;
48+
eventNames: () => string[];
49+
getMexListeners: () => number;
50+
setMexListeners: (length: number) => void;
51+
}
52+
& ({
53+
Layout:
54+
| "list"
55+
| "stream"
56+
| "project-settings-billing-page"
57+
| "project-settings-basic-page"
58+
| "project-settings-members-page"
59+
| "settings-profile-page"
60+
| "settings-extensions-page"
61+
| "settings-delete-account-page";
62+
Page: {
63+
title: null;
64+
lines: null;
65+
id: null;
66+
};
67+
} | {
68+
Layout: "page";
69+
Page: {
70+
title: string;
71+
lines: ParsedLine[];
72+
id: string;
73+
};
74+
});
75+
76+
export type PageBrief = {
77+
exists: boolean;
78+
hasIcon?: boolean;
79+
id: string;
80+
title: string;
81+
titleLc: string;
82+
updated: number;
83+
};
84+
85+
type TimeStamp = {
86+
addFormat: (format: string | (() => string)) => void;
87+
removeAllFormat: () => void;
88+
};
89+
90+
type AddItemProps = {
91+
title: string | (() => string);
92+
image?: string;
93+
onClick: () => void;
94+
};
95+
type PageMenu = {
96+
addItem: (
97+
props: AddItemProps,
98+
) => void;
99+
addSeparator: () => void;
100+
removeAllItems: () => void;
101+
menuName: string;
102+
reset: () => void;
103+
emitChange: () => void;
104+
menus: Map<
105+
string,
106+
{
107+
image: string | null;
108+
onClick?: () => void;
109+
items: (AddItemProps & { separator: boolean })[];
110+
}
111+
>;
112+
};
113+
114+
export type eventName =
115+
| "lines:changed"
116+
| "page:changed"
117+
| "layout:changed"
118+
| "project:changed";

userscript/blocks.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { Node, NodeWithoutIndent } from "./nodes.ts";
2+
3+
export type ParsedLine =
4+
& {
5+
text: string;
6+
id: string;
7+
userId: string;
8+
updated: number;
9+
created: number;
10+
section: {
11+
number: number;
12+
start: boolean;
13+
end: boolean;
14+
};
15+
}
16+
& ({
17+
title?: boolean;
18+
} | {
19+
codeBlock: CodeBlock;
20+
} | {
21+
tableBlock: TableBlock;
22+
} | {
23+
helpfeel: Helpfeel;
24+
} | {
25+
cli: Cli;
26+
} | {
27+
formulaLine?: true;
28+
nodes: NodeWithoutIndent[];
29+
} | {
30+
numberList?: { digit: number };
31+
formulaLine?: true;
32+
nodes: Node[];
33+
});
34+
35+
export type CodeBlock = {
36+
lang: string;
37+
filename?: string;
38+
indent: number;
39+
start: boolean;
40+
end: boolean;
41+
};
42+
export type TableBlock = {
43+
title: string;
44+
cells: string[];
45+
indent: number;
46+
start: boolean;
47+
end: boolean;
48+
};
49+
export type Helpfeel = {
50+
prefix: "?";
51+
entry: string;
52+
};
53+
export type Cli = {
54+
prefix: "$" | "%";
55+
command: string;
56+
};

0 commit comments

Comments
 (0)