{"_id":"@duxs365/space-wasm-core","_rev":"3-4819bf3a9c9e328d91f82864310c82f7","name":"@duxs365/space-wasm-core","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@duxs365/space-wasm-core","version":"0.1.0","license":"MIT","_id":"@duxs365/space-wasm-core@0.1.0","maintainers":[{"name":"duxs365","email":"1347896725@qq.com"}],"dist":{"shasum":"d2e11fbf8f65d45a4e96d549cafee7867f07dd8f","tarball":"https://registry.npmjs.org/@duxs365/space-wasm-core/-/space-wasm-core-0.1.0.tgz","fileCount":2,"integrity":"sha512-3S4myhmYZHGyoGDWDzfy2LFuL2v8WpgcVV1oqMLL9lRb+jNseddVBWUueIEY7/SRdX4Bj6toXoKv9eFAKFkntA==","signatures":[{"sig":"MEYCIQC7Xc/Jo+omoyMwS8AGv9ZmtZMo+zLDME7G2veQ9Rv8sQIhAJMoczszGJoT0wpf74v0X+LpeKSklVpIckTEr/+DDQpB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14150},"main":"pkg/space_wasm_core.js","_from":"file:duxs365-space-wasm-core-0.1.0.tgz","types":"pkg/space_wasm_core.d.ts","scripts":{"build":"wasm-pack build --target web --release --no-opt","build:dev":"wasm-pack build --target web --dev --no-opt","postbuild":"node scripts/postbuild.mjs","build:node":"wasm-pack build --target nodejs --release --no-opt"},"_npmUser":{"name":"duxs365","email":"1347896725@qq.com"},"_resolved":"C:\\Users\\13478\\AppData\\Local\\Temp\\96911f9d2ce61e93e8e74e2c77a53a3a\\duxs365-space-wasm-core-0.1.0.tgz","_integrity":"sha512-3S4myhmYZHGyoGDWDzfy2LFuL2v8WpgcVV1oqMLL9lRb+jNseddVBWUueIEY7/SRdX4Bj6toXoKv9eFAKFkntA==","_npmVersion":"10.9.2","description":"High-performance SGP4 orbital propagator for 50K+ satellites in Web Worker (WASM)","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/space-wasm-core_0.1.0_1783938755239_0.8693311911451029","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@duxs365/space-wasm-core","version":"0.2.0","license":"MIT","_id":"@duxs365/space-wasm-core@0.2.0","maintainers":[{"name":"duxs365","email":"1347896725@qq.com"}],"dist":{"shasum":"911af8d395bd47246ac9bf0e2131cceb3707899c","tarball":"https://registry.npmjs.org/@duxs365/space-wasm-core/-/space-wasm-core-0.2.0.tgz","fileCount":7,"integrity":"sha512-voBTmdGhveIY7lTZdkzArCtmVDlfX07pv5KZBGDvOzIDEaewZ5YtiobNd8taN3+QedK87kMEYDytG1RXvXwLPg==","signatures":[{"sig":"MEUCIQDM+QNFAjW/J4KZsSBksAY/mppBCGGk3Z67EPMQQHm9zAIgdDw0kNkGJmWv+mq9pxY1kQ4Y07OYLXjXAHj634NN5OY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121505},"main":"pkg/space_wasm_core.js","_from":"file:duxs365-space-wasm-core-0.2.0.tgz","types":"pkg/space_wasm_core.d.ts","scripts":{"build":"wasm-pack build --target web --release --no-opt","build:dev":"wasm-pack build --target web --dev --no-opt","postbuild":"node scripts/postbuild.mjs","build:node":"wasm-pack build --target nodejs --release --no-opt"},"_npmUser":{"name":"duxs365","email":"1347896725@qq.com"},"_resolved":"C:\\Users\\13478\\AppData\\Local\\Temp\\7500390944a5bf1b9db16edb80bd55ec\\duxs365-space-wasm-core-0.2.0.tgz","_integrity":"sha512-voBTmdGhveIY7lTZdkzArCtmVDlfX07pv5KZBGDvOzIDEaewZ5YtiobNd8taN3+QedK87kMEYDytG1RXvXwLPg==","_npmVersion":"10.9.2","description":"High-performance SGP4 orbital propagator for 50K+ satellites in Web Worker (WASM)","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/space-wasm-core_0.2.0_1783939455672_0.40483569199445557","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@duxs365/space-wasm-core","version":"0.3.0","description":"High-performance SGP4 orbital propagator for 50K+ satellites in Web Worker (WASM)","license":"MIT","main":"pkg/space_wasm_core.js","types":"pkg/space_wasm_core.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"wasm-pack build --target web --release --no-opt","build:dev":"wasm-pack build --target web --dev --no-opt","build:node":"wasm-pack build --target nodejs --release --no-opt","postbuild":"node scripts/postbuild.mjs"},"_id":"@duxs365/space-wasm-core@0.3.0","_integrity":"sha512-HboNUI2y+L8HNrZNwMKCHosn4TgBNQICawR4ewxdodjndD+4l6e0OevspfYmEObErSXvRyQG47KegMfQROGbaQ==","_resolved":"C:\\Users\\13478\\AppData\\Local\\Temp\\d423b2929e2706fbfa258962beeeff16\\duxs365-space-wasm-core-0.3.0.tgz","_from":"file:duxs365-space-wasm-core-0.3.0.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-HboNUI2y+L8HNrZNwMKCHosn4TgBNQICawR4ewxdodjndD+4l6e0OevspfYmEObErSXvRyQG47KegMfQROGbaQ==","shasum":"765a3a2d442ade27eadc254d567b6772781bf833","tarball":"https://registry.npmjs.org/@duxs365/space-wasm-core/-/space-wasm-core-0.3.0.tgz","fileCount":7,"unpackedSize":121505,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCJbeJ3ySpDEKAuCOYz46DfxmYd0dn/cQ0+LXF5keuw1wIhANVyfJhAjaXB4wyAx/Sx/QBNoHW3/9WHyZLepXxMXPfX"}]},"_npmUser":{"name":"duxs365","email":"1347896725@qq.com"},"directories":{},"maintainers":[{"name":"duxs365","email":"1347896725@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/space-wasm-core_0.3.0_1783997684590_0.1349096356443087"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T10:32:35.103Z","modified":"2026-07-14T02:54:44.856Z","0.1.0":"2026-07-13T10:32:35.372Z","0.2.0":"2026-07-13T10:44:15.809Z","0.3.0":"2026-07-14T02:54:44.755Z"},"license":"MIT","description":"High-performance SGP4 orbital propagator for 50K+ satellites in Web Worker (WASM)","maintainers":[{"name":"duxs365","email":"1347896725@qq.com"}],"readme":"# @duxs365/space-wasm-core\r\n\r\n> 高性能 SGP4 轨道传播器，编译为 WebAssembly，专为在 Web Worker 中批量计算数万颗卫星位置而设计。\r\n\r\n## 特性\r\n\r\n- **SGP4 算法**：标准 NORAD 双行轨道根数（TLE）传播\r\n- **零分配热路径**：`add_satellite` 时预计算所有常量与缓冲区，运行时无堆分配\r\n- **TEME → ECEF**：内置 GMST 旋转，直接输出地固系坐标（米）\r\n- **f32 + Float32Array**：低带宽输出，配合 `SharedArrayBuffer` 双缓冲可支撑 50K+ 卫星实时渲染\r\n- **亚秒级历元精度**：使用 `timestamp_subsec_nanos()`，避免整数秒截断导致的坐标抖动\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @duxs365/space-wasm-core\r\n# 或\r\npnpm add @duxs365/space-wasm-core\r\n```\r\n\r\n> 需要支持 `WebAssembly.instantiateStreaming` 的现代浏览器。若配合多 Worker 使用 `SharedArrayBuffer`，页面需配置跨域隔离响应头：\r\n> ```\r\n> Cross-Origin-Opener-Policy: same-origin\r\n> Cross-Origin-Embedder-Policy: require-corp   # 或 credentialless\r\n> ```\r\n\r\n## 快速上手\r\n\r\n### 1. 在 Web Worker 中初始化并加载 TLE\r\n\r\n```ts\r\n// propagate.worker.ts\r\nimport init, { Sgp4Universe } from '@duxs365/space-wasm-core';\r\n\r\n// 1) 初始化 WASM（仅需一次）\r\nawait init();\r\n\r\n// 2) 创建实例，预分配容量（卫星数上限）\r\nconst universe = Sgp4Universe.new(50_000);\r\n\r\n// 3) 解析 TLE 并加入卫星\r\nuniverse.add_satellite(\r\n  '1 25544U 98067A   23123.45678901  .00012345  00000-0  12345-3 0  9999',\r\n  '2 25544  51.6400 200.0000 0001234  10.0000 350.0000 15.50000000123456'\r\n);\r\n```\r\n\r\n### 2. 计算某一时刻所有卫星的 ECEF 坐标\r\n\r\n```ts\r\n// 输出缓冲：每颗卫星 3 个 f32 (x, y, z)，单位：米\r\nconst satCount = universe.len();\r\nconst out = new Float32Array(satCount * 3);\r\n\r\n// unix_sec：自 1970-01-01 00:00:00 UTC 起的秒数（可带小数）\r\nconst unixSec = Date.now() / 1000;\r\n\r\nuniverse.compute_positions(unixSec, out);\r\n\r\n// out[3*i .. 3*i+3] 即第 i 颗卫星的 ECEF (x, y, z)\r\n```\r\n\r\n### 3. 配合 SharedArrayBuffer 多 Worker 并行\r\n\r\n主线程创建可共享缓冲，分发给多个 Worker 各算一部分卫星：\r\n\r\n```ts\r\n// 主线程\r\nconst SAB = new SharedArrayBuffer(50_000 * 3 * 4); // f32, 双缓冲可翻倍\r\nconst out = new Float32Array(SAB);\r\n// 将 out 的子视图传给各 Worker\r\n```\r\n\r\n```ts\r\n// Worker 内：把结果写回 SAB 视图\r\nconst view = new Float32Array(sab, byteOffset, mySatCount * 3);\r\nuniverse.compute_positions(unixSec, view);\r\n```\r\n\r\n## API\r\n\r\n### `Sgp4Universe`\r\n\r\n#### `new(max_capacity: number): Sgp4Universe`\r\n\r\n创建实例并预分配 `max_capacity` 颗卫星的存储空间。内部向量容量固定，后续添加卫星不会触发堆重分配。\r\n\r\n#### `add_satellite(line1: string, line2: string): void`\r\n\r\n解析一组 TLE 并加入实例。`line1` 以 `\"1 \"` 开头，`line2` 以 `\"2 \"` 开头，各 69 个 ASCII 字符。解析失败（校验和错误、字段非法等）会抛出异常。\r\n\r\n#### `compute_positions(unix_sec: number, out_view: Float32Array): void`\r\n\r\n计算 `unix_sec` 时刻所有卫星的 ECEF 坐标（米，f32），写入 `out_view`。每颗卫星占 3 个连续元素 `[x, y, z]`。传播失败的卫星对应位置被清零。要求 `out_view.length >= len() * 3`。\r\n\r\n#### `compute_step_teme(unix_sec: number, out_view: Float64Array): void`\r\n\r\n仅用于精度验证：输出原始 TEME 坐标（千米，f64），不做 GMST 旋转。可用作与其它 SGP4 实现的对比基准。\r\n\r\n#### `len(): number`\r\n\r\n当前已加载的卫星数。\r\n\r\n#### `capacity(): number`\r\n\r\n实例可容纳的最大卫星数（即 `new(max_capacity)` 的值）。\r\n\r\n#### `get_epoch_unix(index: number): number`\r\n\r\n返回第 `index` 颗卫星的历元 Unix 时间（秒，带小数）。越界返回 `NaN`。\r\n\r\n#### `calc_buffer_ptr(): number`\r\n\r\n返回内部计算缓冲区的指针，供零拷贝场景使用。通常无需直接调用。\r\n\r\n## 发布产物说明\r\n\r\n| 文件 | 说明 |\r\n|---|---|\r\n| `space_wasm_core.js` | 主入口，导出 `init` 与 `Sgp4Universe`；内部用 `import.meta.url` 定位 `.wasm` |\r\n| `space_wasm_core.d.ts` | JS 侧 TypeScript 类型声明 |\r\n| `space_wasm_core_bg.wasm` | 编译后的 WebAssembly 二进制 |\r\n| `space_wasm_core_bg.wasm.d.ts` | WASM 导出的类型声明 |\r\n\r\n> **注意**：不要单独使用 `.wasm` 文件。必须通过 `space_wasm_core.js` 的 `init()` 加载，否则无法正确解析模块导入与资源路径。\r\n\r\n## 构建（开发者）\r\n\r\n```bash\r\npnpm install\r\npnpm --filter @duxs365/space-wasm-core build\r\n```\r\n\r\n依赖 Rust 工具链与 `wasm-pack`，并需安装 `wasm32-unknown-unknown` target：\r\n```bash\r\nrustup target add wasm32-unknown-unknown\r\ncargo install wasm-pack\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}