@wangeditor-next/core 6.4.2 → 6.4.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.
Files changed (103) hide show
  1. package/dist/index.d.ts +1127 -0
  2. package/dist/index.js +29 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +29 -2
  5. package/dist/index.mjs.map +1 -1
  6. package/dist/upload.d.ts +454 -0
  7. package/dist/upload.js +4 -2
  8. package/dist/upload.js.map +1 -1
  9. package/dist/upload.mjs +4 -2
  10. package/dist/upload.mjs.map +1 -1
  11. package/package.json +11 -12
  12. package/dist/core/src/config/index.d.ts +0 -13
  13. package/dist/core/src/config/interface.d.ts +0 -339
  14. package/dist/core/src/config/register.d.ts +0 -12
  15. package/dist/core/src/config/style-mode.d.ts +0 -8
  16. package/dist/core/src/constants/index.d.ts +0 -1
  17. package/dist/core/src/constants/svg.d.ts +0 -12
  18. package/dist/core/src/create/bind-node-relation.d.ts +0 -15
  19. package/dist/core/src/create/create-editor.d.ts +0 -10
  20. package/dist/core/src/create/create-toolbar.d.ts +0 -14
  21. package/dist/core/src/create/helper.d.ts +0 -37
  22. package/dist/core/src/create/index.d.ts +0 -8
  23. package/dist/core/src/editor/dom-editor.d.ts +0 -154
  24. package/dist/core/src/editor/interface.d.ts +0 -90
  25. package/dist/core/src/editor/plugins/with-config.d.ts +0 -7
  26. package/dist/core/src/editor/plugins/with-content.d.ts +0 -7
  27. package/dist/core/src/editor/plugins/with-dom.d.ts +0 -10
  28. package/dist/core/src/editor/plugins/with-emitter.d.ts +0 -7
  29. package/dist/core/src/editor/plugins/with-event-data.d.ts +0 -7
  30. package/dist/core/src/editor/plugins/with-history.d.ts +0 -7
  31. package/dist/core/src/editor/plugins/with-max-length.d.ts +0 -7
  32. package/dist/core/src/editor/plugins/with-selection.d.ts +0 -7
  33. package/dist/core/src/i18n/index.d.ts +0 -32
  34. package/dist/core/src/index.d.ts +0 -45
  35. package/dist/core/src/menus/bar/HoverBar.d.ts +0 -48
  36. package/dist/core/src/menus/bar/Toolbar.d.ts +0 -38
  37. package/dist/core/src/menus/bar-item/BaseButton.d.ts +0 -26
  38. package/dist/core/src/menus/bar-item/DropPanelButton.d.ts +0 -14
  39. package/dist/core/src/menus/bar-item/GroupButton.d.ts +0 -17
  40. package/dist/core/src/menus/bar-item/ModalButton.d.ts +0 -25
  41. package/dist/core/src/menus/bar-item/Select.d.ts +0 -22
  42. package/dist/core/src/menus/bar-item/SimpleButton.d.ts +0 -11
  43. package/dist/core/src/menus/bar-item/index.d.ts +0 -24
  44. package/dist/core/src/menus/bar-item/tooltip.d.ts +0 -6
  45. package/dist/core/src/menus/helpers/helpers.d.ts +0 -18
  46. package/dist/core/src/menus/helpers/position.d.ts +0 -36
  47. package/dist/core/src/menus/index.d.ts +0 -9
  48. package/dist/core/src/menus/interface.d.ts +0 -65
  49. package/dist/core/src/menus/panel-and-modal/BaseClass.d.ts +0 -26
  50. package/dist/core/src/menus/panel-and-modal/DropPanel.d.ts +0 -12
  51. package/dist/core/src/menus/panel-and-modal/Modal.d.ts +0 -44
  52. package/dist/core/src/menus/panel-and-modal/SelectList.d.ts +0 -20
  53. package/dist/core/src/menus/register.d.ts +0 -15
  54. package/dist/core/src/parse-html/helper.d.ts +0 -10
  55. package/dist/core/src/parse-html/index.d.ts +0 -35
  56. package/dist/core/src/parse-html/parse-common-elem-html.d.ts +0 -15
  57. package/dist/core/src/parse-html/parse-elem-html.d.ts +0 -15
  58. package/dist/core/src/parse-html/parse-text-elem-html.d.ts +0 -16
  59. package/dist/core/src/render/element/getRenderElem.d.ts +0 -11
  60. package/dist/core/src/render/element/renderElement.d.ts +0 -9
  61. package/dist/core/src/render/element/renderStyle.d.ts +0 -15
  62. package/dist/core/src/render/helper.d.ts +0 -6
  63. package/dist/core/src/render/index.d.ts +0 -27
  64. package/dist/core/src/render/node2Vnode.d.ts +0 -15
  65. package/dist/core/src/render/text/genVnode.d.ts +0 -9
  66. package/dist/core/src/render/text/renderStyle.d.ts +0 -15
  67. package/dist/core/src/render/text/renderText.d.ts +0 -9
  68. package/dist/core/src/text-area/TextArea.d.ts +0 -52
  69. package/dist/core/src/text-area/event-handlers/beforeInput.d.ts +0 -8
  70. package/dist/core/src/text-area/event-handlers/blur.d.ts +0 -8
  71. package/dist/core/src/text-area/event-handlers/click.d.ts +0 -8
  72. package/dist/core/src/text-area/event-handlers/composition.d.ts +0 -27
  73. package/dist/core/src/text-area/event-handlers/copy.d.ts +0 -8
  74. package/dist/core/src/text-area/event-handlers/cut.d.ts +0 -8
  75. package/dist/core/src/text-area/event-handlers/drag.d.ts +0 -9
  76. package/dist/core/src/text-area/event-handlers/drop.d.ts +0 -8
  77. package/dist/core/src/text-area/event-handlers/focus.d.ts +0 -8
  78. package/dist/core/src/text-area/event-handlers/index.d.ts +0 -35
  79. package/dist/core/src/text-area/event-handlers/keydown.d.ts +0 -8
  80. package/dist/core/src/text-area/event-handlers/keypress.d.ts +0 -8
  81. package/dist/core/src/text-area/event-handlers/paste.d.ts +0 -8
  82. package/dist/core/src/text-area/helpers.d.ts +0 -30
  83. package/dist/core/src/text-area/place-holder.d.ts +0 -18
  84. package/dist/core/src/text-area/syncSelection.d.ts +0 -19
  85. package/dist/core/src/text-area/update-view.d.ts +0 -13
  86. package/dist/core/src/to-html/elem2html.d.ts +0 -9
  87. package/dist/core/src/to-html/index.d.ts +0 -44
  88. package/dist/core/src/to-html/node2html.d.ts +0 -12
  89. package/dist/core/src/to-html/text2html.d.ts +0 -9
  90. package/dist/core/src/upload/createUploader.d.ts +0 -14
  91. package/dist/core/src/upload/createUppyUploader.d.ts +0 -7
  92. package/dist/core/src/upload/index.d.ts +0 -9
  93. package/dist/core/src/upload/interface.d.ts +0 -72
  94. package/dist/core/src/upload.d.ts +0 -5
  95. package/dist/core/src/utils/dom.d.ts +0 -103
  96. package/dist/core/src/utils/hotkeys.d.ts +0 -35
  97. package/dist/core/src/utils/key.d.ts +0 -11
  98. package/dist/core/src/utils/line.d.ts +0 -14
  99. package/dist/core/src/utils/sanitize-html.d.ts +0 -5
  100. package/dist/core/src/utils/ua.d.ts +0 -14
  101. package/dist/core/src/utils/util.d.ts +0 -28
  102. package/dist/core/src/utils/vdom.d.ts +0 -34
  103. package/dist/core/src/utils/weak-maps.d.ts +0 -60
@@ -0,0 +1,454 @@
1
+ import ee from "event-emitter";
2
+ import { Ancestor, Descendant, Editor, Element as Element$1, Location, Node as Node$1, NodeEntry, Range } from "slate";
3
+ import "dom7";
4
+
5
+ //#region src/utils/dom.d.ts
6
+
7
+ //#endregion
8
+ //#region src/menus/interface.d.ts
9
+ interface IPositionStyle {
10
+ top: string;
11
+ left: string;
12
+ right: string;
13
+ bottom: string;
14
+ }
15
+ //#endregion
16
+ //#region src/upload/interface.d.ts
17
+ type IUploadHeaders = Record<string, string | number>;
18
+ interface IUploadResultFile {
19
+ name: string;
20
+ type?: string;
21
+ size?: number;
22
+ [key: string]: any;
23
+ }
24
+ interface IUploadFile {
25
+ name: string;
26
+ type: string;
27
+ size: number;
28
+ data: Blob | File;
29
+ source?: string;
30
+ }
31
+ interface IUploader {
32
+ addFiles: (files: IUploadFile[]) => void;
33
+ upload: () => Promise<unknown>;
34
+ destroy?: () => void;
35
+ }
36
+ type FilesType = Record<string, any>;
37
+ type InsertFn = (src: string, poster?: string, alt?: string, href?: string) => void | Promise<void>;
38
+ interface IUploadAdapterContext {
39
+ config: IUploadConfig;
40
+ editor?: IDomEditor;
41
+ }
42
+ type IUploadAdapter = (context: IUploadAdapterContext) => IUploader;
43
+ interface IBaseUploadConfig {
44
+ fieldName?: string;
45
+ maxFileSize?: number;
46
+ maxNumberOfFiles?: number;
47
+ meta?: Record<string, unknown>;
48
+ metaWithUrl: boolean;
49
+ headers?: IUploadHeaders | ((file: IUploadResultFile) => IUploadHeaders) | undefined;
50
+ withCredentials?: boolean;
51
+ timeout?: number;
52
+ onBeforeUpload?: (files: FilesType) => boolean | FilesType;
53
+ onSuccess: (file: IUploadResultFile, response: any) => void;
54
+ onProgress?: (progress: number) => void;
55
+ onFailed: (file: IUploadResultFile, response: any) => void;
56
+ onError: (file: IUploadResultFile, error: any, res: any) => void;
57
+ allowedFileTypes?: string[];
58
+ customInsert?: (res: any, insertFn: InsertFn) => void;
59
+ customUpload?: (files: File, insertFn: InsertFn, editor: IDomEditor) => void;
60
+ customBrowseAndUpload?: (insertFn: InsertFn) => void;
61
+ uploadAdapter?: IUploadAdapter;
62
+ uppyConfig?: Record<string, any>;
63
+ xhrConfig?: Record<string, any>;
64
+ }
65
+ interface IUploadConfigWithCustomUpload extends IBaseUploadConfig {
66
+ server?: string;
67
+ customUpload: (files: File, insertFn: InsertFn, editor: IDomEditor) => void;
68
+ }
69
+ interface IUploadConfigWithUploadAdapter extends IBaseUploadConfig {
70
+ server?: string;
71
+ uploadAdapter: IUploadAdapter;
72
+ customUpload?: (files: File, insertFn: InsertFn, editor: IDomEditor) => void;
73
+ }
74
+ interface IUploadConfigWithoutCustomUpload extends IBaseUploadConfig {
75
+ server: string;
76
+ customUpload?: never;
77
+ uploadAdapter?: never;
78
+ }
79
+ /**
80
+ * 配置参考 https://uppy.io/docs/uppy/
81
+ */
82
+ type IUploadConfig = IUploadConfigWithCustomUpload | IUploadConfigWithUploadAdapter | IUploadConfigWithoutCustomUpload;
83
+ //#endregion
84
+ //#region src/config/interface.d.ts
85
+ type EmptyText = {
86
+ text: '';
87
+ };
88
+ type ImageElement = {
89
+ type: 'image';
90
+ src: string;
91
+ alt?: string;
92
+ href?: string;
93
+ width?: string;
94
+ height?: string;
95
+ style?: {
96
+ width?: string;
97
+ height?: string;
98
+ };
99
+ children: EmptyText[];
100
+ };
101
+ type VideoElement = {
102
+ type: 'video';
103
+ key?: string;
104
+ src: string;
105
+ poster?: string;
106
+ align?: 'left' | 'center' | 'right';
107
+ width?: string;
108
+ height?: string;
109
+ style?: {
110
+ width?: string;
111
+ height?: string;
112
+ };
113
+ children: EmptyText[];
114
+ };
115
+ interface IHoverbarConf {
116
+ [key: string]: {
117
+ match?: (editor: IDomEditor, n: Node$1) => boolean;
118
+ menuKeys: string[];
119
+ };
120
+ }
121
+ type AlertType = 'success' | 'info' | 'warning' | 'error';
122
+ type TextStyleMode = 'inline' | 'class';
123
+ type ClassStylePolicy = 'preserve-data' | 'fallback-inline' | 'strict';
124
+ type TableWidthExportMode = 'adaptive' | 'explicit';
125
+ type StyleClassTokenType = 'color' | 'bgColor' | 'fontSize' | 'fontFamily' | 'textAlign' | 'lineHeight' | 'indent';
126
+ interface IClassStyleUnsupportedPayload {
127
+ type: string;
128
+ value: string;
129
+ scene: 'render' | 'toHtml';
130
+ fallback: 'preserve-data' | 'inline' | 'throw';
131
+ message: string;
132
+ }
133
+ interface ISingleMenuConfig {
134
+ [key: string]: any;
135
+ iconSvg?: string;
136
+ }
137
+ interface IColorConfig {
138
+ colors: string[];
139
+ }
140
+ interface IFontSizeItem {
141
+ name: string;
142
+ value: string;
143
+ }
144
+ interface IFontSizeConfig {
145
+ fontSizeList: (string | IFontSizeItem)[];
146
+ }
147
+ interface IFontFamilyItem {
148
+ name: string;
149
+ value: string;
150
+ }
151
+ interface IFontFamilyConfig {
152
+ fontFamilyList: (string | IFontFamilyItem)[];
153
+ }
154
+ interface ILineHeightConfig {
155
+ lineHeightList: string[];
156
+ }
157
+ interface IImageMenuBaseConfig {
158
+ checkImage?: (src: string, alt: string, url: string) => boolean | undefined | string;
159
+ parseImageSrc?: (src: string) => string;
160
+ }
161
+ interface IInsertImageConfig extends IImageMenuBaseConfig {
162
+ onInsertedImage?: (imageNode: ImageElement | null) => void;
163
+ }
164
+ interface IEditImageConfig extends IImageMenuBaseConfig {
165
+ onUpdatedImage?: (imageNode: ImageElement | null) => void;
166
+ }
167
+ type ImageResizeUnit = 'px' | '%';
168
+ type ImageResizeSource = 'modal' | 'preset' | 'drag';
169
+ interface IImageResizeCheckPayload {
170
+ width: string;
171
+ height: string;
172
+ rawWidth: string;
173
+ rawHeight: string;
174
+ source: ImageResizeSource;
175
+ }
176
+ interface IImageResizeOption {
177
+ label: string;
178
+ value: string;
179
+ }
180
+ interface IImageResizeConfig {
181
+ /** Resize unit for editor-owned image resize actions. Omit to preserve legacy behavior. */
182
+ resizeUnit?: ImageResizeUnit;
183
+ /** Values for the built-in 30%/50%/100% preset buttons, in their existing order. */
184
+ resizeOptions?: IImageResizeOption[];
185
+ /** Validate normalized image dimensions before they are written to the document. */
186
+ checkImageSize?: (payload: IImageResizeCheckPayload) => boolean | undefined | string;
187
+ }
188
+ interface IEmotionConfig {
189
+ emotions: string[];
190
+ }
191
+ interface IInsertTableConfig {
192
+ minWidth: number;
193
+ minRowHeight: number;
194
+ tableHeader: {
195
+ selected: boolean;
196
+ };
197
+ tableFullWidth: {
198
+ selected: boolean;
199
+ };
200
+ widthExportMode: TableWidthExportMode;
201
+ }
202
+ interface IInsertTableColConfig {
203
+ insertPosition: 'before' | 'after';
204
+ }
205
+ interface ILinkConfig {
206
+ checkLink: (text: string, url: string) => string | boolean | undefined;
207
+ parseLinkUrl: (url: string) => string;
208
+ }
209
+ interface IInsertVideoConfig {
210
+ onInsertedVideo: (videoNode: VideoElement) => NodeEntry | Range;
211
+ checkVideo: (src: string, poster: string) => string | boolean | undefined;
212
+ parseVideoSrc: (url: string) => string;
213
+ }
214
+ type IUploadVideoConfig = IUploadConfig;
215
+ type IUploadImageConfig = IUploadConfig & {
216
+ base64LimitSize: number;
217
+ };
218
+ interface ICodeLangConfig {
219
+ codeLangs: {
220
+ text: string;
221
+ value: string;
222
+ selected?: boolean;
223
+ }[];
224
+ }
225
+ interface ICodeBlockConfig {
226
+ showCopyButton?: boolean;
227
+ }
228
+ interface IMenuConfig {
229
+ bold: ISingleMenuConfig;
230
+ underline: ISingleMenuConfig;
231
+ wavyUnderline: ISingleMenuConfig;
232
+ emphasisDot: ISingleMenuConfig;
233
+ italic: ISingleMenuConfig;
234
+ through: ISingleMenuConfig;
235
+ code: ISingleMenuConfig;
236
+ sub: ISingleMenuConfig;
237
+ sup: ISingleMenuConfig;
238
+ clearStyle: ISingleMenuConfig;
239
+ color: IColorConfig;
240
+ bgColor: IColorConfig;
241
+ fontSize: IFontSizeConfig;
242
+ fontFamily: IFontFamilyConfig;
243
+ indent: ISingleMenuConfig;
244
+ delIndent: ISingleMenuConfig;
245
+ justifyLeft: ISingleMenuConfig;
246
+ justifyRight: ISingleMenuConfig;
247
+ justifyCenter: ISingleMenuConfig;
248
+ justifyJustify: ISingleMenuConfig;
249
+ lineHeight: ILineHeightConfig;
250
+ insertImage: IInsertImageConfig;
251
+ deleteImage: ISingleMenuConfig;
252
+ editImage: IEditImageConfig;
253
+ previewImage: ISingleMenuConfig;
254
+ viewImageLink: ISingleMenuConfig;
255
+ imageWidth30: ISingleMenuConfig;
256
+ imageWidth50: ISingleMenuConfig;
257
+ imageWidth100: ISingleMenuConfig;
258
+ editorImageSizeMenu: ISingleMenuConfig;
259
+ divider: ISingleMenuConfig;
260
+ emotion: IEmotionConfig;
261
+ insertLink: ILinkConfig;
262
+ editLink: ILinkConfig;
263
+ unLink: ISingleMenuConfig;
264
+ viewLink: ISingleMenuConfig;
265
+ codeBlock: ICodeBlockConfig;
266
+ blockquote: ISingleMenuConfig;
267
+ headerSelect: ISingleMenuConfig;
268
+ header1: ISingleMenuConfig;
269
+ header2: ISingleMenuConfig;
270
+ header3: ISingleMenuConfig;
271
+ header4: ISingleMenuConfig;
272
+ header5: ISingleMenuConfig;
273
+ header6: ISingleMenuConfig;
274
+ todo: ISingleMenuConfig;
275
+ formatPainter: ISingleMenuConfig;
276
+ redo: ISingleMenuConfig;
277
+ undo: ISingleMenuConfig;
278
+ fullScreen: ISingleMenuConfig;
279
+ enter: ISingleMenuConfig;
280
+ bulletedList: ISingleMenuConfig;
281
+ numberedList: ISingleMenuConfig;
282
+ numberedListLowerAlpha: ISingleMenuConfig;
283
+ insertTable: ISingleMenuConfig;
284
+ deleteTable: ISingleMenuConfig;
285
+ insertTableRow: IInsertTableConfig;
286
+ deleteTableRow: ISingleMenuConfig;
287
+ insertTableCol: IInsertTableColConfig;
288
+ deleteTableCol: ISingleMenuConfig;
289
+ tableHeader: ISingleMenuConfig;
290
+ tableFullWidth: ISingleMenuConfig;
291
+ mergeTableCell: ISingleMenuConfig;
292
+ splitTableCell: ISingleMenuConfig;
293
+ setTableProperty: ISingleMenuConfig;
294
+ setTableCellProperty: ISingleMenuConfig;
295
+ insertVideo: IInsertVideoConfig;
296
+ uploadVideo: IUploadVideoConfig;
297
+ editVideoSize: ISingleMenuConfig;
298
+ editVideoSrc: ISingleMenuConfig;
299
+ uploadImage: IUploadImageConfig;
300
+ codeSelectLang: ICodeLangConfig;
301
+ }
302
+ type IMenuConfigUpdate = { [K in keyof IMenuConfig]?: Partial<IMenuConfig[K]> };
303
+ /**
304
+ * editor config
305
+ */
306
+ interface IEditorConfig {
307
+ customAlert: (info: string, type: AlertType) => void;
308
+ onCreated?: (editor: IDomEditor) => void;
309
+ onChange?: (editor: IDomEditor) => void;
310
+ onDestroyed?: (editor: IDomEditor) => void;
311
+ onMaxLength?: (editor: IDomEditor) => void;
312
+ onFocus?: (editor: IDomEditor) => void;
313
+ onBlur?: (editor: IDomEditor) => void;
314
+ /**
315
+ * 自定义粘贴。返回 true 则继续粘贴,返回 false 则自行实现粘贴,阻止默认粘贴
316
+ */
317
+ customPaste?: (editor: IDomEditor, e: ClipboardEvent) => boolean;
318
+ /**
319
+ * 自定义复制。拦截 event 添加或修改 clipboardData 数据
320
+ */
321
+ customCopy?: (editor: IDomEditor, e: ClipboardEvent) => void;
322
+ /**
323
+ * 自定义 HTML 清洗逻辑。在 setHtml / 初始化 html / 默认粘贴 HTML 前执行。
324
+ * 返回值会继续进入编辑器的 HTML 解析流程。
325
+ */
326
+ sanitizeHtml?: (html: string) => string;
327
+ /**
328
+ * 文本/段落样式(color/bgColor/fontSize/fontFamily/textAlign/lineHeight/indent)导出模式。
329
+ * - `inline`: 输出 style 属性(默认)
330
+ * - `class`: 输出 class + data-w-e-*,便于严格 CSP 场景使用
331
+ */
332
+ textStyleMode?: TextStyleMode;
333
+ /**
334
+ * class 模式遇到“不在受支持样式 token 集合中”的值时的处理策略。
335
+ * - `preserve-data`(默认):保留 data-w-e-*,不输出 class/inline,确保可回读但可能不展示
336
+ * - `fallback-inline`:回退为 inline style,优先保证展示
337
+ * - `strict`:直接抛错,阻止静默降级
338
+ */
339
+ classStylePolicy?: ClassStylePolicy;
340
+ /**
341
+ * class 模式遇到未知值时的通知回调。
342
+ */
343
+ onClassStyleUnsupported?: (payload: IClassStyleUnsupportedPayload) => void;
344
+ /**
345
+ * class 模式下允许输出 class 的样式 token 注册表。
346
+ * 用于扩展默认 token(需配合业务方自行提供对应 CSS)。
347
+ */
348
+ styleClassTokens?: Partial<Record<StyleClassTokenType, string[]>>;
349
+ scroll: boolean;
350
+ placeholder?: string;
351
+ readOnly: boolean;
352
+ autoFocus: boolean;
353
+ decorate?: (nodeEntry: NodeEntry) => Range[];
354
+ maxLength?: number;
355
+ imageResize?: IImageResizeConfig;
356
+ MENU_CONF?: IMenuConfigUpdate;
357
+ hoverbarKeys?: IHoverbarConf;
358
+ EXTEND_CONF?: any;
359
+ skipCacheTypes?: string[];
360
+ }
361
+ //#endregion
362
+ //#region src/editor/interface.d.ts
363
+ type ElementWithId = Element$1 & {
364
+ id: string;
365
+ };
366
+ type TableSelectionEntry = [NodeEntry<Element$1 & {
367
+ type: unknown;
368
+ rowSpan?: number;
369
+ colSpan?: number;
370
+ hidden?: boolean;
371
+ }>, {
372
+ rtl: number;
373
+ ltr: number;
374
+ ttb: number;
375
+ btt: number;
376
+ }];
377
+ type MoveOptions = Parameters<Editor['move']>[0];
378
+ type getMenuConfigReturnType<K$1> = K$1 extends keyof IMenuConfig ? IMenuConfig[K$1] : ISingleMenuConfig;
379
+ /**
380
+ * 扩展 slate Editor 接口
381
+ */
382
+ interface IDomEditor extends Editor {
383
+ insertData: (data: DataTransfer) => void;
384
+ setFragmentData: (data: Pick<DataTransfer, 'getData' | 'setData'>) => void;
385
+ getConfig: () => IEditorConfig;
386
+ getMenuConfig: <K$1 extends string>(menuKey: K$1) => getMenuConfigReturnType<K$1>;
387
+ getAllMenuKeys: () => string[];
388
+ alert: (info: string, type: AlertType) => void;
389
+ handleTab: () => void;
390
+ getHtml: () => string;
391
+ getHtmlWithId?: (idKey?: string) => string;
392
+ getText: () => string;
393
+ getSelectionText: () => string;
394
+ getElemsByTypePrefix: (typePrefix: string) => ElementWithId[];
395
+ getElemsByType: (type: string, isPrefix?: boolean) => ElementWithId[];
396
+ getParentNode: (node: Node$1) => Ancestor | null;
397
+ isEmpty: () => boolean;
398
+ clear: () => void;
399
+ /** Transform loaded content before Core binds node paths and renders the editor. */
400
+ transformInitialContent?: (content: Descendant[]) => Descendant[];
401
+ dangerouslyInsertHtml: (html: string, isRecursive?: boolean) => void;
402
+ setHtml: (html: string) => void;
403
+ id: string;
404
+ isDestroyed: boolean;
405
+ isFullScreen: boolean;
406
+ focus: (isEnd?: boolean) => void;
407
+ isFocused: () => boolean;
408
+ blur: () => void;
409
+ updateView: () => void;
410
+ destroy: () => void;
411
+ scrollToElem: (id: string) => void;
412
+ showProgressBar: (progress: number) => void;
413
+ hidePanelOrModal: () => void;
414
+ enable: () => void;
415
+ disable: () => void;
416
+ isDisabled: () => boolean;
417
+ toDOMNode: (node: Node$1) => HTMLElement;
418
+ fullScreen: () => void;
419
+ unFullScreen: () => void;
420
+ getEditableContainer: () => DOMElement;
421
+ select: (at: Location) => void;
422
+ deselect: () => void;
423
+ move(options?: MoveOptions): void;
424
+ move(distance: number, reverse?: boolean): void;
425
+ moveReverse: (distance: number) => void;
426
+ restoreSelection: () => void;
427
+ getTableSelection?: () => TableSelectionEntry[][] | null;
428
+ getSelectionPosition: () => Partial<IPositionStyle>;
429
+ getNodePosition: (node: Node$1) => Partial<IPositionStyle>;
430
+ isSelectedAll: () => boolean;
431
+ selectAll: () => void;
432
+ on: (type: string, listener: ee.EventListener) => void;
433
+ off: (type: string, listener: ee.EventListener) => void;
434
+ once: (type: string, listener: ee.EventListener) => void;
435
+ emit: (type: string, ...args: any[]) => void;
436
+ undo?: () => void;
437
+ redo?: () => void;
438
+ clearHistory?: () => void;
439
+ }
440
+ //#endregion
441
+ //#region src/upload/createUploader.d.ts
442
+ type IUploadConfigWithAdapter = IUploadConfig & {
443
+ uploadAdapter: IUploadAdapter;
444
+ };
445
+ type IDefaultUploader = IUploader & {
446
+ [key: string]: any;
447
+ };
448
+ declare function createUploader<T extends IUploadConfig>(config: T, editor?: IDomEditor): T extends IUploadConfigWithAdapter ? IUploader : IDefaultUploader;
449
+ //#endregion
450
+ //#region src/upload/createUppyUploader.d.ts
451
+ declare function createUppyUploader(config: IUploadConfig): IUploader;
452
+ //#endregion
453
+ export { type IUploadAdapter, type IUploadAdapterContext, type IUploadConfig, type IUploadFile, type IUploadResultFile, type IUploader, createUploader, createUppyUploader };
454
+ //# sourceMappingURL=upload.d.ts.map
package/dist/upload.js CHANGED
@@ -1,2 +1,4 @@
1
- !function(r,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@uppy/core"),require("@uppy/xhr-upload"),require("lodash.foreach"),require("nanoid")):"function"==typeof define&&define.amd?define(["exports","@uppy/core","@uppy/xhr-upload","lodash.foreach","nanoid"],o):o((r="undefined"!=typeof globalThis?globalThis:r||self).WangEditorCoreUpload={},r.Uppy,r.XHRUpload,r.forEach)}(this,function(r,o,e,n){"use strict";var t=function(){return t=Object.assign||function(r){for(var o,e=1,n=arguments.length;e<n;e++)for(var t in o=arguments[e])Object.prototype.hasOwnProperty.call(o,t)&&(r[t]=o[t]);return r},t.apply(this,arguments)};function i(r,o){var e=function(r,o){var e="function"==typeof Symbol&&r[Symbol.iterator];if(!e)return r;var n,t,i=e.call(r),a=[];try{for(;(void 0===o||o-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(r){t={error:r}}finally{try{n&&!n.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}return a}(r.split("#"),2),t=e[0],i=e[1],a=t,u=[];n(o,function(r,o){u.push("".concat(o,"=").concat(r))});var c=u.join("&");return a=a.indexOf("?")>0?"".concat(a,"&").concat(c):"".concat(a,"?").concat(c),i?"".concat(a,"#").concat(i):a}function a(r){return r||{name:""}}function u(r){return Object.keys(r).reduce(function(o,e){return o[e]=String(r[e]),o},{})}function c(){if("undefined"!=typeof AbortSignal){var r=AbortSignal;"function"!=typeof r.any&&(r.any=function(r){var o,e,n=new AbortController,t=function(o){r.forEach(function(r){return r.removeEventListener("abort",t)});var e=o.target.reason;n.abort(e)};try{for(var i=function(r){var o="function"==typeof Symbol&&Symbol.iterator,e=o&&r[o],n=0;if(e)return e.call(r);if(r&&"number"==typeof r.length)return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")}(r),a=i.next();!a.done;a=i.next()){var u=a.value;if(u.aborted){var c=u.reason;return n.abort(c),n.signal}u.addEventListener("abort",t,{once:!0})}}catch(r){o={error:r}}finally{try{a&&!a.done&&(e=i.return)&&e.call(i)}finally{if(o)throw o.error}}return n.signal})}}function f(r){var n=r.server,f=void 0===n?"":n,l=r.fieldName,d=void 0===l?"":l,p=r.maxFileSize,s=void 0===p?10485760:p,v=r.maxNumberOfFiles,y=void 0===v?100:v,h=r.meta,m=void 0===h?{}:h,b=r.metaWithUrl,g=void 0!==b&&b,w=r.headers,E=void 0===w?{}:w,x=r.withCredentials,S=void 0!==x&&x,U=r.timeout,C=void 0===U?1e4:U,O=r.onBeforeUpload,j=void 0===O?function(r){return r}:O,N=r.onSuccess,A=void 0===N?function(r,o){}:N,q=r.onError,F=void 0===q?function(r,o,e){console.error("".concat(r.name," upload error"),o,e)}:q,T=r.onProgress,z=void 0===T?function(r){}:T;if(!f)throw new Error("Cannot get upload server address\n没有配置上传地址");if(!d)throw new Error("Cannot get fieldName\n没有配置 fieldName");var B=f;g&&(B=i(B,m)),c();var L=function(r){if(r)return"function"==typeof r?function(o){return u(r(o))}:u(r)}(E),P=new o(t({onBeforeUpload:function(r){return j(r)},restrictions:{maxFileSize:s,maxNumberOfFiles:y},meta:m},r.uppyConfig)).use(e,t({endpoint:B,headers:L,formData:!0,fieldName:d,bundle:!1,withCredentials:S,timeout:C},r.xhrConfig));return P.on("upload-success",function(r,o){var e=(null!=o?o:{}).body,n=void 0===e?{}:e,t=a(r);try{A(t,n)}catch(r){console.error("wangEditor upload file - onSuccess error",r)}}),P.on("progress",function(r){r<1||z(r)}),P.on("upload-error",function(r,o,e){var n=a(r);try{F(n,o,e)}catch(r){console.error("wangEditor upload file - onError error",r)}}),P.on("restriction-failed",function(r,o){var e=a(r);try{F(e,o,void 0)}catch(r){console.error("wangEditor upload file - onError error",r)}}),P}"function"==typeof SuppressedError&&SuppressedError,r.createUploader=function(r,o){return r.uploadAdapter?r.uploadAdapter({config:r,editor:o}):f(r)},r.createUppyUploader=f});
2
- //# sourceMappingURL=upload.js.map
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@uppy/core`),require(`@uppy/xhr-upload`),require(`lodash.foreach`),require(`nanoid`)):typeof define==`function`&&define.amd?define([`exports`,`@uppy/core`,`@uppy/xhr-upload`,`lodash.foreach`,`nanoid`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.WangEditorCoreUpload={},e.Uppy,e.XHRUpload,e.forEach,e.nanoid))})(this,function(e,t,n,r,i){var a=Object.create,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=c(t),a=0,l=i.length,d;a<l;a++)d=i[a],!u.call(e,d)&&d!==n&&o(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=s(t,d))||r.enumerable});return e},f=(e,t,n)=>(n=e==null?{}:a(l(e)),d(t||!e||!e.__esModule?o(n,`default`,{value:e,enumerable:!0}):n,e));t=f(t),n=f(n),r=f(r);function p(e,t){let[n,i]=e.split(`#`),a=n,o=[];(0,r.default)(t,(e,t)=>{o.push(`${t}=${e}`)});let s=o.join(`&`);return a=a.indexOf(`?`)>0?`${a}&${s}`:`${a}?${s}`,i?`${a}#${i}`:a}function m(e){"@babel/helpers - typeof";return m=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},m(e)}function h(e,t){if(m(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(m(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function g(e){var t=h(e,`string`);return m(t)==`symbol`?t:t+``}function _(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(e){return e||{name:``}}function x(e){return Object.keys(e).reduce((t,n)=>(t[n]=String(e[n]),t),{})}function S(e){if(e)return typeof e==`function`?t=>x(e(t)):x(e)}function C(){if(typeof AbortSignal>`u`)return;let e=AbortSignal;typeof e.any!=`function`&&(e.any=e=>{let t=new AbortController,n=r=>{e.forEach(e=>e.removeEventListener(`abort`,n));let i=r.target.reason;t.abort(i)};for(let r of e){if(r.aborted){let e=r.reason;return t.abort(e),t.signal}r.addEventListener(`abort`,n,{once:!0})}return t.signal})}function w(e){let{server:r=``,fieldName:i=``,maxFileSize:a=10*1024*1024,maxNumberOfFiles:o=100,meta:s={},metaWithUrl:c=!1,headers:l={},withCredentials:u=!1,timeout:d=10*1e3,onBeforeUpload:f=e=>e,onSuccess:m=(e,t)=>{},onError:h=(e,t,n)=>{console.error(`${e.name} upload error`,t,n)},onProgress:g=e=>{}}=e;if(!r)throw Error(`Cannot get upload server address
2
+ 没有配置上传地址`);if(!i)throw Error(`Cannot get fieldName
3
+ 没有配置 fieldName`);let _=r;c&&(_=p(_,s)),C();let v=S(l),x=new t.default(y({onBeforeUpload:e=>f(e),restrictions:{maxFileSize:a,maxNumberOfFiles:o},meta:s},e.uppyConfig)).use(n.default,y({endpoint:_,headers:v,formData:!0,fieldName:i,bundle:!1,withCredentials:u,timeout:d},e.xhrConfig));return x.on(`upload-success`,(e,t)=>{let{body:n={}}=t==null?{}:t,r=b(e);try{m(r,n)}catch(e){console.error(`wangEditor upload file - onSuccess error`,e)}}),x.on(`progress`,e=>{e<1||g(e)}),x.on(`upload-error`,(e,t,n)=>{let r=b(e);try{h(r,t,n)}catch(e){console.error(`wangEditor upload file - onError error`,e)}}),x.on(`restriction-failed`,(e,t)=>{let n=b(e);try{h(n,t,void 0)}catch(e){console.error(`wangEditor upload file - onError error`,e)}}),x}var T=w;function E(e,t){return e.uploadAdapter?e.uploadAdapter({config:e,editor:t}):T(e)}e.createUploader=E,e.createUppyUploader=T});
4
+ //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sources":["../src/utils/util.ts","../src/upload/createUppyUploader.ts","../src/upload/createUploader.ts"],"sourcesContent":["/**\n * @description 工具函数\n * @author wangfupeng\n */\n\nimport forEach from 'lodash.foreach'\nimport { nanoid } from 'nanoid'\n\ntype PromiseCallback = (value: void) => void | PromiseLike<void>\n\n/**\n * 获取随机数字符串\n * @param prefix 前缀\n * @returns 随机数字符串\n */\nexport function genRandomStr(prefix: string = 'r'): string {\n return `${prefix}-${nanoid()}`\n}\n\nexport function promiseResolveThen(fn: Function) {\n Promise.resolve().then(fn as PromiseCallback)\n}\n\n/**\n * 追加 url query 参数\n * @param url url\n * @param data data\n */\nexport function addQueryToUrl(url: string, data: object): string {\n const [initialUrlWithoutHash, hash] = url.split('#')\n let urlWithoutHash = initialUrlWithoutHash\n\n // 拼接 query string\n const queryArr: string[] = []\n\n forEach(data, (val, key) => {\n queryArr.push(`${key}=${val}`)\n })\n const queryStr = queryArr.join('&')\n\n // 拼接到 url\n if (urlWithoutHash.indexOf('?') > 0) {\n // 已有 query\n urlWithoutHash = `${urlWithoutHash}&${queryStr}`\n } else {\n // 没有 query\n urlWithoutHash = `${urlWithoutHash}?${queryStr}`\n }\n\n // 返回拼接好的 url\n if (hash) {\n return `${urlWithoutHash}#${hash}`\n }\n return urlWithoutHash\n\n}\n\n/**\n * 替换 html 特殊字符,如 > 替换为 &gt;\n * @param str html str\n */\nexport function replaceHtmlSpecialSymbols(str: string) {\n return (\n str\n /**\n * 遇到两个空格时才替换,一个空格不替换\n * 两个英文单词之间有一个空格,就不用替换,否则无法默认换行 issue #4403\n */\n .replace(/ {2}/g, ' &nbsp;')\n\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/®/g, '&reg;')\n .replace(/©/g, '&copy;')\n .replace(/™/g, '&trade;')\n )\n}\n\n/**\n *【反转】替换 html 特殊字符,如 &gt; 替换为 >\n * @param str html str\n */\nexport function deReplaceHtmlSpecialSymbols(str: string) {\n return str\n .replace(/&nbsp;/g, ' ')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&reg;/g, '®')\n .replace(/&copy;/g, '©')\n .replace(/&trade;/g, '™')\n .replace(/&quot;/g, '\"')\n}\n\nexport const toString = (val: unknown): string => Object.prototype.toString.call(val)\n","/**\n * @description create default uppy uploader\n * @author wangfupeng\n */\n\n// @ts-ignore Uppy v5 types are not resolvable under current TS moduleResolution=node\nimport Uppy from '@uppy/core'\n// @ts-ignore Uppy v5 types are not resolvable under current TS moduleResolution=node\nimport XHRUpload from '@uppy/xhr-upload'\n\nimport { addQueryToUrl } from '../utils/util'\nimport type {\n IUploadConfig, IUploader, IUploadHeaders, IUploadResultFile,\n} from './interface'\n\nfunction getUploadResultFile(file?: IUploadResultFile | null): IUploadResultFile {\n if (file) { return file }\n\n return { name: '' }\n}\n\nfunction normalizeHeaderValues(headers: IUploadHeaders): Record<string, string> {\n return Object.keys(headers).reduce<Record<string, string>>((res, key) => {\n res[key] = String(headers[key])\n return res\n }, {})\n}\n\nfunction normalizeHeaders(\n headers: IUploadConfig['headers'],\n): Record<string, string> | ((file: unknown) => Record<string, string>) | undefined {\n if (!headers) { return undefined }\n\n if (typeof headers === 'function') {\n return file => normalizeHeaderValues(headers(file as IUploadResultFile))\n }\n\n return normalizeHeaderValues(headers)\n}\n\nfunction ensureAbortSignalAny() {\n if (typeof AbortSignal === 'undefined') { return }\n\n const abortSignal = AbortSignal as typeof AbortSignal & {\n any?: (signals: AbortSignal[]) => AbortSignal\n }\n\n if (typeof abortSignal.any === 'function') { return }\n\n abortSignal.any = (signals: AbortSignal[]) => {\n const controller = new AbortController()\n\n const onAbort = (event: Event) => {\n signals.forEach(signal => signal.removeEventListener('abort', onAbort))\n const target = event.target as AbortSignal\n const reason = (target as AbortSignal & { reason?: unknown }).reason\n\n controller.abort(reason)\n }\n\n for (const signal of signals) {\n if (signal.aborted) {\n const reason = (signal as AbortSignal & { reason?: unknown }).reason\n\n controller.abort(reason)\n return controller.signal\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n\n return controller.signal\n }\n}\n\nfunction createUppyUploader(config: IUploadConfig): IUploader {\n const {\n server = '',\n fieldName = '',\n maxFileSize = 10 * 1024 * 1024, // 10M\n maxNumberOfFiles = 100, // 最多多少个文件\n meta = {},\n metaWithUrl = false,\n headers = {},\n withCredentials = false,\n timeout = 10 * 1000, // 10s\n onBeforeUpload = files => files,\n onSuccess = (_file, _res) => {\n /* on success */\n },\n onError = (file, err, res?) => {\n console.error(`${file.name} upload error`, err, res)\n },\n onProgress = _progress => {\n /* on progress */\n },\n } = config\n\n if (!server) {\n throw new Error('Cannot get upload server address\\n没有配置上传地址')\n }\n if (!fieldName) {\n throw new Error('Cannot get fieldName\\n没有配置 fieldName')\n }\n\n let url = server\n\n if (metaWithUrl) {\n url = addQueryToUrl(url, meta)\n }\n\n ensureAbortSignalAny()\n const normalizedHeaders = normalizeHeaders(headers)\n\n const uppy = new Uppy({\n onBeforeUpload: files => onBeforeUpload(files) as any,\n restrictions: {\n maxFileSize,\n maxNumberOfFiles,\n },\n meta,\n ...config.uppyConfig,\n }).use(XHRUpload, {\n endpoint: url,\n headers: normalizedHeaders,\n formData: true,\n fieldName,\n bundle: false,\n withCredentials,\n timeout,\n ...config.xhrConfig,\n })\n\n uppy.on('upload-success', (file, response) => {\n const { body = {} } = response ?? {}\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onSuccess(uploadFile, body)\n } catch (err) {\n console.error('wangEditor upload file - onSuccess error', err)\n }\n })\n\n uppy.on('progress', progress => {\n if (progress < 1) { return }\n onProgress(progress)\n })\n\n uppy.on('upload-error', (file, error, response) => {\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onError(uploadFile, error, response)\n } catch (err) {\n console.error('wangEditor upload file - onError error', err)\n }\n })\n\n uppy.on('restriction-failed', (file, error) => {\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onError(uploadFile, error, undefined)\n } catch (err) {\n console.error('wangEditor upload file - onError error', err)\n }\n })\n\n return uppy\n}\n\nexport default createUppyUploader\n","/**\n * @description gen uploader\n * @author wangfupeng\n */\n\nimport type { IDomEditor } from '../editor/interface'\nimport createUppyUploader from './createUppyUploader'\nimport type { IUploadAdapter, IUploadConfig, IUploader } from './interface'\n\ntype IUploadConfigWithAdapter = IUploadConfig & {\n uploadAdapter: IUploadAdapter\n}\ntype IDefaultUploader = IUploader & {\n [key: string]: any\n}\n\nfunction createUploader<T extends IUploadConfig>(\n config: T,\n editor?: IDomEditor,\n): T extends IUploadConfigWithAdapter ? IUploader : IDefaultUploader {\n if (config.uploadAdapter) {\n return config.uploadAdapter({ config, editor }) as T extends IUploadConfigWithAdapter\n ? IUploader\n : IDefaultUploader\n }\n\n return createUppyUploader(config) as T extends IUploadConfigWithAdapter\n ? IUploader\n : IDefaultUploader\n}\n\nexport default createUploader\n"],"names":["addQueryToUrl","url","data","_a","__read","split","initialUrlWithoutHash","hash","urlWithoutHash","queryArr","forEach","val","key","push","concat","queryStr","join","indexOf","getUploadResultFile","file","name","normalizeHeaderValues","headers","Object","keys","reduce","res","String","ensureAbortSignalAny","AbortSignal","abortSignal","any","signals","controller","AbortController","onAbort","event","signal","removeEventListener","reason","target","abort","signals_1","__values","signals_1_1","next","value","aborted","addEventListener","once","createUppyUploader","config","server","_b","fieldName","_c","maxFileSize","_d","maxNumberOfFiles","_e","meta","_f","metaWithUrl","_g","_h","withCredentials","_j","timeout","_k","onBeforeUpload","files","_l","onSuccess","_file","_res","_m","onError","err","console","error","_o","onProgress","_progress","Error","normalizedHeaders","normalizeHeaders","uppy","Uppy","__assign","restrictions","uppyConfig","use","XHRUpload","endpoint","formData","bundle","xhrConfig","on","response","body","uploadFile","progress","undefined","editor","uploadAdapter"],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","names":["forEach","nanoid","genRandomStr","prefix","promiseResolveThen","fn","Promise","resolve","then","addQueryToUrl","url","data","initialUrlWithoutHash","hash","split","urlWithoutHash","queryArr","val","key","push","queryStr","join","indexOf","replaceHtmlSpecialSymbols","str","replace","deReplaceHtmlSpecialSymbols","toString","Object","prototype","call","Uppy","XHRUpload","addQueryToUrl","getUploadResultFile","file","name","normalizeHeaderValues","headers","Object","keys","reduce","res","key","String","normalizeHeaders","undefined","ensureAbortSignalAny","AbortSignal","abortSignal","any","signals","controller","AbortController","onAbort","event","forEach","signal","removeEventListener","target","reason","abort","aborted","addEventListener","once","createUppyUploader","config","server","fieldName","maxFileSize","maxNumberOfFiles","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onSuccess","_file","_res","onError","err","console","error","onProgress","_progress","Error","url","normalizedHeaders","uppy","restrictions","uppyConfig","use","endpoint","formData","bundle","xhrConfig","on","response","body","uploadFile","progress","createUppyUploader","createUploader","config","editor","uploadAdapter","createUploader","createUppyUploader"],"sources":["../src/utils/util.ts","../src/upload/createUppyUploader.ts","../src/upload/createUploader.ts","../src/upload/index.ts"],"sourcesContent":["/**\n * @description 工具函数\n * @author wangfupeng\n */\n\nimport forEach from 'lodash.foreach'\nimport { nanoid } from 'nanoid'\n\ntype PromiseCallback = (value: void) => void | PromiseLike<void>\n\n/**\n * 获取随机数字符串\n * @param prefix 前缀\n * @returns 随机数字符串\n */\nexport function genRandomStr(prefix: string = 'r'): string {\n return `${prefix}-${nanoid()}`\n}\n\nexport function promiseResolveThen(fn: Function) {\n Promise.resolve().then(fn as PromiseCallback)\n}\n\n/**\n * 追加 url query 参数\n * @param url url\n * @param data data\n */\nexport function addQueryToUrl(url: string, data: object): string {\n const [initialUrlWithoutHash, hash] = url.split('#')\n let urlWithoutHash = initialUrlWithoutHash\n\n // 拼接 query string\n const queryArr: string[] = []\n\n forEach(data, (val, key) => {\n queryArr.push(`${key}=${val}`)\n })\n const queryStr = queryArr.join('&')\n\n // 拼接到 url\n if (urlWithoutHash.indexOf('?') > 0) {\n // 已有 query\n urlWithoutHash = `${urlWithoutHash}&${queryStr}`\n } else {\n // 没有 query\n urlWithoutHash = `${urlWithoutHash}?${queryStr}`\n }\n\n // 返回拼接好的 url\n if (hash) {\n return `${urlWithoutHash}#${hash}`\n }\n return urlWithoutHash\n\n}\n\n/**\n * 替换 html 特殊字符,如 > 替换为 &gt;\n * @param str html str\n */\nexport function replaceHtmlSpecialSymbols(str: string) {\n return (\n str\n /**\n * 遇到两个空格时才替换,一个空格不替换\n * 两个英文单词之间有一个空格,就不用替换,否则无法默认换行 issue #4403\n */\n .replace(/ {2}/g, ' &nbsp;')\n\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/®/g, '&reg;')\n .replace(/©/g, '&copy;')\n .replace(/™/g, '&trade;')\n )\n}\n\n/**\n *【反转】替换 html 特殊字符,如 &gt; 替换为 >\n * @param str html str\n */\nexport function deReplaceHtmlSpecialSymbols(str: string) {\n return str\n .replace(/&nbsp;/g, ' ')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&reg;/g, '®')\n .replace(/&copy;/g, '©')\n .replace(/&trade;/g, '™')\n .replace(/&quot;/g, '\"')\n}\n\nexport const toString = (val: unknown): string => Object.prototype.toString.call(val)\n","/**\n * @description create default uppy uploader\n * @author wangfupeng\n */\n\n// @ts-ignore Uppy v5 types are not resolvable under current TS moduleResolution=node\nimport Uppy from '@uppy/core'\n// @ts-ignore Uppy v5 types are not resolvable under current TS moduleResolution=node\nimport XHRUpload from '@uppy/xhr-upload'\n\nimport { addQueryToUrl } from '../utils/util'\nimport type {\n IUploadConfig, IUploader, IUploadHeaders, IUploadResultFile,\n} from './interface'\n\nfunction getUploadResultFile(file?: IUploadResultFile | null): IUploadResultFile {\n if (file) { return file }\n\n return { name: '' }\n}\n\nfunction normalizeHeaderValues(headers: IUploadHeaders): Record<string, string> {\n return Object.keys(headers).reduce<Record<string, string>>((res, key) => {\n res[key] = String(headers[key])\n return res\n }, {})\n}\n\nfunction normalizeHeaders(\n headers: IUploadConfig['headers'],\n): Record<string, string> | ((file: unknown) => Record<string, string>) | undefined {\n if (!headers) { return undefined }\n\n if (typeof headers === 'function') {\n return file => normalizeHeaderValues(headers(file as IUploadResultFile))\n }\n\n return normalizeHeaderValues(headers)\n}\n\nfunction ensureAbortSignalAny() {\n if (typeof AbortSignal === 'undefined') { return }\n\n const abortSignal = AbortSignal as typeof AbortSignal & {\n any?: (signals: AbortSignal[]) => AbortSignal\n }\n\n if (typeof abortSignal.any === 'function') { return }\n\n abortSignal.any = (signals: AbortSignal[]) => {\n const controller = new AbortController()\n\n const onAbort = (event: Event) => {\n signals.forEach(signal => signal.removeEventListener('abort', onAbort))\n const target = event.target as AbortSignal\n const reason = (target as AbortSignal & { reason?: unknown }).reason\n\n controller.abort(reason)\n }\n\n for (const signal of signals) {\n if (signal.aborted) {\n const reason = (signal as AbortSignal & { reason?: unknown }).reason\n\n controller.abort(reason)\n return controller.signal\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n\n return controller.signal\n }\n}\n\nfunction createUppyUploader(config: IUploadConfig): IUploader {\n const {\n server = '',\n fieldName = '',\n maxFileSize = 10 * 1024 * 1024, // 10M\n maxNumberOfFiles = 100, // 最多多少个文件\n meta = {},\n metaWithUrl = false,\n headers = {},\n withCredentials = false,\n timeout = 10 * 1000, // 10s\n onBeforeUpload = files => files,\n onSuccess = (_file, _res) => {\n /* on success */\n },\n onError = (file, err, res?) => {\n console.error(`${file.name} upload error`, err, res)\n },\n onProgress = _progress => {\n /* on progress */\n },\n } = config\n\n if (!server) {\n throw new Error('Cannot get upload server address\\n没有配置上传地址')\n }\n if (!fieldName) {\n throw new Error('Cannot get fieldName\\n没有配置 fieldName')\n }\n\n let url = server\n\n if (metaWithUrl) {\n url = addQueryToUrl(url, meta)\n }\n\n ensureAbortSignalAny()\n const normalizedHeaders = normalizeHeaders(headers)\n\n const uppy = new Uppy({\n onBeforeUpload: files => onBeforeUpload(files) as any,\n restrictions: {\n maxFileSize,\n maxNumberOfFiles,\n },\n meta,\n ...config.uppyConfig,\n }).use(XHRUpload, {\n endpoint: url,\n headers: normalizedHeaders,\n formData: true,\n fieldName,\n bundle: false,\n withCredentials,\n timeout,\n ...config.xhrConfig,\n })\n\n uppy.on('upload-success', (file, response) => {\n const { body = {} } = response ?? {}\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onSuccess(uploadFile, body)\n } catch (err) {\n console.error('wangEditor upload file - onSuccess error', err)\n }\n })\n\n uppy.on('progress', progress => {\n if (progress < 1) { return }\n onProgress(progress)\n })\n\n uppy.on('upload-error', (file, error, response) => {\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onError(uploadFile, error, response)\n } catch (err) {\n console.error('wangEditor upload file - onError error', err)\n }\n })\n\n uppy.on('restriction-failed', (file, error) => {\n const uploadFile = getUploadResultFile(file as IUploadResultFile | undefined)\n\n try {\n onError(uploadFile, error, undefined)\n } catch (err) {\n console.error('wangEditor upload file - onError error', err)\n }\n })\n\n return uppy\n}\n\nexport default createUppyUploader\n","/**\n * @description gen uploader\n * @author wangfupeng\n */\n\nimport type { IDomEditor } from '../editor/interface'\nimport createUppyUploader from './createUppyUploader'\nimport type { IUploadAdapter, IUploadConfig, IUploader } from './interface'\n\ntype IUploadConfigWithAdapter = IUploadConfig & {\n uploadAdapter: IUploadAdapter\n}\ntype IDefaultUploader = IUploader & {\n [key: string]: any\n}\n\nfunction createUploader<T extends IUploadConfig>(\n config: T,\n editor?: IDomEditor,\n): T extends IUploadConfigWithAdapter ? IUploader : IDefaultUploader {\n if (config.uploadAdapter) {\n return config.uploadAdapter({ config, editor }) as T extends IUploadConfigWithAdapter\n ? IUploader\n : IDefaultUploader\n }\n\n return createUppyUploader(config) as T extends IUploadConfigWithAdapter\n ? IUploader\n : IDefaultUploader\n}\n\nexport default createUploader\n","/**\n * @description upload entry\n * @author wangfupeng\n */\n\nimport createUploader from './createUploader'\nimport createUppyUploader from './createUppyUploader'\nimport type {\n IUploadAdapter,\n IUploadAdapterContext,\n IUploadConfig,\n IUploader,\n IUploadFile,\n IUploadResultFile,\n} from './interface'\n\nexport { createUploader, createUppyUploader }\nexport type {\n IUploadAdapter,\n IUploadAdapterContext,\n IUploadConfig,\n IUploader,\n IUploadFile,\n IUploadResultFile,\n}\n\n// TODO upload 能力,写到文档中,二次开发使用\n"],"mappings":"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"}
package/dist/upload.mjs CHANGED
@@ -1,2 +1,4 @@
1
- import r from"@uppy/core";import o from"@uppy/xhr-upload";import n from"lodash.foreach";import"nanoid";var e=function(){return e=Object.assign||function(r){for(var o,n=1,e=arguments.length;n<e;n++)for(var t in o=arguments[n])Object.prototype.hasOwnProperty.call(o,t)&&(r[t]=o[t]);return r},e.apply(this,arguments)};function t(r,o){var e=function(r,o){var n="function"==typeof Symbol&&r[Symbol.iterator];if(!n)return r;var e,t,i=n.call(r),a=[];try{for(;(void 0===o||o-- >0)&&!(e=i.next()).done;)a.push(e.value)}catch(r){t={error:r}}finally{try{e&&!e.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return a}(r.split("#"),2),t=e[0],i=e[1],a=t,c=[];n(o,function(r,o){c.push("".concat(o,"=").concat(r))});var u=c.join("&");return a=a.indexOf("?")>0?"".concat(a,"&").concat(u):"".concat(a,"?").concat(u),i?"".concat(a,"#").concat(i):a}function i(r){return r||{name:""}}function a(r){return Object.keys(r).reduce(function(o,n){return o[n]=String(r[n]),o},{})}function c(){if("undefined"!=typeof AbortSignal){var r=AbortSignal;"function"!=typeof r.any&&(r.any=function(r){var o,n,e=new AbortController,t=function(o){r.forEach(function(r){return r.removeEventListener("abort",t)});var n=o.target.reason;e.abort(n)};try{for(var i=function(r){var o="function"==typeof Symbol&&Symbol.iterator,n=o&&r[o],e=0;if(n)return n.call(r);if(r&&"number"==typeof r.length)return{next:function(){return r&&e>=r.length&&(r=void 0),{value:r&&r[e++],done:!r}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")}(r),a=i.next();!a.done;a=i.next()){var c=a.value;if(c.aborted){var u=c.reason;return e.abort(u),e.signal}c.addEventListener("abort",t,{once:!0})}}catch(r){o={error:r}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return e.signal})}}function u(n){var u=n.server,f=void 0===u?"":u,l=n.fieldName,d=void 0===l?"":l,s=n.maxFileSize,p=void 0===s?10485760:s,v=n.maxNumberOfFiles,y=void 0===v?100:v,m=n.meta,h=void 0===m?{}:m,b=n.metaWithUrl,g=void 0!==b&&b,w=n.headers,E=void 0===w?{}:w,S=n.withCredentials,x=void 0!==S&&S,O=n.timeout,C=void 0===O?1e4:O,N=n.onBeforeUpload,j=void 0===N?function(r){return r}:N,A=n.onSuccess,F=void 0===A?function(r,o){}:A,U=n.onError,z=void 0===U?function(r,o,n){console.error("".concat(r.name," upload error"),o,n)}:U,B=n.onProgress,L=void 0===B?function(r){}:B;if(!f)throw new Error("Cannot get upload server address\n没有配置上传地址");if(!d)throw new Error("Cannot get fieldName\n没有配置 fieldName");var P=f;g&&(P=t(P,h)),c();var k=function(r){if(r)return"function"==typeof r?function(o){return a(r(o))}:a(r)}(E),D=new r(e({onBeforeUpload:function(r){return j(r)},restrictions:{maxFileSize:p,maxNumberOfFiles:y},meta:h},n.uppyConfig)).use(o,e({endpoint:P,headers:k,formData:!0,fieldName:d,bundle:!1,withCredentials:x,timeout:C},n.xhrConfig));return D.on("upload-success",function(r,o){var n=(null!=o?o:{}).body,e=void 0===n?{}:n,t=i(r);try{F(t,e)}catch(r){console.error("wangEditor upload file - onSuccess error",r)}}),D.on("progress",function(r){r<1||L(r)}),D.on("upload-error",function(r,o,n){var e=i(r);try{z(e,o,n)}catch(r){console.error("wangEditor upload file - onError error",r)}}),D.on("restriction-failed",function(r,o){var n=i(r);try{z(n,o,void 0)}catch(r){console.error("wangEditor upload file - onError error",r)}}),D}function f(r,o){return r.uploadAdapter?r.uploadAdapter({config:r,editor:o}):u(r)}"function"==typeof SuppressedError&&SuppressedError;export{f as createUploader,u as createUppyUploader};
2
- //# sourceMappingURL=upload.mjs.map
1
+ import e from"@uppy/core";import t from"@uppy/xhr-upload";import n from"lodash.foreach";import"nanoid";function r(e,t){let[r,i]=e.split(`#`),a=r,o=[];n(t,(e,t)=>{o.push(`${t}=${e}`)});let s=o.join(`&`);return a=a.indexOf(`?`)>0?`${a}&${s}`:`${a}?${s}`,i?`${a}#${i}`:a}function i(e){"@babel/helpers - typeof";return i=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},i(e)}function a(e,t){if(i(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(i(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function o(e){var t=a(e,`string`);return i(t)==`symbol`?t:t+``}function s(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?c(Object(n),!0).forEach(function(t){s(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function u(e){return e||{name:``}}function d(e){return Object.keys(e).reduce((t,n)=>(t[n]=String(e[n]),t),{})}function f(e){if(e)return typeof e==`function`?t=>d(e(t)):d(e)}function p(){if(typeof AbortSignal>`u`)return;let e=AbortSignal;typeof e.any!=`function`&&(e.any=e=>{let t=new AbortController,n=r=>{e.forEach(e=>e.removeEventListener(`abort`,n));let i=r.target.reason;t.abort(i)};for(let r of e){if(r.aborted){let e=r.reason;return t.abort(e),t.signal}r.addEventListener(`abort`,n,{once:!0})}return t.signal})}function m(n){let{server:i=``,fieldName:a=``,maxFileSize:o=10*1024*1024,maxNumberOfFiles:s=100,meta:c={},metaWithUrl:d=!1,headers:m={},withCredentials:h=!1,timeout:g=10*1e3,onBeforeUpload:_=e=>e,onSuccess:v=(e,t)=>{},onError:y=(e,t,n)=>{console.error(`${e.name} upload error`,t,n)},onProgress:b=e=>{}}=n;if(!i)throw Error(`Cannot get upload server address
2
+ 没有配置上传地址`);if(!a)throw Error(`Cannot get fieldName
3
+ 没有配置 fieldName`);let x=i;d&&(x=r(x,c)),p();let S=f(m),C=new e(l({onBeforeUpload:e=>_(e),restrictions:{maxFileSize:o,maxNumberOfFiles:s},meta:c},n.uppyConfig)).use(t,l({endpoint:x,headers:S,formData:!0,fieldName:a,bundle:!1,withCredentials:h,timeout:g},n.xhrConfig));return C.on(`upload-success`,(e,t)=>{let{body:n={}}=t==null?{}:t,r=u(e);try{v(r,n)}catch(e){console.error(`wangEditor upload file - onSuccess error`,e)}}),C.on(`progress`,e=>{e<1||b(e)}),C.on(`upload-error`,(e,t,n)=>{let r=u(e);try{y(r,t,n)}catch(e){console.error(`wangEditor upload file - onError error`,e)}}),C.on(`restriction-failed`,(e,t)=>{let n=u(e);try{y(n,t,void 0)}catch(e){console.error(`wangEditor upload file - onError error`,e)}}),C}var h=m;function g(e,t){return e.uploadAdapter?e.uploadAdapter({config:e,editor:t}):h(e)}var _=g;export{_ as createUploader,h as createUppyUploader};
4
+ //# sourceMappingURL=upload.mjs.map