@hamster-note/types 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/HamsterDocument/IntermediateDocument.d.ts +68 -0
- package/dist/HamsterDocument/IntermediateDocument.d.ts.map +1 -0
- package/dist/HamsterDocument/IntermediateDocument.js +166 -0
- package/dist/HamsterDocument/IntermediateDocument.js.map +1 -0
- package/dist/HamsterDocument/IntermediateOutline.d.ts +39 -0
- package/dist/HamsterDocument/IntermediateOutline.d.ts.map +1 -0
- package/dist/HamsterDocument/IntermediateOutline.js +26 -0
- package/dist/HamsterDocument/IntermediateOutline.js.map +1 -0
- package/dist/HamsterDocument/IntermediatePage.d.ts +36 -0
- package/dist/HamsterDocument/IntermediatePage.d.ts.map +1 -0
- package/dist/HamsterDocument/IntermediatePage.js +71 -0
- package/dist/HamsterDocument/IntermediatePage.js.map +1 -0
- package/dist/HamsterDocument/IntermediateText.d.ts +61 -0
- package/dist/HamsterDocument/IntermediateText.d.ts.map +1 -0
- package/dist/HamsterDocument/IntermediateText.js +73 -0
- package/dist/HamsterDocument/IntermediateText.js.map +1 -0
- package/dist/HamsterDocument/index.d.ts +5 -0
- package/dist/HamsterDocument/index.d.ts.map +1 -0
- package/dist/HamsterDocument/index.js +5 -0
- package/dist/HamsterDocument/index.js.map +1 -0
- package/dist/api/main/dto/batch-delete.dto.d.ts +4 -0
- package/dist/api/main/dto/batch-delete.dto.d.ts.map +1 -0
- package/dist/api/main/dto/batch-delete.dto.js +2 -0
- package/dist/api/main/dto/batch-delete.dto.js.map +1 -0
- package/dist/api/main/dto/create-folder.dto.d.ts +9 -0
- package/dist/api/main/dto/create-folder.dto.d.ts.map +1 -0
- package/dist/api/main/dto/create-folder.dto.js +2 -0
- package/dist/api/main/dto/create-folder.dto.js.map +1 -0
- package/dist/api/main/dto/create-user.dto.d.ts +10 -0
- package/dist/api/main/dto/create-user.dto.d.ts.map +1 -0
- package/dist/api/main/dto/create-user.dto.js +2 -0
- package/dist/api/main/dto/create-user.dto.js.map +1 -0
- package/dist/api/main/dto/init-upload.dto.d.ts +5 -0
- package/dist/api/main/dto/init-upload.dto.d.ts.map +1 -0
- package/dist/api/main/dto/init-upload.dto.js +2 -0
- package/dist/api/main/dto/init-upload.dto.js.map +1 -0
- package/dist/api/main/dto/list-files.dto.d.ts +8 -0
- package/dist/api/main/dto/list-files.dto.d.ts.map +1 -0
- package/dist/api/main/dto/list-files.dto.js +2 -0
- package/dist/api/main/dto/list-files.dto.js.map +1 -0
- package/dist/api/main/dto/update-folder.dto.d.ts +9 -0
- package/dist/api/main/dto/update-folder.dto.d.ts.map +1 -0
- package/dist/api/main/dto/update-folder.dto.js +2 -0
- package/dist/api/main/dto/update-folder.dto.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/math/Number2.d.ts +5 -0
- package/dist/math/Number2.d.ts.map +1 -0
- package/dist/math/Number2.js +2 -0
- package/dist/math/Number2.js.map +1 -0
- package/dist/math/index.d.ts +2 -0
- package/dist/math/index.d.ts.map +1 -0
- package/dist/math/index.js +2 -0
- package/dist/math/index.js.map +1 -0
- package/package.json +16 -7
- package/src/HamsterDocument/IntermediateDocument.ts +0 -199
- package/src/HamsterDocument/IntermediateOutline.ts +0 -69
- package/src/HamsterDocument/IntermediatePage.ts +0 -97
- package/src/HamsterDocument/IntermediateText.ts +0 -133
- package/src/HamsterDocument/index.ts +0 -4
- package/src/api/main/dto/.cursor/rules/base-rules.mdc +0 -8
- package/src/api/main/dto/batch-delete.dto.ts +0 -3
- package/src/api/main/dto/create-folder.dto.ts +0 -17
- package/src/api/main/dto/create-user.dto.ts +0 -18
- package/src/api/main/dto/init-upload.dto.ts +0 -5
- package/src/api/main/dto/list-files.dto.ts +0 -14
- package/src/api/main/dto/update-folder.dto.ts +0 -14
- package/src/index.ts +0 -2
- package/src/math/Number2.ts +0 -1
- package/src/math/index.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-folder.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/create-folder.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-user.dto.d.ts","sourceRoot":"","sources":["../../../../src/api/main/dto/create-user.dto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAE5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,QAAQ,EAAE,MAAM,CAAA;IAGhB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,KAAK,EAAE,MAAM,CAAA;IAGb,SAAS,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/create-user.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-upload.dto.d.ts","sourceRoot":"","sources":["../../../../src/api/main/dto/init-upload.dto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IAExB,IAAI,EAAE,MAAM,CAAA;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-upload.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/init-upload.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-files.dto.d.ts","sourceRoot":"","sources":["../../../../src/api/main/dto/list-files.dto.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE/D,MAAM,WAAW,iBAAiB;IAEhC,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,MAAM,CAAC,EAAE,YAAY,CAAA;IAGrB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-files.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/list-files.dto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-folder.dto.d.ts","sourceRoot":"","sources":["../../../../src/api/main/dto/update-folder.dto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;IAE3C,KAAK,CAAC,EAAE,MAAM,CAAA;IAGd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-folder.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/update-folder.dto.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Number2.d.ts","sourceRoot":"","sources":["../../src/math/Number2.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Number2.js","sourceRoot":"","sources":["../../src/math/Number2.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hamster-note/types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"build:all": "
|
|
6
|
+
"build:all": "tsc -p tsconfig.build.json",
|
|
7
|
+
"prepublishOnly": "yarn build:all",
|
|
8
|
+
"lint": "echo 'no-lint'",
|
|
7
9
|
"test": "echo 'no-test'"
|
|
8
10
|
},
|
|
9
11
|
"dependencies": {},
|
|
@@ -25,11 +27,18 @@
|
|
|
25
27
|
"typescript": "^5.0.2",
|
|
26
28
|
"typescript-eslint": "^8.50.0"
|
|
27
29
|
},
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
30
|
+
"type": "module",
|
|
31
|
+
"main": "dist/index.js",
|
|
32
|
+
"module": "dist/index.js",
|
|
33
|
+
"types": "dist/index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"import": "./dist/index.js",
|
|
37
|
+
"types": "./dist/index.d.ts"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
31
40
|
"files": [
|
|
32
|
-
"
|
|
41
|
+
"dist"
|
|
33
42
|
],
|
|
34
43
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
|
35
|
-
}
|
|
44
|
+
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IntermediatePage,
|
|
3
|
-
IntermediatePageSerialized
|
|
4
|
-
} from './IntermediatePage'
|
|
5
|
-
import {
|
|
6
|
-
IntermediateOutline,
|
|
7
|
-
IntermediateOutlineSerialized
|
|
8
|
-
} from './IntermediateOutline'
|
|
9
|
-
import { Number2 } from 'src/math'
|
|
10
|
-
|
|
11
|
-
export interface IntermediateDocumentSerialized {
|
|
12
|
-
id: string
|
|
13
|
-
pages: IntermediatePageSerialized[]
|
|
14
|
-
title: string
|
|
15
|
-
// 文档大纲(可选)
|
|
16
|
-
outline?: IntermediateOutlineSerialized[]
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
type getPage = () => Promise<IntermediatePage>
|
|
20
|
-
|
|
21
|
-
// ! 用来懒加载 Pages
|
|
22
|
-
export class IntermediatePageMap {
|
|
23
|
-
// ! 缓存 Promise
|
|
24
|
-
private cacheMapById: Map<string, ReturnType<getPage>> = new Map()
|
|
25
|
-
// ! 缓存 Promise
|
|
26
|
-
private cacheMapByPageNumber: Map<number, ReturnType<getPage>> = new Map()
|
|
27
|
-
constructor(
|
|
28
|
-
private mapById: Map<string, getPage>,
|
|
29
|
-
private mapByPageNumber: Map<number, getPage>,
|
|
30
|
-
private sizeMapByPageNumber: Map<number, Number2>
|
|
31
|
-
) {
|
|
32
|
-
return
|
|
33
|
-
}
|
|
34
|
-
// 按顺序从第一页开始
|
|
35
|
-
async getPages(): Promise<IntermediatePage[]> {
|
|
36
|
-
const result: IntermediatePage[] = []
|
|
37
|
-
for (const pageId of this.mapById.keys()) {
|
|
38
|
-
// ? 从 this.getPageById 拿是因为会过一遍缓存
|
|
39
|
-
const getPage = this.getPageById(pageId)
|
|
40
|
-
if (getPage) {
|
|
41
|
-
const page = await getPage()
|
|
42
|
-
result[page.number - 1] = page
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return result
|
|
46
|
-
}
|
|
47
|
-
updatePage(page: IntermediatePage) {
|
|
48
|
-
const newPromise = Promise.resolve(page)
|
|
49
|
-
const newGetPage = () => newPromise
|
|
50
|
-
this.cacheMapById.set(page.id, newPromise)
|
|
51
|
-
this.cacheMapByPageNumber.set(page.number, newPromise)
|
|
52
|
-
this.mapById.set(page.id, newGetPage)
|
|
53
|
-
this.mapByPageNumber.set(page.number, newGetPage)
|
|
54
|
-
this.sizeMapByPageNumber.set(page.number, {
|
|
55
|
-
x: page.width,
|
|
56
|
-
y: page.height
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
// & 从序列化的数据生成类
|
|
60
|
-
static makeBySerializedData(pages: IntermediatePageSerialized[]) {
|
|
61
|
-
const mapById: IntermediatePageMap['mapById'] = new Map()
|
|
62
|
-
const mapByPageNumber: IntermediatePageMap['mapByPageNumber'] = new Map()
|
|
63
|
-
const sizeMapByPageNumber: IntermediatePageMap['sizeMapByPageNumber'] =
|
|
64
|
-
new Map()
|
|
65
|
-
pages.forEach((page) => {
|
|
66
|
-
mapById.set(page.id, () => Promise.resolve(new IntermediatePage(page)))
|
|
67
|
-
mapByPageNumber.set(page.number, () =>
|
|
68
|
-
Promise.resolve(new IntermediatePage(page))
|
|
69
|
-
)
|
|
70
|
-
sizeMapByPageNumber.set(page.number, { x: page.width, y: page.height })
|
|
71
|
-
})
|
|
72
|
-
return new IntermediatePageMap(
|
|
73
|
-
mapById,
|
|
74
|
-
mapByPageNumber,
|
|
75
|
-
sizeMapByPageNumber
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
// & 从列表数据生成类
|
|
79
|
-
static makeByInfoList(
|
|
80
|
-
infoList: {
|
|
81
|
-
id: string
|
|
82
|
-
pageNumber: number
|
|
83
|
-
size: Number2
|
|
84
|
-
getData: getPage
|
|
85
|
-
}[]
|
|
86
|
-
) {
|
|
87
|
-
const mapById: IntermediatePageMap['mapById'] = new Map()
|
|
88
|
-
const mapByPageNumber: IntermediatePageMap['mapByPageNumber'] = new Map()
|
|
89
|
-
const sizeMapByPageNumber: IntermediatePageMap['sizeMapByPageNumber'] =
|
|
90
|
-
new Map()
|
|
91
|
-
infoList.forEach((info) => {
|
|
92
|
-
mapById.set(info.id, info.getData)
|
|
93
|
-
mapByPageNumber.set(info.pageNumber, info.getData)
|
|
94
|
-
sizeMapByPageNumber.set(info.pageNumber, info.size)
|
|
95
|
-
})
|
|
96
|
-
return new IntermediatePageMap(
|
|
97
|
-
mapById,
|
|
98
|
-
mapByPageNumber,
|
|
99
|
-
sizeMapByPageNumber
|
|
100
|
-
)
|
|
101
|
-
}
|
|
102
|
-
getPageById(id: string) {
|
|
103
|
-
const cache = this.cacheMapById.get(id)
|
|
104
|
-
if (!cache) {
|
|
105
|
-
const result = this.mapById.get(id)
|
|
106
|
-
if (result) {
|
|
107
|
-
const promise = result()
|
|
108
|
-
this.cacheMapById.set(id, promise)
|
|
109
|
-
return () => promise
|
|
110
|
-
}
|
|
111
|
-
} else {
|
|
112
|
-
return () => cache
|
|
113
|
-
}
|
|
114
|
-
return undefined
|
|
115
|
-
}
|
|
116
|
-
getPageByPageNumber(pageNumber: number) {
|
|
117
|
-
const cache = this.cacheMapByPageNumber.get(pageNumber)
|
|
118
|
-
if (!cache) {
|
|
119
|
-
const result = this.mapByPageNumber.get(pageNumber)
|
|
120
|
-
if (result) {
|
|
121
|
-
const promise = result()
|
|
122
|
-
this.cacheMapByPageNumber.set(pageNumber, promise)
|
|
123
|
-
return () => promise
|
|
124
|
-
}
|
|
125
|
-
} else {
|
|
126
|
-
return () => cache
|
|
127
|
-
}
|
|
128
|
-
return undefined
|
|
129
|
-
}
|
|
130
|
-
getPageSizeByPageNumber(pageNumber: number) {
|
|
131
|
-
return this.sizeMapByPageNumber.get(pageNumber)
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export class IntermediateDocument {
|
|
136
|
-
public id: string
|
|
137
|
-
public title: string
|
|
138
|
-
public outline?: IntermediateOutline[]
|
|
139
|
-
get pages(): Promise<IntermediatePage[]> {
|
|
140
|
-
// 按顺序从 pagesMap 获取pages
|
|
141
|
-
return this.pagesMap.getPages()
|
|
142
|
-
}
|
|
143
|
-
set pages(pages: IntermediatePage[]) {
|
|
144
|
-
pages.forEach((page) => {
|
|
145
|
-
this.pagesMap.updatePage(page)
|
|
146
|
-
})
|
|
147
|
-
}
|
|
148
|
-
private pagesMap: IntermediatePageMap
|
|
149
|
-
static async serialize(
|
|
150
|
-
doc: IntermediateDocument
|
|
151
|
-
): Promise<IntermediateDocumentSerialized> {
|
|
152
|
-
const pages = await doc.pages
|
|
153
|
-
return {
|
|
154
|
-
pages: pages.map(IntermediatePage.serialize),
|
|
155
|
-
id: doc.id,
|
|
156
|
-
title: doc.title,
|
|
157
|
-
outline: doc.outline?.map(IntermediateOutline.serialize)
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
static parse(data: IntermediateDocumentSerialized): IntermediateDocument {
|
|
161
|
-
return new IntermediateDocument({
|
|
162
|
-
...data,
|
|
163
|
-
pagesMap: IntermediatePageMap.makeBySerializedData(data.pages),
|
|
164
|
-
outline: data.outline?.map(IntermediateOutline.parse)
|
|
165
|
-
})
|
|
166
|
-
}
|
|
167
|
-
constructor({
|
|
168
|
-
pagesMap,
|
|
169
|
-
id,
|
|
170
|
-
title,
|
|
171
|
-
outline
|
|
172
|
-
}: Omit<IntermediateDocumentSerialized, 'pages'> & {
|
|
173
|
-
pagesMap: IntermediatePageMap
|
|
174
|
-
outline?: IntermediateOutline[]
|
|
175
|
-
}) {
|
|
176
|
-
this.pagesMap = pagesMap
|
|
177
|
-
this.id = id
|
|
178
|
-
this.title = title
|
|
179
|
-
this.outline = outline
|
|
180
|
-
}
|
|
181
|
-
async getCover() {
|
|
182
|
-
const page = await this.pagesMap.getPageByPageNumber(1)?.()
|
|
183
|
-
if (!page) return undefined
|
|
184
|
-
return page.getThumbnail(0.3)
|
|
185
|
-
}
|
|
186
|
-
getPageById(id: string) {
|
|
187
|
-
return this.pagesMap.getPageById(id)
|
|
188
|
-
}
|
|
189
|
-
getPageByPageNumber(pageNumber: number) {
|
|
190
|
-
return this.pagesMap.getPageByPageNumber(pageNumber)
|
|
191
|
-
}
|
|
192
|
-
getPageSizeByPageNumber(pageNumber: number) {
|
|
193
|
-
return this.pagesMap.getPageSizeByPageNumber(pageNumber)
|
|
194
|
-
}
|
|
195
|
-
// 获取文档大纲
|
|
196
|
-
getOutline() {
|
|
197
|
-
return this.outline
|
|
198
|
-
}
|
|
199
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IntermediateText,
|
|
3
|
-
IntermediateTextSerialized
|
|
4
|
-
} from './IntermediateText'
|
|
5
|
-
|
|
6
|
-
export enum IntermediateOutlineDestType {
|
|
7
|
-
TEXT = 'text',
|
|
8
|
-
PAGE = 'page',
|
|
9
|
-
POSITION = 'position',
|
|
10
|
-
URL = 'url'
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type IntermediateOutlineDest =
|
|
14
|
-
| IntermediateOutlineDestPage
|
|
15
|
-
| IntermediateOutlineDestText
|
|
16
|
-
| IntermediateOutlineDestPosition
|
|
17
|
-
| IntermediateOutlineDestUrl
|
|
18
|
-
|
|
19
|
-
export interface IntermediateOutlineDestUrl {
|
|
20
|
-
targetType: IntermediateOutlineDestType.URL
|
|
21
|
-
url: string
|
|
22
|
-
unsafeUrl: string | undefined
|
|
23
|
-
newWindow: boolean
|
|
24
|
-
items?: IntermediateOutlineDest[]
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface IntermediateOutlineDestPage {
|
|
28
|
-
targetType: IntermediateOutlineDestType.PAGE
|
|
29
|
-
pageId: string
|
|
30
|
-
items?: IntermediateOutlineDest[]
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface IntermediateOutlineDestText {
|
|
34
|
-
targetType: IntermediateOutlineDestType.TEXT
|
|
35
|
-
textId: string
|
|
36
|
-
items?: IntermediateOutlineDest[]
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface IntermediateOutlineDestPosition {
|
|
40
|
-
targetType: IntermediateOutlineDestType.POSITION
|
|
41
|
-
items?: IntermediateOutlineDest[]
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface IntermediateOutlineSerialized extends IntermediateTextSerialized {
|
|
45
|
-
dest: IntermediateOutlineDest
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export class IntermediateOutline
|
|
49
|
-
extends IntermediateText
|
|
50
|
-
implements IntermediateOutlineSerialized
|
|
51
|
-
{
|
|
52
|
-
public dest: IntermediateOutlineDest
|
|
53
|
-
static serialize(
|
|
54
|
-
outline: IntermediateOutline
|
|
55
|
-
): IntermediateOutlineSerialized {
|
|
56
|
-
return {
|
|
57
|
-
...IntermediateText.serialize(outline),
|
|
58
|
-
dest: outline.dest
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
static parse(data: IntermediateOutlineSerialized): IntermediateOutline {
|
|
62
|
-
return new IntermediateOutline(data)
|
|
63
|
-
}
|
|
64
|
-
constructor(data: IntermediateOutlineSerialized) {
|
|
65
|
-
const { dest, ...textData } = data
|
|
66
|
-
super(textData as IntermediateTextSerialized)
|
|
67
|
-
this.dest = dest
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IntermediateText,
|
|
3
|
-
IntermediateTextSerialized
|
|
4
|
-
} from './IntermediateText'
|
|
5
|
-
|
|
6
|
-
export interface IntermediatePageSerialized {
|
|
7
|
-
id: string
|
|
8
|
-
texts: IntermediateTextSerialized[]
|
|
9
|
-
width: number
|
|
10
|
-
height: number
|
|
11
|
-
number: number
|
|
12
|
-
// 缩略图,背景图
|
|
13
|
-
thumbnail: string | undefined
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 定义文本获取函数的返回类型别名
|
|
17
|
-
type TextsGetterReturnType =
|
|
18
|
-
| Promise<IntermediateText[] | IntermediateTextSerialized[]>
|
|
19
|
-
| IntermediateText[]
|
|
20
|
-
| IntermediateTextSerialized[]
|
|
21
|
-
|
|
22
|
-
export class IntermediatePage {
|
|
23
|
-
public id: string
|
|
24
|
-
public texts: IntermediateText[]
|
|
25
|
-
public width: number
|
|
26
|
-
public height: number
|
|
27
|
-
public number: number
|
|
28
|
-
private _thumbnail?: string
|
|
29
|
-
private _getThumbnailFn?: (scale: number) => Promise<string | undefined>
|
|
30
|
-
private _getTextsFn?: () => TextsGetterReturnType
|
|
31
|
-
static serialize(page: IntermediatePage): IntermediatePageSerialized {
|
|
32
|
-
return {
|
|
33
|
-
id: page.id,
|
|
34
|
-
texts: page.texts.map(IntermediateText.serialize),
|
|
35
|
-
width: page.width,
|
|
36
|
-
height: page.height,
|
|
37
|
-
number: page.number,
|
|
38
|
-
// 序列化时仅保留已有的静态缩略图(如果存在)
|
|
39
|
-
thumbnail: page._thumbnail
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
static parse(data: IntermediatePageSerialized): IntermediatePage {
|
|
43
|
-
return new IntermediatePage(data)
|
|
44
|
-
}
|
|
45
|
-
constructor({
|
|
46
|
-
texts,
|
|
47
|
-
width,
|
|
48
|
-
height,
|
|
49
|
-
number,
|
|
50
|
-
id,
|
|
51
|
-
thumbnail,
|
|
52
|
-
getThumbnailFn,
|
|
53
|
-
getTextsFn
|
|
54
|
-
}: Omit<IntermediatePageSerialized, 'texts'> & {
|
|
55
|
-
texts: IntermediateText[] | IntermediateTextSerialized[]
|
|
56
|
-
} & {
|
|
57
|
-
getThumbnailFn?: (scale: number) => Promise<string | undefined>
|
|
58
|
-
getTextsFn?: () => TextsGetterReturnType
|
|
59
|
-
}) {
|
|
60
|
-
this.id = id
|
|
61
|
-
this.texts = (
|
|
62
|
-
texts as (IntermediateText | IntermediateTextSerialized)[]
|
|
63
|
-
).map((t) => (t instanceof IntermediateText ? t : new IntermediateText(t)))
|
|
64
|
-
this.width = width
|
|
65
|
-
this.height = height
|
|
66
|
-
this.number = number
|
|
67
|
-
this._thumbnail = thumbnail
|
|
68
|
-
if (getThumbnailFn) this._getThumbnailFn = getThumbnailFn
|
|
69
|
-
if (getTextsFn) this._getTextsFn = getTextsFn
|
|
70
|
-
}
|
|
71
|
-
// 获取缩略图,按需渲染
|
|
72
|
-
async getThumbnail(scale = 1): Promise<string | undefined> {
|
|
73
|
-
if (this._getThumbnailFn) return this._getThumbnailFn(scale)
|
|
74
|
-
return this._thumbnail
|
|
75
|
-
}
|
|
76
|
-
// 获取文本,按需获取
|
|
77
|
-
async getTexts(): Promise<IntermediateText[]> {
|
|
78
|
-
if (this._getTextsFn) {
|
|
79
|
-
const data = await this._getTextsFn()
|
|
80
|
-
const mapped = (
|
|
81
|
-
data as (IntermediateText | IntermediateTextSerialized)[]
|
|
82
|
-
).map((t) =>
|
|
83
|
-
t instanceof IntermediateText ? t : new IntermediateText(t)
|
|
84
|
-
)
|
|
85
|
-
this.texts = mapped
|
|
86
|
-
}
|
|
87
|
-
return this.texts
|
|
88
|
-
}
|
|
89
|
-
// 提供一个方法以注入按需生成缩略图的函数
|
|
90
|
-
setGetThumbnail(fn: (scale: number) => Promise<string | undefined>) {
|
|
91
|
-
this._getThumbnailFn = fn
|
|
92
|
-
}
|
|
93
|
-
// 提供一个方法以注入按需获取文本的函数
|
|
94
|
-
setGetTexts(fn: () => TextsGetterReturnType) {
|
|
95
|
-
this._getTextsFn = fn
|
|
96
|
-
}
|
|
97
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
export enum TextDir {
|
|
2
|
-
TTB = 'ttb',
|
|
3
|
-
LTR = 'ltr',
|
|
4
|
-
RTL = 'rtl'
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface IntermediateTextSerialized {
|
|
8
|
-
id: string
|
|
9
|
-
// 文字内容
|
|
10
|
-
content: string
|
|
11
|
-
// 字体大小,大于等于 1 的按 px 计算,小于 1 的按 em 计算
|
|
12
|
-
fontSize: number
|
|
13
|
-
// 字体,字体具体需要用户下载,这里只定义字体名称
|
|
14
|
-
fontFamily: string
|
|
15
|
-
// 字重,默认 500
|
|
16
|
-
fontWeight: number
|
|
17
|
-
// 是否斜体
|
|
18
|
-
italic: boolean
|
|
19
|
-
// 字体颜色
|
|
20
|
-
color: string
|
|
21
|
-
// 整体宽度
|
|
22
|
-
width: number
|
|
23
|
-
// 整体高度
|
|
24
|
-
height: number
|
|
25
|
-
// 行高
|
|
26
|
-
lineHeight: number
|
|
27
|
-
// x 坐标, 大于等于 1 的按 px,小于 1 的按 百分比
|
|
28
|
-
x: number
|
|
29
|
-
// y 坐标, 大于等于 1 的按 px,小于 1 的按 百分比
|
|
30
|
-
y: number
|
|
31
|
-
// 字体 baseline
|
|
32
|
-
ascent: number
|
|
33
|
-
// 字体 descent
|
|
34
|
-
descent: number
|
|
35
|
-
// 垂直文字
|
|
36
|
-
vertical?: boolean
|
|
37
|
-
// 文字方向
|
|
38
|
-
dir: TextDir
|
|
39
|
-
// 旋转
|
|
40
|
-
rotate: number
|
|
41
|
-
// 倾斜
|
|
42
|
-
skew: number
|
|
43
|
-
// 是否是行末
|
|
44
|
-
isEOL: boolean
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export class IntermediateText implements IntermediateTextSerialized {
|
|
48
|
-
public id: string
|
|
49
|
-
public content: string
|
|
50
|
-
public fontSize: number
|
|
51
|
-
public fontFamily: string
|
|
52
|
-
public fontWeight: number
|
|
53
|
-
public italic: boolean
|
|
54
|
-
public color: string
|
|
55
|
-
public width: number
|
|
56
|
-
public height: number
|
|
57
|
-
public lineHeight: number
|
|
58
|
-
public x: number
|
|
59
|
-
public y: number
|
|
60
|
-
public ascent: number
|
|
61
|
-
public descent: number
|
|
62
|
-
public vertical?: boolean
|
|
63
|
-
public dir: TextDir
|
|
64
|
-
public rotate: number
|
|
65
|
-
public skew: number
|
|
66
|
-
public isEOL: boolean
|
|
67
|
-
static serialize(text: IntermediateText): IntermediateTextSerialized {
|
|
68
|
-
return {
|
|
69
|
-
...text
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
static parse(data: IntermediateTextSerialized): IntermediateText {
|
|
73
|
-
return new IntermediateText(data)
|
|
74
|
-
}
|
|
75
|
-
constructor({
|
|
76
|
-
id,
|
|
77
|
-
content,
|
|
78
|
-
fontSize,
|
|
79
|
-
fontFamily,
|
|
80
|
-
fontWeight,
|
|
81
|
-
italic,
|
|
82
|
-
color,
|
|
83
|
-
width,
|
|
84
|
-
height,
|
|
85
|
-
lineHeight,
|
|
86
|
-
x,
|
|
87
|
-
y,
|
|
88
|
-
ascent,
|
|
89
|
-
descent,
|
|
90
|
-
vertical,
|
|
91
|
-
dir,
|
|
92
|
-
rotate,
|
|
93
|
-
skew,
|
|
94
|
-
isEOL
|
|
95
|
-
}: IntermediateTextSerialized) {
|
|
96
|
-
this.id = id
|
|
97
|
-
this.content = content
|
|
98
|
-
this.fontSize = fontSize
|
|
99
|
-
this.fontFamily = fontFamily
|
|
100
|
-
this.fontWeight = fontWeight
|
|
101
|
-
this.italic = italic
|
|
102
|
-
this.color = color
|
|
103
|
-
this.width = width
|
|
104
|
-
this.height = height
|
|
105
|
-
this.lineHeight = lineHeight
|
|
106
|
-
this.x = x
|
|
107
|
-
this.y = y
|
|
108
|
-
this.ascent = ascent
|
|
109
|
-
this.descent = descent
|
|
110
|
-
this.vertical = vertical
|
|
111
|
-
this.dir = dir
|
|
112
|
-
this.rotate = rotate
|
|
113
|
-
this.skew = skew
|
|
114
|
-
this.isEOL = isEOL
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export enum TextMarkedContentType {
|
|
119
|
-
BEGIN_MARKED_CONTENT = 'beginMarkedContent',
|
|
120
|
-
BEGIN_MARKED_CONTENT_PROPS = 'beginMarkedContentProps',
|
|
121
|
-
END_MARKED_CONTENT = 'endMarkedContent'
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export class IntermediateTextMarkedContent extends IntermediateText {
|
|
125
|
-
// 这两个值参见 pdfjs 的 TextMarkedContent 类型
|
|
126
|
-
constructor(
|
|
127
|
-
data: IntermediateTextSerialized,
|
|
128
|
-
protected type: TextMarkedContentType,
|
|
129
|
-
protected markedContentId: string
|
|
130
|
-
) {
|
|
131
|
-
super(data)
|
|
132
|
-
}
|
|
133
|
-
}
|