@jetprint/editor-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/perspective.wasm +0 -0
- package/dist/assets/wasm_exec.js +553 -0
- package/dist/components/Editor/assets/editorIcons.d.ts +32 -0
- package/dist/components/Editor/components/CanvasSection.vue.d.ts +253 -0
- package/dist/components/Editor/components/CanvasZoomToolbar.vue.d.ts +23 -0
- package/dist/components/Editor/components/EditorAddToCartDialog.vue.d.ts +28 -0
- package/dist/components/Editor/components/EditorDefaultCanvasAxisLines.vue.d.ts +34 -0
- package/dist/components/Editor/components/EditorDefaultCanvasRulers.vue.d.ts +44 -0
- package/dist/components/Editor/components/EditorIcon.vue.d.ts +7 -0
- package/dist/components/Editor/components/EditorSelectionShortcutFab.vue.d.ts +56 -0
- package/dist/components/Editor/components/EditorSidebar.vue.d.ts +548 -0
- package/dist/components/Editor/components/EditorTopbar.vue.d.ts +363 -0
- package/dist/components/Editor/components/EditorTopbarMockupScope.vue.d.ts +12 -0
- package/dist/components/Editor/components/GalleryPanel.vue.d.ts +9 -0
- package/dist/components/Editor/components/LiveThreePreviewPane.vue.d.ts +30 -0
- package/dist/components/Editor/components/PreviewPanel.vue.d.ts +312 -0
- package/dist/components/Editor/components/ShortcutSettingsModal.vue.d.ts +11 -0
- package/dist/components/Editor/components/SplitPieceHandAlignPanel.vue.d.ts +14 -0
- package/dist/components/Editor/components/TemplateModal.vue.d.ts +35 -0
- package/dist/components/Editor/components/Theme1AddTextPanel.vue.d.ts +190 -0
- package/dist/components/Editor/components/Theme1UploadPanel.vue.d.ts +120 -0
- package/dist/components/Editor/composables/index.d.ts +56 -0
- package/dist/components/Editor/composables/useCanvasEventWiring.d.ts +40 -0
- package/dist/components/Editor/composables/useCanvasHistory.d.ts +18 -0
- package/dist/components/Editor/composables/useCanvasManager.d.ts +29 -0
- package/dist/components/Editor/composables/useCanvasObjectHelpers.d.ts +34 -0
- package/dist/components/Editor/composables/useCanvasStateByDiecut.d.ts +50 -0
- package/dist/components/Editor/composables/useCanvasViewport.d.ts +89 -0
- package/dist/components/Editor/composables/useClearCanvas.d.ts +32 -0
- package/dist/components/Editor/composables/useCompleteScreenshot.d.ts +68 -0
- package/dist/components/Editor/composables/useCopyToDiecuts.d.ts +56 -0
- package/dist/components/Editor/composables/useDiecutManager.d.ts +46 -0
- package/dist/components/Editor/composables/useDiecutScreenshot.d.ts +50 -0
- package/dist/components/Editor/composables/useDownloadPng.d.ts +11 -0
- package/dist/components/Editor/composables/useEditorReset.d.ts +21 -0
- package/dist/components/Editor/composables/useEditorShortcuts.d.ts +80 -0
- package/dist/components/Editor/composables/useEditorTopbarContext.d.ts +3 -0
- package/dist/components/Editor/composables/useEditorWatchers.d.ts +99 -0
- package/dist/components/Editor/composables/useEventHandlers.d.ts +13 -0
- package/dist/components/Editor/composables/useFontLoader.d.ts +8 -0
- package/dist/components/Editor/composables/useGuideResources.d.ts +38 -0
- package/dist/components/Editor/composables/useImageHandler.d.ts +10 -0
- package/dist/components/Editor/composables/useLayerOperations.d.ts +52 -0
- package/dist/components/Editor/composables/useLayerSync.d.ts +32 -0
- package/dist/components/Editor/composables/useLicense.d.ts +11 -0
- package/dist/components/Editor/composables/useObjectAdder.d.ts +76 -0
- package/dist/components/Editor/composables/usePatternHandler.d.ts +31 -0
- package/dist/components/Editor/composables/usePreviewManager.d.ts +240 -0
- package/dist/components/Editor/composables/usePreviewRenderer.d.ts +111 -0
- package/dist/components/Editor/composables/usePreviewUpdateQueue.d.ts +62 -0
- package/dist/components/Editor/composables/useProductData.d.ts +166 -0
- package/dist/components/Editor/composables/useSplitPieceHandTool.d.ts +34 -0
- package/dist/components/Editor/composables/useTemplateLoader.d.ts +36 -0
- package/dist/components/Editor/composables/useTemplateManager.d.ts +48 -0
- package/dist/components/Editor/composables/useTextHandler.d.ts +19 -0
- package/dist/components/Editor/composables/useToolState.d.ts +101 -0
- package/dist/components/Editor/composables/useToolStateSync.d.ts +49 -0
- package/dist/components/Editor/composables/useWorkerManager.d.ts +11 -0
- package/dist/components/Editor/config/fontConfig.d.ts +8 -0
- package/dist/components/Editor/editorCanvasGuides.d.ts +22 -0
- package/dist/components/Editor/fabric/PatternLayer.d.ts +104 -0
- package/dist/components/Editor/index.vue.d.ts +167 -0
- package/dist/components/Editor/liveRender/ThreeRenderViewer.vue.d.ts +31 -0
- package/dist/components/Editor/liveRender/dataAdapter.d.ts +2 -0
- package/dist/components/Editor/liveRender/prefetch.worker.d.ts +15 -0
- package/dist/components/Editor/liveRender/render.worker.d.ts +1 -0
- package/dist/components/Editor/liveRender/types.d.ts +130 -0
- package/dist/components/Editor/utils/blob.d.ts +5 -0
- package/dist/components/Editor/utils/buildSplitPieceDesignClipBlobs.d.ts +75 -0
- package/dist/components/Editor/utils/colorLabels.d.ts +6 -0
- package/dist/components/Editor/utils/dataBuilders.d.ts +108 -0
- package/dist/components/Editor/utils/designRestoreScale.d.ts +42 -0
- package/dist/components/Editor/utils/editorShortcutChord.d.ts +9 -0
- package/dist/components/Editor/utils/editorShortcutIds.d.ts +2 -0
- package/dist/components/Editor/utils/editorShortcutRegistry.d.ts +15 -0
- package/dist/components/Editor/utils/editorSizeOptions.d.ts +27 -0
- package/dist/components/Editor/utils/fabricMainCanvasSnapshot.d.ts +48 -0
- package/dist/components/Editor/utils/fabricRulerMath.d.ts +35 -0
- package/dist/components/Editor/utils/fabricScreenshotToBlob.d.ts +7 -0
- package/dist/components/Editor/utils/imageLoader.d.ts +10 -0
- package/dist/components/Editor/utils/objectUtils.d.ts +11 -0
- package/dist/components/Editor/utils/pattern.d.ts +56 -0
- package/dist/components/Editor/utils/scaleSplitClassicGridVisual.d.ts +9 -0
- package/dist/components/Editor/utils/screenshot.d.ts +8 -0
- package/dist/components/Editor/utils/selectionVisual.d.ts +7 -0
- package/dist/components/Editor/utils/tintMaskWithColor.d.ts +4 -0
- package/dist/components/Editor/utils/uploadLimit.d.ts +4 -0
- package/dist/components/Editor/workers/copyDiecuts.worker.d.ts +38 -0
- package/dist/components/Editor/workers/maskWorker.d.ts +13 -0
- package/dist/components/Editor/workers/renderWorker.d.ts +1 -0
- package/dist/components/Editor/workers/zoneScreenshotWorker.d.ts +49 -0
- package/dist/composables/useEditorI18n.d.ts +18 -0
- package/dist/copyDiecuts.worker.js +67 -0
- package/dist/deform.worker.js +760 -0
- package/dist/editor-sdk.es.js +73923 -0
- package/dist/index.d.ts +446 -0
- package/dist/locales/builtin-messages.d.ts +2 -0
- package/dist/locales/editor-locales.d.ts +7 -0
- package/dist/locales/en.d.ts +5 -0
- package/dist/locales/ja-JP.d.ts +5 -0
- package/dist/locales/ko-KR.d.ts +5 -0
- package/dist/locales/vi-VN.d.ts +5 -0
- package/dist/locales/zh.d.ts +5 -0
- package/dist/maskWorker.js +51 -0
- package/dist/prefetch.worker.js +16 -0
- package/dist/render.worker.js +27266 -0
- package/dist/renderWorker.js +40368 -0
- package/dist/style.css +1 -0
- package/dist/types.d.ts +483 -0
- package/dist/utils/backgroundRenderer.d.ts +64 -0
- package/dist/utils/encryptJson.d.ts +31 -0
- package/dist/utils/environment.d.ts +29 -0
- package/dist/utils/errorHandler.d.ts +27 -0
- package/dist/utils/fileToken.d.ts +18 -0
- package/dist/utils/http.d.ts +31 -0
- package/dist/utils/jsonFileCache.d.ts +6 -0
- package/dist/utils/license/api.d.ts +74 -0
- package/dist/utils/license/deviceId.d.ts +25 -0
- package/dist/utils/license/index.d.ts +9 -0
- package/dist/utils/license/licenseManager.d.ts +63 -0
- package/dist/utils/license/licenseStore.d.ts +17 -0
- package/dist/utils/license/retry.d.ts +11 -0
- package/dist/utils/license/tokenRefresh.d.ts +34 -0
- package/dist/utils/mediaBlobCache.d.ts +6 -0
- package/dist/utils/protection/encryptedModules.generated.d.ts +27 -0
- package/dist/utils/protection/moduleLoader.d.ts +17 -0
- package/dist/utils/renderService/blend.d.ts +4 -0
- package/dist/utils/renderService/deform.d.ts +21 -0
- package/dist/utils/renderService/deform.worker.d.ts +7 -0
- package/dist/utils/renderService/image.d.ts +8 -0
- package/dist/utils/renderService/index.d.ts +12 -0
- package/dist/utils/renderService/mask.d.ts +13 -0
- package/dist/utils/renderService/prepareRenderData.d.ts +2 -0
- package/dist/utils/renderService/psdConverter.d.ts +6 -0
- package/dist/utils/renderService/render.d.ts +14 -0
- package/dist/utils/renderService/render.worker.d.ts +17 -0
- package/dist/utils/renderService/types.d.ts +236 -0
- package/dist/utils/renderService/workerManager.d.ts +33 -0
- package/dist/utils/renderedImagesDB.d.ts +61 -0
- package/dist/utils/storage.d.ts +27 -0
- package/dist/utils/threeRenderService/index.d.ts +6 -0
- package/dist/utils/url.d.ts +39 -0
- package/dist/utils/workerBase.d.ts +38 -0
- package/dist/utils/workerLoader.d.ts +24 -0
- package/dist/wasm/index.d.ts +5 -0
- package/dist/wasm/perspectiveLoader.d.ts +70 -0
- package/dist/wasm/perspectiveLoader.worker.d.ts +116 -0
- package/dist/zoneScreenshotWorker.js +82 -0
- package/package.json +54 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 带 fileToken 的 JSON 拉取;同一规范化 URL(去掉 fileToken)复用解析结果,减少预览/模板重复请求。
|
|
3
|
+
* 每次返回深拷贝,避免调用方修改 layerList 等污染缓存。
|
|
4
|
+
*/
|
|
5
|
+
export declare function fetchJsonWithFileTokenCached<T = unknown>(url: string, init?: RequestInit): Promise<T>;
|
|
6
|
+
export declare function clearJsonFileCache(): void;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export interface LicenseTokenRequest {
|
|
2
|
+
licenseKey: string;
|
|
3
|
+
deviceId: string;
|
|
4
|
+
domain: string;
|
|
5
|
+
}
|
|
6
|
+
export interface LicenseTokenResponse {
|
|
7
|
+
success: boolean;
|
|
8
|
+
token?: string;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LicenseVerifyRequest {
|
|
12
|
+
token: string;
|
|
13
|
+
deviceId: string;
|
|
14
|
+
domain: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LicenseRefreshTokenRequest {
|
|
17
|
+
token: string;
|
|
18
|
+
deviceId: string;
|
|
19
|
+
domain: string;
|
|
20
|
+
}
|
|
21
|
+
export interface LicenseRefreshTokenResponse {
|
|
22
|
+
success: boolean;
|
|
23
|
+
token?: string;
|
|
24
|
+
expiresAt?: string;
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface LicenseVerifyResponse {
|
|
28
|
+
success: boolean;
|
|
29
|
+
valid?: boolean;
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface LicenseDecryptKeyRequest {
|
|
33
|
+
token: string;
|
|
34
|
+
deviceId: string;
|
|
35
|
+
domain: string;
|
|
36
|
+
nonce?: string;
|
|
37
|
+
timestamp?: number;
|
|
38
|
+
signature?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface LicenseDecryptKeyResponse {
|
|
41
|
+
success: boolean;
|
|
42
|
+
key?: string;
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare class LicenseAPI {
|
|
46
|
+
private http;
|
|
47
|
+
baseUrl: string;
|
|
48
|
+
constructor(baseUrl: string, timeout?: number);
|
|
49
|
+
/**
|
|
50
|
+
* 生成随机 Nonce(用于防重放攻击)
|
|
51
|
+
*/
|
|
52
|
+
private generateNonce;
|
|
53
|
+
/**
|
|
54
|
+
* 生成请求签名
|
|
55
|
+
* 使用 token 的签名部分作为签名密钥(token 格式:jwt:signature)
|
|
56
|
+
*/
|
|
57
|
+
private signRequest;
|
|
58
|
+
/**
|
|
59
|
+
* 生成 License Token(新 API: /jet_license/interface/license/token)
|
|
60
|
+
*/
|
|
61
|
+
generateToken(request: LicenseTokenRequest): Promise<LicenseTokenResponse>;
|
|
62
|
+
/**
|
|
63
|
+
* 验证 License Token(新 API: /jet_license/interface/license/verify)
|
|
64
|
+
*/
|
|
65
|
+
verifyToken(request: LicenseVerifyRequest): Promise<LicenseVerifyResponse>;
|
|
66
|
+
/**
|
|
67
|
+
* 刷新 Token(新 API: /jet_license/interface/license/refreshToken)
|
|
68
|
+
*/
|
|
69
|
+
refreshToken(request: LicenseRefreshTokenRequest): Promise<LicenseRefreshTokenResponse>;
|
|
70
|
+
/**
|
|
71
|
+
* 获取代码解密密钥(新 API: /jet_license/interface/license/decrypt-key)
|
|
72
|
+
*/
|
|
73
|
+
getDecryptionKey(request: LicenseDecryptKeyRequest): Promise<LicenseDecryptKeyResponse>;
|
|
74
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成设备唯一标识
|
|
3
|
+
* 基于浏览器指纹 + LocalStorage 持久化
|
|
4
|
+
*/
|
|
5
|
+
export declare class DeviceID {
|
|
6
|
+
private static readonly STORAGE_KEY;
|
|
7
|
+
private static cachedId;
|
|
8
|
+
/**
|
|
9
|
+
* 获取设备 ID(如果不存在则生成)
|
|
10
|
+
*/
|
|
11
|
+
static getDeviceID(): string;
|
|
12
|
+
/**
|
|
13
|
+
* 生成设备 ID
|
|
14
|
+
* 基于浏览器特征生成唯一标识
|
|
15
|
+
*/
|
|
16
|
+
private static generateDeviceID;
|
|
17
|
+
/**
|
|
18
|
+
* 简单的哈希函数
|
|
19
|
+
*/
|
|
20
|
+
private static simpleHash;
|
|
21
|
+
/**
|
|
22
|
+
* 清除设备 ID(用于测试)
|
|
23
|
+
*/
|
|
24
|
+
static clearDeviceID(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { LicenseAPI } from './api';
|
|
2
|
+
export { LicenseManager } from './licenseManager';
|
|
3
|
+
export { DeviceID } from './deviceId';
|
|
4
|
+
export { TokenRefresher } from './tokenRefresh';
|
|
5
|
+
export { withRetry } from './retry';
|
|
6
|
+
export { setLicenseInfo, getLicenseInfo, clearLicenseInfo } from './licenseStore';
|
|
7
|
+
export type { LicenseTokenRequest, LicenseTokenResponse, LicenseVerifyRequest, LicenseVerifyResponse, LicenseDecryptKeyRequest, LicenseDecryptKeyResponse, } from './api';
|
|
8
|
+
export type { TokenRefreshConfig } from './tokenRefresh';
|
|
9
|
+
export type { RetryOptions } from './retry';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type RetryOptions } from './retry';
|
|
2
|
+
export interface LicenseConfig {
|
|
3
|
+
licenseKey: string;
|
|
4
|
+
apiBaseUrl: string;
|
|
5
|
+
timeout?: number;
|
|
6
|
+
enableAutoRefresh?: boolean;
|
|
7
|
+
refreshThreshold?: number;
|
|
8
|
+
retryOptions?: RetryOptions;
|
|
9
|
+
onError?: (error: string) => void;
|
|
10
|
+
onSuccess?: () => void;
|
|
11
|
+
onTokenRefresh?: (token: string) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare class LicenseManager {
|
|
14
|
+
private api;
|
|
15
|
+
private licenseKey;
|
|
16
|
+
private token;
|
|
17
|
+
private deviceId;
|
|
18
|
+
private domain;
|
|
19
|
+
private refresher;
|
|
20
|
+
private retryOptions;
|
|
21
|
+
private onError?;
|
|
22
|
+
private onSuccess?;
|
|
23
|
+
private onTokenRefresh?;
|
|
24
|
+
private verificationPromise;
|
|
25
|
+
constructor(config: LicenseConfig);
|
|
26
|
+
/**
|
|
27
|
+
* 初始化 License(获取 Token,带重试)
|
|
28
|
+
*/
|
|
29
|
+
initialize(): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* 验证 License Token(带重试)
|
|
32
|
+
*/
|
|
33
|
+
verify(): Promise<boolean>;
|
|
34
|
+
private doVerify;
|
|
35
|
+
/**
|
|
36
|
+
* 手动刷新 Token
|
|
37
|
+
*/
|
|
38
|
+
refreshToken(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* 获取 Token(用于传递给 WASM)
|
|
41
|
+
*/
|
|
42
|
+
getToken(): string | null;
|
|
43
|
+
/**
|
|
44
|
+
* 获取设备 ID
|
|
45
|
+
*/
|
|
46
|
+
getDeviceID(): string;
|
|
47
|
+
/**
|
|
48
|
+
* 获取域名
|
|
49
|
+
*/
|
|
50
|
+
getDomain(): string;
|
|
51
|
+
/**
|
|
52
|
+
* 处理错误
|
|
53
|
+
*/
|
|
54
|
+
private handleError;
|
|
55
|
+
/**
|
|
56
|
+
* 清除 Token(用于登出等场景)
|
|
57
|
+
*/
|
|
58
|
+
clear(): void;
|
|
59
|
+
/**
|
|
60
|
+
* 销毁(清理资源)
|
|
61
|
+
*/
|
|
62
|
+
destroy(): void;
|
|
63
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License 共享存储
|
|
3
|
+
* 供主线程的不同模块使用,避免依赖全局变量
|
|
4
|
+
*/
|
|
5
|
+
export declare function setLicenseInfo(config: {
|
|
6
|
+
token: string;
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
deviceId: string;
|
|
9
|
+
domain: string;
|
|
10
|
+
}): void;
|
|
11
|
+
export declare function getLicenseInfo(): {
|
|
12
|
+
token: string | null;
|
|
13
|
+
apiUrl: string | null;
|
|
14
|
+
deviceId: string | null;
|
|
15
|
+
domain: string | null;
|
|
16
|
+
};
|
|
17
|
+
export declare function clearLicenseInfo(): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RetryOptions {
|
|
2
|
+
maxRetries?: number;
|
|
3
|
+
retryDelay?: number;
|
|
4
|
+
retryDelayMultiplier?: number;
|
|
5
|
+
retryableErrors?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class RetryableError extends Error {
|
|
8
|
+
retryable: boolean;
|
|
9
|
+
constructor(message: string, retryable?: boolean);
|
|
10
|
+
}
|
|
11
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface TokenRefreshConfig {
|
|
2
|
+
apiBaseUrl: string;
|
|
3
|
+
licenseKey: string;
|
|
4
|
+
refreshThreshold: number;
|
|
5
|
+
onRefresh?: (token: string) => void;
|
|
6
|
+
onError?: (error: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare class TokenRefresher {
|
|
9
|
+
private api;
|
|
10
|
+
private deviceId;
|
|
11
|
+
private domain;
|
|
12
|
+
private refreshThreshold;
|
|
13
|
+
private refreshTimer;
|
|
14
|
+
private currentToken;
|
|
15
|
+
private onRefresh?;
|
|
16
|
+
private onError?;
|
|
17
|
+
constructor(config: TokenRefreshConfig);
|
|
18
|
+
/**
|
|
19
|
+
* 解析 Token 获取过期时间
|
|
20
|
+
*/
|
|
21
|
+
private getTokenExpiry;
|
|
22
|
+
/**
|
|
23
|
+
* 启动自动刷新
|
|
24
|
+
*/
|
|
25
|
+
startAutoRefresh(currentToken: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* 停止自动刷新
|
|
28
|
+
*/
|
|
29
|
+
stopAutoRefresh(): void;
|
|
30
|
+
/**
|
|
31
|
+
* 刷新 Token(调用新 API: /jet_license/interface/license/refreshToken)
|
|
32
|
+
*/
|
|
33
|
+
refreshToken(): Promise<string | null>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自动生成的加密模块文件
|
|
3
|
+
* 此文件由 vite-plugins/serverEncrypt.ts 在构建时自动生成
|
|
4
|
+
* 请勿手动编辑
|
|
5
|
+
*
|
|
6
|
+
* 生成时间: 2026-06-10T06:49:14.030Z
|
|
7
|
+
* 构建模式: production
|
|
8
|
+
* 加密模块数量: 13
|
|
9
|
+
* 构建种子: Kx9mP2qR5s... (已隐藏)
|
|
10
|
+
*
|
|
11
|
+
* 加密模块列表:
|
|
12
|
+
* 第一阶段(6个):
|
|
13
|
+
* - deform.ts, render.ts, psdConverter.ts, image.ts, blend.ts, mask.ts
|
|
14
|
+
*
|
|
15
|
+
* 第二阶段(3个):
|
|
16
|
+
* - prepareRenderData.ts, workerManager.ts, types.ts
|
|
17
|
+
*
|
|
18
|
+
* 第三阶段(2个):
|
|
19
|
+
* - perspectiveLoader.ts, workerLoader.ts
|
|
20
|
+
*
|
|
21
|
+
* 第四阶段(2个):
|
|
22
|
+
* - renderService/index.ts, wasm/index.ts
|
|
23
|
+
*/
|
|
24
|
+
export declare const ENCRYPTED_MODULES: Record<string, {
|
|
25
|
+
data: string;
|
|
26
|
+
hash: string;
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 加密模块加载器
|
|
3
|
+
* 从服务端获取解密密钥,解密并加载加密的核心模块
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 从服务端获取解密密钥
|
|
7
|
+
*/
|
|
8
|
+
export declare function fetchDecryptionKey(apiBaseUrl: string, token: string, deviceId: string, domain: string): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* 加载加密模块
|
|
11
|
+
* @param modulePath - 模块路径(相对于 src 目录)
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadEncryptedModule(modulePath: string): Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* 清除解密密钥和缓存(用于登出等场景)
|
|
16
|
+
*/
|
|
17
|
+
export declare function clearDecryptionCache(): void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ISmartObject } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 变形渲染封装函数
|
|
4
|
+
* @param image - 输入图片,支持 URL、HTMLImageElement 或 ImageBitmap
|
|
5
|
+
* @param smartObject - 部位数据(智能对象配置)
|
|
6
|
+
* @param faceId - 面 ID,用于标识 worker(可选,默认为 0)
|
|
7
|
+
* @returns 变形后的图片 HTMLImageElement
|
|
8
|
+
*/
|
|
9
|
+
export declare function deformImage(image: string | HTMLImageElement | ImageBitmap, smartObject: ISmartObject, faceId?: number, maxImageSize?: number, baseUrl?: string): Promise<HTMLImageElement>;
|
|
10
|
+
/**
|
|
11
|
+
* 变形渲染封装函数(返回 ImageBitmap)
|
|
12
|
+
* @param image - 输入图片,支持 URL、HTMLImageElement 或 ImageBitmap
|
|
13
|
+
* @param smartObject - 部位数据(智能对象配置)
|
|
14
|
+
* @param faceId - 面 ID,用于标识 worker(可选,默认为 0)
|
|
15
|
+
* @param canvasSize - 画布尺寸(可选,默认使用 smartObject.size)
|
|
16
|
+
* @returns 变形后的 ImageBitmap
|
|
17
|
+
*/
|
|
18
|
+
export declare function deformImageBitmap(image: string | HTMLImageElement | ImageBitmap, smartObject: ISmartObject, faceId?: number, canvasSize?: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
}, maxImageSize?: number, baseUrl?: string): Promise<ImageBitmap>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将输入图片转换为 ImageBitmap
|
|
3
|
+
*/
|
|
4
|
+
export declare function toImageBitmap(image: string | HTMLImageElement | ImageBitmap, maxImageSize?: number, baseUrl?: string): Promise<ImageBitmap>;
|
|
5
|
+
/**
|
|
6
|
+
* 加载图片为 ImageBitmap
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadImageBitmap(url: string, maxImageSize?: number, baseUrl?: string): Promise<ImageBitmap>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* renderService - 渲染服务
|
|
3
|
+
* 按功能拆分到多个文件,本文件仅做统一导出
|
|
4
|
+
*/
|
|
5
|
+
export * from "./types";
|
|
6
|
+
export * from "./psdConverter";
|
|
7
|
+
export * from "./mask";
|
|
8
|
+
export * from "./image";
|
|
9
|
+
export * from "./blend";
|
|
10
|
+
export * from "./workerManager";
|
|
11
|
+
export * from "./deform";
|
|
12
|
+
export * from "./render";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IMaskData, ISmartObject } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 智能获取蒙版数据
|
|
4
|
+
*/
|
|
5
|
+
export declare function getMaskFromData(data: ISmartObject): IMaskData | null;
|
|
6
|
+
/**
|
|
7
|
+
* 规范化蒙版数据(转换 Vue Proxy 对象为普通对象)
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeMaskData(maskData?: IMaskData | null): IMaskData | null;
|
|
10
|
+
/**
|
|
11
|
+
* 应用矢量蒙版到 canvas
|
|
12
|
+
*/
|
|
13
|
+
export declare function applyVectorMask(ctx: CanvasRenderingContext2D, maskData: IMaskData | null): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDeformResult, IRenderByJsonResult, TLayerExtrasByName } from "./types";
|
|
2
|
+
import type { IPsdJsonData, IRenderByJson } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* 根据 JSON 和 layerExtrasByName 进行变形(核心算法)
|
|
5
|
+
*/
|
|
6
|
+
export declare function deformByJson(psdJson: IPsdJsonData, layerExtrasByName: TLayerExtrasByName): Promise<IDeformResult[]>;
|
|
7
|
+
/**
|
|
8
|
+
* 根据 JSON 和 layerExtrasByName 渲染所有图层到 canvas(核心算法)
|
|
9
|
+
*/
|
|
10
|
+
export declare function renderByJson(data: IRenderByJson): Promise<IRenderByJsonResult>;
|
|
11
|
+
/**
|
|
12
|
+
* 下载 canvas 为图片
|
|
13
|
+
*/
|
|
14
|
+
export declare function downloadCanvas(canvas: HTMLCanvasElement | OffscreenCanvas, filename?: string): Promise<void>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type IMaskData = {
|
|
2
|
+
type: "bezier";
|
|
3
|
+
paths: Array<{
|
|
4
|
+
open: boolean;
|
|
5
|
+
knots: Array<{
|
|
6
|
+
linked: boolean;
|
|
7
|
+
points: number[];
|
|
8
|
+
}>;
|
|
9
|
+
}>;
|
|
10
|
+
} | {
|
|
11
|
+
type: "simple";
|
|
12
|
+
points: Array<{
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
type?: number;
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
export declare enum EPartType {
|
|
2
|
+
Drawing = 0,// 可绘制插画
|
|
3
|
+
Material = 1
|
|
4
|
+
}
|
|
5
|
+
/** 2D顶点,相对于画布的坐标系 */
|
|
6
|
+
export interface IPoint {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
type?: number;
|
|
10
|
+
}
|
|
11
|
+
/** 矢量蒙版节点,包含贝塞尔曲线控制点 */
|
|
12
|
+
export interface IVectorKnot {
|
|
13
|
+
linked: boolean;
|
|
14
|
+
points: number[];
|
|
15
|
+
}
|
|
16
|
+
/** 矢量路径 */
|
|
17
|
+
export interface IVectorPath {
|
|
18
|
+
open: boolean;
|
|
19
|
+
knots: IVectorKnot[];
|
|
20
|
+
fillRule?: string;
|
|
21
|
+
operation?: string;
|
|
22
|
+
}
|
|
23
|
+
/** 矢量蒙版 */
|
|
24
|
+
export interface IVectorMask {
|
|
25
|
+
paths: IVectorPath[];
|
|
26
|
+
points?: IPoint[];
|
|
27
|
+
invert?: boolean;
|
|
28
|
+
notLink?: boolean;
|
|
29
|
+
disable?: boolean;
|
|
30
|
+
fillStartsWithAllPixels?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface IBounds {
|
|
33
|
+
top: number;
|
|
34
|
+
left: number;
|
|
35
|
+
bottom?: number;
|
|
36
|
+
right?: number;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
}
|
|
40
|
+
export interface IPuppetShape {
|
|
41
|
+
originalVertexArray: IPoint[];
|
|
42
|
+
deformedVertexArray: IPoint[];
|
|
43
|
+
indexArray: number[];
|
|
44
|
+
}
|
|
45
|
+
export interface IFilter {
|
|
46
|
+
type: string;
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
filter?: {
|
|
49
|
+
puppetShapeList?: IPuppetShape[];
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface ISmartObject {
|
|
53
|
+
name?: string;
|
|
54
|
+
type?: string;
|
|
55
|
+
blendMode?: string;
|
|
56
|
+
transform: number[];
|
|
57
|
+
meshPoints?: IPoint[];
|
|
58
|
+
bounds: IBounds;
|
|
59
|
+
isSmartObject?: boolean;
|
|
60
|
+
size?: {
|
|
61
|
+
width: number;
|
|
62
|
+
height: number;
|
|
63
|
+
};
|
|
64
|
+
originalWidth?: number;
|
|
65
|
+
originalHeight?: number;
|
|
66
|
+
quiltSliceX?: number[];
|
|
67
|
+
quiltSliceY?: number[];
|
|
68
|
+
layerOrder?: number;
|
|
69
|
+
imagePath?: string;
|
|
70
|
+
vectorMask?: IVectorMask;
|
|
71
|
+
placedLayer?: {
|
|
72
|
+
width: number;
|
|
73
|
+
height: number;
|
|
74
|
+
};
|
|
75
|
+
filterList?: IFilter[];
|
|
76
|
+
opacity?: number;
|
|
77
|
+
clipping?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** 裁片部位数据 */
|
|
80
|
+
export interface IPart {
|
|
81
|
+
id: number;
|
|
82
|
+
name: string;
|
|
83
|
+
url?: string;
|
|
84
|
+
designArea?: string;
|
|
85
|
+
pureUrl?: string;
|
|
86
|
+
width?: number;
|
|
87
|
+
height?: number;
|
|
88
|
+
partType?: EPartType;
|
|
89
|
+
}
|
|
90
|
+
export declare enum EPsdDataType {
|
|
91
|
+
Group = 0,// 部件组
|
|
92
|
+
Layer = 1
|
|
93
|
+
}
|
|
94
|
+
/** psd部位数据 */
|
|
95
|
+
export interface IPsdPartData {
|
|
96
|
+
id: number;
|
|
97
|
+
partId?: number;
|
|
98
|
+
name: string;
|
|
99
|
+
blendMode?: string;
|
|
100
|
+
vectorMaskPath?: IPoint[];
|
|
101
|
+
smartObjects?: ISmartObject[];
|
|
102
|
+
type: EPsdDataType;
|
|
103
|
+
url?: string;
|
|
104
|
+
bounds?: IBounds;
|
|
105
|
+
opacity?: number;
|
|
106
|
+
clipping?: boolean;
|
|
107
|
+
layerOrder?: number;
|
|
108
|
+
}
|
|
109
|
+
/** 模特图数据 */
|
|
110
|
+
export interface IPsdModelData {
|
|
111
|
+
width: number;
|
|
112
|
+
height: number;
|
|
113
|
+
psdPartData?: IPsdPartData[];
|
|
114
|
+
}
|
|
115
|
+
/** 版型数据 */
|
|
116
|
+
export interface IModelData {
|
|
117
|
+
parts: IPart[];
|
|
118
|
+
models: IPsdModelData[];
|
|
119
|
+
}
|
|
120
|
+
export type PsdLayerType = "Layer" | "Group";
|
|
121
|
+
export interface IPsdJsonLayer {
|
|
122
|
+
name: string;
|
|
123
|
+
type: PsdLayerType;
|
|
124
|
+
blendMode?: string;
|
|
125
|
+
bounds?: IBounds;
|
|
126
|
+
layerOrder?: number;
|
|
127
|
+
imagePath?: string;
|
|
128
|
+
vectorMask?: IVectorMask;
|
|
129
|
+
children?: IPsdJsonLayer[];
|
|
130
|
+
isSmartObject?: boolean;
|
|
131
|
+
size?: {
|
|
132
|
+
width: number;
|
|
133
|
+
height: number;
|
|
134
|
+
};
|
|
135
|
+
placedLayer?: {
|
|
136
|
+
width: number;
|
|
137
|
+
height: number;
|
|
138
|
+
};
|
|
139
|
+
originalWidth?: number;
|
|
140
|
+
originalHeight?: number;
|
|
141
|
+
meshPoints?: IPoint[];
|
|
142
|
+
transform?: number[];
|
|
143
|
+
quiltSliceX?: number[];
|
|
144
|
+
quiltSliceY?: number[];
|
|
145
|
+
filterList?: IFilter[];
|
|
146
|
+
id?: number;
|
|
147
|
+
opacity?: number;
|
|
148
|
+
clipping?: boolean;
|
|
149
|
+
}
|
|
150
|
+
export interface IPsdJsonData {
|
|
151
|
+
canvasWidth: number;
|
|
152
|
+
canvasHeight: number;
|
|
153
|
+
layerList: IPsdJsonLayer[];
|
|
154
|
+
}
|
|
155
|
+
export interface ILayerExtras {
|
|
156
|
+
id?: number;
|
|
157
|
+
partId?: number;
|
|
158
|
+
url?: string;
|
|
159
|
+
/** 变形部位对应的设计图片(URL、HTMLImageElement 或 ImageBitmap) */
|
|
160
|
+
designImage?: string | HTMLImageElement | ImageBitmap;
|
|
161
|
+
}
|
|
162
|
+
export interface IConvertPsdOptions {
|
|
163
|
+
parts: IPart[];
|
|
164
|
+
defaultIdStart?: number;
|
|
165
|
+
}
|
|
166
|
+
export interface IConvertPsdInput {
|
|
167
|
+
psdJson: IPsdJsonData;
|
|
168
|
+
layerExtrasByName?: Record<string, ILayerExtras>;
|
|
169
|
+
}
|
|
170
|
+
/** 蒙版数据类型 */
|
|
171
|
+
export type IMaskData = {
|
|
172
|
+
type: "bezier";
|
|
173
|
+
paths: IVectorPath[];
|
|
174
|
+
} | {
|
|
175
|
+
type: "simple";
|
|
176
|
+
points: IPoint[];
|
|
177
|
+
};
|
|
178
|
+
/** 图层额外信息类型(包含变形图片) */
|
|
179
|
+
export interface ILayerExtrasWithImage {
|
|
180
|
+
id?: number;
|
|
181
|
+
partId?: number;
|
|
182
|
+
url?: string;
|
|
183
|
+
designImage?: string | HTMLImageElement | ImageBitmap;
|
|
184
|
+
/** 可选:内容版本,用于 Three 变形结果缓存判断图片内容是否变化。 */
|
|
185
|
+
contentVersion?: number | string;
|
|
186
|
+
}
|
|
187
|
+
/** layerExtrasByName 类型 */
|
|
188
|
+
export type TLayerExtrasByName = Record<string, ILayerExtrasWithImage>;
|
|
189
|
+
/** 变形结果 */
|
|
190
|
+
export interface IDeformResult {
|
|
191
|
+
layerName: string;
|
|
192
|
+
partId?: number;
|
|
193
|
+
imageBitmap: ImageBitmap;
|
|
194
|
+
}
|
|
195
|
+
/** 渲染结果 */
|
|
196
|
+
export interface IRenderByJsonResult {
|
|
197
|
+
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
198
|
+
width: number;
|
|
199
|
+
height: number;
|
|
200
|
+
}
|
|
201
|
+
export interface IMaterial {
|
|
202
|
+
layerName: string;
|
|
203
|
+
url: string;
|
|
204
|
+
sourceName?: string;
|
|
205
|
+
}
|
|
206
|
+
export interface IFabricScreenshot {
|
|
207
|
+
id: number;
|
|
208
|
+
/** Optional part/group name, used to remap screenshots across mockup PSDs whose group ids differ. */
|
|
209
|
+
name?: string;
|
|
210
|
+
url: string;
|
|
211
|
+
/** 可选:拖动实时预览使用的内存图源,优先级高于 url。 */
|
|
212
|
+
designImage?: ImageBitmap;
|
|
213
|
+
/** 可选:内容版本(用于避免仅 url 变化导致缓存击穿)。 */
|
|
214
|
+
contentVersion?: number | string;
|
|
215
|
+
}
|
|
216
|
+
export interface IRenderByJson {
|
|
217
|
+
psdJson: IPsdJsonData;
|
|
218
|
+
materialList: IMaterial[];
|
|
219
|
+
fabricScreenshotList: IFabricScreenshot[];
|
|
220
|
+
width?: number;
|
|
221
|
+
height?: number;
|
|
222
|
+
/** 可选:图片资源的基准 URL,用于解析相对路径 */
|
|
223
|
+
baseUrl?: string;
|
|
224
|
+
/** 拖动实时预览的渲染层级:fast 只用于跟手反馈,hd 用于松手后的清晰结果 */
|
|
225
|
+
previewTier?: 'fast' | 'hd';
|
|
226
|
+
/** fast 预览之后是否还需要补一帧高清结果 */
|
|
227
|
+
hasPendingHdFollowup?: boolean;
|
|
228
|
+
/** 限制图片解码长边,降低拖动中 worker 解码成本 */
|
|
229
|
+
maxImageSize?: number;
|
|
230
|
+
/** 可选:预览渲染质量,quick 用于拖动中的低分辨率快速反馈 */
|
|
231
|
+
previewQuality?: 'quick' | 'normal';
|
|
232
|
+
/** 为 true 时跳过智能对象网格变形,直接用纹理四边形(拖动快速预览时启用以节省 11-80ms) */
|
|
233
|
+
skipDeform?: boolean;
|
|
234
|
+
/** 当前渲染的目标颜色,用于过滤 psdJson 中不属于此颜色的图层(如 "Beige"、"Black") */
|
|
235
|
+
selectedColor?: string;
|
|
236
|
+
}
|