@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.
Files changed (72) hide show
  1. package/dist/HamsterDocument/IntermediateDocument.d.ts +68 -0
  2. package/dist/HamsterDocument/IntermediateDocument.d.ts.map +1 -0
  3. package/dist/HamsterDocument/IntermediateDocument.js +166 -0
  4. package/dist/HamsterDocument/IntermediateDocument.js.map +1 -0
  5. package/dist/HamsterDocument/IntermediateOutline.d.ts +39 -0
  6. package/dist/HamsterDocument/IntermediateOutline.d.ts.map +1 -0
  7. package/dist/HamsterDocument/IntermediateOutline.js +26 -0
  8. package/dist/HamsterDocument/IntermediateOutline.js.map +1 -0
  9. package/dist/HamsterDocument/IntermediatePage.d.ts +36 -0
  10. package/dist/HamsterDocument/IntermediatePage.d.ts.map +1 -0
  11. package/dist/HamsterDocument/IntermediatePage.js +71 -0
  12. package/dist/HamsterDocument/IntermediatePage.js.map +1 -0
  13. package/dist/HamsterDocument/IntermediateText.d.ts +61 -0
  14. package/dist/HamsterDocument/IntermediateText.d.ts.map +1 -0
  15. package/dist/HamsterDocument/IntermediateText.js +73 -0
  16. package/dist/HamsterDocument/IntermediateText.js.map +1 -0
  17. package/dist/HamsterDocument/index.d.ts +5 -0
  18. package/dist/HamsterDocument/index.d.ts.map +1 -0
  19. package/dist/HamsterDocument/index.js +5 -0
  20. package/dist/HamsterDocument/index.js.map +1 -0
  21. package/dist/api/main/dto/batch-delete.dto.d.ts +4 -0
  22. package/dist/api/main/dto/batch-delete.dto.d.ts.map +1 -0
  23. package/dist/api/main/dto/batch-delete.dto.js +2 -0
  24. package/dist/api/main/dto/batch-delete.dto.js.map +1 -0
  25. package/dist/api/main/dto/create-folder.dto.d.ts +9 -0
  26. package/dist/api/main/dto/create-folder.dto.d.ts.map +1 -0
  27. package/dist/api/main/dto/create-folder.dto.js +2 -0
  28. package/dist/api/main/dto/create-folder.dto.js.map +1 -0
  29. package/dist/api/main/dto/create-user.dto.d.ts +10 -0
  30. package/dist/api/main/dto/create-user.dto.d.ts.map +1 -0
  31. package/dist/api/main/dto/create-user.dto.js +2 -0
  32. package/dist/api/main/dto/create-user.dto.js.map +1 -0
  33. package/dist/api/main/dto/init-upload.dto.d.ts +5 -0
  34. package/dist/api/main/dto/init-upload.dto.d.ts.map +1 -0
  35. package/dist/api/main/dto/init-upload.dto.js +2 -0
  36. package/dist/api/main/dto/init-upload.dto.js.map +1 -0
  37. package/dist/api/main/dto/list-files.dto.d.ts +8 -0
  38. package/dist/api/main/dto/list-files.dto.d.ts.map +1 -0
  39. package/dist/api/main/dto/list-files.dto.js +2 -0
  40. package/dist/api/main/dto/list-files.dto.js.map +1 -0
  41. package/dist/api/main/dto/update-folder.dto.d.ts +9 -0
  42. package/dist/api/main/dto/update-folder.dto.d.ts.map +1 -0
  43. package/dist/api/main/dto/update-folder.dto.js +2 -0
  44. package/dist/api/main/dto/update-folder.dto.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +3 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/math/Number2.d.ts +5 -0
  50. package/dist/math/Number2.d.ts.map +1 -0
  51. package/dist/math/Number2.js +2 -0
  52. package/dist/math/Number2.js.map +1 -0
  53. package/dist/math/index.d.ts +2 -0
  54. package/dist/math/index.d.ts.map +1 -0
  55. package/dist/math/index.js +2 -0
  56. package/dist/math/index.js.map +1 -0
  57. package/package.json +16 -7
  58. package/src/HamsterDocument/IntermediateDocument.ts +0 -199
  59. package/src/HamsterDocument/IntermediateOutline.ts +0 -69
  60. package/src/HamsterDocument/IntermediatePage.ts +0 -97
  61. package/src/HamsterDocument/IntermediateText.ts +0 -133
  62. package/src/HamsterDocument/index.ts +0 -4
  63. package/src/api/main/dto/.cursor/rules/base-rules.mdc +0 -8
  64. package/src/api/main/dto/batch-delete.dto.ts +0 -3
  65. package/src/api/main/dto/create-folder.dto.ts +0 -17
  66. package/src/api/main/dto/create-user.dto.ts +0 -18
  67. package/src/api/main/dto/init-upload.dto.ts +0 -5
  68. package/src/api/main/dto/list-files.dto.ts +0 -14
  69. package/src/api/main/dto/update-folder.dto.ts +0 -14
  70. package/src/index.ts +0 -2
  71. package/src/math/Number2.ts +0 -1
  72. 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,10 @@
1
+ export interface CreateUserDto {
2
+ username?: string;
3
+ password: string;
4
+ phone?: string;
5
+ email: string;
6
+ emailCode: string;
7
+ avatar?: string;
8
+ wechatId?: string;
9
+ }
10
+ //# sourceMappingURL=create-user.dto.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=create-user.dto.js.map
@@ -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,5 @@
1
+ export interface InitUploadDto {
2
+ originalFilename: string;
3
+ size: number;
4
+ }
5
+ //# sourceMappingURL=init-upload.dto.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init-upload.dto.js.map
@@ -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,8 @@
1
+ export type UploadStatus = 'uploading' | 'completed' | 'failed';
2
+ export interface ListFilesQueryDto {
3
+ parentUuid?: string;
4
+ status?: UploadStatus;
5
+ page?: number;
6
+ pageSize?: number;
7
+ }
8
+ //# sourceMappingURL=list-files.dto.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list-files.dto.js.map
@@ -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,9 @@
1
+ export interface UpdateFolderDto {
2
+ name?: string;
3
+ tags?: string;
4
+ color?: string;
5
+ sortOptions?: Record<string, object> | null;
6
+ order?: number;
7
+ parentUuid?: string | null;
8
+ }
9
+ //# sourceMappingURL=update-folder.dto.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-folder.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-folder.dto.js","sourceRoot":"","sources":["../../../../src/api/main/dto/update-folder.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './math/index';
2
+ export * from './HamsterDocument/index';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from './math/index';
2
+ export * from './HamsterDocument/index';
3
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ export type Number2 = {
2
+ x: number;
3
+ y: number;
4
+ };
5
+ //# sourceMappingURL=Number2.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Number2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Number2.js","sourceRoot":"","sources":["../../src/math/Number2.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './Number2';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from './Number2';
2
+ //# sourceMappingURL=index.js.map
@@ -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.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "",
5
5
  "scripts": {
6
- "build:all": "echo no-build",
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
- "main": "src/index.ts",
29
- "module": "src/index.ts",
30
- "types": "src/index.ts",
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
- "src"
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
- }