template-replacement 3.3.1 → 3.3.3

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.
@@ -13,7 +13,7 @@ export default class DbFile implements FileSystem {
13
13
  async write(data: fileDataType): Promise<boolean> {
14
14
  try {
15
15
  await db.putData<File>({
16
- url: this.#name,
16
+ key: this.#name,
17
17
  data: new File([data], this.#name),
18
18
  })
19
19
  return true
@@ -1,7 +1,8 @@
1
+ import _init from '../../worker/child/base';
1
2
 
2
3
  type templateData<T> = {
3
- url: string
4
- data: T
4
+ key: string // 主键
5
+ data: T // 文件数据
5
6
  }
6
7
 
7
8
  export default class indexedDBCache {
@@ -9,10 +10,12 @@ export default class indexedDBCache {
9
10
  _isInitFinish: boolean = false //是否初始化完成
10
11
 
11
12
  _db?: IDBDatabase //数据库
12
- _dbName: string = 'template_replacement' //数据库名
13
+ _dbName: string = 'template_replacement_db' //数据库名
13
14
  _dbversion: number = 1 //数据库版本
14
- _cacheTableName: string = 'templates' //表名
15
- _tableMap: any = {} //表配置
15
+ _cacheTableName: string = 'template_files' //表名
16
+ _tableMap: unknown = {} //表配置
17
+
18
+ _init: Promise<unknown> | undefined
16
19
 
17
20
 
18
21
  // 构造函数
@@ -21,7 +24,10 @@ export default class indexedDBCache {
21
24
  }
22
25
 
23
26
  initDB(): Promise<any> {
24
- return new Promise((resolve, reject) => {
27
+ if (this._init) {
28
+ return this._init
29
+ }
30
+ this._init = new Promise((resolve, reject) => {
25
31
  const request = indexedDB.open(this._dbName, this._dbversion) // 打开数据库
26
32
  // 数据库初始化成功
27
33
  request.onsuccess = (event) => {
@@ -48,12 +54,14 @@ export default class indexedDBCache {
48
54
  let db = request.result
49
55
  if (!db.objectStoreNames.contains(this._cacheTableName)) {
50
56
  db.createObjectStore(this._cacheTableName, {
51
- keyPath: 'url', // 设置主键
57
+ keyPath: 'key', // 设置主键
52
58
  })
53
59
  }
54
60
  resolve(event)
55
61
  }
56
62
  })
63
+
64
+ return this._init
57
65
  }
58
66
 
59
67
  async awaitInit(): Promise<void> {
@@ -78,67 +86,75 @@ export default class indexedDBCache {
78
86
 
79
87
  /**
80
88
  * @description : 更新数据
81
- * @param {Object} params 添加到数据库中的数据 { url: 文件地址, data: 文件blob }
89
+ * @param {templateData} params 添加到数据库中的数据 { key: 文件key, data: 文件blob }
82
90
  * @return {*}
83
91
  */
84
92
  putData<T>(params: templateData<T>): Promise<any> {
85
- return new Promise(async (resolve, reject) => {
86
- const response = (await this.store('readwrite')).put(params)
87
- // 操作成功
88
- response.onsuccess = (event) => {
89
- resolve(event)
90
- }
91
- // 操作失败
92
- response.onerror = (event) => {
93
- reject(event)
94
- }
93
+ return new Promise((resolve, reject) => {
94
+ this.store('readwrite').then(store => {
95
+ const response = store.put(params)
96
+ // 操作成功
97
+ response.onsuccess = (event) => {
98
+ resolve(event)
99
+ }
100
+ // 操作失败
101
+ response.onerror = (event) => {
102
+ reject(event)
103
+ }
104
+ }).catch(reject)
95
105
  })
96
106
  }
97
107
 
98
108
  // 通过主键读取数据
99
109
  getDataByKey<T>(key: string): Promise<templateData<T>> {
100
- return new Promise(async (resolve, reject) => {
101
- // 通过主键读取数据
102
- const request = (await this.store()).get(key)
103
- // 操作成功
104
- request.onsuccess = () => {
105
- resolve(request.result)
106
- }
107
- // 操作失败
108
- request.onerror = (event) => {
109
- reject(event)
110
- }
110
+ return new Promise((resolve, reject) => {
111
+ this.store().then(store => {
112
+ // 通过主键读取数据
113
+ const request = store.get(key)
114
+ // 操作成功
115
+ request.onsuccess = () => {
116
+ resolve(request.result)
117
+ }
118
+ // 操作失败
119
+ request.onerror = (event) => {
120
+ reject(event)
121
+ }
122
+ }).catch(reject)
111
123
  })
112
124
  }
113
125
 
114
126
  // 通过主键移除数据
115
- deleteDataByKey<T>(key: string): Promise<void> {
116
- return new Promise(async (resolve, reject) => {
117
- // 通过主键读取数据
118
- const request = (await this.store()).delete(key)
119
- // 操作成功
120
- request.onsuccess = () => {
121
- resolve()
122
- }
123
- // 操作失败
124
- request.onerror = (event) => {
125
- reject(event)
126
- }
127
+ deleteDataByKey(key: string): Promise<void> {
128
+ return new Promise((resolve, reject) => {
129
+ this.store().then(store => {
130
+ // 通过主键读取数据
131
+ const request = store.delete(key)
132
+ // 操作成功
133
+ request.onsuccess = () => {
134
+ resolve(request.result)
135
+ }
136
+ // 操作失败
137
+ request.onerror = (event) => {
138
+ reject(event)
139
+ }
140
+ }).catch(reject)
127
141
  })
128
142
  }
129
143
 
130
144
  // 清空数据库数据
131
145
  clearDB(): Promise<any> {
132
- return new Promise(async (resolve, reject) => {
133
- const response = (await this.store('readwrite')).clear()
134
- // 操作成功
135
- response.onsuccess = (event) => {
136
- resolve(event)
137
- }
138
- // 操作失败
139
- response.onerror = (event) => {
140
- reject(event)
141
- }
146
+ return new Promise((resolve, reject) => {
147
+ this.store('readwrite').then(store => {
148
+ const response = store.clear()
149
+ // 操作成功
150
+ response.onsuccess = (event) => {
151
+ resolve(event)
152
+ }
153
+ // 操作失败
154
+ response.onerror = (event) => {
155
+ reject(event)
156
+ }
157
+ }).catch(reject)
142
158
  })
143
159
  }
144
160
 
package/helper/index.ts CHANGED
@@ -46,9 +46,13 @@ export function fileTypeByName(name: string): fileTypes {
46
46
 
47
47
  export async function fileTypeByBuffer(buffer: Uint8Array|ArrayBuffer|Blob): Promise<fileTypes> {
48
48
  if (buffer instanceof Blob) {
49
+ if (buffer.type && officeMIMETypes[buffer.type]) {
50
+ return officeMIMETypes[buffer.type]
51
+ }
49
52
  buffer = await buffer.arrayBuffer()
50
53
  }
51
54
  const type = await fileTypeFromBuffer(buffer)
55
+
52
56
  if (type && officeMIMETypes[type.mime]) {
53
57
  return officeMIMETypes[type.mime]
54
58
  }
@@ -64,21 +68,23 @@ export type fileArrayBufferData = {
64
68
  buffer: ArrayBuffer
65
69
  }
66
70
 
67
- export async function filesReaderArrayBuffer(files: File[]): Promise<fileArrayBufferData[]> {
68
- const awaits = []
71
+ export function filesReaderArrayBuffer(files: File[]): Promise<fileArrayBufferData[]> {
72
+ const awaits: Promise<fileArrayBufferData>[] = []
69
73
  for (const file of files) {
70
- awaits.push(new Promise(async (resolve, reject) => {
74
+ awaits.push(new Promise((resolve, reject) => {
71
75
  try {
72
- resolve({
73
- name: file.name,
74
- buffer: await file.arrayBuffer()
75
- } as fileArrayBufferData)
76
+ file.arrayBuffer().then(buffer => {
77
+ resolve({
78
+ name: file.name,
79
+ buffer
80
+ })
81
+ }).catch(reject)
76
82
  } catch (error) {
77
83
  reject(error)
78
84
  }
79
85
  }))
80
86
  }
81
- return (await Promise.all(awaits)) as fileArrayBufferData[]
87
+ return Promise.all(awaits)
82
88
  }
83
89
 
84
90
 
@@ -87,8 +93,8 @@ export type fileBase64Data = {
87
93
  base64: string
88
94
  }
89
95
 
90
- export async function filesReaderBase64(files: File[]): Promise<fileBase64Data[]> {
91
- const awaits = []
96
+ export function filesReaderBase64(files: File[]): Promise<fileBase64Data[]> {
97
+ const awaits: Promise<fileBase64Data>[] = []
92
98
  for (const file of files) {
93
99
  awaits.push(new Promise((resolve, reject) => {
94
100
  const fileReader = new FileReader()
@@ -116,7 +122,7 @@ export async function filesReaderBase64(files: File[]): Promise<fileBase64Data[]
116
122
  fileReader.readAsDataURL(file)
117
123
  }))
118
124
  }
119
- return await Promise.all(awaits) as fileBase64Data[]
125
+ return Promise.all(awaits)
120
126
  }
121
127
 
122
128
  export function base64ToBlob(base64: string): Blob {
@@ -157,4 +163,15 @@ export function splitArrayIntoChunks<T>(array: T[], chunkSize: number): T[][] {
157
163
  result.push(chunk)
158
164
  }
159
165
  return result
160
- }
166
+ }
167
+
168
+ // 字符串SHA-1哈希值
169
+ export async function hashString(str: string): Promise<string> {
170
+ const encoder = new TextEncoder();
171
+ const data = encoder.encode(str);
172
+ const hashBuffer = await window.crypto.subtle.digest("SHA-1", data);
173
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
174
+ return hashArray
175
+ .map((b) => b.toString(16).padStart(2, "0"))
176
+ .join("");
177
+ }
package/index.ts CHANGED
@@ -4,21 +4,13 @@ import workerGeneral from './dispatcher/workerGeneral'
4
4
  import workerSign from './dispatcher/workerSign'
5
5
  import ReplaceInterface from './replace/interface'
6
6
 
7
- export function General(): ReplaceInterface {
8
- return general()
9
- }
7
+ export const General = general
10
8
 
11
- export function Sign(): ReplaceInterface {
12
- return sign()
13
- }
9
+ export const Sign = sign
14
10
 
15
- export function WorkerGeneral(concurrency?: number): ReplaceInterface {
16
- return workerGeneral(concurrency)
17
- }
11
+ export const WorkerGeneral = workerGeneral
18
12
 
19
- export function WorkerSign(concurrency?: number): ReplaceInterface {
20
- return workerSign(concurrency)
21
- }
13
+ export const WorkerSign = workerSign
22
14
 
23
15
  type signFun = (data: any) => Promise<string>;
24
16
 
package/office/zip.ts CHANGED
@@ -27,7 +27,7 @@ export default class Zip {
27
27
  const blob = this.getFileBlob()
28
28
  if (blob) {
29
29
  const arrayBuffer = await blob.arrayBuffer()
30
- this._unzipData = await new Promise(async (resolve, reject) => {
30
+ this._unzipData = await new Promise((resolve, reject) => {
31
31
  unzip(new Uint8Array(arrayBuffer), (err: FlateError | null, data: Unzipped) => {
32
32
  if (err) {
33
33
  return reject(err)
@@ -72,12 +72,12 @@ export default class Zip {
72
72
  if (!Object.keys(data).length) {
73
73
  return undefined
74
74
  }
75
- return await new Promise(async (resolve, reject) => {
75
+ return await new Promise((resolve, reject) => {
76
76
  zip(data, options, (err: FlateError | null, data: Uint8Array) => {
77
77
  if (err) {
78
78
  return reject(err)
79
79
  }
80
- resolve(new Blob([data]))
80
+ resolve(new Blob([data as BlobPart]))
81
81
  })
82
82
  })
83
83
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "template-replacement",
3
3
  "description": "模板文件替换",
4
- "version": "3.3.1",
4
+ "version": "3.3.3",
5
5
  "author": "fushiliang <994301536@qq.com>",
6
6
  "type": "module",
7
7
  "main": "index.ts",
@@ -10,20 +10,20 @@
10
10
  "build": "npx vite build --config vite.config.ts"
11
11
  },
12
12
  "dependencies": {
13
- "@types/streamsaver": "^2.0.5",
14
- "axios": "^1.12.2",
13
+ "axios": "^1.13.2",
15
14
  "fflate": "^0.8.2",
16
15
  "file-type": "^19.6.0",
17
16
  "streamsaver": "^2.0.6",
18
17
  "template-replacement-core-wasm": "^1.4.0",
19
- "template-replacement-sign-core-wasm": "^1.4.0",
20
- "vite-plugin-wasm-pack": "^0.1.12"
18
+ "template-replacement-sign-core-wasm": "^1.4.0"
21
19
  },
22
20
  "devDependencies": {
23
- "terser": "^5.44.0",
24
- "typescript": "^5.9.2",
25
- "vite": "^6.3.6",
26
- "vite-plugin-dts": "^4.5.4"
21
+ "@types/streamsaver": "^2.0.5",
22
+ "terser": "^5.44.1",
23
+ "typescript": "^5.9.3",
24
+ "vite": "^7.2.2",
25
+ "vite-plugin-dts": "^4.5.4",
26
+ "vite-plugin-wasm-pack": "^0.1.12"
27
27
  },
28
28
  "keywords": [
29
29
  "template-replacement"
package/replace/base.ts CHANGED
@@ -27,12 +27,16 @@ export default class Base implements Interface{
27
27
  const data: Record<string, string[]> = {}
28
28
  const tasks = []
29
29
  for (const file of files) {
30
- tasks.push(new Promise<void>(async (resolve, reject) => {
31
- const buffer = await file.getBuffer()
32
- if (buffer && (file.isDecode || (await file.type()) !== fileTypes.unknown)) {
33
- data[file.name] = await this.#core.extract_one_file_variable_names(buffer, file.isDecode)
30
+ tasks.push(new Promise<void>(async resolve => {
31
+ try {
32
+ const buffer = await file.getBuffer()
33
+ if (buffer && (file.isDecode || (await file.type()) !== fileTypes.unknown)) {
34
+ data[file.name] = await this.#core.extract_one_file_variable_names(buffer, file.isDecode)
35
+ }
36
+ resolve()
37
+ } catch (error) {
38
+ console.error(error)
34
39
  }
35
- resolve()
36
40
  }))
37
41
  }
38
42
  await Promise.all(tasks)
@@ -46,23 +50,27 @@ export default class Base implements Interface{
46
50
  const data: Record<string, media[]> = {}
47
51
  const tasks = []
48
52
  for (const file of files) {
49
- tasks.push(new Promise<void>(async (resolve, reject) => {
50
- const buffer = await file.getBuffer()
51
- if (buffer && (file.isDecode || (await file.type()) !== fileTypes.unknown)) {
52
- let medias = await this.#core.extract_one_file_medias(buffer, file.isDecode)
53
- data[file.name] = []
54
- if (medias && Array.isArray(medias)) {
55
- for (const m of medias) {
56
- if (m.id && m.data) {
57
- data[file.name].push({
58
- id: m.id,
59
- data: new Uint8Array(m.data)
60
- })
53
+ tasks.push(new Promise<void>(async resolve => {
54
+ try {
55
+ const buffer = await file.getBuffer()
56
+ if (buffer && (file.isDecode || (await file.type()) !== fileTypes.unknown)) {
57
+ let medias = await this.#core.extract_one_file_medias(buffer, file.isDecode)
58
+ data[file.name] = []
59
+ if (medias && Array.isArray(medias)) {
60
+ for (const m of medias) {
61
+ if (m.id && m.data) {
62
+ data[file.name].push({
63
+ id: m.id,
64
+ data: new Uint8Array(m.data)
65
+ })
66
+ }
61
67
  }
62
68
  }
63
69
  }
70
+ resolve()
71
+ } catch (error) {
72
+ console.error(error)
64
73
  }
65
- resolve()
66
74
  }))
67
75
  }
68
76
  await Promise.all(tasks)
@@ -218,11 +226,11 @@ export default class Base implements Interface{
218
226
  return result
219
227
  }
220
228
 
221
- async fileEncrypt(file: Uint8Array): Promise<Uint8Array> {
222
- return await this.#core.file_encrypt(file)
229
+ fileEncrypt(file: Uint8Array): Promise<Uint8Array> {
230
+ return this.#core.file_encrypt(file)
223
231
  }
224
232
 
225
- async filesEncrypt(files: (Uint8Array)[]): Promise<(Uint8Array)[]> {
226
- return await this.#core.files_encrypt(files)
233
+ filesEncrypt(files: (Uint8Array)[]): Promise<(Uint8Array)[]> {
234
+ return this.#core.files_encrypt(files)
227
235
  }
228
236
  }
@@ -1,6 +1,6 @@
1
1
  import Base from './base';
2
2
  import core, { replace_batch, replace_batch_multiple_params } from '../core/general'
3
- import paramsData from './paramsData';
3
+ import paramsData, { replaceParams } from './paramsData';
4
4
 
5
5
  export default class General extends Base {
6
6
  constructor() {
@@ -13,11 +13,16 @@ export default class General extends Base {
13
13
  }
14
14
 
15
15
  async handleMultipleParams(paramsList: paramsData[], files: Uint8Array[], isDecode: boolean = false): Promise<Uint8Array[]> {
16
- let params, mediaBuffers: Uint8Array[] = [], newParamsList: any[] = []
16
+ const mediaBuffers: Uint8Array[] = [],
17
+ newParamsListTasks: Promise<replaceParams>[] = []
17
18
  for (const paramsData of paramsList) {
18
- [params, mediaBuffers] = await paramsData.toReplaceParams(mediaBuffers)
19
- newParamsList.push(params)
19
+ newParamsListTasks.push(new Promise<replaceParams>((resolve, reject) => {
20
+ paramsData.toReplaceParams(mediaBuffers).then(([params]) => {
21
+ resolve(params)
22
+ }).catch(reject)
23
+ }))
20
24
  }
25
+ const newParamsList = await Promise.all(newParamsListTasks)
21
26
  return replace_batch_multiple_params(newParamsList, mediaBuffers, files, isDecode)
22
27
  }
23
28
  }
package/replace/image.ts CHANGED
@@ -79,14 +79,18 @@ export default class image {
79
79
  if (this.file.size) {
80
80
  try {
81
81
  const bitmap = await createImageBitmap(this.file)
82
- !this.wpExtent && this.setPxExtent(bitmap.width, bitmap.height)
82
+ if (this.wpExtent) {
83
+ this.setPxExtent(bitmap.width, bitmap.height)
84
+ }
83
85
  bitmap.close()
84
86
  return this.wpExtent!
85
87
  } catch (error) {
86
88
  console.error(error)
87
89
  }
88
90
  }
89
- !this.wpExtent && this.setPxExtent(0, 0)
91
+ if (!this.wpExtent) {
92
+ this.setPxExtent(0, 0)
93
+ }
90
94
  }
91
95
  return this.wpExtent!
92
96
  }
@@ -16,7 +16,7 @@ type value = {
16
16
  Text?: string
17
17
  }
18
18
 
19
- type replaceParams = {
19
+ export type replaceParams = {
20
20
  text: Record<string, value>
21
21
  media: Record<string, value>
22
22
  }
package/replace/sign.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import Base from './base';
2
2
  import core, { add_template, add_media, replace_batch_verify, replace_params_encode, replace_batch_verify_multiple_params, replace_params_encode_multiple_params } from '../core/sign'
3
- import paramsData from './paramsData';
3
+ import paramsData, { replaceParams } from './paramsData';
4
4
 
5
5
  export default class Sign extends Base {
6
6
  constructor() {
@@ -9,30 +9,34 @@ export default class Sign extends Base {
9
9
 
10
10
  async handle(paramsData: paramsData, files: Uint8Array[], isDecode: boolean = false): Promise<Uint8Array[]> {
11
11
  paramsData.add_media = add_media
12
- const [params] = await paramsData.toReplaceParams()
13
12
 
14
13
  const addFileTasks: Promise<number>[] = []
15
14
  for (const file of files) {
16
15
  addFileTasks.push(add_template(file, isDecode))
17
16
  }
18
-
17
+ const [tempFiles, [variables]] = await Promise.all([
18
+ Promise.all(addFileTasks),
19
+ paramsData.toReplaceParams(),
20
+ ])
19
21
  const encodeData = {
20
- files: await Promise.all(addFileTasks),
21
- variables: params
22
+ files: tempFiles,
23
+ variables
22
24
  }
23
25
 
24
26
  const paramsEncode = await replace_params_encode(encodeData)
25
-
26
27
  const verifyCode = await this.sign(paramsEncode)
27
28
  return replace_batch_verify(String(verifyCode), paramsEncode.data)
28
29
  }
29
30
 
30
31
  async handleMultipleParams(paramsList: paramsData[], files: Uint8Array[], isDecode: boolean = false): Promise<Uint8Array[]> {
31
- let variables = []
32
+ let variablesTasks: Promise<replaceParams>[] = []
32
33
  for (const paramsData of paramsList) {
33
34
  paramsData.add_media = add_media
34
- const [params] = await paramsData.toReplaceParams()
35
- variables.push(params)
35
+ variablesTasks.push(new Promise((resolve, reject) => {
36
+ paramsData.toReplaceParams().then(([params]) => {
37
+ resolve(params)
38
+ }).catch(reject)
39
+ }))
36
40
  }
37
41
 
38
42
  const addFileTasks: Promise<number>[] = []
@@ -40,8 +44,13 @@ export default class Sign extends Base {
40
44
  addFileTasks.push(add_template(file, isDecode))
41
45
  }
42
46
 
47
+ const [tempFiles, variables] = await Promise.all([
48
+ Promise.all(addFileTasks),
49
+ Promise.all(variablesTasks),
50
+ ])
51
+
43
52
  const encodeData = {
44
- files: await Promise.all(addFileTasks),
53
+ files: tempFiles,
45
54
  variables
46
55
  }
47
56
 
@@ -1,16 +1,6 @@
1
1
  import axios, { AxiosProgressEvent } from "axios"
2
2
  import file from "../fileSystem"
3
-
4
- async function hashString(str: string): Promise<string> {
5
- const encoder = new TextEncoder();
6
- const data = encoder.encode(str);
7
- const hashBuffer = await window.crypto.subtle.digest("SHA-1", data);
8
- const hashArray = Array.from(new Uint8Array(hashBuffer));
9
- const hashHex = hashArray
10
- .map((b) => b.toString(16).padStart(2, "0"))
11
- .join("");
12
- return hashHex;
13
- }
3
+ import { hashString } from "../helper"
14
4
 
15
5
  export default class urlDownloadTask {
16
6
  urls: string[]
@@ -23,7 +13,7 @@ export default class urlDownloadTask {
23
13
  this.urls = urls
24
14
  }
25
15
 
26
- async start(): Promise<(Blob|undefined)[]> {
16
+ start(): Promise<(Blob|undefined)[]> {
27
17
  const tasks = []
28
18
  for (const url of this.urls) {
29
19
  tasks.push(this.getUrlData(url))
@@ -47,9 +37,7 @@ export default class urlDownloadTask {
47
37
  }
48
38
 
49
39
  async download(url: string): Promise<Blob> {
50
- const response = await axios({
51
- url: url,
52
- method: 'get',
40
+ const response = await axios.get(url, {
53
41
  responseType: 'blob',
54
42
  onDownloadProgress: (progressEvent: AxiosProgressEvent) => {
55
43
  for (const fun of this.downloadProgressListener) {
@@ -64,8 +52,13 @@ export default class urlDownloadTask {
64
52
  const matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDisposition)
65
53
  if (matches != null && matches[1]) {
66
54
  const filename = matches[1].replace(/['"]/g, '')
67
- const contentType = response.headers['content-type'] ?? 'application/octet-stream'
68
- return new File([response.data], filename, { type: contentType })
55
+ return new File(
56
+ [response.data],
57
+ filename,
58
+ {
59
+ type: response.headers['content-type'] ?? 'application/octet-stream'
60
+ }
61
+ )
69
62
  }
70
63
  }
71
64
  return response.data
package/temp/index.ts CHANGED
@@ -81,15 +81,11 @@ export default class Temp implements TempInterface{
81
81
  if (this._type) {
82
82
  return this._type
83
83
  }
84
- if (this.uint8Array) {
85
- this._type = await fileTypeByBuffer(this.uint8Array)
84
+ const buffer = await this.getBuffer()
85
+ if (buffer) {
86
+ this._type = await fileTypeByBuffer(buffer)
86
87
  }else{
87
- const file = await this.getBlob()
88
- if (file) {
89
- this._type = await fileTypeByBuffer(file)
90
- }else{
91
- this._type = fileTypes.unknown
92
- }
88
+ this._type = fileTypes.unknown
93
89
  }
94
90
  return this._type
95
91
  }
@@ -146,17 +142,14 @@ export default class Temp implements TempInterface{
146
142
  }
147
143
 
148
144
  async getTransmitFileInfo(): Promise<transmitFileInfo|undefined> {
149
- let uint8Array = this.uint8Array
150
- this.uint8Array = undefined
151
- if (!uint8Array) {
152
- uint8Array = await this.getBuffer()
153
- }
145
+ const uint8Array = this.uint8Array ? this.uint8Array : await this.getBuffer()
154
146
  if (!uint8Array) {
155
147
  return undefined
156
148
  }
149
+ this.uint8Array = undefined
157
150
  return {
158
151
  name: this.getName(),
159
- uint8Array: new Uint8Array(uint8Array.buffer.slice(0)),
152
+ uint8Array,
160
153
  isDecode: this.isDecode,
161
154
  }
162
155
  }