@idraw/renderer 0.3.0 → 0.4.0-alpha.2

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 (73) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/draw/base.d.ts +14 -0
  3. package/dist/esm/draw/base.js +245 -0
  4. package/dist/esm/draw/circle.d.ts +2 -0
  5. package/dist/esm/draw/circle.js +28 -0
  6. package/dist/esm/draw/elements.d.ts +2 -0
  7. package/dist/esm/draw/elements.js +16 -0
  8. package/dist/esm/draw/group.d.ts +3 -0
  9. package/dist/esm/draw/group.js +110 -0
  10. package/dist/esm/draw/html.d.ts +2 -0
  11. package/dist/esm/draw/html.js +14 -0
  12. package/dist/esm/draw/image.d.ts +2 -0
  13. package/dist/esm/draw/image.js +14 -0
  14. package/dist/esm/draw/index.d.ts +7 -0
  15. package/dist/esm/draw/index.js +7 -0
  16. package/dist/esm/draw/path.d.ts +2 -0
  17. package/dist/esm/draw/path.js +49 -0
  18. package/dist/esm/draw/rect.d.ts +2 -0
  19. package/dist/esm/draw/rect.js +23 -0
  20. package/dist/esm/draw/svg.d.ts +2 -0
  21. package/dist/esm/draw/svg.js +14 -0
  22. package/dist/esm/draw/text.d.ts +2 -0
  23. package/dist/esm/draw/text.js +113 -0
  24. package/dist/esm/index.d.ts +9 -24
  25. package/dist/esm/index.js +46 -124
  26. package/dist/esm/loader.d.ts +17 -0
  27. package/dist/esm/loader.js +151 -0
  28. package/dist/index.global.js +767 -856
  29. package/dist/index.global.min.js +1 -1
  30. package/package.json +5 -5
  31. package/LICENSE +0 -21
  32. package/dist/esm/constant/element.d.ts +0 -2
  33. package/dist/esm/constant/element.js +0 -10
  34. package/dist/esm/constant/static.d.ts +0 -11
  35. package/dist/esm/constant/static.js +0 -13
  36. package/dist/esm/lib/calculate.d.ts +0 -5
  37. package/dist/esm/lib/calculate.js +0 -64
  38. package/dist/esm/lib/diff.d.ts +0 -6
  39. package/dist/esm/lib/diff.js +0 -82
  40. package/dist/esm/lib/draw/base.d.ts +0 -5
  41. package/dist/esm/lib/draw/base.js +0 -89
  42. package/dist/esm/lib/draw/circle.d.ts +0 -2
  43. package/dist/esm/lib/draw/circle.js +0 -28
  44. package/dist/esm/lib/draw/html.d.ts +0 -3
  45. package/dist/esm/lib/draw/html.js +0 -9
  46. package/dist/esm/lib/draw/image.d.ts +0 -3
  47. package/dist/esm/lib/draw/image.js +0 -9
  48. package/dist/esm/lib/draw/index.d.ts +0 -3
  49. package/dist/esm/lib/draw/index.js +0 -55
  50. package/dist/esm/lib/draw/rect.d.ts +0 -2
  51. package/dist/esm/lib/draw/rect.js +0 -4
  52. package/dist/esm/lib/draw/svg.d.ts +0 -3
  53. package/dist/esm/lib/draw/svg.js +0 -9
  54. package/dist/esm/lib/draw/text.d.ts +0 -3
  55. package/dist/esm/lib/draw/text.js +0 -128
  56. package/dist/esm/lib/index.d.ts +0 -6
  57. package/dist/esm/lib/index.js +0 -6
  58. package/dist/esm/lib/loader-event.d.ts +0 -33
  59. package/dist/esm/lib/loader-event.js +0 -50
  60. package/dist/esm/lib/loader.d.ts +0 -25
  61. package/dist/esm/lib/loader.js +0 -246
  62. package/dist/esm/lib/parse.d.ts +0 -2
  63. package/dist/esm/lib/parse.js +0 -32
  64. package/dist/esm/lib/renderer-event.d.ts +0 -32
  65. package/dist/esm/lib/renderer-event.js +0 -50
  66. package/dist/esm/lib/temp.d.ts +0 -22
  67. package/dist/esm/lib/temp.js +0 -29
  68. package/dist/esm/lib/transform.d.ts +0 -4
  69. package/dist/esm/lib/transform.js +0 -20
  70. package/dist/esm/lib/value.d.ts +0 -2
  71. package/dist/esm/lib/value.js +0 -7
  72. package/dist/esm/util/filter.d.ts +0 -1
  73. package/dist/esm/util/filter.js +0 -3
@@ -0,0 +1,113 @@
1
+ import { rotateElement } from '@idraw/util';
2
+ import { is, isColorStr } from '@idraw/util';
3
+ import { drawBox } from './base';
4
+ export function drawText(ctx, elem, opts) {
5
+ const { calculator, viewScaleInfo, viewSizeInfo } = opts;
6
+ const { x, y, w, h, angle } = calculator.elementSize(elem, viewScaleInfo, viewSizeInfo);
7
+ const viewElem = Object.assign(Object.assign({}, elem), { x, y, w, h, angle });
8
+ rotateElement(ctx, { x, y, w, h, angle }, () => {
9
+ drawBox(ctx, viewElem, {
10
+ originElem: elem,
11
+ calcElemSize: { x, y, w, h, angle },
12
+ viewScaleInfo,
13
+ viewSizeInfo,
14
+ renderContent: () => {
15
+ const detail = Object.assign({
16
+ fontSize: 12,
17
+ fontFamily: 'sans-serif',
18
+ textAlign: 'center'
19
+ }, elem.detail);
20
+ const fontSize = detail.fontSize * viewScaleInfo.scale;
21
+ const lineHeight = detail.lineHeight ? detail.lineHeight * viewScaleInfo.scale : fontSize;
22
+ ctx.fillStyle = elem.detail.color;
23
+ ctx.textBaseline = 'top';
24
+ ctx.$setFont({
25
+ fontWeight: detail.fontWeight,
26
+ fontSize: fontSize,
27
+ fontFamily: detail.fontFamily
28
+ });
29
+ const detailText = detail.text.replace(/\r\n/gi, '\n');
30
+ const fontHeight = lineHeight;
31
+ const detailTextList = detailText.split('\n');
32
+ const lines = [];
33
+ let lineNum = 0;
34
+ detailTextList.forEach((tempText, idx) => {
35
+ let lineText = '';
36
+ if (tempText.length > 0) {
37
+ for (let i = 0; i < tempText.length; i++) {
38
+ if (ctx.measureText(lineText + (tempText[i] || '')).width < ctx.$doPixelRatio(w)) {
39
+ lineText += tempText[i] || '';
40
+ }
41
+ else {
42
+ lines.push({
43
+ text: lineText,
44
+ width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
45
+ });
46
+ lineText = tempText[i] || '';
47
+ lineNum++;
48
+ }
49
+ if ((lineNum + 1) * fontHeight > h) {
50
+ break;
51
+ }
52
+ if (tempText.length - 1 === i) {
53
+ if ((lineNum + 1) * fontHeight < h) {
54
+ lines.push({
55
+ text: lineText,
56
+ width: ctx.$undoPixelRatio(ctx.measureText(lineText).width)
57
+ });
58
+ if (idx < detailTextList.length - 1) {
59
+ lineNum++;
60
+ }
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ else {
67
+ lines.push({
68
+ text: '',
69
+ width: 0
70
+ });
71
+ }
72
+ });
73
+ let startY = 0;
74
+ if (lines.length * fontHeight < h) {
75
+ if (elem.detail.verticalAlign === 'top') {
76
+ startY = 0;
77
+ }
78
+ else if (elem.detail.verticalAlign === 'bottom') {
79
+ startY += h - lines.length * fontHeight;
80
+ }
81
+ else {
82
+ startY += (h - lines.length * fontHeight) / 2;
83
+ }
84
+ }
85
+ {
86
+ const _y = y + startY;
87
+ if (detail.textShadowColor !== undefined && isColorStr(detail.textShadowColor)) {
88
+ ctx.shadowColor = detail.textShadowColor;
89
+ }
90
+ if (detail.textShadowOffsetX !== undefined && is.number(detail.textShadowOffsetX)) {
91
+ ctx.shadowOffsetX = detail.textShadowOffsetX;
92
+ }
93
+ if (detail.textShadowOffsetY !== undefined && is.number(detail.textShadowOffsetY)) {
94
+ ctx.shadowOffsetY = detail.textShadowOffsetY;
95
+ }
96
+ if (detail.textShadowBlur !== undefined && is.number(detail.textShadowBlur)) {
97
+ ctx.shadowBlur = detail.textShadowBlur;
98
+ }
99
+ lines.forEach((line, i) => {
100
+ let _x = x;
101
+ if (detail.textAlign === 'center') {
102
+ _x = x + (w - line.width) / 2;
103
+ }
104
+ else if (detail.textAlign === 'right') {
105
+ _x = x + (w - line.width);
106
+ }
107
+ ctx.fillText(line.text, _x, _y + fontHeight * i);
108
+ });
109
+ }
110
+ }
111
+ });
112
+ });
113
+ }
@@ -1,26 +1,11 @@
1
- import { IDrawData, IDrawContext } from '@idraw/types';
2
- import { RendererEvent } from './lib/renderer-event';
3
- type Options = {
4
- width: number;
5
- height: number;
6
- contextWidth?: number;
7
- contextHeight?: number;
8
- devicePixelRatio: number;
9
- };
10
- export default class Renderer extends RendererEvent {
11
- private _queue;
12
- private _ctx;
13
- private _status;
1
+ import { EventEmitter } from '@idraw/util';
2
+ import type { Data, BoardRenderer, RendererOptions, RendererEventMap, RendererDrawOptions } from '@idraw/types';
3
+ export declare class Renderer extends EventEmitter<RendererEventMap> implements BoardRenderer {
4
+ private _opts;
14
5
  private _loader;
15
- private _opts?;
16
- constructor(opts?: Options);
17
- render(target: HTMLCanvasElement | IDrawContext, originData: IDrawData, opts?: {
18
- changeResourceUUIDs?: string[];
19
- }): void;
20
- getContext(): IDrawContext | null;
21
- thaw(): void;
22
- private _freeze;
23
- private _drawFrame;
24
- private _retainQueueOneItem;
6
+ constructor(opts: RendererOptions);
7
+ private _init;
8
+ updateOptions(opts: RendererOptions): void;
9
+ drawData(data: Data, opts: RendererDrawOptions): void;
10
+ scale(num: number): void;
25
11
  }
26
- export {};
package/dist/esm/index.js CHANGED
@@ -1,137 +1,59 @@
1
- import { createUUID, deepClone, Context } from '@idraw/util';
2
- import { drawContext } from './lib/draw';
3
- import Loader from './lib/loader';
4
- import { RendererEvent } from './lib/renderer-event';
5
- const { requestAnimationFrame } = window;
6
- var DrawStatus;
7
- (function (DrawStatus) {
8
- DrawStatus["NULL"] = "null";
9
- DrawStatus["FREE"] = "free";
10
- DrawStatus["DRAWING"] = "drawing";
11
- DrawStatus["FREEZE"] = "freeze";
12
- })(DrawStatus || (DrawStatus = {}));
13
- export default class Renderer extends RendererEvent {
1
+ import { EventEmitter } from '@idraw/util';
2
+ import { drawElementList } from './draw/index';
3
+ import { Loader } from './loader';
4
+ export class Renderer extends EventEmitter {
14
5
  constructor(opts) {
15
6
  super();
16
- this._queue = [];
17
- this._ctx = null;
18
- this._status = DrawStatus.NULL;
7
+ this._loader = new Loader();
19
8
  this._opts = opts;
20
- this._loader = new Loader({
21
- maxParallelNum: 6
22
- });
23
- this._loader.on('load', (res) => {
24
- this._drawFrame();
25
- this.trigger('load', { element: res.element });
26
- });
27
- this._loader.on('error', (res) => {
28
- this.trigger('error', { element: res.element, error: res.error });
9
+ this._init();
10
+ }
11
+ _init() {
12
+ const { _loader: loader } = this;
13
+ loader.on('load', (e) => {
14
+ this.trigger('load', e);
29
15
  });
30
- this._loader.on('complete', () => {
31
- this.trigger('loadComplete', { t: Date.now() });
16
+ loader.on('error', () => {
32
17
  });
33
18
  }
34
- render(target, originData, opts) {
35
- const { changeResourceUUIDs = [] } = opts || {};
36
- this._status = DrawStatus.FREE;
37
- const data = deepClone(originData);
38
- if (Array.isArray(data.elements)) {
39
- data.elements.forEach((elem) => {
40
- if (!(typeof elem.uuid === 'string' && elem.uuid)) {
41
- elem.uuid = createUUID();
42
- }
43
- });
44
- }
45
- if (!this._ctx) {
46
- if (this._opts &&
47
- Object.prototype.toString.call(target) === '[object HTMLCanvasElement]') {
48
- const { width, height, contextWidth, contextHeight, devicePixelRatio } = this._opts;
49
- const canvas = target;
50
- canvas.width = width * devicePixelRatio;
51
- canvas.height = height * devicePixelRatio;
52
- const ctx2d = canvas.getContext('2d');
53
- this._ctx = new Context(ctx2d, {
19
+ updateOptions(opts) {
20
+ this._opts = opts;
21
+ }
22
+ drawData(data, opts) {
23
+ const { _loader: loader } = this;
24
+ const { calculator } = this._opts;
25
+ const { viewContext } = this._opts.viewContent;
26
+ viewContext.clearRect(0, 0, viewContext.canvas.width, viewContext.canvas.height);
27
+ const parentElementSize = {
28
+ x: 0,
29
+ y: 0,
30
+ w: opts.viewSizeInfo.width,
31
+ h: opts.viewSizeInfo.height
32
+ };
33
+ drawElementList(viewContext, data, Object.assign({ loader,
34
+ calculator,
35
+ parentElementSize, elementAssets: data.assets }, opts));
36
+ }
37
+ scale(num) {
38
+ const { sharer } = this._opts;
39
+ const { data, offsetTop, offsetBottom, offsetLeft, offsetRight, width, height, contextHeight, contextWidth, devicePixelRatio } = sharer.getActiveStoreSnapshot();
40
+ if (data) {
41
+ this.drawData(data, {
42
+ viewScaleInfo: {
43
+ scale: num,
44
+ offsetTop,
45
+ offsetBottom,
46
+ offsetLeft,
47
+ offsetRight
48
+ },
49
+ viewSizeInfo: {
54
50
  width,
55
51
  height,
56
- contextWidth: contextWidth || width,
57
- contextHeight: contextHeight || height,
52
+ contextHeight,
53
+ contextWidth,
58
54
  devicePixelRatio
59
- });
60
- }
61
- else if (target) {
62
- this._ctx = target;
63
- }
64
- }
65
- if ([DrawStatus.FREEZE].includes(this._status)) {
66
- return;
67
- }
68
- const _data = deepClone({ data });
69
- this._queue.push(_data);
70
- this._drawFrame();
71
- this._loader.load(data, changeResourceUUIDs || []);
72
- }
73
- getContext() {
74
- return this._ctx;
75
- }
76
- thaw() {
77
- this._status = DrawStatus.FREE;
78
- }
79
- _freeze() {
80
- this._status = DrawStatus.FREEZE;
81
- }
82
- _drawFrame() {
83
- if (this._status === DrawStatus.FREEZE) {
84
- return;
85
- }
86
- requestAnimationFrame(() => {
87
- if (this._status === DrawStatus.FREEZE) {
88
- return;
89
- }
90
- const ctx = this._ctx;
91
- let item = this._queue[0];
92
- let isLastFrame = false;
93
- if (this._queue.length > 1) {
94
- item = this._queue.shift();
95
- }
96
- else {
97
- isLastFrame = true;
98
- }
99
- if (this._loader.isComplete() !== true) {
100
- this._drawFrame();
101
- if (item && ctx) {
102
- drawContext(ctx, item.data, this._loader);
103
- }
104
- }
105
- else if (item && ctx) {
106
- drawContext(ctx, item.data, this._loader);
107
- this._retainQueueOneItem();
108
- if (!isLastFrame) {
109
- this._drawFrame();
110
55
  }
111
- else {
112
- this._status = DrawStatus.FREE;
113
- }
114
- }
115
- else {
116
- this._status = DrawStatus.FREE;
117
- }
118
- this.trigger('drawFrame', { t: Date.now() });
119
- if (this._loader.isComplete() === true &&
120
- this._queue.length === 1 &&
121
- this._status === DrawStatus.FREE) {
122
- if (ctx && this._queue[0] && this._queue[0].data) {
123
- drawContext(ctx, this._queue[0].data, this._loader);
124
- }
125
- this.trigger('drawFrameComplete', { t: Date.now() });
126
- this._freeze();
127
- }
128
- });
129
- }
130
- _retainQueueOneItem() {
131
- if (this._queue.length <= 1) {
132
- return;
56
+ });
133
57
  }
134
- const lastOne = deepClone(this._queue[this._queue.length - 1]);
135
- this._queue = [lastOne];
136
58
  }
137
59
  }
@@ -0,0 +1,17 @@
1
+ import type { RendererLoader, LoaderEventMap, LoadContent, LoadElementType, Element, ElementAssets } from '@idraw/types';
2
+ import { EventEmitter } from '@idraw/util';
3
+ export declare class Loader extends EventEmitter<LoaderEventMap> implements RendererLoader {
4
+ private _loadFuncMap;
5
+ private _currentLoadItemMap;
6
+ private _storageLoadItemMap;
7
+ constructor();
8
+ private _registerLoadFunc;
9
+ private _getLoadElementSource;
10
+ private _createLoadItem;
11
+ private _emitLoad;
12
+ private _emitError;
13
+ private _loadResource;
14
+ private _isExistingErrorStorage;
15
+ load(element: Element<LoadElementType>, assets: ElementAssets): void;
16
+ getContent(uuid: string): LoadContent | null;
17
+ }
@@ -0,0 +1,151 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { loadImage, loadHTML, loadSVG, EventEmitter, deepClone } from '@idraw/util';
11
+ const supportElementTypes = ['image', 'svg', 'html'];
12
+ export class Loader extends EventEmitter {
13
+ constructor() {
14
+ super();
15
+ this._loadFuncMap = {};
16
+ this._currentLoadItemMap = {};
17
+ this._storageLoadItemMap = {};
18
+ this._registerLoadFunc('image', (elem, assets) => __awaiter(this, void 0, void 0, function* () {
19
+ var _a;
20
+ const src = ((_a = assets[elem.detail.src]) === null || _a === void 0 ? void 0 : _a.value) || elem.detail.src;
21
+ const content = yield loadImage(src);
22
+ return {
23
+ uuid: elem.uuid,
24
+ lastModified: Date.now(),
25
+ content
26
+ };
27
+ }));
28
+ this._registerLoadFunc('html', (elem, assets) => __awaiter(this, void 0, void 0, function* () {
29
+ var _b;
30
+ const html = ((_b = assets[elem.detail.html]) === null || _b === void 0 ? void 0 : _b.value) || elem.detail.html;
31
+ const content = yield loadHTML(html, {
32
+ width: elem.detail.width || elem.w,
33
+ height: elem.detail.height || elem.h
34
+ });
35
+ return {
36
+ uuid: elem.uuid,
37
+ lastModified: Date.now(),
38
+ content
39
+ };
40
+ }));
41
+ this._registerLoadFunc('svg', (elem, assets) => __awaiter(this, void 0, void 0, function* () {
42
+ var _c;
43
+ const svg = ((_c = assets[elem.detail.svg]) === null || _c === void 0 ? void 0 : _c.value) || elem.detail.svg;
44
+ const content = yield loadSVG(svg);
45
+ return {
46
+ uuid: elem.uuid,
47
+ lastModified: Date.now(),
48
+ content
49
+ };
50
+ }));
51
+ }
52
+ _registerLoadFunc(type, func) {
53
+ this._loadFuncMap[type] = func;
54
+ }
55
+ _getLoadElementSource(element) {
56
+ var _a, _b, _c;
57
+ let source = null;
58
+ if (element.type === 'image') {
59
+ source = ((_a = element === null || element === void 0 ? void 0 : element.detail) === null || _a === void 0 ? void 0 : _a.src) || null;
60
+ }
61
+ else if (element.type === 'svg') {
62
+ source = ((_b = element === null || element === void 0 ? void 0 : element.detail) === null || _b === void 0 ? void 0 : _b.svg) || null;
63
+ }
64
+ else if (element.type === 'html') {
65
+ source = ((_c = element === null || element === void 0 ? void 0 : element.detail) === null || _c === void 0 ? void 0 : _c.html) || null;
66
+ }
67
+ return source;
68
+ }
69
+ _createLoadItem(element) {
70
+ return {
71
+ element,
72
+ status: 'null',
73
+ content: null,
74
+ error: null,
75
+ startTime: -1,
76
+ endTime: -1,
77
+ source: this._getLoadElementSource(element)
78
+ };
79
+ }
80
+ _emitLoad(item) {
81
+ const uuid = item.element.uuid;
82
+ const storageItem = this._storageLoadItemMap[uuid];
83
+ if (storageItem) {
84
+ if (storageItem.startTime < item.startTime) {
85
+ this._storageLoadItemMap[uuid] = item;
86
+ this.trigger('load', Object.assign(Object.assign({}, item), { countTime: item.endTime - item.startTime }));
87
+ }
88
+ }
89
+ else {
90
+ this._storageLoadItemMap[uuid] = item;
91
+ this.trigger('load', Object.assign(Object.assign({}, item), { countTime: item.endTime - item.startTime }));
92
+ }
93
+ }
94
+ _emitError(item) {
95
+ const uuid = item.element.uuid;
96
+ const storageItem = this._storageLoadItemMap[uuid];
97
+ if (storageItem) {
98
+ if (storageItem.startTime < item.startTime) {
99
+ this._storageLoadItemMap[uuid] = item;
100
+ this.trigger('error', Object.assign(Object.assign({}, item), { countTime: item.endTime - item.startTime }));
101
+ }
102
+ }
103
+ else {
104
+ this._storageLoadItemMap[uuid] = item;
105
+ this.trigger('error', Object.assign(Object.assign({}, item), { countTime: item.endTime - item.startTime }));
106
+ }
107
+ }
108
+ _loadResource(element, assets) {
109
+ const item = this._createLoadItem(element);
110
+ this._currentLoadItemMap[element.uuid] = item;
111
+ const loadFunc = this._loadFuncMap[element.type];
112
+ if (typeof loadFunc === 'function') {
113
+ item.startTime = Date.now();
114
+ loadFunc(element, assets)
115
+ .then((result) => {
116
+ item.content = result.content;
117
+ item.endTime = Date.now();
118
+ item.status = 'load';
119
+ this._emitLoad(item);
120
+ })
121
+ .catch((err) => {
122
+ console.warn(`Load element source "${item.source}" fail`, err, element);
123
+ item.endTime = Date.now();
124
+ item.status = 'error';
125
+ item.error = err;
126
+ this._emitError(item);
127
+ });
128
+ }
129
+ }
130
+ _isExistingErrorStorage(element) {
131
+ var _a;
132
+ const existItem = (_a = this._currentLoadItemMap) === null || _a === void 0 ? void 0 : _a[element === null || element === void 0 ? void 0 : element.uuid];
133
+ if (existItem && existItem.status === 'error' && existItem.source && existItem.source === this._getLoadElementSource(element)) {
134
+ return true;
135
+ }
136
+ return false;
137
+ }
138
+ load(element, assets) {
139
+ if (this._isExistingErrorStorage(element)) {
140
+ return;
141
+ }
142
+ if (supportElementTypes.includes(element.type)) {
143
+ const elem = deepClone(element);
144
+ this._loadResource(elem, assets);
145
+ }
146
+ }
147
+ getContent(uuid) {
148
+ var _a, _b;
149
+ return ((_b = (_a = this._storageLoadItemMap) === null || _a === void 0 ? void 0 : _a[uuid]) === null || _b === void 0 ? void 0 : _b.content) || null;
150
+ }
151
+ }