@gmvjs/core 0.1.0 → 0.1.1

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 (60) hide show
  1. package/README.md +41 -35
  2. package/dist/archives/common.d.ts +9 -9
  3. package/dist/archives/common.js.map +1 -1
  4. package/dist/archives/folder.d.ts +1 -1
  5. package/dist/archives/folder.js +1 -1
  6. package/dist/archives/folder.js.map +1 -1
  7. package/dist/archives/zip.js.map +1 -1
  8. package/dist/binary.d.ts +7 -7
  9. package/dist/binary.js.map +1 -1
  10. package/dist/builtin-en.js.map +1 -1
  11. package/dist/builtin.js +1 -1
  12. package/dist/builtin.js.map +1 -1
  13. package/dist/codecs/zlib.d.ts +2 -2
  14. package/dist/codecs/zlib.js.map +1 -1
  15. package/dist/diagnostics.js.map +1 -1
  16. package/dist/geometry.d.ts +5 -5
  17. package/dist/geometry.js.map +1 -1
  18. package/dist/i18n.d.ts +4 -4
  19. package/dist/i18n.js.map +1 -1
  20. package/dist/images/bc45.d.ts +1 -1
  21. package/dist/images/bc45.js.map +1 -1
  22. package/dist/images/bc7.d.ts +1 -1
  23. package/dist/images/bc7.js.map +1 -1
  24. package/dist/images/dds.d.ts +1 -1
  25. package/dist/images/dds.js.map +1 -1
  26. package/dist/images/pcx.js.map +1 -1
  27. package/dist/images/tga.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/levelbuilder.d.ts +3 -3
  31. package/dist/levelbuilder.js +1 -1
  32. package/dist/levelbuilder.js.map +1 -1
  33. package/dist/math.d.ts +6 -6
  34. package/dist/math.js.map +1 -1
  35. package/dist/normals.d.ts +5 -5
  36. package/dist/normals.js.map +1 -1
  37. package/dist/plugin.d.ts +57 -57
  38. package/dist/plugin.js.map +1 -1
  39. package/dist/registry.d.ts +14 -14
  40. package/dist/registry.js +13 -13
  41. package/dist/registry.js.map +1 -1
  42. package/dist/scene.d.ts +14 -14
  43. package/dist/scene.js.map +1 -1
  44. package/dist/session.d.ts +34 -34
  45. package/dist/session.js +33 -33
  46. package/dist/session.js.map +1 -1
  47. package/dist/skeleton.d.ts +3 -3
  48. package/dist/skeleton.js.map +1 -1
  49. package/dist/surface.d.ts +4 -4
  50. package/dist/surface.js.map +1 -1
  51. package/dist/textures.d.ts +12 -12
  52. package/dist/textures.js +9 -9
  53. package/dist/textures.js.map +1 -1
  54. package/dist/types.d.ts +103 -103
  55. package/dist/types.js.map +1 -1
  56. package/dist/writers/dds.d.ts +1 -1
  57. package/dist/writers/dds.js.map +1 -1
  58. package/dist/writers/obj.js.map +1 -1
  59. package/dist/writers/zip.js.map +1 -1
  60. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"obj.js","sources":["../../src/writers/obj.ts"],"sourcesContent":["// Выгрузка в Wavefront OBJ + MTL (Blender, 3ds Max, любой 3D-редактор): геометрия в bind-позе, Y вверх, правосторонняя система;\n// текстуры — DDS рядом (исходный DDS копируется, остальное — без сжатия). Скрытые меши и экземпляры не выгружаются.\nimport type { ExportContext, ExportResult, ExportValues } from '../plugin';\nimport { visibleIndices } from '../scene';\nimport type { Model } from '../types';\nimport { encodeDdsRgba } from './dds';\n\nconst clean = (s: string) => s.toLowerCase().replace(/\\.[a-z0-9]+$/, '').replace(/[^a-z0-9_]+/g, '_').replace(/^_+|_+$/g, '') || 'tex';\n\nexport async function exportObj(model: Model, v: ExportValues, ctx: ExportContext): Promise<ExportResult> {\n const name = clean(String(v.name || ctx.baseName)), scale = +(v.scale ?? 1) || 1, files = new Map<string, Uint8Array>(), enc = new TextEncoder();\n const sk = model.skeleton;\n if (sk) sk.pose(null, 0, false);\n const lines: string[] = [`# gmv: ${ctx.preset.title}`, `mtllib ${name}.mtl`], mtl: string[] = [], texOf = new Map<string, string>();\n let base = 1, tris = 0, meshes = 0, copied = 0, encoded = 0;\n for (let i = 0; i < model.meshes.length; i++) {\n if (ctx.hidden.has(i)) continue;\n const m = model.meshes[i]!, idx = visibleIndices(model, i);\n if (idx.length < 3) continue;\n // материал на текстуру\n const key = m.texture || `mesh_${i}`;\n let mat = texOf.get(key);\n if (!mat) {\n mat = `${clean(key.split(/[\\\\/]/).pop() ?? key)}_${texOf.size}`;\n texOf.set(key, mat);\n mtl.push(`newmtl ${mat}`, 'Kd 1 1 1');\n const t = await ctx.texture(i).catch(() => null);\n const file = `textures/${mat}.dds`;\n if (t?.dds && t.dds.length > 128) { files.set(file, t.dds); copied++; mtl.push(`map_Kd ${file}`); }\n else if (t?.image?.rgba) { files.set(file, encodeDdsRgba({ width: t.image.width, height: t.image.height, rgba: t.image.rgba })); encoded++; mtl.push(`map_Kd ${file}`); }\n mtl.push('');\n }\n lines.push(`o ${clean(m.name || 'mesh')}_${i}`, `usemtl ${mat}`);\n const n = m.vertexCount;\n for (let k = 0; k < n; k++) {\n let x = m.pos[k * 3]!, y = m.pos[k * 3 + 1]!, z = m.pos[k * 3 + 2]!, a = m.nor[k * 3]!, b = m.nor[k * 3 + 1]!, c = m.nor[k * 3 + 2]!;\n if (sk && m.skinned) {\n let px = 0, py = 0, pz = 0, na = 0, nb = 0, nc = 0, ws = 0;\n for (let j = 0; j < 4; j++) {\n const w = m.weight[k * 4 + j]!;\n if (!w) continue;\n const M = sk.skinV[m.bone[k * 4 + j]!]!;\n ws += w;\n px += w * (x * M[0]! + y * M[4]! + z * M[8]! + M[12]!); py += w * (x * M[1]! + y * M[5]! + z * M[9]! + M[13]!); pz += w * (x * M[2]! + y * M[6]! + z * M[10]! + M[14]!);\n na += w * (a * M[0]! + b * M[4]! + c * M[8]!); nb += w * (a * M[1]! + b * M[5]! + c * M[9]!); nc += w * (a * M[2]! + b * M[6]! + c * M[10]!);\n }\n if (ws) { x = px; y = py; z = pz; a = na; b = nb; c = nc; }\n }\n if (model.defaultZUp) { [y, z] = [z, -y]; [b, c] = [c, -b]; }\n if (model.flipZ) { z = -z; c = -c; }\n lines.push(`v ${(x * scale).toFixed(5)} ${(y * scale).toFixed(5)} ${(z * scale).toFixed(5)}`);\n lines.push(`vt ${m.uv[k * 2]!.toFixed(5)} ${(1 - m.uv[k * 2 + 1]!).toFixed(5)}`);\n const l = Math.hypot(a, b, c) || 1;\n lines.push(`vn ${(a / l).toFixed(4)} ${(b / l).toFixed(4)} ${(c / l).toFixed(4)}`);\n }\n for (let t = 0; t + 2 < idx.length; t += 3) {\n // отражённая (левая) система — обход разворачивается\n const p = [idx[t]!, model.flipZ ? idx[t + 2]! : idx[t + 1]!, model.flipZ ? idx[t + 1]! : idx[t + 2]!].map((q) => q + base);\n lines.push(`f ${p.map((q) => `${q}/${q}/${q}`).join(' ')}`);\n }\n base += n;\n tris += idx.length / 3;\n meshes++;\n }\n files.set(`${name}.obj`, enc.encode(lines.join('\\n') + '\\n'));\n files.set(`${name}.mtl`, enc.encode(mtl.join('\\n')));\n return {\n files, name: `${name}_obj`,\n report: [\n `OBJ: ${meshes} мешей, ${tris} треугольников, ${texOf.size} материалов`,\n `Текстуры: ${copied} DDS скопировано, ${encoded} перекодировано в DDS без сжатия`,\n ...(sk ? ['Скелетная модель выгружена в bind-позе (кости и анимации OBJ не хранит).'] : []),\n ...(model.flipZ ? ['Координаты переведены в правостороннюю систему (Z отражён, обход граней развёрнут).'] : []),\n ],\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"obj.js","sources":["../../src/writers/obj.ts"],"sourcesContent":["// Export to Wavefront OBJ + MTL (Blender, 3ds Max, any 3D editor): geometry in the bind pose, Y up, right-handed;\n// textures as DDS alongside (a source DDS is copied, the rest is written uncompressed). Hidden meshes and instances are not exported.\nimport type { ExportContext, ExportResult, ExportValues } from '../plugin';\nimport { visibleIndices } from '../scene';\nimport type { Model } from '../types';\nimport { encodeDdsRgba } from './dds';\n\nconst clean = (s: string) => s.toLowerCase().replace(/\\.[a-z0-9]+$/, '').replace(/[^a-z0-9_]+/g, '_').replace(/^_+|_+$/g, '') || 'tex';\n\nexport async function exportObj(model: Model, v: ExportValues, ctx: ExportContext): Promise<ExportResult> {\n const name = clean(String(v.name || ctx.baseName)), scale = +(v.scale ?? 1) || 1, files = new Map<string, Uint8Array>(), enc = new TextEncoder();\n const sk = model.skeleton;\n if (sk) sk.pose(null, 0, false);\n const lines: string[] = [`# gmv: ${ctx.preset.title}`, `mtllib ${name}.mtl`], mtl: string[] = [], texOf = new Map<string, string>();\n let base = 1, tris = 0, meshes = 0, copied = 0, encoded = 0;\n for (let i = 0; i < model.meshes.length; i++) {\n if (ctx.hidden.has(i)) continue;\n const m = model.meshes[i]!, idx = visibleIndices(model, i);\n if (idx.length < 3) continue;\n // one material per texture\n const key = m.texture || `mesh_${i}`;\n let mat = texOf.get(key);\n if (!mat) {\n mat = `${clean(key.split(/[\\\\/]/).pop() ?? key)}_${texOf.size}`;\n texOf.set(key, mat);\n mtl.push(`newmtl ${mat}`, 'Kd 1 1 1');\n const t = await ctx.texture(i).catch(() => null);\n const file = `textures/${mat}.dds`;\n if (t?.dds && t.dds.length > 128) { files.set(file, t.dds); copied++; mtl.push(`map_Kd ${file}`); }\n else if (t?.image?.rgba) { files.set(file, encodeDdsRgba({ width: t.image.width, height: t.image.height, rgba: t.image.rgba })); encoded++; mtl.push(`map_Kd ${file}`); }\n mtl.push('');\n }\n lines.push(`o ${clean(m.name || 'mesh')}_${i}`, `usemtl ${mat}`);\n const n = m.vertexCount;\n for (let k = 0; k < n; k++) {\n let x = m.pos[k * 3]!, y = m.pos[k * 3 + 1]!, z = m.pos[k * 3 + 2]!, a = m.nor[k * 3]!, b = m.nor[k * 3 + 1]!, c = m.nor[k * 3 + 2]!;\n if (sk && m.skinned) {\n let px = 0, py = 0, pz = 0, na = 0, nb = 0, nc = 0, ws = 0;\n for (let j = 0; j < 4; j++) {\n const w = m.weight[k * 4 + j]!;\n if (!w) continue;\n const M = sk.skinV[m.bone[k * 4 + j]!]!;\n ws += w;\n px += w * (x * M[0]! + y * M[4]! + z * M[8]! + M[12]!); py += w * (x * M[1]! + y * M[5]! + z * M[9]! + M[13]!); pz += w * (x * M[2]! + y * M[6]! + z * M[10]! + M[14]!);\n na += w * (a * M[0]! + b * M[4]! + c * M[8]!); nb += w * (a * M[1]! + b * M[5]! + c * M[9]!); nc += w * (a * M[2]! + b * M[6]! + c * M[10]!);\n }\n if (ws) { x = px; y = py; z = pz; a = na; b = nb; c = nc; }\n }\n if (model.defaultZUp) { [y, z] = [z, -y]; [b, c] = [c, -b]; }\n if (model.flipZ) { z = -z; c = -c; }\n lines.push(`v ${(x * scale).toFixed(5)} ${(y * scale).toFixed(5)} ${(z * scale).toFixed(5)}`);\n lines.push(`vt ${m.uv[k * 2]!.toFixed(5)} ${(1 - m.uv[k * 2 + 1]!).toFixed(5)}`);\n const l = Math.hypot(a, b, c) || 1;\n lines.push(`vn ${(a / l).toFixed(4)} ${(b / l).toFixed(4)} ${(c / l).toFixed(4)}`);\n }\n for (let t = 0; t + 2 < idx.length; t += 3) {\n // mirrored (left-handed) system: winding is reversed\n const p = [idx[t]!, model.flipZ ? idx[t + 2]! : idx[t + 1]!, model.flipZ ? idx[t + 1]! : idx[t + 2]!].map((q) => q + base);\n lines.push(`f ${p.map((q) => `${q}/${q}/${q}`).join(' ')}`);\n }\n base += n;\n tris += idx.length / 3;\n meshes++;\n }\n files.set(`${name}.obj`, enc.encode(lines.join('\\n') + '\\n'));\n files.set(`${name}.mtl`, enc.encode(mtl.join('\\n')));\n return {\n files, name: `${name}_obj`,\n report: [\n `OBJ: ${meshes} мешей, ${tris} треугольников, ${texOf.size} материалов`,\n `Текстуры: ${copied} DDS скопировано, ${encoded} перекодировано в DDS без сжатия`,\n ...(sk ? ['Скелетная модель выгружена в bind-позе (кости и анимации OBJ не хранит).'] : []),\n ...(model.flipZ ? ['Координаты переведены в правостороннюю систему (Z отражён, обход граней развёрнут).'] : []),\n ],\n };\n}\n"],"names":[],"mappings":";;AAOA,MAAM,QAAQ,CAAC,MAAc,EAAE,YAAA,EAAc,QAAQ,gBAAgB,EAAE,EAAE,QAAQ,gBAAgB,GAAG,EAAE,QAAQ,YAAY,EAAE,KAAK;AAEjI,eAAsB,UAAU,OAAc,GAAiB,KAA2C;AACxG,QAAM,OAAO,MAAM,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,GAAG,QAAQ,EAAE,EAAE,SAAS,MAAM,GAAG,4BAAY,IAAA,GAA2B,MAAM,IAAI,YAAA;AACnI,QAAM,KAAK,MAAM;AACjB,MAAI,GAAI,IAAG,KAAK,MAAM,GAAG,KAAK;AAC9B,QAAM,QAAkB,CAAC,UAAU,IAAI,OAAO,KAAK,IAAI,UAAU,IAAI,MAAM,GAAG,MAAgB,CAAA,GAAI,4BAAY,IAAA;AAC9G,MAAI,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU;AAC1D,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,QAAQ,KAAK;AAC5C,QAAI,IAAI,OAAO,IAAI,CAAC,EAAG;AACvB,UAAM,IAAI,MAAM,OAAO,CAAC,GAAI,MAAM,eAAe,OAAO,CAAC;AACzD,QAAI,IAAI,SAAS,EAAG;AAEpB,UAAM,MAAM,EAAE,WAAW,QAAQ,CAAC;AAClC,QAAI,MAAM,MAAM,IAAI,GAAG;AACvB,QAAI,CAAC,KAAK;AACR,YAAM,GAAG,MAAM,IAAI,MAAM,OAAO,EAAE,IAAA,KAAS,GAAG,CAAC,IAAI,MAAM,IAAI;AAC7D,YAAM,IAAI,KAAK,GAAG;AAClB,UAAI,KAAK,UAAU,GAAG,IAAI,UAAU;AACpC,YAAM,IAAI,MAAM,IAAI,QAAQ,CAAC,EAAE,MAAM,MAAM,IAAI;AAC/C,YAAM,OAAO,YAAY,GAAG;AAC5B,UAAI,GAAG,OAAO,EAAE,IAAI,SAAS,KAAK;AAAE,cAAM,IAAI,MAAM,EAAE,GAAG;AAAG;AAAU,YAAI,KAAK,UAAU,IAAI,EAAE;AAAA,MAAG,WACzF,GAAG,OAAO,MAAM;AAAE,cAAM,IAAI,MAAM,cAAc,EAAE,OAAO,EAAE,MAAM,OAAO,QAAQ,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,KAAA,CAAM,CAAC;AAAG;AAAW,YAAI,KAAK,UAAU,IAAI,EAAE;AAAA,MAAG;AACxK,UAAI,KAAK,EAAE;AAAA,IACb;AACA,UAAM,KAAK,KAAK,MAAM,EAAE,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,EAAE;AAC/D,UAAM,IAAI,EAAE;AACZ,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAI,IAAI,EAAE,IAAI,IAAI,CAAC,GAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAI,IAAI,EAAE,IAAI,IAAI,CAAC,GAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;AAClI,UAAI,MAAM,EAAE,SAAS;AACnB,YAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AACzD,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;AAC5B,cAAI,CAAC,EAAG;AACR,gBAAM,IAAI,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,CAAE;AACrC,gBAAM;AACN,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,EAAE,EAAE;AAAK,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,EAAE,EAAE;AAAK,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,EAAE,IAAK,EAAE,EAAE;AACpK,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC;AAAK,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC;AAAK,gBAAM,KAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,CAAC,IAAK,IAAI,EAAE,EAAE;AAAA,QAC3I;AACA,YAAI,IAAI;AAAE,cAAI;AAAI,cAAI;AAAI,cAAI;AAAI,cAAI;AAAI,cAAI;AAAI,cAAI;AAAA,QAAI;AAAA,MAC5D;AACA,UAAI,MAAM,YAAY;AAAE,SAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAG,SAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,MAAG;AAC5D,UAAI,MAAM,OAAO;AAAE,YAAI,CAAC;AAAG,YAAI,CAAC;AAAA,MAAG;AACnC,YAAM,KAAK,MAAM,IAAI,OAAO,QAAQ,CAAC,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,CAAC,EAAE;AAC5F,YAAM,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC,EAAG,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,GAAI,QAAQ,CAAC,CAAC,EAAE;AAC/E,YAAM,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC,KAAK;AACjC,YAAM,KAAK,OAAO,IAAI,GAAG,QAAQ,CAAC,CAAC,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE;AAAA,IACnF;AACA,aAAS,IAAI,GAAG,IAAI,IAAI,IAAI,QAAQ,KAAK,GAAG;AAE1C,YAAM,IAAI,CAAC,IAAI,CAAC,GAAI,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAK,IAAI,IAAI,CAAC,GAAI,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAK,IAAI,IAAI,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;AACzH,YAAM,KAAK,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE;AAAA,IAC5D;AACA,YAAQ;AACR,YAAQ,IAAI,SAAS;AACrB;AAAA,EACF;AACA,QAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,OAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;AAC5D,QAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC;AACnD,SAAO;AAAA,IACL;AAAA,IAAO,MAAM,GAAG,IAAI;AAAA,IACpB,QAAQ;AAAA,MACN,QAAQ,MAAM,WAAW,IAAI,mBAAmB,MAAM,IAAI;AAAA,MAC1D,aAAa,MAAM,qBAAqB,OAAO;AAAA,MAC/C,GAAI,KAAK,CAAC,0EAA0E,IAAI,CAAA;AAAA,MACxF,GAAI,MAAM,QAAQ,CAAC,qFAAqF,IAAI,CAAA;AAAA,IAAC;AAAA,EAC/G;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip.js","sources":["../../src/writers/zip.ts"],"sourcesContent":["// ZIP без сжатия (store) для выгрузки набора файлов одним архивом. Пути — через «/», имена в UTF-8 (флаг 0x800).\nconst CRC = (() => { const t = new Uint32Array(256); for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; t[n] = c >>> 0; } return t; })();\nexport function crc32(u: Uint8Array): number { let c = 0xffffffff; for (let i = 0; i < u.length; i++) c = CRC[(c ^ u[i]!) & 0xff]! ^ (c >>> 8); return (c ^ 0xffffffff) >>> 0; }\n\nexport function writeZip(files: Map<string, Uint8Array> | Array<[string, Uint8Array]>): Uint8Array {\n const list = [...files], enc = new TextEncoder(), parts: Uint8Array[] = [], central: Uint8Array[] = [];\n let off = 0;\n const now = new Date(), time = (now.getHours() << 11) | (now.getMinutes() << 5) | (now.getSeconds() >> 1), date = ((now.getFullYear() - 1980) << 9) | ((now.getMonth() + 1) << 5) | now.getDate();\n for (const [path, data] of list) {\n const name = enc.encode(path.replace(/\\\\/g, '/')), crc = crc32(data);\n const lh = new Uint8Array(30 + name.length), l = new DataView(lh.buffer);\n l.setUint32(0, 0x04034b50, true); l.setUint16(4, 20, true); l.setUint16(6, 0x800, true); l.setUint16(8, 0, true);\n l.setUint16(10, time, true); l.setUint16(12, date, true); l.setUint32(14, crc, true); l.setUint32(18, data.length, true); l.setUint32(22, data.length, true);\n l.setUint16(26, name.length, true); lh.set(name, 30);\n const ch = new Uint8Array(46 + name.length), c = new DataView(ch.buffer);\n c.setUint32(0, 0x02014b50, true); c.setUint16(4, 20, true); c.setUint16(6, 20, true); c.setUint16(8, 0x800, true); c.setUint16(10, 0, true);\n c.setUint16(12, time, true); c.setUint16(14, date, true); c.setUint32(16, crc, true); c.setUint32(20, data.length, true); c.setUint32(24, data.length, true);\n c.setUint16(28, name.length, true); c.setUint32(42, off, true); ch.set(name, 46);\n parts.push(lh, data); central.push(ch);\n off += lh.length + data.length;\n }\n const cdSize = central.reduce((a, x) => a + x.length, 0), end = new Uint8Array(22), e = new DataView(end.buffer);\n e.setUint32(0, 0x06054b50, true); e.setUint16(8, list.length, true); e.setUint16(10, list.length, true); e.setUint32(12, cdSize, true); e.setUint32(16, off, true);\n const out = new Uint8Array(off + cdSize + 22);\n let p = 0;\n for (const x of [...parts, ...central, end]) { out.set(x, p); p += x.length; }\n return out;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zip.js","sources":["../../src/writers/zip.ts"],"sourcesContent":["// Uncompressed ZIP (store) for exporting a set of files as one archive. Paths use \"/\", names are UTF-8 (flag 0x800).\nconst CRC = (() => { const t = new Uint32Array(256); for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1; t[n] = c >>> 0; } return t; })();\nexport function crc32(u: Uint8Array): number { let c = 0xffffffff; for (let i = 0; i < u.length; i++) c = CRC[(c ^ u[i]!) & 0xff]! ^ (c >>> 8); return (c ^ 0xffffffff) >>> 0; }\n\nexport function writeZip(files: Map<string, Uint8Array> | Array<[string, Uint8Array]>): Uint8Array {\n const list = [...files], enc = new TextEncoder(), parts: Uint8Array[] = [], central: Uint8Array[] = [];\n let off = 0;\n const now = new Date(), time = (now.getHours() << 11) | (now.getMinutes() << 5) | (now.getSeconds() >> 1), date = ((now.getFullYear() - 1980) << 9) | ((now.getMonth() + 1) << 5) | now.getDate();\n for (const [path, data] of list) {\n const name = enc.encode(path.replace(/\\\\/g, '/')), crc = crc32(data);\n const lh = new Uint8Array(30 + name.length), l = new DataView(lh.buffer);\n l.setUint32(0, 0x04034b50, true); l.setUint16(4, 20, true); l.setUint16(6, 0x800, true); l.setUint16(8, 0, true);\n l.setUint16(10, time, true); l.setUint16(12, date, true); l.setUint32(14, crc, true); l.setUint32(18, data.length, true); l.setUint32(22, data.length, true);\n l.setUint16(26, name.length, true); lh.set(name, 30);\n const ch = new Uint8Array(46 + name.length), c = new DataView(ch.buffer);\n c.setUint32(0, 0x02014b50, true); c.setUint16(4, 20, true); c.setUint16(6, 20, true); c.setUint16(8, 0x800, true); c.setUint16(10, 0, true);\n c.setUint16(12, time, true); c.setUint16(14, date, true); c.setUint32(16, crc, true); c.setUint32(20, data.length, true); c.setUint32(24, data.length, true);\n c.setUint16(28, name.length, true); c.setUint32(42, off, true); ch.set(name, 46);\n parts.push(lh, data); central.push(ch);\n off += lh.length + data.length;\n }\n const cdSize = central.reduce((a, x) => a + x.length, 0), end = new Uint8Array(22), e = new DataView(end.buffer);\n e.setUint32(0, 0x06054b50, true); e.setUint16(8, list.length, true); e.setUint16(10, list.length, true); e.setUint32(12, cdSize, true); e.setUint32(16, off, true);\n const out = new Uint8Array(off + cdSize + 22);\n let p = 0;\n for (const x of [...parts, ...central, end]) { out.set(x, p); p += x.length; }\n return out;\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gmvjs/core",
3
- "version": "0.1.0",
4
- "description": "gmv: ядро — API плагинов, типы модели, реестр, сессия, архивы, текстуры",
3
+ "version": "0.1.1",
4
+ "description": "gmv: the core: plugin API, model types, registry, session, archives, textures",
5
5
  "keywords": [
6
6
  "gmv",
7
7
  "3d",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@gmvjs/test-utils": "^0.1.0",
51
- "@gmvjs/codecs": "^0.1.0"
51
+ "@gmvjs/codecs": "^0.1.1"
52
52
  },
53
53
  "publishConfig": {
54
54
  "access": "public"