deeptwins-engine-3d 0.1.63 → 0.1.64

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.
@@ -0,0 +1,25 @@
1
+ interface DecodedTile {
2
+ version: number;
3
+ z: number;
4
+ x: number;
5
+ y: number;
6
+ features: unknown[];
7
+ }
8
+ interface DecodeWorkerClientOptions {
9
+ workerUrl?: string;
10
+ }
11
+ declare class MvtVectorWorkerClient {
12
+ private _worker;
13
+ private _requestId;
14
+ private _pendingTasks;
15
+ constructor(options?: DecodeWorkerClientOptions);
16
+ decode(buffer: ArrayBuffer): Promise<DecodedTile>;
17
+ destroy(): void;
18
+ private _handleMessage;
19
+ private _handleError;
20
+ private _shutdown;
21
+ private _failAllPending;
22
+ private _toError;
23
+ }
24
+ export type { DecodedTile };
25
+ export default MvtVectorWorkerClient;
@@ -0,0 +1,126 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
4
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
+ import { getDeepTwinsFile } from "../tool/utils";
9
+ var DEFAULT_MVT_VECTOR_WORKER_FILE = 'Workers/MvtVector.worker.js';
10
+ var DEFAULT_MVT_VECTOR_WORKER_NAME = 'MvtVector.worker';
11
+ // 创建解码 Worker。
12
+ function createDecodeWorker(options) {
13
+ var workerUrl = options.workerUrl || getDeepTwinsFile(DEFAULT_MVT_VECTOR_WORKER_FILE);
14
+ return new Worker(workerUrl, {
15
+ type: 'module',
16
+ name: DEFAULT_MVT_VECTOR_WORKER_NAME
17
+ });
18
+ }
19
+ var MvtVectorWorkerClient = /*#__PURE__*/function () {
20
+ function MvtVectorWorkerClient() {
21
+ var _this = this;
22
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
23
+ _classCallCheck(this, MvtVectorWorkerClient);
24
+ _defineProperty(this, "_worker", void 0);
25
+ _defineProperty(this, "_requestId", void 0);
26
+ _defineProperty(this, "_pendingTasks", void 0);
27
+ _defineProperty(this, "_handleMessage", function (event) {
28
+ var response = event.data;
29
+ var task = _this._pendingTasks.get(response.id);
30
+ if (!task) {
31
+ return;
32
+ }
33
+ _this._pendingTasks.delete(response.id);
34
+ if ('error' in response) {
35
+ task.reject(new Error(response.error));
36
+ return;
37
+ }
38
+ task.resolve(response.raw);
39
+ });
40
+ _defineProperty(this, "_handleError", function (event) {
41
+ var _event$error;
42
+ _this._shutdown(_this._toError((_event$error = event.error) !== null && _event$error !== void 0 ? _event$error : event.message, 'MVT 解码 Worker 运行失败'));
43
+ });
44
+ if (typeof Worker !== 'function') {
45
+ throw new Error('当前环境不支持 Worker');
46
+ }
47
+ this._worker = createDecodeWorker(options);
48
+ this._requestId = 0;
49
+ this._pendingTasks = new Map();
50
+ this._worker.addEventListener('message', this._handleMessage);
51
+ this._worker.addEventListener('error', this._handleError);
52
+ }
53
+
54
+ // 发送单个解码任务,结果通过结构化克隆回传主线程。
55
+ _createClass(MvtVectorWorkerClient, [{
56
+ key: "decode",
57
+ value: function decode(buffer) {
58
+ var _this2 = this;
59
+ var worker = this._worker;
60
+ if (!worker) {
61
+ return Promise.reject(new Error('MVT 解码 Worker 已销毁'));
62
+ }
63
+ var id = ++this._requestId;
64
+ return new Promise(function (resolve, reject) {
65
+ _this2._pendingTasks.set(id, {
66
+ resolve: resolve,
67
+ reject: reject
68
+ });
69
+ try {
70
+ worker.postMessage({
71
+ id: id,
72
+ buffer: buffer
73
+ }, [buffer]);
74
+ } catch (error) {
75
+ _this2._pendingTasks.delete(id);
76
+ reject(_this2._toError(error, '发送 MVT 解码任务失败'));
77
+ }
78
+ });
79
+ }
80
+
81
+ // 销毁 Worker,并让所有挂起任务立即失败。
82
+ }, {
83
+ key: "destroy",
84
+ value: function destroy() {
85
+ this._shutdown(new Error('MVT 解码 Worker 已销毁'));
86
+ }
87
+ }, {
88
+ key: "_shutdown",
89
+ value: function _shutdown(reason) {
90
+ if (!this._worker) {
91
+ return;
92
+ }
93
+ this._worker.removeEventListener('message', this._handleMessage);
94
+ this._worker.removeEventListener('error', this._handleError);
95
+ this._worker.terminate();
96
+ this._worker = null;
97
+ this._failAllPending(reason);
98
+ }
99
+ }, {
100
+ key: "_failAllPending",
101
+ value: function _failAllPending(reason) {
102
+ var pendingTasks = [];
103
+ this._pendingTasks.forEach(function (task) {
104
+ pendingTasks.push(task);
105
+ });
106
+ this._pendingTasks.clear();
107
+ for (var _i = 0, _pendingTasks = pendingTasks; _i < _pendingTasks.length; _i++) {
108
+ var task = _pendingTasks[_i];
109
+ task.reject(reason);
110
+ }
111
+ }
112
+ }, {
113
+ key: "_toError",
114
+ value: function _toError(error, fallbackMessage) {
115
+ if (error instanceof Error) {
116
+ return error;
117
+ }
118
+ if (typeof error === 'string' && error.length > 0) {
119
+ return new Error(error);
120
+ }
121
+ return new Error(fallbackMessage);
122
+ }
123
+ }]);
124
+ return MvtVectorWorkerClient;
125
+ }();
126
+ export default MvtVectorWorkerClient;