lanhu-layer-tree 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.
Files changed (54) hide show
  1. package/.env.example +11 -0
  2. package/README.md +317 -0
  3. package/dist/assets.d.ts +38 -0
  4. package/dist/assets.d.ts.map +1 -0
  5. package/dist/assets.js +247 -0
  6. package/dist/assets.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +322 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client.d.ts +44 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +441 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/cookie.d.ts +32 -0
  16. package/dist/cookie.d.ts.map +1 -0
  17. package/dist/cookie.js +177 -0
  18. package/dist/cookie.js.map +1 -0
  19. package/dist/formatter.d.ts +6 -0
  20. package/dist/formatter.d.ts.map +1 -0
  21. package/dist/formatter.js +225 -0
  22. package/dist/formatter.js.map +1 -0
  23. package/dist/index.d.ts +5 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +27 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/merger.d.ts +27 -0
  28. package/dist/merger.d.ts.map +1 -0
  29. package/dist/merger.js +141 -0
  30. package/dist/merger.js.map +1 -0
  31. package/dist/resolver.d.ts +27 -0
  32. package/dist/resolver.d.ts.map +1 -0
  33. package/dist/resolver.js +196 -0
  34. package/dist/resolver.js.map +1 -0
  35. package/dist/types.d.ts +85 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +6 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/utils.d.ts +23 -0
  40. package/dist/utils.d.ts.map +1 -0
  41. package/dist/utils.js +106 -0
  42. package/dist/utils.js.map +1 -0
  43. package/package.json +38 -0
  44. package/src/assets.ts +221 -0
  45. package/src/cli.ts +333 -0
  46. package/src/client.ts +490 -0
  47. package/src/cookie.ts +156 -0
  48. package/src/formatter.ts +251 -0
  49. package/src/index.ts +4 -0
  50. package/src/merger.ts +154 -0
  51. package/src/resolver.ts +195 -0
  52. package/src/types.ts +94 -0
  53. package/src/utils.ts +120 -0
  54. package/tsconfig.json +20 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 资源 UUID 解析:Unity/Cocos
3
+ */
4
+ import { Layer } from './types';
5
+ export interface AssetInfo {
6
+ uuid?: string;
7
+ guid?: string;
8
+ sliced: boolean;
9
+ border?: [number, number, number, number] | null;
10
+ }
11
+ /**
12
+ * 批量解析图层中的图片资源 GUID(Unity)
13
+ */
14
+ export declare function resolveLayerAssetsUnity(layers: Layer[], assetsDir: string): Record<string, AssetInfo>;
15
+ /**
16
+ * 批量解析图层中的图片资源 UUID(Cocos)
17
+ *
18
+ * 仅处理本地已存在的资源:
19
+ * - 有 .meta 文件 → 读取 UUID
20
+ * - 无 .meta 文件 → 生成 .meta 并分配新 UUID
21
+ */
22
+ export declare function resolveLayerAssetsCocos(layers: Layer[], assetsDir: string): Record<string, AssetInfo>;
23
+ /**
24
+ * 根据图层名称取出对应的资源信息
25
+ */
26
+ export declare function getAssetInfoForLayer(layerName: string, uuidMap: Record<string, AssetInfo>): AssetInfo | null;
27
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAShC,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAClD;AAwDD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAuC3B;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAiD3B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACjC,SAAS,GAAG,IAAI,CAIlB"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * 资源 UUID 解析:Unity/Cocos
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.resolveLayerAssetsUnity = resolveLayerAssetsUnity;
40
+ exports.resolveLayerAssetsCocos = resolveLayerAssetsCocos;
41
+ exports.getAssetInfoForLayer = getAssetInfoForLayer;
42
+ const fs = __importStar(require("fs"));
43
+ const assets_1 = require("./assets");
44
+ const SKIP_LAYER_TYPES = new Set([
45
+ 'textLayer',
46
+ 'group',
47
+ 'layerGroup',
48
+ 'artboard',
49
+ 'layerSection'
50
+ ]);
51
+ const CHINESE_REGEX = /[一-鿿]/;
52
+ /**
53
+ * 从图层名称提取资源文件名
54
+ * 规则:
55
+ * - 去除 "Img_" / "Img" 前缀
56
+ * - 去除 "拷贝" 及后续数字
57
+ * - 去除九宫格标记 " s9-x-y"
58
+ * - 中文命名 / "background" 跳过
59
+ */
60
+ function extractResourceFilename(name) {
61
+ let resourceName = name;
62
+ if (resourceName.startsWith('Img_')) {
63
+ resourceName = resourceName.slice(4);
64
+ }
65
+ else if (resourceName.startsWith('Img')) {
66
+ resourceName = resourceName.slice(3);
67
+ }
68
+ resourceName = resourceName.replace(/\s*拷贝\s*\d*/g, '').trim();
69
+ resourceName = resourceName.replace(/\s+s9-\d+-\d+/g, '').trim();
70
+ if (!resourceName)
71
+ return null;
72
+ if (CHINESE_REGEX.test(resourceName))
73
+ return null;
74
+ if (resourceName.toLowerCase() === 'background')
75
+ return null;
76
+ return `${resourceName}.png`;
77
+ }
78
+ /**
79
+ * 收集图层中所有需要解析的资源文件名
80
+ */
81
+ function collectImageRefs(layers) {
82
+ const refs = new Set();
83
+ for (const layer of layers) {
84
+ const name = layer.name || '';
85
+ const ltype = layer.type || '';
86
+ if (SKIP_LAYER_TYPES.has(ltype))
87
+ continue;
88
+ if (name.startsWith('参考图') || name.startsWith('fe'))
89
+ continue;
90
+ const filename = extractResourceFilename(name);
91
+ if (filename)
92
+ refs.add(filename);
93
+ }
94
+ return refs;
95
+ }
96
+ /**
97
+ * 批量解析图层中的图片资源 GUID(Unity)
98
+ */
99
+ function resolveLayerAssetsUnity(layers, assetsDir) {
100
+ if (!assetsDir || !fs.existsSync(assetsDir))
101
+ return {};
102
+ const imageRefs = collectImageRefs(layers);
103
+ const uuidMap = {};
104
+ const missingFiles = [];
105
+ for (const filename of imageRefs) {
106
+ const local = (0, assets_1.findLocalAsset)(filename, assetsDir);
107
+ if (!local) {
108
+ missingFiles.push(filename);
109
+ continue;
110
+ }
111
+ const metaPath = `${local}.meta`;
112
+ if (fs.existsSync(metaPath)) {
113
+ const info = (0, assets_1.readUnityMeta)(metaPath);
114
+ if (info) {
115
+ uuidMap[filename] = {
116
+ guid: info.guid,
117
+ sliced: info.sliced,
118
+ border: info.border
119
+ };
120
+ const slicedTag = info.sliced ? '九宫格' : '普通';
121
+ console.log(` [复用] ${filename} guid=${info.guid.slice(0, 8)}... ${slicedTag}`);
122
+ }
123
+ }
124
+ }
125
+ if (missingFiles.length > 0) {
126
+ console.error(`\n❌ 错误:以下 ${missingFiles.length} 个资源在本地未找到:`);
127
+ for (const f of missingFiles.sort()) {
128
+ console.error(` - ${f}`);
129
+ }
130
+ console.error(`\n请确保资源文件存在于目录:${assetsDir}`);
131
+ throw new Error(`缺失 ${missingFiles.length} 个资源文件`);
132
+ }
133
+ return uuidMap;
134
+ }
135
+ /**
136
+ * 批量解析图层中的图片资源 UUID(Cocos)
137
+ *
138
+ * 仅处理本地已存在的资源:
139
+ * - 有 .meta 文件 → 读取 UUID
140
+ * - 无 .meta 文件 → 生成 .meta 并分配新 UUID
141
+ */
142
+ function resolveLayerAssetsCocos(layers, assetsDir) {
143
+ if (!assetsDir || !fs.existsSync(assetsDir))
144
+ return {};
145
+ const imageRefs = collectImageRefs(layers);
146
+ const uuidMap = {};
147
+ const missingFiles = [];
148
+ for (const filename of imageRefs) {
149
+ const local = (0, assets_1.findLocalAsset)(filename, assetsDir);
150
+ if (!local) {
151
+ missingFiles.push(filename);
152
+ continue;
153
+ }
154
+ const metaPath = `${local}.meta`;
155
+ // 已有 .meta 文件
156
+ if (fs.existsSync(metaPath)) {
157
+ const uid = (0, assets_1.readCocosSpriteUuid)(metaPath);
158
+ if (uid) {
159
+ uuidMap[filename] = { uuid: uid, sliced: false };
160
+ console.log(` [复用] ${filename} uuid=${uid.slice(0, 8)}...`);
161
+ continue;
162
+ }
163
+ }
164
+ // 无 .meta 文件 → 生成新的 .meta
165
+ try {
166
+ const meta = (0, assets_1.makeCocosMeta)(local);
167
+ fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2), 'utf-8');
168
+ const subKeys = Object.keys(meta.subMetas);
169
+ const uid = meta.subMetas[subKeys[0]].uuid;
170
+ uuidMap[filename] = { uuid: uid, sliced: false };
171
+ console.log(` [生成meta] ${filename} uuid=${uid.slice(0, 8)}...`);
172
+ }
173
+ catch (e) {
174
+ console.warn(` [警告] 无法为 ${filename} 生成 meta:`, e);
175
+ }
176
+ }
177
+ if (missingFiles.length > 0) {
178
+ console.error(`\n❌ 错误:以下 ${missingFiles.length} 个资源在本地未找到:`);
179
+ for (const f of missingFiles.sort()) {
180
+ console.error(` - ${f}`);
181
+ }
182
+ console.error(`\n请确保资源文件存在于目录:${assetsDir}`);
183
+ throw new Error(`缺失 ${missingFiles.length} 个资源文件`);
184
+ }
185
+ return uuidMap;
186
+ }
187
+ /**
188
+ * 根据图层名称取出对应的资源信息
189
+ */
190
+ function getAssetInfoForLayer(layerName, uuidMap) {
191
+ const filename = extractResourceFilename(layerName);
192
+ if (!filename)
193
+ return null;
194
+ return uuidMap[filename] || null;
195
+ }
196
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 蓝湖 API 类型定义
3
+ */
4
+ export interface LanhuConfig {
5
+ cookie?: string;
6
+ baseUrl?: string;
7
+ timeout?: number;
8
+ }
9
+ export interface ParsedUrl {
10
+ team_id: string;
11
+ project_id: string;
12
+ doc_id?: string;
13
+ }
14
+ export interface Design {
15
+ index: number;
16
+ id: string;
17
+ name: string;
18
+ width: number;
19
+ height: number;
20
+ url: string;
21
+ update_time: string;
22
+ }
23
+ export interface DesignsResponse {
24
+ status: string;
25
+ message?: string;
26
+ project_name?: string;
27
+ total_designs?: number;
28
+ designs?: Design[];
29
+ }
30
+ export interface Layer {
31
+ name: string;
32
+ type: string;
33
+ width: number;
34
+ height: number;
35
+ x: number;
36
+ y: number;
37
+ path: string;
38
+ depth: number;
39
+ smart_object?: string;
40
+ text?: string;
41
+ text_style?: TextStyle;
42
+ opacity?: number;
43
+ }
44
+ export interface TextStyle {
45
+ fill_color?: string;
46
+ font_size?: number;
47
+ font_name?: string;
48
+ stroke_color?: string;
49
+ stroke_width?: number;
50
+ shadow_color?: string;
51
+ }
52
+ export interface LayersResponse {
53
+ design_id: string;
54
+ design_name: string;
55
+ version: string;
56
+ canvas_size: {
57
+ width: number;
58
+ height: number;
59
+ };
60
+ total_layers: number;
61
+ layers: Layer[];
62
+ }
63
+ export interface Slice {
64
+ name: string;
65
+ download_url: string;
66
+ size: string;
67
+ format: string;
68
+ layer_path: string;
69
+ }
70
+ export interface SlicesResponse {
71
+ design_id: string;
72
+ design_name: string;
73
+ version: string;
74
+ canvas_size: {
75
+ width: number;
76
+ height: number;
77
+ };
78
+ total_slices: number;
79
+ slices: Slice[];
80
+ }
81
+ export interface TreeFormatOptions {
82
+ engine?: 'unity' | 'cocos';
83
+ assetsDir?: string;
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 蓝湖 API 类型定义
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 工具函数
3
+ */
4
+ /**
5
+ * 标准化颜色格式为 #RRGGBB 或 #RRGGBBAA
6
+ */
7
+ export declare function normalizeColor(c: any): string;
8
+ /**
9
+ * 解析蓝湖 URL,提取 tid/pid/image_id 等参数
10
+ */
11
+ export declare function parseUrl(url: string, defaultTid?: string): {
12
+ team_id: string;
13
+ project_id: string;
14
+ doc_id?: string;
15
+ };
16
+ /**
17
+ * 将 PS 坐标系转换为游戏引擎 UI 坐标系(Cocos/Unity)
18
+ *
19
+ * PS 坐标系:左上角为原点 (0,0),x 向右,y 向下
20
+ * 引擎坐标系:父节点中心为原点 (0,0),x 向右,y 向上,锚点为元素中心 (0.5, 0.5)
21
+ */
22
+ export declare function convertToEnginePos(left: number, top: number, width: number, height: number, parentWidth: number, parentHeight: number): [number, number];
23
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAmC7C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAqDnH;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlB"}
package/dist/utils.js ADDED
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * 工具函数
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.normalizeColor = normalizeColor;
7
+ exports.parseUrl = parseUrl;
8
+ exports.convertToEnginePos = convertToEnginePos;
9
+ /**
10
+ * 标准化颜色格式为 #RRGGBB 或 #RRGGBBAA
11
+ */
12
+ function normalizeColor(c) {
13
+ if (typeof c === 'string') {
14
+ return c;
15
+ }
16
+ if (typeof c === 'object' && c !== null) {
17
+ let r = c.r ?? c.red ?? c.R ?? 0;
18
+ let g = c.g ?? c.green ?? c.G ?? 0;
19
+ let b = c.b ?? c.blue ?? c.B ?? 0;
20
+ let a = c.a ?? c.alpha ?? null;
21
+ // 如果是 0-1 范围的浮点数,转换为 0-255
22
+ if (typeof r === 'number' && r <= 1.0 && typeof g === 'number' && g <= 1.0) {
23
+ r = Math.round(r * 255);
24
+ g = Math.round(g * 255);
25
+ b = Math.round(b * 255);
26
+ if (a !== null && typeof a === 'number' && a <= 1.0) {
27
+ a = Math.round(a * 255);
28
+ }
29
+ }
30
+ else {
31
+ r = Math.round(r);
32
+ g = Math.round(g);
33
+ b = Math.round(b);
34
+ if (a !== null) {
35
+ a = Math.round(a);
36
+ }
37
+ }
38
+ if (a !== null && a < 255) {
39
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}${a.toString(16).padStart(2, '0')}`.toUpperCase();
40
+ }
41
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`.toUpperCase();
42
+ }
43
+ return String(c);
44
+ }
45
+ /**
46
+ * 解析蓝湖 URL,提取 tid/pid/image_id 等参数
47
+ */
48
+ function parseUrl(url, defaultTid) {
49
+ let queryString = url;
50
+ if (url.startsWith('http')) {
51
+ const urlObj = new URL(url);
52
+ const fragment = urlObj.hash;
53
+ if (!fragment) {
54
+ throw new Error('Invalid Lanhu URL: missing fragment part');
55
+ }
56
+ if (fragment.includes('?')) {
57
+ queryString = fragment.split('?')[1];
58
+ }
59
+ else {
60
+ queryString = fragment;
61
+ }
62
+ }
63
+ if (queryString.startsWith('?')) {
64
+ queryString = queryString.substring(1);
65
+ }
66
+ const params = {};
67
+ queryString.split('&').forEach(part => {
68
+ if (part.includes('=')) {
69
+ const [key, value] = part.split('=');
70
+ params[key] = value;
71
+ }
72
+ });
73
+ const teamId = params.tid;
74
+ const projectId = params.pid;
75
+ const docId = params.docId || params.image_id;
76
+ if (!projectId) {
77
+ throw new Error('URL parsing failed: missing required param pid');
78
+ }
79
+ if (!teamId) {
80
+ if (!defaultTid) {
81
+ throw new Error('URL 缺少 tid 参数,且未配置默认 TID');
82
+ }
83
+ return {
84
+ team_id: defaultTid,
85
+ project_id: projectId,
86
+ doc_id: docId
87
+ };
88
+ }
89
+ return {
90
+ team_id: teamId,
91
+ project_id: projectId,
92
+ doc_id: docId
93
+ };
94
+ }
95
+ /**
96
+ * 将 PS 坐标系转换为游戏引擎 UI 坐标系(Cocos/Unity)
97
+ *
98
+ * PS 坐标系:左上角为原点 (0,0),x 向右,y 向下
99
+ * 引擎坐标系:父节点中心为原点 (0,0),x 向右,y 向上,锚点为元素中心 (0.5, 0.5)
100
+ */
101
+ function convertToEnginePos(left, top, width, height, parentWidth, parentHeight) {
102
+ const x = Math.round((left + width / 2 - parentWidth / 2) * 10) / 10;
103
+ const y = Math.round((parentHeight / 2 - (top + height / 2)) * 10) / 10;
104
+ return [x, y];
105
+ }
106
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "lanhu-layer-tree",
3
+ "version": "1.0.0",
4
+ "description": "蓝湖设计图图层树提取工具 - 从蓝湖获取设计图列表、图层信息、切图资源等",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "lanhu": "dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "prepublishOnly": "npm run build",
13
+ "test": "echo \"Error: no test specified\" && exit 1"
14
+ },
15
+ "keywords": [
16
+ "lanhu",
17
+ "design",
18
+ "layer",
19
+ "ui",
20
+ "cocos",
21
+ "unity"
22
+ ],
23
+ "author": "",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "axios": "^1.6.8",
27
+ "chrome-cookies-secure": "^3.0.2",
28
+ "commander": "^12.0.0",
29
+ "dotenv": "^16.4.5"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.12.7",
33
+ "typescript": "^5.4.5"
34
+ },
35
+ "engines": {
36
+ "node": ">=16.0.0"
37
+ }
38
+ }